]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
Incorporate arch/x86/kernel/cpu/microcode/xen.c into cpu microcode driver.
authorAaron Young <Aaron.Young@oracle.com>
Wed, 7 Mar 2018 20:40:54 +0000 (12:40 -0800)
committerJack Vogel <jack.vogel@oracle.com>
Thu, 8 Mar 2018 03:46:11 +0000 (19:46 -0800)
Update arch/x86/kernel/cpu/microcode/xen.c so it will compile including:
1. Use to use new/up-to-date HYPERVISOR_platform_op() and
   request_firmware_direct() interfaces.
2. Fix function parameters to match prototypes.

Orabug: 27640697

Signed-off-by: Aaron Young <aaron.young@oracle.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
arch/x86/Kconfig
arch/x86/kernel/cpu/microcode/Makefile
arch/x86/kernel/cpu/microcode/core.c
arch/x86/kernel/cpu/microcode/xen.c

index 3290bbb4805bb188a4281f46c9b6e50c93ac974f..a80630fa381fe75a8c179bc76d92a3116ff983a4 100644 (file)
@@ -1157,6 +1157,14 @@ config MICROCODE_AMD
          If you select this option, microcode patch loading support for AMD
          processors will be enabled.
 
+config MICROCODE_XEN
+       bool "XEN microcode loading support"
+       depends on MICROCODE && XEN_DOM0
+       default MICROCODE
+       select FW_LOADER
+       ---help---
+         This options enables microcode patch loading support on Xen.
+
 config MICROCODE_OLD_INTERFACE
        def_bool y
        depends on MICROCODE
index 285c85427c323c8e33abc8a4dfc0436123143de7..a1db707127c0e35f23132348b4362b51a2503afc 100644 (file)
@@ -2,6 +2,7 @@ microcode-y                             := core.o
 obj-$(CONFIG_MICROCODE)                        += microcode.o
 microcode-$(CONFIG_MICROCODE_INTEL)    += intel.o intel_lib.o
 microcode-$(CONFIG_MICROCODE_AMD)      += amd.o
+microcode-$(CONFIG_MICROCODE_XEN)      += xen.o
 obj-$(CONFIG_MICROCODE_EARLY)          += core_early.o
 obj-$(CONFIG_MICROCODE_INTEL_EARLY)    += intel_early.o
 obj-$(CONFIG_MICROCODE_AMD_EARLY)      += amd_early.o
index 808f33974cd36437b0bf79a429edfcd92ced6ed8..e953faddb47f52bd08da95fecb444487b05b0ffb 100644 (file)
@@ -83,6 +83,7 @@
 #include <linux/fs.h>
 #include <linux/mm.h>
 #include <linux/syscore_ops.h>
+#include <xen/xen.h>
 
 #include <asm/microcode.h>
 #include <asm/processor.h>
@@ -555,10 +556,12 @@ static int __init microcode_init(void)
        struct cpuinfo_x86 *c = &cpu_data(0);
        int error;
 
-       if (paravirt_enabled() || dis_ucode_ldr)
+       if (dis_ucode_ldr || (paravirt_enabled() && !xen_domain()))
                return -EINVAL;
 
-       if (c->x86_vendor == X86_VENDOR_INTEL)
+       if (xen_domain())
+               microcode_ops = init_xen_microcode();
+       else if (c->x86_vendor == X86_VENDOR_INTEL)
                microcode_ops = init_intel_microcode();
        else if (c->x86_vendor == X86_VENDOR_AMD)
                microcode_ops = init_amd_microcode();
index 29ae2215b6f1a90920851095b0aa63dc596d1cfe..f7f943cb5d4e100469536a946ed300a20e1e086c 100644 (file)
@@ -48,7 +48,7 @@ static int xen_microcode_update(int cpu)
        set_xen_guest_handle(op.u.microcode.data, uc->data);
        op.u.microcode.length = uc->len;
 
-       err = HYPERVISOR_dom0_op(&op);
+       err = HYPERVISOR_platform_op(&op);
 
        if (err != 0)
                printk(KERN_WARNING "microcode_xen: microcode update failed: %d\n", err);
@@ -85,7 +85,7 @@ static enum ucode_state xen_request_microcode_fw(int cpu, struct device *device,
                return UCODE_NFOUND;
        }
 
-       err = request_firmware(&firmware, name, device);
+       err = request_firmware_direct(&firmware, name, device);
        if (err) {
                pr_debug("microcode: data file %s load failed\n", name);
                return UCODE_NFOUND;
@@ -199,7 +199,8 @@ static int dummy_xen_microcode_update(int cpu)
        return 0;
 }
 
-static enum ucode_state dummy_xen_request_microcode_fw(int cpu, struct device *device)
+static enum ucode_state dummy_xen_request_microcode_fw(int cpu, struct device *device,
+                                                      bool refresh_fw)
 {
        return UCODE_OK;
 }