* Re: TCP data throughput for BCM43362
From: Arend van Spriel @ 2016-09-21 14:15 UTC (permalink / raw)
To: Jörg Krause, Franky Lin
Cc: Brett Rudley, brcm80211-dev-list, Hante Meuleman, Franky Lin,
linux-wireless, Arend van Spriel
In-Reply-To: <1474266984.7448.1.camel@embedded.rocks>
On 19-09-16 08:36, Jörg Krause wrote:
> Hi Arend,
>
> On Wed, 2016-09-14 at 20:13 +0200, Arend Van Spriel wrote:
>> On 14-9-2016 15:41, Jörg Krause wrote:
>>>
>>> Hi,
>>>
>>> On Mon, 2016-08-29 at 23:15 +0200, Jörg Krause wrote:
>>>>
>>>> On Mi, 2016-08-24 at 20:35 +0200, Arend Van Spriel wrote:
>>>>>
>>>>>
>>>>> On 22-8-2016 15:37, Jörg Krause wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> Hi all,
>>>>>>
>>>>>> I am back from vacation and I'd like to do more
>>>>>> investigations
>>>>>> about
>>>>>> this issue. Please see my comments below...
>>>>>>
>>>>>> On Sun, 2016-08-07 at 13:41 +0200, Arend van Spriel wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 06-08-16 16:12, Jörg Krause wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Hi all,
>>>>>>>
>>>>>>> A bit weird email format making it a bit hard to determine
>>>>>>> where
>>>>>>> your
>>>>>>> last reply starts...
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Fr, 2016-08-05 at 17:56 -0700, Franky Lin wrote:
>>>>>>>>
>>>>>>>> On Fri, Aug 5, 2016 at 2:29 PM, Jörg Krause <joerg.krause
>>>>>>>> @emb
>>>>>>>> ed
>>>>>>>> ded.
>>>>>>>> ro
>>>>>>>> cks>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Am 5. August 2016 23:01:10 MESZ, schrieb Arend Van Spriel
>>>>>>>> <
>>>>>>>> arend.vanspriel@broadcom.com>:
>>>>>>>>
>>>>>>>>
>>>>>>>> Op 5 aug. 2016 22:46 schreef "Jörg Krause"
>>>>>>>> <joerg.krause@embedded.rocks>:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I'm using a custom ARM board with an BCM43362 wifi chip
>>>>>>>> from
>>>>>>>>
>>>>>>>> Broadcom.
>>>>>>>>
>>>>>>>>
>>>>>>>> The wifi chip is attached via SDIO to the controller with
>>>>>>>> a
>>>>>>>> clock of
>>>>>>>> 48MHz. Linux kernel version is 4.7.
>>>>>>>>
>>>>>>>> When measuring the network bandwidth with iperf3 I get a
>>>>>>>> bandwith of
>>>>>>>> only around 5 Mbps. I found a similar thread at the
>>>>>>>> Broadcom
>>>>>>>>
>>>>>>>> community
>>>>>>>>
>>>>>>>>
>>>>>>>> [1] where the test was done with a M4 CPU + BCM43362 and
>>>>>>>> an
>>>>>>>> average
>>>>>>>> result of 3.3 Mbps.
>>>>>>>>
>>>>>>>> Interestingly, a BCM43362 Wi-Fi Dev Kit [2] notes a TCP
>>>>>>>> data
>>>>>>>>
>>>>>>>> throughput
>>>>>>>>
>>>>>>>>
>>>>>>>> greater than 20 Mbps.
>>>>>>>>
>>>>>>>> Why is the throughput I measured much lower? Note that I
>>>>>>>> measured
>>>>>>>> several times with almost no neighbor devices or
>>>>>>>> networks.
>>>>>>>>
>>>>>>>> This is a test sample measured with iperf3:
>>>>>>>>
>>>>>>>> $ iperf3 -c 192.168.2.1 -i 1 -t 10
>>>>>>>> Connecting to host 192.168.2.1, port 5201
>>>>>>>> [ 4] local 192.168.2.155 port 36442 connected to
>>>>>>>> 192.168.2.1
>>>>>>>>
>>>>>>>> port
>>>>>>>>
>>>>>>>>
>>>>>>>> 5201
>>>>>>>> [ ID]
>>>>>>>> Interval Transfer Bandwidth Retr Cwn
>>>>>>>> d
>>>>>>>> [ 4] 0.00-1.00 sec 615 KBytes 5.04
>>>>>>>> Mbits/sec 0 56.6
>>>>>>>> KBytes
>>>>>>>> [ 4] 1.00-2.00 sec 622 KBytes 5.10
>>>>>>>> Mbits/sec 0 84.8
>>>>>>>> KBytes
>>>>>>>> [ 4] 2.00-3.00 sec 625 KBytes 5.12
>>>>>>>> Mbits/sec 0 113
>>>>>>>> KBytes
>>>>>>>> [ 4] 3.00-4.00 sec 571 KBytes 4.68
>>>>>>>> Mbits/sec 0 140
>>>>>>>> KBytes
>>>>>>>> [ 4] 4.00-5.00 sec 594 KBytes 4.87
>>>>>>>> Mbits/sec 0 167
>>>>>>>> KBytes
>>>>>>>> [ 4] 5.00-6.00 sec 628 KBytes 5.14
>>>>>>>> Mbits/sec 0 195
>>>>>>>> KBytes
>>>>>>>> [ 4] 6.00-7.00 sec 619 KBytes 5.07
>>>>>>>> Mbits/sec 0 202
>>>>>>>> KBytes
>>>>>>>> [ 4] 7.00-8.00 sec 608 KBytes 4.98
>>>>>>>> Mbits/sec 0 202
>>>>>>>> KBytes
>>>>>>>> [ 4] 8.00-9.00 sec 602 KBytes 4.93
>>>>>>>> Mbits/sec 0 202
>>>>>>>> KBytes
>>>>>>>> [ 4] 9.00-10.00 sec 537 KBytes 4.40
>>>>>>>> Mbits/sec 0 202
>>>>>>>> KBytes
>>>>>>>> - - - - - - - - - - - - - - - - - - - - - - - - -
>>>>>>>> [ ID]
>>>>>>>> Interval Transfer Bandwidth Retr
>>>>>>>> [ 4] 0.00-10.00 sec 5.88 MBytes 4.93
>>>>>>>> Mbits/sec 0 sender
>>>>>>>> [ 4] 0.00-10.00 sec 5.68 MBytes 4.76
>>>>>>>> Mbits/sec receiver
>>>>>>>>
>>>>>>>>
>>>>>>>> Not overly familiar with iperf3. Do these lines mean you
>>>>>>>> are
>>>>>>>> doing
>>>>>>>> bidirectional test, ie. upstream and downstream at the
>>>>>>>> same
>>>>>>>> time.
>>>>>>>> Another
>>>>>>>> thing affecting tput could be power-save.
>>>>>>>>
>>>>>>>>
>>>>>>>> No, iperf3 does not support bidrectional test. Power-save
>>>>>>>> is
>>>>>>>> turned
>>>>>>>> off.
>>>>>>>>
>>>>>>>> What does iw link say?
>>>>>>>>
>>>>>>>
>>>>>>> but I guess it starts here!
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> I compared the results with a Cubietruck I have:
>>>>>>>>
>>>>>>>> # iperf3 -s
>>>>>>>> -------------------------------------------------------
>>>>>>>> ----
>>>>>>>> Server listening on 5201
>>>>>>>> -------------------------------------------------------
>>>>>>>> ----
>>>>>>>> Accepted connection from 192.168.178.46, port 42906
>>>>>>>> [ 5] local 192.168.178.38 port 5201 connected to
>>>>>>>> 192.168.178.46
>>>>>>>> port
>>>>>>>> 42908
>>>>>>>> [ ID] Interval Transfer Bandwidth
>>>>>>>> [ 5] 0.00-1.00 sec 2.29 MBytes 19.2
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 1.00-2.00 sec 2.21 MBytes 18.5
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 2.00-3.00 sec 2.17 MBytes 18.2
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 3.00-4.00 sec 2.09 MBytes 17.6
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 4.00-5.00 sec 2.20 MBytes 18.5
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 5.00-6.00 sec 2.64 MBytes 22.1
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 6.00-7.00 sec 2.67 MBytes 22.4
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 7.00-8.00 sec 2.62 MBytes 22.0
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 8.00-9.00 sec 2.35 MBytes 19.8
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 9.00-10.00 sec 2.30 MBytes 19.3
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 10.00-10.03 sec 83.4 KBytes 23.5
>>>>>>>> Mbits/sec
>>>>>>>> - - - - - - - - - - - - - - - - - - - - - - - - -
>>>>>>>> [ ID]
>>>>>>>> Interval Transfer Bandwidth Retr
>>>>>>>> [ 5] 0.00-10.03 sec 23.9 MBytes 20.0
>>>>>>>> Mbits/sec 0 sender
>>>>>>>> [ 5] 0.00-10.03 sec 23.6 MBytes 19.8
>>>>>>>> Mbits/sec receiver
>>>>>>>>
>>>>>>>> # iw dev wlan0 link
>>>>>>>> Connected to xx:xx:xx:xx:xx (on wlan0)
>>>>>>>> SSID: xxx
>>>>>>>> freq: 2437
>>>>>>>> tx bitrate: 65.0 MBit/s
>>>>>>>>
>>>>>>>> bss flags: short-preamble short-slot-time
>>>>>>>> dtim period: 1
>>>>>>>> beacon int: 100
>>>>>>>
>>>>>>> Too bad RSSI is not in the output above. That may be due to
>>>>>>> a
>>>>>>> regression
>>>>>>> in our driver which has been fixed by commit 94abd778a7bb
>>>>>>> ("brcmfmac:
>>>>>>> add fallback for devices that do not report per-chain
>>>>>>> values").
>>>>>>> However,
>>>>>>> the tx bitrate seems within the same range as the other
>>>>>>> platform.
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> The Cubietruck works also with the brcmfmac driver.
>>>>>>>>
>>>>>>>> May it depend on the NVRAM file?
>>>>>>>
>>>>>>> Not sure. Can you tell me a bit more about the custom ARM
>>>>>>> board.
>>>>>>> Does
>>>>>>> it
>>>>>>> use the same wifi module as Cubietruck, ie. the AMPAK
>>>>>>> AP6210?
>>>>>>> If
>>>>>>> you
>>>>>>> can
>>>>>>> make a wireshark sniff we can check the actual bitrate and
>>>>>>> medium
>>>>>>> density in terms of packets. Another thing to look at is
>>>>>>> the
>>>>>>> SDIO
>>>>>>> host
>>>>>>> controller. In brcmf_sdiod_sgtable_alloc() some key values
>>>>>>> are
>>>>>>> used
>>>>>>> from
>>>>>>> the host controller. It only logs the number of entries of
>>>>>>> the
>>>>>>> scatter-gather table, but could you add the other values in
>>>>>>> this
>>>>>>> function that are used to determine the number of entries.
>>>>>>
>>>>>> My board uses the BCM43362 chip solely (no Bluetooth)
>>>>>> attached to
>>>>>> the
>>>>>> SDIO interface of a NXP i.MX28 processor.
>>>>>>
>>>>>> I added some additional printk() to
>>>>>> brcmf_sdiod_sgtable_alloc().
>>>>>> These
>>>>>> are the values printed after modprobe brcmfmac:
>>>>>>
>>>>>> [ 8.926657] sg_support=1
>>>>>> [ 8.929440] max_blocks=511
>>>>>> [ 8.932213] max_request_size=261632
>>>>>> [ 8.935741] max_segment_count=52
>>>>>> [ 8.939005] max_segment_size=65280
>>>>>> [ 8.946095] nents=35
>>>>>
>>>>> Thanks. That looks good.
>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Additionally I attached a xz compresses wireshark sniff while
>>>>>> running
>>>>>> iper3 between the BCM43362 running as in AP mode with iperf3
>>>>>> as a
>>>>>> server and a PC in station mode running iperf3 as a client.
>>>>>
>>>>> Looking at the sniff it seems you captured on the ethernet
>>>>> side.
>>>>> That
>>>>> does not give me any 802.11 specific info. Can you make a
>>>>> wireless
>>>>> capture preferably without encryption.
>>>>
>>>> You,re right! Sorry for this mistake. I did a re-capture on the
>>>> wireless side now.
>>>
>>> Anything new about this? Anything I can do to help?
>>
>> I missed your previous email. Was already wondering whether to ping
>> you.
>> Digging around in my email folders I found it so will take a look at
>> it.
>
> Did you had some time to look at this?
Sorry for the delay, but I am kinda swamped. Will try spent some time on
it later this week.
Regards,
Arend
^ permalink raw reply
* Re: ath10k mesh mode issue
From: Matteo Grandi @ 2016-09-21 16:27 UTC (permalink / raw)
To: Michal Kazior; +Cc: Matteo Grandi, LinuxWireless Mailing List
In-Reply-To: <CAHdg3xa4Z0=WVMDtHv2KLtzAgB8fyiuefEodKZwUb=jjmNyppg@mail.gmail.com>
Hi Michal,
thanks for the reply:
I've already loaded the ath10k_core with the rowmode parameters, this
is the modinfo result:
root@Tam:~# modinfo ath10k_core
filename:
/lib/modules/3.14.48-g408ccb9/kernel/drivers/net/wireless/ath/ath10k/ath10k=
_core.ko
license: Dual BSD/GPL
description: Core module for QCA988X PCIe devices.
author: Qualcomm Atheros
srcversion: 407804E6D5A63597F137E9B
depends: mac80211,cfg80211,compat,ath
vermagic: 3.14.48-g408ccb9 SMP mod_unload modversions ARMv7 p2v8
parm: debug_mask:Debugging mask (uint)
parm: uart_print:Uart target debugging (bool)
parm: skip_otp:Skip otp failure for calibration in testmode (bool=
)
parm: cryptmode:Crypto mode: 0-hardware, 1-software (uint)
parm: rawmode:Use raw 802.11 frame datapath (bool)
root@Tam:~# modinfo ath10k_pci
filename:
/lib/modules/3.14.48-g408ccb9/kernel/drivers/net/wireless/ath/ath10k/ath10k=
_pci.ko
firmware: ath10k/QCA9377/hw1.0/board.bin
firmware: ath10k/QCA9377/hw1.0/firmware-5.bin
firmware: ath10k/QCA6174/hw3.0/board-2.bin
firmware: ath10k/QCA6174/hw3.0/board.bin
firmware: ath10k/QCA6174/hw3.0/firmware-5.bin
firmware: ath10k/QCA6174/hw3.0/firmware-4.bin
firmware: ath10k/QCA6174/hw2.1/board-2.bin
firmware: ath10k/QCA6174/hw2.1/board.bin
firmware: ath10k/QCA6174/hw2.1/firmware-5.bin
firmware: ath10k/QCA6174/hw2.1/firmware-4.bin
firmware: ath10k/QCA988X/hw2.0/board-2.bin
firmware: ath10k/QCA988X/hw2.0/board.bin
firmware: ath10k/QCA988X/hw2.0/firmware-5.bin
firmware: ath10k/QCA988X/hw2.0/firmware-4.bin
firmware: ath10k/QCA988X/hw2.0/firmware-3.bin
firmware: ath10k/QCA988X/hw2.0/firmware-2.bin
firmware: ath10k/QCA988X/hw2.0/firmware.bin
license: Dual BSD/GPL
description: Driver support for Atheros QCA988X PCIe devices
author: Qualcomm Atheros
version: backported from Linux (v4.4.2-0-g1cb8570) using
backports v4.4.2-1-0-gbec4037
srcversion: EBB3D4E36DE49B7EC8057D0
alias: pci:v0000168Cd00000042sv*sd*bc*sc*i*
alias: pci:v0000168Cd00000040sv*sd*bc*sc*i*
alias: pci:v0000168Cd0000003Esv*sd*bc*sc*i*
alias: pci:v0000168Cd00000041sv*sd*bc*sc*i*
alias: pci:v0000168Cd0000003Csv*sd*bc*sc*i*
depends: ath10k_core,compat
vermagic: 3.14.48-g408ccb9 SMP mod_unload modversions ARMv7 p2v8
parm: irq_mode:0: auto, 1: legacy, 2: msi (default: 0) (uint)
parm: reset_mode:0: auto, 1: warm only (default: 0) (uint)
I've loaded adding the line ath10k_core rawmode=3D1 to the file etc/modules
The problem persists... maybe it's a firmware issue or even a fault of
the wifi card?
Really many thanks
Matteo
>
> 2016-09-19 13:22 GMT+02:00 Michal Kazior <michal.kazior@tieto.com>:
>>
>> On 16 September 2016 at 12:56, Matteo Grandi <grn.matteo@gmail.com> wrot=
e:
>> > Hello all,
>> [...]
>> > [ 8.589474] ath10k_pci 0000:07:00.0: qca988x hw2.0 (0x4100016c,
>> > 0x043222ff sub 0000:0000) fw 10.2.4.70.54 fwapi 5 bdapi 1 htt-ver 2.1
>> > wmi-op 5 htt-op 2 cal otp max-sta 128 raw 0 hwcrypto 1 features
>> > no-p2p,raw-mode
>>
>> The "raw-mode" here only hints the firmware is capable of raw mode
>> operation which needs to be explicitly enabled.
>>
>>
>> > [ 8.589491] ath10k_pci 0000:07:00.0: debug 1 debugfs 1 tracing 0
>> > dfs 0 testmode 1
>> > [ 8.691670] ath: EEPROM regdomain: 0x0
>> > [ 8.691680] ath: EEPROM indicates default country code should be us=
ed
>> > [ 8.691686] ath: doing EEPROM country->regdmn map search
>> > [ 8.691695] ath: country maps to regdmn code: 0x3a
>> > [ 8.691702] ath: Country alpha2 being used: US
>> > [ 8.691706] ath: Regpair used: 0x3a
>> > [ 176.983250] ath10k_pci 0000:07:00.0: must load driver with
>> > rawmode=3D1 to add mesh interfaces
>> [...]
>> > - I've also tried to load the ath10k modules adding the parameter
>> > rowmode=3D1 but I had an error "rawmode unknown parameter"
>>
>> Only ath10k_core needs to be loaded with rawmode=3D1.
>>
>> You can check available module parameters with:
>> modinfo ath10k_core
>> modinfo ath10k_pci
>>
>>
>> Micha=C5=82
>
>
^ permalink raw reply
* Re: [PATCH 2/4] carl9170: fix debugfs crashes
From: Christian Lamparter @ 2016-09-21 16:29 UTC (permalink / raw)
To: Greg KH
Cc: Christian Lamparter, Kalle Valo, linux-kernel, linux-wireless,
b43-dev, Nicolai Stange, Ben Greear, Larry Finger
In-Reply-To: <20160921101325.GA22263@kroah.com>
On Wednesday, September 21, 2016 12:13:25 PM CEST Greg KH wrote:
> On Sat, Sep 17, 2016 at 09:43:02PM +0200, Christian Lamparter wrote:
> > Ben Greear reported:
> > > I see lots of instability as soon as I load up the carl9710 NIC.
> > > My application is going to be poking at it's debugfs files...
> > >
> > > BUG: KASAN: slab-out-of-bounds in carl9170_debugfs_read+0xd5/0x2a0
> > > [carl9170] at addr ffff8801bc1208b0
> > > Read of size 8 by task btserver/5888
> > > =======================================================================
> > > BUG kmalloc-256 (Tainted: G W ): kasan: bad access detected
> > > -----------------------------------------------------------------------
> > >
> > > INFO: Allocated in seq_open+0x50/0x100 age=2690 cpu=2 pid=772
> > >...
> >
> > This breakage was caused by the introduction of intermediate
> > fops in debugfs by commit 9fd4dcece43a
> > ("debugfs: prevent access to possibly dead file_operations at file open")
> >
> > Thankfully, the original/real fops are still available in d_fsdata.
> >
> > Reported-by: Ben Greear <greearb@candelatech.com>
> > Reviewed-by: Nicolai Stange <nicstange@gmail.com>
> > Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
> > Acked-by: Kalle Valo <kvalo@codeaurora.org>
> > Cc: stable <stable@vger.kernel.org> # 4.7+
> > ---
> > drivers/net/wireless/ath/carl9170/debug.c | 4 ++--
> > 1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/net/wireless/ath/carl9170/debug.c b/drivers/net/wireless/ath/carl9170/debug.c
> > index 01a0919..ad7ffd5 100644
> > --- a/drivers/net/wireless/ath/carl9170/debug.c
> > +++ b/drivers/net/wireless/ath/carl9170/debug.c
> > @@ -75,7 +75,7 @@ static ssize_t carl9170_debugfs_read(struct file *file, char __user *userbuf,
> >
> > if (!ar)
> > return -ENODEV;
> > - dfops = container_of(file->f_path.dentry->d_fsdata,
> > + dfops = container_of(debugfs_real_fops(file),
> > struct carl9170_debugfs_fops, fops);
> >
> > if (!dfops->read)
> > @@ -128,7 +128,7 @@ static ssize_t carl9170_debugfs_write(struct file *file,
> >
> > if (!ar)
> > return -ENODEV;
> > - dfops = container_of(file->f_path.dentry->d_fsdata,
> > + dfops = container_of(debugfs_real_fops(file),
> > struct carl9170_debugfs_fops, fops);
> > if (!dfops->write)
> > return -ENOSYS;
>
> What tree is this against? I can't apply it to 4.8-rc5, or 4.8-rc7, are
> you sure it is still needed?
---
Yes, the patch is needed. That said I screwed this patch up and as a result
it is faulty. I'll send out v2 shortly
Thanks,
Christian
^ permalink raw reply
* [PATCH v2] carl9170: fix debugfs crashes
From: Christian Lamparter @ 2016-09-21 16:49 UTC (permalink / raw)
To: gregkh, Kalle Valo
Cc: Christian Lamparter, linux-kernel, linux-wireless, Nicolai Stange,
Ben Greear
In-Reply-To: <1927662.l0xhZ6GL0u@debian64>
Ben Greear reported:
> I see lots of instability as soon as I load up the carl9710 NIC.
> My application is going to be poking at it's debugfs files...
>
> BUG: KASAN: slab-out-of-bounds in carl9170_debugfs_read+0xd5/0x2a0
> [carl9170] at addr 0xffff8801bc1208b0
> Read of size 8 by task btserver/5888
> =======================================================================
> BUG kmalloc-256 (Tainted: G W ): kasan: bad access detected
> -----------------------------------------------------------------------
>
> INFO: Allocated in seq_open+0x50/0x100 age=2690 cpu=2 pid=772
>...
This breakage was caused by the introduction of intermediate
fops in debugfs by commit 9fd4dcece43a
("debugfs: prevent access to possibly dead file_operations at file open")
Thankfully, the original/real fops are still available in d_fsdata.
Reported-by: Ben Greear <greearb@candelatech.com>
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
Cc: stable <stable@vger.kernel.org> # 4.7+
---
drivers/net/wireless/ath/carl9170/debug.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/ath/carl9170/debug.c b/drivers/net/wireless/ath/carl9170/debug.c
index 6808db4..ec3a64e 100644
--- a/drivers/net/wireless/ath/carl9170/debug.c
+++ b/drivers/net/wireless/ath/carl9170/debug.c
@@ -75,7 +75,8 @@ static ssize_t carl9170_debugfs_read(struct file *file, char __user *userbuf,
if (!ar)
return -ENODEV;
- dfops = container_of(file->f_op, struct carl9170_debugfs_fops, fops);
+ dfops = container_of(debugfs_real_fops(file),
+ struct carl9170_debugfs_fops, fops);
if (!dfops->read)
return -ENOSYS;
@@ -127,7 +128,8 @@ static ssize_t carl9170_debugfs_write(struct file *file,
if (!ar)
return -ENODEV;
- dfops = container_of(file->f_op, struct carl9170_debugfs_fops, fops);
+ dfops = container_of(debugfs_real_fops(file),
+ struct carl9170_debugfs_fops, fops);
if (!dfops->write)
return -ENOSYS;
--
2.9.3
^ permalink raw reply related
* Re: RTL8192EU on rtl8xxxu driver breaks every few minutes
From: Franc[e]sco @ 2016-09-21 17:44 UTC (permalink / raw)
Cc: linux-wireless
In-Reply-To: <wrfj4m5acouw.fsf@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 1187 bytes --]
Oops, forgot to forward the previous reply to the mailing list.
I have attached the output of iw link
the AP is an asus dsl-n55u router in 2.4 GHz mode, using WPA2-Personal
with AES encryption. It's also running a second 5GHz wireless network
which has a different SSID.
Also, this seems to be some kind of power saving kicking in, as the dongle keeps working as long as I keep doing things over ssh.
On 09/20/2016 10:12 PM, Jes Sorensen wrote:
> "Franc[e]sco" <lolisamurai@waifu.club> writes:
>> Hi, I happen to own a RTL8192EU WiFi dongle which is marked as untested
>> by the rtl8xxxu driver.
>>
>> I'm on a linux from scratch system using kernel 4.7.3 and wpa_supplicant
>> 2.5.
>>
>> The dongle appears to connect and work fine, but after around 10 minutes
>> it deauthenticates and enters and endless loop of authentication
>> timeout. This continues even if I bring the interface down and back up
>> again. The only way to restore the connection is to physically remove
>> and re-plug the usb dongle.
>>
>> I have attached a dmesg log of connecting and entering the auth loop.
> Please provide details about the AP you are trying to connect to and iw
> link output.
>
> Jes
[-- Attachment #2: rtl8192eu-iw-link.txt --]
[-- Type: text/plain, Size: 214 bytes --]
$ ./iw enx001988001e33 link
Connected to e0:3f:49:97:0c:68 (on enx001988001e33)
SSID: memes
freq: 2472
RX: 4328394 bytes (26075 packets)
TX: 380760 bytes (2785 packets)
signal: -60 dBm
tx bitrate: 1.0 MBit/s
^ permalink raw reply
* Re: Problem with 40Mhz on 2.5GHz with Intel 8260
From: Volker Mische @ 2016-09-21 20:19 UTC (permalink / raw)
To: Emmanuel Grumbach; +Cc: linux-wireless
In-Reply-To: <CANUX_P1p=8Zxq+GZd8p5NjAaEY7G7p8kdxacr7orpfE8hKKWig@mail.gmail.com>
Hi,
On 09/21/2016 09:20 AM, Emmanuel Grumbach wrote:
>>> can you try to unplug the power cord? I had reports that said that
>>> this can help. Again, just a debug step to give us a hint of what you
>>> can be experiencing.
>>
>> Unplug without any module parameters or combined with the
>> cfg80211_disable_40mhz_24ghz or power_scheme one?
>
> Nope - default configuration.
the issue also happens when the power cord is unplugged.
>>> Besides this, we need to go for firmware debugging. But as I said,
>>> don't expect this to be fast and easy. Please open a bug in
>>> bugzilla.kernel.org. CC linuxwifi@intel.com and we will guide you
>>> there on how to provide the information we need.
I've filled bug 172431
[1]: https://bugzilla.kernel.org/show_bug.cgi?id=172431
Cheers,
Volker
^ permalink raw reply
* Re: pull-request: wireless-drivers 2016-09-20
From: David Miller @ 2016-09-22 1:45 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless, netdev, linux-kernel
In-Reply-To: <87vaxq3m9t.fsf@kamboji.qca.qualcomm.com>
From: Kalle Valo <kvalo@codeaurora.org>
Date: Tue, 20 Sep 2016 13:20:46 +0300
> last pull request for 4.8, unless something really drastic comes up. And
> a small one even, just a small fix to iwlwifi to avoid a firmware crash.
>
> Please let me know if there are any problems.
Pulled, thanks.
^ permalink raw reply
* Re: ath9k_htc kernel driver regression affecting throughput
From: bruce m beach @ 2016-09-22 3:34 UTC (permalink / raw)
To: Oleksij Rempel; +Cc: linux-wireless
In-Reply-To: <96b0636d-1171-5830-6481-edb991ca8e1a@rempel-privat.de>
> We recently updated FW to GCC 6.2 which can detect more problems. So it
> will be probably interesting for you to pick this patch out.
Yes I saw the message by Adrian Chadd and tried tried to git clone the link
he gave but that clearly wasn't what was to be done. Is there a patch that I
need to apply to the firmware? I do have a local copy.
On 9/20/16, Oleksij Rempel <linux@rempel-privat.de> wrote:
> Am 21.09.2016 um 05:43 schrieb bruce m beach:
>> Oleksij
>>
>> I looked at
>> https://unix.stackexchange.com/questions/122050/
>> send-traffic-to-self-over-physical-network-on-ubuntu
>>
>> It appearred to too complicated but
>>
>> https://unix.stackexchange.com/questions/122050/
>> send-traffic-to-self-over-physical-network-on-ubuntu
>> with:
>> # Create a network namespace and move one of interfaces into it:
>> ip netns add test2
>> ip link set wlan0 netns test2
>> # Start a shell in the new namespace:
>> ip netns exec test2 bash
>> # Then proceed as if you had two machines. When finished exit the
>> shell and
>> # delete the namespace:
>> ip netns del test2
>> Certainly looks interesting but after I got a
>> RTNETLINK answers: Invalid argument
>> I lost interest. My heart isn't in it. I'm still working on the firmware.
>> I
>> have started a new tree (tree #3) that consists of a userland firmware
>> uploader
>> and until recently the following firmware:
>>
>> app_start( void ) {}
>>
>> i.e a lable that the code jumps to and nothing else. At this point I have
>> added VendorCommand(), and a debugger via ep0. ( ep0 is a good choice
>> since it is available a boot, no matter what) and over the next few
>> months I am going to move ->all<- the rom code into ram starting with
>> the USB subsystem.
>>
>> Bruce
>>
>
>
> Wow, this sounds interesting :)
> We recently updated FW to GCC 6.2 which can detect more problems. So it
> will be probably interesting for you to pick this patch out.
>
> --
> Regards,
> Oleksij
>
>
^ permalink raw reply
* Re: ath9k_htc kernel driver regression affecting throughput
From: Ben Greear @ 2016-09-22 4:18 UTC (permalink / raw)
To: bruce m beach, Oleksij Rempel; +Cc: linux-wireless
In-Reply-To: <CAArymCnJZgUbgCiLqA6-94RAtXYkYeeS9uF71MX9+ou-AbYszg@mail.gmail.com>
On 09/21/2016 08:34 PM, bruce m beach wrote:
>>> i.e a lable that the code jumps to and nothing else. At this point I have
>>> added VendorCommand(), and a debugger via ep0. ( ep0 is a good choice
>>> since it is available a boot, no matter what) and over the next few
>>> months I am going to move ->all<- the rom code into ram starting with
>>> the USB subsystem.
Have you investigated whether you have enough RAM to do this?
I haven't looked at ath9k_htc, but in general, that type of architecture
is tight on RAM in my experience.
Thanks,
Ben
--
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc http://www.candelatech.com
^ permalink raw reply
* Re: ath9k_htc kernel driver regression affecting throughput
From: bruce m beach @ 2016-09-22 4:53 UTC (permalink / raw)
To: Ben Greear; +Cc: Oleksij Rempel, linux-wireless
In-Reply-To: <57E35BA9.7050207@candelatech.com>
memory will be very tight. There is 160k or known ram and bits and pieces
elsewhere. The rom is 24k (maximum). I currently am not to worried about
it. (although I am watching it)
bruce
On 9/21/16, Ben Greear <greearb@candelatech.com> wrote:
>
>
> On 09/21/2016 08:34 PM, bruce m beach wrote:
>
>>>> i.e a lable that the code jumps to and nothing else. At this point I
>>>> have
>>>> added VendorCommand(), and a debugger via ep0. ( ep0 is a good choice
>>>> since it is available a boot, no matter what) and over the next few
>>>> months I am going to move ->all<- the rom code into ram starting with
>>>> the USB subsystem.
>
> Have you investigated whether you have enough RAM to do this?
>
> I haven't looked at ath9k_htc, but in general, that type of architecture
> is tight on RAM in my experience.
>
> Thanks,
> Ben
>
> --
> Ben Greear <greearb@candelatech.com>
> Candela Technologies Inc http://www.candelatech.com
>
^ permalink raw reply
* Re: Problem with 40Mhz on 2.5GHz with Intel 8260
From: Emmanuel Grumbach @ 2016-09-22 5:32 UTC (permalink / raw)
To: Volker Mische; +Cc: linux-wireless
In-Reply-To: <968d1def-738f-36da-83bd-b10cc98c8093@gmail.com>
On Wed, Sep 21, 2016 at 11:19 PM, Volker Mische <volker.mische@gmail.com> wrote:
> Hi,
>
> On 09/21/2016 09:20 AM, Emmanuel Grumbach wrote:
>>>> can you try to unplug the power cord? I had reports that said that
>>>> this can help. Again, just a debug step to give us a hint of what you
>>>> can be experiencing.
>>>
>>> Unplug without any module parameters or combined with the
>>> cfg80211_disable_40mhz_24ghz or power_scheme one?
>>
>> Nope - default configuration.
>
> the issue also happens when the power cord is unplugged.
Ok - thanks for trying.
>
>>>> Besides this, we need to go for firmware debugging. But as I said,
>>>> don't expect this to be fast and easy. Please open a bug in
>>>> bugzilla.kernel.org. CC linuxwifi@intel.com and we will guide you
>>>> there on how to provide the information we need.
>
> I've filled bug 172431
>
> [1]: https://bugzilla.kernel.org/show_bug.cgi?id=172431
Saw that. Thanks.
>
> Cheers,
> Volker
^ permalink raw reply
* Re: TCP data throughput for BCM43362
From: Arend Van Spriel @ 2016-09-22 8:09 UTC (permalink / raw)
To: Jörg Krause, Franky Lin
Cc: Brett Rudley, brcm80211-dev-list, Hante Meuleman, Franky Lin,
linux-wireless, Arend van Spriel
In-Reply-To: <1474266984.7448.1.camel@embedded.rocks>
On 19-9-2016 8:36, Jörg Krause wrote:
> Hi Arend,
>
> On Wed, 2016-09-14 at 20:13 +0200, Arend Van Spriel wrote:
>> On 14-9-2016 15:41, Jörg Krause wrote:
>>>
>>> Hi,
>>>
>>> On Mon, 2016-08-29 at 23:15 +0200, Jörg Krause wrote:
>>>>
>>>> On Mi, 2016-08-24 at 20:35 +0200, Arend Van Spriel wrote:
>>>>>
>>>>>
>>>>> On 22-8-2016 15:37, Jörg Krause wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> Hi all,
>>>>>>
>>>>>> I am back from vacation and I'd like to do more
>>>>>> investigations
>>>>>> about
>>>>>> this issue. Please see my comments below...
>>>>>>
>>>>>> On Sun, 2016-08-07 at 13:41 +0200, Arend van Spriel wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 06-08-16 16:12, Jörg Krause wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Hi all,
>>>>>>>
>>>>>>> A bit weird email format making it a bit hard to determine
>>>>>>> where
>>>>>>> your
>>>>>>> last reply starts...
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Fr, 2016-08-05 at 17:56 -0700, Franky Lin wrote:
>>>>>>>>
>>>>>>>> On Fri, Aug 5, 2016 at 2:29 PM, Jörg Krause <joerg.krause
>>>>>>>> @emb
>>>>>>>> ed
>>>>>>>> ded.
>>>>>>>> ro
>>>>>>>> cks>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Am 5. August 2016 23:01:10 MESZ, schrieb Arend Van Spriel
>>>>>>>> <
>>>>>>>> arend.vanspriel@broadcom.com>:
>>>>>>>>
>>>>>>>>
>>>>>>>> Op 5 aug. 2016 22:46 schreef "Jörg Krause"
>>>>>>>> <joerg.krause@embedded.rocks>:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I'm using a custom ARM board with an BCM43362 wifi chip
>>>>>>>> from
>>>>>>>>
>>>>>>>> Broadcom.
>>>>>>>>
>>>>>>>>
>>>>>>>> The wifi chip is attached via SDIO to the controller with
>>>>>>>> a
>>>>>>>> clock of
>>>>>>>> 48MHz. Linux kernel version is 4.7.
>>>>>>>>
>>>>>>>> When measuring the network bandwidth with iperf3 I get a
>>>>>>>> bandwith of
>>>>>>>> only around 5 Mbps. I found a similar thread at the
>>>>>>>> Broadcom
>>>>>>>>
>>>>>>>> community
>>>>>>>>
>>>>>>>>
>>>>>>>> [1] where the test was done with a M4 CPU + BCM43362 and
>>>>>>>> an
>>>>>>>> average
>>>>>>>> result of 3.3 Mbps.
>>>>>>>>
>>>>>>>> Interestingly, a BCM43362 Wi-Fi Dev Kit [2] notes a TCP
>>>>>>>> data
>>>>>>>>
>>>>>>>> throughput
>>>>>>>>
>>>>>>>>
>>>>>>>> greater than 20 Mbps.
>>>>>>>>
>>>>>>>> Why is the throughput I measured much lower? Note that I
>>>>>>>> measured
>>>>>>>> several times with almost no neighbor devices or
>>>>>>>> networks.
>>>>>>>>
>>>>>>>> This is a test sample measured with iperf3:
>>>>>>>>
>>>>>>>> $ iperf3 -c 192.168.2.1 -i 1 -t 10
>>>>>>>> Connecting to host 192.168.2.1, port 5201
>>>>>>>> [ 4] local 192.168.2.155 port 36442 connected to
>>>>>>>> 192.168.2.1
>>>>>>>>
>>>>>>>> port
>>>>>>>>
>>>>>>>>
>>>>>>>> 5201
>>>>>>>> [ ID]
>>>>>>>> Interval Transfer Bandwidth Retr Cwn
>>>>>>>> d
>>>>>>>> [ 4] 0.00-1.00 sec 615 KBytes 5.04
>>>>>>>> Mbits/sec 0 56.6
>>>>>>>> KBytes
>>>>>>>> [ 4] 1.00-2.00 sec 622 KBytes 5.10
>>>>>>>> Mbits/sec 0 84.8
>>>>>>>> KBytes
>>>>>>>> [ 4] 2.00-3.00 sec 625 KBytes 5.12
>>>>>>>> Mbits/sec 0 113
>>>>>>>> KBytes
>>>>>>>> [ 4] 3.00-4.00 sec 571 KBytes 4.68
>>>>>>>> Mbits/sec 0 140
>>>>>>>> KBytes
>>>>>>>> [ 4] 4.00-5.00 sec 594 KBytes 4.87
>>>>>>>> Mbits/sec 0 167
>>>>>>>> KBytes
>>>>>>>> [ 4] 5.00-6.00 sec 628 KBytes 5.14
>>>>>>>> Mbits/sec 0 195
>>>>>>>> KBytes
>>>>>>>> [ 4] 6.00-7.00 sec 619 KBytes 5.07
>>>>>>>> Mbits/sec 0 202
>>>>>>>> KBytes
>>>>>>>> [ 4] 7.00-8.00 sec 608 KBytes 4.98
>>>>>>>> Mbits/sec 0 202
>>>>>>>> KBytes
>>>>>>>> [ 4] 8.00-9.00 sec 602 KBytes 4.93
>>>>>>>> Mbits/sec 0 202
>>>>>>>> KBytes
>>>>>>>> [ 4] 9.00-10.00 sec 537 KBytes 4.40
>>>>>>>> Mbits/sec 0 202
>>>>>>>> KBytes
>>>>>>>> - - - - - - - - - - - - - - - - - - - - - - - - -
>>>>>>>> [ ID]
>>>>>>>> Interval Transfer Bandwidth Retr
>>>>>>>> [ 4] 0.00-10.00 sec 5.88 MBytes 4.93
>>>>>>>> Mbits/sec 0 sender
>>>>>>>> [ 4] 0.00-10.00 sec 5.68 MBytes 4.76
>>>>>>>> Mbits/sec receiver
>>>>>>>>
>>>>>>>>
>>>>>>>> Not overly familiar with iperf3. Do these lines mean you
>>>>>>>> are
>>>>>>>> doing
>>>>>>>> bidirectional test, ie. upstream and downstream at the
>>>>>>>> same
>>>>>>>> time.
>>>>>>>> Another
>>>>>>>> thing affecting tput could be power-save.
>>>>>>>>
>>>>>>>>
>>>>>>>> No, iperf3 does not support bidrectional test. Power-save
>>>>>>>> is
>>>>>>>> turned
>>>>>>>> off.
>>>>>>>>
>>>>>>>> What does iw link say?
>>>>>>>>
>>>>>>>
>>>>>>> but I guess it starts here!
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> I compared the results with a Cubietruck I have:
>>>>>>>>
>>>>>>>> # iperf3 -s
>>>>>>>> -------------------------------------------------------
>>>>>>>> ----
>>>>>>>> Server listening on 5201
>>>>>>>> -------------------------------------------------------
>>>>>>>> ----
>>>>>>>> Accepted connection from 192.168.178.46, port 42906
>>>>>>>> [ 5] local 192.168.178.38 port 5201 connected to
>>>>>>>> 192.168.178.46
>>>>>>>> port
>>>>>>>> 42908
>>>>>>>> [ ID] Interval Transfer Bandwidth
>>>>>>>> [ 5] 0.00-1.00 sec 2.29 MBytes 19.2
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 1.00-2.00 sec 2.21 MBytes 18.5
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 2.00-3.00 sec 2.17 MBytes 18.2
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 3.00-4.00 sec 2.09 MBytes 17.6
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 4.00-5.00 sec 2.20 MBytes 18.5
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 5.00-6.00 sec 2.64 MBytes 22.1
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 6.00-7.00 sec 2.67 MBytes 22.4
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 7.00-8.00 sec 2.62 MBytes 22.0
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 8.00-9.00 sec 2.35 MBytes 19.8
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 9.00-10.00 sec 2.30 MBytes 19.3
>>>>>>>> Mbits/sec
>>>>>>>> [ 5] 10.00-10.03 sec 83.4 KBytes 23.5
>>>>>>>> Mbits/sec
>>>>>>>> - - - - - - - - - - - - - - - - - - - - - - - - -
>>>>>>>> [ ID]
>>>>>>>> Interval Transfer Bandwidth Retr
>>>>>>>> [ 5] 0.00-10.03 sec 23.9 MBytes 20.0
>>>>>>>> Mbits/sec 0 sender
>>>>>>>> [ 5] 0.00-10.03 sec 23.6 MBytes 19.8
>>>>>>>> Mbits/sec receiver
>>>>>>>>
>>>>>>>> # iw dev wlan0 link
>>>>>>>> Connected to xx:xx:xx:xx:xx (on wlan0)
>>>>>>>> SSID: xxx
>>>>>>>> freq: 2437
>>>>>>>> tx bitrate: 65.0 MBit/s
>>>>>>>>
>>>>>>>> bss flags: short-preamble short-slot-time
>>>>>>>> dtim period: 1
>>>>>>>> beacon int: 100
>>>>>>>
>>>>>>> Too bad RSSI is not in the output above. That may be due to
>>>>>>> a
>>>>>>> regression
>>>>>>> in our driver which has been fixed by commit 94abd778a7bb
>>>>>>> ("brcmfmac:
>>>>>>> add fallback for devices that do not report per-chain
>>>>>>> values").
>>>>>>> However,
>>>>>>> the tx bitrate seems within the same range as the other
>>>>>>> platform.
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> The Cubietruck works also with the brcmfmac driver.
>>>>>>>>
>>>>>>>> May it depend on the NVRAM file?
>>>>>>>
>>>>>>> Not sure. Can you tell me a bit more about the custom ARM
>>>>>>> board.
>>>>>>> Does
>>>>>>> it
>>>>>>> use the same wifi module as Cubietruck, ie. the AMPAK
>>>>>>> AP6210?
>>>>>>> If
>>>>>>> you
>>>>>>> can
>>>>>>> make a wireshark sniff we can check the actual bitrate and
>>>>>>> medium
>>>>>>> density in terms of packets. Another thing to look at is
>>>>>>> the
>>>>>>> SDIO
>>>>>>> host
>>>>>>> controller. In brcmf_sdiod_sgtable_alloc() some key values
>>>>>>> are
>>>>>>> used
>>>>>>> from
>>>>>>> the host controller. It only logs the number of entries of
>>>>>>> the
>>>>>>> scatter-gather table, but could you add the other values in
>>>>>>> this
>>>>>>> function that are used to determine the number of entries.
>>>>>>
>>>>>> My board uses the BCM43362 chip solely (no Bluetooth)
>>>>>> attached to
>>>>>> the
>>>>>> SDIO interface of a NXP i.MX28 processor.
>>>>>>
>>>>>> I added some additional printk() to
>>>>>> brcmf_sdiod_sgtable_alloc().
>>>>>> These
>>>>>> are the values printed after modprobe brcmfmac:
>>>>>>
>>>>>> [ 8.926657] sg_support=1
>>>>>> [ 8.929440] max_blocks=511
>>>>>> [ 8.932213] max_request_size=261632
>>>>>> [ 8.935741] max_segment_count=52
>>>>>> [ 8.939005] max_segment_size=65280
>>>>>> [ 8.946095] nents=35
>>>>>
>>>>> Thanks. That looks good.
>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Additionally I attached a xz compresses wireshark sniff while
>>>>>> running
>>>>>> iper3 between the BCM43362 running as in AP mode with iperf3
>>>>>> as a
>>>>>> server and a PC in station mode running iperf3 as a client.
>>>>>
>>>>> Looking at the sniff it seems you captured on the ethernet
>>>>> side.
>>>>> That
>>>>> does not give me any 802.11 specific info. Can you make a
>>>>> wireless
>>>>> capture preferably without encryption.
>>>>
>>>> You,re right! Sorry for this mistake. I did a re-capture on the
>>>> wireless side now.
>>>
>>> Anything new about this? Anything I can do to help?
>>
>> I missed your previous email. Was already wondering whether to ping
>> you.
>> Digging around in my email folders I found it so will take a look at
>> it.
>
> Did you had some time to look at this?
Ehm. I still only see TCP stuff. To capture 802.11 management frames you
need preferably a dedicated device using monitor mode [1].
Regards,
Arend
[1]
https://wireless.wiki.kernel.org/en/users/documentation/modes#monitor_mode
^ permalink raw reply
* rtl8192ce:rtl92ce_get_hw_reg():<0-0> switch case not processed
From: Jean Delvare @ 2016-09-22 9:51 UTC (permalink / raw)
To: Larry Finger, Chaoming Li; +Cc: linux-wireless
Hello,
I bought an Asus PCE-N10 PCIe Wi-Fi N card to install in my wife's
computer. This morning it stopped working suddenly. Investigating the
kernel logs, the following error message caught my eye:
rtl8192ce:rtl92ce_get_hw_reg():<0-0> switch case not processed
It was printed twice, 3.5 hours apart, the second time at the moment
the network stopped working. I guess this is not supposed to happen.
What additional information can I provide to help you debug the issue?
That's the device:
03:00.0 Network controller [0280]: Realtek Semiconductor Co., Ltd. RTL8188CE 802.11b/g/n WiFi Adapter [10ec:8176] (rev 01)
Subsystem: ASUSTeK Computer Inc. Device [1043:84b5]
Flags: bus master, fast devsel, latency 0, IRQ 17
I/O ports at e800 [size=256]
Memory at febfc000 (64-bit, non-prefetchable) [size=16K]
Capabilities: <access denied>
Kernel driver in use: rtl8192ce
Kernel modules: rtl8192ce
Kernel version is 4.5.4-1-default x86_64 (openSUSE Tumbleweed.)
Reloading the rtl8192ce module and restarting the network service got
everything back up.
Thanks,
--
Jean Delvare
SUSE L3 Support
^ permalink raw reply
* Re: brcmf_txfinalize misses 802.1x packet leading to infinite WARNINGs
From: Rafał Miłecki @ 2016-09-22 11:59 UTC (permalink / raw)
To: Hante Meuleman, Arend van Spriel, brcm80211-dev-list
Cc: linux-wireless, Rafał Miłecki
In-Reply-To: <20160920111604.32716-1-zajec5@gmail.com>
And again...
I decided to focus on brcmf_flowring_delete a bit more.
As I can see flowrings are created and removed from time to time, in most cases
they are empty when being deleted. When they are not, things go wrong. In below
log you can see brcmfmac removing flowring that got 8 skb packets.
First some summary, of what was already partially noticed in previous e-mail:
1) brcmf_flowring_delete calls brcmu_pkt_buf_free_skb directly bypassing
brcmf_txfinalize. It means tracing 802.1x packets and counting TX errors is
broken.
2) After freeing skb (as the result of brcmf_flowring_delete) there will still
an IRQ, MSGBUF_TYPE_TX_STATUS and call to the brcmf_txfinalize. That's
definitely unexpected as brcmf_txfinalize will be operating on skb that was
already freed.
Now, there is something new that looks even worse. Sometimes brcmf_txfinalize
may be called multiple times for the same skb! Take a close look at my log.
It was called twice for skb c64a5a80. Twice for c64a5480. Twice for c64a5f00.
Then Linux/device rebooted itself due to amount of console messages.
[ 242.242012] brcmfmac: [brcmf_msgbuf_process_flow_ring_delete_response -> __brcmf_msgbuf_remove_flowring] flowid:36
[ 242.252440] brcmfmac: [__brcmf_msgbuf_remove_flowring -> __brcmf_flowring_delete] flowid:36 ring:c667fd40
[ 242.262043] brcmfmac: [__brcmf_flowring_delete -> __brcmu_pkt_buf_free_skb] [ifp: (null)] Freeing skb:c64a5780 skb->dev:c647a000 skb->dev->name:wlan1-1
[ 242.275733] brcmfmac: [__brcmf_flowring_delete -> __brcmu_pkt_buf_free_skb] [ifp: (null)] Freeing skb:c64a5540 skb->dev:c647a000 skb->dev->name:wlan1-1
[ 242.289420] brcmfmac: [__brcmf_flowring_delete -> __brcmu_pkt_buf_free_skb] [ifp: (null)] Freeing skb:c64a5180 skb->dev:c647a000 skb->dev->name:wlan1-1
[ 242.303112] brcmfmac: [__brcmf_flowring_delete -> __brcmu_pkt_buf_free_skb] [ifp: (null)] Freeing skb:c64a5f00 skb->dev:c647a000 skb->dev->name:wlan1-1
[ 242.316802] brcmfmac: [__brcmf_flowring_delete -> __brcmu_pkt_buf_free_skb] [ifp: (null)] Freeing skb:c64a50c0 skb->dev:c647a000 skb->dev->name:wlan1-1
[ 242.330488] brcmfmac: [__brcmf_flowring_delete -> __brcmu_pkt_buf_free_skb] [ifp: (null)] Freeing skb:c64a5480 skb->dev:c647a000 skb->dev->name:wlan1-1
[ 242.344177] brcmfmac: [__brcmf_flowring_delete -> __brcmu_pkt_buf_free_skb] [ifp: (null)] Freeing skb:c64a5a80 skb->dev:c647a000 skb->dev->name:wlan1-1
[ 242.357867] brcmfmac: [__brcmf_flowring_delete -> __brcmu_pkt_buf_free_skb] [ifp: (null)] Freeing skb:c64a5900 skb->dev:c647a000 skb->dev->name:wlan1-1
[ 242.371548] brcmfmac: [__brcmf_msgbuf_remove_flowring -> __brcmf_flowring_delete] count:8
[ 242.379758] brcmfmac: [brcmf_msgbuf_process_flow_ring_delete_response -> __brcmf_msgbuf_remove_flowring] flowid:37
[ 242.390159] brcmfmac: [__brcmf_msgbuf_remove_flowring -> __brcmf_flowring_delete] flowid:37 ring:c667fc80
[ 242.399752] brcmfmac: [__brcmf_msgbuf_remove_flowring -> __brcmf_flowring_delete] count:0
[ 242.433468] brcmfmac: [brcmf_msgbuf_flowring_create -> __brcmf_flowring_create] da:78:d6:f0:9b:ba:bc prio:0 ifidx:1
[ 242.443974] brcmfmac: [brcmf_msgbuf_flowring_create -> __brcmf_flowring_create] flowid:36
[ 242.452580] brcmfmac: [brcmf_msgbuf_process_flow_ring_create_response] flowid:36 status:0x0000
[ 242.765056] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c647a480] ***BUG*** skb:c64a5900 skb->dev:c647a000 skb->dev->name:wlan1-1
[ 242.778479] ------------[ cut here ]------------
[ 242.783133] WARNING: CPU: 1 PID: 616 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 242.798724] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 242.871057] CPU: 1 PID: 616 Comm: irq/33-brcmf_pc Not tainted 4.4.21 #0
[ 242.877686] Hardware name: BCM5301X
[ 242.881176] Backtrace:
[ 242.883651] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 242.891230] r7:00000046 r6:bf1d1146 r5:60000093 r4:00000000
[ 242.896946] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 242.904186] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 242.912293] r5:00000009 r4:00000000
[ 242.915891] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 242.924696] r8:a0000013 r7:c647a5d0 r6:bf1c9f2d r5:c647a480 r4:c64a5900
[ 242.931468] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 242.941680] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 242.952914] r8:c04903c8 r7:c647a5d0 r6:c64a5900 r5:c648ca00 r4:c647a480
[ 242.959687] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (brcmf_msgbuf_txdata+0x53c/0x6e8 [brcmfmac])
[ 242.970488] r10:c64a5900 r9:cacd1000 r8:cacd1000 r7:c7395600 r6:0000001e r5:00000000
[ 242.978373] r4:c72bb840
[ 242.980934] [<bf1c3390>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf1c3964>] (brcmf_proto_msgbuf_rx_trigger+0x3c/0xd0 [brcmfmac])
[ 242.992517] r10:00000000 r9:c0493882 r8:c6965064 r7:c0057d98 r6:c7a0c300 r5:00010000
[ 243.000403] r4:c72bb840
[ 243.002963] [<bf1c3928>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf1c8004>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac])
[ 243.014895] r7:c0057d98 r6:c7a0c300 r5:00010000 r4:c68ea800
[ 243.020608] [<bf1c7e40>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057dbc>] (irq_thread_fn+0x24/0x3c)
[ 243.030023] r9:c0493882 r8:c6965064 r7:c0057d98 r6:c7a0c300 r5:c6965040 r4:c6965040
[ 243.037826] [<c0057d98>] (irq_thread_fn) from [<c00580a0>] (irq_thread+0xf8/0x1e4)
[ 243.045412] r7:c0057d98 r6:c6920000 r5:c6965040 r4:c7a0c300
[ 243.051118] [<c0057fa8>] (irq_thread) from [<c00394c4>] (kthread+0xe0/0xf4)
[ 243.058093] r10:00000000 r9:00000000 r8:00000000 r7:c0057fa8 r6:c6965040 r5:00000000
[ 243.065979] r4:c6965080
[ 243.068526] [<c00393e4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c)
[ 243.075762] r7:00000000 r6:00000000 r5:c00393e4 r4:c6965080
[ 243.081465] ---[ end trace 9caeb81bf124e5fc ]---
[ 243.086158] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c647a480] ***BUG*** skb:c64a5a80 skb->dev:c647a000 skb->dev->name:wlan1-1
[ 243.099579] ------------[ cut here ]------------
[ 243.104228] WARNING: CPU: 1 PID: 616 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 243.119822] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 243.192157] CPU: 1 PID: 616 Comm: irq/33-brcmf_pc Tainted: G W 4.4.21 #0
[ 243.200004] Hardware name: BCM5301X
[ 243.203494] Backtrace:
[ 243.205966] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 243.213548] r7:00000046 r6:bf1d1146 r5:60000093 r4:00000000
[ 243.219263] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 243.226504] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 243.234610] r5:00000009 r4:00000000
[ 243.238209] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 243.247005] r8:a0000013 r7:c647a5d0 r6:bf1c9f2d r5:c647a480 r4:c64a5a80
[ 243.253779] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 243.263997] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 243.275232] r8:c04903c8 r7:c647a5d0 r6:c64a5a80 r5:c648c740 r4:c647a480
[ 243.282005] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (brcmf_msgbuf_txdata+0x53c/0x6e8 [brcmfmac])
[ 243.292805] r10:c64a5a80 r9:cacd1010 r8:cacd1010 r7:c7395600 r6:0000001e r5:00000001
[ 243.300691] r4:c72bb840
[ 243.303251] [<bf1c3390>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf1c3964>] (brcmf_proto_msgbuf_rx_trigger+0x3c/0xd0 [brcmfmac])
[ 243.314835] r10:00000000 r9:c0493882 r8:c6965064 r7:c0057d98 r6:c7a0c300 r5:00010000
[ 243.322721] r4:c72bb840
[ 243.325281] [<bf1c3928>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf1c8004>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac])
[ 243.337213] r7:c0057d98 r6:c7a0c300 r5:00010000 r4:c68ea800
[ 243.342926] [<bf1c7e40>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057dbc>] (irq_thread_fn+0x24/0x3c)
[ 243.352341] r9:c0493882 r8:c6965064 r7:c0057d98 r6:c7a0c300 r5:c6965040 r4:c6965040
[ 243.360143] [<c0057d98>] (irq_thread_fn) from [<c00580a0>] (irq_thread+0xf8/0x1e4)
[ 243.367729] r7:c0057d98 r6:c6920000 r5:c6965040 r4:c7a0c300
[ 243.373435] [<c0057fa8>] (irq_thread) from [<c00394c4>] (kthread+0xe0/0xf4)
[ 243.380411] r10:00000000 r9:00000000 r8:00000000 r7:c0057fa8 r6:c6965040 r5:00000000
[ 243.388296] r4:c6965080
[ 243.390844] [<c00393e4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c)
[ 243.398080] r7:00000000 r6:00000000 r5:c00393e4 r4:c6965080
[ 243.403782] ---[ end trace 9caeb81bf124e5fd ]---
[ 243.416467] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c647a480] ***BUG*** skb:c64a5480 skb->dev:c647a000 skb->dev->name:wlan1-1
[ 243.429895] ------------[ cut here ]------------
[ 243.434549] WARNING: CPU: 1 PID: 616 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 243.450139] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 243.522474] CPU: 1 PID: 616 Comm: irq/33-brcmf_pc Tainted: G W 4.4.21 #0
[ 243.530321] Hardware name: BCM5301X
[ 243.533811] Backtrace:
[ 243.536285] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 243.543864] r7:00000046 r6:bf1d1146 r5:60000193 r4:00000000
[ 243.549581] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 243.556821] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 243.564928] r5:00000009 r4:00000000
[ 243.568525] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 243.577331] r8:a0000113 r7:c647a5d0 r6:bf1c9f2d r5:c647a480 r4:c64a5480
[ 243.584107] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 243.594324] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 243.605566] r8:c04903c8 r7:c647a5d0 r6:c64a5480 r5:c648c5c0 r4:c647a480
[ 243.612339] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (brcmf_msgbuf_txdata+0x53c/0x6e8 [brcmfmac])
[ 243.623140] r10:c64a5480 r9:cacd1020 r8:cacd1020 r7:c7395600 r6:0000001e r5:00000000
[ 243.631025] r4:c72bb840
[ 243.633584] [<bf1c3390>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf1c3964>] (brcmf_proto_msgbuf_rx_trigger+0x3c/0xd0 [brcmfmac])
[ 243.645169] r10:00000000 r9:c0493882 r8:c6965064 r7:c0057d98 r6:c7a0c300 r5:00010000
[ 243.653054] r4:c72bb840
[ 243.655615] [<bf1c3928>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf1c8004>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac])
[ 243.667547] r7:c0057d98 r6:c7a0c300 r5:00010000 r4:c68ea800
[ 243.673261] [<bf1c7e40>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057dbc>] (irq_thread_fn+0x24/0x3c)
[ 243.682675] r9:c0493882 r8:c6965064 r7:c0057d98 r6:c7a0c300 r5:c6965040 r4:c6965040
[ 243.690477] [<c0057d98>] (irq_thread_fn) from [<c00580a0>] (irq_thread+0xf8/0x1e4)
[ 243.698063] r7:c0057d98 r6:c6920000 r5:c6965040 r4:c7a0c300
[ 243.703770] [<c0057fa8>] (irq_thread) from [<c00394c4>] (kthread+0xe0/0xf4)
[ 243.710746] r10:00000000 r9:00000000 r8:00000000 r7:c0057fa8 r6:c6965040 r5:00000000
[ 243.718632] r4:c6965080
[ 243.721179] [<c00393e4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c)
[ 243.728415] r7:00000000 r6:00000000 r5:c00393e4 r4:c6965080
[ 243.734117] ---[ end trace 9caeb81bf124e5fe ]---
[ 243.738821] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c647a480] ***BUG*** skb:c64a5f00 skb->dev:c647a000 skb->dev->name:wlan1-1
[ 243.752240] ------------[ cut here ]------------
[ 243.756892] WARNING: CPU: 1 PID: 616 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 243.772482] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 243.844818] CPU: 1 PID: 616 Comm: irq/33-brcmf_pc Tainted: G W 4.4.21 #0
[ 243.852664] Hardware name: BCM5301X
[ 243.856154] Backtrace:
[ 243.858627] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 243.866207] r7:00000046 r6:bf1d1146 r5:60000193 r4:00000000
[ 243.871923] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 243.879164] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 243.887271] r5:00000009 r4:00000000
[ 243.890869] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 243.899666] r8:a0000113 r7:c647a5d0 r6:bf1c9f2d r5:c647a480 r4:c64a5f00
[ 243.906439] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 243.916648] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 243.927884] r8:c04903c8 r7:c647a5d0 r6:c64a5f00 r5:c648cb00 r4:c647a480
[ 243.934655] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (brcmf_msgbuf_txdata+0x53c/0x6e8 [brcmfmac])
[ 243.945457] r10:c64a5f00 r9:cacd1030 r8:cacd1030 r7:c7395600 r6:0000001e r5:00000001
[ 243.953343] r4:c72bb840
[ 243.955902] [<bf1c3390>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf1c3964>] (brcmf_proto_msgbuf_rx_trigger+0x3c/0xd0 [brcmfmac])
[ 243.967487] r10:00000000 r9:c0493882 r8:c6965064 r7:c0057d98 r6:c7a0c300 r5:00010000
[ 243.975372] r4:c72bb840
[ 243.977932] [<bf1c3928>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf1c8004>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac])
[ 243.989864] r7:c0057d98 r6:c7a0c300 r5:00010000 r4:c68ea800
[ 243.995578] [<bf1c7e40>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057dbc>] (irq_thread_fn+0x24/0x3c)
[ 244.004984] r9:c0493882 r8:c6965064 r7:c0057d98 r6:c7a0c300 r5:c6965040 r4:c6965040
[ 244.012787] [<c0057d98>] (irq_thread_fn) from [<c00580a0>] (irq_thread+0xf8/0x1e4)
[ 244.020373] r7:c0057d98 r6:c6920000 r5:c6965040 r4:c7a0c300
[ 244.026078] [<c0057fa8>] (irq_thread) from [<c00394c4>] (kthread+0xe0/0xf4)
[ 244.033055] r10:00000000 r9:00000000 r8:00000000 r7:c0057fa8 r6:c6965040 r5:00000000
[ 244.040939] r4:c6965080
[ 244.043487] [<c00393e4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c)
[ 244.050723] r7:00000000 r6:00000000 r5:c00393e4 r4:c6965080
[ 244.056426] ---[ end trace 9caeb81bf124e5ff ]---
[ 244.061843] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c647a480] ***BUG*** skb:c64a50c0 skb->dev:c647a000 skb->dev->name:wlan1-1
[ 244.075263] ------------[ cut here ]------------
[ 244.079922] WARNING: CPU: 1 PID: 616 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 244.095514] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 244.167850] CPU: 1 PID: 616 Comm: irq/33-brcmf_pc Tainted: G W 4.4.21 #0
[ 244.175696] Hardware name: BCM5301X
[ 244.179186] Backtrace:
[ 244.181660] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 244.189239] r7:00000046 r6:bf1d1146 r5:60000193 r4:00000000
[ 244.194956] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 244.202196] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 244.210302] r5:00000009 r4:00000000
[ 244.213901] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 244.222706] r8:a0000113 r7:c647a5d0 r6:bf1c9f2d r5:c647a480 r4:c64a50c0
[ 244.229476] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 244.239690] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 244.250924] r8:c04903c8 r7:c647a5d0 r6:c64a50c0 r5:c648c640 r4:c647a480
[ 244.257697] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (brcmf_msgbuf_txdata+0x53c/0x6e8 [brcmfmac])
[ 244.268497] r10:c64a50c0 r9:cacd1040 r8:cacd1040 r7:c7395600 r6:0000001e r5:00000000
[ 244.276383] r4:c72bb840
[ 244.278942] [<bf1c3390>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf1c3964>] (brcmf_proto_msgbuf_rx_trigger+0x3c/0xd0 [brcmfmac])
[ 244.290527] r10:00000000 r9:c0493882 r8:c6965064 r7:c0057d98 r6:c7a0c300 r5:00010000
[ 244.298413] r4:c72bb840
[ 244.300972] [<bf1c3928>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf1c8004>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac])
[ 244.312905] r7:c0057d98 r6:c7a0c300 r5:00010000 r4:c68ea800
[ 244.318618] [<bf1c7e40>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057dbc>] (irq_thread_fn+0x24/0x3c)
[ 244.328025] r9:c0493882 r8:c6965064 r7:c0057d98 r6:c7a0c300 r5:c6965040 r4:c6965040
[ 244.335826] [<c0057d98>] (irq_thread_fn) from [<c00580a0>] (irq_thread+0xf8/0x1e4)
[ 244.343404] r7:c0057d98 r6:c6920000 r5:c6965040 r4:c7a0c300
[ 244.349112] [<c0057fa8>] (irq_thread) from [<c00394c4>] (kthread+0xe0/0xf4)
[ 244.356085] r10:00000000 r9:00000000 r8:00000000 r7:c0057fa8 r6:c6965040 r5:00000000
[ 244.363972] r4:c6965080
[ 244.366519] [<c00393e4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c)
[ 244.373755] r7:00000000 r6:00000000 r5:c00393e4 r4:c6965080
[ 244.379457] ---[ end trace 9caeb81bf124e600 ]---
[ 244.385925] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c647a480] ***BUG*** skb:c64a5180 skb->dev:c647a000 skb->dev->name:wlan1-1
[ 244.399348] ------------[ cut here ]------------
[ 244.404009] WARNING: CPU: 1 PID: 616 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 244.419599] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 244.491935] CPU: 1 PID: 616 Comm: irq/33-brcmf_pc Tainted: G W 4.4.21 #0
[ 244.499780] Hardware name: BCM5301X
[ 244.503271] Backtrace:
[ 244.505745] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 244.513333] r7:00000046 r6:bf1d1146 r5:60000193 r4:00000000
[ 244.519050] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 244.526290] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 244.534397] r5:00000009 r4:00000000
[ 244.537994] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 244.546791] r8:a0000113 r7:c647a5d0 r6:bf1c9f2d r5:c647a480 r4:c64a5180
[ 244.553568] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 244.563782] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 244.575018] r8:c04903c8 r7:c647a5d0 r6:c64a5180 r5:c648cc40 r4:c647a480
[ 244.581790] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (brcmf_msgbuf_txdata+0x53c/0x6e8 [brcmfmac])
[ 244.592590] r10:c64a5180 r9:cacd1070 r8:cacd1070 r7:c7395600 r6:0000001e r5:00000001
[ 244.600477] r4:c72bb840
[ 244.603036] [<bf1c3390>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf1c3964>] (brcmf_proto_msgbuf_rx_trigger+0x3c/0xd0 [brcmfmac])
[ 244.614621] r10:00000000 r9:c0493882 r8:c6965064 r7:c0057d98 r6:c7a0c300 r5:00010000
[ 244.622506] r4:c72bb840
[ 244.625066] [<bf1c3928>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf1c8004>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac])
[ 244.636998] r7:c0057d98 r6:c7a0c300 r5:00010000 r4:c68ea800
[ 244.642712] [<bf1c7e40>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057dbc>] (irq_thread_fn+0x24/0x3c)
[ 244.652126] r9:c0493882 r8:c6965064 r7:c0057d98 r6:c7a0c300 r5:c6965040 r4:c6965040
[ 244.659928] [<c0057d98>] (irq_thread_fn) from [<c00580a0>] (irq_thread+0xf8/0x1e4)
[ 244.667506] r7:c0057d98 r6:c6920000 r5:c6965040 r4:c7a0c300
[ 244.673213] [<c0057fa8>] (irq_thread) from [<c00394c4>] (kthread+0xe0/0xf4)
[ 244.680188] r10:00000000 r9:00000000 r8:00000000 r7:c0057fa8 r6:c6965040 r5:00000000
[ 244.688074] r4:c6965080
[ 244.690622] [<c00393e4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c)
[ 244.697857] r7:00000000 r6:00000000 r5:c00393e4 r4:c6965080
[ 244.703559] ---[ end trace 9caeb81bf124e601 ]---
[ 244.708277] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c647a480] ***BUG*** skb:c64a5f00 skb->dev:c647a000 skb->dev->name:wlan1-1
[ 244.721699] ------------[ cut here ]------------
[ 244.726339] WARNING: CPU: 1 PID: 616 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 244.741934] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 244.814268] CPU: 1 PID: 616 Comm: irq/33-brcmf_pc Tainted: G W 4.4.21 #0
[ 244.822116] Hardware name: BCM5301X
[ 244.825605] Backtrace:
[ 244.828073] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 244.835659] r7:00000046 r6:bf1d1146 r5:60000193 r4:00000000
[ 244.841371] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 244.848607] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 244.856713] r5:00000009 r4:00000000
[ 244.860311] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 244.869108] r8:a0000113 r7:c647a5d0 r6:bf1c9f2d r5:c647a480 r4:c64a5f00
[ 244.875878] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 244.886092] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 244.897326] r8:c04903c8 r7:c647a5d0 r6:c64a5f00 r5:c648cb40 r4:c647a480
[ 244.904100] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (brcmf_msgbuf_txdata+0x53c/0x6e8 [brcmfmac])
[ 244.914900] r10:c64a5f00 r9:cacd1080 r8:cacd1080 r7:c7395600 r6:0000001e r5:00000002
[ 244.922786] r4:c72bb840
[ 244.925344] [<bf1c3390>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf1c3964>] (brcmf_proto_msgbuf_rx_trigger+0x3c/0xd0 [brcmfmac])
[ 244.936930] r10:00000000 r9:c0493882 r8:c6965064 r7:c0057d98 r6:c7a0c300 r5:00010000
[ 244.944815] r4:c72bb840
[ 244.947375] [<bf1c3928>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf1c8004>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac])
[ 244.959307] r7:c0057d98 r6:c7a0c300 r5:00010000 r4:c68ea800
[ 244.965020] [<bf1c7e40>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057dbc>] (irq_thread_fn+0x24/0x3c)
[ 244.974426] r9:c0493882 r8:c6965064 r7:c0057d98 r6:c7a0c300 r5:c6965040 r4:c6965040
[ 244.982229] [<c0057d98>] (irq_thread_fn) from [<c00580a0>] (irq_thread+0xf8/0x1e4)
[ 244.989807] r7:c0057d98 r6:c6920000 r5:c6965040 r4:c7a0c300
[ 244.995512] [<c0057fa8>] (irq_thread) from [<c00394c4>] (kthread+0xe0/0xf4)
[ 245.002488] r10:00000000 r9:00000000 r8:00000000 r7:c0057fa8 r6:c6965040 r5:00000000
[ 245.010374] r4:c6965080
[ 245.012920] [<c00393e4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c)
[ 245.020157] r7:00000000 r6:00000000 r5:c00393e4 r4:c6965080
[ 245.025859] ---[ end trace 9caeb81bf124e602 ]---
[ 245.030694] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c647a480] ***BUG*** skb:c64a5480 skb->dev:c647a000 skb->dev->name:wlan1-1
[ 245.044121] ------------[ cut here ]------------
[ 245.048770] WARNING: CPU: 1 PID: 616 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 245.064365] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 245.136699] CPU: 1 PID: 616 Comm: irq/33-brcmf_pc Tainted: G W 4.4.21 #0
[ 245.144546] Hardware name: BCM5301X
[ 245.148036] Backtrace:
[ 245.150507] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 245.158089] r7:00000046 r6:bf1d1146 r5:60000193 r4:00000000
[ 245.163805] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 245.171046] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 245.179153] r5:00000009 r4:00000000
[ 245.182752] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 245.191556] r8:a0000113 r7:c647a5d0 r6:bf1c9f2d r5:c647a480 r4:c64a5480
[ 245.198328] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 245.208541] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 245.219774] r8:c04903c8 r7:c647a5d0 r6:c64a5480 r5:c648c340 r4:c647a480
[ 245.226548] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (brcmf_msgbuf_txdata+0x53c/0x6e8 [brcmfmac])
[ 245.237348] r10:c64a5480 r9:cacd1090 r8:cacd1090 r7:c7395600 r6:0000001e r5:00000003
[ 245.245234] r4:c72bb840
[ 245.247793] [<bf1c3390>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf1c3964>] (brcmf_proto_msgbuf_rx_trigger+0x3c/0xd0 [brcmfmac])
[ 245.259378] r10:00000000 r9:c0493882 r8:c6965064 r7:c0057d98 r6:c7a0c300 r5:00010000
[ 245.267263] r4:c72bb840
[ 245.269823] [<bf1c3928>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf1c8004>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac])
[ 245.281757] r7:c0057d98 r6:c7a0c300 r5:00010000 r4:c68ea800
[ 245.287469] [<bf1c7e40>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057dbc>] (irq_thread_fn+0x24/0x3c)
[ 245.296884] r9:c0493882 r8:c6965064 r7:c0057d98 r6:c7a0c300 r5:c6965040 r4:c6965040
[ 245.304686] [<c0057d98>] (irq_thread_fn) from [<c00580a0>] (irq_thread+0xf8/0x1e4)
[ 245.312272] r7:c0057d98 r6:c6920000 r5:c6965040 r4:c7a0c300
[ 245.317979] [<c0057fa8>] (irq_thread) from [<c00394c4>] (kthread+0xe0/0xf4)
[ 245.324954] r10:00000000 r9:00000000 r8:00000000 r7:c0057fa8 r6:c6965040 r5:00000000
[ 245.332840] r4:c6965080
[ 245.335387] [<c00393e4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c)
[ 245.342623] r7:00000000 r6:00000000 r5:c00393e4 r4:c6965080
[ 245.348326] ---[ end trace 9caeb81bf124e603 ]---
[ 245.352983] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c647a480] ***BUG*** skb:c64a5a80 skb->dev:c647a000 skb->dev->name:wlan1-1
[ 245.366404] ------------[ cut here ]------------
[ 245.371043] WARNING: CPU: 1 PID: 616 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 245.386630] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 245.458964] CPU: 1 PID: 616 Comm: irq/33-brcmf_pc Tainted: G W 4.4.21 #0
[ 245.466811] Hardware name: BCM5301X
[ 245.470303] Backtrace:
[ 245.472770] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 245.480356] r7:00000046 r6:bf1d1146 r5:60000193 r4:00000000
[ 245.486068] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 245.493303] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 245.501410] r5:00000009 r4:00000000
[ 245.505008] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 245.513813] r8:a0000113 r7:c647a5d0 r6:bf1c9f2d r5:c647a480 r4:c64a5a80
[ 245.520584] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 245.530797] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 245.542032] r8:c04903c8 r7:c647a5d0 r6:c64a5a80 r5:c648cc00 r4:c647a480
[ 245.548805] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (b�
---
.../wireless/broadcom/brcm80211/brcmfmac/core.c | 111 ++++++++++++++++++++-
.../wireless/broadcom/brcm80211/brcmfmac/core.h | 20 +++-
.../broadcom/brcm80211/brcmfmac/flowring.c | 12 ++-
.../broadcom/brcm80211/brcmfmac/flowring.h | 6 +-
.../broadcom/brcm80211/brcmfmac/fwsignal.c | 31 +++++-
.../wireless/broadcom/brcm80211/brcmfmac/msgbuf.c | 27 ++++-
.../net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 3 +
.../wireless/broadcom/brcm80211/brcmutil/utils.c | 2 +-
.../broadcom/brcm80211/include/brcmu_utils.h | 2 +-
9 files changed, 202 insertions(+), 12 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
index 8d16f02..42d1fdd 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
@@ -38,6 +38,48 @@
#include "pcie.h"
#include "common.h"
+#include <linux/sched.h>
+
+static size_t print_time(u64 ts, char *buf)
+{
+ unsigned long rem_nsec;
+
+ rem_nsec = do_div(ts, 1000000000);
+
+ if (!buf)
+ return snprintf(NULL, 0, "[%5lu.000000]", (unsigned long)ts);
+
+ return sprintf(buf, "[%5lu.%06lu]",
+ (unsigned long)ts, rem_nsec / 1000);
+}
+
+/* Free the driver packet. Free the tag if present */
+void __brcmu_pkt_buf_free_skb(const char *c0, struct brcmf_if *ifp, struct sk_buff *skb)
+{
+ if (!skb)
+ return;
+
+ if (ifp) {
+ struct pend_skb *e;
+ unsigned long flags;
+
+ spin_lock_irqsave(&ifp->pend_lock, flags);
+ list_for_each_entry(e, &ifp->pend_skbs, list) {
+ if (e->skb == skb) {
+ pr_info("[%s -> %s] [ifp:%p] ***BUG*** skb:%p skb->dev:%p skb->dev->name:%s\n", c0, __func__, ifp, e->skb, e->skb->dev, e->skb->dev ? e->skb->dev->name : "---");
+ WARN_ON(1);
+ break;
+ }
+ }
+ spin_unlock_irqrestore(&ifp->pend_lock, flags);
+ } else if (strcmp(c0, "brcmf_msgbuf_query_dcmd")) {
+ pr_info("[%s -> %s] [ifp:%p] Freeing skb:%p skb->dev:%p skb->dev->name:%s\n", c0, __func__, ifp, skb, skb->dev, skb->dev ? skb->dev->name : "---");
+ }
+
+ WARN_ON(skb->next);
+ dev_kfree_skb_any(skb);
+}
+
#define MAX_WAIT_FOR_8021X_TX msecs_to_jiffies(950)
#define BRCMF_BSSIDX_INVALID -1
@@ -250,6 +292,21 @@ static netdev_tx_t brcmf_netdev_start_xmit(struct sk_buff *skb,
if (eh->h_proto == htons(ETH_P_PAE))
atomic_inc(&ifp->pend_8021x_cnt);
+ {
+ struct pend_skb *e;
+ unsigned long flags;
+
+ e = kzalloc(sizeof(*e), GFP_KERNEL);
+ e->skb = skb;
+ e->start_time = local_clock();
+ e->start_jiffies = jiffies;
+ e->pae = eh->h_proto == htons(ETH_P_PAE);
+
+ spin_lock_irqsave(&ifp->pend_lock, flags);
+ list_add_tail(&e->list, &ifp->pend_skbs);
+ spin_unlock_irqrestore(&ifp->pend_lock, flags);
+ }
+
ret = brcmf_fws_process_skb(ifp, skb);
done:
@@ -333,7 +390,7 @@ static int brcmf_rx_hdrpull(struct brcmf_pub *drvr, struct sk_buff *skb,
if (ret || !(*ifp) || !(*ifp)->ndev) {
if (ret != -ENODATA && *ifp)
(*ifp)->stats.rx_errors++;
- brcmu_pkt_buf_free_skb(skb);
+ __brcmu_pkt_buf_free_skb(__func__, *ifp, skb);
return -ENODATA;
}
@@ -378,7 +435,7 @@ void brcmf_rx_event(struct device *dev, struct sk_buff *skb)
brcmu_pkt_buf_free_skb(skb);
}
-void brcmf_txfinalize(struct brcmf_if *ifp, struct sk_buff *txp, bool success)
+void __brcmf_txfinalize(const char *c0, struct brcmf_if *ifp, struct sk_buff *txp, bool success)
{
struct ethhdr *eh;
u16 type;
@@ -386,8 +443,38 @@ void brcmf_txfinalize(struct brcmf_if *ifp, struct sk_buff *txp, bool success)
eh = (struct ethhdr *)(txp->data);
type = ntohs(eh->h_proto);
+ {
+ struct pend_skb *e, *tmp;
+ //u64 now_time = local_clock();
+ unsigned long now_jiffies = jiffies;
+ unsigned long flags;
+
+ spin_lock_irqsave(&ifp->pend_lock, flags);
+ list_for_each_entry_safe(e, tmp, &ifp->pend_skbs, list) {
+ if (e->skb == txp) {
+ if (e->timedout) {
+ char start[32], commit[32];
+
+ print_time(e->start_time, start);
+ print_time(e->commit_time, commit);
+
+ pr_info("[%s -> %s] Finally finalizing skb:%p skb->dev:%p skb->dev->name:%s (start_time:%s; commit_time:%s)\n",
+ c0, __func__,
+ e->skb, e->skb->dev, e->skb->dev ? e->skb->dev->name : "---",
+ start, commit);
+ }
+
+ list_del(&e->list);
+ kfree(e);
+ break;
+ }
+ }
+ spin_unlock_irqrestore(&ifp->pend_lock, flags);
+ }
+
if (type == ETH_P_PAE) {
atomic_dec(&ifp->pend_8021x_cnt);
+
if (waitqueue_active(&ifp->pend_8021x_wait))
wake_up(&ifp->pend_8021x_wait);
}
@@ -477,6 +564,9 @@ static int brcmf_netdev_open(struct net_device *ndev)
atomic_set(&ifp->pend_8021x_cnt, 0);
+ INIT_LIST_HEAD(&ifp->pend_skbs);
+ spin_lock_init(&ifp->pend_lock);
+
/* Get current TOE mode from dongle */
if (brcmf_fil_iovar_int_get(ifp, "toe_ol", &toe_ol) >= 0
&& (toe_ol & TOE_TX_CSUM_OL) != 0)
@@ -1169,7 +1259,22 @@ int brcmf_netdev_wait_pend8021x(struct brcmf_if *ifp)
!brcmf_get_pend_8021x_cnt(ifp),
MAX_WAIT_FOR_8021X_TX);
- WARN_ON(!err);
+ //WARN_ON(!err);
+ if (!err)
+ pr_info("[%s] ***TIMEOUT WARNING*** ifp:%p brcmf_ifname(ifp):%s brcmf_get_pend_8021x_cnt(ifp):%d\n", __func__, ifp, brcmf_ifname(ifp), brcmf_get_pend_8021x_cnt(ifp));
+ if (!list_empty(&ifp->pend_skbs)) {
+ struct pend_skb *e;
+ unsigned long flags;
+
+ spin_lock_irqsave(&ifp->pend_lock, flags);
+ list_for_each_entry(e, &ifp->pend_skbs, list) {
+ if (e->pae) {
+ e->timedout = true;
+ pr_info("[%s] Pending 802.1x skb:%p skb->dev:%p skb->dev->name:%s\n", __func__, e->skb, e->skb->dev, e->skb->dev ? e->skb->dev->name : "---");
+ }
+ }
+ spin_unlock_irqrestore(&ifp->pend_lock, flags);
+ }
return !err;
}
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
index 8fa34ca..208f0d2 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
@@ -50,6 +50,9 @@
#define NDOL_MAX_ENTRIES 8
+void __brcmu_pkt_buf_free_skb(const char *c0, struct brcmf_if *ifp, struct sk_buff *skb);
+#define brcmu_pkt_buf_free_skb(skb) __brcmu_pkt_buf_free_skb(__func__, ifp, skb)
+
/**
* struct brcmf_ampdu_rx_reorder - AMPDU receive reorder info
*
@@ -169,6 +172,16 @@ enum brcmf_netif_stop_reason {
BRCMF_NETIF_STOP_REASON_DISCONNECTED = BIT(2)
};
+struct pend_skb {
+ struct sk_buff *skb;
+ u64 start_time;
+ unsigned long start_jiffies;
+ u64 commit_time;
+ bool timedout;
+ bool pae;
+ struct list_head list;
+};
+
/**
* struct brcmf_if - interface control information.
*
@@ -203,9 +216,13 @@ struct brcmf_if {
u8 netif_stop;
spinlock_t netif_stop_lock;
atomic_t pend_8021x_cnt;
+ bool pend_8021x_ready;
wait_queue_head_t pend_8021x_wait;
struct in6_addr ipv6_addr_tbl[NDOL_MAX_ENTRIES];
u8 ipv6addr_idx;
+
+ struct list_head pend_skbs;
+ spinlock_t pend_lock;
};
int brcmf_netdev_wait_pend8021x(struct brcmf_if *ifp);
@@ -219,7 +236,8 @@ struct brcmf_if *brcmf_add_if(struct brcmf_pub *drvr, s32 bsscfgidx, s32 ifidx,
void brcmf_remove_interface(struct brcmf_if *ifp, bool rtnl_locked);
void brcmf_txflowblock_if(struct brcmf_if *ifp,
enum brcmf_netif_stop_reason reason, bool state);
-void brcmf_txfinalize(struct brcmf_if *ifp, struct sk_buff *txp, bool success);
+void __brcmf_txfinalize(const char *c0, struct brcmf_if *ifp, struct sk_buff *txp, bool success);
+#define brcmf_txfinalize(ifp, txp, success) __brcmf_txfinalize(__func__, ifp, txp, success)
void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb);
void brcmf_net_setcarrier(struct brcmf_if *ifp, bool on);
void brcmf_c_set_joinpref_default(struct brcmf_if *ifp);
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/flowring.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/flowring.c
index 7e269f9..56be839 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/flowring.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/flowring.c
@@ -108,7 +108,7 @@ u32 brcmf_flowring_lookup(struct brcmf_flowring *flow, u8 da[ETH_ALEN],
}
-u32 brcmf_flowring_create(struct brcmf_flowring *flow, u8 da[ETH_ALEN],
+u32 __brcmf_flowring_create(const char *c0, struct brcmf_flowring *flow, u8 da[ETH_ALEN],
u8 prio, u8 ifidx)
{
struct brcmf_flowring_ring *ring;
@@ -120,6 +120,7 @@ u32 brcmf_flowring_create(struct brcmf_flowring *flow, u8 da[ETH_ALEN],
bool sta;
u8 *mac;
+ pr_info("[%s -> %s] da:%pM prio:%d ifidx:%d\n", c0, __func__, da, prio, ifidx);
fifo = brcmf_flowring_prio2fifo[prio];
sta = (flow->addr_mode[ifidx] == ADDR_INDIRECT);
mac = da;
@@ -167,6 +168,7 @@ u32 brcmf_flowring_create(struct brcmf_flowring *flow, u8 da[ETH_ALEN],
skb_queue_head_init(&ring->skblist);
flow->rings[i] = ring;
+ pr_info("[%s -> %s] flowid:%d\n", c0, __func__, i);
return i;
}
return BRCMF_FLOWRING_INVALID_ID;
@@ -232,12 +234,14 @@ static void brcmf_flowring_block(struct brcmf_flowring *flow, u16 flowid,
}
-void brcmf_flowring_delete(struct brcmf_flowring *flow, u16 flowid)
+void __brcmf_flowring_delete(const char *c0, struct brcmf_flowring *flow, u16 flowid)
{
struct brcmf_flowring_ring *ring;
u16 hash_idx;
struct sk_buff *skb;
+ int count = 0;
+ pr_info("[%s -> %s] flowid:%d ring:%p\n", c0, __func__, flowid, flow->rings[flowid]);
ring = flow->rings[flowid];
if (!ring)
return;
@@ -249,9 +253,13 @@ void brcmf_flowring_delete(struct brcmf_flowring *flow, u16 flowid)
skb = skb_dequeue(&ring->skblist);
while (skb) {
+ struct brcmf_if *ifp = NULL;
+
brcmu_pkt_buf_free_skb(skb);
skb = skb_dequeue(&ring->skblist);
+ count++;
}
+ pr_info("[%s -> %s] count:%d\n", c0, __func__, count);
kfree(ring);
}
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/flowring.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/flowring.h
index 068e68d..8d82a57 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/flowring.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/flowring.h
@@ -59,9 +59,11 @@ struct brcmf_flowring {
u32 brcmf_flowring_lookup(struct brcmf_flowring *flow, u8 da[ETH_ALEN],
u8 prio, u8 ifidx);
-u32 brcmf_flowring_create(struct brcmf_flowring *flow, u8 da[ETH_ALEN],
+u32 __brcmf_flowring_create(const char *c0, struct brcmf_flowring *flow, u8 da[ETH_ALEN],
u8 prio, u8 ifidx);
-void brcmf_flowring_delete(struct brcmf_flowring *flow, u16 flowid);
+#define brcmf_flowring_create(flow, da, prio, ifidx) __brcmf_flowring_create(__func__, flow, da, prio, ifidx)
+void __brcmf_flowring_delete(const char *c0, struct brcmf_flowring *flow, u16 flowid);
+#define brcmf_flowring_delete(flow, flowid) __brcmf_flowring_delete(__func__, flow, flowid)
void brcmf_flowring_open(struct brcmf_flowring *flow, u16 flowid);
u8 brcmf_flowring_tid(struct brcmf_flowring *flow, u16 flowid);
u32 brcmf_flowring_enqueue(struct brcmf_flowring *flow, u16 flowid,
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
index 9f9024a..5ab0615 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
@@ -38,6 +38,8 @@
#include "proto.h"
#include "common.h"
+#include <linux/sched.h>
+
/**
* DOC: Firmware Signalling
*
@@ -590,6 +592,8 @@ static void brcmf_fws_psq_flush(struct brcmf_fws_info *fws, struct pktq *q,
for (prec = 0; prec < q->num_prec; prec++) {
skb = brcmu_pktq_pdeq_match(q, prec, matchfn, &ifidx);
while (skb) {
+ struct brcmf_if *ifp = NULL;
+
brcmu_pkt_buf_free_skb(skb);
skb = brcmu_pktq_pdeq_match(q, prec, matchfn, &ifidx);
}
@@ -697,6 +701,8 @@ static void brcmf_fws_hanger_cleanup(struct brcmf_fws_info *fws,
s == BRCMF_FWS_HANGER_ITEM_STATE_INUSE_SUPPRESSED) {
skb = h->items[i].pkt;
if (fn == NULL || fn(skb, &ifidx)) {
+ struct brcmf_if *ifp = NULL;
+
/* suppress packets freed from psq */
if (s == BRCMF_FWS_HANGER_ITEM_STATE_INUSE)
brcmu_pkt_buf_free_skb(skb);
@@ -845,6 +851,8 @@ static void brcmf_fws_bus_txq_cleanup(struct brcmf_fws_info *fws,
for (prec = 0; prec < txq->num_prec; prec++) {
skb = brcmu_pktq_pdeq_match(txq, prec, fn, &ifidx);
while (skb) {
+ struct brcmf_if *ifp = NULL;
+
hslot = brcmf_skb_htod_tag_get_field(skb, HSLOT);
hi = &fws->hanger.items[hslot];
WARN_ON(skb != hi->pkt);
@@ -971,8 +979,11 @@ static bool brcmf_fws_tim_update(struct brcmf_fws_info *fws,
brcmf_fws_unlock(fws);
err = brcmf_proto_txdata(fws->drvr, ifidx, data_offset, skb);
brcmf_fws_lock(fws);
- if (err)
+ if (err) {
+ struct brcmf_if *ifp = NULL;
+
brcmu_pkt_buf_free_skb(skb);
+ }
return true;
}
return false;
@@ -2056,6 +2067,23 @@ static int brcmf_fws_commit_skb(struct brcmf_fws_info *fws, int fifo,
(void)brcmf_proto_hdrpull(fws->drvr, false, skb, NULL);
goto rollback;
}
+ {
+ struct brcmf_if *ifp = brcmf_get_ifp(fws->drvr, brcmf_skb_if_flags_get_field(skb, INDEX));
+
+ if (ifp) {
+ struct pend_skb *e;
+ unsigned long flags;
+
+ spin_lock_irqsave(&ifp->pend_lock, flags);
+ list_for_each_entry(e, &ifp->pend_skbs, list) {
+ if (e->skb == skb) {
+ e->commit_time = local_clock();
+ break;
+ }
+ }
+ spin_unlock_irqrestore(&ifp->pend_lock, flags);
+ }
+ }
fws->stats.pkt2bus++;
fws->stats.send_pkts[fifo]++;
@@ -2454,6 +2482,7 @@ bool brcmf_fws_fc_active(struct brcmf_fws_info *fws)
void brcmf_fws_bustxfail(struct brcmf_fws_info *fws, struct sk_buff *skb)
{
+ struct brcmf_if *ifp = NULL;
u32 hslot;
if (brcmf_skbcb(skb)->state == BRCMF_FWS_SKBSTATE_TIM) {
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
index 2b9a2bc..07ae721 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
@@ -34,6 +34,8 @@
#include "bus.h"
#include "tracepoint.h"
+#include <linux/sched.h>
+
#define MSGBUF_IOCTL_RESP_TIMEOUT msecs_to_jiffies(2000)
@@ -392,6 +394,8 @@ brcmf_msgbuf_release_array(struct device *dev,
count = 0;
do {
if (array[count].allocated.counter) {
+ struct brcmf_if *ifp = NULL;
+
pktid = &array[count];
dma_unmap_single(dev, pktid->physaddr,
pktid->skb->len - pktid->data_offset,
@@ -483,6 +487,7 @@ static int brcmf_msgbuf_query_dcmd(struct brcmf_pub *drvr, int ifidx,
{
struct brcmf_msgbuf *msgbuf = (struct brcmf_msgbuf *)drvr->proto->pd;
struct sk_buff *skb = NULL;
+ struct brcmf_if *ifp = NULL;
int timeout;
int err;
@@ -532,11 +537,12 @@ static void brcmf_msgbuf_rxreorder(struct brcmf_if *ifp, struct sk_buff *skb)
}
static void
-brcmf_msgbuf_remove_flowring(struct brcmf_msgbuf *msgbuf, u16 flowid)
+__brcmf_msgbuf_remove_flowring(const char *c0, struct brcmf_msgbuf *msgbuf, u16 flowid)
{
u32 dma_sz;
void *dma_buf;
+ pr_info("[%s -> %s] flowid:%d\n", c0, __func__, flowid);
brcmf_dbg(MSGBUF, "Removing flowring %d\n", flowid);
dma_sz = BRCMF_H2D_TXFLOWRING_MAX_ITEM * BRCMF_H2D_TXFLOWRING_ITEMSIZE;
@@ -546,6 +552,7 @@ brcmf_msgbuf_remove_flowring(struct brcmf_msgbuf *msgbuf, u16 flowid)
brcmf_flowring_delete(msgbuf->flow, flowid);
}
+#define brcmf_msgbuf_remove_flowring(msgbuf, flowid) __brcmf_msgbuf_remove_flowring(__func__, msgbuf, flowid)
static struct brcmf_msgbuf_work_item *
@@ -747,6 +754,23 @@ static void brcmf_msgbuf_txflow(struct brcmf_msgbuf *msgbuf, u16 flowid)
brcmf_commonring_write_complete(commonring);
count = 0;
}
+ {
+ struct brcmf_if *ifp = brcmf_get_ifp(msgbuf->drvr, tx_msghdr->msg.ifidx);
+
+ if (ifp) {
+ struct pend_skb *e;
+ unsigned long flags;
+
+ spin_lock_irqsave(&ifp->pend_lock, flags);
+ list_for_each_entry(e, &ifp->pend_skbs, list) {
+ if (e->skb == skb) {
+ e->commit_time = local_clock();
+ break;
+ }
+ }
+ spin_unlock_irqrestore(&ifp->pend_lock, flags);
+ }
+ }
}
if (count)
brcmf_commonring_write_complete(commonring);
@@ -1177,6 +1201,7 @@ brcmf_msgbuf_process_flow_ring_create_response(struct brcmf_msgbuf *msgbuf,
flowid -= BRCMF_NROF_H2D_COMMON_MSGRINGS;
status = le16_to_cpu(flowring_create_resp->compl_hdr.status);
+ pr_info("[%s] flowid:%d status:0x%04x\n", __func__, flowid, status);
if (status) {
brcmf_err("Flowring creation failed, code %d\n", status);
brcmf_msgbuf_remove_flowring(msgbuf, flowid);
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
index 2f978a3..edbe353 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
@@ -498,6 +498,7 @@ static void brcmf_usb_rx_complete(struct urb *urb)
{
struct brcmf_usbreq *req = (struct brcmf_usbreq *)urb->context;
struct brcmf_usbdev_info *devinfo = req->devinfo;
+ struct brcmf_if *ifp = NULL;
struct sk_buff *skb;
brcmf_dbg(USB, "Enter, urb->status=%d\n", urb->status);
@@ -548,6 +549,8 @@ static void brcmf_usb_rx_refill(struct brcmf_usbdev_info *devinfo,
ret = usb_submit_urb(req->urb, GFP_ATOMIC);
if (ret) {
+ struct brcmf_if *ifp = NULL;
+
brcmf_usb_del_fromq(devinfo, req);
brcmu_pkt_buf_free_skb(req->skb);
req->skb = NULL;
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmutil/utils.c b/drivers/net/wireless/broadcom/brcm80211/brcmutil/utils.c
index 0543607..bf525b7 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmutil/utils.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmutil/utils.c
@@ -49,7 +49,7 @@ void brcmu_pkt_buf_free_skb(struct sk_buff *skb)
WARN_ON(skb->next);
dev_kfree_skb_any(skb);
}
-EXPORT_SYMBOL(brcmu_pkt_buf_free_skb);
+//EXPORT_SYMBOL(brcmu_pkt_buf_free_skb);
/*
* osl multiple-precedence packet queue
diff --git a/drivers/net/wireless/broadcom/brcm80211/include/brcmu_utils.h b/drivers/net/wireless/broadcom/brcm80211/include/brcmu_utils.h
index 4196952..7bd705d 100644
--- a/drivers/net/wireless/broadcom/brcm80211/include/brcmu_utils.h
+++ b/drivers/net/wireless/broadcom/brcm80211/include/brcmu_utils.h
@@ -126,7 +126,7 @@ struct sk_buff *brcmu_pktq_pdeq_match(struct pktq *pq, int prec,
/* packet primitives */
struct sk_buff *brcmu_pkt_buf_get_skb(uint len);
-void brcmu_pkt_buf_free_skb(struct sk_buff *skb);
+//void brcmu_pkt_buf_free_skb(struct sk_buff *skb);
/* Empty the queue at particular precedence level */
/* callback function fn(pkt, arg) returns true if pkt belongs to if */
--
2.9.3
^ permalink raw reply related
* Re: brcmf_txfinalize misses 802.1x packet leading to infinite WARNINGs
From: Rafał Miłecki @ 2016-09-22 12:24 UTC (permalink / raw)
To: Hante Meuleman, Arend van Spriel, brcm80211-dev-list; +Cc: linux-wireless
In-Reply-To: <20160922115935.11287-1-zajec5@gmail.com>
On 09/22/2016 01:59 PM, Rafał Miłecki wrote:
> And again...
>
> I decided to focus on brcmf_flowring_delete a bit more.
>
> As I can see flowrings are created and removed from time to time, in most cases
> they are empty when being deleted. When they are not, things go wrong. In below
> log you can see brcmfmac removing flowring that got 8 skb packets.
>
> First some summary, of what was already partially noticed in previous e-mail:
> 1) brcmf_flowring_delete calls brcmu_pkt_buf_free_skb directly bypassing
> brcmf_txfinalize. It means tracing 802.1x packets and counting TX errors is
> broken.
> 2) After freeing skb (as the result of brcmf_flowring_delete) there will still
> an IRQ, MSGBUF_TYPE_TX_STATUS and call to the brcmf_txfinalize. That's
> definitely unexpected as brcmf_txfinalize will be operating on skb that was
> already freed.
>
> Now, there is something new that looks even worse. Sometimes brcmf_txfinalize
> may be called multiple times for the same skb! Take a close look at my log.
> It was called twice for skb c64a5a80. Twice for c64a5480. Twice for c64a5f00.
> Then Linux/device rebooted itself due to amount of console messages.
I got the same problem again, but this time there was only 1 skb in my flowring.
That resulted in less serial console messages and no reboot.
It doesn't look good. brcmf_txfinalize was called 11 times after deleting
flowring. Everytime it was working with the same skb that was already freed.
After my DIR-885L and brcmfmac managed to survive that, my smartphone remained
connected but I couldn't contact it (no reply to ping). I had to reconnect and
then it was back OK.
[ 2927.500112] brcmfmac: CONSOLE: 029651.820 wl0: Proxy STA 78:d6:f0:9b:ba:bc link is already gone !!??
[ 2927.509473] brcmfmac: [brcmf_msgbuf_process_flow_ring_delete_response -> __brcmf_msgbuf_remove_flowring] flowid:3
[ 2927.519800] brcmfmac: [__brcmf_msgbuf_remove_flowring -> __brcmf_flowring_delete] flowid:3 ring:c7850540
[ 2927.529318] brcmfmac: [__brcmf_msgbuf_remove_flowring -> __brcmf_flowring_delete] count:0
[ 2927.537526] brcmfmac: [brcmf_msgbuf_process_flow_ring_delete_response -> __brcmf_msgbuf_remove_flowring] flowid:34
[ 2927.547929] brcmfmac: [__brcmf_msgbuf_remove_flowring -> __brcmf_flowring_delete] flowid:34 ring:c7850180
[ 2927.557533] brcmfmac: [__brcmf_msgbuf_remove_flowring -> __brcmf_flowring_delete] count:0
[ 2927.559735] brcmfmac: [brcmf_msgbuf_flowring_create -> __brcmf_flowring_create] da:78:d6:f0:9b:ba:bc prio:0 ifidx:1
[ 2927.559739] brcmfmac: [brcmf_msgbuf_flowring_create -> __brcmf_flowring_create] flowid:3
[ 2927.584463] brcmfmac: [brcmf_msgbuf_process_flow_ring_create_response] flowid:3 status:0x0000
[ 2927.593211] brcmfmac: [brcmf_msgbuf_process_flow_ring_delete_response -> __brcmf_msgbuf_remove_flowring] flowid:3
[ 2927.603538] brcmfmac: [__brcmf_msgbuf_remove_flowring -> __brcmf_flowring_delete] flowid:3 ring:c658cb80
[ 2927.613059] brcmfmac: [__brcmf_flowring_delete -> __brcmu_pkt_buf_free_skb] [ifp: (null)] Freeing skb:c64d1240 skb->dev:c6b3f800 skb->dev->name:wlan1-1
[ 2927.626750] brcmfmac: [__brcmf_msgbuf_remove_flowring -> __brcmf_flowring_delete] count:1
[ 2928.348341] brcmfmac: CONSOLE: 029652.655 wl0: wlc_ampdu_resp_timeout: cleaning up resp tid 0 waiting forseq 0xbb9 for 1000 ms
[ 2930.887857] brcmfmac: [brcmf_msgbuf_flowring_create -> __brcmf_flowring_create] da:78:d6:f0:9b:ba:bc prio:0 ifidx:1
[ 2930.898340] brcmfmac: [brcmf_msgbuf_flowring_create -> __brcmf_flowring_create] flowid:3
[ 2930.906686] brcmfmac: [brcmf_msgbuf_process_flow_ring_create_response] flowid:3 status:0x0000
[ 2933.982285] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c6b3fc80] ***BUG*** skb:c64d1240 skb->dev:c6b3f800 skb->dev->name:wlan1-1
[ 2933.995705] ------------[ cut here ]------------
[ 2934.000359] WARNING: CPU: 1 PID: 615 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 2934.015949] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 2934.088284] CPU: 1 PID: 615 Comm: irq/33-brcmf_pc Not tainted 4.4.21 #0
[ 2934.094913] Hardware name: BCM5301X
[ 2934.098403] Backtrace:
[ 2934.100877] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 2934.108465] r7:00000046 r6:bf1d1146 r5:60000093 r4:00000000
[ 2934.114183] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 2934.121421] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 2934.129527] r5:00000009 r4:00000000
[ 2934.133126] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 2934.141931] r8:a0000013 r7:c6b3fdd0 r6:bf1c9f2d r5:c6b3fc80 r4:c64d1240
[ 2934.148707] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 2934.158923] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 2934.170158] r8:c04903c8 r7:c6b3fdd0 r6:c64d1240 r5:c658cf40 r4:c6b3fc80
[ 2934.176931] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (brcmf_msgbuf_txdata+0x53c/0x6e8 [brcmfmac])
[ 2934.187731] r10:c64d1240 r9:cacd2e80 r8:cacd2e80 r7:c7388180 r6:00000021 r5:00000000
[ 2934.195616] r4:c7389c00
[ 2934.198175] [<bf1c3390>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf1c3964>] (brcmf_proto_msgbuf_rx_trigger+0x3c/0xd0 [brcmfmac])
[ 2934.209761] r10:00000000 r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:00010000
[ 2934.217646] r4:c7389c00
[ 2934.220207] [<bf1c3928>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf1c8004>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac])
[ 2934.232138] r7:c0057d98 r6:c7a0c240 r5:00010000 r4:c68fa800
[ 2934.237853] [<bf1c7e40>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057dbc>] (irq_thread_fn+0x24/0x3c)
[ 2934.247266] r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:c738ba40 r4:c738ba40
[ 2934.255069] [<c0057d98>] (irq_thread_fn) from [<c00580a0>] (irq_thread+0xf8/0x1e4)
[ 2934.262655] r7:c0057d98 r6:c7254000 r5:c738ba40 r4:c7a0c240
[ 2934.268363] [<c0057fa8>] (irq_thread) from [<c00394c4>] (kthread+0xe0/0xf4)
[ 2934.275336] r10:00000000 r9:00000000 r8:00000000 r7:c0057fa8 r6:c738ba40 r5:00000000
[ 2934.283223] r4:c738bcc0
[ 2934.285770] [<c00393e4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c)
[ 2934.293005] r7:00000000 r6:00000000 r5:c00393e4 r4:c738bcc0
[ 2934.298708] ---[ end trace 886f614767d73cfe ]---
[ 2936.216611] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c6b3fc80] ***BUG*** skb:c64d1240 skb->dev:c6b3f800 skb->dev->name:wlan1-1
[ 2936.230030] ------------[ cut here ]------------
[ 2936.234684] WARNING: CPU: 1 PID: 615 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 2936.250276] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 2936.322610] CPU: 1 PID: 615 Comm: irq/33-brcmf_pc Tainted: G W 4.4.21 #0
[ 2936.330456] Hardware name: BCM5301X
[ 2936.333946] Backtrace:
[ 2936.336421] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 2936.344008] r7:00000046 r6:bf1d1146 r5:60000093 r4:00000000
[ 2936.349726] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 2936.356965] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 2936.365072] r5:00000009 r4:00000000
[ 2936.368669] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 2936.377475] r8:a0000013 r7:c6b3fdd0 r6:bf1c9f2d r5:c6b3fc80 r4:c64d1240
[ 2936.384249] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 2936.394468] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 2936.405702] r8:c04903c8 r7:c6b3fdd0 r6:c64d1240 r5:c7850040 r4:c6b3fc80
[ 2936.412474] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (brcmf_msgbuf_txdata+0x53c/0x6e8 [brcmfmac])
[ 2936.423275] r10:c64d1240 r9:cacd2e90 r8:cacd2e90 r7:c7388180 r6:00000021 r5:00000000
[ 2936.431160] r4:c7389c00
[ 2936.433720] [<bf1c3390>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf1c3964>] (brcmf_proto_msgbuf_rx_trigger+0x3c/0xd0 [brcmfmac])
[ 2936.445305] r10:00000000 r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:00010000
[ 2936.453190] r4:c7389c00
[ 2936.455750] [<bf1c3928>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf1c8004>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac])
[ 2936.467683] r7:c0057d98 r6:c7a0c240 r5:00010000 r4:c68fa800
[ 2936.473396] [<bf1c7e40>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057dbc>] (irq_thread_fn+0x24/0x3c)
[ 2936.482811] r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:c738ba40 r4:c738ba40
[ 2936.490613] [<c0057d98>] (irq_thread_fn) from [<c00580a0>] (irq_thread+0xf8/0x1e4)
[ 2936.498199] r7:c0057d98 r6:c7254000 r5:c738ba40 r4:c7a0c240
[ 2936.503906] [<c0057fa8>] (irq_thread) from [<c00394c4>] (kthread+0xe0/0xf4)
[ 2936.510880] r10:00000000 r9:00000000 r8:00000000 r7:c0057fa8 r6:c738ba40 r5:00000000
[ 2936.518767] r4:c738bcc0
[ 2936.521315] [<c00393e4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c)
[ 2936.528549] r7:00000000 r6:00000000 r5:c00393e4 r4:c738bcc0
[ 2936.534252] ---[ end trace 886f614767d73cff ]---
[ 2942.054359] brcmfmac: CONSOLE: 029666.332 wl0.2: wlc_send_bar: seq 0x1 tid 0
[ 2942.683661] brcmfmac: [brcmf_msgbuf_flowring_create -> __brcmf_flowring_create] da:78:d6:f0:9b:ba:bc prio:6 ifidx:1
[ 2942.694175] brcmfmac: [brcmf_msgbuf_flowring_create -> __brcmf_flowring_create] flowid:34
[ 2942.702765] brcmfmac: [brcmf_msgbuf_process_flow_ring_create_response] flowid:34 status:0x0000
[ 2942.850073] brcmfmac: CONSOLE: 029667.008 wl0.2: wlc_send_bar: seq 0x1 tid 6
[ 2943.368191] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c6b3fc80] ***BUG*** skb:c64d1240 skb->dev:c6b3f800 skb->dev->name:wlan1-1
[ 2943.381618] ------------[ cut here ]------------
[ 2943.386273] WARNING: CPU: 1 PID: 615 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 2943.401864] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 2943.474198] CPU: 1 PID: 615 Comm: irq/33-brcmf_pc Tainted: G W 4.4.21 #0
[ 2943.482044] Hardware name: BCM5301X
[ 2943.485534] Backtrace:
[ 2943.488009] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 2943.495597] r7:00000046 r6:bf1d1146 r5:60000093 r4:00000000
[ 2943.501314] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 2943.508553] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 2943.516660] r5:00000009 r4:00000000
[ 2943.520258] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 2943.529055] r8:a0000013 r7:c6b3fdd0 r6:bf1c9f2d r5:c6b3fc80 r4:c64d1240
[ 2943.535829] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 2943.546047] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 2943.557281] r8:c04903c8 r7:c6b3fdd0 r6:c64d1240 r5:c658cd00 r4:c6b3fc80
[ 2943.564054] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (brcmf_msgbuf_txdata+0x53c/0x6e8 [brcmfmac])
[ 2943.574855] r10:c64d1240 r9:cacd30b0 r8:cacd30b0 r7:c7388180 r6:00000021 r5:00000000
[ 2943.582741] r4:c7389c00
[ 2943.585301] [<bf1c3390>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf1c3964>] (brcmf_proto_msgbuf_rx_trigger+0x3c/0xd0 [brcmfmac])
[ 2943.596885] r10:00000000 r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:00010000
[ 2943.604771] r4:c7389c00
[ 2943.607330] [<bf1c3928>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf1c8004>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac])
[ 2943.619262] r7:c0057d98 r6:c7a0c240 r5:00010000 r4:c68fa800
[ 2943.624976] [<bf1c7e40>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057dbc>] (irq_thread_fn+0x24/0x3c)
[ 2943.634391] r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:c738ba40 r4:c738ba40
[ 2943.642193] [<c0057d98>] (irq_thread_fn) from [<c00580a0>] (irq_thread+0xf8/0x1e4)
[ 2943.649779] r7:c0057d98 r6:c7254000 r5:c738ba40 r4:c7a0c240
[ 2943.655485] [<c0057fa8>] (irq_thread) from [<c00394c4>] (kthread+0xe0/0xf4)
[ 2943.662460] r10:00000000 r9:00000000 r8:00000000 r7:c0057fa8 r6:c738ba40 r5:00000000
[ 2943.670346] r4:c738bcc0
[ 2943.672893] [<c00393e4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c)
[ 2943.680129] r7:00000000 r6:00000000 r5:c00393e4 r4:c738bcc0
[ 2943.685832] ---[ end trace 886f614767d73d00 ]---
[ 2948.380193] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c6b3fc80] ***BUG*** skb:c64d1240 skb->dev:c6b3f800 skb->dev->name:wlan1-1
[ 2948.393616] ------------[ cut here ]------------
[ 2948.398271] WARNING: CPU: 1 PID: 615 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 2948.413860] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 2948.486196] CPU: 1 PID: 615 Comm: irq/33-brcmf_pc Tainted: G W 4.4.21 #0
[ 2948.494041] Hardware name: BCM5301X
[ 2948.497532] Backtrace:
[ 2948.500007] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 2948.507593] r7:00000046 r6:bf1d1146 r5:60000093 r4:00000000
[ 2948.513311] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 2948.520551] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 2948.528657] r5:00000009 r4:00000000
[ 2948.532256] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 2948.541061] r8:a0000013 r7:c6b3fdd0 r6:bf1c9f2d r5:c6b3fc80 r4:c64d1240
[ 2948.547836] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 2948.558053] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 2948.569288] r8:c04903c8 r7:c6b3fdd0 r6:c64d1240 r5:c7850340 r4:c6b3fc80
[ 2948.576060] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (brcmf_msgbuf_txdata+0x53c/0x6e8 [brcmfmac])
[ 2948.586860] r10:c64d1240 r9:cacd3340 r8:cacd3340 r7:c7388180 r6:00000003 r5:00000000
[ 2948.594747] r4:c7389c00
[ 2948.597307] [<bf1c3390>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf1c3964>] (brcmf_proto_msgbuf_rx_trigger+0x3c/0xd0 [brcmfmac])
[ 2948.608891] r10:00000000 r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:00010000
[ 2948.616776] r4:c7389c00
[ 2948.619336] [<bf1c3928>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf1c8004>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac])
[ 2948.631268] r7:c0057d98 r6:c7a0c240 r5:00010000 r4:c68fa800
[ 2948.636983] [<bf1c7e40>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057dbc>] (irq_thread_fn+0x24/0x3c)
[ 2948.646396] r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:c738ba40 r4:c738ba40
[ 2948.654198] [<c0057d98>] (irq_thread_fn) from [<c00580a0>] (irq_thread+0xf8/0x1e4)
[ 2948.661776] r7:c0057d98 r6:c7254000 r5:c738ba40 r4:c7a0c240
[ 2948.667483] [<c0057fa8>] (irq_thread) from [<c00394c4>] (kthread+0xe0/0xf4)
[ 2948.674458] r10:00000000 r9:00000000 r8:00000000 r7:c0057fa8 r6:c738ba40 r5:00000000
[ 2948.682343] r4:c738bcc0
[ 2948.684892] [<c00393e4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c)
[ 2948.692126] r7:00000000 r6:00000000 r5:c00393e4 r4:c738bcc0
[ 2948.697830] ---[ end trace 886f614767d73d01 ]---
[ 2948.705730] brcmfmac: CONSOLE: 029672.990 wl0.2: wlc_send_bar: seq 0x19 tid 0
[ 2956.055394] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c6b3fc80] ***BUG*** skb:c64d1240 skb->dev:c6b3f800 skb->dev->name:wlan1-1
[ 2956.068820] ------------[ cut here ]------------
[ 2956.073474] WARNING: CPU: 1 PID: 615 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 2956.089064] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 2956.161400] CPU: 1 PID: 615 Comm: irq/33-brcmf_pc Tainted: G W 4.4.21 #0
[ 2956.169245] Hardware name: BCM5301X
[ 2956.172735] Backtrace:
[ 2956.175211] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 2956.182798] r7:00000046 r6:bf1d1146 r5:60000093 r4:00000000
[ 2956.188515] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 2956.195754] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 2956.203861] r5:00000009 r4:00000000
[ 2956.207459] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 2956.216264] r8:a0000013 r7:c6b3fdd0 r6:bf1c9f2d r5:c6b3fc80 r4:c64d1240
[ 2956.223039] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 2956.233256] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 2956.244491] r8:c04903c8 r7:c6b3fdd0 r6:c64d1240 r5:c658ca80 r4:c6b3fc80
[ 2956.251264] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (brcmf_msgbuf_txdata+0x53c/0x6e8 [brcmfmac])
[ 2956.262064] r10:c64d1240 r9:cacd3530 r8:cacd3530 r7:c7388180 r6:00000021 r5:00000000
[ 2956.269950] r4:c7389c00
[ 2956.272509] [<bf1c3390>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf1c3964>] (brcmf_proto_msgbuf_rx_trigger+0x3c/0xd0 [brcmfmac])
[ 2956.284094] r10:00000000 r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:00010000
[ 2956.291980] r4:c7389c00
[ 2956.294539] [<bf1c3928>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf1c8004>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac])
[ 2956.306473] r7:c0057d98 r6:c7a0c240 r5:00010000 r4:c68fa800
[ 2956.312185] [<bf1c7e40>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057dbc>] (irq_thread_fn+0x24/0x3c)
[ 2956.321591] r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:c738ba40 r4:c738ba40
[ 2956.329393] [<c0057d98>] (irq_thread_fn) from [<c00580a0>] (irq_thread+0xf8/0x1e4)
[ 2956.336971] r7:c0057d98 r6:c7254000 r5:c738ba40 r4:c7a0c240
[ 2956.342677] [<c0057fa8>] (irq_thread) from [<c00394c4>] (kthread+0xe0/0xf4)
[ 2956.349653] r10:00000000 r9:00000000 r8:00000000 r7:c0057fa8 r6:c738ba40 r5:00000000
[ 2956.357538] r4:c738bcc0
[ 2956.360086] [<c00393e4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c)
[ 2956.367321] r7:00000000 r6:00000000 r5:c00393e4 r4:c738bcc0
[ 2956.373024] ---[ end trace 886f614767d73d02 ]---
[ 2966.060530] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c6b3fc80] ***BUG*** skb:c64d1240 skb->dev:c6b3f800 skb->dev->name:wlan1-1
[ 2966.073953] ------------[ cut here ]------------
[ 2966.078607] WARNING: CPU: 1 PID: 615 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 2966.094198] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 2966.166533] CPU: 1 PID: 615 Comm: irq/33-brcmf_pc Tainted: G W 4.4.21 #0
[ 2966.174378] Hardware name: BCM5301X
[ 2966.177869] Backtrace:
[ 2966.180345] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 2966.187931] r7:00000046 r6:bf1d1146 r5:60000093 r4:00000000
[ 2966.193648] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 2966.200887] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 2966.208994] r5:00000009 r4:00000000
[ 2966.212593] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 2966.221398] r8:a0000013 r7:c6b3fdd0 r6:bf1c9f2d r5:c6b3fc80 r4:c64d1240
[ 2966.228171] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 2966.238382] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 2966.249616] r8:c04903c8 r7:c6b3fdd0 r6:c64d1240 r5:c7850680 r4:c6b3fc80
[ 2966.256388] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (brcmf_msgbuf_txdata+0x53c/0x6e8 [brcmfmac])
[ 2966.267190] r10:c64d1240 r9:cacd3670 r8:cacd3670 r7:c7388180 r6:00000021 r5:00000001
[ 2966.275075] r4:c7389c00
[ 2966.277634] [<bf1c3390>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf1c3964>] (brcmf_proto_msgbuf_rx_trigger+0x3c/0xd0 [brcmfmac])
[ 2966.289219] r10:00000000 r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:00010000
[ 2966.297104] r4:c7389c00
[ 2966.299664] [<bf1c3928>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf1c8004>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac])
[ 2966.311596] r7:c0057d98 r6:c7a0c240 r5:00010000 r4:c68fa800
[ 2966.317311] [<bf1c7e40>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057dbc>] (irq_thread_fn+0x24/0x3c)
[ 2966.326724] r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:c738ba40 r4:c738ba40
[ 2966.334527] [<c0057d98>] (irq_thread_fn) from [<c00580a0>] (irq_thread+0xf8/0x1e4)
[ 2966.342112] r7:c0057d98 r6:c7254000 r5:c738ba40 r4:c7a0c240
[ 2966.347820] [<c0057fa8>] (irq_thread) from [<c00394c4>] (kthread+0xe0/0xf4)
[ 2966.354795] r10:00000000 r9:00000000 r8:00000000 r7:c0057fa8 r6:c738ba40 r5:00000000
[ 2966.362680] r4:c738bcc0
[ 2966.365229] [<c00393e4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c)
[ 2966.372464] r7:00000000 r6:00000000 r5:c00393e4 r4:c738bcc0
[ 2966.378166] ---[ end trace 886f614767d73d03 ]---
[ 2966.527066] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c6b3fc80] ***BUG*** skb:c64d1240 skb->dev:c6b3f800 skb->dev->name:wlan1-1
[ 2966.540487] ------------[ cut here ]------------
[ 2966.545141] WARNING: CPU: 1 PID: 615 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 2966.560731] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 2966.633066] CPU: 1 PID: 615 Comm: irq/33-brcmf_pc Tainted: G W 4.4.21 #0
[ 2966.640913] Hardware name: BCM5301X
[ 2966.644403] Backtrace:
[ 2966.646878] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 2966.654465] r7:00000046 r6:bf1d1146 r5:60000093 r4:00000000
[ 2966.660181] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 2966.667422] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 2966.675529] r5:00000009 r4:00000000
[ 2966.679127] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 2966.687932] r8:a0000013 r7:c6b3fdd0 r6:bf1c9f2d r5:c6b3fc80 r4:c64d1240
[ 2966.694703] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 2966.704915] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 2966.716149] r8:c04903c8 r7:c6b3fdd0 r6:c64d1240 r5:c78508c0 r4:c6b3fc80
[ 2966.722922] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (brcmf_msgbuf_txdata+0x53c/0x6e8 [brcmfmac])
[ 2966.733723] r10:c64d1240 r9:cacd3700 r8:cacd3700 r7:c7388180 r6:00000021 r5:00000000
[ 2966.741609] r4:c7389c00
[ 2966.744168] [<bf1c3390>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf1c3964>] (brcmf_proto_msgbuf_rx_trigger+0x3c/0xd0 [brcmfmac])
[ 2966.755753] r10:00000000 r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:00010000
[ 2966.763639] r4:c7389c00
[ 2966.766198] [<bf1c3928>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf1c8004>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac])
[ 2966.778131] r7:c0057d98 r6:c7a0c240 r5:00010000 r4:c68fa800
[ 2966.783843] [<bf1c7e40>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057dbc>] (irq_thread_fn+0x24/0x3c)
[ 2966.793250] r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:c738ba40 r4:c738ba40
[ 2966.801052] [<c0057d98>] (irq_thread_fn) from [<c00580a0>] (irq_thread+0xf8/0x1e4)
[ 2966.808630] r7:c0057d98 r6:c7254000 r5:c738ba40 r4:c7a0c240
[ 2966.814336] [<c0057fa8>] (irq_thread) from [<c00394c4>] (kthread+0xe0/0xf4)
[ 2966.821311] r10:00000000 r9:00000000 r8:00000000 r7:c0057fa8 r6:c738ba40 r5:00000000
[ 2966.829197] r4:c738bcc0
[ 2966.831745] [<c00393e4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c)
[ 2966.838981] r7:00000000 r6:00000000 r5:c00393e4 r4:c738bcc0
[ 2966.844683] ---[ end trace 886f614767d73d04 ]---
[ 2971.310626] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c6b3fc80] ***BUG*** skb:c64d1240 skb->dev:c6b3f800 skb->dev->name:wlan1-1
[ 2971.324049] ------------[ cut here ]------------
[ 2971.328703] WARNING: CPU: 1 PID: 615 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 2971.344293] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 2971.416627] CPU: 1 PID: 615 Comm: irq/33-brcmf_pc Tainted: G W 4.4.21 #0
[ 2971.424474] Hardware name: BCM5301X
[ 2971.427964] Backtrace:
[ 2971.430440] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 2971.438026] r7:00000046 r6:bf1d1146 r5:60000093 r4:00000000
[ 2971.443744] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 2971.450983] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 2971.459090] r5:00000009 r4:00000000
[ 2971.462688] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 2971.471492] r8:a0000013 r7:c6b3fdd0 r6:bf1c9f2d r5:c6b3fc80 r4:c64d1240
[ 2971.478268] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 2971.488486] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 2971.499728] r8:c04903c8 r7:c6b3fdd0 r6:c64d1240 r5:c658c080 r4:c6b3fc80
[ 2971.506501] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (brcmf_msgbuf_txdata+0x53c/0x6e8 [brcmfmac])
[ 2971.517302] r10:c64d1240 r9:cacd37f0 r8:cacd37f0 r7:c7388180 r6:00000021 r5:00000000
[ 2971.525187] r4:c7389c00
[ 2971.527746] [<bf1c3390>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf1c3964>] (brcmf_proto_msgbuf_rx_trigger+0x3c/0xd0 [brcmfmac])
[ 2971.539332] r10:00000000 r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:00010000
[ 2971.547217] r4:c7389c00
[ 2971.549777] [<bf1c3928>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf1c8004>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac])
[ 2971.561709] r7:c0057d98 r6:c7a0c240 r5:00010000 r4:c68fa800
[ 2971.567423] [<bf1c7e40>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057dbc>] (irq_thread_fn+0x24/0x3c)
[ 2971.576837] r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:c738ba40 r4:c738ba40
[ 2971.584639] [<c0057d98>] (irq_thread_fn) from [<c00580a0>] (irq_thread+0xf8/0x1e4)
[ 2971.592225] r7:c0057d98 r6:c7254000 r5:c738ba40 r4:c7a0c240
[ 2971.597933] [<c0057fa8>] (irq_thread) from [<c00394c4>] (kthread+0xe0/0xf4)
[ 2971.604908] r10:00000000 r9:00000000 r8:00000000 r7:c0057fa8 r6:c738ba40 r5:00000000
[ 2971.612793] r4:c738bcc0
[ 2971.615342] [<c00393e4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c)
[ 2971.622576] r7:00000000 r6:00000000 r5:c00393e4 r4:c738bcc0
[ 2971.628280] ---[ end trace 886f614767d73d05 ]---
[ 2972.173454] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c6b3fc80] ***BUG*** skb:c64d1240 skb->dev:c6b3f800 skb->dev->name:wlan1-1
[ 2972.186877] ------------[ cut here ]------------
[ 2972.191530] WARNING: CPU: 1 PID: 615 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 2972.207120] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 2972.279454] CPU: 1 PID: 615 Comm: irq/33-brcmf_pc Tainted: G W 4.4.21 #0
[ 2972.287301] Hardware name: BCM5301X
[ 2972.290792] Backtrace:
[ 2972.293266] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 2972.300854] r7:00000046 r6:bf1d1146 r5:60000093 r4:00000000
[ 2972.306572] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 2972.313812] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 2972.321917] r5:00000009 r4:00000000
[ 2972.325516] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 2972.334320] r8:a0000013 r7:c6b3fdd0 r6:bf1c9f2d r5:c6b3fc80 r4:c64d1240
[ 2972.341097] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 2972.351314] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 2972.362556] r8:c04903c8 r7:c6b3fdd0 r6:c64d1240 r5:c7850800 r4:c6b3fc80
[ 2972.369328] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (brcmf_msgbuf_txdata+0x53c/0x6e8 [brcmfmac])
[ 2972.380130] r10:c64d1240 r9:cacd3900 r8:cacd3900 r7:c7388180 r6:00000021 r5:00000000
[ 2972.388015] r4:c7389c00
[ 2972.390574] [<bf1c3390>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf1c3964>] (brcmf_proto_msgbuf_rx_trigger+0x3c/0xd0 [brcmfmac])
[ 2972.402158] r10:00000000 r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:00010000
[ 2972.410044] r4:c7389c00
[ 2972.412605] [<bf1c3928>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf1c8004>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac])
[ 2972.424536] r7:c0057d98 r6:c7a0c240 r5:00010000 r4:c68fa800
[ 2972.430251] [<bf1c7e40>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057dbc>] (irq_thread_fn+0x24/0x3c)
[ 2972.439665] r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:c738ba40 r4:c738ba40
[ 2972.447467] [<c0057d98>] (irq_thread_fn) from [<c00580a0>] (irq_thread+0xf8/0x1e4)
[ 2972.455054] r7:c0057d98 r6:c7254000 r5:c738ba40 r4:c7a0c240
[ 2972.460760] [<c0057fa8>] (irq_thread) from [<c00394c4>] (kthread+0xe0/0xf4)
[ 2972.467734] r10:00000000 r9:00000000 r8:00000000 r7:c0057fa8 r6:c738ba40 r5:00000000
[ 2972.475621] r4:c738bcc0
[ 2972.478169] [<c00393e4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c)
[ 2972.485403] r7:00000000 r6:00000000 r5:c00393e4 r4:c738bcc0
[ 2972.491107] ---[ end trace 886f614767d73d06 ]---
[ 2974.318618] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c6b3fc80] ***BUG*** skb:c64d1240 skb->dev:c6b3f800 skb->dev->name:wlan1-1
[ 2974.332046] ------------[ cut here ]------------
[ 2974.336700] WARNING: CPU: 1 PID: 615 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 2974.352291] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 2974.424626] CPU: 1 PID: 615 Comm: irq/33-brcmf_pc Tainted: G W 4.4.21 #0
[ 2974.432471] Hardware name: BCM5301X
[ 2974.435962] Backtrace:
[ 2974.438437] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 2974.446024] r7:00000046 r6:bf1d1146 r5:60000093 r4:00000000
[ 2974.451741] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 2974.458981] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 2974.467086] r5:00000009 r4:00000000
[ 2974.470685] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 2974.479482] r8:a0000013 r7:c6b3fdd0 r6:bf1c9f2d r5:c6b3fc80 r4:c64d1240
[ 2974.486259] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 2974.496474] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 2974.507708] r8:c04903c8 r7:c6b3fdd0 r6:c64d1240 r5:c658c3c0 r4:c6b3fc80
[ 2974.514481] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (brcmf_msgbuf_txdata+0x53c/0x6e8 [brcmfmac])
[ 2974.525282] r10:c64d1240 r9:cacd3a20 r8:cacd3a20 r7:c7388180 r6:00000021 r5:00000000
[ 2974.533168] r4:c7389c00
[ 2974.535727] [<bf1c3390>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf1c3964>] (brcmf_proto_msgbuf_rx_trigger+0x3c/0xd0 [brcmfmac])
[ 2974.547312] r10:00000000 r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:00010000
[ 2974.555198] r4:c7389c00
[ 2974.557757] [<bf1c3928>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf1c8004>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac])
[ 2974.569690] r7:c0057d98 r6:c7a0c240 r5:00010000 r4:c68fa800
[ 2974.575403] [<bf1c7e40>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057dbc>] (irq_thread_fn+0x24/0x3c)
[ 2974.584817] r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:c738ba40 r4:c738ba40
[ 2974.592619] [<c0057d98>] (irq_thread_fn) from [<c00580a0>] (irq_thread+0xf8/0x1e4)
[ 2974.600197] r7:c0057d98 r6:c7254000 r5:c738ba40 r4:c7a0c240
[ 2974.605905] [<c0057fa8>] (irq_thread) from [<c00394c4>] (kthread+0xe0/0xf4)
[ 2974.612879] r10:00000000 r9:00000000 r8:00000000 r7:c0057fa8 r6:c738ba40 r5:00000000
[ 2974.620765] r4:c738bcc0
[ 2974.623312] [<c00393e4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c)
[ 2974.630549] r7:00000000 r6:00000000 r5:c00393e4 r4:c738bcc0
[ 2974.636250] ---[ end trace 886f614767d73d07 ]---
[ 2975.049818] brcmfmac: [__brcmf_txfinalize -> __brcmu_pkt_buf_free_skb] [ifp:c6b3fc80] ***BUG*** skb:c64d1240 skb->dev:c6b3f800 skb->dev->name:wlan1-1
[ 2975.063243] ------------[ cut here ]------------
[ 2975.067897] WARNING: CPU: 1 PID: 615 at compat-wireless-2016-06-20/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c:70 __brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac]()
[ 2975.083488] Modules linked in: pppoe ppp_async iptable_nat brcmfmac pppox ppp_generic nf_nat_ipv4 nf_conntrack_ipv6 nf_conntrack_ipv4 ipt_REJECT ipt_MASQUERADE cfg80211 xt_time xt_tcpudp xt_state xt_nat xt_multiport xt_mark xt_mac xt_limit xt_id xt_conntrack xt_commed
[ 2975.155822] CPU: 1 PID: 615 Comm: irq/33-brcmf_pc Tainted: G W 4.4.21 #0
[ 2975.163668] Hardware name: BCM5301X
[ 2975.167159] Backtrace:
[ 2975.169634] [<c001708c>] (dump_backtrace) from [<c0017288>] (show_stack+0x18/0x1c)
[ 2975.177221] r7:00000046 r6:bf1d1146 r5:60000093 r4:00000000
[ 2975.182938] [<c0017270>] (show_stack) from [<c017d038>] (dump_stack+0x84/0xa4)
[ 2975.190177] [<c017cfb4>] (dump_stack) from [<c0021490>] (warn_slowpath_common+0x8c/0xb8)
[ 2975.198283] r5:00000009 r4:00000000
[ 2975.201882] [<c0021404>] (warn_slowpath_common) from [<c0021560>] (warn_slowpath_null+0x24/0x2c)
[ 2975.210688] r8:a0000013 r7:c6b3fdd0 r6:bf1c9f2d r5:c6b3fc80 r4:c64d1240
[ 2975.217465] [<c002153c>] (warn_slowpath_null) from [<bf1bd550>] (__brcmu_pkt_buf_free_skb+0x98/0x1ec [brcmfmac])
[ 2975.227681] [<bf1bd4b8>] (__brcmu_pkt_buf_free_skb [brcmfmac]) from [<bf1bde90>] (__brcmf_txfinalize+0x19c/0x1d0 [brcmfmac])
[ 2975.238923] r8:c04903c8 r7:c6b3fdd0 r6:c64d1240 r5:c7850b00 r4:c6b3fc80
[ 2975.245695] [<bf1bdcf4>] (__brcmf_txfinalize [brcmfmac]) from [<bf1c377c>] (brcmf_msgbuf_txdata+0x53c/0x6e8 [brcmfmac])
[ 2975.256496] r10:c64d1240 r9:cacd3c50 r8:cacd3c50 r7:c7388180 r6:00000021 r5:00000000
[ 2975.264381] r4:c7389c00
[ 2975.266941] [<bf1c3390>] (brcmf_msgbuf_txdata [brcmfmac]) from [<bf1c3964>] (brcmf_proto_msgbuf_rx_trigger+0x3c/0xd0 [brcmfmac])
[ 2975.278526] r10:00000000 r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:00010000
[ 2975.286411] r4:c7389c00
[ 2975.288971] [<bf1c3928>] (brcmf_proto_msgbuf_rx_trigger [brcmfmac]) from [<bf1c8004>] (brcmf_pcie_isr_thread+0x1c4/0x238 [brcmfmac])
[ 2975.300904] r7:c0057d98 r6:c7a0c240 r5:00010000 r4:c68fa800
[ 2975.306617] [<bf1c7e40>] (brcmf_pcie_isr_thread [brcmfmac]) from [<c0057dbc>] (irq_thread_fn+0x24/0x3c)
[ 2975.316032] r9:c0493882 r8:c738ba64 r7:c0057d98 r6:c7a0c240 r5:c738ba40 r4:c738ba40
[ 2975.323834] [<c0057d98>] (irq_thread_fn) from [<c00580a0>] (irq_thread+0xf8/0x1e4)
[ 2975.331420] r7:c0057d98 r6:c7254000 r5:c738ba40 r4:c7a0c240
[ 2975.337127] [<c0057fa8>] (irq_thread) from [<c00394c4>] (kthread+0xe0/0xf4)
[ 2975.344102] r10:00000000 r9:00000000 r8:00000000 r7:c0057fa8 r6:c738ba40 r5:00000000
[ 2975.351987] r4:c738bcc0
[ 2975.354535] [<c00393e4>] (kthread) from [<c00097b8>] (ret_from_fork+0x14/0x3c)
[ 2975.361770] r7:00000000 r6:00000000 r5:c00393e4 r4:c738bcc0
[ 2975.367473] ---[ end trace 886f614767d73d08 ]---
^ permalink raw reply
* RE: staging: wilc1000: kernel Oops while opening the device
From: Ganesh.Krishna @ 2016-09-22 12:34 UTC (permalink / raw)
To: gregkh, nicolas.ferre; +Cc: linux-wireless, Aditya.Shankar, luisbg
In-Reply-To: <20160919134201.GA25769@kroah.com>
>-----Original Message-----
>From: Greg Kroah-Hartman [mailto:gregkh@linuxfoundation.org]
>Sent: Monday, September 19, 2016 7:12 PM
>To: Nicolas Ferre
>Cc: linux-wireless@vger.kernel.org; Aditya Shankar - I16078; Ganesh Krishna - I00112; luisbg@osg.samsung.com
>Subject: Re: staging: wilc1000: kernel Oops while opening the device
>
>On Mon, Sep 19, 2016 at 02:06:02PM +0200, Nicolas Ferre wrote:
>> Hi all,
>>
>> While using the wilc1000 driver with latest 4.8-rc7, I have
>> difficulties to open the device and actually use it as I have this
>> kernel Oops right after the loading of the firmware (wilc1003_firmware.bin).
>>
>> If I revert back the driver to its
>> b9811891a9f60ca9c314dcab3244c65930c4cf37 state, it works okay. I did
>> this because I tend to think that it might be related to the latest move on this driver to "completion" or "work queues".
>> It seems to be a regression from 4.7.
>
>Ick, not good at all.
>
>Any chance you can run 'git bisect' to see if you can find the offending patch?
>
>I thought the maintainers were testing this driver over time :(
>thanks,
>
>greg k-h
Ick indeed. Maintainers are on it full time. Thank you very much for the flag. While I am only reporting activity, hope to have results soon.
Regards,
ganesh k
^ permalink raw reply
* Re: TCP data throughput for BCM43362
From: Jörg Krause @ 2016-09-22 12:52 UTC (permalink / raw)
To: Arend Van Spriel, Franky Lin
Cc: Brett Rudley, brcm80211-dev-list, Hante Meuleman, Franky Lin,
linux-wireless, Arend van Spriel
In-Reply-To: <64180601-8d99-09fe-2db5-06c4ed7dd5d6@broadcom.com>
[-- Attachment #1: Type: text/plain, Size: 14340 bytes --]
On Do, 2016-09-22 at 10:09 +0200, Arend Van Spriel wrote:
> On 19-9-2016 8:36, Jörg Krause wrote:
> >
> > Hi Arend,
> >
> > On Wed, 2016-09-14 at 20:13 +0200, Arend Van Spriel wrote:
> > >
> > > On 14-9-2016 15:41, Jörg Krause wrote:
> > > >
> > > >
> > > > Hi,
> > > >
> > > > On Mon, 2016-08-29 at 23:15 +0200, Jörg Krause wrote:
> > > > >
> > > > >
> > > > > On Mi, 2016-08-24 at 20:35 +0200, Arend Van Spriel wrote:
> > > > > >
> > > > > >
> > > > > >
> > > > > > On 22-8-2016 15:37, Jörg Krause wrote:
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > Hi all,
> > > > > > >
> > > > > > > I am back from vacation and I'd like to do more
> > > > > > > investigations
> > > > > > > about
> > > > > > > this issue. Please see my comments below...
> > > > > > >
> > > > > > > On Sun, 2016-08-07 at 13:41 +0200, Arend van Spriel
> > > > > > > wrote:
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > On 06-08-16 16:12, Jörg Krause wrote:
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > Hi all,
> > > > > > > >
> > > > > > > > A bit weird email format making it a bit hard to
> > > > > > > > determine
> > > > > > > > where
> > > > > > > > your
> > > > > > > > last reply starts...
> > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > On Fr, 2016-08-05 at 17:56 -0700, Franky Lin wrote:
> > > > > > > > >
> > > > > > > > > On Fri, Aug 5, 2016 at 2:29 PM, Jörg Krause
> > > > > > > > > <joerg.krause
> > > > > > > > > @emb
> > > > > > > > > ed
> > > > > > > > > ded.
> > > > > > > > > ro
> > > > > > > > > cks>
> > > > > > > > > wrote:
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > Am 5. August 2016 23:01:10 MESZ, schrieb Arend Van
> > > > > > > > > Spriel
> > > > > > > > > <
> > > > > > > > > arend.vanspriel@broadcom.com>:
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > Op 5 aug. 2016 22:46 schreef "Jörg Krause"
> > > > > > > > > <joerg.krause@embedded.rocks>:
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > Hi,
> > > > > > > > >
> > > > > > > > > I'm using a custom ARM board with an BCM43362 wifi
> > > > > > > > > chip
> > > > > > > > > from
> > > > > > > > >
> > > > > > > > > Broadcom.
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > The wifi chip is attached via SDIO to the controller
> > > > > > > > > with
> > > > > > > > > a
> > > > > > > > > clock of
> > > > > > > > > 48MHz. Linux kernel version is 4.7.
> > > > > > > > >
> > > > > > > > > When measuring the network bandwidth with iperf3 I
> > > > > > > > > get a
> > > > > > > > > bandwith of
> > > > > > > > > only around 5 Mbps. I found a similar thread at the
> > > > > > > > > Broadcom
> > > > > > > > >
> > > > > > > > > community
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > [1] where the test was done with a M4 CPU + BCM43362
> > > > > > > > > and
> > > > > > > > > an
> > > > > > > > > average
> > > > > > > > > result of 3.3 Mbps.
> > > > > > > > >
> > > > > > > > > Interestingly, a BCM43362 Wi-Fi Dev Kit [2] notes a
> > > > > > > > > TCP
> > > > > > > > > data
> > > > > > > > >
> > > > > > > > > throughput
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > greater than 20 Mbps.
> > > > > > > > >
> > > > > > > > > Why is the throughput I measured much lower? Note
> > > > > > > > > that I
> > > > > > > > > measured
> > > > > > > > > several times with almost no neighbor devices or
> > > > > > > > > networks.
> > > > > > > > >
> > > > > > > > > This is a test sample measured with iperf3:
> > > > > > > > >
> > > > > > > > > $ iperf3 -c 192.168.2.1 -i 1 -t 10
> > > > > > > > > Connecting to host 192.168.2.1, port 5201
> > > > > > > > > [ 4] local 192.168.2.155 port 36442 connected to
> > > > > > > > > 192.168.2.1
> > > > > > > > >
> > > > > > > > > port
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > 5201
> > > > > > > > > [ ID]
> > > > > > > > > Interval Transfer Bandwidth Retr
> > > > > > > > > Cwn
> > > > > > > > > d
> > > > > > > > > [ 4] 0.00-1.00 sec 615 KBytes 5.04
> > > > > > > > > Mbits/sec 0 56.6
> > > > > > > > > KBytes
> > > > > > > > > [ 4] 1.00-2.00 sec 622 KBytes 5.10
> > > > > > > > > Mbits/sec 0 84.8
> > > > > > > > > KBytes
> > > > > > > > > [ 4] 2.00-3.00 sec 625 KBytes 5.12
> > > > > > > > > Mbits/sec 0 113
> > > > > > > > > KBytes
> > > > > > > > > [ 4] 3.00-4.00 sec 571 KBytes 4.68
> > > > > > > > > Mbits/sec 0 140
> > > > > > > > > KBytes
> > > > > > > > > [ 4] 4.00-5.00 sec 594 KBytes 4.87
> > > > > > > > > Mbits/sec 0 167
> > > > > > > > > KBytes
> > > > > > > > > [ 4] 5.00-6.00 sec 628 KBytes 5.14
> > > > > > > > > Mbits/sec 0 195
> > > > > > > > > KBytes
> > > > > > > > > [ 4] 6.00-7.00 sec 619 KBytes 5.07
> > > > > > > > > Mbits/sec 0 202
> > > > > > > > > KBytes
> > > > > > > > > [ 4] 7.00-8.00 sec 608 KBytes 4.98
> > > > > > > > > Mbits/sec 0 202
> > > > > > > > > KBytes
> > > > > > > > > [ 4] 8.00-9.00 sec 602 KBytes 4.93
> > > > > > > > > Mbits/sec 0 202
> > > > > > > > > KBytes
> > > > > > > > > [ 4] 9.00-10.00 sec 537 KBytes 4.40
> > > > > > > > > Mbits/sec 0 202
> > > > > > > > > KBytes
> > > > > > > > > - - - - - - - - - - - - - - - - - - - - - - - - -
> > > > > > > > > [ ID]
> > > > > > > > > Interval Transfer Bandwidth Retr
> > > > > > > > > [ 4] 0.00-10.00 sec 5.88 MBytes 4.93
> > > > > > > > > Mbits/sec 0 sender
> > > > > > > > > [ 4] 0.00-10.00 sec 5.68 MBytes 4.76
> > > > > > > > > Mbits/sec receiver
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > Not overly familiar with iperf3. Do these lines mean
> > > > > > > > > you
> > > > > > > > > are
> > > > > > > > > doing
> > > > > > > > > bidirectional test, ie. upstream and downstream at
> > > > > > > > > the
> > > > > > > > > same
> > > > > > > > > time.
> > > > > > > > > Another
> > > > > > > > > thing affecting tput could be power-save.
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > No, iperf3 does not support bidrectional test. Power-
> > > > > > > > > save
> > > > > > > > > is
> > > > > > > > > turned
> > > > > > > > > off.
> > > > > > > > >
> > > > > > > > > What does iw link say?
> > > > > > > > >
> > > > > > > >
> > > > > > > > but I guess it starts here!
> > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > I compared the results with a Cubietruck I have:
> > > > > > > > >
> > > > > > > > > # iperf3 -s
> > > > > > > > > ---------------------------------------------------
> > > > > > > > > ----
> > > > > > > > > ----
> > > > > > > > > Server listening on 5201
> > > > > > > > > ---------------------------------------------------
> > > > > > > > > ----
> > > > > > > > > ----
> > > > > > > > > Accepted connection from 192.168.178.46, port 42906
> > > > > > > > > [ 5] local 192.168.178.38 port 5201 connected to
> > > > > > > > > 192.168.178.46
> > > > > > > > > port
> > > > > > > > > 42908
> > > > > > > > > [ ID] Interval Transfer Bandwidth
> > > > > > > > > [ 5] 0.00-1.00 sec 2.29 MBytes 19.2
> > > > > > > > > Mbits/sec
> > > > > > > > > [ 5] 1.00-2.00 sec 2.21 MBytes 18.5
> > > > > > > > > Mbits/sec
> > > > > > > > > [ 5] 2.00-3.00 sec 2.17 MBytes 18.2
> > > > > > > > > Mbits/sec
> > > > > > > > > [ 5] 3.00-4.00 sec 2.09 MBytes 17.6
> > > > > > > > > Mbits/sec
> > > > > > > > > [ 5] 4.00-5.00 sec 2.20 MBytes 18.5
> > > > > > > > > Mbits/sec
> > > > > > > > > [ 5] 5.00-6.00 sec 2.64 MBytes 22.1
> > > > > > > > > Mbits/sec
> > > > > > > > > [ 5] 6.00-7.00 sec 2.67 MBytes 22.4
> > > > > > > > > Mbits/sec
> > > > > > > > > [ 5] 7.00-8.00 sec 2.62 MBytes 22.0
> > > > > > > > > Mbits/sec
> > > > > > > > > [ 5] 8.00-9.00 sec 2.35 MBytes 19.8
> > > > > > > > > Mbits/sec
> > > > > > > > > [ 5] 9.00-10.00 sec 2.30 MBytes 19.3
> > > > > > > > > Mbits/sec
> > > > > > > > > [ 5] 10.00-10.03 sec 83.4 KBytes 23.5
> > > > > > > > > Mbits/sec
> > > > > > > > > - - - - - - - - - - - - - - - - - - - - - - - - -
> > > > > > > > > [ ID]
> > > > > > > > > Interval Transfer Bandwidth Retr
> > > > > > > > > [ 5] 0.00-10.03 sec 23.9 MBytes 20.0
> > > > > > > > > Mbits/sec 0 sender
> > > > > > > > > [ 5] 0.00-10.03 sec 23.6 MBytes 19.8
> > > > > > > > > Mbits/sec receiver
> > > > > > > > >
> > > > > > > > > # iw dev wlan0 link
> > > > > > > > > Connected to xx:xx:xx:xx:xx (on wlan0)
> > > > > > > > > SSID: xxx
> > > > > > > > > freq: 2437
> > > > > > > > > tx bitrate: 65.0 MBit/s
> > > > > > > > >
> > > > > > > > > bss flags: short-preamble short-slot-
> > > > > > > > > time
> > > > > > > > > dtim period: 1
> > > > > > > > > beacon int: 100
> > > > > > > >
> > > > > > > > Too bad RSSI is not in the output above. That may be
> > > > > > > > due to
> > > > > > > > a
> > > > > > > > regression
> > > > > > > > in our driver which has been fixed by commit
> > > > > > > > 94abd778a7bb
> > > > > > > > ("brcmfmac:
> > > > > > > > add fallback for devices that do not report per-chain
> > > > > > > > values").
> > > > > > > > However,
> > > > > > > > the tx bitrate seems within the same range as the other
> > > > > > > > platform.
> > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > The Cubietruck works also with the brcmfmac driver.
> > > > > > > > >
> > > > > > > > > May it depend on the NVRAM file?
> > > > > > > >
> > > > > > > > Not sure. Can you tell me a bit more about the custom
> > > > > > > > ARM
> > > > > > > > board.
> > > > > > > > Does
> > > > > > > > it
> > > > > > > > use the same wifi module as Cubietruck, ie. the AMPAK
> > > > > > > > AP6210?
> > > > > > > > If
> > > > > > > > you
> > > > > > > > can
> > > > > > > > make a wireshark sniff we can check the actual bitrate
> > > > > > > > and
> > > > > > > > medium
> > > > > > > > density in terms of packets. Another thing to look at
> > > > > > > > is
> > > > > > > > the
> > > > > > > > SDIO
> > > > > > > > host
> > > > > > > > controller. In brcmf_sdiod_sgtable_alloc() some key
> > > > > > > > values
> > > > > > > > are
> > > > > > > > used
> > > > > > > > from
> > > > > > > > the host controller. It only logs the number of entries
> > > > > > > > of
> > > > > > > > the
> > > > > > > > scatter-gather table, but could you add the other
> > > > > > > > values in
> > > > > > > > this
> > > > > > > > function that are used to determine the number of
> > > > > > > > entries.
> > > > > > >
> > > > > > > My board uses the BCM43362 chip solely (no Bluetooth)
> > > > > > > attached to
> > > > > > > the
> > > > > > > SDIO interface of a NXP i.MX28 processor.
> > > > > > >
> > > > > > > I added some additional printk() to
> > > > > > > brcmf_sdiod_sgtable_alloc().
> > > > > > > These
> > > > > > > are the values printed after modprobe brcmfmac:
> > > > > > >
> > > > > > > [ 8.926657] sg_support=1
> > > > > > > [ 8.929440] max_blocks=511
> > > > > > > [ 8.932213] max_request_size=261632
> > > > > > > [ 8.935741] max_segment_count=52
> > > > > > > [ 8.939005] max_segment_size=65280
> > > > > > > [ 8.946095] nents=35
> > > > > >
> > > > > > Thanks. That looks good.
> > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > Additionally I attached a xz compresses wireshark sniff
> > > > > > > while
> > > > > > > running
> > > > > > > iper3 between the BCM43362 running as in AP mode with
> > > > > > > iperf3
> > > > > > > as a
> > > > > > > server and a PC in station mode running iperf3 as a
> > > > > > > client.
> > > > > >
> > > > > > Looking at the sniff it seems you captured on the ethernet
> > > > > > side.
> > > > > > That
> > > > > > does not give me any 802.11 specific info. Can you make a
> > > > > > wireless
> > > > > > capture preferably without encryption.
> > > > >
> > > > > You,re right! Sorry for this mistake. I did a re-capture on
> > > > > the
> > > > > wireless side now.
> > > >
> > > > Anything new about this? Anything I can do to help?
> > >
> > > I missed your previous email. Was already wondering whether to
> > > ping
> > > you.
> > > Digging around in my email folders I found it so will take a look
> > > at
> > > it.
> >
> > Did you had some time to look at this?
>
> Ehm. I still only see TCP stuff. To capture 802.11 management frames
> you
> need preferably a dedicated device using monitor mode [1].
Stupid me! Now I used a monitor interface on a desktop to monitor the
traffic between the BCM43362 operating in soft-AP mode and a notebook
operating in managed mode.
The BCM43362 runs the iperf server, the notebook the iperf client.
Best regards
Jörg Krause
[-- Attachment #2: bcm43362.pcapng.xz --]
[-- Type: application/x-xz, Size: 590240 bytes --]
^ permalink raw reply
* Re: ath9k_htc kernel driver regression affecting throughput
From: Ben Greear @ 2016-09-22 13:34 UTC (permalink / raw)
To: bruce m beach; +Cc: Oleksij Rempel, linux-wireless
In-Reply-To: <CAArymC=VT+1E=-ug1yaVquW0jVvbFfZ0USzRcsRD62tSR-9FRA@mail.gmail.com>
On 09/21/2016 09:53 PM, bruce m beach wrote:
> memory will be very tight. There is 160k or known ram and bits and pieces
> elsewhere. The rom is 24k (maximum). I currently am not to worried about
> it. (although I am watching it)
> bruce
Probably you know this...but check structs for memory holes, unused
fields (write only, for instance) and other wastes.
ath10k firmware was full of needless memory bloat in those areas.
Global pointers can be used in some cases to help, but mysteriously
seem to cause more instruction RAM in some cases.
Watch 'instruction ram' usage: Changing code to use a bitfield may save
some BSS ram, but may easily use far more instruction ram than what you
saved with the bitfield.
Good luck!
Thanks,
Ben
>
> On 9/21/16, Ben Greear <greearb@candelatech.com> wrote:
>>
>>
>> On 09/21/2016 08:34 PM, bruce m beach wrote:
>>
>>>>> i.e a lable that the code jumps to and nothing else. At this point I
>>>>> have
>>>>> added VendorCommand(), and a debugger via ep0. ( ep0 is a good choice
>>>>> since it is available a boot, no matter what) and over the next few
>>>>> months I am going to move ->all<- the rom code into ram starting with
>>>>> the USB subsystem.
>>
>> Have you investigated whether you have enough RAM to do this?
>>
>> I haven't looked at ath9k_htc, but in general, that type of architecture
>> is tight on RAM in my experience.
>>
>> Thanks,
>> Ben
>>
>> --
>> Ben Greear <greearb@candelatech.com>
>> Candela Technologies Inc http://www.candelatech.com
>>
>
--
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc http://www.candelatech.com
^ permalink raw reply
* Re: brcmf_txfinalize misses 802.1x packet leading to infinite WARNINGs
From: Rafał Miłecki @ 2016-09-22 14:09 UTC (permalink / raw)
To: Hante Meuleman, Arend van Spriel, brcm80211 development
Cc: linux-wireless@vger.kernel.org
In-Reply-To: <bdc7e4d1-0d96-c8ed-e07a-fdb19c1265d8@gmail.com>
On 22 September 2016 at 14:24, Rafa=C5=82 Mi=C5=82ecki <zajec5@gmail.com> w=
rote:
> On 09/22/2016 01:59 PM, Rafa=C5=82 Mi=C5=82ecki wrote:
>>
>> And again...
>>
>> I decided to focus on brcmf_flowring_delete a bit more.
>>
>> As I can see flowrings are created and removed from time to time, in mos=
t
>> cases
>> they are empty when being deleted. When they are not, things go wrong. I=
n
>> below
>> log you can see brcmfmac removing flowring that got 8 skb packets.
>>
>> First some summary, of what was already partially noticed in previous
>> e-mail:
>> 1) brcmf_flowring_delete calls brcmu_pkt_buf_free_skb directly bypassing
>> brcmf_txfinalize. It means tracing 802.1x packets and counting TX
>> errors is
>> broken.
>> 2) After freeing skb (as the result of brcmf_flowring_delete) there will
>> still
>> an IRQ, MSGBUF_TYPE_TX_STATUS and call to the brcmf_txfinalize. That'=
s
>> definitely unexpected as brcmf_txfinalize will be operating on skb th=
at
>> was
>> already freed.
>>
>> Now, there is something new that looks even worse. Sometimes
>> brcmf_txfinalize
>> may be called multiple times for the same skb! Take a close look at my
>> log.
>> It was called twice for skb c64a5a80. Twice for c64a5480. Twice for
>> c64a5f00.
>> Then Linux/device rebooted itself due to amount of console messages.
>
>
> I got the same problem again, but this time there was only 1 skb in my
> flowring.
> That resulted in less serial console messages and no reboot.
>
> It doesn't look good. brcmf_txfinalize was called 11 times after deleting
> flowring. Everytime it was working with the same skb that was already fre=
ed.
I'm wondering if there is some bug in flowring code. Please take a
look if my following understanding it correct.
1) Every skb that is supposed to reach the device gets queued on a flowring=
.
2) Dequeuing means skb is not available in a flowring anymore
3a) brcmf_msgbuf_txflow dequeues skbs to pass them to the firmware
3b) brcmf_flowring_delete dequeues skbs to delete (free) them
If that simple description is correct, it shouldn't be possible to skb to:
1) Reach the firmware
*and*
2) Get freed as part of flowring deletion
But this is what seems to be happening in my case. We get one skb
freed on flowring deletion and then reported as transmitted (sometimes
multiple times) by the firmware.
Maybe there is simply a race between brcmf_flowring_delete and
brcmf_msgbuf_txflow?
^ permalink raw reply
* Re: rtl8192ce:rtl92ce_get_hw_reg():<0-0> switch case not processed
From: Larry Finger @ 2016-09-22 15:09 UTC (permalink / raw)
To: Jean Delvare, Chaoming Li; +Cc: linux-wireless
In-Reply-To: <20160922115116.149c599c@endymion>
[-- Attachment #1: Type: text/plain, Size: 1409 bytes --]
On 09/22/2016 04:51 AM, Jean Delvare wrote:
> Hello,
>
> I bought an Asus PCE-N10 PCIe Wi-Fi N card to install in my wife's
> computer. This morning it stopped working suddenly. Investigating the
> kernel logs, the following error message caught my eye:
>
> rtl8192ce:rtl92ce_get_hw_reg():<0-0> switch case not processed
>
> It was printed twice, 3.5 hours apart, the second time at the moment
> the network stopped working. I guess this is not supposed to happen.
> What additional information can I provide to help you debug the issue?
> That's the device:
>
> 03:00.0 Network controller [0280]: Realtek Semiconductor Co., Ltd. RTL8188CE 802.11b/g/n WiFi Adapter [10ec:8176] (rev 01)
> Subsystem: ASUSTeK Computer Inc. Device [1043:84b5]
> Flags: bus master, fast devsel, latency 0, IRQ 17
> I/O ports at e800 [size=256]
> Memory at febfc000 (64-bit, non-prefetchable) [size=16K]
> Capabilities: <access denied>
> Kernel driver in use: rtl8192ce
> Kernel modules: rtl8192ce
>
> Kernel version is 4.5.4-1-default x86_64 (openSUSE Tumbleweed.)
>
> Reloading the rtl8192ce module and restarting the network service got
> everything back up.
Unfortunately, that message is not as helpful as it might be.
Do you build your own kernel, or are you using openSUSE's supplied version? If
the latter, I will need to think how we might debug the issue. If the former,
please add the attached patch.
Larry
[-- Attachment #2: rtl8192ce_debug.diff --]
[-- Type: text/x-diff, Size: 518 bytes --]
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.c
index 04eb5c3..e0c7d36 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.c
@@ -143,7 +143,7 @@ void rtl92ce_get_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
}
default:
RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
- "switch case not processed\n");
+ "switch case %d not processed\n", variable);
break;
}
}
^ permalink raw reply related
* [PATCH v9 0/2] mac80211: TXQ dequeue path rework
From: Toke Høiland-Jørgensen @ 2016-09-22 17:04 UTC (permalink / raw)
To: make-wifi-fast, linux-wireless; +Cc: Toke Høiland-Jørgensen
In-Reply-To: <20160906114426.25520-1-toke@toke.dk>
This is the ninth iteration of my attempts to reorder the TXQ dequeue
path to avoid issues with reorder-sensitive operations. This version is
split into two patches; the first one moves ieee80211_tx_dequeue() to
avoid adding function stubs at the top of tx.c.
Changes since v8:
- Don't add function stubs to the beginning of tx.c
- Don't use control.hw_key from the dequeued packet, since that can go
away while the packet is queued. Instead, run the select_key handler
on dequeue and use the key from that.
- Change places that check tin.backlog_packets as an indication of
whether the TXQ has anything queued to also look at the 'frags' queue.
- Don't change the order of the select_key handler with respect to the
other handlers.
- Rebase on current mac80211-next tree.
Toke H=C3=B8iland-J=C3=B8rgensen (2):
mac80211: Move ieee802111_tx_dequeue() to later in tx.c
mac80211: Move reorder-sensitive TX handlers to after TXQ dequeue
include/net/mac80211.h | 2 +
net/mac80211/ieee80211_i.h | 8 ++
net/mac80211/rx.c | 4 +-
net/mac80211/sta_info.c | 10 +-
net/mac80211/tx.c | 335 +++++++++++++++++++++++++++++++--------=
------
net/mac80211/util.c | 11 +-
6 files changed, 256 insertions(+), 114 deletions(-)
--=20
2.9.3
base-commit: c13ed534b8db543e4d8ead3885f4b06585a5771c
^ permalink raw reply
* [PATCH v9 1/2] mac80211: Move ieee802111_tx_dequeue() to later in tx.c
From: Toke Høiland-Jørgensen @ 2016-09-22 17:04 UTC (permalink / raw)
To: make-wifi-fast, linux-wireless; +Cc: Toke Høiland-Jørgensen
In-Reply-To: <20160906114426.25520-1-toke@toke.dk>
The TXQ path restructure requires ieee80211_tx_dequeue() to call TX
handlers and parts of the xmit_fast path. Move the function to later in
tx.c in preparation for this.
Signed-off-by: Toke H=C3=B8iland-J=C3=B8rgensen <toke@toke.dk>
---
net/mac80211/tx.c | 90 +++++++++++++++++++++++++++----------------------=
------
1 file changed, 45 insertions(+), 45 deletions(-)
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 61d302d..e8c9964 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1476,51 +1476,6 @@ void ieee80211_txq_teardown_flows(struct ieee80211=
_local *local)
spin_unlock_bh(&fq->lock);
}
=20
-struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw,
- struct ieee80211_txq *txq)
-{
- struct ieee80211_local *local =3D hw_to_local(hw);
- struct txq_info *txqi =3D container_of(txq, struct txq_info, txq);
- struct ieee80211_hdr *hdr;
- struct sk_buff *skb =3D NULL;
- struct fq *fq =3D &local->fq;
- struct fq_tin *tin =3D &txqi->tin;
-
- spin_lock_bh(&fq->lock);
-
- if (test_bit(IEEE80211_TXQ_STOP, &txqi->flags))
- goto out;
-
- skb =3D fq_tin_dequeue(fq, tin, fq_tin_dequeue_func);
- if (!skb)
- goto out;
-
- ieee80211_set_skb_vif(skb, txqi);
-
- hdr =3D (struct ieee80211_hdr *)skb->data;
- if (txq->sta && ieee80211_is_data_qos(hdr->frame_control)) {
- struct sta_info *sta =3D container_of(txq->sta, struct sta_info,
- sta);
- struct ieee80211_tx_info *info =3D IEEE80211_SKB_CB(skb);
-
- hdr->seq_ctrl =3D ieee80211_tx_next_seq(sta, txq->tid);
- if (test_bit(IEEE80211_TXQ_AMPDU, &txqi->flags))
- info->flags |=3D IEEE80211_TX_CTL_AMPDU;
- else
- info->flags &=3D ~IEEE80211_TX_CTL_AMPDU;
- }
-
-out:
- spin_unlock_bh(&fq->lock);
-
- if (skb && skb_has_frag_list(skb) &&
- !ieee80211_hw_check(&local->hw, TX_FRAG_LIST))
- skb_linearize(skb);
-
- return skb;
-}
-EXPORT_SYMBOL(ieee80211_tx_dequeue);
-
static bool ieee80211_tx_frags(struct ieee80211_local *local,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
@@ -3311,6 +3266,51 @@ static bool ieee80211_xmit_fast(struct ieee80211_s=
ub_if_data *sdata,
return true;
}
=20
+struct sk_buff *ieee80211_tx_dequeue(struct ieee80211_hw *hw,
+ struct ieee80211_txq *txq)
+{
+ struct ieee80211_local *local =3D hw_to_local(hw);
+ struct txq_info *txqi =3D container_of(txq, struct txq_info, txq);
+ struct ieee80211_hdr *hdr;
+ struct sk_buff *skb =3D NULL;
+ struct fq *fq =3D &local->fq;
+ struct fq_tin *tin =3D &txqi->tin;
+
+ spin_lock_bh(&fq->lock);
+
+ if (test_bit(IEEE80211_TXQ_STOP, &txqi->flags))
+ goto out;
+
+ skb =3D fq_tin_dequeue(fq, tin, fq_tin_dequeue_func);
+ if (!skb)
+ goto out;
+
+ ieee80211_set_skb_vif(skb, txqi);
+
+ hdr =3D (struct ieee80211_hdr *)skb->data;
+ if (txq->sta && ieee80211_is_data_qos(hdr->frame_control)) {
+ struct sta_info *sta =3D container_of(txq->sta, struct sta_info,
+ sta);
+ struct ieee80211_tx_info *info =3D IEEE80211_SKB_CB(skb);
+
+ hdr->seq_ctrl =3D ieee80211_tx_next_seq(sta, txq->tid);
+ if (test_bit(IEEE80211_TXQ_AMPDU, &txqi->flags))
+ info->flags |=3D IEEE80211_TX_CTL_AMPDU;
+ else
+ info->flags &=3D ~IEEE80211_TX_CTL_AMPDU;
+ }
+
+out:
+ spin_unlock_bh(&fq->lock);
+
+ if (skb && skb_has_frag_list(skb) &&
+ !ieee80211_hw_check(&local->hw, TX_FRAG_LIST))
+ skb_linearize(skb);
+
+ return skb;
+}
+EXPORT_SYMBOL(ieee80211_tx_dequeue);
+
void __ieee80211_subif_start_xmit(struct sk_buff *skb,
struct net_device *dev,
u32 info_flags)
--=20
2.9.3
^ permalink raw reply related
* [PATCH v9 2/2] mac80211: Move reorder-sensitive TX handlers to after TXQ dequeue
From: Toke Høiland-Jørgensen @ 2016-09-22 17:04 UTC (permalink / raw)
To: make-wifi-fast, linux-wireless; +Cc: Toke Høiland-Jørgensen
In-Reply-To: <20160906114426.25520-1-toke@toke.dk>
The TXQ intermediate queues can cause packet reordering when more than
one flow is active to a single station. Since some of the wifi-specific
packet handling (notably sequence number and encryption handling) is
sensitive to re-ordering, things break if they are applied before the
TXQ.
This splits up the TX handlers and fast_xmit logic into two parts: An
early part and a late part. The former is applied before TXQ enqueue,
and the latter after dequeue. The non-TXQ path just applies both parts
at once.
Because fragments shouldn't be split up or reordered, the fragmentation
handler is run after dequeue. Any fragments are then kept in the TXQ and
on subsequent dequeues they take precedence over dequeueing from the FQ
structure.
This approach avoids having to scatter special cases all over the place
for when TXQ is enabled, at the cost of making the fast_xmit and TX
handler code slightly more complex.
Signed-off-by: Toke H=C3=B8iland-J=C3=B8rgensen <toke@toke.dk>
---
include/net/mac80211.h | 2 +
net/mac80211/ieee80211_i.h | 8 ++
net/mac80211/rx.c | 4 +-
net/mac80211/sta_info.c | 10 +-
net/mac80211/tx.c | 287 +++++++++++++++++++++++++++++++++------=
------
net/mac80211/util.c | 11 +-
6 files changed, 232 insertions(+), 90 deletions(-)
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 5296100..9463039 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -715,6 +715,7 @@ enum mac80211_tx_info_flags {
* frame (PS-Poll or uAPSD).
* @IEEE80211_TX_CTRL_RATE_INJECT: This frame is injected with rate info=
rmation
* @IEEE80211_TX_CTRL_AMSDU: This frame is an A-MSDU frame
+ * @IEEE80211_TX_CTRL_FAST_XMIT: This frame is going through the fast_xm=
it path
*
* These flags are used in tx_info->control.flags.
*/
@@ -723,6 +724,7 @@ enum mac80211_tx_control_flags {
IEEE80211_TX_CTRL_PS_RESPONSE =3D BIT(1),
IEEE80211_TX_CTRL_RATE_INJECT =3D BIT(2),
IEEE80211_TX_CTRL_AMSDU =3D BIT(3),
+ IEEE80211_TX_CTRL_FAST_XMIT =3D BIT(4),
};
=20
/*
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index c71c735..caca265 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -813,12 +813,14 @@ enum txq_info_flags {
* @def_flow: used as a fallback flow when a packet destined to @tin has=
hes to
* a fq_flow which is already owned by a different tin
* @def_cvars: codel vars for @def_flow
+ * @frags: used to keep fragments created after dequeue
*/
struct txq_info {
struct fq_tin tin;
struct fq_flow def_flow;
struct codel_vars def_cvars;
struct codel_stats cstats;
+ struct sk_buff_head frags;
unsigned long flags;
=20
/* keep last! */
@@ -1481,6 +1483,12 @@ static inline struct txq_info *to_txq_info(struct =
ieee80211_txq *txq)
return container_of(txq, struct txq_info, txq);
}
=20
+static inline bool txq_has_queue(struct ieee80211_txq *txq)
+{
+ struct txq_info *txqi =3D to_txq_info(txq);
+ return !(skb_queue_empty(&txqi->frags) && !txqi->tin.backlog_packets);
+}
+
static inline int ieee80211_bssid_match(const u8 *raddr, const u8 *addr)
{
return ether_addr_equal(raddr, addr) ||
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index e796060..ae5786b8 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1323,9 +1323,7 @@ static void sta_ps_start(struct sta_info *sta)
return;
=20
for (tid =3D 0; tid < ARRAY_SIZE(sta->sta.txq); tid++) {
- struct txq_info *txqi =3D to_txq_info(sta->sta.txq[tid]);
-
- if (txqi->tin.backlog_packets)
+ if (txq_has_queue(sta->sta.txq[tid]))
set_bit(tid, &sta->txq_buffered_tids);
else
clear_bit(tid, &sta->txq_buffered_tids);
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index 1b1b28f..167bff0 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -1212,12 +1212,10 @@ void ieee80211_sta_ps_deliver_wakeup(struct sta_i=
nfo *sta)
=20
if (sta->sta.txq[0]) {
for (i =3D 0; i < ARRAY_SIZE(sta->sta.txq); i++) {
- struct txq_info *txqi =3D to_txq_info(sta->sta.txq[i]);
-
- if (!txqi->tin.backlog_packets)
+ if (!txq_has_queue(sta->sta.txq[i]))
continue;
=20
- drv_wake_tx_queue(local, txqi);
+ drv_wake_tx_queue(local, to_txq_info(sta->sta.txq[i]));
}
}
=20
@@ -1649,9 +1647,7 @@ ieee80211_sta_ps_deliver_response(struct sta_info *=
sta,
return;
=20
for (tid =3D 0; tid < ARRAY_SIZE(sta->sta.txq); tid++) {
- struct txq_info *txqi =3D to_txq_info(sta->sta.txq[tid]);
-
- if (!(tids & BIT(tid)) || txqi->tin.backlog_packets)
+ if (!(tids & BIT(tid)) || txq_has_queue(sta->sta.txq[tid]))
continue;
=20
sta_info_recalc_tim(sta);
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index e8c9964..75e6adf 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -853,8 +853,7 @@ ieee80211_tx_h_sequence(struct ieee80211_tx_data *tx)
tid =3D *qc & IEEE80211_QOS_CTL_TID_MASK;
tx->sta->tx_stats.msdu[tid]++;
=20
- if (!tx->sta->sta.txq[0])
- hdr->seq_ctrl =3D ieee80211_tx_next_seq(tx->sta, tid);
+ hdr->seq_ctrl =3D ieee80211_tx_next_seq(tx->sta, tid);
=20
return TX_CONTINUE;
}
@@ -1404,6 +1403,7 @@ void ieee80211_txq_init(struct ieee80211_sub_if_dat=
a *sdata,
fq_flow_init(&txqi->def_flow);
codel_vars_init(&txqi->def_cvars);
codel_stats_init(&txqi->cstats);
+ __skb_queue_head_init(&txqi->frags);
=20
txqi->txq.vif =3D &sdata->vif;
=20
@@ -1426,6 +1426,7 @@ void ieee80211_txq_purge(struct ieee80211_local *lo=
cal,
struct fq_tin *tin =3D &txqi->tin;
=20
fq_tin_reset(fq, tin, fq_skb_free_func);
+ ieee80211_purge_tx_queue(&local->hw, &txqi->frags);
}
=20
int ieee80211_txq_setup_flows(struct ieee80211_local *local)
@@ -1476,6 +1477,47 @@ void ieee80211_txq_teardown_flows(struct ieee80211=
_local *local)
spin_unlock_bh(&fq->lock);
}
=20
+static bool ieee80211_queue_skb(struct ieee80211_local *local,
+ struct ieee80211_sub_if_data *sdata,
+ struct sta_info *sta,
+ struct sk_buff *skb)
+{
+ struct ieee80211_tx_info *info =3D IEEE80211_SKB_CB(skb);
+ struct fq *fq =3D &local->fq;
+ struct ieee80211_vif *vif;
+ struct txq_info *txqi;
+ struct ieee80211_sta *pubsta;
+
+ if (!local->ops->wake_tx_queue ||
+ sdata->vif.type =3D=3D NL80211_IFTYPE_MONITOR)
+ return false;
+
+ if (sta && sta->uploaded)
+ pubsta =3D &sta->sta;
+ else
+ pubsta =3D NULL;
+
+ if (sdata->vif.type =3D=3D NL80211_IFTYPE_AP_VLAN)
+ sdata =3D container_of(sdata->bss,
+ struct ieee80211_sub_if_data, u.ap);
+
+ vif =3D &sdata->vif;
+ txqi =3D ieee80211_get_txq(local, vif, pubsta, skb);
+
+ if (!txqi)
+ return false;
+
+ info->control.vif =3D vif;
+
+ spin_lock_bh(&fq->lock);
+ ieee80211_txq_enqueue(local, txqi, skb);
+ spin_unlock_bh(&fq->lock);
+
+ drv_wake_tx_queue(local, txqi);
+
+ return true;
+}
+
static bool ieee80211_tx_frags(struct ieee80211_local *local,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
@@ -1483,9 +1525,7 @@ static bool ieee80211_tx_frags(struct ieee80211_loc=
al *local,
bool txpending)
{
struct ieee80211_tx_control control =3D {};
- struct fq *fq =3D &local->fq;
struct sk_buff *skb, *tmp;
- struct txq_info *txqi;
unsigned long flags;
=20
skb_queue_walk_safe(skbs, skb, tmp) {
@@ -1500,21 +1540,6 @@ static bool ieee80211_tx_frags(struct ieee80211_lo=
cal *local,
}
#endif
=20
- txqi =3D ieee80211_get_txq(local, vif, sta, skb);
- if (txqi) {
- info->control.vif =3D vif;
-
- __skb_unlink(skb, skbs);
-
- spin_lock_bh(&fq->lock);
- ieee80211_txq_enqueue(local, txqi, skb);
- spin_unlock_bh(&fq->lock);
-
- drv_wake_tx_queue(local, txqi);
-
- continue;
- }
-
spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
if (local->queue_stop_reasons[q] ||
(!txpending && !skb_queue_empty(&local->pending[q]))) {
@@ -1635,10 +1660,13 @@ static bool __ieee80211_tx(struct ieee80211_local=
*local,
/*
* Invoke TX handlers, return 0 on success and non-zero if the
* frame was dropped or queued.
+ *
+ * The handlers are split into an early and late part. The latter is eve=
rything
+ * that can be sensitive to reordering, and will be deferred to after pa=
ckets
+ * are dequeued from the intermediate queues (when they are enabled).
*/
-static int invoke_tx_handlers(struct ieee80211_tx_data *tx)
+static int invoke_tx_handlers_early(struct ieee80211_tx_data *tx)
{
- struct ieee80211_tx_info *info =3D IEEE80211_SKB_CB(tx->skb);
ieee80211_tx_result res =3D TX_DROP;
=20
#define CALL_TXH(txh) \
@@ -1656,6 +1684,31 @@ static int invoke_tx_handlers(struct ieee80211_tx_=
data *tx)
if (!ieee80211_hw_check(&tx->local->hw, HAS_RATE_CONTROL))
CALL_TXH(ieee80211_tx_h_rate_ctrl);
=20
+ txh_done:
+ if (unlikely(res =3D=3D TX_DROP)) {
+ I802_DEBUG_INC(tx->local->tx_handlers_drop);
+ if (tx->skb)
+ ieee80211_free_txskb(&tx->local->hw, tx->skb);
+ else
+ ieee80211_purge_tx_queue(&tx->local->hw, &tx->skbs);
+ return -1;
+ } else if (unlikely(res =3D=3D TX_QUEUED)) {
+ I802_DEBUG_INC(tx->local->tx_handlers_queued);
+ return -1;
+ }
+
+ return 0;
+}
+
+/*
+ * Late handlers can be called while the sta lock is held. Handlers that=
can
+ * cause packets to be generated will cause deadlock!
+ */
+static int invoke_tx_handlers_late(struct ieee80211_tx_data *tx)
+{
+ struct ieee80211_tx_info *info =3D IEEE80211_SKB_CB(tx->skb);
+ ieee80211_tx_result res =3D TX_CONTINUE;
+
if (unlikely(info->flags & IEEE80211_TX_INTFL_RETRANSMISSION)) {
__skb_queue_tail(&tx->skbs, tx->skb);
tx->skb =3D NULL;
@@ -1688,6 +1741,15 @@ static int invoke_tx_handlers(struct ieee80211_tx_=
data *tx)
return 0;
}
=20
+static int invoke_tx_handlers(struct ieee80211_tx_data *tx)
+{
+ int r =3D invoke_tx_handlers_early(tx);
+
+ if (r)
+ return r;
+ return invoke_tx_handlers_late(tx);
+}
+
bool ieee80211_tx_prepare_skb(struct ieee80211_hw *hw,
struct ieee80211_vif *vif, struct sk_buff *skb,
int band, struct ieee80211_sta **sta)
@@ -1762,7 +1824,13 @@ static bool ieee80211_tx(struct ieee80211_sub_if_d=
ata *sdata,
info->hw_queue =3D
sdata->vif.hw_queue[skb_get_queue_mapping(skb)];
=20
- if (!invoke_tx_handlers(&tx))
+ if (invoke_tx_handlers_early(&tx))
+ return false;
+
+ if (ieee80211_queue_skb(local, sdata, tx.sta, tx.skb))
+ return true;
+
+ if (!invoke_tx_handlers_late(&tx))
result =3D __ieee80211_tx(local, &tx.skbs, led_len,
tx.sta, txpending);
=20
@@ -3106,8 +3174,73 @@ out:
return ret;
}
=20
+/*
+ * Can be called while the sta lock is held. Anything that can cause pac=
kets to
+ * be generated will cause deadlock!
+ */
+static bool ieee80211_xmit_fast_finish(struct ieee80211_sub_if_data *sda=
ta,
+ struct sta_info *sta, u8 pn_offs,
+ struct ieee80211_key *key,
+ struct sk_buff *skb)
+{
+ struct ieee80211_tx_info *info =3D IEEE80211_SKB_CB(skb);
+ struct ieee80211_hdr *hdr =3D (void *)skb->data;
+ u8 tid =3D IEEE80211_NUM_TIDS;
+
+ if (key)
+ info->control.hw_key =3D &key->conf;
+
+ ieee80211_tx_stats(skb->dev, skb->len);
+
+ if (hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_QOS_DATA)) {
+ tid =3D skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK;
+ *ieee80211_get_qos_ctl(hdr) =3D tid;
+ hdr->seq_ctrl =3D ieee80211_tx_next_seq(sta, tid);
+ } else {
+ info->flags |=3D IEEE80211_TX_CTL_ASSIGN_SEQ;
+ hdr->seq_ctrl =3D cpu_to_le16(sdata->sequence_number);
+ sdata->sequence_number +=3D 0x10;
+ }
+
+ if (skb_shinfo(skb)->gso_size)
+ sta->tx_stats.msdu[tid] +=3D
+ DIV_ROUND_UP(skb->len, skb_shinfo(skb)->gso_size);
+ else
+ sta->tx_stats.msdu[tid]++;
+
+ info->hw_queue =3D sdata->vif.hw_queue[skb_get_queue_mapping(skb)];
+
+ /* statistics normally done by ieee80211_tx_h_stats (but that
+ * has to consider fragmentation, so is more complex)
+ */
+ sta->tx_stats.bytes[skb_get_queue_mapping(skb)] +=3D skb->len;
+ sta->tx_stats.packets[skb_get_queue_mapping(skb)]++;
+
+ if (pn_offs) {
+ u64 pn;
+ u8 *crypto_hdr =3D skb->data + pn_offs;
+
+ switch (key->conf.cipher) {
+ case WLAN_CIPHER_SUITE_CCMP:
+ case WLAN_CIPHER_SUITE_CCMP_256:
+ case WLAN_CIPHER_SUITE_GCMP:
+ case WLAN_CIPHER_SUITE_GCMP_256:
+ pn =3D atomic64_inc_return(&key->conf.tx_pn);
+ crypto_hdr[0] =3D pn;
+ crypto_hdr[1] =3D pn >> 8;
+ crypto_hdr[4] =3D pn >> 16;
+ crypto_hdr[5] =3D pn >> 24;
+ crypto_hdr[6] =3D pn >> 32;
+ crypto_hdr[7] =3D pn >> 40;
+ break;
+ }
+ }
+
+ return true;
+}
+
static bool ieee80211_xmit_fast(struct ieee80211_sub_if_data *sdata,
- struct net_device *dev, struct sta_info *sta,
+ struct sta_info *sta,
struct ieee80211_fast_tx *fast_tx,
struct sk_buff *skb)
{
@@ -3158,8 +3291,6 @@ static bool ieee80211_xmit_fast(struct ieee80211_su=
b_if_data *sdata,
return true;
}
=20
- ieee80211_tx_stats(dev, skb->len + extra_head);
-
if ((hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_QOS_DATA)) &&
ieee80211_amsdu_aggregate(sdata, sta, fast_tx, skb))
return true;
@@ -3188,24 +3319,7 @@ static bool ieee80211_xmit_fast(struct ieee80211_s=
ub_if_data *sdata,
info->flags =3D IEEE80211_TX_CTL_FIRST_FRAGMENT |
IEEE80211_TX_CTL_DONTFRAG |
(tid_tx ? IEEE80211_TX_CTL_AMPDU : 0);
-
- if (hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_QOS_DATA)) {
- *ieee80211_get_qos_ctl(hdr) =3D tid;
- if (!sta->sta.txq[0])
- hdr->seq_ctrl =3D ieee80211_tx_next_seq(sta, tid);
- } else {
- info->flags |=3D IEEE80211_TX_CTL_ASSIGN_SEQ;
- hdr->seq_ctrl =3D cpu_to_le16(sdata->sequence_number);
- sdata->sequence_number +=3D 0x10;
- }
-
- if (skb_shinfo(skb)->gso_size)
- sta->tx_stats.msdu[tid] +=3D
- DIV_ROUND_UP(skb->len, skb_shinfo(skb)->gso_size);
- else
- sta->tx_stats.msdu[tid]++;
-
- info->hw_queue =3D sdata->vif.hw_queue[skb_get_queue_mapping(skb)];
+ info->control.flags =3D IEEE80211_TX_CTRL_FAST_XMIT;
=20
__skb_queue_head_init(&tx.skbs);
=20
@@ -3215,9 +3329,6 @@ static bool ieee80211_xmit_fast(struct ieee80211_su=
b_if_data *sdata,
tx.sta =3D sta;
tx.key =3D fast_tx->key;
=20
- if (fast_tx->key)
- info->control.hw_key =3D &fast_tx->key->conf;
-
if (!ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL)) {
tx.skb =3D skb;
r =3D ieee80211_tx_h_rate_ctrl(&tx);
@@ -3231,31 +3342,11 @@ static bool ieee80211_xmit_fast(struct ieee80211_=
sub_if_data *sdata,
}
}
=20
- /* statistics normally done by ieee80211_tx_h_stats (but that
- * has to consider fragmentation, so is more complex)
- */
- sta->tx_stats.bytes[skb_get_queue_mapping(skb)] +=3D skb->len;
- sta->tx_stats.packets[skb_get_queue_mapping(skb)]++;
-
- if (fast_tx->pn_offs) {
- u64 pn;
- u8 *crypto_hdr =3D skb->data + fast_tx->pn_offs;
+ if (ieee80211_queue_skb(local, sdata, sta, skb))
+ return true;
=20
- switch (fast_tx->key->conf.cipher) {
- case WLAN_CIPHER_SUITE_CCMP:
- case WLAN_CIPHER_SUITE_CCMP_256:
- case WLAN_CIPHER_SUITE_GCMP:
- case WLAN_CIPHER_SUITE_GCMP_256:
- pn =3D atomic64_inc_return(&fast_tx->key->conf.tx_pn);
- crypto_hdr[0] =3D pn;
- crypto_hdr[1] =3D pn >> 8;
- crypto_hdr[4] =3D pn >> 16;
- crypto_hdr[5] =3D pn >> 24;
- crypto_hdr[6] =3D pn >> 32;
- crypto_hdr[7] =3D pn >> 40;
- break;
- }
- }
+ ieee80211_xmit_fast_finish(sdata, sta, fast_tx->pn_offs,
+ fast_tx->key, skb);
=20
if (sdata->vif.type =3D=3D NL80211_IFTYPE_AP_VLAN)
sdata =3D container_of(sdata->bss,
@@ -3275,12 +3366,22 @@ struct sk_buff *ieee80211_tx_dequeue(struct ieee8=
0211_hw *hw,
struct sk_buff *skb =3D NULL;
struct fq *fq =3D &local->fq;
struct fq_tin *tin =3D &txqi->tin;
+ struct ieee80211_tx_info *info;
+ struct ieee80211_tx_data tx;
+ ieee80211_tx_result r;
+
=20
spin_lock_bh(&fq->lock);
=20
if (test_bit(IEEE80211_TXQ_STOP, &txqi->flags))
goto out;
=20
+ /* Make sure fragments stay together. */
+ skb =3D __skb_dequeue(&txqi->frags);
+ if (skb)
+ goto out;
+
+begin:
skb =3D fq_tin_dequeue(fq, tin, fq_tin_dequeue_func);
if (!skb)
goto out;
@@ -3288,16 +3389,46 @@ struct sk_buff *ieee80211_tx_dequeue(struct ieee8=
0211_hw *hw,
ieee80211_set_skb_vif(skb, txqi);
=20
hdr =3D (struct ieee80211_hdr *)skb->data;
- if (txq->sta && ieee80211_is_data_qos(hdr->frame_control)) {
+ info =3D IEEE80211_SKB_CB(skb);
+
+ memset(&tx, 0, sizeof(tx));
+ __skb_queue_head_init(&tx.skbs);
+ tx.local =3D local;
+ tx.skb =3D skb;
+ tx.sdata =3D vif_to_sdata(info->control.vif);
+
+ if (txq->sta)
+ tx.sta =3D container_of(txq->sta, struct sta_info, sta);
+
+ /*
+ * The key can be removed while the packet was queued, so need to call
+ * this here to get the current key.
+ */
+ r =3D ieee80211_tx_h_select_key(&tx);
+ if (r !=3D TX_CONTINUE) {
+ ieee80211_free_txskb(&local->hw, skb);
+ goto begin;
+ }
+
+ if (txq->sta && info->control.flags & IEEE80211_TX_CTRL_FAST_XMIT) {
struct sta_info *sta =3D container_of(txq->sta, struct sta_info,
sta);
- struct ieee80211_tx_info *info =3D IEEE80211_SKB_CB(skb);
+ u8 pn_offs =3D 0;
=20
- hdr->seq_ctrl =3D ieee80211_tx_next_seq(sta, txq->tid);
- if (test_bit(IEEE80211_TXQ_AMPDU, &txqi->flags))
- info->flags |=3D IEEE80211_TX_CTL_AMPDU;
- else
- info->flags &=3D ~IEEE80211_TX_CTL_AMPDU;
+ if (tx.key &&
+ (tx.key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV))
+ pn_offs =3D ieee80211_hdrlen(hdr->frame_control);
+
+ ieee80211_xmit_fast_finish(sta->sdata, sta, pn_offs,
+ tx.key, skb);
+ } else {
+ if (invoke_tx_handlers_late(&tx))
+ goto begin;
+
+ skb =3D __skb_dequeue(&tx.skbs);
+
+ if (!skb_queue_empty(&tx.skbs))
+ skb_queue_splice_tail(&tx.skbs, &txqi->frags);
}
=20
out:
@@ -3335,7 +3466,7 @@ void __ieee80211_subif_start_xmit(struct sk_buff *s=
kb,
fast_tx =3D rcu_dereference(sta->fast_tx);
=20
if (fast_tx &&
- ieee80211_xmit_fast(sdata, dev, sta, fast_tx, skb))
+ ieee80211_xmit_fast(sdata, sta, fast_tx, skb))
goto out;
}
=20
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index b6865d8..8006f9a 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -3393,11 +3393,18 @@ void ieee80211_txq_get_depth(struct ieee80211_txq=
*txq,
unsigned long *byte_cnt)
{
struct txq_info *txqi =3D to_txq_info(txq);
+ u32 frag_cnt =3D 0, frag_bytes =3D 0;
+ struct sk_buff *skb;
+
+ skb_queue_walk(&txqi->frags, skb) {
+ frag_cnt++;
+ frag_bytes +=3D skb->len;
+ }
=20
if (frame_cnt)
- *frame_cnt =3D txqi->tin.backlog_packets;
+ *frame_cnt =3D txqi->tin.backlog_packets + frag_cnt;
=20
if (byte_cnt)
- *byte_cnt =3D txqi->tin.backlog_bytes;
+ *byte_cnt =3D txqi->tin.backlog_bytes + frag_bytes;
}
EXPORT_SYMBOL(ieee80211_txq_get_depth);
--=20
2.9.3
^ permalink raw reply related
* Re: rtl8192ce:rtl92ce_get_hw_reg():<0-0> switch case not processed
From: Jean Delvare @ 2016-09-22 17:05 UTC (permalink / raw)
To: Larry Finger; +Cc: Chaoming Li, linux-wireless
In-Reply-To: <83974845-037d-0cde-00b1-ec7b28eeb15f@lwfinger.net>
On Thu, 22 Sep 2016 10:09:58 -0500, Larry Finger wrote:
> On 09/22/2016 04:51 AM, Jean Delvare wrote:
> > Hello,
> >
> > I bought an Asus PCE-N10 PCIe Wi-Fi N card to install in my wife's
> > computer. This morning it stopped working suddenly. Investigating the
> > kernel logs, the following error message caught my eye:
> >
> > rtl8192ce:rtl92ce_get_hw_reg():<0-0> switch case not processed
> >
> > It was printed twice, 3.5 hours apart, the second time at the moment
> > the network stopped working. I guess this is not supposed to happen.
> > What additional information can I provide to help you debug the issue?
> > That's the device:
> >
> > 03:00.0 Network controller [0280]: Realtek Semiconductor Co., Ltd. RTL8188CE 802.11b/g/n WiFi Adapter [10ec:8176] (rev 01)
> > Subsystem: ASUSTeK Computer Inc. Device [1043:84b5]
> > Flags: bus master, fast devsel, latency 0, IRQ 17
> > I/O ports at e800 [size=256]
> > Memory at febfc000 (64-bit, non-prefetchable) [size=16K]
> > Capabilities: <access denied>
> > Kernel driver in use: rtl8192ce
> > Kernel modules: rtl8192ce
> >
> > Kernel version is 4.5.4-1-default x86_64 (openSUSE Tumbleweed.)
> >
> > Reloading the rtl8192ce module and restarting the network service got
> > everything back up.
>
> Unfortunately, that message is not as helpful as it might be.
>
> Do you build your own kernel, or are you using openSUSE's supplied version? If
> the latter, I will need to think how we might debug the issue. If the former,
> please add the attached patch.
I'm a kernel dev :-) I'll test your patch and report, thanks.
That being said, I agree it's better if drivers have useful debug
messages... Makes things faster. So something like your patch should go
upstream anyway. And the same improvement could be applied to various
other messages of the rtlwifi driver family.
--
Jean Delvare
SUSE L3 Support
^ permalink raw reply
* Re: ath9k_htc kernel driver regression affecting throughput
From: Oleksij Rempel @ 2016-09-22 17:11 UTC (permalink / raw)
To: bruce m beach; +Cc: linux-wireless
In-Reply-To: <CAArymCnJZgUbgCiLqA6-94RAtXYkYeeS9uF71MX9+ou-AbYszg@mail.gmail.com>
[-- Attachment #1.1: Type: text/plain, Size: 485 bytes --]
Am 22.09.2016 um 05:34 schrieb bruce m beach:
>> We recently updated FW to GCC 6.2 which can detect more problems. So it
>> will be probably interesting for you to pick this patch out.
>
> Yes I saw the message by Adrian Chadd and tried tried to git clone the link
> he gave but that clearly wasn't what was to be done. Is there a patch that I
> need to apply to the firmware? I do have a local copy.
>
this patches are now in main repository.
--
Regards,
Oleksij
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 213 bytes --]
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox