Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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 <lorenzo@kernel.org>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Lorenzo Bianconi and committed by
David S. Miller
01b38de1 c123e0d3

+17 -15
+17 -15
drivers/net/ethernet/mediatek/mtk_wed.c
··· 1713 1713 int mtk_wed_flow_add(int index) 1714 1714 { 1715 1715 struct mtk_wed_hw *hw = hw_list[index]; 1716 - int ret; 1716 + int ret = 0; 1717 1717 1718 - if (!hw || !hw->wed_dev) 1719 - return -ENODEV; 1718 + mutex_lock(&hw_lock); 1719 + 1720 + if (!hw || !hw->wed_dev) { 1721 + ret = -ENODEV; 1722 + goto out; 1723 + } 1724 + 1725 + if (!hw->wed_dev->wlan.offload_enable) 1726 + goto out; 1720 1727 1721 1728 if (hw->num_flows) { 1722 1729 hw->num_flows++; 1723 - return 0; 1724 - } 1725 - 1726 - mutex_lock(&hw_lock); 1727 - if (!hw->wed_dev) { 1728 - ret = -ENODEV; 1729 1730 goto out; 1730 1731 } 1731 1732 ··· 1745 1744 { 1746 1745 struct mtk_wed_hw *hw = hw_list[index]; 1747 1746 1748 - if (!hw) 1749 - return; 1747 + mutex_lock(&hw_lock); 1748 + 1749 + if (!hw || !hw->wed_dev) 1750 + goto out; 1751 + 1752 + if (!hw->wed_dev->wlan.offload_disable) 1753 + goto out; 1750 1754 1751 1755 if (--hw->num_flows) 1752 - return; 1753 - 1754 - mutex_lock(&hw_lock); 1755 - if (!hw->wed_dev) 1756 1756 goto out; 1757 1757 1758 1758 hw->wed_dev->wlan.offload_disable(hw->wed_dev);