mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 05:54:26 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			69 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From: Lorenzo Bianconi <lorenzo@kernel.org>
 | |
| 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 <lorenzo@kernel.org>
 | |
| Reviewed-by: Simon Horman <horms@kernel.org>
 | |
| Signed-off-by: David S. Miller <davem@davemloft.net>
 | |
| ---
 | |
| 
 | |
| --- a/drivers/net/ethernet/mediatek/mtk_wed.c
 | |
| +++ b/drivers/net/ethernet/mediatek/mtk_wed.c
 | |
| @@ -1712,19 +1712,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;
 | |
|  	}
 | |
|  
 | |
| @@ -1743,14 +1744,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);
 |