On Sat, Oct 10, 2020 at 08:47:18PM +0200, avv. Nicola Dell'Uomo wrote:
>
> Do you mean by restoring GENERIC #103 or by compiling from latest src
> without your patch?
>
> On 10/10/20 20:20, Stefan Sperling wrote:
> > On Sat, Oct 10, 2020 at 08:07:09PM +0200, avv. Nicola Dell'Uomo wrote:
> > > Hi,
> > >
> > > I applied the patch and - at the moment - the driver works without errors.
> > >
> > > I'll report if new errors arise.
> > >
> > > Thank you, let me know if you need diagnostic datas of some kind!
> > Could you please check if the problem appears again with the patch removed?
There was some off-list discussion which followed.
In conclusion, there are at least two problems: A fatal firmware error
on MAC context removal, and an issue where the AP won't accept the iwx
client on 5GHz which results in a failure to get link.
Our driver is sending some unnecessary data in the mac context removal
command which Linux does not send. This seems to trigger an assertion
in firmware code.
As far as I understand the firmware error isn't 100% reproducible even
with the old kernel that first exposed the problem. I guess this simply
means the error will only occur if the AP behaves in a certain way.
The AP (Linksys 3200ACM) appears to be forcefully de-authing the client
for unknown reasons if the client attempts to connect on 5GHz. This is
why the iwx cannot get link. Forcing iwx into 11g mode works around this.
There's nothing more I could do here for now; this needs thorough debugging
by someone with sufficient time and a comparable hardware setup.
This patch should still be worth committing since it at least seems
to get the firmware error out of the way. Should I just go ahead and
get this tested in-tree or does someone else want to try it first?
The same problem exits in iwm(4) and should probably also be patched there.
diff 97da2ad2205f020c8bd54c846ec35e7fc8c6fe75 /usr/src
blob - 0482cf039bdd9b8060dbf1b2b89348e18db4d233
file + sys/dev/pci/if_iwx.c
--- sys/dev/pci/if_iwx.c
+++ sys/dev/pci/if_iwx.c
@@ -5150,6 +5150,9 @@
in->in_color));
cmd->action = htole32(action);
+ if (action == IWX_FW_CTXT_ACTION_REMOVE)
+ return;
+
if (ic->ic_opmode == IEEE80211_M_MONITOR)
cmd->mac_type = htole32(IWX_FW_MAC_TYPE_LISTENER);
else if (ic->ic_opmode == IEEE80211_M_STA)
@@ -5269,6 +5272,11 @@
iwx_mac_ctxt_cmd_common(sc, in, &cmd, action);
+ if (action == IWX_FW_CTXT_ACTION_REMOVE) {
+ return iwx_send_cmd_pdu(sc, IWX_MAC_CONTEXT_CMD, 0,
+ sizeof(cmd), &cmd);
+ }
+
if (ic->ic_opmode == IEEE80211_M_MONITOR) {
cmd.filter_flags |= htole32(IWX_MAC_FILTER_IN_PROMISC |
IWX_MAC_FILTER_IN_CONTROL_AND_MGMT |