lkml.org 
[lkml]   [2010]   [Oct]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] b44: fix resume, request_irq after hw reset
    Date
    This driver was hanging on resume because it was requesting a shared irq
    that it wasn't ready to immediately handle, which was tested in
    request_irq because of the CONFIG_DEBUG_SHIRQ config option. The
    interrupt handler tried to read the interrupt status register but for
    some reason it hung the system.

    The request_irq is now moved a bit later after resetting the hardware
    which seems to fix it.

    Signed-off-by: James Hogan <james@albanarts.com>
    ---
    drivers/net/b44.c | 12 ++++++------
    1 files changed, 6 insertions(+), 6 deletions(-)

    diff --git a/drivers/net/b44.c b/drivers/net/b44.c
    index 1e620e2..dbba981 100644
    --- a/drivers/net/b44.c
    +++ b/drivers/net/b44.c
    @@ -2296,12 +2296,6 @@ static int b44_resume(struct ssb_device *sdev)
    if (!netif_running(dev))
    return 0;

    - rc = request_irq(dev->irq, b44_interrupt, IRQF_SHARED, dev->name, dev);
    - if (rc) {
    - netdev_err(dev, "request_irq failed\n");
    - return rc;
    - }
    -
    spin_lock_irq(&bp->lock);

    b44_init_rings(bp);
    @@ -2309,6 +2303,12 @@ static int b44_resume(struct ssb_device *sdev)
    netif_device_attach(bp->dev);
    spin_unlock_irq(&bp->lock);

    + rc = request_irq(dev->irq, b44_interrupt, IRQF_SHARED, dev->name, dev);
    + if (rc) {
    + netdev_err(dev, "request_irq failed\n");
    + return rc;
    + }
    +
    b44_enable_ints(bp);
    netif_wake_queue(dev);

    --
    1.7.2.3


    \
     
     \ /
      Last update: 2010-10-12 01:25    [W:0.025 / U:29.416 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site