Merge branch 'testing/driver-warnings' of git://git.kernel.org/pub/scm/linux/kernel...
authorOlof Johansson <olof@lixom.net>
Fri, 19 Oct 2012 22:40:18 +0000 (15:40 -0700)
committerOlof Johansson <olof@lixom.net>
Fri, 19 Oct 2012 22:40:18 +0000 (15:40 -0700)
A collection of warning fixes on non-ARM code from Arnd Bergmann:

* 'testing/driver-warnings' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc:
  ARM: s3c: mark s3c2440_clk_add as __init_refok
  spi/s3c64xx: use correct dma_transfer_direction type
  pcmcia: sharpsl: don't discard sharpsl_pcmcia_ops
  USB: EHCI: mark ehci_orion_conf_mbus_windows __devinit
  mm/slob: use min_t() to compare ARCH_SLAB_MINALIGN
  SCSI: ARM: make fas216_dumpinfo function conditional
  SCSI: ARM: ncr5380/oak uses no interrupts

1  2 
arch/arm/mach-s3c24xx/clock-s3c2440.c
drivers/spi/spi-s3c64xx.c
drivers/usb/host/ehci-orion.c
mm/slob.c

index 749220f91a7079e8a4a1e65561189497e9743c36,937a571d1b328a5621dec6ccc99fd58871a22f51..4407b17305396267b56d407f3ae80fb3dd4ef8b4
@@@ -87,19 -87,6 +87,19 @@@ static int s3c2440_camif_upll_setrate(s
        return 0;
  }
  
 +static unsigned long s3c2440_camif_upll_getrate(struct clk *clk)
 +{
 +      unsigned long parent_rate = clk_get_rate(clk->parent);
 +      unsigned long camdivn =  __raw_readl(S3C2440_CAMDIVN);
 +
 +      if (!(camdivn & S3C2440_CAMDIVN_CAMCLK_SEL))
 +              return parent_rate;
 +
 +      camdivn &= S3C2440_CAMDIVN_CAMCLK_MASK;
 +
 +      return parent_rate / (camdivn + 1) / 2;
 +}
 +
  /* Extra S3C2440 clocks */
  
  static struct clk s3c2440_clk_cam = {
@@@ -112,7 -99,6 +112,7 @@@ static struct clk s3c2440_clk_cam_upll 
        .name           = "camif-upll",
        .ops            = &(struct clk_ops) {
                .set_rate       = s3c2440_camif_upll_setrate,
 +              .get_rate       = s3c2440_camif_upll_getrate,
                .round_rate     = s3c2440_camif_upll_round,
        },
  };
@@@ -163,7 -149,7 +163,7 @@@ static struct clk_lookup s3c2440_clk_lo
        CLKDEV_INIT(NULL, "clk_uart_baud3", &s3c2440_clk_fclk_n),
  };
  
- static int s3c2440_clk_add(struct device *dev, struct subsys_interface *sif)
+ static int __init_refok s3c2440_clk_add(struct device *dev, struct subsys_interface *sif)
  {
        struct clk *clock_upll;
        struct clk *clock_h;
index 1a81c90a4a71dc69ce4ec459342a98af3d26b872,cd43b4b985a565ba1267d472c82c3e0b9f0f3678..6e7a805d324d19d6bec848a8bca2f2a74a4303af
@@@ -32,7 -32,7 +32,7 @@@
  #include <linux/of_gpio.h>
  
  #include <mach/dma.h>
 -#include <plat/s3c64xx-spi.h>
 +#include <linux/platform_data/spi-s3c64xx.h>
  
  #define MAX_SPI_PORTS         3
  
  
  struct s3c64xx_spi_dma_data {
        unsigned                ch;
-       enum dma_data_direction direction;
+       enum dma_transfer_direction direction;
        enum dma_ch     dmach;
        struct property         *dma_prop;
  };
@@@ -835,7 -835,9 +835,7 @@@ static struct s3c64xx_spi_csinfo *s3c64
                return ERR_PTR(-EINVAL);
        }
  
 -      for_each_child_of_node(slave_np, data_np)
 -              if (!strcmp(data_np->name, "controller-data"))
 -                      break;
 +      data_np = of_get_child_by_name(slave_np, "controller-data");
        if (!data_np) {
                dev_err(&spi->dev, "child node 'controller-data' not found\n");
                return ERR_PTR(-EINVAL);
        if (!cs) {
                dev_err(&spi->dev, "could not allocate memory for controller"
                                        " data\n");
 +              of_node_put(data_np);
                return ERR_PTR(-ENOMEM);
        }
  
                dev_err(&spi->dev, "chip select gpio is not specified or "
                                        "invalid\n");
                kfree(cs);
 +              of_node_put(data_np);
                return ERR_PTR(-EINVAL);
        }
  
        of_property_read_u32(data_np, "samsung,spi-feedback-delay", &fb_delay);
        cs->fb_delay = fb_delay;
 +      of_node_put(data_np);
        return cs;
  }
  
@@@ -977,8 -976,7 +977,8 @@@ err_msgq
        spi_set_ctldata(spi, NULL);
  
  err_gpio_req:
 -      kfree(cs);
 +      if (spi->dev.of_node)
 +              kfree(cs);
  
        return err;
  }
@@@ -1067,11 -1065,11 +1067,11 @@@ static int __devinit s3c64xx_spi_get_dm
  
        if (tx) {
                dma_data = &sdd->tx_dma;
-               dma_data->direction = DMA_TO_DEVICE;
+               dma_data->direction = DMA_MEM_TO_DEV;
                chan_str = "tx";
        } else {
                dma_data = &sdd->rx_dma;
-               dma_data->direction = DMA_FROM_DEVICE;
+               dma_data->direction = DMA_DEV_TO_MEM;
                chan_str = "rx";
        }
  
@@@ -1411,7 -1409,7 +1411,7 @@@ static int s3c64xx_spi_remove(struct pl
  #ifdef CONFIG_PM
  static int s3c64xx_spi_suspend(struct device *dev)
  {
 -      struct spi_master *master = spi_master_get(dev_get_drvdata(dev));
 +      struct spi_master *master = dev_get_drvdata(dev);
        struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master);
  
        spi_master_suspend(master);
  
  static int s3c64xx_spi_resume(struct device *dev)
  {
 -      struct spi_master *master = spi_master_get(dev_get_drvdata(dev));
 +      struct spi_master *master = dev_get_drvdata(dev);
        struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master);
        struct s3c64xx_spi_info *sci = sdd->cntrlr_info;
  
  #ifdef CONFIG_PM_RUNTIME
  static int s3c64xx_spi_runtime_suspend(struct device *dev)
  {
 -      struct spi_master *master = spi_master_get(dev_get_drvdata(dev));
 +      struct spi_master *master = dev_get_drvdata(dev);
        struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master);
  
        clk_disable(sdd->clk);
  
  static int s3c64xx_spi_runtime_resume(struct device *dev)
  {
 -      struct spi_master *master = spi_master_get(dev_get_drvdata(dev));
 +      struct spi_master *master = dev_get_drvdata(dev);
        struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master);
  
        clk_enable(sdd->src_clk);
index 8e7eca62f169fc204c6e1ef2034f26acdf2729dc,1f5dd5ee5b79ced8a4a9073ce6138234fcbefceb..9c2717d66730ad74d9f99ef2aa0795b25c716a1b
@@@ -13,7 -13,7 +13,7 @@@
  #include <linux/platform_device.h>
  #include <linux/mbus.h>
  #include <linux/clk.h>
 -#include <plat/ehci-orion.h>
 +#include <linux/platform_data/usb-ehci-orion.h>
  
  #define rdl(off)      __raw_readl(hcd->regs + (off))
  #define wrl(off, val) __raw_writel((val), hcd->regs + (off))
@@@ -160,7 -160,7 +160,7 @@@ static const struct hc_driver ehci_orio
        .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete,
  };
  
- static void __init
+ static void __devinit
  ehci_orion_conf_mbus_windows(struct usb_hcd *hcd,
                             const struct mbus_dram_target_info *dram)
  {
diff --combined mm/slob.c
index a08e4681fd0d630ff212e299f5b657f71e48c4b0,497c55e318a19932e931f488b9d70df550122c88..1e921c5e9576b6db64cc07fb4f4c90a8f4e2729e
+++ b/mm/slob.c
@@@ -194,7 -194,7 +194,7 @@@ static void *slob_new_pages(gfp_t gfp, 
        void *page;
  
  #ifdef CONFIG_NUMA
 -      if (node != -1)
 +      if (node != NUMA_NO_NODE)
                page = alloc_pages_exact_node(node, gfp, order);
        else
  #endif
@@@ -290,7 -290,7 +290,7 @@@ static void *slob_alloc(size_t size, gf
                 * If there's a node specification, search for a partial
                 * page with a matching node id in the freelist.
                 */
 -              if (node != -1 && page_to_nid(sp) != node)
 +              if (node != NUMA_NO_NODE && page_to_nid(sp) != node)
                        continue;
  #endif
                /* Enough room on this page? */
@@@ -425,11 -425,10 +425,11 @@@ out
   * End of slob allocator proper. Begin kmem_cache_alloc and kmalloc frontend.
   */
  
 -void *__kmalloc_node(size_t size, gfp_t gfp, int node)
 +static __always_inline void *
 +__do_kmalloc_node(size_t size, gfp_t gfp, int node, unsigned long caller)
  {
        unsigned int *m;
-       int align = max(ARCH_KMALLOC_MINALIGN, ARCH_SLAB_MINALIGN);
+       int align = max_t(size_t, ARCH_KMALLOC_MINALIGN, ARCH_SLAB_MINALIGN);
        void *ret;
  
        gfp &= gfp_allowed_mask;
                *m = size;
                ret = (void *)m + align;
  
 -              trace_kmalloc_node(_RET_IP_, ret,
 +              trace_kmalloc_node(caller, ret,
                                   size, size + align, gfp, node);
        } else {
                unsigned int order = get_order(size);
                        page->private = size;
                }
  
 -              trace_kmalloc_node(_RET_IP_, ret,
 +              trace_kmalloc_node(caller, ret,
                                   size, PAGE_SIZE << order, gfp, node);
        }
  
        kmemleak_alloc(ret, size, 1, gfp);
        return ret;
  }
 +
 +void *__kmalloc_node(size_t size, gfp_t gfp, int node)
 +{
 +      return __do_kmalloc_node(size, gfp, node, _RET_IP_);
 +}
  EXPORT_SYMBOL(__kmalloc_node);
  
 +#ifdef CONFIG_TRACING
 +void *__kmalloc_track_caller(size_t size, gfp_t gfp, unsigned long caller)
 +{
 +      return __do_kmalloc_node(size, gfp, NUMA_NO_NODE, caller);
 +}
 +
 +#ifdef CONFIG_NUMA
 +void *__kmalloc_node_track_caller(size_t size, gfp_t gfp,
 +                                      int node, unsigned long caller)
 +{
 +      return __do_kmalloc_node(size, gfp, node, caller);
 +}
 +#endif
 +#endif
 +
  void kfree(const void *block)
  {
        struct page *sp;
  
        sp = virt_to_page(block);
        if (PageSlab(sp)) {
-               int align = max(ARCH_KMALLOC_MINALIGN, ARCH_SLAB_MINALIGN);
+               int align = max_t(size_t, ARCH_KMALLOC_MINALIGN, ARCH_SLAB_MINALIGN);
                unsigned int *m = (unsigned int *)(block - align);
                slob_free(m, *m + align);
        } else
@@@ -521,7 -500,7 +521,7 @@@ size_t ksize(const void *block
  
        sp = virt_to_page(block);
        if (PageSlab(sp)) {
-               int align = max(ARCH_KMALLOC_MINALIGN, ARCH_SLAB_MINALIGN);
+               int align = max_t(size_t, ARCH_KMALLOC_MINALIGN, ARCH_SLAB_MINALIGN);
                unsigned int *m = (unsigned int *)(block - align);
                return SLOB_UNITS(*m) * SLOB_UNIT;
        } else
  }
  EXPORT_SYMBOL(ksize);
  
 -struct kmem_cache *__kmem_cache_create(const char *name, size_t size,
 -      size_t align, unsigned long flags, void (*ctor)(void *))
 +int __kmem_cache_create(struct kmem_cache *c, unsigned long flags)
  {
 -      struct kmem_cache *c;
 -
 -      c = slob_alloc(sizeof(struct kmem_cache),
 -              GFP_KERNEL, ARCH_KMALLOC_MINALIGN, -1);
 +      size_t align = c->size;
  
 -      if (c) {
 -              c->name = name;
 -              c->size = size;
 -              if (flags & SLAB_DESTROY_BY_RCU) {
 -                      /* leave room for rcu footer at the end of object */
 -                      c->size += sizeof(struct slob_rcu);
 -              }
 -              c->flags = flags;
 -              c->ctor = ctor;
 -              /* ignore alignment unless it's forced */
 -              c->align = (flags & SLAB_HWCACHE_ALIGN) ? SLOB_ALIGN : 0;
 -              if (c->align < ARCH_SLAB_MINALIGN)
 -                      c->align = ARCH_SLAB_MINALIGN;
 -              if (c->align < align)
 -                      c->align = align;
 -
 -              kmemleak_alloc(c, sizeof(struct kmem_cache), 1, GFP_KERNEL);
 -              c->refcount = 1;
 +      if (flags & SLAB_DESTROY_BY_RCU) {
 +              /* leave room for rcu footer at the end of object */
 +              c->size += sizeof(struct slob_rcu);
        }
 -      return c;
 -}
 +      c->flags = flags;
 +      /* ignore alignment unless it's forced */
 +      c->align = (flags & SLAB_HWCACHE_ALIGN) ? SLOB_ALIGN : 0;
 +      if (c->align < ARCH_SLAB_MINALIGN)
 +              c->align = ARCH_SLAB_MINALIGN;
 +      if (c->align < align)
 +              c->align = align;
  
 -void kmem_cache_destroy(struct kmem_cache *c)
 -{
 -      kmemleak_free(c);
 -      if (c->flags & SLAB_DESTROY_BY_RCU)
 -              rcu_barrier();
 -      slob_free(c, sizeof(struct kmem_cache));
 +      return 0;
  }
 -EXPORT_SYMBOL(kmem_cache_destroy);
  
  void *kmem_cache_alloc_node(struct kmem_cache *c, gfp_t flags, int node)
  {
@@@ -614,28 -613,14 +614,28 @@@ unsigned int kmem_cache_size(struct kme
  }
  EXPORT_SYMBOL(kmem_cache_size);
  
 +int __kmem_cache_shutdown(struct kmem_cache *c)
 +{
 +      /* No way to check for remaining objects */
 +      return 0;
 +}
 +
  int kmem_cache_shrink(struct kmem_cache *d)
  {
        return 0;
  }
  EXPORT_SYMBOL(kmem_cache_shrink);
  
 +struct kmem_cache kmem_cache_boot = {
 +      .name = "kmem_cache",
 +      .size = sizeof(struct kmem_cache),
 +      .flags = SLAB_PANIC,
 +      .align = ARCH_KMALLOC_MINALIGN,
 +};
 +
  void __init kmem_cache_init(void)
  {
 +      kmem_cache = &kmem_cache_boot;
        slab_state = UP;
  }