All of lore.kernel.org
 help / color / mirror / Atom feed
* 2.6.33-rc8 regression on i915: resume from hibernate locks up every  2nd time
@ 2010-02-17 18:47 Pedro Ribeiro
  2010-02-17 20:11 ` Rafael J. Wysocki
  0 siblings, 1 reply; 18+ messages in thread
From: Pedro Ribeiro @ 2010-02-17 18:47 UTC (permalink / raw)
  To: linux-kernel, intel-gfx, Rafael J. Wysocki

[-- Attachment #1: Type: text/plain, Size: 576 bytes --]

Hi,

commit 84b79f8d2882b0a84330c04839ed4d3cefd2ff77 (drm/i915: Fix crash
while aborting hibernation) introduced two new issues which were not
present in 2.6.33-rc7:

- every second resume from hibernate results in a blank screen
- the annoying flash at the end of atomic copy/restore during the
hibernate process is back (present in kernels < 2.6.33)

The first issue is serious, the second is just an annoyance.

Reverting this commit fixes both issues.

My platform is Lenovo T400, G45 chipset.

lspci is attached, please let me know if you need more info.

Regards,
Pedro

[-- Attachment #2: lspci --]
[-- Type: application/octet-stream, Size: 14058 bytes --]

00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07)
	Subsystem: Lenovo Device 20e0
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort+ >SERR- <PERR- INTx-
	Latency: 0
	Capabilities: <access denied>
	Kernel driver in use: agpgart-intel

00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07) (prog-if 00 [VGA controller])
	Subsystem: Lenovo Device 20e4
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin A routed to IRQ 31
	Region 0: Memory at f4400000 (64-bit, non-prefetchable) [size=4M]
	Region 2: Memory at d0000000 (64-bit, prefetchable) [size=256M]
	Region 4: I/O ports at 1800 [size=8]
	Expansion ROM at <unassigned> [disabled]
	Capabilities: <access denied>
	Kernel driver in use: i915

00:02.1 Display controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)
	Subsystem: Lenovo Device 20e4
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Region 0: Memory at f4200000 (64-bit, non-prefetchable) [size=1M]
	Capabilities: <access denied>

00:03.0 Communication controller: Intel Corporation Mobile 4 Series Chipset MEI Controller (rev 07)
	Subsystem: Lenovo Device 20e6
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin A routed to IRQ 11
	Region 0: Memory at fc225800 (64-bit, non-prefetchable) [size=16]
	Capabilities: <access denied>

00:19.0 Ethernet controller: Intel Corporation 82567LF Gigabit Network Connection (rev 03)
	Subsystem: Lenovo Device 20ee
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin A routed to IRQ 27
	Region 0: Memory at fc000000 (32-bit, non-prefetchable) [size=128K]
	Region 1: Memory at fc024000 (32-bit, non-prefetchable) [size=4K]
	Region 2: I/O ports at 1820 [size=32]
	Capabilities: <access denied>
	Kernel driver in use: e1000e

00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03) (prog-if 00 [UHCI])
	Subsystem: Lenovo Device 20f0
	Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin A routed to IRQ 20
	Region 4: I/O ports at 1840 [size=32]
	Capabilities: <access denied>
	Kernel driver in use: uhci_hcd

00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 03) (prog-if 00 [UHCI])
	Subsystem: Lenovo Device 20f0
	Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin B routed to IRQ 21
	Region 4: I/O ports at 1860 [size=32]
	Capabilities: <access denied>
	Kernel driver in use: uhci_hcd

00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 03) (prog-if 00 [UHCI])
	Subsystem: Lenovo Device 20f0
	Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin C routed to IRQ 22
	Region 4: I/O ports at 1880 [size=32]
	Capabilities: <access denied>
	Kernel driver in use: uhci_hcd

00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03) (prog-if 20 [EHCI])
	Subsystem: Lenovo Device 20f1
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin D routed to IRQ 23
	Region 0: Memory at fc225c00 (32-bit, non-prefetchable) [size=1K]
	Capabilities: <access denied>
	Kernel driver in use: ehci_hcd

00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)
	Subsystem: Lenovo Device 20f2
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Interrupt: pin B routed to IRQ 30
	Region 0: Memory at fc020000 (64-bit, non-prefetchable) [size=16K]
	Capabilities: <access denied>
	Kernel driver in use: HDA Intel

00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03) (prog-if 00 [Normal decode])
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Bus: primary=00, secondary=02, subordinate=02, sec-latency=0
	I/O behind bridge: 00002000-00002fff
	Memory behind bridge: c0000000-c01fffff
	Prefetchable memory behind bridge: 00000000c0200000-00000000c03fffff
	Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
	BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B-
		PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
	Capabilities: <access denied>
	Kernel driver in use: pcieport

00:1c.1 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 2 (rev 03) (prog-if 00 [Normal decode])
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Bus: primary=00, secondary=03, subordinate=03, sec-latency=0
	I/O behind bridge: 00008000-00008fff
	Memory behind bridge: f4300000-f43fffff
	Prefetchable memory behind bridge: 00000000c0400000-00000000c05fffff
	Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
	BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B-
		PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
	Capabilities: <access denied>
	Kernel driver in use: pcieport

00:1c.4 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 5 (rev 03) (prog-if 00 [Normal decode])
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Bus: primary=00, secondary=0d, subordinate=14, sec-latency=0
	I/O behind bridge: 00003000-00003fff
	Memory behind bridge: fa000000-fbffffff
	Prefetchable memory behind bridge: 00000000f4100000-00000000f41fffff
	Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
	BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B-
		PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
	Capabilities: <access denied>
	Kernel driver in use: pcieport

00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03) (prog-if 00 [UHCI])
	Subsystem: Lenovo Device 20f0
	Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin A routed to IRQ 16
	Region 4: I/O ports at 18a0 [size=32]
	Capabilities: <access denied>
	Kernel driver in use: uhci_hcd

00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03) (prog-if 00 [UHCI])
	Subsystem: Lenovo Device 20f0
	Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin B routed to IRQ 17
	Region 4: I/O ports at 18c0 [size=32]
	Capabilities: <access denied>
	Kernel driver in use: uhci_hcd

00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03) (prog-if 00 [UHCI])
	Subsystem: Lenovo Device 20f0
	Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin C routed to IRQ 18
	Region 4: I/O ports at 18e0 [size=32]
	Capabilities: <access denied>
	Kernel driver in use: uhci_hcd

00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03) (prog-if 20 [EHCI])
	Subsystem: Lenovo Device 20f1
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin D routed to IRQ 19
	Region 0: Memory at fc226000 (32-bit, non-prefetchable) [size=1K]
	Capabilities: <access denied>
	Kernel driver in use: ehci_hcd

00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93) (prog-if 01 [Subtractive decode])
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Bus: primary=00, secondary=15, subordinate=18, sec-latency=32
	I/O behind bridge: 00004000-00007fff
	Memory behind bridge: f4800000-f7ffffff
	Prefetchable memory behind bridge: 00000000f0000000-00000000f3ffffff
	Secondary status: 66MHz- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort+ <SERR- <PERR-
	BridgeCtl: Parity- SERR- NoISA+ VGA- MAbort- >Reset- FastB2B-
		PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
	Capabilities: <access denied>

00:1f.0 ISA bridge: Intel Corporation ICH9M LPC Interface Controller (rev 03)
	Subsystem: Lenovo Device 20f6
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Capabilities: <access denied>

00:1f.2 SATA controller: Intel Corporation ICH9M/M-E SATA AHCI Controller (rev 03) (prog-if 01 [AHCI 1.0])
	Subsystem: Lenovo Device 20f8
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
	Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0
	Interrupt: pin B routed to IRQ 28
	Region 0: I/O ports at 1818 [size=8]
	Region 1: I/O ports at 180c [size=4]
	Region 2: I/O ports at 1810 [size=8]
	Region 3: I/O ports at 1808 [size=4]
	Region 4: I/O ports at 1c00 [size=32]
	Region 5: Memory at fc225000 (32-bit, non-prefetchable) [size=2K]
	Capabilities: <access denied>
	Kernel driver in use: ahci

00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 03)
	Subsystem: Lenovo Device 20f9
	Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
	Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Interrupt: pin A routed to IRQ 23
	Region 0: Memory at fc226400 (64-bit, non-prefetchable) [size=256]
	Region 4: I/O ports at 1c20 [size=32]
	Kernel driver in use: i801_smbus

03:00.0 Network controller: Intel Corporation PRO/Wireless 5100 AGN [Shiloh] Network Connection
	Subsystem: Intel Corporation PRO/Wireless 5100AGN Network Connection
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Interrupt: pin A routed to IRQ 29
	Region 0: Memory at f4300000 (64-bit, non-prefetchable) [size=8K]
	Capabilities: <access denied>
	Kernel driver in use: iwlagn

15:00.0 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev ba)
	Subsystem: Lenovo Device 20c6
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 32, Cache Line Size: 64 bytes
	Interrupt: pin A routed to IRQ 16
	Region 0: Memory at f4800000 (32-bit, non-prefetchable) [size=4K]
	Bus: primary=15, secondary=16, subordinate=17, sec-latency=176
	Memory window 0: f0000000-f3fff000 (prefetchable)
	Memory window 1: c4000000-c7fff000 (prefetchable)
	I/O window 0: 00004000-000040ff
	I/O window 1: 00004400-000044ff
	BridgeCtl: Parity- SERR- ISA- VGA- MAbort- >Reset- 16bInt+ PostWrite+
	16-bit legacy interface ports at 0001

15:00.1 FireWire (IEEE 1394): Ricoh Co Ltd R5C832 IEEE 1394 Controller (rev 04) (prog-if 10 [OHCI])
	Subsystem: Lenovo Device 20c7
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 32 (500ns min, 1000ns max), Cache Line Size: 64 bytes
	Interrupt: pin B routed to IRQ 17
	Region 0: Memory at f4801000 (32-bit, non-prefetchable) [size=2K]
	Capabilities: <access denied>


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: 2.6.33-rc8 regression on i915: resume from hibernate locks up every 2nd time
  2010-02-17 18:47 2.6.33-rc8 regression on i915: resume from hibernate locks up every 2nd time Pedro Ribeiro
@ 2010-02-17 20:11 ` Rafael J. Wysocki
  2010-02-17 20:52   ` Rafael J. Wysocki
  0 siblings, 1 reply; 18+ messages in thread
From: Rafael J. Wysocki @ 2010-02-17 20:11 UTC (permalink / raw)
  To: Pedro Ribeiro; +Cc: linux-kernel, intel-gfx

On Wednesday 17 February 2010, Pedro Ribeiro wrote:
> Hi,
> 
> commit 84b79f8d2882b0a84330c04839ed4d3cefd2ff77 (drm/i915: Fix crash
> while aborting hibernation) introduced two new issues which were not
> present in 2.6.33-rc7:
> 
> - every second resume from hibernate results in a blank screen
> - the annoying flash at the end of atomic copy/restore during the
> hibernate process is back (present in kernels < 2.6.33)
> 
> The first issue is serious, the second is just an annoyance.

The second one is an expected price of fixing the aborted hibernation
regression.

The first one shouldn't happen, though.

I'll see if I can reproduce that locally.

Rafael

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: 2.6.33-rc8 regression on i915: resume from hibernate locks up every 2nd time
  2010-02-17 20:11 ` Rafael J. Wysocki
@ 2010-02-17 20:52   ` Rafael J. Wysocki
  2010-02-17 22:10     ` Pedro Ribeiro
  0 siblings, 1 reply; 18+ messages in thread
From: Rafael J. Wysocki @ 2010-02-17 20:52 UTC (permalink / raw)
  To: Pedro Ribeiro; +Cc: linux-kernel, dri-devel

On Wednesday 17 February 2010, Rafael J. Wysocki wrote:
> On Wednesday 17 February 2010, Pedro Ribeiro wrote:
> > Hi,
> > 
> > commit 84b79f8d2882b0a84330c04839ed4d3cefd2ff77 (drm/i915: Fix crash
> > while aborting hibernation) introduced two new issues which were not
> > present in 2.6.33-rc7:
> > 
> > - every second resume from hibernate results in a blank screen
> > - the annoying flash at the end of atomic copy/restore during the
> > hibernate process is back (present in kernels < 2.6.33)
> > 
> > The first issue is serious, the second is just an annoyance.
> 
> The second one is an expected price of fixing the aborted hibernation
> regression.
> 
> The first one shouldn't happen, though.
> 
> I'll see if I can reproduce that locally.

No, I can't.

Is the driver compiled directly into the kernel or modular?

Rafael

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: 2.6.33-rc8 regression on i915: resume from hibernate locks up  every 2nd time
  2010-02-17 20:52   ` Rafael J. Wysocki
@ 2010-02-17 22:10     ` Pedro Ribeiro
  2010-02-17 22:20       ` Rafael J. Wysocki
  0 siblings, 1 reply; 18+ messages in thread
From: Pedro Ribeiro @ 2010-02-17 22:10 UTC (permalink / raw)
  To: Rafael J. Wysocki; +Cc: linux-kernel, intel-gfx

2010/2/17 Rafael J. Wysocki <rjw@sisk.pl>:
> On Wednesday 17 February 2010, Rafael J. Wysocki wrote:
>> On Wednesday 17 February 2010, Pedro Ribeiro wrote:
>> > Hi,
>> >
>> > commit 84b79f8d2882b0a84330c04839ed4d3cefd2ff77 (drm/i915: Fix crash
>> > while aborting hibernation) introduced two new issues which were not
>> > present in 2.6.33-rc7:
>> >
>> > - every second resume from hibernate results in a blank screen
>> > - the annoying flash at the end of atomic copy/restore during the
>> > hibernate process is back (present in kernels < 2.6.33)
>> >
>> > The first issue is serious, the second is just an annoyance.
>>
>> The second one is an expected price of fixing the aborted hibernation
>> regression.
>>
>> The first one shouldn't happen, though.
>>
>> I'll see if I can reproduce that locally.
>
> No, I can't.
>
> Is the driver compiled directly into the kernel or modular?
>
> Rafael
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>

The driver is modular.
And sorry, I forgot to tell you I'm using TuxOnIce, it certainly makes
a difference.

However, every since I reverted that commit I've done 10 test
hibernations and no hang so far.

Pedro

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: 2.6.33-rc8 regression on i915: resume from hibernate locks up every 2nd time
  2010-02-17 22:10     ` Pedro Ribeiro
@ 2010-02-17 22:20       ` Rafael J. Wysocki
  2010-02-17 22:41         ` Nigel Cunningham
                           ` (2 more replies)
  0 siblings, 3 replies; 18+ messages in thread
From: Rafael J. Wysocki @ 2010-02-17 22:20 UTC (permalink / raw)
  To: Pedro Ribeiro; +Cc: linux-kernel, dri-devel

On Wednesday 17 February 2010, Pedro Ribeiro wrote:
> 2010/2/17 Rafael J. Wysocki <rjw@sisk.pl>:
> > On Wednesday 17 February 2010, Rafael J. Wysocki wrote:
> >> On Wednesday 17 February 2010, Pedro Ribeiro wrote:
> >> > Hi,
> >> >
> >> > commit 84b79f8d2882b0a84330c04839ed4d3cefd2ff77 (drm/i915: Fix crash
> >> > while aborting hibernation) introduced two new issues which were not
> >> > present in 2.6.33-rc7:
> >> >
> >> > - every second resume from hibernate results in a blank screen
> >> > - the annoying flash at the end of atomic copy/restore during the
> >> > hibernate process is back (present in kernels < 2.6.33)
> >> >
> >> > The first issue is serious, the second is just an annoyance.
> >>
> >> The second one is an expected price of fixing the aborted hibernation
> >> regression.
> >>
> >> The first one shouldn't happen, though.
> >>
> >> I'll see if I can reproduce that locally.
> >
> > No, I can't.
> >
> > Is the driver compiled directly into the kernel or modular?
> 
> The driver is modular.
> And sorry, I forgot to tell you I'm using TuxOnIce, it certainly makes
> a difference.

It shouldn't in fact, although I'm not sure.

> However, every since I reverted that commit I've done 10 test
> hibernations and no hang so far.

First, please try if you can reproduce it with non-modular driver.

Second, please check if the appended patch helps.

Rafael

---
 drivers/gpu/drm/i915/i915_drv.c |   30 +++++++++---------------------
 1 file changed, 9 insertions(+), 21 deletions(-)

Index: linux-2.6/drivers/gpu/drm/i915/i915_drv.c
===================================================================
--- linux-2.6.orig/drivers/gpu/drm/i915/i915_drv.c
+++ linux-2.6/drivers/gpu/drm/i915/i915_drv.c
@@ -177,6 +177,8 @@ MODULE_DEVICE_TABLE(pci, pciidlist);
 
 static int i915_drm_freeze(struct drm_device *dev)
 {
+	struct drm_i915_private *dev_priv = dev->dev_private;
+
 	pci_save_state(dev->pdev);
 
 	/* If KMS is active, we do the leavevt stuff here */
@@ -192,17 +194,12 @@ static int i915_drm_freeze(struct drm_de
 
 	i915_save_state(dev);
 
-	return 0;
-}
-
-static void i915_drm_suspend(struct drm_device *dev)
-{
-	struct drm_i915_private *dev_priv = dev->dev_private;
-
 	intel_opregion_free(dev, 1);
 
 	/* Modeset on resume, not lid events */
 	dev_priv->modeset_on_lid = 0;
+
+	return 0;
 }
 
 static int i915_suspend(struct drm_device *dev, pm_message_t state)
@@ -222,8 +219,6 @@ static int i915_suspend(struct drm_devic
 	if (error)
 		return error;
 
-	i915_drm_suspend(dev);
-
 	if (state.event == PM_EVENT_SUSPEND) {
 		/* Shut down the device */
 		pci_disable_device(dev->pdev);
@@ -238,6 +233,10 @@ static int i915_drm_thaw(struct drm_devi
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	int error = 0;
 
+	i915_restore_state(dev);
+
+	intel_opregion_init(dev, 1);
+
 	/* KMS EnterVT equivalent */
 	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
 		mutex_lock(&dev->struct_mutex);
@@ -264,10 +263,6 @@ static int i915_resume(struct drm_device
 
 	pci_set_master(dev->pdev);
 
-	i915_restore_state(dev);
-
-	intel_opregion_init(dev, 1);
-
 	return i915_drm_thaw(dev);
 }
 
@@ -424,8 +419,6 @@ static int i915_pm_suspend(struct device
 	if (error)
 		return error;
 
-	i915_drm_suspend(drm_dev);
-
 	pci_disable_device(pdev);
 	pci_set_power_state(pdev, PCI_D3hot);
 
@@ -465,13 +458,8 @@ static int i915_pm_poweroff(struct devic
 {
 	struct pci_dev *pdev = to_pci_dev(dev);
 	struct drm_device *drm_dev = pci_get_drvdata(pdev);
-	int error;
-
-	error = i915_drm_freeze(drm_dev);
-	if (!error)
-		i915_drm_suspend(drm_dev);
 
-	return error;
+	return i915_drm_freeze(drm_dev);
 }
 
 const struct dev_pm_ops i915_pm_ops = {

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: 2.6.33-rc8 regression on i915: resume from hibernate locks up every 2nd time
  2010-02-17 22:20       ` Rafael J. Wysocki
@ 2010-02-17 22:41         ` Nigel Cunningham
  2010-02-18  0:02         ` Tino Keitel
  2010-02-18  0:29         ` Pedro Ribeiro
  2 siblings, 0 replies; 18+ messages in thread
From: Nigel Cunningham @ 2010-02-17 22:41 UTC (permalink / raw)
  To: Rafael J. Wysocki; +Cc: Pedro Ribeiro, linux-kernel, dri-devel

Hi Rafael.

Rafael J. Wysocki wrote:
> On Wednesday 17 February 2010, Pedro Ribeiro wrote:
>> 2010/2/17 Rafael J. Wysocki <rjw@sisk.pl>:
>>> On Wednesday 17 February 2010, Rafael J. Wysocki wrote:
>>>> On Wednesday 17 February 2010, Pedro Ribeiro wrote:
>>>>> Hi,
>>>>>
>>>>> commit 84b79f8d2882b0a84330c04839ed4d3cefd2ff77 (drm/i915: Fix crash
>>>>> while aborting hibernation) introduced two new issues which were not
>>>>> present in 2.6.33-rc7:
>>>>>
>>>>> - every second resume from hibernate results in a blank screen
>>>>> - the annoying flash at the end of atomic copy/restore during the
>>>>> hibernate process is back (present in kernels < 2.6.33)
>>>>>
>>>>> The first issue is serious, the second is just an annoyance.
>>>> The second one is an expected price of fixing the aborted hibernation
>>>> regression.
>>>>
>>>> The first one shouldn't happen, though.
>>>>
>>>> I'll see if I can reproduce that locally.
>>> No, I can't.
>>>
>>> Is the driver compiled directly into the kernel or modular?
>> The driver is modular.
>> And sorry, I forgot to tell you I'm using TuxOnIce, it certainly makes
>> a difference.
> 
> It shouldn't in fact, although I'm not sure.

You're right. It shouldn't. I'm using exactly the same driver model
calls in exactly the same order, and not changing driver code at all.

Regards,

Nigel

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: 2.6.33-rc8 regression on i915: resume from hibernate locks up every 2nd time
  2010-02-17 22:20       ` Rafael J. Wysocki
  2010-02-17 22:41         ` Nigel Cunningham
@ 2010-02-18  0:02         ` Tino Keitel
  2010-02-18  0:29         ` Pedro Ribeiro
  2 siblings, 0 replies; 18+ messages in thread
From: Tino Keitel @ 2010-02-18  0:02 UTC (permalink / raw)
  To: linux-kernel

On Wed, Feb 17, 2010 at 23:20:57 +0100, Rafael J. Wysocki wrote:

[...]

> First, please try if you can reproduce it with non-modular driver.

I got hangs at resume on my ThinkPad X61s with i965 graphics and
non-modular i915 driver. I got the hangs after suspend to RAM and
suspend to disk using TuxOnIce, but not every time. I reverted the 
commit metioned by Pedro and wasn't able to reproduce the hang after
several suspend cycles.

I'll also try the attached patch.

Regards,
Tino

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: 2.6.33-rc8 regression on i915: resume from hibernate locks up  every 2nd time
  2010-02-17 22:20       ` Rafael J. Wysocki
  2010-02-17 22:41         ` Nigel Cunningham
  2010-02-18  0:02         ` Tino Keitel
@ 2010-02-18  0:29         ` Pedro Ribeiro
  2010-02-18 22:06           ` [PATCH] i915 / PM: Fix hibernate regression caused by suspend/resume splitting Rafael J. Wysocki
  2010-02-18 22:06           ` Rafael J. Wysocki
  2 siblings, 2 replies; 18+ messages in thread
From: Pedro Ribeiro @ 2010-02-18  0:29 UTC (permalink / raw)
  To: Rafael J. Wysocki; +Cc: linux-kernel

On 17 February 2010 22:20, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> On Wednesday 17 February 2010, Pedro Ribeiro wrote:
>> 2010/2/17 Rafael J. Wysocki <rjw@sisk.pl>:
>> > On Wednesday 17 February 2010, Rafael J. Wysocki wrote:
>> >> On Wednesday 17 February 2010, Pedro Ribeiro wrote:
>> >> > Hi,
>> >> >
>> >> > commit 84b79f8d2882b0a84330c04839ed4d3cefd2ff77 (drm/i915: Fix crash
>> >> > while aborting hibernation) introduced two new issues which were not
>> >> > present in 2.6.33-rc7:
>> >> >
>> >> > - every second resume from hibernate results in a blank screen
>> >> > - the annoying flash at the end of atomic copy/restore during the
>> >> > hibernate process is back (present in kernels < 2.6.33)
>> >> >
>> >> > The first issue is serious, the second is just an annoyance.
>> >>
>> >> The second one is an expected price of fixing the aborted hibernation
>> >> regression.
>> >>
>> >> The first one shouldn't happen, though.
>> >>
>> >> I'll see if I can reproduce that locally.
>> >
>> > No, I can't.
>> >
>> > Is the driver compiled directly into the kernel or modular?
>>
>> The driver is modular.
>> And sorry, I forgot to tell you I'm using TuxOnIce, it certainly makes
>> a difference.
>
> It shouldn't in fact, although I'm not sure.
>
>> However, every since I reverted that commit I've done 10 test
>> hibernations and no hang so far.
>
> First, please try if you can reproduce it with non-modular driver.
>
> Second, please check if the appended patch helps.
>
> Rafael
>
> ---
>  drivers/gpu/drm/i915/i915_drv.c |   30 +++++++++---------------------
>  1 file changed, 9 insertions(+), 21 deletions(-)
>
> Index: linux-2.6/drivers/gpu/drm/i915/i915_drv.c
> ===================================================================
> --- linux-2.6.orig/drivers/gpu/drm/i915/i915_drv.c
> +++ linux-2.6/drivers/gpu/drm/i915/i915_drv.c
> @@ -177,6 +177,8 @@ MODULE_DEVICE_TABLE(pci, pciidlist);
>
>  static int i915_drm_freeze(struct drm_device *dev)
>  {
> +       struct drm_i915_private *dev_priv = dev->dev_private;
> +
>        pci_save_state(dev->pdev);
>
>        /* If KMS is active, we do the leavevt stuff here */
> @@ -192,17 +194,12 @@ static int i915_drm_freeze(struct drm_de
>
>        i915_save_state(dev);
>
> -       return 0;
> -}
> -
> -static void i915_drm_suspend(struct drm_device *dev)
> -{
> -       struct drm_i915_private *dev_priv = dev->dev_private;
> -
>        intel_opregion_free(dev, 1);
>
>        /* Modeset on resume, not lid events */
>        dev_priv->modeset_on_lid = 0;
> +
> +       return 0;
>  }
>
>  static int i915_suspend(struct drm_device *dev, pm_message_t state)
> @@ -222,8 +219,6 @@ static int i915_suspend(struct drm_devic
>        if (error)
>                return error;
>
> -       i915_drm_suspend(dev);
> -
>        if (state.event == PM_EVENT_SUSPEND) {
>                /* Shut down the device */
>                pci_disable_device(dev->pdev);
> @@ -238,6 +233,10 @@ static int i915_drm_thaw(struct drm_devi
>        struct drm_i915_private *dev_priv = dev->dev_private;
>        int error = 0;
>
> +       i915_restore_state(dev);
> +
> +       intel_opregion_init(dev, 1);
> +
>        /* KMS EnterVT equivalent */
>        if (drm_core_check_feature(dev, DRIVER_MODESET)) {
>                mutex_lock(&dev->struct_mutex);
> @@ -264,10 +263,6 @@ static int i915_resume(struct drm_device
>
>        pci_set_master(dev->pdev);
>
> -       i915_restore_state(dev);
> -
> -       intel_opregion_init(dev, 1);
> -
>        return i915_drm_thaw(dev);
>  }
>
> @@ -424,8 +419,6 @@ static int i915_pm_suspend(struct device
>        if (error)
>                return error;
>
> -       i915_drm_suspend(drm_dev);
> -
>        pci_disable_device(pdev);
>        pci_set_power_state(pdev, PCI_D3hot);
>
> @@ -465,13 +458,8 @@ static int i915_pm_poweroff(struct devic
>  {
>        struct pci_dev *pdev = to_pci_dev(dev);
>        struct drm_device *drm_dev = pci_get_drvdata(pdev);
> -       int error;
> -
> -       error = i915_drm_freeze(drm_dev);
> -       if (!error)
> -               i915_drm_suspend(drm_dev);
>
> -       return error;
> +       return i915_drm_freeze(drm_dev);
>  }
>
>  const struct dev_pm_ops i915_pm_ops = {
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>

The patch fixes this issue for me.

Thanks for your help.

Pedro

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH] i915 / PM: Fix hibernate regression caused by suspend/resume splitting
  2010-02-18  0:29         ` Pedro Ribeiro
  2010-02-18 22:06           ` [PATCH] i915 / PM: Fix hibernate regression caused by suspend/resume splitting Rafael J. Wysocki
@ 2010-02-18 22:06           ` Rafael J. Wysocki
  2010-02-19  6:39             ` Tino Keitel
                               ` (3 more replies)
  1 sibling, 4 replies; 18+ messages in thread
From: Rafael J. Wysocki @ 2010-02-18 22:06 UTC (permalink / raw)
  To: Pedro Ribeiro, Jesse Barnes, Eric Anholt
  Cc: linux-kernel, pm list, Linus Torvalds

On Thursday 18 February 2010, Pedro Ribeiro wrote:
> On 17 February 2010 22:20, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> > On Wednesday 17 February 2010, Pedro Ribeiro wrote:
> >> 2010/2/17 Rafael J. Wysocki <rjw@sisk.pl>:
> >> > On Wednesday 17 February 2010, Rafael J. Wysocki wrote:
> >> >> On Wednesday 17 February 2010, Pedro Ribeiro wrote:
> >> >> > Hi,
> >> >> >
> >> >> > commit 84b79f8d2882b0a84330c04839ed4d3cefd2ff77 (drm/i915: Fix crash
> >> >> > while aborting hibernation) introduced two new issues which were not
> >> >> > present in 2.6.33-rc7:
> >> >> >
> >> >> > - every second resume from hibernate results in a blank screen
> >> >> > - the annoying flash at the end of atomic copy/restore during the
> >> >> > hibernate process is back (present in kernels < 2.6.33)
> >> >> >
> >> >> > The first issue is serious, the second is just an annoyance.
> >> >>
> >> >> The second one is an expected price of fixing the aborted hibernation
> >> >> regression.
> >> >>
> >> >> The first one shouldn't happen, though.
> >> >>
> >> >> I'll see if I can reproduce that locally.
> >> >
> >> > No, I can't.
> >> >
> >> > Is the driver compiled directly into the kernel or modular?
> >>
> >> The driver is modular.
> >> And sorry, I forgot to tell you I'm using TuxOnIce, it certainly makes
> >> a difference.
> >
> > It shouldn't in fact, although I'm not sure.
> >
> >> However, every since I reverted that commit I've done 10 test
> >> hibernations and no hang so far.
> >
> > First, please try if you can reproduce it with non-modular driver.
> >
> > Second, please check if the appended patch helps.
> >
> > Rafael
> >
> > ---
> >  drivers/gpu/drm/i915/i915_drv.c |   30 +++++++++---------------------
> >  1 file changed, 9 insertions(+), 21 deletions(-)
> >
> > Index: linux-2.6/drivers/gpu/drm/i915/i915_drv.c
> > ===================================================================
> > --- linux-2.6.orig/drivers/gpu/drm/i915/i915_drv.c
> > +++ linux-2.6/drivers/gpu/drm/i915/i915_drv.c
> > @@ -177,6 +177,8 @@ MODULE_DEVICE_TABLE(pci, pciidlist);
> >
> >  static int i915_drm_freeze(struct drm_device *dev)
> >  {
> > +       struct drm_i915_private *dev_priv = dev->dev_private;
> > +
> >        pci_save_state(dev->pdev);
> >
> >        /* If KMS is active, we do the leavevt stuff here */
> > @@ -192,17 +194,12 @@ static int i915_drm_freeze(struct drm_de
> >
> >        i915_save_state(dev);
> >
> > -       return 0;
> > -}
> > -
> > -static void i915_drm_suspend(struct drm_device *dev)
> > -{
> > -       struct drm_i915_private *dev_priv = dev->dev_private;
> > -
> >        intel_opregion_free(dev, 1);
> >
> >        /* Modeset on resume, not lid events */
> >        dev_priv->modeset_on_lid = 0;
> > +
> > +       return 0;
> >  }
> >
> >  static int i915_suspend(struct drm_device *dev, pm_message_t state)
> > @@ -222,8 +219,6 @@ static int i915_suspend(struct drm_devic
> >        if (error)
> >                return error;
> >
> > -       i915_drm_suspend(dev);
> > -
> >        if (state.event == PM_EVENT_SUSPEND) {
> >                /* Shut down the device */
> >                pci_disable_device(dev->pdev);
> > @@ -238,6 +233,10 @@ static int i915_drm_thaw(struct drm_devi
> >        struct drm_i915_private *dev_priv = dev->dev_private;
> >        int error = 0;
> >
> > +       i915_restore_state(dev);
> > +
> > +       intel_opregion_init(dev, 1);
> > +
> >        /* KMS EnterVT equivalent */
> >        if (drm_core_check_feature(dev, DRIVER_MODESET)) {
> >                mutex_lock(&dev->struct_mutex);
> > @@ -264,10 +263,6 @@ static int i915_resume(struct drm_device
> >
> >        pci_set_master(dev->pdev);
> >
> > -       i915_restore_state(dev);
> > -
> > -       intel_opregion_init(dev, 1);
> > -
> >        return i915_drm_thaw(dev);
> >  }
> >
> > @@ -424,8 +419,6 @@ static int i915_pm_suspend(struct device
> >        if (error)
> >                return error;
> >
> > -       i915_drm_suspend(drm_dev);
> > -
> >        pci_disable_device(pdev);
> >        pci_set_power_state(pdev, PCI_D3hot);
> >
> > @@ -465,13 +458,8 @@ static int i915_pm_poweroff(struct devic
> >  {
> >        struct pci_dev *pdev = to_pci_dev(dev);
> >        struct drm_device *drm_dev = pci_get_drvdata(pdev);
> > -       int error;
> > -
> > -       error = i915_drm_freeze(drm_dev);
> > -       if (!error)
> > -               i915_drm_suspend(drm_dev);
> >
> > -       return error;
> > +       return i915_drm_freeze(drm_dev);
> >  }
> >
> >  const struct dev_pm_ops i915_pm_ops = {
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > Please read the FAQ at  http://www.tux.org/lkml/
> >
> 
> The patch fixes this issue for me.
> 
> Thanks for your help.

OK, thanks for testing, let's submit it appropriately.

Jesse, Eric, the appended patch fixes a very recent hibernate regression in
i915, please push it to Linus ASAP.

Rafael

---
From: Rafael J. Wysocki <rjw@sisk.pl>
Subject: i915 / PM: Fix hibernate regression caused by suspend/resume splitting

Commit 84b79f8d2882b0a84330c04839ed4d3cefd2ff77 (drm/i915: Fix crash
while aborting hibernation) attempted to fix a regression introduced
by commit cbda12d77ea590082edb6d30bd342a67ebc459e0 (drm/i915:
implement new pm ops for i915), but it went too far trying to split
the freeze/suspend and resume/thaw parts of the code.  As a result,
it introduced another regression, which only is visible on some systems.

Fix the problem by merging i915_drm_suspend() with
i915_drm_freeze() and moving some code from i915_resume()
into i915_drm_thaw(), so that intel_opregion_free() and
intel_opregion_init() are also executed in the freeze and thaw code
paths, respectively.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Reported-and-tested-by: Pedro Ribeiro <pedrib@gmail.com>
---
 drivers/gpu/drm/i915/i915_drv.c |   30 +++++++++---------------------
 1 file changed, 9 insertions(+), 21 deletions(-)

Index: linux-2.6/drivers/gpu/drm/i915/i915_drv.c
===================================================================
--- linux-2.6.orig/drivers/gpu/drm/i915/i915_drv.c
+++ linux-2.6/drivers/gpu/drm/i915/i915_drv.c
@@ -177,6 +177,8 @@ MODULE_DEVICE_TABLE(pci, pciidlist);
 
 static int i915_drm_freeze(struct drm_device *dev)
 {
+	struct drm_i915_private *dev_priv = dev->dev_private;
+
 	pci_save_state(dev->pdev);
 
 	/* If KMS is active, we do the leavevt stuff here */
@@ -192,17 +194,12 @@ static int i915_drm_freeze(struct drm_de
 
 	i915_save_state(dev);
 
-	return 0;
-}
-
-static void i915_drm_suspend(struct drm_device *dev)
-{
-	struct drm_i915_private *dev_priv = dev->dev_private;
-
 	intel_opregion_free(dev, 1);
 
 	/* Modeset on resume, not lid events */
 	dev_priv->modeset_on_lid = 0;
+
+	return 0;
 }
 
 static int i915_suspend(struct drm_device *dev, pm_message_t state)
@@ -222,8 +219,6 @@ static int i915_suspend(struct drm_devic
 	if (error)
 		return error;
 
-	i915_drm_suspend(dev);
-
 	if (state.event == PM_EVENT_SUSPEND) {
 		/* Shut down the device */
 		pci_disable_device(dev->pdev);
@@ -238,6 +233,10 @@ static int i915_drm_thaw(struct drm_devi
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	int error = 0;
 
+	i915_restore_state(dev);
+
+	intel_opregion_init(dev, 1);
+
 	/* KMS EnterVT equivalent */
 	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
 		mutex_lock(&dev->struct_mutex);
@@ -264,10 +263,6 @@ static int i915_resume(struct drm_device
 
 	pci_set_master(dev->pdev);
 
-	i915_restore_state(dev);
-
-	intel_opregion_init(dev, 1);
-
 	return i915_drm_thaw(dev);
 }
 
@@ -424,8 +419,6 @@ static int i915_pm_suspend(struct device
 	if (error)
 		return error;
 
-	i915_drm_suspend(drm_dev);
-
 	pci_disable_device(pdev);
 	pci_set_power_state(pdev, PCI_D3hot);
 
@@ -465,13 +458,8 @@ static int i915_pm_poweroff(struct devic
 {
 	struct pci_dev *pdev = to_pci_dev(dev);
 	struct drm_device *drm_dev = pci_get_drvdata(pdev);
-	int error;
-
-	error = i915_drm_freeze(drm_dev);
-	if (!error)
-		i915_drm_suspend(drm_dev);
 
-	return error;
+	return i915_drm_freeze(drm_dev);
 }
 
 const struct dev_pm_ops i915_pm_ops = {

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH] i915 / PM: Fix hibernate regression caused by suspend/resume splitting
  2010-02-18  0:29         ` Pedro Ribeiro
@ 2010-02-18 22:06           ` Rafael J. Wysocki
  2010-02-18 22:06           ` Rafael J. Wysocki
  1 sibling, 0 replies; 18+ messages in thread
From: Rafael J. Wysocki @ 2010-02-18 22:06 UTC (permalink / raw)
  To: Pedro Ribeiro, Jesse Barnes, Eric Anholt
  Cc: pm list, Linus Torvalds, linux-kernel

On Thursday 18 February 2010, Pedro Ribeiro wrote:
> On 17 February 2010 22:20, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> > On Wednesday 17 February 2010, Pedro Ribeiro wrote:
> >> 2010/2/17 Rafael J. Wysocki <rjw@sisk.pl>:
> >> > On Wednesday 17 February 2010, Rafael J. Wysocki wrote:
> >> >> On Wednesday 17 February 2010, Pedro Ribeiro wrote:
> >> >> > Hi,
> >> >> >
> >> >> > commit 84b79f8d2882b0a84330c04839ed4d3cefd2ff77 (drm/i915: Fix crash
> >> >> > while aborting hibernation) introduced two new issues which were not
> >> >> > present in 2.6.33-rc7:
> >> >> >
> >> >> > - every second resume from hibernate results in a blank screen
> >> >> > - the annoying flash at the end of atomic copy/restore during the
> >> >> > hibernate process is back (present in kernels < 2.6.33)
> >> >> >
> >> >> > The first issue is serious, the second is just an annoyance.
> >> >>
> >> >> The second one is an expected price of fixing the aborted hibernation
> >> >> regression.
> >> >>
> >> >> The first one shouldn't happen, though.
> >> >>
> >> >> I'll see if I can reproduce that locally.
> >> >
> >> > No, I can't.
> >> >
> >> > Is the driver compiled directly into the kernel or modular?
> >>
> >> The driver is modular.
> >> And sorry, I forgot to tell you I'm using TuxOnIce, it certainly makes
> >> a difference.
> >
> > It shouldn't in fact, although I'm not sure.
> >
> >> However, every since I reverted that commit I've done 10 test
> >> hibernations and no hang so far.
> >
> > First, please try if you can reproduce it with non-modular driver.
> >
> > Second, please check if the appended patch helps.
> >
> > Rafael
> >
> > ---
> >  drivers/gpu/drm/i915/i915_drv.c |   30 +++++++++---------------------
> >  1 file changed, 9 insertions(+), 21 deletions(-)
> >
> > Index: linux-2.6/drivers/gpu/drm/i915/i915_drv.c
> > ===================================================================
> > --- linux-2.6.orig/drivers/gpu/drm/i915/i915_drv.c
> > +++ linux-2.6/drivers/gpu/drm/i915/i915_drv.c
> > @@ -177,6 +177,8 @@ MODULE_DEVICE_TABLE(pci, pciidlist);
> >
> >  static int i915_drm_freeze(struct drm_device *dev)
> >  {
> > +       struct drm_i915_private *dev_priv = dev->dev_private;
> > +
> >        pci_save_state(dev->pdev);
> >
> >        /* If KMS is active, we do the leavevt stuff here */
> > @@ -192,17 +194,12 @@ static int i915_drm_freeze(struct drm_de
> >
> >        i915_save_state(dev);
> >
> > -       return 0;
> > -}
> > -
> > -static void i915_drm_suspend(struct drm_device *dev)
> > -{
> > -       struct drm_i915_private *dev_priv = dev->dev_private;
> > -
> >        intel_opregion_free(dev, 1);
> >
> >        /* Modeset on resume, not lid events */
> >        dev_priv->modeset_on_lid = 0;
> > +
> > +       return 0;
> >  }
> >
> >  static int i915_suspend(struct drm_device *dev, pm_message_t state)
> > @@ -222,8 +219,6 @@ static int i915_suspend(struct drm_devic
> >        if (error)
> >                return error;
> >
> > -       i915_drm_suspend(dev);
> > -
> >        if (state.event == PM_EVENT_SUSPEND) {
> >                /* Shut down the device */
> >                pci_disable_device(dev->pdev);
> > @@ -238,6 +233,10 @@ static int i915_drm_thaw(struct drm_devi
> >        struct drm_i915_private *dev_priv = dev->dev_private;
> >        int error = 0;
> >
> > +       i915_restore_state(dev);
> > +
> > +       intel_opregion_init(dev, 1);
> > +
> >        /* KMS EnterVT equivalent */
> >        if (drm_core_check_feature(dev, DRIVER_MODESET)) {
> >                mutex_lock(&dev->struct_mutex);
> > @@ -264,10 +263,6 @@ static int i915_resume(struct drm_device
> >
> >        pci_set_master(dev->pdev);
> >
> > -       i915_restore_state(dev);
> > -
> > -       intel_opregion_init(dev, 1);
> > -
> >        return i915_drm_thaw(dev);
> >  }
> >
> > @@ -424,8 +419,6 @@ static int i915_pm_suspend(struct device
> >        if (error)
> >                return error;
> >
> > -       i915_drm_suspend(drm_dev);
> > -
> >        pci_disable_device(pdev);
> >        pci_set_power_state(pdev, PCI_D3hot);
> >
> > @@ -465,13 +458,8 @@ static int i915_pm_poweroff(struct devic
> >  {
> >        struct pci_dev *pdev = to_pci_dev(dev);
> >        struct drm_device *drm_dev = pci_get_drvdata(pdev);
> > -       int error;
> > -
> > -       error = i915_drm_freeze(drm_dev);
> > -       if (!error)
> > -               i915_drm_suspend(drm_dev);
> >
> > -       return error;
> > +       return i915_drm_freeze(drm_dev);
> >  }
> >
> >  const struct dev_pm_ops i915_pm_ops = {
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > Please read the FAQ at  http://www.tux.org/lkml/
> >
> 
> The patch fixes this issue for me.
> 
> Thanks for your help.

OK, thanks for testing, let's submit it appropriately.

Jesse, Eric, the appended patch fixes a very recent hibernate regression in
i915, please push it to Linus ASAP.

Rafael

---
From: Rafael J. Wysocki <rjw@sisk.pl>
Subject: i915 / PM: Fix hibernate regression caused by suspend/resume splitting

Commit 84b79f8d2882b0a84330c04839ed4d3cefd2ff77 (drm/i915: Fix crash
while aborting hibernation) attempted to fix a regression introduced
by commit cbda12d77ea590082edb6d30bd342a67ebc459e0 (drm/i915:
implement new pm ops for i915), but it went too far trying to split
the freeze/suspend and resume/thaw parts of the code.  As a result,
it introduced another regression, which only is visible on some systems.

Fix the problem by merging i915_drm_suspend() with
i915_drm_freeze() and moving some code from i915_resume()
into i915_drm_thaw(), so that intel_opregion_free() and
intel_opregion_init() are also executed in the freeze and thaw code
paths, respectively.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Reported-and-tested-by: Pedro Ribeiro <pedrib@gmail.com>
---
 drivers/gpu/drm/i915/i915_drv.c |   30 +++++++++---------------------
 1 file changed, 9 insertions(+), 21 deletions(-)

Index: linux-2.6/drivers/gpu/drm/i915/i915_drv.c
===================================================================
--- linux-2.6.orig/drivers/gpu/drm/i915/i915_drv.c
+++ linux-2.6/drivers/gpu/drm/i915/i915_drv.c
@@ -177,6 +177,8 @@ MODULE_DEVICE_TABLE(pci, pciidlist);
 
 static int i915_drm_freeze(struct drm_device *dev)
 {
+	struct drm_i915_private *dev_priv = dev->dev_private;
+
 	pci_save_state(dev->pdev);
 
 	/* If KMS is active, we do the leavevt stuff here */
@@ -192,17 +194,12 @@ static int i915_drm_freeze(struct drm_de
 
 	i915_save_state(dev);
 
-	return 0;
-}
-
-static void i915_drm_suspend(struct drm_device *dev)
-{
-	struct drm_i915_private *dev_priv = dev->dev_private;
-
 	intel_opregion_free(dev, 1);
 
 	/* Modeset on resume, not lid events */
 	dev_priv->modeset_on_lid = 0;
+
+	return 0;
 }
 
 static int i915_suspend(struct drm_device *dev, pm_message_t state)
@@ -222,8 +219,6 @@ static int i915_suspend(struct drm_devic
 	if (error)
 		return error;
 
-	i915_drm_suspend(dev);
-
 	if (state.event == PM_EVENT_SUSPEND) {
 		/* Shut down the device */
 		pci_disable_device(dev->pdev);
@@ -238,6 +233,10 @@ static int i915_drm_thaw(struct drm_devi
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	int error = 0;
 
+	i915_restore_state(dev);
+
+	intel_opregion_init(dev, 1);
+
 	/* KMS EnterVT equivalent */
 	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
 		mutex_lock(&dev->struct_mutex);
@@ -264,10 +263,6 @@ static int i915_resume(struct drm_device
 
 	pci_set_master(dev->pdev);
 
-	i915_restore_state(dev);
-
-	intel_opregion_init(dev, 1);
-
 	return i915_drm_thaw(dev);
 }
 
@@ -424,8 +419,6 @@ static int i915_pm_suspend(struct device
 	if (error)
 		return error;
 
-	i915_drm_suspend(drm_dev);
-
 	pci_disable_device(pdev);
 	pci_set_power_state(pdev, PCI_D3hot);
 
@@ -465,13 +458,8 @@ static int i915_pm_poweroff(struct devic
 {
 	struct pci_dev *pdev = to_pci_dev(dev);
 	struct drm_device *drm_dev = pci_get_drvdata(pdev);
-	int error;
-
-	error = i915_drm_freeze(drm_dev);
-	if (!error)
-		i915_drm_suspend(drm_dev);
 
-	return error;
+	return i915_drm_freeze(drm_dev);
 }
 
 const struct dev_pm_ops i915_pm_ops = {

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] i915 / PM: Fix hibernate regression caused by suspend/resume splitting
  2010-02-18 22:06           ` Rafael J. Wysocki
  2010-02-19  6:39             ` Tino Keitel
@ 2010-02-19  6:39             ` Tino Keitel
  2010-02-22 15:47             ` Linus Torvalds
  2010-02-22 15:47             ` Linus Torvalds
  3 siblings, 0 replies; 18+ messages in thread
From: Tino Keitel @ 2010-02-19  6:39 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Pedro Ribeiro, Jesse Barnes, Eric Anholt, linux-kernel, pm list,
	Linus Torvalds

On Thu, Feb 18, 2010 at 23:06:27 +0100, Rafael J. Wysocki wrote:

[...]

> Jesse, Eric, the appended patch fixes a very recent hibernate regression in
> i915, please push it to Linus ASAP.

FYI: I got no resume failure during normal usage after 9 suspend to RAM
and 8 suspend to disk cycles (using both suspend types alternately)
with the patch applied.

Regards,
Tino

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] i915 / PM: Fix hibernate regression caused by suspend/resume splitting
  2010-02-18 22:06           ` Rafael J. Wysocki
@ 2010-02-19  6:39             ` Tino Keitel
  2010-02-19  6:39             ` Tino Keitel
                               ` (2 subsequent siblings)
  3 siblings, 0 replies; 18+ messages in thread
From: Tino Keitel @ 2010-02-19  6:39 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: linux-kernel, Jesse Barnes, Eric Anholt, Pedro Ribeiro, pm list,
	Linus Torvalds

On Thu, Feb 18, 2010 at 23:06:27 +0100, Rafael J. Wysocki wrote:

[...]

> Jesse, Eric, the appended patch fixes a very recent hibernate regression in
> i915, please push it to Linus ASAP.

FYI: I got no resume failure during normal usage after 9 suspend to RAM
and 8 suspend to disk cycles (using both suspend types alternately)
with the patch applied.

Regards,
Tino

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] i915 / PM: Fix hibernate regression caused by suspend/resume splitting
  2010-02-18 22:06           ` Rafael J. Wysocki
  2010-02-19  6:39             ` Tino Keitel
  2010-02-19  6:39             ` Tino Keitel
@ 2010-02-22 15:47             ` Linus Torvalds
  2010-02-22 16:32               ` Jesse Barnes
                                 ` (3 more replies)
  2010-02-22 15:47             ` Linus Torvalds
  3 siblings, 4 replies; 18+ messages in thread
From: Linus Torvalds @ 2010-02-22 15:47 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Pedro Ribeiro, Jesse Barnes, Eric Anholt, linux-kernel, pm list


Jesse, Eric, what's the status of this patch? 

Should I take it directly (I'd really like an Ack) or is it queued up in 
some tree waiting for me to pull? Or is there some reason not to have it, 
despite it fixing things for some people?

		Linus

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] i915 / PM: Fix hibernate regression caused by suspend/resume splitting
  2010-02-18 22:06           ` Rafael J. Wysocki
                               ` (2 preceding siblings ...)
  2010-02-22 15:47             ` Linus Torvalds
@ 2010-02-22 15:47             ` Linus Torvalds
  3 siblings, 0 replies; 18+ messages in thread
From: Linus Torvalds @ 2010-02-22 15:47 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Pedro Ribeiro, pm list, linux-kernel, Jesse Barnes, Eric Anholt


Jesse, Eric, what's the status of this patch? 

Should I take it directly (I'd really like an Ack) or is it queued up in 
some tree waiting for me to pull? Or is there some reason not to have it, 
despite it fixing things for some people?

		Linus

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] i915 / PM: Fix hibernate regression caused by suspend/resume splitting
  2010-02-22 15:47             ` Linus Torvalds
@ 2010-02-22 16:32               ` Jesse Barnes
  2010-02-22 16:32               ` Jesse Barnes
                                 ` (2 subsequent siblings)
  3 siblings, 0 replies; 18+ messages in thread
From: Jesse Barnes @ 2010-02-22 16:32 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Rafael J. Wysocki, Pedro Ribeiro, Eric Anholt, linux-kernel, pm list

On Mon, 22 Feb 2010 07:47:53 -0800 (PST)
Linus Torvalds <torvalds@linux-foundation.org> wrote:

> 
> Jesse, Eric, what's the status of this patch? 
> 
> Should I take it directly (I'd really like an Ack) or is it queued up in 
> some tree waiting for me to pull? Or is there some reason not to have it, 
> despite it fixing things for some people?

Hm, I thought Eric had applied that to his for-linus branch, but it
looks like that branch is empty now.  Maybe Rafael posted an update
that Eric missed and so you just have a partial fix in your tree?

-- 
Jesse Barnes, Intel Open Source Technology Center

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] i915 / PM: Fix hibernate regression caused by suspend/resume splitting
  2010-02-22 15:47             ` Linus Torvalds
  2010-02-22 16:32               ` Jesse Barnes
@ 2010-02-22 16:32               ` Jesse Barnes
  2010-02-22 16:36               ` Eric Anholt
  2010-02-22 16:36               ` Eric Anholt
  3 siblings, 0 replies; 18+ messages in thread
From: Jesse Barnes @ 2010-02-22 16:32 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Pedro Ribeiro, pm list, linux-kernel, Eric Anholt

On Mon, 22 Feb 2010 07:47:53 -0800 (PST)
Linus Torvalds <torvalds@linux-foundation.org> wrote:

> 
> Jesse, Eric, what's the status of this patch? 
> 
> Should I take it directly (I'd really like an Ack) or is it queued up in 
> some tree waiting for me to pull? Or is there some reason not to have it, 
> despite it fixing things for some people?

Hm, I thought Eric had applied that to his for-linus branch, but it
looks like that branch is empty now.  Maybe Rafael posted an update
that Eric missed and so you just have a partial fix in your tree?

-- 
Jesse Barnes, Intel Open Source Technology Center

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] i915 / PM: Fix hibernate regression caused by suspend/resume splitting
  2010-02-22 15:47             ` Linus Torvalds
  2010-02-22 16:32               ` Jesse Barnes
  2010-02-22 16:32               ` Jesse Barnes
@ 2010-02-22 16:36               ` Eric Anholt
  2010-02-22 16:36               ` Eric Anholt
  3 siblings, 0 replies; 18+ messages in thread
From: Eric Anholt @ 2010-02-22 16:36 UTC (permalink / raw)
  To: Linus Torvalds, Rafael J. Wysocki
  Cc: Pedro Ribeiro, Jesse Barnes, linux-kernel, pm list

[-- Attachment #1: Type: text/plain, Size: 744 bytes --]

On Mon, 22 Feb 2010 07:47:53 -0800 (PST), Linus Torvalds <torvalds@linux-foundation.org> wrote:
> 
> Jesse, Eric, what's the status of this patch? 
> 
> Should I take it directly (I'd really like an Ack) or is it queued up in 
> some tree waiting for me to pull? Or is there some reason not to have it, 
> despite it fixing things for some people?

Acked-by: Eric Anholt <eric@anholt.net>

I just reviewed the rest of my tag:todo and I don't think I have
anything else I want to pull request for this kernel (finally), so if
you could just grab this patch it would be great.

(Well, there's also "quit trying to _LID on 855 because it's always a
pack of lies", but I'd rather do it as a backport later in case someone
screams)

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] i915 / PM: Fix hibernate regression caused by suspend/resume splitting
  2010-02-22 15:47             ` Linus Torvalds
                                 ` (2 preceding siblings ...)
  2010-02-22 16:36               ` Eric Anholt
@ 2010-02-22 16:36               ` Eric Anholt
  3 siblings, 0 replies; 18+ messages in thread
From: Eric Anholt @ 2010-02-22 16:36 UTC (permalink / raw)
  To: Linus Torvalds, Rafael J. Wysocki
  Cc: Pedro Ribeiro, pm list, linux-kernel, Jesse Barnes


[-- Attachment #1.1: Type: text/plain, Size: 744 bytes --]

On Mon, 22 Feb 2010 07:47:53 -0800 (PST), Linus Torvalds <torvalds@linux-foundation.org> wrote:
> 
> Jesse, Eric, what's the status of this patch? 
> 
> Should I take it directly (I'd really like an Ack) or is it queued up in 
> some tree waiting for me to pull? Or is there some reason not to have it, 
> despite it fixing things for some people?

Acked-by: Eric Anholt <eric@anholt.net>

I just reviewed the rest of my tag:todo and I don't think I have
anything else I want to pull request for this kernel (finally), so if
you could just grab this patch it would be great.

(Well, there's also "quit trying to _LID on 855 because it's always a
pack of lies", but I'd rather do it as a backport later in case someone
screams)

[-- Attachment #1.2: Type: application/pgp-signature, Size: 197 bytes --]

[-- Attachment #2: Type: text/plain, Size: 0 bytes --]



^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2010-02-22 16:36 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-02-17 18:47 2.6.33-rc8 regression on i915: resume from hibernate locks up every 2nd time Pedro Ribeiro
2010-02-17 20:11 ` Rafael J. Wysocki
2010-02-17 20:52   ` Rafael J. Wysocki
2010-02-17 22:10     ` Pedro Ribeiro
2010-02-17 22:20       ` Rafael J. Wysocki
2010-02-17 22:41         ` Nigel Cunningham
2010-02-18  0:02         ` Tino Keitel
2010-02-18  0:29         ` Pedro Ribeiro
2010-02-18 22:06           ` [PATCH] i915 / PM: Fix hibernate regression caused by suspend/resume splitting Rafael J. Wysocki
2010-02-18 22:06           ` Rafael J. Wysocki
2010-02-19  6:39             ` Tino Keitel
2010-02-19  6:39             ` Tino Keitel
2010-02-22 15:47             ` Linus Torvalds
2010-02-22 16:32               ` Jesse Barnes
2010-02-22 16:32               ` Jesse Barnes
2010-02-22 16:36               ` Eric Anholt
2010-02-22 16:36               ` Eric Anholt
2010-02-22 15:47             ` Linus Torvalds

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.