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

[Xen-devel] [PATCH 10/10] paravirt: merge pv_ops_* structures into one



As there are now only very few pvops functions left when
CONFIG_PARAVIRT_FULL isn't set, merge the related structures into
one named "pv_ops".

Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
---
 arch/x86/include/asm/paravirt.h       | 32 ++++++++++++++++----------------
 arch/x86/include/asm/paravirt_types.h | 27 ++++-----------------------
 arch/x86/kernel/alternative.c         |  4 ++--
 arch/x86/kernel/asm-offsets.c         |  6 +++---
 arch/x86/kernel/cpu/vmware.c          |  6 +++---
 arch/x86/kernel/kvm.c                 |  6 +++---
 arch/x86/kernel/kvmclock.c            |  6 +++---
 arch/x86/kernel/paravirt.c            | 33 +++++----------------------------
 arch/x86/kernel/paravirt_patch_32.c   | 16 ++++++++--------
 arch/x86/kernel/paravirt_patch_64.c   | 16 ++++++++--------
 arch/x86/kernel/tsc.c                 |  2 +-
 arch/x86/kernel/vsmp_64.c             | 18 +++++++++---------
 arch/x86/lguest/boot.c                | 20 ++++++++++----------
 arch/x86/xen/enlighten_hvm.c          |  4 ++--
 arch/x86/xen/enlighten_pv.c           | 28 ++++++++++++----------------
 arch/x86/xen/irq.c                    | 12 ++++--------
 arch/x86/xen/mmu_hvm.c                |  2 +-
 arch/x86/xen/mmu_pv.c                 |  4 ++--
 arch/x86/xen/time.c                   | 11 ++++-------
 drivers/xen/time.c                    |  2 +-
 20 files changed, 101 insertions(+), 154 deletions(-)

diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
index 55e0c1807df2..0f8194ec64c9 100644
--- a/arch/x86/include/asm/paravirt.h
+++ b/arch/x86/include/asm/paravirt.h
@@ -28,7 +28,7 @@ static inline enum paravirt_lazy_mode 
paravirt_get_lazy_mode(void)
 
 static inline unsigned long long paravirt_sched_clock(void)
 {
-       return PVOP_CALL0(unsigned long long, pv_time_ops.sched_clock);
+       return PVOP_CALL0(unsigned long long, pv_ops.sched_clock);
 }
 
 struct static_key;
@@ -37,23 +37,23 @@ extern struct static_key paravirt_steal_rq_enabled;
 
 static inline u64 paravirt_steal_clock(int cpu)
 {
-       return PVOP_CALL1(u64, pv_time_ops.steal_clock, cpu);
+       return PVOP_CALL1(u64, pv_ops.steal_clock, cpu);
 }
 
 /* The paravirtualized I/O functions */
 static inline void slow_down_io(void)
 {
-       pv_cpu_ops.io_delay();
+       pv_ops.io_delay();
 #ifdef REALLY_SLOW_IO
-       pv_cpu_ops.io_delay();
-       pv_cpu_ops.io_delay();
-       pv_cpu_ops.io_delay();
+       pv_ops.io_delay();
+       pv_ops.io_delay();
+       pv_ops.io_delay();
 #endif
 }
 
 static inline void paravirt_arch_exit_mmap(struct mm_struct *mm)
 {
-       PVOP_VCALL1(pv_mmu_ops.exit_mmap, mm);
+       PVOP_VCALL1(pv_ops.exit_mmap, mm);
 }
 
 static inline void flush_tlb_others(const struct cpumask *cpumask,
@@ -61,7 +61,7 @@ static inline void flush_tlb_others(const struct cpumask 
*cpumask,
                                    unsigned long start,
                                    unsigned long end)
 {
-       PVOP_VCALL4(pv_mmu_ops.flush_tlb_others, cpumask, mm, start, end);
+       PVOP_VCALL4(pv_ops.flush_tlb_others, cpumask, mm, start, end);
 }
 
 #if defined(CONFIG_SMP) && defined(CONFIG_PARAVIRT_SPINLOCKS)
@@ -173,22 +173,22 @@ static __always_inline bool pv_vcpu_is_preempted(long cpu)
 
 static inline notrace unsigned long arch_local_save_flags(void)
 {
-       return PVOP_CALLEE0(unsigned long, pv_irq_ops.save_fl);
+       return PVOP_CALLEE0(unsigned long, pv_ops.save_fl);
 }
 
 static inline notrace void arch_local_irq_restore(unsigned long f)
 {
-       PVOP_VCALLEE1(pv_irq_ops.restore_fl, f);
+       PVOP_VCALLEE1(pv_ops.restore_fl, f);
 }
 
 static inline notrace void arch_local_irq_disable(void)
 {
-       PVOP_VCALLEE0(pv_irq_ops.irq_disable);
+       PVOP_VCALLEE0(pv_ops.irq_disable);
 }
 
 static inline notrace void arch_local_irq_enable(void)
 {
-       PVOP_VCALLEE0(pv_irq_ops.irq_enable);
+       PVOP_VCALLEE0(pv_ops.irq_enable);
 }
 
 static inline notrace unsigned long arch_local_irq_save(void)
@@ -286,15 +286,15 @@ extern void default_banner(void);
 #endif
 
 #define DISABLE_INTERRUPTS(clobbers)                                   \
-       PARA_SITE(PARA_PATCH(pv_irq_ops, PV_IRQ_irq_disable), clobbers, \
+       PARA_SITE(PARA_PATCH(pv_ops, PV_IRQ_irq_disable), clobbers,     \
                  PV_SAVE_REGS(clobbers | CLBR_CALLEE_SAVE);            \
-                 call PARA_INDIRECT(pv_irq_ops+PV_IRQ_irq_disable);    \
+                 call PARA_INDIRECT(pv_ops+PV_IRQ_irq_disable);        \
                  PV_RESTORE_REGS(clobbers | CLBR_CALLEE_SAVE);)
 
 #define ENABLE_INTERRUPTS(clobbers)                                    \
-       PARA_SITE(PARA_PATCH(pv_irq_ops, PV_IRQ_irq_enable), clobbers,  \
+       PARA_SITE(PARA_PATCH(pv_ops, PV_IRQ_irq_enable), clobbers,      \
                  PV_SAVE_REGS(clobbers | CLBR_CALLEE_SAVE);            \
-                 call PARA_INDIRECT(pv_irq_ops+PV_IRQ_irq_enable);     \
+                 call PARA_INDIRECT(pv_ops+PV_IRQ_irq_enable);         \
                  PV_RESTORE_REGS(clobbers | CLBR_CALLEE_SAVE);)
 
 #endif /* __ASSEMBLY__ */
diff --git a/arch/x86/include/asm/paravirt_types.h 
b/arch/x86/include/asm/paravirt_types.h
index 34753d10ebbc..833529661acb 100644
--- a/arch/x86/include/asm/paravirt_types.h
+++ b/arch/x86/include/asm/paravirt_types.h
@@ -65,11 +65,9 @@ struct paravirt_callee_save {
 #endif
 
 /* general info */
-struct pv_info {
+struct pv_ops {
        const char *name;
-};
 
-struct pv_init_ops {
        /*
         * Patch may replace one of the defined code sequences with
         * arbitrary code, subject to the same register constraints.
@@ -80,18 +78,12 @@ struct pv_init_ops {
         */
        unsigned (*patch)(u8 type, u16 clobber, void *insnbuf,
                          unsigned long addr, unsigned len);
-};
 
-struct pv_time_ops {
        unsigned long long (*sched_clock)(void);
        unsigned long long (*steal_clock)(int cpu);
-};
 
-struct pv_cpu_ops {
        void (*io_delay)(void);
-};
 
-struct pv_irq_ops {
        /*
         * Get/set interrupt state.  save_fl and restore_fl are only
         * expected to use X86_EFLAGS_IF; all other bits
@@ -105,9 +97,7 @@ struct pv_irq_ops {
        struct paravirt_callee_save restore_fl;
        struct paravirt_callee_save irq_disable;
        struct paravirt_callee_save irq_enable;
-};
 
-struct pv_mmu_ops {
        void (*exit_mmap)(struct mm_struct *mm);
        void (*flush_tlb_others)(const struct cpumask *cpus,
                                 struct mm_struct *mm,
@@ -136,11 +126,7 @@ struct pv_lock_ops {
  * number for each function using the offset which we use to indicate
  * what to patch. */
 struct paravirt_patch_template {
-       struct pv_init_ops pv_init_ops;
-       struct pv_time_ops pv_time_ops;
-       struct pv_cpu_ops pv_cpu_ops;
-       struct pv_irq_ops pv_irq_ops;
-       struct pv_mmu_ops pv_mmu_ops;
+       struct pv_ops pv_ops;
        struct pv_lock_ops pv_lock_ops;
 #ifdef CONFIG_PARAVIRT_FULL
        struct pvfull_cpu_ops pvfull_cpu_ops;
@@ -149,12 +135,7 @@ struct paravirt_patch_template {
 #endif
 };
 
-extern struct pv_info pv_info;
-extern struct pv_init_ops pv_init_ops;
-extern struct pv_time_ops pv_time_ops;
-extern struct pv_cpu_ops pv_cpu_ops;
-extern struct pv_irq_ops pv_irq_ops;
-extern struct pv_mmu_ops pv_mmu_ops;
+extern struct pv_ops pv_ops;
 extern struct pv_lock_ops pv_lock_ops;
 
 #define PARAVIRT_PATCH(x)                                      \
@@ -247,7 +228,7 @@ unsigned native_patch(u8 type, u16 clobbers, void *ibuf,
  * The call instruction itself is marked by placing its start address
  * and size into the .parainstructions section, so that
  * apply_paravirt() in arch/i386/kernel/alternative.c can do the
- * appropriate patching under the control of the backend pv_init_ops
+ * appropriate patching under the control of the backend pv_ops
  * implementation.
  *
  * Unfortunately there's no way to get gcc to generate the args setup
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
index c5b8f760473c..ac1a9356616b 100644
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
@@ -600,8 +600,8 @@ void __init_or_module apply_paravirt(struct 
paravirt_patch_site *start,
                BUG_ON(p->len > MAX_PATCH_LEN);
                /* prep the buffer with the original instructions */
                memcpy(insnbuf, p->instr, p->len);
-               used = pv_init_ops.patch(p->instrtype, p->clobbers, insnbuf,
-                                        (unsigned long)p->instr, p->len);
+               used = pv_ops.patch(p->instrtype, p->clobbers, insnbuf,
+                                   (unsigned long)p->instr, p->len);
 
                BUG_ON(used > p->len);
 
diff --git a/arch/x86/kernel/asm-offsets.c b/arch/x86/kernel/asm-offsets.c
index 18a5c06c007a..6a225a90bc31 100644
--- a/arch/x86/kernel/asm-offsets.c
+++ b/arch/x86/kernel/asm-offsets.c
@@ -64,9 +64,9 @@ void common(void) {
 
 #ifdef CONFIG_PARAVIRT
        BLANK();
-       OFFSET(PARAVIRT_PATCH_pv_irq_ops, paravirt_patch_template, pv_irq_ops);
-       OFFSET(PV_IRQ_irq_disable, pv_irq_ops, irq_disable);
-       OFFSET(PV_IRQ_irq_enable, pv_irq_ops, irq_enable);
+       OFFSET(PARAVIRT_PATCH_pv_ops, paravirt_patch_template, pv_ops);
+       OFFSET(PV_IRQ_irq_disable, pv_ops, irq_disable);
+       OFFSET(PV_IRQ_irq_enable, pv_ops, irq_enable);
 #endif
 #ifdef CONFIG_PARAVIRT_FULL
        OFFSET(PARAVIRT_PATCH_pvfull_cpu_ops, paravirt_patch_template,
diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c
index 40ed26852ebd..6be8af37e227 100644
--- a/arch/x86/kernel/cpu/vmware.c
+++ b/arch/x86/kernel/cpu/vmware.c
@@ -97,14 +97,14 @@ static void __init vmware_sched_clock_setup(void)
        d->cyc2ns_offset = mul_u64_u32_shr(tsc_now, d->cyc2ns_mul,
                                           d->cyc2ns_shift);
 
-       pv_time_ops.sched_clock = vmware_sched_clock;
+       pv_ops.sched_clock = vmware_sched_clock;
        pr_info("using sched offset of %llu ns\n", d->cyc2ns_offset);
 }
 
 static void __init vmware_paravirt_ops_setup(void)
 {
-       pv_info.name = "VMware hypervisor";
-       pv_cpu_ops.io_delay = paravirt_nop;
+       pv_ops.name = "VMware hypervisor";
+       pv_ops.io_delay = paravirt_nop;
 
        if (vmware_tsc_khz && vmw_sched_clock)
                vmware_sched_clock_setup();
diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
index da5c09789984..2aefbcea9ae4 100644
--- a/arch/x86/kernel/kvm.c
+++ b/arch/x86/kernel/kvm.c
@@ -280,10 +280,10 @@ NOKPROBE_SYMBOL(do_async_page_fault);
 
 static void __init paravirt_ops_setup(void)
 {
-       pv_info.name = "KVM";
+       pv_ops.name = "KVM";
 
        if (kvm_para_has_feature(KVM_FEATURE_NOP_IO_DELAY))
-               pv_cpu_ops.io_delay = kvm_io_delay;
+               pv_ops.io_delay = kvm_io_delay;
 
 #ifdef CONFIG_X86_IO_APIC
        no_timer_check = 1;
@@ -467,7 +467,7 @@ void __init kvm_guest_init(void)
 
        if (kvm_para_has_feature(KVM_FEATURE_STEAL_TIME)) {
                has_steal_clock = 1;
-               pv_time_ops.steal_clock = kvm_steal_clock;
+               pv_ops.steal_clock = kvm_steal_clock;
        }
 
        if (kvm_para_has_feature(KVM_FEATURE_PV_EOI))
diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c
index d88967659098..d3c92f7ce79b 100644
--- a/arch/x86/kernel/kvmclock.c
+++ b/arch/x86/kernel/kvmclock.c
@@ -109,13 +109,13 @@ static u64 kvm_sched_clock_read(void)
 static inline void kvm_sched_clock_init(bool stable)
 {
        if (!stable) {
-               pv_time_ops.sched_clock = kvm_clock_read;
+               pv_ops.sched_clock = kvm_clock_read;
                clear_sched_clock_stable();
                return;
        }
 
        kvm_sched_clock_offset = kvm_clock_read();
-       pv_time_ops.sched_clock = kvm_sched_clock_read;
+       pv_ops.sched_clock = kvm_sched_clock_read;
 
        printk(KERN_INFO "kvm-clock: using sched offset of %llu cycles\n",
                        kvm_sched_clock_offset);
@@ -308,7 +308,7 @@ void __init kvmclock_init(void)
 #endif
        kvm_get_preset_lpj();
        clocksource_register_hz(&kvm_clock, NSEC_PER_SEC);
-       pv_info.name = "KVM";
+       pv_ops.name = "KVM";
 }
 
 int __init kvm_setup_vsyscall_timeinfo(void)
diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
index 42da2fde1fef..cde433e495f6 100644
--- a/arch/x86/kernel/paravirt.c
+++ b/arch/x86/kernel/paravirt.c
@@ -63,7 +63,7 @@ u64 notrace _paravirt_ident_64(u64 x)
 void __init default_banner(void)
 {
        printk(KERN_INFO "Booting paravirtualized kernel on %s\n",
-              pv_info.name);
+              pv_ops.name);
 }
 
 /* Undefined instruction for dealing with missing ops pointers. */
@@ -114,11 +114,7 @@ unsigned paravirt_patch_jmp(void *insnbuf, const void 
*target,
 static void *get_call_destination(u8 type)
 {
        struct paravirt_patch_template tmpl = {
-               .pv_init_ops = pv_init_ops,
-               .pv_time_ops = pv_time_ops,
-               .pv_cpu_ops = pv_cpu_ops,
-               .pv_irq_ops = pv_irq_ops,
-               .pv_mmu_ops = pv_mmu_ops,
+               .pv_ops = pv_ops,
 #ifdef CONFIG_PARAVIRT_SPINLOCKS
                .pv_lock_ops = pv_lock_ops,
 #endif
@@ -185,37 +181,18 @@ static u64 native_steal_clock(int cpu)
        return 0;
 }
 
-struct pv_info pv_info = {
+__visible struct pv_ops pv_ops = {
        .name = "bare hardware",
-};
-
-struct pv_init_ops pv_init_ops = {
        .patch = native_patch,
-};
-
-struct pv_time_ops pv_time_ops = {
        .sched_clock = native_sched_clock,
        .steal_clock = native_steal_clock,
-};
-
-__visible struct pv_irq_ops pv_irq_ops = {
+       .io_delay = native_io_delay,
        .save_fl = __PV_IS_CALLEE_SAVE(native_save_fl),
        .restore_fl = __PV_IS_CALLEE_SAVE(native_restore_fl),
        .irq_disable = __PV_IS_CALLEE_SAVE(native_irq_disable),
        .irq_enable = __PV_IS_CALLEE_SAVE(native_irq_enable),
-};
-
-__visible struct pv_cpu_ops pv_cpu_ops = {
-       .io_delay = native_io_delay,
-};
-
-struct pv_mmu_ops pv_mmu_ops __ro_after_init = {
        .flush_tlb_others = native_flush_tlb_others,
        .exit_mmap = paravirt_nop,
 };
 
-EXPORT_SYMBOL_GPL(pv_time_ops);
-EXPORT_SYMBOL    (pv_cpu_ops);
-EXPORT_SYMBOL    (pv_mmu_ops);
-EXPORT_SYMBOL    (pv_info);
-EXPORT_SYMBOL    (pv_irq_ops);
+EXPORT_SYMBOL(pv_ops);
diff --git a/arch/x86/kernel/paravirt_patch_32.c 
b/arch/x86/kernel/paravirt_patch_32.c
index b5f93cb0d05f..48e44290cff0 100644
--- a/arch/x86/kernel/paravirt_patch_32.c
+++ b/arch/x86/kernel/paravirt_patch_32.c
@@ -1,9 +1,9 @@
 #include <asm/paravirt.h>
 
-DEF_NATIVE(pv_irq_ops, irq_disable, "cli");
-DEF_NATIVE(pv_irq_ops, irq_enable, "sti");
-DEF_NATIVE(pv_irq_ops, restore_fl, "push %eax; popf");
-DEF_NATIVE(pv_irq_ops, save_fl, "pushf; pop %eax");
+DEF_NATIVE(pv_ops, irq_disable, "cli");
+DEF_NATIVE(pv_ops, irq_enable, "sti");
+DEF_NATIVE(pv_ops, restore_fl, "push %eax; popf");
+DEF_NATIVE(pv_ops, save_fl, "pushf; pop %eax");
 #ifdef CONFIG_PARAVIRT_FULL
 DEF_NATIVE(pvfull_mmu_ops, read_cr2, "mov %cr2, %eax");
 DEF_NATIVE(pvfull_mmu_ops, write_cr3, "mov %eax, %cr3");
@@ -43,10 +43,10 @@ unsigned native_patch(u8 type, u16 clobbers, void *ibuf,
                        end = end_##ops##_##x;                  \
                        goto patch_site
        switch (type) {
-               PATCH_SITE(pv_irq_ops, irq_disable);
-               PATCH_SITE(pv_irq_ops, irq_enable);
-               PATCH_SITE(pv_irq_ops, restore_fl);
-               PATCH_SITE(pv_irq_ops, save_fl);
+               PATCH_SITE(pv_ops, irq_disable);
+               PATCH_SITE(pv_ops, irq_enable);
+               PATCH_SITE(pv_ops, restore_fl);
+               PATCH_SITE(pv_ops, save_fl);
 #ifdef CONFIG_PARAVIRT_FULL
                PATCH_SITE(pvfull_mmu_ops, read_cr2);
                PATCH_SITE(pvfull_mmu_ops, read_cr3);
diff --git a/arch/x86/kernel/paravirt_patch_64.c 
b/arch/x86/kernel/paravirt_patch_64.c
index 473688054f0b..158943a18ca2 100644
--- a/arch/x86/kernel/paravirt_patch_64.c
+++ b/arch/x86/kernel/paravirt_patch_64.c
@@ -2,10 +2,10 @@
 #include <asm/asm-offsets.h>
 #include <linux/stringify.h>
 
-DEF_NATIVE(pv_irq_ops, irq_disable, "cli");
-DEF_NATIVE(pv_irq_ops, irq_enable, "sti");
-DEF_NATIVE(pv_irq_ops, restore_fl, "pushq %rdi; popfq");
-DEF_NATIVE(pv_irq_ops, save_fl, "pushfq; popq %rax");
+DEF_NATIVE(pv_ops, irq_disable, "cli");
+DEF_NATIVE(pv_ops, irq_enable, "sti");
+DEF_NATIVE(pv_ops, restore_fl, "pushq %rdi; popfq");
+DEF_NATIVE(pv_ops, save_fl, "pushfq; popq %rax");
 
 DEF_NATIVE(, mov32, "mov %edi, %eax");
 DEF_NATIVE(, mov64, "mov %rdi, %rax");
@@ -52,10 +52,10 @@ unsigned native_patch(u8 type, u16 clobbers, void *ibuf,
                        end = end_##ops##_##x;                  \
                        goto patch_site
        switch(type) {
-               PATCH_SITE(pv_irq_ops, restore_fl);
-               PATCH_SITE(pv_irq_ops, save_fl);
-               PATCH_SITE(pv_irq_ops, irq_enable);
-               PATCH_SITE(pv_irq_ops, irq_disable);
+               PATCH_SITE(pv_ops, restore_fl);
+               PATCH_SITE(pv_ops, save_fl);
+               PATCH_SITE(pv_ops, irq_enable);
+               PATCH_SITE(pv_ops, irq_disable);
 #ifdef CONFIG_PARAVIRT_FULL
                PATCH_SITE(pvfull_mmu_ops, read_cr2);
                PATCH_SITE(pvfull_mmu_ops, read_cr3);
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
index 714dfba6a1e7..678fc8923cb8 100644
--- a/arch/x86/kernel/tsc.c
+++ b/arch/x86/kernel/tsc.c
@@ -330,7 +330,7 @@ unsigned long long sched_clock(void)
 
 bool using_native_sched_clock(void)
 {
-       return pv_time_ops.sched_clock == native_sched_clock;
+       return pv_ops.sched_clock == native_sched_clock;
 }
 #else
 unsigned long long
diff --git a/arch/x86/kernel/vsmp_64.c b/arch/x86/kernel/vsmp_64.c
index b034b1b14b9c..8e003dac79fb 100644
--- a/arch/x86/kernel/vsmp_64.c
+++ b/arch/x86/kernel/vsmp_64.c
@@ -76,10 +76,10 @@ static unsigned __init vsmp_patch(u8 type, u16 clobbers, 
void *ibuf,
                                  unsigned long addr, unsigned len)
 {
        switch (type) {
-       case PARAVIRT_PATCH(pv_irq_ops.irq_enable):
-       case PARAVIRT_PATCH(pv_irq_ops.irq_disable):
-       case PARAVIRT_PATCH(pv_irq_ops.save_fl):
-       case PARAVIRT_PATCH(pv_irq_ops.restore_fl):
+       case PARAVIRT_PATCH(pv_ops.irq_enable):
+       case PARAVIRT_PATCH(pv_ops.irq_disable):
+       case PARAVIRT_PATCH(pv_ops.save_fl):
+       case PARAVIRT_PATCH(pv_ops.restore_fl):
                return paravirt_patch_default(type, clobbers, ibuf, addr, len);
        default:
                return native_patch(type, clobbers, ibuf, addr, len);
@@ -117,11 +117,11 @@ static void __init set_vsmp_pv_ops(void)
 
        if (cap & ctl & (1 << 4)) {
                /* Setup irq ops and turn on vSMP  IRQ fastpath handling */
-               pv_irq_ops.irq_disable = PV_CALLEE_SAVE(vsmp_irq_disable);
-               pv_irq_ops.irq_enable  = PV_CALLEE_SAVE(vsmp_irq_enable);
-               pv_irq_ops.save_fl  = PV_CALLEE_SAVE(vsmp_save_fl);
-               pv_irq_ops.restore_fl  = PV_CALLEE_SAVE(vsmp_restore_fl);
-               pv_init_ops.patch = vsmp_patch;
+               pv_ops.irq_disable = PV_CALLEE_SAVE(vsmp_irq_disable);
+               pv_ops.irq_enable  = PV_CALLEE_SAVE(vsmp_irq_enable);
+               pv_ops.save_fl  = PV_CALLEE_SAVE(vsmp_save_fl);
+               pv_ops.restore_fl  = PV_CALLEE_SAVE(vsmp_restore_fl);
+               pv_ops.patch = vsmp_patch;
                ctl &= ~(1 << 4);
        }
        writel(ctl, address + 4);
diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c
index 86b8b1a0c99e..ccb6647a5167 100644
--- a/arch/x86/lguest/boot.c
+++ b/arch/x86/lguest/boot.c
@@ -1351,8 +1351,8 @@ static const struct lguest_insns
 {
        const char *start, *end;
 } lguest_insns[] = {
-       [PARAVIRT_PATCH(pv_irq_ops.irq_disable)] = { lgstart_cli, lgend_cli },
-       [PARAVIRT_PATCH(pv_irq_ops.save_fl)] = { lgstart_pushf, lgend_pushf },
+       [PARAVIRT_PATCH(pv_ops.irq_disable)] = { lgstart_cli, lgend_cli },
+       [PARAVIRT_PATCH(pv_ops.save_fl)] = { lgstart_pushf, lgend_pushf },
 };
 
 /*
@@ -1388,7 +1388,10 @@ static unsigned lguest_patch(u8 type, u16 clobber, void 
*ibuf,
 __init void lguest_init(void)
 {
        /* We're under lguest. */
-       pv_info.name = "lguest";
+       pv_ops.name = "lguest";
+       /* Setup operations */
+       pv_ops.patch = lguest_patch;
+
        /* We're running at privilege level 1, not 0 as normal. */
        pvfull_info.kernel_rpl = 1;
        /* Everyone except Xen runs with this set. */
@@ -1400,15 +1403,12 @@ __init void lguest_init(void)
         */
 
        /* Interrupt-related operations */
-       pv_irq_ops.save_fl = PV_CALLEE_SAVE(lguest_save_fl);
-       pv_irq_ops.restore_fl = __PV_IS_CALLEE_SAVE(lg_restore_fl);
-       pv_irq_ops.irq_disable = PV_CALLEE_SAVE(lguest_irq_disable);
-       pv_irq_ops.irq_enable = __PV_IS_CALLEE_SAVE(lg_irq_enable);
+       pv_ops.save_fl = PV_CALLEE_SAVE(lguest_save_fl);
+       pv_ops.restore_fl = __PV_IS_CALLEE_SAVE(lg_restore_fl);
+       pv_ops.irq_disable = PV_CALLEE_SAVE(lguest_irq_disable);
+       pv_ops.irq_enable = __PV_IS_CALLEE_SAVE(lg_irq_enable);
        pvfull_irq_ops.safe_halt = lguest_safe_halt;
 
-       /* Setup operations */
-       pv_init_ops.patch = lguest_patch;
-
        /* Intercepts of various CPU instructions */
        pvfull_cpu_ops.load_gdt = lguest_load_gdt;
        pvfull_cpu_ops.cpuid = lguest_cpuid;
diff --git a/arch/x86/xen/enlighten_hvm.c b/arch/x86/xen/enlighten_hvm.c
index a6d014f47e52..03165e3101f2 100644
--- a/arch/x86/xen/enlighten_hvm.c
+++ b/arch/x86/xen/enlighten_hvm.c
@@ -69,12 +69,12 @@ static void __init init_hvm_pv_info(void)
 
        /* PVH set up hypercall page in xen_prepare_pvh(). */
        if (xen_pvh_domain())
-               pv_info.name = "Xen PVH";
+               pv_ops.name = "Xen PVH";
        else {
                u64 pfn;
                uint32_t msr;
 
-               pv_info.name = "Xen HVM";
+               pv_ops.name = "Xen HVM";
                msr = cpuid_ebx(base + 2);
                pfn = __pa(hypercall_page);
                wrmsr_safe(msr, (u32)pfn, (u32)(pfn >> 32));
diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c
index dcf1b4183c49..9fa6698f2f26 100644
--- a/arch/x86/xen/enlighten_pv.c
+++ b/arch/x86/xen/enlighten_pv.c
@@ -144,7 +144,7 @@ static void __init xen_banner(void)
 
        pr_info("Booting paravirtualized kernel %son %s\n",
                xen_feature(XENFEAT_auto_translated_physmap) ?
-                       "with PVH extensions " : "", pv_info.name);
+                       "with PVH extensions " : "", pv_ops.name);
        printk(KERN_INFO "Xen version: %d.%d%s%s\n",
               version >> 16, version & 0xffff, extra.extraversion,
               xen_feature(XENFEAT_mmu_pt_update_preserve_ad) ? " 
(preserve-AD)" : "");
@@ -998,10 +998,10 @@ void xen_setup_vcpu_info_placement(void)
         * percpu area for all cpus, so make use of it.
         */
        if (xen_have_vcpu_info_placement) {
-               pv_irq_ops.save_fl = __PV_IS_CALLEE_SAVE(xen_save_fl_direct);
-               pv_irq_ops.restore_fl = 
__PV_IS_CALLEE_SAVE(xen_restore_fl_direct);
-               pv_irq_ops.irq_disable = 
__PV_IS_CALLEE_SAVE(xen_irq_disable_direct);
-               pv_irq_ops.irq_enable = 
__PV_IS_CALLEE_SAVE(xen_irq_enable_direct);
+               pv_ops.save_fl = __PV_IS_CALLEE_SAVE(xen_save_fl_direct);
+               pv_ops.restore_fl = __PV_IS_CALLEE_SAVE(xen_restore_fl_direct);
+               pv_ops.irq_disable = 
__PV_IS_CALLEE_SAVE(xen_irq_disable_direct);
+               pv_ops.irq_enable = __PV_IS_CALLEE_SAVE(xen_irq_enable_direct);
                pvfull_mmu_ops.read_cr2 = xen_read_cr2_direct;
        }
 }
@@ -1024,10 +1024,10 @@ static unsigned xen_patch(u8 type, u16 clobbers, void 
*insnbuf,
        goto patch_site
 
        switch (type) {
-               SITE(pv_irq_ops, irq_enable);
-               SITE(pv_irq_ops, irq_disable);
-               SITE(pv_irq_ops, save_fl);
-               SITE(pv_irq_ops, restore_fl);
+               SITE(pv_ops, irq_enable);
+               SITE(pv_ops, irq_disable);
+               SITE(pv_ops, save_fl);
+               SITE(pv_ops, restore_fl);
 #undef SITE
 
        patch_site:
@@ -1067,10 +1067,6 @@ static const struct pvfull_info xen_info __initconst = {
 #endif
 };
 
-static const struct pv_init_ops xen_init_ops __initconst = {
-       .patch = xen_patch,
-};
-
 static const struct pvfull_cpu_ops xen_cpu_ops __initconst = {
        .cpuid = xen_cpuid,
 
@@ -1267,10 +1263,10 @@ asmlinkage __visible void __init xen_start_kernel(void)
 
        /* Install Xen paravirt ops */
        pvfull_info = xen_info;
-       pv_info.name = "Xen";
-       pv_init_ops = xen_init_ops;
+       pv_ops.name = "Xen";
+       pv_ops.patch = xen_patch;
+       pv_ops.io_delay = xen_io_delay;
        pvfull_cpu_ops = xen_cpu_ops;
-       pv_cpu_ops.io_delay = xen_io_delay;
 
        x86_platform.get_nmi_reason = xen_get_nmi_reason;
 
diff --git a/arch/x86/xen/irq.c b/arch/x86/xen/irq.c
index c9dba9d8cecf..eeced2f4ccb6 100644
--- a/arch/x86/xen/irq.c
+++ b/arch/x86/xen/irq.c
@@ -115,13 +115,6 @@ static void xen_halt(void)
                xen_safe_halt();
 }
 
-static const struct pv_irq_ops xen_irq_ops __initconst = {
-       .save_fl = PV_CALLEE_SAVE(xen_save_fl),
-       .restore_fl = PV_CALLEE_SAVE(xen_restore_fl),
-       .irq_disable = PV_CALLEE_SAVE(xen_irq_disable),
-       .irq_enable = PV_CALLEE_SAVE(xen_irq_enable),
-};
-
 static const struct pvfull_irq_ops xen_full_irq_ops __initconst = {
        .safe_halt = xen_safe_halt,
        .halt = xen_halt,
@@ -132,7 +125,10 @@ static const struct pvfull_irq_ops xen_full_irq_ops 
__initconst = {
 
 void __init xen_init_irq_ops(void)
 {
-       pv_irq_ops = xen_irq_ops;
+       pv_ops.save_fl = PV_CALLEE_SAVE(xen_save_fl);
+       pv_ops.restore_fl = PV_CALLEE_SAVE(xen_restore_fl);
+       pv_ops.irq_disable = PV_CALLEE_SAVE(xen_irq_disable);
+       pv_ops.irq_enable = PV_CALLEE_SAVE(xen_irq_enable);
        pvfull_irq_ops = xen_full_irq_ops;
        x86_init.irqs.intr_init = xen_init_IRQ;
 }
diff --git a/arch/x86/xen/mmu_hvm.c b/arch/x86/xen/mmu_hvm.c
index 1c57f1cd545c..bf6472b444c5 100644
--- a/arch/x86/xen/mmu_hvm.c
+++ b/arch/x86/xen/mmu_hvm.c
@@ -72,7 +72,7 @@ static int is_pagetable_dying_supported(void)
 void __init xen_hvm_init_mmu_ops(void)
 {
        if (is_pagetable_dying_supported())
-               pv_mmu_ops.exit_mmap = xen_hvm_exit_mmap;
+               pv_ops.exit_mmap = xen_hvm_exit_mmap;
 #ifdef CONFIG_PROC_VMCORE
        register_oldmem_pfn_is_ram(&xen_oldmem_pfn_is_ram);
 #endif
diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c
index 7be3e21a4dac..89da3c2b8248 100644
--- a/arch/x86/xen/mmu_pv.c
+++ b/arch/x86/xen/mmu_pv.c
@@ -2513,8 +2513,8 @@ void __init xen_init_mmu_ops(void)
                return;
 
        pvfull_mmu_ops = xen_mmu_ops;
-       pv_mmu_ops.flush_tlb_others = xen_flush_tlb_others;
-       pv_mmu_ops.exit_mmap = xen_exit_mmap;
+       pv_ops.flush_tlb_others = xen_flush_tlb_others;
+       pv_ops.exit_mmap = xen_exit_mmap;
 
        memset(dummy_mapping, 0xff, PAGE_SIZE);
 }
diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c
index a1895a8e85c1..c5f7e5e6eea6 100644
--- a/arch/x86/xen/time.c
+++ b/arch/x86/xen/time.c
@@ -366,11 +366,6 @@ void xen_timer_resume(void)
        }
 }
 
-static const struct pv_time_ops xen_time_ops __initconst = {
-       .sched_clock = xen_clocksource_read,
-       .steal_clock = xen_steal_clock,
-};
-
 static void __init xen_time_init(void)
 {
        int cpu = smp_processor_id();
@@ -408,7 +403,8 @@ static void __init xen_time_init(void)
 
 void __ref xen_init_time_ops(void)
 {
-       pv_time_ops = xen_time_ops;
+       pv_ops.sched_clock = xen_clocksource_read;
+       pv_ops.steal_clock = xen_steal_clock;
 
        x86_init.timers.timer_init = xen_time_init;
        x86_init.timers.setup_percpu_clockev = x86_init_noop;
@@ -450,7 +446,8 @@ void __init xen_hvm_init_time_ops(void)
                return;
        }
 
-       pv_time_ops = xen_time_ops;
+       pv_ops.sched_clock = xen_clocksource_read;
+       pv_ops.steal_clock = xen_steal_clock;
        x86_init.timers.setup_percpu_clockev = xen_time_init;
        x86_cpuinit.setup_percpu_clockev = xen_hvm_setup_cpu_clockevents;
 
diff --git a/drivers/xen/time.c b/drivers/xen/time.c
index ac5f23fcafc2..37c355734bff 100644
--- a/drivers/xen/time.c
+++ b/drivers/xen/time.c
@@ -106,7 +106,7 @@ void __init xen_time_setup_guest(void)
        xen_runstate_remote = !HYPERVISOR_vm_assist(VMASST_CMD_enable,
                                        VMASST_TYPE_runstate_update_flag);
 
-       pv_time_ops.steal_clock = xen_steal_clock;
+       pv_ops.steal_clock = xen_steal_clock;
 
        static_key_slow_inc(&paravirt_steal_enabled);
        if (xen_runstate_remote)
-- 
2.12.0


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

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