hack for getting suspend/resume to half work on an IBM Thinkpad
x60s [SMP]
Nate Lawson
nate at root.org
Tue Oct 3 14:03:46 PDT 2006
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
More information about the freebsd-mobile
mailing list