Thu Apr 16 08:46:36 2020 UTC ()
Reorganise sources to make it possible to include Xen PVHVM support in
native kernels. Among others:
- move xen/include/amd64/hypercall.h to amd64/include/xen and
xen/include/i386/hypercall.h to i386/include/xen
- exclude some native files from the build for xenpv
- add xen to "machine" config statement for amd64 and i386
- split arch/xen/conf/files.xen to arch/xen/conf/files.xen (for pv drivers)
and arch/xen/conf/files.xen.pv (for full pv support)
- add GENERIC_XENHVM kernel config which includes GENERIC and add Xen PV
drivers.
(bouyer)
diff -r1.73.6.3 -r1.73.6.4 src/sys/arch/amd64/amd64/vector.S
diff -r0 -r1.1.2.1 src/sys/arch/amd64/conf/GENERIC_XENHVM
diff -r1.82 -r1.82.2.1 src/sys/arch/amd64/conf/Makefile.amd64
diff -r1.175.4.1 -r1.175.4.2 src/sys/arch/amd64/conf/XEN3_DOM0
diff -r1.115 -r1.115.4.1 src/sys/arch/amd64/conf/files.amd64
diff -r1.11 -r1.11.26.1 src/sys/arch/amd64/conf/std.amd64
diff -r1.11 -r1.11.10.1 src/sys/arch/amd64/conf/std.xen
diff -r0 -r1.1.2.1 src/sys/arch/amd64/include/xen/hypercalls.h
diff -r0 -r1.1.2.1 src/sys/arch/i386/conf/GENERIC_XENHVM
diff -r1.194 -r1.194.10.1 src/sys/arch/i386/conf/Makefile.i386
diff -r1.21.2.1 -r1.21.2.2 src/sys/arch/i386/conf/XEN3PAE_DOM0
diff -r1.401 -r1.401.6.1 src/sys/arch/i386/conf/files.i386
diff -r1.35 -r1.35.26.1 src/sys/arch/i386/conf/std.i386
diff -r1.825.4.1 -r1.825.4.2 src/sys/arch/i386/i386/machdep.c
diff -r1.85.6.4 -r1.85.6.5 src/sys/arch/i386/i386/vector.S
diff -r0 -r1.1.2.1 src/sys/arch/i386/include/xen/hypercalls.h
diff -r1.107.10.1 -r1.107.10.2 src/sys/arch/x86/conf/files.x86
diff -r1.61.6.2 -r1.61.6.3 src/sys/arch/x86/include/intr.h
diff -r1.12 -r1.12.10.1 src/sys/arch/x86/x86/cpu_ucode.c
diff -r1.10 -r1.10.6.1 src/sys/arch/x86/x86/cpu_ucode_amd.c
diff -r1.17 -r1.17.8.1 src/sys/arch/x86/x86/cpu_ucode_intel.c
diff -r1.76.6.1 -r1.76.6.2 src/sys/arch/x86/x86/lapic.c
diff -r1.3.12.1 -r1.3.12.2 src/sys/arch/x86/x86/mainbus.c
diff -r1.48 -r1.48.10.1 src/sys/arch/xen/conf/Makefile.xen
diff -r1.180.2.2 -r1.180.2.3 src/sys/arch/xen/conf/files.xen
diff -r0 -r1.1.2.1 src/sys/arch/xen/conf/files.xen.pv
diff -r1.10 -r1.10.10.1 src/sys/arch/xen/conf/std.xen
diff -r1.49.10.1 -r1.49.10.2 src/sys/arch/xen/include/hypervisor.h
diff -r1.53.6.1 -r1.53.6.2 src/sys/arch/xen/include/intr.h
diff -r1.42 -r1.42.6.1 src/sys/arch/xen/include/xenpmap.h
diff -r1.12 -r0 src/sys/arch/xen/include/amd64/hypercalls.h
diff -r1.19 -r0 src/sys/arch/xen/include/i386/hypercalls.h
diff -r1.36.8.1 -r1.36.8.2 src/sys/arch/xen/x86/hypervisor_machdep.c
diff -r1.21.2.4 -r1.21.2.5 src/sys/arch/xen/x86/xen_intr.c
diff -r1.35.6.2 -r1.35.6.3 src/sys/arch/xen/x86/xen_ipi.c
diff -r1.6 -r1.6.12.1 src/sys/arch/xen/x86/xen_mainbus.c
diff -r1.88.2.3 -r1.88.2.4 src/sys/arch/xen/xen/evtchn.c
diff -r1.109 -r1.109.2.1 src/sys/arch/xen/xen/if_xennet_xenbus.c
diff -r1.97 -r1.97.2.1 src/sys/arch/xen/xen/xbd_xenbus.c
diff -r1.22 -r1.22.10.1 src/sys/arch/xen/xen/xen_machdep.c
diff -r1.48 -r1.48.10.1 src/sys/arch/xen/xen/xencons.c
diff -r1.21 -r1.21.10.1 src/sys/arch/xen/xenbus/xenbus_comms.c
diff -r1.17 -r1.17.2.1 src/sys/arch/xen/xenbus/xenbus_dev.c
--- src/sys/arch/amd64/amd64/vector.S 2020/04/12 17:25:52 1.73.6.3
+++ src/sys/arch/amd64/amd64/vector.S 2020/04/16 08:46:34 1.73.6.4
@@ -1,4 +1,4 @@
-/* $NetBSD: vector.S,v 1.73.6.3 2020/04/12 17:25:52 bouyer Exp $ */
+/* $NetBSD: vector.S,v 1.73.6.4 2020/04/16 08:46:34 bouyer Exp $ */
/*
* Copyright (c) 1998, 2007, 2008 The NetBSD Foundation, Inc.
@@ -84,7 +84,7 @@
#include "ioapic.h"
#include "lapic.h"
#include "assym.h"
-#ifndef XEN
+#ifndef XENPV
#include "hyperv.h"
#endif
@@ -108,6 +108,7 @@
* segment registers.
*/
+#ifndef XENPV
#if NLAPIC > 0
#ifdef MULTIPROCESSOR
IDTVEC(recurse_lapic_ipi)
@@ -309,7 +310,6 @@
#endif /* NLAPIC > 0 */
-#ifndef XENPV
/*
* TLB shootdown handler.
*/
# $NetBSD: GENERIC_XENHVM,v 1.1.2.1 2020/04/16 08:46:34 bouyer Exp $
include "arch/amd64/conf/GENERIC"
options XENPVHVM
options XEN
no options SVS # Separate Virtual Space
options MAXPHYS=32768 #xbd doesn't handle 64k transfers
hypervisor* at mainbus? # Xen hypervisor
#vcpu* at hypervisor? # Xen virtual CPUs
xenbus* at hypervisor? # Xen virtual bus
xencons* at hypervisor? # Xen virtual console
xennet* at xenbus? # Xen virtual network interface
xbd* at xenbus? # Xen virtual block device
--- src/sys/arch/amd64/conf/Makefile.amd64 2020/04/04 07:03:57 1.82
+++ src/sys/arch/amd64/conf/Makefile.amd64 2020/04/16 08:46:34 1.82.2.1
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile.amd64,v 1.82 2020/04/04 07:03:57 maxv Exp $
+# $NetBSD: Makefile.amd64,v 1.82.2.1 2020/04/16 08:46:34 bouyer Exp $
# Makefile for NetBSD
#
@@ -76,6 +76,8 @@
.endfor
CFLAGS+= ${KMSANFLAGS.${.IMPSRC:T}:U${KMSANFLAGS}}
.endif
+
+EXTRA_INCLUDES= -I$S/external/mit/xen-include-public/dist/
##
## (3) libkern and compat
--- src/sys/arch/amd64/conf/XEN3_DOM0 2020/04/12 21:20:16 1.175.4.1
+++ src/sys/arch/amd64/conf/XEN3_DOM0 2020/04/16 08:46:34 1.175.4.2
@@ -1,4 +1,4 @@
-# $NetBSD: XEN3_DOM0,v 1.175.4.1 2020/04/12 21:20:16 bouyer Exp $
+# $NetBSD: XEN3_DOM0,v 1.175.4.2 2020/04/16 08:46:34 bouyer Exp $
include "arch/amd64/conf/std.xen"
@@ -12,7 +12,7 @@
#options UVMHIST_PRINT
#options SYSCALL_DEBUG
-#ident "XEN3_DOM0-$Revision: 1.175.4.1 $"
+#ident "XEN3_DOM0-$Revision: 1.175.4.2 $"
maxusers 32 # estimated number of users
@@ -224,6 +224,7 @@
pci* at pchb? bus ?
ppb* at pci? dev ? function ? # PCI-PCI bridges
pci* at ppb? bus ?
+options NO_PCI_MSI_MSIX
# pci backend devices, used for PCI pass-through. To export a PCI device
# to a domU, the device has to be attached to the pciback driver in the dom0.
--- src/sys/arch/amd64/conf/files.amd64 2020/01/09 00:42:24 1.115
+++ src/sys/arch/amd64/conf/files.amd64 2020/04/16 08:46:34 1.115.4.1
@@ -1,10 +1,8 @@
-# $NetBSD: files.amd64,v 1.115 2020/01/09 00:42:24 manu Exp $
+# $NetBSD: files.amd64,v 1.115.4.1 2020/04/16 08:46:34 bouyer Exp $
#
# new style config file for amd64 architecture
#
-ifndef xen
-
# maxpartitions must be first item in files.${ARCH}.newconf
maxpartitions 16
@@ -37,7 +35,7 @@
file arch/amd64/amd64/spl.S machdep
file arch/amd64/amd64/amd64_trap.S machdep
-file arch/amd64/amd64/autoconf.c machdep
+file arch/amd64/amd64/autoconf.c machdep & !xenpv
file arch/amd64/amd64/busfunc.S machdep
file arch/amd64/amd64/cpu_in_cksum.S (inet | inet6) & cpu_in_cksum
file arch/amd64/amd64/cpufunc.S machdep
@@ -53,11 +51,11 @@
file arch/amd64/amd64/trap.c machdep
file arch/x86/x86/fpu.c machdep
file arch/x86/x86/dbregs.c machdep
-file arch/x86/x86/spectre.c machdep
+file arch/x86/x86/spectre.c machdep & !xenpv
file arch/amd64/amd64/lock_stubs.S machdep
file dev/cons.c machdep
-file arch/amd64/amd64/mptramp.S multiprocessor
+file arch/amd64/amd64/mptramp.S multiprocessor & !xenpv
#
# Stack-less Just-In-Time compiler
@@ -91,9 +89,10 @@
#
# XXX BIOS32 only if something that uses it is configured!
-device mainbus: isabus, pcibus, bios32, acpibus, cpubus, ioapicbus, ipmibus
+device mainbus: isabus, pcibus, bios32, acpibus, cpubus, ioapicbus,
+ ipmibus, hypervisorbus
attach mainbus at root
-file arch/amd64/amd64/amd64_mainbus.c mainbus
+file arch/amd64/amd64/amd64_mainbus.c mainbus & !xenpv
file arch/x86/x86/mainbus.c mainbus
#
@@ -186,7 +185,7 @@
include "dev/ieee1394/files.ieee1394"
include "dev/apm/files.apm"
include "dev/acpi/files.acpi"
-file arch/amd64/acpi/acpi_wakeup_low.S acpi
+file arch/amd64/acpi/acpi_wakeup_low.S acpi & !xenpv
# Microsoft Hyper-V
include "dev/hyperv/files.hyperv"
@@ -195,4 +194,3 @@
file dev/acpi/vmbus_acpi.c vmbus_acpi
include "arch/amd64/conf/majors.amd64"
-endif #xen
--- src/sys/arch/amd64/conf/std.amd64 2017/01/12 05:24:36 1.11
+++ src/sys/arch/amd64/conf/std.amd64 2020/04/16 08:46:34 1.11.26.1
@@ -1,8 +1,8 @@
-# $NetBSD: std.amd64,v 1.11 2017/01/12 05:24:36 ryo Exp $
+# $NetBSD: std.amd64,v 1.11.26.1 2020/04/16 08:46:34 bouyer Exp $
#
# standard, required NetBSD/amd64 'options'
-machine amd64 x86
+machine amd64 x86 xen
include "conf/std" # MI standard options
options CPU_IN_CKSUM
@@ -13,6 +13,8 @@
options CHILD_MAX=1024 # 160 is too few
options OPEN_MAX=1024 # 128 is too few
+
+options __XEN_INTERFACE_VERSION__=0x00030208 # Xen 3.1 interface
mainbus0 at root
cpu* at mainbus?
--- src/sys/arch/amd64/conf/std.xen 2019/02/04 18:14:53 1.11
+++ src/sys/arch/amd64/conf/std.xen 2020/04/16 08:46:34 1.11.10.1
@@ -1,10 +1,11 @@
-# $NetBSD: std.xen,v 1.11 2019/02/04 18:14:53 cherry Exp $
+# $NetBSD: std.xen,v 1.11.10.1 2020/04/16 08:46:34 bouyer Exp $
# NetBSD: std.i386,v 1.24 2003/02/26 21:33:36 fvdl Exp
#
# standard, required NetBSD/i386 'options'
-machine xen amd64
+machine xen amd64 x86
include "conf/std" # MI standard options
+include "arch/xen/conf/files.xen.pv"
options XEN #Xen support
options __XEN_INTERFACE_VERSION__=0x00030208 # Xen 3.1 interface
/* $NetBSD: hypercalls.h,v 1.1.2.1 2020/04/16 08:46:34 bouyer Exp $ */
/******************************************************************************
* hypercall.h
*
* Linux-specific hypervisor handling.
*
* Copyright (c) 2002-2004, K A Fraser
*
* 64-bit updates:
* Benjamin Liu <benjamin.liu@intel.com>
* Jun Nakajima <jun.nakajima@intel.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation; or, when distributed
* separately from the Linux kernel or incorporated into other
* software packages, subject to the following license:
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this source file (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy, modify,
* merge, publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
#ifndef __HYPERCALL_H__
#define __HYPERCALL_H__
#define __STR(x) #x
#define STR(x) __STR(x)
#define HYPERCALL_STR(name) \
"call hypercall_page + ("STR(__HYPERVISOR_##name)" * 32)"
#define _hypercall0(type, name) \
({ \
long __res; \
asm volatile ( \
HYPERCALL_STR(name) \
: "=a" (__res) \
: \
: "memory" ); \
(type)__res; \
})
#define _hypercall1(type, name, a1) \
({ \
long __res, __ign1; \
asm volatile ( \
HYPERCALL_STR(name) \
: "=a" (__res), "=D" (__ign1) \
: "1" ((long)(a1)) \
: "memory" ); \
(type)__res; \
})
#define _hypercall2(type, name, a1, a2) \
({ \
long __res, __ign1, __ign2; \
asm volatile ( \
HYPERCALL_STR(name) \
: "=a" (__res), "=D" (__ign1), "=S" (__ign2) \
: "1" ((long)(a1)), "2" ((long)(a2)) \
: "memory" ); \
(type)__res; \
})
#define _hypercall3(type, name, a1, a2, a3) \
({ \
long __res, __ign1, __ign2, __ign3; \
asm volatile ( \
HYPERCALL_STR(name) \
: "=a" (__res), "=D" (__ign1), "=S" (__ign2), \
"=d" (__ign3) \
: "1" ((long)(a1)), "2" ((long)(a2)), \
"3" ((long)(a3)) \
: "memory" ); \
(type)__res; \
})
#define _hypercall4(type, name, a1, a2, a3, a4) \
({ \
long __res, __ign1, __ign2, __ign3; \
asm volatile ( \
"movq %7,%%r10; " \
HYPERCALL_STR(name) \
: "=a" (__res), "=D" (__ign1), "=S" (__ign2), \
"=d" (__ign3) \
: "1" ((long)(a1)), "2" ((long)(a2)), \
"3" ((long)(a3)), "g" ((long)(a4)) \
: "memory", "r10" ); \
(type)__res; \
})
#define _hypercall5(type, name, a1, a2, a3, a4, a5) \
({ \
long __res, __ign1, __ign2, __ign3; \
asm volatile ( \
"movq %7,%%r10; movq %8,%%r8; " \
HYPERCALL_STR(name) \
: "=a" (__res), "=D" (__ign1), "=S" (__ign2), \
"=d" (__ign3) \
: "1" ((long)(a1)), "2" ((long)(a2)), \
"3" ((long)(a3)), "g" ((long)(a4)), \
"g" ((long)(a5)) \
: "memory", "r10", "r8" ); \
(type)__res; \
})
static inline int
HYPERVISOR_set_trap_table(
trap_info_t *table)
{
return _hypercall1(int, set_trap_table, table);
}
static inline int
HYPERVISOR_mmu_update(
mmu_update_t *req, int count, int *success_count, domid_t domid)
{
return _hypercall4(int, mmu_update, req, count, success_count, domid);
}
static inline int
HYPERVISOR_mmuext_op(
struct mmuext_op *op, int count, int *success_count, domid_t domid)
{
return _hypercall4(int, mmuext_op, op, count, success_count, domid);
}
static inline int
HYPERVISOR_set_gdt(
unsigned long *frame_list, int entries)
{
return _hypercall2(int, set_gdt, frame_list, entries);
}
static inline int
HYPERVISOR_stack_switch(
unsigned long ss, unsigned long esp)
{
return _hypercall2(int, stack_switch, ss, esp);
}
static inline int
HYPERVISOR_set_callbacks(
unsigned long event_address, unsigned long failsafe_address,
unsigned long syscall_address)
{
return _hypercall3(int, set_callbacks,
event_address, failsafe_address, syscall_address);
}
static inline int
HYPERVISOR_fpu_taskswitch(
int set)
{
return _hypercall1(int, fpu_taskswitch, set);
}
static inline int
HYPERVISOR_sched_op_compat(
int cmd, unsigned long arg)
{
return _hypercall2(int, sched_op_compat, cmd, arg);
}
static inline int
HYPERVISOR_sched_op(
int cmd, void *arg)
{
return _hypercall2(int, sched_op, cmd, arg);
}
static inline long
HYPERVISOR_set_timer_op(
u64 timeout)
{
return _hypercall1(long, set_timer_op, timeout);
}
static inline int
HYPERVISOR_platform_op(
struct xen_platform_op *platform_op)
{
platform_op->interface_version = XENPF_INTERFACE_VERSION;
return _hypercall1(int, platform_op, platform_op);
}
static inline int
HYPERVISOR_set_debugreg(
int reg, unsigned long value)
{
return _hypercall2(int, set_debugreg, reg, value);
}
static inline unsigned long
HYPERVISOR_get_debugreg(
int reg)
{
return _hypercall1(unsigned long, get_debugreg, reg);
}
static inline int
HYPERVISOR_update_descriptor(
unsigned long ma, unsigned long word)
{
return _hypercall2(int, update_descriptor, ma, word);
}
static inline int
HYPERVISOR_memory_op(
unsigned int cmd, void *arg)
{
return _hypercall2(int, memory_op, cmd, arg);
}
static inline int
HYPERVISOR_multicall(
multicall_entry_t *call_list, int nr_calls)
{
return _hypercall2(int, multicall, call_list, nr_calls);
}
static inline int
HYPERVISOR_update_va_mapping(
unsigned long va, unsigned long new_val, unsigned long flags)
{
return _hypercall3(int, update_va_mapping, va, new_val, flags);
}
static inline int
HYPERVISOR_event_channel_op(evtchn_op_t *op)
{
KASSERT(op != NULL);
#if __XEN_INTERFACE_VERSION__ < 0x00030202
return _hypercall1(int, event_channel_op, op);
#else
return _hypercall2(int, event_channel_op, op->cmd, &op->u);
#endif
}
static inline int
HYPERVISOR_acm_op(
int cmd, void *arg)
{
return _hypercall2(int, acm_op, cmd, arg);
}
static inline int
HYPERVISOR_xen_version(
int cmd, void *arg)
{
return _hypercall2(int, xen_version, cmd, arg);
}
static inline int
HYPERVISOR_console_io(
int cmd, int count, char *str)
{
return _hypercall3(int, console_io, cmd, count, str);
}
static inline int
HYPERVISOR_physdev_op(void *op)
{
return _hypercall1(int, physdev_op_compat, op);
}
static inline int
HYPERVISOR_grant_table_op(
unsigned int cmd, void *uop, unsigned int count)
{
return _hypercall3(int, grant_table_op, cmd, uop, count);
}
static inline int
HYPERVISOR_update_va_mapping_otherdomain(
unsigned long va, unsigned long new_val, unsigned long flags,
domid_t domid)
{
return _hypercall4(int, update_va_mapping_otherdomain, va,
new_val, flags, domid);
}
static inline int
HYPERVISOR_vm_assist(
unsigned int cmd, unsigned int type)
{
return _hypercall2(int, vm_assist, cmd, type);
}
static inline int
HYPERVISOR_vcpu_op(
int cmd, int vcpuid, void *extra_args)
{
return _hypercall3(int, vcpu_op, cmd, vcpuid, extra_args);
}
static inline int
HYPERVISOR_set_segment_base(
int reg, unsigned long value)
{
return _hypercall2(int, set_segment_base, reg, value);
}
static inline int
HYPERVISOR_suspend(
unsigned long srec)
{
#if __XEN_INTERFACE_VERSION__ >= 0x00030201
struct sched_shutdown shutdown_reason = {
.reason = SHUTDOWN_suspend,
};
return _hypercall3(int, sched_op, SCHEDOP_shutdown,
&shutdown_reason, srec);
#else
return _hypercall3(int, sched_op, SCHEDOP_shutdown,
SHUTDOWN_suspend, srec);
#endif
}
static inline long
HYPERVISOR_yield(
void)
{
return _hypercall2(int, sched_op, SCHEDOP_yield, 0);
}
static inline long
HYPERVISOR_block(
void)
{
return _hypercall2(int, sched_op, SCHEDOP_block, 0);
}
static inline long
HYPERVISOR_shutdown(
void)
{
#if __XEN_INTERFACE_VERSION__ >= 0x00030201
struct sched_shutdown shutdown_reason = {
.reason = SHUTDOWN_poweroff,
};
return _hypercall2(int, sched_op, SCHEDOP_shutdown,
&shutdown_reason);
#else
- return _hypercall2(int, sched_op, SCHEDOP_shutdown, SHUTDOWN_poweroff);
#endif
}
static inline long
HYPERVISOR_crash(
void)
{
#if __XEN_INTERFACE_VERSION__ >= 0x00030201
struct sched_shutdown shutdown_reason = {
.reason = SHUTDOWN_crash,
};
return _hypercall2(int, sched_op, SCHEDOP_shutdown,
&shutdown_reason);
#else
return _hypercall2(int, sched_op, SCHEDOP_shutdown, SHUTDOWN_crash);
#endif
}
static inline long
HYPERVISOR_reboot(
void)
{
#if __XEN_INTERFACE_VERSION__ >= 0x00030201
struct sched_shutdown shutdown_reason = {
.reason = SHUTDOWN_reboot,
};
return _hypercall2(int, sched_op, SCHEDOP_shutdown,
&shutdown_reason);
#else
return _hypercall2(int, sched_op, SCHEDOP_shutdown, SHUTDOWN_reboot);
#endif
}
static inline int
HYPERVISOR_nmi_op(
unsigned long op, void *arg)
{
return _hypercall2(int, nmi_op, op, arg);
}
static inline long
HYPERVISOR_hvm_op(
int op, void *arg)
{
return _hypercall2(long, hvm_op, op, arg);
}
static inline int
HYPERVISOR_callback_op(
int cmd, void *arg)
{
return _hypercall2(int, callback_op, cmd, arg);
}
static inline int
HYPERVISOR_xenoprof_op(
int op, void *arg)
{
return _hypercall2(int, xenoprof_op, op, arg);
}
static inline int
HYPERVISOR_kexec_op(
unsigned long op, void *args)
{
return _hypercall2(int, kexec_op, op, args);
}
#if __XEN_INTERFACE_VERSION__ < 0x00030204
static inline int
HYPERVISOR_dom0_op(
dom0_op_t *dom0_op)
{
dom0_op->interface_version = DOM0_INTERFACE_VERSION;
return _hypercall1(int, dom0_op, dom0_op);
}
#endif /* __XEN_INTERFACE_VERSION__ */
#include <xen/include/public/arch-x86/xen-mca.h>
static inline int
HYPERVISOR_machine_check(struct xen_mc *mc)
{
mc->interface_version = XEN_MCA_INTERFACE_VERSION;
return _hypercall1(int, mca, mc);
}
static inline int
HYPERVISOR_sysctl(void *sysctl)
{
return _hypercall1(int, sysctl, sysctl);
}
#endif /* __HYPERCALL_H__ */
# $NetBSD: GENERIC_XENHVM,v 1.1.2.1 2020/04/16 08:46:34 bouyer Exp $
include "arch/i386/conf/GENERIC"
options XENPVHVM
options XEN
options MAXPHYS=32768 #xbd doesn't handle 64k transfers
hypervisor* at mainbus? # Xen hypervisor
#vcpu* at hypervisor? # Xen virtual CPUs
xenbus* at hypervisor? # Xen virtual bus
xencons* at hypervisor? # Xen virtual console
xennet* at xenbus? # Xen virtual network interface
xbd* at xenbus? # Xen virtual block device
--- src/sys/arch/i386/conf/Makefile.i386 2018/09/22 12:24:02 1.194
+++ src/sys/arch/i386/conf/Makefile.i386 2020/04/16 08:46:34 1.194.10.1
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile.i386,v 1.194 2018/09/22 12:24:02 rin Exp $
+# $NetBSD: Makefile.i386,v 1.194.10.1 2020/04/16 08:46:34 bouyer Exp $
# Makefile for NetBSD
#
@@ -44,6 +44,7 @@
CFLAGS+= -mindirect-branch=thunk
CFLAGS+= -mindirect-branch-register
.endif
+EXTRA_INCLUDES= -I$S/external/mit/xen-include-public/dist/
##
## (3) libkern and compat
--- src/sys/arch/i386/conf/XEN3PAE_DOM0 2020/04/08 17:56:08 1.21.2.1
+++ src/sys/arch/i386/conf/XEN3PAE_DOM0 2020/04/16 08:46:34 1.21.2.2
@@ -1,4 +1,4 @@
-# $NetBSD: XEN3PAE_DOM0,v 1.21.2.1 2020/04/08 17:56:08 bouyer Exp $
+# $NetBSD: XEN3PAE_DOM0,v 1.21.2.2 2020/04/16 08:46:34 bouyer Exp $
#
# XEN3_0: Xen 3.0 domain0 kernel
@@ -6,6 +6,7 @@
options XENPV # PV dom0 support
#options MULTIPROCESSOR # (not yet - dom0 stuff is not MP-safe)
+options NO_PREEMPTION
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
@@ -212,6 +213,7 @@
# PCI bus support
pci* at hypervisor? bus ?
pci* at pchb? bus ?
+options NO_PCI_MSI_MSIX
# PCI bridges
ichlpcib* at pci? dev ? function ? # Intel ICH PCI-ISA w/ timecounter,
--- src/sys/arch/i386/conf/files.i386 2019/10/18 01:38:28 1.401
+++ src/sys/arch/i386/conf/files.i386 2020/04/16 08:46:34 1.401.6.1
@@ -1,10 +1,8 @@
-# $NetBSD: files.i386,v 1.401 2019/10/18 01:38:28 manu Exp $
+# $NetBSD: files.i386,v 1.401.6.1 2020/04/16 08:46:34 bouyer Exp $
#
# new style config file for i386 architecture
#
-ifndef xen
-
# maxpartitions must be first item in files.${ARCH}.newconf
maxpartitions 8
@@ -53,7 +51,7 @@
file arch/i386/i386/multiboot.c multiboot
file arch/x86/x86/multiboot2.c multiboot
-file arch/i386/i386/autoconf.c
+file arch/i386/i386/autoconf.c !xenpv
file arch/i386/i386/aout_machdep.c exec_aout
file arch/i386/i386/busfunc.S
file arch/i386/i386/cpufunc.S
@@ -65,7 +63,7 @@
file kern/subr_disk_mbr.c disk
file kern/subr_spldebug.c spldebug
file arch/i386/i386/gdt.c
-file arch/i386/i386/i386func.S
+file arch/i386/i386/i386func.S !xenpv
file arch/i386/i386/kobj_machdep.c modular
file arch/i386/i386/machdep.c
file arch/i386/i386/longrun.c
@@ -77,7 +75,7 @@
file arch/x86/x86/dbregs.c
file arch/x86/x86/spectre.c
-file arch/i386/i386/mptramp.S multiprocessor
+file arch/i386/i386/mptramp.S multiprocessor & ! xenpv
file crypto/des/arch/i386/des_enc.S des
file crypto/des/arch/i386/des_cbc.S des
@@ -128,9 +126,9 @@
# XXX BIOS32 only if something that uses it is configured!
device mainbus: isabus, eisabus, mcabus, pcibus, bios32, acpibus,
cpubus, ioapicbus, apmbus, pnpbiosbus, ipmibus,
- bioscall
+ bioscall, hypervisorbus
attach mainbus at root
-file arch/i386/i386/i386_mainbus.c mainbus
+file arch/i386/i386/i386_mainbus.c mainbus & !xenpv
file arch/x86/x86/mainbus.c mainbus
#
@@ -404,7 +402,7 @@
include "arch/i386/pnpbios/files.pnpbios"
include "dev/acpi/files.acpi"
-file arch/i386/acpi/acpi_wakeup_low.S acpi
+file arch/i386/acpi/acpi_wakeup_low.S acpi & !xenpv
# Microsoft Hyper-V
include "dev/hyperv/files.hyperv"
@@ -423,4 +421,3 @@
file arch/i386/pci/glxsb.c glxsb
include "arch/i386/conf/majors.i386"
-endif #xen
--- src/sys/arch/i386/conf/std.i386 2017/01/12 05:24:36 1.35
+++ src/sys/arch/i386/conf/std.i386 2020/04/16 08:46:34 1.35.26.1
@@ -1,8 +1,8 @@
-# $NetBSD: std.i386,v 1.35 2017/01/12 05:24:36 ryo Exp $
+# $NetBSD: std.i386,v 1.35.26.1 2020/04/16 08:46:34 bouyer Exp $
#
# standard, required NetBSD/i386 'options'
-machine i386 x86
+machine i386 x86 xen
include "conf/std" # MI standard options
options CPU_IN_CKSUM
@@ -18,6 +18,7 @@
options CHILD_MAX=1024 # 160 is too few
options OPEN_MAX=1024 # 128 is too few
+options __XEN_INTERFACE_VERSION__=0x00030208 # Xen 3.1 interface
mainbus0 at root
cpu* at mainbus?
--- src/sys/arch/i386/i386/machdep.c 2020/04/09 16:12:50 1.825.4.1
+++ src/sys/arch/i386/i386/machdep.c 2020/04/16 08:46:34 1.825.4.2
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.825.4.1 2020/04/09 16:12:50 bouyer Exp $ */
+/* $NetBSD: machdep.c,v 1.825.4.2 2020/04/16 08:46:34 bouyer Exp $ */
/*
* Copyright (c) 1996, 1997, 1998, 2000, 2004, 2006, 2008, 2009, 2017
@@ -67,7 +67,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.825.4.1 2020/04/09 16:12:50 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.825.4.2 2020/04/16 08:46:34 bouyer Exp $");
#include "opt_beep.h"
#include "opt_compat_freebsd.h"
@@ -988,7 +988,7 @@
SDT_MEMERA, SEL_UPL, 1, 1);
setsegment(&gdtstore[GUDATA_SEL].sd, 0, 0xfffff,
SDT_MEMRWA, SEL_UPL, 1, 1);
-#if NBIOSCALL > 0
+#if NBIOSCALL > 0 && !defined(XENPV)
/* bios trampoline GDT entries */
setsegment(&gdtstore[GBIOSCODE_SEL].sd, 0, 0xfffff,
SDT_MEMERA, SEL_KPL, 0, 0);
@@ -1134,11 +1134,11 @@
extern paddr_t local_apic_pa;
union descriptor *tgdt;
struct region_descriptor region;
-#endif
#if NBIOSCALL > 0
extern int biostramp_image_size;
extern u_char biostramp_image[];
#endif
+#endif /* !XENPV */
struct pcb *pcb;
KASSERT(first_avail % PAGE_SIZE == 0);
--- src/sys/arch/i386/i386/vector.S 2020/04/12 17:25:52 1.85.6.4
+++ src/sys/arch/i386/i386/vector.S 2020/04/16 08:46:34 1.85.6.5
@@ -1,4 +1,4 @@
-/* $NetBSD: vector.S,v 1.85.6.4 2020/04/12 17:25:52 bouyer Exp $ */
+/* $NetBSD: vector.S,v 1.85.6.5 2020/04/16 08:46:34 bouyer Exp $ */
/*
* Copyright 2002 (c) Wasabi Systems, Inc.
@@ -65,7 +65,7 @@
*/
#include <machine/asm.h>
-__KERNEL_RCSID(0, "$NetBSD: vector.S,v 1.85.6.4 2020/04/12 17:25:52 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vector.S,v 1.85.6.5 2020/04/16 08:46:34 bouyer Exp $");
#include "opt_ddb.h"
#include "opt_multiprocessor.h"
@@ -85,7 +85,7 @@
#include "ioapic.h"
#include "lapic.h"
-#ifndef XEN
+#ifndef XENPV
#include "hyperv.h"
#endif
/* $NetBSD: hypercalls.h,v 1.1.2.1 2020/04/16 08:46:34 bouyer Exp $ */
/*
* Copyright (c) 2006 Manuel Bouyer.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/*
*
* Communication to/from hypervisor.
*
* Copyright (c) 2002-2004, K A Fraser
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this source file (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy, modify,
* merge, publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
#ifndef _XENI386_HYPERVISOR_H_
#define _XENI386_HYPERVISOR_H_
/*
* Assembler stubs for hyper-calls.
*/
#include <machine/pte.h> /* pt_entry_t */
/* hypercall via the hypercall call page */
#define __str(x) #x
#define _str(x) __str(x)
#define _hypercall(name, input_const, output_const) \
__asm volatile ( \
"call hypercall_page + ("_str(name)" * 32)" \
: output_const \
: input_const \
: "memory" )
#define _harg(...) __VA_ARGS__
static __inline int
HYPERVISOR_set_trap_table(trap_info_t *table)
{
int ret;
unsigned long ign1;
_hypercall(__HYPERVISOR_set_trap_table, _harg("1" (table)),
_harg("=a" (ret), "=b" (ign1)));
return ret;
}
static __inline int
HYPERVISOR_set_gdt(unsigned long *frame_list, int entries)
{
int ret;
unsigned long ign1, ign2;
_hypercall(__HYPERVISOR_set_gdt, _harg("1" (frame_list), "2" (entries)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2)));
return ret;
}
static __inline int
HYPERVISOR_stack_switch(unsigned long ss, unsigned long esp)
{
int ret;
unsigned long ign1, ign2;
_hypercall(__HYPERVISOR_stack_switch, _harg("1" (ss), "2" (esp)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2)));
return ret;
}
static __inline int
HYPERVISOR_set_callbacks(
unsigned long event_selector, unsigned long event_address,
unsigned long failsafe_selector, unsigned long failsafe_address)
{
int ret;
unsigned long ign1, ign2, ign3, ign4;
_hypercall(__HYPERVISOR_set_callbacks,
_harg("1" (event_selector),"2" (event_address),
"3" (failsafe_selector), "4" (failsafe_address)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4)));
return ret;
}
#if __XEN_INTERFACE_VERSION__ < 0x00030204
static __inline int
HYPERVISOR_dom0_op(dom0_op_t *dom0_op)
{
int ret;
unsigned long ign1;
dom0_op->interface_version = DOM0_INTERFACE_VERSION;
_hypercall(__HYPERVISOR_dom0_op, _harg("1" (dom0_op)),
_harg("=a" (ret), "=b" (ign1)));
return ret;
}
#endif /* __XEN_INTERFACE_VERSION__ */
static __inline int
HYPERVISOR_set_debugreg(int reg, unsigned long value)
{
int ret;
unsigned long ign1, ign2;
_hypercall(__HYPERVISOR_set_debugreg, _harg("1" (reg), "2" (value)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2)));
return ret;
}
static __inline unsigned long
HYPERVISOR_get_debugreg(int reg)
{
unsigned long ret;
unsigned long ign1;
_hypercall(__HYPERVISOR_get_debugreg, _harg("1" (reg)),
_harg("=a" (ret), "=b" (ign1)));
return ret;
}
#include <xen/include/public/arch-x86/xen-mca.h>
static __inline int
HYPERVISOR_machine_check(struct xen_mc *mc)
{
int ret;
unsigned long ign1;
mc->interface_version = XEN_MCA_INTERFACE_VERSION;
_hypercall(__HYPERVISOR_mca, _harg("1" (mc)),
_harg("=a" (ret), "=b" (ign1)));
return ret;
}
static __inline int
HYPERVISOR_hvm_op(int cmd, void *arg)
{
int ret;
unsigned long ign1, ign2;
_hypercall(__HYPERVISOR_hvm_op, _harg("1" (cmd), "2" (arg)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2)));
return ret;
}
static __inline int
HYPERVISOR_mmu_update(mmu_update_t *req, int count, int *success_count,
domid_t domid)
{
int ret;
unsigned long ign1, ign2, ign3, ign4;
_hypercall(__HYPERVISOR_mmu_update,
_harg("1" (req), "2" (count), "3" (success_count), "4" (domid)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4)));
return ret;
}
static __inline int
HYPERVISOR_mmuext_op(struct mmuext_op *op, int count, int *success_count,
domid_t domid)
{
int ret;
unsigned long ign1, ign2, ign3, ign4;
_hypercall(__HYPERVISOR_mmuext_op,
_harg("1" (op), "2" (count), "3" (success_count), "4" (domid)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4)));
return ret;
}
static __inline int
HYPERVISOR_fpu_taskswitch(int set)
{
long ret;
long ign1;
_hypercall(__HYPERVISOR_fpu_taskswitch, _harg("1" (set)),
_harg("=a" (ret), "=b" (ign1)));
return ret;
}
static __inline int
HYPERVISOR_update_descriptor(uint64_t ma, uint32_t word1, uint32_t word2)
{
int ret;
unsigned long ign1, ign2, ign3, ign4;
int ma1 = ma & 0xffffffff;
int ma2 = (ma >> 32) & 0xffffffff;
_hypercall(__HYPERVISOR_update_descriptor,
_harg("1" (ma1), "2" (ma2), "3" (word1), "4" (word2)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4)));
return ret;
}
static __inline int
HYPERVISOR_memory_op(unsigned int cmd, void *arg)
{
int ret;
unsigned long ign1, ign2;
_hypercall(__HYPERVISOR_memory_op, _harg("1" (cmd), "2" (arg)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2)));
return ret;
}
#ifdef XENPV
static __inline int
HYPERVISOR_update_va_mapping(unsigned long page_nr, pt_entry_t new_val,
unsigned long flags)
{
int ret;
unsigned long ign1, ign2, ign3, ign4;
unsigned long pte_low, pte_hi;
pte_low = new_val & 0xffffffff;
pte_hi = new_val >> 32;
_hypercall(__HYPERVISOR_update_va_mapping,
_harg("1" (page_nr), "2" (pte_low), "3" (pte_hi), "4" (flags)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4)));
#ifdef notdef
if (__predict_false(ret < 0))
panic("Failed update VA mapping: %08lx, %08lx, %08lx",
page_nr, new_val, flags);
#endif
return ret;
}
static __inline int
HYPERVISOR_update_va_mapping_otherdomain(unsigned long page_nr,
pt_entry_t new_val, unsigned long flags, domid_t domid)
{
int ret;
unsigned long ign1, ign2, ign3, ign4, ign5;
unsigned long pte_low, pte_hi;
pte_low = new_val & 0xffffffff;
pte_hi = new_val >> 32;
_hypercall(__HYPERVISOR_update_va_mapping_otherdomain,
_harg("1" (page_nr), "2" (pte_low), "3" (pte_hi), "4" (flags), "5" (domid)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4),
"=D" (ign5)));
return ret;
}
#endif /* XENPV */
static __inline int
HYPERVISOR_xen_version(int cmd, void *arg)
{
int ret;
unsigned long ign1, ign2;
_hypercall(__HYPERVISOR_xen_version, _harg("1" (cmd), "2" (arg)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2)));
return ret;
}
static __inline int
HYPERVISOR_grant_table_op(unsigned int cmd, void *uop, unsigned int count)
{
int ret;
unsigned long ign1, ign2, ign3;
_hypercall(__HYPERVISOR_grant_table_op,
_harg("1" (cmd), "2" (uop), "3" (count)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3)));
return ret;
}
static __inline int
HYPERVISOR_vcpu_op(int cmd, int vcpuid, void *extra_args)
{
long ret;
unsigned long ign1, ign2, ign3;
_hypercall(__HYPERVISOR_vcpu_op,
_harg("1" (cmd), "2" (vcpuid), "3" (extra_args)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3)));
return ret;
}
static __inline long
HYPERVISOR_yield(void)
{
long ret;
unsigned long ign1, ign2;
_hypercall(__HYPERVISOR_sched_op, _harg("1" (SCHEDOP_yield), "2" (0)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2)));
return ret;
}
static __inline long
HYPERVISOR_block(void)
{
long ret;
unsigned long ign1, ign2;
_hypercall(__HYPERVISOR_sched_op, _harg("1" (SCHEDOP_block), "2" (0)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2)));
return ret;
}
static __inline long
HYPERVISOR_shutdown(void)
{
long ret;
unsigned long ign1, ign2;
#if __XEN_INTERFACE_VERSION__ >= 0x00030201
struct sched_shutdown shutdown_reason = {
.reason = SHUTDOWN_poweroff
};
_hypercall(__HYPERVISOR_sched_op,
_harg("1" (SCHEDOP_shutdown), "2" (&shutdown_reason)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2)));
#else
_hypercall(__HYPERVISOR_sched_op,
_harg("1" (SCHEDOP_shutdown), "2" (SHUTDOWN_poweroff)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2)));
#endif
return ret;
}
static __inline long
HYPERVISOR_crash(void)
{
long ret;
unsigned long ign1, ign2;
#if __XEN_INTERFACE_VERSION__ >= 0x00030201
struct sched_shutdown shutdown_reason = {
.reason = SHUTDOWN_crash
};
_hypercall(__HYPERVISOR_sched_op,
_harg("1" (SCHEDOP_shutdown), "2" (&shutdown_reason)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2)));
#else
_hypercall(__HYPERVISOR_sched_op,
_harg("1" (SCHEDOP_shutdown), "2" (SHUTDOWN_crash)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2)));
#endif
return ret;
}
static __inline long
HYPERVISOR_reboot(void)
{
long ret;
unsigned long ign1, ign2;
#if __XEN_INTERFACE_VERSION__ >= 0x00030201
struct sched_shutdown shutdown_reason = {
.reason = SHUTDOWN_reboot
};
_hypercall(__HYPERVISOR_sched_op,
_harg("1" (SCHEDOP_shutdown), "2" (&shutdown_reason)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2)));
#else
_hypercall(__HYPERVISOR_sched_op,
_harg("1" (SCHEDOP_shutdown), "2" (SHUTDOWN_reboot)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2)));
#endif
return ret;
}
static __inline long
HYPERVISOR_suspend(unsigned long srec)
{
long ret;
unsigned long ign1, ign2, ign3;
#if __XEN_INTERFACE_VERSION__ >= 0x00030201
struct sched_shutdown shutdown_reason = {
.reason = SHUTDOWN_suspend
};
_hypercall(__HYPERVISOR_sched_op,
_harg("1" (SCHEDOP_shutdown), "2" (&shutdown_reason), "3" (srec)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3)));
#else
_hypercall(__HYPERVISOR_sched_op,
_harg("1" (SCHEDOP_shutdown), "2" (SHUTDOWN_suspend), "3" (srec)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3)));
#endif
return ret;
}
static __inline long
HYPERVISOR_set_timer_op(uint64_t timeout)
{
long ret;
unsigned long timeout_hi = (unsigned long)(timeout>>32);
unsigned long timeout_lo = (unsigned long)timeout;
unsigned long ign1, ign2;
_hypercall(__HYPERVISOR_set_timer_op,
_harg("1" (timeout_lo), "2" (timeout_hi)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2)));
return ret;
}
static __inline int
HYPERVISOR_platform_op(struct xen_platform_op *platform_op)
{
int ret;
unsigned long ign1;
platform_op->interface_version = XENPF_INTERFACE_VERSION;
_hypercall(__HYPERVISOR_platform_op, _harg("1" (platform_op)),
_harg("=a" (ret), "=b" (ign1)));
return ret;
}
static __inline int
HYPERVISOR_multicall(void *call_list, int nr_calls)
{
int ret;
unsigned long ign1, ign2;
_hypercall(__HYPERVISOR_multicall,
_harg("1" (call_list), "2" (nr_calls)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2)));
return ret;
}
static __inline int
HYPERVISOR_event_channel_op(evtchn_op_t *op)
{
int ret;
unsigned long ign1;
#if __XEN_INTERFACE_VERSION__ < 0x00030202
_hypercall(__HYPERVISOR_event_channel_op, _harg("1" (op)),
_harg("=a" (ret), "=b" (ign1)));
#else
unsigned long ign2;
_hypercall(__HYPERVISOR_event_channel_op, _harg("1" (op->cmd), "2" (&op->u)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2)));
#endif
return ret;
}
static __inline int
HYPERVISOR_console_io(int cmd, int count, char *str)
{
int ret;
unsigned long ign1, ign2, ign3;
_hypercall(__HYPERVISOR_console_io,
_harg("1" (cmd), "2" (count), "3" (str)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3)));
return ret;
}
static __inline int
HYPERVISOR_physdev_op(void *physdev_op)
{
int ret;
unsigned long ign1;
_hypercall(__HYPERVISOR_physdev_op, _harg("1" (physdev_op)),
_harg("=a" (ret), "=b" (ign1)));
return ret;
}
static __inline int
HYPERVISOR_vm_assist(unsigned int cmd, unsigned int type)
{
int ret;
unsigned long ign1, ign2;
_hypercall(__HYPERVISOR_vm_assist, _harg("1" (cmd), "2" (type)),
_harg("=a" (ret), "=b" (ign1), "=c" (ign2)));
return ret;
}
static __inline int
HYPERVISOR_sysctl(void *sysctl)
{
int ret;
unsigned long ign1;
_hypercall(__HYPERVISOR_sysctl, _harg("1" (sysctl)),
_harg("=a" (ret), "=b" (ign1)));
return ret;
}
#endif /* _XENI386_HYPERVISOR_H_ */
--- src/sys/arch/x86/conf/files.x86 2020/04/11 18:26:07 1.107.10.1
+++ src/sys/arch/x86/conf/files.x86 2020/04/16 08:46:34 1.107.10.2
@@ -1,4 +1,4 @@
-# $NetBSD: files.x86,v 1.107.10.1 2020/04/11 18:26:07 bouyer Exp $
+# $NetBSD: files.x86,v 1.107.10.2 2020/04/16 08:46:34 bouyer Exp $
# options for MP configuration through the MP spec
defflag opt_mpbios.h MPBIOS MPDEBUG MPBIOS_SCANPCI
@@ -35,8 +35,8 @@
#
device cpu: cpufeaturebus
attach cpu at cpubus
-file arch/x86/x86/cpu.c cpu
-file arch/x86/x86/cpu_rng.c cpu
+file arch/x86/x86/cpu.c cpu & !xenpv
+file arch/x86/x86/cpu_rng.c cpu | vcpu
device acpicpu: acpi
attach acpicpu at cpufeaturebus
@@ -82,7 +82,7 @@
file arch/x86/x86/apic.c ioapic | lapic
file arch/x86/x86/bus_dma.c machdep
file arch/x86/x86/bus_space.c machdep
-file arch/x86/x86/consinit.c machdep
+file arch/x86/x86/consinit.c machdep & !xenpv
file arch/x86/x86/core_machdep.c coredump
file arch/x86/x86/cpu_topology.c machdep
file arch/x86/x86/db_memrw.c ddb | kgdb
@@ -91,15 +91,15 @@
file arch/x86/x86/errata.c machdep
file arch/x86/x86/genfb_machdep.c machdep
file arch/x86/x86/identcpu.c machdep
-file arch/x86/x86/i8259.c machdep
-file arch/x86/x86/intr.c machdep
+file arch/x86/x86/i8259.c machdep & (!xenpv | dom0ops)
+file arch/x86/x86/intr.c machdep & !xenpv
file arch/x86/x86/x86_softintr.c machdep
file arch/x86/x86/kgdb_machdep.c kgdb
file arch/x86/x86/nmi.c machdep
file arch/x86/x86/idt.c machdep
-file arch/x86/x86/ipi.c machdep
-file arch/x86/x86/mtrr_i686.c mtrr
-file arch/x86/x86/patch.c machdep
+file arch/x86/x86/ipi.c machdep & ( !xenpv | dom0ops )
+file arch/x86/x86/mtrr_i686.c mtrr & !xenpv
+file arch/x86/x86/patch.c machdep & !xenpv
file arch/x86/x86/platform.c machdep
file arch/x86/x86/pmap.c machdep
file arch/x86/x86/x86_tlb.c machdep
@@ -109,7 +109,7 @@
file arch/x86/x86/syscall.c machdep
file arch/x86/x86/tsc.c machdep
file arch/x86/x86/vm_machdep.c machdep
-file arch/x86/x86/x86_autoconf.c machdep
+file arch/x86/x86/x86_autoconf.c machdep & !xenpv
file arch/x86/x86/x86_userconf.c userconf
file arch/x86/x86/x86_machdep.c machdep
@@ -137,14 +137,14 @@
file arch/x86/x86/mpacpi.c acpi
file arch/x86/acpi/acpi_pdc.c acpi
-file arch/x86/acpi/acpi_wakeup.c acpi
+file arch/x86/acpi/acpi_wakeup.c acpi & !xenpv
file arch/x86/acpi/acpi_machdep.c acpi
-file arch/x86/isa/isa_machdep.c
+file arch/x86/isa/isa_machdep.c isa
# PC clock
-file arch/x86/isa/clock.c
-file arch/x86/isa/rtc.c
+file arch/x86/isa/clock.c !xenpv
+file arch/x86/isa/rtc.c isa
# Stubs for x86 routines not included in the system
file arch/x86/x86/x86_stub.c
--- src/sys/arch/x86/include/intr.h 2020/04/11 18:26:07 1.61.6.2
+++ src/sys/arch/x86/include/intr.h 2020/04/16 08:46:35 1.61.6.3
@@ -1,4 +1,4 @@
-/* $NetBSD: intr.h,v 1.61.6.2 2020/04/11 18:26:07 bouyer Exp $ */
+/* $NetBSD: intr.h,v 1.61.6.3 2020/04/16 08:46:35 bouyer Exp $ */
/*-
* Copyright (c) 1998, 2001, 2006, 2007, 2008, 2019 The NetBSD Foundation, Inc.
@@ -46,6 +46,11 @@
#include <sys/evcnt.h>
#include <sys/queue.h>
#include <machine/intrdefs.h>
+
+#ifdef XEN
+#include <xen/include/public/xen.h>
+#include <xen/include/public/event_channel.h>
+#endif /* XEN */
#ifndef _LOCORE
#include <machine/pic.h>
--- src/sys/arch/x86/x86/cpu_ucode.c 2019/02/11 14:59:33 1.12
+++ src/sys/arch/x86/x86/cpu_ucode.c 2020/04/16 08:46:35 1.12.10.1
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu_ucode.c,v 1.12 2019/02/11 14:59:33 cherry Exp $ */
+/* $NetBSD: cpu_ucode.c,v 1.12.10.1 2020/04/16 08:46:35 bouyer Exp $ */
/*
* Copyright (c) 2012 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu_ucode.c,v 1.12 2019/02/11 14:59:33 cherry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu_ucode.c,v 1.12.10.1 2020/04/16 08:46:35 bouyer Exp $");
#if defined(_KERNEL_OPT)
#include "opt_cpu_ucode.h"
@@ -158,4 +158,4 @@
sc->sc_blobsize = 0;
return error;
}
-#endif
+#endif /* XEN */
--- src/sys/arch/x86/x86/cpu_ucode_amd.c 2019/10/15 00:13:52 1.10
+++ src/sys/arch/x86/x86/cpu_ucode_amd.c 2020/04/16 08:46:35 1.10.6.1
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu_ucode_amd.c,v 1.10 2019/10/15 00:13:52 chs Exp $ */
+/* $NetBSD: cpu_ucode_amd.c,v 1.10.6.1 2020/04/16 08:46:35 bouyer Exp $ */
/*
* Copyright (c) 2012 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu_ucode_amd.c,v 1.10 2019/10/15 00:13:52 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu_ucode_amd.c,v 1.10.6.1 2020/04/16 08:46:35 bouyer Exp $");
#ifdef _KERNEL_OPT
#include "opt_xen.h"
@@ -138,7 +138,7 @@
return firmware_open(fw_path, "microcode_amd.bin", fwh);
}
-#ifndef XEN
+#ifndef XENPV
struct mc_buf {
uint8_t *mc_buf;
uint32_t mc_equiv_cpuid;
--- src/sys/arch/x86/x86/cpu_ucode_intel.c 2019/05/10 18:21:01 1.17
+++ src/sys/arch/x86/x86/cpu_ucode_intel.c 2020/04/16 08:46:35 1.17.8.1
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu_ucode_intel.c,v 1.17 2019/05/10 18:21:01 maxv Exp $ */
+/* $NetBSD: cpu_ucode_intel.c,v 1.17.8.1 2020/04/16 08:46:35 bouyer Exp $ */
/*
* Copyright (c) 2012, 2019 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu_ucode_intel.c,v 1.17 2019/05/10 18:21:01 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu_ucode_intel.c,v 1.17.8.1 2020/04/16 08:46:35 bouyer Exp $");
#ifdef _KERNEL_OPT
#include "opt_xen.h"
@@ -106,7 +106,7 @@
return firmware_open(fw_path, cpuspec, fwh);
}
-#ifndef XEN
+#ifndef XENPV
static int
cpu_ucode_intel_verify(struct cpu_ucode_softc *sc,
struct intel1_ucode_header *buf)
--- src/sys/arch/x86/x86/lapic.c 2020/04/08 17:59:16 1.76.6.1
+++ src/sys/arch/x86/x86/lapic.c 2020/04/16 08:46:35 1.76.6.2
@@ -1,4 +1,4 @@
-/* $NetBSD: lapic.c,v 1.76.6.1 2020/04/08 17:59:16 bouyer Exp $ */
+/* $NetBSD: lapic.c,v 1.76.6.2 2020/04/16 08:46:35 bouyer Exp $ */
/*-
* Copyright (c) 2000, 2008 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lapic.c,v 1.76.6.1 2020/04/08 17:59:16 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lapic.c,v 1.76.6.2 2020/04/16 08:46:35 bouyer Exp $");
#include "acpica.h"
#include "ioapic.h"
@@ -41,7 +41,9 @@
#include "opt_mpbios.h" /* for MPDEBUG */
#include "opt_multiprocessor.h"
#include "opt_ntp.h"
+#include "opt_xen.h"
+
#include <sys/param.h>
#include <sys/proc.h>
#include <sys/systm.h>
@@ -70,6 +72,7 @@
#include <machine/i82489reg.h>
#include <machine/i82489var.h>
+#ifndef XENPV
#if NACPICA > 0
#include <dev/acpi/acpica.h>
#include <dev/acpi/acpivar.h>
@@ -963,3 +966,9 @@
#undef APIC_LVT_PRIINT
}
+#else /* XENPV */
+void
+lapic_boot_init(paddr_t lapic_base)
+{
+}
+#endif /* XENPV */
--- src/sys/arch/x86/x86/mainbus.c 2020/04/11 21:21:49 1.3.12.1
+++ src/sys/arch/x86/x86/mainbus.c 2020/04/16 08:46:35 1.3.12.2
@@ -1,4 +1,4 @@
-/* $NetBSD: mainbus.c,v 1.3.12.1 2020/04/11 21:21:49 bouyer Exp $ */
+/* $NetBSD: mainbus.c,v 1.3.12.2 2020/04/16 08:46:35 bouyer Exp $ */
/*
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -28,7 +28,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.3.12.1 2020/04/11 21:21:49 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.3.12.2 2020/04/16 08:46:35 bouyer Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -40,6 +40,7 @@
#include <machine/cpuvar.h>
#include <machine/mpbiosvar.h>
#include <machine/mpacpi.h>
+#include <xen/hypervisor.h>
#include "pci.h"
#include "isa.h"
@@ -94,10 +95,6 @@
#if defined(__x86_64__) && !defined(XENPV)
void amd64_mainbus_attach(device_t, device_t, void *);
-#endif
-
-#if defined(XEN)
-void xen_mainbus_attach(device_t, device_t, void *);
#endif
static int
--- src/sys/arch/xen/conf/Makefile.xen 2019/02/02 12:32:54 1.48
+++ src/sys/arch/xen/conf/Makefile.xen 2020/04/16 08:46:35 1.48.10.1
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile.xen,v 1.48 2019/02/02 12:32:54 cherry Exp $
+# $NetBSD: Makefile.xen,v 1.48.10.1 2020/04/16 08:46:35 bouyer Exp $
# NetBSD: Makefile.i386,v 1.132 2003/07/05 16:56:10 simonb Exp
# Makefile for NetBSD
@@ -67,21 +67,24 @@
##
## (4) local objects, compile rules, and dependencies
##
-MD_OBJS= locore.o spl.o copy.o vector.o
-.if ${XEN_BUILD} == amd64
-MD_OBJS+= amd64_trap.o
+
+MD_OBJS=
+.if ${XEN_BUILD} == i386
+MD_OBJS+= locore.o spl.o copy.o vector.o lock_stubs.o
.endif
MD_CFILES=
-MD_SFILES= $S/arch/${XEN_BUILD}/${XEN_BUILD}/locore.S \
+MD_SFILES=
+.if ${XEN_BUILD} == i386
+MD_SFILES+= $S/arch/${XEN_BUILD}/${XEN_BUILD}/locore.S \
$S/arch/${XEN_BUILD}/${XEN_BUILD}/spl.S \
$S/arch/${XEN_BUILD}/${XEN_BUILD}/vector.S \
- $S/arch/${XEN_BUILD}/${XEN_BUILD}/copy.S
+ $S/arch/${XEN_BUILD}/${XEN_BUILD}/copy.S \
+ $S/arch/${XEN_BUILD}/${XEN_BUILD}/lock_stubs.S
-.if ${XEN_BUILD} == amd64
-MD_SFILES+= $S/arch/${XEN_BUILD}/${XEN_BUILD}/amd64_trap.S
.endif
+.if ${XEN_BUILD} == i386
copy.o: $S/arch/${XEN_BUILD}/${XEN_BUILD}/copy.S assym.h
${NORMAL_S}
@@ -94,8 +97,7 @@
vector.o: $S/arch/${XEN_BUILD}/${XEN_BUILD}/vector.S assym.h
${NORMAL_S}
-.if ${XEN_BUILD} == amd64
-amd64_trap.o: $S/arch/${XEN_BUILD}/${XEN_BUILD}/amd64_trap.S assym.h
+lock_stubs.o: $S/arch/${XEN_BUILD}/${XEN_BUILD}/lock_stubs.S assym.h
${NORMAL_S}
.endif
--- src/sys/arch/xen/conf/files.xen 2020/04/14 16:53:57 1.180.2.2
+++ src/sys/arch/xen/conf/files.xen 2020/04/16 08:46:35 1.180.2.3
@@ -1,196 +1,19 @@
-# $NetBSD: files.xen,v 1.180.2.2 2020/04/14 16:53:57 bouyer Exp $
-# NetBSD: files.x86,v 1.10 2003/10/08 17:30:00 bouyer Exp
-# NetBSD: files.i386,v 1.254 2004/03/25 23:32:10 jmc Exp
+# $NetBSD: files.xen,v 1.180.2.3 2020/04/16 08:46:35 bouyer Exp $
-ifdef i386
-maxpartitions 8
-else
-maxpartitions 16
-endif
+defflag opt_xen.h XEN XENPVH XENPVHVM
-maxusers 2 16 128
+file arch/xen/x86/hypervisor_machdep.c xen
+file arch/xen/x86/xen_intr.c xen
+file arch/xen/xen/xen_machdep.c xen
+file arch/xen/xen/evtchn.c xen
+file arch/xen/xen/xengnt.c xen
+file arch/xen/x86/xen_ipi.c multiprocessor & xen
+file arch/xen/x86/xen_mainbus.c xen
-defparam opt_kernbase.h KERNBASE
-# options for MP configuration through the MP spec
-defflag opt_mpbios.h MPBIOS MPVERBOSE MPDEBUG MPBIOS_SCANPCI
-
-# Interrupt debug
-defflag opt_intrdebug.h INTRDEBUG
-
-# delay before cpu_reset() for reboot.
-defparam CPURESET_DELAY
-
-# splraise()/spllower() debug
-defflag opt_spldebug.h SPLDEBUG
-
-# Beep on halt
-defflag opt_beep.h BEEP_ONHALT
-defparam opt_beep.h BEEP_ONHALT_COUNT=3
-defparam opt_beep.h BEEP_ONHALT_PITCH=1500
-defparam opt_beep.h BEEP_ONHALT_PERIOD=250
-
-# PCI fixup options
-defflag opt_pcifixup.h PCI_ADDR_FIXUP PCI_BUS_FIXUP
- PCI_INTR_FIXUP PCI_INTR_FIXUP_FORCE
-
-defparam PCI_CONF_MODE
-
-file arch/xen/x86/autoconf.c xenpv
-ifdef i386
-file arch/i386/i386/autoconf.c xenpvhvm
-file arch/i386/i386/aout_machdep.c exec_aout
-file arch/i386/i386/i386func.S machdep & xenpvhvm
-file arch/i386/i386/busfunc.S
-file arch/i386/i386/cpufunc.S
-file arch/i386/i386/cpu_in_cksum.S (inet | inet6) & cpu_in_cksum
-file arch/i386/i386/db_disasm.c ddb
-file arch/i386/i386/db_interface.c ddb
-file arch/i386/i386/db_machdep.c ddb
-file arch/i386/i386/dumpsys.c
-file arch/i386/i386/gdt.c
-file arch/i386/i386/kobj_machdep.c modular
-file arch/i386/i386/machdep.c
-file arch/i386/i386/longrun.c
-file arch/i386/i386/mtrr_k6.c mtrr
-file arch/i386/i386/process_machdep.c
-file arch/i386/i386/trap.c
-file arch/i386/i386/lock_stubs.S
-
-file crypto/des/arch/i386/des_enc.S des
-file crypto/des/arch/i386/des_cbc.S des
-
-file crypto/blowfish/arch/i386/bf_enc.S blowfish
-file crypto/blowfish/arch/i386/bf_cbc.S blowfish
-
-elifdef amd64
-file arch/amd64/amd64/autoconf.c xenpvhvm
-file arch/amd64/amd64/busfunc.S
-file arch/amd64/amd64/cpufunc.S
-file arch/amd64/amd64/cpu_in_cksum.S (inet | inet6) & cpu_in_cksum
-file arch/amd64/amd64/db_disasm.c ddb
-file arch/amd64/amd64/db_interface.c ddb
-file arch/amd64/amd64/db_machdep.c ddb
-file arch/amd64/amd64/kobj_machdep.c modular
-file arch/amd64/amd64/gdt.c
-file arch/amd64/amd64/machdep.c
-file arch/amd64/amd64/process_machdep.c
-file arch/amd64/amd64/trap.c
-file arch/amd64/amd64/lock_stubs.S
-endif
-
-file kern/subr_disk_mbr.c disk
-file uvm/pmap/pmap_pvt.c
-file arch/x86/x86/db_memrw.c ddb | kgdb
-file arch/x86/x86/db_trace.c ddb
-file arch/x86/x86/efi.c machdep
-file arch/x86/x86/errata.c machdep
-file arch/x86/x86/fpu.c
-file arch/x86/x86/dbregs.c
-file arch/xen/x86/hypervisor_machdep.c
-file arch/x86/x86/kgdb_machdep.c kgdb
-file arch/x86/x86/mtrr_i686.c mtrr & (dom0ops | xenpvhvm)
-file arch/x86/x86/syscall.c
-file arch/xen/x86/x86_xpmap.c xenpv
-file arch/xen/x86/xen_pmap.c xenpv
-file arch/xen/x86/xen_intr.c
-file arch/xen/x86/xenfunc.c xenpv
-
-file arch/x86/x86/cpu_ucode.c dom0ops & cpu_ucode needs-flag
-file arch/x86/x86/cpu_ucode_amd.c dom0ops & cpu_ucode needs-flag
-file arch/x86/x86/cpu_ucode_intel.c dom0ops & cpu_ucode needs-flag
-file arch/x86/x86/compat_60_cpu_ucode.c compat_60 & dom0ops & cpu_ucode
-
-
-file arch/xen/xen/xen_machdep.c
-
-file arch/xen/xen/clock.c xenpv
-file arch/x86/isa/clock.c xenpvhvm
-file arch/x86/isa/rtc.c dom0ops | xenpvhvm
-file arch/xen/xen/evtchn.c
-
-file arch/xen/xen/xengnt.c
-
-file arch/x86/x86/cpu_rng.c
-
-file dev/cons.c
-
-
-#
-# Stack-less Just-In-Time compiler
-#
-
-include "external/bsd/sljit/conf/files.sljit"
-
-#
-# Machine-independent SCSI drivers
-#
-
-include "dev/scsipi/files.scsipi"
-
-#
-# Machine-independent ATA drivers
-#
-
-include "dev/ata/files.ata"
-
-# Memory Disk for install floppy
-file dev/md_root.c memory_disk_hooks
-
-file arch/x86/x86/bus_dma.c machdep
-file arch/x86/x86/core_machdep.c coredump
-file arch/xen/x86/xen_bus_dma.c machdep & xenpv
-file arch/x86/x86/bus_space.c machdep
-file arch/xen/x86/consinit.c machdep & xenpv
-file arch/x86/x86/consinit.c machdep & xenpvhvm
-file arch/x86/x86/identcpu.c machdep
-file arch/xen/x86/pintr.c machdep & dom0ops & xenpv
-file arch/xen/x86/xen_ipi.c multiprocessor & xenpv
-file arch/x86/x86/idt.c machdep
-file arch/x86/x86/intr.c machdep & xenpvhvm
-file arch/x86/x86/x86_softintr.c machdep
-file arch/x86/x86/ipi.c xenpvhvm
-file arch/x86/x86/patch.c machdep & ! xenpv
-file arch/x86/x86/pmap.c machdep
-file arch/x86/x86/x86_tlb.c machdep
-file arch/x86/x86/procfs_machdep.c procfs
-file arch/x86/x86/sys_machdep.c machdep
-file arch/x86/x86/tsc.c machdep
-file arch/x86/x86/vm_machdep.c machdep
-file arch/x86/x86/x86_autoconf.c machdep & xenpvhvm
-file arch/x86/x86/x86_machdep.c machdep
-file arch/x86/x86/platform.c machdep
-
-include "arch/xen/conf/files.compat"
-
-# BIOS32 routines
-define bios32
-file arch/x86/x86/bios32.c bios32 needs-flag
-
-# xen specific mainbus attributes
-define cpubus { [apid = -1] }
-define cpufeaturebus {}
-define ioapicbus { [apid = -1] }
-define apmbus {}
-define pnpbiosbus {}
define hypervisorbus {}
define xendevbus {}
-#
-# System bus types
-#
-
-device mainbus: isabus, pcibus, cpubus, ioapicbus, hypervisorbus, bios32, ipmibus, acpibus
-attach mainbus at root
-file arch/xen/x86/xen_mainbus.c mainbus
-ifdef amd64
-file arch/amd64/amd64/amd64_mainbus.c mainbus & xenpvhvm
-elifdef i386
-file arch/i386/i386/i386_mainbus.c mainbus & xenpvhvm
-file dev/eisa/eisabusprint.c xenpvhvm
-endif
-file arch/x86/x86/mainbus.c mainbus
-
# Xen hypervisor
device hypervisor { [apid = -1]}: isabus, pcibus, sysmon_power, xendevbus, acpibus
attach hypervisor at hypervisorbus
@@ -211,201 +34,13 @@
attach xencons at xendevbus
file arch/xen/xen/xencons.c xencons needs-flag
-# Xen event peudo-device
-defpseudo xenevt
-defpseudo xvif
-defpseudo xbdback
-
# Xen Network driver
device xennet: arp, ether, ifnet
attach xennet at xenbus
file arch/xen/xen/if_xennet_xenbus.c xennet needs-flag
+file arch/xen/xen/xennet_checksum.c xvif | xennet
# Xen Block device driver and wd/sd/cd identities
device xbd: disk
attach xbd at xenbus
file arch/xen/xen/xbd_xenbus.c xbd
-
-# PCI frontend
-device xpci: pcibus
-attach xpci at xenbus with xpci_xenbus
-file arch/xen/xen/xpci_xenbus.c xpci_xenbus
-
-# Xen Balloon driver
-device balloon
-attach balloon at xenbus
-file arch/xen/xen/balloon.c balloon
-
-# Non-Xen specific devices and options
-
-include "dev/pckbport/files.pckbport"
-
-#
-# Machine-independent PCI devices
-#
-include "dev/i2o/files.i2o"
-include "dev/pci/files.pci"
-include "dev/pci/files.agp"
-file arch/x86/pci/pciide_machdep.c pciide_common
-
-device pciback {unit = -1}
-attach pciback at pci
-file arch/xen/xen/pciback.c pciback
-
-
-# x86 specific PCI hardware
-include "arch/x86/pci/files.pci"
-
-#
-# Machine-independent ISA devices
-#
-include "dev/isa/files.isa"
-
-include "dev/usb/files.usb"
-
-include "dev/ieee1394/files.ieee1394"
-
-device fdc {drive = -1} #XXX
-
-include "dev/apm/files.apm"
-
-include "dev/acpi/files.acpi"
-file arch/xen/xen/xen_acpi_machdep.c acpi & xenpv
-file arch/x86/x86/mpacpi.c acpi
-file arch/x86/x86/i8259.c xenpvhvm | dom0ops
-
-# Stubs for x86 routines not included in the system
-file arch/x86/x86/x86_stub.c
-
-# MP configuration using Intel SMP specification 1.4
-file arch/x86/x86/mpbios.c mpbios
-
-# MP configuration using either ACPI or Intel SMP specification 1.4
-file arch/x86/x86/mp.c acpi | mpbios
-
-file arch/x86/pci/pci_bus_fixup.c pci_bus_fixup
-file arch/x86/pci/pci_addr_fixup.c pci_addr_fixup
-
-file arch/x86/x86/apic.c ioapic
-file arch/x86/x86/nmi.c
-
-file arch/x86/acpi/acpi_machdep.c acpi
-file arch/x86/acpi/acpi_pdc.c acpi
-
-device ioapic
-attach ioapic at ioapicbus
-file arch/x86/x86/ioapic.c ioapic needs-flag
-
-#IPMI device
-file arch/x86/x86/x86_ipmi.c ipmi needs-flag
-
-# CPUs
-#
-device cpu: cpufeaturebus
-attach cpu at cpubus
-
-device vcpu
-attach vcpu at xendevbus
-file arch/xen/x86/cpu.c xenpv & vcpu
-file arch/x86/x86/cpu.c xenpvhvm
-
-# CPU features
-#
-device est
-attach est at cpufeaturebus
-file arch/x86/x86/est.c est
-file arch/x86/x86/intel_busclock.c est
-
-device powernow
-attach powernow at cpufeaturebus
-file arch/x86/x86/powernow.c powernow
-
-#
-# Compatibility modules
-#
-
-ifdef i386
-
-# Binary compatibility with previous NetBSD releases (COMPAT_XX)
-file arch/i386/i386/compat_13_machdep.c compat_13
-file arch/i386/i386/compat_16_machdep.c compat_16
-
-# Linux binary compatibility (COMPAT_LINUX)
-include "compat/linux/files.linux"
-include "compat/linux/arch/i386/files.linux_i386"
-file arch/i386/i386/linux_sigcode.S compat_linux
-file arch/i386/i386/linux_syscall.c compat_linux
-file arch/x86/x86/linux_trap.c compat_linux
-
-# FreeBSD binary compatibility (COMPAT_FREEBSD)
-include "compat/freebsd/files.freebsd"
-
-elifdef amd64
-
-# Binary compatibility with previous NetBSD releases (COMPAT_XX)
-file arch/amd64/amd64/compat_16_machdep.c compat_16
-
-# NetBSD/i386 32-bit binary compatibility (COMPAT_NETBSD32)
-include "compat/netbsd32/files.netbsd32"
-file arch/amd64/amd64/netbsd32_machdep.c compat_netbsd32
-file arch/amd64/amd64/netbsd32_machdep_13.c compat_netbsd32 & compat_13
-file arch/amd64/amd64/netbsd32_machdep_16.c compat_netbsd32 & compat_16
-file arch/amd64/amd64/netbsd32_sigcode.S compat_netbsd32 & compat_16
-file arch/amd64/amd64/netbsd32_syscall.c compat_netbsd32
-
-# Linux compatibility (COMPAT_LINUX)
-include "compat/linux/files.linux"
-include "compat/linux/arch/amd64/files.linux_amd64"
-file arch/amd64/amd64/linux_sigcode.S compat_linux
-file arch/amd64/amd64/linux_syscall.c compat_linux
-file arch/x86/x86/linux_trap.c compat_linux
-# Linux 32 bit compatibility (COMPAT_LINUX32)
-include "compat/linux32/files.linux32"
-include "compat/linux32/arch/amd64/files.linux32_amd64"
-file arch/amd64/amd64/linux32_sigcode.S compat_linux32
-file arch/amd64/amd64/linux32_syscall.c compat_linux32
-endif
-
-# OSS audio driver compatibility
-include "compat/ossaudio/files.ossaudio"
-
-# Bluetooth
-include "dev/bluetooth/files.bluetooth"
-
-include "dev/sdmmc/files.sdmmc"
-
-#
-# CARDBUS
-#
-include "dev/cardbus/files.cardbus"
-ifdef i386
-file arch/i386/i386/rbus_machdep.c cardbus
-elifdef amd64
-file arch/amd64/amd64/rbus_machdep.c cardbus
-endif
-
-# this wants to be probed as late as possible.
-#
-# Machine-independent PCMCIA drivers
-#
-include "dev/pcmcia/files.pcmcia"
-
-# Domain-0 operations
-defflag opt_xen.h DOM0OPS XENPV
-file arch/xen/xen/privcmd.c dom0ops
-file arch/xen/x86/xen_shm_machdep.c dom0ops
-file arch/x86/pci/pci_machdep.c (xenpvhvm | hypervisor) & pci & ( dom0ops | xenpvhvm )
-file arch/x86/pci/pci_intr_machdep.c (xenpvhvm | hypervisor) & pci
-file arch/x86/pci/pci_msi_machdep.c hypervisor & xenpvhvm & pci & ! no_pci_msi_msix
-file arch/x86/pci/msipic.c hypervisor & xenpvhvm & pci & ! no_pci_msi_msix
-file arch/x86/isa/isa_machdep.c (xenpvhvm | hypervisor) & ( dom0ops | xenpvhvm )
-file arch/xen/xen/xenevt.c xenevt & (dom0ops | xenpvhvm)
-file arch/xen/xen/xennetback_xenbus.c xvif
-file arch/xen/xen/xennet_checksum.c xvif | xennet
-file arch/xen/xen/xbdback_xenbus.c xbdback
-
-ifdef i386
-include "arch/i386/conf/majors.i386"
-elifdef amd64
-include "arch/amd64/conf/majors.amd64"
-endif
# $NetBSD: files.xen.pv,v 1.1.2.1 2020/04/16 08:46:35 bouyer Exp $
file arch/xen/x86/autoconf.c xenpv
file arch/xen/x86/x86_xpmap.c xenpv
file arch/xen/x86/xen_pmap.c xenpv
file arch/xen/x86/xenfunc.c xenpv
file arch/xen/xen/xen_acpi_machdep.c acpi & xenpv
file arch/xen/xen/clock.c xenpv
file arch/xen/x86/xen_bus_dma.c machdep & xenpv
file arch/xen/x86/consinit.c machdep & xenpv
file arch/xen/x86/pintr.c machdep & dom0ops & xenpv
#
# System bus types
#
# Xen event peudo-device
defpseudo xenevt
defpseudo xvif
defpseudo xbdback
# PCI frontend
device xpci: pcibus
attach xpci at xenbus with xpci_xenbus
file arch/xen/xen/xpci_xenbus.c xpci_xenbus
# Xen Balloon driver
device balloon
attach balloon at xenbus
file arch/xen/xen/balloon.c balloon
device pciback {unit = -1}
attach pciback at pci
file arch/xen/xen/pciback.c pciback
device vcpu
attach vcpu at xendevbus
file arch/xen/x86/cpu.c xenpv & vcpu
# Domain-0 operations
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
--- src/sys/arch/xen/conf/Attic/std.xen 2019/02/04 18:14:53 1.10
+++ src/sys/arch/xen/conf/Attic/std.xen 2020/04/16 08:46:35 1.10.10.1
@@ -1,10 +1,11 @@
-# $NetBSD: std.xen,v 1.10 2019/02/04 18:14:53 cherry Exp $
+# $NetBSD: std.xen,v 1.10.10.1 2020/04/16 08:46:35 bouyer Exp $
# NetBSD: std.i386,v 1.24 2003/02/26 21:33:36 fvdl Exp
#
# standard, required NetBSD/i386 'options'
-machine xen i386
+machine xen i386 x86
include "conf/std" # MI standard options
+include "arch/xen/conf/files.xen.pv"
options __XEN_INTERFACE_VERSION__=0x00030208 # Xen 3.1 interface
--- src/sys/arch/xen/include/hypervisor.h 2020/04/12 17:25:52 1.49.10.1
+++ src/sys/arch/xen/include/hypervisor.h 2020/04/16 08:46:35 1.49.10.2
@@ -1,4 +1,4 @@
-/* $NetBSD: hypervisor.h,v 1.49.10.1 2020/04/12 17:25:52 bouyer Exp $ */
+/* $NetBSD: hypervisor.h,v 1.49.10.2 2020/04/16 08:46:35 bouyer Exp $ */
/*
* Copyright (c) 2006 Manuel Bouyer.
@@ -58,6 +58,8 @@
#include "isa.h"
#include "pci.h"
+void xen_mainbus_attach(device_t, device_t, void *);
+
struct hypervisor_attach_args {
const char *haa_busname;
};
@@ -108,7 +110,7 @@
#define xen_wmb() membar_consumer()
#endif /* __XEN_INTERFACE_VERSION */
-#include <machine/hypercalls.h>
+#include <machine/xen/hypercalls.h>
#undef u8
#undef u16
--- src/sys/arch/xen/include/intr.h 2020/04/12 17:25:52 1.53.6.1
+++ src/sys/arch/xen/include/intr.h 2020/04/16 08:46:35 1.53.6.2
@@ -1,4 +1,4 @@
-/* $NetBSD: intr.h,v 1.53.6.1 2020/04/12 17:25:52 bouyer Exp $ */
+/* $NetBSD: intr.h,v 1.53.6.2 2020/04/16 08:46:35 bouyer Exp $ */
/* NetBSD intr.h,v 1.15 2004/10/31 10:39:34 yamt Exp */
/*-
@@ -33,7 +33,7 @@
#ifndef _XEN_INTR_H_
#define _XEN_INTR_H_
-#include <machine/intrdefs.h>
+#include <xen/intrdefs.h>
#ifndef _LOCORE
#include <xen/include/public/xen.h>
--- src/sys/arch/xen/include/xenpmap.h 2019/10/30 07:40:06 1.42
+++ src/sys/arch/xen/include/xenpmap.h 2020/04/16 08:46:35 1.42.6.1
@@ -1,4 +1,4 @@
-/* $NetBSD: xenpmap.h,v 1.42 2019/10/30 07:40:06 maxv Exp $ */
+/* $NetBSD: xenpmap.h,v 1.42.6.1 2020/04/16 08:46:35 bouyer Exp $ */
/*
*
@@ -122,7 +122,6 @@
!= INVALID_P2M_ENTRY);
}
-#endif /* XENPV */
static inline void
MULTI_update_va_mapping(
@@ -170,5 +169,6 @@
#if defined(__x86_64__)
void xen_set_user_pgd(paddr_t);
#endif
+#endif /* XENPV */
#endif /* _XEN_XENPMAP_H_ */
--- src/sys/arch/xen/x86/hypervisor_machdep.c 2020/04/12 17:25:52 1.36.8.1
+++ src/sys/arch/xen/x86/hypervisor_machdep.c 2020/04/16 08:46:35 1.36.8.2
@@ -1,4 +1,4 @@
-/* $NetBSD: hypervisor_machdep.c,v 1.36.8.1 2020/04/12 17:25:52 bouyer Exp $ */
+/* $NetBSD: hypervisor_machdep.c,v 1.36.8.2 2020/04/16 08:46:35 bouyer Exp $ */
/*
*
@@ -54,7 +54,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hypervisor_machdep.c,v 1.36.8.1 2020/04/12 17:25:52 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hypervisor_machdep.c,v 1.36.8.2 2020/04/16 08:46:35 bouyer Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -66,6 +66,7 @@
#include <machine/pmap.h>
#include <xen/xen.h>
+#include <xen/intr.h>
#include <xen/hypervisor.h>
#include <xen/evtchn.h>
#include <xen/xenpmap.h>
--- src/sys/arch/xen/x86/xen_intr.c 2020/04/14 16:52:35 1.21.2.4
+++ src/sys/arch/xen/x86/xen_intr.c 2020/04/16 08:46:35 1.21.2.5
@@ -1,4 +1,4 @@
-/* $NetBSD: xen_intr.c,v 1.21.2.4 2020/04/14 16:52:35 bouyer Exp $ */
+/* $NetBSD: xen_intr.c,v 1.21.2.5 2020/04/16 08:46:35 bouyer Exp $ */
/*-
* Copyright (c) 1998, 2001 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xen_intr.c,v 1.21.2.4 2020/04/14 16:52:35 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xen_intr.c,v 1.21.2.5 2020/04/16 08:46:35 bouyer Exp $");
#include "opt_multiprocessor.h"
@@ -40,6 +40,7 @@
#include <sys/cpu.h>
#include <sys/device.h>
+#include <xen/intr.h>
#include <xen/evtchn.h>
#include <xen/xenfunc.h>
@@ -444,7 +445,7 @@
{
int ih = 0;
-#if NPCI > 0
+#if NPCI > 0 && defined(XENPV)
#if defined(__HAVE_PCI_MSI_MSIX)
if ((pic->pic_type == PIC_MSI) || (pic->pic_type == PIC_MSIX)) {
uint64_t pih;
--- src/sys/arch/xen/x86/xen_ipi.c 2020/04/12 17:17:38 1.35.6.2
+++ src/sys/arch/xen/x86/xen_ipi.c 2020/04/16 08:46:35 1.35.6.3
@@ -1,4 +1,4 @@
-/* $NetBSD: xen_ipi.c,v 1.35.6.2 2020/04/12 17:17:38 bouyer Exp $ */
+/* $NetBSD: xen_ipi.c,v 1.35.6.3 2020/04/16 08:46:35 bouyer Exp $ */
/*-
* Copyright (c) 2011, 2019 The NetBSD Foundation, Inc.
@@ -33,10 +33,10 @@
/*
* Based on: x86/ipi.c
- * __KERNEL_RCSID(0, "$NetBSD: xen_ipi.c,v 1.35.6.2 2020/04/12 17:17:38 bouyer Exp $");
+ * __KERNEL_RCSID(0, "$NetBSD: xen_ipi.c,v 1.35.6.3 2020/04/16 08:46:35 bouyer Exp $");
*/
-__KERNEL_RCSID(0, "$NetBSD: xen_ipi.c,v 1.35.6.2 2020/04/12 17:17:38 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xen_ipi.c,v 1.35.6.3 2020/04/16 08:46:35 bouyer Exp $");
#include "opt_ddb.h"
@@ -74,7 +74,7 @@
static void xen_ipi_ast(struct cpu_info *, struct intrframe *);
static void xen_ipi_kpreempt(struct cpu_info *ci, struct intrframe *);
-static void (*ipifunc[XEN_NIPIS])(struct cpu_info *, struct intrframe *) =
+static void (*xen_ipifunc[XEN_NIPIS])(struct cpu_info *, struct intrframe *) =
{ /* In order of priority (see: xen/include/intrdefs.h */
xen_ipi_halt,
xen_ipi_synch_fpu,
@@ -100,6 +100,8 @@
ci = curcpu();
regs = arg;
+
+ KASSERT(ci == arg);
pending = atomic_swap_32(&ci->ci_ipis, 0);
@@ -108,10 +110,10 @@
bit--;
pending &= ~(1 << bit);
ci->ci_ipi_events[bit].ev_count++;
- if (ipifunc[bit] != NULL) {
- (*ipifunc[bit])(ci, regs);
+ if (xen_ipifunc[bit] != NULL) {
+ (*xen_ipifunc[bit])(ci, regs);
} else {
- panic("ipifunc[%d] unsupported!\n", bit);
+ panic("xen_ipifunc[%d] unsupported!\n", bit);
/* NOTREACHED */
}
}
@@ -296,6 +298,32 @@
aston(ci->ci_onproc);
}
+static void
+xen_ipi_generic(struct cpu_info *ci, struct intrframe *intrf)
+{
+ KASSERT(ci != NULL);
+ KASSERT(intrf != NULL);
+ ipi_cpu_handler();
+}
+
+static void
+xen_ipi_hvcb(struct cpu_info *ci, struct intrframe *intrf)
+{
+ KASSERT(ci != NULL);
+ KASSERT(intrf != NULL);
+ KASSERT(ci == curcpu());
+ KASSERT(!ci->ci_vcpu->evtchn_upcall_mask);
+
+ hypervisor_force_callback();
+}
+
+static void
+xen_ipi_kpreempt(struct cpu_info *ci, struct intrframe * intrf)
+{
+ softint_trigger(1 << SIR_PREEMPT);
+}
+
+#ifdef XENPV
void
xc_send_ipi(struct cpu_info *ci)
{
@@ -311,15 +339,6 @@
}
}
-static void
-xen_ipi_generic(struct cpu_info *ci, struct intrframe *intrf)
-{
- KASSERT(ci != NULL);
- KASSERT(intrf != NULL);
-
- ipi_cpu_handler();
-}
-
void
cpu_ipi(struct cpu_info *ci)
{
@@ -333,20 +352,4 @@
xen_broadcast_ipi(XEN_IPI_GENERIC);
}
}
-
+#endif /* XENPV */
-static void
-xen_ipi_hvcb(struct cpu_info *ci, struct intrframe *intrf)
-{
- KASSERT(ci != NULL);
- KASSERT(intrf != NULL);
- KASSERT(ci == curcpu());
- KASSERT(!ci->ci_vcpu->evtchn_upcall_mask);
-
- hypervisor_force_callback();
-}
-
-static void
-xen_ipi_kpreempt(struct cpu_info *ci, struct intrframe * intrf)
-{
- softint_trigger(1 << SIR_PREEMPT);
-}
--- src/sys/arch/xen/x86/xen_mainbus.c 2019/02/14 08:18:26 1.6
+++ src/sys/arch/xen/x86/xen_mainbus.c 2020/04/16 08:46:35 1.6.12.1
@@ -1,4 +1,4 @@
-/* $NetBSD: xen_mainbus.c,v 1.6 2019/02/14 08:18:26 cherry Exp $ */
+/* $NetBSD: xen_mainbus.c,v 1.6.12.1 2020/04/16 08:46:35 bouyer Exp $ */
/* NetBSD: mainbus.c,v 1.19 2017/05/23 08:54:39 nonaka Exp */
/* NetBSD: mainbus.c,v 1.53 2003/10/27 14:11:47 junyoung Exp */
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xen_mainbus.c,v 1.6 2019/02/14 08:18:26 cherry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xen_mainbus.c,v 1.6.12.1 2020/04/16 08:46:35 bouyer Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -99,9 +99,8 @@
extern bool acpi_present;
extern bool mpacpi_active;
-int xen_mainbus_match(device_t, cfdata_t, void *);
void xen_mainbus_attach(device_t, device_t, void *);
-int xen_mainbus_print(void *, const char *);
+static int xen_mainbus_print(void *, const char *);
union xen_mainbus_attach_args {
const char *mba_busname; /* first elem of all */
@@ -115,26 +114,14 @@
};
/*
- * Probe for the mainbus; always succeeds.
- */
-int
-xen_mainbus_match(device_t parent, cfdata_t match, void *aux)
-{
-
- return 1;
-}
-
-/*
* Attach the mainbus.
*/
void
xen_mainbus_attach(device_t parent, device_t self, void *aux)
{
-#if NIPMI > 0 || NHYPERVISOR > 0
union xen_mainbus_attach_args mba;
-#endif
-#if NIPMI > 0
+#if NIPMI > 0 && defined(XENPV)
memset(&mba.mba_ipmi, 0, sizeof(mba.mba_ipmi));
mba.mba_ipmi.iaa_iot = x86_bus_space_io;
mba.mba_ipmi.iaa_memt = x86_bus_space_mem;
@@ -142,17 +129,15 @@
config_found_ia(self, "ipmibus", &mba.mba_ipmi, 0);
#endif
-#if NHYPERVISOR > 0
mba.mba_haa.haa_busname = "hypervisor";
config_found_ia(self, "hypervisorbus", &mba.mba_haa, xen_mainbus_print);
-#endif
/* save/restore for Xen */
if (!pmf_device_register(self, NULL, NULL))
aprint_error_dev(self, "couldn't establish power handler\n");
}
-int
+static int
xen_mainbus_print(void *aux, const char *pnp)
{
union xen_mainbus_attach_args *mba = aux;
--- src/sys/arch/xen/xen/evtchn.c 2020/04/12 17:25:53 1.88.2.3
+++ src/sys/arch/xen/xen/evtchn.c 2020/04/16 08:46:36 1.88.2.4
@@ -1,4 +1,4 @@
-/* $NetBSD: evtchn.c,v 1.88.2.3 2020/04/12 17:25:53 bouyer Exp $ */
+/* $NetBSD: evtchn.c,v 1.88.2.4 2020/04/16 08:46:36 bouyer Exp $ */
/*
* Copyright (c) 2006 Manuel Bouyer.
@@ -54,7 +54,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: evtchn.c,v 1.88.2.3 2020/04/12 17:25:53 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: evtchn.c,v 1.88.2.4 2020/04/16 08:46:36 bouyer Exp $");
#include "opt_xen.h"
#include "isa.h"
@@ -73,7 +73,7 @@
#include <uvm/uvm.h>
-#include <machine/intrdefs.h>
+#include <xen/intr.h>
#include <xen/xen.h>
#include <xen/hypervisor.h>
--- src/sys/arch/xen/xen/if_xennet_xenbus.c 2020/04/07 11:47:06 1.109
+++ src/sys/arch/xen/xen/if_xennet_xenbus.c 2020/04/16 08:46:36 1.109.2.1
@@ -1,4 +1,4 @@
-/* $NetBSD: if_xennet_xenbus.c,v 1.109 2020/04/07 11:47:06 jdolecek Exp $ */
+/* $NetBSD: if_xennet_xenbus.c,v 1.109.2.1 2020/04/16 08:46:36 bouyer Exp $ */
/*
* Copyright (c) 2006 Manuel Bouyer.
@@ -81,7 +81,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_xennet_xenbus.c,v 1.109 2020/04/07 11:47:06 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_xennet_xenbus.c,v 1.109.2.1 2020/04/16 08:46:36 bouyer Exp $");
#include "opt_xen.h"
#include "opt_nfs_boot.h"
@@ -117,6 +117,7 @@
#include <uvm/uvm.h>
+#include <xen/intr.h>
#include <xen/hypervisor.h>
#include <xen/evtchn.h>
#include <xen/granttables.h>
--- src/sys/arch/xen/xen/xbd_xenbus.c 2020/04/07 11:47:06 1.97
+++ src/sys/arch/xen/xen/xbd_xenbus.c 2020/04/16 08:46:36 1.97.2.1
@@ -1,4 +1,4 @@
-/* $NetBSD: xbd_xenbus.c,v 1.97 2020/04/07 11:47:06 jdolecek Exp $ */
+/* $NetBSD: xbd_xenbus.c,v 1.97.2.1 2020/04/16 08:46:36 bouyer Exp $ */
/*
* Copyright (c) 2006 Manuel Bouyer.
@@ -50,7 +50,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xbd_xenbus.c,v 1.97 2020/04/07 11:47:06 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xbd_xenbus.c,v 1.97.2.1 2020/04/16 08:46:36 bouyer Exp $");
#include "opt_xen.h"
@@ -73,6 +73,7 @@
#include <uvm/uvm.h>
+#include <xen/intr.h>
#include <xen/hypervisor.h>
#include <xen/evtchn.h>
#include <xen/granttables.h>
--- src/sys/arch/xen/xen/xen_machdep.c 2019/03/09 08:42:25 1.22
+++ src/sys/arch/xen/xen/xen_machdep.c 2020/04/16 08:46:36 1.22.10.1
@@ -1,4 +1,4 @@
-/* $NetBSD: xen_machdep.c,v 1.22 2019/03/09 08:42:25 maxv Exp $ */
+/* $NetBSD: xen_machdep.c,v 1.22.10.1 2020/04/16 08:46:36 bouyer Exp $ */
/*
* Copyright (c) 2006 Manuel Bouyer.
@@ -53,7 +53,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xen_machdep.c,v 1.22 2019/03/09 08:42:25 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xen_machdep.c,v 1.22.10.1 2020/04/16 08:46:36 bouyer Exp $");
#include "opt_xen.h"
@@ -67,6 +67,7 @@
#include <sys/pmf.h>
#include <sys/xcall.h>
+#include <xen/intr.h>
#include <xen/hypervisor.h>
#include <xen/shutdown_xenbus.h>
#include <xen/include/public/version.h>
--- src/sys/arch/xen/xen/xencons.c 2019/02/02 12:32:55 1.48
+++ src/sys/arch/xen/xen/xencons.c 2020/04/16 08:46:36 1.48.10.1
@@ -1,4 +1,4 @@
-/* $NetBSD: xencons.c,v 1.48 2019/02/02 12:32:55 cherry Exp $ */
+/* $NetBSD: xencons.c,v 1.48.10.1 2020/04/16 08:46:36 bouyer Exp $ */
/*
* Copyright (c) 2006 Manuel Bouyer.
@@ -53,7 +53,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xencons.c,v 1.48 2019/02/02 12:32:55 cherry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xencons.c,v 1.48.10.1 2020/04/16 08:46:36 bouyer Exp $");
#include "opt_xen.h"
@@ -67,6 +67,7 @@
#include <sys/kauth.h>
#include <sys/kernel.h>
+#include <xen/intr.h>
#include <xen/xen.h>
#include <xen/hypervisor.h>
#include <xen/evtchn.h>
--- src/sys/arch/xen/xenbus/xenbus_comms.c 2018/12/24 14:55:42 1.21
+++ src/sys/arch/xen/xenbus/xenbus_comms.c 2020/04/16 08:46:36 1.21.10.1
@@ -1,4 +1,4 @@
-/* $NetBSD: xenbus_comms.c,v 1.21 2018/12/24 14:55:42 cherry Exp $ */
+/* $NetBSD: xenbus_comms.c,v 1.21.10.1 2020/04/16 08:46:36 bouyer Exp $ */
/******************************************************************************
* xenbus_comms.c
*
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xenbus_comms.c,v 1.21 2018/12/24 14:55:42 cherry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xenbus_comms.c,v 1.21.10.1 2020/04/16 08:46:36 bouyer Exp $");
#include <sys/types.h>
#include <sys/null.h>
@@ -39,6 +39,7 @@
#include <sys/systm.h>
#include <xen/xen.h> /* for xendomain_is_dom0() */
+#include <xen/intr.h> /* for xendomain_is_dom0() */
#include <xen/hypervisor.h>
#include <xen/evtchn.h>
#include <xen/xenbus.h>
--- src/sys/arch/xen/xenbus/xenbus_dev.c 2020/04/07 16:10:48 1.17
+++ src/sys/arch/xen/xenbus/xenbus_dev.c 2020/04/16 08:46:36 1.17.2.1
@@ -1,4 +1,4 @@
-/* $NetBSD: xenbus_dev.c,v 1.17 2020/04/07 16:10:48 jdolecek Exp $ */
+/* $NetBSD: xenbus_dev.c,v 1.17.2.1 2020/04/16 08:46:36 bouyer Exp $ */
/*
* xenbus_dev.c
*
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xenbus_dev.c,v 1.17 2020/04/07 16:10:48 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xenbus_dev.c,v 1.17.2.1 2020/04/16 08:46:36 bouyer Exp $");
#include "opt_xen.h"
@@ -50,6 +50,7 @@
#include <xen/kernfs_machdep.h>
+#include <xen/intr.h>
#include <xen/hypervisor.h>
#include <xen/xenbus.h>
#include "xenbus_comms.h"