Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F107197271
D46072.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
8 KB
Referenced Files
None
Subscribers
None
D46072.diff
View Options
diff --git a/sys/arm64/vmm/vmm_hyp.c b/sys/arm64/vmm/vmm_hyp.c
--- a/sys/arm64/vmm/vmm_hyp.c
+++ b/sys/arm64/vmm/vmm_hyp.c
@@ -41,7 +41,7 @@
uint64_t vmm_hyp_enter(uint64_t, uint64_t, uint64_t, uint64_t, uint64_t,
uint64_t, uint64_t, uint64_t);
-uint64_t vmm_enter_guest(struct hypctx *);
+uint64_t VMM_HYP_FUNC(do_call_guest)(struct hypctx *);
static void
vmm_hyp_reg_store(struct hypctx *hypctx, struct hyp *hyp, bool guest)
@@ -496,7 +496,7 @@
WRITE_SPECIALREG(mdcr_el2, hypctx->mdcr_el2);
/* Call into the guest */
- ret = vmm_enter_guest(hypctx);
+ ret = VMM_HYP_FUNC(do_call_guest)(hypctx);
WRITE_SPECIALREG(mdcr_el2, host_hypctx.mdcr_el2);
isb();
@@ -566,8 +566,20 @@
return (ret);
}
-static uint64_t
-vmm_hyp_read_reg(uint64_t reg)
+VMM_STATIC uint64_t
+VMM_HYP_FUNC(enter_guest)(struct hyp *hyp, struct hypctx *hypctx)
+{
+ uint64_t ret;
+
+ do {
+ ret = vmm_hyp_call_guest(hyp, hypctx);
+ } while (ret == EXCP_TYPE_REENTER);
+
+ return (ret);
+}
+
+VMM_STATIC uint64_t
+VMM_HYP_FUNC(read_reg)(uint64_t reg)
{
switch (reg) {
case HYP_REG_ICH_VTR:
@@ -579,18 +591,16 @@
return (0);
}
-static int
-vmm_clean_s2_tlbi(void)
+VMM_STATIC void
+VMM_HYP_FUNC(clean_s2_tlbi)(void)
{
dsb(ishst);
__asm __volatile("tlbi alle1is");
dsb(ish);
-
- return (0);
}
-static int
-vm_s2_tlbi_range(uint64_t vttbr, vm_offset_t sva, vm_size_t eva,
+VMM_STATIC void
+VMM_HYP_FUNC(s2_tlbi_range)(uint64_t vttbr, vm_offset_t sva, vm_offset_t eva,
bool final_only)
{
uint64_t end, r, start;
@@ -634,12 +644,10 @@
/* Switch back t othe host vttbr */
WRITE_SPECIALREG(vttbr_el2, host_vttbr);
isb();
-
- return (0);
}
-static int
-vm_s2_tlbi_all(uint64_t vttbr)
+VMM_STATIC void
+VMM_HYP_FUNC(s2_tlbi_all)(uint64_t vttbr)
{
uint64_t host_vttbr;
@@ -656,8 +664,6 @@
/* Switch back t othe host vttbr */
WRITE_SPECIALREG(vttbr_el2, host_vttbr);
isb();
-
- return (0);
}
static int
@@ -705,27 +711,25 @@
vmm_hyp_enter(uint64_t handle, uint64_t x1, uint64_t x2, uint64_t x3,
uint64_t x4, uint64_t x5, uint64_t x6, uint64_t x7)
{
- uint64_t ret;
-
switch (handle) {
case HYP_ENTER_GUEST:
- do {
- ret = vmm_hyp_call_guest((struct hyp *)x1,
- (struct hypctx *)x2);
- } while (ret == EXCP_TYPE_REENTER);
- return (ret);
+ return (VMM_HYP_FUNC(enter_guest)((struct hyp *)x1,
+ (struct hypctx *)x2));
case HYP_READ_REGISTER:
- return (vmm_hyp_read_reg(x1));
+ return (VMM_HYP_FUNC(read_reg)(x1));
case HYP_CLEAN_S2_TLBI:
- return (vmm_clean_s2_tlbi());
+ VMM_HYP_FUNC(clean_s2_tlbi());
+ return (0);
case HYP_DC_CIVAC:
return (vmm_dc_civac(x1, x2));
case HYP_EL2_TLBI:
return (vmm_el2_tlbi(x1, x2, x3));
case HYP_S2_TLBI_RANGE:
- return (vm_s2_tlbi_range(x1, x2, x3, x4));
+ VMM_HYP_FUNC(s2_tlbi_range)(x1, x2, x3, x4);
+ return (0);
case HYP_S2_TLBI_ALL:
- return (vm_s2_tlbi_all(x1));
+ VMM_HYP_FUNC(s2_tlbi_all)(x1);
+ return (0);
case HYP_CLEANUP: /* Handled in vmm_hyp_exception.S */
default:
break;
diff --git a/sys/arm64/vmm/vmm_hyp_exception.S b/sys/arm64/vmm/vmm_hyp_exception.S
--- a/sys/arm64/vmm/vmm_hyp_exception.S
+++ b/sys/arm64/vmm/vmm_hyp_exception.S
@@ -349,12 +349,12 @@
/*
* Usage:
- * uint64_t vmm_enter_guest(struct hypctx *hypctx)
+ * uint64_t vmm_do_call_guest(struct hypctx *hypctx)
*
* Expecting:
* x0 - hypctx address
*/
-ENTRY(vmm_enter_guest)
+ENTRY(VMM_HYP_FUNC(do_call_guest))
/* Save hypctx address */
msr tpidr_el2, x0
@@ -363,7 +363,7 @@
/* Enter guest */
ERET
-END(vmm_enter_guest)
+END(VMM_HYP_FUNC(do_call_guest))
/*
* Usage:
diff --git a/sys/arm64/vmm/vmm_nvhe.c b/sys/arm64/vmm/vmm_nvhe.c
new file mode 100644
--- /dev/null
+++ b/sys/arm64/vmm/vmm_nvhe.c
@@ -0,0 +1,31 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2024 Arm Ltd
+ *
+ * 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, 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 AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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.
+ */
+
+#define VMM_STATIC static
+#define VMM_HYP_FUNC(func) vmm_nvhe_ ## func
+
+#include "vmm_hyp.c"
diff --git a/sys/arm64/vmm/vmm_nvhe_exception.S b/sys/arm64/vmm/vmm_nvhe_exception.S
new file mode 100644
--- /dev/null
+++ b/sys/arm64/vmm/vmm_nvhe_exception.S
@@ -0,0 +1,30 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2024 Arm Ltd
+ *
+ * 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, 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 AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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.
+ */
+
+#define VMM_HYP_FUNC(func) vmm_nvhe_ ## func
+
+#include "vmm_hyp_exception.S"
diff --git a/sys/conf/files.arm64 b/sys/conf/files.arm64
--- a/sys/conf/files.arm64
+++ b/sys/conf/files.arm64
@@ -123,14 +123,14 @@
arm64/vmm/vmm_arm64.c optional vmm
arm64/vmm/vmm_reset.c optional vmm
arm64/vmm/vmm_call.S optional vmm
-arm64/vmm/vmm_hyp_exception.S optional vmm \
+arm64/vmm/vmm_nvhe_exception.S optional vmm \
compile-with "${NOSAN_C:N-mbranch-protection*} -fpie" \
no-obj
-arm64/vmm/vmm_hyp.c optional vmm \
+arm64/vmm/vmm_nvhe.c optional vmm \
compile-with "${NOSAN_C:N-mbranch-protection*} -fpie" \
no-obj
vmm_hyp_blob.elf.full optional vmm \
- dependency "vmm_hyp.o vmm_hyp_exception.o" \
+ dependency "vmm_nvhe.o vmm_hyp_exception.o" \
compile-with "${SYSTEM_LD_BASECMD} -o ${.TARGET} ${.ALLSRC} --defsym=_start='0x0' --defsym=text_start='0x0'" \
no-obj no-implicit-rule
vmm_hyp_blob.elf optional vmm \
diff --git a/sys/modules/vmm/Makefile b/sys/modules/vmm/Makefile
--- a/sys/modules/vmm/Makefile
+++ b/sys/modules/vmm/Makefile
@@ -38,19 +38,20 @@
vgic_v3.c \
vtimer.c
-CLEANFILES+= vmm_hyp_exception.o vmm_hyp.o
+CLEANFILES+= vmm_nvhe_exception.o vmm_nvhe.o
+
CLEANFILES+= vmm_hyp_blob.elf.full
CLEANFILES+= vmm_hyp_blob.elf vmm_hyp_blob.bin
-vmm_hyp_exception.o: vmm_hyp_exception.S
+vmm_nvhe_exception.o: vmm_nvhe_exception.S
${CC} -c -x assembler-with-cpp -DLOCORE \
${NOSAN_CFLAGS:N-mbranch-protection*} ${.IMPSRC} -o ${.TARGET} -fpie
-vmm_hyp.o: vmm_hyp.c
+vmm_nvhe.o: vmm_nvhe.c
${CC} -c ${NOSAN_CFLAGS:N-mbranch-protection*} ${.IMPSRC} \
-o ${.TARGET} -fpie
-vmm_hyp_blob.elf.full: vmm_hyp_exception.o vmm_hyp.o
+vmm_hyp_blob.elf.full: vmm_nvhe_exception.o vmm_nvhe.o
${LD} -m ${LD_EMULATION} -Bdynamic -L ${SYSDIR}/conf -T ${SYSDIR}/conf/ldscript.arm64 \
${_LDFLAGS:N-zbti-report*} --no-warn-mismatch --warn-common --export-dynamic \
--dynamic-linker /red/herring -X -o ${.TARGET} ${.ALLSRC} \
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Jan 12, 12:52 PM (20 h, 49 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15769517
Default Alt Text
D46072.diff (8 KB)
Attached To
Mode
D46072: arm64/vmm: Start to extract code not needed by VHE
Attached
Detach File
Event Timeline
Log In to Comment