public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* x86 microcode driver vs hotplug CPUs.
@ 2006-02-24  1:38 Dave Jones
  0 siblings, 0 replies; only message in thread
From: Dave Jones @ 2006-02-24  1:38 UTC (permalink / raw)
  To: Linux Kernel

This driver loops over 'num_online_cpus', but it doesn't account
for holes in the online map created by offlined cpus, and assumes
that the cpu numbers stay linear.

Signed-off-by: Dave Jones <davej@redhat.com>

--- linux-2.6.15.noarch/arch/i386/kernel/microcode.c~	2006-02-18 14:41:09.000000000 -0500
+++ linux-2.6.15.noarch/arch/i386/kernel/microcode.c	2006-02-18 14:45:42.000000000 -0500
@@ -250,8 +250,8 @@ static int find_matching_ucodes (void) 
 			error = -EINVAL;
 			goto out;
 		}
-		
-		for (cpu_num = 0; cpu_num < num_online_cpus(); cpu_num++) {
+
+		for_each_online_cpu(cpu_num) {
 			struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num;
 			if (uci->err != MC_NOTFOUND) /* already found a match or not an online cpu*/
 				continue;
@@ -293,7 +293,7 @@ static int find_matching_ucodes (void) 
 					error = -EFAULT;
 					goto out;
 				}
-				for (cpu_num = 0; cpu_num < num_online_cpus(); cpu_num++) {
+				for_each_online_cpu(cpu_num) {
 					struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num;
 					if (uci->err != MC_NOTFOUND) /* already found a match or not an online cpu*/
 						continue;
@@ -304,7 +304,9 @@ static int find_matching_ucodes (void) 
 			}
 		}
 		/* now check if any cpu has matched */
-		for (cpu_num = 0, allocated_flag = 0, sum = 0; cpu_num < num_online_cpus(); cpu_num++) {
+		allocated_flag = 0;
+		sum = 0;
+		for_each_online_cpu(cpu_num) {
 			if (ucode_cpu_info[cpu_num].err == MC_MARKED) { 
 				struct ucode_cpu_info *uci = ucode_cpu_info + cpu_num;
 				if (!allocated_flag) {
@@ -415,12 +415,12 @@ static int do_microcode_update (void)
 	}
 
 out_free:
-	for (i = 0; i < num_online_cpus(); i++) {
+	for_each_online_cpu(i) {
 		if (ucode_cpu_info[i].mc) {
 			int j;
 			void *tmp = ucode_cpu_info[i].mc;
 			vfree(tmp);
-			for (j = i; j < num_online_cpus(); j++) {
+			for_each_online_cpu(j) {
 				if (ucode_cpu_info[j].mc == tmp)
 					ucode_cpu_info[j].mc = NULL;
 			}


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2006-02-24  1:38 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-02-24  1:38 x86 microcode driver vs hotplug CPUs Dave Jones

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox