The current drm_locked_task*() code sometimes tries to sleep in an
authoroga <oga@openbsd.org>
Mon, 7 Jul 2008 16:29:57 +0000 (16:29 +0000)
committeroga <oga@openbsd.org>
Mon, 7 Jul 2008 16:29:57 +0000 (16:29 +0000)
commitf7ae2e58961a90a99d5f7fbf2ea2c1a817a9deb7
tree495bf431a9e9623ab52b1b8180133be7ca5722d8
parente89f6257b3946a8e1db1f4532bbcbf055e9e8f34
The current drm_locked_task*() code sometimes tries to sleep in an
interrupt handler.

This is bad and wrong. So change it so that if we can't immediately grab
the hardware lock, to just leave the task flagged so that we can run it
when we release the lock. The linux implementation uses a similar
scheme.

Tested by guenther@, landry@ and bernd@. Also tested by many a while
ago as part of a larger diff.
sys/dev/pci/drm/drmP.h
sys/dev/pci/drm/drm_drv.c
sys/dev/pci/drm/drm_irq.c
sys/dev/pci/drm/drm_lock.c