lkml.org 
[lkml]   [2019]   [Sep]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.2 28/94] net: tundra: tsi108: use spin_lock_irqsave instead of spin_lock_irq in IRQ context
    Date
    [ Upstream commit 8c25d0887a8bd0e1ca2074ac0c6dff173787a83b ]

    As spin_unlock_irq will enable interrupts.
    Function tsi108_stat_carry is called from interrupt handler tsi108_irq.
    Interrupts are enabled in interrupt handler.
    Use spin_lock_irqsave/spin_unlock_irqrestore instead of spin_(un)lock_irq
    in IRQ context to avoid this.

    Signed-off-by: Fuqian Huang <huangfq.daxian@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/tundra/tsi108_eth.c | 5 +++--
    1 file changed, 3 insertions(+), 2 deletions(-)

    diff --git a/drivers/net/ethernet/tundra/tsi108_eth.c b/drivers/net/ethernet/tundra/tsi108_eth.c
    index 78a7de3fb622f..c62f474b6d08e 100644
    --- a/drivers/net/ethernet/tundra/tsi108_eth.c
    +++ b/drivers/net/ethernet/tundra/tsi108_eth.c
    @@ -371,9 +371,10 @@ tsi108_stat_carry_one(int carry, int carry_bit, int carry_shift,
    static void tsi108_stat_carry(struct net_device *dev)
    {
    struct tsi108_prv_data *data = netdev_priv(dev);
    + unsigned long flags;
    u32 carry1, carry2;

    - spin_lock_irq(&data->misclock);
    + spin_lock_irqsave(&data->misclock, flags);

    carry1 = TSI_READ(TSI108_STAT_CARRY1);
    carry2 = TSI_READ(TSI108_STAT_CARRY2);
    @@ -441,7 +442,7 @@ static void tsi108_stat_carry(struct net_device *dev)
    TSI108_STAT_TXPAUSEDROP_CARRY,
    &data->tx_pause_drop);

    - spin_unlock_irq(&data->misclock);
    + spin_unlock_irqrestore(&data->misclock, flags);
    }

    /* Read a stat counter atomically with respect to carries.
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-09-08 14:51    [W:4.280 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site