Skip site navigation (1)Skip section navigation (2)
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>