lkml.org 
[lkml]   [2008]   [Jul]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    SubjectRe: [GIT]: Networking
    From
    From: David Miller <davem@davemloft.net>
    Date: Sun, 20 Jul 2008 19:48:56 -0700 (PDT)

    > From: Alexey Dobriyan <adobriyan@gmail.com>
    > Date: Mon, 21 Jul 2008 06:40:56 +0400
    >
    > > OK, the problem is really this buglet:
    > >
    > > BUG_ON(q == &noop_qdisc);
    > > __netif_schedule
    > > netif_tx_wake_queue
    > > netif_wake_queue
    > > atl1_check_link
    > > atl1_up or atlx_link_chg_task
    > > run_workqueue
    >
    > Thanks for the backtrace I'll work on fixing this.

    [ Jeff and co., this is basically the kind of patch I want
    to see eventually for the Intel drivers too... ]

    Alexey, please try this patch:

    atl1: Do not wake queue before queue has been started.

    Based upon a bug report by Alexey Dobriyan.

    Packet flow during link state events should not be done by
    waking and stopping the TX queue anyways, that is handled
    transparently by netif_carrier_{on,off}().

    So, remove the netif_{wake,stop}_queue() calls in the link
    check code, and add the necessary netif_start_queue() call
    to atl1_up().

    Signed-off-by: David S. Miller <davem@davemloft.net>

    diff --git a/drivers/net/atlx/atl1.c b/drivers/net/atlx/atl1.c
    index 3e22e78..f12e3d1 100644
    --- a/drivers/net/atlx/atl1.c
    +++ b/drivers/net/atlx/atl1.c
    @@ -1308,7 +1308,6 @@ static u32 atl1_check_link(struct atl1_adapter *adapter)
    dev_info(&adapter->pdev->dev, "link is down\n");
    adapter->link_speed = SPEED_0;
    netif_carrier_off(netdev);
    - netif_stop_queue(netdev);
    }
    return 0;
    }
    @@ -1358,7 +1357,6 @@ static u32 atl1_check_link(struct atl1_adapter *adapter)
    if (!netif_carrier_ok(netdev)) {
    /* Link down -> Up */
    netif_carrier_on(netdev);
    - netif_wake_queue(netdev);
    }
    return 0;
    }
    @@ -2627,6 +2625,7 @@ static s32 atl1_up(struct atl1_adapter *adapter)
    mod_timer(&adapter->watchdog_timer, jiffies);
    atlx_irq_enable(adapter);
    atl1_check_link(adapter);
    + netif_start_queue(netdev);
    return 0;

    err_up:

    \
     
     \ /
      Last update: 2008-07-21 07:13    [W:0.020 / U:88.868 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site