Linux wireless drivers development
 help / color / mirror / Atom feed
* [PATCH] hostap: Use memdup_user() to reuse code
From: Rajan Vaja @ 2016-07-21  8:14 UTC (permalink / raw)
  To: j; +Cc: kvalo, linux-wireless

Fix coccicheck warning which recommends to
use memdup_user() instead of reimplementing its
code.

This patch fixes below coccicheck warnings:

drivers/net/wireless/intersil/hostap/hostap_ioctl.c:3044:9-16: WARNING
opportunity for memdup_user
drivers/net/wireless/intersil/hostap/hostap_ioctl.c:3806:9-16: WARNING
opportunity for memdup_user

Signed-off-by: Rajan Vaja <rajan.vaja@gmail.com>
---
 drivers/net/wireless/intersil/hostap/hostap_ioctl.c | 20 ++++++--------------
 1 file changed, 6 insertions(+), 14 deletions(-)

diff --git a/drivers/net/wireless/intersil/hostap/hostap_ioctl.c b/drivers/net/wireless/intersil/hostap/hostap_ioctl.c
index 3e5fa78..a5656bc 100644
--- a/drivers/net/wireless/intersil/hostap/hostap_ioctl.c
+++ b/drivers/net/wireless/intersil/hostap/hostap_ioctl.c
@@ -3041,13 +3041,9 @@ static int prism2_ioctl_priv_download(local_info_t *local, struct iw_point *p)
 	    p->length > 1024 || !p->pointer)
 		return -EINVAL;
 
-	param = kmalloc(p->length, GFP_KERNEL);
-	if (param == NULL)
-		return -ENOMEM;
-
-	if (copy_from_user(param, p->pointer, p->length)) {
-		ret = -EFAULT;
-		goto out;
+	param = memdup_user(p->pointer, p->length);
+	if (IS_ERR(param)) {
+		return PTR_ERR(param);
 	}
 
 	if (p->length < sizeof(struct prism2_download_param) +
@@ -3803,13 +3799,9 @@ static int prism2_ioctl_priv_hostapd(local_info_t *local, struct iw_point *p)
 	    p->length > PRISM2_HOSTAPD_MAX_BUF_SIZE || !p->pointer)
 		return -EINVAL;
 
-	param = kmalloc(p->length, GFP_KERNEL);
-	if (param == NULL)
-		return -ENOMEM;
-
-	if (copy_from_user(param, p->pointer, p->length)) {
-		ret = -EFAULT;
-		goto out;
+	param = memdup_user(p->pointer, p->length);
+	if (IS_ERR(param)) {
+		return PTR_ERR(param);
 	}
 
 	switch (param->cmd) {
-- 
1.9.1


^ permalink raw reply related

* Re: [RFC] ath10k: silence firmware file probing warnings
From: Stanislaw Gruszka @ 2016-07-21  8:05 UTC (permalink / raw)
  To: Emmanuel Grumbach
  Cc: Michal Kazior, Kalle Valo, linux-wireless, ath10k, prarit
In-Reply-To: <CANUX_P3ADxi+RHkH=d8Ypcqy9WVKSu4JYH7K3HtTNCuWg3wCeQ@mail.gmail.com>

On Thu, Jul 21, 2016 at 10:36:42AM +0300, Emmanuel Grumbach wrote:
> On Thu, Jul 21, 2016 at 10:09 AM, Stanislaw Gruszka <sgruszka@redhat.com> wrote:
> > On Tue, Jul 19, 2016 at 03:00:37PM +0200, Michal Kazior wrote:
> >> Firmware files are versioned to prevent older
> >> driver instances to load unsupported firmware
> >> blobs. This is reflected with a fallback logic
> >> which attempts to load several firmware files.
> >>
> >> This however produced a lot of unnecessary
> >> warnings sometimes confusing users and leading
> >> them to rename firmware files making things even
> >> more confusing.
> >
> > This happens on kernels configured with
> > CONFIG_FW_LOADER_USER_HELPER_FALLBACK and cause not only ugly warnings,
> > but also 60 seconds delay before loading next firmware version.
> > For some reason RHEL kernel needs above config option, so this
> > patch is very welcome from my perspective.
> >
> 
> Sorry for my ignorance but how does the firmware loading work if not
> with udev's help?

I'm not sure exactly, but I think kernel VFS layer is capable to copy
file data directly from mounted filesystem without user space helper.

> As you can imagine, iwlwifi is suffering from the
> same problem and I would be interested in applying the same change,
> but I'd love to understand a bit more :)

Yes, iwlwifi (and some other drivers) suffer from this. However this
happen when the newest firmware version is not installed on the system
and CONFIG_FW_LOADER_USER_HELPER_FALLBACK is enabled. What I suppose
it's not common.

I started to see this currently, because that option was enabled on 
RHEL kernel. BTW: I think Prarit iwlwifi thermal_zone problem was
happened because of that, i.e. thermal device was not functional
because f/w wasn't loaded due to big delay.

I'm not sure if replacing to request_firmware_direct() is a good
fix though. For example I can see this problem also on brcmfmac, which
use request_firmware_nowait(). I think I would rather prefer special
helper for firmware drivers that needs user helper and have
request_firmware() be direct as default.

Stanislaw

^ permalink raw reply

* [PATCH] staging: wilc1000: txq_event: Fix coding error
From: Binoy Jayan @ 2016-07-21  7:56 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Johnny Kim, Austin Shin, Chris Park, Tony Cho, Glen Lee, Leo Kim,
	Arnd Bergmann, linux-wireless, devel, linux-kernel, Binoy Jayan

Fix incorrect usage of completion interface by replacing
'wait_for_completion' with 'complete'. This error was introduced
accidentally while replacing semaphores with mutexes.

Reported-by: Jiri Slaby <jslaby@suse.cz>
Signed-off-by: Binoy Jayan <binoy.jayan@linaro.org>
---
 drivers/staging/wilc1000/linux_wlan.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/wilc1000/linux_wlan.c b/drivers/staging/wilc1000/linux_wlan.c
index 3a66255..3221511 100644
--- a/drivers/staging/wilc1000/linux_wlan.c
+++ b/drivers/staging/wilc1000/linux_wlan.c
@@ -648,7 +648,7 @@ void wilc1000_wlan_deinit(struct net_device *dev)
 			mutex_unlock(&wl->hif_cs);
 		}
 		if (&wl->txq_event)
-			wait_for_completion(&wl->txq_event);
+			complete(&wl->txq_event);
 
 		wlan_deinitialize_threads(dev);
 		deinit_irq(dev);
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project


^ permalink raw reply related

* Re: [RFC] ath10k: silence firmware file probing warnings
From: Emmanuel Grumbach @ 2016-07-21  7:36 UTC (permalink / raw)
  To: Stanislaw Gruszka; +Cc: Michal Kazior, Kalle Valo, linux-wireless, ath10k
In-Reply-To: <20160721070938.GA2658@redhat.com>

On Thu, Jul 21, 2016 at 10:09 AM, Stanislaw Gruszka <sgruszka@redhat.com> wrote:
> On Tue, Jul 19, 2016 at 03:00:37PM +0200, Michal Kazior wrote:
>> Firmware files are versioned to prevent older
>> driver instances to load unsupported firmware
>> blobs. This is reflected with a fallback logic
>> which attempts to load several firmware files.
>>
>> This however produced a lot of unnecessary
>> warnings sometimes confusing users and leading
>> them to rename firmware files making things even
>> more confusing.
>
> This happens on kernels configured with
> CONFIG_FW_LOADER_USER_HELPER_FALLBACK and cause not only ugly warnings,
> but also 60 seconds delay before loading next firmware version.
> For some reason RHEL kernel needs above config option, so this
> patch is very welcome from my perspective.
>

Sorry for my ignorance but how does the firmware loading work if not
with udev's help? As you can imagine, iwlwifi is suffering from the
same problem and I would be interested in applying the same change,
but I'd love to understand a bit more :)

^ permalink raw reply

* Re: [RFC] ath10k: silence firmware file probing warnings
From: Stanislaw Gruszka @ 2016-07-21  7:09 UTC (permalink / raw)
  To: Michal Kazior; +Cc: kvalo, linux-wireless, ath10k
In-Reply-To: <1468933237-5226-1-git-send-email-michal.kazior@tieto.com>

On Tue, Jul 19, 2016 at 03:00:37PM +0200, Michal Kazior wrote:
> Firmware files are versioned to prevent older
> driver instances to load unsupported firmware
> blobs. This is reflected with a fallback logic
> which attempts to load several firmware files.
> 
> This however produced a lot of unnecessary
> warnings sometimes confusing users and leading
> them to rename firmware files making things even
> more confusing.

This happens on kernels configured with
CONFIG_FW_LOADER_USER_HELPER_FALLBACK and cause not only ugly warnings,
but also 60 seconds delay before loading next firmware version.
For some reason RHEL kernel needs above config option, so this
patch is very welcome from my perspective.

Stanislaw

^ permalink raw reply

* Re: [GIT] [4.8] NFC update
From: David Miller @ 2016-07-21  6:40 UTC (permalink / raw)
  To: sameo; +Cc: netdev, linux-nfc, linux-wireless
In-Reply-To: <20160720223748.GA3313@zurbaran.home>

From: Samuel Ortiz <sameo@linux.intel.com>
Date: Thu, 21 Jul 2016 00:37:48 +0200

> This is the first NFC pull request for 4.8. We have:

Pulled, thanks.

^ permalink raw reply

* [PATCH v2] ath10k: implement NAPI support
From: Rajkumar Manoharan @ 2016-07-21  6:20 UTC (permalink / raw)
  To: ath10k; +Cc: linux-wireless, rmanohar, Rajkumar Manoharan

Add NAPI support for rx and tx completion. NAPI poll is scheduled
from interrupt handler. The design is as below

 - on interrupt
     - schedule napi and mask interrupts
 - on poll
   - process all pipes (no actual Tx/Rx)
   - process Rx within budget
   - if quota exceeds budget reschedule napi poll by returning budget
   - process Tx completions and update budget if necessary
   - process Tx fetch indications (pull-push)
   - push any other pending Tx (if possible)
   - before resched or napi completion replenish htt rx ring buffer
   - if work done < budget, complete napi poll and unmask interrupts

This change also get rid of two tasklets (intr_tq and txrx_compl_task).

Measured peak throughput with NAPI on IPQ4019 platform in controlled
environment. No noticeable reduction in throughput is seen and also
observed improvements in CPU usage. Approx. 15% CPU usage got reduced
in UDP uplink case.

DL: AP DUT Tx
UL: AP DUT Rx

IPQ4019 (avg. cpu usage %)
========
                TOT              +NAPI
              ===========      =============
TCP DL       644 Mbps (42%)    645 Mbps (36%)
TCP UL       673 Mbps (30%)    675 Mbps (26%)
UDP DL       682 Mbps (49%)    680 Mbps (49%)
UDP UL       720 Mbps (28%)    717 Mbps (11%)

Signed-off-by: Rajkumar Manoharan <rmanohar@qti.qualcomm.com>
---
v2: rebased change

 drivers/net/wireless/ath/ath10k/ahb.c    |   6 +-
 drivers/net/wireless/ath/ath10k/core.c   |   2 +
 drivers/net/wireless/ath/ath10k/core.h   |   8 ++
 drivers/net/wireless/ath/ath10k/htt.h    |   2 +-
 drivers/net/wireless/ath/ath10k/htt_rx.c | 154 +++++++++++++++++++------------
 drivers/net/wireless/ath/ath10k/htt_tx.c |   2 -
 drivers/net/wireless/ath/ath10k/pci.c    |  69 ++++++++------
 drivers/net/wireless/ath/ath10k/pci.h    |   6 +-
 8 files changed, 153 insertions(+), 96 deletions(-)

diff --git a/drivers/net/wireless/ath/ath10k/ahb.c b/drivers/net/wireless/ath/ath10k/ahb.c
index acec16b9cf49..cdedfb2cfa41 100644
--- a/drivers/net/wireless/ath/ath10k/ahb.c
+++ b/drivers/net/wireless/ath/ath10k/ahb.c
@@ -462,13 +462,13 @@ static void ath10k_ahb_halt_chip(struct ath10k *ar)
 static irqreturn_t ath10k_ahb_interrupt_handler(int irq, void *arg)
 {
 	struct ath10k *ar = arg;
-	struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
 
 	if (!ath10k_pci_irq_pending(ar))
 		return IRQ_NONE;
 
 	ath10k_pci_disable_and_clear_legacy_irq(ar);
-	tasklet_schedule(&ar_pci->intr_tq);
+	ath10k_pci_irq_msi_fw_mask(ar);
+	napi_schedule(&ar->napi);
 
 	return IRQ_HANDLED;
 }
@@ -831,7 +831,7 @@ static int ath10k_ahb_probe(struct platform_device *pdev)
 		goto err_resource_deinit;
 	}
 
-	ath10k_pci_init_irq_tasklets(ar);
+	ath10k_pci_init_napi(ar);
 
 	ret = ath10k_ahb_request_irq_legacy(ar);
 	if (ret)
diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
index e88982921aa3..0ca58cf0ffea 100644
--- a/drivers/net/wireless/ath/ath10k/core.c
+++ b/drivers/net/wireless/ath/ath10k/core.c
@@ -2249,6 +2249,8 @@ struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev,
 	INIT_WORK(&ar->register_work, ath10k_core_register_work);
 	INIT_WORK(&ar->restart_work, ath10k_core_restart);
 
+	init_dummy_netdev(&ar->napi_dev);
+
 	ret = ath10k_debug_create(ar);
 	if (ret)
 		goto err_free_aux_wq;
diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h
index 30ae5bf81611..f36c2b274ee5 100644
--- a/drivers/net/wireless/ath/ath10k/core.h
+++ b/drivers/net/wireless/ath/ath10k/core.h
@@ -65,6 +65,10 @@
 #define ATH10K_KEEPALIVE_MAX_IDLE 3895
 #define ATH10K_KEEPALIVE_MAX_UNRESPONSIVE 3900
 
+/* NAPI poll budget */
+#define ATH10K_NAPI_BUDGET      64
+#define ATH10K_NAPI_QUOTA_LIMIT 60
+
 struct ath10k;
 
 enum ath10k_bus {
@@ -936,6 +940,10 @@ struct ath10k {
 	struct ath10k_thermal thermal;
 	struct ath10k_wow wow;
 
+	/* NAPI */
+	struct net_device napi_dev;
+	struct napi_struct napi;
+
 	/* must be last */
 	u8 drv_priv[0] __aligned(sizeof(void *));
 };
diff --git a/drivers/net/wireless/ath/ath10k/htt.h b/drivers/net/wireless/ath/ath10k/htt.h
index 430a83e142aa..98c14247021b 100644
--- a/drivers/net/wireless/ath/ath10k/htt.h
+++ b/drivers/net/wireless/ath/ath10k/htt.h
@@ -1665,7 +1665,6 @@ struct ath10k_htt {
 
 	/* This is used to group tx/rx completions separately and process them
 	 * in batches to reduce cache stalls */
-	struct tasklet_struct txrx_compl_task;
 	struct sk_buff_head rx_compl_q;
 	struct sk_buff_head rx_in_ord_compl_q;
 	struct sk_buff_head tx_fetch_ind_q;
@@ -1798,5 +1797,6 @@ int ath10k_htt_tx(struct ath10k_htt *htt,
 		  struct sk_buff *msdu);
 void ath10k_htt_rx_pktlog_completion_handler(struct ath10k *ar,
 					     struct sk_buff *skb);
+int ath10k_htt_txrx_compl_task(struct ath10k *ar, int budget);
 
 #endif
diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c
index 78db5d679f19..d3f8baf532d4 100644
--- a/drivers/net/wireless/ath/ath10k/htt_rx.c
+++ b/drivers/net/wireless/ath/ath10k/htt_rx.c
@@ -34,7 +34,6 @@
 #define HTT_RX_RING_REFILL_RESCHED_MS 5
 
 static int ath10k_htt_rx_get_csum_state(struct sk_buff *skb);
-static void ath10k_htt_txrx_compl_task(unsigned long ptr);
 
 static struct sk_buff *
 ath10k_htt_rx_find_skb_paddr(struct ath10k *ar, u32 paddr)
@@ -226,7 +225,6 @@ int ath10k_htt_rx_ring_refill(struct ath10k *ar)
 void ath10k_htt_rx_free(struct ath10k_htt *htt)
 {
 	del_timer_sync(&htt->rx_ring.refill_retry_timer);
-	tasklet_kill(&htt->txrx_compl_task);
 
 	skb_queue_purge(&htt->rx_compl_q);
 	skb_queue_purge(&htt->rx_in_ord_compl_q);
@@ -520,9 +518,6 @@ int ath10k_htt_rx_alloc(struct ath10k_htt *htt)
 	skb_queue_head_init(&htt->tx_fetch_ind_q);
 	atomic_set(&htt->num_mpdus_ready, 0);
 
-	tasklet_init(&htt->txrx_compl_task, ath10k_htt_txrx_compl_task,
-		     (unsigned long)htt);
-
 	ath10k_dbg(ar, ATH10K_DBG_BOOT, "htt rx ring size %d fill_level %d\n",
 		   htt->rx_ring.size, htt->rx_ring.fill_level);
 	return 0;
@@ -958,7 +953,7 @@ static void ath10k_process_rx(struct ath10k *ar,
 	trace_ath10k_rx_hdr(ar, skb->data, skb->len);
 	trace_ath10k_rx_payload(ar, skb->data, skb->len);
 
-	ieee80211_rx(ar->hw, skb);
+	ieee80211_rx_napi(ar->hw, NULL, skb, &ar->napi);
 }
 
 static int ath10k_htt_rx_nwifi_hdrlen(struct ath10k *ar,
@@ -1527,7 +1522,7 @@ static int ath10k_htt_rx_handle_amsdu(struct ath10k_htt *htt)
 	struct ath10k *ar = htt->ar;
 	static struct ieee80211_rx_status rx_status;
 	struct sk_buff_head amsdu;
-	int ret;
+	int ret, num_msdus;
 
 	__skb_queue_head_init(&amsdu);
 
@@ -1549,13 +1544,14 @@ static int ath10k_htt_rx_handle_amsdu(struct ath10k_htt *htt)
 		return ret;
 	}
 
+	num_msdus = skb_queue_len(&amsdu);
 	ath10k_htt_rx_h_ppdu(ar, &amsdu, &rx_status, 0xffff);
 	ath10k_htt_rx_h_unchain(ar, &amsdu, ret > 0);
 	ath10k_htt_rx_h_filter(ar, &amsdu, &rx_status);
 	ath10k_htt_rx_h_mpdu(ar, &amsdu, &rx_status);
 	ath10k_htt_rx_h_deliver(ar, &amsdu, &rx_status);
 
-	return 0;
+	return num_msdus;
 }
 
 static void ath10k_htt_rx_proc_rx_ind(struct ath10k_htt *htt,
@@ -1579,15 +1575,6 @@ static void ath10k_htt_rx_proc_rx_ind(struct ath10k_htt *htt,
 		mpdu_count += mpdu_ranges[i].mpdu_count;
 
 	atomic_add(mpdu_count, &htt->num_mpdus_ready);
-
-	tasklet_schedule(&htt->txrx_compl_task);
-}
-
-static void ath10k_htt_rx_frag_handler(struct ath10k_htt *htt)
-{
-	atomic_inc(&htt->num_mpdus_ready);
-
-	tasklet_schedule(&htt->txrx_compl_task);
 }
 
 static void ath10k_htt_rx_tx_compl_ind(struct ath10k *ar,
@@ -1772,14 +1759,15 @@ static void ath10k_htt_rx_h_rx_offload_prot(struct ieee80211_rx_status *status,
 			RX_FLAG_MMIC_STRIPPED;
 }
 
-static void ath10k_htt_rx_h_rx_offload(struct ath10k *ar,
-				       struct sk_buff_head *list)
+static int ath10k_htt_rx_h_rx_offload(struct ath10k *ar,
+				      struct sk_buff_head *list)
 {
 	struct ath10k_htt *htt = &ar->htt;
 	struct ieee80211_rx_status *status = &htt->rx_status;
 	struct htt_rx_offload_msdu *rx;
 	struct sk_buff *msdu;
 	size_t offset;
+	int num_msdu = 0;
 
 	while ((msdu = __skb_dequeue(list))) {
 		/* Offloaded frames don't have Rx descriptor. Instead they have
@@ -1819,10 +1807,12 @@ static void ath10k_htt_rx_h_rx_offload(struct ath10k *ar,
 		ath10k_htt_rx_h_rx_offload_prot(status, msdu);
 		ath10k_htt_rx_h_channel(ar, status, NULL, rx->vdev_id);
 		ath10k_process_rx(ar, status, msdu);
+		num_msdu++;
 	}
+	return num_msdu;
 }
 
-static void ath10k_htt_rx_in_ord_ind(struct ath10k *ar, struct sk_buff *skb)
+static int ath10k_htt_rx_in_ord_ind(struct ath10k *ar, struct sk_buff *skb)
 {
 	struct ath10k_htt *htt = &ar->htt;
 	struct htt_resp *resp = (void *)skb->data;
@@ -1835,12 +1825,12 @@ static void ath10k_htt_rx_in_ord_ind(struct ath10k *ar, struct sk_buff *skb)
 	u8 tid;
 	bool offload;
 	bool frag;
-	int ret;
+	int ret, num_msdus = 0;
 
 	lockdep_assert_held(&htt->rx_ring.lock);
 
 	if (htt->rx_confused)
-		return;
+		return -EIO;
 
 	skb_pull(skb, sizeof(resp->hdr));
 	skb_pull(skb, sizeof(resp->rx_in_ord_ind));
@@ -1859,7 +1849,7 @@ static void ath10k_htt_rx_in_ord_ind(struct ath10k *ar, struct sk_buff *skb)
 
 	if (skb->len < msdu_count * sizeof(*resp->rx_in_ord_ind.msdu_descs)) {
 		ath10k_warn(ar, "dropping invalid in order rx indication\n");
-		return;
+		return -EINVAL;
 	}
 
 	/* The event can deliver more than 1 A-MSDU. Each A-MSDU is later
@@ -1870,14 +1860,14 @@ static void ath10k_htt_rx_in_ord_ind(struct ath10k *ar, struct sk_buff *skb)
 	if (ret < 0) {
 		ath10k_warn(ar, "failed to pop paddr list: %d\n", ret);
 		htt->rx_confused = true;
-		return;
+		return -EIO;
 	}
 
 	/* Offloaded frames are very different and need to be handled
 	 * separately.
 	 */
 	if (offload)
-		ath10k_htt_rx_h_rx_offload(ar, &list);
+		num_msdus = ath10k_htt_rx_h_rx_offload(ar, &list);
 
 	while (!skb_queue_empty(&list)) {
 		__skb_queue_head_init(&amsdu);
@@ -1890,6 +1880,7 @@ static void ath10k_htt_rx_in_ord_ind(struct ath10k *ar, struct sk_buff *skb)
 			 * better to report something than nothing though. This
 			 * should still give an idea about rx rate to the user.
 			 */
+			num_msdus += skb_queue_len(&amsdu);
 			ath10k_htt_rx_h_ppdu(ar, &amsdu, status, vdev_id);
 			ath10k_htt_rx_h_filter(ar, &amsdu, status);
 			ath10k_htt_rx_h_mpdu(ar, &amsdu, status);
@@ -1902,9 +1893,10 @@ static void ath10k_htt_rx_in_ord_ind(struct ath10k *ar, struct sk_buff *skb)
 			ath10k_warn(ar, "failed to extract amsdu: %d\n", ret);
 			htt->rx_confused = true;
 			__skb_queue_purge(&list);
-			return;
+			return -EIO;
 		}
 	}
+	return num_msdus;
 }
 
 static void ath10k_htt_rx_tx_fetch_resp_id_confirm(struct ath10k *ar,
@@ -2267,7 +2259,6 @@ bool ath10k_htt_t2h_msg_handler(struct ath10k *ar, struct sk_buff *skb)
 	}
 	case HTT_T2H_MSG_TYPE_TX_COMPL_IND:
 		ath10k_htt_rx_tx_compl_ind(htt->ar, skb);
-		tasklet_schedule(&htt->txrx_compl_task);
 		break;
 	case HTT_T2H_MSG_TYPE_SEC_IND: {
 		struct ath10k *ar = htt->ar;
@@ -2284,7 +2275,7 @@ bool ath10k_htt_t2h_msg_handler(struct ath10k *ar, struct sk_buff *skb)
 	case HTT_T2H_MSG_TYPE_RX_FRAG_IND: {
 		ath10k_dbg_dump(ar, ATH10K_DBG_HTT_DUMP, NULL, "htt event: ",
 				skb->data, skb->len);
-		ath10k_htt_rx_frag_handler(htt);
+		atomic_inc(&htt->num_mpdus_ready);
 		break;
 	}
 	case HTT_T2H_MSG_TYPE_TEST:
@@ -2320,8 +2311,7 @@ bool ath10k_htt_t2h_msg_handler(struct ath10k *ar, struct sk_buff *skb)
 		break;
 	}
 	case HTT_T2H_MSG_TYPE_RX_IN_ORD_PADDR_IND: {
-		skb_queue_tail(&htt->rx_in_ord_compl_q, skb);
-		tasklet_schedule(&htt->txrx_compl_task);
+		__skb_queue_tail(&htt->rx_in_ord_compl_q, skb);
 		return false;
 	}
 	case HTT_T2H_MSG_TYPE_TX_CREDIT_UPDATE_IND:
@@ -2347,7 +2337,6 @@ bool ath10k_htt_t2h_msg_handler(struct ath10k *ar, struct sk_buff *skb)
 			break;
 		}
 		skb_queue_tail(&htt->tx_fetch_ind_q, tx_fetch_ind);
-		tasklet_schedule(&htt->txrx_compl_task);
 		break;
 	}
 	case HTT_T2H_MSG_TYPE_TX_FETCH_CONFIRM:
@@ -2376,27 +2365,77 @@ void ath10k_htt_rx_pktlog_completion_handler(struct ath10k *ar,
 }
 EXPORT_SYMBOL(ath10k_htt_rx_pktlog_completion_handler);
 
-static void ath10k_htt_txrx_compl_task(unsigned long ptr)
+int ath10k_htt_txrx_compl_task(struct ath10k *ar, int budget)
 {
-	struct ath10k_htt *htt = (struct ath10k_htt *)ptr;
-	struct ath10k *ar = htt->ar;
+	struct ath10k_htt *htt = &ar->htt;
 	struct htt_tx_done tx_done = {};
-	struct sk_buff_head rx_ind_q;
 	struct sk_buff_head tx_ind_q;
 	struct sk_buff *skb;
 	unsigned long flags;
-	int num_mpdus;
+	int quota = 0, done, num_rx_msdus;
+	bool resched_napi = false;
 
-	__skb_queue_head_init(&rx_ind_q);
 	__skb_queue_head_init(&tx_ind_q);
 
-	spin_lock_irqsave(&htt->rx_in_ord_compl_q.lock, flags);
-	skb_queue_splice_init(&htt->rx_in_ord_compl_q, &rx_ind_q);
-	spin_unlock_irqrestore(&htt->rx_in_ord_compl_q.lock, flags);
+	/* Since in-ord-ind can deliver more than 1 A-MSDU in single event,
+	 * process it first to utilize full available quota.
+	 */
+	while (quota < budget) {
+		if (skb_queue_empty(&htt->rx_in_ord_compl_q))
+			break;
 
-	spin_lock_irqsave(&htt->tx_fetch_ind_q.lock, flags);
-	skb_queue_splice_init(&htt->tx_fetch_ind_q, &tx_ind_q);
-	spin_unlock_irqrestore(&htt->tx_fetch_ind_q.lock, flags);
+		skb = __skb_dequeue(&htt->rx_in_ord_compl_q);
+		if (!skb) {
+			resched_napi = true;
+			goto exit;
+		}
+
+		spin_lock_bh(&htt->rx_ring.lock);
+		num_rx_msdus = ath10k_htt_rx_in_ord_ind(ar, skb);
+		spin_unlock_bh(&htt->rx_ring.lock);
+		if (num_rx_msdus < 0) {
+			resched_napi = true;
+			goto exit;
+		}
+
+		dev_kfree_skb_any(skb);
+		if (num_rx_msdus > 0)
+			quota += num_rx_msdus;
+
+		if ((quota > ATH10K_NAPI_QUOTA_LIMIT) &&
+		    !skb_queue_empty(&htt->rx_in_ord_compl_q)) {
+			resched_napi = true;
+			goto exit;
+		}
+	}
+
+	while (quota < budget) {
+		/* no more data to receive */
+		if (!atomic_read(&htt->num_mpdus_ready))
+			break;
+
+		num_rx_msdus = ath10k_htt_rx_handle_amsdu(htt);
+		if (num_rx_msdus < 0) {
+			resched_napi = true;
+			goto exit;
+		}
+
+		quota += num_rx_msdus;
+		atomic_dec(&htt->num_mpdus_ready);
+		if ((quota > ATH10K_NAPI_QUOTA_LIMIT) &&
+		    atomic_read(&htt->num_mpdus_ready)) {
+			resched_napi = true;
+			goto exit;
+		}
+	}
+
+	/* From NAPI documentation:
+	 *  The napi poll() function may also process TX completions, in which
+	 *  case if it processes the entire TX ring then it should count that
+	 *  work as the rest of the budget.
+	 */
+	if ((quota < budget) && !kfifo_is_empty(&htt->txdone_fifo))
+		quota = budget;
 
 	/* kfifo_get: called only within txrx_tasklet so it's neatly serialized.
 	 * From kfifo_get() documentation:
@@ -2406,27 +2445,22 @@ static void ath10k_htt_txrx_compl_task(unsigned long ptr)
 	while (kfifo_get(&htt->txdone_fifo, &tx_done))
 		ath10k_txrx_tx_unref(htt, &tx_done);
 
+	spin_lock_irqsave(&htt->tx_fetch_ind_q.lock, flags);
+	skb_queue_splice_init(&htt->tx_fetch_ind_q, &tx_ind_q);
+	spin_unlock_irqrestore(&htt->tx_fetch_ind_q.lock, flags);
+
 	while ((skb = __skb_dequeue(&tx_ind_q))) {
 		ath10k_htt_rx_tx_fetch_ind(ar, skb);
 		dev_kfree_skb_any(skb);
 	}
 
-	num_mpdus = atomic_read(&htt->num_mpdus_ready);
-
-	while (num_mpdus) {
-		if (ath10k_htt_rx_handle_amsdu(htt))
-			break;
-
-		num_mpdus--;
-		atomic_dec(&htt->num_mpdus_ready);
-	}
-
-	while ((skb = __skb_dequeue(&rx_ind_q))) {
-		spin_lock_bh(&htt->rx_ring.lock);
-		ath10k_htt_rx_in_ord_ind(ar, skb);
-		spin_unlock_bh(&htt->rx_ring.lock);
-		dev_kfree_skb_any(skb);
-	}
-
+exit:
 	ath10k_htt_rx_msdu_buff_replenish(htt);
+	/* In case of rx failure or more data to read, report budget
+	 * to reschedule NAPI poll
+	 */
+	done = resched_napi ? budget : quota;
+
+	return done;
 }
+EXPORT_SYMBOL(ath10k_htt_txrx_compl_task);
diff --git a/drivers/net/wireless/ath/ath10k/htt_tx.c b/drivers/net/wireless/ath/ath10k/htt_tx.c
index 7c072b605bc7..ae5b33fe5ba8 100644
--- a/drivers/net/wireless/ath/ath10k/htt_tx.c
+++ b/drivers/net/wireless/ath/ath10k/htt_tx.c
@@ -390,8 +390,6 @@ void ath10k_htt_tx_free(struct ath10k_htt *htt)
 {
 	int size;
 
-	tasklet_kill(&htt->txrx_compl_task);
-
 	idr_for_each(&htt->pending_tx, ath10k_htt_tx_clean_up_pending, htt->ar);
 	idr_destroy(&htt->pending_tx);
 
diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c
index 9a22c478dd1b..6e21fa1478ea 100644
--- a/drivers/net/wireless/ath/ath10k/pci.c
+++ b/drivers/net/wireless/ath/ath10k/pci.c
@@ -1506,12 +1506,10 @@ void ath10k_pci_hif_send_complete_check(struct ath10k *ar, u8 pipe,
 	ath10k_ce_per_engine_service(ar, pipe);
 }
 
-void ath10k_pci_kill_tasklet(struct ath10k *ar)
+static void ath10k_pci_rx_retry_sync(struct ath10k *ar)
 {
 	struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
 
-	tasklet_kill(&ar_pci->intr_tq);
-
 	del_timer_sync(&ar_pci->rx_post_retry);
 }
 
@@ -1570,7 +1568,7 @@ void ath10k_pci_hif_get_default_pipe(struct ath10k *ar,
 						 ul_pipe, dl_pipe);
 }
 
-static void ath10k_pci_irq_msi_fw_mask(struct ath10k *ar)
+void ath10k_pci_irq_msi_fw_mask(struct ath10k *ar)
 {
 	u32 val;
 
@@ -1753,7 +1751,7 @@ void ath10k_pci_ce_deinit(struct ath10k *ar)
 
 void ath10k_pci_flush(struct ath10k *ar)
 {
-	ath10k_pci_kill_tasklet(ar);
+	ath10k_pci_rx_retry_sync(ar);
 	ath10k_pci_buffer_cleanup(ar);
 }
 
@@ -2772,35 +2770,53 @@ static irqreturn_t ath10k_pci_interrupt_handler(int irq, void *arg)
 		return IRQ_NONE;
 	}
 
-	if (ar_pci->oper_irq_mode == ATH10K_PCI_IRQ_LEGACY) {
-		if (!ath10k_pci_irq_pending(ar))
-			return IRQ_NONE;
-
-		ath10k_pci_disable_and_clear_legacy_irq(ar);
-	}
+	if ((ar_pci->oper_irq_mode == ATH10K_PCI_IRQ_LEGACY) &&
+	    !ath10k_pci_irq_pending(ar))
+		return IRQ_NONE;
 
-	tasklet_schedule(&ar_pci->intr_tq);
+	ath10k_pci_disable_and_clear_legacy_irq(ar);
+	ath10k_pci_irq_msi_fw_mask(ar);
+	napi_schedule(&ar->napi);
 
 	return IRQ_HANDLED;
 }
 
-static void ath10k_pci_tasklet(unsigned long data)
+static int ath10k_pci_napi_poll(struct napi_struct *ctx, int budget)
 {
-	struct ath10k *ar = (struct ath10k *)data;
-	struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
+	struct ath10k *ar = container_of(ctx, struct ath10k, napi);
+	int done = 0;
 
 	if (ath10k_pci_has_fw_crashed(ar)) {
-		ath10k_pci_irq_disable(ar);
 		ath10k_pci_fw_crashed_clear(ar);
 		ath10k_pci_fw_crashed_dump(ar);
-		return;
+		napi_complete(ctx);
+		return done;
 	}
 
 	ath10k_ce_per_engine_service_any(ar);
 
-	/* Re-enable legacy irq that was disabled in the irq handler */
-	if (ar_pci->oper_irq_mode == ATH10K_PCI_IRQ_LEGACY)
+	done = ath10k_htt_txrx_compl_task(ar, budget);
+
+	if (done < budget) {
+		napi_complete(ctx);
+		/* In case of MSI, it is possible that interrupts are received
+		 * while NAPI poll is inprogress. So pending interrupts that are
+		 * received after processing all copy engine pipes by NAPI poll
+		 * will not be handled again. This is causing failure to
+		 * complete boot sequence in x86 platform. So before enabling
+		 * interrupts safer to check for pending interrupts for
+		 * immediate servicing.
+		 */
+		if (CE_INTERRUPT_SUMMARY(ar)) {
+			napi_reschedule(&ar->napi);
+			goto out;
+		}
 		ath10k_pci_enable_legacy_irq(ar);
+		ath10k_pci_irq_msi_fw_unmask(ar);
+	}
+
+out:
+	return done;
 }
 
 static int ath10k_pci_request_irq_msi(struct ath10k *ar)
@@ -2858,11 +2874,11 @@ static void ath10k_pci_free_irq(struct ath10k *ar)
 	free_irq(ar_pci->pdev->irq, ar);
 }
 
-void ath10k_pci_init_irq_tasklets(struct ath10k *ar)
+void ath10k_pci_init_napi(struct ath10k *ar)
 {
-	struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
-
-	tasklet_init(&ar_pci->intr_tq, ath10k_pci_tasklet, (unsigned long)ar);
+	netif_napi_add(&ar->napi_dev, &ar->napi, ath10k_pci_napi_poll,
+		       ATH10K_NAPI_BUDGET);
+	napi_enable(&ar->napi);
 }
 
 static int ath10k_pci_init_irq(struct ath10k *ar)
@@ -2870,7 +2886,7 @@ static int ath10k_pci_init_irq(struct ath10k *ar)
 	struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
 	int ret;
 
-	ath10k_pci_init_irq_tasklets(ar);
+	ath10k_pci_init_napi(ar);
 
 	if (ath10k_pci_irq_mode != ATH10K_PCI_IRQ_AUTO)
 		ath10k_info(ar, "limiting irq mode to: %d\n",
@@ -3131,7 +3147,8 @@ int ath10k_pci_setup_resource(struct ath10k *ar)
 
 void ath10k_pci_release_resource(struct ath10k *ar)
 {
-	ath10k_pci_kill_tasklet(ar);
+	ath10k_pci_rx_retry_sync(ar);
+	netif_napi_del(&ar->napi);
 	ath10k_pci_ce_deinit(ar);
 	ath10k_pci_free_pipes(ar);
 }
@@ -3298,7 +3315,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
 
 err_free_irq:
 	ath10k_pci_free_irq(ar);
-	ath10k_pci_kill_tasklet(ar);
+	ath10k_pci_rx_retry_sync(ar);
 
 err_deinit_irq:
 	ath10k_pci_deinit_irq(ar);
diff --git a/drivers/net/wireless/ath/ath10k/pci.h b/drivers/net/wireless/ath/ath10k/pci.h
index 6eca1df2ce60..9854ad56b2de 100644
--- a/drivers/net/wireless/ath/ath10k/pci.h
+++ b/drivers/net/wireless/ath/ath10k/pci.h
@@ -177,8 +177,6 @@ struct ath10k_pci {
 	/* Operating interrupt mode */
 	enum ath10k_pci_irq_mode oper_irq_mode;
 
-	struct tasklet_struct intr_tq;
-
 	struct ath10k_pci_pipe pipe_info[CE_COUNT_MAX];
 
 	/* Copy Engine used for Diagnostic Accesses */
@@ -294,8 +292,7 @@ void ath10k_pci_free_pipes(struct ath10k *ar);
 void ath10k_pci_free_pipes(struct ath10k *ar);
 void ath10k_pci_rx_replenish_retry(unsigned long ptr);
 void ath10k_pci_ce_deinit(struct ath10k *ar);
-void ath10k_pci_init_irq_tasklets(struct ath10k *ar);
-void ath10k_pci_kill_tasklet(struct ath10k *ar);
+void ath10k_pci_init_napi(struct ath10k *ar);
 int ath10k_pci_init_pipes(struct ath10k *ar);
 int ath10k_pci_init_config(struct ath10k *ar);
 void ath10k_pci_rx_post(struct ath10k *ar);
@@ -303,6 +300,7 @@ void ath10k_pci_flush(struct ath10k *ar);
 void ath10k_pci_enable_legacy_irq(struct ath10k *ar);
 bool ath10k_pci_irq_pending(struct ath10k *ar);
 void ath10k_pci_disable_and_clear_legacy_irq(struct ath10k *ar);
+void ath10k_pci_irq_msi_fw_mask(struct ath10k *ar);
 int ath10k_pci_wait_for_target_init(struct ath10k *ar);
 int ath10k_pci_setup_resource(struct ath10k *ar);
 void ath10k_pci_release_resource(struct ath10k *ar);
-- 
2.9.0


^ permalink raw reply related

* Re: [PATCH v2 2/3] mac80211: mesh: improve path resolving time
From: Yeoh Chun-Yeow @ 2016-07-21  2:29 UTC (permalink / raw)
  To: Machani, Yaniv
  Cc: Bob Copeland, linux-wireless@vger.kernel.org, Hahn, Maital,
	Johannes Berg
In-Reply-To: <AE1C82FB3D0EC64DB1F752C81CBD1101392097ED@DFRE01.ent.ti.com>

>> I just take another look on your patch:
>>
>> @@ -1110,7 +1117,7 @@ int mesh_nexthop_resolve(struct
>> ieee80211_sub_if_data *sdata, }
>>
>> if (!(mpath->flags & MESH_PATH_RESOLVING))
>> - mesh_queue_preq(mpath, PREQ_Q_F_START);
>> + mesh_queue_preq(mpath, PREQ_Q_F_START, true);
>>
>> if (skb_queue_len(&mpath->frame_queue) >= MESH_FRAME_QUEUE_LEN)
>> skb_to_free = skb_dequeue(&mpath->frame_queue);
>>
>> You modification is intended to add this "immediate" PREQ generation
>> whenever the data frame is transmitted. In case the current path is
>> indeed the best one, the PREQ will still generate without waiting for
>> dot11MeshHWMPpreqMinInterval. The network is unnecessary flooded with
>> PREQ.
>
> To my understanding, if you already have a path established, it will not send a new PREQ (as it's not in RESOLVING state)

The mesh path is in resolving state means that the mesh STA has just
triggered the discovery process. It sends out a PREQ and waits for
PREP from your destined mesh STA. After receiving the PREP, the path
is established and in active state. Then, the mesh STA is allowed to
send another PREQ but limited by the dot11MeshHWMPpreqMinInterval.

> So if the current path is the best, no excessive PREQ frames will be sent.

Your patch is indeed allowed the mesh STA with on-going data
transmission to send PREQ immediately no matter whether the path is
already a best path or not.

> In case the path is cleared, due to peer removal as described before.

For your case, it happens to you that the leaving mesh STA is the one
used for constructing the best path. So you want a quick PREQ to
re-construct it back.

>
> The test use case is simple, and from our tests the impact on performance big related to our expectation,
> I assume the question is, what are the performance expectations/requirements from the 802.11s mesh network ?

You specified your test case, nothing wrong. But there is other use
cases that we don't really need the "immediate" PREQ and indeed would
like to limit by dot11MeshHWMPpreqMinInterval.

Moving forward, I would suggest that a patch to turn it on or off with
comments saying that turning this on may consume more airtime due to
the overhead of broadcast PREQ no longer limited by
dot11MeshHWMPpreqMinInterval and this feature is by default off.

---
Chun-Yeow

^ permalink raw reply

* [GIT] [4.8] NFC update
From: Samuel Ortiz @ 2016-07-20 22:37 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, Linux NFC, Linux Wireless

Hi David,

This is the first NFC pull request for 4.8. We have:

- A fairly large NFC digital stack patchset:
  * RTOX fixes.
  * Proper DEP RWT support.
  * ACK and NACK PDUs handling fixes, in both initiator
    and target modes.
  * A few memory leak fixes.

- A conversion of the nfcsim driver to use the digital stack.
  The driver supports the DEP protocol in both NFC-A and NFC-F.

- Error injection through debugfs for the nfcsim driver.

- Improvements to the port100 driver for the Sony USB chipset, in
  particular to the command abort and cancellation code paths.

- A few minor fixes for the pn533, trf7970a and fdp drivers.

The following changes since commit 8186f6e382d8719d0a4bc0ef218c4dd7cf55b496:

  net-next: mediatek: fix compile error inside mtk_poll_controller() (2016-07-02 15:22:29 -0400)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/sameo/nfc-next.git tags/nfc-next-4.8-1

for you to fetch changes up to 2a0fe4fe5bf2a6e2277354e7e8f369a20d881891:

  NFC: nfcsim: Simulate lost frames through debugfs entry (2016-07-19 23:24:49 +0200)

----------------------------------------------------------------
Colin Ian King (1):
      NFC: set info->ram_patch to NULL when it is released

Dan Carpenter (1):
      NFC: pn533: double free on error in probe()

Denys Vlasenko (1):
      NFC: hci: delete unused nfc_llc_get_rx_head_tail_room()

Geert Uytterhoeven (1):
      NFC: fdp: Detect errors from fdp_nci_create_conn()

Geoff Lansberry (1):
      NFC: trf7970a: add TI recommended write of zero to Register 0x18

Thierry Escande (26):
      NFC: port100: Explicitly set NFC-F framing for NFC-DEP
      NFC: digital: Add a delay between poll cycles
      NFC: llcp: Use dynamic debug for hex dump
      NFC: nfcsim: Make use of the Digital layer
      NFC: llcp: Fix usage of llcp_add_tlv()
      NFC: llcp: Fix 2 memory leaks
      NFC: port100: Don't send a new command if one is still pending
      NFC: port100: Fix the command cancellation process
      NFC: port100: Make port100_abort_cmd() synchronous
      NFC: port100: Abort current command before switching RF off
      NFC: nfcsim: Fix missing dependency on NFC_DIGITAL
      NFC: digital: Fix a memory leak in NFC-F listening mode
      NFC: digital: Rework error handling in DEP_RES response
      NFC: digital: Call pending command callbacks at device unregister
      NFC: digital: Set the command pending flag
      NFC: digital: Abort last command when dep link goes down
      NFC: digital: Fix handling of saved PDU sk_buff pointers
      NFC: digital: Remove useless call to skb_reserve()
      NFC: digital: Fix target DEP_REQ I-PDU handling after ATN PDU
      NFC: digital: Fix ACK & NACK PDUs handling in target mode
      NFC: digital: Rework ACK PDU handling in initiator mode
      NFC: digital: Free supervisor PDUs
      NFC: digital: Add support for NFC DEP Response Waiting Time
      NFC: digital: Fix RTOX supervisor PDU handling
      NFC: nfcsim: Add support for sysfs control entry
      NFC: nfcsim: Simulate lost frames through debugfs entry

 drivers/nfc/Kconfig          |   1 +
 drivers/nfc/fdp/fdp.c        |   6 +-
 drivers/nfc/nfcsim.c         | 643 ++++++++++++++++++++-----------------------
 drivers/nfc/pn533/usb.c      |   9 +-
 drivers/nfc/port100.c        |  82 +++++-
 drivers/nfc/trf7970a.c       |   4 +
 include/net/nfc/digital.h    |   4 +-
 include/net/nfc/llc.h        |   4 -
 net/nfc/digital_core.c       |  28 +-
 net/nfc/digital_dep.c        | 316 ++++++++++++++-------
 net/nfc/digital_technology.c |  11 +-
 net/nfc/hci/llc.c            |  17 +-
 net/nfc/llcp_commands.c      |  23 +-
 net/nfc/llcp_core.c          |   9 +-
 14 files changed, 648 insertions(+), 509 deletions(-)

^ permalink raw reply

* Re: Problem connecting to wifi on libertas_cpio (sd8686)
From: Christopher Williamson @ 2016-07-20 22:16 UTC (permalink / raw)
  To: linux-wireless@vger.kernel.org, Dan Williams
In-Reply-To: <1469051432.3286.4.camel@redhat.com>

I used NetworkManager in the previous test.

This time around I have used wpa_supplicant directly and get the
following results:

http://termbin.com/j8ea

Thought I’d throw them on a pastebin since it’s over 700 lines.

Christopher Williamson




On 20 July 2016 at 22:50:34, Dan Williams
(dcbw@redhat.com(mailto:dcbw@redhat.com)) wrote:

> On Wed, 2016-07-20 at 13:06 -0700, Christopher Williamson wrote:
> > Hi Dan,
> >
> > Ah - yeah I hadn’t thought it may be a kernel build option. I’ve now
> > built that and dmesg is a much more lively place!
> >
> > I’ve provided output logs for both when the device is connected and
> > when a connection attempt is made - hopefully this is useful.
>
>
>
> The card is scanning and only finds 'shaunthesheep' 20 seconds after
> you "connect for the first time". The logs stop 3 seconds later. Are
> you connecting with wicd or something else?
>
> Can you run wpa_supplicant with the "-dddtu" option so we can get debug
> log output from it?
>
> Dan

^ permalink raw reply

* Re: Problem connecting to wifi on libertas_cpio (sd8686)
From: Dan Williams @ 2016-07-20 21:50 UTC (permalink / raw)
  To: Christopher Williamson, linux-wireless@vger.kernel.org
In-Reply-To: <CANXHH3minohF3z9bWc2NAghiU=w4DbsH1jU8iE8=v7H1pGdFcg@mail.gmail.com>

On Wed, 2016-07-20 at 13:06 -0700, Christopher Williamson wrote:
> Hi Dan,
> 
> Ah - yeah I hadn’t thought it may be a kernel build option. I’ve now
> built that and dmesg is a much more lively place!
> 
> I’ve provided output logs for both when the device is connected and
> when a connection attempt is made - hopefully this is useful.

<snip>

The card is scanning and only finds 'shaunthesheep' 20 seconds after
you "connect for the first time".  The logs stop 3 seconds later.  Are
you connecting with wicd or something else?

Can you run wpa_supplicant with the "-dddtu" option so we can get debug
log output from it?

Dan

^ permalink raw reply

* Re: Problem connecting to wifi on libertas_cpio (sd8686)
From: Christopher Williamson @ 2016-07-20 20:06 UTC (permalink / raw)
  To: linux-wireless@vger.kernel.org, Dan Williams
In-Reply-To: <1469033825.3004.8.camel@redhat.com>

Hi Dan,

Ah - yeah I hadn’t thought it may be a kernel build option. I’ve now
built that and dmesg is a much more lively place!

I’ve provided output logs for both when the device is connected and
when a connection attempt is made - hopefully this is useful.

When I first connect the device:
root@nano:~# dmesg |grep libertas
[ 80.432144] libertas: module verification failed: signature and/or
required key missing - tainting kernel
[ 80.434563] libertas enter: lbs_init_module()
[ 80.434600] libertas leave: lbs_init_module()
[ 80.457044] libertas_sdio: Libertas SDIO driver
[ 80.457062] libertas_sdio: Copyright Pierre Ossman
[ 80.457782] libertas enter: lbs_add_card()
[ 80.457801] libertas enter: lbs_cfg_alloc()
[ 80.457875] libertas leave: lbs_cfg_alloc()
[ 80.457890] libertas enter: lbs_init_adapter()
[ 80.457905] libertas enter: lbs_allocate_cmd_buffer()
[ 80.458005] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 80.458022] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 80.458034] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 80.458047] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 80.458058] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 80.458072] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 80.458083] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 80.458098] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 80.458110] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 80.458124] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 80.458137] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 80.458151] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 80.458164] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 80.458179] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 80.458191] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 80.458205] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 80.458216] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 80.458231] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 80.458244] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 80.458259] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 80.458273] libertas leave: lbs_allocate_cmd_buffer(), ret 0
[ 80.458290] libertas leave: lbs_init_adapter(), ret 0
[ 80.458333] libertas thread: Starting main thread...
[ 80.458766] libertas enter: lbs_thread()
[ 80.458785] libertas thread: 1: currenttxskb (null), dnld_sent 0
[ 80.458802] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 80.458870] libertas leave: lbs_add_card(), priv f6700420
[ 81.020863] libertas enter: lbs_start_card()
[ 81.020880] libertas enter: lbs_update_hw_spec()
[ 81.020890] libertas enter: __lbs_cmd()
[ 81.020898] libertas enter: __lbs_cmd_async()
[ 81.020906] libertas enter: lbs_get_free_cmd_node()
[ 81.020915] libertas leave: lbs_get_free_cmd_node()
[ 81.020924] libertas host: PREP_CMD: command 0x0003
[ 81.020931] libertas enter: lbs_queue_cmd()
[ 81.020941] libertas host: QUEUE_CMD: inserted command 0x0003 into cmdpendingq
[ 81.020948] libertas leave: lbs_queue_cmd()
[ 81.020976] libertas leave: __lbs_cmd_async(), ret f64fc000
[ 81.021001] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.021014] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.021023] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.021032] libertas enter: lbs_execute_next_command()
[ 81.021041] libertas host: EXEC_NEXT_CMD: sending command 0x0003
[ 81.021049] libertas enter: lbs_submit_command()
[ 81.021059] libertas cmd: DNLD_CMD: command 0x0003, seq 1, size 46
[ 81.021089] libertas leave: lbs_submit_command()
[ 81.021098] libertas leave: lbs_execute_next_command()
[ 81.021107] libertas thread: 1: currenttxskb (null), dnld_sent 2
[ 81.021117] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.021443] libertas enter: lbs_host_to_card_done()
[ 81.021454] libertas leave: lbs_host_to_card_done()
[ 81.021763] libertas enter: lbs_notify_command_response()
[ 81.021786] libertas leave: lbs_notify_command_response()
[ 81.021799] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.021809] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.021818] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.021830] libertas enter: lbs_process_command_response()
[ 81.021846] libertas cmd: CMD_RESP: response 0x8003, seq 1, size 46
[ 81.021869] libertas leave: lbs_process_command_response(), ret 0
[ 81.021879] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 81.021888] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 81.021897] libertas leave: __lbs_cmd(), ret 0
[ 81.021908] libertas enter: lbs_execute_next_command()
[ 81.021922] libertas_sdio mmc1:0001:1 (unnamed net_device)
(uninitialized): 00:02:78:69:49:94, fw 9.70.20p0, cap 0x00000303
[ 81.021932] libertas cmd: GET_HW_SPEC: hardware interface 0x2,
hardware spec 0x0011
[ 81.021941] libertas leave: lbs_update_hw_spec()
[ 81.021949] libertas enter: lbs_get_tx_power()
[ 81.021957] libertas enter: __lbs_cmd()
[ 81.021965] libertas enter: __lbs_cmd_async()
[ 81.021973] libertas enter: lbs_get_free_cmd_node()
[ 81.021981] libertas leave: lbs_get_free_cmd_node()
[ 81.021990] libertas host: PREP_CMD: command 0x001e
[ 81.021998] libertas enter: lbs_queue_cmd()
[ 81.022006] libertas host: QUEUE_CMD: inserted command 0x001e into cmdpendingq
[ 81.022014] libertas leave: lbs_queue_cmd()
[ 81.022024] libertas leave: __lbs_cmd_async(), ret f64fc028
[ 81.022042] libertas host: EXEC_NEXT_CMD: sending command 0x001e
[ 81.022051] libertas enter: lbs_submit_command()
[ 81.022061] libertas cmd: DNLD_CMD: command 0x001e, seq 2, size 14
[ 81.022084] libertas leave: lbs_submit_command()
[ 81.022092] libertas leave: lbs_execute_next_command()
[ 81.022101] libertas thread: 1: currenttxskb (null), dnld_sent 2
[ 81.022111] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.022381] libertas enter: lbs_host_to_card_done()
[ 81.022393] libertas leave: lbs_host_to_card_done()
[ 81.022698] libertas enter: lbs_notify_command_response()
[ 81.022721] libertas leave: lbs_notify_command_response()
[ 81.022734] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.022744] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.022753] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.022764] libertas enter: lbs_process_command_response()
[ 81.022779] libertas cmd: CMD_RESP: response 0x801e, seq 2, size 14
[ 81.022801] libertas leave: lbs_process_command_response(), ret 0
[ 81.022812] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 81.022821] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 81.022829] libertas leave: __lbs_cmd(), ret 0
[ 81.022837] libertas leave: lbs_get_tx_power()
[ 81.022845] libertas enter: lbs_set_snmp_mib()
[ 81.022856] libertas cmd: SNMP_CMD: (set) oid 0x9, oid size 0x2, value 0x1
[ 81.022864] libertas enter: __lbs_cmd()
[ 81.022872] libertas enter: __lbs_cmd_async()
[ 81.022880] libertas enter: lbs_get_free_cmd_node()
[ 81.022888] libertas leave: lbs_get_free_cmd_node()
[ 81.022896] libertas host: PREP_CMD: command 0x0016
[ 81.022904] libertas enter: lbs_queue_cmd()
[ 81.022913] libertas host: QUEUE_CMD: inserted command 0x0016 into cmdpendingq
[ 81.022922] libertas leave: lbs_queue_cmd()
[ 81.022931] libertas leave: __lbs_cmd_async(), ret f64fc050
[ 81.022943] libertas enter: lbs_execute_next_command()
[ 81.022955] libertas host: EXEC_NEXT_CMD: sending command 0x0016
[ 81.022963] libertas enter: lbs_submit_command()
[ 81.022973] libertas cmd: DNLD_CMD: command 0x0016, seq 3, size 142
[ 81.022995] libertas leave: lbs_submit_command()
[ 81.023004] libertas leave: lbs_execute_next_command()
[ 81.023013] libertas thread: 1: currenttxskb (null), dnld_sent 2
[ 81.023023] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.023314] libertas enter: lbs_host_to_card_done()
[ 81.023325] libertas leave: lbs_host_to_card_done()
[ 81.023632] libertas enter: lbs_notify_command_response()
[ 81.023653] libertas leave: lbs_notify_command_response()
[ 81.023666] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.023676] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.023685] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.023696] libertas enter: lbs_process_command_response()
[ 81.023711] libertas cmd: CMD_RESP: response 0x8016, seq 3, size 142
[ 81.023732] libertas leave: lbs_process_command_response(), ret 0
[ 81.023743] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 81.023752] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 81.023760] libertas leave: __lbs_cmd(), ret 0
[ 81.023769] libertas leave: lbs_set_snmp_mib(), ret 0
[ 81.023777] libertas enter: lbs_set_mac_control_sync()
[ 81.023785] libertas enter: __lbs_cmd()
[ 81.023793] libertas enter: __lbs_cmd_async()
[ 81.023801] libertas enter: lbs_get_free_cmd_node()
[ 81.023810] libertas leave: lbs_get_free_cmd_node()
[ 81.023818] libertas host: PREP_CMD: command 0x0028
[ 81.023826] libertas enter: lbs_queue_cmd()
[ 81.023835] libertas host: QUEUE_CMD: inserted command 0x0028 into cmdpendingq
[ 81.023843] libertas leave: lbs_queue_cmd()
[ 81.023853] libertas leave: __lbs_cmd_async(), ret f64fc078
[ 81.023865] libertas enter: lbs_execute_next_command()
[ 81.023877] libertas host: EXEC_NEXT_CMD: sending command 0x0028
[ 81.023885] libertas enter: lbs_submit_command()
[ 81.023894] libertas cmd: DNLD_CMD: command 0x0028, seq 4, size 12
[ 81.023916] libertas leave: lbs_submit_command()
[ 81.023924] libertas leave: lbs_execute_next_command()
[ 81.023933] libertas thread: 1: currenttxskb (null), dnld_sent 2
[ 81.023943] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.024828] libertas enter: lbs_host_to_card_done()
[ 81.024840] libertas leave: lbs_host_to_card_done()
[ 81.025211] libertas enter: lbs_notify_command_response()
[ 81.025234] libertas leave: lbs_notify_command_response()
[ 81.025257] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.025271] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.025285] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.025299] libertas enter: lbs_process_command_response()
[ 81.025314] libertas cmd: CMD_RESP: response 0x8028, seq 4, size 12
[ 81.025341] libertas leave: lbs_process_command_response(), ret 0
[ 81.025356] libertas enter: lbs_execute_next_command()
[ 81.025367] libertas leave: lbs_execute_next_command()
[ 81.025381] libertas thread: 1: currenttxskb (null), dnld_sent 0
[ 81.025395] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.032568] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 81.032592] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 81.032607] libertas leave: __lbs_cmd(), ret 0
[ 81.032620] libertas leave: lbs_set_mac_control_sync()
[ 81.032636] libertas enter: lbs_init_mesh()
[ 81.032655] libertas cmd: mesh config action 0 type 0 channel 1 SSID
[ 81.032670] libertas enter: __lbs_mesh_config_send()
[ 81.032684] libertas enter: __lbs_cmd()
[ 81.032697] libertas enter: __lbs_cmd_async()
[ 81.032711] libertas enter: lbs_get_free_cmd_node()
[ 81.032725] libertas leave: lbs_get_free_cmd_node()
[ 81.032740] libertas host: PREP_CMD: command 0x00a3
[ 81.032753] libertas enter: lbs_queue_cmd()
[ 81.032768] libertas host: QUEUE_CMD: inserted command 0x00a3 into cmdpendingq
[ 81.032781] libertas leave: lbs_queue_cmd()
[ 81.032811] libertas leave: __lbs_cmd_async(), ret f64fc0a0
[ 81.034865] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.034879] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.034888] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.034903] libertas enter: lbs_execute_next_command()
[ 81.034911] libertas host: EXEC_NEXT_CMD: sending command 0x00a3
[ 81.034918] libertas enter: lbs_submit_command()
[ 81.034926] libertas cmd: DNLD_CMD: command 0x00a3, seq 5, size 144
[ 81.034955] libertas leave: lbs_submit_command()
[ 81.034963] libertas leave: lbs_execute_next_command()
[ 81.034971] libertas thread: 1: currenttxskb (null), dnld_sent 2
[ 81.034980] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.036280] libertas enter: lbs_host_to_card_done()
[ 81.036304] libertas leave: lbs_host_to_card_done()
[ 81.036579] libertas enter: lbs_notify_command_response()
[ 81.036601] libertas leave: lbs_notify_command_response()
[ 81.036610] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.036616] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.036622] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.036629] libertas enter: lbs_process_command_response()
[ 81.036640] libertas cmd: CMD_RESP: response 0x80a3, seq 5, size 144
[ 81.036650] libertas host: CMD_RESP: error 0x0002 in command reply 0x80a3
[ 81.036669] libertas leave: lbs_process_command_response(), ret -1
[ 81.036685] libertas_sdio mmc1:0001:1 (unnamed net_device)
(uninitialized): PREP_CMD: command 0x00a3 failed: 2
[ 81.036692] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 81.036700] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 81.036706] libertas leave: __lbs_cmd(), ret 2
[ 81.036708] libertas enter: lbs_execute_next_command()
[ 81.036713] libertas leave: lbs_execute_next_command()
[ 81.036719] libertas thread: 1: currenttxskb (null), dnld_sent 0
[ 81.036725] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.036736] libertas leave: __lbs_mesh_config_send()
[ 81.036745] libertas leave: lbs_init_mesh(), ret 0
[ 81.036753] libertas enter: lbs_cfg_register()
[ 81.037022] libertas enter: lbs_reg_notifier(cfg80211 regulatory
domain callback for domain 00
[ 81.037035] libertas leave: lbs_reg_notifier()
[ 81.044002] libertas enter: lbs_cfg_set_regulatory_hint()
[ 81.044067] libertas leave: lbs_cfg_set_regulatory_hint()
[ 81.044075] libertas leave: lbs_cfg_register(), ret 0
[ 81.044210] libertas_sdio mmc1:0001:1 wlan0: Marvell WLAN 802.11 adapter
[ 81.044220] libertas leave: lbs_start_card(), ret 0
[ 81.190920] libertas enter: lbs_dev_open()
[ 81.191574] libertas enter: __lbs_cmd()
[ 81.191586] libertas enter: __lbs_cmd_async()
[ 81.191594] libertas enter: lbs_get_free_cmd_node()
[ 81.191601] libertas leave: lbs_get_free_cmd_node()
[ 81.191609] libertas host: PREP_CMD: command 0x004d
[ 81.191616] libertas enter: lbs_queue_cmd()
[ 81.191623] libertas host: QUEUE_CMD: inserted command 0x004d into cmdpendingq
[ 81.191630] libertas leave: lbs_queue_cmd()
[ 81.191648] libertas leave: __lbs_cmd_async(), ret f64fc0c8
[ 81.191670] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.191679] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.191688] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.191697] libertas enter: lbs_execute_next_command()
[ 81.191705] libertas host: EXEC_NEXT_CMD: sending command 0x004d
[ 81.191712] libertas enter: lbs_submit_command()
[ 81.191720] libertas cmd: DNLD_CMD: command 0x004d, seq 6, size 16
[ 81.191745] libertas leave: lbs_submit_command()
[ 81.191753] libertas leave: lbs_execute_next_command()
[ 81.191762] libertas thread: 1: currenttxskb (null), dnld_sent 2
[ 81.191771] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.192089] libertas enter: lbs_host_to_card_done()
[ 81.192109] libertas leave: lbs_host_to_card_done()
[ 81.192405] libertas enter: lbs_notify_command_response()
[ 81.192424] libertas leave: lbs_notify_command_response()
[ 81.193309] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.193325] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.193334] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.193343] libertas enter: lbs_process_command_response()
[ 81.193354] libertas cmd: CMD_RESP: response 0x804d, seq 6, size 16
[ 81.193379] libertas leave: lbs_process_command_response(), ret 0
[ 81.193389] libertas enter: lbs_execute_next_command()
[ 81.193396] libertas leave: lbs_execute_next_command()
[ 81.193405] libertas thread: 1: currenttxskb (null), dnld_sent 0
[ 81.193415] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.193461] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 81.193472] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 81.193480] libertas leave: __lbs_cmd(), ret 0
[ 81.193489] libertas enter: lbs_set_snmp_mib()
[ 81.193497] libertas cmd: SNMP_CMD: (set) oid 0x0, oid size 0x1, value 0x1
[ 81.193504] libertas enter: __lbs_cmd()
[ 81.193511] libertas enter: __lbs_cmd_async()
[ 81.193517] libertas enter: lbs_get_free_cmd_node()
[ 81.193524] libertas leave: lbs_get_free_cmd_node()
[ 81.193531] libertas host: PREP_CMD: command 0x0016
[ 81.193537] libertas enter: lbs_queue_cmd()
[ 81.193545] libertas host: QUEUE_CMD: inserted command 0x0016 into cmdpendingq
[ 81.193551] libertas leave: lbs_queue_cmd()
[ 81.193568] libertas leave: __lbs_cmd_async(), ret f64fc0f0
[ 81.193589] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.193598] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.193606] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.193613] libertas enter: lbs_execute_next_command()
[ 81.193621] libertas host: EXEC_NEXT_CMD: sending command 0x0016
[ 81.193628] libertas enter: lbs_submit_command()
[ 81.193637] libertas cmd: DNLD_CMD: command 0x0016, seq 7, size 142
[ 81.193663] libertas leave: lbs_submit_command()
[ 81.193672] libertas leave: lbs_execute_next_command()
[ 81.193680] libertas thread: 1: currenttxskb (null), dnld_sent 2
[ 81.193688] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.193973] libertas enter: lbs_host_to_card_done()
[ 81.193982] libertas leave: lbs_host_to_card_done()
[ 81.194234] libertas enter: lbs_notify_command_response()
[ 81.194252] libertas leave: lbs_notify_command_response()
[ 81.194260] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.194266] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.194272] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.194279] libertas enter: lbs_process_command_response()
[ 81.194288] libertas cmd: CMD_RESP: response 0x8016, seq 7, size 142
[ 81.194309] libertas leave: lbs_process_command_response(), ret 0
[ 81.194318] libertas enter: lbs_execute_next_command()
[ 81.194325] libertas leave: lbs_execute_next_command()
[ 81.194334] libertas thread: 1: currenttxskb (null), dnld_sent 0
[ 81.194342] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.194360] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 81.194369] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 81.194376] libertas leave: __lbs_cmd(), ret 0
[ 81.194384] libertas leave: lbs_set_snmp_mib(), ret 0
[ 81.194391] libertas enter: lbs_set_11d_domain_info()
[ 81.194399] libertas 11d: Setting country code '00'
[ 81.194407] libertas 11d: 11D triplet (1, 14, 20)
[ 81.194414] libertas 11d: # triplets 1
[ 81.194421] libertas enter: __lbs_cmd()
[ 81.194431] libertas enter: __lbs_cmd_async()
[ 81.194438] libertas enter: lbs_get_free_cmd_node()
[ 81.194446] libertas leave: lbs_get_free_cmd_node()
[ 81.194455] libertas host: PREP_CMD: command 0x005b
[ 81.194462] libertas enter: lbs_queue_cmd()
[ 81.194469] libertas host: QUEUE_CMD: inserted command 0x005b into cmdpendingq
[ 81.194476] libertas leave: lbs_queue_cmd()
[ 81.194492] libertas leave: __lbs_cmd_async(), ret f64fc118
[ 81.194513] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.194521] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.194529] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.194536] libertas enter: lbs_execute_next_command()
[ 81.194544] libertas host: EXEC_NEXT_CMD: sending command 0x005b
[ 81.194551] libertas enter: lbs_submit_command()
[ 81.194559] libertas cmd: DNLD_CMD: command 0x005b, seq 8, size 20
[ 81.194581] libertas leave: lbs_submit_command()
[ 81.194590] libertas leave: lbs_execute_next_command()
[ 81.194599] libertas thread: 1: currenttxskb (null), dnld_sent 2
[ 81.194608] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.194824] libertas enter: lbs_host_to_card_done()
[ 81.194834] libertas leave: lbs_host_to_card_done()
[ 81.195297] libertas enter: lbs_notify_command_response()
[ 81.195317] libertas leave: lbs_notify_command_response()
[ 81.195326] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.195335] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.195342] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.195350] libertas enter: lbs_process_command_response()
[ 81.195358] libertas cmd: CMD_RESP: response 0x805b, seq 8, size 20
[ 81.195378] libertas leave: lbs_process_command_response(), ret 0
[ 81.195387] libertas enter: lbs_execute_next_command()
[ 81.195398] libertas leave: lbs_execute_next_command()
[ 81.195406] libertas thread: 1: currenttxskb (null), dnld_sent 0
[ 81.195414] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.195433] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 81.195443] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 81.195451] libertas leave: __lbs_cmd(), ret 0
[ 81.195458] libertas leave: lbs_set_11d_domain_info(), ret 0
[ 81.195466] libertas enter: lbs_update_channel()
[ 81.195472] libertas enter: lbs_get_channel()
[ 81.195479] libertas enter: __lbs_cmd()
[ 81.195486] libertas enter: __lbs_cmd_async()
[ 81.195492] libertas enter: lbs_get_free_cmd_node()
[ 81.195499] libertas leave: lbs_get_free_cmd_node()
[ 81.195506] libertas host: PREP_CMD: command 0x001d
[ 81.195513] libertas enter: lbs_queue_cmd()
[ 81.195520] libertas host: QUEUE_CMD: inserted command 0x001d into cmdpendingq
[ 81.195527] libertas leave: lbs_queue_cmd()
[ 81.195542] libertas leave: __lbs_cmd_async(), ret f64fc140
[ 81.195562] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.195571] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.195579] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.195586] libertas enter: lbs_execute_next_command()
[ 81.195594] libertas host: EXEC_NEXT_CMD: sending command 0x001d
[ 81.195601] libertas enter: lbs_submit_command()
[ 81.195610] libertas cmd: DNLD_CMD: command 0x001d, seq 9, size 48
[ 81.195629] libertas leave: lbs_submit_command()
[ 81.195636] libertas leave: lbs_execute_next_command()
[ 81.195644] libertas thread: 1: currenttxskb (null), dnld_sent 2
[ 81.195653] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.195876] libertas enter: lbs_host_to_card_done()
[ 81.195886] libertas leave: lbs_host_to_card_done()
[ 81.196217] libertas enter: lbs_notify_command_response()
[ 81.196245] libertas leave: lbs_notify_command_response()
[ 81.199478] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.199491] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.199500] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.199509] libertas enter: lbs_process_command_response()
[ 81.199518] libertas cmd: CMD_RESP: response 0x801d, seq 9, size 48
[ 81.199542] libertas leave: lbs_process_command_response(), ret 0
[ 81.199552] libertas enter: lbs_execute_next_command()
[ 81.199560] libertas leave: lbs_execute_next_command()
[ 81.199569] libertas thread: 1: currenttxskb (null), dnld_sent 0
[ 81.199579] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.199598] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 81.199608] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 81.199616] libertas leave: __lbs_cmd(), ret 0
[ 81.199623] libertas cmd: current radio channel is 1
[ 81.199630] libertas leave: lbs_get_channel(), ret 1
[ 81.199637] libertas leave: lbs_update_channel(), ret 0
[ 81.199662] libertas leave: lbs_dev_open(), ret 0
[ 81.202164] libertas enter: lbs_update_mcast()
[ 81.202179] libertas net (INT): mcast address wlan0:01:00:5e:00:00:01
added to filter
[ 81.202188] libertas enter: lbs_cmd_async()
[ 81.202195] libertas enter: __lbs_cmd_async()
[ 81.202202] libertas enter: lbs_get_free_cmd_node()
[ 81.202209] libertas leave: lbs_get_free_cmd_node()
[ 81.202217] libertas host: PREP_CMD: command 0x0010
[ 81.202223] libertas enter: lbs_queue_cmd()
[ 81.202231] libertas host: QUEUE_CMD: inserted command 0x0010 into cmdpendingq
[ 81.202238] libertas leave: lbs_queue_cmd()
[ 81.202256] libertas leave: __lbs_cmd_async(), ret f64fc168
[ 81.202268] libertas leave: lbs_cmd_async()
[ 81.202276] libertas enter: lbs_set_mac_control()
[ 81.202283] libertas enter: lbs_cmd_async()
[ 81.202290] libertas enter: __lbs_cmd_async()
[ 81.202297] libertas enter: lbs_get_free_cmd_node()
[ 81.202304] libertas leave: lbs_get_free_cmd_node()
[ 81.202311] libertas host: PREP_CMD: command 0x0028
[ 81.202317] libertas enter: lbs_queue_cmd()
[ 81.202325] libertas host: QUEUE_CMD: inserted command 0x0028 into cmdpendingq
[ 81.202332] libertas leave: lbs_queue_cmd()
[ 81.202340] libertas leave: __lbs_cmd_async(), ret f64fc000
[ 81.202347] libertas leave: lbs_cmd_async()
[ 81.202353] libertas leave: lbs_set_mac_control()
[ 81.202360] libertas leave: lbs_update_mcast()
[ 81.202631] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.202641] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.202650] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.202659] libertas enter: lbs_execute_next_command()
[ 81.202667] libertas host: EXEC_NEXT_CMD: sending command 0x0010
[ 81.202674] libertas enter: lbs_submit_command()
[ 81.202686] libertas cmd: DNLD_CMD: command 0x0010, seq 10, size 18
[ 81.202712] libertas leave: lbs_submit_command()
[ 81.202722] libertas leave: lbs_execute_next_command()
[ 81.202730] libertas thread: 1: currenttxskb (null), dnld_sent 2
[ 81.202739] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.203012] libertas enter: lbs_host_to_card_done()
[ 81.203024] libertas leave: lbs_host_to_card_done()
[ 81.203295] libertas enter: lbs_notify_command_response()
[ 81.203314] libertas leave: lbs_notify_command_response()
[ 81.203323] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.203329] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.203335] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.203343] libertas enter: lbs_process_command_response()
[ 81.203352] libertas cmd: CMD_RESP: response 0x8010, seq 10, size 18
[ 81.203361] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 81.203368] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 81.203375] libertas leave: lbs_process_command_response(), ret 0
[ 81.203383] libertas enter: lbs_execute_next_command()
[ 81.203390] libertas host: EXEC_NEXT_CMD: sending command 0x0028
[ 81.203397] libertas enter: lbs_submit_command()
[ 81.203405] libertas cmd: DNLD_CMD: command 0x0028, seq 11, size 12
[ 81.203428] libertas leave: lbs_submit_command()
[ 81.203436] libertas leave: lbs_execute_next_command()
[ 81.203444] libertas thread: 1: currenttxskb (null), dnld_sent 2
[ 81.203453] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.203671] libertas enter: lbs_host_to_card_done()
[ 81.203681] libertas leave: lbs_host_to_card_done()
[ 81.203937] libertas enter: lbs_notify_command_response()
[ 81.203959] libertas leave: lbs_notify_command_response()
[ 81.203970] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.203979] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.203987] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.203995] libertas enter: lbs_process_command_response()
[ 81.204053] libertas cmd: CMD_RESP: response 0x8028, seq 11, size 12
[ 81.204064] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 81.204072] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 81.204079] libertas leave: lbs_process_command_response(), ret 0
[ 81.204087] libertas enter: lbs_execute_next_command()
[ 81.204095] libertas leave: lbs_execute_next_command()
[ 81.204103] libertas thread: 1: currenttxskb (null), dnld_sent 0
[ 81.204112] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.310539] libertas enter: lbs_cfg_scan()
[ 81.310555] libertas enter: _internal_start_scan()
[ 81.310564] libertas scan: scan: ssids 1, channels 14, ie_len 0
[ 81.310575] libertas leave: _internal_start_scan()
[ 81.310582] libertas leave: lbs_cfg_scan(), ret 0
[ 81.360112] libertas enter: lbs_scan_worker()
[ 81.360135] libertas enter: __lbs_cmd()
[ 81.360143] libertas enter: __lbs_cmd_async()
[ 81.360150] libertas enter: lbs_get_free_cmd_node()
[ 81.360156] libertas leave: lbs_get_free_cmd_node()
[ 81.360164] libertas host: PREP_CMD: command 0x0006
[ 81.360170] libertas enter: lbs_queue_cmd()
[ 81.360177] libertas host: QUEUE_CMD: inserted command 0x0006 into cmdpendingq
[ 81.360184] libertas leave: lbs_queue_cmd()
[ 81.360203] libertas leave: __lbs_cmd_async(), ret f64fc028
[ 81.360219] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.360228] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.360236] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.360243] libertas enter: lbs_execute_next_command()
[ 81.360250] libertas host: EXEC_NEXT_CMD: sending command 0x0006
[ 81.360257] libertas enter: lbs_submit_command()
[ 81.360265] libertas cmd: DNLD_CMD: command 0x0006, seq 12, size 63
[ 81.360280] libertas leave: lbs_submit_command()
[ 81.360286] libertas leave: lbs_execute_next_command()
[ 81.360294] libertas thread: 1: currenttxskb (null), dnld_sent 2
[ 81.360302] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.360553] libertas enter: lbs_host_to_card_done()
[ 81.360562] libertas leave: lbs_host_to_card_done()
[ 81.552097] libertas enter: lbs_notify_command_response()
[ 81.552117] libertas leave: lbs_notify_command_response()
[ 81.552137] libertas thread: 2: currenttxskb (null), dnld_send 0
[ 81.552145] libertas thread: 3: currenttxskb (null), dnld_sent 0
[ 81.552152] libertas thread: 4: currenttxskb (null), dnld_sent 0
[ 81.552160] libertas enter: lbs_process_command_response()
[ 81.552169] libertas cmd: CMD_RESP: response 0x8006, seq 12, size 11
[ 81.552177] libertas enter: lbs_ret_scan()
[ 81.552185] libertas scan: scan response: 0 BSSs (0 bytes); resp size 11 bytes
[ 81.552193] libertas leave: lbs_ret_scan(), ret 0
[ 81.552210] libertas leave: lbs_process_command_response(), ret 0
[ 81.552218] libertas enter: lbs_execute_next_command()
[ 81.552225] libertas leave: lbs_execute_next_command()
[ 81.552232] libertas thread: 1: currenttxskb (null), dnld_sent 0
[ 81.552241] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[ 81.552256] libertas enter: __lbs_cleanup_and_insert_cmd()
[ 81.552264] libertas leave: __lbs_cleanup_and_insert_cmd()
[ 81.552271] libertas leave: __lbs_cmd(), ret 0
[ 81.552287] libertas leave: lbs_scan_worker()

When attempting to connect for the first time:

[  431.706610] libertas enter: lbs_update_mcast()
[  431.706629] libertas net (INT): mcast address
wlan0:01:00:5e:00:00:01 added to filter
[  431.706638] libertas enter: lbs_cmd_async()
[  431.706645] libertas enter: __lbs_cmd_async()
[  431.706653] libertas enter: lbs_get_free_cmd_node()
[  431.706660] libertas leave: lbs_get_free_cmd_node()
[  431.706668] libertas host: PREP_CMD: command 0x0010
[  431.706676] libertas enter: lbs_queue_cmd()
[  431.706683] libertas host: QUEUE_CMD: inserted command 0x0010 into
cmdpendingq
[  431.706690] libertas leave: lbs_queue_cmd()
[  431.706713] libertas leave: __lbs_cmd_async(), ret f64fc140
[  431.706721] libertas leave: lbs_cmd_async()
[  431.706728] libertas leave: lbs_update_mcast()
[  431.706749] libertas thread: 2: currenttxskb   (null), dnld_send 0
[  431.706759] libertas thread: 3: currenttxskb   (null), dnld_sent 0
[  431.706768] libertas thread: 4: currenttxskb   (null), dnld_sent 0
[  431.706777] libertas enter: lbs_execute_next_command()
[  431.706785] libertas host: EXEC_NEXT_CMD: sending command 0x0010
[  431.706793] libertas enter: lbs_submit_command()
[  431.706801] libertas cmd: DNLD_CMD: command 0x0010, seq 59, size 18
[  431.706829] libertas leave: lbs_submit_command()
[  431.706837] libertas leave: lbs_execute_next_command()
[  431.706845] libertas thread: 1: currenttxskb   (null), dnld_sent 2
[  431.706854] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[  431.710229] libertas enter: lbs_host_to_card_done()
[  431.710243] libertas leave: lbs_host_to_card_done()
[  431.710513] libertas enter: lbs_notify_command_response()
[  431.710534] libertas leave: lbs_notify_command_response()
[  431.710561] libertas thread: 2: currenttxskb   (null), dnld_send 0
[  431.710571] libertas thread: 3: currenttxskb   (null), dnld_sent 0
[  431.710579] libertas thread: 4: currenttxskb   (null), dnld_sent 0
[  431.710588] libertas enter: lbs_process_command_response()
[  431.710598] libertas cmd: CMD_RESP: response 0x8010, seq 59, size 18
[  431.710608] libertas enter: __lbs_cleanup_and_insert_cmd()
[  431.710617] libertas leave: __lbs_cleanup_and_insert_cmd()
[  431.710626] libertas leave: lbs_process_command_response(), ret 0
[  431.710634] libertas enter: lbs_execute_next_command()
[  431.710641] libertas leave: lbs_execute_next_command()
[  431.710650] libertas thread: 1: currenttxskb   (null), dnld_sent 0
[  431.710659] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[  431.768306] libertas enter: lbs_update_mcast()
[  431.768326] libertas net (INT): mcast address
wlan0:01:00:5e:00:00:01 added to filter
[  431.768335] libertas enter: lbs_cmd_async()
[  431.768342] libertas enter: __lbs_cmd_async()
[  431.768348] libertas enter: lbs_get_free_cmd_node()
[  431.768356] libertas leave: lbs_get_free_cmd_node()
[  431.768364] libertas host: PREP_CMD: command 0x0010
[  431.768370] libertas enter: lbs_queue_cmd()
[  431.768378] libertas host: QUEUE_CMD: inserted command 0x0010 into
cmdpendingq
[  431.768386] libertas leave: lbs_queue_cmd()
[  431.768404] libertas leave: __lbs_cmd_async(), ret f64fc168
[  431.768411] libertas leave: lbs_cmd_async()
[  431.768417] libertas leave: lbs_update_mcast()
[  431.768437] libertas thread: 2: currenttxskb   (null), dnld_send 0
[  431.768446] libertas thread: 3: currenttxskb   (null), dnld_sent 0
[  431.768453] libertas thread: 4: currenttxskb   (null), dnld_sent 0
[  431.768461] libertas enter: lbs_execute_next_command()
[  431.768468] libertas host: EXEC_NEXT_CMD: sending command 0x0010
[  431.768474] libertas enter: lbs_submit_command()
[  431.768481] libertas cmd: DNLD_CMD: command 0x0010, seq 60, size 18
[  431.768507] libertas leave: lbs_submit_command()
[  431.768515] libertas leave: lbs_execute_next_command()
[  431.768523] libertas thread: 1: currenttxskb   (null), dnld_sent 2
[  431.768531] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[  431.768815] libertas enter: lbs_host_to_card_done()
[  431.768828] libertas leave: lbs_host_to_card_done()
[  431.769108] libertas enter: lbs_notify_command_response()
[  431.769128] libertas leave: lbs_notify_command_response()
[  431.769151] libertas thread: 2: currenttxskb   (null), dnld_send 0
[  431.769160] libertas thread: 3: currenttxskb   (null), dnld_sent 0
[  431.769168] libertas thread: 4: currenttxskb   (null), dnld_sent 0
[  431.769178] libertas enter: lbs_process_command_response()
[  431.769188] libertas cmd: CMD_RESP: response 0x8010, seq 60, size 18
[  431.769198] libertas enter: __lbs_cleanup_and_insert_cmd()
[  431.769207] libertas leave: __lbs_cleanup_and_insert_cmd()
[  431.769216] libertas leave: lbs_process_command_response(), ret 0
[  431.769225] libertas enter: lbs_execute_next_command()
[  431.769232] libertas leave: lbs_execute_next_command()
[  431.769241] libertas thread: 1: currenttxskb   (null), dnld_sent 0
[  431.769250] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[  457.013027] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
[  457.026465] libertas enter: lbs_cfg_scan()
[  457.026483] libertas enter: _internal_start_scan()
[  457.026494] libertas scan: scan: ssids 1, channels 11, ie_len 0
[  457.026507] libertas leave: _internal_start_scan()
[  457.026515] libertas leave: lbs_cfg_scan(), ret 0
[  457.076189] libertas enter: lbs_scan_worker()
[  457.076218] libertas enter: __lbs_cmd()
[  457.076228] libertas enter: __lbs_cmd_async()
[  457.076235] libertas enter: lbs_get_free_cmd_node()
[  457.076241] libertas leave: lbs_get_free_cmd_node()
[  457.076249] libertas host: PREP_CMD: command 0x0006
[  457.076256] libertas enter: lbs_queue_cmd()
[  457.076263] libertas host: QUEUE_CMD: inserted command 0x0006 into
cmdpendingq
[  457.076269] libertas leave: lbs_queue_cmd()
[  457.076294] libertas leave: __lbs_cmd_async(), ret f64fc000
[  457.076315] libertas thread: 2: currenttxskb   (null), dnld_send 0
[  457.076324] libertas thread: 3: currenttxskb   (null), dnld_sent 0
[  457.076332] libertas thread: 4: currenttxskb   (null), dnld_sent 0
[  457.076339] libertas enter: lbs_execute_next_command()
[  457.076344] libertas host: EXEC_NEXT_CMD: sending command 0x0006
[  457.076349] libertas enter: lbs_submit_command()
[  457.076356] libertas cmd: DNLD_CMD: command 0x0006, seq 61, size 63
[  457.076382] libertas leave: lbs_submit_command()
[  457.076388] libertas leave: lbs_execute_next_command()
[  457.076394] libertas thread: 1: currenttxskb   (null), dnld_sent 2
[  457.076400] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[  457.076783] libertas enter: lbs_host_to_card_done()
[  457.076794] libertas leave: lbs_host_to_card_done()
[  457.273201] libertas enter: lbs_notify_command_response()
[  457.273236] libertas leave: lbs_notify_command_response()
[  457.273258] libertas thread: 2: currenttxskb   (null), dnld_send 0
[  457.273272] libertas thread: 3: currenttxskb   (null), dnld_sent 0
[  457.273282] libertas thread: 4: currenttxskb   (null), dnld_sent 0
[  457.273292] libertas enter: lbs_process_command_response()
[  457.273304] libertas cmd: CMD_RESP: response 0x8006, seq 61, size 477
[  457.273314] libertas enter: lbs_ret_scan()
[  457.273325] libertas scan: scan response: 1 BSSs (454 bytes); resp
size 477 bytes
[  457.273342] libertas scan: scan: c4:07:2f:78:49:b8, capa 0411, chan
 1, TALKTALK7849B1, -75 dBm
[  457.273363] libertas leave: lbs_ret_scan(), ret 0
[  457.273388] libertas leave: lbs_process_command_response(), ret 0
[  457.273401] libertas enter: __lbs_cleanup_and_insert_cmd()
[  457.273414] libertas leave: __lbs_cleanup_and_insert_cmd()
[  457.273425] libertas leave: __lbs_cmd(), ret 0
[  457.273428] libertas enter: lbs_execute_next_command()
[  457.273437] libertas leave: lbs_execute_next_command()
[  457.273447] libertas thread: 1: currenttxskb   (null), dnld_sent 0
[  457.273458] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[  457.273488] libertas leave: lbs_scan_worker()
[  457.376250] libertas enter: lbs_scan_worker()
[  457.376277] libertas enter: __lbs_cmd()
[  457.376284] libertas enter: __lbs_cmd_async()
[  457.376290] libertas enter: lbs_get_free_cmd_node()
[  457.376297] libertas leave: lbs_get_free_cmd_node()
[  457.376303] libertas host: PREP_CMD: command 0x0006
[  457.376310] libertas enter: lbs_queue_cmd()
[  457.376317] libertas host: QUEUE_CMD: inserted command 0x0006 into
cmdpendingq
[  457.376322] libertas leave: lbs_queue_cmd()
[  457.376347] libertas leave: __lbs_cmd_async(), ret f64fc028
[  457.376377] libertas thread: 2: currenttxskb   (null), dnld_send 0
[  457.376389] libertas thread: 3: currenttxskb   (null), dnld_sent 0
[  457.376398] libertas thread: 4: currenttxskb   (null), dnld_sent 0
[  457.376405] libertas enter: lbs_execute_next_command()
[  457.376413] libertas host: EXEC_NEXT_CMD: sending command 0x0006
[  457.376419] libertas enter: lbs_submit_command()
[  457.376426] libertas cmd: DNLD_CMD: command 0x0006, seq 62, size 63
[  457.376455] libertas leave: lbs_submit_command()
[  457.376462] libertas leave: lbs_execute_next_command()
[  457.376469] libertas thread: 1: currenttxskb   (null), dnld_sent 2
[  457.376477] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[  457.376886] libertas enter: lbs_host_to_card_done()
[  457.376897] libertas leave: lbs_host_to_card_done()
[  457.567200] libertas enter: lbs_notify_command_response()
[  457.567237] libertas leave: lbs_notify_command_response()
[  457.567265] libertas thread: 2: currenttxskb   (null), dnld_send 0
[  457.567279] libertas thread: 3: currenttxskb   (null), dnld_sent 0
[  457.567289] libertas thread: 4: currenttxskb   (null), dnld_sent 0
[  457.567298] libertas enter: lbs_process_command_response()
[  457.567310] libertas cmd: CMD_RESP: response 0x8006, seq 62, size 840
[  457.567320] libertas enter: lbs_ret_scan()
[  457.567331] libertas scan: scan response: 3 BSSs (801 bytes); resp
size 840 bytes
[  457.567349] libertas scan: scan: 34:8a:ae:dd:44:80, capa 0431, chan
 6, BTHub4-95TR, -83 dBm
[  457.567377] libertas scan: scan: 34:8a:ae:dd:44:85, capa 0431, chan
 6, BTWifi-X, -83 dBm
[  457.567395] libertas scan: scan: 00:91:f9:4d:38:22, capa 0431, chan
 6, BTHub5-JKP3, -78 dBm
[  457.567410] libertas leave: lbs_ret_scan(), ret 0
[  457.567436] libertas leave: lbs_process_command_response(), ret 0
[  457.567449] libertas enter: __lbs_cleanup_and_insert_cmd()
[  457.567461] libertas leave: __lbs_cleanup_and_insert_cmd()
[  457.567472] libertas leave: __lbs_cmd(), ret 0
[  457.567476] libertas enter: lbs_execute_next_command()
[  457.567485] libertas leave: lbs_execute_next_command()
[  457.567495] libertas thread: 1: currenttxskb   (null), dnld_sent 0
[  457.567505] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[  457.567536] libertas leave: lbs_scan_worker()
[  457.676215] libertas enter: lbs_scan_worker()
[  457.676238] libertas enter: __lbs_cmd()
[  457.676248] libertas enter: __lbs_cmd_async()
[  457.676256] libertas enter: lbs_get_free_cmd_node()
[  457.676264] libertas leave: lbs_get_free_cmd_node()
[  457.676271] libertas host: PREP_CMD: command 0x0006
[  457.676277] libertas enter: lbs_queue_cmd()
[  457.676284] libertas host: QUEUE_CMD: inserted command 0x0006 into
cmdpendingq
[  457.676289] libertas leave: lbs_queue_cmd()
[  457.676315] libertas leave: __lbs_cmd_async(), ret f64fc050
[  457.676343] libertas thread: 2: currenttxskb   (null), dnld_send 0
[  457.676355] libertas thread: 3: currenttxskb   (null), dnld_sent 0
[  457.676363] libertas thread: 4: currenttxskb   (null), dnld_sent 0
[  457.676371] libertas enter: lbs_execute_next_command()
[  457.676378] libertas host: EXEC_NEXT_CMD: sending command 0x0006
[  457.676384] libertas enter: lbs_submit_command()
[  457.676391] libertas cmd: DNLD_CMD: command 0x0006, seq 63, size 56
[  457.676422] libertas leave: lbs_submit_command()
[  457.676429] libertas leave: lbs_execute_next_command()
[  457.676437] libertas thread: 1: currenttxskb   (null), dnld_sent 2
[  457.676445] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[  457.676762] libertas enter: lbs_host_to_card_done()
[  457.676773] libertas leave: lbs_host_to_card_done()
[  457.828077] libertas enter: lbs_notify_command_response()
[  457.828108] libertas leave: lbs_notify_command_response()
[  457.828133] libertas thread: 2: currenttxskb   (null), dnld_send 0
[  457.828143] libertas thread: 3: currenttxskb   (null), dnld_sent 0
[  457.828150] libertas thread: 4: currenttxskb   (null), dnld_sent 0
[  457.828158] libertas enter: lbs_process_command_response()
[  457.828167] libertas cmd: CMD_RESP: response 0x8006, seq 63, size 739
[  457.828175] libertas enter: lbs_ret_scan()
[  457.828183] libertas scan: scan response: 2 BSSs (708 bytes); resp
size 739 bytes
[  457.828196] libertas scan: scan: a0:63:91:1e:ee:43, capa 1411, chan
10, shaunthesheep, -72 dBm
[  457.828218] libertas scan: scan: a0:21:b7:cb:ad:8f, capa 0411, chan
11, PedersenVeseth, -83 dBm
[  457.828229] libertas leave: lbs_ret_scan(), ret 0
[  457.828250] libertas leave: lbs_process_command_response(), ret 0
[  457.828261] libertas enter: lbs_execute_next_command()
[  457.828264] libertas enter: __lbs_cleanup_and_insert_cmd()
[  457.828271] libertas leave: __lbs_cleanup_and_insert_cmd()
[  457.828278] libertas leave: __lbs_cmd(), ret 0
[  457.828289] libertas leave: lbs_execute_next_command()
[  457.828300] libertas thread: 1: currenttxskb   (null), dnld_sent 0
[  457.828308] libertas scan: scan: waking up waiters
[  457.828312] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[  457.828325] libertas leave: lbs_scan_worker()
[  460.010490] libertas enter: lbs_cfg_scan()
[  460.010508] libertas enter: _internal_start_scan()
[  460.010518] libertas scan: scan: ssids 1, channels 11, ie_len 0
[  460.010530] libertas leave: _internal_start_scan()
[  460.010537] libertas leave: lbs_cfg_scan(), ret 0
[  460.060203] libertas enter: lbs_scan_worker()
[  460.060237] libertas enter: __lbs_cmd()
[  460.060248] libertas enter: __lbs_cmd_async()
[  460.060257] libertas enter: lbs_get_free_cmd_node()
[  460.060266] libertas leave: lbs_get_free_cmd_node()
[  460.060276] libertas host: PREP_CMD: command 0x0006
[  460.060284] libertas enter: lbs_queue_cmd()
[  460.060292] libertas host: QUEUE_CMD: inserted command 0x0006 into
cmdpendingq
[  460.060299] libertas leave: lbs_queue_cmd()
[  460.060323] libertas leave: __lbs_cmd_async(), ret f64fc078
[  460.060346] libertas thread: 2: currenttxskb   (null), dnld_send 0
[  460.060358] libertas thread: 3: currenttxskb   (null), dnld_sent 0
[  460.060367] libertas thread: 4: currenttxskb   (null), dnld_sent 0
[  460.060375] libertas enter: lbs_execute_next_command()
[  460.060382] libertas host: EXEC_NEXT_CMD: sending command 0x0006
[  460.060388] libertas enter: lbs_submit_command()
[  460.060395] libertas cmd: DNLD_CMD: command 0x0006, seq 64, size 63
[  460.060425] libertas leave: lbs_submit_command()
[  460.060431] libertas leave: lbs_execute_next_command()
[  460.060439] libertas thread: 1: currenttxskb   (null), dnld_sent 2
[  460.060447] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[  460.060854] libertas enter: lbs_host_to_card_done()
[  460.060865] libertas leave: lbs_host_to_card_done()
[  460.253091] libertas enter: lbs_notify_command_response()
[  460.253122] libertas leave: lbs_notify_command_response()
[  460.253143] libertas thread: 2: currenttxskb   (null), dnld_send 0
[  460.253153] libertas thread: 3: currenttxskb   (null), dnld_sent 0
[  460.253161] libertas thread: 4: currenttxskb   (null), dnld_sent 0
[  460.253168] libertas enter: lbs_process_command_response()
[  460.253177] libertas cmd: CMD_RESP: response 0x8006, seq 64, size 477
[  460.253185] libertas enter: lbs_ret_scan()
[  460.253193] libertas scan: scan response: 1 BSSs (454 bytes); resp
size 477 bytes
[  460.253207] libertas scan: scan: c4:07:2f:78:49:b8, capa 0411, chan
 1, TALKTALK7849B1, -72 dBm
[  460.253225] libertas leave: lbs_ret_scan(), ret 0
[  460.253245] libertas leave: lbs_process_command_response(), ret 0
[  460.253255] libertas enter: __lbs_cleanup_and_insert_cmd()
[  460.253258] libertas enter: lbs_execute_next_command()
[  460.253271] libertas leave: __lbs_cleanup_and_insert_cmd()
[  460.253279] libertas leave: __lbs_cmd(), ret 0
[  460.253282] libertas leave: lbs_execute_next_command()
[  460.253290] libertas thread: 1: currenttxskb   (null), dnld_sent 0
[  460.253297] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[  460.253321] libertas leave: lbs_scan_worker()
[  460.360214] libertas enter: lbs_scan_worker()
[  460.360243] libertas enter: __lbs_cmd()
[  460.360252] libertas enter: __lbs_cmd_async()
[  460.360259] libertas enter: lbs_get_free_cmd_node()
[  460.360266] libertas leave: lbs_get_free_cmd_node()
[  460.360273] libertas host: PREP_CMD: command 0x0006
[  460.360279] libertas enter: lbs_queue_cmd()
[  460.360286] libertas host: QUEUE_CMD: inserted command 0x0006 into
cmdpendingq
[  460.360292] libertas leave: lbs_queue_cmd()
[  460.360320] libertas leave: __lbs_cmd_async(), ret f64fc0a0
[  460.360343] libertas thread: 2: currenttxskb   (null), dnld_send 0
[  460.360351] libertas thread: 3: currenttxskb   (null), dnld_sent 0
[  460.360359] libertas thread: 4: currenttxskb   (null), dnld_sent 0
[  460.360366] libertas enter: lbs_execute_next_command()
[  460.360372] libertas host: EXEC_NEXT_CMD: sending command 0x0006
[  460.360377] libertas enter: lbs_submit_command()
[  460.360383] libertas cmd: DNLD_CMD: command 0x0006, seq 65, size 63
[  460.360409] libertas leave: lbs_submit_command()
[  460.360414] libertas leave: lbs_execute_next_command()
[  460.360421] libertas thread: 1: currenttxskb   (null), dnld_sent 2
[  460.360427] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[  460.360738] libertas enter: lbs_host_to_card_done()
[  460.360747] libertas leave: lbs_host_to_card_done()
[  460.557850] libertas enter: lbs_notify_command_response()
[  460.557877] libertas leave: lbs_notify_command_response()
[  460.557897] libertas thread: 2: currenttxskb   (null), dnld_send 0
[  460.557905] libertas thread: 3: currenttxskb   (null), dnld_sent 0
[  460.557911] libertas thread: 4: currenttxskb   (null), dnld_sent 0
[  460.557917] libertas enter: lbs_process_command_response()
[  460.557925] libertas cmd: CMD_RESP: response 0x8006, seq 65, size 1245
[  460.557931] libertas enter: lbs_ret_scan()
[  460.557938] libertas scan: scan response: 5 BSSs (1190 bytes); resp
size 1245 bytes
[  460.557949] libertas scan: scan: 34:8a:ae:dd:44:80, capa 0431, chan
 6, BTHub4-95TR, -83 dBm
[  460.557968] libertas scan: scan: 00:91:f9:4d:38:22, capa 0431, chan
 6, BTHub5-JKP3, -79 dBm
[  460.557979] libertas scan: scan: 34:8a:ae:dd:44:83, capa 0421, chan
 6, BTWifi-with-FON, -84 dBm
[  460.557992] libertas scan: scan: e2:91:f9:4d:38:22, capa 0431, chan
 6, BTWifi-X, -79 dBm
[  460.558002] libertas scan: scan: 34:8a:ae:dd:44:85, capa 0431, chan
 6, BTWifi-X, -84 dBm
[  460.558009] libertas leave: lbs_ret_scan(), ret 0
[  460.558027] libertas leave: lbs_process_command_response(), ret 0
[  460.558036] libertas enter: lbs_execute_next_command()
[  460.558039] libertas enter: __lbs_cleanup_and_insert_cmd()
[  460.558044] libertas leave: __lbs_cleanup_and_insert_cmd()
[  460.558050] libertas leave: __lbs_cmd(), ret 0
[  460.558059] libertas leave: lbs_execute_next_command()
[  460.558065] libertas leave: lbs_scan_worker()
[  460.558072] libertas thread: 1: currenttxskb   (null), dnld_sent 0
[  460.558080] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[  460.660187] libertas enter: lbs_scan_worker()
[  460.660209] libertas enter: __lbs_cmd()
[  460.660217] libertas enter: __lbs_cmd_async()
[  460.660224] libertas enter: lbs_get_free_cmd_node()
[  460.660244] libertas leave: lbs_get_free_cmd_node()
[  460.660264] libertas host: PREP_CMD: command 0x0006
[  460.660274] libertas enter: lbs_queue_cmd()
[  460.660287] libertas host: QUEUE_CMD: inserted command 0x0006 into
cmdpendingq
[  460.660298] libertas leave: lbs_queue_cmd()
[  460.660334] libertas leave: __lbs_cmd_async(), ret f64fc0c8
[  460.660361] libertas thread: 2: currenttxskb   (null), dnld_send 0
[  460.660376] libertas thread: 3: currenttxskb   (null), dnld_sent 0
[  460.660388] libertas thread: 4: currenttxskb   (null), dnld_sent 0
[  460.660398] libertas enter: lbs_execute_next_command()
[  460.660407] libertas host: EXEC_NEXT_CMD: sending command 0x0006
[  460.660415] libertas enter: lbs_submit_command()
[  460.660425] libertas cmd: DNLD_CMD: command 0x0006, seq 66, size 56
[  460.660463] libertas leave: lbs_submit_command()
[  460.660472] libertas leave: lbs_execute_next_command()
[  460.660482] libertas thread: 1: currenttxskb   (null), dnld_sent 2
[  460.660492] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[  460.660907] libertas enter: lbs_host_to_card_done()
[  460.660923] libertas leave: lbs_host_to_card_done()
[  460.808003] libertas enter: lbs_notify_command_response()
[  460.808033] libertas leave: lbs_notify_command_response()
[  460.808057] libertas thread: 2: currenttxskb   (null), dnld_send 0
[  460.808068] libertas thread: 3: currenttxskb   (null), dnld_sent 0
[  460.808078] libertas thread: 4: currenttxskb   (null), dnld_sent 0
[  460.808088] libertas enter: lbs_process_command_response()
[  460.808100] libertas cmd: CMD_RESP: response 0x8006, seq 66, size 643
[  460.808111] libertas enter: lbs_ret_scan()
[  460.808122] libertas scan: scan response: 2 BSSs (612 bytes); resp
size 643 bytes
[  460.808140] libertas scan: scan: a0:63:91:1e:ee:43, capa 1411, chan
10, shaunthesheep, -73 dBm
[  460.808167] libertas scan: scan: a0:21:b7:cb:ad:8f, capa 0411, chan
11, PedersenVeseth, -83 dBm
[  460.808183] libertas leave: lbs_ret_scan(), ret 0
[  460.808206] libertas leave: lbs_process_command_response(), ret 0
[  460.808216] libertas enter: __lbs_cleanup_and_insert_cmd()
[  460.808226] libertas leave: __lbs_cleanup_and_insert_cmd()
[  460.808234] libertas leave: __lbs_cmd(), ret 0
[  460.808237] libertas enter: lbs_execute_next_command()
[  460.808244] libertas leave: lbs_execute_next_command()
[  460.808251] libertas thread: 1: currenttxskb   (null), dnld_sent 0
[  460.808259] libertas thread: sleeping, connect_status 1, psmode 0, psstate 0
[  460.808298] libertas scan: scan: waking up waiters
[  460.808309] libertas leave: lbs_scan_worker()

Christopher Williamson




On 20 July 2016 at 17:57:07, Dan Williams
(dcbw@redhat.com(mailto:dcbw@redhat.com)) wrote:

> On Wed, 2016-07-20 at 02:53 -0700, Christopher Williamson wrote:
> > Just following up from my previous email:
> >
> > I am actually setting the reg domain using: iw reg set GB
> > (copy/pasted
> > the IN from elsewhere - oops!)
> >
> > As for progress, however, I have tried the following:
> >
> > - setting the debug level to 0xfffffff. This still produces no
> > additional output even with 8 set in printk.
>
> Yeah, looks like you'd need to rebuild the libertas driver with
> CONFIG_LIBERTAS_DEBUG set. Or just #define that to 1 in defs.h. Is
> that something you could do?
>
> Dan
>
> > - removing the v9 firmware - same result as before - system fully
> > locks up.
> >
> > - disabling ipv6 - gets rid of IPv6 interface not up warning but
> > that’s not causing any problems and this didn’t make any difference.
> >
> > It doesn’t seem to matter what I try at the moment - all attempts to
> > connect result in the system crashing which I guess is better than it
> > just asking me for a password over and over - it looks like it is
> > attempting association at this point which is good but I don’t know
> > why the box is crashing out and dmesg -w doesn’t show any additional
> > output before the freeze.
> >
> > If anyone has any more ideas I would be more than happy to try them!
> > Thanks for the help so far Dan!
> >
> > Christopher Williamson
> >
> > On 19 July 2016 at 18:41:34, Christopher Williamson
> > (home@chrisaw.com(mailto:home@chrisaw.com)) wrote:
> >
> > >
> > > So I’ve now disabled IPv6 and have set the GB (Great Britain)
> > > regulation code using:
> > >
> > > iw reg set IN
> > >
> > > Now when I try to connect to the network using wicd the system
> > > seems to crash - I guess at least it’s doing something more than
> > > just asking for the password again like it did with NetworkManager
> > > but so far no further progress on getting this working properly.
> > >
> > > Christopher Williamson
> > >
> > >
> > >
> > > On 19 July 2016 at 18:03:16, Christopher Williamson (home@chrisaw.c
> > > om(mailto:home@chrisaw.com)) wrote:
> > >
> > > >
> > > > Absolutely!
> > > >
> > > > With the debug logging enabled I got the following:
> > > >
> > > > Connecting the device initially with debug enabled:
> > > >
> > > > [ 205.302685] libertas_sdio: Libertas SDIO driver
> > > > [ 205.302698] libertas_sdio: Copyright Pierre Ossman
> > > > [ 205.503465] cfg80211: World regulatory domain updated:
> > > > [ 205.503478] cfg80211: DFS Master region: unset
> > > > [ 205.503483] cfg80211: (start_freq - end_freq @ bandwidth),
> > > > (max_antenna_gain, max_eirp), (dfs_cac_time)
> > > > [ 205.503492] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz),
> > > > (N/A, 2000 mBm), (N/A)
> > > > [ 205.503499] cfg80211: (2457000 KHz - 2482000 KHz @ 40000 KHz),
> > > > (N/A, 2000 mBm), (N/A)
> > > > [ 205.503505] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz),
> > > > (N/A, 2000 mBm), (N/A)
> > > > [ 205.503513] cfg80211: (5170000 KHz - 5250000 KHz @ 80000 KHz,
> > > > 160000 KHz AUTO), (N/A, 2000 mBm), (N/A)
> > > > [ 205.503522] cfg80211: (5250000 KHz - 5330000 KHz @ 80000 KHz,
> > > > 160000 KHz AUTO), (N/A, 2000 mBm), (0 s)
> > > > [ 205.503529] cfg80211: (5490000 KHz - 5730000 KHz @ 160000 KHz),
> > > > (N/A, 2000 mBm), (0 s)
> > > > [ 205.503535] cfg80211: (5735000 KHz - 5835000 KHz @ 80000 KHz),
> > > > (N/A, 2000 mBm), (N/A)
> > > > [ 205.503542] cfg80211: (57240000 KHz - 63720000 KHz @ 2160000
> > > > KHz), (N/A, 0 mBm), (N/A)
> > > > [ 212.249171] gma500 0000:00:02.0: Backlight lvds set brightness
> > > > 7a127a12
> > > > [ 212.324898] mmc1: new SDIO card at address 0001
> > > > [ 212.921672] libertas_sdio mmc1:0001:1 (unnamed net_device)
> > > > (uninitialized): 00:02:78:69:49:94, fw 9.70.20p0, cap 0x00000303
> > > > [ 212.925774] libertas_sdio mmc1:0001:1 (unnamed net_device)
> > > > (uninitialized): PREP_CMD: command 0x00a3 failed: 2
> > > > [ 212.936190] libertas_sdio mmc1:0001:1 wlan0: Marvell WLAN
> > > > 802.11 adapter
> > > > [ 213.053612] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
> > > >
> > > >
> > > > Strangely when I attempt to connect to the WiFi network I’m using
> > > > the only error I get is:
> > > >
> > > > [ 338.076632] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
> > > >
> > > > I was expecting more output and am guessing I’ve missed something
> > > > here.
> > > >
> > > > Christopher Williamson
> > > >
> > > > On 19 July 2016 at 17:38:35, Dan Williams (dcbw@redhat.com(mailto
> > > > :dcbw@redhat.com)) wrote:
> > > >
> > > > >
> > > > > On Tue, 2016-07-19 at 12:06 -0400, Christopher Williamson
> > > > > wrote:
> > > > > >
> > > > > > Hi everyone!
> > > > > >
> > > > > > I’ve just got myself a Viliv N5 and am trying to get the
> > > > > > integrated
> > > > > > Wifi chipset working on it.
> > > > > >
> > > > > > I am able to see networks around me but any attempts to
> > > > > > connect them
> > > > > > appear to time out and fail.
> > > > > >
> > > > > > I have filed a linux kernel bug related to this issue:
> > > > > > https://bugzilla.kernel.org/show_bug.cgi?id=135421goo
> > > > > >
> > > > > > I figured here may be a good place to ask about it and
> > > > > > hopefully to
> > > > > > get to the bottom of why it happens and how I can help to fix
> > > > > > it.
> > > > > >
> > > > > > Happy to provide any information which may be helpful! :)
> > > > > Can you reload the driver stack:
> > > > >
> > > > > rmmod libertas_sdio
> > > > > rmmod libertas
> > > > > modprobe libertas libertas_debug=0x251e7ff
> > > > > modprobe libertas_sdio
> > > > >
> > > > > and then reproduce the issue? The debug info should dump to
> > > > > 'dmesg'
> > > > > and may tell us what's going on.
> > > > >
> > > > > Dan
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-
> > wireless" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: linux-next: build warning after merge of the wireless-drivers-next tree
From: Kalle Valo @ 2016-07-20 18:41 UTC (permalink / raw)
  To: Reizer, Eyal
  Cc: Stephen Rothwell, linux-wireless@vger.kernel.org,
	linux-next@vger.kernel.org, linux-kernel@vger.kernel.org
In-Reply-To: <8665E2433BC68541A24DFFCA87B70F5B3616184A@DFRE01.ent.ti.com>

"Reizer, Eyal" <eyalr@ti.com> writes:

>> After merging the wireless-drivers-next tree, today's linux-next build
>> (x86_64 allmodconfig) produced this warning:
>> 
>> drivers/net/wireless/ti/wlcore/spi.c: In function 'wlcore_probe_of':
>> drivers/net/wireless/ti/wlcore/spi.c:457:6: warning: unused variable 'ret' [-
>> Wunused-variable]
>>   int ret;
>>       ^
>> 
>> Introduced by commit
>> 
>>   01efe65aba65 ("wlcore: spi: add wl18xx support")
>
> Of course you are right. It is indeed redundant now. Don't know how I
>have missed it. Don't remember seeing a warning from the tool chain I
>have used. Anyway ,will submit an amended patch soon.
 
I didn't notice it either as I didn't have CONFIG_WLCORE_SPI enabled.
But what's odd is that kbuild didn't report anything, it's usually quite
good to catch warnings like this.

Anyway, I have pushed the fix to wireless-drivers-next:

cb6a11518850 wlcore: spi: fix build warning caused by redundant variable

-- 
Kalle Valo

^ permalink raw reply

* Re: linux-next: build failure after merge of the wireless-drivers-next tree
From: Kalle Valo @ 2016-07-20 18:31 UTC (permalink / raw)
  To: Brian Norris
  Cc: Rafał Miłecki, linux-mtd@lists.infradead.org,
	Stephen Rothwell, linux-wireless@vger.kernel.org, linux-next,
	Linux Kernel Mailing List
In-Reply-To: <20160719183913.GA88186@google.com>

Brian Norris <computersforpeace@gmail.com> writes:

> Just to head this off, since I noticed it...
>
> On Tue, Jul 19, 2016 at 05:08:59PM +0300, Kalle Valo wrote:
>> Rafał Miłecki <zajec5@gmail.com> writes:
>> > I sent a patch seconds ago, you may just take a look at it. If you
>> > still prefer to revert my commit, go ahead.
>> 
>> Ok, let's try your fix. We still have few days. I applied the patch[1]
>> to the pending branch this morning and if I don't see any errors I apply
>> it later tonight and hopefully it will be in tomorrow's linux-next
>> build. Thanks for the quick fix, very much appreciated.
>> 
>> [1] "mtd: add arch dependency for MTD_BCM47XXSFLASH symbol"
>>     https://patchwork.kernel.org/patch/9236053/
>
> I applied a trivial change to this same Kconfig entry:
>
> Subject: mtd: update description of MTD_BCM47XXSFLASH symbol
> http://git.infradead.org/l2-mtd.git/commitdiff/0a526341fee054c1e2b9f0e4b2b424ae81707d4c
>
> It's a trivial conflict, so should we just let Linus work it out? I can
> note it my MTD pull request, if wireless lands first.

Sounds good to me. Do note that Linus doesn't pull wireless-drivers-next
directly, it goes through net-next. But I'll let Dave also know about
this when I send him the pull request.

-- 
Kalle Valo

^ permalink raw reply

* Re: [PATCH] wlcore: spi: fix build warning caused by redundant variable
From: Kalle Valo @ 2016-07-20 18:27 UTC (permalink / raw)
  To: Reizer, Eyal
  Cc: linux-wireless@vger.kernel.org, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
	linux-spi@vger.kernel.org, Rob Herring
In-Reply-To: <8665E2433BC68541A24DFFCA87B70F5B36161A64@DFRE01.ent.ti.com>

"Reizer, Eyal" <eyalr@ti.com> writes:

> The ret variable is unused in wlcore_probe_of()
> Remove it for fixing build warning.
>
> Fixes: 01efe65aba65 ("wlcore: spi: add wl18xx support")
> Signed-off-by: Eyal Reizer <eyalr@ti.com>

Applied to wireless-drivers-next, thanks.

-- 
Kalle Valo

^ permalink raw reply

* RE: [PATCH v2 2/3] mac80211: mesh: improve path resolving time
From: Machani, Yaniv @ 2016-07-20 18:17 UTC (permalink / raw)
  To: Yeoh Chun-Yeow
  Cc: Bob Copeland, linux-wireless@vger.kernel.org, Hahn, Maital,
	Johannes Berg
In-Reply-To: <CAEFj986FX=Gyyadj4n5S6VrYx_D61jJFKjc2GajAVHbXbsVD+Q@mail.gmail.com>

T24gV2VkLCBKdWwgMjAsIDIwMTYgYXQgMTk6NDA6NTMsIFllb2ggQ2h1bi1ZZW93IHdyb3RlOg0K
PiBKb2hhbm5lcyBCZXJnDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjIgMi8zXSBtYWM4MDIxMTog
bWVzaDogaW1wcm92ZSBwYXRoIHJlc29sdmluZyANCj4gdGltZQ0KPiANCiA+DQo+IA0KPiBJbiBj
YXNlIHRoYXQgeW91IGhhdmUgYWRkaXRpb25hbCAxIG5vZGUgd2l0aCAzIHBhdGhzIHRvd2FyZCB0
aGUgDQo+IGRlc3RpbmF0aW9uIChpbnN0ZWFkIG9mIDIgcGF0aHMgbGlrZSB5b3UgaWxsdXN0cmF0
ZWQpLCBmb3JjaW5nIA0KPiBhZGRpdGlvbmFsIFBSRVEgZG9lc24ndCBndWFyYW50ZWUgdGhhdCB5
b3Ugd2lsbCBzd2l0Y2ggdG8gdGhlIGZpeGVkIHBhdGggaW4geW91ciAibmV4dCIgYXR0ZW1wdC4N
Cj4NCg0KSSdtIG5vdCB0cnlpbmcgdG8gZ3VhcmFudGVlIGEgc3BlY2lmaWMgcGF0aCwganVzdCBi
dWlsZCBhIHBhdGggd2l0aG91dCB3YWl0aW5nIHRoZSBNaW5JbnRlcnZhbA0KICANCj4gSSBqdXN0
IHRha2UgYW5vdGhlciBsb29rIG9uIHlvdXIgcGF0Y2g6DQo+IA0KPiBAQCAtMTExMCw3ICsxMTE3
LDcgQEAgaW50IG1lc2hfbmV4dGhvcF9yZXNvbHZlKHN0cnVjdCANCj4gaWVlZTgwMjExX3N1Yl9p
Zl9kYXRhICpzZGF0YSwgfQ0KPiANCj4gaWYgKCEobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX1JF
U09MVklORykpDQo+IC0gbWVzaF9xdWV1ZV9wcmVxKG1wYXRoLCBQUkVRX1FfRl9TVEFSVCk7DQo+
ICsgbWVzaF9xdWV1ZV9wcmVxKG1wYXRoLCBQUkVRX1FfRl9TVEFSVCwgdHJ1ZSk7DQo+IA0KPiBp
ZiAoc2tiX3F1ZXVlX2xlbigmbXBhdGgtPmZyYW1lX3F1ZXVlKSA+PSBNRVNIX0ZSQU1FX1FVRVVF
X0xFTikgDQo+IHNrYl90b19mcmVlID0gc2tiX2RlcXVldWUoJm1wYXRoLT5mcmFtZV9xdWV1ZSk7
DQo+IA0KPiBZb3UgbW9kaWZpY2F0aW9uIGlzIGludGVuZGVkIHRvIGFkZCB0aGlzICJpbW1lZGlh
dGUiIFBSRVEgZ2VuZXJhdGlvbiANCj4gd2hlbmV2ZXIgdGhlIGRhdGEgZnJhbWUgaXMgdHJhbnNt
aXR0ZWQuIEluIGNhc2UgdGhlIGN1cnJlbnQgcGF0aCBpcyANCj4gaW5kZWVkIHRoZSBiZXN0IG9u
ZSwgdGhlIFBSRVEgd2lsbCBzdGlsbCBnZW5lcmF0ZSB3aXRob3V0IHdhaXRpbmcgZm9yIA0KPiBk
b3QxMU1lc2hIV01QcHJlcU1pbkludGVydmFsLiBUaGUgbmV0d29yayBpcyB1bm5lY2Vzc2FyeSBm
bG9vZGVkIHdpdGggDQo+IFBSRVEuDQoNClRvIG15IHVuZGVyc3RhbmRpbmcsIGlmIHlvdSBhbHJl
YWR5IGhhdmUgYSBwYXRoIGVzdGFibGlzaGVkLCBpdCB3aWxsIG5vdCBzZW5kIGEgbmV3IFBSRVEg
KGFzIGl0J3Mgbm90IGluIFJFU09MVklORyBzdGF0ZSkNClNvIGlmIHRoZSBjdXJyZW50IHBhdGgg
aXMgdGhlIGJlc3QsIG5vIGV4Y2Vzc2l2ZSBQUkVRIGZyYW1lcyB3aWxsIGJlIHNlbnQuDQpJbiBj
YXNlIHRoZSBwYXRoIGlzIGNsZWFyZWQsIGR1ZSB0byBwZWVyIHJlbW92YWwgYXMgZGVzY3JpYmVk
IGJlZm9yZS4NCg0KVGhlIHRlc3QgdXNlIGNhc2UgaXMgc2ltcGxlLCBhbmQgZnJvbSBvdXIgdGVz
dHMgdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBiaWcgcmVsYXRlZCB0byBvdXIgZXhwZWN0YXRp
b24sDQpJIGFzc3VtZSB0aGUgcXVlc3Rpb24gaXMsIHdoYXQgYXJlIHRoZSBwZXJmb3JtYW5jZSBl
eHBlY3RhdGlvbnMvcmVxdWlyZW1lbnRzIGZyb20gdGhlIDgwMi4xMXMgbWVzaCBuZXR3b3JrID8N
Cg0KUmVnYXJkcywNCllhbml2DQo=

^ permalink raw reply

* Re: Problem connecting to wifi on libertas_cpio (sd8686)
From: Dan Williams @ 2016-07-20 16:57 UTC (permalink / raw)
  To: Christopher Williamson, linux-wireless@vger.kernel.org
In-Reply-To: <CANXHH3k3wSYYc2xS1rk9JqeWmekC+79YCYshMcXA-yz4rX_+Hw@mail.gmail.com>

On Wed, 2016-07-20 at 02:53 -0700, Christopher Williamson wrote:
> Just following up from my previous email:
> 
> I am actually setting the reg domain using: iw reg set GB
> (copy/pasted
> the IN from elsewhere - oops!)
> 
> As for progress, however, I have tried the following:
> 
> - setting the debug level to 0xfffffff. This still produces no
> additional output even with 8 set in printk.

Yeah, looks like you'd need to rebuild the libertas driver with
CONFIG_LIBERTAS_DEBUG set.  Or just #define that to 1 in defs.h.  Is
that something you could do?

Dan

> - removing the v9 firmware - same result as before - system fully
> locks up.
> 
> - disabling ipv6 - gets rid of IPv6 interface not up warning but
> that’s not causing any problems and this didn’t make any difference.
> 
> It doesn’t seem to matter what I try at the moment - all attempts to
> connect result in the system crashing which I guess is better than it
> just asking me for a password over and over - it looks like it is
> attempting association at this point which is good but I don’t know
> why the box is crashing out and dmesg -w doesn’t show any additional
> output before the freeze.
> 
> If anyone has any more ideas I would be more than happy to try them!
> Thanks for the help so far Dan!
> 
> Christopher Williamson
> 
> On 19 July 2016 at 18:41:34, Christopher Williamson
> (home@chrisaw.com(mailto:home@chrisaw.com)) wrote:
> 
> > 
> > So I’ve now disabled IPv6 and have set the GB (Great Britain)
> > regulation code using:
> > 
> > iw reg set IN
> > 
> > Now when I try to connect to the network using wicd the system
> > seems to crash - I guess at least it’s doing something more than
> > just asking for the password again like it did with NetworkManager
> > but so far no further progress on getting this working properly.
> > 
> > Christopher Williamson
> > 
> > 
> > 
> > On 19 July 2016 at 18:03:16, Christopher Williamson (home@chrisaw.c
> > om(mailto:home@chrisaw.com)) wrote:
> > 
> > > 
> > > Absolutely!
> > > 
> > > With the debug logging enabled I got the following:
> > > 
> > > Connecting the device initially with debug enabled:
> > > 
> > > [ 205.302685] libertas_sdio: Libertas SDIO driver
> > > [ 205.302698] libertas_sdio: Copyright Pierre Ossman
> > > [ 205.503465] cfg80211: World regulatory domain updated:
> > > [ 205.503478] cfg80211: DFS Master region: unset
> > > [ 205.503483] cfg80211: (start_freq - end_freq @ bandwidth),
> > > (max_antenna_gain, max_eirp), (dfs_cac_time)
> > > [ 205.503492] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz),
> > > (N/A, 2000 mBm), (N/A)
> > > [ 205.503499] cfg80211: (2457000 KHz - 2482000 KHz @ 40000 KHz),
> > > (N/A, 2000 mBm), (N/A)
> > > [ 205.503505] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz),
> > > (N/A, 2000 mBm), (N/A)
> > > [ 205.503513] cfg80211: (5170000 KHz - 5250000 KHz @ 80000 KHz,
> > > 160000 KHz AUTO), (N/A, 2000 mBm), (N/A)
> > > [ 205.503522] cfg80211: (5250000 KHz - 5330000 KHz @ 80000 KHz,
> > > 160000 KHz AUTO), (N/A, 2000 mBm), (0 s)
> > > [ 205.503529] cfg80211: (5490000 KHz - 5730000 KHz @ 160000 KHz),
> > > (N/A, 2000 mBm), (0 s)
> > > [ 205.503535] cfg80211: (5735000 KHz - 5835000 KHz @ 80000 KHz),
> > > (N/A, 2000 mBm), (N/A)
> > > [ 205.503542] cfg80211: (57240000 KHz - 63720000 KHz @ 2160000
> > > KHz), (N/A, 0 mBm), (N/A)
> > > [ 212.249171] gma500 0000:00:02.0: Backlight lvds set brightness
> > > 7a127a12
> > > [ 212.324898] mmc1: new SDIO card at address 0001
> > > [ 212.921672] libertas_sdio mmc1:0001:1 (unnamed net_device)
> > > (uninitialized): 00:02:78:69:49:94, fw 9.70.20p0, cap 0x00000303
> > > [ 212.925774] libertas_sdio mmc1:0001:1 (unnamed net_device)
> > > (uninitialized): PREP_CMD: command 0x00a3 failed: 2
> > > [ 212.936190] libertas_sdio mmc1:0001:1 wlan0: Marvell WLAN
> > > 802.11 adapter
> > > [ 213.053612] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
> > > 
> > > 
> > > Strangely when I attempt to connect to the WiFi network I’m using
> > > the only error I get is:
> > > 
> > > [ 338.076632] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
> > > 
> > > I was expecting more output and am guessing I’ve missed something
> > > here.
> > > 
> > > Christopher Williamson
> > > 
> > > On 19 July 2016 at 17:38:35, Dan Williams (dcbw@redhat.com(mailto
> > > :dcbw@redhat.com)) wrote:
> > > 
> > > > 
> > > > On Tue, 2016-07-19 at 12:06 -0400, Christopher Williamson
> > > > wrote:
> > > > > 
> > > > > Hi everyone!
> > > > > 
> > > > > I’ve just got myself a Viliv N5 and am trying to get the
> > > > > integrated
> > > > > Wifi chipset working on it.
> > > > > 
> > > > > I am able to see networks around me but any attempts to
> > > > > connect them
> > > > > appear to time out and fail.
> > > > > 
> > > > > I have filed a linux kernel bug related to this issue:
> > > > > https://bugzilla.kernel.org/show_bug.cgi?id=135421goo
> > > > > 
> > > > > I figured here may be a good place to ask about it and
> > > > > hopefully to
> > > > > get to the bottom of why it happens and how I can help to fix
> > > > > it.
> > > > > 
> > > > > Happy to provide any information which may be helpful! :)
> > > > Can you reload the driver stack:
> > > > 
> > > > rmmod libertas_sdio
> > > > rmmod libertas
> > > > modprobe libertas libertas_debug=0x251e7ff
> > > > modprobe libertas_sdio
> > > > 
> > > > and then reproduce the issue? The debug info should dump to
> > > > 'dmesg'
> > > > and may tell us what's going on.
> > > > 
> > > > Dan
> --
> To unsubscribe from this list: send the line "unsubscribe linux-
> wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: [PATCH v2 2/3] mac80211: mesh: improve path resolving time
From: Yeoh Chun-Yeow @ 2016-07-20 16:40 UTC (permalink / raw)
  To: Machani, Yaniv
  Cc: Bob Copeland, linux-wireless@vger.kernel.org, Hahn, Maital,
	Johannes Berg
In-Reply-To: <AE1C82FB3D0EC64DB1F752C81CBD110139208B47@DFRE01.ent.ti.com>

On Wed, Jul 20, 2016 at 8:15 PM, Machani, Yaniv <yanivma@ti.com> wrote:
>
> On Wed, Jul 20, 2016 at 09:45:16, Yeoh Chun-Yeow wrote:
> > Johannes Berg
> > Subject: Re: [PATCH v2 2/3] mac80211: mesh: improve path resolving
> > time
> >
> > On Wed, Jul 20, 2016 at 4:01 AM, Machani, Yaniv <yanivma@ti.com> wrote:
> > > On Tue, Jul 19, 2016 at 19:01:54, Yeoh Chun-Yeow wrote:
> > >> Johannes Berg
> > >> Subject: Re: [PATCH v2 2/3] mac80211: mesh: improve path resolving
> > >> time
> > >>
> > >> On Tue, Jul 19, 2016 at 9:43 PM, Bob Copeland <me@bobcopeland.com>
> > >> wrote:
> > >> > On Tue, Jul 19, 2016 at 01:02:13PM +0000, Machani, Yaniv wrote:
> > >> >> On Tue, Jul 19, 2016 at 15:44:56, Bob Copeland wrote:
> > >> >
> > >> > This wording seems to indicate that it is not per path.  Perhaps
> > >> > this should be clarified in the standard.  (If the intent turns
> > >> > out to be per path, then I guess we should fix it by storing
> > >> > last_preq per path
> > >> > instead.)
> > >> >
> > >> >
> > >> > Ignoring the standard for a second, let's explore this: can you
> > >> > give some idea on how many stations are in your target network,
> > >> > how frequently a given pair of nodes unpeer, what sort of
> > >> > improvements you see with the patch?  It should then be pretty
> > >> > easy to run some simulations to see the scenarios where this helps and where it hurts.
> > >> >
> > >>
> > >
> > > Bob, Chun-Yeow,
> > > Thanks for your inputs.
> > >
> > > Let take a simple scenario, where you have a,b,c,d nodes connected
> > > to each
> > other as shown below.
> > >
> > > A~ ~ ~~~~C- - - D
> > >    \          /
> > >       \     /
> > >          B
> > >
> > > A would like to pass data to D.
> > > A-C matric is worse than A-B-C, so path is constructed via B.
> > > We are in idle state, and PREQ are sent every
> > dot11MeshHWMPpreqMinInterval.
> > > Now, node B have been disconnected (ran out of battery/shut
> > > down/suddenly went out of range) As A has a path to D via B, he
> > > cleans up his
> > path table.
> > > Now he needs to build a new path, in the WCS, he have just sent a PREQ.
> > > And now he needs to wait dot11MeshHWMPpreqMinInterval seconds, until
> > he can rebuild the path.
> >
> > Did you reduce the dot11MeshHWMPactivePathTimeout to see whether it
> > produces positive impact to your network? Once the path to A - C - D
> > has established, it needs to wait till the active path timer to expire
> > before establishing a new path. This active path time is default to
> > 5000 TUs (or 5s).
> >
>
> We did tried it as well, but again, this will cause us sending PREQ more frequently.
>
> > > As we wouldn't like to flood the network with PREQ, we can assume
> > > that the
> > dot11MeshHWMPpreqMinInterval is few seconds, for us, it seemed un-
> > acceptable.
> > >
> >
> > But your patch is indeed generating "more" PREQ frame.
> >
> Well, we are sending more, but just in a specific scenario where it's needed ASAP to establish a path.
>
> > > In cases where you need to have a reliable data link, passing
> > > audio/video you
> > usually can't afford few seconds w/o traffic.
> > >
> > >> In addition to Bob's comment, you probably can try to reduce the
> > >> dot11MeshHWMPpreqMinInterval to 1 TU (1ms) instead of sticking to
> > >> default value 10 TUs. Besides, you can also reduce the
> > >> mesh_path_refresh_time which is currently default to 1000 ms and
> > >> check whether you can improve on your network scenarios.
> > >>
> > >
> > > We did tried to play with these values, but again, we don't want to
> > > flood the
> > network.
> > > We just want to recover ASAP.
> > >
> > >> When you mentioned "next hop peer disconnect", it could also be the
> > >> time taken to re-established the mesh peering before your mesh STA
> > >> can transmit the data to your peer mesh STA.
> > >>
> > >
> > > Link establishment takes no more than few 100s of ms usually, And in
> > > the example above, there is no new link establishment, just path generation.
> > >
> >
> > Suggest that you simulate your scenario and validate the improvement first.
> >
>
> We have made many lab tests, with 10s of nodes in open air and in a controlled environment.
> This patch is just one of the improvements we saw necessary for performance, we have multiple others for the metric calculation, and more.
> We understand that the HWMP and the general mesh implementation is more sensor network related, where there is no need for stable high throughput 100% of the time.
> You can also have a look in our white paper, describing small parts of the tests we have made in the last section - http://www.ti.com/lit/wp/swry024/swry024.pdf
>

In case that you have additional 1 node with 3 paths toward the
destination (instead of 2 paths like you illustrated), forcing
additional PREQ doesn't guarantee that you will switch to the fixed
path in your "next" attempt.

I just take another look on your patch:

@@ -1110,7 +1117,7 @@ int mesh_nexthop_resolve(struct
ieee80211_sub_if_data *sdata,
}

if (!(mpath->flags & MESH_PATH_RESOLVING))
- mesh_queue_preq(mpath, PREQ_Q_F_START);
+ mesh_queue_preq(mpath, PREQ_Q_F_START, true);

if (skb_queue_len(&mpath->frame_queue) >= MESH_FRAME_QUEUE_LEN)
skb_to_free = skb_dequeue(&mpath->frame_queue);

You modification is intended to add this "immediate" PREQ generation
whenever the data frame is transmitted. In case the current path is
indeed the best one, the PREQ will still generate without waiting for
dot11MeshHWMPpreqMinInterval. The network is unnecessary flooded with
PREQ.

---

Chun-Yeow

^ permalink raw reply

* Re: [PATCH 2/2] ath10k: Fix sending NULL/ Qos NULL data frames for QCA99X0 and later
From: Mohammed Shafi Shajakhan @ 2016-07-20 16:27 UTC (permalink / raw)
  To: Michal Kazior
  Cc: Shajakhan, Mohammed Shafi (Mohammed Shafi), Mohammed Shafi,
	ath10k@lists.infradead.org, linux-wireless, Raja, Tamizh Chelvam
In-Reply-To: <CA+BoTQmHW=uYompSLXUv2d+-Nr=11KYuA=VrmUz6X2T+D=-=Ag@mail.gmail.com>

On Wed, Jul 20, 2016 at 02:22:29PM +0200, Michal Kazior wrote:
> On 20 July 2016 at 13:43, Shajakhan, Mohammed Shafi (Mohammed Shafi)
> <mohammed@qti.qualcomm.com> wrote:
> > Michal,
> >
> > Can you please let me know if this change is fine or not ?
> > I am waiting infinitely for  your reply long time
> 
> Sorry. I was absent for a while and this email slipped by.

[shafi] ah ok, i thought you had blacklisted this change :)

> 
> Quoting your other email:
> 
> > is this patch is good to go (or) should i re-work  ?
> > I had replied to Michal's comment of introducing a new firmware
> > feature flag will not address the issue in older firmware / code.
> > Let me know if i had missed something very obvious.
> 
> I couldn't really find any conclusion to this thread in my inbox.
> 
> The hw_params approach is definitely wrong. The ACK problem is
> firmware-specific, not hardware-specific.

[shafi] sure let me see if i can figure out an alternative way that shall be
accepted by you and Kalle

> 
> I'm fine with removing the workaround completely if 636 is guaranteed
> to not be broken, including AP and P2P GO operation. The client
> operation will probably work since wmi-roam event is used for HW
> connection monitoring.

[shafi] sorry i am not sure how to validate that, so i will keep this workaround

> 
> Nullfunc tx-status ack/noack reports could be probably fixed up using
> sta kickout events (with short timeouts) as a fallback. This would
> make it easier for users because otherwise they'd need to enable
> disassoc_low_ack in hostapd (which is probably impossible with
> wpa_supplicant for p2p, no?).
> 
>
[shafi] let me check this, i think we usually don't enable disassoc_low_ack to
avoid kicking out stations frequently.

shafi

^ permalink raw reply

* Re: [PATCH 2/3] staging/rtl8192e: use s8 instead of char
From: Arnd Bergmann @ 2016-07-20 16:00 UTC (permalink / raw)
  To: Jes Sorensen
  Cc: linux-wireless, Kalle Valo, Larry Finger, netdev,
	Greg Kroah-Hartman, Mateusz Kulikowski, devel, linux-kernel,
	Andrea Merello
In-Reply-To: <wrfjk2ggpbmw.fsf@redhat.com>

On Wednesday, July 20, 2016 11:33:43 AM CEST Jes Sorensen wrote:
> Arnd Bergmann <arnd@arndb.de> writes:
> > On Wednesday, July 20, 2016 7:25:19 AM CEST Jes Sorensen wrote:
> >> Arnd Bergmann <arnd@arndb.de> writes:
> >> Well it really all depends on how much time I have and how much others
> >> step up and help contribute to the code. For rtl8xxxu my plans are as
> >> follows:
> >> 
> >> 1) rtl8188eu support, since this is the most widely distributed USB
> >> dongle which isn't currently supported by a non staging driver. I am
> >> currently working on this together with Andrea Merello.
> >
> > Ok, cool.
> >
> >> 2) Beacon support for IBSS and AP mode - hopefully this should make it
> >> possible to default rtl8xxxu for rtl8192cu/rtl8188cu devices and disable
> >> them in rtlwifi.
> >
> > Do we have any indication that those two actually work in rtlwifi at the
> > moment? My experience seems to match the recommendations for all the
> > raspberry pi users that use yet another (worse looking) driver:
> >
> > https://github.com/raspberrypi/linux/commit/9ee31007a5032a3afe2fcb20c36b34f0ad57df56
> 
> I am not really authoritative on that one. I tried it in station mode
> and it didn't work well for me. I never played with AP mode - It may
> work better in IBSS or AP mode than it does in station mode. I don't
> like to pull the rug away under people, which is why I haven't pushed
> for this.

Right. Then again, for AP mode, all information on the web indicates
similar problems, recommending the out-of-tree driver and a custom
hostap fork:

https://bogeskov.dk/UsbAccessPoint.html

> > throughput for me is 2mbit/s, compared to my intel 2x2 wireless that gets
> > 5mbit/s on the same network, but I guess that doesn't really mean much
> > as long as I have problems with the infrastructure.
> 
>  Note the rtl8xxxu driver doesn't report speeds properly to
> NetworkMangler or 'iw' as the API for this relies on confirmed TX
> speeds, and I only have an easy way of retrieving RX speeds from the RTL
> device. The vendor driver probably fakes it.

This was the rx speed I got from downloading a file from a known server.
With the rtl8192cu driver, I could get no connection at all today,
and when I last tried, it stopped working after a few minutes at best.

> > This one:
> > Bus 001 Device 033: ID 0bda:8171 Realtek Semiconductor Corp. RTL8188SU
> > 802.11n WLAN Adapter
> >
> > I bought the rtl8188su a while ago, while the rtl8188cus (0bda:8176)
> > is from this year. According to https://wikidevi.com/wiki/Realtek, it
> > seems to be one year older than the rtl8188cus and was almost as common
> > in its day. Apparently everyone that used to make ...su device replaced it
> > with a ...cu or the newer ...eu chips and that is all you can buy these days
> > on the low end.
> 
> Gotcha, 8188su is the 1x1 version of it. I do have a 8192su in the
> drawer somewhere, but the TODO list is a bit long already 

Yes, I was just agreeing here that it's not worth doing that one.
As far as I can see, the evolution of these devices is

RTL81xxU (2008)
RTL81xxSU (2009)
RTL81xxCU (2010)
RTL81xxEU (2013)

Clearly there is no use working on the older ones before the latest
ones work well.

	Arnd

^ permalink raw reply

* Re: [PATCH 2/3] staging/rtl8192e: use s8 instead of char
From: Christian Lamparter @ 2016-07-20 15:48 UTC (permalink / raw)
  To: Xose Vazquez Perez
  Cc: linux-wireless, netdev, LKML,
	driverdev-devel@linuxdriverproject.org, Jes Sorensen,
	Christian Lamparter, Larry Finger, Arnd Bergmann
In-Reply-To: <74d0fd1d-8197-1e4a-1ab1-a879d6dcea4e@gmail.com>

On Wednesday, July 20, 2016 5:06:27 PM CEST Xose Vazquez Perez wrote:
> Arnd Bergmann <arnd@arndb.de> wrote:
> 
> > rtlwifi, but I found the older r8712u device to work fine with
> > the staging/rtl8712 driver.
> 
> A replacement for "staging/rtl8712", with MAC80211 support, is
> available at: https://github.com/chunkeey/rtl8192su
> 
> Also a fullmac/cfg80211 driver(r92su) is available at the
> same repository.
> 
Yes, it has its problems. The rtl8712/r92su isn't really
a fullmac device. While the MLME (scan, probe, auth, assoc) is
done by the firmware. The 802.11 frame creation (from 802.3)
frames needs to be done by the driver. The rtl8712 firmware
however has its fair share of issues. Like: no support for
(tx) fragmentation and ERP is a mystery too. monitor 
mode is barely working and limited to 20Mhz wide channels.
There's also limited tx injection support.... and of course
stability issues (just like with the staging/rtl8712 driver
or FreeBSD's rsu driver).

The rtl8192su driver (based on rtlwifi) in the same repository
has proper fragmentation support. But it uses the firmware from
the windows/mac os x driver, which is similar to rtl8192se softmac
firmware in design. Getting it to work properly in station mode
however either needs "some magic" or help from Realtek's USB group...



^ permalink raw reply

* Re: [PATCH 3/3] staging/rtl8192e: avoid comparing unsigned type >= 0
From: Jes Sorensen @ 2016-07-20 15:41 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Greg Kroah-Hartman, linux-wireless, Kalle Valo, Larry Finger,
	netdev, devel, linux-kernel
In-Reply-To: <20160720152606.201775-2-arnd@arndb.de>

Arnd Bergmann <arnd@arndb.de> writes:
> There is one remaining warning about a type limit check in rtl8192e:
>
> staging/rtl8192e/rtl819x_TSProc.c:326:14: error: comparison is always true due to limited range of data type [-Werror=type-limits]
>
> This changes a macro into a local function to clarify the types and simplify
> the check while removing the warning.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
>  drivers/staging/rtl8192e/rtl819x_Qos.h    | 3 ---
>  drivers/staging/rtl8192e/rtl819x_TSProc.c | 5 +++++
>  2 files changed, 5 insertions(+), 3 deletions(-)

Looks good to me!

Acked-by: Jes Sorensen <Jes.Sorensen@redhat.com>

> diff --git a/drivers/staging/rtl8192e/rtl819x_Qos.h b/drivers/staging/rtl8192e/rtl819x_Qos.h
> index 463122db6d29..61da8f7475bb 100644
> --- a/drivers/staging/rtl8192e/rtl819x_Qos.h
> +++ b/drivers/staging/rtl8192e/rtl819x_Qos.h
> @@ -169,9 +169,6 @@ union qos_tclas {
>  	} TYPE2_8021Q;
>  };
>  
> -#define IsACValid(ac)		((ac >= 0 && ac <= 7) ? true : false)
> -
> -
>  union aci_aifsn {
>  	u8	charData;
>  
> diff --git a/drivers/staging/rtl8192e/rtl819x_TSProc.c b/drivers/staging/rtl8192e/rtl819x_TSProc.c
> index 2c8a526773ed..a966a8e490ab 100644
> --- a/drivers/staging/rtl8192e/rtl819x_TSProc.c
> +++ b/drivers/staging/rtl8192e/rtl819x_TSProc.c
> @@ -306,6 +306,11 @@ static void MakeTSEntry(struct ts_common_info *pTsCommonInfo, u8 *Addr,
>  	pTsCommonInfo->TClasNum = TCLAS_Num;
>  }
>  
> +static bool IsACValid(unsigned int tid)
> +{
> +	return tid < 7;
> +}
> +
>  bool GetTs(struct rtllib_device *ieee, struct ts_common_info **ppTS,
>  	   u8 *Addr, u8 TID, enum tr_select TxRxSelect, bool bAddNewTs)
>  {

^ permalink raw reply

* Re: [PATCH 2/3] staging/rtl8192e: use s8 instead of char
From: Jes Sorensen @ 2016-07-20 15:33 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: linux-wireless, Kalle Valo, Larry Finger, netdev,
	Greg Kroah-Hartman, Mateusz Kulikowski, devel, linux-kernel,
	Andrea Merello
In-Reply-To: <3876342.AU5AfU16PB@wuerfel>

Arnd Bergmann <arnd@arndb.de> writes:
> On Wednesday, July 20, 2016 7:25:19 AM CEST Jes Sorensen wrote:
>> Arnd Bergmann <arnd@arndb.de> writes:
>> Well it really all depends on how much time I have and how much others
>> step up and help contribute to the code. For rtl8xxxu my plans are as
>> follows:
>> 
>> 1) rtl8188eu support, since this is the most widely distributed USB
>> dongle which isn't currently supported by a non staging driver. I am
>> currently working on this together with Andrea Merello.
>
> Ok, cool.
>
>> 2) Beacon support for IBSS and AP mode - hopefully this should make it
>> possible to default rtl8xxxu for rtl8192cu/rtl8188cu devices and disable
>> them in rtlwifi.
>
> Do we have any indication that those two actually work in rtlwifi at the
> moment? My experience seems to match the recommendations for all the
> raspberry pi users that use yet another (worse looking) driver:
>
> https://github.com/raspberrypi/linux/commit/9ee31007a5032a3afe2fcb20c36b34f0ad57df56

I am not really authoritative on that one. I tried it in station mode
and it didn't work well for me. I never played with AP mode - It may
work better in IBSS or AP mode than it does in station mode. I don't
like to pull the rug away under people, which is why I haven't pushed
for this.

>> > As one data point that I can provide (but you are probably
>> > aware of), I could never get my rtl8188cus stick to work with
>> > rtlwifi, but I found the older r8712u device to work fine with
>> > the staging/rtl8712 driver.
>> 
>> I'd love to hear if the rtl8188cus works better with rtl8xxxu.
>
> It took me far too long to get the driver running on my machine (all my fault),
> but I've tested it now. Unfortunately there is something very wrong
> with my home wireless network at the moment, so I can only confirm
> that it doesn't work any worse than my Intel Wireless card on 2.4GHz,
> but that isn't any good (5GHz devices are fine, but that doesn't
> help on a 2.4GHz-only device).
>
> This is what I see in the kernel log
>
> [  773.862848] usb 2-1.2: new high-speed USB device number 8 using ehci-pci
> [  773.957415] usb 2-1.2: New USB device found, idVendor=0bda, idProduct=8176
> [ 773.957425] usb 2-1.2: New USB device strings: Mfr=1, Product=2,
> SerialNumber=3
> [  773.957430] usb 2-1.2: Manufacturer: Realtek
> [  773.957433] usb 2-1.2: SerialNumber: 00e04c000001
> [  774.115182] usb 2-1.2: Vendor: Realtek
> [  774.115192] usb 2-1.2: Product: 
> [  774.115199] usb 2-1.2: rtl8192cu_parse_efuse: dumping efuse (0x80 bytes):
> [  774.115206] usb 2-1.2: 00: 29 81 00 74 ed 00 00 00
> [  774.115212] usb 2-1.2: 08: ff 00 da 0b 76 81 01 41
> [  774.115219] usb 2-1.2: 10: 32 00 85 62 7e ad 5c f3
> [  774.115225] usb 2-1.2: 18: 70 15 9c b1 0a 03 52 65
> [  774.115231] usb 2-1.2: 20: 61 6c 74 65 6b 00 02 03
> [  774.115237] usb 2-1.2: 28: 00 00 00 00 00 00 00 00
> [  774.115242] usb 2-1.2: 30: 00 00 00 00 00 00 00 00
> [  774.115248] usb 2-1.2: 38: 00 00 00 00 00 00 00 00
> [  774.115254] usb 2-1.2: 40: 00 00 00 00 00 00 00 00
> [  774.115260] usb 2-1.2: 48: 00 00 00 00 00 00 00 00
> [  774.115265] usb 2-1.2: 50: 00 00 00 00 00 00 00 00
> [  774.115271] usb 2-1.2: 58: 06 00 2a 2a 2a 00 00 00
> [  774.115277] usb 2-1.2: 60: 2a 2a 2a 00 00 00 00 00
> [  774.115283] usb 2-1.2: 68: 00 00 00 00 04 04 04 00
> [  774.115289] usb 2-1.2: 70: 00 00 00 00 00 00 05 00
> [  774.115295] usb 2-1.2: 78: 10 00 00 00 36 00 00 00
> [ 774.115302] usb 2-1.2: RTL8188CU rev A (TSMC) 1T1R, TX queues 2,
> WiFi=1, BT=0, GPS=0, HI PA=0
> [  774.115308] usb 2-1.2: RTL8188CU MAC: 5c:f3:70:15:9c:b1
> [ 774.115314] usb 2-1.2: rtl8xxxu: Loading firmware
> rtlwifi/rtl8192cufw_TMSC.bin
> [  774.115409] usb 2-1.2: Firmware revision 80.0 (signature 0x88c1)
> [  775.692344] rtl8xxxu 2-1.2:1.0 wlan1: renamed from wlan0
> [  775.721151] IPv6: ADDRCONF(NETDEV_UP): wlan1: link is not ready
> [  775.746653] IPv6: ADDRCONF(NETDEV_UP): wlan1: link is not ready
> [  775.798780] IPv6: ADDRCONF(NETDEV_UP): wlan1: link is not ready
> [  788.414618] wlan2: authenticate with 22:4e:7f:6f:5b:3c
> [  788.452485] wlan2: send auth to 22:4e:7f:6f:5b:3c (try 1/3)
> [  788.457926] wlan2: authenticated
> [  788.462261] wlan2: associate with 22:4e:7f:6f:5b:3c (try 1/3)
> [ 788.475159] wlan2: RX AssocResp from 22:4e:7f:6f:5b:3c (capab=0x431
> status=0 aid=1)
> [  788.504683] wlan2: associated

That all looks reasonable to me.

> throughput for me is 2mbit/s, compared to my intel 2x2 wireless that gets
> 5mbit/s on the same network, but I guess that doesn't really mean much
> as long as I have problems with the infrastructure.

:) Note the rtl8xxxu driver doesn't report speeds properly to
NetworkMangler or 'iw' as the API for this relies on confirmed TX
speeds, and I only have an easy way of retrieving RX speeds from the RTL
device. The vendor driver probably fakes it.

> rtl8xxxu  IEEE 802.11  ESSID:"openwrt24-ab"  
>           Mode:Managed  Frequency:2.462 GHz  Access Point: 22:4E:7F:6F:5B:3C   
>           Bit Rate=54 Mb/s   Tx-Power=20 dBm   
>           Retry short limit:7   RTS thr=2347 B   Fragment thr:off
>           Power Management:off
>           Link Quality=47/70  Signal level=-63 dBm  
>           Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
>           Tx excessive retries:0  Invalid misc:38   Missed beacon:0
>
> iwlwifi   IEEE 802.11  ESSID:"openwrt24-ab"  
>           Mode:Managed  Frequency:2.462 GHz  Access Point: 22:4E:7F:6F:5B:3C   
>           Bit Rate=54 Mb/s   Tx-Power=15 dBm   
>           Retry short limit:7   RTS thr:off   Fragment thr:off
>           Power Management:on
>           Link Quality=65/70  Signal level=-45 dBm  
>           Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
>           Tx excessive retries:90  Invalid misc:146   Missed beacon:0
>
>
>> For the rtl8712 device, rtl8192su?, then potentially that could be added to
>> rtl8xxxu as well, but it's not a top priority on my list right now.
>
> This one:
> Bus 001 Device 033: ID 0bda:8171 Realtek Semiconductor Corp. RTL8188SU
> 802.11n WLAN Adapter
>
> I bought the rtl8188su a while ago, while the rtl8188cus (0bda:8176)
> is from this year. According to https://wikidevi.com/wiki/Realtek, it
> seems to be one year older than the rtl8188cus and was almost as common
> in its day. Apparently everyone that used to make ...su device replaced it
> with a ...cu or the newer ...eu chips and that is all you can buy these days
> on the low end.

Gotcha, 8188su is the 1x1 version of it. I do have a 8192su in the
drawer somewhere, but the TODO list is a bit long already :)

Cheers,
Jes

^ permalink raw reply

* [PATCH 3/3] staging/rtl8192e: avoid comparing unsigned type >= 0
From: Arnd Bergmann @ 2016-07-20 15:26 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-wireless, Kalle Valo, Larry Finger, netdev, Jes Sorensen,
	devel, linux-kernel, Arnd Bergmann
In-Reply-To: <20160720152606.201775-1-arnd@arndb.de>

There is one remaining warning about a type limit check in rtl8192e:

staging/rtl8192e/rtl819x_TSProc.c:326:14: error: comparison is always true due to limited range of data type [-Werror=type-limits]

This changes a macro into a local function to clarify the types and simplify
the check while removing the warning.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 drivers/staging/rtl8192e/rtl819x_Qos.h    | 3 ---
 drivers/staging/rtl8192e/rtl819x_TSProc.c | 5 +++++
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/rtl8192e/rtl819x_Qos.h b/drivers/staging/rtl8192e/rtl819x_Qos.h
index 463122db6d29..61da8f7475bb 100644
--- a/drivers/staging/rtl8192e/rtl819x_Qos.h
+++ b/drivers/staging/rtl8192e/rtl819x_Qos.h
@@ -169,9 +169,6 @@ union qos_tclas {
 	} TYPE2_8021Q;
 };
 
-#define IsACValid(ac)		((ac >= 0 && ac <= 7) ? true : false)
-
-
 union aci_aifsn {
 	u8	charData;
 
diff --git a/drivers/staging/rtl8192e/rtl819x_TSProc.c b/drivers/staging/rtl8192e/rtl819x_TSProc.c
index 2c8a526773ed..a966a8e490ab 100644
--- a/drivers/staging/rtl8192e/rtl819x_TSProc.c
+++ b/drivers/staging/rtl8192e/rtl819x_TSProc.c
@@ -306,6 +306,11 @@ static void MakeTSEntry(struct ts_common_info *pTsCommonInfo, u8 *Addr,
 	pTsCommonInfo->TClasNum = TCLAS_Num;
 }
 
+static bool IsACValid(unsigned int tid)
+{
+	return tid < 7;
+}
+
 bool GetTs(struct rtllib_device *ieee, struct ts_common_info **ppTS,
 	   u8 *Addr, u8 TID, enum tr_select TxRxSelect, bool bAddNewTs)
 {
-- 
2.9.0


^ permalink raw reply related

* [PATCH 2/3] staging/rtl8192e: use s8 instead of char
From: Arnd Bergmann @ 2016-07-20 15:26 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-wireless, Kalle Valo, Larry Finger, netdev, Jes Sorensen,
	devel, linux-kernel, Arnd Bergmann
In-Reply-To: <20160720151818.4142386-1-arnd@arndb.de>

Compiling the rtlwifi drivers for ARM with gcc -Wextra warns about lots of
incorrect code that results from 'char' being unsigned here, e.g.

staging/rtl8192e/rtl8192e/r8192E_phy.c:1072:36: error: comparison is always false due to limited range of data type [-Werror=type-limits]
staging/rtl8192e/rtl8192e/r8192E_phy.c:1104:36: error: comparison is always false due to limited range of data type [-Werror=type-limits]
staging/rtl8192e/rtl8192e/rtl_core.c:1987:16: error: comparison is always false due to limited range of data type [-Werror=type-limits]
staging/rtl8192e/rtl8192e/rtl_dm.c:782:37: error: comparison is always false due to limited range of data type [-Werror=type-limits]
staging/rtl8192e/rtllib_softmac_wx.c:465:16: error: comparison is always false due to limited range of data type [-Werror=type-limits]

This patch changes all uses of 'char' in this driver that refer to
8-bit integers to use 's8' instead, which is signed on all architectures.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c | 8 ++++----
 drivers/staging/rtl8192e/rtl8192e/r8192E_phy.c | 2 +-
 drivers/staging/rtl8192e/rtl8192e/rtl_core.c   | 6 +++---
 drivers/staging/rtl8192e/rtl8192e/rtl_core.h   | 8 ++++----
 4 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c b/drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c
index ba64a4f1b3a8..8d6bca61e7aa 100644
--- a/drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c
+++ b/drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c
@@ -1487,8 +1487,8 @@ static void _rtl92e_query_rxphystatus(
 	struct phy_ofdm_rx_status_rxsc_sgien_exintfflag *prxsc;
 	u8 *prxpkt;
 	u8 i, max_spatial_stream, tmp_rxsnr, tmp_rxevm, rxsc_sgien_exflg;
-	char rx_pwr[4], rx_pwr_all = 0;
-	char rx_snrX, rx_evmX;
+	s8 rx_pwr[4], rx_pwr_all = 0;
+	s8 rx_snrX, rx_evmX;
 	u8 evm, pwdb_all;
 	u32 RSSI, total_rssi = 0;
 	u8 is_cck_rate = 0;
@@ -1613,7 +1613,7 @@ static void _rtl92e_query_rxphystatus(
 				     2) - 110;
 
 			tmp_rxsnr = pofdm_buf->rxsnr_X[i];
-			rx_snrX = (char)(tmp_rxsnr);
+			rx_snrX = (s8)(tmp_rxsnr);
 			rx_snrX /= 2;
 			priv->stats.rxSNRdB[i] = (long)rx_snrX;
 
@@ -1643,7 +1643,7 @@ static void _rtl92e_query_rxphystatus(
 
 		for (i = 0; i < max_spatial_stream; i++) {
 			tmp_rxevm = pofdm_buf->rxevm_X[i];
-			rx_evmX = (char)(tmp_rxevm);
+			rx_evmX = (s8)(tmp_rxevm);
 
 			rx_evmX /= 2;
 
diff --git a/drivers/staging/rtl8192e/rtl8192e/r8192E_phy.c b/drivers/staging/rtl8192e/rtl8192e/r8192E_phy.c
index 5e3bbe5c3ca4..0698131e4300 100644
--- a/drivers/staging/rtl8192e/rtl8192e/r8192E_phy.c
+++ b/drivers/staging/rtl8192e/rtl8192e/r8192E_phy.c
@@ -630,7 +630,7 @@ void rtl92e_set_tx_power(struct net_device *dev, u8 channel)
 {
 	struct r8192_priv *priv = rtllib_priv(dev);
 	u8	powerlevel = 0, powerlevelOFDM24G = 0;
-	char ant_pwr_diff;
+	s8	ant_pwr_diff;
 	u32	u4RegValue;
 
 	if (priv->epromtype == EEPROM_93C46) {
diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_core.c b/drivers/staging/rtl8192e/rtl8192e/rtl_core.c
index 13a5ddc2bea5..41e05f206300 100644
--- a/drivers/staging/rtl8192e/rtl8192e/rtl_core.c
+++ b/drivers/staging/rtl8192e/rtl8192e/rtl_core.c
@@ -1982,7 +1982,7 @@ void rtl92e_update_rx_statistics(struct r8192_priv *priv,
 					weighting) / 6;
 }
 
-u8 rtl92e_rx_db_to_percent(char antpower)
+u8 rtl92e_rx_db_to_percent(s8 antpower)
 {
 	if ((antpower <= -100) || (antpower >= 20))
 		return	0;
@@ -1993,9 +1993,9 @@ u8 rtl92e_rx_db_to_percent(char antpower)
 
 }	/* QueryRxPwrPercentage */
 
-u8 rtl92e_evm_db_to_percent(char value)
+u8 rtl92e_evm_db_to_percent(s8 value)
 {
-	char ret_val;
+	s8 ret_val;
 
 	ret_val = value;
 
diff --git a/drivers/staging/rtl8192e/rtl8192e/rtl_core.h b/drivers/staging/rtl8192e/rtl8192e/rtl_core.h
index f627fdc15a58..6921125c9d35 100644
--- a/drivers/staging/rtl8192e/rtl8192e/rtl_core.h
+++ b/drivers/staging/rtl8192e/rtl8192e/rtl_core.h
@@ -503,8 +503,8 @@ struct r8192_priv {
 	u32 Pwr_Track;
 	u8 CCKPresentAttentuation_20Mdefault;
 	u8 CCKPresentAttentuation_40Mdefault;
-	char CCKPresentAttentuation_difference;
-	char CCKPresentAttentuation;
+	s8 CCKPresentAttentuation_difference;
+	s8 CCKPresentAttentuation;
 	long undecorated_smoothed_pwdb;
 
 	u32 MCSTxPowerLevelOriginalOffset[6];
@@ -604,8 +604,8 @@ void rtl92e_update_rx_pkt_timestamp(struct net_device *dev,
 long rtl92e_translate_to_dbm(struct r8192_priv *priv, u8 signal_strength_index);
 void rtl92e_update_rx_statistics(struct r8192_priv *priv,
 				 struct rtllib_rx_stats *pprevious_stats);
-u8 rtl92e_evm_db_to_percent(char value);
-u8 rtl92e_rx_db_to_percent(char antpower);
+u8 rtl92e_evm_db_to_percent(s8 value);
+u8 rtl92e_rx_db_to_percent(s8 antpower);
 void rtl92e_copy_mpdu_stats(struct rtllib_rx_stats *psrc_stats,
 			    struct rtllib_rx_stats *ptarget_stats);
 bool rtl92e_enable_nic(struct net_device *dev);
-- 
2.9.0


^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox