Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 6685
b: refs/heads/master
c: b08bd5c
h: refs/heads/master
i:
  6683: 29d487c
v: v3
  • Loading branch information
Michael Ellerman authored and Jeff Garzik committed Sep 1, 2005
1 parent d736335 commit 1c1c897
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d7893ddd1b2110a54a5b1773a405748172ba1fe5
refs/heads/master: b08bd5c0a3110f143faeef9cd057d9d8ff2f0714
13 changes: 7 additions & 6 deletions trunk/drivers/net/iseries_veth.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};
Expand Down Expand Up @@ -957,6 +957,8 @@ static int veth_transmit_to_one(struct sk_buff *skb, HvLpIndex rlp,
goto drop;
}

msg->in_use = 1;

dma_length = skb->len;
dma_address = dma_map_single(port->dev, skb->data,
dma_length, DMA_TO_DEVICE);
Expand All @@ -971,7 +973,6 @@ static int veth_transmit_to_one(struct sk_buff *skb, HvLpIndex rlp,
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)
Expand All @@ -981,10 +982,8 @@ static int veth_transmit_to_one(struct sk_buff *skb, HvLpIndex rlp,
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++;
Expand Down Expand Up @@ -1066,12 +1065,14 @@ static int veth_start_xmit(struct sk_buff *skb, struct net_device *dev)
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];

Expand Down

0 comments on commit 1c1c897

Please sign in to comment.