2023-11-03 11:23:17

by Anders Roxell

[permalink] [raw]
Subject: [PATCH] selftests: bpf: xskxceiver: ksft_print_msg: fix format type error

Crossbuilding selftests/bpf for architecture arm64, format specifies
type error show up like.

xskxceiver.c:912:34: error: format specifies type 'int' but the argument
has type '__u64' (aka 'unsigned long long') [-Werror,-Wformat]
ksft_print_msg("[%s] expected meta_count [%d], got meta_count [%d]\n",
~~
%llu
__func__, pkt->pkt_nb, meta->count);
^~~~~~~~~~~
xskxceiver.c:929:55: error: format specifies type 'unsigned long long' but
the argument has type 'u64' (aka 'unsigned long') [-Werror,-Wformat]
ksft_print_msg("Frag invalid addr: %llx len: %u\n", addr, len);
~~~~ ^~~~

Fixing the issues by using the proposed format specifiers by the
compilor.

Signed-off-by: Anders Roxell <[email protected]>
---
tools/testing/selftests/bpf/xskxceiver.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/tools/testing/selftests/bpf/xskxceiver.c b/tools/testing/selftests/bpf/xskxceiver.c
index 591ca9637b23..dc03692f34d8 100644
--- a/tools/testing/selftests/bpf/xskxceiver.c
+++ b/tools/testing/selftests/bpf/xskxceiver.c
@@ -908,7 +908,7 @@ static bool is_metadata_correct(struct pkt *pkt, void *buffer, u64 addr)
struct xdp_info *meta = data - sizeof(struct xdp_info);

if (meta->count != pkt->pkt_nb) {
- ksft_print_msg("[%s] expected meta_count [%d], got meta_count [%d]\n",
+ ksft_print_msg("[%s] expected meta_count [%d], got meta_count [%llu]\n",
__func__, pkt->pkt_nb, meta->count);
return false;
}
@@ -926,11 +926,11 @@ static bool is_frag_valid(struct xsk_umem_info *umem, u64 addr, u32 len, u32 exp

if (addr >= umem->num_frames * umem->frame_size ||
addr + len > umem->num_frames * umem->frame_size) {
- ksft_print_msg("Frag invalid addr: %llx len: %u\n", addr, len);
+ ksft_print_msg("Frag invalid addr: %lx len: %u\n", addr, len);
return false;
}
if (!umem->unaligned_mode && addr % umem->frame_size + len > umem->frame_size) {
- ksft_print_msg("Frag crosses frame boundary addr: %llx len: %u\n", addr, len);
+ ksft_print_msg("Frag crosses frame boundary addr: %lx len: %u\n", addr, len);
return false;
}

@@ -1029,7 +1029,7 @@ static int complete_pkts(struct xsk_socket_info *xsk, int batch_size)
u64 addr = *xsk_ring_cons__comp_addr(&xsk->umem->cq, idx + rcvd - 1);

ksft_print_msg("[%s] Too many packets completed\n", __func__);
- ksft_print_msg("Last completion address: %llx\n", addr);
+ ksft_print_msg("Last completion address: %lx\n", addr);
return TEST_FAILURE;
}

@@ -1513,7 +1513,7 @@ static int validate_tx_invalid_descs(struct ifobject *ifobject)
}

if (stats.tx_invalid_descs != ifobject->xsk->pkt_stream->nb_pkts / 2) {
- ksft_print_msg("[%s] tx_invalid_descs incorrect. Got [%u] expected [%u]\n",
+ ksft_print_msg("[%s] tx_invalid_descs incorrect. Got [%llu] expected [%u]\n",
__func__, stats.tx_invalid_descs,
ifobject->xsk->pkt_stream->nb_pkts);
return TEST_FAILURE;
--
2.42.0


2023-11-03 16:29:46

by Andrii Nakryiko

[permalink] [raw]
Subject: Re: [PATCH] selftests: bpf: xskxceiver: ksft_print_msg: fix format type error

On Fri, Nov 3, 2023 at 4:23 AM Anders Roxell <[email protected]> wrote:
>
> Crossbuilding selftests/bpf for architecture arm64, format specifies
> type error show up like.
>
> xskxceiver.c:912:34: error: format specifies type 'int' but the argument
> has type '__u64' (aka 'unsigned long long') [-Werror,-Wformat]
> ksft_print_msg("[%s] expected meta_count [%d], got meta_count [%d]\n",
> ~~
> %llu
> __func__, pkt->pkt_nb, meta->count);
> ^~~~~~~~~~~
> xskxceiver.c:929:55: error: format specifies type 'unsigned long long' but
> the argument has type 'u64' (aka 'unsigned long') [-Werror,-Wformat]
> ksft_print_msg("Frag invalid addr: %llx len: %u\n", addr, len);
> ~~~~ ^~~~
>

With u64s it might be %llx or %lx, depending on architecture, so best
is to force cast to (long long) or (unsigned long long) and then use
%llx.

> Fixing the issues by using the proposed format specifiers by the
> compilor.
>
> Signed-off-by: Anders Roxell <[email protected]>
> ---
> tools/testing/selftests/bpf/xskxceiver.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/tools/testing/selftests/bpf/xskxceiver.c b/tools/testing/selftests/bpf/xskxceiver.c
> index 591ca9637b23..dc03692f34d8 100644
> --- a/tools/testing/selftests/bpf/xskxceiver.c
> +++ b/tools/testing/selftests/bpf/xskxceiver.c
> @@ -908,7 +908,7 @@ static bool is_metadata_correct(struct pkt *pkt, void *buffer, u64 addr)
> struct xdp_info *meta = data - sizeof(struct xdp_info);
>
> if (meta->count != pkt->pkt_nb) {
> - ksft_print_msg("[%s] expected meta_count [%d], got meta_count [%d]\n",
> + ksft_print_msg("[%s] expected meta_count [%d], got meta_count [%llu]\n",
> __func__, pkt->pkt_nb, meta->count);
> return false;
> }
> @@ -926,11 +926,11 @@ static bool is_frag_valid(struct xsk_umem_info *umem, u64 addr, u32 len, u32 exp
>
> if (addr >= umem->num_frames * umem->frame_size ||
> addr + len > umem->num_frames * umem->frame_size) {
> - ksft_print_msg("Frag invalid addr: %llx len: %u\n", addr, len);
> + ksft_print_msg("Frag invalid addr: %lx len: %u\n", addr, len);
> return false;
> }
> if (!umem->unaligned_mode && addr % umem->frame_size + len > umem->frame_size) {
> - ksft_print_msg("Frag crosses frame boundary addr: %llx len: %u\n", addr, len);
> + ksft_print_msg("Frag crosses frame boundary addr: %lx len: %u\n", addr, len);
> return false;
> }
>
> @@ -1029,7 +1029,7 @@ static int complete_pkts(struct xsk_socket_info *xsk, int batch_size)
> u64 addr = *xsk_ring_cons__comp_addr(&xsk->umem->cq, idx + rcvd - 1);
>
> ksft_print_msg("[%s] Too many packets completed\n", __func__);
> - ksft_print_msg("Last completion address: %llx\n", addr);
> + ksft_print_msg("Last completion address: %lx\n", addr);
> return TEST_FAILURE;
> }
>
> @@ -1513,7 +1513,7 @@ static int validate_tx_invalid_descs(struct ifobject *ifobject)
> }
>
> if (stats.tx_invalid_descs != ifobject->xsk->pkt_stream->nb_pkts / 2) {
> - ksft_print_msg("[%s] tx_invalid_descs incorrect. Got [%u] expected [%u]\n",
> + ksft_print_msg("[%s] tx_invalid_descs incorrect. Got [%llu] expected [%u]\n",
> __func__, stats.tx_invalid_descs,
> ifobject->xsk->pkt_stream->nb_pkts);
> return TEST_FAILURE;
> --
> 2.42.0
>
>