[regression] "drm/i915: implement new pm ops" disables irq on aborted s2disk

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

I found this regression on my EeePC 701 with modesetting enabled. When I hibernate using s2disk, I can abort the hibernation by pressing the backspace key. Doing so breaks X on 2.6.32-rc6 (but not 2.6.32).

X resumes where it left off, but the problem is that the screen is frozen (except for the cursor). The system still responds to input. E.g. if I hibernate from Konsole and type "find /" on resume, I don't see any result on the screen, but I can see the disk activity LED flashing madly. I can also switch to text consoles, which work as normal.

The first bad commit in this scenario is v2.6.32-7504-gcbda12d: "drm/i915: implement new pm ops for i915". I think the problem is that it (deliberately) turns "thaw" into a no-op. That said, this "first bad" behaviour was somewhat different. When I checked out this commit and tested it, it looked more like X was crashing and being repeatedly restarted. The screen went black, and every few seconds it flickered, showing a text console for a fraction of a second and then going black again.

A few commits further on at v2.6.32-7518-ge3d8aff, I get the same behaviour as v2.6.33-rc6. I didn't bother to find out exactly where this change happens.

On v2.6.32-7518-ge3d8aff, I was able to observe that aborting s2disk leaves the i915 interrupt [IRQ16] disabled:

Before s2disk:

$ cat /proc/interrupts
CPU0 0: 2030 IO-APIC-edge timer
  1:        191   IO-APIC-edge      i8042
  8:          1   IO-APIC-edge      rtc0
  9:         51   IO-APIC-fasteoi   acpi
 12:        525   IO-APIC-edge      i8042
 14:          0   IO-APIC-edge      ata_piix
 15:       4954   IO-APIC-edge      ata_piix
 16:        123   IO-APIC-fasteoi   uhci_hcd:usb5, i915
 18:        134   IO-APIC-fasteoi   uhci_hcd:usb4, ath
19: 0 IO-APIC-fasteoi uhci_hcd:usb3 23: 345 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb2
 27:        169   PCI-MSI-edge      HDA Intel
 28:        150   PCI-MSI-edge      eth0
NMI:          0   Non-maskable interrupts
...

After aborting s2disk:

$ cat /proc/interrupts
           CPU0
  0:       3241   IO-APIC-edge      timer
  1:        325   IO-APIC-edge      i8042
  8:          1   IO-APIC-edge      rtc0
  9:         79   IO-APIC-fasteoi   acpi
 12:        525   IO-APIC-edge      i8042
 14:          0   IO-APIC-edge      ata_piix
 15:       5812   IO-APIC-edge      ata_piix
 16:        160   IO-APIC-fasteoi   uhci_hcd:usb5
 18:        231   IO-APIC-fasteoi   uhci_hcd:usb4, ath
 19:          0   IO-APIC-fasteoi   uhci_hcd:usb3
 23:        726   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb2
 27:          0   PCI-MSI-edge      HDA Intel
 28:        102   PCI-MSI-edge      eth0
NMI:          0   Non-maskable interrupts
...


Without looking at the code, my suggestion is that

a) It looks like "freeze" disables the interrupt, and "thaw" is no longer re-enabling it.

b) *If* this is the only problem, it could be fixed by not explicitly disabling the interrupt in the "freeze" callback. In any case this would be the right thing to do, since the PCI core now takes responsibility for disabling IRQs over suspend (mentioned here: http://article.gmane.org/gmane.linux.kernel.pci/4696).

Regards
Alan
--
To unsubscribe from this list: send the line "unsubscribe kernel-testers" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux