.. | .. |
---|
1088 | 1088 | vaddr = kmap_atomic(skb_frag_page(f)); |
---|
1089 | 1089 | blen = skb_frag_size(f); |
---|
1090 | 1090 | blen += 8 - (blen & 7); |
---|
1091 | | - err = ldc_map_single(lp, vaddr + f->page_offset, |
---|
| 1091 | + err = ldc_map_single(lp, vaddr + skb_frag_off(f), |
---|
1092 | 1092 | blen, cookies + nc, ncookies - nc, |
---|
1093 | 1093 | map_perm); |
---|
1094 | 1094 | kunmap_atomic(vaddr); |
---|
.. | .. |
---|
1124 | 1124 | for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { |
---|
1125 | 1125 | skb_frag_t *f = &skb_shinfo(skb)->frags[i]; |
---|
1126 | 1126 | |
---|
1127 | | - docopy |= f->page_offset & 7; |
---|
| 1127 | + docopy |= skb_frag_off(f) & 7; |
---|
1128 | 1128 | } |
---|
1129 | 1129 | if (((unsigned long)skb->data & 7) != VNET_PACKET_SKIP || |
---|
1130 | 1130 | skb_tailroom(skb) < pad || |
---|
.. | .. |
---|
1168 | 1168 | *(__sum16 *)(skb->data + offset) = 0; |
---|
1169 | 1169 | csum = skb_copy_and_csum_bits(skb, start, |
---|
1170 | 1170 | nskb->data + start, |
---|
1171 | | - skb->len - start, 0); |
---|
| 1171 | + skb->len - start); |
---|
1172 | 1172 | |
---|
1173 | 1173 | /* add in the header checksums */ |
---|
1174 | 1174 | if (skb->protocol == htons(ETH_P_IP)) { |
---|
.. | .. |
---|
1223 | 1223 | { |
---|
1224 | 1224 | struct net_device *dev = VNET_PORT_TO_NET_DEVICE(port); |
---|
1225 | 1225 | struct vio_dring_state *dr = &port->vio.drings[VIO_DRIVER_TX_RING]; |
---|
1226 | | - struct sk_buff *segs; |
---|
| 1226 | + struct sk_buff *segs, *curr, *next; |
---|
1227 | 1227 | int maclen, datalen; |
---|
1228 | 1228 | int status; |
---|
1229 | 1229 | int gso_size, gso_type, gso_segs; |
---|
.. | .. |
---|
1282 | 1282 | skb_reset_mac_header(skb); |
---|
1283 | 1283 | |
---|
1284 | 1284 | status = 0; |
---|
1285 | | - while (segs) { |
---|
1286 | | - struct sk_buff *curr = segs; |
---|
1287 | | - |
---|
1288 | | - segs = segs->next; |
---|
1289 | | - curr->next = NULL; |
---|
| 1285 | + skb_list_walk_safe(segs, curr, next) { |
---|
| 1286 | + skb_mark_not_on_list(curr); |
---|
1290 | 1287 | if (port->tso && curr->len > dev->mtu) { |
---|
1291 | 1288 | skb_shinfo(curr)->gso_size = gso_size; |
---|
1292 | 1289 | skb_shinfo(curr)->gso_type = gso_type; |
---|
.. | .. |
---|
1517 | 1514 | else if (port) |
---|
1518 | 1515 | del_timer(&port->clean_timer); |
---|
1519 | 1516 | rcu_read_unlock(); |
---|
1520 | | - if (skb) |
---|
1521 | | - dev_kfree_skb(skb); |
---|
| 1517 | + dev_kfree_skb(skb); |
---|
1522 | 1518 | vnet_free_skbs(freeskbs); |
---|
1523 | 1519 | dev->stats.tx_dropped++; |
---|
1524 | 1520 | return NETDEV_TX_OK; |
---|
1525 | 1521 | } |
---|
1526 | 1522 | EXPORT_SYMBOL_GPL(sunvnet_start_xmit_common); |
---|
1527 | 1523 | |
---|
1528 | | -void sunvnet_tx_timeout_common(struct net_device *dev) |
---|
| 1524 | +void sunvnet_tx_timeout_common(struct net_device *dev, unsigned int txqueue) |
---|
1529 | 1525 | { |
---|
1530 | 1526 | /* XXX Implement me XXX */ |
---|
1531 | 1527 | } |
---|