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