I know that there are differently methods to do a reboot.
I'm working on a simple hyper-visor and I have a little problem when I want to reboot a multi-processor aware x86 Windows 7 Guest. The main steps the OS does seem to be: Task Switch - Task Switch - Triple Fault. This happens on all CPUs except one which does not initiate a Task Switch at all and hangs somewhere. The last exit I get from it is a CPUID with EAX = 1 so I really don't know (yet) where or why it does not get to do a Task Switch like all the others. I'm a bit stuck on understanding this - maybe some details about what should normally happen will help me.
What is the actual method that is used for a reboot by a x86 Windows 7?
EDIT I figured this out a few days ago, but I haven't got time to update the post. I'm not going to answer my own question because I don't think this is a full and definitive answer, but for someone who might have the same problem this will make things a bit easier.
Turns out, that the missing CPU was halted. The flow is, more ore less, this: Task Switch, Triple Fault (for n-1 CPUs) and halt (for the n-th CPU). After this there should be an init on each one and then everything is reset.