* Re: [PATCHv6 2/9] nl80211: Add new netlink attribute for TID speicific retry count
From: Tamizh chelvam @ 2019-08-10 12:06 UTC (permalink / raw)
To: Johannes Berg; +Cc: ath10k, linux-wireless
In-Reply-To: <6351a05f5c205db47740116b4bec5a6476317792.camel@sipsolutions.net>
On 2019-07-31 14:54, Johannes Berg wrote:
> ^^ there's a typo in the subject
>
I will fix it in next version.
>> @@ -3951,6 +3957,7 @@ enum wiphy_flags {
>> WIPHY_FLAG_SUPPORTS_5_10_MHZ = BIT(22),
>> WIPHY_FLAG_HAS_CHANNEL_SWITCH = BIT(23),
>> WIPHY_FLAG_HAS_STATIC_WEP = BIT(24),
>> + WIPHY_FLAG_HAS_MAX_DATA_RETRY_COUNT = BIT(25),
>
> This is never used, so that doesn't make sense? You probably want to
> advertise the max_data_retry_count value contingent on this flag (*) in
> some attribute, so that userspace can also detect the presence/absence
> of the flag for the feature?
>
> (*) doesn't really need to be contingent on the flag - could just be
> contingent on max_data_retry_count being non-zero and then you don't
> need the flag.
>
Sure, I will remove this flag.
>> + * @NL80211_ATTR_MAX_RETRY_COUNT: The upper limit for the retry count
>> + * configuration that the driver can accept.
>> *
>> * @NUM_NL80211_ATTR: total number of nl80211_attrs available
>> * @NL80211_ATTR_MAX: highest attribute number currently defined
>> @@ -2823,6 +2825,7 @@ enum nl80211_attrs {
>> NL80211_ATTR_TWT_RESPONDER,
>>
>> NL80211_ATTR_TID_CONFIG,
>> + NL80211_ATTR_MAX_RETRY_COUNT,
>
> You already have the attribute, but again, aren't using it.
>
I will use this in nl80211_get_wiphy to notify userspace.
>> + * @NL80211_EXT_FEATURE_PER_TID_RETRY_CONFIG: Driver supports per TID
>> data retry
>> + * count functionality.
>> + * @NL80211_EXT_FEATURE_PER_STA_RETRY_CONFIG: Driver supports STA
>> specific
>> + * data retry count functionality.
>
> and if you have these you don't need the WIPHY_FLAG anyway?
>
Sure.
>> + [NL80211_TID_ATTR_CONFIG_RETRY] = { .type = NLA_FLAG },
>> + [NL80211_TID_ATTR_CONFIG_RETRY_SHORT] = NLA_POLICY_MIN(NLA_U8, 0),
>> + [NL80211_TID_ATTR_CONFIG_RETRY_LONG] = NLA_POLICY_MIN(NLA_U8, 0),
>
> min of 0 doesn't make sense, maybe you meant 1? otherwise just don't
> set
> anything here.
>
The min value changed to 0 from 1 as per the previous discussions, since
this is a retry count and not a tx count.
Or Shall I remove this min value to avoid the confusion ?
>
>> + "TID specific configuration not "
>> + "supported");
>
> This applies to all the patches - please don't break strings across
> multiple lines, even if they cross 80 columns. Even checkpatch won't
> give you any warning on this.
>
Yeah, sure.
>> + tid_conf->tid_conf_mask |= IEEE80211_TID_CONF_RETRY;
>> + if (attrs[NL80211_TID_ATTR_CONFIG_RETRY_SHORT]) {
>> + tid_conf->retry_short =
>> + nla_get_u8(attrs[NL80211_TID_ATTR_CONFIG_RETRY_SHORT]);
>> + if (tid_conf->retry_short >
>> + rdev->wiphy.max_data_retry_count)
>> + return -EINVAL;
>> + } else {
>> + tid_conf->retry_short = -1;
>> +
>
> I guess you should document that -1 means no changes? Not sure how the
> IEEE80211_TID_CONF_RETRY comes in, you're always setting it, so that's
> useless - better remove that and document that -1 means no changes?
>
The value -1 is to notify the driver to use default value by removing
peer specific retry count.
Thanks,
Tamizh.
^ permalink raw reply
* Re: Unaligned Memory Access on mesh_*.c files
From: Guo Wei Lim @ 2019-08-10 10:28 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless
In-Reply-To: <64EA957F-B24A-4B1C-AAC0-B51790F47E9E@sipsolutions.net>
Hi Johannes,
Correct me if I am wrong.
The problem is largely in net/mac80211/mesh_hwmp.c
The macros
#define PREQ_IE_ORIG_ADDR(x) (x + 7)
#define PREP_IE_TARGET_ADDR(x) (x + 3)
Almost guarantees the addresses will be odd when it hit the following
switch (action) {
case MPATH_PREQ:
orig_addr = PREQ_IE_ORIG_ADDR(hwmp_ie);
orig_sn = PREQ_IE_ORIG_SN(hwmp_ie);
orig_lifetime = PREQ_IE_LIFETIME(hwmp_ie);
orig_metric = PREQ_IE_METRIC(hwmp_ie);
hopcount = PREQ_IE_HOPCOUNT(hwmp_ie) + 1;
break;
case MPATH_PREP:
/* Originator here refers to the MP that was the target in the
* Path Request. We divert from the nomenclature in the draft
* so that we can easily use a single function to gather path
* information from both PREQ and PREP frames.
*/
orig_addr = PREP_IE_TARGET_ADDR(hwmp_ie);
orig_sn = PREP_IE_TARGET_SN(hwmp_ie);
orig_lifetime = PREP_IE_LIFETIME(hwmp_ie);
orig_metric = PREP_IE_METRIC(hwmp_ie);
hopcount = PREP_IE_HOPCOUNT(hwmp_ie) + 1;
break;
default:
rcu_read_unlock();
return 0;
}
So following that many functions like
if (ether_addr_equal(orig_addr, sdata->vif.addr)) {
Results in unaligned memory access
I traced and caught all the following functions creating unaligned memory access
This is just one example
[ 344.065508] Call Trace:
[ 344.068111] [<870d9b7c>] mesh_rx_plink_frame+0xed0/0x139c [mac80211]
[ 344.074626] Code: 96c40002 9646000c 00451026 <96c30004> 9645000e
00862026 00441025 00651826 00431025
[ 344.084628]
[ 344.086166] CPU: 0 PID: 5 Comm: kworker/u2:0 Not tainted 4.14.123 #0
[ 344.092833] Workqueue: phy1 ieee80211_ibss_leave [mac80211]
[ 344.098609] task: 87c25600 task.stack: 87c3a000
[ 344.103319] $ 0 : 00000000 00000001 00000000 00000000
[ 344.108656] $ 4 : 00000000 0000c46e 000067a5 00000000
[ 344.114057] $ 8 : 86e25464 00000001 00000004 873811e8
[ 344.119433] $12 : ffffffff 00000000 00b00000 00000000
[ 344.124806] $16 : 804f0000 8773f078 87315460 8773f082
[ 344.130155] $20 : 8773f094 8773f0a9 000000b3 870e89e8
[ 344.135485] $24 : 804ef040 870de528
[ 344.140915] $28 : 87c3a000 87c3bcb8 870e8a14 870da454
[ 344.146279] Hi : 0004e2ca
[ 344.149300] Lo : b0250b0d
[ 344.152383] epc : 870da988 mesh_rx_path_sel_frame+0x658/0xb08 [mac80211]
[ 344.159527] ra : 870da454 mesh_rx_path_sel_frame+0x124/0xb08 [mac80211]
[ 344.166543] Status: 1100dc03 KERNEL EXL IE
[ 344.170825] Cause : 00800010 (ExcCode 04)
[ 344.174894] BadVA : 8773f0a9
[ 344.177829] PrId : 0001974c (MIPS 74Kc)
[ 344.181881] Modules linked in: ath9k ath9k_common pppoe ppp_async
l2tp_ppp ath9k_hw ath qmi_wwan pptp pppox ppp_mppe ppp_generic
nf_conntrack_ipv6 mac80211 iptable_nat ipt_REJECT ipt_MASQUERADE
cfg80211 xt_time xt_tcpudp xt_tcpmss xt_statistic xt_state xt_recent
xt_nat xt_multiport xt_mark xt_mac xt_limit xt_length xt_hl xt_helper
xt_ecn xt_dscp xt_conntrack xt_connmark xt_connlimit xt_connbytes
xt_comment xt_TCPMSS xt_REDIRECT xt_LOG xt_HL xt_DSCP xt_CT
xt_CLASSIFY wireguard usbnet slhc nf_reject_ipv4 nf_nat_redirect
nf_nat_masquerade_ipv4 nf_conntrack_ipv4 nf_nat_ipv4 nf_nat
nf_log_ipv4 nf_defrag_ipv6 nf_defrag_ipv4 nf_conntrack_rtcache
nf_conntrack_netlink iptable_raw iptable_mangle iptable_filter ipt_ECN
ip_tables crc_ccitt compat cdc_wdm sch_cake nf_conntrack sch_tbf
sch_ingress sch_htb sch_hfsc
[ 344.254146] em_u32 cls_u32 cls_tcindex cls_route cls_matchall
cls_fw cls_flow cls_basic act_skbedit act_mirred ledtrig_usbport
cryptodev xt_set ip_set_list_set ip_set_hash_netportnet
ip_set_hash_netport ip_set_hash_netnet ip_set_hash_netiface
ip_set_hash_net ip_set_hash_mac ip_set_hash_ipportnet
ip_set_hash_ipportip ip_set_hash_ipport ip_set_hash_ipmark
ip_set_hash_ip ip_set_bitmap_port ip_set_bitmap_ipmac ip_set_bitmap_ip
ip_set nfnetlink nf_log_ipv6 nf_log_common ip6table_mangle
ip6table_filter ip6_tables ip6t_REJECT x_tables nf_reject_ipv6 ip_gre
gre ifb l2tp_netlink l2tp_core udp_tunnel ip6_udp_tunnel ip_tunnel tun
shortcut_fe_ipv6 shortcut_fe algif_skcipher algif_hash af_alg
sha1_generic ecb authenc ehci_platform ehci_hcd gpio_button_hotplug
usbcore nls_base usb_common mii aead cryptomgr crypto_null
[ 344.326861] crypto_hash
[ 344.329502] Process kworker/u2:0 (pid: 5, threadinfo=87c3a000,
task=87c25600, tls=00000000)
[ 344.338022] Stack : 0000002f 870ac7f0 00000000 20000009 00000000
00000000 00000000 00000041
[ 344.346622] 8717a780 804f0000 87315460 00000041 87380bc0
870b2d30 8717a780 8717a780
[ 344.355242] 000000a0 00000000 00000000 802d09dc 8773f092
00000021 00000000 00000000
[ 344.363839] 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000
[ 344.372380] 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000
[ 344.380888] ...
[ 344.383382] Call Trace:
[ 344.386011] [<870da988>] mesh_rx_path_sel_frame+0x658/0xb08 [mac80211]
[ 344.392801] [<870d5bb4>] ieee80211_mesh_rx_queued_mgmt+0x15c/0x164 [mac80211]
[ 344.400279] [<87097164>] ieee80211_ibss_leave+0x80c/0x1888 [mac80211]
[ 344.406922] [<870d5cd0>] ieee80211_mesh_work+0x114/0x2cc [mac80211]
[ 344.413498] [<8009d280>] process_one_work+0x1f8/0x428
[ 344.418706] [<8009d630>] worker_thread+0x180/0x548
[ 344.423692] [<800a3a04>] kthread+0x134/0x13c
[ 344.428075] [<80066db8>] ret_from_kernel_thread+0x14/0x1c
[ 344.433622] Code: 26950015 2695001b 964508a0 <96a20000> 96a40002
964608a2 00451026 96a30004 964508a4
orig_addr = PREP_IE_ORIG_ADDR(prep_elem);
5bb7c: 92620000 lbu v0,0(s3)
5bb80: 30420040 andi v0,v0,0x40
5bb84: 14400002 bnez v0,5bb90 <mesh_rx_path_sel_frame+0x510>
5bb88: 2674001b addiu s4,s3,27
5bb8c: 26740015 addiu s4,s3,21
return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) == 0;
5bb90: 962508b8 lhu a1,2232(s1)
5bb94: 96820000 lhu v0,0(s4)
5bb98: 96840002 lhu a0,2(s4)
5bb9c: 962608ba lhu a2,2234(s1)
5bba0: 00451026 xor v0,v0,a1
5bba4: 96830004 lhu v1,4(s4)
5bba8: 962508bc lhu a1,2236(s1)
5bbac: 00862026 xor a0,a0,a2
5bbb0: 00441025 or v0,v0,a0
5bbb4: 00651826 xor v1,v1,a1
if (ether_addr_equal(orig_addr, sdata->vif.addr))
I have tested that replacing ether_addr_equal with
ether_addr_equal_unaligned fixes the issue but this happens in many
places as well as other functions like is_multicast_ether_addr(),
is_broadcast_ether_addr() so it isn't the correct fix.
On Sat, Aug 10, 2019 at 8:50 AM Johannes Berg <johannes@sipsolutions.net> wrote:
>
>
>
> On August 10, 2019 6:07:15 AM GMT+02:00, Guo Wei Lim <limguowei@gmail.com> wrote:
> >I have traced a large number of unaligned memory access on mips cpu
> >due to ether_addr_equal(), is_multicast_ether_addr(),
> >is_broadcast_ether_addr() being called on odd addresses.
> >
> >Even though the values are u8, the inlines in etherdevice.h converts
> >them to u16 causing the issue.
> >
> >I can replace ether_addr_equal() with ether_addr_equal_unaligned() but
> >it doesn't seem like a proper fix. Anyone has better ideas?
>
> Can you say which places cause this,and which driver you're using? Also, I guess the type of frame and what address format it has would be good to know.
>
> If you aren't also hitting the warning in rx.c about alignment though, it might be that we do in fact need to use code not expecting alignment.
>
> johannes
> --
> Sent from my phone.
^ permalink raw reply
* Re: [PATCH 2/2] Fix a NULL-ptr-deref bug in ath10k_usb_alloc_urb_from_pipe
From: Greg KH @ 2019-08-10 10:13 UTC (permalink / raw)
To: Hui Peng
Cc: kvalo, davem, Mathias Payer, ath10k, linux-wireless, netdev,
linux-kernel
In-Reply-To: <20190804003101.11541-1-benquike@gmail.com>
On Sat, Aug 03, 2019 at 08:31:01PM -0400, Hui Peng wrote:
> The `ar_usb` field of `ath10k_usb_pipe_usb_pipe` objects
> are initialized to point to the containing `ath10k_usb` object
> according to endpoint descriptors read from the device side, as shown
> below in `ath10k_usb_setup_pipe_resources`:
>
> for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
> endpoint = &iface_desc->endpoint[i].desc;
>
> // get the address from endpoint descriptor
> pipe_num = ath10k_usb_get_logical_pipe_num(ar_usb,
> endpoint->bEndpointAddress,
> &urbcount);
> ......
> // select the pipe object
> pipe = &ar_usb->pipes[pipe_num];
>
> // initialize the ar_usb field
> pipe->ar_usb = ar_usb;
> }
>
> The driver assumes that the addresses reported in endpoint
> descriptors from device side to be complete. If a device is
> malicious and does not report complete addresses, it may trigger
> NULL-ptr-deref `ath10k_usb_alloc_urb_from_pipe` and
> `ath10k_usb_free_urb_to_pipe`.
>
> This patch fixes the bug by preventing potential NULL-ptr-deref.
>
> Signed-off-by: Hui Peng <benquike@gmail.com>
> Reported-by: Hui Peng <benquike@gmail.com>
> Reported-by: Mathias Payer <mathias.payer@nebelwelt.net>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
^ permalink raw reply
* Re: [PATCH 1/2] Fix a NULL-ptr-deref bug in ath6kl_usb_alloc_urb_from_pipe
From: Greg KH @ 2019-08-10 10:13 UTC (permalink / raw)
To: Hui Peng
Cc: kvalo, davem, Mathias Payer, linux-wireless, netdev, linux-kernel
In-Reply-To: <20190804002905.11292-1-benquike@gmail.com>
On Sat, Aug 03, 2019 at 08:29:04PM -0400, Hui Peng wrote:
> The `ar_usb` field of `ath6kl_usb_pipe_usb_pipe` objects
> are initialized to point to the containing `ath6kl_usb` object
> according to endpoint descriptors read from the device side, as shown
> below in `ath6kl_usb_setup_pipe_resources`:
>
> for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
> endpoint = &iface_desc->endpoint[i].desc;
>
> // get the address from endpoint descriptor
> pipe_num = ath6kl_usb_get_logical_pipe_num(ar_usb,
> endpoint->bEndpointAddress,
> &urbcount);
> ......
> // select the pipe object
> pipe = &ar_usb->pipes[pipe_num];
>
> // initialize the ar_usb field
> pipe->ar_usb = ar_usb;
> }
>
> The driver assumes that the addresses reported in endpoint
> descriptors from device side to be complete. If a device is
> malicious and does not report complete addresses, it may trigger
> NULL-ptr-deref `ath6kl_usb_alloc_urb_from_pipe` and
> `ath6kl_usb_free_urb_to_pipe`.
>
> This patch fixes the bug by preventing potential NULL-ptr-deref.
>
> Signed-off-by: Hui Peng <benquike@gmail.com>
> Reported-by: Hui Peng <benquike@gmail.com>
> Reported-by: Mathias Payer <mathias.payer@nebelwelt.net>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
^ permalink raw reply
* Re: Unaligned Memory Access on mesh_*.c files
From: Johannes Berg @ 2019-08-10 8:50 UTC (permalink / raw)
To: Guo Wei Lim, linux-wireless
In-Reply-To: <CAJSNYx0k7k8RyRT6siC1xv_0xqf3ggKSwNp7sp9c7y-kOgSeAg@mail.gmail.com>
On August 10, 2019 6:07:15 AM GMT+02:00, Guo Wei Lim <limguowei@gmail.com> wrote:
>I have traced a large number of unaligned memory access on mips cpu
>due to ether_addr_equal(), is_multicast_ether_addr(),
>is_broadcast_ether_addr() being called on odd addresses.
>
>Even though the values are u8, the inlines in etherdevice.h converts
>them to u16 causing the issue.
>
>I can replace ether_addr_equal() with ether_addr_equal_unaligned() but
>it doesn't seem like a proper fix. Anyone has better ideas?
Can you say which places cause this,and which driver you're using? Also, I guess the type of frame and what address format it has would be good to know.
If you aren't also hitting the warning in rx.c about alignment though, it might be that we do in fact need to use code not expecting alignment.
johannes
--
Sent from my phone.
^ permalink raw reply
* Unaligned Memory Access on mesh_*.c files
From: Guo Wei Lim @ 2019-08-10 4:07 UTC (permalink / raw)
To: linux-wireless
I have traced a large number of unaligned memory access on mips cpu
due to ether_addr_equal(), is_multicast_ether_addr(),
is_broadcast_ether_addr() being called on odd addresses.
Even though the values are u8, the inlines in etherdevice.h converts
them to u16 causing the issue.
I can replace ether_addr_equal() with ether_addr_equal_unaligned() but
it doesn't seem like a proper fix. Anyone has better ideas?
^ permalink raw reply
* Re: [PATCH 6/6] ath11k: switch to using ieee80211_tx_status_ext()
From: Pradeep Kumar Chitrapu @ 2019-08-09 23:23 UTC (permalink / raw)
To: John Crispin; +Cc: Johannes Berg, Kalle Valo, linux-wireless, ath11k
In-Reply-To: <20190714154419.11854-7-john@phrozen.org>
> @@ -431,12 +434,18 @@ static void ath11k_dp_tx_complete_msdu(struct
> ath11k *ar,
> - ieee80211_tx_status(ar->hw, msdu);
> + spin_lock_bh(&ab->data_lock);
> + peer = ath11k_peer_find_by_id(ab, ts->peer_id);
> + arsta = (struct ath11k_sta *)peer->sta->drv_priv;
Hi John,
Accesing sta when peer is deleted is causing null pointer dereference
issue.
Thanks
Pradeep
^ permalink raw reply
* Re: [PATCH] wireless-regdb: Extend 5470-5725 MHz range to 5730 MHz for Taiwan (TW)
From: Seth Forshee @ 2019-08-09 20:50 UTC (permalink / raw)
To: Chen-Yu Tsai; +Cc: Chen-Yu Tsai, wireless-regdb, linux-wireless
In-Reply-To: <20190726030538.16784-1-wens@kernel.org>
On Fri, Jul 26, 2019 at 11:05:38AM +0800, Chen-Yu Tsai wrote:
> From: Chen-Yu Tsai <wens@csie.org>
>
> This range ends at 5725 MHz, but channel 144 extends to 5730 MHz.
> The Linux kernel however does not seem capable of considering them
> most restrictive subset of multiple rules.
>
> Since 5725 ~ 5730 MHz belongs to the next range which has looser
> requirements, we can do this manually and extend the range by 5 MHz
> to make the kernel happy and be able to use channel 144.
>
> Also, looking at the US regulations, which the TW ones are based on,
> The DFS range ends at 5730 MHz, while the next range starts at 5735
> MHz. This doesn't match the actual regulations, but is skewed to meet
> wireless channel boundaries. I prefer the database match the law,
> and be adjuested only if necessary.
>
> Signed-off-by: Chen-Yu Tsai <wens@csie.org>
> ---
>
> I have a vague impression that you asked about the range boundaries
> when I first updated the rules for Taiwan. And here we are again.
I don't recall, but I too prefer that we keep the boundaries mostly in
line with the regulations, not the wireless channel boundaries. Here it
does seem appropriate though to borrow the extra 5MHz into a more
rescrictive rule.
I wasn't sure about having rules with overlapping ranges. I've been
looking at the code though, and I don't see that it will be an issue. I
may give a few more days though to see if anyone else knows some reason
I missed that it could be a problem.
Thanks,
Seth
>
> ---
> db.txt | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/db.txt b/db.txt
> index 37393e6..2e149b6 100644
> --- a/db.txt
> +++ b/db.txt
> @@ -1249,7 +1249,11 @@ country TW: DFS-FCC
> # 5.15 ~ 5.25 GHz: 30 dBm for master mode, 23 dBm for clients
> (5150 - 5250 @ 80), (23), AUTO-BW
> (5250 - 5350 @ 80), (23), DFS, AUTO-BW
> - (5470 - 5725 @ 160), (23), DFS
> + # This range ends at 5725 MHz, but channel 144 extends to 5730 MHz.
> + # Since 5725 ~ 5730 MHz belongs to the next range which has looser
> + # requirements, we can extend the range by 5 MHz to make the kernel
> + # happy and be able to use channel 144.
> + (5470 - 5730 @ 160), (23), DFS
> (5725 - 5850 @ 80), (30)
> # 60g band, LP0002 section 3.13.1.1 (3)(C), EIRP=40dBm(43dBm peak)
> (57000 - 66000 @ 2160), (40)
> --
> 2.20.1
>
^ permalink raw reply
* Re: Regression with the latest iwlwifi-9260-*-46.ucode
From: Thomas Backlund @ 2019-08-09 19:00 UTC (permalink / raw)
To: Takashi Iwai, Luca Coelho
Cc: dor.shaish, Josh Boyer, Johannes Berg, Emmanuel Grumbach,
linux-wireless, linux-kernel
In-Reply-To: <s5ho912momt.wl-tiwai@suse.de>
Den 06-08-2019 kl. 16:04, skrev Takashi Iwai:
> On Mon, 05 Aug 2019 14:03:55 +0200,
> Now we got a feedback from the latest linux-firmware (20190726) and
> surprising the result was negative. The dmesg after the cold boot is
> found at:
> https://bugzilla.suse.com/show_bug.cgi?id=1142128#c26
>
> The kernel is 5.2.3, so it should be new enough.
>
> If anything else needed (or something missing), let us know.
>
I read on some forum that some commented that the "Add support for SAR
South Korea limitation" fix is needed, but it seemed weird...
Anyway, with theese on top of 5.2.7
39bd984c203e86f3 iwlwifi: mvm: don't send GEO_TX_POWER_LIMIT on version
< 41
f5a47fae6aa3eb06 iwlwifi: mvm: fix version check for GEO_TX_POWER_LIMIT
support
0c3d7282233c7b02 iwlwifi: Add support for SAR South Korea limitation
We have confirmation from an affected user that its now stable with both
older and newer firmwares...
And we earlier tried with only the:
39bd984c203e86f3 iwlwifi: mvm: don't send GEO_TX_POWER_LIMIT on version
< 41
But that did not help (not that I really expected it since its loading
version 46 firmwares anyway)
So my guess is that the newer firmware actually subtly expects to get
the behaviour of the:
0c3d7282233c7b02 iwlwifi: Add support for SAR South Korea limitation
Of course that's still guessing and I assume only Intel fw guys can
verify that...
--
Thomas
^ permalink raw reply
* [PATCH v2 2/2] staging: wilc1000: return kernel error codes from wilc_wlan_stop
From: Adham.Abozaeid @ 2019-08-09 18:25 UTC (permalink / raw)
To: linux-wireless; +Cc: devel, gregkh, johannes, Ajay.Kathat, Adham.Abozaeid
In-Reply-To: <20190809182510.22443-1-adham.abozaeid@microchip.com>
From: Adham Abozaeid <adham.abozaeid@microchip.com>
return -EIO for bus failures, 0 otherwise.
Signed-off-by: Adham Abozaeid <adham.abozaeid@microchip.com>
---
drivers/staging/wilc1000/wilc_wlan.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/staging/wilc1000/wilc_wlan.c b/drivers/staging/wilc1000/wilc_wlan.c
index 3d902b499a34..2bbb359d2119 100644
--- a/drivers/staging/wilc1000/wilc_wlan.c
+++ b/drivers/staging/wilc1000/wilc_wlan.c
@@ -979,7 +979,7 @@ int wilc_wlan_stop(struct wilc *wilc, struct wilc_vif *vif)
if (!ret) {
netdev_err(vif->ndev, "Error while reading reg\n");
release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
- return ret;
+ return -EIO;
}
ret = wilc->hif_func->hif_write_reg(wilc, WILC_GP_REG_0,
@@ -987,14 +987,14 @@ int wilc_wlan_stop(struct wilc *wilc, struct wilc_vif *vif)
if (!ret) {
netdev_err(vif->ndev, "Error while writing reg\n");
release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
- return ret;
+ return -EIO;
}
ret = wilc->hif_func->hif_read_reg(wilc, WILC_FW_HOST_COMM, ®);
if (!ret) {
netdev_err(vif->ndev, "Error while reading reg\n");
release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
- return ret;
+ return -EIO;
}
reg = BIT(0);
@@ -1002,12 +1002,12 @@ int wilc_wlan_stop(struct wilc *wilc, struct wilc_vif *vif)
if (!ret) {
netdev_err(vif->ndev, "Error while writing reg\n");
release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
- return ret;
+ return -EIO;
}
release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
- return ret;
+ return 0;
}
void wilc_wlan_cleanup(struct net_device *dev)
--
2.17.1
^ permalink raw reply related
* [PATCH v2 1/2] staging: wilc1000: Don't reset WILC CPU disgracefully
From: Adham.Abozaeid @ 2019-08-09 18:25 UTC (permalink / raw)
To: linux-wireless; +Cc: devel, gregkh, johannes, Ajay.Kathat, Adham.Abozaeid
In-Reply-To: <20190809182510.22443-1-adham.abozaeid@microchip.com>
From: Adham Abozaeid <adham.abozaeid@microchip.com>
Send abort request to WILC from wilc_wlan_stop instead of resetting the
CPU.
The abort request was being sent from wilc_wlan_cleanup after the CPU
was reset which wasn't the correct order. The abort request handler
in the chip will take care of resetting the CPU.
Signed-off-by: Adham Abozaeid <adham.abozaeid@microchip.com>
---
drivers/staging/wilc1000/wilc_netdev.c | 4 +-
drivers/staging/wilc1000/wilc_wlan.c | 75 +++++++-------------------
drivers/staging/wilc1000/wilc_wlan.h | 5 +-
3 files changed, 24 insertions(+), 60 deletions(-)
diff --git a/drivers/staging/wilc1000/wilc_netdev.c b/drivers/staging/wilc1000/wilc_netdev.c
index 57510400f243..cd11c35adcfe 100644
--- a/drivers/staging/wilc1000/wilc_netdev.c
+++ b/drivers/staging/wilc1000/wilc_netdev.c
@@ -475,7 +475,7 @@ static void wilc_wlan_deinitialize(struct net_device *dev)
wlan_deinitialize_threads(dev);
deinit_irq(dev);
- wilc_wlan_stop(wl);
+ wilc_wlan_stop(wl, vif);
wilc_wlan_cleanup(dev);
wlan_deinit_locks(dev);
@@ -573,7 +573,7 @@ static int wilc_wlan_initialize(struct net_device *dev, struct wilc_vif *vif)
return 0;
fail_fw_start:
- wilc_wlan_stop(wl);
+ wilc_wlan_stop(wl, vif);
fail_irq_enable:
if (!wl->dev_irq_num &&
diff --git a/drivers/staging/wilc1000/wilc_wlan.c b/drivers/staging/wilc1000/wilc_wlan.c
index d4ca6467485c..3d902b499a34 100644
--- a/drivers/staging/wilc1000/wilc_wlan.c
+++ b/drivers/staging/wilc1000/wilc_wlan.c
@@ -968,60 +968,42 @@ int wilc_wlan_start(struct wilc *wilc)
return (ret < 0) ? ret : 0;
}
-int wilc_wlan_stop(struct wilc *wilc)
+int wilc_wlan_stop(struct wilc *wilc, struct wilc_vif *vif)
{
u32 reg = 0;
int ret;
- u8 timeout = 10;
acquire_bus(wilc, WILC_BUS_ACQUIRE_AND_WAKEUP);
- ret = wilc->hif_func->hif_read_reg(wilc, WILC_GLB_RESET_0, ®);
+ ret = wilc->hif_func->hif_read_reg(wilc, WILC_GP_REG_0, ®);
if (!ret) {
+ netdev_err(vif->ndev, "Error while reading reg\n");
release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
return ret;
}
- reg &= ~BIT(10);
- ret = wilc->hif_func->hif_write_reg(wilc, WILC_GLB_RESET_0, reg);
+ ret = wilc->hif_func->hif_write_reg(wilc, WILC_GP_REG_0,
+ (reg | WILC_ABORT_REQ_BIT));
if (!ret) {
+ netdev_err(vif->ndev, "Error while writing reg\n");
release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
return ret;
}
- do {
- ret = wilc->hif_func->hif_read_reg(wilc,
- WILC_GLB_RESET_0, ®);
- if (!ret) {
- release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
- return ret;
- }
-
- if ((reg & BIT(10))) {
- reg &= ~BIT(10);
- ret = wilc->hif_func->hif_write_reg(wilc,
- WILC_GLB_RESET_0,
- reg);
- timeout--;
- } else {
- ret = wilc->hif_func->hif_read_reg(wilc,
- WILC_GLB_RESET_0,
- ®);
- if (!ret) {
- release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
- return ret;
- }
- break;
- }
-
- } while (timeout);
- reg = (BIT(0) | BIT(1) | BIT(2) | BIT(3) | BIT(8) | BIT(9) | BIT(26) |
- BIT(29) | BIT(30) | BIT(31));
-
- wilc->hif_func->hif_write_reg(wilc, WILC_GLB_RESET_0, reg);
- reg = (u32)~BIT(10);
+ ret = wilc->hif_func->hif_read_reg(wilc, WILC_FW_HOST_COMM, ®);
+ if (!ret) {
+ netdev_err(vif->ndev, "Error while reading reg\n");
+ release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
+ return ret;
+ }
+ reg = BIT(0);
- ret = wilc->hif_func->hif_write_reg(wilc, WILC_GLB_RESET_0, reg);
+ ret = wilc->hif_func->hif_write_reg(wilc, WILC_FW_HOST_COMM, reg);
+ if (!ret) {
+ netdev_err(vif->ndev, "Error while writing reg\n");
+ release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
+ return ret;
+ }
release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
@@ -1032,8 +1014,6 @@ void wilc_wlan_cleanup(struct net_device *dev)
{
struct txq_entry_t *tqe;
struct rxq_entry_t *rqe;
- u32 reg = 0;
- int ret;
struct wilc_vif *vif = netdev_priv(dev);
struct wilc *wilc = vif->wilc;
@@ -1058,23 +1038,6 @@ void wilc_wlan_cleanup(struct net_device *dev)
wilc->rx_buffer = NULL;
kfree(wilc->tx_buffer);
wilc->tx_buffer = NULL;
-
- acquire_bus(wilc, WILC_BUS_ACQUIRE_AND_WAKEUP);
-
- ret = wilc->hif_func->hif_read_reg(wilc, WILC_GP_REG_0, ®);
- if (!ret) {
- release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
- return;
- }
-
- ret = wilc->hif_func->hif_write_reg(wilc, WILC_GP_REG_0,
- (reg | ABORT_INT));
- if (!ret) {
- release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
- return;
- }
-
- release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
wilc->hif_func->hif_deinit(NULL);
}
diff --git a/drivers/staging/wilc1000/wilc_wlan.h b/drivers/staging/wilc1000/wilc_wlan.h
index 802f11807659..f566d040bb72 100644
--- a/drivers/staging/wilc1000/wilc_wlan.h
+++ b/drivers/staging/wilc1000/wilc_wlan.h
@@ -98,6 +98,7 @@
#define WILC_VMM_TBL_RX_SHADOW_BASE WILC_AHB_SHARE_MEM_BASE
#define WILC_VMM_TBL_RX_SHADOW_SIZE 256
+#define WILC_FW_HOST_COMM 0x13c0
#define WILC_GP_REG_0 0x149c
#define WILC_GP_REG_1 0x14a0
@@ -129,7 +130,7 @@
#define WILC_PLL_TO_SDIO 4
#define WILC_PLL_TO_SPI 2
-#define ABORT_INT BIT(31)
+#define WILC_ABORT_REQ_BIT BIT(31)
#define WILC_RX_BUFF_SIZE (96 * 1024)
#define WILC_TX_BUFF_SIZE (64 * 1024)
@@ -280,7 +281,7 @@ struct wilc_vif;
int wilc_wlan_firmware_download(struct wilc *wilc, const u8 *buffer,
u32 buffer_size);
int wilc_wlan_start(struct wilc *wilc);
-int wilc_wlan_stop(struct wilc *wilc);
+int wilc_wlan_stop(struct wilc *wilc, struct wilc_vif *vif);
int wilc_wlan_txq_add_net_pkt(struct net_device *dev, void *priv, u8 *buffer,
u32 buffer_size,
void (*tx_complete_fn)(void *, int));
--
2.17.1
^ permalink raw reply related
* [PATCH v2 0/2] staging: wilc1000: Don't reset WILC CPU disgracefully
From: Adham.Abozaeid @ 2019-08-09 18:25 UTC (permalink / raw)
To: linux-wireless; +Cc: devel, gregkh, johannes, Ajay.Kathat, Adham.Abozaeid
From: Adham Abozaeid <adham.abozaeid@microchip.com>
This patch series modifies wilc_wlan_stop to send an abort request to
wilc instead of disgracefully resetting its CPU.
changes sinces v1:
- return kernel error codes from wilc_wlan_stop
- added missing checks for bus operations
Adham Abozaeid (2):
staging: wilc1000: Don't reset WILC CPU disgracefully
staging: wilc1000: return kernel error codes from wilc_wlan_stop
drivers/staging/wilc1000/wilc_netdev.c | 4 +-
drivers/staging/wilc1000/wilc_wlan.c | 81 +++++++-------------------
drivers/staging/wilc1000/wilc_wlan.h | 5 +-
3 files changed, 27 insertions(+), 63 deletions(-)
--
2.17.1
^ permalink raw reply
* [PATCH-v2 2/2] mac80211: add assoc-at support.
From: greearb @ 2019-08-09 18:00 UTC (permalink / raw)
To: linux-wireless; +Cc: johannes, Ben Greear
In-Reply-To: <20190809180001.26393-1-greearb@candelatech.com>
From: Ben Greear <greearb@candelatech.com>
Report timestamp for when sta becomes associated.
Signed-off-by: Ben Greear <greearb@candelatech.com>
---
net/mac80211/sta_info.c | 3 +++
net/mac80211/sta_info.h | 2 ++
2 files changed, 5 insertions(+)
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index cd88c8872372..e8407ed2b87b 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -1995,6 +1995,7 @@ int sta_info_move_state(struct sta_info *sta,
case IEEE80211_STA_ASSOC:
if (sta->sta_state == IEEE80211_STA_AUTH) {
set_bit(WLAN_STA_ASSOC, &sta->_flags);
+ sta->assoc_at = ktime_get_boot_ns();
ieee80211_recalc_min_chandef(sta->sdata);
if (!sta->sta.support_p2p_ps)
ieee80211_recalc_p2p_go_ps_allowed(sta->sdata);
@@ -2224,6 +2225,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
BIT_ULL(NL80211_STA_INFO_STA_FLAGS) |
BIT_ULL(NL80211_STA_INFO_BSS_PARAM) |
BIT_ULL(NL80211_STA_INFO_CONNECTED_TIME) |
+ BIT_ULL(NL80211_STA_INFO_ASSOC_AT_BOOTTIME) |
BIT_ULL(NL80211_STA_INFO_RX_DROP_MISC);
if (sdata->vif.type == NL80211_IFTYPE_STATION) {
@@ -2232,6 +2234,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
}
sinfo->connected_time = ktime_get_seconds() - sta->last_connected;
+ sinfo->assoc_at = sta->assoc_at;
sinfo->inactive_time =
jiffies_to_msecs(jiffies - ieee80211_sta_last_active(sta));
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
index bb02d5fac7ba..6ebb943c78c2 100644
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -468,6 +468,7 @@ struct ieee80211_sta_rx_stats {
* the station when it leaves powersave or polls for frames
* @driver_buffered_tids: bitmap of TIDs the driver has data buffered on
* @txq_buffered_tids: bitmap of TIDs that mac80211 has txq data buffered on
+ * @assoc_at: clock boottime (in ns) of last association
* @last_connected: time (in seconds) when a station got connected
* @last_seq_ctrl: last received seq/frag number from this STA (per TID
* plus one for non-QoS frames)
@@ -565,6 +566,7 @@ struct sta_info {
unsigned long driver_buffered_tids;
unsigned long txq_buffered_tids;
+ unsigned long assoc_at;
long last_connected;
/* Updated from RX path only, no locking requirements */
--
2.20.1
^ permalink raw reply related
* [PATCH-v2 1/2] wireless: Support assoc-at timer in sta-info
From: greearb @ 2019-08-09 18:00 UTC (permalink / raw)
To: linux-wireless; +Cc: johannes, Ben Greear
From: Ben Greear <greearb@candelatech.com>
Report time stamp of when sta became associated.
This is the boottime clock, units are nano-seconds.
Signed-off-by: Ben Greear <greearb@candelatech.com>
---
v2: I had forgotten to refresh the 2/2 patch.
include/net/cfg80211.h | 2 ++
include/uapi/linux/nl80211.h | 2 ++
net/wireless/nl80211.c | 1 +
3 files changed, 5 insertions(+)
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index ef510c916635..19c200b917eb 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -1306,6 +1306,7 @@ struct cfg80211_tid_stats {
* indicate the relevant values in this struct for them
* @connected_time: time(in secs) since a station is last connected
* @inactive_time: time since last station activity (tx/rx) in milliseconds
+ * @assoc_at: bootime (ns) of the last association
* @rx_bytes: bytes (size of MPDUs) received from this station
* @tx_bytes: bytes (size of MPDUs) transmitted to this station
* @llid: mesh local link id
@@ -1366,6 +1367,7 @@ struct station_info {
u64 filled;
u32 connected_time;
u32 inactive_time;
+ u64 assoc_at;
u64 rx_bytes;
u64 tx_bytes;
u16 llid;
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 76d5811193be..3796e1e06665 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -3175,6 +3175,7 @@ enum nl80211_sta_bss_param {
* sent to the station (u64, usec)
* @NL80211_STA_INFO_AIRTIME_WEIGHT: current airtime weight for station (u16)
* @NL80211_STA_INFO_AIRTIME_LINK_METRIC: airtime link metric for mesh station
+ * @NL80211_STA_INFO_ASSOC_AT_BOOTTIME: Timestamp of last association
* @__NL80211_STA_INFO_AFTER_LAST: internal
* @NL80211_STA_INFO_MAX: highest possible station info attribute
*/
@@ -3221,6 +3222,7 @@ enum nl80211_sta_info {
NL80211_STA_INFO_TX_DURATION,
NL80211_STA_INFO_AIRTIME_WEIGHT,
NL80211_STA_INFO_AIRTIME_LINK_METRIC,
+ NL80211_STA_INFO_ASSOC_AT_BOOTTIME,
/* keep last */
__NL80211_STA_INFO_AFTER_LAST,
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 789cd98f02f5..b61a59b9d78b 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -5028,6 +5028,7 @@ static int nl80211_send_station(struct sk_buff *msg, u32 cmd, u32 portid,
PUT_SINFO(CONNECTED_TIME, connected_time, u32);
PUT_SINFO(INACTIVE_TIME, inactive_time, u32);
+ PUT_SINFO_U64(ASSOC_AT_BOOTTIME, assoc_at);
if (sinfo->filled & (BIT_ULL(NL80211_STA_INFO_RX_BYTES) |
BIT_ULL(NL80211_STA_INFO_RX_BYTES64)) &&
--
2.20.1
^ permalink raw reply related
* [PATCH 2/2] mac80211: add assoc-at support.
From: greearb @ 2019-08-09 17:46 UTC (permalink / raw)
To: linux-wireless; +Cc: johannes, Ben Greear
In-Reply-To: <20190809174656.20872-1-greearb@candelatech.com>
From: Ben Greear <greearb@candelatech.com>
Report timestamp for when sta becomes associated.
Signed-off-by: Ben Greear <greearb@candelatech.com>
---
net/mac80211/sta_info.c | 3 +++
net/mac80211/sta_info.h | 2 ++
2 files changed, 5 insertions(+)
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index cd88c8872372..f0820f058b5f 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -1995,6 +1995,7 @@ int sta_info_move_state(struct sta_info *sta,
case IEEE80211_STA_ASSOC:
if (sta->sta_state == IEEE80211_STA_AUTH) {
set_bit(WLAN_STA_ASSOC, &sta->_flags);
+ sta->assoc_at_ms = ktime_to_ms(ktime_get_real());
ieee80211_recalc_min_chandef(sta->sdata);
if (!sta->sta.support_p2p_ps)
ieee80211_recalc_p2p_go_ps_allowed(sta->sdata);
@@ -2224,6 +2225,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
BIT_ULL(NL80211_STA_INFO_STA_FLAGS) |
BIT_ULL(NL80211_STA_INFO_BSS_PARAM) |
BIT_ULL(NL80211_STA_INFO_CONNECTED_TIME) |
+ BIT_ULL(NL80211_STA_INFO_ASSOC_AT_MS) |
BIT_ULL(NL80211_STA_INFO_RX_DROP_MISC);
if (sdata->vif.type == NL80211_IFTYPE_STATION) {
@@ -2232,6 +2234,7 @@ void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo,
}
sinfo->connected_time = ktime_get_seconds() - sta->last_connected;
+ sinfo->assoc_at_ms = sta->assoc_at_ms;
sinfo->inactive_time =
jiffies_to_msecs(jiffies - ieee80211_sta_last_active(sta));
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
index bb02d5fac7ba..906b11acb0e8 100644
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -468,6 +468,7 @@ struct ieee80211_sta_rx_stats {
* the station when it leaves powersave or polls for frames
* @driver_buffered_tids: bitmap of TIDs the driver has data buffered on
* @txq_buffered_tids: bitmap of TIDs that mac80211 has txq data buffered on
+ * @assoc_at_ms: time (in ms) of last association
* @last_connected: time (in seconds) when a station got connected
* @last_seq_ctrl: last received seq/frag number from this STA (per TID
* plus one for non-QoS frames)
@@ -565,6 +566,7 @@ struct sta_info {
unsigned long driver_buffered_tids;
unsigned long txq_buffered_tids;
+ unsigned long assoc_at_ms;
long last_connected;
/* Updated from RX path only, no locking requirements */
--
2.20.1
^ permalink raw reply related
* [PATCH 1/2] wireless: Support assoc-at timer in sta-info
From: greearb @ 2019-08-09 17:46 UTC (permalink / raw)
To: linux-wireless; +Cc: johannes, Ben Greear
From: Ben Greear <greearb@candelatech.com>
Report time stamp of when sta became associated.
This is the boottime clock, units are nano-seconds.
Signed-off-by: Ben Greear <greearb@candelatech.com>
---
This attempts to implement the associated-at timestamp reporting
with boottime stamp instead of wall-clock, as suggested.
include/net/cfg80211.h | 2 ++
include/uapi/linux/nl80211.h | 2 ++
net/wireless/nl80211.c | 1 +
3 files changed, 5 insertions(+)
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index ef510c916635..19c200b917eb 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -1306,6 +1306,7 @@ struct cfg80211_tid_stats {
* indicate the relevant values in this struct for them
* @connected_time: time(in secs) since a station is last connected
* @inactive_time: time since last station activity (tx/rx) in milliseconds
+ * @assoc_at: bootime (ns) of the last association
* @rx_bytes: bytes (size of MPDUs) received from this station
* @tx_bytes: bytes (size of MPDUs) transmitted to this station
* @llid: mesh local link id
@@ -1366,6 +1367,7 @@ struct station_info {
u64 filled;
u32 connected_time;
u32 inactive_time;
+ u64 assoc_at;
u64 rx_bytes;
u64 tx_bytes;
u16 llid;
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 76d5811193be..3796e1e06665 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -3175,6 +3175,7 @@ enum nl80211_sta_bss_param {
* sent to the station (u64, usec)
* @NL80211_STA_INFO_AIRTIME_WEIGHT: current airtime weight for station (u16)
* @NL80211_STA_INFO_AIRTIME_LINK_METRIC: airtime link metric for mesh station
+ * @NL80211_STA_INFO_ASSOC_AT_BOOTTIME: Timestamp of last association
* @__NL80211_STA_INFO_AFTER_LAST: internal
* @NL80211_STA_INFO_MAX: highest possible station info attribute
*/
@@ -3221,6 +3222,7 @@ enum nl80211_sta_info {
NL80211_STA_INFO_TX_DURATION,
NL80211_STA_INFO_AIRTIME_WEIGHT,
NL80211_STA_INFO_AIRTIME_LINK_METRIC,
+ NL80211_STA_INFO_ASSOC_AT_BOOTTIME,
/* keep last */
__NL80211_STA_INFO_AFTER_LAST,
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 789cd98f02f5..b61a59b9d78b 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -5028,6 +5028,7 @@ static int nl80211_send_station(struct sk_buff *msg, u32 cmd, u32 portid,
PUT_SINFO(CONNECTED_TIME, connected_time, u32);
PUT_SINFO(INACTIVE_TIME, inactive_time, u32);
+ PUT_SINFO_U64(ASSOC_AT_BOOTTIME, assoc_at);
if (sinfo->filled & (BIT_ULL(NL80211_STA_INFO_RX_BYTES) |
BIT_ULL(NL80211_STA_INFO_RX_BYTES64)) &&
--
2.20.1
^ permalink raw reply related
* [PATCH] mt76: mt7603: remove unnecessary mcu queue initialization
From: Lorenzo Bianconi @ 2019-08-09 17:25 UTC (permalink / raw)
To: nbd; +Cc: lorenzo.bianconi, linux-wireless, Lorenzo Bianconi
From: Lorenzo Bianconi <lorenzo@kernel.org>
Remove unnecessary mcu queue initialization in mt7603_dma_init since it
has been already done in mt76_mmio_init
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
This patch is based on 'mt76: move mt76_tx_tasklet in mt76 module'
https://patchwork.kernel.org/patch/11087345/
---
drivers/net/wireless/mediatek/mt76/mt7603/dma.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/dma.c b/drivers/net/wireless/mediatek/mt76/mt7603/dma.c
index b53d59c53c28..5c2c12289492 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7603/dma.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7603/dma.c
@@ -170,9 +170,6 @@ int mt7603_dma_init(struct mt7603_dev *dev)
mt76_dma_attach(&dev->mt76);
- init_waitqueue_head(&dev->mt76.mmio.mcu.wait);
- skb_queue_head_init(&dev->mt76.mmio.mcu.res_q);
-
mt76_clear(dev, MT_WPDMA_GLO_CFG,
MT_WPDMA_GLO_CFG_TX_DMA_EN |
MT_WPDMA_GLO_CFG_RX_DMA_EN |
--
2.21.0
^ permalink raw reply related
* [PATCH] brcmfmac: remove redundant assignment to pointer hash
From: Colin King @ 2019-08-09 17:22 UTC (permalink / raw)
To: Arend van Spriel, Hante Meuleman, Chi-Hsien Lin, Wright Feng,
Kalle Valo, David S . Miller, linux-wireless,
brcm80211-dev-list.pdl, brcm80211-dev-list, netdev
Cc: kernel-janitors, linux-kernel
From: Colin Ian King <colin.king@canonical.com>
The pointer hash is being initialized with a value that is never read
and is being re-assigned a little later on. The assignment is
redundant and hence can be removed.
Addresses-Coverity: ("Unused value")
Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
index 8428be8b8d43..e3dd8623be4e 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
@@ -1468,7 +1468,6 @@ static int brcmf_msgbuf_stats_read(struct seq_file *seq, void *data)
seq_printf(seq, "\nh2d_flowrings: depth %u\n",
BRCMF_H2D_TXFLOWRING_MAX_ITEM);
seq_puts(seq, "Active flowrings:\n");
- hash = msgbuf->flow->hash;
for (i = 0; i < msgbuf->flow->nrofrings; i++) {
if (!msgbuf->flow->rings[i])
continue;
--
2.20.1
^ permalink raw reply related
* [PATCH v2] mt76: move mt76_tx_tasklet in mt76 module
From: Lorenzo Bianconi @ 2019-08-09 17:06 UTC (permalink / raw)
To: nbd; +Cc: lorenzo.bianconi, linux-wireless, ryder.lee, royluo,
Lorenzo Bianconi
From: Lorenzo Bianconi <lorenzo@kernel.org>
Move mt76{15,03}_tx_tasklet in mt76_alloc_device in order to be used as
default tx_tasklet initialization. Remove duplicated code in
mt7603/mt7615 drivers
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
Changes since v1:
- move default tx_tasklet initialization in mt76_alloc_device
---
drivers/net/wireless/mediatek/mt76/mac80211.c | 2 ++
drivers/net/wireless/mediatek/mt76/mt76.h | 1 +
drivers/net/wireless/mediatek/mt76/mt7603/dma.c | 10 ----------
drivers/net/wireless/mediatek/mt76/mt7615/dma.c | 10 ----------
drivers/net/wireless/mediatek/mt76/tx.c | 7 +++++++
5 files changed, 10 insertions(+), 20 deletions(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mac80211.c b/drivers/net/wireless/mediatek/mt76/mac80211.c
index f1cc18c22252..ed26661407c1 100644
--- a/drivers/net/wireless/mediatek/mt76/mac80211.c
+++ b/drivers/net/wireless/mediatek/mt76/mac80211.c
@@ -294,6 +294,8 @@ mt76_alloc_device(struct device *pdev, unsigned int size,
init_waitqueue_head(&dev->tx_wait);
skb_queue_head_init(&dev->status_list);
+ tasklet_init(&dev->tx_tasklet, mt76_tx_tasklet, (unsigned long)dev);
+
return dev;
}
EXPORT_SYMBOL_GPL(mt76_alloc_device);
diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h
index c755b5ad5e2a..dd9fbb1f79a9 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76.h
@@ -722,6 +722,7 @@ void mt76_stop_tx_queues(struct mt76_dev *dev, struct ieee80211_sta *sta,
bool send_bar);
void mt76_txq_schedule(struct mt76_dev *dev, enum mt76_txq_id qid);
void mt76_txq_schedule_all(struct mt76_dev *dev);
+void mt76_tx_tasklet(unsigned long data);
void mt76_release_buffered_frames(struct ieee80211_hw *hw,
struct ieee80211_sta *sta,
u16 tids, int nframes,
diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/dma.c b/drivers/net/wireless/mediatek/mt76/mt7603/dma.c
index 58dc511f93c5..b53d59c53c28 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7603/dma.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7603/dma.c
@@ -135,14 +135,6 @@ mt7603_init_rx_queue(struct mt7603_dev *dev, struct mt76_queue *q,
return 0;
}
-static void
-mt7603_tx_tasklet(unsigned long data)
-{
- struct mt7603_dev *dev = (struct mt7603_dev *)data;
-
- mt76_txq_schedule_all(&dev->mt76);
-}
-
static int mt7603_poll_tx(struct napi_struct *napi, int budget)
{
struct mt7603_dev *dev;
@@ -181,8 +173,6 @@ int mt7603_dma_init(struct mt7603_dev *dev)
init_waitqueue_head(&dev->mt76.mmio.mcu.wait);
skb_queue_head_init(&dev->mt76.mmio.mcu.res_q);
- tasklet_init(&dev->mt76.tx_tasklet, mt7603_tx_tasklet, (unsigned long)dev);
-
mt76_clear(dev, MT_WPDMA_GLO_CFG,
MT_WPDMA_GLO_CFG_TX_DMA_EN |
MT_WPDMA_GLO_CFG_RX_DMA_EN |
diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/dma.c b/drivers/net/wireless/mediatek/mt76/mt7615/dma.c
index 3fe24d92d4fa..fe532cecbbdd 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/dma.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/dma.c
@@ -90,13 +90,6 @@ void mt7615_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
}
}
-static void mt7615_tx_tasklet(unsigned long data)
-{
- struct mt7615_dev *dev = (struct mt7615_dev *)data;
-
- mt76_txq_schedule_all(&dev->mt76);
-}
-
static int mt7615_poll_tx(struct napi_struct *napi, int budget)
{
static const u8 queue_map[] = {
@@ -128,9 +121,6 @@ int mt7615_dma_init(struct mt7615_dev *dev)
mt76_dma_attach(&dev->mt76);
- tasklet_init(&dev->mt76.tx_tasklet, mt7615_tx_tasklet,
- (unsigned long)dev);
-
mt76_wr(dev, MT_WPDMA_GLO_CFG,
MT_WPDMA_GLO_CFG_TX_WRITEBACK_DONE |
MT_WPDMA_GLO_CFG_FIFO_LITTLE_ENDIAN |
diff --git a/drivers/net/wireless/mediatek/mt76/tx.c b/drivers/net/wireless/mediatek/mt76/tx.c
index 5397827668b9..670e21bf7490 100644
--- a/drivers/net/wireless/mediatek/mt76/tx.c
+++ b/drivers/net/wireless/mediatek/mt76/tx.c
@@ -568,6 +568,13 @@ void mt76_txq_schedule_all(struct mt76_dev *dev)
}
EXPORT_SYMBOL_GPL(mt76_txq_schedule_all);
+void mt76_tx_tasklet(unsigned long data)
+{
+ struct mt76_dev *dev = (struct mt76_dev *)data;
+
+ mt76_txq_schedule_all(dev);
+}
+
void mt76_stop_tx_queues(struct mt76_dev *dev, struct ieee80211_sta *sta,
bool send_bar)
{
--
2.21.0
^ permalink raw reply related
* [PATCH] bcma: remove two unused variables
From: YueHaibing @ 2019-08-09 8:53 UTC (permalink / raw)
To: zajec5, kvalo; +Cc: linux-kernel, linux-wireless, YueHaibing
drivers/bcma/driver_mips.c:70:18: warning:
ipsflag_irq_shift defined but not used [-Wunused-const-variable=]
drivers/bcma/driver_mips.c:62:18: warning:
ipsflag_irq_mask defined but not used [-Wunused-const-variable=]
They are never used, so can be removed.
Reported-by: Hulk Robot <hulkci@huawei.com>
Signed-off-by: YueHaibing <yuehaibing@huawei.com>
---
drivers/bcma/driver_mips.c | 16 ----------------
1 file changed, 16 deletions(-)
diff --git a/drivers/bcma/driver_mips.c b/drivers/bcma/driver_mips.c
index 27e9686..87760aa 100644
--- a/drivers/bcma/driver_mips.c
+++ b/drivers/bcma/driver_mips.c
@@ -59,22 +59,6 @@ static inline void mips_write32(struct bcma_drv_mips *mcore,
bcma_write32(mcore->core, offset, value);
}
-static const u32 ipsflag_irq_mask[] = {
- 0,
- BCMA_MIPS_IPSFLAG_IRQ1,
- BCMA_MIPS_IPSFLAG_IRQ2,
- BCMA_MIPS_IPSFLAG_IRQ3,
- BCMA_MIPS_IPSFLAG_IRQ4,
-};
-
-static const u32 ipsflag_irq_shift[] = {
- 0,
- BCMA_MIPS_IPSFLAG_IRQ1_SHIFT,
- BCMA_MIPS_IPSFLAG_IRQ2_SHIFT,
- BCMA_MIPS_IPSFLAG_IRQ3_SHIFT,
- BCMA_MIPS_IPSFLAG_IRQ4_SHIFT,
-};
-
static u32 bcma_core_mips_irqflag(struct bcma_device *dev)
{
u32 flag;
--
2.7.4
^ permalink raw reply related
* [Linux Realtek Wi-Fi support] rtl8192ee related bug
From: Sergey Kharitonov @ 2019-08-09 5:25 UTC (permalink / raw)
To: linux-wireless
Dear Linux-Wireless,
Some time ago a bug was reported
https://bugzilla.kernel.org/show_bug.cgi?id=202943 related to
rtl8192ee, the essence of which is high ping latency (even to the
access point) without downloading something. If you generate a network
load with a background download or just ping -i 0.001 -s 512.... the
latency stabilizes and stays low.
I tested my TP-Link TL-WN881ND v2 adapters (I got two of them in my
PCs plugged in different motherboards (ASUS and MSI)) and the problem
still persists in kernel 5.2.6 (archlinux current default). Just to
mention, I tested with different module options and also two available
firmwares I found (rtlwifi/rtl8192eefw.bin and
rtlwifi/rtl8192eefw_new.bin).
Would you please take some time to look at the bug? I can provide any
additional information needed.
Please let me know if we can make rtl8192ee driver better.
Best regards,
Sergey Kharitonov
^ permalink raw reply
* MTU setting for frame injection with ath9k driver
From: Roberto Riggio @ 2019-08-08 20:46 UTC (permalink / raw)
To: linux-wireless
Hi,
I am working on some frame injection from userspace using the ath9k
driver. Everything works fine without aggregation. However, I would
like to inject some A-MSDU frames. The problem is that if I try to set
an MTU larger than 2304 I get this message:
ifconfig: SIOCSIFMTU: Invalid argument
Is this a limitation of the driver/firmware? Is it possible to extend
the max MTU?
Thanks
^ permalink raw reply
* Fwd: Delivery Status Notification (Failure)
From: Nigel Sollars @ 2019-08-08 19:58 UTC (permalink / raw)
To: linux-wireless
In-Reply-To: <5d4c34ea.1c69fb81.a7a36.5f7f.GMR@mx.google.com>
Hi,
So I have been trying to reach out in aim to get this driver fixed as
its regressed now to a total non working state.
The card can see access points, but thats about as good as it gets as
trying to connect to any networks ( either 2.4 ot 5 Ghz ) results in
the following,
wlp3s0: CTRL-EVENT-SCAN-FAILED ret=-22 retry=1
( alot of these ) which then resets connection status with a failed timeout.
I am currently running FedoraCore 30 with the 5.2.5-200 kernel updated
from 5.1.x yesterday. The firmware loaded is,
loaded firmware version 9.221.4.1 build 25532 op_mode iwldvm
Now with all that said, using a Linux Mint live boot from a usb device
yeilds the card working fine at both 2.4 and 5ghz speeds, it connects
within seconds. The kernal in this live boot is 4.15.x and uses the
same firmware build as my FC install.
I did see strange behavior with this card from around 4.18 to 20,
thinking the card might have developed a fault and obtained a new one.
This proved that this was not the case as I get the exact same
behavior from both cards.
Hope this information is helpful to solve quickly, please reach out
for more information if required
Thanks
Nige
--
“Science is a differential equation. Religion is a boundary condition.”
Alan Turing
^ permalink raw reply
* [PATCH] staging: wilc1000: Don't reset WILC CPU disgracefully
From: Adham.Abozaeid @ 2019-08-08 19:01 UTC (permalink / raw)
To: linux-wireless; +Cc: devel, gregkh, johannes, Ajay.Kathat, Adham.Abozaeid
From: Adham Abozaeid <adham.abozaeid@microchip.com>
Send abort request to WILC from wilc_wlan_stop instead of resetting the
CPU.
The abort request was being sent from wilc_wlan_cleanup after the CPU
was reset which wasn't the correct order. The abort request handler
in the chip will take care of resetting the CPU.
Signed-off-by: Adham Abozaeid <adham.abozaeid@microchip.com>
---
drivers/staging/wilc1000/wilc_netdev.c | 4 +-
drivers/staging/wilc1000/wilc_wlan.c | 69 ++++----------------------
drivers/staging/wilc1000/wilc_wlan.h | 5 +-
3 files changed, 16 insertions(+), 62 deletions(-)
diff --git a/drivers/staging/wilc1000/wilc_netdev.c b/drivers/staging/wilc1000/wilc_netdev.c
index 57510400f243..cd11c35adcfe 100644
--- a/drivers/staging/wilc1000/wilc_netdev.c
+++ b/drivers/staging/wilc1000/wilc_netdev.c
@@ -475,7 +475,7 @@ static void wilc_wlan_deinitialize(struct net_device *dev)
wlan_deinitialize_threads(dev);
deinit_irq(dev);
- wilc_wlan_stop(wl);
+ wilc_wlan_stop(wl, vif);
wilc_wlan_cleanup(dev);
wlan_deinit_locks(dev);
@@ -573,7 +573,7 @@ static int wilc_wlan_initialize(struct net_device *dev, struct wilc_vif *vif)
return 0;
fail_fw_start:
- wilc_wlan_stop(wl);
+ wilc_wlan_stop(wl, vif);
fail_irq_enable:
if (!wl->dev_irq_num &&
diff --git a/drivers/staging/wilc1000/wilc_wlan.c b/drivers/staging/wilc1000/wilc_wlan.c
index d4ca6467485c..6831999deac4 100644
--- a/drivers/staging/wilc1000/wilc_wlan.c
+++ b/drivers/staging/wilc1000/wilc_wlan.c
@@ -968,60 +968,32 @@ int wilc_wlan_start(struct wilc *wilc)
return (ret < 0) ? ret : 0;
}
-int wilc_wlan_stop(struct wilc *wilc)
+int wilc_wlan_stop(struct wilc *wilc, struct wilc_vif *vif)
{
u32 reg = 0;
int ret;
- u8 timeout = 10;
acquire_bus(wilc, WILC_BUS_ACQUIRE_AND_WAKEUP);
- ret = wilc->hif_func->hif_read_reg(wilc, WILC_GLB_RESET_0, ®);
+ ret = wilc->hif_func->hif_read_reg(wilc, WILC_GP_REG_0, ®);
if (!ret) {
+ netdev_err(vif->ndev, "Error while reading reg\n");
release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
- return ret;
+ return -EIO;
}
- reg &= ~BIT(10);
- ret = wilc->hif_func->hif_write_reg(wilc, WILC_GLB_RESET_0, reg);
+ ret = wilc->hif_func->hif_write_reg(wilc, WILC_GP_REG_0,
+ (reg | WILC_ABORT_REQ_BIT));
if (!ret) {
+ netdev_err(vif->ndev, "Error while writing reg\n");
release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
- return ret;
+ return -EIO;
}
- do {
- ret = wilc->hif_func->hif_read_reg(wilc,
- WILC_GLB_RESET_0, ®);
- if (!ret) {
- release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
- return ret;
- }
-
- if ((reg & BIT(10))) {
- reg &= ~BIT(10);
- ret = wilc->hif_func->hif_write_reg(wilc,
- WILC_GLB_RESET_0,
- reg);
- timeout--;
- } else {
- ret = wilc->hif_func->hif_read_reg(wilc,
- WILC_GLB_RESET_0,
- ®);
- if (!ret) {
- release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
- return ret;
- }
- break;
- }
+ wilc->hif_func->hif_read_reg(wilc, WILC_FW_HOST_COMM, ®);
+ reg = BIT(0);
- } while (timeout);
- reg = (BIT(0) | BIT(1) | BIT(2) | BIT(3) | BIT(8) | BIT(9) | BIT(26) |
- BIT(29) | BIT(30) | BIT(31));
-
- wilc->hif_func->hif_write_reg(wilc, WILC_GLB_RESET_0, reg);
- reg = (u32)~BIT(10);
-
- ret = wilc->hif_func->hif_write_reg(wilc, WILC_GLB_RESET_0, reg);
+ ret = wilc->hif_func->hif_write_reg(wilc, WILC_FW_HOST_COMM, reg);
release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
@@ -1032,8 +1004,6 @@ void wilc_wlan_cleanup(struct net_device *dev)
{
struct txq_entry_t *tqe;
struct rxq_entry_t *rqe;
- u32 reg = 0;
- int ret;
struct wilc_vif *vif = netdev_priv(dev);
struct wilc *wilc = vif->wilc;
@@ -1058,23 +1028,6 @@ void wilc_wlan_cleanup(struct net_device *dev)
wilc->rx_buffer = NULL;
kfree(wilc->tx_buffer);
wilc->tx_buffer = NULL;
-
- acquire_bus(wilc, WILC_BUS_ACQUIRE_AND_WAKEUP);
-
- ret = wilc->hif_func->hif_read_reg(wilc, WILC_GP_REG_0, ®);
- if (!ret) {
- release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
- return;
- }
-
- ret = wilc->hif_func->hif_write_reg(wilc, WILC_GP_REG_0,
- (reg | ABORT_INT));
- if (!ret) {
- release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
- return;
- }
-
- release_bus(wilc, WILC_BUS_RELEASE_ALLOW_SLEEP);
wilc->hif_func->hif_deinit(NULL);
}
diff --git a/drivers/staging/wilc1000/wilc_wlan.h b/drivers/staging/wilc1000/wilc_wlan.h
index 802f11807659..f566d040bb72 100644
--- a/drivers/staging/wilc1000/wilc_wlan.h
+++ b/drivers/staging/wilc1000/wilc_wlan.h
@@ -98,6 +98,7 @@
#define WILC_VMM_TBL_RX_SHADOW_BASE WILC_AHB_SHARE_MEM_BASE
#define WILC_VMM_TBL_RX_SHADOW_SIZE 256
+#define WILC_FW_HOST_COMM 0x13c0
#define WILC_GP_REG_0 0x149c
#define WILC_GP_REG_1 0x14a0
@@ -129,7 +130,7 @@
#define WILC_PLL_TO_SDIO 4
#define WILC_PLL_TO_SPI 2
-#define ABORT_INT BIT(31)
+#define WILC_ABORT_REQ_BIT BIT(31)
#define WILC_RX_BUFF_SIZE (96 * 1024)
#define WILC_TX_BUFF_SIZE (64 * 1024)
@@ -280,7 +281,7 @@ struct wilc_vif;
int wilc_wlan_firmware_download(struct wilc *wilc, const u8 *buffer,
u32 buffer_size);
int wilc_wlan_start(struct wilc *wilc);
-int wilc_wlan_stop(struct wilc *wilc);
+int wilc_wlan_stop(struct wilc *wilc, struct wilc_vif *vif);
int wilc_wlan_txq_add_net_pkt(struct net_device *dev, void *priv, u8 *buffer,
u32 buffer_size,
void (*tx_complete_fn)(void *, int));
--
2.17.1
^ permalink raw reply related
* Re: [PATCH 3/6] staging: wilc1000: remove unused members
From: Adham.Abozaeid @ 2019-08-08 18:16 UTC (permalink / raw)
To: dan.carpenter; +Cc: devel, gregkh, johannes, linux-wireless, Ajay.Kathat
In-Reply-To: <20190807110351.GM1974@kadam>
On 8/7/19 4:03 AM, Dan Carpenter wrote:
> External E-Mail
>
>
> On Tue, Aug 06, 2019 at 07:32:08PM +0000, Adham.Abozaeid@microchip.com wrote:
>> Hi Dan
>>
>> On 8/6/19 5:46 AM, Dan Carpenter wrote:
>>> External E-Mail
>>>
>>>
>>> On Thu, Jul 25, 2019 at 09:31:34PM +0000, Adham.Abozaeid@microchip.com wrote:
>>>> From: Adham Abozaeid <adham.abozaeid@microchip.com>
>>>>
>>>> remove obtaining_ip from struct wilc_vif
>>>>
>>> How is this "unused"? It looks like it is used to me.
>> The main usage of obtaining_ip was to track the inetadd_notifier status.
>> After removing the notifier and ip address timeout timer in the first and second patch,
>> the remaining usage became meaningless, and could be removed.
> This is exactly the level of detail that I would like in a commit
> description.
>
> regards,
> dan carpenter
>
>
^ 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