linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: tip-bot for Fenghua Yu <fenghua.yu@intel.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, hpa@zytor.com, mingo@kernel.org,
	fenghua.yu@intel.com, tglx@linutronix.de, hpa@linux.intel.com
Subject: [tip:x86/microcode] x86/microcode_intel.h: Define functions and macros for early loading ucode
Date: Fri, 30 Nov 2012 16:21:56 -0800	[thread overview]
Message-ID: <tip-17f1087f1a80d2dfada790c31720eb6a57da2d1f@git.kernel.org> (raw)
In-Reply-To: <1354240068-9821-3-git-send-email-fenghua.yu@intel.com>

Commit-ID:  17f1087f1a80d2dfada790c31720eb6a57da2d1f
Gitweb:     http://git.kernel.org/tip/17f1087f1a80d2dfada790c31720eb6a57da2d1f
Author:     Fenghua Yu <fenghua.yu@intel.com>
AuthorDate: Thu, 29 Nov 2012 17:47:40 -0800
Committer:  H. Peter Anvin <hpa@linux.intel.com>
CommitDate: Fri, 30 Nov 2012 15:18:14 -0800

x86/microcode_intel.h: Define functions and macros for early loading ucode

Define some functions and macros that will be used in early loading 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>
Link: http://lkml.kernel.org/r/1354240068-9821-3-git-send-email-fenghua.yu@intel.com
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
---
 arch/x86/include/asm/microcode_intel.h | 106 +++++++++++++++++++
 arch/x86/kernel/Makefile               |   3 +
 arch/x86/kernel/microcode_core.c       |   7 +-
 arch/x86/kernel/microcode_intel.c      | 185 ++-------------------------------
 4 files changed, 120 insertions(+), 181 deletions(-)

diff --git a/arch/x86/include/asm/microcode_intel.h b/arch/x86/include/asm/microcode_intel.h
new file mode 100644
index 0000000..0544bf4
--- /dev/null
+++ b/arch/x86/include/asm/microcode_intel.h
@@ -0,0 +1,106 @@
+#ifndef _ASM_X86_MICROCODE_INTEL_H
+#define _ASM_X86_MICROCODE_INTEL_H
+
+#include <asm/microcode.h>
+
+struct microcode_header_intel {
+	unsigned int            hdrver;
+	unsigned int            rev;
+	unsigned int            date;
+	unsigned int            sig;
+	unsigned int            cksum;
+	unsigned int            ldrver;
+	unsigned int            pf;
+	unsigned int            datasize;
+	unsigned int            totalsize;
+	unsigned int            reserved[3];
+};
+
+struct microcode_intel {
+	struct microcode_header_intel hdr;
+	unsigned int            bits[0];
+};
+
+/* microcode format is extended from prescott processors */
+struct extended_signature {
+	unsigned int            sig;
+	unsigned int            pf;
+	unsigned int            cksum;
+};
+
+struct extended_sigtable {
+	unsigned int            count;
+	unsigned int            cksum;
+	unsigned int            reserved[3];
+	struct extended_signature sigs[0];
+};
+
+#define DEFAULT_UCODE_DATASIZE	(2000)
+#define MC_HEADER_SIZE		(sizeof(struct microcode_header_intel))
+#define DEFAULT_UCODE_TOTALSIZE (DEFAULT_UCODE_DATASIZE + MC_HEADER_SIZE)
+#define EXT_HEADER_SIZE		(sizeof(struct extended_sigtable))
+#define EXT_SIGNATURE_SIZE	(sizeof(struct extended_signature))
+#define DWSIZE			(sizeof(u32))
+
+#define get_totalsize(mc) \
+	(((struct microcode_intel *)mc)->hdr.totalsize ? \
+	 ((struct microcode_intel *)mc)->hdr.totalsize : \
+	 DEFAULT_UCODE_TOTALSIZE)
+
+#define get_datasize(mc) \
+	(((struct microcode_intel *)mc)->hdr.datasize ? \
+	 ((struct microcode_intel *)mc)->hdr.datasize : DEFAULT_UCODE_DATASIZE)
+
+#define sigmatch(s1, s2, p1, p2) \
+	(((s1) == (s2)) && (((p1) & (p2)) || (((p1) == 0) && ((p2) == 0))))
+
+#define exttable_size(et) ((et)->count * EXT_SIGNATURE_SIZE + EXT_HEADER_SIZE)
+
+extern int
+get_matching_microcode(unsigned int csig, int cpf, void *mc, int rev);
+extern int microcode_sanity_check(void *mc, int print_err);
+extern int get_matching_sig(unsigned int csig, int cpf, void *mc, int rev);
+extern int
+update_match_revision(struct microcode_header_intel *mc_header, int rev);
+
+#ifdef CONFIG_MICROCODE_INTEL_EARLY
+extern enum ucode_state
+get_matching_model_microcode(int cpu, void *data, size_t size,
+			     struct mc_saved_data *mc_saved_data,
+			     struct microcode_intel **mc_saved_in_initrd,
+			     enum system_states system_state);
+extern enum ucode_state
+generic_load_microcode_early(int cpu, struct microcode_intel **mc_saved_p,
+			     unsigned int mc_saved_count,
+			     struct ucode_cpu_info *uci);
+extern void __init
+load_ucode_intel_bsp(char *real_mode_data);
+extern void __init load_ucode_intel_ap(void);
+#else
+static inline enum ucode_state
+get_matching_model_microcode(int cpu, void *data, size_t size,
+			     struct mc_saved_data *mc_saved_data,
+			     struct microcode_intel **mc_saved_in_initrd,
+			     enum system_states system_state)
+{
+	return UCODE_ERROR;
+}
+static inline enum ucode_state
+generic_load_microcode_early(int cpu, struct microcode_intel **mc_saved_p,
+			     unsigned int mc_saved_count,
+			     struct ucode_cpu_info *uci)
+{
+	return UCODE_ERROR;
+}
+static inline __init void
+load_ucode_intel_bsp(char *real_mode_data)
+{
+}
+static inline __init void
+load_ucode_intel_ap(struct ucode_cpu_info *uci,
+		    struct mc_saved_data *mc_saved_data)
+{
+}
+#endif
+
+#endif /* _ASM_X86_MICROCODE_INTEL_H */
diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
index 91ce48f..74fa88b 100644
--- a/arch/x86/kernel/Makefile
+++ b/arch/x86/kernel/Makefile
@@ -88,6 +88,9 @@ obj-$(CONFIG_PARAVIRT_CLOCK)	+= pvclock.o
 
 obj-$(CONFIG_PCSPKR_PLATFORM)	+= pcspeaker.o
 
+obj-$(CONFIG_MICROCODE_EARLY)		+= microcode_core_early.o
+obj-$(CONFIG_MICROCODE_INTEL_EARLY)	+= microcode_intel_early.o
+obj-$(CONFIG_MICROCODE_INTEL_LIB)	+= microcode_intel_lib.o
 microcode-y				:= microcode_core.o
 microcode-$(CONFIG_MICROCODE_INTEL)	+= microcode_intel.o
 microcode-$(CONFIG_MICROCODE_AMD)	+= microcode_amd.o
diff --git a/arch/x86/kernel/microcode_core.c b/arch/x86/kernel/microcode_core.c
index 3a04b22..22db92b 100644
--- a/arch/x86/kernel/microcode_core.c
+++ b/arch/x86/kernel/microcode_core.c
@@ -364,10 +364,7 @@ static struct attribute_group mc_attr_group = {
 
 static void microcode_fini_cpu(int cpu)
 {
-	struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
-
 	microcode_ops->microcode_fini_cpu(cpu);
-	uci->valid = 0;
 }
 
 static enum ucode_state microcode_resume_cpu(int cpu)
@@ -383,6 +380,10 @@ static enum ucode_state microcode_resume_cpu(int cpu)
 static enum ucode_state microcode_init_cpu(int cpu, bool refresh_fw)
 {
 	enum ucode_state ustate;
+	struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
+
+	if (uci && uci->valid)
+		return UCODE_OK;
 
 	if (collect_cpu_info(cpu))
 		return UCODE_ERROR;
diff --git a/arch/x86/kernel/microcode_intel.c b/arch/x86/kernel/microcode_intel.c
index 3544aed..f3ddf8e 100644
--- a/arch/x86/kernel/microcode_intel.c
+++ b/arch/x86/kernel/microcode_intel.c
@@ -79,7 +79,7 @@
 #include <linux/module.h>
 #include <linux/vmalloc.h>
 
-#include <asm/microcode.h>
+#include <asm/microcode_intel.h>
 #include <asm/processor.h>
 #include <asm/msr.h>
 
@@ -87,59 +87,6 @@ MODULE_DESCRIPTION("Microcode Update Driver");
 MODULE_AUTHOR("Tigran Aivazian <tigran@aivazian.fsnet.co.uk>");
 MODULE_LICENSE("GPL");
 
-struct microcode_header_intel {
-	unsigned int            hdrver;
-	unsigned int            rev;
-	unsigned int            date;
-	unsigned int            sig;
-	unsigned int            cksum;
-	unsigned int            ldrver;
-	unsigned int            pf;
-	unsigned int            datasize;
-	unsigned int            totalsize;
-	unsigned int            reserved[3];
-};
-
-struct microcode_intel {
-	struct microcode_header_intel hdr;
-	unsigned int            bits[0];
-};
-
-/* microcode format is extended from prescott processors */
-struct extended_signature {
-	unsigned int            sig;
-	unsigned int            pf;
-	unsigned int            cksum;
-};
-
-struct extended_sigtable {
-	unsigned int            count;
-	unsigned int            cksum;
-	unsigned int            reserved[3];
-	struct extended_signature sigs[0];
-};
-
-#define DEFAULT_UCODE_DATASIZE	(2000)
-#define MC_HEADER_SIZE		(sizeof(struct microcode_header_intel))
-#define DEFAULT_UCODE_TOTALSIZE (DEFAULT_UCODE_DATASIZE + MC_HEADER_SIZE)
-#define EXT_HEADER_SIZE		(sizeof(struct extended_sigtable))
-#define EXT_SIGNATURE_SIZE	(sizeof(struct extended_signature))
-#define DWSIZE			(sizeof(u32))
-
-#define get_totalsize(mc) \
-	(((struct microcode_intel *)mc)->hdr.totalsize ? \
-	 ((struct microcode_intel *)mc)->hdr.totalsize : \
-	 DEFAULT_UCODE_TOTALSIZE)
-
-#define get_datasize(mc) \
-	(((struct microcode_intel *)mc)->hdr.datasize ? \
-	 ((struct microcode_intel *)mc)->hdr.datasize : DEFAULT_UCODE_DATASIZE)
-
-#define sigmatch(s1, s2, p1, p2) \
-	(((s1) == (s2)) && (((p1) & (p2)) || (((p1) == 0) && ((p2) == 0))))
-
-#define exttable_size(et) ((et)->count * EXT_SIGNATURE_SIZE + EXT_HEADER_SIZE)
-
 static int collect_cpu_info(int cpu_num, struct cpu_signature *csig)
 {
 	struct cpuinfo_x86 *c = &cpu_data(cpu_num);
@@ -162,128 +109,7 @@ static int collect_cpu_info(int cpu_num, struct cpu_signature *csig)
 	return 0;
 }
 
-static inline int update_match_cpu(struct cpu_signature *csig, int sig, int pf)
-{
-	return (!sigmatch(sig, csig->sig, pf, csig->pf)) ? 0 : 1;
-}
-
-static inline int
-update_match_revision(struct microcode_header_intel *mc_header, int rev)
-{
-	return (mc_header->rev <= rev) ? 0 : 1;
-}
-
-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;
-}
-
-/*
- * 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;

  reply	other threads:[~2012-12-01  0:22 UTC|newest]

Thread overview: 127+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-30  1:47 [PATCH v2 00/11] x86/microcode: Early load microcode Fenghua Yu
2012-11-30  1:47 ` [PATCH v2 01/10] Documentation/x86: " Fenghua Yu
2012-11-30 19:46   ` H. Peter Anvin
2012-11-30 20:40     ` Yu, Fenghua
2012-11-30  1:47 ` [PATCH v2 02/10] x86/microcode_intel.h: Define functions and macros for early loading ucode Fenghua Yu
2012-12-01  0:21   ` tip-bot for Fenghua Yu [this message]
2012-11-30  1:47 ` [PATCH v2 03/10] x86/microcode_core_early.c: Define interfaces " Fenghua Yu
2012-12-01  0:23   ` [tip:x86/microcode] " tip-bot for Fenghua Yu
2012-11-30  1:47 ` [PATCH v2 04/10] x86/microcode_intel_lib.c: Early update ucode on Intel's CPU Fenghua Yu
2012-12-01  0:24   ` [tip:x86/microcode] " tip-bot for Fenghua Yu
2012-11-30  1:47 ` [PATCH v2 05/10] x86/microcode_intel_early.c: " Fenghua Yu
2012-12-01  0:25   ` [tip:x86/microcode] " tip-bot for Fenghua Yu
2012-12-01  0:55     ` Yinghai Lu
2012-12-04  0:18       ` Yu, Fenghua
2012-12-11  2:39         ` Yinghai Lu
2012-12-11  3:41           ` H. Peter Anvin
2012-12-11  3:55             ` Yinghai Lu
2012-12-11  6:34               ` H. Peter Anvin
2012-12-11  7:07                 ` Yinghai Lu
2012-12-11 14:57                   ` Borislav Petkov
2012-12-11 16:46                     ` Yinghai Lu
2012-12-11 16:48                       ` H. Peter Anvin
2012-12-11 17:00                         ` Yinghai Lu
2012-12-11 17:06                           ` Borislav Petkov
2012-12-11 17:15                             ` Yinghai Lu
2012-12-11 17:26                               ` Yu, Fenghua
2012-12-11 17:38                               ` H. Peter Anvin
2012-12-11 23:53                                 ` Yinghai Lu
2012-12-11 23:57                                   ` H. Peter Anvin
2012-12-12  0:27                                     ` Yinghai Lu
2012-12-12  0:37                                       ` H. Peter Anvin
2012-12-12  7:14                                         ` Yinghai Lu
2012-12-12 10:26                                           ` Yinghai Lu
2012-12-13  1:06                                           ` Yinghai Lu
2012-12-12  6:57                                       ` H. Peter Anvin
2012-12-12 13:38                                         ` Borislav Petkov
2012-12-12 17:43                                           ` H. Peter Anvin
2012-12-13  5:12                                           ` H. Peter Anvin
2012-12-13  5:26                                             ` H. Peter Anvin
2012-12-13  7:01                                               ` Yinghai Lu
2012-12-13 15:01                                                 ` H. Peter Anvin
2012-12-13 19:13                                               ` Borislav Petkov
2012-12-13 21:36                                                 ` H. Peter Anvin
2012-12-14  9:11                                                   ` Yinghai Lu
2012-12-14 18:16                                                     ` H. Peter Anvin
2012-12-14 19:46                                                     ` H. Peter Anvin
2012-12-14 20:04                                                       ` Yinghai Lu
2012-12-14 20:08                                                         ` Yinghai Lu
2012-12-14 20:14                                                           ` Yinghai Lu
2012-12-14 20:44                                                             ` H. Peter Anvin
2012-12-15  7:57                                                           ` Yinghai Lu
2012-12-15 19:30                                                             ` H. Peter Anvin
2012-12-15 20:55                                                               ` Yinghai Lu
2012-12-15 21:31                                                                 ` H. Peter Anvin
2012-12-15 21:40                                                                 ` H. Peter Anvin
2012-12-15 22:13                                                                   ` Yinghai Lu
2012-12-15 22:17                                                                     ` H. Peter Anvin
2012-12-15 23:15                                                                       ` Yinghai Lu
2012-12-15 23:17                                                                         ` H. Peter Anvin
2012-12-19 20:37                                                                           ` Borislav Petkov
2012-12-19 21:07                                                                             ` Jacob Shin
2012-12-19 21:48                                                                               ` H. Peter Anvin
2012-12-19 22:05                                                                                 ` Jacob Shin
2012-12-19 22:25                                                                                   ` H. Peter Anvin
2012-12-19 22:47                                                                                     ` Yinghai Lu
2012-12-19 22:59                                                                                       ` H. Peter Anvin
2012-12-19 22:51                                                                                     ` Borislav Petkov
2012-12-19 22:59                                                                                       ` Jacob Shin
2012-12-19 23:03                                                                                         ` Borislav Petkov
2012-12-19 23:21                                                                                           ` Jacob Shin
2012-12-19 23:56                                                                                             ` H. Peter Anvin
2012-12-19 23:22                                                                                           ` H. Peter Anvin
2012-12-19 23:40                                                                                             ` Borislav Petkov
2012-12-20  0:02                                                                                               ` H. Peter Anvin
2012-12-20  0:10                                                                                                 ` Borislav Petkov
2012-12-20  0:15                                                                                                   ` H. Peter Anvin
2012-12-19 23:40                                                                                             ` Yinghai Lu
2012-12-19 23:43                                                                                               ` H. Peter Anvin
2012-12-19 23:48                                                                                                 ` Yinghai Lu
2012-12-19 23:40                                                                                             ` Jacob Shin
2012-12-19 23:45                                                                                               ` Yinghai Lu
2012-12-19 23:50                                                                                               ` H. Peter Anvin
2012-12-19 23:55                                                                                                 ` Borislav Petkov
2012-12-19 23:57                                                                                                   ` H. Peter Anvin
2012-12-20  0:07                                                                                                 ` Jacob Shin
2012-12-20  0:24                                                                                                   ` H. Peter Anvin
2012-12-20  0:29                                                                                                     ` Jacob Shin
2012-12-20  0:41                                                                                                       ` H. Peter Anvin
2012-12-20  2:37                                                                                                       ` H. Peter Anvin
2012-12-20  4:16                                                                                                         ` Jacob Shin
2012-12-20  4:21                                                                                                           ` H. Peter Anvin
2012-12-19 22:55                                                                                     ` Jacob Shin
2012-12-19 23:00                                                                                       ` Borislav Petkov
2012-12-19 23:17                                                                                         ` H. Peter Anvin
2012-12-19 23:30                                                                                           ` Borislav Petkov
2012-12-19 23:37                                                                                             ` H. Peter Anvin
2012-12-19 23:23                                                                                       ` H. Peter Anvin
2012-12-16  2:09                                                                   ` Yinghai Lu
2012-12-16  5:17                                                                     ` Yinghai Lu
2012-12-16  8:50                                                                       ` Yinghai Lu
2012-12-17 22:47                                                                         ` Yinghai Lu
2012-12-17 23:11                                                                           ` H. Peter Anvin
2012-12-17 23:26                                                                             ` Yinghai Lu
2012-12-18  1:11                                                                               ` Yinghai Lu
2012-12-18  1:51                                                                                 ` Yinghai Lu
2012-12-18  2:42                                                                                   ` Yinghai Lu
2012-12-14 20:10                                                         ` H. Peter Anvin
2012-12-14 20:17                                                           ` Yinghai Lu
2012-12-14 20:52                                                             ` H. Peter Anvin
2012-12-14 21:07                                                         ` Yinghai Lu
2012-12-11 18:02                               ` H. Peter Anvin
2012-12-11 18:20                                 ` H. Peter Anvin
2012-12-11 18:42                                   ` Yinghai Lu
2012-12-11 18:46                                     ` H. Peter Anvin
2012-12-11 19:18                                       ` Yinghai Lu
2012-12-11 19:33                                         ` H. Peter Anvin
2012-11-30  1:47 ` [PATCH v2 06/10] x86/head_32.S: Early update ucode in 32-bit Fenghua Yu
2012-12-01  0:26   ` [tip:x86/microcode] " tip-bot for Fenghua Yu
2012-11-30  1:47 ` [PATCH v2 07/10] x86/head64.c: Early update ucode in 64-bit Fenghua Yu
2012-12-01  0:27   ` [tip:x86/microcode] " tip-bot for Fenghua Yu
2012-11-30  1:47 ` [PATCH v2 08/10] x86/smpboot.c: Early update ucode on AP Fenghua Yu
2012-12-01  0:28   ` [tip:x86/microcode] " tip-bot for Fenghua Yu
2012-11-30  1:47 ` [PATCH v2 09/10] x86/mm/init.c: Copy ucode from initrd image to memory Fenghua Yu
2012-12-01  0:29   ` [tip:x86/microcode] " tip-bot for Fenghua Yu
2012-11-30  1:47 ` [PATCH v2 10/10] x86/Kconfig: Configurations to enable/disable the feature Fenghua Yu
2012-12-01  0:30   ` [tip:x86/microcode] x86/Kconfig: Configurations to enable/ disable " tip-bot for Fenghua Yu
  -- strict thread matches above, loose matches on Subject: below --
2012-12-21  7:44 [PATCH v5 02/12] x86/microcode_intel.h: Define functions and macros for early loading ucode Fenghua Yu
2013-01-31 22:26 ` [tip:x86/microcode] " tip-bot for Fenghua Yu

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=tip-17f1087f1a80d2dfada790c31720eb6a57da2d1f@git.kernel.org \
    --to=fenghua.yu@intel.com \
    --cc=hpa@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=tglx@linutronix.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;
as well as URLs for NNTP newsgroup(s).