Bug #729 ยป vk_reboot.patch
sys/platform/vkernel/i386/exception.c 12 Jul 2007 15:24:31 -0000 | ||
---|---|---|
--mycpu->gd_intr_nesting_level;
|
||
}
|
||
static
|
||
void
|
||
halt_vcpu(int nada, siginfo_t *info, void *ctxp)
|
||
{
|
||
int ret = 0;
|
||
pthread_exit(&ret);
|
||
}
|
||
#endif
|
||
void
|
||
... | ... | |
#ifdef SMP
|
||
sa.sa_sigaction = ipisig;
|
||
sigaction(SIGUSR1, &sa, NULL);
|
||
sa.sa_sigaction = halt_vcpu;
|
||
sigaction(SIGUSR2, &sa, NULL);
|
||
#endif
|
||
}
|
||
sys/platform/vkernel/i386/mp.c 12 Jul 2007 15:24:48 -0000 | ||
---|---|---|
return(ncpus - 1);
|
||
}
|
||
#ifdef SMP
|
||
void
|
||
kill_cpus(void)
|
||
{
|
||
int i;
|
||
for (i = 1; i < MAXCPU; i++)
|
||
if (ap_tids[i] != NULL)
|
||
pthread_kill(ap_tids[i], SIGUSR2);
|
||
}
|
||
#endif
|
sys/platform/vkernel/include/smp.h 12 Jul 2007 15:37:35 -0000 | ||
---|---|---|
int stop_cpus (u_int);
|
||
void ap_init (void);
|
||
int restart_cpus (u_int);
|
||
void kill_cpus (void);
|
||
#if 0
|
||
void forward_signal (struct proc *);
|
||
sys/platform/vkernel/platform/init.c 12 Jul 2007 15:37:08 -0000 | ||
---|---|---|
#include <machine/cpu.h>
|
||
#include <machine/globaldata.h>
|
||
#include <machine/smp.h>
|
||
#include <machine/tls.h>
|
||
#include <machine/md_var.h>
|
||
#include <machine/vmparam.h>
|
||
... | ... | |
kprintf("cpu reset, rebooting vkernel\n");
|
||
closefrom(3);
|
||
cleanpid();
|
||
#ifdef SMP
|
||
kill_cpus();
|
||
#endif
|
||
execv(save_av[0], save_av);
|
||
}
|
||