Lines 395-400
gen6_pm_rps_work_func(void *arg, int pending)
Link Here
|
395 |
drm_i915_private_t *dev_priv; |
395 |
drm_i915_private_t *dev_priv; |
396 |
u8 new_delay; |
396 |
u8 new_delay; |
397 |
u32 pm_iir, pm_imr; |
397 |
u32 pm_iir, pm_imr; |
|
|
398 |
bool was_locked = false; |
398 |
|
399 |
|
399 |
dev_priv = (drm_i915_private_t *)arg; |
400 |
dev_priv = (drm_i915_private_t *)arg; |
400 |
dev = dev_priv->dev; |
401 |
dev = dev_priv->dev; |
Lines 410-416
gen6_pm_rps_work_func(void *arg, int pending)
Link Here
|
410 |
if (!pm_iir) |
411 |
if (!pm_iir) |
411 |
return; |
412 |
return; |
412 |
|
413 |
|
413 |
DRM_LOCK(dev); |
414 |
/* DRM_LOCK(dev); */ |
|
|
415 |
if (!sx_try_xlock(&dev->dev_struct_lock)) |
416 |
was_locked = true; |
417 |
|
414 |
if (pm_iir & GEN6_PM_RP_UP_THRESHOLD) { |
418 |
if (pm_iir & GEN6_PM_RP_UP_THRESHOLD) { |
415 |
if (dev_priv->cur_delay != dev_priv->max_delay) |
419 |
if (dev_priv->cur_delay != dev_priv->max_delay) |
416 |
new_delay = dev_priv->cur_delay + 1; |
420 |
new_delay = dev_priv->cur_delay + 1; |
Lines 442-448
gen6_pm_rps_work_func(void *arg, int pending)
Link Here
|
442 |
* an *extremely* unlikely race with gen6_rps_enable() that is prevented |
446 |
* an *extremely* unlikely race with gen6_rps_enable() that is prevented |
443 |
* by holding struct_mutex for the duration of the write. |
447 |
* by holding struct_mutex for the duration of the write. |
444 |
*/ |
448 |
*/ |
445 |
DRM_UNLOCK(dev); |
449 |
if (!was_locked) |
|
|
450 |
DRM_UNLOCK(dev); |
446 |
} |
451 |
} |
447 |
|
452 |
|
448 |
static void pch_irq_handler(struct drm_device *dev) |
453 |
static void pch_irq_handler(struct drm_device *dev) |