From 9a998168e1852347fe524af91b76f39dbf54ed16 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Wed, 3 Mar 2010 09:06:03 -0800 Subject: [PATCH] --- yaml --- r: 185829 b: refs/heads/master c: 8a4fd1e4922413cfdfa6c51a59efb720d904a5eb h: refs/heads/master i: 185827: 0d5b8c9a65d79721ade98843893a89b6436d5f70 v: v3 --- [refs] | 2 +- trunk/arch/sparc/prom/p1275.c | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 2ae896b70f36..c64267d15c2c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c7d5a0050773e98d1094eaa9f2a1a793fafac300 +refs/heads/master: 8a4fd1e4922413cfdfa6c51a59efb720d904a5eb diff --git a/trunk/arch/sparc/prom/p1275.c b/trunk/arch/sparc/prom/p1275.c index 4b7c937bba61..2d8b70d397f1 100644 --- a/trunk/arch/sparc/prom/p1275.c +++ b/trunk/arch/sparc/prom/p1275.c @@ -32,10 +32,9 @@ extern void prom_cif_interface(void); extern void prom_cif_callback(void); /* - * This provides SMP safety on the p1275buf. prom_callback() drops this lock - * to allow recursuve acquisition. + * This provides SMP safety on the p1275buf. */ -DEFINE_SPINLOCK(prom_entry_lock); +DEFINE_RAW_SPINLOCK(prom_entry_lock); long p1275_cmd(const char *service, long fmt, ...) { @@ -47,7 +46,9 @@ long p1275_cmd(const char *service, long fmt, ...) p = p1275buf.prom_buffer; - spin_lock_irqsave(&prom_entry_lock, flags); + raw_local_save_flags(flags); + raw_local_irq_restore(PIL_NMI); + raw_spin_lock(&prom_entry_lock); p1275buf.prom_args[0] = (unsigned long)p; /* service */ strcpy (p, service); @@ -139,7 +140,8 @@ long p1275_cmd(const char *service, long fmt, ...) va_end(list); x = p1275buf.prom_args [nargs + 3]; - spin_unlock_irqrestore(&prom_entry_lock, flags); + raw_spin_unlock(&prom_entry_lock); + raw_local_irq_restore(flags); return x; }