|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] xen/cet: Fix __initconst_cf_clobber
commit 3e56754b08871ccceff856ff634731b9b9bccbbe
Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Wed Mar 2 20:27:46 2022 +0000
Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Thu Mar 3 11:21:35 2022 +0000
xen/cet: Fix __initconst_cf_clobber
The linker script collecting .init.rodata.* ahead of .init.rodata.cf_clobber
accidentally causes __initconst_cf_clobber to be a no-op.
Rearrange the linker script to unbreak this.
The IOMMU adjust_irq_affinities() hooks currently violate the safety
requirement for being cf_clobber, by also being plain __initcall()'s.
Consolidate to a single initcall using the iommu_adjust_irq_affinities()
wrapper (satisfying the cf_clobber safety requirement by using iommu_call()
under the hood), and also removes the dubious property that we'd call into
both vendors IOMMU drivers on boot, relying on the for_each_*() loops to be
empty for safety.
With this fixed, an all-enabled build of Xen has 1681 endbr64's in .text
with
382 (23%) being clobbered during boot.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
---
xen/arch/x86/xen.lds.S | 12 ++++++------
xen/drivers/passthrough/amd/iommu_init.c | 1 -
xen/drivers/passthrough/vtd/iommu.c | 1 -
xen/drivers/passthrough/x86/iommu.c | 6 ++++++
4 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S
index 83def6541e..b15e5b67e4 100644
--- a/xen/arch/x86/xen.lds.S
+++ b/xen/arch/x86/xen.lds.S
@@ -210,6 +210,12 @@ SECTIONS
DECL_SECTION(.init.data) {
#endif
+ . = ALIGN(POINTER_ALIGN);
+ __initdata_cf_clobber_start = .;
+ *(.init.data.cf_clobber)
+ *(.init.rodata.cf_clobber)
+ __initdata_cf_clobber_end = .;
+
*(.init.rodata)
*(.init.rodata.*)
@@ -224,12 +230,6 @@ SECTIONS
*(.initcall1.init)
__initcall_end = .;
- . = ALIGN(POINTER_ALIGN);
- __initdata_cf_clobber_start = .;
- *(.init.data.cf_clobber)
- *(.init.rodata.cf_clobber)
- __initdata_cf_clobber_end = .;
-
*(.init.data)
*(.init.data.rel)
*(.init.data.rel.*)
diff --git a/xen/drivers/passthrough/amd/iommu_init.c
b/xen/drivers/passthrough/amd/iommu_init.c
index 657c7f619a..2e5bffa732 100644
--- a/xen/drivers/passthrough/amd/iommu_init.c
+++ b/xen/drivers/passthrough/amd/iommu_init.c
@@ -831,7 +831,6 @@ int cf_check iov_adjust_irq_affinities(void)
return 0;
}
-__initcall(iov_adjust_irq_affinities);
/*
* Family15h Model 10h-1fh erratum 746 (IOMMU Logging May Stall Translations)
diff --git a/xen/drivers/passthrough/vtd/iommu.c
b/xen/drivers/passthrough/vtd/iommu.c
index 6a65ba1d82..f70d515806 100644
--- a/xen/drivers/passthrough/vtd/iommu.c
+++ b/xen/drivers/passthrough/vtd/iommu.c
@@ -2119,7 +2119,6 @@ static int cf_check adjust_vtd_irq_affinities(void)
return 0;
}
-__initcall(adjust_vtd_irq_affinities);
static int __must_check init_vtd_hw(bool resume)
{
diff --git a/xen/drivers/passthrough/x86/iommu.c
b/xen/drivers/passthrough/x86/iommu.c
index 58a422fb5f..57c7b26c1a 100644
--- a/xen/drivers/passthrough/x86/iommu.c
+++ b/xen/drivers/passthrough/x86/iommu.c
@@ -462,6 +462,12 @@ bool arch_iommu_use_permitted(const struct domain *d)
likely(!p2m_get_hostp2m(d)->global_logdirty));
}
+static int __init cf_check adjust_irq_affinities(void)
+{
+ return iommu_adjust_irq_affinities();
+}
+__initcall(adjust_irq_affinities);
+
/*
* Local variables:
* mode: C
--
generated by git-patchbot for /home/xen/git/xen.git#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |