Re: [PATCH kernel v8 11/31] powerpc/iommu: Introduce iommu_table_alloc() helper

2015-04-15 Thread David Gibson
On Fri, Apr 10, 2015 at 04:30:53PM +1000, Alexey Kardashevskiy wrote:
> This replaces multiple calls of kzalloc_node() with a new
> iommu_table_alloc() helper. Right now it calls kzalloc_node() but
> later it will be modified to allocate a iommu_table_group struct with
> a single iommu_table in it.
> 
> Later the helper will allocate a iommu_table_group struct which embeds
> the iommu table(s).
> 
> Signed-off-by: Alexey Kardashevskiy 

I'd prefer to see this folded into the next patch.  This one's very
simple and I have trouble making sense of it without the next.

> ---
>  arch/powerpc/include/asm/iommu.h   |  1 +
>  arch/powerpc/kernel/iommu.c|  9 +
>  arch/powerpc/platforms/powernv/pci.c   |  2 +-
>  arch/powerpc/platforms/pseries/iommu.c | 12 
>  4 files changed, 15 insertions(+), 9 deletions(-)
> 
> diff --git a/arch/powerpc/include/asm/iommu.h 
> b/arch/powerpc/include/asm/iommu.h
> index d909e2a..eb75726 100644
> --- a/arch/powerpc/include/asm/iommu.h
> +++ b/arch/powerpc/include/asm/iommu.h
> @@ -117,6 +117,7 @@ static inline void *get_iommu_table_base(struct device 
> *dev)
>   return dev->archdata.dma_data.iommu_table_base;
>  }
>  
> +extern struct iommu_table *iommu_table_alloc(int node);
>  /* Frees table for an individual device node */
>  extern void iommu_free_table(struct iommu_table *tbl, const char *node_name);
>  
> diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c
> index eceb214..b39d00a 100644
> --- a/arch/powerpc/kernel/iommu.c
> +++ b/arch/powerpc/kernel/iommu.c
> @@ -710,6 +710,15 @@ struct iommu_table *iommu_init_table(struct iommu_table 
> *tbl, int nid)
>   return tbl;
>  }
>  
> +struct iommu_table *iommu_table_alloc(int node)
> +{
> + struct iommu_table *tbl;
> +
> + tbl = kzalloc_node(sizeof(struct iommu_table), GFP_KERNEL, node);
> +
> + return tbl;
> +}
> +
>  void iommu_free_table(struct iommu_table *tbl, const char *node_name)
>  {
>   unsigned long bitmap_sz;
> diff --git a/arch/powerpc/platforms/powernv/pci.c 
> b/arch/powerpc/platforms/powernv/pci.c
> index c619ec6..1c31ac8 100644
> --- a/arch/powerpc/platforms/powernv/pci.c
> +++ b/arch/powerpc/platforms/powernv/pci.c
> @@ -680,7 +680,7 @@ static struct iommu_table *pnv_pci_setup_bml_iommu(struct 
> pci_controller *hose)
>  hose->dn->full_name);
>   return NULL;
>   }
> - tbl = kzalloc_node(sizeof(struct iommu_table), GFP_KERNEL, hose->node);
> + tbl = iommu_table_alloc(hose->node);
>   if (WARN_ON(!tbl))
>   return NULL;
>   pnv_pci_setup_iommu_table(tbl, __va(be64_to_cpup(basep)),
> diff --git a/arch/powerpc/platforms/pseries/iommu.c 
> b/arch/powerpc/platforms/pseries/iommu.c
> index 48d1fde..41a8b14 100644
> --- a/arch/powerpc/platforms/pseries/iommu.c
> +++ b/arch/powerpc/platforms/pseries/iommu.c
> @@ -617,8 +617,7 @@ static void pci_dma_bus_setup_pSeries(struct pci_bus *bus)
>   pci->phb->dma_window_size = 0x800ul;
>   pci->phb->dma_window_base_cur = 0x800ul;
>  
> - tbl = kzalloc_node(sizeof(struct iommu_table), GFP_KERNEL,
> -pci->phb->node);
> + tbl = iommu_table_alloc(pci->phb->node);
>  
>   iommu_table_setparms(pci->phb, dn, tbl);
>   tbl->it_ops = _table_pseries_ops;
> @@ -669,8 +668,7 @@ static void pci_dma_bus_setup_pSeriesLP(struct pci_bus 
> *bus)
>pdn->full_name, ppci->iommu_table);
>  
>   if (!ppci->iommu_table) {
> - tbl = kzalloc_node(sizeof(struct iommu_table), GFP_KERNEL,
> -ppci->phb->node);
> + tbl = iommu_table_alloc(ppci->phb->node);
>   iommu_table_setparms_lpar(ppci->phb, pdn, tbl, dma_window);
>   tbl->it_ops = _table_lpar_multi_ops;
>   ppci->iommu_table = iommu_init_table(tbl, ppci->phb->node);
> @@ -697,8 +695,7 @@ static void pci_dma_dev_setup_pSeries(struct pci_dev *dev)
>   struct pci_controller *phb = PCI_DN(dn)->phb;
>  
>   pr_debug(" --> first child, no bridge. Allocating iommu 
> table.\n");
> - tbl = kzalloc_node(sizeof(struct iommu_table), GFP_KERNEL,
> -phb->node);
> + tbl = iommu_table_alloc(phb->node);
>   iommu_table_setparms(phb, dn, tbl);
>   tbl->it_ops = _table_pseries_ops;
>   PCI_DN(dn)->iommu_table = iommu_init_table(tbl, phb->node);
> @@ -1120,8 +1117,7 @@ static void pci_dma_dev_setup_pSeriesLP(struct pci_dev 
> *dev)
>  
>   pci = PCI_DN(pdn);
>   if (!pci->iommu_table) {
> - tbl = kzalloc_node(sizeof(struct iommu_table), GFP_KERNEL,
> -pci->phb->node);
> + tbl = iommu_table_alloc(pci->phb->node);
>   iommu_table_setparms_lpar(pci->phb, pdn, tbl, dma_window);
>   tbl->it_ops = _table_lpar_multi_ops;
>   pci->iommu_table = 

Re: [PATCH kernel v8 11/31] powerpc/iommu: Introduce iommu_table_alloc() helper

2015-04-15 Thread David Gibson
On Fri, Apr 10, 2015 at 04:30:53PM +1000, Alexey Kardashevskiy wrote:
 This replaces multiple calls of kzalloc_node() with a new
 iommu_table_alloc() helper. Right now it calls kzalloc_node() but
 later it will be modified to allocate a iommu_table_group struct with
 a single iommu_table in it.
 
 Later the helper will allocate a iommu_table_group struct which embeds
 the iommu table(s).
 
 Signed-off-by: Alexey Kardashevskiy a...@ozlabs.ru

I'd prefer to see this folded into the next patch.  This one's very
simple and I have trouble making sense of it without the next.

 ---
  arch/powerpc/include/asm/iommu.h   |  1 +
  arch/powerpc/kernel/iommu.c|  9 +
  arch/powerpc/platforms/powernv/pci.c   |  2 +-
  arch/powerpc/platforms/pseries/iommu.c | 12 
  4 files changed, 15 insertions(+), 9 deletions(-)
 
 diff --git a/arch/powerpc/include/asm/iommu.h 
 b/arch/powerpc/include/asm/iommu.h
 index d909e2a..eb75726 100644
 --- a/arch/powerpc/include/asm/iommu.h
 +++ b/arch/powerpc/include/asm/iommu.h
 @@ -117,6 +117,7 @@ static inline void *get_iommu_table_base(struct device 
 *dev)
   return dev-archdata.dma_data.iommu_table_base;
  }
  
 +extern struct iommu_table *iommu_table_alloc(int node);
  /* Frees table for an individual device node */
  extern void iommu_free_table(struct iommu_table *tbl, const char *node_name);
  
 diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c
 index eceb214..b39d00a 100644
 --- a/arch/powerpc/kernel/iommu.c
 +++ b/arch/powerpc/kernel/iommu.c
 @@ -710,6 +710,15 @@ struct iommu_table *iommu_init_table(struct iommu_table 
 *tbl, int nid)
   return tbl;
  }
  
 +struct iommu_table *iommu_table_alloc(int node)
 +{
 + struct iommu_table *tbl;
 +
 + tbl = kzalloc_node(sizeof(struct iommu_table), GFP_KERNEL, node);
 +
 + return tbl;
 +}
 +
  void iommu_free_table(struct iommu_table *tbl, const char *node_name)
  {
   unsigned long bitmap_sz;
 diff --git a/arch/powerpc/platforms/powernv/pci.c 
 b/arch/powerpc/platforms/powernv/pci.c
 index c619ec6..1c31ac8 100644
 --- a/arch/powerpc/platforms/powernv/pci.c
 +++ b/arch/powerpc/platforms/powernv/pci.c
 @@ -680,7 +680,7 @@ static struct iommu_table *pnv_pci_setup_bml_iommu(struct 
 pci_controller *hose)
  hose-dn-full_name);
   return NULL;
   }
 - tbl = kzalloc_node(sizeof(struct iommu_table), GFP_KERNEL, hose-node);
 + tbl = iommu_table_alloc(hose-node);
   if (WARN_ON(!tbl))
   return NULL;
   pnv_pci_setup_iommu_table(tbl, __va(be64_to_cpup(basep)),
 diff --git a/arch/powerpc/platforms/pseries/iommu.c 
 b/arch/powerpc/platforms/pseries/iommu.c
 index 48d1fde..41a8b14 100644
 --- a/arch/powerpc/platforms/pseries/iommu.c
 +++ b/arch/powerpc/platforms/pseries/iommu.c
 @@ -617,8 +617,7 @@ static void pci_dma_bus_setup_pSeries(struct pci_bus *bus)
   pci-phb-dma_window_size = 0x800ul;
   pci-phb-dma_window_base_cur = 0x800ul;
  
 - tbl = kzalloc_node(sizeof(struct iommu_table), GFP_KERNEL,
 -pci-phb-node);
 + tbl = iommu_table_alloc(pci-phb-node);
  
   iommu_table_setparms(pci-phb, dn, tbl);
   tbl-it_ops = iommu_table_pseries_ops;
 @@ -669,8 +668,7 @@ static void pci_dma_bus_setup_pSeriesLP(struct pci_bus 
 *bus)
pdn-full_name, ppci-iommu_table);
  
   if (!ppci-iommu_table) {
 - tbl = kzalloc_node(sizeof(struct iommu_table), GFP_KERNEL,
 -ppci-phb-node);
 + tbl = iommu_table_alloc(ppci-phb-node);
   iommu_table_setparms_lpar(ppci-phb, pdn, tbl, dma_window);
   tbl-it_ops = iommu_table_lpar_multi_ops;
   ppci-iommu_table = iommu_init_table(tbl, ppci-phb-node);
 @@ -697,8 +695,7 @@ static void pci_dma_dev_setup_pSeries(struct pci_dev *dev)
   struct pci_controller *phb = PCI_DN(dn)-phb;
  
   pr_debug( -- first child, no bridge. Allocating iommu 
 table.\n);
 - tbl = kzalloc_node(sizeof(struct iommu_table), GFP_KERNEL,
 -phb-node);
 + tbl = iommu_table_alloc(phb-node);
   iommu_table_setparms(phb, dn, tbl);
   tbl-it_ops = iommu_table_pseries_ops;
   PCI_DN(dn)-iommu_table = iommu_init_table(tbl, phb-node);
 @@ -1120,8 +1117,7 @@ static void pci_dma_dev_setup_pSeriesLP(struct pci_dev 
 *dev)
  
   pci = PCI_DN(pdn);
   if (!pci-iommu_table) {
 - tbl = kzalloc_node(sizeof(struct iommu_table), GFP_KERNEL,
 -pci-phb-node);
 + tbl = iommu_table_alloc(pci-phb-node);
   iommu_table_setparms_lpar(pci-phb, pdn, tbl, dma_window);
   tbl-it_ops = iommu_table_lpar_multi_ops;
   pci-iommu_table = iommu_init_table(tbl, pci-phb-node);

-- 
David Gibson| I'll have my music baroque, and my code
david AT