lkml.org 
[lkml]   [2006]   [May]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: 3c59x vortex_timer rt hack (was: rt20 patch question)


    Argh, cut and paste wasn't enough...

    Use this patch instead. It needs an irq disable. But, believe it or not,
    on SMP this is actually better. If the irq is shared (as it is in Mark's
    case), we don't stop the irq of other devices from being handled on
    another CPU (unfortunately for Mark, he pinned all interrupts to one CPU).

    Andrew,

    should this be changed in mainline too?

    -- Steve

    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>


    Index: linux-2.6.16-rt20/drivers/net/3c59x.c
    ===================================================================
    --- linux-2.6.16-rt20.orig/drivers/net/3c59x.c 2006-05-12 10:27:36.000000000 -0400
    +++ linux-2.6.16-rt20/drivers/net/3c59x.c 2006-05-12 10:34:51.000000000 -0400
    @@ -1888,6 +1888,7 @@ vortex_timer(unsigned long data)
    int next_tick = 60*HZ;
    int ok = 0;
    int media_status, mii_status, old_window;
    + unsigned long flags;

    if (vortex_debug > 2) {
    printk(KERN_DEBUG "%s: Media selection timer tick happened, %s.\n",
    @@ -1897,7 +1898,7 @@ vortex_timer(unsigned long data)

    if (vp->medialock)
    goto leave_media_alone;
    - disable_irq(dev->irq);
    + spin_lock_irqsave(&vp->lock, flags);
    old_window = ioread16(ioaddr + EL3_CMD) >> 13;
    EL3WINDOW(4);
    media_status = ioread16(ioaddr + Wn4_Media);
    @@ -1919,7 +1920,6 @@ vortex_timer(unsigned long data)
    break;
    case XCVR_MII: case XCVR_NWAY:
    {
    - spin_lock_bh(&vp->lock);
    mii_status = mdio_read(dev, vp->phys[0], MII_BMSR);
    if (!(mii_status & BMSR_LSTATUS)) {
    /* Re-read to get actual link status */
    @@ -1957,7 +1957,6 @@ vortex_timer(unsigned long data)
    } else {
    netif_carrier_off(dev);
    }
    - spin_unlock_bh(&vp->lock);
    }
    break;
    default: /* Other media types handled by Tx timeouts. */
    @@ -2000,7 +1999,7 @@ vortex_timer(unsigned long data)
    /* AKPM: FIXME: Should reset Rx & Tx here. P60 of 3c90xc.pdf */
    }
    EL3WINDOW(old_window);
    - enable_irq(dev->irq);
    + spin_unlock_irqrestore(&vp->lock, flags);

    leave_media_alone:
    if (vortex_debug > 2)
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-05-12 16:42    [W:0.021 / U:32.676 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site