Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux...
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 1 Aug 2011 00:30:59 +0000 (14:30 -1000)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 1 Aug 2011 00:30:59 +0000 (14:30 -1000)
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k:
  m68k/math-emu: Remove unnecessary code
  m68k/math-emu: Remove commented out old code
  m68k: Kill warning in setup_arch() when compiling for Sun3
  m68k/atari: Prefix GPIO_{IN,OUT} with CODEC_
  sparc: iounmap() and *_free_coherent() - Use lookup_resource()
  m68k/atari: Reserve some ST-RAM early on for device buffer use
  m68k/amiga: Chip RAM - Use lookup_resource()
  resources: Add lookup_resource()
  sparc: _sparc_find_resource() should check for exact matches
  m68k/amiga: Chip RAM - Offset resource end by CHIP_PHYSADDR
  m68k/amiga: Chip RAM - Use resource_size() to fix off-by-one error
  m68k/amiga: Chip RAM - Change chipavail to an atomic_t
  m68k/amiga: Chip RAM - Always allocate from the start of memory
  m68k/amiga: Chip RAM - Convert from printk() to pr_*()
  m68k/amiga: Chip RAM - Use tabs for indentation

1  2 
arch/sparc/kernel/ioport.c
include/linux/ioport.h

@@@ -65,9 -65,6 +65,6 @@@ static inline void dma_make_coherent(un
  }
  #endif
  
- static struct resource *_sparc_find_resource(struct resource *r,
-                                            unsigned long);
  static void __iomem *_sparc_ioremap(struct resource *res, u32 bus, u32 pa, int sz);
  static void __iomem *_sparc_alloc_io(unsigned int busno, unsigned long phys,
      unsigned long size, char *name);
@@@ -143,7 -140,11 +140,11 @@@ void iounmap(volatile void __iomem *vir
        unsigned long vaddr = (unsigned long) virtual & PAGE_MASK;
        struct resource *res;
  
-       if ((res = _sparc_find_resource(&sparc_iomap, vaddr)) == NULL) {
+       /*
+        * XXX Too slow. Can have 8192 DVMA pages on sun4m in the worst case.
+        * This probably warrants some sort of hashing.
+       */
+       if ((res = lookup_resource(&sparc_iomap, vaddr)) == NULL) {
                printk("free_io/iounmap: cannot free %lx\n", vaddr);
                return;
        }
@@@ -228,7 -229,7 +229,7 @@@ _sparc_ioremap(struct resource *res, u3
        }
  
        pa &= PAGE_MASK;
 -      sparc_mapiorange(bus, pa, res->start, res->end - res->start + 1);
 +      sparc_mapiorange(bus, pa, res->start, resource_size(res));
  
        return (void __iomem *)(unsigned long)(res->start + offset);
  }
@@@ -240,7 -241,7 +241,7 @@@ static void _sparc_free_io(struct resou
  {
        unsigned long plen;
  
 -      plen = res->end - res->start + 1;
 +      plen = resource_size(res);
        BUG_ON((plen & (PAGE_SIZE-1)) != 0);
        sparc_unmapiorange(res->start, plen);
        release_resource(res);
@@@ -319,7 -320,7 +320,7 @@@ static void sbus_free_coherent(struct d
        struct resource *res;
        struct page *pgv;
  
-       if ((res = _sparc_find_resource(&_sparc_dvma,
+       if ((res = lookup_resource(&_sparc_dvma,
            (unsigned long)p)) == NULL) {
                printk("sbus_free_consistent: cannot free %p\n", p);
                return;
        }
  
        n = PAGE_ALIGN(n);
 -      if ((res->end-res->start)+1 != n) {
 +      if (resource_size(res) != n) {
                printk("sbus_free_consistent: region 0x%lx asked 0x%zx\n",
 -                  (long)((res->end-res->start)+1), n);
 +                  (long)resource_size(res), n);
                return;
        }
  
@@@ -492,7 -493,7 +493,7 @@@ static void pci32_free_coherent(struct 
  {
        struct resource *res;
  
-       if ((res = _sparc_find_resource(&_sparc_dvma,
+       if ((res = lookup_resource(&_sparc_dvma,
            (unsigned long)p)) == NULL) {
                printk("pci_free_consistent: cannot free %p\n", p);
                return;
        }
  
        n = PAGE_ALIGN(n);
 -      if ((res->end-res->start)+1 != n) {
 +      if (resource_size(res) != n) {
                printk("pci_free_consistent: region 0x%lx asked 0x%lx\n",
 -                  (long)((res->end-res->start)+1), (long)n);
 +                  (long)resource_size(res), (long)n);
                return;
        }
  
@@@ -715,25 -716,6 +716,6 @@@ static const struct file_operations spa
  };
  #endif /* CONFIG_PROC_FS */
  
- /*
-  * This is a version of find_resource and it belongs to kernel/resource.c.
-  * Until we have agreement with Linus and Martin, it lingers here.
-  *
-  * XXX Too slow. Can have 8192 DVMA pages on sun4m in the worst case.
-  * This probably warrants some sort of hashing.
-  */
- static struct resource *_sparc_find_resource(struct resource *root,
-                                            unsigned long hit)
- {
-       struct resource *tmp;
-       for (tmp = root->child; tmp != 0; tmp = tmp->sibling) {
-               if (tmp->start <= hit && tmp->end >= hit)
-                       return tmp;
-       }
-       return NULL;
- }
  static void register_proc_sparc_ioport(void)
  {
  #ifdef CONFIG_PROC_FS
diff --combined include/linux/ioport.h
@@@ -109,36 -109,6 +109,36 @@@ struct resource_list 
  /* PCI control bits.  Shares IORESOURCE_BITS with above PCI ROM.  */
  #define IORESOURCE_PCI_FIXED          (1<<4)  /* Do not move resource */
  
 +
 +/* helpers to define resources */
 +#define DEFINE_RES_NAMED(_start, _size, _name, _flags)                        \
 +      {                                                               \
 +              .start = (_start),                                      \
 +              .end = (_start) + (_size) - 1,                          \
 +              .name = (_name),                                        \
 +              .flags = (_flags),                                      \
 +      }
 +
 +#define DEFINE_RES_IO_NAMED(_start, _size, _name)                     \
 +      DEFINE_RES_NAMED((_start), (_size), (_name), IORESOURCE_IO)
 +#define DEFINE_RES_IO(_start, _size)                                  \
 +      DEFINE_RES_IO_NAMED((_start), (_size), NULL)
 +
 +#define DEFINE_RES_MEM_NAMED(_start, _size, _name)                    \
 +      DEFINE_RES_NAMED((_start), (_size), (_name), IORESOURCE_MEM)
 +#define DEFINE_RES_MEM(_start, _size)                                 \
 +      DEFINE_RES_MEM_NAMED((_start), (_size), NULL)
 +
 +#define DEFINE_RES_IRQ_NAMED(_irq, _name)                             \
 +      DEFINE_RES_NAMED((_irq), 1, (_name), IORESOURCE_IRQ)
 +#define DEFINE_RES_IRQ(_irq)                                          \
 +      DEFINE_RES_IRQ_NAMED((_irq), NULL)
 +
 +#define DEFINE_RES_DMA_NAMED(_dma, _name)                             \
 +      DEFINE_RES_NAMED((_dma), 1, (_name), IORESOURCE_DMA)
 +#define DEFINE_RES_DMA(_dma)                                          \
 +      DEFINE_RES_DMA_NAMED((_dma), NULL)
 +
  /* PC/ISA/whatever - the normal PC address spaces: IO and memory */
  extern struct resource ioport_resource;
  extern struct resource iomem_resource;
@@@ -162,6 -132,7 +162,7 @@@ extern int allocate_resource(struct res
                                                       resource_size_t,
                                                       resource_size_t),
                             void *alignf_data);
+ struct resource *lookup_resource(struct resource *root, resource_size_t start);
  int adjust_resource(struct resource *res, resource_size_t start,
                    resource_size_t size);
  resource_size_t resource_alignment(struct resource *res);