Commit 72edfe95 authored by Borislav Petkov's avatar Borislav Petkov Committed by Thomas Gleixner
Browse files

x86/microcode/AMD: Simplify saving from initrd



No need to use the previously stashed info in the container - simply go
ahead and parse the initrd once more. It simplifies and streamlines the
code a whole lot.

Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/20170120202955.4091-15-bp@alien8.de


Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent e71bb4ec
Loading
Loading
Loading
Loading
+13 −30
Original line number Diff line number Diff line
@@ -372,43 +372,26 @@ load_microcode_amd(int cpu, u8 family, const u8 *data, size_t size);

int __init save_microcode_in_initrd_amd(unsigned int cpuid_1_eax)
{
	struct cont_desc desc = { 0 };
	enum ucode_state ret;
	int retval = 0;

	if (!cont.data) {
		if (IS_ENABLED(CONFIG_X86_32) && (cont.size != -1)) {
	struct cpio_data cp;

	cp = find_microcode_in_initrd(ucode_path, false);
			if (!(cp.data && cp.size)) {
				cont.size = -1;
	if (!(cp.data && cp.size))
		return -EINVAL;
			}

			cont.cpuid_1_eax = cpuid_1_eax;

			scan_containers(cp.data, cp.size, &cont);
			if (!cont.eq_id) {
				cont.size = -1;
				return -EINVAL;
			}
	desc.cpuid_1_eax = cpuid_1_eax;

		} else
	scan_containers(cp.data, cp.size, &desc);
	if (!desc.eq_id)
		return -EINVAL;
	}

	ret = load_microcode_amd(smp_processor_id(), x86_family(cpuid_1_eax), cont.data, cont.size);
	ret = load_microcode_amd(smp_processor_id(), x86_family(cpuid_1_eax),
				 desc.data, desc.size);
	if (ret != UCODE_OK)
		retval = -EINVAL;

	/*
	 * This will be freed any msec now, stash patches for the current
	 * family and switch to patch cache for cpu hotplug, etc later.
	 */
	cont.data = NULL;
	cont.size = 0;
		return -EINVAL;

	return retval;
	return 0;
}

void reload_ucode_amd(void)