Messages in this thread | | | Subject | Re: [PATCH v5 09/11] powerpc/pseries/iommu: Find existing DDW with given property name | From | Frederic Barrat <> | Date | Tue, 20 Jul 2021 19:52:38 +0200 |
| |
On 16/07/2021 10:27, Leonardo Bras wrote: > At the moment pseries stores information about created directly mapped > DDW window in DIRECT64_PROPNAME. > > With the objective of implementing indirect DMA mapping with DDW, it's > necessary to have another propriety name to make sure kexec'ing into older > kernels does not break, as it would if we reuse DIRECT64_PROPNAME. > > In order to have this, find_existing_ddw_windows() needs to be able to > look for different property names. > > Extract find_existing_ddw_windows() into find_existing_ddw_windows_named() > and calls it with current property name. > > Signed-off-by: Leonardo Bras <leobras.c@gmail.com> > Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru> > ---
Reviewed-by: Frederic Barrat <fbarrat@linux.ibm.com>
> arch/powerpc/platforms/pseries/iommu.c | 25 +++++++++++++++---------- > 1 file changed, 15 insertions(+), 10 deletions(-) > > diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c > index 17c6f4706e76..22d251e15b61 100644 > --- a/arch/powerpc/platforms/pseries/iommu.c > +++ b/arch/powerpc/platforms/pseries/iommu.c > @@ -895,24 +895,21 @@ static struct direct_window *ddw_list_new_entry(struct device_node *pdn, > return window; > } > > -static int find_existing_ddw_windows(void) > +static void find_existing_ddw_windows_named(const char *name) > { > int len; > struct device_node *pdn; > struct direct_window *window; > - const struct dynamic_dma_window_prop *direct64; > - > - if (!firmware_has_feature(FW_FEATURE_LPAR)) > - return 0; > + const struct dynamic_dma_window_prop *dma64; > > - for_each_node_with_property(pdn, DIRECT64_PROPNAME) { > - direct64 = of_get_property(pdn, DIRECT64_PROPNAME, &len); > - if (!direct64 || len < sizeof(*direct64)) { > - remove_ddw(pdn, true, DIRECT64_PROPNAME); > + for_each_node_with_property(pdn, name) { > + dma64 = of_get_property(pdn, name, &len); > + if (!dma64 || len < sizeof(*dma64)) { > + remove_ddw(pdn, true, name); > continue; > } > > - window = ddw_list_new_entry(pdn, direct64); > + window = ddw_list_new_entry(pdn, dma64); > if (!window) > break; > > @@ -920,6 +917,14 @@ static int find_existing_ddw_windows(void) > list_add(&window->list, &direct_window_list); > spin_unlock(&direct_window_list_lock); > } > +} > + > +static int find_existing_ddw_windows(void) > +{ > + if (!firmware_has_feature(FW_FEATURE_LPAR)) > + return 0; > + > + find_existing_ddw_windows_named(DIRECT64_PROPNAME); > > return 0; > } >
| |