[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250917145220.31064-18-jgross@suse.com>
Date: Wed, 17 Sep 2025 16:52:16 +0200
From: Juergen Gross <jgross@...e.com>
To: linux-kernel@...r.kernel.org,
x86@...nel.org
Cc: Juergen Gross <jgross@...e.com>,
Boris Ostrovsky <boris.ostrovsky@...cle.com>,
Thomas Gleixner <tglx@...utronix.de>,
Ingo Molnar <mingo@...hat.com>,
Borislav Petkov <bp@...en8.de>,
Dave Hansen <dave.hansen@...ux.intel.com>,
"H. Peter Anvin" <hpa@...or.com>,
Josh Poimboeuf <jpoimboe@...nel.org>,
Peter Zijlstra <peterz@...radead.org>,
xen-devel@...ts.xenproject.org
Subject: [PATCH v2 17/21] x86/xen: Drop xen_mmu_ops
Instead of having a pre-filled array xen_mmu_ops for Xen PV paravirt
functions, drop the array and assign each element individually.
Signed-off-by: Juergen Gross <jgross@...e.com>
---
V2:
- new patch
---
arch/x86/xen/mmu_pv.c | 100 ++++++++++++++++--------------------------
tools/objtool/check.c | 1 -
2 files changed, 38 insertions(+), 63 deletions(-)
diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c
index 2a4a8deaf612..9fa00c4a8858 100644
--- a/arch/x86/xen/mmu_pv.c
+++ b/arch/x86/xen/mmu_pv.c
@@ -2175,73 +2175,49 @@ static void xen_leave_lazy_mmu(void)
preempt_enable();
}
-static const typeof(pv_ops) xen_mmu_ops __initconst = {
- .mmu = {
- .read_cr2 = __PV_IS_CALLEE_SAVE(xen_read_cr2),
- .write_cr2 = xen_write_cr2,
-
- .read_cr3 = xen_read_cr3,
- .write_cr3 = xen_write_cr3_init,
-
- .flush_tlb_user = xen_flush_tlb,
- .flush_tlb_kernel = xen_flush_tlb,
- .flush_tlb_one_user = xen_flush_tlb_one_user,
- .flush_tlb_multi = xen_flush_tlb_multi,
-
- .pgd_alloc = xen_pgd_alloc,
- .pgd_free = xen_pgd_free,
-
- .alloc_pte = xen_alloc_pte_init,
- .release_pte = xen_release_pte_init,
- .alloc_pmd = xen_alloc_pmd_init,
- .release_pmd = xen_release_pmd_init,
-
- .set_pte = xen_set_pte_init,
- .set_pmd = xen_set_pmd_hyper,
-
- .ptep_modify_prot_start = xen_ptep_modify_prot_start,
- .ptep_modify_prot_commit = xen_ptep_modify_prot_commit,
-
- .pte_val = PV_CALLEE_SAVE(xen_pte_val),
- .pgd_val = PV_CALLEE_SAVE(xen_pgd_val),
-
- .make_pte = PV_CALLEE_SAVE(xen_make_pte_init),
- .make_pgd = PV_CALLEE_SAVE(xen_make_pgd),
-
- .set_pud = xen_set_pud_hyper,
-
- .make_pmd = PV_CALLEE_SAVE(xen_make_pmd),
- .pmd_val = PV_CALLEE_SAVE(xen_pmd_val),
-
- .pud_val = PV_CALLEE_SAVE(xen_pud_val),
- .make_pud = PV_CALLEE_SAVE(xen_make_pud),
- .set_p4d = xen_set_p4d_hyper,
-
- .alloc_pud = xen_alloc_pmd_init,
- .release_pud = xen_release_pmd_init,
-
- .p4d_val = PV_CALLEE_SAVE(xen_p4d_val),
- .make_p4d = PV_CALLEE_SAVE(xen_make_p4d),
-
- .enter_mmap = xen_enter_mmap,
- .exit_mmap = xen_exit_mmap,
-
- .lazy_mode = {
- .enter = xen_enter_lazy_mmu,
- .leave = xen_leave_lazy_mmu,
- .flush = xen_flush_lazy_mmu,
- },
-
- .set_fixmap = xen_set_fixmap,
- },
-};
-
void __init xen_init_mmu_ops(void)
{
x86_init.paging.pagetable_init = xen_pagetable_init;
x86_init.hyper.init_after_bootmem = xen_after_bootmem;
- pv_ops.mmu = xen_mmu_ops.mmu;
+ pv_ops.mmu.read_cr2 = __PV_IS_CALLEE_SAVE(xen_read_cr2);
+ pv_ops.mmu.write_cr2 = xen_write_cr2;
+ pv_ops.mmu.read_cr3 = xen_read_cr3;
+ pv_ops.mmu.write_cr3 = xen_write_cr3_init;
+ pv_ops.mmu.flush_tlb_user = xen_flush_tlb;
+ pv_ops.mmu.flush_tlb_kernel = xen_flush_tlb;
+ pv_ops.mmu.flush_tlb_one_user = xen_flush_tlb_one_user;
+ pv_ops.mmu.flush_tlb_multi = xen_flush_tlb_multi;
+ pv_ops.mmu.pgd_alloc = xen_pgd_alloc;
+ pv_ops.mmu.pgd_free = xen_pgd_free;
+ pv_ops.mmu.alloc_pte = xen_alloc_pte_init;
+ pv_ops.mmu.release_pte = xen_release_pte_init;
+ pv_ops.mmu.alloc_pmd = xen_alloc_pmd_init;
+ pv_ops.mmu.release_pmd = xen_release_pmd_init;
+ pv_ops.mmu.set_pte = xen_set_pte_init;
+ pv_ops.mmu.set_pmd = xen_set_pmd_hyper;
+ pv_ops.mmu.ptep_modify_prot_start = xen_ptep_modify_prot_start;
+ pv_ops.mmu.ptep_modify_prot_commit = xen_ptep_modify_prot_commit;
+ pv_ops.mmu.pte_val = PV_CALLEE_SAVE(xen_pte_val);
+ pv_ops.mmu.pgd_val = PV_CALLEE_SAVE(xen_pgd_val);
+ pv_ops.mmu.make_pte = PV_CALLEE_SAVE(xen_make_pte_init);
+ pv_ops.mmu.make_pgd = PV_CALLEE_SAVE(xen_make_pgd);
+ pv_ops.mmu.set_pud = xen_set_pud_hyper;
+ pv_ops.mmu.make_pmd = PV_CALLEE_SAVE(xen_make_pmd);
+ pv_ops.mmu.pmd_val = PV_CALLEE_SAVE(xen_pmd_val);
+ pv_ops.mmu.pud_val = PV_CALLEE_SAVE(xen_pud_val);
+ pv_ops.mmu.make_pud = PV_CALLEE_SAVE(xen_make_pud);
+ pv_ops.mmu.set_p4d = xen_set_p4d_hyper;
+ pv_ops.mmu.alloc_pud = xen_alloc_pmd_init;
+ pv_ops.mmu.release_pud = xen_release_pmd_init;
+ pv_ops.mmu.p4d_val = PV_CALLEE_SAVE(xen_p4d_val);
+ pv_ops.mmu.make_p4d = PV_CALLEE_SAVE(xen_make_p4d);
+ pv_ops.mmu.enter_mmap = xen_enter_mmap;
+ pv_ops.mmu.exit_mmap = xen_exit_mmap;
+ pv_ops.mmu.lazy_mode.enter = xen_enter_lazy_mmu;
+ pv_ops.mmu.lazy_mode.leave = xen_leave_lazy_mmu;
+ pv_ops.mmu.lazy_mode.flush = xen_flush_lazy_mmu;
+ pv_ops.mmu.set_fixmap = xen_set_fixmap;
memset(dummy_mapping, 0xff, PAGE_SIZE);
}
diff --git a/tools/objtool/check.c b/tools/objtool/check.c
index c2a3079fe5f8..e2736b462c90 100644
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -592,7 +592,6 @@ static int init_pv_ops(struct objtool_file *file)
{
static const char *pv_ops_tables[] = {
"pv_ops",
- "xen_mmu_ops",
NULL,
};
const char *pv_ops;
--
2.51.0
Powered by blists - more mailing lists