net: ethernet: mtk_wed: do not assume offload callbacks are always set
authorLorenzo Bianconi <lorenzo@kernel.org>
Wed, 13 Sep 2023 18:42:47 +0000 (20:42 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sat, 16 Sep 2023 10:18:57 +0000 (11:18 +0100)
Check if wlan.offload_enable and wlan.offload_disable callbacks are set
in mtk_wed_flow_add/mtk_wed_flow_remove since mt7996 will not rely
on them.

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mediatek/mtk_wed.c

index 94376aa2b34c57c1a983f77003879a1c1a93f2a5..e7d3525d2e30898c98175111af0ffada6e1a7177 100644 (file)
@@ -1713,19 +1713,20 @@ mtk_wed_irq_set_mask(struct mtk_wed_device *dev, u32 mask)
 int mtk_wed_flow_add(int index)
 {
        struct mtk_wed_hw *hw = hw_list[index];
-       int ret;
+       int ret = 0;
 
-       if (!hw || !hw->wed_dev)
-               return -ENODEV;
+       mutex_lock(&hw_lock);
 
-       if (hw->num_flows) {
-               hw->num_flows++;
-               return 0;
+       if (!hw || !hw->wed_dev) {
+               ret = -ENODEV;
+               goto out;
        }
 
-       mutex_lock(&hw_lock);
-       if (!hw->wed_dev) {
-               ret = -ENODEV;
+       if (!hw->wed_dev->wlan.offload_enable)
+               goto out;
+
+       if (hw->num_flows) {
+               hw->num_flows++;
                goto out;
        }
 
@@ -1744,14 +1745,15 @@ void mtk_wed_flow_remove(int index)
 {
        struct mtk_wed_hw *hw = hw_list[index];
 
-       if (!hw)
-               return;
+       mutex_lock(&hw_lock);
 
-       if (--hw->num_flows)
-               return;
+       if (!hw || !hw->wed_dev)
+               goto out;
 
-       mutex_lock(&hw_lock);
-       if (!hw->wed_dev)
+       if (!hw->wed_dev->wlan.offload_disable)
+               goto out;
+
+       if (--hw->num_flows)
                goto out;
 
        hw->wed_dev->wlan.offload_disable(hw->wed_dev);