Message ID | 20220621075333.4081413-1-windhl@126.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | powerpc/cell: Hold reference returned by of_find_node_by_xxx APIs | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/github-powerpc_ppctests | success | Successfully ran 10 jobs. |
snowpatch_ozlabs/github-powerpc_selftests | success | Successfully ran 10 jobs. |
snowpatch_ozlabs/github-powerpc_sparse | fail | sparse (ppc64, ubuntu-21.10, ppc64) failed at step Build. |
snowpatch_ozlabs/github-powerpc_kernel_qemu | fail | kernel (ppc64_defconfig, fedora-34) failed at step build. |
snowpatch_ozlabs/github-powerpc_clang | fail | kernel (ppc64, ubuntu-21.10, ppc64) failed at step build. |
diff --git a/arch/powerpc/platforms/cell/cbe_regs.c b/arch/powerpc/platforms/cell/cbe_regs.c index 316e533afc00..09cbdfc070b3 100644 --- a/arch/powerpc/platforms/cell/cbe_regs.c +++ b/arch/powerpc/platforms/cell/cbe_regs.c @@ -182,9 +182,15 @@ static struct device_node *__init cbe_get_be_node(int cpu_id) if (WARN_ON_ONCE(!cpu_handle)) return np; - for (i=0; i<len; i++) - if (of_find_node_by_phandle(cpu_handle[i]) == of_get_cpu_node(cpu_id, NULL)) + for (i=0; i<len; i++) { + struct device_node *ch_np = of_find_node_by_phandle(cpu_handle[i]); + struct device_node *ci_np = of_get_cpu_node(cpu_id, NULL); + + of_node_put(ch_np); + of_node_put(ci_np); + if (ch_np == ci_np) return np; + } } return NULL; diff --git a/arch/powerpc/platforms/cell/iommu.c b/arch/powerpc/platforms/cell/iommu.c index 0ca3efeef293..3ba3742c4ae7 100644 --- a/arch/powerpc/platforms/cell/iommu.c +++ b/arch/powerpc/platforms/cell/iommu.c @@ -719,8 +719,11 @@ static int __init cell_iommu_init_disabled(void) /* First make sure all IOC translation is turned off */ cell_disable_iommus(); + np = of_find_node_by_name(NULL, "axon") + of_node_put(np); + /* If we have no Axon, we set up the spider DMA magic offset */ - if (of_find_node_by_name(NULL, "axon") == NULL) + if (!np) cell_dma_nommu_offset = SPIDER_DMA_OFFSET; /* Now we need to check to see where the memory is mapped
In cell_iommu_init_disabled() and cbe_get_be_node(), we need to hold the reference returned by of_find_node_by_xxx APIs and use it to call of_node_put() for refcount balance. Signed-off-by: Liang He <windhl@126.com> --- arch/powerpc/platforms/cell/cbe_regs.c | 10 ++++++++-- arch/powerpc/platforms/cell/iommu.c | 5 ++++- 2 files changed, 12 insertions(+), 3 deletions(-)