Date: Wed, 9 Jun 2021 12:36:49 +0200 From: Mateusz Guzik <mjguzik@gmail.com> To: Mark Johnston <markj@freebsd.org> Cc: src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Subject: Re: git: 97993d1ebf59 - main - hyperv: Fix vmbus after the i386 4/4 split Message-ID: <CAGudoHF9S-=V--yTawSiNkwZtF6xWoJk%2B6A7Ryr4cGJQYaosow@mail.gmail.com> In-Reply-To: <202106081350.158DoTmi096312@gitrepo.freebsd.org> References: <202106081350.158DoTmi096312@gitrepo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
This breaks i386 LINT kernels: ld: error: undefined symbol: Xvmbus_isr >>> referenced by vmbus.c >>> vmbus.o:(vmbus_intrhook) ld: error: undefined symbol: Xvmbus_isr_pti >>> referenced by vmbus.c >>> vmbus.o:(vmbus_intrhook) On 6/8/21, Mark Johnston <markj@freebsd.org> wrote: > The branch main has been updated by markj: > > URL: > https://cgit.FreeBSD.org/src/commit/?id=97993d1ebf592ac6689a498d5d0d2afb46758680 > > commit 97993d1ebf592ac6689a498d5d0d2afb46758680 > Author: Mark Johnston <markj@FreeBSD.org> > AuthorDate: 2021-06-08 13:40:30 +0000 > Commit: Mark Johnston <markj@FreeBSD.org> > CommitDate: 2021-06-08 13:40:30 +0000 > > hyperv: Fix vmbus after the i386 4/4 split > > The vmbus ISR needs to live in a trampoline. Dynamically allocating a > trampoline at driver initialization time poses some difficulties due to > the fact that the KENTER macro assumes that the offset relative to > tramp_idleptd is fixed at static link time. Another problem is that > native_lapic_ipi_alloc() uses setidt(), which assumes a fixed > trampoline > offset. > > Rather than fight this, move the Hyper-V ISR to i386/exception.s. Add > a > new HYPERV kernel option to make this optional, and configure it by > default on i386. This is sufficient to make use of vmbus(4) after the > 4/4 split. Note that vmbus cannot be loaded dynamically and both the > HYPERV option and device must be configured together. I think this is > not too onerous a requirement, since vmbus(4) was previously > non-functional. > > Reported by: Harry Schmalzbauer <freebsd@omnilan.de> > Tested by: Harry Schmalzbauer <freebsd@omnilan.de> > Reviewed by: whu, kib > MFC after: 2 weeks > Sponsored by: The FreeBSD Foundation > Differential Revision: https://reviews.freebsd.org/D30577 > --- > sys/conf/files.i386 | 1 - > sys/conf/options.i386 | 3 +++ > sys/dev/hyperv/vmbus/i386/vmbus_vector.S | 6 +++++- > sys/i386/conf/GENERIC | 4 +++- > sys/i386/i386/exception.s | 9 +++++++++ > sys/modules/hyperv/vmbus/Makefile | 5 ++++- > 6 files changed, 24 insertions(+), 4 deletions(-) > > diff --git a/sys/conf/files.i386 b/sys/conf/files.i386 > index 331ad5fec79a..10e286dae271 100644 > --- a/sys/conf/files.i386 > +++ b/sys/conf/files.i386 > @@ -102,7 +102,6 @@ dev/glxiic/glxiic.c optional glxiic > dev/glxsb/glxsb.c optional glxsb > dev/glxsb/glxsb_hash.c optional glxsb > dev/hyperv/vmbus/i386/hyperv_machdep.c optional hyperv > -dev/hyperv/vmbus/i386/vmbus_vector.S optional hyperv > dev/le/if_le_isa.c optional le isa > dev/nctgpio/nctgpio.c optional nctgpio > dev/nfe/if_nfe.c optional nfe pci > diff --git a/sys/conf/options.i386 b/sys/conf/options.i386 > index 4249fa1dfd0a..5e7ea446089b 100644 > --- a/sys/conf/options.i386 > +++ b/sys/conf/options.i386 > @@ -101,6 +101,9 @@ NPX_DEBUG opt_npx.h > # BPF just-in-time compiler > BPF_JITTER opt_bpf.h > > +# Hyper-V support > +HYPERV opt_hyperv.h > + > XENHVM opt_global.h > > # options for the Intel C600 SAS driver (isci) > diff --git a/sys/dev/hyperv/vmbus/i386/vmbus_vector.S > b/sys/dev/hyperv/vmbus/i386/vmbus_vector.S > index 0570c6b49e1c..d119cfdc5b12 100644 > --- a/sys/dev/hyperv/vmbus/i386/vmbus_vector.S > +++ b/sys/dev/hyperv/vmbus/i386/vmbus_vector.S > @@ -35,6 +35,9 @@ > /* > * This is the Hyper-V vmbus channel direct callback interrupt. > * Only used when it is running on Hyper-V. > + * > + * Note that this file is not compiled directly, it is included into > + * i386/exception.s. > */ > .text > SUPERALIGN_TEXT > @@ -45,6 +48,7 @@ IDTVEC(vmbus_isr) > cld > KENTER > pushl %esp > - call vmbus_handle_intr > + mov $vmbus_handle_intr, %eax > + call *%eax > add $4, %esp > jmp doreti > diff --git a/sys/i386/conf/GENERIC b/sys/i386/conf/GENERIC > index 1b4d853fe1d4..288968d84af1 100644 > --- a/sys/i386/conf/GENERIC > +++ b/sys/i386/conf/GENERIC > @@ -339,7 +339,9 @@ device virtio_scsi # VirtIO SCSI device > device virtio_balloon # VirtIO Memory Balloon device > > # HyperV drivers and enhancement support > -device hyperv # HyperV drivers > +# NOTE: HYPERV depends on hyperv. They must be added or removed together. > +options HYPERV # Kernel support for HyperV drivers > +device hyperv # HyperV drivers > > # Xen HVM Guest Optimizations > # NOTE: XENHVM depends on xenpci. They must be added or removed together. > diff --git a/sys/i386/i386/exception.s b/sys/i386/i386/exception.s > index 6989d3e2828a..f47ab92f1987 100644 > --- a/sys/i386/i386/exception.s > +++ b/sys/i386/i386/exception.s > @@ -39,6 +39,7 @@ > #include "opt_apic.h" > #include "opt_atpic.h" > #include "opt_hwpmc_hooks.h" > +#include "opt_hyperv.h" > > #include "assym.inc" > > @@ -404,6 +405,14 @@ ENTRY(fork_trampoline) > > #ifdef DEV_APIC > #include <i386/i386/apic_vector.s> > +#endif > + > +#ifdef HYPERV > + .data > + .p2align 4 > + .text > + SUPERALIGN_TEXT > +#include <dev/hyperv/vmbus/i386/vmbus_vector.S> > #endif > > .data > diff --git a/sys/modules/hyperv/vmbus/Makefile > b/sys/modules/hyperv/vmbus/Makefile > index 435106c7e9bd..47a83e76204a 100644 > --- a/sys/modules/hyperv/vmbus/Makefile > +++ b/sys/modules/hyperv/vmbus/Makefile > @@ -13,8 +13,11 @@ SRCS= hyperv.c \ > vmbus_et.c \ > vmbus_if.c \ > vmbus_res.c \ > - vmbus_vector.S \ > vmbus_xact.c > + > +.if ${MACHINE_CPUARCH} != "i386" > +SRCS+= vmbus_vector.S > +.endif > SRCS+= acpi_if.h bus_if.h device_if.h opt_acpi.h pci_if.h pcib_if.h > vmbus_if.h > > # XXX: for assym.inc > -- Mateusz Guzik <mjguzik gmail.com>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGudoHF9S-=V--yTawSiNkwZtF6xWoJk%2B6A7Ryr4cGJQYaosow>