[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <6aba748e-0669-34e0-b056-4a76ed141c08@linux.vnet.ibm.com>
Date: Wed, 13 Jul 2016 14:39:13 +0800
From: Songshan Gong <gongss@...ux.vnet.ibm.com>
To: Jiri Olsa <jolsa@...hat.com>
Cc: acme@...nel.org, jolsa@...nel.org, dsahern@...il.com,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH] [RFC V1]s390/perf: fix 'start' address of module's map
在 7/11/2016 8:01 PM, Jiri Olsa 写道:
> On Mon, Jul 11, 2016 at 07:06:14PM +0800, Songshan Gong wrote:
>
> SNIP
>
>>>
>>> we have following functions in tools/lib/api/fs to read
>>> single number from file, which I assume you do above:
>>>
>>> int sysfs__read_int(const char *entry, int *value);
>>> int sysfs__read_ull(const char *entry, unsigned long long *value);
>>>
>>> please check if you could use some of them,
>>> we could add some more generic one if needed
>>
>> It seems infeasible.
>> Each value in /sys/module/[module name]/sections/.text is a string like
>> "0x000003ff8130078\n".
>> But the core function 'strtoull(line, NULL, 10)' in sysfs__read_ull is based
>> on decimal.
>>
>> Maybe you can introduce a new argument indicating the value is based on hex
>> or decimal, or binary?
>
> yea we could specify it directly and add something like:
>
> int filename__read_ull(const char *filename, unsigned long long *value, int base)
>
> plus some other higher layer helpers..
>
> but I wonder if we could use the base 0 (like in the attached patch),
> the man page says it should be able to detect the base
>
> we'd need to check all the current usage to make sure nothing gets broken
>
> jirka
>
>
Since your patch havn't pushed to devel branch, my next version patch
will still use the origin method to parse value from /sys/.
Thanks.
> ---
> diff --git a/tools/lib/api/fs/fs.c b/tools/lib/api/fs/fs.c
> index 08556cf2c70d..d18ae548468a 100644
> --- a/tools/lib/api/fs/fs.c
> +++ b/tools/lib/api/fs/fs.c
> @@ -292,7 +292,7 @@ int filename__read_ull(const char *filename, unsigned long long *value)
> return -1;
>
> if (read(fd, line, sizeof(line)) > 0) {
> - *value = strtoull(line, NULL, 10);
> + *value = strtoull(line, NULL, 0);
> if (*value != ULLONG_MAX)
> err = 0;
> }
>
--
SongShan Gong
Powered by blists - more mailing lists