]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
hyperv: Fix vmbus after the i386 4/4 split
authorMark Johnston <markj@FreeBSD.org>
Tue, 8 Jun 2021 13:40:30 +0000 (09:40 -0400)
committerMark Johnston <markj@FreeBSD.org>
Tue, 8 Jun 2021 13:40:30 +0000 (09:40 -0400)
commit97993d1ebf592ac6689a498d5d0d2afb46758680
treedbcb009cb8705c469011cb169ea8f583cf046c20
parent61814702398ce29430b2bef75cbdd6fd2c07ad12
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
sys/conf/options.i386
sys/dev/hyperv/vmbus/i386/vmbus_vector.S
sys/i386/conf/GENERIC
sys/i386/i386/exception.s
sys/modules/hyperv/vmbus/Makefile