lkml.org 
[lkml]   [2019]   [Aug]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 net-next 14/15] net: sgi: ioc3-eth: protect emcr in all cases
    Date
    emcr in private struct wasn't always protected by spinlock.

    Signed-off-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
    ---
    drivers/net/ethernet/sgi/ioc3-eth.c | 8 ++++++++
    1 file changed, 8 insertions(+)

    diff --git a/drivers/net/ethernet/sgi/ioc3-eth.c b/drivers/net/ethernet/sgi/ioc3-eth.c
    index 00942b37a1e4..d2b6659adba6 100644
    --- a/drivers/net/ethernet/sgi/ioc3-eth.c
    +++ b/drivers/net/ethernet/sgi/ioc3-eth.c
    @@ -729,6 +729,8 @@ static inline void ioc3_setup_duplex(struct ioc3_private *ip)
    {
    struct ioc3_ethregs *regs = ip->regs;

    + spin_lock_irq(&ip->ioc3_lock);
    +
    if (ip->mii.full_duplex) {
    writel(ETCSR_FD, &regs->etcsr);
    ip->emcr |= EMCR_DUPLEX;
    @@ -737,6 +739,8 @@ static inline void ioc3_setup_duplex(struct ioc3_private *ip)
    ip->emcr &= ~EMCR_DUPLEX;
    }
    writel(ip->emcr, &regs->emcr);
    +
    + spin_unlock_irq(&ip->ioc3_lock);
    }

    static void ioc3_timer(struct timer_list *t)
    @@ -1628,6 +1632,8 @@ static void ioc3_set_multicast_list(struct net_device *dev)

    netif_stop_queue(dev); /* Lock out others. */

    + spin_lock_irq(&ip->ioc3_lock);
    +
    if (dev->flags & IFF_PROMISC) { /* Set promiscuous. */
    ip->emcr |= EMCR_PROMISC;
    writel(ip->emcr, &regs->emcr);
    @@ -1656,6 +1662,8 @@ static void ioc3_set_multicast_list(struct net_device *dev)
    writel(ip->ehar_l, &regs->ehar_l);
    }

    + spin_unlock_irq(&ip->ioc3_lock);
    +
    netif_wake_queue(dev); /* Let us get going again. */
    }

    --
    2.13.7
    \
     
     \ /
      Last update: 2019-08-29 17:51    [W:7.080 / U:1.156 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site