linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
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

  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).