Message ID | 20210716082755.428187-10-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: > 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; > } >
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; }