From: Benjamin Herrenschmidt Date: Tue, 15 May 2007 04:16:26 +0000 (+1000) Subject: [POWERPC] Add spinlock to request_phb_iospace() X-Git-Tag: v2.6.22-rc2~7^2~11 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=017e3c53f116d6a0741a21624924528dc9f98418;p=linux-2.6 [POWERPC] Add spinlock to request_phb_iospace() request_phb_iospace() can be called from different CPUs at init time (at least with my next patch) and thus needs a spinlock. As for the next patch, this is a temporary workaround for 2.6.22 issues until my rewrite of IO mappings is ready (for 2.6.23) Signed-off-by: Benjamin Herrenschmidt Signed-off-by: Paul Mackerras --- diff --git a/arch/powerpc/mm/pgtable_64.c b/arch/powerpc/mm/pgtable_64.c index 1d44340742..ad6e135bf2 100644 --- a/arch/powerpc/mm/pgtable_64.c +++ b/arch/powerpc/mm/pgtable_64.c @@ -322,6 +322,8 @@ EXPORT_SYMBOL(__ioremap); EXPORT_SYMBOL(iounmap); EXPORT_SYMBOL(__iounmap); +static DEFINE_SPINLOCK(phb_io_lock); + void __iomem * reserve_phb_iospace(unsigned long size) { void __iomem *virt_addr; @@ -329,8 +331,10 @@ void __iomem * reserve_phb_iospace(unsigned long size) if (phbs_io_bot >= IMALLOC_BASE) panic("reserve_phb_iospace(): phb io space overflow\n"); + spin_lock(&phb_io_lock); virt_addr = (void __iomem *) phbs_io_bot; phbs_io_bot += size; + spin_unlock(&phb_io_lock); return virt_addr; }