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);
|
||
|
}
|
||