hyperv: Deprecate HYPERV option by moving Hyper-V IDT vector into vmbus
Submitted by: Jun Su <junsu microsoft com> Reviewed by: jhb, kib, sephe Sponsored by: Microsoft OSTC Differential Revision: https://reviews.freebsd.org/D5910
This commit is contained in:
@@ -174,22 +174,6 @@ IDTVEC(xen_intr_upcall)
|
|||||||
jmp doreti
|
jmp doreti
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HYPERV
|
|
||||||
/*
|
|
||||||
* This is the Hyper-V vmbus channel direct callback interrupt.
|
|
||||||
* Only used when it is running on Hyper-V.
|
|
||||||
*/
|
|
||||||
.text
|
|
||||||
SUPERALIGN_TEXT
|
|
||||||
IDTVEC(hv_vmbus_callback)
|
|
||||||
PUSH_FRAME
|
|
||||||
FAKE_MCOUNT(TF_RIP(%rsp))
|
|
||||||
movq %rsp, %rdi
|
|
||||||
call hv_vector_handler
|
|
||||||
MEXITCOUNT
|
|
||||||
jmp doreti
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef SMP
|
#ifdef SMP
|
||||||
/*
|
/*
|
||||||
* Global address space TLB shootdown.
|
* Global address space TLB shootdown.
|
||||||
|
|||||||
@@ -350,8 +350,6 @@ device virtio_scsi # VirtIO SCSI device
|
|||||||
device virtio_balloon # VirtIO Memory Balloon device
|
device virtio_balloon # VirtIO Memory Balloon device
|
||||||
|
|
||||||
# HyperV drivers and enchancement support
|
# HyperV drivers and enchancement support
|
||||||
# NOTE: HYPERV depends on hyperv. They must be added or removed together.
|
|
||||||
options HYPERV # Hyper-V kernel infrastructure
|
|
||||||
device hyperv # HyperV drivers
|
device hyperv # HyperV drivers
|
||||||
|
|
||||||
# Xen HVM Guest Optimizations
|
# Xen HVM Guest Optimizations
|
||||||
|
|||||||
@@ -515,7 +515,6 @@ device virtio_random # VirtIO Entropy device
|
|||||||
device virtio_console # VirtIO Console device
|
device virtio_console # VirtIO Console device
|
||||||
|
|
||||||
# Microsoft Hyper-V enchancement support
|
# Microsoft Hyper-V enchancement support
|
||||||
options HYPERV # Hyper-V kernel infrastructure
|
|
||||||
device hyperv # HyperV drivers
|
device hyperv # HyperV drivers
|
||||||
|
|
||||||
# Xen HVM Guest Optimizations
|
# Xen HVM Guest Optimizations
|
||||||
|
|||||||
@@ -277,6 +277,7 @@ dev/hyperv/vmbus/hv_hv.c optional hyperv
|
|||||||
dev/hyperv/vmbus/hv_et.c optional hyperv
|
dev/hyperv/vmbus/hv_et.c optional hyperv
|
||||||
dev/hyperv/vmbus/hv_ring_buffer.c optional hyperv
|
dev/hyperv/vmbus/hv_ring_buffer.c optional hyperv
|
||||||
dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c optional hyperv
|
dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c optional hyperv
|
||||||
|
dev/hyperv/vmbus/amd64/hv_vector.S optional hyperv
|
||||||
dev/nfe/if_nfe.c optional nfe pci
|
dev/nfe/if_nfe.c optional nfe pci
|
||||||
dev/ntb/if_ntb/if_ntb.c optional if_ntb
|
dev/ntb/if_ntb/if_ntb.c optional if_ntb
|
||||||
dev/ntb/ntb_hw/ntb_hw.c optional if_ntb | ntb_hw
|
dev/ntb/ntb_hw/ntb_hw.c optional if_ntb | ntb_hw
|
||||||
|
|||||||
@@ -252,6 +252,7 @@ dev/hyperv/vmbus/hv_hv.c optional hyperv
|
|||||||
dev/hyperv/vmbus/hv_et.c optional hyperv
|
dev/hyperv/vmbus/hv_et.c optional hyperv
|
||||||
dev/hyperv/vmbus/hv_ring_buffer.c optional hyperv
|
dev/hyperv/vmbus/hv_ring_buffer.c optional hyperv
|
||||||
dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c optional hyperv
|
dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c optional hyperv
|
||||||
|
dev/hyperv/vmbus/i386/hv_vector.S optional hyperv
|
||||||
dev/ichwd/ichwd.c optional ichwd
|
dev/ichwd/ichwd.c optional ichwd
|
||||||
dev/if_ndis/if_ndis.c optional ndis
|
dev/if_ndis/if_ndis.c optional ndis
|
||||||
dev/if_ndis/if_ndis_pccard.c optional ndis pccard
|
dev/if_ndis/if_ndis_pccard.c optional ndis pccard
|
||||||
|
|||||||
@@ -63,7 +63,5 @@ BPF_JITTER opt_bpf.h
|
|||||||
|
|
||||||
XENHVM opt_global.h
|
XENHVM opt_global.h
|
||||||
|
|
||||||
HYPERV opt_global.h
|
|
||||||
|
|
||||||
# options for the Intel C600 SAS driver (isci)
|
# options for the Intel C600 SAS driver (isci)
|
||||||
ISCI_LOGGING opt_isci.h
|
ISCI_LOGGING opt_isci.h
|
||||||
|
|||||||
@@ -123,7 +123,5 @@ BPF_JITTER opt_bpf.h
|
|||||||
|
|
||||||
XENHVM opt_global.h
|
XENHVM opt_global.h
|
||||||
|
|
||||||
HYPERV opt_global.h
|
|
||||||
|
|
||||||
# options for the Intel C600 SAS driver (isci)
|
# options for the Intel C600 SAS driver (isci)
|
||||||
ISCI_LOGGING opt_isci.h
|
ISCI_LOGGING opt_isci.h
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
/*-
|
||||||
|
* Copyright (c) 2016 Microsoft Corp.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* 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 unmodified, 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.
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <machine/asmacros.h>
|
||||||
|
#include <machine/specialreg.h>
|
||||||
|
|
||||||
|
#include "assym.s"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is the Hyper-V vmbus channel direct callback interrupt.
|
||||||
|
* Only used when it is running on Hyper-V.
|
||||||
|
*/
|
||||||
|
.text
|
||||||
|
SUPERALIGN_TEXT
|
||||||
|
IDTVEC(hv_vmbus_callback)
|
||||||
|
PUSH_FRAME
|
||||||
|
FAKE_MCOUNT(TF_RIP(%rsp))
|
||||||
|
movq %rsp, %rdi
|
||||||
|
call hv_vector_handler
|
||||||
|
MEXITCOUNT
|
||||||
|
jmp doreti
|
||||||
@@ -370,9 +370,7 @@ vmbus_probe(device_t dev) {
|
|||||||
return (BUS_PROBE_DEFAULT);
|
return (BUS_PROBE_DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HYPERV
|
|
||||||
extern inthand_t IDTVEC(hv_vmbus_callback);
|
extern inthand_t IDTVEC(hv_vmbus_callback);
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Main vmbus driver initialization routine.
|
* @brief Main vmbus driver initialization routine.
|
||||||
@@ -406,14 +404,10 @@ vmbus_bus_init(void)
|
|||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HYPERV
|
|
||||||
/*
|
/*
|
||||||
* Find a free IDT slot for vmbus callback.
|
* Find a free IDT slot for vmbus callback.
|
||||||
*/
|
*/
|
||||||
hv_vmbus_g_context.hv_cb_vector = lapic_ipi_alloc(IDTVEC(hv_vmbus_callback));
|
hv_vmbus_g_context.hv_cb_vector = lapic_ipi_alloc(IDTVEC(hv_vmbus_callback));
|
||||||
#else
|
|
||||||
hv_vmbus_g_context.hv_cb_vector = -1;
|
|
||||||
#endif
|
|
||||||
if (hv_vmbus_g_context.hv_cb_vector < 0) {
|
if (hv_vmbus_g_context.hv_cb_vector < 0) {
|
||||||
if(bootverbose)
|
if(bootverbose)
|
||||||
printf("Error VMBUS: Cannot find free IDT slot for "
|
printf("Error VMBUS: Cannot find free IDT slot for "
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
/*-
|
||||||
|
* Copyright (c) 2016 Microsoft Corp.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* 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 unmodified, 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.
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <machine/asmacros.h>
|
||||||
|
#include <machine/specialreg.h>
|
||||||
|
|
||||||
|
#include "assym.s"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is the Hyper-V vmbus channel direct callback interrupt.
|
||||||
|
* Only used when it is running on Hyper-V.
|
||||||
|
*/
|
||||||
|
.text
|
||||||
|
SUPERALIGN_TEXT
|
||||||
|
IDTVEC(hv_vmbus_callback)
|
||||||
|
PUSH_FRAME
|
||||||
|
SET_KERNEL_SREGS
|
||||||
|
cld
|
||||||
|
FAKE_MCOUNT(TF_EIP(%esp))
|
||||||
|
pushl %esp
|
||||||
|
call hv_vector_handler
|
||||||
|
add $4, %esp
|
||||||
|
MEXITCOUNT
|
||||||
|
jmp doreti
|
||||||
@@ -367,8 +367,6 @@ device virtio_scsi # VirtIO SCSI device
|
|||||||
device virtio_balloon # VirtIO Memory Balloon device
|
device virtio_balloon # VirtIO Memory Balloon device
|
||||||
|
|
||||||
# HyperV drivers and enchancement support
|
# HyperV drivers and enchancement support
|
||||||
# NOTE: HYPERV depends on hyperv. They must be added or removed together.
|
|
||||||
options HYPERV # Hyper-V kernel infrastructure
|
|
||||||
device hyperv # HyperV drivers
|
device hyperv # HyperV drivers
|
||||||
|
|
||||||
# Xen HVM Guest Optimizations
|
# Xen HVM Guest Optimizations
|
||||||
|
|||||||
@@ -181,25 +181,6 @@ IDTVEC(xen_intr_upcall)
|
|||||||
jmp doreti
|
jmp doreti
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HYPERV
|
|
||||||
/*
|
|
||||||
* This is the Hyper-V vmbus channel direct callback interrupt.
|
|
||||||
* Only used when it is running on Hyper-V.
|
|
||||||
*/
|
|
||||||
.text
|
|
||||||
SUPERALIGN_TEXT
|
|
||||||
IDTVEC(hv_vmbus_callback)
|
|
||||||
PUSH_FRAME
|
|
||||||
SET_KERNEL_SREGS
|
|
||||||
cld
|
|
||||||
FAKE_MCOUNT(TF_EIP(%esp))
|
|
||||||
pushl %esp
|
|
||||||
call hv_vector_handler
|
|
||||||
add $4, %esp
|
|
||||||
MEXITCOUNT
|
|
||||||
jmp doreti
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef SMP
|
#ifdef SMP
|
||||||
/*
|
/*
|
||||||
* Global address space TLB shootdown.
|
* Global address space TLB shootdown.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# $FreeBSD$
|
# $FreeBSD$
|
||||||
|
|
||||||
.PATH: ${.CURDIR}/../../../dev/hyperv/vmbus \
|
.PATH: ${.CURDIR}/../../../dev/hyperv/vmbus \
|
||||||
${.CURDIR}/../../../dev/hyperv/utilities
|
${.CURDIR}/../../../dev/hyperv/vmbus/${MACHINE_CPUARCH}
|
||||||
|
|
||||||
KMOD= hv_vmbus
|
KMOD= hv_vmbus
|
||||||
SRCS= hv_channel.c \
|
SRCS= hv_channel.c \
|
||||||
@@ -14,8 +14,17 @@ SRCS= hv_channel.c \
|
|||||||
hv_vmbus_priv.h
|
hv_vmbus_priv.h
|
||||||
SRCS+= acpi_if.h bus_if.h device_if.h opt_acpi.h
|
SRCS+= acpi_if.h bus_if.h device_if.h opt_acpi.h
|
||||||
|
|
||||||
|
# XXX: for assym.s
|
||||||
|
SRCS+= opt_kstack_pages.h opt_nfs.h opt_apic.h opt_hwpmc_hooks.h opt_compat.h
|
||||||
|
|
||||||
|
SRCS+= assym.s \
|
||||||
|
hv_vector.S
|
||||||
|
|
||||||
|
hv_vector.o:
|
||||||
|
${CC} -c -x assembler-with-cpp -DLOCORE ${CFLAGS} \
|
||||||
|
${.IMPSRC} -o ${.TARGET}
|
||||||
|
|
||||||
CFLAGS+= -I${.CURDIR}/../../../dev/hyperv/include \
|
CFLAGS+= -I${.CURDIR}/../../../dev/hyperv/include \
|
||||||
-I${.CURDIR}/../../../dev/hyperv/vmbus \
|
-I${.CURDIR}/../../../dev/hyperv/vmbus
|
||||||
-I${.CURDIR}/../../../dev/hyperv/utilities
|
|
||||||
|
|
||||||
.include <bsd.kmod.mk>
|
.include <bsd.kmod.mk>
|
||||||
|
|||||||
Reference in New Issue
Block a user