Skip to content

Commit 3ffbe35

Browse files
icklejlahtine-intel
authored andcommitted
drm/i915/selftests: Restore to default heartbeat
Since we temporarily disable the heartbeat and restore back to the default value, we can use the stored defaults on the engine and avoid using a local. Signed-off-by: Chris Wilson <[email protected]> Reviewed-by: Mika Kuoppala <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] (cherry picked from commit 3a230a5) Signed-off-by: Joonas Lahtinen <[email protected]>
1 parent 70cac50 commit 3ffbe35

File tree

4 files changed

+67
-109
lines changed

4 files changed

+67
-109
lines changed

drivers/gpu/drm/i915/gt/selftest_hangcheck.c

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -310,22 +310,20 @@ static bool wait_until_running(struct hang *h, struct i915_request *rq)
310310
1000));
311311
}
312312

313-
static void engine_heartbeat_disable(struct intel_engine_cs *engine,
314-
unsigned long *saved)
313+
static void engine_heartbeat_disable(struct intel_engine_cs *engine)
315314
{
316-
*saved = engine->props.heartbeat_interval_ms;
317315
engine->props.heartbeat_interval_ms = 0;
318316

319317
intel_engine_pm_get(engine);
320318
intel_engine_park_heartbeat(engine);
321319
}
322320

323-
static void engine_heartbeat_enable(struct intel_engine_cs *engine,
324-
unsigned long saved)
321+
static void engine_heartbeat_enable(struct intel_engine_cs *engine)
325322
{
326323
intel_engine_pm_put(engine);
327324

328-
engine->props.heartbeat_interval_ms = saved;
325+
engine->props.heartbeat_interval_ms =
326+
engine->defaults.heartbeat_interval_ms;
329327
}
330328

331329
static int igt_hang_sanitycheck(void *arg)
@@ -473,7 +471,6 @@ static int igt_reset_nop_engine(void *arg)
473471
for_each_engine(engine, gt, id) {
474472
unsigned int reset_count, reset_engine_count, count;
475473
struct intel_context *ce;
476-
unsigned long heartbeat;
477474
IGT_TIMEOUT(end_time);
478475
int err;
479476

@@ -485,7 +482,7 @@ static int igt_reset_nop_engine(void *arg)
485482
reset_engine_count = i915_reset_engine_count(global, engine);
486483
count = 0;
487484

488-
engine_heartbeat_disable(engine, &heartbeat);
485+
engine_heartbeat_disable(engine);
489486
set_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
490487
do {
491488
int i;
@@ -529,7 +526,7 @@ static int igt_reset_nop_engine(void *arg)
529526
}
530527
} while (time_before(jiffies, end_time));
531528
clear_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
532-
engine_heartbeat_enable(engine, heartbeat);
529+
engine_heartbeat_enable(engine);
533530

534531
pr_info("%s(%s): %d resets\n", __func__, engine->name, count);
535532

@@ -564,7 +561,6 @@ static int __igt_reset_engine(struct intel_gt *gt, bool active)
564561

565562
for_each_engine(engine, gt, id) {
566563
unsigned int reset_count, reset_engine_count;
567-
unsigned long heartbeat;
568564
IGT_TIMEOUT(end_time);
569565

570566
if (active && !intel_engine_can_store_dword(engine))
@@ -580,7 +576,7 @@ static int __igt_reset_engine(struct intel_gt *gt, bool active)
580576
reset_count = i915_reset_count(global);
581577
reset_engine_count = i915_reset_engine_count(global, engine);
582578

583-
engine_heartbeat_disable(engine, &heartbeat);
579+
engine_heartbeat_disable(engine);
584580
set_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
585581
do {
586582
if (active) {
@@ -632,7 +628,7 @@ static int __igt_reset_engine(struct intel_gt *gt, bool active)
632628
}
633629
} while (time_before(jiffies, end_time));
634630
clear_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
635-
engine_heartbeat_enable(engine, heartbeat);
631+
engine_heartbeat_enable(engine);
636632

637633
if (err)
638634
break;
@@ -789,7 +785,6 @@ static int __igt_reset_engines(struct intel_gt *gt,
789785
struct active_engine threads[I915_NUM_ENGINES] = {};
790786
unsigned long device = i915_reset_count(global);
791787
unsigned long count = 0, reported;
792-
unsigned long heartbeat;
793788
IGT_TIMEOUT(end_time);
794789

795790
if (flags & TEST_ACTIVE &&
@@ -832,7 +827,7 @@ static int __igt_reset_engines(struct intel_gt *gt,
832827

833828
yield(); /* start all threads before we begin */
834829

835-
engine_heartbeat_disable(engine, &heartbeat);
830+
engine_heartbeat_disable(engine);
836831
set_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
837832
do {
838833
struct i915_request *rq = NULL;
@@ -906,7 +901,7 @@ static int __igt_reset_engines(struct intel_gt *gt,
906901
}
907902
} while (time_before(jiffies, end_time));
908903
clear_bit(I915_RESET_ENGINE + id, &gt->reset.flags);
909-
engine_heartbeat_enable(engine, heartbeat);
904+
engine_heartbeat_enable(engine);
910905

911906
pr_info("i915_reset_engine(%s:%s): %lu resets\n",
912907
engine->name, test_name, count);

drivers/gpu/drm/i915/gt/selftest_lrc.c

Lines changed: 23 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -51,22 +51,20 @@ static struct i915_vma *create_scratch(struct intel_gt *gt)
5151
return vma;
5252
}
5353

54-
static void engine_heartbeat_disable(struct intel_engine_cs *engine,
55-
unsigned long *saved)
54+
static void engine_heartbeat_disable(struct intel_engine_cs *engine)
5655
{
57-
*saved = engine->props.heartbeat_interval_ms;
5856
engine->props.heartbeat_interval_ms = 0;
5957

6058
intel_engine_pm_get(engine);
6159
intel_engine_park_heartbeat(engine);
6260
}
6361

64-
static void engine_heartbeat_enable(struct intel_engine_cs *engine,
65-
unsigned long saved)
62+
static void engine_heartbeat_enable(struct intel_engine_cs *engine)
6663
{
6764
intel_engine_pm_put(engine);
6865

69-
engine->props.heartbeat_interval_ms = saved;
66+
engine->props.heartbeat_interval_ms =
67+
engine->defaults.heartbeat_interval_ms;
7068
}
7169

7270
static bool is_active(struct i915_request *rq)
@@ -224,7 +222,6 @@ static int live_unlite_restore(struct intel_gt *gt, int prio)
224222
struct intel_context *ce[2] = {};
225223
struct i915_request *rq[2];
226224
struct igt_live_test t;
227-
unsigned long saved;
228225
int n;
229226

230227
if (prio && !intel_engine_has_preemption(engine))
@@ -237,7 +234,7 @@ static int live_unlite_restore(struct intel_gt *gt, int prio)
237234
err = -EIO;
238235
break;
239236
}
240-
engine_heartbeat_disable(engine, &saved);
237+
engine_heartbeat_disable(engine);
241238

242239
for (n = 0; n < ARRAY_SIZE(ce); n++) {
243240
struct intel_context *tmp;
@@ -345,7 +342,7 @@ static int live_unlite_restore(struct intel_gt *gt, int prio)
345342
intel_context_put(ce[n]);
346343
}
347344

348-
engine_heartbeat_enable(engine, saved);
345+
engine_heartbeat_enable(engine);
349346
if (igt_live_test_end(&t))
350347
err = -EIO;
351348
if (err)
@@ -466,7 +463,6 @@ static int live_hold_reset(void *arg)
466463

467464
for_each_engine(engine, gt, id) {
468465
struct intel_context *ce;
469-
unsigned long heartbeat;
470466
struct i915_request *rq;
471467

472468
ce = intel_context_create(engine);
@@ -475,7 +471,7 @@ static int live_hold_reset(void *arg)
475471
break;
476472
}
477473

478-
engine_heartbeat_disable(engine, &heartbeat);
474+
engine_heartbeat_disable(engine);
479475

480476
rq = igt_spinner_create_request(&spin, ce, MI_ARB_CHECK);
481477
if (IS_ERR(rq)) {
@@ -535,7 +531,7 @@ static int live_hold_reset(void *arg)
535531
i915_request_put(rq);
536532

537533
out:
538-
engine_heartbeat_enable(engine, heartbeat);
534+
engine_heartbeat_enable(engine);
539535
intel_context_put(ce);
540536
if (err)
541537
break;
@@ -580,10 +576,9 @@ static int live_error_interrupt(void *arg)
580576

581577
for_each_engine(engine, gt, id) {
582578
const struct error_phase *p;
583-
unsigned long heartbeat;
584579
int err = 0;
585580

586-
engine_heartbeat_disable(engine, &heartbeat);
581+
engine_heartbeat_disable(engine);
587582

588583
for (p = phases; p->error[0] != GOOD; p++) {
589584
struct i915_request *client[ARRAY_SIZE(phases->error)];
@@ -682,7 +677,7 @@ static int live_error_interrupt(void *arg)
682677
}
683678
}
684679

685-
engine_heartbeat_enable(engine, heartbeat);
680+
engine_heartbeat_enable(engine);
686681
if (err) {
687682
intel_gt_set_wedged(gt);
688683
return err;
@@ -895,16 +890,14 @@ static int live_timeslice_preempt(void *arg)
895890
enum intel_engine_id id;
896891

897892
for_each_engine(engine, gt, id) {
898-
unsigned long saved;
899-
900893
if (!intel_engine_has_preemption(engine))
901894
continue;
902895

903896
memset(vaddr, 0, PAGE_SIZE);
904897

905-
engine_heartbeat_disable(engine, &saved);
898+
engine_heartbeat_disable(engine);
906899
err = slice_semaphore_queue(engine, vma, count);
907-
engine_heartbeat_enable(engine, saved);
900+
engine_heartbeat_enable(engine);
908901
if (err)
909902
goto err_pin;
910903

@@ -1009,7 +1002,6 @@ static int live_timeslice_rewind(void *arg)
10091002
enum { X = 1, Z, Y };
10101003
struct i915_request *rq[3] = {};
10111004
struct intel_context *ce;
1012-
unsigned long heartbeat;
10131005
unsigned long timeslice;
10141006
int i, err = 0;
10151007
u32 *slot;
@@ -1028,7 +1020,7 @@ static int live_timeslice_rewind(void *arg)
10281020
* Expect execution/evaluation order XZY
10291021
*/
10301022

1031-
engine_heartbeat_disable(engine, &heartbeat);
1023+
engine_heartbeat_disable(engine);
10321024
timeslice = xchg(&engine->props.timeslice_duration_ms, 1);
10331025

10341026
slot = memset32(engine->status_page.addr + 1000, 0, 4);
@@ -1122,7 +1114,7 @@ static int live_timeslice_rewind(void *arg)
11221114
wmb();
11231115

11241116
engine->props.timeslice_duration_ms = timeslice;
1125-
engine_heartbeat_enable(engine, heartbeat);
1117+
engine_heartbeat_enable(engine);
11261118
for (i = 0; i < 3; i++)
11271119
i915_request_put(rq[i]);
11281120
if (igt_flush_test(gt->i915))
@@ -1202,12 +1194,11 @@ static int live_timeslice_queue(void *arg)
12021194
.priority = I915_USER_PRIORITY(I915_PRIORITY_MAX),
12031195
};
12041196
struct i915_request *rq, *nop;
1205-
unsigned long saved;
12061197

12071198
if (!intel_engine_has_preemption(engine))
12081199
continue;
12091200

1210-
engine_heartbeat_disable(engine, &saved);
1201+
engine_heartbeat_disable(engine);
12111202
memset(vaddr, 0, PAGE_SIZE);
12121203

12131204
/* ELSP[0]: semaphore wait */
@@ -1284,7 +1275,7 @@ static int live_timeslice_queue(void *arg)
12841275
err_rq:
12851276
i915_request_put(rq);
12861277
err_heartbeat:
1287-
engine_heartbeat_enable(engine, saved);
1278+
engine_heartbeat_enable(engine);
12881279
if (err)
12891280
break;
12901281
}
@@ -4153,7 +4144,6 @@ static int reset_virtual_engine(struct intel_gt *gt,
41534144
{
41544145
struct intel_engine_cs *engine;
41554146
struct intel_context *ve;
4156-
unsigned long *heartbeat;
41574147
struct igt_spinner spin;
41584148
struct i915_request *rq;
41594149
unsigned int n;
@@ -4165,23 +4155,17 @@ static int reset_virtual_engine(struct intel_gt *gt,
41654155
* descendents are not executed while the capture is in progress.
41664156
*/
41674157

4168-
heartbeat = kmalloc_array(nsibling, sizeof(*heartbeat), GFP_KERNEL);
4169-
if (!heartbeat)
4158+
if (igt_spinner_init(&spin, gt))
41704159
return -ENOMEM;
41714160

4172-
if (igt_spinner_init(&spin, gt)) {
4173-
err = -ENOMEM;
4174-
goto out_free;
4175-
}
4176-
41774161
ve = intel_execlists_create_virtual(siblings, nsibling);
41784162
if (IS_ERR(ve)) {
41794163
err = PTR_ERR(ve);
41804164
goto out_spin;
41814165
}
41824166

41834167
for (n = 0; n < nsibling; n++)
4184-
engine_heartbeat_disable(siblings[n], &heartbeat[n]);
4168+
engine_heartbeat_disable(siblings[n]);
41854169

41864170
rq = igt_spinner_create_request(&spin, ve, MI_ARB_CHECK);
41874171
if (IS_ERR(rq)) {
@@ -4252,13 +4236,11 @@ static int reset_virtual_engine(struct intel_gt *gt,
42524236
i915_request_put(rq);
42534237
out_heartbeat:
42544238
for (n = 0; n < nsibling; n++)
4255-
engine_heartbeat_enable(siblings[n], heartbeat[n]);
4239+
engine_heartbeat_enable(siblings[n]);
42564240

42574241
intel_context_put(ve);
42584242
out_spin:
42594243
igt_spinner_fini(&spin);
4260-
out_free:
4261-
kfree(heartbeat);
42624244
return err;
42634245
}
42644246

@@ -4932,9 +4914,7 @@ static int live_lrc_gpr(void *arg)
49324914
return PTR_ERR(scratch);
49334915

49344916
for_each_engine(engine, gt, id) {
4935-
unsigned long heartbeat;
4936-
4937-
engine_heartbeat_disable(engine, &heartbeat);
4917+
engine_heartbeat_disable(engine);
49384918

49394919
err = __live_lrc_gpr(engine, scratch, false);
49404920
if (err)
@@ -4945,7 +4925,7 @@ static int live_lrc_gpr(void *arg)
49454925
goto err;
49464926

49474927
err:
4948-
engine_heartbeat_enable(engine, heartbeat);
4928+
engine_heartbeat_enable(engine);
49494929
if (igt_flush_test(gt->i915))
49504930
err = -EIO;
49514931
if (err)
@@ -5092,10 +5072,9 @@ static int live_lrc_timestamp(void *arg)
50925072
*/
50935073

50945074
for_each_engine(data.engine, gt, id) {
5095-
unsigned long heartbeat;
50965075
int i, err = 0;
50975076

5098-
engine_heartbeat_disable(data.engine, &heartbeat);
5077+
engine_heartbeat_disable(data.engine);
50995078

51005079
for (i = 0; i < ARRAY_SIZE(data.ce); i++) {
51015080
struct intel_context *tmp;
@@ -5128,7 +5107,7 @@ static int live_lrc_timestamp(void *arg)
51285107
}
51295108

51305109
err:
5131-
engine_heartbeat_enable(data.engine, heartbeat);
5110+
engine_heartbeat_enable(data.engine);
51325111
for (i = 0; i < ARRAY_SIZE(data.ce); i++) {
51335112
if (!data.ce[i])
51345113
break;

0 commit comments

Comments
 (0)