lkml.org 
[lkml]   [2005]   [Jun]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 8/12] iseries_veth: Replace lock-protected atomic with an ordinary variable
    The iseries_veth driver uses atomic ops to manipulate the in_use field of
    one of its per-connection structures. However all references to the
    flag occur while the connection's lock is held, so the atomic ops aren't
    necessary.


    ---

    drivers/net/iseries_veth.c | 13 +++++++------
    1 files changed, 7 insertions(+), 6 deletions(-)

    Index: veth-dev/drivers/net/iseries_veth.c
    ===================================================================
    --- veth-dev.orig/drivers/net/iseries_veth.c
    +++ veth-dev/drivers/net/iseries_veth.c
    @@ -117,7 +117,7 @@ struct veth_msg {
    struct veth_msg *next;
    struct VethFramesData data;
    int token;
    - unsigned long in_use;
    + int in_use;
    struct sk_buff *skb;
    struct device *dev;
    };
    @@ -959,6 +959,8 @@ static int veth_transmit_to_one(struct s
    goto drop;
    }

    + msg->in_use = 1;
    +
    dma_length = skb->len;
    dma_address = dma_map_single(port->dev, skb->data,
    dma_length, DMA_TO_DEVICE);
    @@ -973,7 +975,6 @@ static int veth_transmit_to_one(struct s
    msg->data.addr[0] = dma_address;
    msg->data.len[0] = dma_length;
    msg->data.eofmask = 1 << VETH_EOF_SHIFT;
    - set_bit(0, &(msg->in_use));
    rc = veth_signaldata(cnx, VethEventTypeFrames, msg->token, &msg->data);

    if (rc != HvLpEvent_Rc_Good)
    @@ -983,10 +984,8 @@ static int veth_transmit_to_one(struct s
    return 0;

    recycle_and_drop:
    + /* we free the skb below, so tell veth_recycle_msg() not to. */
    msg->skb = NULL;
    - /* need to set in use to make veth_recycle_msg in case this
    - * was a mapping failure */
    - set_bit(0, &msg->in_use);
    veth_recycle_msg(cnx, msg);
    drop:
    port->stats.tx_errors++;
    @@ -1068,12 +1067,14 @@ static int veth_start_xmit(struct sk_buf
    return 0;
    }

    +/* You musT hold the connection's lock when you call this function. */
    static void veth_recycle_msg(struct veth_lpar_connection *cnx,
    struct veth_msg *msg)
    {
    u32 dma_address, dma_length;

    - if (test_and_clear_bit(0, &msg->in_use)) {
    + if (msg->in_use) {
    + msg->in_use = 0;
    dma_address = msg->data.addr[0];
    dma_length = msg->data.len[0];

    -
    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: 2005-06-30 12:36    [W:0.024 / U:148.520 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site