lkml.org 
[lkml]   [2018]   [Sep]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.18 009/136] net: hns3: Fix warning bug when doing lp selftest
    Date
    From: Yunsheng Lin <linyunsheng@huawei.com>

    [ Upstream commit d7099d15478e89edb9bc6c6e3ab4cd341884a367 ]

    The napi_alloc_skb is excepted to be called under the
    non-preemptible code path when it is called by hns3_clean_rx_ring
    during loopback selftest, otherwise the below warning will be
    logged:

    [ 92.420780] BUG: using smp_processor_id() in preemptible
    [00000000] code: ethtool/1873
    <SNIP>
    [ 92.463202] check_preemption_disabled+0xf8/0x100
    [ 92.467893] debug_smp_processor_id+0x1c/0x28
    [ 92.472239] __napi_alloc_skb+0x30/0x130
    [ 92.476158] hns3_clean_rx_ring+0x118/0x5f0 [hns3]
    [ 92.480941] hns3_self_test+0x32c/0x4d0 [hns3]
    [ 92.485375] ethtool_self_test+0xdc/0x1e8
    [ 92.489372] dev_ethtool+0x1020/0x1da8
    [ 92.493109] dev_ioctl+0x188/0x3a0
    [ 92.496499] sock_do_ioctl+0xf4/0x208
    [ 92.500148] sock_ioctl+0x228/0x3e8
    [ 92.503626] do_vfs_ioctl+0xc4/0x880
    [ 92.507189] SyS_ioctl+0x94/0xa8
    [ 92.510404] el0_svc_naked+0x30/0x34

    This patch fix it by disabling preemption when calling
    hns3_clean_rx_ring during loopback selftest.

    Fixes: c39c4d98dc65 ("net: hns3: Add mac loopback selftest support in hns3 driver")
    Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com>
    Signed-off-by: Peng Li <lipeng321@huawei.com>
    Signed-off-by: Salil Mehta <salil.mehta@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c | 2 ++
    1 file changed, 2 insertions(+)

    diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
    index 40c0425b4023..11620e003a8e 100644
    --- a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
    +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
    @@ -201,7 +201,9 @@ static u32 hns3_lb_check_rx_ring(struct hns3_nic_priv *priv, u32 budget)
    rx_group = &ring->tqp_vector->rx_group;
    pre_rx_pkt = rx_group->total_packets;

    + preempt_disable();
    hns3_clean_rx_ring(ring, budget, hns3_lb_check_skb_data);
    + preempt_enable();

    rcv_good_pkt_total += (rx_group->total_packets - pre_rx_pkt);
    rx_group->total_packets = pre_rx_pkt;
    --
    2.17.1
    \
     
     \ /
      Last update: 2018-09-17 05:39    [W:4.136 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site