Make DOM0OPS build for PVH/PVHVM too

This commit is contained in:
bouyer 2020-05-05 17:02:01 +00:00
parent 9ae5cc2e42
commit 4dbd32ce08
9 changed files with 51 additions and 41 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: pmap.c,v 1.387 2020/05/02 16:44:36 bouyer Exp $ */ /* $NetBSD: pmap.c,v 1.388 2020/05/05 17:02:01 bouyer Exp $ */
/* /*
* Copyright (c) 2008, 2010, 2016, 2017, 2019, 2020 The NetBSD Foundation, Inc. * Copyright (c) 2008, 2010, 2016, 2017, 2019, 2020 The NetBSD Foundation, Inc.
@ -130,7 +130,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.387 2020/05/02 16:44:36 bouyer Exp $"); __KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.388 2020/05/05 17:02:01 bouyer Exp $");
#include "opt_user_ldt.h" #include "opt_user_ldt.h"
#include "opt_lockdebug.h" #include "opt_lockdebug.h"
@ -982,7 +982,7 @@ pmap_kenter_pa(vaddr_t va, paddr_t pa, vm_prot_t prot, u_int flags)
pte = vtopte(va); pte = vtopte(va);
else else
pte = kvtopte(va); pte = kvtopte(va);
#ifdef DOM0OPS #if defined(XENPV) && defined(DOM0OPS)
if (pa < pmap_pa_start || pa >= pmap_pa_end) { if (pa < pmap_pa_start || pa >= pmap_pa_end) {
#ifdef DEBUG #ifdef DEBUG
printf_nolog("%s: pa %#" PRIxPADDR " for va %#" PRIxVADDR printf_nolog("%s: pa %#" PRIxPADDR " for va %#" PRIxVADDR
@ -990,7 +990,7 @@ pmap_kenter_pa(vaddr_t va, paddr_t pa, vm_prot_t prot, u_int flags)
#endif /* DEBUG */ #endif /* DEBUG */
npte = pa; npte = pa;
} else } else
#endif /* DOM0OPS */ #endif /* XENPV && DOM0OPS */
npte = pmap_pa2pte(pa); npte = pmap_pa2pte(pa);
npte |= protection_codes[prot] | PTE_P | pmap_pg_g; npte |= protection_codes[prot] | PTE_P | pmap_pg_g;
npte |= pmap_pat_flags(flags); npte |= pmap_pat_flags(flags);

View File

@ -1,6 +1,6 @@
# $NetBSD: files.xen,v 1.184 2020/05/02 16:46:06 bouyer Exp $ # $NetBSD: files.xen,v 1.185 2020/05/05 17:02:01 bouyer Exp $
defflag opt_xen.h XEN XENPVH XENPVHVM PAE defflag opt_xen.h XEN XENPVH XENPVHVM PAE DOM0OPS
file arch/xen/x86/hypervisor_machdep.c xen file arch/xen/x86/hypervisor_machdep.c xen
file arch/xen/x86/xen_intr.c xen file arch/xen/x86/xen_intr.c xen
@ -46,3 +46,15 @@ file arch/xen/xen/xennet_checksum.c xvif | xennet
device xbd: disk device xbd: disk
attach xbd at xenbus attach xbd at xenbus
file arch/xen/xen/xbd_xenbus.c xbd file arch/xen/xen/xbd_xenbus.c xbd
# Domain-0 operations
file arch/xen/xen/privcmd.c dom0ops
file arch/xen/x86/xen_shm_machdep.c dom0ops
file arch/xen/xen/xenevt.c xenevt & dom0ops
file arch/xen/xen/xennetback_xenbus.c xvif
file arch/xen/xen/xbdback_xenbus.c xbdback
# Xen event peudo-device
defpseudo xenevt
defpseudo xvif
defpseudo xbdback

View File

@ -1,4 +1,4 @@
# $NetBSD: files.xen.pv,v 1.2 2020/04/25 15:26:17 bouyer Exp $ # $NetBSD: files.xen.pv,v 1.3 2020/05/05 17:02:01 bouyer Exp $
file arch/xen/x86/autoconf.c xenpv file arch/xen/x86/autoconf.c xenpv
file arch/xen/x86/x86_xpmap.c xenpv file arch/xen/x86/x86_xpmap.c xenpv
@ -17,11 +17,6 @@ include "arch/xen/conf/files.compat"
# System bus types # System bus types
# #
# Xen event peudo-device
defpseudo xenevt
defpseudo xvif
defpseudo xbdback
# PCI frontend # PCI frontend
device xpci: pcibus device xpci: pcibus
attach xpci at xenbus with xpci_xenbus attach xpci at xenbus with xpci_xenbus
@ -40,10 +35,4 @@ device vcpu
attach vcpu at xendevbus attach vcpu at xendevbus
file arch/xen/x86/cpu.c xenpv & vcpu file arch/xen/x86/cpu.c xenpv & vcpu
# Domain-0 operations defflag opt_xen.h XENPV
defflag opt_xen.h DOM0OPS XENPV
file arch/xen/xen/privcmd.c dom0ops
file arch/xen/x86/xen_shm_machdep.c dom0ops
file arch/xen/xen/xenevt.c xenevt & (dom0ops | xenpvhvm)
file arch/xen/xen/xennetback_xenbus.c xvif
file arch/xen/xen/xbdback_xenbus.c xbdback

View File

@ -1,4 +1,4 @@
/* $NetBSD: xen_intr.c,v 1.25 2020/05/04 15:55:56 jdolecek Exp $ */ /* $NetBSD: xen_intr.c,v 1.26 2020/05/05 17:02:01 bouyer Exp $ */
/*- /*-
* Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc.
@ -30,7 +30,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: xen_intr.c,v 1.25 2020/05/04 15:55:56 jdolecek Exp $"); __KERNEL_RCSID(0, "$NetBSD: xen_intr.c,v 1.26 2020/05/05 17:02:01 bouyer Exp $");
#include "opt_multiprocessor.h" #include "opt_multiprocessor.h"
@ -232,7 +232,7 @@ xen_intr_disestablish(struct intrhand *ih)
/* event_remove_handler frees ih */ /* event_remove_handler frees ih */
return; return;
} }
#if defined(DOM0OPS) #if defined(DOM0OPS) && defined(XENPV)
/* /*
* Cache state, to prevent a use after free situation with * Cache state, to prevent a use after free situation with
* ih. * ih.

View File

@ -1,4 +1,4 @@
/* $NetBSD: hypervisor.c,v 1.80 2020/05/03 17:24:11 bouyer Exp $ */ /* $NetBSD: hypervisor.c,v 1.81 2020/05/05 17:02:01 bouyer Exp $ */
/* /*
* Copyright (c) 2005 Manuel Bouyer. * Copyright (c) 2005 Manuel Bouyer.
@ -53,7 +53,7 @@
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: hypervisor.c,v 1.80 2020/05/03 17:24:11 bouyer Exp $"); __KERNEL_RCSID(0, "$NetBSD: hypervisor.c,v 1.81 2020/05/05 17:02:01 bouyer Exp $");
#include <sys/param.h> #include <sys/param.h>
#include <sys/systm.h> #include <sys/systm.h>
@ -156,7 +156,7 @@ union hypervisor_attach_cookie {
* This is set when the ISA bus is attached. If it's not set by the * This is set when the ISA bus is attached. If it's not set by the
* time it's checked below, then mainbus attempts to attach an ISA. * time it's checked below, then mainbus attempts to attach an ISA.
*/ */
#ifdef DOM0OPS #if defined(XENPV) && defined(DOM0OPS)
int isa_has_been_seen; int isa_has_been_seen;
#if NISA > 0 #if NISA > 0
struct x86_isa_chipset x86_isa_chipset; struct x86_isa_chipset x86_isa_chipset;
@ -663,7 +663,7 @@ hypervisor_attach(device_t parent, device_t self, void *aux)
hac.hac_xencons.xa_device = "xencons"; hac.hac_xencons.xa_device = "xencons";
config_found_ia(self, "xendevbus", &hac.hac_xencons, hypervisor_print); config_found_ia(self, "xendevbus", &hac.hac_xencons, hypervisor_print);
#endif #endif
#ifdef DOM0OPS #if defined(XENPV) && defined(DOM0OPS)
#if NPCI > 0 #if NPCI > 0
#if NACPICA > 0 #if NACPICA > 0
if (acpi_present) { if (acpi_present) {
@ -728,7 +728,7 @@ hypervisor_attach(device_t parent, device_t self, void *aux)
if (xendomain_is_privileged()) { if (xendomain_is_privileged()) {
xenprivcmd_init(); xenprivcmd_init();
} }
#endif /* DOM0OPS */ #endif /* XENPV && DOM0OPS */
hypervisor_machdep_attach(); hypervisor_machdep_attach();

View File

@ -1,4 +1,4 @@
/* $NetBSD: privcmd.c,v 1.56 2020/04/25 15:26:18 bouyer Exp $ */ /* $NetBSD: privcmd.c,v 1.57 2020/05/05 17:02:01 bouyer Exp $ */
/*- /*-
* Copyright (c) 2004 Christian Limpach. * Copyright (c) 2004 Christian Limpach.
@ -27,7 +27,7 @@
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: privcmd.c,v 1.56 2020/04/25 15:26:18 bouyer Exp $"); __KERNEL_RCSID(0, "$NetBSD: privcmd.c,v 1.57 2020/05/05 17:02:01 bouyer Exp $");
#include <sys/param.h> #include <sys/param.h>
#include <sys/systm.h> #include <sys/systm.h>
@ -44,6 +44,8 @@ __KERNEL_RCSID(0, "$NetBSD: privcmd.c,v 1.56 2020/04/25 15:26:18 bouyer Exp $");
#include <uvm/uvm_fault_i.h> #include <uvm/uvm_fault_i.h>
#include <xen/kernfs_machdep.h> #include <xen/kernfs_machdep.h>
#include <xen/hypervisor.h>
#include <xen/xen.h>
#include <xen/xenio.h> #include <xen/xenio.h>
#define PRIVCMD_MODE (S_IRUSR) #define PRIVCMD_MODE (S_IRUSR)

View File

@ -1,4 +1,4 @@
/* $NetBSD: xbdback_xenbus.c,v 1.92 2020/04/25 20:05:25 jdolecek Exp $ */ /* $NetBSD: xbdback_xenbus.c,v 1.93 2020/05/05 17:02:01 bouyer Exp $ */
/* /*
* Copyright (c) 2006 Manuel Bouyer. * Copyright (c) 2006 Manuel Bouyer.
@ -26,7 +26,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: xbdback_xenbus.c,v 1.92 2020/04/25 20:05:25 jdolecek Exp $"); __KERNEL_RCSID(0, "$NetBSD: xbdback_xenbus.c,v 1.93 2020/05/05 17:02:01 bouyer Exp $");
#include <sys/buf.h> #include <sys/buf.h>
#include <sys/condvar.h> #include <sys/condvar.h>
@ -46,6 +46,7 @@ __KERNEL_RCSID(0, "$NetBSD: xbdback_xenbus.c,v 1.92 2020/04/25 20:05:25 jdolecek
#include <sys/types.h> #include <sys/types.h>
#include <sys/vnode.h> #include <sys/vnode.h>
#include <xen/hypervisor.h>
#include <xen/xen.h> #include <xen/xen.h>
#include <xen/xen_shm.h> #include <xen/xen_shm.h>
#include <xen/evtchn.h> #include <xen/evtchn.h>
@ -595,7 +596,7 @@ xbdback_connect(struct xbdback_instance *xbdi)
XENPRINTF(("xbdback %s: connect evchannel %d\n", xbusd->xbusd_path, xbdi->xbdi_evtchn)); XENPRINTF(("xbdback %s: connect evchannel %d\n", xbusd->xbusd_path, xbdi->xbdi_evtchn));
xbdi->xbdi_evtchn = evop.u.bind_interdomain.local_port; xbdi->xbdi_evtchn = evop.u.bind_interdomain.local_port;
xbdi->xbdi_ih = xen_intr_establish_xname(-1, &xen_pic, xbdi->xbdi_evtchn, xbdi->xbdi_ih = intr_establish_xname(-1, &xen_pic, xbdi->xbdi_evtchn,
IST_LEVEL, IPL_BIO, xbdback_evthandler, xbdi, false, IST_LEVEL, IPL_BIO, xbdback_evthandler, xbdi, false,
xbdi->xbdi_name); xbdi->xbdi_name);
KASSERT(xbdi->xbdi_ih != NULL); KASSERT(xbdi->xbdi_ih != NULL);
@ -642,7 +643,7 @@ xbdback_disconnect(struct xbdback_instance *xbdi)
return; return;
} }
hypervisor_mask_event(xbdi->xbdi_evtchn); hypervisor_mask_event(xbdi->xbdi_evtchn);
xen_intr_disestablish(xbdi->xbdi_ih); intr_disestablish(xbdi->xbdi_ih);
/* signal thread that we want to disconnect, then wait for it */ /* signal thread that we want to disconnect, then wait for it */
xbdi->xbdi_status = DISCONNECTING; xbdi->xbdi_status = DISCONNECTING;

View File

@ -1,4 +1,4 @@
/* $NetBSD: xenevt.c,v 1.57 2020/04/25 15:26:18 bouyer Exp $ */ /* $NetBSD: xenevt.c,v 1.58 2020/05/05 17:02:01 bouyer Exp $ */
/* /*
* Copyright (c) 2005 Manuel Bouyer. * Copyright (c) 2005 Manuel Bouyer.
@ -26,7 +26,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: xenevt.c,v 1.57 2020/04/25 15:26:18 bouyer Exp $"); __KERNEL_RCSID(0, "$NetBSD: xenevt.c,v 1.58 2020/05/05 17:02:01 bouyer Exp $");
#include "opt_xen.h" #include "opt_xen.h"
#include <sys/param.h> #include <sys/param.h>
@ -176,12 +176,12 @@ xenevtattach(int n)
* Allocate a loopback event port. * Allocate a loopback event port.
* This helps us massage xenevt_processevt() into the * This helps us massage xenevt_processevt() into the
* callchain at the appropriate level using only * callchain at the appropriate level using only
* xen_intr_establish_xname(). * intr_establish_xname().
*/ */
evtchn_port_t evtchn = xenevt_alloc_event(); evtchn_port_t evtchn = xenevt_alloc_event();
/* The real objective here is to wiggle into the ih callchain for IPL level */ /* The real objective here is to wiggle into the ih callchain for IPL level */
ih = xen_intr_establish_xname(-1, &xen_pic, evtchn, IST_LEVEL, level, ih = intr_establish_xname(-1, &xen_pic, evtchn, IST_LEVEL, level,
xenevt_processevt, NULL, true, "xenevt"); xenevt_processevt, NULL, true, "xenevt");
KASSERT(ih != NULL); KASSERT(ih != NULL);
@ -357,8 +357,13 @@ xenevtmmap(dev_t dev, off_t off, int prot)
/* only one page, so off is always 0 */ /* only one page, so off is always 0 */
if (off != 0) if (off != 0)
return -1; return -1;
#ifdef XENPV
return x86_btop( return x86_btop(
xpmap_mtop((paddr_t)xen_start_info.store_mfn << PAGE_SHIFT)); xpmap_mtop((paddr_t)xen_start_info.store_mfn << PAGE_SHIFT));
#else
return x86_btop(
(paddr_t)xen_start_info.store_mfn << PAGE_SHIFT);
#endif
} }
return -1; return -1;
} }

View File

@ -1,4 +1,4 @@
/* $NetBSD: xennetback_xenbus.c,v 1.104 2020/05/04 08:22:45 jdolecek Exp $ */ /* $NetBSD: xennetback_xenbus.c,v 1.105 2020/05/05 17:02:01 bouyer Exp $ */
/* /*
* Copyright (c) 2006 Manuel Bouyer. * Copyright (c) 2006 Manuel Bouyer.
@ -25,7 +25,7 @@
*/ */
#include <sys/cdefs.h> #include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: xennetback_xenbus.c,v 1.104 2020/05/04 08:22:45 jdolecek Exp $"); __KERNEL_RCSID(0, "$NetBSD: xennetback_xenbus.c,v 1.105 2020/05/05 17:02:01 bouyer Exp $");
#include "opt_xen.h" #include "opt_xen.h"
@ -52,6 +52,7 @@ __KERNEL_RCSID(0, "$NetBSD: xennetback_xenbus.c,v 1.104 2020/05/04 08:22:45 jdol
#include <net/if_ether.h> #include <net/if_ether.h>
#include <xen/hypervisor.h>
#include <xen/xen.h> #include <xen/xen.h>
#include <xen/xen_shm.h> #include <xen/xen_shm.h>
#include <xen/evtchn.h> #include <xen/evtchn.h>
@ -361,7 +362,7 @@ xennetback_xenbus_destroy(void *arg)
if (xneti->xni_ih != NULL) { if (xneti->xni_ih != NULL) {
hypervisor_mask_event(xneti->xni_evtchn); hypervisor_mask_event(xneti->xni_evtchn);
xen_intr_disestablish(xneti->xni_ih); intr_disestablish(xneti->xni_ih);
xneti->xni_ih = NULL; xneti->xni_ih = NULL;
} }
@ -528,7 +529,7 @@ xennetback_connect(struct xnetback_instance *xneti)
xneti->xni_status = CONNECTED; xneti->xni_status = CONNECTED;
xen_wmb(); xen_wmb();
xneti->xni_ih = xen_intr_establish_xname(-1, &xen_pic, xneti->xni_evtchn, xneti->xni_ih = intr_establish_xname(-1, &xen_pic, xneti->xni_evtchn,
IST_LEVEL, IPL_NET, xennetback_evthandler, xneti, false, IST_LEVEL, IPL_NET, xennetback_evthandler, xneti, false,
xneti->xni_if.if_xname); xneti->xni_if.if_xname);
KASSERT(xneti->xni_ih != NULL); KASSERT(xneti->xni_ih != NULL);