diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-12 15:36:40 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-12 15:36:40 -0800 |
commit | a7e8ddd813c20e3e10c9012f1625a5a02f870b15 (patch) | |
tree | 8060fc23bc406d0035145cf34620b208ca6ab625 /drivers/net | |
parent | ad8f723afbfe242ad2bc5067e06ca438b6a5c8a9 (diff) | |
parent | 76e74bbe0a38c6720217425ed64dbb448c643b9d (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc
Pull sparc update from David Miller:
"Not a lot of stuff this time around, mostly bug fixing:
- Fix alignment of 32-bit crosscall datastructure on Leon, from
Andreas Larsson.
- Several fixes to the virtual disk driver on sparc64 by Dwight
Engen, including handling resets of the service domain properly"
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc:
sunvdc: reconnect ldc after vds service domain restarts
sparc/ldc: create separate ldc_unbind from ldc_free
vio: create routines for inc,dec vio dring indexes
sunvdc: fix module unload/reload
sparc32, leon: Align ccall_info to prevent unaligned traps on crosscall
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/ethernet/sun/sunvnet.c | 30 |
1 files changed, 7 insertions, 23 deletions
diff --git a/drivers/net/ethernet/sun/sunvnet.c b/drivers/net/ethernet/sun/sunvnet.c index 90c86cd3be14..45c408ef67d0 100644 --- a/drivers/net/ethernet/sun/sunvnet.c +++ b/drivers/net/ethernet/sun/sunvnet.c @@ -466,23 +466,6 @@ static int vnet_send_ack(struct vnet_port *port, struct vio_dring_state *dr, return err; } -static u32 next_idx(u32 idx, struct vio_dring_state *dr) -{ - if (++idx == dr->num_entries) - idx = 0; - return idx; -} - -static u32 prev_idx(u32 idx, struct vio_dring_state *dr) -{ - if (idx == 0) - idx = dr->num_entries - 1; - else - idx--; - - return idx; -} - static struct vio_net_desc *get_rx_desc(struct vnet_port *port, struct vio_dring_state *dr, u32 index) @@ -556,7 +539,8 @@ static int vnet_walk_rx(struct vnet_port *port, struct vio_dring_state *dr, int ack_start = -1, ack_end = -1; bool send_ack = true; - end = (end == (u32) -1) ? prev_idx(start, dr) : next_idx(end, dr); + end = (end == (u32) -1) ? vio_dring_prev(dr, start) + : vio_dring_next(dr, end); viodbg(DATA, "vnet_walk_rx start[%08x] end[%08x]\n", start, end); @@ -570,7 +554,7 @@ static int vnet_walk_rx(struct vnet_port *port, struct vio_dring_state *dr, if (ack_start == -1) ack_start = start; ack_end = start; - start = next_idx(start, dr); + start = vio_dring_next(dr, start); if (ack && start != end) { err = vnet_send_ack(port, dr, ack_start, ack_end, VIO_DRING_ACTIVE); @@ -584,7 +568,7 @@ static int vnet_walk_rx(struct vnet_port *port, struct vio_dring_state *dr, } } if (unlikely(ack_start == -1)) - ack_start = ack_end = prev_idx(start, dr); + ack_start = ack_end = vio_dring_prev(dr, start); if (send_ack) { port->napi_resume = false; return vnet_send_ack(port, dr, ack_start, ack_end, @@ -633,7 +617,7 @@ static int idx_is_pending(struct vio_dring_state *dr, u32 end) found = 1; break; } - idx = next_idx(idx, dr); + idx = vio_dring_next(dr, idx); } return found; } @@ -663,7 +647,7 @@ static int vnet_ack(struct vnet_port *port, void *msgbuf) /* sync for race conditions with vnet_start_xmit() and tell xmit it * is time to send a trigger. */ - dr->cons = next_idx(end, dr); + dr->cons = vio_dring_next(dr, end); desc = vio_dring_entry(dr, dr->cons); if (desc->hdr.state == VIO_DESC_READY && !port->start_cons) { /* vnet_start_xmit() just populated this dring but missed @@ -784,7 +768,7 @@ ldc_ctrl: pkt->tag.stype = VIO_SUBTYPE_INFO; pkt->tag.stype_env = VIO_DRING_DATA; pkt->seq = dr->rcv_nxt; - pkt->start_idx = next_idx(port->napi_stop_idx, dr); + pkt->start_idx = vio_dring_next(dr, port->napi_stop_idx); pkt->end_idx = -1; goto napi_resume; } |