lkml.org 
[lkml]   [2021]   [Jul]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH v5 09/11] powerpc/pseries/iommu: Find existing DDW with given property name
From
Date


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;
> }
>

\
 
 \ /
  Last update: 2021-07-20 19:54    [W:0.189 / U:0.784 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site