Merge branch 'kvm-guest-sev-migration' into kvm-master
[platform/kernel/linux-starfive.git] / arch / x86 / kernel / paravirt.c
index 1cc20ac..7f7636a 100644 (file)
@@ -46,6 +46,17 @@ asm (".pushsection .entry.text, \"ax\"\n"
      ".type _paravirt_nop, @function\n\t"
      ".popsection");
 
+/* stub always returning 0. */
+asm (".pushsection .entry.text, \"ax\"\n"
+     ".global paravirt_ret0\n"
+     "paravirt_ret0:\n\t"
+     "xor %" _ASM_AX ", %" _ASM_AX ";\n\t"
+     "ret\n\t"
+     ".size paravirt_ret0, . - paravirt_ret0\n\t"
+     ".type paravirt_ret0, @function\n\t"
+     ".popsection");
+
+
 void __init default_banner(void)
 {
        printk(KERN_INFO "Booting paravirtualized kernel on %s\n",
@@ -53,7 +64,7 @@ void __init default_banner(void)
 }
 
 /* Undefined instruction for dealing with missing ops pointers. */
-static void paravirt_BUG(void)
+noinstr void paravirt_BUG(void)
 {
        BUG();
 }
@@ -218,6 +229,36 @@ void paravirt_end_context_switch(struct task_struct *next)
        if (test_and_clear_ti_thread_flag(task_thread_info(next), TIF_LAZY_MMU_UPDATES))
                arch_enter_lazy_mmu_mode();
 }
+
+static noinstr unsigned long pv_native_read_cr2(void)
+{
+       return native_read_cr2();
+}
+
+static noinstr void pv_native_write_cr2(unsigned long val)
+{
+       native_write_cr2(val);
+}
+
+static noinstr unsigned long pv_native_get_debugreg(int regno)
+{
+       return native_get_debugreg(regno);
+}
+
+static noinstr void pv_native_set_debugreg(int regno, unsigned long val)
+{
+       native_set_debugreg(regno, val);
+}
+
+static noinstr void pv_native_irq_enable(void)
+{
+       native_irq_enable();
+}
+
+static noinstr void pv_native_irq_disable(void)
+{
+       native_irq_disable();
+}
 #endif
 
 enum paravirt_lazy_mode paravirt_get_lazy_mode(void)
@@ -244,8 +285,8 @@ struct paravirt_patch_template pv_ops = {
 
 #ifdef CONFIG_PARAVIRT_XXL
        .cpu.cpuid              = native_cpuid,
-       .cpu.get_debugreg       = native_get_debugreg,
-       .cpu.set_debugreg       = native_set_debugreg,
+       .cpu.get_debugreg       = pv_native_get_debugreg,
+       .cpu.set_debugreg       = pv_native_set_debugreg,
        .cpu.read_cr0           = native_read_cr0,
        .cpu.write_cr0          = native_write_cr0,
        .cpu.write_cr4          = native_write_cr4,
@@ -281,8 +322,8 @@ struct paravirt_patch_template pv_ops = {
 
        /* Irq ops. */
        .irq.save_fl            = __PV_IS_CALLEE_SAVE(native_save_fl),
-       .irq.irq_disable        = __PV_IS_CALLEE_SAVE(native_irq_disable),
-       .irq.irq_enable         = __PV_IS_CALLEE_SAVE(native_irq_enable),
+       .irq.irq_disable        = __PV_IS_CALLEE_SAVE(pv_native_irq_disable),
+       .irq.irq_enable         = __PV_IS_CALLEE_SAVE(pv_native_irq_enable),
        .irq.safe_halt          = native_safe_halt,
        .irq.halt               = native_halt,
 #endif /* CONFIG_PARAVIRT_XXL */
@@ -299,8 +340,8 @@ struct paravirt_patch_template pv_ops = {
        .mmu.notify_page_enc_status_changed     = paravirt_nop,
 
 #ifdef CONFIG_PARAVIRT_XXL
-       .mmu.read_cr2           = __PV_IS_CALLEE_SAVE(native_read_cr2),
-       .mmu.write_cr2          = native_write_cr2,
+       .mmu.read_cr2           = __PV_IS_CALLEE_SAVE(pv_native_read_cr2),
+       .mmu.write_cr2          = pv_native_write_cr2,
        .mmu.read_cr3           = __native_read_cr3,
        .mmu.write_cr3          = native_write_cr3,
 
@@ -372,9 +413,6 @@ struct paravirt_patch_template pv_ops = {
 };
 
 #ifdef CONFIG_PARAVIRT_XXL
-/* At this point, native_get/set_debugreg has real function entries */
-NOKPROBE_SYMBOL(native_get_debugreg);
-NOKPROBE_SYMBOL(native_set_debugreg);
 NOKPROBE_SYMBOL(native_load_idt);
 
 void (*paravirt_iret)(void) = native_iret;