DragonFly submit List (threaded) for 2007-07
DragonFly BSD
DragonFly submit List (threaded) for 2007-07
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: patch to fix SMP vkernel reboots


From: Joerg Sonnenberger <joerg@xxxxxxxxxxxxxxxxx>
Date: Thu, 12 Jul 2007 18:15:07 +0200
Mail-followup-to: submit@crater.dragonflybsd.org

On Thu, Jul 12, 2007 at 11:32:43AM -0400, Joe Talbott wrote:
> Rebooting an SMP vkernel currently doesn't work since kern_execve()
> won't exec if multiple LWPs are present.  The attached patch adds a
> signal handler for SIGUSR2 which calls pthread_exit() on the current
> thread and a function kill_vcpus() that sends SIGUSR2 to each of the
> virtual CPU threads.  I'm not sure if I need to do some memory
> clean-up or not, so let me know if I'm missing something.

I would suggest a few modifications:
(1) Use SIGTERM. It is common to have that meaning.
(2) Memorize the original thread in a global variable. Set a second one
to notify that it was called internally.
(3) In the signal handler, check if the second variable is called. If
not, handle this as external shutdown/reboot request. If it is, compare
pthread_self() with the first variable and pthread_exit() if they don't
match. Use a conditional variable to find out when all threads are dead.

Ideally this dance would not be necessary as exec is supposed to kill
all LWPs.

Joerg



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