diff options
| author | 2008-11-25 17:06:03 +0000 | |
|---|---|---|
| committer | 2008-11-25 17:06:03 +0000 | |
| commit | 3084979f04b659cc4785fb2d139fb814beca4f7a (patch) | |
| tree | 106e6d5831b0564dda3fe45bb315b9cf71d598ef /sys/dev/pci/drm/drm_irq.c | |
| parent | Even if neither stdin nor stdout are ttys we may still have /dev/tty (diff) | |
| download | wireguard-openbsd-3084979f04b659cc4785fb2d139fb814beca4f7a.tar.xz wireguard-openbsd-3084979f04b659cc4785fb2d139fb814beca4f7a.zip | |
Don't try and enable the vblank handler if irqs are disabled.
This is the source of the radeon issues with seizing at X startup. I
didn't see this since my test box in coimbra is a pcie amd64 machine
running MP. i.e. it has a slightly less shitty interrupt controller.
Diffstat (limited to 'sys/dev/pci/drm/drm_irq.c')
| -rw-r--r-- | sys/dev/pci/drm/drm_irq.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/sys/dev/pci/drm/drm_irq.c b/sys/dev/pci/drm/drm_irq.c index 065ce7449d1..64dd726682e 100644 --- a/sys/dev/pci/drm/drm_irq.c +++ b/sys/dev/pci/drm/drm_irq.c @@ -235,18 +235,20 @@ drm_vblank_get(struct drm_device *dev, int crtc) { int ret = 0; - DRM_SPINLOCK(&dev->vbl_lock); + if (dev_priv->irq_enabled == 0) + return (EINVAL); + DRM_SPINLOCK(&dev->vbl_lock); atomic_add(1, &dev->vblank[crtc].vbl_refcount); if (dev->vblank[crtc].vbl_refcount == 1 && dev->vblank[crtc].vbl_enabled == 0) { - ret = dev->driver->enable_vblank(dev, crtc); - if (ret) { - atomic_dec(&dev->vblank[crtc].vbl_refcount); - } else { + if ((ret = dev->driver->enable_vblank(dev, crtc)) == 0) { dev->vblank[crtc].vbl_enabled = 1; drm_update_vblank_count(dev, crtc); + } else { + atomic_dec(&dev->vblank[crtc].vbl_refcount); } + } DRM_SPINUNLOCK(&dev->vbl_lock); @@ -256,6 +258,9 @@ drm_vblank_get(struct drm_device *dev, int crtc) void drm_vblank_put(struct drm_device *dev, int crtc) { + if (dev->irq_enabled == 0) + return; + DRM_SPINLOCK(&dev->vbl_lock); /* Last user schedules interrupt disable */ atomic_dec(&dev->vblank[crtc].vbl_refcount); |
