wl18xx: Bad format for rx_frames_per_rates in debugfs?

From: Nicolas Iooss
Date: Thu Mar 12 2015 - 08:40:05 EST


While adding __printf attributes to several functions in the kernel, I
got a surprising gcc warning in drivers/net/wireless/ti/wl18xx/debugfs.c
about "format '%u' expects argument of type 'unsigned int', but argument
5 has type 'u32 *'".

Indeed it seems that commit c5d94169e818 ("wl18xx: use new fw stats
structures") [1] introduced an array field "u32 rx_frames_per_rates[50]"
in struct wl18xx_acx_rx_rate_stat but is using
WL18XX_DEBUGFS_FWSTATS_FILE(rx_rate, rx_frames_per_rates, "%u"); instead
of something like WL18XX_DEBUGFS_FWSTATS_FILE_ARRAY(rx_rate,
rx_frames_per_rates, 50); for displaying this value. So I believe that
currently the rx_rate entry in debugfs contains a kernel pointer instead
of the actual data. As I don't have the hardware to test I can't be
sure of it.

Is this a real bug which needs to be fixed or something weird I haven't
understood yet?




PS: I got this gcc warning by adding __printf(4, 5) to
wl1271_format_buffer() prototype in

In file included from
/usr/src/linux/drivers/net/wireless/ti/wl18xx/debugfs.c: In function
error: format '%u' expects argument of type 'unsigned int', but argument
5 has type 'u32 *' [-Werror=format=]
DEBUGFS_FWSTATS_FILE(a, b, c, wl18xx_acx_statistics)

note: in definition of macro 'DEBUGFS_FWSTATS_FILE'
struct struct_type *stats = wl->stats.fw_stats; \
/usr/src/linux/drivers/net/wireless/ti/wl18xx/debugfs.c:142:1: note:
in expansion of macro 'WL18XX_DEBUGFS_FWSTATS_FILE'
WL18XX_DEBUGFS_FWSTATS_FILE(rx_rate, rx_frames_per_rates, "%u");
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/