Message ID | 20181218062041.25198-1-anju@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 860b7d2286236170a36f94946d03ca9888d32571 |
Headers | show |
Series | [v2] powerpc/perf: Fix loop exit condition in nest_imc_event_init | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/apply_patch | success | next/apply_patch Successfully applied |
snowpatch_ozlabs/build-ppc64le | warning | build succeeded but added 1 new sparse warning(s) |
snowpatch_ozlabs/build-ppc64be | warning | build succeeded but added 1 new sparse warning(s) |
snowpatch_ozlabs/build-ppc64e | success | build succeeded & removed 0 sparse warning(s) |
snowpatch_ozlabs/build-pmac32 | success | build succeeded & removed 0 sparse warning(s) |
snowpatch_ozlabs/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 16 lines checked |
On 18/12/18 11:50 AM, Anju T Sudhakar wrote: > The data structure (i.e struct imc_mem_info) to hold the memory address > information for nest imc units is allocated based on the number of nodes > in the system. > > nest_imc_event_init() traverse this struct array to calculate the memory > base address for the event-cpu. If we fail to find a match for the event > cpu's chip-id in imc_mem_info struct array, then the do-while loop will > iterate until we crash. > > Fix this by changing the loop exit condition based on the number of > non zero vbase elements in the array, since the allocation is done for > nr_chips + 1. Reviewed-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com> B/w we will also need this patch to go along https://patchwork.ozlabs.org/patch/1003669/ These 2 fixes need to go to stable also. > Reported-by: Dan Carpenter <dan.carpenter@oracle.com> > Fixes: 885dcd709ba91 ( powerpc/perf: Add nest IMC PMU support) > Signed-off-by: Anju T Sudhakar <anju@linux.vnet.ibm.com> > --- > arch/powerpc/perf/imc-pmu.c | 2 +- > arch/powerpc/platforms/powernv/opal-imc.c | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/arch/powerpc/perf/imc-pmu.c b/arch/powerpc/perf/imc-pmu.c > index 4f34c75..d1009fe 100644 > --- a/arch/powerpc/perf/imc-pmu.c > +++ b/arch/powerpc/perf/imc-pmu.c > @@ -508,7 +508,7 @@ static int nest_imc_event_init(struct perf_event *event) > break; > } > pcni++; > - } while (pcni); > + } while (pcni->vbase != 0); > > if (!flag) > return -ENODEV; > diff --git a/arch/powerpc/platforms/powernv/opal-imc.c b/arch/powerpc/platforms/powernv/opal-imc.c > index 58a0794..3d27f02 100644 > --- a/arch/powerpc/platforms/powernv/opal-imc.c > +++ b/arch/powerpc/platforms/powernv/opal-imc.c > @@ -127,7 +127,7 @@ static int imc_get_mem_addr_nest(struct device_node *node, > nr_chips)) > goto error; > > - pmu_ptr->mem_info = kcalloc(nr_chips, sizeof(*pmu_ptr->mem_info), > + pmu_ptr->mem_info = kcalloc(nr_chips + 1, sizeof(*pmu_ptr->mem_info), > GFP_KERNEL); > if (!pmu_ptr->mem_info) > goto error;
diff --git a/arch/powerpc/perf/imc-pmu.c b/arch/powerpc/perf/imc-pmu.c index 4f34c75..d1009fe 100644 --- a/arch/powerpc/perf/imc-pmu.c +++ b/arch/powerpc/perf/imc-pmu.c @@ -508,7 +508,7 @@ static int nest_imc_event_init(struct perf_event *event) break; } pcni++; - } while (pcni); + } while (pcni->vbase != 0); if (!flag) return -ENODEV; diff --git a/arch/powerpc/platforms/powernv/opal-imc.c b/arch/powerpc/platforms/powernv/opal-imc.c index 58a0794..3d27f02 100644 --- a/arch/powerpc/platforms/powernv/opal-imc.c +++ b/arch/powerpc/platforms/powernv/opal-imc.c @@ -127,7 +127,7 @@ static int imc_get_mem_addr_nest(struct device_node *node, nr_chips)) goto error; - pmu_ptr->mem_info = kcalloc(nr_chips, sizeof(*pmu_ptr->mem_info), + pmu_ptr->mem_info = kcalloc(nr_chips + 1, sizeof(*pmu_ptr->mem_info), GFP_KERNEL); if (!pmu_ptr->mem_info) goto error;
The data structure (i.e struct imc_mem_info) to hold the memory address information for nest imc units is allocated based on the number of nodes in the system. nest_imc_event_init() traverse this struct array to calculate the memory base address for the event-cpu. If we fail to find a match for the event cpu's chip-id in imc_mem_info struct array, then the do-while loop will iterate until we crash. Fix this by changing the loop exit condition based on the number of non zero vbase elements in the array, since the allocation is done for nr_chips + 1. Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Fixes: 885dcd709ba91 ( powerpc/perf: Add nest IMC PMU support) Signed-off-by: Anju T Sudhakar <anju@linux.vnet.ibm.com> --- arch/powerpc/perf/imc-pmu.c | 2 +- arch/powerpc/platforms/powernv/opal-imc.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)