mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 09:12:39 +00:00
65 lines
1.9 KiB
Diff
65 lines
1.9 KiB
Diff
|
From 0d56e5c191b197e1d30a0a4c92628836dafced0f Mon Sep 17 00:00:00 2001
|
||
|
From: Wei Yongjun <weiyongjun1@huawei.com>
|
||
|
Date: Tue, 18 May 2021 11:24:13 +0000
|
||
|
Subject: [PATCH] net: dsa: qca8k: fix missing unlock on error in
|
||
|
qca8k_vlan_(add|del)
|
||
|
|
||
|
Add the missing unlock before return from function qca8k_vlan_add()
|
||
|
and qca8k_vlan_del() in the error handling case.
|
||
|
|
||
|
Fixes: 028f5f8ef44f ("net: dsa: qca8k: handle error with qca8k_read operation")
|
||
|
Reported-by: Hulk Robot <hulkci@huawei.com>
|
||
|
Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
|
||
|
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
|
||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||
|
---
|
||
|
drivers/net/dsa/qca8k.c | 16 ++++++++++------
|
||
|
1 file changed, 10 insertions(+), 6 deletions(-)
|
||
|
|
||
|
--- a/drivers/net/dsa/qca8k.c
|
||
|
+++ b/drivers/net/dsa/qca8k.c
|
||
|
@@ -506,8 +506,10 @@ qca8k_vlan_add(struct qca8k_priv *priv,
|
||
|
goto out;
|
||
|
|
||
|
reg = qca8k_read(priv, QCA8K_REG_VTU_FUNC0);
|
||
|
- if (reg < 0)
|
||
|
- return reg;
|
||
|
+ if (reg < 0) {
|
||
|
+ ret = reg;
|
||
|
+ goto out;
|
||
|
+ }
|
||
|
reg |= QCA8K_VTU_FUNC0_VALID | QCA8K_VTU_FUNC0_IVL_EN;
|
||
|
reg &= ~(QCA8K_VTU_FUNC0_EG_MODE_MASK << QCA8K_VTU_FUNC0_EG_MODE_S(port));
|
||
|
if (untagged)
|
||
|
@@ -519,7 +521,7 @@ qca8k_vlan_add(struct qca8k_priv *priv,
|
||
|
|
||
|
ret = qca8k_write(priv, QCA8K_REG_VTU_FUNC0, reg);
|
||
|
if (ret)
|
||
|
- return ret;
|
||
|
+ goto out;
|
||
|
ret = qca8k_vlan_access(priv, QCA8K_VLAN_LOAD, vid);
|
||
|
|
||
|
out:
|
||
|
@@ -541,8 +543,10 @@ qca8k_vlan_del(struct qca8k_priv *priv,
|
||
|
goto out;
|
||
|
|
||
|
reg = qca8k_read(priv, QCA8K_REG_VTU_FUNC0);
|
||
|
- if (reg < 0)
|
||
|
- return reg;
|
||
|
+ if (reg < 0) {
|
||
|
+ ret = reg;
|
||
|
+ goto out;
|
||
|
+ }
|
||
|
reg &= ~(3 << QCA8K_VTU_FUNC0_EG_MODE_S(port));
|
||
|
reg |= QCA8K_VTU_FUNC0_EG_MODE_NOT <<
|
||
|
QCA8K_VTU_FUNC0_EG_MODE_S(port);
|
||
|
@@ -564,7 +568,7 @@ qca8k_vlan_del(struct qca8k_priv *priv,
|
||
|
} else {
|
||
|
ret = qca8k_write(priv, QCA8K_REG_VTU_FUNC0, reg);
|
||
|
if (ret)
|
||
|
- return ret;
|
||
|
+ goto out;
|
||
|
ret = qca8k_vlan_access(priv, QCA8K_VLAN_LOAD, vid);
|
||
|
}
|
||
|
|