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:
parent
d0a977e001
commit
691e04d2ba
@ -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");
|
||||||
|
Loading…
Reference in New Issue
Block a user