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:3.296 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site