[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] Mini-OS context switching


  • To: Julian Stecklina <julian@xxxxxxxxxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxx>
  • From: Keir Fraser <Keir.Fraser@xxxxxxxxxxxx>
  • Date: Mon, 08 Oct 2007 08:38:00 +0100
  • Delivery-date: Mon, 08 Oct 2007 00:33:37 -0700
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>
  • Thread-index: AcgJfia1ZRzQrHVxEdypAQAWy6hiGQ==
  • Thread-topic: [Xen-devel] Mini-OS context switching

On 7/10/07 19:52, "Julian Stecklina" <julian@xxxxxxxxxxxxxx> wrote:

> Keir Fraser wrote:
>> How is it more difficult than context-switching inside the timer interrupt?
>> In both cases you switch pt_regs and re-enable interrupts. Certainly I don't
>> think the more complicated way of enabling interrupts makes
>> context-switching in minios that much more complicated overall.
> 
> Ok, I see that the problem regarding the race condition between
> re-enabling interrupts and restoring registers is already solved in
> x86_32.S. The remaining problem is that as far as I read the instruction
> set manual correctly IRET will not perform a stack switch, if it returns
> to the same privilege level. But this is exactly what I am trying to
> accomplish. Any clues, how to do this?

You want to switch to a different kernel stack (i.e., you have a kernel
stack per thread)? Or are you running the threads in ring 1 and not using
ring 3 at all? Well, either way, you just want to load your new stack
pointer with a MOV instruction to ESP.

If you are wanting to load a new user stack pointer for running in ring 3,
then you rely on IRET (which you can do because there will be a privilege
transition).

 -- Keir




_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.