2019-11-18 08:27:54

by Sergey Matyukevich

[permalink] [raw]
Subject: [PATCH 1/7] qtnfmac: remove VIF in firmware in case of error

From: Igor Mitsyanko <[email protected]>

Currently in case of error when registering network device with the
kernel, we won't properly cleanup VIF state in firmware due to DEL_VIF
command will not be send to wifi card. Make sure it does.

Signed-off-by: Igor Mitsyanko <[email protected]>
---
drivers/net/wireless/quantenna/qtnfmac/cfg80211.c | 8 +++-----
drivers/net/wireless/quantenna/qtnfmac/core.c | 19 +++++++++----------
2 files changed, 12 insertions(+), 15 deletions(-)

diff --git a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
index aa0ed0f2b973..4f02159a69db 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
@@ -238,22 +238,20 @@ static struct wireless_dev *qtnf_add_virtual_intf(struct wiphy *wiphy,
pr_err("VIF%u.%u: FW reported bad MAC: %pM\n",
mac->macid, vif->vifid, vif->mac_addr);
ret = -EINVAL;
- goto err_mac;
+ goto error_del_vif;
}

ret = qtnf_core_net_attach(mac, vif, name, name_assign_t);
if (ret) {
pr_err("VIF%u.%u: failed to attach netdev\n", mac->macid,
vif->vifid);
- goto err_net;
+ goto error_del_vif;
}

vif->wdev.netdev = vif->netdev;
return &vif->wdev;

-err_net:
- vif->netdev = NULL;
-err_mac:
+error_del_vif:
qtnf_cmd_send_del_intf(vif);
err_cmd:
vif->wdev.iftype = NL80211_IFTYPE_UNSPECIFIED;
diff --git a/drivers/net/wireless/quantenna/qtnfmac/core.c b/drivers/net/wireless/quantenna/qtnfmac/core.c
index 8116b224c946..9ccc17ad1176 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/core.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/core.c
@@ -465,10 +465,8 @@ int qtnf_core_net_attach(struct qtnf_wmac *mac, struct qtnf_vif *vif,

dev = alloc_netdev_mqs(sizeof(struct qtnf_vif *), name,
name_assign_type, ether_setup, 1, 1);
- if (!dev) {
- vif->wdev.iftype = NL80211_IFTYPE_UNSPECIFIED;
+ if (!dev)
return -ENOMEM;
- }

vif->netdev = dev;

@@ -491,7 +489,7 @@ int qtnf_core_net_attach(struct qtnf_wmac *mac, struct qtnf_vif *vif,
ret = register_netdevice(dev);
if (ret) {
free_netdev(dev);
- vif->wdev.iftype = NL80211_IFTYPE_UNSPECIFIED;
+ vif->netdev = NULL;
}

return ret;
@@ -588,19 +586,19 @@ static int qtnf_core_mac_attach(struct qtnf_bus *bus, unsigned int macid)
ret = qtnf_cmd_send_get_phy_params(mac);
if (ret) {
pr_err("MAC%u: failed to get PHY settings\n", macid);
- goto error;
+ goto error_del_vif;
}

ret = qtnf_mac_init_bands(mac);
if (ret) {
pr_err("MAC%u: failed to init bands\n", macid);
- goto error;
+ goto error_del_vif;
}

ret = qtnf_wiphy_register(&bus->hw_info, mac);
if (ret) {
pr_err("MAC%u: wiphy registration failed\n", macid);
- goto error;
+ goto error_del_vif;
}

mac->wiphy_registered = 1;
@@ -612,15 +610,16 @@ static int qtnf_core_mac_attach(struct qtnf_bus *bus, unsigned int macid)

if (ret) {
pr_err("MAC%u: failed to attach netdev\n", macid);
- vif->wdev.iftype = NL80211_IFTYPE_UNSPECIFIED;
- vif->netdev = NULL;
- goto error;
+ goto error_del_vif;
}

pr_debug("MAC%u initialized\n", macid);

return 0;

+error_del_vif:
+ qtnf_cmd_send_del_intf(vif);
+ vif->wdev.iftype = NL80211_IFTYPE_UNSPECIFIED;
error:
qtnf_core_mac_detach(bus, macid);
return ret;
--
2.11.0


2019-11-20 07:45:11

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH 1/7] qtnfmac: remove VIF in firmware in case of error

Sergey Matyukevich <[email protected]> wrote:

> From: Igor Mitsyanko <[email protected]>
>
> Currently in case of error when registering network device with the
> kernel, we won't properly cleanup VIF state in firmware due to DEL_VIF
> command will not be send to wifi card. Make sure it does.
>
> Signed-off-by: Igor Mitsyanko <[email protected]>

7 patches applied to wireless-drivers-next.git, thanks.

45028223425d qtnfmac: remove VIF in firmware in case of error
decfc5c70d20 qtnfmac: track broadcast domain of each interface
904628d3130b qtnfmac: add interface ID to each packet
4e14e76cee38 qtnfmac: advertise netdev port parent ID
1db359946bd1 qtnfmac: signal that all packets coming from device are already flooded
be4f00cf1592 qtnfmac: add TLV for extension IEs
df0af4c7bac4 qtnfmac: process HE capabilities requests

--
https://patchwork.kernel.org/patch/11249063/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches