Re: [PATCH bpf-next 4/5] samples/bpf: Refine printing symbol for sampleip

From: Alexei Starovoitov
Date: Thu Apr 19 2018 - 00:47:56 EST


On Thu, Apr 19, 2018 at 09:34:05AM +0800, Leo Yan wrote:
> The code defines macro 'PAGE_OFFSET' and uses it to decide if the
> address is in kernel space or not. But different architecture has
> different 'PAGE_OFFSET' so this program cannot be used for all
> platforms.
>
> This commit changes to check returned pointer from ksym_search() to
> judge if the address falls into kernel space or not, and removes
> macro 'PAGE_OFFSET' as it isn't used anymore. As result, this program
> has no architecture dependency.
>
> Signed-off-by: Leo Yan <leo.yan@xxxxxxxxxx>
> ---
> samples/bpf/sampleip_user.c | 8 +++-----
> 1 file changed, 3 insertions(+), 5 deletions(-)
>
> diff --git a/samples/bpf/sampleip_user.c b/samples/bpf/sampleip_user.c
> index 4ed690b..0eea1b3 100644
> --- a/samples/bpf/sampleip_user.c
> +++ b/samples/bpf/sampleip_user.c
> @@ -26,7 +26,6 @@
> #define DEFAULT_FREQ 99
> #define DEFAULT_SECS 5
> #define MAX_IPS 8192
> -#define PAGE_OFFSET 0xffff880000000000
>
> static int nr_cpus;
>
> @@ -107,14 +106,13 @@ static void print_ip_map(int fd)
> /* sort and print */
> qsort(counts, max, sizeof(struct ipcount), count_cmp);
> for (i = 0; i < max; i++) {
> - if (counts[i].ip > PAGE_OFFSET) {
> - sym = ksym_search(counts[i].ip);

yes. it is x64 specific, since it's a sample code,
but simply removing it is not a fix.
It makes this sampleip code behaving incorrectly.
To do such 'cleanup of ksym' please refactor it in the true generic way,
so these ksym* helpers can work on all archs and put this new
functionality into selftests.
If you can convert these examples into proper self-checking tests
that run out of selftests that would be awesome.
Thanks!