Re: hack for getting suspend/resume to half work on an IBM Thinkpad x60s [SMP]

Alex Povolotsky <[email protected]>
Newsgroups gmane.os.freebsd.devel.mobile
Message-ID <[email protected]>
Andrea Bittau wrote:
> This is a half working hack for getting suspend/resume to "work" on an IBM
> Thinkpad x60s [Intel Duo].  It has two limitations:
> 1) All interrupts are routed to the BSP.
> 2) Upon resume, the AP sits in the idle loop.  You can try to make it escape,
>    but it doesn't quite work yet.
> I think these issues are both related and it has to do with the way how i
> restore the second CPU.  I think the page tables are messed up, and perhaps even
> other state.  Hopefully someone can give me some insight on how to fix this.
> [Question: from init_secondary() how do I get back to where I was [the IPI_STOP
> handler]? =D  Do I need to do something like acpi_wakeup.c?  Isn't there an
> easier way?] Also, if people seem interested, I can try and write a proper
> patch.
>
> In order to get suspend/resume to work, there are three main hurdles to jump:
> 1) SATA suspend/resume seems broken.  Change the SATA option in the BIOS to
>    "compatible".
>
> 2) apic.  FreeBSD reconfigures the io apic upon resume, but not the local apic.
>    The patch attached to this mail fixes this.  Indeed, it almost does so in the
>    "proper" way and not so much of a hack =D.
>
> 3) SMP.  The second core needs to be killed and woken up as appropriate.  The
>    way I do this is quite lame.
>    - Force the second core in the idle loop by setting machdep.hlt_cpus=2.
>    - make system look like UP instead of SMP [i.e. deactivate SMP] & suspend.
>    - resume, wake up other core [which will run idle process] and activate SMP.
>
> To get this to work in practice:
> 0) unload all drivers.
> 1) Apply the patch against today's freebsd-current.
> 2) My /etc/rc.suspend looks like this:
> #!/bin/sh
> sync
> sync
> sysctl machdep.hlt_cpus=2
> sleep 2
>
> 3) zzz
>
> 4) if you want to crash: sysctl machdep.hlt_cpus=0
>
> have fun
>   

Trying to do so on ThinkPad R60.

Applied patches well, installed and rebooted with new kernel. sysctl 
machdep.hlt_cpus=2, sysctl kern.smp.active=0, zzz - computer goes to 
sleep well.  (sleep indicator is on). That's all. Pressing power button 
makes disk LED blink for half a second once, and no other reaction on 
any of my attempts. Only extracting the battery and power cord seems to 
help, not in waking up, of course ;)

What can I investigate, fix, patch or something?

Alex
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-mobile
To unsubscribe, send any mail to "[email protected]"
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.