mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
Driver Changes:
- Fix PTE index in xe_vm_populate_pgtable for chunked binds (Matt Brost) - Wait on external BO kernel fences in exec IOCTL (Matt Brost) - Remove duplicate include (Anas Khan) - Free madvise VMA array on L2 flush failure (Guangshuo Li) - Stub notifier_lock helpers when DRM_GPUSVM=n (Shuicheng Lin) -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQRskUM7w1oG5rx2IZO4FpNVCsYGvwUCalARjQAKCRC4FpNVCsYG vwKqAP4mUZgwehBlXNpOBFukD5d5nk8F8S8UJxD/AxUVkV/uTgEAtcjSoirClC0q h1dvdkF78m5ZPZlyvDbbsSqzgMEOAgU= =cKJC -----END PGP SIGNATURE----- Merge tag 'drm-xe-fixes-2026-07-09' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-fixes Driver Changes: - Fix PTE index in xe_vm_populate_pgtable for chunked binds (Matt Brost) - Wait on external BO kernel fences in exec IOCTL (Matt Brost) - Remove duplicate include (Anas Khan) - Free madvise VMA array on L2 flush failure (Guangshuo Li) - Stub notifier_lock helpers when DRM_GPUSVM=n (Shuicheng Lin) Signed-off-by: Dave Airlie <airlied@redhat.com> From: Thomas Hellstrom <thomas.hellstrom@linux.intel.com> Link: https://patch.msgid.link/alASIbW318Rl-HTv@fedora
This commit is contained in:
commit
695255c57f
|
|
@ -9,7 +9,6 @@
|
|||
|
||||
#include <kunit/test-bug.h>
|
||||
#include <kunit/test.h>
|
||||
#include <kunit/test-bug.h>
|
||||
#include <kunit/visibility.h>
|
||||
|
||||
#define PLATFORM_CASE(platform__, graphics_step__) \
|
||||
|
|
|
|||
|
|
@ -292,13 +292,23 @@ int xe_exec_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
|
|||
goto err_exec;
|
||||
}
|
||||
|
||||
/* Wait behind rebinds */
|
||||
/*
|
||||
* Wait behind rebinds and any kernel operations (evictions, defrag
|
||||
* moves, ...) on the VM and all external BOs. The VM's private BOs
|
||||
* carry their kernel ops in the VM dma-resv KERNEL slot, while each
|
||||
* external BO carries them in its own dma-resv KERNEL slot; both are
|
||||
* covered by iterating every object locked by the exec, mirroring the
|
||||
* drm_gpuvm_resv_add_fence() below.
|
||||
*/
|
||||
if (!xe_vm_in_lr_mode(vm)) {
|
||||
err = xe_sched_job_add_deps(job,
|
||||
xe_vm_resv(vm),
|
||||
DMA_RESV_USAGE_KERNEL);
|
||||
if (err)
|
||||
goto err_put_job;
|
||||
struct drm_gem_object *obj;
|
||||
|
||||
drm_exec_for_each_locked_object(exec, obj) {
|
||||
err = xe_sched_job_add_deps(job, obj->resv,
|
||||
DMA_RESV_USAGE_KERNEL);
|
||||
if (err)
|
||||
goto err_put_job;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < num_syncs && !err; i++)
|
||||
|
|
|
|||
|
|
@ -1026,12 +1026,22 @@ xe_vm_populate_pgtable(struct xe_migrate_pt_update *pt_update, struct xe_tile *t
|
|||
u64 *ptr = data;
|
||||
u32 i;
|
||||
|
||||
/*
|
||||
* @qword_ofs is the absolute entry offset within the page table, while
|
||||
* @ptes is indexed relative to @update->ofs (its first entry). The GPU
|
||||
* path (write_pgtable) splits a single update into MAX_PTE_PER_SDI-sized
|
||||
* chunks, calling this with an advancing @qword_ofs but a fresh @data
|
||||
* pointer per chunk, so translate back into a @ptes index rather than
|
||||
* assuming the chunk starts at ptes[0].
|
||||
*/
|
||||
for (i = 0; i < num_qwords; i++) {
|
||||
u32 idx = qword_ofs - update->ofs + i;
|
||||
|
||||
if (map)
|
||||
xe_map_wr(tile_to_xe(tile), map, (qword_ofs + i) *
|
||||
sizeof(u64), u64, ptes[i].pte);
|
||||
sizeof(u64), u64, ptes[idx].pte);
|
||||
else
|
||||
ptr[i] = ptes[i].pte;
|
||||
ptr[i] = ptes[idx].pte;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1408,6 +1418,7 @@ static int xe_pt_pre_commit(struct xe_migrate_pt_update *pt_update)
|
|||
pt_update_ops, rftree);
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_DRM_GPUSVM)
|
||||
/*
|
||||
* Acquire/release the svm notifier_lock around xe_pt_svm_userptr_pre_commit()
|
||||
* and the matching late release in xe_pt_update_ops_run(). Read mode by
|
||||
|
|
@ -1434,6 +1445,10 @@ static void xe_pt_svm_userptr_notifier_unlock(struct xe_vm *vm)
|
|||
xe_svm_notifier_unlock(vm);
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
static inline void xe_pt_svm_userptr_notifier_lock(struct xe_vm *vm) { }
|
||||
static inline void xe_pt_svm_userptr_notifier_unlock(struct xe_vm *vm) { }
|
||||
#endif
|
||||
|
||||
#if IS_ENABLED(CONFIG_DRM_GPUSVM)
|
||||
#ifdef CONFIG_DRM_XE_USERPTR_INVAL_INJECT
|
||||
|
|
|
|||
|
|
@ -643,7 +643,7 @@ int xe_vm_madvise_ioctl(struct drm_device *dev, void *data, struct drm_file *fil
|
|||
xe_device_is_l2_flush_optimized(xe) &&
|
||||
(pat_index != 19 && coh_mode != XE_COH_2WAY))) {
|
||||
err = -EINVAL;
|
||||
goto madv_fini;
|
||||
goto free_vmas;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user