[POWERPC] Add spinlock to request_phb_iospace()
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Tue, 15 May 2007 04:16:26 +0000 (14:16 +1000)
committerPaul Mackerras <paulus@samba.org>
Thu, 17 May 2007 11:11:14 +0000 (21:11 +1000)
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 <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/mm/pgtable_64.c

index 1d443407423ca0b676b9bfc3bd546d3b85a2ed2e..ad6e135bf212ac1b77c87ac1ed8cd8b704b93e28 100644 (file)
@@ -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;
 }