Skip to content

Commit 33d8564

Browse files
committed
drm/i915: Remove the GEM idle worker
Nothing inside the idle worker now requires struct_mutex, so we can remove the indirection of using our own worker. Signed-off-by: Chris Wilson <[email protected]> Reviewed-by: Tvrtko Ursulin <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 7e80576 commit 33d8564

File tree

5 files changed

+2
-49
lines changed

5 files changed

+2
-49
lines changed

drivers/gpu/drm/i915/gem/i915_gem_pm.c

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,36 +13,13 @@
1313

1414
static void i915_gem_park(struct drm_i915_private *i915)
1515
{
16-
lockdep_assert_held(&i915->drm.struct_mutex);
16+
cancel_delayed_work(&i915->gem.retire_work);
1717

1818
i915_vma_parked(i915);
1919

2020
i915_globals_park();
2121
}
2222

23-
static void idle_work_handler(struct work_struct *work)
24-
{
25-
struct drm_i915_private *i915 =
26-
container_of(work, typeof(*i915), gem.idle_work);
27-
bool park;
28-
29-
cancel_delayed_work_sync(&i915->gem.retire_work);
30-
mutex_lock(&i915->drm.struct_mutex);
31-
32-
intel_wakeref_lock(&i915->gt.wakeref);
33-
park = (!intel_wakeref_is_active(&i915->gt.wakeref) &&
34-
!work_pending(work));
35-
intel_wakeref_unlock(&i915->gt.wakeref);
36-
if (park)
37-
i915_gem_park(i915);
38-
else
39-
queue_delayed_work(i915->wq,
40-
&i915->gem.retire_work,
41-
round_jiffies_up_relative(HZ));
42-
43-
mutex_unlock(&i915->drm.struct_mutex);
44-
}
45-
4623
static void retire_work_handler(struct work_struct *work)
4724
{
4825
struct drm_i915_private *i915 =
@@ -71,7 +48,7 @@ static int pm_notifier(struct notifier_block *nb,
7148
break;
7249

7350
case INTEL_GT_PARK:
74-
queue_work(i915->wq, &i915->gem.idle_work);
51+
i915_gem_park(i915);
7552
break;
7653
}
7754

@@ -264,7 +241,6 @@ void i915_gem_resume(struct drm_i915_private *i915)
264241

265242
void i915_gem_init__pm(struct drm_i915_private *i915)
266243
{
267-
INIT_WORK(&i915->gem.idle_work, idle_work_handler);
268244
INIT_DELAYED_WORK(&i915->gem.retire_work, retire_work_handler);
269245

270246
i915->gem.pm_notifier.notifier_call = pm_notifier;

drivers/gpu/drm/i915/gem/selftests/i915_gem_mman.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -572,11 +572,8 @@ static bool assert_mmap_offset(struct drm_i915_private *i915,
572572
static void disable_retire_worker(struct drm_i915_private *i915)
573573
{
574574
i915_gem_driver_unregister__shrinker(i915);
575-
576575
intel_gt_pm_get(&i915->gt);
577-
578576
cancel_delayed_work_sync(&i915->gem.retire_work);
579-
flush_work(&i915->gem.idle_work);
580577
}
581578

582579
static void restore_retire_worker(struct drm_i915_private *i915)

drivers/gpu/drm/i915/i915_debugfs.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3662,11 +3662,6 @@ i915_drop_caches_set(void *data, u64 val)
36623662
i915_gem_shrink_all(i915);
36633663
fs_reclaim_release(GFP_KERNEL);
36643664

3665-
if (val & DROP_IDLE) {
3666-
flush_delayed_work(&i915->gem.retire_work);
3667-
flush_work(&i915->gem.idle_work);
3668-
}
3669-
36703665
if (val & DROP_FREED)
36713666
i915_gem_drain_freed_objects(i915);
36723667

drivers/gpu/drm/i915/i915_drv.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1719,15 +1719,6 @@ struct drm_i915_private {
17191719
* fires, go retire requests.
17201720
*/
17211721
struct delayed_work retire_work;
1722-
1723-
/**
1724-
* When we detect an idle GPU, we want to turn on
1725-
* powersaving features. So once we see that there
1726-
* are no more requests outstanding and no more
1727-
* arrive within a small period of time, we fire
1728-
* off the idle_work.
1729-
*/
1730-
struct work_struct idle_work;
17311722
} gem;
17321723

17331724
/* For i945gm vblank irq vs. C3 workaround */

drivers/gpu/drm/i915/selftests/mock_gem_device.c

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ static void mock_device_release(struct drm_device *dev)
5555

5656
mock_device_flush(i915);
5757

58-
flush_work(&i915->gem.idle_work);
5958
i915_gem_drain_workqueue(i915);
6059

6160
mutex_lock(&i915->drm.struct_mutex);
@@ -103,10 +102,6 @@ static void mock_retire_work_handler(struct work_struct *work)
103102
{
104103
}
105104

106-
static void mock_idle_work_handler(struct work_struct *work)
107-
{
108-
}
109-
110105
static int pm_domain_resume(struct device *dev)
111106
{
112107
return pm_generic_runtime_resume(dev);
@@ -187,7 +182,6 @@ struct drm_i915_private *mock_gem_device(void)
187182
mock_init_contexts(i915);
188183

189184
INIT_DELAYED_WORK(&i915->gem.retire_work, mock_retire_work_handler);
190-
INIT_WORK(&i915->gem.idle_work, mock_idle_work_handler);
191185

192186
intel_timelines_init(i915);
193187

0 commit comments

Comments
 (0)