Skip to content

Commit d4225a5

Browse files
committed
drm/i915: Syntatic sugar for using intel_runtime_pm
Frequently, we use intel_runtime_pm_get/_put around a small block. Formalise that usage by providing a macro to define such a block with an automatic closure to scope the intel_runtime_pm wakeref to that block, i.e. macro abuse smelling of python. Signed-off-by: Chris Wilson <[email protected]> Cc: Jani Nikula <[email protected]> Reviewed-by: Mika Kuoppala <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent c9d08cc commit d4225a5

17 files changed

+209
-241
lines changed

drivers/gpu/drm/i915/i915_debugfs.c

Lines changed: 71 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -953,9 +953,9 @@ static int i915_gpu_info_open(struct inode *inode, struct file *file)
953953
struct i915_gpu_state *gpu;
954954
intel_wakeref_t wakeref;
955955

956-
wakeref = intel_runtime_pm_get(i915);
957-
gpu = i915_capture_gpu_state(i915);
958-
intel_runtime_pm_put(i915, wakeref);
956+
gpu = NULL;
957+
with_intel_runtime_pm(i915, wakeref)
958+
gpu = i915_capture_gpu_state(i915);
959959
if (IS_ERR(gpu))
960960
return PTR_ERR(gpu);
961961

@@ -1287,17 +1287,15 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused)
12871287
return 0;
12881288
}
12891289

1290-
wakeref = intel_runtime_pm_get(dev_priv);
1290+
with_intel_runtime_pm(dev_priv, wakeref) {
1291+
for_each_engine(engine, dev_priv, id) {
1292+
acthd[id] = intel_engine_get_active_head(engine);
1293+
seqno[id] = intel_engine_get_seqno(engine);
1294+
}
12911295

1292-
for_each_engine(engine, dev_priv, id) {
1293-
acthd[id] = intel_engine_get_active_head(engine);
1294-
seqno[id] = intel_engine_get_seqno(engine);
1296+
intel_engine_get_instdone(dev_priv->engine[RCS], &instdone);
12951297
}
12961298

1297-
intel_engine_get_instdone(dev_priv->engine[RCS], &instdone);
1298-
1299-
intel_runtime_pm_put(dev_priv, wakeref);
1300-
13011299
if (timer_pending(&dev_priv->gpu_error.hangcheck_work.timer))
13021300
seq_printf(m, "Hangcheck active, timer fires in %dms\n",
13031301
jiffies_to_msecs(dev_priv->gpu_error.hangcheck_work.timer.expires -
@@ -1573,18 +1571,16 @@ static int i915_drpc_info(struct seq_file *m, void *unused)
15731571
{
15741572
struct drm_i915_private *dev_priv = node_to_i915(m->private);
15751573
intel_wakeref_t wakeref;
1576-
int err;
1577-
1578-
wakeref = intel_runtime_pm_get(dev_priv);
1579-
1580-
if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
1581-
err = vlv_drpc_info(m);
1582-
else if (INTEL_GEN(dev_priv) >= 6)
1583-
err = gen6_drpc_info(m);
1584-
else
1585-
err = ironlake_drpc_info(m);
1574+
int err = -ENODEV;
15861575

1587-
intel_runtime_pm_put(dev_priv, wakeref);
1576+
with_intel_runtime_pm(dev_priv, wakeref) {
1577+
if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
1578+
err = vlv_drpc_info(m);
1579+
else if (INTEL_GEN(dev_priv) >= 6)
1580+
err = gen6_drpc_info(m);
1581+
else
1582+
err = ironlake_drpc_info(m);
1583+
}
15881584

15891585
return err;
15901586
}
@@ -2068,8 +2064,7 @@ static int i915_rps_boost_info(struct seq_file *m, void *data)
20682064
intel_wakeref_t wakeref;
20692065
struct drm_file *file;
20702066

2071-
wakeref = intel_runtime_pm_get_if_in_use(dev_priv);
2072-
if (wakeref) {
2067+
with_intel_runtime_pm_if_in_use(dev_priv, wakeref) {
20732068
if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
20742069
mutex_lock(&dev_priv->pcu_lock);
20752070
act_freq = vlv_punit_read(dev_priv,
@@ -2080,7 +2075,6 @@ static int i915_rps_boost_info(struct seq_file *m, void *data)
20802075
act_freq = intel_get_cagf(dev_priv,
20812076
I915_READ(GEN6_RPSTAT1));
20822077
}
2083-
intel_runtime_pm_put(dev_priv, wakeref);
20842078
}
20852079

20862080
seq_printf(m, "RPS enabled? %d\n", rps->enabled);
@@ -2172,9 +2166,8 @@ static int i915_huc_load_status_info(struct seq_file *m, void *data)
21722166
p = drm_seq_file_printer(m);
21732167
intel_uc_fw_dump(&dev_priv->huc.fw, &p);
21742168

2175-
wakeref = intel_runtime_pm_get(dev_priv);
2176-
seq_printf(m, "\nHuC status 0x%08x:\n", I915_READ(HUC_STATUS2));
2177-
intel_runtime_pm_put(dev_priv, wakeref);
2169+
with_intel_runtime_pm(dev_priv, wakeref)
2170+
seq_printf(m, "\nHuC status 0x%08x:\n", I915_READ(HUC_STATUS2));
21782171

21792172
return 0;
21802173
}
@@ -2184,30 +2177,30 @@ static int i915_guc_load_status_info(struct seq_file *m, void *data)
21842177
struct drm_i915_private *dev_priv = node_to_i915(m->private);
21852178
intel_wakeref_t wakeref;
21862179
struct drm_printer p;
2187-
u32 tmp, i;
21882180

21892181
if (!HAS_GUC(dev_priv))
21902182
return -ENODEV;
21912183

21922184
p = drm_seq_file_printer(m);
21932185
intel_uc_fw_dump(&dev_priv->guc.fw, &p);
21942186

2195-
wakeref = intel_runtime_pm_get(dev_priv);
2196-
2197-
tmp = I915_READ(GUC_STATUS);
2198-
2199-
seq_printf(m, "\nGuC status 0x%08x:\n", tmp);
2200-
seq_printf(m, "\tBootrom status = 0x%x\n",
2201-
(tmp & GS_BOOTROM_MASK) >> GS_BOOTROM_SHIFT);
2202-
seq_printf(m, "\tuKernel status = 0x%x\n",
2203-
(tmp & GS_UKERNEL_MASK) >> GS_UKERNEL_SHIFT);
2204-
seq_printf(m, "\tMIA Core status = 0x%x\n",
2205-
(tmp & GS_MIA_MASK) >> GS_MIA_SHIFT);
2206-
seq_puts(m, "\nScratch registers:\n");
2207-
for (i = 0; i < 16; i++)
2208-
seq_printf(m, "\t%2d: \t0x%x\n", i, I915_READ(SOFT_SCRATCH(i)));
2209-
2210-
intel_runtime_pm_put(dev_priv, wakeref);
2187+
with_intel_runtime_pm(dev_priv, wakeref) {
2188+
u32 tmp = I915_READ(GUC_STATUS);
2189+
u32 i;
2190+
2191+
seq_printf(m, "\nGuC status 0x%08x:\n", tmp);
2192+
seq_printf(m, "\tBootrom status = 0x%x\n",
2193+
(tmp & GS_BOOTROM_MASK) >> GS_BOOTROM_SHIFT);
2194+
seq_printf(m, "\tuKernel status = 0x%x\n",
2195+
(tmp & GS_UKERNEL_MASK) >> GS_UKERNEL_SHIFT);
2196+
seq_printf(m, "\tMIA Core status = 0x%x\n",
2197+
(tmp & GS_MIA_MASK) >> GS_MIA_SHIFT);
2198+
seq_puts(m, "\nScratch registers:\n");
2199+
for (i = 0; i < 16; i++) {
2200+
seq_printf(m, "\t%2d: \t0x%x\n",
2201+
i, I915_READ(SOFT_SCRATCH(i)));
2202+
}
2203+
}
22112204

22122205
return 0;
22132206
}
@@ -2680,19 +2673,14 @@ static int i915_energy_uJ(struct seq_file *m, void *data)
26802673
if (INTEL_GEN(dev_priv) < 6)
26812674
return -ENODEV;
26822675

2683-
wakeref = intel_runtime_pm_get(dev_priv);
2684-
2685-
if (rdmsrl_safe(MSR_RAPL_POWER_UNIT, &power)) {
2686-
intel_runtime_pm_put(dev_priv, wakeref);
2676+
if (rdmsrl_safe(MSR_RAPL_POWER_UNIT, &power))
26872677
return -ENODEV;
2688-
}
26892678

26902679
units = (power & 0x1f00) >> 8;
2691-
power = I915_READ(MCH_SECP_NRG_STTS);
2692-
power = (1000000 * power) >> units; /* convert to uJ */
2693-
2694-
intel_runtime_pm_put(dev_priv, wakeref);
2680+
with_intel_runtime_pm(dev_priv, wakeref)
2681+
power = I915_READ(MCH_SECP_NRG_STTS);
26952682

2683+
power = (1000000 * power) >> units; /* convert to uJ */
26962684
seq_printf(m, "%llu", power);
26972685

26982686
return 0;
@@ -3275,22 +3263,20 @@ static ssize_t i915_ipc_status_write(struct file *file, const char __user *ubuf,
32753263
struct seq_file *m = file->private_data;
32763264
struct drm_i915_private *dev_priv = m->private;
32773265
intel_wakeref_t wakeref;
3278-
int ret;
32793266
bool enable;
3267+
int ret;
32803268

32813269
ret = kstrtobool_from_user(ubuf, len, &enable);
32823270
if (ret < 0)
32833271
return ret;
32843272

3285-
wakeref = intel_runtime_pm_get(dev_priv);
3286-
3287-
if (!dev_priv->ipc_enabled && enable)
3288-
DRM_INFO("Enabling IPC: WM will be proper only after next commit\n");
3289-
dev_priv->wm.distrust_bios_wm = true;
3290-
dev_priv->ipc_enabled = enable;
3291-
intel_enable_ipc(dev_priv);
3292-
3293-
intel_runtime_pm_put(dev_priv, wakeref);
3273+
with_intel_runtime_pm(dev_priv, wakeref) {
3274+
if (!dev_priv->ipc_enabled && enable)
3275+
DRM_INFO("Enabling IPC: WM will be proper only after next commit\n");
3276+
dev_priv->wm.distrust_bios_wm = true;
3277+
dev_priv->ipc_enabled = enable;
3278+
intel_enable_ipc(dev_priv);
3279+
}
32943280

32953281
return len;
32963282
}
@@ -4130,16 +4116,13 @@ i915_cache_sharing_get(void *data, u64 *val)
41304116
{
41314117
struct drm_i915_private *dev_priv = data;
41324118
intel_wakeref_t wakeref;
4133-
u32 snpcr;
4119+
u32 snpcr = 0;
41344120

41354121
if (!(IS_GEN_RANGE(dev_priv, 6, 7)))
41364122
return -ENODEV;
41374123

4138-
wakeref = intel_runtime_pm_get(dev_priv);
4139-
4140-
snpcr = I915_READ(GEN6_MBCUNIT_SNPCR);
4141-
4142-
intel_runtime_pm_put(dev_priv, wakeref);
4124+
with_intel_runtime_pm(dev_priv, wakeref)
4125+
snpcr = I915_READ(GEN6_MBCUNIT_SNPCR);
41434126

41444127
*val = (snpcr & GEN6_MBC_SNPCR_MASK) >> GEN6_MBC_SNPCR_SHIFT;
41454128

@@ -4151,24 +4134,24 @@ i915_cache_sharing_set(void *data, u64 val)
41514134
{
41524135
struct drm_i915_private *dev_priv = data;
41534136
intel_wakeref_t wakeref;
4154-
u32 snpcr;
41554137

41564138
if (!(IS_GEN_RANGE(dev_priv, 6, 7)))
41574139
return -ENODEV;
41584140

41594141
if (val > 3)
41604142
return -EINVAL;
41614143

4162-
wakeref = intel_runtime_pm_get(dev_priv);
41634144
DRM_DEBUG_DRIVER("Manually setting uncore sharing to %llu\n", val);
4145+
with_intel_runtime_pm(dev_priv, wakeref) {
4146+
u32 snpcr;
4147+
4148+
/* Update the cache sharing policy here as well */
4149+
snpcr = I915_READ(GEN6_MBCUNIT_SNPCR);
4150+
snpcr &= ~GEN6_MBC_SNPCR_MASK;
4151+
snpcr |= val << GEN6_MBC_SNPCR_SHIFT;
4152+
I915_WRITE(GEN6_MBCUNIT_SNPCR, snpcr);
4153+
}
41644154

4165-
/* Update the cache sharing policy here as well */
4166-
snpcr = I915_READ(GEN6_MBCUNIT_SNPCR);
4167-
snpcr &= ~GEN6_MBC_SNPCR_MASK;
4168-
snpcr |= (val << GEN6_MBC_SNPCR_SHIFT);
4169-
I915_WRITE(GEN6_MBCUNIT_SNPCR, snpcr);
4170-
4171-
intel_runtime_pm_put(dev_priv, wakeref);
41724155
return 0;
41734156
}
41744157

@@ -4405,20 +4388,17 @@ static int i915_sseu_status(struct seq_file *m, void *unused)
44054388
sseu.max_eus_per_subslice =
44064389
RUNTIME_INFO(dev_priv)->sseu.max_eus_per_subslice;
44074390

4408-
wakeref = intel_runtime_pm_get(dev_priv);
4409-
4410-
if (IS_CHERRYVIEW(dev_priv)) {
4411-
cherryview_sseu_device_status(dev_priv, &sseu);
4412-
} else if (IS_BROADWELL(dev_priv)) {
4413-
broadwell_sseu_device_status(dev_priv, &sseu);
4414-
} else if (IS_GEN(dev_priv, 9)) {
4415-
gen9_sseu_device_status(dev_priv, &sseu);
4416-
} else if (INTEL_GEN(dev_priv) >= 10) {
4417-
gen10_sseu_device_status(dev_priv, &sseu);
4391+
with_intel_runtime_pm(dev_priv, wakeref) {
4392+
if (IS_CHERRYVIEW(dev_priv))
4393+
cherryview_sseu_device_status(dev_priv, &sseu);
4394+
else if (IS_BROADWELL(dev_priv))
4395+
broadwell_sseu_device_status(dev_priv, &sseu);
4396+
else if (IS_GEN(dev_priv, 9))
4397+
gen9_sseu_device_status(dev_priv, &sseu);
4398+
else if (INTEL_GEN(dev_priv) >= 10)
4399+
gen10_sseu_device_status(dev_priv, &sseu);
44184400
}
44194401

4420-
intel_runtime_pm_put(dev_priv, wakeref);
4421-
44224402
i915_print_sseu_info(m, false, &sseu);
44234403

44244404
return 0;

drivers/gpu/drm/i915/i915_gem.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -813,13 +813,13 @@ void i915_gem_flush_ggtt_writes(struct drm_i915_private *dev_priv)
813813

814814
i915_gem_chipset_flush(dev_priv);
815815

816-
wakeref = intel_runtime_pm_get(dev_priv);
817-
spin_lock_irq(&dev_priv->uncore.lock);
816+
with_intel_runtime_pm(dev_priv, wakeref) {
817+
spin_lock_irq(&dev_priv->uncore.lock);
818818

819-
POSTING_READ_FW(RING_HEAD(RENDER_RING_BASE));
819+
POSTING_READ_FW(RING_HEAD(RENDER_RING_BASE));
820820

821-
spin_unlock_irq(&dev_priv->uncore.lock);
822-
intel_runtime_pm_put(dev_priv, wakeref);
821+
spin_unlock_irq(&dev_priv->uncore.lock);
822+
}
823823
}
824824

825825
static void

drivers/gpu/drm/i915/i915_gem_gtt.c

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2535,9 +2535,8 @@ static int ggtt_bind_vma(struct i915_vma *vma,
25352535
if (i915_gem_object_is_readonly(obj))
25362536
pte_flags |= PTE_READ_ONLY;
25372537

2538-
wakeref = intel_runtime_pm_get(i915);
2539-
vma->vm->insert_entries(vma->vm, vma, cache_level, pte_flags);
2540-
intel_runtime_pm_put(i915, wakeref);
2538+
with_intel_runtime_pm(i915, wakeref)
2539+
vma->vm->insert_entries(vma->vm, vma, cache_level, pte_flags);
25412540

25422541
vma->page_sizes.gtt = I915_GTT_PAGE_SIZE;
25432542

@@ -2556,9 +2555,8 @@ static void ggtt_unbind_vma(struct i915_vma *vma)
25562555
struct drm_i915_private *i915 = vma->vm->i915;
25572556
intel_wakeref_t wakeref;
25582557

2559-
wakeref = intel_runtime_pm_get(i915);
2560-
vma->vm->clear_range(vma->vm, vma->node.start, vma->size);
2561-
intel_runtime_pm_put(i915, wakeref);
2558+
with_intel_runtime_pm(i915, wakeref)
2559+
vma->vm->clear_range(vma->vm, vma->node.start, vma->size);
25622560
}
25632561

25642562
static int aliasing_gtt_bind_vma(struct i915_vma *vma,
@@ -2592,9 +2590,10 @@ static int aliasing_gtt_bind_vma(struct i915_vma *vma,
25922590
if (flags & I915_VMA_GLOBAL_BIND) {
25932591
intel_wakeref_t wakeref;
25942592

2595-
wakeref = intel_runtime_pm_get(i915);
2596-
vma->vm->insert_entries(vma->vm, vma, cache_level, pte_flags);
2597-
intel_runtime_pm_put(i915, wakeref);
2593+
with_intel_runtime_pm(i915, wakeref) {
2594+
vma->vm->insert_entries(vma->vm, vma,
2595+
cache_level, pte_flags);
2596+
}
25982597
}
25992598

26002599
return 0;
@@ -2605,11 +2604,11 @@ static void aliasing_gtt_unbind_vma(struct i915_vma *vma)
26052604
struct drm_i915_private *i915 = vma->vm->i915;
26062605

26072606
if (vma->flags & I915_VMA_GLOBAL_BIND) {
2607+
struct i915_address_space *vm = vma->vm;
26082608
intel_wakeref_t wakeref;
26092609

2610-
wakeref = intel_runtime_pm_get(i915);
2611-
vma->vm->clear_range(vma->vm, vma->node.start, vma->size);
2612-
intel_runtime_pm_put(i915, wakeref);
2610+
with_intel_runtime_pm(i915, wakeref)
2611+
vm->clear_range(vm, vma->node.start, vma->size);
26132612
}
26142613

26152614
if (vma->flags & I915_VMA_LOCAL_BIND) {

0 commit comments

Comments
 (0)