Re: [PATCH v2] rtlwifi: pci: use dev_kfree_skb_irq instead of kfree_skb in rtl_pci_reset_trx_ring

2016-05-06 Thread Alexander Duyck
On Fri, May 6, 2016 at 11:01 AM, Larry Finger  wrote:
> On 05/06/2016 12:13 PM, Alexander Duyck wrote:
>>
>> On Fri, May 6, 2016 at 9:33 AM, Wang YanQing  wrote:
>>>
>>> We can't use kfree_skb in irq disable context, because spin_lock_irqsave
>>> make sure we are always in irq disable context, use dev_kfree_skb_irq
>>> instead of kfree_skb is better than dev_kfree_skb_any.
>>>
>>> This patch fix below kernel warning:
>>> [ 7612.095528] [ cut here ]
>>> [ 7612.095546] WARNING: CPU: 3 PID: 4460 at kernel/softirq.c:150
>>> __local_bh_enable_ip+0x58/0x80()
>>> [ 7612.095550] Modules linked in: rtl8723be x86_pkg_temp_thermal
>>> btcoexist rtl_pci rtlwifi rtl8723_common
>>> [ 7612.095567] CPU: 3 PID: 4460 Comm: ifconfig Tainted: GW
>>> 4.4.0+ #4
>>> [ 7612.095570] Hardware name: LENOVO 20DFA04FCD/20DFA04FCD, BIOS J5ET48WW
>>> (1.19 ) 08/27/2015
>>> [ 7612.095574]    da37fc70 c12ce7c5  da37fca0
>>> c104cc59 c19d4454
>>> [ 7612.095584]  0003 116c c19d4784 0096 c10508a8 c10508a8
>>> 0200 c1b42400
>>> [ 7612.095594]  f29be780 da37fcb0 c104ccad 0009  da37fcbc
>>> c10508a8 f21f08b8
>>> [ 7612.095604] Call Trace:
>>> [ 7612.095614]  [] dump_stack+0x41/0x5c
>>> [ 7612.095620]  [] warn_slowpath_common+0x89/0xc0
>>> [ 7612.095628]  [] ? __local_bh_enable_ip+0x58/0x80
>>> [ 7612.095634]  [] ? __local_bh_enable_ip+0x58/0x80
>>> [ 7612.095640]  [] warn_slowpath_null+0x1d/0x20
>>> [ 7612.095646]  [] __local_bh_enable_ip+0x58/0x80
>>> [ 7612.095653]  [] destroy_conntrack+0x64/0xa0
>>> [ 7612.095660]  [] nf_conntrack_destroy+0xf/0x20
>>> [ 7612.095665]  [] skb_release_head_state+0x55/0xa0
>>> [ 7612.095670]  [] skb_release_all+0xb/0x20
>>> [ 7612.095674]  [] __kfree_skb+0xb/0x60
>>> [ 7612.095679]  [] kfree_skb+0x30/0x70
>>> [ 7612.095686]  [] ? rtl_pci_reset_trx_ring+0x22d/0x370
>>> [rtl_pci]
>>> [ 7612.095692]  [] rtl_pci_reset_trx_ring+0x22d/0x370 [rtl_pci]
>>> [ 7612.095698]  [] rtl_pci_start+0x19/0x190 [rtl_pci]
>>> [ 7612.095705]  [] rtl_op_start+0x56/0x90 [rtlwifi]
>>> [ 7612.095712]  [] drv_start+0x36/0xc0
>>> [ 7612.095717]  [] ieee80211_do_open+0x2d3/0x890
>>> [ 7612.095725]  [] ? call_netdevice_notifiers_info+0x2e/0x60
>>> [ 7612.095730]  [] ieee80211_open+0x4d/0x50
>>> [ 7612.095736]  [] __dev_open+0xa3/0x130
>>> [ 7612.095742]  [] ? _raw_spin_unlock_bh+0x13/0x20
>>> [ 7612.095748]  [] __dev_change_flags+0x89/0x140
>>> [ 7612.095753]  [] ? selinux_capable+0xd/0x10
>>> [ 7612.095759]  [] dev_change_flags+0x29/0x60
>>> [ 7612.095765]  [] devinet_ioctl+0x553/0x670
>>> [ 7612.095772]  [] ? _copy_to_user+0x28/0x40
>>> [ 7612.095777]  [] inet_ioctl+0x85/0xb0
>>> [ 7612.095783]  [] sock_ioctl+0x67/0x260
>>> [ 7612.095788]  [] ? sock_fasync+0x80/0x80
>>> [ 7612.095795]  [] do_vfs_ioctl+0x6b/0x550
>>> [ 7612.095800]  [] ? selinux_file_ioctl+0x102/0x1e0
>>> [ 7612.095807]  [] ? timekeeping_suspend+0x294/0x320
>>> [ 7612.095813]  [] ? __hrtimer_run_queues+0x14a/0x210
>>> [ 7612.095820]  [] ? security_file_ioctl+0x34/0x50
>>> [ 7612.095827]  [] SyS_ioctl+0x70/0x80
>>> [ 7612.095832]  [] do_fast_syscall_32+0x84/0x120
>>> [ 7612.095839]  [] sysenter_past_esp+0x36/0x55
>>> [ 7612.095844] ---[ end trace 97e9c637a20e8348 ]---
>>>
>>> Signed-off-by: Wang YanQing 
>>> Cc: Stable 
>>> ---
>>>   Changes:
>>>   v1-v2:
>>>   1: add a Cc to stable.
>>>
>>>   drivers/net/wireless/realtek/rtlwifi/pci.c | 2 +-
>>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/net/wireless/realtek/rtlwifi/pci.c
>>> b/drivers/net/wireless/realtek/rtlwifi/pci.c
>>> index 1ac41b8..99a3a03 100644
>>> --- a/drivers/net/wireless/realtek/rtlwifi/pci.c
>>> +++ b/drivers/net/wireless/realtek/rtlwifi/pci.c
>>> @@ -1572,7 +1572,7 @@ int rtl_pci_reset_trx_ring(struct ieee80211_hw *hw)
>>>   true,
>>>
>>> HW_DESC_TXBUFF_ADDR),
>>>   skb->len,
>>> PCI_DMA_TODEVICE);
>>> -   kfree_skb(skb);
>>> +   dev_kfree_skb_irq(skb);
>>>  ring->idx = (ring->idx + 1) %
>>> ring->entries;
>>>  }
>>>  ring->idx = 0;
>>
>>
>> Is this always called in IRQ context?  You might be better off using
>> dev_kfree_skb_any instead if this is something that can be called from
>> net_device_ops since that way you avoid having to call into the Tx
>> softirq cleanup routine to free the buffers later unless you really
>> need it.
>>
>> - Alex
>>
>
> Alex,
>
> Six lines below the change is a spin_unlock_irqrestore(), which is always
> called. I believe that the patch is correct.

Okay.  That works then.

Thanks.

- Alex
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo 

Re: [PATCH v2] rtlwifi: pci: use dev_kfree_skb_irq instead of kfree_skb in rtl_pci_reset_trx_ring

2016-05-06 Thread Larry Finger

On 05/06/2016 12:13 PM, Alexander Duyck wrote:

On Fri, May 6, 2016 at 9:33 AM, Wang YanQing  wrote:

We can't use kfree_skb in irq disable context, because spin_lock_irqsave
make sure we are always in irq disable context, use dev_kfree_skb_irq
instead of kfree_skb is better than dev_kfree_skb_any.

This patch fix below kernel warning:
[ 7612.095528] [ cut here ]
[ 7612.095546] WARNING: CPU: 3 PID: 4460 at kernel/softirq.c:150 
__local_bh_enable_ip+0x58/0x80()
[ 7612.095550] Modules linked in: rtl8723be x86_pkg_temp_thermal btcoexist 
rtl_pci rtlwifi rtl8723_common
[ 7612.095567] CPU: 3 PID: 4460 Comm: ifconfig Tainted: GW   4.4.0+ 
#4
[ 7612.095570] Hardware name: LENOVO 20DFA04FCD/20DFA04FCD, BIOS J5ET48WW (1.19 
) 08/27/2015
[ 7612.095574]    da37fc70 c12ce7c5  da37fca0 c104cc59 
c19d4454
[ 7612.095584]  0003 116c c19d4784 0096 c10508a8 c10508a8 0200 
c1b42400
[ 7612.095594]  f29be780 da37fcb0 c104ccad 0009  da37fcbc c10508a8 
f21f08b8
[ 7612.095604] Call Trace:
[ 7612.095614]  [] dump_stack+0x41/0x5c
[ 7612.095620]  [] warn_slowpath_common+0x89/0xc0
[ 7612.095628]  [] ? __local_bh_enable_ip+0x58/0x80
[ 7612.095634]  [] ? __local_bh_enable_ip+0x58/0x80
[ 7612.095640]  [] warn_slowpath_null+0x1d/0x20
[ 7612.095646]  [] __local_bh_enable_ip+0x58/0x80
[ 7612.095653]  [] destroy_conntrack+0x64/0xa0
[ 7612.095660]  [] nf_conntrack_destroy+0xf/0x20
[ 7612.095665]  [] skb_release_head_state+0x55/0xa0
[ 7612.095670]  [] skb_release_all+0xb/0x20
[ 7612.095674]  [] __kfree_skb+0xb/0x60
[ 7612.095679]  [] kfree_skb+0x30/0x70
[ 7612.095686]  [] ? rtl_pci_reset_trx_ring+0x22d/0x370 [rtl_pci]
[ 7612.095692]  [] rtl_pci_reset_trx_ring+0x22d/0x370 [rtl_pci]
[ 7612.095698]  [] rtl_pci_start+0x19/0x190 [rtl_pci]
[ 7612.095705]  [] rtl_op_start+0x56/0x90 [rtlwifi]
[ 7612.095712]  [] drv_start+0x36/0xc0
[ 7612.095717]  [] ieee80211_do_open+0x2d3/0x890
[ 7612.095725]  [] ? call_netdevice_notifiers_info+0x2e/0x60
[ 7612.095730]  [] ieee80211_open+0x4d/0x50
[ 7612.095736]  [] __dev_open+0xa3/0x130
[ 7612.095742]  [] ? _raw_spin_unlock_bh+0x13/0x20
[ 7612.095748]  [] __dev_change_flags+0x89/0x140
[ 7612.095753]  [] ? selinux_capable+0xd/0x10
[ 7612.095759]  [] dev_change_flags+0x29/0x60
[ 7612.095765]  [] devinet_ioctl+0x553/0x670
[ 7612.095772]  [] ? _copy_to_user+0x28/0x40
[ 7612.095777]  [] inet_ioctl+0x85/0xb0
[ 7612.095783]  [] sock_ioctl+0x67/0x260
[ 7612.095788]  [] ? sock_fasync+0x80/0x80
[ 7612.095795]  [] do_vfs_ioctl+0x6b/0x550
[ 7612.095800]  [] ? selinux_file_ioctl+0x102/0x1e0
[ 7612.095807]  [] ? timekeeping_suspend+0x294/0x320
[ 7612.095813]  [] ? __hrtimer_run_queues+0x14a/0x210
[ 7612.095820]  [] ? security_file_ioctl+0x34/0x50
[ 7612.095827]  [] SyS_ioctl+0x70/0x80
[ 7612.095832]  [] do_fast_syscall_32+0x84/0x120
[ 7612.095839]  [] sysenter_past_esp+0x36/0x55
[ 7612.095844] ---[ end trace 97e9c637a20e8348 ]---

Signed-off-by: Wang YanQing 
Cc: Stable 
---
  Changes:
  v1-v2:
  1: add a Cc to stable.

  drivers/net/wireless/realtek/rtlwifi/pci.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/realtek/rtlwifi/pci.c 
b/drivers/net/wireless/realtek/rtlwifi/pci.c
index 1ac41b8..99a3a03 100644
--- a/drivers/net/wireless/realtek/rtlwifi/pci.c
+++ b/drivers/net/wireless/realtek/rtlwifi/pci.c
@@ -1572,7 +1572,7 @@ int rtl_pci_reset_trx_ring(struct ieee80211_hw *hw)
  true,
  HW_DESC_TXBUFF_ADDR),
  skb->len, PCI_DMA_TODEVICE);
-   kfree_skb(skb);
+   dev_kfree_skb_irq(skb);
 ring->idx = (ring->idx + 1) % ring->entries;
 }
 ring->idx = 0;


Is this always called in IRQ context?  You might be better off using
dev_kfree_skb_any instead if this is something that can be called from
net_device_ops since that way you avoid having to call into the Tx
softirq cleanup routine to free the buffers later unless you really
need it.

- Alex



Alex,

Six lines below the change is a spin_unlock_irqrestore(), which is always 
called. I believe that the patch is correct.


Larry

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2] rtlwifi: pci: use dev_kfree_skb_irq instead of kfree_skb in rtl_pci_reset_trx_ring

2016-05-06 Thread Alexander Duyck
On Fri, May 6, 2016 at 9:33 AM, Wang YanQing  wrote:
> We can't use kfree_skb in irq disable context, because spin_lock_irqsave
> make sure we are always in irq disable context, use dev_kfree_skb_irq
> instead of kfree_skb is better than dev_kfree_skb_any.
>
> This patch fix below kernel warning:
> [ 7612.095528] [ cut here ]
> [ 7612.095546] WARNING: CPU: 3 PID: 4460 at kernel/softirq.c:150 
> __local_bh_enable_ip+0x58/0x80()
> [ 7612.095550] Modules linked in: rtl8723be x86_pkg_temp_thermal btcoexist 
> rtl_pci rtlwifi rtl8723_common
> [ 7612.095567] CPU: 3 PID: 4460 Comm: ifconfig Tainted: GW   
> 4.4.0+ #4
> [ 7612.095570] Hardware name: LENOVO 20DFA04FCD/20DFA04FCD, BIOS J5ET48WW 
> (1.19 ) 08/27/2015
> [ 7612.095574]    da37fc70 c12ce7c5  da37fca0 
> c104cc59 c19d4454
> [ 7612.095584]  0003 116c c19d4784 0096 c10508a8 c10508a8 
> 0200 c1b42400
> [ 7612.095594]  f29be780 da37fcb0 c104ccad 0009  da37fcbc 
> c10508a8 f21f08b8
> [ 7612.095604] Call Trace:
> [ 7612.095614]  [] dump_stack+0x41/0x5c
> [ 7612.095620]  [] warn_slowpath_common+0x89/0xc0
> [ 7612.095628]  [] ? __local_bh_enable_ip+0x58/0x80
> [ 7612.095634]  [] ? __local_bh_enable_ip+0x58/0x80
> [ 7612.095640]  [] warn_slowpath_null+0x1d/0x20
> [ 7612.095646]  [] __local_bh_enable_ip+0x58/0x80
> [ 7612.095653]  [] destroy_conntrack+0x64/0xa0
> [ 7612.095660]  [] nf_conntrack_destroy+0xf/0x20
> [ 7612.095665]  [] skb_release_head_state+0x55/0xa0
> [ 7612.095670]  [] skb_release_all+0xb/0x20
> [ 7612.095674]  [] __kfree_skb+0xb/0x60
> [ 7612.095679]  [] kfree_skb+0x30/0x70
> [ 7612.095686]  [] ? rtl_pci_reset_trx_ring+0x22d/0x370 [rtl_pci]
> [ 7612.095692]  [] rtl_pci_reset_trx_ring+0x22d/0x370 [rtl_pci]
> [ 7612.095698]  [] rtl_pci_start+0x19/0x190 [rtl_pci]
> [ 7612.095705]  [] rtl_op_start+0x56/0x90 [rtlwifi]
> [ 7612.095712]  [] drv_start+0x36/0xc0
> [ 7612.095717]  [] ieee80211_do_open+0x2d3/0x890
> [ 7612.095725]  [] ? call_netdevice_notifiers_info+0x2e/0x60
> [ 7612.095730]  [] ieee80211_open+0x4d/0x50
> [ 7612.095736]  [] __dev_open+0xa3/0x130
> [ 7612.095742]  [] ? _raw_spin_unlock_bh+0x13/0x20
> [ 7612.095748]  [] __dev_change_flags+0x89/0x140
> [ 7612.095753]  [] ? selinux_capable+0xd/0x10
> [ 7612.095759]  [] dev_change_flags+0x29/0x60
> [ 7612.095765]  [] devinet_ioctl+0x553/0x670
> [ 7612.095772]  [] ? _copy_to_user+0x28/0x40
> [ 7612.095777]  [] inet_ioctl+0x85/0xb0
> [ 7612.095783]  [] sock_ioctl+0x67/0x260
> [ 7612.095788]  [] ? sock_fasync+0x80/0x80
> [ 7612.095795]  [] do_vfs_ioctl+0x6b/0x550
> [ 7612.095800]  [] ? selinux_file_ioctl+0x102/0x1e0
> [ 7612.095807]  [] ? timekeeping_suspend+0x294/0x320
> [ 7612.095813]  [] ? __hrtimer_run_queues+0x14a/0x210
> [ 7612.095820]  [] ? security_file_ioctl+0x34/0x50
> [ 7612.095827]  [] SyS_ioctl+0x70/0x80
> [ 7612.095832]  [] do_fast_syscall_32+0x84/0x120
> [ 7612.095839]  [] sysenter_past_esp+0x36/0x55
> [ 7612.095844] ---[ end trace 97e9c637a20e8348 ]---
>
> Signed-off-by: Wang YanQing 
> Cc: Stable 
> ---
>  Changes:
>  v1-v2:
>  1: add a Cc to stable.
>
>  drivers/net/wireless/realtek/rtlwifi/pci.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/wireless/realtek/rtlwifi/pci.c 
> b/drivers/net/wireless/realtek/rtlwifi/pci.c
> index 1ac41b8..99a3a03 100644
> --- a/drivers/net/wireless/realtek/rtlwifi/pci.c
> +++ b/drivers/net/wireless/realtek/rtlwifi/pci.c
> @@ -1572,7 +1572,7 @@ int rtl_pci_reset_trx_ring(struct ieee80211_hw *hw)
>  true,
>  HW_DESC_TXBUFF_ADDR),
>  skb->len, PCI_DMA_TODEVICE);
> -   kfree_skb(skb);
> +   dev_kfree_skb_irq(skb);
> ring->idx = (ring->idx + 1) % ring->entries;
> }
> ring->idx = 0;

Is this always called in IRQ context?  You might be better off using
dev_kfree_skb_any instead if this is something that can be called from
net_device_ops since that way you avoid having to call into the Tx
softirq cleanup routine to free the buffers later unless you really
need it.

- Alex
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2] rtlwifi: pci: use dev_kfree_skb_irq instead of kfree_skb in rtl_pci_reset_trx_ring

2016-05-06 Thread Larry Finger

On 05/06/2016 11:33 AM, Wang YanQing wrote:

We can't use kfree_skb in irq disable context, because spin_lock_irqsave
make sure we are always in irq disable context, use dev_kfree_skb_irq
instead of kfree_skb is better than dev_kfree_skb_any.

This patch fix below kernel warning:
[ 7612.095528] [ cut here ]
[ 7612.095546] WARNING: CPU: 3 PID: 4460 at kernel/softirq.c:150 
__local_bh_enable_ip+0x58/0x80()
[ 7612.095550] Modules linked in: rtl8723be x86_pkg_temp_thermal btcoexist 
rtl_pci rtlwifi rtl8723_common
[ 7612.095567] CPU: 3 PID: 4460 Comm: ifconfig Tainted: GW   4.4.0+ 
#4
[ 7612.095570] Hardware name: LENOVO 20DFA04FCD/20DFA04FCD, BIOS J5ET48WW (1.19 
) 08/27/2015
[ 7612.095574]    da37fc70 c12ce7c5  da37fca0 c104cc59 
c19d4454
[ 7612.095584]  0003 116c c19d4784 0096 c10508a8 c10508a8 0200 
c1b42400
[ 7612.095594]  f29be780 da37fcb0 c104ccad 0009  da37fcbc c10508a8 
f21f08b8
[ 7612.095604] Call Trace:
[ 7612.095614]  [] dump_stack+0x41/0x5c
[ 7612.095620]  [] warn_slowpath_common+0x89/0xc0
[ 7612.095628]  [] ? __local_bh_enable_ip+0x58/0x80
[ 7612.095634]  [] ? __local_bh_enable_ip+0x58/0x80
[ 7612.095640]  [] warn_slowpath_null+0x1d/0x20
[ 7612.095646]  [] __local_bh_enable_ip+0x58/0x80
[ 7612.095653]  [] destroy_conntrack+0x64/0xa0
[ 7612.095660]  [] nf_conntrack_destroy+0xf/0x20
[ 7612.095665]  [] skb_release_head_state+0x55/0xa0
[ 7612.095670]  [] skb_release_all+0xb/0x20
[ 7612.095674]  [] __kfree_skb+0xb/0x60
[ 7612.095679]  [] kfree_skb+0x30/0x70
[ 7612.095686]  [] ? rtl_pci_reset_trx_ring+0x22d/0x370 [rtl_pci]
[ 7612.095692]  [] rtl_pci_reset_trx_ring+0x22d/0x370 [rtl_pci]
[ 7612.095698]  [] rtl_pci_start+0x19/0x190 [rtl_pci]
[ 7612.095705]  [] rtl_op_start+0x56/0x90 [rtlwifi]
[ 7612.095712]  [] drv_start+0x36/0xc0
[ 7612.095717]  [] ieee80211_do_open+0x2d3/0x890
[ 7612.095725]  [] ? call_netdevice_notifiers_info+0x2e/0x60
[ 7612.095730]  [] ieee80211_open+0x4d/0x50
[ 7612.095736]  [] __dev_open+0xa3/0x130
[ 7612.095742]  [] ? _raw_spin_unlock_bh+0x13/0x20
[ 7612.095748]  [] __dev_change_flags+0x89/0x140
[ 7612.095753]  [] ? selinux_capable+0xd/0x10
[ 7612.095759]  [] dev_change_flags+0x29/0x60
[ 7612.095765]  [] devinet_ioctl+0x553/0x670
[ 7612.095772]  [] ? _copy_to_user+0x28/0x40
[ 7612.095777]  [] inet_ioctl+0x85/0xb0
[ 7612.095783]  [] sock_ioctl+0x67/0x260
[ 7612.095788]  [] ? sock_fasync+0x80/0x80
[ 7612.095795]  [] do_vfs_ioctl+0x6b/0x550
[ 7612.095800]  [] ? selinux_file_ioctl+0x102/0x1e0
[ 7612.095807]  [] ? timekeeping_suspend+0x294/0x320
[ 7612.095813]  [] ? __hrtimer_run_queues+0x14a/0x210
[ 7612.095820]  [] ? security_file_ioctl+0x34/0x50
[ 7612.095827]  [] SyS_ioctl+0x70/0x80
[ 7612.095832]  [] do_fast_syscall_32+0x84/0x120
[ 7612.095839]  [] sysenter_past_esp+0x36/0x55
[ 7612.095844] ---[ end trace 97e9c637a20e8348 ]---

Signed-off-by: Wang YanQing 
Cc: Stable 
---
  Changes:
  v1-v2:
  1: add a Cc to stable.

  drivers/net/wireless/realtek/rtlwifi/pci.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/realtek/rtlwifi/pci.c 
b/drivers/net/wireless/realtek/rtlwifi/pci.c
index 1ac41b8..99a3a03 100644
--- a/drivers/net/wireless/realtek/rtlwifi/pci.c
+++ b/drivers/net/wireless/realtek/rtlwifi/pci.c
@@ -1572,7 +1572,7 @@ int rtl_pci_reset_trx_ring(struct ieee80211_hw *hw)
 true,
 HW_DESC_TXBUFF_ADDR),
 skb->len, PCI_DMA_TODEVICE);
-   kfree_skb(skb);
+   dev_kfree_skb_irq(skb);
ring->idx = (ring->idx + 1) % ring->entries;
}
ring->idx = 0;


Acked-by: Larry Finger 

Thanks,

Larry

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2] rtlwifi: pci: use dev_kfree_skb_irq instead of kfree_skb in rtl_pci_reset_trx_ring

2016-05-06 Thread Wang YanQing
We can't use kfree_skb in irq disable context, because spin_lock_irqsave
make sure we are always in irq disable context, use dev_kfree_skb_irq
instead of kfree_skb is better than dev_kfree_skb_any.

This patch fix below kernel warning:
[ 7612.095528] [ cut here ]
[ 7612.095546] WARNING: CPU: 3 PID: 4460 at kernel/softirq.c:150 
__local_bh_enable_ip+0x58/0x80()
[ 7612.095550] Modules linked in: rtl8723be x86_pkg_temp_thermal btcoexist 
rtl_pci rtlwifi rtl8723_common
[ 7612.095567] CPU: 3 PID: 4460 Comm: ifconfig Tainted: GW   4.4.0+ 
#4
[ 7612.095570] Hardware name: LENOVO 20DFA04FCD/20DFA04FCD, BIOS J5ET48WW (1.19 
) 08/27/2015
[ 7612.095574]    da37fc70 c12ce7c5  da37fca0 c104cc59 
c19d4454
[ 7612.095584]  0003 116c c19d4784 0096 c10508a8 c10508a8 0200 
c1b42400
[ 7612.095594]  f29be780 da37fcb0 c104ccad 0009  da37fcbc c10508a8 
f21f08b8
[ 7612.095604] Call Trace:
[ 7612.095614]  [] dump_stack+0x41/0x5c
[ 7612.095620]  [] warn_slowpath_common+0x89/0xc0
[ 7612.095628]  [] ? __local_bh_enable_ip+0x58/0x80
[ 7612.095634]  [] ? __local_bh_enable_ip+0x58/0x80
[ 7612.095640]  [] warn_slowpath_null+0x1d/0x20
[ 7612.095646]  [] __local_bh_enable_ip+0x58/0x80
[ 7612.095653]  [] destroy_conntrack+0x64/0xa0
[ 7612.095660]  [] nf_conntrack_destroy+0xf/0x20
[ 7612.095665]  [] skb_release_head_state+0x55/0xa0
[ 7612.095670]  [] skb_release_all+0xb/0x20
[ 7612.095674]  [] __kfree_skb+0xb/0x60
[ 7612.095679]  [] kfree_skb+0x30/0x70
[ 7612.095686]  [] ? rtl_pci_reset_trx_ring+0x22d/0x370 [rtl_pci]
[ 7612.095692]  [] rtl_pci_reset_trx_ring+0x22d/0x370 [rtl_pci]
[ 7612.095698]  [] rtl_pci_start+0x19/0x190 [rtl_pci]
[ 7612.095705]  [] rtl_op_start+0x56/0x90 [rtlwifi]
[ 7612.095712]  [] drv_start+0x36/0xc0
[ 7612.095717]  [] ieee80211_do_open+0x2d3/0x890
[ 7612.095725]  [] ? call_netdevice_notifiers_info+0x2e/0x60
[ 7612.095730]  [] ieee80211_open+0x4d/0x50
[ 7612.095736]  [] __dev_open+0xa3/0x130
[ 7612.095742]  [] ? _raw_spin_unlock_bh+0x13/0x20
[ 7612.095748]  [] __dev_change_flags+0x89/0x140
[ 7612.095753]  [] ? selinux_capable+0xd/0x10
[ 7612.095759]  [] dev_change_flags+0x29/0x60
[ 7612.095765]  [] devinet_ioctl+0x553/0x670
[ 7612.095772]  [] ? _copy_to_user+0x28/0x40
[ 7612.095777]  [] inet_ioctl+0x85/0xb0
[ 7612.095783]  [] sock_ioctl+0x67/0x260
[ 7612.095788]  [] ? sock_fasync+0x80/0x80
[ 7612.095795]  [] do_vfs_ioctl+0x6b/0x550
[ 7612.095800]  [] ? selinux_file_ioctl+0x102/0x1e0
[ 7612.095807]  [] ? timekeeping_suspend+0x294/0x320
[ 7612.095813]  [] ? __hrtimer_run_queues+0x14a/0x210
[ 7612.095820]  [] ? security_file_ioctl+0x34/0x50
[ 7612.095827]  [] SyS_ioctl+0x70/0x80
[ 7612.095832]  [] do_fast_syscall_32+0x84/0x120
[ 7612.095839]  [] sysenter_past_esp+0x36/0x55
[ 7612.095844] ---[ end trace 97e9c637a20e8348 ]---

Signed-off-by: Wang YanQing 
Cc: Stable 
---
 Changes:
 v1-v2:
 1: add a Cc to stable.

 drivers/net/wireless/realtek/rtlwifi/pci.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/realtek/rtlwifi/pci.c 
b/drivers/net/wireless/realtek/rtlwifi/pci.c
index 1ac41b8..99a3a03 100644
--- a/drivers/net/wireless/realtek/rtlwifi/pci.c
+++ b/drivers/net/wireless/realtek/rtlwifi/pci.c
@@ -1572,7 +1572,7 @@ int rtl_pci_reset_trx_ring(struct ieee80211_hw *hw)
 true,
 HW_DESC_TXBUFF_ADDR),
 skb->len, PCI_DMA_TODEVICE);
-   kfree_skb(skb);
+   dev_kfree_skb_irq(skb);
ring->idx = (ring->idx + 1) % ring->entries;
}
ring->idx = 0;
-- 
1.8.5.6.2.g3d8a54e.dirty
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html