mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Thomas Voegtle <tv@lio96.de>
To: Borislav Petkov <bp@suse.de>
Cc: Markus Trippelsdorf <markus@trippelsdorf.de>,
	linux-kernel@vger.kernel.org
Subject: Re: x86/microcode update on systems without INITRD
Date: Wed, 20 Jan 2016 10:14:49 +0100 (CET)	[thread overview]
Message-ID: <alpine.LSU.2.11.1601201014000.6525@er-systems.de> (raw)
In-Reply-To: <20160119174354.GF15071@pd.tnic>

On Tue, 19 Jan 2016, Borislav Petkov wrote:

> On Thu, Jan 07, 2016 at 01:12:16PM +0100, Thomas Voegtle wrote:
>> I just diffed my 4.3 config with the 4.4 config and saw that the whole
>> Microcode stuff was silently dropped by a normal "make oldconfig".
>
> Ok, here's a different version.


I checked that in several ways, took my old 4.3-config, ran it through
"make oldconfig" and the others, etc.

Works like a charm.

Thank you,

    Thomas



>
> It takes care of the oldconfig aspect, you'd still need to either
> prepare an initrd with the microcode or build it into the kernel. Ask if
> something's not clear.
>
> It works fine in qemu+kvm but I'll run it on my boxes before I queue it
> for stable.
>
> Thanks.
>
> ---
> From: Borislav Petkov <bp@suse.de>
> Date: Mon, 18 Jan 2016 19:07:08 +0100
> Subject: [PATCH] x86/microcode: Untangle from BLK_DEV_INITRD
>
> Thomas Voegtle reported that doing oldconfig with a .config which has
> CONFIG_MICROCODE enabled but BLK_DEV_INITRD disabled prevents the
> microcode loading mechanism from being built.
>
> So untangle it from the BLK_DEV_INITRD dependency so that oldconfig
> doesn't turn it off and add an explanatory text to its Kconfig help what
> the supported methods for supplying microcode are.
>
> Follow-on work will do the same with CONFIG_FW_LOADER. This patch is
> kept minimal for stable backporting.
>
> Reported-by: Thomas Voegtle <tv@lio96.de>
> Signed-off-by: Borislav Petkov <bp@suse.de>
> Cc: <stable@vger.kernel.org> # 4.4
> ---
> arch/x86/Kconfig                      | 12 ++++++------
> arch/x86/include/asm/microcode.h      | 26 ++++++++++++++++++++++++++
> arch/x86/kernel/cpu/microcode/intel.c | 14 ++++----------
> 3 files changed, 36 insertions(+), 16 deletions(-)
>
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index db3622f22b61..9743b8bb500e 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -1126,10 +1126,8 @@ config MICROCODE
> 	bool "CPU microcode loading support"
> 	default y
> 	depends on CPU_SUP_AMD || CPU_SUP_INTEL
> -	depends on BLK_DEV_INITRD
> 	select FW_LOADER
> 	---help---
> -
> 	  If you say Y here, you will be able to update the microcode on
> 	  certain Intel and AMD processors. The Intel support is for the
> 	  IA32 family, e.g. Pentium Pro, Pentium II, Pentium III, Pentium 4,
> @@ -1137,11 +1135,13 @@ config MICROCODE
> 	  obviously need the actual microcode binary data itself which is not
> 	  shipped with the Linux kernel.
>
> -	  This option selects the general module only, you need to select
> -	  at least one vendor specific module as well.
> +	  The preferred method to load microcode is described in
> +	  Documentation/x86/early-microcode.txt. For that you need to enable
> +	  CONFIG_BLK_DEV_INITRD in order for the loader to be able to scan the
> +	  initrd for microcode blobs.
>
> -	  To compile this driver as a module, choose M here: the module
> -	  will be called microcode.
> +	  Alternatively, you can build-in the microcode into the kernel. For
> +	  that you need the functionality behind CONFIG_FW_LOADER.
>
> config MICROCODE_INTEL
> 	bool "Intel microcode loading support"
> diff --git a/arch/x86/include/asm/microcode.h b/arch/x86/include/asm/microcode.h
> index 34e62b1dcfce..712b24ed3a64 100644
> --- a/arch/x86/include/asm/microcode.h
> +++ b/arch/x86/include/asm/microcode.h
> @@ -2,6 +2,7 @@
> #define _ASM_X86_MICROCODE_H
>
> #include <linux/earlycpio.h>
> +#include <linux/initrd.h>
>
> #define native_rdmsr(msr, val1, val2)			\
> do {							\
> @@ -168,4 +169,29 @@ static inline void reload_early_microcode(void)			{ }
> static inline bool
> get_builtin_firmware(struct cpio_data *cd, const char *name)	{ return false; }
> #endif
> +
> +static inline unsigned long get_initrd_start(void)
> +{
> +#ifdef CONFIG_BLK_DEV_INITRD
> +	return initrd_start;
> +#else
> +	return 0;
> +#endif
> +}
> +
> +static inline unsigned long get_initrd_start_addr(void)
> +{
> +#ifdef CONFIG_BLK_DEV_INITRD
> +#ifdef CONFIG_X86_32
> +	unsigned long *initrd_start_p = (unsigned long *)__pa_nodebug(&initrd_start);
> +
> +	return (unsigned long)__pa_nodebug(*initrd_start_p);
> +#else
> +	return get_initrd_start();
> +#endif
> +#else /* CONFIG_BLK_DEV_INITRD */
> +	return 0;
> +#endif
> +}
> +
> #endif /* _ASM_X86_MICROCODE_H */
> diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
> index ce47402eb2f9..eea5978a0e33 100644
> --- a/arch/x86/kernel/cpu/microcode/intel.c
> +++ b/arch/x86/kernel/cpu/microcode/intel.c
> @@ -694,7 +694,7 @@ int __init save_microcode_in_initrd_intel(void)
> 	if (count == 0)
> 		return ret;
>
> -	copy_initrd_ptrs(mc_saved, mc_saved_in_initrd, initrd_start, count);
> +	copy_initrd_ptrs(mc_saved, mc_saved_in_initrd, get_initrd_start(), count);
> 	ret = save_microcode(&mc_saved_data, mc_saved, count);
> 	if (ret)
> 		pr_err("Cannot save microcode patches from initrd.\n");
> @@ -752,20 +752,14 @@ void load_ucode_intel_ap(void)
> 	struct mc_saved_data *mc_saved_data_p;
> 	struct ucode_cpu_info uci;
> 	unsigned long *mc_saved_in_initrd_p;
> -	unsigned long initrd_start_addr;
> 	enum ucode_state ret;
> #ifdef CONFIG_X86_32
> -	unsigned long *initrd_start_p;
>
> -	mc_saved_in_initrd_p =
> -		(unsigned long *)__pa_nodebug(mc_saved_in_initrd);
> +	mc_saved_in_initrd_p = (unsigned long *)__pa_nodebug(mc_saved_in_initrd);
> 	mc_saved_data_p = (struct mc_saved_data *)__pa_nodebug(&mc_saved_data);
> -	initrd_start_p = (unsigned long *)__pa_nodebug(&initrd_start);
> -	initrd_start_addr = (unsigned long)__pa_nodebug(*initrd_start_p);
> #else
> -	mc_saved_data_p = &mc_saved_data;
> 	mc_saved_in_initrd_p = mc_saved_in_initrd;
> -	initrd_start_addr = initrd_start;
> +	mc_saved_data_p = &mc_saved_data;
> #endif
>
> 	/*
> @@ -777,7 +771,7 @@ void load_ucode_intel_ap(void)
>
> 	collect_cpu_info_early(&uci);
> 	ret = load_microcode(mc_saved_data_p, mc_saved_in_initrd_p,
> -			     initrd_start_addr, &uci);
> +			     get_initrd_start_addr(), &uci);
>
> 	if (ret != UCODE_OK)
> 		return;
>

       Thomas

-- 
  Thomas V

  reply	other threads:[~2016-01-20  9:14 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-19 21:43 Markus Trippelsdorf
2015-11-19 21:55 ` Borislav Petkov
2015-11-19 22:58   ` Borislav Petkov
2015-11-20  7:19     ` Markus Trippelsdorf
2015-11-20  8:27       ` Borislav Petkov
2015-11-20  8:33         ` Markus Trippelsdorf
2015-11-20  8:48           ` Borislav Petkov
2015-11-20 11:24             ` [PATCH] x86/microcode: Initialize the driver late when facilities are up Borislav Petkov
2015-11-23 16:28               ` [tip:x86/urgent] " tip-bot for Borislav Petkov
2016-01-07 12:12         ` x86/microcode update on systems without INITRD Thomas Voegtle
2016-01-07 12:18           ` Borislav Petkov
2016-01-07 12:36             ` Thomas Voegtle
2016-01-07 12:41               ` Markus Trippelsdorf
2016-01-08  9:33                 ` Thomas Voegtle
2016-01-08 12:18                 ` Mike Keehan
2016-01-08 12:20                   ` Markus Trippelsdorf
2016-01-08 10:59               ` Borislav Petkov
2016-01-08 11:18                 ` Måns Rullgård
2016-01-08 11:36                   ` Borislav Petkov
2016-01-08 11:46                     ` Måns Rullgård
2016-01-08 12:08                       ` Borislav Petkov
2016-01-08 12:16                         ` Markus Trippelsdorf
2016-01-08 12:27                           ` Borislav Petkov
2016-01-08 12:28                             ` Måns Rullgård
2016-01-08 12:48                             ` Michal Marek
2016-01-08 13:37                               ` Borislav Petkov
2016-01-08 14:48                                 ` Michal Marek
2016-01-11 19:43                                   ` Borislav Petkov
2016-01-11 20:29                                     ` Måns Rullgård
2016-01-11 20:59                                       ` Borislav Petkov
2016-01-11 21:04                                         ` Måns Rullgård
2016-01-11 21:17                                           ` Borislav Petkov
2016-01-14 18:43                                             ` [RFC PATCH] x86/kconfig: Sanity-check config file during oldconfig Borislav Petkov
2016-01-18 13:36                                               ` Thomas Voegtle
2016-01-18 14:06                                                 ` Borislav Petkov
2016-01-18 14:11                                                   ` Måns Rullgård
2016-01-18 14:28                                                     ` Borislav Petkov
2016-01-18 14:41                                                     ` Borislav Petkov
2016-01-18 14:51                                                       ` Måns Rullgård
2016-01-18 15:39                                                         ` Borislav Petkov
2016-01-18 15:42                                                           ` Måns Rullgård
2016-01-19  8:20                                               ` [RFC] CONFIG_FORCE_MINIMALLY_SANE_CONFIG=y (was: Re: [RFC PATCH] x86/kconfig: Sanity-check config file during oldconfig) Ingo Molnar
2016-01-19  8:40                                                 ` Markus Trippelsdorf
2016-01-19  8:54                                                   ` Ingo Molnar
2016-01-19  9:45                                                     ` Borislav Petkov
2016-01-19  9:01                                                 ` Peter Zijlstra
2016-01-19  9:14                                                   ` Ingo Molnar
2016-01-19  9:43                                                 ` Borislav Petkov
2016-01-19  9:57                                                 ` [RFC] CONFIG_FORCE_MINIMALLY_SANE_CONFIG=y Michal Marek
2016-01-19 10:30                                                   ` [RFC] CONFIG_GENERIC_BOOTABLE_CONFIG=y Ingo Molnar
2016-01-19 17:22                                                     ` Linus Torvalds
2016-01-19 17:52                                                       ` Austin S. Hemmelgarn
2016-01-19 12:29                                                 ` [RFC] CONFIG_FORCE_MINIMALLY_SANE_CONFIG=y Måns Rullgård
2016-01-19 12:43                                                   ` Michal Marek
2016-01-19 12:57                                                     ` Måns Rullgård
2016-01-21 22:06                                                 ` [RFC] CONFIG_FORCE_MINIMALLY_SANE_CONFIG=y (was: Re: [RFC PATCH] x86/kconfig: Sanity-check config file during oldconfig) Kirill A. Shutemov
2016-03-09 13:08                                                   ` Ingo Molnar
2016-01-08 12:18                         ` x86/microcode update on systems without INITRD Måns Rullgård
2016-01-19 17:43           ` Borislav Petkov
2016-01-20  9:14             ` Thomas Voegtle [this message]
2016-01-20 11:15               ` Borislav Petkov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.LSU.2.11.1601201014000.6525@er-systems.de \
    --to=tv@lio96.de \
    --cc=bp@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=markus@trippelsdorf.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome