drm/i915: sanity check IER at wait_request time
We might sleep here anyway so I hope an extra uncached read is ok to add. In #20896 we found that vbetool clobbers the IER. In KMS mode this is particularly bad since we don't set the interrupt regs late (in EnterVT), so we'd fail to get *any* interrupts at all after X started (since some distros have scripts that call vbetool at X startup apparently). So this patch checks IER at wait_request time, and re-enables interrupts if it's been clobbered. In a proper config this check should never be triggered. This is really a distro issue, but having a sanity check is nice, as long as it doesn't have a real performance hit. Tested-by: Mateusz Kaduk <mateusz.kaduk@gmail.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org> [anholt: Moved the check inside of the sleeping case to avoid perf cost] Signed-off-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
0ba0e9e1f1
commit
802c7eb646
|
@ -1691,11 +1691,20 @@ static int
|
||||||
i915_wait_request(struct drm_device *dev, uint32_t seqno)
|
i915_wait_request(struct drm_device *dev, uint32_t seqno)
|
||||||
{
|
{
|
||||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||||
|
u32 ier;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
BUG_ON(seqno == 0);
|
BUG_ON(seqno == 0);
|
||||||
|
|
||||||
if (!i915_seqno_passed(i915_get_gem_seqno(dev), seqno)) {
|
if (!i915_seqno_passed(i915_get_gem_seqno(dev), seqno)) {
|
||||||
|
ier = I915_READ(IER);
|
||||||
|
if (!ier) {
|
||||||
|
DRM_ERROR("something (likely vbetool) disabled "
|
||||||
|
"interrupts, re-enabling\n");
|
||||||
|
i915_driver_irq_preinstall(dev);
|
||||||
|
i915_driver_irq_postinstall(dev);
|
||||||
|
}
|
||||||
|
|
||||||
dev_priv->mm.waiting_gem_seqno = seqno;
|
dev_priv->mm.waiting_gem_seqno = seqno;
|
||||||
i915_user_irq_get(dev);
|
i915_user_irq_get(dev);
|
||||||
ret = wait_event_interruptible(dev_priv->irq_queue,
|
ret = wait_event_interruptible(dev_priv->irq_queue,
|
||||||
|
|
Loading…
Reference in New Issue