1313#include "xe_drm_client.h"
1414#include "xe_exec_queue.h"
1515#include "xe_gt.h"
16- #include "xe_gt_tlb_inval_job .h"
16+ #include "xe_tlb_inval_job .h"
1717#include "xe_migrate.h"
1818#include "xe_pt_types.h"
1919#include "xe_pt_walk.h"
2020#include "xe_res_cursor.h"
2121#include "xe_sched_job.h"
2222#include "xe_sync.h"
2323#include "xe_svm.h"
24+ #include "xe_tlb_inval_job.h"
2425#include "xe_trace.h"
2526#include "xe_ttm_stolen_mgr.h"
2627#include "xe_vm.h"
@@ -1276,8 +1277,8 @@ static int op_add_deps(struct xe_vm *vm, struct xe_vma_op *op,
12761277}
12771278
12781279static int xe_pt_vm_dependencies (struct xe_sched_job * job ,
1279- struct xe_gt_tlb_inval_job * ijob ,
1280- struct xe_gt_tlb_inval_job * mjob ,
1280+ struct xe_tlb_inval_job * ijob ,
1281+ struct xe_tlb_inval_job * mjob ,
12811282 struct xe_vm * vm ,
12821283 struct xe_vma_ops * vops ,
12831284 struct xe_vm_pgtable_update_ops * pt_update_ops ,
@@ -1347,13 +1348,13 @@ static int xe_pt_vm_dependencies(struct xe_sched_job *job,
13471348
13481349 if (job ) {
13491350 if (ijob ) {
1350- err = xe_gt_tlb_inval_job_alloc_dep (ijob );
1351+ err = xe_tlb_inval_job_alloc_dep (ijob );
13511352 if (err )
13521353 return err ;
13531354 }
13541355
13551356 if (mjob ) {
1356- err = xe_gt_tlb_inval_job_alloc_dep (mjob );
1357+ err = xe_tlb_inval_job_alloc_dep (mjob );
13571358 if (err )
13581359 return err ;
13591360 }
@@ -2353,6 +2354,15 @@ static const struct xe_migrate_pt_update_ops svm_migrate_ops = {
23532354static const struct xe_migrate_pt_update_ops svm_migrate_ops ;
23542355#endif
23552356
2357+ static struct xe_dep_scheduler * to_dep_scheduler (struct xe_exec_queue * q ,
2358+ struct xe_gt * gt )
2359+ {
2360+ if (xe_gt_is_media_type (gt ))
2361+ return q -> tlb_inval [XE_EXEC_QUEUE_TLB_INVAL_MEDIA_GT ].dep_scheduler ;
2362+
2363+ return q -> tlb_inval [XE_EXEC_QUEUE_TLB_INVAL_PRIMARY_GT ].dep_scheduler ;
2364+ }
2365+
23562366/**
23572367 * xe_pt_update_ops_run() - Run PT update operations
23582368 * @tile: Tile of PT update operations
@@ -2371,7 +2381,7 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
23712381 struct xe_vm_pgtable_update_ops * pt_update_ops =
23722382 & vops -> pt_update_ops [tile -> id ];
23732383 struct dma_fence * fence , * ifence , * mfence ;
2374- struct xe_gt_tlb_inval_job * ijob = NULL , * mjob = NULL ;
2384+ struct xe_tlb_inval_job * ijob = NULL , * mjob = NULL ;
23752385 struct dma_fence * * fences = NULL ;
23762386 struct dma_fence_array * cf = NULL ;
23772387 struct xe_range_fence * rfence ;
@@ -2403,23 +2413,30 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
24032413#endif
24042414
24052415 if (pt_update_ops -> needs_invalidation ) {
2406- ijob = xe_gt_tlb_inval_job_create (pt_update_ops -> q ,
2407- tile -> primary_gt ,
2408- pt_update_ops -> start ,
2409- pt_update_ops -> last ,
2410- vm -> usm .asid );
2416+ struct xe_exec_queue * q = pt_update_ops -> q ;
2417+ struct xe_dep_scheduler * dep_scheduler =
2418+ to_dep_scheduler (q , tile -> primary_gt );
2419+
2420+ ijob = xe_tlb_inval_job_create (q , & tile -> primary_gt -> tlb_inval ,
2421+ dep_scheduler ,
2422+ pt_update_ops -> start ,
2423+ pt_update_ops -> last ,
2424+ vm -> usm .asid );
24112425 if (IS_ERR (ijob )) {
24122426 err = PTR_ERR (ijob );
24132427 goto kill_vm_tile1 ;
24142428 }
24152429 update .ijob = ijob ;
24162430
24172431 if (tile -> media_gt ) {
2418- mjob = xe_gt_tlb_inval_job_create (pt_update_ops -> q ,
2419- tile -> media_gt ,
2420- pt_update_ops -> start ,
2421- pt_update_ops -> last ,
2422- vm -> usm .asid );
2432+ dep_scheduler = to_dep_scheduler (q , tile -> media_gt );
2433+
2434+ mjob = xe_tlb_inval_job_create (q ,
2435+ & tile -> media_gt -> tlb_inval ,
2436+ dep_scheduler ,
2437+ pt_update_ops -> start ,
2438+ pt_update_ops -> last ,
2439+ vm -> usm .asid );
24232440 if (IS_ERR (mjob )) {
24242441 err = PTR_ERR (mjob );
24252442 goto free_ijob ;
@@ -2470,13 +2487,13 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
24702487 if (ijob ) {
24712488 struct dma_fence * __fence ;
24722489
2473- ifence = xe_gt_tlb_inval_job_push (ijob , tile -> migrate , fence );
2490+ ifence = xe_tlb_inval_job_push (ijob , tile -> migrate , fence );
24742491 __fence = ifence ;
24752492
24762493 if (mjob ) {
24772494 fences [0 ] = ifence ;
2478- mfence = xe_gt_tlb_inval_job_push (mjob , tile -> migrate ,
2479- fence );
2495+ mfence = xe_tlb_inval_job_push (mjob , tile -> migrate ,
2496+ fence );
24802497 fences [1 ] = mfence ;
24812498
24822499 dma_fence_array_init (cf , 2 , fences ,
@@ -2519,8 +2536,8 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
25192536 if (pt_update_ops -> needs_userptr_lock )
25202537 up_read (& vm -> userptr .notifier_lock );
25212538
2522- xe_gt_tlb_inval_job_put (mjob );
2523- xe_gt_tlb_inval_job_put (ijob );
2539+ xe_tlb_inval_job_put (mjob );
2540+ xe_tlb_inval_job_put (ijob );
25242541
25252542 return fence ;
25262543
@@ -2529,8 +2546,8 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
25292546free_ijob :
25302547 kfree (cf );
25312548 kfree (fences );
2532- xe_gt_tlb_inval_job_put (mjob );
2533- xe_gt_tlb_inval_job_put (ijob );
2549+ xe_tlb_inval_job_put (mjob );
2550+ xe_tlb_inval_job_put (ijob );
25342551kill_vm_tile1 :
25352552 if (err != - EAGAIN && err != - ENODATA && tile -> id )
25362553 xe_vm_kill (vops -> vm , false);
0 commit comments