Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/xen/xenbus Merge the bouyer-xenpvh branch, bringing...



details:   https://anonhg.NetBSD.org/src/rev/b7feacbf2a64
branches:  trunk
changeset: 971484:b7feacbf2a64
user:      bouyer <bouyer%NetBSD.org@localhost>
date:      Sat Apr 25 15:26:16 2020 +0000

description:
Merge the bouyer-xenpvh branch, bringing in Xen PV drivers support under HVM
guests in GENERIC.
Xen support can be disabled at runtime with
boot -c
disable hypervisor

diffstat:

 common/lib/libc/arch/i386/atomic/atomic.S |     4 +-
 sys/arch/amd64/amd64/genassym.cf          |    15 +-
 sys/arch/amd64/amd64/lock_stubs.S         |    20 +-
 sys/arch/amd64/amd64/locore.S             |     6 +-
 sys/arch/amd64/amd64/machdep.c            |    29 +-
 sys/arch/amd64/amd64/netbsd32_machdep.c   |     4 +-
 sys/arch/amd64/amd64/spl.S                |    94 +--
 sys/arch/amd64/amd64/vector.S             |   119 +--
 sys/arch/amd64/conf/GENERIC               |    13 +-
 sys/arch/amd64/conf/Makefile.amd64        |     4 +-
 sys/arch/amd64/conf/XEN3_DOM0             |     8 +-
 sys/arch/amd64/conf/XEN3_DOMU             |     6 +-
 sys/arch/amd64/conf/XEN3_PVHVM            |   185 -----
 sys/arch/amd64/conf/files.amd64           |    18 +-
 sys/arch/amd64/conf/std.amd64             |     5 +-
 sys/arch/amd64/conf/std.xen               |     5 +-
 sys/arch/amd64/include/asan.h             |     2 +-
 sys/arch/amd64/include/asm.h              |     2 +-
 sys/arch/amd64/include/frameasm.h         |    14 +-
 sys/arch/amd64/include/gdt.h              |     2 +-
 sys/arch/amd64/include/intrdefs.h         |     4 +-
 sys/arch/amd64/include/msan.h             |     2 +-
 sys/arch/amd64/include/pte.h              |     2 +-
 sys/arch/amd64/include/types.h            |     2 +-
 sys/arch/amd64/include/xen/hypercalls.h   |   462 +++++++++++++
 sys/arch/i386/conf/GENERIC                |    15 +-
 sys/arch/i386/conf/Makefile.i386          |     3 +-
 sys/arch/i386/conf/XEN3PAE_DOM0           |     6 +-
 sys/arch/i386/conf/XEN3PAE_DOMU           |     4 +-
 sys/arch/i386/conf/XEN3PAE_PVHVM          |   167 ----
 sys/arch/i386/conf/files.i386             |    17 +-
 sys/arch/i386/conf/std.i386               |     5 +-
 sys/arch/i386/conf/std.xen                |     7 +-
 sys/arch/i386/i386/genassym.cf            |    15 +-
 sys/arch/i386/i386/i386_trap.S            |    16 +-
 sys/arch/i386/i386/lock_stubs.S           |    21 +-
 sys/arch/i386/i386/locore.S               |    18 +-
 sys/arch/i386/i386/machdep.c              |    33 +-
 sys/arch/i386/i386/spl.S                  |    78 +-
 sys/arch/i386/i386/vector.S               |   188 +----
 sys/arch/i386/include/asm.h               |     2 +-
 sys/arch/i386/include/frameasm.h          |     9 +-
 sys/arch/i386/include/gdt.h               |     2 +-
 sys/arch/i386/include/intrdefs.h          |     4 +-
 sys/arch/i386/include/kcore.h             |     2 +-
 sys/arch/i386/include/pte.h               |     2 +-
 sys/arch/i386/include/xen/hypercalls.h    |   573 ++++++++++++++++
 sys/arch/x86/conf/files.x86               |    29 +-
 sys/arch/x86/include/apicvar.h            |     2 +-
 sys/arch/x86/include/cpu.h                |    41 +-
 sys/arch/x86/include/cpufunc.h            |     4 +-
 sys/arch/x86/include/cpuvar.h             |     5 +-
 sys/arch/x86/include/intr.h               |    31 +-
 sys/arch/x86/include/intrdefs.h           |     7 +-
 sys/arch/x86/include/machdep.h            |     8 +-
 sys/arch/x86/include/pci_machdep_common.h |     4 +-
 sys/arch/x86/include/pic.h                |     6 +-
 sys/arch/x86/include/pmap.h               |     2 +-
 sys/arch/x86/include/specialreg.h         |     2 +-
 sys/arch/x86/isa/clock.c                  |    29 +-
 sys/arch/x86/isa/isa_machdep.c            |     8 +-
 sys/arch/x86/pci/amdsmn.c                 |     4 +-
 sys/arch/x86/pci/amdzentemp.c             |     4 +-
 sys/arch/x86/pci/msipic.c                 |    10 +-
 sys/arch/x86/x86/bus_space.c              |     4 +-
 sys/arch/x86/x86/consinit.c               |     6 +-
 sys/arch/x86/x86/cpu.c                    |    29 +-
 sys/arch/x86/x86/cpu_ucode.c              |     6 +-
 sys/arch/x86/x86/cpu_ucode_amd.c          |     8 +-
 sys/arch/x86/x86/cpu_ucode_intel.c        |     6 +-
 sys/arch/x86/x86/hyperv.c                 |     4 +-
 sys/arch/x86/x86/i8259.c                  |    15 +-
 sys/arch/x86/x86/identcpu.c               |    14 +-
 sys/arch/x86/x86/identcpu_subr.c          |     2 +-
 sys/arch/x86/x86/intr.c                   |   273 ++-----
 sys/arch/x86/x86/ioapic.c                 |     7 +-
 sys/arch/x86/x86/lapic.c                  |    27 +-
 sys/arch/x86/x86/mainbus.c                |    27 +-
 sys/arch/x86/x86/patch.c                  |    10 +-
 sys/arch/x86/x86/pmap.c                   |    14 +-
 sys/arch/x86/x86/procfs_machdep.c         |     4 +-
 sys/arch/x86/x86/svs.c                    |     4 +-
 sys/arch/x86/x86/sys_machdep.c            |     4 +-
 sys/arch/x86/x86/tsc.c                    |     4 +-
 sys/arch/x86/x86/x86_autoconf.c           |     6 +-
 sys/arch/x86/x86/x86_machdep.c            |    38 +-
 sys/arch/x86/x86/x86_softintr.c           |   294 ++++++++
 sys/arch/xen/conf/Makefile.xen            |    22 +-
 sys/arch/xen/conf/files.compat            |     8 +-
 sys/arch/xen/conf/files.xen               |   386 +----------
 sys/arch/xen/conf/files.xen.pv            |    49 +
 sys/arch/xen/conf/std.xenversion          |     2 +-
 sys/arch/xen/include/Makefile             |     4 +-
 sys/arch/xen/include/amd64/hypercalls.h   |   462 -------------
 sys/arch/xen/include/evtchn.h             |     9 +-
 sys/arch/xen/include/hypervisor.h         |    12 +-
 sys/arch/xen/include/i386/hypercalls.h    |   570 ----------------
 sys/arch/xen/include/i82093var.h          |     2 +-
 sys/arch/xen/include/intr.h               |    12 +-
 sys/arch/xen/include/intrdefs.h           |     7 +-
 sys/arch/xen/include/xen.h                |     4 +-
 sys/arch/xen/include/xen_shm.h            |     2 +-
 sys/arch/xen/include/xenbus.h             |     2 +-
 sys/arch/xen/include/xenpmap.h            |     4 +-
 sys/arch/xen/include/xenring.h            |     2 +-
 sys/arch/xen/x86/autoconf.c               |     7 +-
 sys/arch/xen/x86/cpu.c                    |    34 +-
 sys/arch/xen/x86/hypervisor_machdep.c     |    95 +-
 sys/arch/xen/x86/pintr.c                  |     2 +-
 sys/arch/xen/x86/xen_bus_dma.c            |    11 +-
 sys/arch/xen/x86/xen_intr.c               |    83 +-
 sys/arch/xen/x86/xen_ipi.c                |    71 +-
 sys/arch/xen/x86/xen_mainbus.c            |    58 +-
 sys/arch/xen/x86/xen_shm_machdep.c        |     4 +-
 sys/arch/xen/x86/xenfunc.c                |    14 +-
 sys/arch/xen/xen/balloon.c                |     4 +-
 sys/arch/xen/xen/clock.c                  |  1007 ----------------------------
 sys/arch/xen/xen/evtchn.c                 |   171 ++--
 sys/arch/xen/xen/hypervisor.c             |   355 ++++++---
 sys/arch/xen/xen/if_xennet_xenbus.c       |     5 +-
 sys/arch/xen/xen/privcmd.c                |     4 +-
 sys/arch/xen/xen/xbd_xenbus.c             |     5 +-
 sys/arch/xen/xen/xbdback_xenbus.c         |     4 +-
 sys/arch/xen/xen/xen_clock.c              |  1013 +++++++++++++++++++++++++++++
 sys/arch/xen/xen/xen_machdep.c            |     5 +-
 sys/arch/xen/xen/xencons.c                |     5 +-
 sys/arch/xen/xen/xenevt.c                 |     6 +-
 sys/arch/xen/xen/xengnt.c                 |   118 +--
 sys/arch/xen/xenbus/xenbus_comms.c        |     5 +-
 sys/arch/xen/xenbus/xenbus_dev.c          |     5 +-
 sys/arch/xen/xenbus/xenbus_probe.c        |     4 +-
 131 files changed, 3629 insertions(+), 4241 deletions(-)

diffs (truncated from 11881 to 300 lines):

diff -r 3cce4ee17ef0 -r b7feacbf2a64 common/lib/libc/arch/i386/atomic/atomic.S
--- a/common/lib/libc/arch/i386/atomic/atomic.S Sat Apr 25 13:51:04 2020 +0000
+++ b/common/lib/libc/arch/i386/atomic/atomic.S Sat Apr 25 15:26:16 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: atomic.S,v 1.23 2018/07/18 13:39:36 bouyer Exp $       */
+/*     $NetBSD: atomic.S,v 1.24 2020/04/25 15:26:16 bouyer Exp $       */
 
 /*-
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -197,7 +197,7 @@
 ENDLABEL(membar_sync_end)
 
 #if defined(__HAVE_ATOMIC64_OPS) || defined(_KERNEL)
-#ifdef XEN
+#ifdef XENPV
 STRONG_ALIAS(_atomic_cas_64,_atomic_cas_cx8)
 #else
 ENTRY(_atomic_cas_64)
diff -r 3cce4ee17ef0 -r b7feacbf2a64 sys/arch/amd64/amd64/genassym.cf
--- a/sys/arch/amd64/amd64/genassym.cf  Sat Apr 25 13:51:04 2020 +0000
+++ b/sys/arch/amd64/amd64/genassym.cf  Sat Apr 25 15:26:16 2020 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: genassym.cf,v 1.82 2020/02/17 09:09:48 skrll Exp $
+#      $NetBSD: genassym.cf,v 1.83 2020/04/25 15:26:16 bouyer Exp $
 
 #
 # Copyright (c) 1998, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -246,13 +246,11 @@
 define CPU_INFO_GDT            offsetof(struct cpu_info, ci_gdt)
 define CPU_INFO_ILEVEL         offsetof(struct cpu_info, ci_ilevel)
 define CPU_INFO_IDEPTH         offsetof(struct cpu_info, ci_idepth)
-if !defined(XENPV)
 define CPU_INFO_IPENDING       offsetof(struct cpu_info, ci_ipending)
 define CPU_INFO_IMASKED        offsetof(struct cpu_info, ci_imasked)
 define CPU_INFO_IMASK          offsetof(struct cpu_info, ci_imask)
 define CPU_INFO_IUNMASK        offsetof(struct cpu_info, ci_iunmask)
 define CPU_INFO_ISOURCES       offsetof(struct cpu_info, ci_isources)
-endif
 define CPU_INFO_MTX_COUNT      offsetof(struct cpu_info, ci_mtx_count)
 define CPU_INFO_MTX_OLDSPL     offsetof(struct cpu_info, ci_mtx_oldspl)
 define  CPU_INFO_CPUID         offsetof(struct cpu_info, ci_cpuid)
@@ -325,6 +323,8 @@
 define IPL_PREEMPT             IPL_PREEMPT
 define IPL_NET                 IPL_NET
 define IPL_CLOCK               IPL_CLOCK
+define IPL_VM                  IPL_VM
+define IPL_SCHED               IPL_SCHED
 define IPL_HIGH                IPL_HIGH
 
 define LIR_IPI                 LIR_IPI
@@ -360,12 +360,13 @@
 
 define BST_TYPE                offsetof(struct bus_space_tag, bst_type)
 
+define VM_GUEST_XENPV          VM_GUEST_XENPV
+
 ifdef XEN
 define CPU_INFO_VCPU           offsetof(struct cpu_info, ci_vcpu)
-define CPU_INFO_XPENDING       offsetof(struct cpu_info, ci_xpending)
-define CPU_INFO_XMASK          offsetof(struct cpu_info, ci_xmask)
-define CPU_INFO_XUNMASK                offsetof(struct cpu_info, ci_xunmask)
-define CPU_INFO_XSOURCES       offsetof(struct cpu_info, ci_xsources)
+define SIR_XENIPL_VM           SIR_XENIPL_VM
+define SIR_XENIPL_SCHED                SIR_XENIPL_SCHED
+define SIR_XENIPL_HIGH         SIR_XENIPL_HIGH
 define EVTCHN_UPCALL_MASK      offsetof(struct vcpu_info, evtchn_upcall_mask)
 ifdef XENPV
 define XEN_PT_BASE             offsetof(struct start_info, pt_base)    
diff -r 3cce4ee17ef0 -r b7feacbf2a64 sys/arch/amd64/amd64/lock_stubs.S
--- a/sys/arch/amd64/amd64/lock_stubs.S Sat Apr 25 13:51:04 2020 +0000
+++ b/sys/arch/amd64/amd64/lock_stubs.S Sat Apr 25 15:26:16 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: lock_stubs.S,v 1.35 2019/12/08 20:00:56 ad Exp $       */
+/*     $NetBSD: lock_stubs.S,v 1.36 2020/04/25 15:26:16 bouyer Exp $   */
 
 /*
  * Copyright (c) 2006, 2007, 2008, 2009 The NetBSD Foundation, Inc.
@@ -126,18 +126,10 @@
        jnz     1f
        cmpl    CPU_INFO_ILEVEL(%r8), %edi
        jae     1f
-#if !defined(XENPV)
        movl    CPU_INFO_IUNMASK(%r8,%rdi,4), %esi
        CLI(ax)
        testl   CPU_INFO_IPENDING(%r8), %esi
        jnz     _C_LABEL(Xspllower)
-#endif
-#if defined(XEN)
-       movl    CPU_INFO_XUNMASK(%r8,%rdi,4), %esi
-       CLI(ax)
-       testl   CPU_INFO_XPENDING(%r8), %esi
-       jnz     _C_LABEL(Xspllower)
-#endif
        movl    %edi, CPU_INFO_ILEVEL(%r8)
        STI(ax)
 1:     rep                                     /* double byte ret as branch */
@@ -155,22 +147,12 @@
        cmpl    %edx,%ecx                       /* new level is lower? */
        jae     2f
 1:
-#if !defined(XENPV)
        movl    CPU_INFO_IPENDING(%rsi),%eax
        testl   %eax,CPU_INFO_IUNMASK(%rsi,%rcx,4)/* deferred interrupts? */
        jnz     3f
        movl    %eax,%ebx
        cmpxchg8b CPU_INFO_ISTATE(%rsi)         /* swap in new ilevel */
        jnz     4f
-#endif
-#if defined(XEN)
-       movl    CPU_INFO_XPENDING(%rsi),%eax
-       testl   %eax,CPU_INFO_XUNMASK(%rsi,%rcx,4)/* deferred interrupts? */
-       jnz     3f
-       movl    %edx, %eax
-       cmpxchgl %ecx, CPU_INFO_ILEVEL(%rsi)
-       jnz     4f
-#endif
 2:
        popq    %rbx
        ret
diff -r 3cce4ee17ef0 -r b7feacbf2a64 sys/arch/amd64/amd64/locore.S
--- a/sys/arch/amd64/amd64/locore.S     Sat Apr 25 13:51:04 2020 +0000
+++ b/sys/arch/amd64/amd64/locore.S     Sat Apr 25 15:26:16 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: locore.S,v 1.200 2020/01/15 18:47:23 ad Exp $  */
+/*     $NetBSD: locore.S,v 1.201 2020/04/25 15:26:16 bouyer Exp $      */
 
 /*
  * Copyright-o-rama!
@@ -942,6 +942,8 @@
        cpuid
        movl    %eax,_C_LABEL(cpuid_level)
 
+       movl    $VM_GUEST_XENPV, _C_LABEL(vm_guest)
+
        movq    $cpu_info_primary,%rdi
        movq    %rdi,CPU_INFO_SELF(%rdi) /* ci->ci_self = ci */
        movq    $1,%rsi
@@ -1108,7 +1110,7 @@
 .Lskip_svs:
 #endif
 
-#ifndef XEN
+#ifndef XENPV
        movq    %r13,%rdi
        movq    %r12,%rsi
        callq   _C_LABEL(speculation_barrier)
diff -r 3cce4ee17ef0 -r b7feacbf2a64 sys/arch/amd64/amd64/machdep.c
--- a/sys/arch/amd64/amd64/machdep.c    Sat Apr 25 13:51:04 2020 +0000
+++ b/sys/arch/amd64/amd64/machdep.c    Sat Apr 25 15:26:16 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: machdep.c,v 1.347 2020/04/21 20:13:39 jdolecek Exp $   */
+/*     $NetBSD: machdep.c,v 1.348 2020/04/25 15:26:16 bouyer Exp $     */
 
 /*
  * Copyright (c) 1996, 1997, 1998, 2000, 2006, 2007, 2008, 2011
@@ -110,7 +110,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.347 2020/04/21 20:13:39 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.348 2020/04/25 15:26:16 bouyer Exp $");
 
 #include "opt_modular.h"
 #include "opt_user_ldt.h"
@@ -280,14 +280,6 @@
 extern paddr_t pmap_pa_start, pmap_pa_end;
 #endif
 
-#ifndef XENPV
-void (*delay_func)(unsigned int) = i8254_delay;
-void (*initclock_func)(void) = i8254_initclocks;
-#else /* XENPV */
-void (*delay_func)(unsigned int) = xen_delay;
-void (*initclock_func)(void) = xen_initclocks;
-#endif
-
 struct nmistore {
        uint64_t cr3;
        uint64_t scratch;
@@ -727,9 +719,12 @@
 
                acpi_enter_sleep_state(ACPI_STATE_S5);
 #endif
-#ifdef XENPV
-               HYPERVISOR_shutdown();
-#endif /* XENPV */
+#ifdef XEN
+               if (vm_guest == VM_GUEST_XENPV ||
+                   vm_guest == VM_GUEST_XENPVH ||
+                   vm_guest == VM_GUEST_XENPVHVM)
+                       HYPERVISOR_shutdown();
+#endif /* XEN */
        }
 
        cpu_broadcast_halt();
@@ -1691,7 +1686,7 @@
        svs_init();
 #endif
        cpu_init_msrs(&cpu_info_primary, true);
-#ifndef XEN
+#ifndef XENPV
        cpu_speculation_init(&cpu_info_primary);
 #endif
 
@@ -2124,12 +2119,6 @@
        return 0;
 }
 
-void
-cpu_initclocks(void)
-{
-       (*initclock_func)();
-}
-
 int
 mm_md_kernacc(void *ptr, vm_prot_t prot, bool *handled)
 {
diff -r 3cce4ee17ef0 -r b7feacbf2a64 sys/arch/amd64/amd64/netbsd32_machdep.c
--- a/sys/arch/amd64/amd64/netbsd32_machdep.c   Sat Apr 25 13:51:04 2020 +0000
+++ b/sys/arch/amd64/amd64/netbsd32_machdep.c   Sat Apr 25 15:26:16 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: netbsd32_machdep.c,v 1.135 2020/04/24 16:27:27 maxv Exp $      */
+/*     $NetBSD: netbsd32_machdep.c,v 1.136 2020/04/25 15:26:16 bouyer Exp $    */
 
 /*
  * Copyright (c) 2001 Wasabi Systems, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.135 2020/04/24 16:27:27 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.136 2020/04/25 15:26:16 bouyer Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
diff -r 3cce4ee17ef0 -r b7feacbf2a64 sys/arch/amd64/amd64/spl.S
--- a/sys/arch/amd64/amd64/spl.S        Sat Apr 25 13:51:04 2020 +0000
+++ b/sys/arch/amd64/amd64/spl.S        Sat Apr 25 15:26:16 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: spl.S,v 1.43 2020/01/08 17:38:41 ad Exp $      */
+/*     $NetBSD: spl.S,v 1.44 2020/04/25 15:26:16 bouyer Exp $  */
 
 /*
  * Copyright (c) 2003 Wasabi Systems, Inc.
@@ -91,7 +91,6 @@
        ret
 END(splraise)
 
-#ifndef XEN
 /*
  * Xsoftintr()
  *
@@ -148,11 +147,11 @@
        movq    PCB_RSP0(%rdx),%rsp
 
        /* dispatch */
-       sti
+       STI(di)
        movq    %r15,%rdi               /* interrupted LWP */
        movl    IS_MAXLEVEL(%rax),%esi  /* ipl to run at */
        call    _C_LABEL(softint_dispatch)/* run handlers */
-       cli
+       CLI(di)
 
        /* restore old context */
        movq    L_PCB(%r15),%rcx
@@ -174,7 +173,7 @@
  */
 ENTRY(softintr_ret)
        incl    CPUVAR(MTX_COUNT)       /* re-adjust after mi_switch */
-       cli
+       CLI(ax)         /* %rax not used by Xspllower/Xdoreti */
        jmp     *%r13                   /* back to Xspllower/Xdoreti */
 END(softintr_ret)
 
@@ -196,11 +195,11 @@
  */
 IDTVEC(recurse_preempt)
        movl    $IPL_PREEMPT,CPUVAR(ILEVEL)
-       sti
+       STI(di)
        xorq    %rdi,%rdi
        KMSAN_INIT_ARG(8)
        call    _C_LABEL(kpreempt)
-       cli
+       CLI(di)
        jmp     *%r13                   /* back to Xspllower */
 IDTVEC_END(recurse_preempt)
 
@@ -211,60 +210,29 @@
  */
 IDTVEC(resume_preempt)
        movl    $IPL_PREEMPT,CPUVAR(ILEVEL)
-       sti
+       STI(ax)
        testq   $SEL_RPL,TF_CS(%rsp)
        jnz     1f
        movq    TF_RIP(%rsp),%rdi
        KMSAN_INIT_ARG(8)
        call    _C_LABEL(kpreempt)      /* from kernel */



Home | Main Index | Thread Index | Old Index