From patchwork Fri Oct 4 05:43:43 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Kazior X-Patchwork-Id: 2987141 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 3BCB59F289 for ; Fri, 4 Oct 2013 05:44:00 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 62A2820444 for ; Fri, 4 Oct 2013 05:43:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D670C203A8 for ; Fri, 4 Oct 2013 05:43:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751363Ab3JDFny (ORCPT ); Fri, 4 Oct 2013 01:43:54 -0400 Received: from ebb05.tieto.com ([131.207.168.36]:56508 "EHLO ebb05.tieto.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751320Ab3JDFnw (ORCPT ); Fri, 4 Oct 2013 01:43:52 -0400 X-AuditID: 83cfa824-b7f188e0000037d3-28-524e5596e4f7 Received: from FIHGA-EXHUB01.eu.tieto.com ( [131.207.136.34]) by ebb05.tieto.com (SMTP Mailer) with SMTP id 55.A8.14291.6955E425; Fri, 4 Oct 2013 08:43:50 +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; Fri, 4 Oct 2013 08:43:49 +0300 From: Michal Kazior To: CC: , Michal Kazior Subject: [PATCH/RFT v2 2/4] ath10k: track vif list internally Date: Fri, 4 Oct 2013 07:43:43 +0200 Message-ID: <1380865425-3791-3-git-send-email-michal.kazior@tieto.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1380865425-3791-1-git-send-email-michal.kazior@tieto.com> References: <1380805765-31521-1-git-send-email-michal.kazior@tieto.com> <1380865425-3791-1-git-send-email-michal.kazior@tieto.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrJIsWRmVeSWpSXmKPExsXSfL5DSXdaqF+QwbUpfBaPLh1jtniz4g67 xbetD9gcmD0+z7zL5rF5Sb3H501yAcxRXDYpqTmZZalF+nYJXBntXXfZCprFKpatWc3ewHhP qIuRk0NCwETi8dWFTBC2mMSFe+vZuhi5OIQEVjFKfJv4FMpZwijxqu8qWBWbgK7Eq8azrCC2 iICCxK9JH9lAbGYBX4lnT5aB1QgL2Ercmd/CCGKzCKhIPG8+xA5i8wq4SUzvOA5kcwBtU5CY M8kGJMwp4C5xcdlLsFYhgRZGibdLBSDKBSVOznzCAjFeQuLgixfMEDUqEgfX72eewCgwC0nZ LCRlCxiZVjHypyYlGZjqlWSmluTrJefnbmIEh+AKlR2MZx9IHWIU4GBU4uHdUOwbJMSaWFZc mXuIUZKDSUmU91GIX5AQX1J+SmVGYnFGfFFpTmrxIUYJDmYlEd4lakA53pTEyqrUonyYlDQH i5I4b4cI0CSB9MSS1OzU1ILUIpisDAeHkgRvNchQwaLU9NSKtMycEoQ0EwcnyHAeoOHnQGp4 iwsSc4sz0yHypxgVpcR5uUASAiCJjNI8uF5YinjFKA70ijBvLEgVDzC9wHW/AhrMBDQ4SsIX ZHBJIkJKqoHR34J55+JnHw39RdvnbZOUOsfT9P3ky8YjX78vyzNJ5EmUPsri8WFTz67tF5gu C3ZeOeb58Mv2UOn6iv5f/y4cmsGyetmU5OY5p1lfTZj83Hc5y54DDAcmLZ9tOl/9cqHR8VvX F261kJGpV5ottO2i66VTITtDzqQtsizOr/l05s0u1z/fWXqmsyqxFGckGmoxFxUnAgBtbuyg 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.6 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 mac80211 interface interations functions have peculiar locking issues. This patch introduces internal (to ath10k) vif list that will be used for vif iteration purposes. Signed-off-by: Michal Kazior --- drivers/net/wireless/ath/ath10k/core.c | 2 ++ drivers/net/wireless/ath/ath10k/core.h | 3 +++ drivers/net/wireless/ath/ath10k/mac.c | 3 +++ 3 files changed, 8 insertions(+) diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c index 7b5dd09..4d04dc8 100644 --- a/drivers/net/wireless/ath/ath10k/core.c +++ b/drivers/net/wireless/ath/ath10k/core.c @@ -710,6 +710,7 @@ struct ath10k *ath10k_core_create(void *hif_priv, struct device *dev, mutex_init(&ar->conf_mutex); spin_lock_init(&ar->data_lock); + INIT_LIST_HEAD(&ar->arvifs); INIT_LIST_HEAD(&ar->peers); init_waitqueue_head(&ar->peer_mapping_wq); @@ -817,6 +818,7 @@ int ath10k_core_start(struct ath10k *ar) goto err_disconnect_htc; ar->free_vdev_map = (1 << TARGET_NUM_VDEVS) - 1; + INIT_LIST_HEAD(&ar->arvifs); return 0; diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h index ce36daa..de20ac0 100644 --- a/drivers/net/wireless/ath/ath10k/core.h +++ b/drivers/net/wireless/ath/ath10k/core.h @@ -205,6 +205,8 @@ struct ath10k_peer { #define ATH10K_VDEV_SETUP_TIMEOUT_HZ (5*HZ) struct ath10k_vif { + struct list_head list; + u32 vdev_id; enum wmi_vdev_type vdev_type; enum wmi_vdev_subtype vdev_subtype; @@ -402,6 +404,7 @@ struct ath10k { /* protects shared structure data */ spinlock_t data_lock; + struct list_head arvifs; struct list_head peers; wait_queue_head_t peer_mapping_wq; diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c index 7f8b258..292e5cd 100644 --- a/drivers/net/wireless/ath/ath10k/mac.c +++ b/drivers/net/wireless/ath/ath10k/mac.c @@ -2051,6 +2051,7 @@ static int ath10k_add_interface(struct ieee80211_hw *hw, } ar->free_vdev_map &= ~BIT(arvif->vdev_id); + list_add(&arvif->list, &ar->arvifs); vdev_param = ar->wmi.vdev_param->def_keyid; ret = ath10k_wmi_vdev_set_param(ar, 0, vdev_param, @@ -2131,6 +2132,7 @@ err_peer_delete: err_vdev_delete: ath10k_wmi_vdev_delete(ar, arvif->vdev_id); ar->free_vdev_map &= ~BIT(arvif->vdev_id); + list_del(&arvif->list); err: mutex_unlock(&ar->conf_mutex); return ret; @@ -2153,6 +2155,7 @@ static void ath10k_remove_interface(struct ieee80211_hw *hw, spin_unlock_bh(&ar->data_lock); ar->free_vdev_map |= 1 << (arvif->vdev_id); + list_del(&arvif->list); if (arvif->vdev_type == WMI_VDEV_TYPE_AP) { ret = ath10k_peer_delete(arvif->ar, arvif->vdev_id, vif->addr);