lkml.org 
[lkml]   [2010]   [Mar]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[075/116] jme: Protect vlgrp structure by pause RX actions.
    2.6.32-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Guo-Fu Tseng <cooldavid@cooldavid.org>

    commit bf5e5360fd1df1ae429ebbd81838d7d0879797d1 upstream.

    Temporary stop the RX IRQ, and disable (sync) tasklet or napi.
    And restore it after finished the vlgrp pointer assignment.

    Signed-off-by: Guo-Fu Tseng <cooldavid@cooldavid.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/net/jme.c | 33 +++++++++++++++++++++++++++++++++
    1 file changed, 33 insertions(+)

    --- a/drivers/net/jme.c
    +++ b/drivers/net/jme.c
    @@ -2087,12 +2087,45 @@ jme_tx_timeout(struct net_device *netdev
    jme_reset_link(jme);
    }

    +static inline void jme_pause_rx(struct jme_adapter *jme)
    +{
    + atomic_dec(&jme->link_changing);
    +
    + jme_set_rx_pcc(jme, PCC_OFF);
    + if (test_bit(JME_FLAG_POLL, &jme->flags)) {
    + JME_NAPI_DISABLE(jme);
    + } else {
    + tasklet_disable(&jme->rxclean_task);
    + tasklet_disable(&jme->rxempty_task);
    + }
    +}
    +
    +static inline void jme_resume_rx(struct jme_adapter *jme)
    +{
    + struct dynpcc_info *dpi = &(jme->dpi);
    +
    + if (test_bit(JME_FLAG_POLL, &jme->flags)) {
    + JME_NAPI_ENABLE(jme);
    + } else {
    + tasklet_hi_enable(&jme->rxclean_task);
    + tasklet_hi_enable(&jme->rxempty_task);
    + }
    + dpi->cur = PCC_P1;
    + dpi->attempt = PCC_P1;
    + dpi->cnt = 0;
    + jme_set_rx_pcc(jme, PCC_P1);
    +
    + atomic_inc(&jme->link_changing);
    +}
    +
    static void
    jme_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
    {
    struct jme_adapter *jme = netdev_priv(netdev);

    + jme_pause_rx(jme);
    jme->vlgrp = grp;
    + jme_resume_rx(jme);
    }

    static void



    \
     
     \ /
      Last update: 2010-03-31 02:07    [W:4.622 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site