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>
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
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
#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>
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();
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);
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;
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;
}