mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Borislav Petkov <borislav.petkov@amd.com>
To: <linux-kernel@vger.kernel.org>
Cc: <x86@kernel.org>, <norsk5@yahoo.com>
Subject: [PATCH 03/21] x86, msr: Unify rdmsr_on_cpus/wrmsr_on_cpus
Date: Mon, 16 Nov 2009 15:16:30 +0100	[thread overview]
Message-ID: <1258381008-18783-4-git-send-email-borislav.petkov@amd.com> (raw)
In-Reply-To: <1258381008-18783-1-git-send-email-borislav.petkov@amd.com>

Since rdmsr_on_cpus and wrmsr_on_cpus are almost identical, unify them
into a common __rwmsr_on_cpus helper thus avoiding code duplication.

While at it, convert cpumask_t's to const struct cpumask *.

Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
 arch/x86/include/asm/msr.h |    4 +-
 arch/x86/lib/msr.c         |   46 ++++++++++++++++++-------------------------
 2 files changed, 21 insertions(+), 29 deletions(-)

diff --git a/arch/x86/include/asm/msr.h b/arch/x86/include/asm/msr.h
index 7e2b6ba..9a00219 100644
--- a/arch/x86/include/asm/msr.h
+++ b/arch/x86/include/asm/msr.h
@@ -247,8 +247,8 @@ do {                                                            \
 #ifdef CONFIG_SMP
 int rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h);
 int wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h);
-void rdmsr_on_cpus(const cpumask_t *mask, u32 msr_no, struct msr *msrs);
-void wrmsr_on_cpus(const cpumask_t *mask, u32 msr_no, struct msr *msrs);
+void rdmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs);
+void wrmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs);
 int rdmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h);
 int wrmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h);
 int rdmsr_safe_regs_on_cpu(unsigned int cpu, u32 regs[8]);
diff --git a/arch/x86/lib/msr.c b/arch/x86/lib/msr.c
index 33a1e3c..41628b1 100644
--- a/arch/x86/lib/msr.c
+++ b/arch/x86/lib/msr.c
@@ -71,14 +71,9 @@ int wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h)
 }
 EXPORT_SYMBOL(wrmsr_on_cpu);
 
-/* rdmsr on a bunch of CPUs
- *
- * @mask:       which CPUs
- * @msr_no:     which MSR
- * @msrs:       array of MSR values
- *
- */
-void rdmsr_on_cpus(const cpumask_t *mask, u32 msr_no, struct msr *msrs)
+static void __rwmsr_on_cpus(const struct cpumask *mask, u32 msr_no,
+			    struct msr *msrs,
+			    void (*msr_func) (void *info))
 {
 	struct msr_info rv;
 	int this_cpu;
@@ -92,11 +87,23 @@ void rdmsr_on_cpus(const cpumask_t *mask, u32 msr_no, struct msr *msrs)
 	this_cpu = get_cpu();
 
 	if (cpumask_test_cpu(this_cpu, mask))
-		__rdmsr_on_cpu(&rv);
+		msr_func(&rv);
 
-	smp_call_function_many(mask, __rdmsr_on_cpu, &rv, 1);
+	smp_call_function_many(mask, msr_func, &rv, 1);
 	put_cpu();
 }
+
+/* rdmsr on a bunch of CPUs
+ *
+ * @mask:       which CPUs
+ * @msr_no:     which MSR
+ * @msrs:       array of MSR values
+ *
+ */
+void rdmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs)
+{
+	__rwmsr_on_cpus(mask, msr_no, msrs, __rdmsr_on_cpu);
+}
 EXPORT_SYMBOL(rdmsr_on_cpus);
 
 /*
@@ -107,24 +114,9 @@ EXPORT_SYMBOL(rdmsr_on_cpus);
  * @msrs:       array of MSR values
  *
  */
-void wrmsr_on_cpus(const cpumask_t *mask, u32 msr_no, struct msr *msrs)
+void wrmsr_on_cpus(const struct cpumask *mask, u32 msr_no, struct msr *msrs)
 {
-	struct msr_info rv;
-	int this_cpu;
-
-	memset(&rv, 0, sizeof(rv));
-
-	rv.off    = cpumask_first(mask);
-	rv.msrs   = msrs;
-	rv.msr_no = msr_no;
-
-	this_cpu = get_cpu();
-
-	if (cpumask_test_cpu(this_cpu, mask))
-		__wrmsr_on_cpu(&rv);
-
-	smp_call_function_many(mask, __wrmsr_on_cpu, &rv, 1);
-	put_cpu();
+	__rwmsr_on_cpus(mask, msr_no, msrs, __wrmsr_on_cpu);
 }
 EXPORT_SYMBOL(wrmsr_on_cpus);
 
-- 
1.6.4.3



  parent reply	other threads:[~2009-11-16 14:16 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-16 14:16 [PATCH 00/21] amd64_edac queue for .33 Borislav Petkov
2009-11-16 14:16 ` [PATCH 01/21] amd64_edac: clarify DRAM CTL debug reporting Borislav Petkov
2009-11-16 14:16 ` [PATCH 02/21] amd64_edac: make DRAM regions output more human-readable Borislav Petkov
2009-11-16 14:16 ` Borislav Petkov [this message]
2009-11-16 14:16 ` [PATCH 04/21] cpumask: use modern cpumask style in drivers/edac/amd64_edac.c Borislav Petkov
2009-11-16 14:16 ` [PATCH 05/21] amd64_edac: unify MCGCTL ECC switching Borislav Petkov
2009-11-16 14:16 ` [PATCH 06/21] amd64_edac: wrap-up pci config read error handling Borislav Petkov
2009-11-16 14:16 ` [PATCH 07/21] amd64_edac: cleanup DRAM cfg low debug output Borislav Petkov
2009-11-16 14:16 ` [PATCH 08/21] amd64_edac: cleanup rest of amd64_dump_misc_regs Borislav Petkov
2009-11-16 14:16 ` [PATCH 09/21] amd64_edac: dump DIMM sizes on K8 too Borislav Petkov
2009-11-16 14:16 ` [PATCH 10/21] amd64_edac: cleanup f10_early_channel_count Borislav Petkov
2009-11-16 14:16 ` [PATCH 11/21] amd64_edac: enhance address to DRAM bank mapping Borislav Petkov
2009-11-16 14:16 ` [PATCH 12/21] amd64_edac: remove superfluous dbg printk Borislav Petkov
2009-11-16 14:16 ` [PATCH 13/21] amd64_edac: rename StinkyIdentifier Borislav Petkov
2009-11-16 14:16 ` [PATCH 14/21] amd64_edac: remove unneeded extract_error_address wrapper Borislav Petkov
2009-11-16 14:16 ` [PATCH 15/21] edac, mce: update AMD F10h revD check Borislav Petkov
2009-11-16 14:16 ` [PATCH 16/21] edac: add memory types strings for debugging Borislav Petkov
2009-11-16 14:16 ` [PATCH 17/21] amd64_edac: detect DDR3 memory type Borislav Petkov
2009-11-16 14:16 ` [PATCH 18/21] amd64_edac: remove early hw support check Borislav Petkov
2009-11-16 14:16 ` [PATCH 19/21] amd64_edac: add a leaner syndrome decoding algorithm Borislav Petkov
2009-11-16 14:16 ` [PATCH 20/21] amd64_edac: correct sys address to chip select mapping Borislav Petkov
2009-11-16 14:16 ` [PATCH 21/21] amd64_edac: bump driver version 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=1258381008-18783-4-git-send-email-borislav.petkov@amd.com \
    --to=borislav.petkov@amd.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=norsk5@yahoo.com \
    --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

all inboxes | Powered by JetHome®