@@ -300,9 +300,9 @@ static int gen6_hw_domain_reset(struct intel_gt *gt, u32 hw_domain_mask)
300
300
return err ;
301
301
}
302
302
303
- static int gen6_reset_engines (struct intel_gt * gt ,
304
- intel_engine_mask_t engine_mask ,
305
- unsigned int retry )
303
+ static int __gen6_reset_engines (struct intel_gt * gt ,
304
+ intel_engine_mask_t engine_mask ,
305
+ unsigned int retry )
306
306
{
307
307
struct intel_engine_cs * engine ;
308
308
u32 hw_mask ;
@@ -321,6 +321,20 @@ static int gen6_reset_engines(struct intel_gt *gt,
321
321
return gen6_hw_domain_reset (gt , hw_mask );
322
322
}
323
323
324
+ static int gen6_reset_engines (struct intel_gt * gt ,
325
+ intel_engine_mask_t engine_mask ,
326
+ unsigned int retry )
327
+ {
328
+ unsigned long flags ;
329
+ int ret ;
330
+
331
+ spin_lock_irqsave (& gt -> uncore -> lock , flags );
332
+ ret = __gen6_reset_engines (gt , engine_mask , retry );
333
+ spin_unlock_irqrestore (& gt -> uncore -> lock , flags );
334
+
335
+ return ret ;
336
+ }
337
+
324
338
static struct intel_engine_cs * find_sfc_paired_vecs_engine (struct intel_engine_cs * engine )
325
339
{
326
340
int vecs_id ;
@@ -487,9 +501,9 @@ static void gen11_unlock_sfc(struct intel_engine_cs *engine)
487
501
rmw_clear_fw (uncore , sfc_lock .lock_reg , sfc_lock .lock_bit );
488
502
}
489
503
490
- static int gen11_reset_engines (struct intel_gt * gt ,
491
- intel_engine_mask_t engine_mask ,
492
- unsigned int retry )
504
+ static int __gen11_reset_engines (struct intel_gt * gt ,
505
+ intel_engine_mask_t engine_mask ,
506
+ unsigned int retry )
493
507
{
494
508
struct intel_engine_cs * engine ;
495
509
intel_engine_mask_t tmp ;
@@ -583,8 +597,11 @@ static int gen8_reset_engines(struct intel_gt *gt,
583
597
struct intel_engine_cs * engine ;
584
598
const bool reset_non_ready = retry >= 1 ;
585
599
intel_engine_mask_t tmp ;
600
+ unsigned long flags ;
586
601
int ret ;
587
602
603
+ spin_lock_irqsave (& gt -> uncore -> lock , flags );
604
+
588
605
for_each_engine_masked (engine , gt , engine_mask , tmp ) {
589
606
ret = gen8_engine_reset_prepare (engine );
590
607
if (ret && !reset_non_ready )
@@ -612,17 +629,19 @@ static int gen8_reset_engines(struct intel_gt *gt,
612
629
* This is best effort, so ignore any error from the initial reset.
613
630
*/
614
631
if (IS_DG2 (gt -> i915 ) && engine_mask == ALL_ENGINES )
615
- gen11_reset_engines (gt , gt -> info .engine_mask , 0 );
632
+ __gen11_reset_engines (gt , gt -> info .engine_mask , 0 );
616
633
617
634
if (GRAPHICS_VER (gt -> i915 ) >= 11 )
618
- ret = gen11_reset_engines (gt , engine_mask , retry );
635
+ ret = __gen11_reset_engines (gt , engine_mask , retry );
619
636
else
620
- ret = gen6_reset_engines (gt , engine_mask , retry );
637
+ ret = __gen6_reset_engines (gt , engine_mask , retry );
621
638
622
639
skip_reset :
623
640
for_each_engine_masked (engine , gt , engine_mask , tmp )
624
641
gen8_engine_reset_cancel (engine );
625
642
643
+ spin_unlock_irqrestore (& gt -> uncore -> lock , flags );
644
+
626
645
return ret ;
627
646
}
628
647
0 commit comments