mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-12-03 14:48:57 +00:00
MFC 297931,298022
297931 Expose doreti as a global symbol on amd64 and i386. doreti provides the common code path for returning from interrupt andlers on x86. Exposing doreti as a global symbol allows kernel modules to include low-level interrupt handlers instead of requiring all low-level handlers to be statically compiled into the kernel. Submitted by: Howard Su <howard0su@gmail.com> Reviewed by: kib 298022 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:
parent
1b107df2d5
commit
95188920f6
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/stable/10/; revision=302041
@ -150,22 +150,6 @@ IDTVEC(xen_intr_upcall)
|
||||
jmp doreti
|
||||
#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
|
||||
/*
|
||||
* Global address space TLB shootdown.
|
||||
|
@ -661,6 +661,7 @@ MCOUNT_LABEL(eintr)
|
||||
.text
|
||||
SUPERALIGN_TEXT
|
||||
.type doreti,@function
|
||||
.globl doreti
|
||||
doreti:
|
||||
FAKE_MCOUNT($bintr) /* init "from" bintr -> doreti */
|
||||
/*
|
||||
|
@ -353,7 +353,6 @@ device virtio_scsi # VirtIO SCSI device
|
||||
device virtio_balloon # VirtIO Memory Balloon device
|
||||
|
||||
# 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
|
||||
|
||||
|
@ -278,6 +278,7 @@ dev/hyperv/vmbus/hv_hv.c optional hyperv
|
||||
dev/hyperv/vmbus/hv_et.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/amd64/hv_vector.S optional hyperv
|
||||
dev/kbd/kbd.c optional atkbd | sc | ukbd | vt
|
||||
dev/lindev/full.c optional lindev
|
||||
dev/lindev/lindev.c optional lindev
|
||||
|
@ -254,6 +254,7 @@ dev/hyperv/vmbus/hv_hv.c optional hyperv
|
||||
dev/hyperv/vmbus/hv_et.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/i386/hv_vector.S optional hyperv
|
||||
dev/ichwd/ichwd.c optional ichwd
|
||||
dev/if_ndis/if_ndis.c optional ndis
|
||||
dev/if_ndis/if_ndis_pccard.c optional ndis pccard
|
||||
|
46
sys/dev/hyperv/vmbus/amd64/hv_vector.S
Normal file
46
sys/dev/hyperv/vmbus/amd64/hv_vector.S
Normal file
@ -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,7 +370,6 @@ vmbus_probe(device_t dev) {
|
||||
return (BUS_PROBE_DEFAULT);
|
||||
}
|
||||
|
||||
#ifdef HYPERV
|
||||
extern inthand_t IDTVEC(rsvd), IDTVEC(hv_vmbus_callback);
|
||||
|
||||
/**
|
||||
@ -430,21 +429,6 @@ vmbus_vector_free(int vector)
|
||||
setidt(vector, IDTVEC(rsvd), SDT_SYSIGT, SEL_KPL, 0);
|
||||
}
|
||||
|
||||
#else /* HYPERV */
|
||||
|
||||
static int
|
||||
vmbus_vector_alloc(void)
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
|
||||
static void
|
||||
vmbus_vector_free(int vector)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* HYPERV */
|
||||
|
||||
static void
|
||||
vmbus_cpuset_setthread_task(void *xmask, int pending __unused)
|
||||
{
|
||||
|
49
sys/dev/hyperv/vmbus/i386/hv_vector.S
Normal file
49
sys/dev/hyperv/vmbus/i386/hv_vector.S
Normal file
@ -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
|
@ -362,7 +362,6 @@ device virtio_scsi # VirtIO SCSI device
|
||||
device virtio_balloon # VirtIO Memory Balloon device
|
||||
|
||||
# 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
|
||||
|
||||
|
@ -157,25 +157,6 @@ IDTVEC(xen_intr_upcall)
|
||||
jmp doreti
|
||||
#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
|
||||
/*
|
||||
* Global address space TLB shootdown.
|
||||
|
@ -344,6 +344,7 @@ MCOUNT_LABEL(eintr)
|
||||
.text
|
||||
SUPERALIGN_TEXT
|
||||
.type doreti,@function
|
||||
.globl doreti
|
||||
doreti:
|
||||
FAKE_MCOUNT($bintr) /* init "from" bintr -> doreti */
|
||||
doreti_next:
|
||||
|
@ -1,7 +1,7 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.PATH: ${.CURDIR}/../../../dev/hyperv/vmbus \
|
||||
${.CURDIR}/../../../dev/hyperv/utilities
|
||||
${.CURDIR}/../../../dev/hyperv/vmbus/${MACHINE_CPUARCH}
|
||||
|
||||
KMOD= hv_vmbus
|
||||
SRCS= hv_channel.c \
|
||||
@ -14,8 +14,17 @@ SRCS= hv_channel.c \
|
||||
hv_vmbus_priv.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 \
|
||||
-I${.CURDIR}/../../../dev/hyperv/vmbus \
|
||||
-I${.CURDIR}/../../../dev/hyperv/utilities
|
||||
-I${.CURDIR}/../../../dev/hyperv/vmbus
|
||||
|
||||
.include <bsd.kmod.mk>
|
||||
|
Loading…
Reference in New Issue
Block a user