Date: Tue, 03 Oct 2006 14:03:31 -0700 From: Nate Lawson <nate@root.org> To: John Baldwin <jhb@freebsd.org> Cc: freebsd-acpi@freebsd.org, Andrea Bittau <a.bittau@cs.ucl.ac.uk>, freebsd-mobile@freebsd.org Subject: Re: hack for getting suspend/resume to half work on an IBM Thinkpad x60s [SMP] Message-ID: <4522D023.9090501@root.org> In-Reply-To: <200610031302.34835.jhb@freebsd.org> References: <20060921000628.GA1832@shorty.sorbonet.org> <200610021424.18562.jhb@freebsd.org> <20061002223055.GA8217@shorty.sorbonet.org> <200610031302.34835.jhb@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
John Baldwin wrote: > On Monday 02 October 2006 18:30, Andrea Bittau wrote: >>> resuming the darn things. Do you know what mode the CPUs come back up in? >>> It looks like we need to resend startup IPIs to them from your patch. >> Yea it all comes back in real mode. I've tried using the standard > freebsd "boot >> code" for waking up the second CPU. There were some issues with the BSP not >> using PTD_Idle. I don't know enough about computers and freebsd to know > what >> exactly that means. Also, when the second CPU came back, if it entered the >> scheduler, it would die, so I had to leave it in the idle loop by setting > the >> cpu_hlt mask. >> >> Anyway, the correct way to do it I think is to generalize the save state & >> wakeup code used by the BSP in acpi_sleep_machdep(). That is, the second > core >> should save its state and wake up the same way as the BSP does. It should > not >> use the "come to life mechanism" used at boot-time. The reason is that the >> memory is setup properly and the second core should have saved registers > which >> make sense so less "initialization and setup" needs to be performed. > > No, the CPUs are going to come back into real mode, so we will need to > bootstrap them back into the kernel, etc. Once you've done that you can make > sure of stoppcbs[] (assuming you use stop_cpus to shut them down) to restore > enough state to get them back into the threads they were in when the suspend > happened. > I agree. The standard switch to protected mode, paging, etc. needs to be performed and then resume from the saved register context. -- Nate
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4522D023.9090501>