From: Borislav Petkov <bp@amd64.org>
To: Fenghua Yu <fenghua.yu@intel.com>
Cc: H Peter Anvin <hpa@zytor.com>, Ingo Molnar <mingo@elte.hu>,
Thomas Gleixner <tglx@linutronix.de>,
Asit K Mallick <asit.k.mallick@intel.com>,
Tigran Aivazian <tigran@aivazian.fsnet.co.uk>,
Andreas Herrmann <andreas.herrmann3@amd.com>,
Borislav Petkov <borislav.petkov@amd.com>,
linux-kernel <linux-kernel@vger.kernel.org>, x86 <x86@kernel.org>
Subject: Re: [PATCH 03/11] x86/microcode_intel.h: Define functions and macros for early load ucode
Date: Mon, 20 Aug 2012 15:47:32 +0200 [thread overview]
Message-ID: <20120820134732.GB24149@aftab.osrc.amd.com> (raw)
In-Reply-To: <1345277729-8399-4-git-send-email-fenghua.yu@intel.com>
On Sat, Aug 18, 2012 at 01:15:21AM -0700, Fenghua Yu wrote:
> From: Fenghua Yu <fenghua.yu@intel.com>
>
> Define some functions and macros that will be used in early load ucode. Some of
> them are moved from microcode_intel.c driver in order to be called in early
> boot phase before module can be called.
>
> Signed-off-by: Fenghua Yu <fenghua.yu@intel.com>
> ---
> arch/x86/include/asm/microcode_intel.h | 103 ++++++++++++++++++
> arch/x86/kernel/Makefile | 3 +
> arch/x86/kernel/microcode_core.c | 7 +-
> arch/x86/kernel/microcode_intel.c | 185 ++------------------------------
> 4 files changed, 117 insertions(+), 181 deletions(-)
[ … ]
> -static int microcode_sanity_check(void *mc)
> -{
> - unsigned long total_size, data_size, ext_table_size;
> - struct microcode_header_intel *mc_header = mc;
> - struct extended_sigtable *ext_header = NULL;
> - int sum, orig_sum, ext_sigcount = 0, i;
> - struct extended_signature *ext_sig;
> -
> - total_size = get_totalsize(mc_header);
> - data_size = get_datasize(mc_header);
> -
> - if (data_size + MC_HEADER_SIZE > total_size) {
> - pr_err("error! Bad data size in microcode data file\n");
> - return -EINVAL;
> - }
> -
> - if (mc_header->ldrver != 1 || mc_header->hdrver != 1) {
> - pr_err("error! Unknown microcode update format\n");
> - return -EINVAL;
> - }
> - ext_table_size = total_size - (MC_HEADER_SIZE + data_size);
> - if (ext_table_size) {
> - if ((ext_table_size < EXT_HEADER_SIZE)
> - || ((ext_table_size - EXT_HEADER_SIZE) % EXT_SIGNATURE_SIZE)) {
> - pr_err("error! Small exttable size in microcode data file\n");
> - return -EINVAL;
> - }
> - ext_header = mc + MC_HEADER_SIZE + data_size;
> - if (ext_table_size != exttable_size(ext_header)) {
> - pr_err("error! Bad exttable size in microcode data file\n");
> - return -EFAULT;
> - }
> - ext_sigcount = ext_header->count;
> - }
> -
> - /* check extended table checksum */
> - if (ext_table_size) {
> - int ext_table_sum = 0;
> - int *ext_tablep = (int *)ext_header;
> -
> - i = ext_table_size / DWSIZE;
> - while (i--)
> - ext_table_sum += ext_tablep[i];
> - if (ext_table_sum) {
> - pr_warning("aborting, bad extended signature table checksum\n");
> - return -EINVAL;
> - }
> - }
> -
> - /* calculate the checksum */
> - orig_sum = 0;
> - i = (MC_HEADER_SIZE + data_size) / DWSIZE;
> - while (i--)
> - orig_sum += ((int *)mc)[i];
> - if (orig_sum) {
> - pr_err("aborting, bad checksum\n");
> - return -EINVAL;
> - }
> - if (!ext_table_size)
> - return 0;
> - /* check extended signature checksum */
> - for (i = 0; i < ext_sigcount; i++) {
> - ext_sig = (void *)ext_header + EXT_HEADER_SIZE +
> - EXT_SIGNATURE_SIZE * i;
> - sum = orig_sum
> - - (mc_header->sig + mc_header->pf + mc_header->cksum)
> - + (ext_sig->sig + ext_sig->pf + ext_sig->cksum);
> - if (sum) {
> - pr_err("aborting, bad checksum\n");
> - return -EINVAL;
> - }
> - }
> - return 0;
> -}
This patch introduces a build error:
In file included from arch/x86/kernel/microcode_intel.c:82:0:
/usr/src/linux/linux-2.6/arch/x86/include/asm/microcode_intel.h:81:14: warning: ‘struct mc_saved_data’ declared inside parameter list [enabled by default]
/usr/src/linux/linux-2.6/arch/x86/include/asm/microcode_intel.h:81:14: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default]
/usr/src/linux/linux-2.6/arch/x86/include/asm/microcode_intel.h:98:14: warning: ‘struct mc_saved_data’ declared inside parameter list [enabled by default]
ERROR: "get_matching_microcode" [arch/x86/kernel/microcode.ko] undefined!
ERROR: "microcode_sanity_check" [arch/x86/kernel/microcode.ko] undefined!
make[1]: *** [__modpost] Error 1
make: *** [modules] Error 2
make: *** Waiting for unfinished jobs....
due to the removal of the two functions.
> -
> -/*
> - * return 0 - no update found
> - * return 1 - found update
> - */
> -static int
> -get_matching_microcode(struct cpu_signature *cpu_sig, void *mc, int rev)
> -{
> - struct microcode_header_intel *mc_header = mc;
> - struct extended_sigtable *ext_header;
> - unsigned long total_size = get_totalsize(mc_header);
> - int ext_sigcount, i;
> - struct extended_signature *ext_sig;
> -
> - if (!update_match_revision(mc_header, rev))
> - return 0;
> -
> - if (update_match_cpu(cpu_sig, mc_header->sig, mc_header->pf))
> - return 1;
> -
> - /* Look for ext. headers: */
> - if (total_size <= get_datasize(mc_header) + MC_HEADER_SIZE)
> - return 0;
> -
> - ext_header = mc + get_datasize(mc_header) + MC_HEADER_SIZE;
> - ext_sigcount = ext_header->count;
> - ext_sig = (void *)ext_header + EXT_HEADER_SIZE;
> -
> - for (i = 0; i < ext_sigcount; i++) {
> - if (update_match_cpu(cpu_sig, ext_sig->sig, ext_sig->pf))
> - return 1;
> - ext_sig++;
> - }
> - return 0;
> -}
> -
> -static int apply_microcode(int cpu)
> +int apply_microcode(int cpu)
> {
> struct microcode_intel *mc_intel;
> struct ucode_cpu_info *uci;
> @@ -338,6 +164,7 @@ static enum ucode_state generic_load_microcode(int cpu, void *data, size_t size,
> unsigned int leftover = size;
> enum ucode_state state = UCODE_OK;
> unsigned int curr_mc_size = 0;
> + unsigned int csig, cpf;
>
> while (leftover) {
> struct microcode_header_intel mc_header;
> @@ -362,11 +189,13 @@ static enum ucode_state generic_load_microcode(int cpu, void *data, size_t size,
> }
>
> if (get_ucode_data(mc, ucode_ptr, mc_size) ||
> - microcode_sanity_check(mc) < 0) {
> + microcode_sanity_check(mc, 1) < 0) {
> break;
> }
>
> - if (get_matching_microcode(&uci->cpu_sig, mc, new_rev)) {
> + csig = uci->cpu_sig.sig;
> + cpf = uci->cpu_sig.pf;
> + if (get_matching_microcode(csig, cpf, mc, new_rev)) {
> vfree(new_mc);
> new_rev = mc_header.rev;
> new_mc = mc;
> --
> 1.7.2
>
>
--
Regards/Gruss,
Boris.
Advanced Micro Devices GmbH
Einsteinring 24, 85609 Dornach
GM: Alberto Bozzo
Reg: Dornach, Landkreis Muenchen
HRB Nr. 43632 WEEE Registernr: 129 19551
next prev parent reply other threads:[~2012-08-20 13:47 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-18 8:15 [PATCH 00/11] x86/microcode: Early load microcode Fenghua Yu
2012-08-18 8:15 ` [PATCH 01/11] Documentation/x86: " Fenghua Yu
2012-08-20 12:26 ` Borislav Petkov
2012-08-18 8:15 ` [PATCH 02/11] x86/lib/cpio.c: Find cpio data by its file name Fenghua Yu
2012-08-18 22:12 ` Henrique de Moraes Holschuh
2012-08-18 23:23 ` Yu, Fenghua
2012-08-19 4:35 ` Henrique de Moraes Holschuh
2012-08-19 5:15 ` H. Peter Anvin
2012-08-20 13:29 ` Borislav Petkov
2012-08-18 8:15 ` [PATCH 03/11] x86/microcode_intel.h: Define functions and macros for early load ucode Fenghua Yu
2012-08-20 13:47 ` Borislav Petkov [this message]
2012-08-18 8:15 ` [PATCH 04/11] x86/microcode_core_early.c: Define interfaces " Fenghua Yu
2012-08-18 22:44 ` Henrique de Moraes Holschuh
2012-08-19 2:38 ` Yu, Fenghua
2012-08-19 4:43 ` Henrique de Moraes Holschuh
2012-08-19 5:24 ` H. Peter Anvin
2012-08-19 16:39 ` Yu, Fenghua
2012-08-20 14:06 ` Borislav Petkov
2012-08-20 20:08 ` H. Peter Anvin
2012-08-20 20:19 ` Borislav Petkov
2012-08-21 20:05 ` Yu, Fenghua
2012-08-21 20:13 ` H. Peter Anvin
2012-08-21 20:48 ` Borislav Petkov
2012-08-21 20:52 ` H. Peter Anvin
2012-08-21 20:52 ` Yu, Fenghua
2012-08-21 20:53 ` H. Peter Anvin
2012-08-21 20:58 ` Yu, Fenghua
2012-08-20 14:04 ` Borislav Petkov
2012-08-18 8:15 ` [PATCH 05/11] x86/microcode_intel_lib.c: Early update ucode on Intel's CPU Fenghua Yu
2012-08-20 15:31 ` Borislav Petkov
2012-08-20 16:24 ` Borislav Petkov
2012-08-18 8:15 ` [PATCH 06/11] x86/microcode_intel_early.c: " Fenghua Yu
2012-08-18 8:15 ` [PATCH 07/11] x86/head_32.S: Early update ucode in 32-bit Fenghua Yu
2012-08-18 8:15 ` [PATCH 08/11] x86/head64.c: Early update ucode in 64-bit Fenghua Yu
2012-08-18 8:15 ` [PATCH 09/11] x86/smpboot.c: Early update ucode on AP Fenghua Yu
2012-08-18 8:15 ` [PATCH 10/11] x86/mm/init.c: Copy ucode from initrd image to memory Fenghua Yu
2012-08-18 8:15 ` [PATCH 11/11] x86/Kconfig: Configurations to enable/disable the feature Fenghua Yu
2012-08-20 21:41 ` Paul Bolle
2012-08-20 15:39 ` [PATCH 00/11] x86/microcode: Early load microcode Borislav Petkov
2012-08-20 15:44 ` Yu, Fenghua
2012-08-20 18:51 ` H. Peter Anvin
2012-08-20 20:04 ` 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=20120820134732.GB24149@aftab.osrc.amd.com \
--to=bp@amd64.org \
--cc=andreas.herrmann3@amd.com \
--cc=asit.k.mallick@intel.com \
--cc=borislav.petkov@amd.com \
--cc=fenghua.yu@intel.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
--cc=tigran@aivazian.fsnet.co.uk \
--cc=x86@kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.