Catch-up Xen and usermode with lwp_getpcb() and unbreak Xen build.
This commit is contained in:
parent
498ef96f10
commit
448807fa21
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: cpu.c,v 1.4 2009/10/21 16:06:59 snj Exp $ */
|
||||
/* $NetBSD: cpu.c,v 1.5 2009/11/21 05:54:04 rmind Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2007 Jared D. McNeill <jmcneill@invisible.ca>
|
||||
@ -27,7 +27,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.4 2009/10/21 16:06:59 snj Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.5 2009/11/21 05:54:04 rmind Exp $");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/conf.h>
|
||||
@ -145,8 +145,8 @@ lwp_t *
|
||||
cpu_switchto(lwp_t *oldlwp, lwp_t *newlwp, bool returning)
|
||||
{
|
||||
extern int errno;
|
||||
struct pcb *oldpcb = (struct pcb *)(oldlwp ? oldlwp->l_addr : NULL);
|
||||
struct pcb *newpcb = (struct pcb *)newlwp->l_addr;
|
||||
struct pcb *oldpcb = oldlwp ? lwp_getpcb(oldlwp) : NULL;
|
||||
struct pcb *newpcb = lwp_getpcb(newlwp);
|
||||
struct cpu_info *ci = curcpu();
|
||||
|
||||
#ifdef CPU_DEBUG
|
||||
@ -243,7 +243,7 @@ cpu_lwp_free(struct lwp *l, int proc)
|
||||
void
|
||||
cpu_lwp_free2(struct lwp *l)
|
||||
{
|
||||
struct pcb *pcb = (struct pcb *)l->l_addr;
|
||||
struct pcb *pcb = lwp_getpcb(l);
|
||||
|
||||
#ifdef CPU_DEBUG
|
||||
printf("cpu_lwp_free2\n");
|
||||
@ -273,7 +273,7 @@ cpu_lwp_fork(struct lwp *l1, struct lwp *l2, void *stack, size_t stacksize,
|
||||
void (*func)(void *), void *arg)
|
||||
{
|
||||
extern int errno;
|
||||
struct pcb *pcb = (struct pcb *)l2->l_addr;
|
||||
struct pcb *pcb = lwp_getpcb(l2);
|
||||
|
||||
#ifdef CPU_DEBUG
|
||||
printf("cpu_lwp_fork [%s/%p] -> [%s/%p] stack=%p stacksize=%d\n",
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: autoconf.c,v 1.11 2009/11/06 23:09:10 dyoung Exp $ */
|
||||
/* $NetBSD: autoconf.c,v 1.12 2009/11/21 05:54:04 rmind Exp $ */
|
||||
/* NetBSD: autoconf.c,v 1.75 2003/12/30 12:33:22 pk Exp */
|
||||
|
||||
/*-
|
||||
@ -45,7 +45,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.11 2009/11/06 23:09:10 dyoung Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.12 2009/11/21 05:54:04 rmind Exp $");
|
||||
|
||||
#include "opt_xen.h"
|
||||
#include "opt_compat_oldboot.h"
|
||||
@ -117,6 +117,7 @@ int x86_ndisks;
|
||||
void
|
||||
cpu_configure(void)
|
||||
{
|
||||
struct pcb *pcb;
|
||||
|
||||
startrtclock();
|
||||
|
||||
@ -140,7 +141,8 @@ cpu_configure(void)
|
||||
#endif
|
||||
|
||||
/* resync cr0 after FPU configuration */
|
||||
lwp0.l_addr->u_pcb.pcb_cr0 = rcr0();
|
||||
pcb = lwp_getpcb(&lwp0);
|
||||
pcb->pcb_cr0 = rcr0();
|
||||
#ifdef MULTIPROCESSOR
|
||||
/* propagate this to the idle pcb's. */
|
||||
cpu_init_idle_lwps();
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: cpu.c,v 1.36 2009/11/07 07:27:49 cegger Exp $ */
|
||||
/* $NetBSD: cpu.c,v 1.37 2009/11/21 05:54:04 rmind Exp $ */
|
||||
/* NetBSD: cpu.c,v 1.18 2004/02/20 17:35:01 yamt Exp */
|
||||
|
||||
/*-
|
||||
@ -66,7 +66,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.36 2009/11/07 07:27:49 cegger Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.37 2009/11/21 05:54:04 rmind Exp $");
|
||||
|
||||
#include "opt_ddb.h"
|
||||
#include "opt_multiprocessor.h"
|
||||
@ -512,13 +512,14 @@ cpu_attach_common(device_t parent, device_t self, void *aux)
|
||||
#if defined(MULTIPROCESSOR)
|
||||
if (mp_verbose) {
|
||||
struct lwp *l = ci->ci_data.cpu_idlelwp;
|
||||
struct pcb *pcb = lwp_getpcb(l);
|
||||
|
||||
aprint_verbose_dev(sc->sc_dev, "idle lwp at %p, idle sp at 0x%p\n",
|
||||
l,
|
||||
#ifdef i386
|
||||
(void *)l->l_addr->u_pcb.pcb_esp
|
||||
(void *)pcb->pcb_esp
|
||||
#else
|
||||
(void *)l->l_addr->u_pcb.pcb_rsp
|
||||
(void *)pcb->pcb_rsp
|
||||
#endif
|
||||
);
|
||||
|
||||
@ -596,7 +597,7 @@ static void
|
||||
cpu_init_idle_lwp(struct cpu_info *ci)
|
||||
{
|
||||
struct lwp *l = ci->ci_data.cpu_idlelwp;
|
||||
struct pcb *pcb = &l->l_addr->u_pcb;
|
||||
struct pcb *pcb = lwp_getpcb(l);
|
||||
|
||||
pcb->pcb_cr0 = rcr0();
|
||||
}
|
||||
@ -692,8 +693,9 @@ void
|
||||
cpu_hatch(void *v)
|
||||
{
|
||||
struct cpu_info *ci = (struct cpu_info *)v;
|
||||
int s, i;
|
||||
struct pcb *pcb;
|
||||
uint32_t blacklist_features;
|
||||
int s, i;
|
||||
|
||||
#ifdef __x86_64__
|
||||
cpu_init_msrs(ci, true);
|
||||
@ -720,9 +722,12 @@ cpu_hatch(void *v)
|
||||
|
||||
KASSERT((ci->ci_flags & CPUF_RUNNING) == 0);
|
||||
|
||||
pcb = lwp_getpcb(curlwp);
|
||||
lcr3(pmap_kernel()->pm_pdirpa);
|
||||
curlwp->l_addr->u_pcb.pcb_cr3 = pmap_kernel()->pm_pdirpa;
|
||||
lcr0(ci->ci_data.cpu_idlelwp->l_addr->u_pcb.pcb_cr0);
|
||||
pcb->pcb_cr3 = pmap_kernel()->pm_pdirpa;
|
||||
pcb = lwp_getpcb(ci->ci_data.cpu_idlelwp);
|
||||
lcr0(pcb->pcb_cr0);
|
||||
|
||||
cpu_init_idt();
|
||||
gdt_init_cpu(ci);
|
||||
lapic_enable();
|
||||
|
Loading…
Reference in New Issue
Block a user