[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[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@xxxxxxxx>
---
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




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.