|
@@ -1,7 +1,6 @@
|
|
|
-/* $Id: chmc.c,v 1.4 2002/01/08 16:00:14 davem Exp $
|
|
|
- * memctrlr.c: Driver for UltraSPARC-III memory controller.
|
|
|
+/* memctrlr.c: Driver for UltraSPARC-III memory controller.
|
|
|
*
|
|
|
- * Copyright (C) 2001 David S. Miller (davem@redhat.com)
|
|
|
+ * Copyright (C) 2001, 2007 David S. Miller (davem@davemloft.net)
|
|
|
*/
|
|
|
|
|
|
#include <linux/module.h>
|
|
@@ -16,6 +15,7 @@
|
|
|
#include <linux/init.h>
|
|
|
#include <asm/spitfire.h>
|
|
|
#include <asm/chmctrl.h>
|
|
|
+#include <asm/cpudata.h>
|
|
|
#include <asm/oplib.h>
|
|
|
#include <asm/prom.h>
|
|
|
#include <asm/io.h>
|
|
@@ -242,8 +242,11 @@ int chmc_getunumber(int syndrome_code,
|
|
|
*/
|
|
|
static u64 read_mcreg(struct mctrl_info *mp, unsigned long offset)
|
|
|
{
|
|
|
- unsigned long ret;
|
|
|
- int this_cpu = get_cpu();
|
|
|
+ unsigned long ret, this_cpu;
|
|
|
+
|
|
|
+ preempt_disable();
|
|
|
+
|
|
|
+ this_cpu = real_hard_smp_processor_id();
|
|
|
|
|
|
if (mp->portid == this_cpu) {
|
|
|
__asm__ __volatile__("ldxa [%1] %2, %0"
|
|
@@ -255,7 +258,8 @@ static u64 read_mcreg(struct mctrl_info *mp, unsigned long offset)
|
|
|
: "r" (mp->regs + offset),
|
|
|
"i" (ASI_PHYS_BYPASS_EC_E));
|
|
|
}
|
|
|
- put_cpu();
|
|
|
+
|
|
|
+ preempt_enable();
|
|
|
|
|
|
return ret;
|
|
|
}
|