Message ID | 20210716082755.428187-5-leobras.c@gmail.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Series | DDW + Indirect Mapping | expand |
Related | show |
On 16/07/2021 10:27, Leonardo Bras wrote: > There are two functions creating direct_window_list entries in a > similar way, so create a ddw_list_new_entry() to avoid duplicity and > simplify those functions. > > Signed-off-by: Leonardo Bras <leobras.c@gmail.com> > Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru> > --- LGTM Reviewed-by: Frederic Barrat <fbarrat@linux.ibm.com> > arch/powerpc/platforms/pseries/iommu.c | 32 +++++++++++++++++--------- > 1 file changed, 21 insertions(+), 11 deletions(-) > > diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c > index 33d82865d6e6..712d1667144a 100644 > --- a/arch/powerpc/platforms/pseries/iommu.c > +++ b/arch/powerpc/platforms/pseries/iommu.c > @@ -874,6 +874,21 @@ static u64 find_existing_ddw(struct device_node *pdn, int *window_shift) > return dma_addr; > } > > +static struct direct_window *ddw_list_new_entry(struct device_node *pdn, > + const struct dynamic_dma_window_prop *dma64) > +{ > + struct direct_window *window; > + > + window = kzalloc(sizeof(*window), GFP_KERNEL); > + if (!window) > + return NULL; > + > + window->device = pdn; > + window->prop = dma64; > + > + return window; > +} > + > static int find_existing_ddw_windows(void) > { > int len; > @@ -886,18 +901,15 @@ static int find_existing_ddw_windows(void) > > for_each_node_with_property(pdn, DIRECT64_PROPNAME) { > direct64 = of_get_property(pdn, DIRECT64_PROPNAME, &len); > - if (!direct64) > - continue; > - > - window = kzalloc(sizeof(*window), GFP_KERNEL); > - if (!window || len < sizeof(struct dynamic_dma_window_prop)) { > - kfree(window); > + if (!direct64 || len < sizeof(*direct64)) { > remove_ddw(pdn, true); > continue; > } > > - window->device = pdn; > - window->prop = direct64; > + window = ddw_list_new_entry(pdn, direct64); > + if (!window) > + break; > + > spin_lock(&direct_window_list_lock); > list_add(&window->list, &direct_window_list); > spin_unlock(&direct_window_list_lock); > @@ -1307,7 +1319,7 @@ static u64 enable_ddw(struct pci_dev *dev, struct device_node *pdn) > dev_dbg(&dev->dev, "created tce table LIOBN 0x%x for %pOF\n", > create.liobn, dn); > > - window = kzalloc(sizeof(*window), GFP_KERNEL); > + window = ddw_list_new_entry(pdn, ddwprop); > if (!window) > goto out_clear_window; > > @@ -1326,8 +1338,6 @@ static u64 enable_ddw(struct pci_dev *dev, struct device_node *pdn) > goto out_free_window; > } > > - window->device = pdn; > - window->prop = ddwprop; > spin_lock(&direct_window_list_lock); > list_add(&window->list, &direct_window_list); > spin_unlock(&direct_window_list_lock); >
On Mon, 2021-07-19 at 16:14 +0200, Frederic Barrat wrote: > > > On 16/07/2021 10:27, Leonardo Bras wrote: > > There are two functions creating direct_window_list entries in a > > similar way, so create a ddw_list_new_entry() to avoid duplicity > > and > > simplify those functions. > > > > Signed-off-by: Leonardo Bras <leobras.c@gmail.com> > > Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru> > > --- > > LGTM > Reviewed-by: Frederic Barrat <fbarrat@linux.ibm.com> > Thanks!
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c index 33d82865d6e6..712d1667144a 100644 --- a/arch/powerpc/platforms/pseries/iommu.c +++ b/arch/powerpc/platforms/pseries/iommu.c @@ -874,6 +874,21 @@ static u64 find_existing_ddw(struct device_node *pdn, int *window_shift) return dma_addr; } +static struct direct_window *ddw_list_new_entry(struct device_node *pdn, + const struct dynamic_dma_window_prop *dma64) +{ + struct direct_window *window; + + window = kzalloc(sizeof(*window), GFP_KERNEL); + if (!window) + return NULL; + + window->device = pdn; + window->prop = dma64; + + return window; +} + static int find_existing_ddw_windows(void) { int len; @@ -886,18 +901,15 @@ static int find_existing_ddw_windows(void) for_each_node_with_property(pdn, DIRECT64_PROPNAME) { direct64 = of_get_property(pdn, DIRECT64_PROPNAME, &len); - if (!direct64) - continue; - - window = kzalloc(sizeof(*window), GFP_KERNEL); - if (!window || len < sizeof(struct dynamic_dma_window_prop)) { - kfree(window); + if (!direct64 || len < sizeof(*direct64)) { remove_ddw(pdn, true); continue; } - window->device = pdn; - window->prop = direct64; + window = ddw_list_new_entry(pdn, direct64); + if (!window) + break; + spin_lock(&direct_window_list_lock); list_add(&window->list, &direct_window_list); spin_unlock(&direct_window_list_lock); @@ -1307,7 +1319,7 @@ static u64 enable_ddw(struct pci_dev *dev, struct device_node *pdn) dev_dbg(&dev->dev, "created tce table LIOBN 0x%x for %pOF\n", create.liobn, dn); - window = kzalloc(sizeof(*window), GFP_KERNEL); + window = ddw_list_new_entry(pdn, ddwprop); if (!window) goto out_clear_window; @@ -1326,8 +1338,6 @@ static u64 enable_ddw(struct pci_dev *dev, struct device_node *pdn) goto out_free_window; } - window->device = pdn; - window->prop = ddwprop; spin_lock(&direct_window_list_lock); list_add(&window->list, &direct_window_list); spin_unlock(&direct_window_list_lock);