* [PATCH 2/3] ath6kl: Add wmi meta data information only it is available
2011-08-22 15:10 [PATCH 1/3] ath6kl: Remove unused meta_v2 from ath6kl_data_tx() Vasanthakumar Thiagarajan
@ 2011-08-22 15:10 ` Vasanthakumar Thiagarajan
2011-08-22 15:10 ` [PATCH 3/3] ath6kl: Avoid rolling back of entire scatter setup in case of failure Vasanthakumar Thiagarajan
2011-08-25 8:40 ` [PATCH 1/3] ath6kl: Remove unused meta_v2 from ath6kl_data_tx() Kalle Valo
2 siblings, 0 replies; 4+ messages in thread
From: Vasanthakumar Thiagarajan @ 2011-08-22 15:10 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless, kvalo
Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/wmi.c | 8 +++++---
1 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/wmi.c b/drivers/net/wireless/ath/ath6kl/wmi.c
index 13b1a20..d116d0e 100644
--- a/drivers/net/wireless/ath/ath6kl/wmi.c
+++ b/drivers/net/wireless/ath/ath6kl/wmi.c
@@ -167,9 +167,11 @@ int ath6kl_wmi_data_hdr_add(struct wmi *wmi, struct sk_buff *skb,
if (WARN_ON(skb == NULL))
return -EINVAL;
- ret = ath6kl_wmi_meta_add(wmi, skb, &meta_ver, tx_meta_info);
- if (ret)
- return ret;
+ if (tx_meta_info) {
+ ret = ath6kl_wmi_meta_add(wmi, skb, &meta_ver, tx_meta_info);
+ if (ret)
+ return ret;
+ }
skb_push(skb, sizeof(struct wmi_data_hdr));
--
1.7.0.4
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH 3/3] ath6kl: Avoid rolling back of entire scatter setup in case of failure
2011-08-22 15:10 [PATCH 1/3] ath6kl: Remove unused meta_v2 from ath6kl_data_tx() Vasanthakumar Thiagarajan
2011-08-22 15:10 ` [PATCH 2/3] ath6kl: Add wmi meta data information only it is available Vasanthakumar Thiagarajan
@ 2011-08-22 15:10 ` Vasanthakumar Thiagarajan
2011-08-25 8:40 ` [PATCH 1/3] ath6kl: Remove unused meta_v2 from ath6kl_data_tx() Kalle Valo
2 siblings, 0 replies; 4+ messages in thread
From: Vasanthakumar Thiagarajan @ 2011-08-22 15:10 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless, kvalo
Current tx scatter gather implementation rolls back the entire
scatter setup in case of a failure in setting up just one packet
into the bundle. Instead of dopping the whole scatter setup,
send the packets available just before the failure one using
scatter gather I/O.
Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/htc.c | 24 ++++++++++++------------
1 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/htc.c b/drivers/net/wireless/ath/ath6kl/htc.c
index dc575a8..77e548c 100644
--- a/drivers/net/wireless/ath/ath6kl/htc.c
+++ b/drivers/net/wireless/ath/ath6kl/htc.c
@@ -381,13 +381,7 @@ static int htc_setup_send_scat_list(struct htc_target *target,
cred_pad = htc_get_credit_padding(target->tgt_cred_sz,
&len, endpoint);
- if (cred_pad < 0) {
- status = -EINVAL;
- break;
- }
-
- if (rem_scat < len) {
- /* exceeds what we can transfer */
+ if (cred_pad < 0 || rem_scat < len) {
status = -ENOSPC;
break;
}
@@ -416,7 +410,7 @@ static int htc_setup_send_scat_list(struct htc_target *target,
}
/* Roll back scatter setup in case of any failure */
- if (status || (scat_req->scat_entries < HTC_MIN_HTC_MSGS_TO_BUNDLE)) {
+ if (scat_req->scat_entries < HTC_MIN_HTC_MSGS_TO_BUNDLE) {
for (i = scat_req->scat_entries - 1; i >= 0; i--) {
packet = scat_req->scat_list[i].packet;
if (packet) {
@@ -424,10 +418,10 @@ static int htc_setup_send_scat_list(struct htc_target *target,
list_add(&packet->list, queue);
}
}
- return -EINVAL;
+ return -EAGAIN;
}
- return 0;
+ return status;
}
/*
@@ -447,8 +441,10 @@ static void htc_issue_send_bundle(struct htc_endpoint *endpoint,
struct htc_target *target = endpoint->target;
struct hif_scatter_req *scat_req = NULL;
int n_scat, n_sent_bundle = 0, tot_pkts_bundle = 0;
+ int status;
while (true) {
+ status = 0;
n_scat = get_queue_depth(queue);
n_scat = min(n_scat, target->msg_per_bndl_max);
@@ -471,8 +467,9 @@ static void htc_issue_send_bundle(struct htc_endpoint *endpoint,
scat_req->len = 0;
scat_req->scat_entries = 0;
- if (htc_setup_send_scat_list(target, endpoint, scat_req,
- n_scat, queue)) {
+ status = htc_setup_send_scat_list(target, endpoint,
+ scat_req, n_scat, queue);
+ if (status == -EAGAIN) {
hif_scatter_req_add(target->dev->ar, scat_req);
break;
}
@@ -486,6 +483,9 @@ static void htc_issue_send_bundle(struct htc_endpoint *endpoint,
"send scatter total bytes: %d , entries: %d\n",
scat_req->len, scat_req->scat_entries);
ath6kldev_submit_scat_req(target->dev, scat_req, false);
+
+ if (status)
+ break;
}
*sent_bundle = n_sent_bundle;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 4+ messages in thread