From: Aaron Young Date: Wed, 7 Mar 2018 20:40:54 +0000 (-0800) Subject: Incorporate arch/x86/kernel/cpu/microcode/xen.c into cpu microcode driver. X-Git-Tag: v4.1.12-124.31.3~1013 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=9de46d911fd37258c71cb670520d5b3bb9a3d079;p=users%2Fjedix%2Flinux-maple.git Incorporate arch/x86/kernel/cpu/microcode/xen.c into cpu microcode driver. 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 Reviewed-by: Boris Ostrovsky --- diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 3290bbb4805b..a80630fa381f 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -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 diff --git a/arch/x86/kernel/cpu/microcode/Makefile b/arch/x86/kernel/cpu/microcode/Makefile index 285c85427c32..a1db707127c0 100644 --- a/arch/x86/kernel/cpu/microcode/Makefile +++ b/arch/x86/kernel/cpu/microcode/Makefile @@ -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 diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c index 808f33974cd3..e953faddb47f 100644 --- a/arch/x86/kernel/cpu/microcode/core.c +++ b/arch/x86/kernel/cpu/microcode/core.c @@ -83,6 +83,7 @@ #include #include #include +#include #include #include @@ -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(); diff --git a/arch/x86/kernel/cpu/microcode/xen.c b/arch/x86/kernel/cpu/microcode/xen.c index 29ae2215b6f1..f7f943cb5d4e 100644 --- a/arch/x86/kernel/cpu/microcode/xen.c +++ b/arch/x86/kernel/cpu/microcode/xen.c @@ -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; }