[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ada48b13-1de5-cb38-680f-71c9ca530e5a@linux.ibm.com>
Date: Tue, 20 Jul 2021 19:52:38 +0200
From: Frederic Barrat <fbarrat@...ux.ibm.com>
To: Leonardo Bras <leobras.c@...il.com>,
Michael Ellerman <mpe@...erman.id.au>,
Benjamin Herrenschmidt <benh@...nel.crashing.org>,
Paul Mackerras <paulus@...ba.org>,
Alexey Kardashevskiy <aik@...abs.ru>,
David Gibson <david@...son.dropbear.id.au>,
kernel test robot <lkp@...el.com>,
Nicolin Chen <nicoleotsuka@...il.com>
Cc: linuxppc-dev@...ts.ozlabs.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v5 09/11] powerpc/pseries/iommu: Find existing DDW with
given property name
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@...il.com>
> Reviewed-by: Alexey Kardashevskiy <aik@...abs.ru>
> ---
Reviewed-by: Frederic Barrat <fbarrat@...ux.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;
> }
>
Powered by blists - more mailing lists