* [ath9k-devel] [PATCH 0/5] ath10k: cleanups
@ 2013-04-17 6:04 Michal Kazior
2013-04-17 6:04 ` [ath9k-devel] [PATCH 1/5] ath10k: replace debug_mtx with conf_mutex Michal Kazior
` (5 more replies)
0 siblings, 6 replies; 16+ messages in thread
From: Michal Kazior @ 2013-04-17 6:04 UTC (permalink / raw)
To: ath9k-devel
Michal Kazior (5):
ath10k: replace debug_mtx with conf_mutex
ath10k: change wmi structure access
ath10k: fix coding style
ath10k: use ath10k_warn() instead of ath10k_info()
ath10k: fix function prototype argument name
drivers/net/wireless/ath/ath10k/core.h | 19 ++++--
drivers/net/wireless/ath/ath10k/debug.c | 10 +--
drivers/net/wireless/ath/ath10k/debug.h | 4 +-
drivers/net/wireless/ath/ath10k/htc.h | 5 +-
drivers/net/wireless/ath/ath10k/mac.c | 10 +--
drivers/net/wireless/ath/ath10k/txrx.c | 16 ++---
drivers/net/wireless/ath/ath10k/wmi.c | 104 +++++++++++--------------------
7 files changed, 76 insertions(+), 92 deletions(-)
--
1.7.9.5
^ permalink raw reply [flat|nested] 16+ messages in thread
* [ath9k-devel] [PATCH 1/5] ath10k: replace debug_mtx with conf_mutex
2013-04-17 6:04 [ath9k-devel] [PATCH 0/5] ath10k: cleanups Michal Kazior
@ 2013-04-17 6:04 ` Michal Kazior
2013-04-18 9:44 ` Kalle Valo
2013-04-17 6:04 ` [ath9k-devel] [PATCH 2/5] ath10k: change wmi structure access Michal Kazior
` (4 subsequent siblings)
5 siblings, 1 reply; 16+ messages in thread
From: Michal Kazior @ 2013-04-17 6:04 UTC (permalink / raw)
To: ath9k-devel
It's not a good to have too many mutexes. The
patch simplifies locking of debufs to use
conf_mutex.
Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
---
drivers/net/wireless/ath/ath10k/core.h | 1 -
drivers/net/wireless/ath/ath10k/debug.c | 10 +++++-----
drivers/net/wireless/ath/ath10k/debug.h | 4 ++--
3 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h
index 193ac31..4577987 100644
--- a/drivers/net/wireless/ath/ath10k/core.h
+++ b/drivers/net/wireless/ath/ath10k/core.h
@@ -240,7 +240,6 @@ struct ath10k_debug {
u32 wmi_service_bitmap[WMI_SERVICE_BM_SIZE];
struct completion event_stats_compl;
- struct mutex debug_mtx;
};
struct ath10k {
diff --git a/drivers/net/wireless/ath/ath10k/debug.c b/drivers/net/wireless/ath/ath10k/debug.c
index 9b0096c..78bfbc9 100644
--- a/drivers/net/wireless/ath/ath10k/debug.c
+++ b/drivers/net/wireless/ath/ath10k/debug.c
@@ -113,7 +113,7 @@ static ssize_t ath10k_read_wmi_services(struct file *file,
if (!buf)
return -ENOMEM;
- mutex_lock(&ar->debug.debug_mtx);
+ mutex_lock(&ar->conf_mutex);
if (len > buf_len)
len = buf_len;
@@ -134,7 +134,7 @@ static ssize_t ath10k_read_wmi_services(struct file *file,
ret_cnt = simple_read_from_buffer(user_buf, count, ppos, buf, len);
- mutex_unlock(&ar->debug.debug_mtx);
+ mutex_unlock(&ar->conf_mutex);
kfree(buf);
return ret_cnt;
@@ -176,7 +176,7 @@ static ssize_t ath10k_read_fw_stats(struct file *file, char __user *user_buf,
return -ETIMEDOUT;
}
- mutex_lock(&ar->debug.debug_mtx);
+ mutex_lock(&ar->conf_mutex);
len += scnprintf(buf + len, buf_len - len, "\n");
len += scnprintf(buf + len, buf_len - len, "%30s\n",
@@ -306,7 +306,7 @@ static ssize_t ath10k_read_fw_stats(struct file *file, char __user *user_buf,
ret_cnt = simple_read_from_buffer(user_buf, count, ppos, buf, len);
- mutex_unlock(&ar->debug.debug_mtx);
+ mutex_unlock(&ar->conf_mutex);
kfree(buf);
return ret_cnt;
@@ -328,7 +328,7 @@ int ath10k_debug_create(struct ath10k *ar)
return -ENOMEM;
init_completion(&ar->debug.event_stats_compl);
- mutex_init(&ar->debug.debug_mtx);
+ mutex_init(&ar->conf_mutex);
debugfs_create_file("fw_stats", S_IRUSR, ar->debug.debugfs_phy, ar,
&fops_fw_stats);
diff --git a/drivers/net/wireless/ath/ath10k/debug.h b/drivers/net/wireless/ath/ath10k/debug.h
index dc4847b..b57a258 100644
--- a/drivers/net/wireless/ath/ath10k/debug.h
+++ b/drivers/net/wireless/ath/ath10k/debug.h
@@ -61,7 +61,7 @@ static inline void ath10k_debug_read_target_stats(struct ath10k *ar,
int num_pdev_stats, num_vdev_stats, num_peer_stats;
int i;
- mutex_lock(&ar->debug.debug_mtx);
+ mutex_lock(&ar->conf_mutex);
fw_stats = &ar->debug.target_stats;
@@ -149,7 +149,7 @@ static inline void ath10k_debug_read_target_stats(struct ath10k *ar,
}
}
- mutex_unlock(&ar->debug.debug_mtx);
+ mutex_unlock(&ar->conf_mutex);
complete(&ar->debug.event_stats_compl);
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [ath9k-devel] [PATCH 2/5] ath10k: change wmi structure access
2013-04-17 6:04 [ath9k-devel] [PATCH 0/5] ath10k: cleanups Michal Kazior
2013-04-17 6:04 ` [ath9k-devel] [PATCH 1/5] ath10k: replace debug_mtx with conf_mutex Michal Kazior
@ 2013-04-17 6:04 ` Michal Kazior
2013-04-17 6:04 ` [ath9k-devel] [PATCH 3/5] ath10k: fix coding style Michal Kazior
` (3 subsequent siblings)
5 siblings, 0 replies; 16+ messages in thread
From: Michal Kazior @ 2013-04-17 6:04 UTC (permalink / raw)
To: ath9k-devel
WMI structure shouldn't be a magic void pointer.
Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
---
drivers/net/wireless/ath/ath10k/core.h | 18 +++++-
drivers/net/wireless/ath/ath10k/htc.h | 3 +-
drivers/net/wireless/ath/ath10k/wmi.c | 104 +++++++++++---------------------
3 files changed, 53 insertions(+), 72 deletions(-)
diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h
index 4577987..4781310 100644
--- a/drivers/net/wireless/ath/ath10k/core.h
+++ b/drivers/net/wireless/ath/ath10k/core.h
@@ -23,6 +23,7 @@
#include <linux/types.h>
#include <linux/pci.h>
+#include "htc.h"
#include "hw.h"
#include "targaddrs.h"
#include "regtable.h"
@@ -114,6 +115,19 @@ struct ath10k_bmi {
bool done_sent;
};
+struct ath10k_wmi {
+ struct ath10k *ar;
+
+ enum htc_endpoint_id eid;
+ struct completion service_ready;
+ struct completion unified_ready;
+ atomic_t pending_tx_count;
+ wait_queue_head_t wq;
+
+ struct sk_buff_head wmi_event_list;
+ struct work_struct wmi_event_work;
+};
+
struct ath10k_peer_stat {
u8 peer_macaddr[ETH_ALEN];
u32 peer_rssi;
@@ -271,9 +285,7 @@ struct ath10k {
const struct ath10k_hif_ops *ops;
} hif;
- struct {
- void *wmi;
- } modules;
+ struct ath10k_wmi wmi;
#if defined(CONFIG_PM_SLEEP)
wait_queue_head_t event_queue;
diff --git a/drivers/net/wireless/ath/ath10k/htc.h b/drivers/net/wireless/ath/ath10k/htc.h
index 9bf3997..4ad8ca2 100644
--- a/drivers/net/wireless/ath/ath10k/htc.h
+++ b/drivers/net/wireless/ath/ath10k/htc.h
@@ -21,8 +21,9 @@
#include <linux/kernel.h>
#include <linux/list.h>
#include <linux/bug.h>
-#include "core.h"
+#include <linux/skbuff.h>
+struct ath10k;
#define MAKE_SERVICE_ID(group, index) \
(int)(((int)(group) << 8) | (int)(index))
diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
index 1cb55bb..4afc8cf 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.c
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
@@ -23,28 +23,14 @@
#include "wmi.h"
#include "mac.h"
-struct wmi_struct {
- struct ath10k *ar;
-
- enum htc_endpoint_id eid;
- struct completion service_ready;
- struct completion unified_ready;
- atomic_t pending_tx_count;
- wait_queue_head_t wq;
-
- struct sk_buff_head wmi_event_list;
- struct work_struct wmi_event_work;
-};
-
void wmi_flush_tx(struct ath10k *ar)
{
- struct wmi_struct *wmi = ar->modules.wmi;
int ret;
- ret = wait_event_timeout(wmi->wq,
- atomic_read(&wmi->pending_tx_count) == 0,
+ ret = wait_event_timeout(ar->wmi.wq,
+ atomic_read(&ar->wmi.pending_tx_count) == 0,
5*HZ);
- if (atomic_read(&wmi->pending_tx_count) == 0)
+ if (atomic_read(&ar->wmi.pending_tx_count) == 0)
return;
if (ret == 0)
@@ -55,18 +41,16 @@ void wmi_flush_tx(struct ath10k *ar)
int wmi_wait_for_service_ready(struct ath10k *ar)
{
- struct wmi_struct *wmi = ar->modules.wmi;
int ret;
- ret = wait_for_completion_timeout(&wmi->service_ready,
+ ret = wait_for_completion_timeout(&ar->wmi.service_ready,
WMI_SERVICE_READY_TIMEOUT_HZ);
return ret;
}
int wmi_wait_for_unified_ready(struct ath10k *ar)
{
- struct wmi_struct *wmi = ar->modules.wmi;
int ret;
- ret = wait_for_completion_timeout(&wmi->unified_ready,
+ ret = wait_for_completion_timeout(&ar->wmi.unified_ready,
WMI_UNIFIED_READY_TIMEOUT_HZ);
return ret;
}
@@ -92,12 +76,12 @@ static struct sk_buff *wmi_alloc_skb(u32 len)
static void wmi_htc_tx_complete(struct sk_buff *skb)
{
struct ath10k_skb_cb *skb_cb = ATH10K_SKB_CB(skb);
- struct wmi_struct *wmi = skb_cb->htc.priv;
+ struct ath10k *ar = skb_cb->htc.priv;
dev_kfree_skb(skb);
- if (atomic_sub_return(1, &wmi->pending_tx_count) == 0)
- wake_up(&wmi->wq);
+ if (atomic_sub_return(1, &ar->wmi.pending_tx_count) == 0)
+ wake_up(&ar->wmi.wq);
}
/* WMI command API */
@@ -105,7 +89,6 @@ static int wmi_cmd_send(struct ath10k *ar, struct sk_buff *skb,
enum wmi_cmd_id cmd_id)
{
struct ath10k_skb_cb *skb_cb = ATH10K_SKB_CB(skb);
- struct wmi_struct *wmi = ar->modules.wmi;
struct wmi_cmd_hdr *cmd_hdr;
int status;
@@ -117,25 +100,25 @@ static int wmi_cmd_send(struct ath10k *ar, struct sk_buff *skb,
cmd_hdr = (struct wmi_cmd_hdr *)skb->data;
cmd_hdr->cmd_id = __cpu_to_le16(cmd_id);
- if (atomic_add_return(1, &wmi->pending_tx_count) >
+ if (atomic_add_return(1, &ar->wmi.pending_tx_count) >
WMI_MAX_PENDING_TX_COUNT) {
/* avoid using up memory when FW hangs */
- atomic_dec(&wmi->pending_tx_count);
+ atomic_dec(&ar->wmi.pending_tx_count);
ath10k_warn("%s: too many tx packets pending\n", __func__);
return -EBUSY;
}
memset(skb_cb, 0, sizeof(*skb_cb));
skb_cb->htc.complete = wmi_htc_tx_complete;
- skb_cb->htc.priv = wmi;
+ skb_cb->htc.priv = ar;
trace_ath10k_wmi_cmd(cmd_id, skb->data, skb->len);
- status = ath10k_htc_send(ar->htc_handle, wmi->eid, skb);
+ status = ath10k_htc_send(ar->htc_handle, ar->wmi.eid, skb);
if (status) {
dev_kfree_skb_any(skb);
- atomic_dec(&wmi->pending_tx_count);
- ath10k_warn("%s(): htc send failed (%d)\n", __func__, status);
+ atomic_dec(&ar->wmi.pending_tx_count);
+ ath10k_warn("%s(): htc_send failed (%d)\n", __func__, status);
}
return status;
@@ -754,7 +737,6 @@ static void wmi_event_vdev_install_key_complete(struct ath10k *ar,
static void wmi_service_ready_event_rx(struct ath10k *ar, struct sk_buff *skb)
{
struct ath_common *common = ath10k_common(ar);
- struct wmi_struct *wmi = ar->modules.wmi;
struct wmi_service_ready_event *ev = (void *)skb->data;
if (skb->len < sizeof(*ev)) {
@@ -806,13 +788,12 @@ static void wmi_service_ready_event_rx(struct ath10k *ar, struct sk_buff *skb)
__le32_to_cpu(ev->sys_cap_info),
__le32_to_cpu(ev->num_mem_reqs));
- complete(&wmi->service_ready);
+ complete(&ar->wmi.service_ready);
}
static int wmi_ready_event_rx(struct ath10k *ar, struct sk_buff *skb)
{
struct wmi_ready_event *ev = (void *)skb->data;
- struct wmi_struct *wmi = ar->modules.wmi;
if (WARN_ON(skb->len < sizeof(*ev)))
return -EINVAL;
@@ -834,13 +815,12 @@ static int wmi_ready_event_rx(struct ath10k *ar, struct sk_buff *skb)
ev->mac_addr.addr,
__le32_to_cpu(ev->status));
- complete(&wmi->unified_ready);
+ complete(&ar->wmi.unified_ready);
return 0;
}
-static void wmi_event_process(struct wmi_struct *wmi, struct sk_buff *skb)
+static void wmi_event_process(struct ath10k *ar, struct sk_buff *skb)
{
- struct ath10k *ar = wmi->ar;
struct wmi_cmd_hdr *cmd_hdr;
u16 id;
u8 *event;
@@ -968,22 +948,22 @@ static void wmi_event_process(struct wmi_struct *wmi, struct sk_buff *skb)
static void wmi_event_work(struct work_struct *work)
{
- struct wmi_struct *wmi = container_of(work, struct wmi_struct,
- wmi_event_work);
+ struct ath10k *ar = container_of(work, struct ath10k,
+ wmi.wmi_event_work);
struct sk_buff *skb;
for (;;) {
- skb = skb_dequeue(&wmi->wmi_event_list);
+ skb = skb_dequeue(&ar->wmi.wmi_event_list);
if (!skb)
break;
- wmi_event_process(wmi, skb);
+ wmi_event_process(ar, skb);
}
}
static void wmi_process_rx(void *ptr, struct sk_buff *skb)
{
- struct wmi_struct *wmi = ptr;
+ struct ath10k *ar = ptr;
struct wmi_cmd_hdr *cmd_hdr = (struct wmi_cmd_hdr *)skb->data;
enum wmi_event_id event_id = __le16_to_cpu(cmd_hdr->cmd_id);
@@ -996,57 +976,47 @@ static void wmi_process_rx(void *ptr, struct sk_buff *skb)
* thus can't be defered to a worker thread */
switch (event_id) {
case WMI_HOST_SWBA_EVENTID:
- wmi_event_process(wmi, skb);
+ wmi_event_process(ar, skb);
return;
default:
break;
}
- skb_queue_tail(&wmi->wmi_event_list, skb);
- queue_work(wmi->ar->workqueue, &wmi->wmi_event_work);
+ skb_queue_tail(&ar->wmi.wmi_event_list, skb);
+ queue_work(ar->workqueue, &ar->wmi.wmi_event_work);
}
/* WMI Initialization functions */
int wmi_attach(struct ath10k *ar)
{
- struct wmi_struct *wmi;
-
- wmi = kzalloc(sizeof(*wmi), GFP_KERNEL);
- if (!wmi)
- return -ENOMEM;
-
- wmi->ar = ar;
- init_completion(&wmi->service_ready);
- init_completion(&wmi->unified_ready);
- init_waitqueue_head(&wmi->wq);
+ ar->wmi.ar = ar;
+ init_completion(&ar->wmi.service_ready);
+ init_completion(&ar->wmi.unified_ready);
+ init_waitqueue_head(&ar->wmi.wq);
- skb_queue_head_init(&wmi->wmi_event_list);
- INIT_WORK(&wmi->wmi_event_work, wmi_event_work);
+ skb_queue_head_init(&ar->wmi.wmi_event_list);
+ INIT_WORK(&ar->wmi.wmi_event_work, wmi_event_work);
- ar->modules.wmi = wmi;
return 0;
}
void wmi_detach(struct ath10k *ar)
{
- struct wmi_struct *wmi = ar->modules.wmi;
struct sk_buff *skb;
/* HTC should've drained the packets already */
- if (WARN_ON(atomic_read(&wmi->pending_tx_count) > 0))
+ if (WARN_ON(atomic_read(&ar->wmi.pending_tx_count) > 0))
ath10k_warn("there are still pending packets\n");
- cancel_work_sync(&wmi->wmi_event_work);
+ cancel_work_sync(&ar->wmi.wmi_event_work);
for (;;) {
- skb = skb_dequeue(&wmi->wmi_event_list);
+ skb = skb_dequeue(&ar->wmi.wmi_event_list);
if (!skb)
break;
dev_kfree_skb_any(skb);
}
-
- kfree(ar->modules.wmi);
}
int wmi_connect_htc_service(struct ath10k *ar)
@@ -1054,13 +1024,12 @@ int wmi_connect_htc_service(struct ath10k *ar)
int status;
struct htc_service_connect_req connect;
struct htc_service_connect_resp response;
- struct wmi_struct *wmi = ar->modules.wmi;
memset(&connect, 0, sizeof(connect));
memset(&response, 0, sizeof(response));
/* these fields are the same for all service endpoints */
- connect.ep_callbacks.context = wmi;
+ connect.ep_callbacks.context = ar;
connect.ep_callbacks.ep_rx_complete = wmi_process_rx;
/* connect to control service */
@@ -1073,8 +1042,7 @@ int wmi_connect_htc_service(struct ath10k *ar)
return status;
}
- wmi->eid = response.ep_id;
-
+ ar->wmi.eid = response.ep_id;
return 0;
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [ath9k-devel] [PATCH 3/5] ath10k: fix coding style
2013-04-17 6:04 [ath9k-devel] [PATCH 0/5] ath10k: cleanups Michal Kazior
2013-04-17 6:04 ` [ath9k-devel] [PATCH 1/5] ath10k: replace debug_mtx with conf_mutex Michal Kazior
2013-04-17 6:04 ` [ath9k-devel] [PATCH 2/5] ath10k: change wmi structure access Michal Kazior
@ 2013-04-17 6:04 ` Michal Kazior
2013-04-17 6:04 ` [ath9k-devel] [PATCH 4/5] ath10k: use ath10k_warn() instead of ath10k_info() Michal Kazior
` (2 subsequent siblings)
5 siblings, 0 replies; 16+ messages in thread
From: Michal Kazior @ 2013-04-17 6:04 UTC (permalink / raw)
To: ath9k-devel
Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
---
drivers/net/wireless/ath/ath10k/mac.c | 8 +++++---
drivers/net/wireless/ath/ath10k/txrx.c | 16 +++++++++-------
2 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index 9fa8fc3..aa8c130 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -1232,10 +1232,12 @@ static void ath10k_tx_h_update_wep_key(struct sk_buff *skb)
ret = wmi_vdev_set_param(ar, arvif->vdev_id, WMI_VDEV_PARAM_DEF_KEYID,
key->keyidx);
- if (!ret)
- arvif->def_wep_key_index = key->keyidx;
- else
+ if (ret) {
ath10k_warn("could not update wep keyidx (%d)\n", ret);
+ return;
+ }
+
+ arvif->def_wep_key_index = key->keyidx;
}
static void ath10k_tx_h_add_p2p_noa_ie(struct ath10k *ar, struct sk_buff *skb)
diff --git a/drivers/net/wireless/ath/ath10k/txrx.c b/drivers/net/wireless/ath/ath10k/txrx.c
index a40d019..85d54bb 100644
--- a/drivers/net/wireless/ath/ath10k/txrx.c
+++ b/drivers/net/wireless/ath/ath10k/txrx.c
@@ -31,14 +31,16 @@ static void ath10k_report_offchan_tx(struct ath10k *ar, struct sk_buff *skb)
* offchan_tx_completed for a different skb. Prevent this by using
* offchan_tx_skb. */
spin_lock_bh(&ar->data_lock);
- if (ar->offchan_tx_skb == skb) {
- complete(&ar->offchan_tx_completed);
- ar->offchan_tx_skb = NULL; /* just for sanity */
-
- ath10k_dbg(ATH10K_DBG_HTT, "completed offchannel skb %p\n", skb);
+ if (ar->offchan_tx_skb != skb) {
+ ath10k_warn("completed old offchannel frame\n");
+ goto out;
}
- else
- ath10k_warn("completed late offchannel skb %p\n", skb);
+
+ complete(&ar->offchan_tx_completed);
+ ar->offchan_tx_skb = NULL; /* just for sanity */
+
+ ath10k_dbg(ATH10K_DBG_HTT, "completed offchannel skb %p\n", skb);
+out:
spin_unlock_bh(&ar->data_lock);
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [ath9k-devel] [PATCH 4/5] ath10k: use ath10k_warn() instead of ath10k_info()
2013-04-17 6:04 [ath9k-devel] [PATCH 0/5] ath10k: cleanups Michal Kazior
` (2 preceding siblings ...)
2013-04-17 6:04 ` [ath9k-devel] [PATCH 3/5] ath10k: fix coding style Michal Kazior
@ 2013-04-17 6:04 ` Michal Kazior
2013-04-17 6:04 ` [ath9k-devel] [PATCH 5/5] ath10k: fix function prototype argument name Michal Kazior
2013-04-18 9:50 ` [ath9k-devel] [PATCH 0/5] ath10k: cleanups Kalle Valo
5 siblings, 0 replies; 16+ messages in thread
From: Michal Kazior @ 2013-04-17 6:04 UTC (permalink / raw)
To: ath9k-devel
Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
---
drivers/net/wireless/ath/ath10k/mac.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index aa8c130..c0dc157 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -1327,7 +1327,7 @@ void ath10k_offchan_tx_work(struct work_struct *work)
spin_unlock_bh(&ar->data_lock);
if (peer)
- ath10k_info("peer %pM on vdev %d already present\n",
+ ath10k_dbg(ATH10K_DBG_MAC, "peer %pM on vdev %d already present\n",
peer_addr, vdev_id);
if (!peer) {
--
1.7.9.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [ath9k-devel] [PATCH 5/5] ath10k: fix function prototype argument name
2013-04-17 6:04 [ath9k-devel] [PATCH 0/5] ath10k: cleanups Michal Kazior
` (3 preceding siblings ...)
2013-04-17 6:04 ` [ath9k-devel] [PATCH 4/5] ath10k: use ath10k_warn() instead of ath10k_info() Michal Kazior
@ 2013-04-17 6:04 ` Michal Kazior
2013-04-18 9:50 ` [ath9k-devel] [PATCH 0/5] ath10k: cleanups Kalle Valo
5 siblings, 0 replies; 16+ messages in thread
From: Michal Kazior @ 2013-04-17 6:04 UTC (permalink / raw)
To: ath9k-devel
This argument is used to specify how much data we
want to pack up into a skbuff, no just headroom.
Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
---
drivers/net/wireless/ath/ath10k/htc.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/ath/ath10k/htc.h b/drivers/net/wireless/ath/ath10k/htc.h
index 4ad8ca2..2c231db 100644
--- a/drivers/net/wireless/ath/ath10k/htc.h
+++ b/drivers/net/wireless/ath/ath10k/htc.h
@@ -112,6 +112,6 @@ int ath10k_htc_send(struct htc_target *target, enum htc_endpoint_id eid,
struct sk_buff *packet);
void ath10k_htc_stop(struct htc_target *target);
void ath10k_htc_destroy(struct htc_target *target);
-struct sk_buff *ath10k_htc_alloc_skb(int extra_headroom);
+struct sk_buff *ath10k_htc_alloc_skb(int size);
#endif
--
1.7.9.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [ath9k-devel] [PATCH 1/5] ath10k: replace debug_mtx with conf_mutex
2013-04-17 6:04 ` [ath9k-devel] [PATCH 1/5] ath10k: replace debug_mtx with conf_mutex Michal Kazior
@ 2013-04-18 9:44 ` Kalle Valo
2013-04-18 9:48 ` Michal Kazior
0 siblings, 1 reply; 16+ messages in thread
From: Kalle Valo @ 2013-04-18 9:44 UTC (permalink / raw)
To: ath9k-devel
Michal Kazior <michal.kazior@tieto.com> writes:
> It's not a good to have too many mutexes. The
> patch simplifies locking of debufs to use
> conf_mutex.
>
> Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
[...]
> @@ -328,7 +328,7 @@ int ath10k_debug_create(struct ath10k *ar)
> return -ENOMEM;
>
> init_completion(&ar->debug.event_stats_compl);
> - mutex_init(&ar->debug.debug_mtx);
> + mutex_init(&ar->conf_mutex);
Can this be right? We already initialise conf_mutex in core.c.
--
Kalle Valo
^ permalink raw reply [flat|nested] 16+ messages in thread
* [ath9k-devel] [PATCH 1/5] ath10k: replace debug_mtx with conf_mutex
2013-04-18 9:44 ` Kalle Valo
@ 2013-04-18 9:48 ` Michal Kazior
0 siblings, 0 replies; 16+ messages in thread
From: Michal Kazior @ 2013-04-18 9:48 UTC (permalink / raw)
To: ath9k-devel
On 18/04/13 11:44, Kalle Valo wrote:
> Michal Kazior <michal.kazior@tieto.com> writes:
>
>> It's not a good to have too many mutexes. The
>> patch simplifies locking of debufs to use
>> conf_mutex.
>>
>> Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
>
> [...]
>
>> @@ -328,7 +328,7 @@ int ath10k_debug_create(struct ath10k *ar)
>> return -ENOMEM;
>>
>> init_completion(&ar->debug.event_stats_compl);
>> - mutex_init(&ar->debug.debug_mtx);
>> + mutex_init(&ar->conf_mutex);
>
> Can this be right? We already initialise conf_mutex in core.c.
Good catch, thanks! The mutex_init() is already initialized elsewhere.
No need to re-initialize it here.
-- Pozdrawiam / Best regards, Michal Kazior.
^ permalink raw reply [flat|nested] 16+ messages in thread
* [ath9k-devel] [PATCH 0/5] ath10k: cleanups
2013-04-17 6:04 [ath9k-devel] [PATCH 0/5] ath10k: cleanups Michal Kazior
` (4 preceding siblings ...)
2013-04-17 6:04 ` [ath9k-devel] [PATCH 5/5] ath10k: fix function prototype argument name Michal Kazior
@ 2013-04-18 9:50 ` Kalle Valo
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 " Michal Kazior
5 siblings, 1 reply; 16+ messages in thread
From: Kalle Valo @ 2013-04-18 9:50 UTC (permalink / raw)
To: ath9k-devel
Michal Kazior <michal.kazior@tieto.com> writes:
> Michal Kazior (5):
> ath10k: replace debug_mtx with conf_mutex
> ath10k: change wmi structure access
> ath10k: fix coding style
> ath10k: use ath10k_warn() instead of ath10k_info()
> ath10k: fix function prototype argument name
When you resend can you also rebase the patches, please? Quite a lot of
conflicts in wmi.c
--
Kalle Valo
^ permalink raw reply [flat|nested] 16+ messages in thread
* [ath9k-devel] [PATCH v2 0/5] ath10k: cleanups
2013-04-18 9:50 ` [ath9k-devel] [PATCH 0/5] ath10k: cleanups Kalle Valo
@ 2013-04-18 10:01 ` Michal Kazior
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 1/5] ath10k: replace debug_mtx with conf_mutex Michal Kazior
` (5 more replies)
0 siblings, 6 replies; 16+ messages in thread
From: Michal Kazior @ 2013-04-18 10:01 UTC (permalink / raw)
To: ath9k-devel
Rebased on top of latest master branch
(https://github.com/kvalo/ath10k)
Patch #1 updated.
Michal Kazior (5):
ath10k: replace debug_mtx with conf_mutex
ath10k: change wmi structure access
ath10k: fix coding style
ath10k: use ath10k_warn() instead of ath10k_info()
ath10k: fix function prototype argument name
drivers/net/wireless/ath/ath10k/core.h | 19 ++++--
drivers/net/wireless/ath/ath10k/debug.c | 9 ++-
drivers/net/wireless/ath/ath10k/debug.h | 4 +-
drivers/net/wireless/ath/ath10k/htc.h | 5 +-
drivers/net/wireless/ath/ath10k/mac.c | 10 +--
drivers/net/wireless/ath/ath10k/txrx.c | 16 ++---
drivers/net/wireless/ath/ath10k/wmi.c | 105 +++++++++++--------------------
7 files changed, 75 insertions(+), 93 deletions(-)
--
1.7.9.5
^ permalink raw reply [flat|nested] 16+ messages in thread
* [ath9k-devel] [PATCH v2 1/5] ath10k: replace debug_mtx with conf_mutex
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 " Michal Kazior
@ 2013-04-18 10:01 ` Michal Kazior
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 2/5] ath10k: change wmi structure access Michal Kazior
` (4 subsequent siblings)
5 siblings, 0 replies; 16+ messages in thread
From: Michal Kazior @ 2013-04-18 10:01 UTC (permalink / raw)
To: ath9k-devel
It's not a good to have too many mutexes. The
patch simplifies locking of debufs to use
conf_mutex.
Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
---
v2: removed unnecessary mutex_init()
drivers/net/wireless/ath/ath10k/core.h | 1 -
drivers/net/wireless/ath/ath10k/debug.c | 9 ++++-----
drivers/net/wireless/ath/ath10k/debug.h | 4 ++--
3 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h
index 193ac31..4577987 100644
--- a/drivers/net/wireless/ath/ath10k/core.h
+++ b/drivers/net/wireless/ath/ath10k/core.h
@@ -240,7 +240,6 @@ struct ath10k_debug {
u32 wmi_service_bitmap[WMI_SERVICE_BM_SIZE];
struct completion event_stats_compl;
- struct mutex debug_mtx;
};
struct ath10k {
diff --git a/drivers/net/wireless/ath/ath10k/debug.c b/drivers/net/wireless/ath/ath10k/debug.c
index 8f5b506..7e6b7034 100644
--- a/drivers/net/wireless/ath/ath10k/debug.c
+++ b/drivers/net/wireless/ath/ath10k/debug.c
@@ -113,7 +113,7 @@ static ssize_t ath10k_read_wmi_services(struct file *file,
if (!buf)
return -ENOMEM;
- mutex_lock(&ar->debug.debug_mtx);
+ mutex_lock(&ar->conf_mutex);
if (len > buf_len)
len = buf_len;
@@ -134,7 +134,7 @@ static ssize_t ath10k_read_wmi_services(struct file *file,
ret_cnt = simple_read_from_buffer(user_buf, count, ppos, buf, len);
- mutex_unlock(&ar->debug.debug_mtx);
+ mutex_unlock(&ar->conf_mutex);
kfree(buf);
return ret_cnt;
@@ -176,7 +176,7 @@ static ssize_t ath10k_read_fw_stats(struct file *file, char __user *user_buf,
return -ETIMEDOUT;
}
- mutex_lock(&ar->debug.debug_mtx);
+ mutex_lock(&ar->conf_mutex);
len += scnprintf(buf + len, buf_len - len, "\n");
len += scnprintf(buf + len, buf_len - len, "%30s\n",
@@ -306,7 +306,7 @@ static ssize_t ath10k_read_fw_stats(struct file *file, char __user *user_buf,
ret_cnt = simple_read_from_buffer(user_buf, count, ppos, buf, len);
- mutex_unlock(&ar->debug.debug_mtx);
+ mutex_unlock(&ar->conf_mutex);
kfree(buf);
return ret_cnt;
@@ -328,7 +328,6 @@ int ath10k_debug_create(struct ath10k *ar)
return -ENOMEM;
init_completion(&ar->debug.event_stats_compl);
- mutex_init(&ar->debug.debug_mtx);
debugfs_create_file("fw_stats", S_IRUSR, ar->debug.debugfs_phy, ar,
&fops_fw_stats);
diff --git a/drivers/net/wireless/ath/ath10k/debug.h b/drivers/net/wireless/ath/ath10k/debug.h
index dc4847b..b57a258 100644
--- a/drivers/net/wireless/ath/ath10k/debug.h
+++ b/drivers/net/wireless/ath/ath10k/debug.h
@@ -61,7 +61,7 @@ static inline void ath10k_debug_read_target_stats(struct ath10k *ar,
int num_pdev_stats, num_vdev_stats, num_peer_stats;
int i;
- mutex_lock(&ar->debug.debug_mtx);
+ mutex_lock(&ar->conf_mutex);
fw_stats = &ar->debug.target_stats;
@@ -149,7 +149,7 @@ static inline void ath10k_debug_read_target_stats(struct ath10k *ar,
}
}
- mutex_unlock(&ar->debug.debug_mtx);
+ mutex_unlock(&ar->conf_mutex);
complete(&ar->debug.event_stats_compl);
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [ath9k-devel] [PATCH v2 2/5] ath10k: change wmi structure access
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 " Michal Kazior
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 1/5] ath10k: replace debug_mtx with conf_mutex Michal Kazior
@ 2013-04-18 10:01 ` Michal Kazior
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 3/5] ath10k: fix coding style Michal Kazior
` (3 subsequent siblings)
5 siblings, 0 replies; 16+ messages in thread
From: Michal Kazior @ 2013-04-18 10:01 UTC (permalink / raw)
To: ath9k-devel
WMI structure shouldn't be a magic void pointer.
Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
---
drivers/net/wireless/ath/ath10k/core.h | 18 +++++-
drivers/net/wireless/ath/ath10k/htc.h | 3 +-
drivers/net/wireless/ath/ath10k/wmi.c | 105 +++++++++++---------------------
3 files changed, 53 insertions(+), 73 deletions(-)
diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h
index 4577987..4781310 100644
--- a/drivers/net/wireless/ath/ath10k/core.h
+++ b/drivers/net/wireless/ath/ath10k/core.h
@@ -23,6 +23,7 @@
#include <linux/types.h>
#include <linux/pci.h>
+#include "htc.h"
#include "hw.h"
#include "targaddrs.h"
#include "regtable.h"
@@ -114,6 +115,19 @@ struct ath10k_bmi {
bool done_sent;
};
+struct ath10k_wmi {
+ struct ath10k *ar;
+
+ enum htc_endpoint_id eid;
+ struct completion service_ready;
+ struct completion unified_ready;
+ atomic_t pending_tx_count;
+ wait_queue_head_t wq;
+
+ struct sk_buff_head wmi_event_list;
+ struct work_struct wmi_event_work;
+};
+
struct ath10k_peer_stat {
u8 peer_macaddr[ETH_ALEN];
u32 peer_rssi;
@@ -271,9 +285,7 @@ struct ath10k {
const struct ath10k_hif_ops *ops;
} hif;
- struct {
- void *wmi;
- } modules;
+ struct ath10k_wmi wmi;
#if defined(CONFIG_PM_SLEEP)
wait_queue_head_t event_queue;
diff --git a/drivers/net/wireless/ath/ath10k/htc.h b/drivers/net/wireless/ath/ath10k/htc.h
index 9bf3997..4ad8ca2 100644
--- a/drivers/net/wireless/ath/ath10k/htc.h
+++ b/drivers/net/wireless/ath/ath10k/htc.h
@@ -21,8 +21,9 @@
#include <linux/kernel.h>
#include <linux/list.h>
#include <linux/bug.h>
-#include "core.h"
+#include <linux/skbuff.h>
+struct ath10k;
#define MAKE_SERVICE_ID(group, index) \
(int)(((int)(group) << 8) | (int)(index))
diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
index 4b44957..4fe22b2 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.c
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
@@ -23,28 +23,14 @@
#include "wmi.h"
#include "mac.h"
-struct wmi_struct {
- struct ath10k *ar;
-
- enum htc_endpoint_id eid;
- struct completion service_ready;
- struct completion unified_ready;
- atomic_t pending_tx_count;
- wait_queue_head_t wq;
-
- struct sk_buff_head wmi_event_list;
- struct work_struct wmi_event_work;
-};
-
void ath10k_wmi_flush_tx(struct ath10k *ar)
{
- struct wmi_struct *wmi = ar->modules.wmi;
int ret;
- ret = wait_event_timeout(wmi->wq,
- atomic_read(&wmi->pending_tx_count) == 0,
+ ret = wait_event_timeout(ar->wmi.wq,
+ atomic_read(&ar->wmi.pending_tx_count) == 0,
5*HZ);
- if (atomic_read(&wmi->pending_tx_count) == 0)
+ if (atomic_read(&ar->wmi.pending_tx_count) == 0)
return;
if (ret == 0)
@@ -55,18 +41,16 @@ void ath10k_wmi_flush_tx(struct ath10k *ar)
int ath10k_wmi_wait_for_service_ready(struct ath10k *ar)
{
- struct wmi_struct *wmi = ar->modules.wmi;
int ret;
- ret = wait_for_completion_timeout(&wmi->service_ready,
+ ret = wait_for_completion_timeout(&ar->wmi.service_ready,
WMI_SERVICE_READY_TIMEOUT_HZ);
return ret;
}
int ath10k_wmi_wait_for_unified_ready(struct ath10k *ar)
{
- struct wmi_struct *wmi = ar->modules.wmi;
int ret;
- ret = wait_for_completion_timeout(&wmi->unified_ready,
+ ret = wait_for_completion_timeout(&ar->wmi.unified_ready,
WMI_UNIFIED_READY_TIMEOUT_HZ);
return ret;
}
@@ -92,12 +76,12 @@ static struct sk_buff *ath10k_wmi_alloc_skb(u32 len)
static void ath10k_wmi_htc_tx_complete(struct sk_buff *skb)
{
struct ath10k_skb_cb *skb_cb = ATH10K_SKB_CB(skb);
- struct wmi_struct *wmi = skb_cb->htc.priv;
+ struct ath10k *ar = skb_cb->htc.priv;
dev_kfree_skb(skb);
- if (atomic_sub_return(1, &wmi->pending_tx_count) == 0)
- wake_up(&wmi->wq);
+ if (atomic_sub_return(1, &ar->wmi.pending_tx_count) == 0)
+ wake_up(&ar->wmi.wq);
}
/* WMI command API */
@@ -105,7 +89,6 @@ static int ath10k_wmi_cmd_send(struct ath10k *ar, struct sk_buff *skb,
enum wmi_cmd_id cmd_id)
{
struct ath10k_skb_cb *skb_cb = ATH10K_SKB_CB(skb);
- struct wmi_struct *wmi = ar->modules.wmi;
struct wmi_cmd_hdr *cmd_hdr;
int status;
@@ -117,25 +100,25 @@ static int ath10k_wmi_cmd_send(struct ath10k *ar, struct sk_buff *skb,
cmd_hdr = (struct wmi_cmd_hdr *)skb->data;
cmd_hdr->cmd_id = __cpu_to_le16(cmd_id);
- if (atomic_add_return(1, &wmi->pending_tx_count) >
+ if (atomic_add_return(1, &ar->wmi.pending_tx_count) >
WMI_MAX_PENDING_TX_COUNT) {
/* avoid using up memory when FW hangs */
- atomic_dec(&wmi->pending_tx_count);
+ atomic_dec(&ar->wmi.pending_tx_count);
ath10k_warn("%s: too many tx packets pending\n", __func__);
return -EBUSY;
}
memset(skb_cb, 0, sizeof(*skb_cb));
skb_cb->htc.complete = ath10k_wmi_htc_tx_complete;
- skb_cb->htc.priv = wmi;
+ skb_cb->htc.priv = ar;
trace_ath10k_wmi_cmd(cmd_id, skb->data, skb->len);
- status = ath10k_htc_send(ar->htc_handle, wmi->eid, skb);
+ status = ath10k_htc_send(ar->htc_handle, ar->wmi.eid, skb);
if (status) {
dev_kfree_skb_any(skb);
- atomic_dec(&wmi->pending_tx_count);
- ath10k_warn("%s(): htc send failed (%d)\n", __func__, status);
+ atomic_dec(&ar->wmi.pending_tx_count);
+ ath10k_warn("%s(): htc_send failed (%d)\n", __func__, status);
}
return status;
@@ -841,7 +824,6 @@ static void ath10k_wmi_event_vdev_install_key_complete(struct ath10k *ar,
static void ath10k_wmi_service_ready_event_rx(struct ath10k *ar, struct sk_buff *skb)
{
struct ath_common *common = ath10k_common(ar);
- struct wmi_struct *wmi = ar->modules.wmi;
struct wmi_service_ready_event *ev = (void *)skb->data;
if (skb->len < sizeof(*ev)) {
@@ -893,13 +875,12 @@ static void ath10k_wmi_service_ready_event_rx(struct ath10k *ar, struct sk_buff
__le32_to_cpu(ev->sys_cap_info),
__le32_to_cpu(ev->num_mem_reqs));
- complete(&wmi->service_ready);
+ complete(&ar->wmi.service_ready);
}
static int ath10k_wmi_ready_event_rx(struct ath10k *ar, struct sk_buff *skb)
{
struct wmi_ready_event *ev = (void *)skb->data;
- struct wmi_struct *wmi = ar->modules.wmi;
if (WARN_ON(skb->len < sizeof(*ev)))
return -EINVAL;
@@ -921,13 +902,12 @@ static int ath10k_wmi_ready_event_rx(struct ath10k *ar, struct sk_buff *skb)
ev->mac_addr.addr,
__le32_to_cpu(ev->status));
- complete(&wmi->unified_ready);
+ complete(&ar->wmi.unified_ready);
return 0;
}
-static void ath10k_wmi_event_process(struct wmi_struct *wmi, struct sk_buff *skb)
+static void ath10k_wmi_event_process(struct ath10k *ar, struct sk_buff *skb)
{
- struct ath10k *ar = wmi->ar;
struct wmi_cmd_hdr *cmd_hdr;
u16 id;
u8 *event;
@@ -1055,22 +1035,22 @@ static void ath10k_wmi_event_process(struct wmi_struct *wmi, struct sk_buff *skb
static void ath10k_wmi_event_work(struct work_struct *work)
{
- struct wmi_struct *wmi = container_of(work, struct wmi_struct,
- wmi_event_work);
+ struct ath10k *ar = container_of(work, struct ath10k,
+ wmi.wmi_event_work);
struct sk_buff *skb;
for (;;) {
- skb = skb_dequeue(&wmi->wmi_event_list);
+ skb = skb_dequeue(&ar->wmi.wmi_event_list);
if (!skb)
break;
- ath10k_wmi_event_process(wmi, skb);
+ ath10k_wmi_event_process(ar, skb);
}
}
static void ath10k_wmi_process_rx(void *ptr, struct sk_buff *skb)
{
- struct wmi_struct *wmi = ptr;
+ struct ath10k *ar = ptr;
struct wmi_cmd_hdr *cmd_hdr = (struct wmi_cmd_hdr *)skb->data;
enum wmi_event_id event_id = __le16_to_cpu(cmd_hdr->cmd_id);
@@ -1083,58 +1063,47 @@ static void ath10k_wmi_process_rx(void *ptr, struct sk_buff *skb)
* thus can't be defered to a worker thread */
switch (event_id) {
case WMI_HOST_SWBA_EVENTID:
- case WMI_MGMT_RX_EVENTID:
- ath10k_wmi_event_process(wmi, skb);
+ ath10k_wmi_event_process(ar, skb);
return;
default:
break;
}
- skb_queue_tail(&wmi->wmi_event_list, skb);
- queue_work(wmi->ar->workqueue, &wmi->wmi_event_work);
+ skb_queue_tail(&ar->wmi.wmi_event_list, skb);
+ queue_work(ar->workqueue, &ar->wmi.wmi_event_work);
}
/* WMI Initialization functions */
int ath10k_wmi_attach(struct ath10k *ar)
{
- struct wmi_struct *wmi;
+ ar->wmi.ar = ar;
+ init_completion(&ar->wmi.service_ready);
+ init_completion(&ar->wmi.unified_ready);
+ init_waitqueue_head(&ar->wmi.wq);
- wmi = kzalloc(sizeof(*wmi), GFP_KERNEL);
- if (!wmi)
- return -ENOMEM;
+ skb_queue_head_init(&ar->wmi.wmi_event_list);
+ INIT_WORK(&ar->wmi.wmi_event_work, ath10k_wmi_event_work);
- wmi->ar = ar;
- init_completion(&wmi->service_ready);
- init_completion(&wmi->unified_ready);
- init_waitqueue_head(&wmi->wq);
-
- skb_queue_head_init(&wmi->wmi_event_list);
- INIT_WORK(&wmi->wmi_event_work, ath10k_wmi_event_work);
-
- ar->modules.wmi = wmi;
return 0;
}
void ath10k_wmi_detach(struct ath10k *ar)
{
- struct wmi_struct *wmi = ar->modules.wmi;
struct sk_buff *skb;
/* HTC should've drained the packets already */
- if (WARN_ON(atomic_read(&wmi->pending_tx_count) > 0))
+ if (WARN_ON(atomic_read(&ar->wmi.pending_tx_count) > 0))
ath10k_warn("there are still pending packets\n");
- cancel_work_sync(&wmi->wmi_event_work);
+ cancel_work_sync(&ar->wmi.wmi_event_work);
for (;;) {
- skb = skb_dequeue(&wmi->wmi_event_list);
+ skb = skb_dequeue(&ar->wmi.wmi_event_list);
if (!skb)
break;
dev_kfree_skb_any(skb);
}
-
- kfree(ar->modules.wmi);
}
int ath10k_wmi_connect_htc_service(struct ath10k *ar)
@@ -1142,13 +1111,12 @@ int ath10k_wmi_connect_htc_service(struct ath10k *ar)
int status;
struct htc_service_connect_req connect;
struct htc_service_connect_resp response;
- struct wmi_struct *wmi = ar->modules.wmi;
memset(&connect, 0, sizeof(connect));
memset(&response, 0, sizeof(response));
/* these fields are the same for all service endpoints */
- connect.ep_callbacks.context = wmi;
+ connect.ep_callbacks.context = ar;
connect.ep_callbacks.ep_rx_complete = ath10k_wmi_process_rx;
/* connect to control service */
@@ -1161,8 +1129,7 @@ int ath10k_wmi_connect_htc_service(struct ath10k *ar)
return status;
}
- wmi->eid = response.ep_id;
-
+ ar->wmi.eid = response.ep_id;
return 0;
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [ath9k-devel] [PATCH v2 3/5] ath10k: fix coding style
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 " Michal Kazior
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 1/5] ath10k: replace debug_mtx with conf_mutex Michal Kazior
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 2/5] ath10k: change wmi structure access Michal Kazior
@ 2013-04-18 10:01 ` Michal Kazior
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 4/5] ath10k: use ath10k_warn() instead of ath10k_info() Michal Kazior
` (2 subsequent siblings)
5 siblings, 0 replies; 16+ messages in thread
From: Michal Kazior @ 2013-04-18 10:01 UTC (permalink / raw)
To: ath9k-devel
Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
---
drivers/net/wireless/ath/ath10k/mac.c | 8 +++++---
drivers/net/wireless/ath/ath10k/txrx.c | 16 +++++++++-------
2 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index 94b5334..c6802b1 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -1235,10 +1235,12 @@ static void ath10k_tx_h_update_wep_key(struct sk_buff *skb)
ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id,
WMI_VDEV_PARAM_DEF_KEYID,
key->keyidx);
- if (!ret)
- arvif->def_wep_key_index = key->keyidx;
- else
+ if (ret) {
ath10k_warn("could not update wep keyidx (%d)\n", ret);
+ return;
+ }
+
+ arvif->def_wep_key_index = key->keyidx;
}
static void ath10k_tx_h_add_p2p_noa_ie(struct ath10k *ar, struct sk_buff *skb)
diff --git a/drivers/net/wireless/ath/ath10k/txrx.c b/drivers/net/wireless/ath/ath10k/txrx.c
index 205a9b8..6392f11 100644
--- a/drivers/net/wireless/ath/ath10k/txrx.c
+++ b/drivers/net/wireless/ath/ath10k/txrx.c
@@ -31,14 +31,16 @@ static void ath10k_report_offchan_tx(struct ath10k *ar, struct sk_buff *skb)
* offchan_tx_completed for a different skb. Prevent this by using
* offchan_tx_skb. */
spin_lock_bh(&ar->data_lock);
- if (ar->offchan_tx_skb == skb) {
- complete(&ar->offchan_tx_completed);
- ar->offchan_tx_skb = NULL; /* just for sanity */
-
- ath10k_dbg(ATH10K_DBG_HTT, "completed offchannel skb %p\n", skb);
+ if (ar->offchan_tx_skb != skb) {
+ ath10k_warn("completed old offchannel frame\n");
+ goto out;
}
- else
- ath10k_warn("completed late offchannel skb %p\n", skb);
+
+ complete(&ar->offchan_tx_completed);
+ ar->offchan_tx_skb = NULL; /* just for sanity */
+
+ ath10k_dbg(ATH10K_DBG_HTT, "completed offchannel skb %p\n", skb);
+out:
spin_unlock_bh(&ar->data_lock);
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [ath9k-devel] [PATCH v2 4/5] ath10k: use ath10k_warn() instead of ath10k_info()
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 " Michal Kazior
` (2 preceding siblings ...)
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 3/5] ath10k: fix coding style Michal Kazior
@ 2013-04-18 10:01 ` Michal Kazior
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 5/5] ath10k: fix function prototype argument name Michal Kazior
2013-04-22 8:10 ` [ath9k-devel] [PATCH v2 0/5] ath10k: cleanups Kalle Valo
5 siblings, 0 replies; 16+ messages in thread
From: Michal Kazior @ 2013-04-18 10:01 UTC (permalink / raw)
To: ath9k-devel
Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
---
drivers/net/wireless/ath/ath10k/mac.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index c6802b1..e5ef1d2 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -1330,7 +1330,7 @@ void ath10k_ath10k_offchan_tx_work(struct work_struct *work)
spin_unlock_bh(&ar->data_lock);
if (peer)
- ath10k_info("peer %pM on vdev %d already present\n",
+ ath10k_dbg(ATH10K_DBG_MAC, "peer %pM on vdev %d already present\n",
peer_addr, vdev_id);
if (!peer) {
--
1.7.9.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [ath9k-devel] [PATCH v2 5/5] ath10k: fix function prototype argument name
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 " Michal Kazior
` (3 preceding siblings ...)
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 4/5] ath10k: use ath10k_warn() instead of ath10k_info() Michal Kazior
@ 2013-04-18 10:01 ` Michal Kazior
2013-04-22 8:10 ` [ath9k-devel] [PATCH v2 0/5] ath10k: cleanups Kalle Valo
5 siblings, 0 replies; 16+ messages in thread
From: Michal Kazior @ 2013-04-18 10:01 UTC (permalink / raw)
To: ath9k-devel
This argument is used to specify how much data we
want to pack up into a skbuff, no just headroom.
Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
---
drivers/net/wireless/ath/ath10k/htc.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/ath/ath10k/htc.h b/drivers/net/wireless/ath/ath10k/htc.h
index 4ad8ca2..2c231db 100644
--- a/drivers/net/wireless/ath/ath10k/htc.h
+++ b/drivers/net/wireless/ath/ath10k/htc.h
@@ -112,6 +112,6 @@ int ath10k_htc_send(struct htc_target *target, enum htc_endpoint_id eid,
struct sk_buff *packet);
void ath10k_htc_stop(struct htc_target *target);
void ath10k_htc_destroy(struct htc_target *target);
-struct sk_buff *ath10k_htc_alloc_skb(int extra_headroom);
+struct sk_buff *ath10k_htc_alloc_skb(int size);
#endif
--
1.7.9.5
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [ath9k-devel] [PATCH v2 0/5] ath10k: cleanups
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 " Michal Kazior
` (4 preceding siblings ...)
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 5/5] ath10k: fix function prototype argument name Michal Kazior
@ 2013-04-22 8:10 ` Kalle Valo
5 siblings, 0 replies; 16+ messages in thread
From: Kalle Valo @ 2013-04-22 8:10 UTC (permalink / raw)
To: ath9k-devel
Michal Kazior <michal.kazior@tieto.com> writes:
> Rebased on top of latest master branch
> (https://github.com/kvalo/ath10k)
>
> Patch #1 updated.
>
>
> Michal Kazior (5):
> ath10k: replace debug_mtx with conf_mutex
> ath10k: change wmi structure access
> ath10k: fix coding style
> ath10k: use ath10k_warn() instead of ath10k_info()
> ath10k: fix function prototype argument name
Thanks, all five applied.
--
Kalle Valo
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2013-04-22 8:10 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-17 6:04 [ath9k-devel] [PATCH 0/5] ath10k: cleanups Michal Kazior
2013-04-17 6:04 ` [ath9k-devel] [PATCH 1/5] ath10k: replace debug_mtx with conf_mutex Michal Kazior
2013-04-18 9:44 ` Kalle Valo
2013-04-18 9:48 ` Michal Kazior
2013-04-17 6:04 ` [ath9k-devel] [PATCH 2/5] ath10k: change wmi structure access Michal Kazior
2013-04-17 6:04 ` [ath9k-devel] [PATCH 3/5] ath10k: fix coding style Michal Kazior
2013-04-17 6:04 ` [ath9k-devel] [PATCH 4/5] ath10k: use ath10k_warn() instead of ath10k_info() Michal Kazior
2013-04-17 6:04 ` [ath9k-devel] [PATCH 5/5] ath10k: fix function prototype argument name Michal Kazior
2013-04-18 9:50 ` [ath9k-devel] [PATCH 0/5] ath10k: cleanups Kalle Valo
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 " Michal Kazior
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 1/5] ath10k: replace debug_mtx with conf_mutex Michal Kazior
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 2/5] ath10k: change wmi structure access Michal Kazior
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 3/5] ath10k: fix coding style Michal Kazior
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 4/5] ath10k: use ath10k_warn() instead of ath10k_info() Michal Kazior
2013-04-18 10:01 ` [ath9k-devel] [PATCH v2 5/5] ath10k: fix function prototype argument name Michal Kazior
2013-04-22 8:10 ` [ath9k-devel] [PATCH v2 0/5] ath10k: cleanups Kalle Valo
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.