lkml.org 
[lkml]   [2016]   [Mar]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.2.y-ckt 146/218] rapidio/rionet: fix deadlock on SMP
    Date
    4.2.8-ckt7 -stable review patch.  If anyone has any objections, please let me know.

    ---8<------------------------------------------------------------

    From: Aurelien Jacquiot <a-jacquiot@ti.com>

    commit 36915976eca58f2eefa040ba8f9939672564df61 upstream.

    Fix deadlocking during concurrent receive and transmit operations on SMP
    platforms caused by the use of incorrect lock: on transmit 'tx_lock'
    spinlock should be used instead of 'lock' which is used for receive
    operation.

    This fix is applicable to kernel versions starting from v2.15.

    Signed-off-by: Aurelien Jacquiot <a-jacquiot@ti.com>
    Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com>
    Cc: Matt Porter <mporter@kernel.crashing.org>
    Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Kamal Mostafa <kamal@canonical.com>
    ---
    drivers/net/rionet.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/drivers/net/rionet.c b/drivers/net/rionet.c
    index dac7a0d..18cc2c8 100644
    --- a/drivers/net/rionet.c
    +++ b/drivers/net/rionet.c
    @@ -280,7 +280,7 @@ static void rionet_outb_msg_event(struct rio_mport *mport, void *dev_id, int mbo
    struct net_device *ndev = dev_id;
    struct rionet_private *rnet = netdev_priv(ndev);

    - spin_lock(&rnet->lock);
    + spin_lock(&rnet->tx_lock);

    if (netif_msg_intr(rnet))
    printk(KERN_INFO
    @@ -299,7 +299,7 @@ static void rionet_outb_msg_event(struct rio_mport *mport, void *dev_id, int mbo
    if (rnet->tx_cnt < RIONET_TX_RING_SIZE)
    netif_wake_queue(ndev);

    - spin_unlock(&rnet->lock);
    + spin_unlock(&rnet->tx_lock);
    }

    static int rionet_open(struct net_device *ndev)
    --
    2.7.4
    \
     
     \ /
      Last update: 2016-03-31 23:01    [W:4.461 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site