From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932099AbbCLMkB (ORCPT ); Thu, 12 Mar 2015 08:40:01 -0400 Received: from mail-pd0-f179.google.com ([209.85.192.179]:39471 "EHLO mail-pd0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753493AbbCLMj6 (ORCPT ); Thu, 12 Mar 2015 08:39:58 -0400 Message-ID: <55018919.3050902@m4x.org> Date: Thu, 12 Mar 2015 20:39:53 +0800 From: Nicolas Iooss User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: linux-wireless@vger.kernel.org, Kalle Valo CC: netdev@vger.kernel.org, "linux-kernel@vger.kernel.org" Subject: wl18xx: Bad format for rx_frames_per_rates in debugfs? Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello, 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? Thanks -- Nicolas [1] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=c5d94169e8189d02dfbd6143411908357865d777 PS: I got this gcc warning by adding __printf(4, 5) to wl1271_format_buffer() prototype in drivers/net/wireless/ti/wlcore/debugfs.h: In file included from /usr/src/linux/drivers/net/wireless/ti/wl18xx/debugfs.c:23:0: /usr/src/linux/drivers/net/wireless/ti/wl18xx/debugfs.c: In function 'rx_rate_rx_frames_per_rates_read': /usr/src/linux/drivers/net/wireless/ti/wl18xx/debugfs.c:34:32: 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) ^ /usr/src/linux/drivers/net/wireless/ti/wl18xx/../wlcore/debugfs.h:77:9: 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"); ^