linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Maciej S. Szmigiero" <mail@maciej.szmigiero.name>
To: Borislav Petkov <bp@alien8.de>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
	x86@kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH v3 4/9] x86/microcode/AMD: automatically compute the PATCH_MAX_SIZE macro
Date: Tue, 13 Mar 2018 22:06:48 +0100	[thread overview]
Message-ID: <de9e4416-0afa-ef07-2c0d-77aa7252a6ea@maciej.szmigiero.name> (raw)
In-Reply-To: <cover.1520973389.git.mail@maciej.szmigiero.name>

The PATCH_MAX_SIZE macro should contain the maximum of all family patch
sizes, computed automatically so that future changes there don't cause an
inconsistency.

Unfortunately, we can't use a standard max{,3} macros for this since they
only work inside a function (they use a compound statement as an
expression) and we have a static array using this macro value as its
length.

This macro is specific to amd.c file so let's move it there (the max sizes
for families are in this file already).

Signed-off-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
---
 arch/x86/include/asm/microcode_amd.h |  2 --
 arch/x86/kernel/cpu/microcode/amd.c  | 22 ++++++++++++++++------
 2 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/arch/x86/include/asm/microcode_amd.h b/arch/x86/include/asm/microcode_amd.h
index 209492849566..365bfa85a06b 100644
--- a/arch/x86/include/asm/microcode_amd.h
+++ b/arch/x86/include/asm/microcode_amd.h
@@ -41,8 +41,6 @@ struct microcode_amd {
 	unsigned int			mpb[0];
 };
 
-#define PATCH_MAX_SIZE PAGE_SIZE
-
 #ifdef CONFIG_MICROCODE_AMD
 extern void __init load_ucode_amd_bsp(unsigned int family);
 extern void load_ucode_amd_ap(unsigned int family);
diff --git a/arch/x86/kernel/cpu/microcode/amd.c b/arch/x86/kernel/cpu/microcode/amd.c
index d20c327c960b..b9f6c06bdc16 100644
--- a/arch/x86/kernel/cpu/microcode/amd.c
+++ b/arch/x86/kernel/cpu/microcode/amd.c
@@ -40,6 +40,22 @@
 
 static struct equiv_cpu_entry *equiv_cpu_table;
 
+/* Maximum patch size for a particular family */
+#define F1XH_MPB_MAX_SIZE 2048
+#define F14H_MPB_MAX_SIZE 1824
+#define F15H_MPB_MAX_SIZE 4096
+#define F16H_MPB_MAX_SIZE 3458
+#define F17H_MPB_MAX_SIZE 3200
+
+/* Can't use a standard max{,3} since they only work inside a function */
+#define SIMPLE_MAX(x, y) ((x) > (y) ? (x) : (y))
+#define SIMPLE_MAX3(x, y, z) SIMPLE_MAX(SIMPLE_MAX(x, y), z)
+
+/* Maximum of all the above families */
+#define PATCH_MAX_SIZE SIMPLE_MAX3(F1XH_MPB_MAX_SIZE, F14H_MPB_MAX_SIZE, \
+		       SIMPLE_MAX3(F15H_MPB_MAX_SIZE, F16H_MPB_MAX_SIZE, \
+				   F17H_MPB_MAX_SIZE))
+
 /*
  * This points to the current valid container of microcode patches which we will
  * save from the initrd/builtin before jettisoning its contents. @mc is the
@@ -473,12 +489,6 @@ static unsigned int verify_patch_size(u8 family, u32 patch_size,
 {
 	u32 max_size;
 
-#define F1XH_MPB_MAX_SIZE 2048
-#define F14H_MPB_MAX_SIZE 1824
-#define F15H_MPB_MAX_SIZE 4096
-#define F16H_MPB_MAX_SIZE 3458
-#define F17H_MPB_MAX_SIZE 3200
-
 	switch (family) {
 	case 0x14:
 		max_size = F14H_MPB_MAX_SIZE;

  parent reply	other threads:[~2018-03-13 21:06 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <cover.1520973389.git.mail@maciej.szmigiero.name>
2018-03-13 21:06 ` [PATCH v3 1/9] x86/microcode/AMD: subtract SECTION_HDR_SIZE from file leftover length Maciej S. Szmigiero
2018-03-14 12:38   ` Borislav Petkov
2018-03-13 21:06 ` [PATCH v3 2/9] x86/microcode/AMD: check whether the equivalence table fits in the file Maciej S. Szmigiero
2018-03-14 17:04   ` Borislav Petkov
2018-03-14 23:34     ` Maciej S. Szmigiero
2018-03-15 10:42       ` Borislav Petkov
2018-03-13 21:06 ` [PATCH v3 3/9] x86/microcode/AMD: install_equiv_cpu_table() should not return (signed) int Maciej S. Szmigiero
2018-03-14 17:58   ` Borislav Petkov
2018-03-14 23:46     ` Maciej S. Szmigiero
2018-03-14 23:58       ` Borislav Petkov
2018-03-15  0:13         ` Maciej S. Szmigiero
2018-03-15  0:56           ` Borislav Petkov
2018-03-15  0:59             ` Maciej S. Szmigiero
2018-03-13 21:06 ` Maciej S. Szmigiero [this message]
2018-03-14 18:02   ` [PATCH v3 4/9] x86/microcode/AMD: automatically compute the PATCH_MAX_SIZE macro Borislav Petkov
2018-03-15  0:05     ` Maciej S. Szmigiero
2018-03-15  1:00       ` Borislav Petkov
2018-03-13 21:06 ` [PATCH v3 5/9] x86/microcode/AMD: check patch size in verify_and_add_patch() Maciej S. Szmigiero
2018-03-13 21:07 ` [PATCH v3 6/9] x86/microcode/AMD: verify patch section type for every such section Maciej S. Szmigiero
2018-03-15 16:31   ` Borislav Petkov
2018-03-13 21:07 ` [PATCH v3 7/9] x86/microcode/AMD: check microcode container file size before accessing it Maciej S. Szmigiero
2018-03-13 21:07 ` [PATCH v3 8/9] x86/microcode/AMD: check the equivalence table size when scanning it Maciej S. Szmigiero
2018-03-13 21:07 ` [PATCH v3 9/9] x86/microcode/AMD: be more tolerant of late parse failures in late loader Maciej S. Szmigiero

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=de9e4416-0afa-ef07-2c0d-77aa7252a6ea@maciej.szmigiero.name \
    --to=mail@maciej.szmigiero.name \
    --cc=bp@alien8.de \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=tglx@linutronix.de \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).