* suspend to ram problem
@ 2008-02-03 13:37 matthieu castet
2008-02-03 15:31 ` matthieu castet
0 siblings, 1 reply; 21+ messages in thread
From: matthieu castet @ 2008-02-03 13:37 UTC (permalink / raw)
To: linux-acpi
Hi,
I am trying to make work suspend to ram on a MSI MS-6380E with a 2.6.23
kernel.
Standby mode works.
S2ram suspend seems to work : the computer turn off and I can wake up it
with the keyboard.
But when the computer wakeup, I see the video card POST on the screen,
but after that the computer hangs : black screen, no working numlock.
I tried to compile PM_TRACE, but it give no result. So this means the
resume hang very early.
What can I do to debug this ?
Thanks
Matthieu
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-03 13:37 suspend to ram problem matthieu castet
@ 2008-02-03 15:31 ` matthieu castet
2008-02-03 17:39 ` Rafael J. Wysocki
0 siblings, 1 reply; 21+ messages in thread
From: matthieu castet @ 2008-02-03 15:31 UTC (permalink / raw)
To: linux-acpi
matthieu castet wrote:
> Hi,
>
> I am trying to make work suspend to ram on a MSI MS-6380E with a 2.6.23
> kernel.
>
> Standby mode works.
> S2ram suspend seems to work : the computer turn off and I can wake up it
> with the keyboard.
>
> But when the computer wakeup, I see the video card POST on the screen,
> but after that the computer hangs : black screen, no working numlock.
>
> I tried to compile PM_TRACE, but it give no result. So this means the
> resume hang very early.
>
> What can I do to debug this ?
>
I play with the s2_beep feature and :
- echo 4 > /proc/sys/kernel/acpi_video_flags make the computer beep
- echo 4 > /proc/sys/kernel/acpi_video_flags make the computer not beep
- adding a beep in bogus_real_magic, make the computer not beep
So the hang seems located in wakeup_start.
Matthieu
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-03 15:31 ` matthieu castet
@ 2008-02-03 17:39 ` Rafael J. Wysocki
2008-02-03 18:18 ` Pavel Machek
0 siblings, 1 reply; 21+ messages in thread
From: Rafael J. Wysocki @ 2008-02-03 17:39 UTC (permalink / raw)
To: matthieu castet; +Cc: linux-acpi, Pavel Machek, pm list
On Sunday, 3 of February 2008, matthieu castet wrote:
> matthieu castet wrote:
> > Hi,
> >
> > I am trying to make work suspend to ram on a MSI MS-6380E with a 2.6.23
> > kernel.
> >
> > Standby mode works.
> > S2ram suspend seems to work : the computer turn off and I can wake up it
> > with the keyboard.
> >
> > But when the computer wakeup, I see the video card POST on the screen,
> > but after that the computer hangs : black screen, no working numlock.
> >
> > I tried to compile PM_TRACE, but it give no result. So this means the
> > resume hang very early.
> >
> > What can I do to debug this ?
> >
> I play with the s2_beep feature and :
> - echo 4 > /proc/sys/kernel/acpi_video_flags make the computer beep
> - echo 4 > /proc/sys/kernel/acpi_video_flags make the computer not beep
> - adding a beep in bogus_real_magic, make the computer not beep
>
> So the hang seems located in wakeup_start.
Hm. Can you add unconditional BEEP after "jne bogus_real_magic" in
arch/x86/kernel/acpi/wakeup.S and see if it beeps?
Rafael
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-03 17:39 ` Rafael J. Wysocki
@ 2008-02-03 18:18 ` Pavel Machek
2008-02-03 18:22 ` Rafael J. Wysocki
2008-02-03 18:40 ` matthieu castet
0 siblings, 2 replies; 21+ messages in thread
From: Pavel Machek @ 2008-02-03 18:18 UTC (permalink / raw)
To: Rafael J. Wysocki; +Cc: matthieu castet, linux-acpi, pm list
On Sun 2008-02-03 18:39:01, Rafael J. Wysocki wrote:
> On Sunday, 3 of February 2008, matthieu castet wrote:
> > matthieu castet wrote:
> > > Hi,
> > >
> > > I am trying to make work suspend to ram on a MSI MS-6380E with a 2.6.23
> > > kernel.
> > >
> > > Standby mode works.
> > > S2ram suspend seems to work : the computer turn off and I can wake up it
> > > with the keyboard.
> > >
> > > But when the computer wakeup, I see the video card POST on the screen,
> > > but after that the computer hangs : black screen, no working numlock.
> > >
> > > I tried to compile PM_TRACE, but it give no result. So this means the
> > > resume hang very early.
> > >
> > > What can I do to debug this ?
> > >
> > I play with the s2_beep feature and :
> > - echo 4 > /proc/sys/kernel/acpi_video_flags make the computer beep
> > - echo 4 > /proc/sys/kernel/acpi_video_flags make the computer not beep
> > - adding a beep in bogus_real_magic, make the computer not beep
> >
> > So the hang seems located in wakeup_start.
>
> Hm. Can you add unconditional BEEP after "jne bogus_real_magic" in
> arch/x86/kernel/acpi/wakeup.S and see if it beeps?
Hmm, maybe I know where problem could be. Try
movl $(wakeup_stack - wakeup_code), %esp # Private stack is needed for ASUS bo\
instead of existing stack setup. That helped on one of my test-boxes
-- I uncovered that during rewrite.
Otherwise use BEEP and infinite loops to find out where it hangs...
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-03 18:18 ` Pavel Machek
@ 2008-02-03 18:22 ` Rafael J. Wysocki
2008-02-03 18:40 ` matthieu castet
1 sibling, 0 replies; 21+ messages in thread
From: Rafael J. Wysocki @ 2008-02-03 18:22 UTC (permalink / raw)
To: Pavel Machek; +Cc: matthieu castet, linux-acpi, pm list
On Sunday, 3 of February 2008, Pavel Machek wrote:
> On Sun 2008-02-03 18:39:01, Rafael J. Wysocki wrote:
> > On Sunday, 3 of February 2008, matthieu castet wrote:
> > > matthieu castet wrote:
> > > > Hi,
> > > >
> > > > I am trying to make work suspend to ram on a MSI MS-6380E with a 2.6.23
> > > > kernel.
> > > >
> > > > Standby mode works.
> > > > S2ram suspend seems to work : the computer turn off and I can wake up it
> > > > with the keyboard.
> > > >
> > > > But when the computer wakeup, I see the video card POST on the screen,
> > > > but after that the computer hangs : black screen, no working numlock.
> > > >
> > > > I tried to compile PM_TRACE, but it give no result. So this means the
> > > > resume hang very early.
> > > >
> > > > What can I do to debug this ?
> > > >
> > > I play with the s2_beep feature and :
> > > - echo 4 > /proc/sys/kernel/acpi_video_flags make the computer beep
> > > - echo 4 > /proc/sys/kernel/acpi_video_flags make the computer not beep
> > > - adding a beep in bogus_real_magic, make the computer not beep
> > >
> > > So the hang seems located in wakeup_start.
> >
> > Hm. Can you add unconditional BEEP after "jne bogus_real_magic" in
> > arch/x86/kernel/acpi/wakeup.S and see if it beeps?
>
> Hmm, maybe I know where problem could be. Try
>
> movl $(wakeup_stack - wakeup_code), %esp # Private stack is needed for ASUS bo\
>
> instead of existing stack setup. That helped on one of my test-boxes
> -- I uncovered that during rewrite.
Well, that could explain some mysterious failures reported from time to time by
ASUS users.
Rafael
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-03 18:18 ` Pavel Machek
2008-02-03 18:22 ` Rafael J. Wysocki
@ 2008-02-03 18:40 ` matthieu castet
2008-02-04 6:57 ` matthieu castet
1 sibling, 1 reply; 21+ messages in thread
From: matthieu castet @ 2008-02-03 18:40 UTC (permalink / raw)
To: Pavel Machek; +Cc: Rafael J. Wysocki, linux-acpi, pm list
[-- Attachment #1: Type: text/plain, Size: 760 bytes --]
Pavel Machek wrote:
> On Sun 2008-02-03 18:39:01, Rafael J. Wysocki wrote:
>>> So the hang seems located in wakeup_start.
>> Hm. Can you add unconditional BEEP after "jne bogus_real_magic" in
>> arch/x86/kernel/acpi/wakeup.S and see if it beeps?
I rewrite the beep tracer to generate small beep (I should clean the
patch and try to submit it), and I only hear 2 beep.
So it crash when clearing the flags.
>
> Hmm, maybe I know where problem could be. Try
>
> movl $(wakeup_stack - wakeup_code), %esp # Private stack is needed for ASUS bo\
>
> instead of existing stack setup. That helped on one of my test-boxes
Thanks, I will try that.
Because clearing the flags imply pop/push in the stack it could be the
problem
Matthieu
[-- Attachment #2: beep_tracer.diff --]
[-- Type: text/x-patch, Size: 3430 bytes --]
--- /home/mat/tmp/wakeup.S 2008-02-03 19:20:26.000000000 +0100
+++ arch/i386/kernel/acpi/wakeup.S 2008-02-03 19:30:20.000000000 +0100
@@ -13,20 +13,47 @@
# cs = 0x1234, eip = 0x05
#
+/* one ISA cycle @8Mhz */
+#define PAUSE outb %al, $0x80
+#define WAIT_100MS \
+ movl $800000, %eax; \
+ 2: \
+ PAUSE; \
+ dec %eax; \
+ jne 2b
+
+/* What's the PIT rate */
+#define COUNT 0xf89
#define BEEP \
- inb $97, %al; \
- outb %al, $0x80; \
- movb $3, %al; \
- outb %al, $97; \
- outb %al, $0x80; \
- movb $-74, %al; \
- outb %al, $67; \
- outb %al, $0x80; \
- movb $-119, %al; \
- outb %al, $66; \
- outb %al, $0x80; \
- movb $15, %al; \
- outb %al, $66;
+ /* enable counter 2 */ \
+ inb $0x61, %al; \
+ PAUSE; \
+ orb $3, %al; \
+ outb %al, $0x61; \
+ PAUSE; \
+ /* set command for counter 2, 2 byte write */ \
+ movb $0xB6, %al; \
+ outb %al, $0x43; \
+ PAUSE; \
+ /* select desired HZ */ \
+ movb $(COUNT & 0xff), %al; \
+ outb %al, $0x42; \
+ PAUSE; \
+ movb $(COUNT >> 8), %al; \
+ outb %al, $0x42; \
+ WAIT_100MS; \
+ /* disable counter 2 */ \
+ inb $0x61, %al; \
+ PAUSE; \
+ andb $0xFC, %al; \
+ outb %al, $0x61; \
+ WAIT_100MS
+
+#define CBEEP \
+ testl $4, realmode_flags - wakeup_code; \
+ jz 1f; \
+ BEEP; \
+1:
ALIGN
.align 4096
@@ -37,7 +64,8 @@
movw $0xb800, %ax
movw %ax,%fs
- movw $0x0e00 + 'L', %fs:(0x10)
+ #movw $0x0e00 + 'L', %fs:(0x10)
+ CBEEP
cli
cld
@@ -47,19 +75,18 @@
movw %ax, %ds # Make ds:0 point to wakeup_start
movw %ax, %ss
- testl $4, realmode_flags - wakeup_code
- jz 1f
- BEEP
-1:
mov $(wakeup_stack - wakeup_code), %sp # Private stack is needed for ASUS board
- movw $0x0e00 + 'S', %fs:(0x12)
+ #movw $0x0e00 + 'S', %fs:(0x12)
+ CBEEP
pushl $0 # Kill any dangerous flags
popfl
+ CBEEP
movl real_magic - wakeup_code, %eax
cmpl $0x12345678, %eax
jne bogus_real_magic
+ CBEEP
testl $1, realmode_flags - wakeup_code
jz 1f
@@ -79,6 +106,7 @@
movl $swsusp_pg_dir-__PAGE_OFFSET, %eax
movl %eax, %cr3
+ CBEEP
testl $1, real_efer_save_restore - wakeup_code
jz 4f
# restore efer setting
@@ -87,12 +115,14 @@
mov $0xc0000080, %ecx
wrmsr
4:
+ CBEEP
# make sure %cr4 is set correctly (features, etc)
movl real_save_cr4 - wakeup_code, %eax
movl %eax, %cr4
movw $0xb800, %ax
movw %ax,%fs
- movw $0x0e00 + 'i', %fs:(0x12)
+ #movw $0x0e00 + 'i', %fs:(0x12)
+ CBEEP
# need a gdt -- use lgdtl to force 32-bit operands, in case
# the GDT is located past 16 megabytes.
@@ -102,15 +132,14 @@
movl %eax, %cr0
jmp 1f
1:
- movw $0x0e00 + 'n', %fs:(0x14)
+ #movw $0x0e00 + 'n', %fs:(0x14)
+ CBEEP
movl real_magic - wakeup_code, %eax
cmpl $0x12345678, %eax
jne bogus_real_magic
- testl $8, realmode_flags - wakeup_code
- jz 1f
- BEEP
+ CBEEP
1:
ljmpl $__KERNEL_CS, $wakeup_pmode_return
@@ -128,7 +157,8 @@
real_save_efer_eax: .long 0
bogus_real_magic:
- movw $0x0e00 + 'B', %fs:(0x12)
+ BEEP
+ #movw $0x0e00 + 'B', %fs:(0x12)
jmp bogus_real_magic
/* This code uses an extended set of video mode numbers. These include:
@@ -194,7 +224,7 @@
movw %ax, %es
movw %ax, %fs
movw %ax, %gs
- movw $0x0e00 + 'u', 0xb8016
+ #movw $0x0e00 + 'u', 0xb8016
# reload the gdt, as we need the full 32 bit address
lgdt saved_gdt
@@ -218,7 +248,7 @@
jmp *%eax
bogus_magic:
- movw $0x0e00 + 'B', 0xb8018
+ #movw $0x0e00 + 'B', 0xb8018
jmp bogus_magic
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-03 18:40 ` matthieu castet
@ 2008-02-04 6:57 ` matthieu castet
2008-02-05 23:02 ` matthieu castet
0 siblings, 1 reply; 21+ messages in thread
From: matthieu castet @ 2008-02-04 6:57 UTC (permalink / raw)
To: Pavel Machek; +Cc: Rafael J. Wysocki, linux-acpi, pm list
matthieu castet wrote:
> Pavel Machek wrote:
>> Hmm, maybe I know where problem could be. Try
>>
>> movl $(wakeup_stack - wakeup_code), %esp #
>> Private stack is needed for ASUS bo\
>>
>> instead of existing stack setup. That helped on one of my test-boxes
> Thanks, I will try that.
> Because clearing the flags imply pop/push in the stack it could be the
> problem
That doesn't help : it still crash in pushl $0.
Matthieu
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-04 6:57 ` matthieu castet
@ 2008-02-05 23:02 ` matthieu castet
2008-02-05 23:20 ` Rafael J. Wysocki
2008-02-07 9:23 ` Pavel Machek
0 siblings, 2 replies; 21+ messages in thread
From: matthieu castet @ 2008-02-05 23:02 UTC (permalink / raw)
To: Pavel Machek; +Cc: Rafael J. Wysocki, linux-acpi, pm list
Hi,
matthieu castet wrote:
> matthieu castet wrote:
>> Pavel Machek wrote:
>
>>> Hmm, maybe I know where problem could be. Try
>>>
>>> movl $(wakeup_stack - wakeup_code), %esp #
>>> Private stack is needed for ASUS bo\
>>>
>>> instead of existing stack setup. That helped on one of my test-boxes
>> Thanks, I will try that.
>> Because clearing the flags imply pop/push in the stack it could be the
>> problem
> That doesn't help : it still crash in pushl $0.
>
All stack stuff in wakeup_code crash for me.
I tried to change the stack position, make sure upper bit of %esp are
clear, ... nothing work.
What's are strange is that according to my x86 manual, in real mode the
failure can only happen if the stack wrap which is not the case here.
Any x86 guru advice ?
If I remove stack access (remove clearing flag stuff, not call to video
stuff) the resume works.
Matthieu
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-05 23:02 ` matthieu castet
@ 2008-02-05 23:20 ` Rafael J. Wysocki
2008-02-06 22:40 ` matthieu castet
2008-02-07 9:23 ` Pavel Machek
1 sibling, 1 reply; 21+ messages in thread
From: Rafael J. Wysocki @ 2008-02-05 23:20 UTC (permalink / raw)
To: matthieu castet; +Cc: Pavel Machek, linux-acpi, pm list
On Wednesday, 6 of February 2008, matthieu castet wrote:
> Hi,
>
> matthieu castet wrote:
> > matthieu castet wrote:
> >> Pavel Machek wrote:
> >
> >>> Hmm, maybe I know where problem could be. Try
> >>>
> >>> movl $(wakeup_stack - wakeup_code), %esp #
> >>> Private stack is needed for ASUS bo\
> >>>
> >>> instead of existing stack setup. That helped on one of my test-boxes
> >> Thanks, I will try that.
> >> Because clearing the flags imply pop/push in the stack it could be the
> >> problem
> > That doesn't help : it still crash in pushl $0.
> >
> All stack stuff in wakeup_code crash for me.
> I tried to change the stack position, make sure upper bit of %esp are
> clear, ... nothing work.
> What's are strange is that according to my x86 manual, in real mode the
> failure can only happen if the stack wrap which is not the case here.
> Any x86 guru advice ?
>
> If I remove stack access (remove clearing flag stuff, not call to video
> stuff) the resume works.
Hm, can you place a "pushl %eax; popl %eax;" in place of the removed code and
see if that breaks?
Rafael
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-05 23:20 ` Rafael J. Wysocki
@ 2008-02-06 22:40 ` matthieu castet
2008-02-06 22:43 ` Pavel Machek
2008-02-06 22:43 ` Pavel Machek
0 siblings, 2 replies; 21+ messages in thread
From: matthieu castet @ 2008-02-06 22:40 UTC (permalink / raw)
To: Rafael J. Wysocki; +Cc: Pavel Machek, linux-acpi, pm list
Rafael J. Wysocki wrote:
> On Wednesday, 6 of February 2008, matthieu castet wrote:
>> Hi,
>>
>> matthieu castet wrote:
>>> matthieu castet wrote:
>>>> Pavel Machek wrote:
>>>>> Hmm, maybe I know where problem could be. Try
>>>>>
>>>>> movl $(wakeup_stack - wakeup_code), %esp #
>>>>> Private stack is needed for ASUS bo\
>>>>>
>>>>> instead of existing stack setup. That helped on one of my test-boxes
>>>> Thanks, I will try that.
>>>> Because clearing the flags imply pop/push in the stack it could be the
>>>> problem
>>> That doesn't help : it still crash in pushl $0.
>>>
>> All stack stuff in wakeup_code crash for me.
>> I tried to change the stack position, make sure upper bit of %esp are
>> clear, ... nothing work.
>> What's are strange is that according to my x86 manual, in real mode the
>> failure can only happen if the stack wrap which is not the case here.
>> Any x86 guru advice ?
>>
>> If I remove stack access (remove clearing flag stuff, not call to video
>> stuff) the resume works.
>
> Hm, can you place a "pushl %eax; popl %eax;" in place of the removed code and
> see if that breaks?
Yes that also break.
Matthieu
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-06 22:40 ` matthieu castet
@ 2008-02-06 22:43 ` Pavel Machek
2008-02-06 23:03 ` Rafael J. Wysocki
2008-02-06 22:43 ` Pavel Machek
1 sibling, 1 reply; 21+ messages in thread
From: Pavel Machek @ 2008-02-06 22:43 UTC (permalink / raw)
To: matthieu castet; +Cc: Rafael J. Wysocki, linux-acpi, pm list
Hi!
>>>>>> instead of existing stack setup. That helped on one of my test-boxes
>>>>> Thanks, I will try that.
>>>>> Because clearing the flags imply pop/push in the stack it could be the
>>>>> problem
>>>> That doesn't help : it still crash in pushl $0.
>>>>
>>> All stack stuff in wakeup_code crash for me.
>>> I tried to change the stack position, make sure upper bit of %esp are
>>> clear, ... nothing work.
>>> What's are strange is that according to my x86 manual, in real mode the
>>> failure can only happen if the stack wrap which is not the case here.
>>> Any x86 guru advice ?
>>>
>>> If I remove stack access (remove clearing flag stuff, not call to video
>>> stuff) the resume works.
>>
>> Hm, can you place a "pushl %eax; popl %eax;" in place of the removed code and
>> see if that breaks?
> Yes that also break.
Not sure what is going on... but if you remove all the stack
references, does it go up to 32-bit mode?
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-06 22:40 ` matthieu castet
2008-02-06 22:43 ` Pavel Machek
@ 2008-02-06 22:43 ` Pavel Machek
2008-02-06 23:17 ` matthieu castet
1 sibling, 1 reply; 21+ messages in thread
From: Pavel Machek @ 2008-02-06 22:43 UTC (permalink / raw)
To: matthieu castet; +Cc: Rafael J. Wysocki, linux-acpi, pm list
On Wed 2008-02-06 23:40:35, matthieu castet wrote:
> Rafael J. Wysocki wrote:
>> On Wednesday, 6 of February 2008, matthieu castet wrote:
>>> Hi,
>>>
>>> matthieu castet wrote:
>>>> matthieu castet wrote:
>>>>> Pavel Machek wrote:
>>>>>> Hmm, maybe I know where problem could be. Try
>>>>>>
>>>>>> movl $(wakeup_stack - wakeup_code), %esp #
>>>>>> Private stack is needed for ASUS bo\
>>>>>>
>>>>>> instead of existing stack setup. That helped on one of my test-boxes
>>>>> Thanks, I will try that.
>>>>> Because clearing the flags imply pop/push in the stack it could be the
>>>>> problem
>>>> That doesn't help : it still crash in pushl $0.
>>>>
>>> All stack stuff in wakeup_code crash for me.
>>> I tried to change the stack position, make sure upper bit of %esp are
>>> clear, ... nothing work.
>>> What's are strange is that according to my x86 manual, in real mode the
>>> failure can only happen if the stack wrap which is not the case here.
>>> Any x86 guru advice ?
>>>
>>> If I remove stack access (remove clearing flag stuff, not call to video
>>> stuff) the resume works.
>>
>> Hm, can you place a "pushl %eax; popl %eax;" in place of the removed code and
>> see if that breaks?
> Yes that also break.
Hmm, and what kind of machine is that?
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-06 22:43 ` Pavel Machek
@ 2008-02-06 23:03 ` Rafael J. Wysocki
2008-02-07 20:12 ` Cacy Rodney
0 siblings, 1 reply; 21+ messages in thread
From: Rafael J. Wysocki @ 2008-02-06 23:03 UTC (permalink / raw)
To: Pavel Machek; +Cc: matthieu castet, linux-acpi, pm list
On Wednesday, 6 of February 2008, Pavel Machek wrote:
> Hi!
>
> >>>>>> instead of existing stack setup. That helped on one of my test-boxes
> >>>>> Thanks, I will try that.
> >>>>> Because clearing the flags imply pop/push in the stack it could be the
> >>>>> problem
> >>>> That doesn't help : it still crash in pushl $0.
> >>>>
> >>> All stack stuff in wakeup_code crash for me.
> >>> I tried to change the stack position, make sure upper bit of %esp are
> >>> clear, ... nothing work.
> >>> What's are strange is that according to my x86 manual, in real mode the
> >>> failure can only happen if the stack wrap which is not the case here.
> >>> Any x86 guru advice ?
> >>>
> >>> If I remove stack access (remove clearing flag stuff, not call to video
> >>> stuff) the resume works.
> >>
> >> Hm, can you place a "pushl %eax; popl %eax;" in place of the removed code and
> >> see if that breaks?
> > Yes that also break.
Interesting.
> Not sure what is going on...
Looks like ss goes bonkers or the 32-bit opcodes are invalid in real mode.
Matthieu, can you try "pushw %ax; popw %ax;", please?
Rafael
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-06 22:43 ` Pavel Machek
@ 2008-02-06 23:17 ` matthieu castet
2008-02-07 9:20 ` Pavel Machek
0 siblings, 1 reply; 21+ messages in thread
From: matthieu castet @ 2008-02-06 23:17 UTC (permalink / raw)
To: Pavel Machek; +Cc: Rafael J. Wysocki, linux-acpi, pm list
Pavel Machek wrote:
> On Wed 2008-02-06 23:40:35, matthieu castet wrote:
>>>> If I remove stack access (remove clearing flag stuff, not call to video
>>>> stuff) the resume works.
>>> Hm, can you place a "pushl %eax; popl %eax;" in place of the removed code and
>>> see if that breaks?
>> Yes that also break.
>
> Hmm, and what kind of machine is that?
processor : 0
vendor_id : AuthenticAMD
cpu family : 6
model : 6
model name : AMD Athlon(tm) XP 1800+
stepping : 2
cpu MHz : 1533.490
cache size : 256 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge
mca cmov pat pse36 mmx fxsr sse syscall mmxext 3dnowext 3dnow ts
bogomips : 3070.84
clflush size : 32
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-06 23:17 ` matthieu castet
@ 2008-02-07 9:20 ` Pavel Machek
2008-02-07 19:49 ` matthieu castet
0 siblings, 1 reply; 21+ messages in thread
From: Pavel Machek @ 2008-02-07 9:20 UTC (permalink / raw)
To: matthieu castet; +Cc: Rafael J. Wysocki, linux-acpi, pm list
Hi!
>>>>> If I remove stack access (remove clearing flag stuff, not call to video
>>>>> stuff) the resume works.
>>>> Hm, can you place a "pushl %eax; popl %eax;" in place of the removed code and
>>>> see if that breaks?
>>> Yes that also break.
>>
>> Hmm, and what kind of machine is that?
> processor : 0
> vendor_id : AuthenticAMD
> cpu family : 6
> model : 6
> model name : AMD Athlon(tm) XP 1800+
> stepping : 2
> cpu MHz : 1533.490
> cache size : 256 KB
> fdiv_bug : no
> hlt_bug : no
> f00f_bug : no
> coma_bug : no
> fpu : yes
> fpu_exception : yes
> cpuid level : 1
> wp : yes
> flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
> cmov pat pse36 mmx fxsr sse syscall mmxext 3dnowext 3dnow ts
> bogomips : 3070.84
> clflush size : 32
So I assume it is some kind of desktop?
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-05 23:02 ` matthieu castet
2008-02-05 23:20 ` Rafael J. Wysocki
@ 2008-02-07 9:23 ` Pavel Machek
2008-02-07 18:39 ` Rafael J. Wysocki
1 sibling, 1 reply; 21+ messages in thread
From: Pavel Machek @ 2008-02-07 9:23 UTC (permalink / raw)
To: matthieu castet; +Cc: Rafael J. Wysocki, linux-acpi, pm list
Hi!
>>>> Hmm, maybe I know where problem could be. Try
>>>>
>>>> movl $(wakeup_stack - wakeup_code), %esp #
>>>> Private stack is needed for ASUS bo\
>>>>
>>>> instead of existing stack setup. That helped on one of my test-boxes
>>> Thanks, I will try that.
>>> Because clearing the flags imply pop/push in the stack it could be the
>>> problem
>> That doesn't help : it still crash in pushl $0.
>>
> All stack stuff in wakeup_code crash for me.
> I tried to change the stack position, make sure upper bit of %esp are
> clear, ... nothing work.
> What's are strange is that according to my x86 manual, in real mode the
> failure can only happen if the stack wrap which is not the case here.
> Any x86 guru advice ?
Could you try the .c wakeup? I changed it a bit, perhaps that's enough.
> If I remove stack access (remove clearing flag stuff, not call to video
> stuff) the resume works.
Actually, I see a possible problem:
_start:
cli
cld
/* Set up segments */
movw %cs,%ax
movw %ax,%ds
movw %ax,%es
movw %ax,%ss
movl $wakeup_stack_end, %esp
/* Clear the EFLAGS */
pushl $0
popfl
...if someone calls start as 0x1234:0, we are okay. But if some broken
bios calls us as 0x1:0x234, we've got a problem.
One possible hack would be to movl 0, %esp. That should put the stack
at _start, corrupting memory but hopefully helping you diagnose it.
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-07 9:23 ` Pavel Machek
@ 2008-02-07 18:39 ` Rafael J. Wysocki
0 siblings, 0 replies; 21+ messages in thread
From: Rafael J. Wysocki @ 2008-02-07 18:39 UTC (permalink / raw)
To: Pavel Machek; +Cc: matthieu castet, linux-acpi, pm list
On Thursday, 7 of February 2008, Pavel Machek wrote:
> Hi!
Hi,
> >>>> Hmm, maybe I know where problem could be. Try
> >>>>
> >>>> movl $(wakeup_stack - wakeup_code), %esp #
> >>>> Private stack is needed for ASUS bo\
> >>>>
> >>>> instead of existing stack setup. That helped on one of my test-boxes
> >>> Thanks, I will try that.
> >>> Because clearing the flags imply pop/push in the stack it could be the
> >>> problem
> >> That doesn't help : it still crash in pushl $0.
> >>
> > All stack stuff in wakeup_code crash for me.
> > I tried to change the stack position, make sure upper bit of %esp are
> > clear, ... nothing work.
> > What's are strange is that according to my x86 manual, in real mode the
> > failure can only happen if the stack wrap which is not the case here.
> > Any x86 guru advice ?
>
> Could you try the .c wakeup? I changed it a bit, perhaps that's enough.
>
> > If I remove stack access (remove clearing flag stuff, not call to video
> > stuff) the resume works.
>
> Actually, I see a possible problem:
>
> _start:
> cli
> cld
>
> /* Set up segments */
> movw %cs,%ax
> movw %ax,%ds
> movw %ax,%es
> movw %ax,%ss
>
> movl $wakeup_stack_end, %esp
>
> /* Clear the EFLAGS */
> pushl $0
> popfl
>
> ...if someone calls start as 0x1234:0, we are okay. But if some broken
> bios calls us as 0x1:0x234, we've got a problem.
Well, in that case the signature/end_signature tests below would trigger, no?
Rafael
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-07 9:20 ` Pavel Machek
@ 2008-02-07 19:49 ` matthieu castet
2008-02-07 20:00 ` Rafael J. Wysocki
0 siblings, 1 reply; 21+ messages in thread
From: matthieu castet @ 2008-02-07 19:49 UTC (permalink / raw)
To: Pavel Machek; +Cc: Rafael J. Wysocki, linux-acpi, pm list
Hi,
Pavel Machek wrote:
> Hi!
> So I assume it is some kind of desktop?
Yes.
>>
>> ...if someone calls start as 0x1234:0, we are okay. But if some broken
>> bios calls us as 0x1:0x234, we've got a problem.
>
> Well, in that case the signature/end_signature tests below would
>trigger, no?
Yes, and for example the beep flag won't work.
>
> Not sure what is going on... but if you remove all the stack
> references, does it go up to 32-bit mode?
Yes, but I end up with a kernel panic after console resume and some
resume stuff.
> Looks like ss goes bonkers or the 32-bit opcodes are invalid in real
mode.
> Matthieu, can you try "pushw %ax; popw %ax;", please?
I still crash.
I also try to set ss to 0, and hardcode the stack (knowing we are loaded
at 0x1000). And it crash.
I wonder if there a way to check that we are realy in real mode ?
Matthieu
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-07 19:49 ` matthieu castet
@ 2008-02-07 20:00 ` Rafael J. Wysocki
2008-02-08 22:10 ` Pavel Machek
0 siblings, 1 reply; 21+ messages in thread
From: Rafael J. Wysocki @ 2008-02-07 20:00 UTC (permalink / raw)
To: matthieu castet; +Cc: Pavel Machek, linux-acpi, pm list
On Thursday, 7 of February 2008, matthieu castet wrote:
> Hi,
>
>
> Pavel Machek wrote:
> > Hi!
> > So I assume it is some kind of desktop?
> Yes.
>
> >>
> >> ...if someone calls start as 0x1234:0, we are okay. But if some broken
> >> bios calls us as 0x1:0x234, we've got a problem.
> >
> > Well, in that case the signature/end_signature tests below would
> >trigger, no?
>
> Yes, and for example the beep flag won't work.
>
> >
> > Not sure what is going on... but if you remove all the stack
> > references, does it go up to 32-bit mode?
> Yes, but I end up with a kernel panic after console resume and some
> resume stuff.
>
> > Looks like ss goes bonkers or the 32-bit opcodes are invalid in real
> mode.
> > Matthieu, can you try "pushw %ax; popw %ax;", please?
> I still crash.
> I also try to set ss to 0, and hardcode the stack (knowing we are loaded
> at 0x1000). And it crash.
>
>
> I wonder if there a way to check that we are realy in real mode ?
Yes. In real mode bit 0 of the cr0 register should be 0.
Thanks,
Rafael
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-06 23:03 ` Rafael J. Wysocki
@ 2008-02-07 20:12 ` Cacy Rodney
0 siblings, 0 replies; 21+ messages in thread
From: Cacy Rodney @ 2008-02-07 20:12 UTC (permalink / raw)
To: linux-acpi
I have read somewhere that the problem appeared at the beginning of
2.6.24 development. I'm using pure 2.6.23 (sony vaio laptop) and I have
experienced the problem of returning from suspend to ram as well. It
always occurs when the battery is present in the slot and never without
it. I did not have such problem with 2.6.19-rc3. I tried the 2.6.23-12
and 2.6.24 but without any better.
If you need any details about my configuration write me please.
regards
cacy
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: suspend to ram problem
2008-02-07 20:00 ` Rafael J. Wysocki
@ 2008-02-08 22:10 ` Pavel Machek
0 siblings, 0 replies; 21+ messages in thread
From: Pavel Machek @ 2008-02-08 22:10 UTC (permalink / raw)
To: Rafael J. Wysocki; +Cc: matthieu castet, linux-acpi, pm list
> > I wonder if there a way to check that we are realy in real mode ?
>
> Yes. In real mode bit 0 of the cr0 register should be 0.
It is not as simple. There's stuff like "unreal" mode... real mode
with 4GB descriptor limits... and similar crazyness.
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2008-02-08 22:09 UTC | newest]
Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-03 13:37 suspend to ram problem matthieu castet
2008-02-03 15:31 ` matthieu castet
2008-02-03 17:39 ` Rafael J. Wysocki
2008-02-03 18:18 ` Pavel Machek
2008-02-03 18:22 ` Rafael J. Wysocki
2008-02-03 18:40 ` matthieu castet
2008-02-04 6:57 ` matthieu castet
2008-02-05 23:02 ` matthieu castet
2008-02-05 23:20 ` Rafael J. Wysocki
2008-02-06 22:40 ` matthieu castet
2008-02-06 22:43 ` Pavel Machek
2008-02-06 23:03 ` Rafael J. Wysocki
2008-02-07 20:12 ` Cacy Rodney
2008-02-06 22:43 ` Pavel Machek
2008-02-06 23:17 ` matthieu castet
2008-02-07 9:20 ` Pavel Machek
2008-02-07 19:49 ` matthieu castet
2008-02-07 20:00 ` Rafael J. Wysocki
2008-02-08 22:10 ` Pavel Machek
2008-02-07 9:23 ` Pavel Machek
2008-02-07 18:39 ` Rafael J. Wysocki
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox