1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- From: Lorenzo Bianconi <[email protected]>
- Date: Wed, 13 Sep 2023 20:42:47 +0200
- Subject: [PATCH] net: ethernet: mtk_wed: do not assume offload callbacks are
- always set
- 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 <[email protected]>
- Reviewed-by: Simon Horman <[email protected]>
- Signed-off-by: David S. Miller <[email protected]>
- ---
- --- a/drivers/net/ethernet/mediatek/mtk_wed.c
- +++ b/drivers/net/ethernet/mediatek/mtk_wed.c
- @@ -1709,19 +1709,20 @@ mtk_wed_irq_set_mask(struct mtk_wed_devi
- 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;
- }
-
- @@ -1740,14 +1741,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);
|