Here's a really good idea: when preparing for a vt switch the intel

driver idles the ringbuffer, stops it, unbinds all memory, then hands
back off.

Now here's the clever bit: just before we call to idle the ringbuffer
(which sleeps waiting for an interrupt) let's TURN OFF THE FUCKING
INTERRUPT. That's a great idea, really, isn't it?

Move the interrupt disable to *after* stop_ring. Theo's T61 VT switches
again.  everyone elses' intel stuff worked by magic (or shared
interrupts) before now.

Fixed after discussion with deraadt@, thanks to miod for suggestions.
This commit is contained in:
oga 2010-04-07 18:22:00 +00:00
parent d0a977e001
commit 691e04d2ba

View File

@ -3400,7 +3400,6 @@ I830LeaveVT(int scrnIndex, int flags)
if (!pI830->memory_manager) { if (!pI830->memory_manager) {
I830DRISetVBlankInterrupt (pScrn, FALSE); I830DRISetVBlankInterrupt (pScrn, FALSE);
drmCtlUninstHandler(pI830->drmSubFD);
} }
} }
#endif #endif
@ -3432,8 +3431,10 @@ I830LeaveVT(int scrnIndex, int flags)
if (!pI830->memory_manager) if (!pI830->memory_manager)
intel_bufmgr_fake_evict_all(pI830->bufmgr); intel_bufmgr_fake_evict_all(pI830->bufmgr);
if (!pI830->memory_manager) if (!pI830->memory_manager) {
i830_stop_ring(pScrn, TRUE); i830_stop_ring(pScrn, TRUE);
drmCtlUninstHandler(pI830->drmSubFD);
}
if (pI830->debug_modes) { if (pI830->debug_modes) {
i830CompareRegsToSnapshot(pScrn, "After LeaveVT"); i830CompareRegsToSnapshot(pScrn, "After LeaveVT");