Merge tag 'drm-xe-next-fixes-2024-03-04' of ssh://gitlab.freedesktop.org/drm/xe/kerne...
authorDave Airlie <airlied@redhat.com>
Fri, 8 Mar 2024 02:14:54 +0000 (12:14 +1000)
committerDave Airlie <airlied@redhat.com>
Fri, 8 Mar 2024 02:16:21 +0000 (12:16 +1000)
Driver Changes:

- Fix kunit link failure with built-in xe
- Fix one more 32-bit build failure with ARM compiler
- Fix initialization order of topology struct
- Cleanup unused fields in struct xe_vm
- Fix xe_vm leak when handling page fault on a VM not in fault mode
- Drop use of "grouped target" feature in Makefile since that's
  only available in make >= 4.3

Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Lucas De Marchi <lucas.demarchi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/kaypobelrl7u7rtnu6hg5czs3vptbhs4rp24vnwuo2ajoxysto@l5u7377hz4es
drivers/gpu/drm/xe/Kconfig
drivers/gpu/drm/xe/Kconfig.debug
drivers/gpu/drm/xe/Makefile
drivers/gpu/drm/xe/xe_gt.c
drivers/gpu/drm/xe/xe_gt_pagefault.c
drivers/gpu/drm/xe/xe_migrate.c
drivers/gpu/drm/xe/xe_vm_types.h

index 0e31dfb8989e929ba2786c56e26e2c3edf8d8d0c..1a556d087e63c30f62e8afe355ece1913b0b7741 100644 (file)
@@ -10,6 +10,7 @@ config DRM_XE
        select DRM_BUDDY
        select DRM_EXEC
        select DRM_KMS_HELPER
+       select DRM_KUNIT_TEST_HELPERS if DRM_XE_KUNIT_TEST != n
        select DRM_PANEL
        select DRM_SUBALLOC_HELPER
        select DRM_DISPLAY_DP_HELPER
index 549065f57a78e63ffcf52bc01c1cf25ebae52120..df02e5d17d26fb9b16c69b8f4c4aef38de2387fa 100644 (file)
@@ -76,7 +76,6 @@ config DRM_XE_KUNIT_TEST
        depends on DRM_XE && KUNIT && DEBUG_FS
        default KUNIT_ALL_TESTS
        select DRM_EXPORT_FOR_TESTS if m
-       select DRM_KUNIT_TEST_HELPERS
        help
          Choose this option to allow the driver to perform selftests under
          the kunit framework
index c531210695db0a775320d33da59efbcbfcca1245..5a428ca00f10f23b72c1b700a88e0da0d4de78d4 100644 (file)
@@ -42,7 +42,8 @@ generated_oob := $(obj)/generated/xe_wa_oob.c $(obj)/generated/xe_wa_oob.h
 quiet_cmd_wa_oob = GEN     $(notdir $(generated_oob))
       cmd_wa_oob = mkdir -p $(@D); $^ $(generated_oob)
 
-$(generated_oob) &: $(obj)/xe_gen_wa_oob $(srctree)/$(src)/xe_wa_oob.rules
+$(obj)/generated/%_wa_oob.c $(obj)/generated/%_wa_oob.h: $(obj)/xe_gen_wa_oob \
+                $(srctree)/$(src)/xe_wa_oob.rules
        $(call cmd,wa_oob)
 
 uses_generated_oob := \
@@ -158,8 +159,10 @@ xe-$(CONFIG_PCI_IOV) += \
        xe_lmtt_2l.o \
        xe_lmtt_ml.o
 
-xe-$(CONFIG_DRM_XE_KUNIT_TEST) += \
-       tests/xe_kunit_helpers.o
+# include helpers for tests even when XE is built-in
+ifdef CONFIG_DRM_XE_KUNIT_TEST
+xe-y += tests/xe_kunit_helpers.o
+endif
 
 # i915 Display compat #defines and #includes
 subdir-ccflags-$(CONFIG_DRM_XE_DISPLAY) += \
index b75f0bf0a9a10f456d35b0ab8a563d524b94e560..a0afe1ba6dd5ce2cb6c3dfd53b60874ebb9c747c 100644 (file)
@@ -314,8 +314,6 @@ int xe_gt_init_early(struct xe_gt *gt)
        if (err)
                return err;
 
-       xe_gt_topology_init(gt);
-
        err = xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
        if (err)
                return err;
@@ -502,6 +500,7 @@ int xe_gt_init_hwconfig(struct xe_gt *gt)
        if (err)
                goto out;
 
+       xe_gt_topology_init(gt);
        xe_gt_mcr_init(gt);
        xe_pat_init(gt);
 
index c26e4fcca01e6555a6b679e95f1e6d29e1b29afd..73c535193a984b385f65986c9b1c0d3b79f1f5b4 100644 (file)
@@ -146,10 +146,12 @@ static int handle_pagefault(struct xe_gt *gt, struct pagefault *pf)
        /* ASID to VM */
        mutex_lock(&xe->usm.lock);
        vm = xa_load(&xe->usm.asid_to_vm, pf->asid);
-       if (vm)
+       if (vm && xe_vm_in_fault_mode(vm))
                xe_vm_get(vm);
+       else
+               vm = NULL;
        mutex_unlock(&xe->usm.lock);
-       if (!vm || !xe_vm_in_fault_mode(vm))
+       if (!vm)
                return -EINVAL;
 
 retry_userptr:
index a66fdf2d299122d73af5072ee439df172f3cd876..ee1bb938c493487415445cd41c8b771080464522 100644 (file)
@@ -462,7 +462,7 @@ static u32 pte_update_size(struct xe_migrate *m,
        } else {
                /* Clip L0 to available size */
                u64 size = min(*L0, (u64)avail_pts * SZ_2M);
-               u64 num_4k_pages = DIV_ROUND_UP(size, XE_PAGE_SIZE);
+               u32 num_4k_pages = (size + XE_PAGE_SIZE - 1) >> XE_PTE_SHIFT;
 
                *L0 = size;
                *L0_ofs = xe_migrate_vm_addr(pt_ofs, 0);
index 7d4f810f9c0465aa0b61f2b8144ebf080cf57590..292f8cadb40fde7c4123663cbf9ba991d8795855 100644 (file)
@@ -189,30 +189,6 @@ struct xe_vm {
         */
        struct xe_range_fence_tree rftree[XE_MAX_TILES_PER_DEVICE];
 
-       /** @async_ops: async VM operations (bind / unbinds) */
-       struct {
-               /** @list: list of pending async VM ops */
-               struct list_head pending;
-               /** @work: worker to execute async VM ops */
-               struct work_struct work;
-               /** @lock: protects list of pending async VM ops and fences */
-               spinlock_t lock;
-               /** @fence: fence state */
-               struct {
-                       /** @context: context of async fence */
-                       u64 context;
-                       /** @seqno: seqno of async fence */
-                       u32 seqno;
-               } fence;
-               /** @error: error state for async VM ops */
-               int error;
-               /**
-                * @munmap_rebind_inflight: an munmap style VM bind is in the
-                * middle of a set of ops which requires a rebind at the end.
-                */
-               bool munmap_rebind_inflight;
-       } async_ops;
-
        const struct xe_pt_ops *pt_ops;
 
        /** @userptr: user pointer state */