From patchwork Tue Jul 16 07:19:53 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Kazior X-Patchwork-Id: 2827952 Return-Path: X-Original-To: patchwork-linux-wireless@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id E53C59F7D6 for ; Tue, 16 Jul 2013 07:20:31 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id D0FB92016C for ; Tue, 16 Jul 2013 07:20:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E3C4220171 for ; Tue, 16 Jul 2013 07:20:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752697Ab3GPHUY (ORCPT ); Tue, 16 Jul 2013 03:20:24 -0400 Received: from ebb06.tieto.com ([131.207.168.38]:62223 "EHLO ebb06.tieto.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752552Ab3GPHUR (ORCPT ); Tue, 16 Jul 2013 03:20:17 -0400 X-AuditID: 83cfa826-b7fc96d000004032-b7-51e4f42bf24a Received: from FIVLA-EXHUB02.eu.tieto.com ( [131.207.136.42]) by ebb06.tieto.com (SMTP Mailer) with SMTP id 18.C6.16434.B24F4E15; Tue, 16 Jul 2013 10:20:12 +0300 (EEST) Received: from uw001058.eu.tieto.com (10.28.19.57) by inbound.tieto.com (131.207.136.49) with Microsoft SMTP Server id 8.3.298.1; Tue, 16 Jul 2013 10:20:11 +0300 From: Michal Kazior To: CC: , Michal Kazior Subject: [PATCH v3 10/10] ath10k: skip fw stats debugfs interface if device is down Date: Tue, 16 Jul 2013 09:19:53 +0200 Message-ID: <1373959193-5164-11-git-send-email-michal.kazior@tieto.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1373959193-5164-1-git-send-email-michal.kazior@tieto.com> References: <1371041642-20273-1-git-send-email-michal.kazior@tieto.com> <1373959193-5164-1-git-send-email-michal.kazior@tieto.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrJIsWRmVeSWpSXmKPExsXSfL5DS1fny5NAgylneS0O35zBbPFmxR12 i29bH7A5MHt8nnmXzeN4RyeTx+dNcgHMUVw2Kak5mWWpRfp2CVwZ5w4kFzwWqZh9+xBTA+M1 gS5GTg4JAROJFV+bWSFsMYkL99azdTFycQgJrGKUOHrjJpSzlFGi7+YXsCo2AV2JV41nwWwR AQWJq8fnMYLYzAK+Es+eLGMCsYUFgiWONIA0c3KwCKhKbL14Dqieg4NXwF3ix5dEEFMCqHXO JBuQCk6g6KX9+5khVrUwSszZ8ZMZJMErIChxcuYTFojxEhIHX7wAiwsJqEgcXL+feQKjwCwk ZbOQlC1gZFrFyJ+alGRgpleSmVqSr5ecn7uJERyCK9R2MD57IHWIUYCDUYmH9wDnk0Ah1sSy 4srcQ4ySHExKorx974FCfEn5KZUZicUZ8UWlOanFhxglOJiVRHgTNwHleFMSK6tSi/JhUtIc LErivEbr7wUKCaQnlqRmp6YWpBbBZGU4OJQkeLM+AzUKFqWmp1akZeaUIKSZODhBhvMADT/9 CWR4cUFibnFmOkT+FKOilDjvXpCEAEgiozQPrheWIl4xigO9Isy7CmQFDzC9wHW/AhrMBDS4 efZjkMEliQgpqQZG/hDdBGVpYTmtmabRy840lzPpqoXcE3vMwO9+Tf38QuENEyvP5bebsFgk Jez1e99qZNf7e9Vz6ZneMR3+WZ7q3jzGrvtylRXOSj177L6qIVlwwuH7jjVfp0xIzuQ+Kmuw 9XmeycKgB8JZbMcfLJ+cIXFfPSRtbf6xbSzurWW7vbyU5m5u1VJiKc5INNRiLipOBACGAkFf 7AIAAA== Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Spam-Status: No, score=-7.3 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP If the device is not running then there may be no FW at all to send the query to. If the FW is already there it might still trigger a crash if the command is sent before the device is fully initialized. Signed-off-by: Michal Kazior --- drivers/net/wireless/ath/ath10k/debug.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/drivers/net/wireless/ath/ath10k/debug.c b/drivers/net/wireless/ath/ath10k/debug.c index 499034b..65279f5 100644 --- a/drivers/net/wireless/ath/ath10k/debug.c +++ b/drivers/net/wireless/ath/ath10k/debug.c @@ -161,7 +161,7 @@ void ath10k_debug_read_target_stats(struct ath10k *ar, struct wmi_pdev_stats *ps; int i; - mutex_lock(&ar->conf_mutex); + spin_lock_bh(&ar->data_lock); stats = &ar->debug.target_stats; @@ -259,6 +259,7 @@ void ath10k_debug_read_target_stats(struct ath10k *ar, } } + spin_unlock_bh(&ar->data_lock); mutex_unlock(&ar->conf_mutex); complete(&ar->debug.event_stats_compl); } @@ -268,35 +269,35 @@ static ssize_t ath10k_read_fw_stats(struct file *file, char __user *user_buf, { struct ath10k *ar = file->private_data; struct ath10k_target_stats *fw_stats; - char *buf; + char *buf = NULL; unsigned int len = 0, buf_len = 2500; - ssize_t ret_cnt; + ssize_t ret_cnt = 0; long left; int i; int ret; fw_stats = &ar->debug.target_stats; + mutex_lock(&ar->conf_mutex); + + if (ar->state != ATH10K_STATE_ON) + goto exit; + buf = kzalloc(buf_len, GFP_KERNEL); if (!buf) - return -ENOMEM; + goto exit; ret = ath10k_wmi_request_stats(ar, WMI_REQUEST_PEER_STAT); if (ret) { ath10k_warn("could not request stats (%d)\n", ret); - kfree(buf); - return -EIO; + goto exit; } left = wait_for_completion_timeout(&ar->debug.event_stats_compl, 1*HZ); + if (left <= 0) + goto exit; - if (left <= 0) { - kfree(buf); - return -ETIMEDOUT; - } - - mutex_lock(&ar->conf_mutex); - + spin_lock_bh(&ar->data_lock); len += scnprintf(buf + len, buf_len - len, "\n"); len += scnprintf(buf + len, buf_len - len, "%30s\n", "ath10k PDEV stats"); @@ -424,14 +425,15 @@ static ssize_t ath10k_read_fw_stats(struct file *file, char __user *user_buf, fw_stats->peer_stat[i].peer_tx_rate); len += scnprintf(buf + len, buf_len - len, "\n"); } + spin_unlock_bh(&ar->data_lock); if (len > buf_len) len = buf_len; ret_cnt = simple_read_from_buffer(user_buf, count, ppos, buf, len); +exit: mutex_unlock(&ar->conf_mutex); - kfree(buf); return ret_cnt; }