From: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
To: Daniel Axtens <dja@axtens.net>
Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
Stephane Eranian <eranian@google.com>,
Paul Mackerras <paulus@samba.org>,
Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>,
Anshuman Khandual <khandual@linux.vnet.ibm.com>
Subject: Re: [PATCH v1 6/9]powerpc/powernv: dt parser function for nest pmu and its events
Date: Thu, 04 Jun 2015 15:33:53 +0530 [thread overview]
Message-ID: <55702289.8090401@linux.vnet.ibm.com> (raw)
In-Reply-To: <1433292378.438.58.camel@axtens.net>
On Wednesday 03 June 2015 06:16 AM, Daniel Axtens wrote:
>> +static int nest_pmu_create(struct device_node *dev, int pmu_index)
>> +{
>> + struct ppc64_nest_ima_events **p8_events_arr;
>> + struct ppc64_nest_ima_events *p8_events;
>> + struct property *pp;
>> + char *buf;
>> + const __be32 *lval;
>> + u32 val;
>> + int len, idx = 0;
>> + struct nest_pmu *pmu_ptr;
>> + const char *start, *end;
>> +
>> + if (!dev)
>> + return -EINVAL;
>> +
>> + pmu_ptr = kzalloc(sizeof(struct nest_pmu), GFP_KERNEL);
>> + if (!pmu_ptr)
>> + return -ENOMEM;
>> +
>> + /* Needed for hotplug/migration */
>> + per_nestpmu_arr[pmu_index] = pmu_ptr;
>> +
>> + p8_events_arr = kzalloc((sizeof(struct ppc64_nest_ima_events) * 64),
>> + GFP_KERNEL);
>> + if (!p8_events_arr)
>> + return -ENOMEM;
>> + p8_events = (struct ppc64_nest_ima_events *)p8_events_arr;
> I think you're trying to get the first element of the array here: why
> not just `p8_events = p8_events_arr[0];`?
Yes. Will change it.
>> +
>> + /*
>> + * Loop through each property
>> + */
>> + for_each_property_of_node(dev, pp) {
>> + start = pp->name;
>> + end = start + strlen(start);
>> + len = strlen(start);
>> +
>> + if (!strcmp(pp->name, "name")) {
>> + if (!pp->value ||
>> + (strnlen(pp->value, pp->length) >= pp->length))
>> + return -EINVAL;
>> +
>> + buf = kzalloc(MAX_PMU_NAME_LEN, GFP_KERNEL);
>> + if (!buf)
>> + return -ENOMEM;
>> +
>> + sprintf(buf, "Nest_%s", (char *)pp->value);
>> + pmu_ptr->pmu.name = (char *)buf;
>> + pmu_ptr->attr_groups[1] = &p8_nest_format_group;
>> + pmu_ptr->attr_groups[2] = &cpumask_nest_pmu_attr_group;
>> + }
>> +
>> + /* Skip these, we dont need it */
>> + if (!strcmp(pp->name, "name") ||
>> + !strcmp(pp->name, "phandle") ||
>> + !strcmp(pp->name, "device_type") ||
>> + !strcmp(pp->name, "linux,phandle"))
>> + continue;
>> +
>> + buf = kzalloc(MAX_PMU_NAME_LEN, GFP_KERNEL);
>> + if (!buf)
>> + return -ENOMEM;
>> +
>> + if (strncmp(pp->name, "unit.", 5) == 0) {
>> + start += 5;
>> + len = strlen(start);
>> + strncpy(buf, start, strlen(start));
> You've just saved strlen(start), you could just use len. This also
> applies in the next case below.
Yes. That is true.
>> + p8_events->ev_name = buf;
>> +
>> + if (!pp->value ||
>> + (strnlen(pp->value, pp->length) >= pp->length))
>> + return -EINVAL;
> The strnlen will never be greater than pp->length, so the only case this
> will hit is if strnlen(pp->value, pp->length) == pp->length. This also
> applies again below.
True will change it.
>
>> +
>> + buf = kzalloc(MAX_PMU_NAME_LEN, GFP_KERNEL);
>> + if (!buf)
>> + return -ENOMEM;
>> +
>> + strncpy(buf, (const char *)pp->value, pp->length);
>> + p8_events->ev_value = buf;
>> + idx++;
>> + p8_events++;
>> +
>> + } else if (strncmp(pp->name, "scale.", 6) == 0) {
>> + start += 6;
>> + len = strlen(start);
>> + strncpy(buf, start, strlen(start));
>> + p8_events->ev_name = buf;
>> +
>> + if (!pp->value ||
>> + (strnlen(pp->value, pp->length) >= pp->length))
>> + return -EINVAL;
>> +
>> + buf = kzalloc(MAX_PMU_NAME_LEN, GFP_KERNEL);
>> + if (!buf)
>> + return -ENOMEM;
>> +
>> + strncpy(buf, (const char *)pp->value, pp->length);
>> + p8_events->ev_value = buf;
>> + idx++;
>> + p8_events++;
>> +
>> + } else {
>> + strncpy(buf, start, len);
> This is the only case where you actually use the orignal version of len.
> This makes me think you could drop the variable entirely and just use
> strlen(start) in all cases. I also don't see where `end` is used
> anywhere in this function: could that be dropped?
Correct. I guess we can drop both len and end. I used "end" for my
prints during debug.
>> + p8_events->ev_name = buf;
>> + lval = of_get_property(dev, pp->name, NULL);
>> + val = (uint32_t)be32_to_cpup(lval);
>> +
>> + /*
>> + * Use DT property value as the event
>> + */
> I'm not sure if this is my mailer, but it looks like lines 2 and 3 of
> that comment need to be indented to line up under the * in the first
> line.
No, it is not your mail :). Will fix the indentation.
>> + buf = kzalloc(MAX_PMU_NAME_LEN, GFP_KERNEL);
>> + if (!buf)
>> + return -ENOMEM;
>> +
>> + sprintf(buf,"event=0x%x", val);
>> + p8_events->ev_value = buf;
>> + p8_events++;
>> + idx++;
>> + }
>> + }
>> +
>> + return 0;
>> +}
>> +
>> @@ -288,7 +427,7 @@ static int __init nest_pmu_init(void)
>> cpumask_chip();
>>
>> /*
>> - * Detect the Nest PMU feature
>> + * Detect the Nest PMU feature and register the pmus
>> */
>> if (nest_ima_detect_parse())
>> return 0;
> As the changed comment indicates, this function changes the behaviour of
> nest_ima_detect_parse. Given that it's a new function introduced by this
> patch series, maybe it should also change names.
>
Ok will fix it.
Thanks for the review.
Maddy
next prev parent reply other threads:[~2015-06-04 10:04 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-02 15:59 [PATCH v1 0/9]powerpc/powernv: Nest Instrumentation support Madhavan Srinivasan
2015-06-02 15:59 ` [PATCH v1 1/9]powerpc/powernv: Data structure and macros definition Madhavan Srinivasan
2015-06-02 23:11 ` Daniel Axtens
2015-06-04 7:48 ` Madhavan Srinivasan
2015-06-02 15:59 ` [PATCH v1 2/9]powerpc/powernv: nest pmu init function with cpumask attr Madhavan Srinivasan
2015-06-02 23:14 ` Daniel Axtens
2015-06-04 8:06 ` Madhavan Srinivasan
2015-06-02 15:59 ` [PATCH v1 3/9]powerpc/powernv: Add cpu hotplug support Madhavan Srinivasan
2015-06-02 23:38 ` Daniel Axtens
2015-06-04 8:30 ` Madhavan Srinivasan
2015-06-02 15:59 ` [PATCH v1 4/9]powerpc/powernv: Add generic nest pmu ops Madhavan Srinivasan
2015-06-03 0:03 ` Daniel Axtens
2015-06-04 9:06 ` Madhavan Srinivasan
2015-06-04 9:27 ` Madhavan Srinivasan
2015-06-02 15:59 ` [PATCH v1 5/9]powerpc/powernv: nest pmu feature detection support Madhavan Srinivasan
2015-06-03 0:21 ` Daniel Axtens
2015-06-04 9:52 ` Madhavan Srinivasan
2015-06-02 15:59 ` [PATCH v1 6/9]powerpc/powernv: dt parser function for nest pmu and its events Madhavan Srinivasan
2015-06-03 0:46 ` Daniel Axtens
2015-06-04 10:03 ` Madhavan Srinivasan [this message]
2015-06-02 15:59 ` [PATCH v1 7/9]powerpc/powernv: Event attr creation and PMU registration Madhavan Srinivasan
2015-06-03 1:06 ` Daniel Axtens
2015-06-09 11:41 ` Madhavan Srinivasan
2015-06-02 15:59 ` [PATCH v1 8/9] powerpc/powernv: Add OPAL support for Nest PMU Madhavan Srinivasan
2015-06-03 0:54 ` Daniel Axtens
2015-06-04 10:26 ` Madhavan Srinivasan
2015-06-02 15:59 ` [PATCH v1 9/9]powerpc/powernv: Makefile changes to include nest pmu Madhavan Srinivasan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55702289.8090401@linux.vnet.ibm.com \
--to=maddy@linux.vnet.ibm.com \
--cc=dja@axtens.net \
--cc=eranian@google.com \
--cc=khandual@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=paulus@samba.org \
--cc=sukadev@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).