aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-05-01 17:08:52 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-05-01 17:08:52 -0400
commit73287a43cc79ca06629a88d1a199cd283f42456a (patch)
treeacf4456e260115bea77ee31a29f10ce17f0db45c /drivers/s390
parent251df49db3327c64bf917bfdba94491fde2b4ee0 (diff)
parent20074f357da4a637430aec2879c9d864c5d2c23c (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
Pull networking updates from David Miller: "Highlights (1721 non-merge commits, this has to be a record of some sort): 1) Add 'random' mode to team driver, from Jiri Pirko and Eric Dumazet. 2) Make it so that any driver that supports configuration of multiple MAC addresses can provide the forwarding database add and del calls by providing a default implementation and hooking that up if the driver doesn't have an explicit set of handlers. From Vlad Yasevich. 3) Support GSO segmentation over tunnels and other encapsulating devices such as VXLAN, from Pravin B Shelar. 4) Support L2 GRE tunnels in the flow dissector, from Michael Dalton. 5) Implement Tail Loss Probe (TLP) detection in TCP, from Nandita Dukkipati. 6) In the PHY layer, allow supporting wake-on-lan in situations where the PHY registers have to be written for it to be configured. Use it to support wake-on-lan in mv643xx_eth. From Michael Stapelberg. 7) Significantly improve firewire IPV6 support, from YOSHIFUJI Hideaki. 8) Allow multiple packets to be sent in a single transmission using network coding in batman-adv, from Martin Hundebøll. 9) Add support for T5 cxgb4 chips, from Santosh Rastapur. 10) Generalize the VXLAN forwarding tables so that there is more flexibility in configurating various aspects of the endpoints. From David Stevens. 11) Support RSS and TSO in hardware over GRE tunnels in bxn2x driver, from Dmitry Kravkov. 12) Zero copy support in nfnelink_queue, from Eric Dumazet and Pablo Neira Ayuso. 13) Start adding networking selftests. 14) In situations of overload on the same AF_PACKET fanout socket, or per-cpu packet receive queue, minimize drop by distributing the load to other cpus/fanouts. From Willem de Bruijn and Eric Dumazet. 15) Add support for new payload offset BPF instruction, from Daniel Borkmann. 16) Convert several drivers over to mdoule_platform_driver(), from Sachin Kamat. 17) Provide a minimal BPF JIT image disassembler userspace tool, from Daniel Borkmann. 18) Rewrite F-RTO implementation in TCP to match the final specification of it in RFC4138 and RFC5682. From Yuchung Cheng. 19) Provide netlink socket diag of netlink sockets ("Yo dawg, I hear you like netlink, so I implemented netlink dumping of netlink sockets.") From Andrey Vagin. 20) Remove ugly passing of rtnetlink attributes into rtnl_doit functions, from Thomas Graf. 21) Allow userspace to be able to see if a configuration change occurs in the middle of an address or device list dump, from Nicolas Dichtel. 22) Support RFC3168 ECN protection for ipv6 fragments, from Hannes Frederic Sowa. 23) Increase accuracy of packet length used by packet scheduler, from Jason Wang. 24) Beginning set of changes to make ipv4/ipv6 fragment handling more scalable and less susceptible to overload and locking contention, from Jesper Dangaard Brouer. 25) Get rid of using non-type-safe NLMSG_* macros and use nlmsg_*() instead. From Hong Zhiguo. 26) Optimize route usage in IPVS by avoiding reference counting where possible, from Julian Anastasov. 27) Convert IPVS schedulers to RCU, also from Julian Anastasov. 28) Support cpu fanouts in xt_NFQUEUE netfilter target, from Holger Eitzenberger. 29) Network namespace support for nf_log, ebt_log, xt_LOG, ipt_ULOG, nfnetlink_log, and nfnetlink_queue. From Gao feng. 30) Implement RFC3168 ECN protection, from Hannes Frederic Sowa. 31) Support several new r8169 chips, from Hayes Wang. 32) Support tokenized interface identifiers in ipv6, from Daniel Borkmann. 33) Use usbnet_link_change() helper in USB net driver, from Ming Lei. 34) Add 802.1ad vlan offload support, from Patrick McHardy. 35) Support mmap() based netlink communication, also from Patrick McHardy. 36) Support HW timestamping in mlx4 driver, from Amir Vadai. 37) Rationalize AF_PACKET packet timestamping when transmitting, from Willem de Bruijn and Daniel Borkmann. 38) Bring parity to what's provided by /proc/net/packet socket dumping and the info provided by netlink socket dumping of AF_PACKET sockets. From Nicolas Dichtel. 39) Fix peeking beyond zero sized SKBs in AF_UNIX, from Benjamin Poirier" * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1722 commits) filter: fix va_list build error af_unix: fix a fatal race with bit fields bnx2x: Prevent memory leak when cnic is absent bnx2x: correct reading of speed capabilities net: sctp: attribute printl with __printf for gcc fmt checks netlink: kconfig: move mmap i/o into netlink kconfig netpoll: convert mutex into a semaphore netlink: Fix skb ref counting. net_sched: act_ipt forward compat with xtables mlx4_en: fix a build error on 32bit arches Revert "bnx2x: allow nvram test to run when device is down" bridge: avoid OOPS if root port not found drivers: net: cpsw: fix kernel warn on cpsw irq enable sh_eth: use random MAC address if no valid one supplied 3c509.c: call SET_NETDEV_DEV for all device types (ISA/ISAPnP/EISA) tg3: fix to append hardware time stamping flags unix/stream: fix peeking with an offset larger than data in queue unix/dgram: fix peeking with an offset larger than data in queue unix/dgram: peek beyond 0-sized skbs openvswitch: Remove unneeded ovs_netdev_get_ifindex() ...
Diffstat (limited to 'drivers/s390')
-rw-r--r--drivers/s390/kvm/virtio_ccw.c6
-rw-r--r--drivers/s390/net/qeth_core.h4
-rw-r--r--drivers/s390/net/qeth_core_main.c8
-rw-r--r--drivers/s390/net/qeth_l2_main.c13
-rw-r--r--drivers/s390/net/qeth_l3_main.c33
5 files changed, 36 insertions, 28 deletions
diff --git a/drivers/s390/kvm/virtio_ccw.c b/drivers/s390/kvm/virtio_ccw.c
index 2029b6caa595..fb877b59ec57 100644
--- a/drivers/s390/kvm/virtio_ccw.c
+++ b/drivers/s390/kvm/virtio_ccw.c
@@ -166,7 +166,7 @@ static void virtio_ccw_kvm_notify(struct virtqueue *vq)
166 166
167 vcdev = to_vc_device(info->vq->vdev); 167 vcdev = to_vc_device(info->vq->vdev);
168 ccw_device_get_schid(vcdev->cdev, &schid); 168 ccw_device_get_schid(vcdev->cdev, &schid);
169 do_kvm_notify(schid, virtqueue_get_queue_index(vq)); 169 do_kvm_notify(schid, vq->index);
170} 170}
171 171
172static int virtio_ccw_read_vq_conf(struct virtio_ccw_device *vcdev, 172static int virtio_ccw_read_vq_conf(struct virtio_ccw_device *vcdev,
@@ -188,7 +188,7 @@ static void virtio_ccw_del_vq(struct virtqueue *vq, struct ccw1 *ccw)
188 unsigned long flags; 188 unsigned long flags;
189 unsigned long size; 189 unsigned long size;
190 int ret; 190 int ret;
191 unsigned int index = virtqueue_get_queue_index(vq); 191 unsigned int index = vq->index;
192 192
193 /* Remove from our list. */ 193 /* Remove from our list. */
194 spin_lock_irqsave(&vcdev->lock, flags); 194 spin_lock_irqsave(&vcdev->lock, flags);
@@ -610,7 +610,7 @@ static struct virtqueue *virtio_ccw_vq_by_ind(struct virtio_ccw_device *vcdev,
610 vq = NULL; 610 vq = NULL;
611 spin_lock_irqsave(&vcdev->lock, flags); 611 spin_lock_irqsave(&vcdev->lock, flags);
612 list_for_each_entry(info, &vcdev->virtqueues, node) { 612 list_for_each_entry(info, &vcdev->virtqueues, node) {
613 if (virtqueue_get_queue_index(info->vq) == index) { 613 if (info->vq->index == index) {
614 vq = info->vq; 614 vq = info->vq;
615 break; 615 break;
616 } 616 }
diff --git a/drivers/s390/net/qeth_core.h b/drivers/s390/net/qeth_core.h
index 6ccb7457746b..c4f392d5db4c 100644
--- a/drivers/s390/net/qeth_core.h
+++ b/drivers/s390/net/qeth_core.h
@@ -918,7 +918,7 @@ int qeth_send_control_data(struct qeth_card *, int, struct qeth_cmd_buffer *,
918 int (*reply_cb)(struct qeth_card *, struct qeth_reply*, unsigned long), 918 int (*reply_cb)(struct qeth_card *, struct qeth_reply*, unsigned long),
919 void *reply_param); 919 void *reply_param);
920int qeth_get_priority_queue(struct qeth_card *, struct sk_buff *, int, int); 920int qeth_get_priority_queue(struct qeth_card *, struct sk_buff *, int, int);
921int qeth_get_elements_no(struct qeth_card *, void *, struct sk_buff *, int); 921int qeth_get_elements_no(struct qeth_card *, struct sk_buff *, int);
922int qeth_get_elements_for_frags(struct sk_buff *); 922int qeth_get_elements_for_frags(struct sk_buff *);
923int qeth_do_send_packet_fast(struct qeth_card *, struct qeth_qdio_out_q *, 923int qeth_do_send_packet_fast(struct qeth_card *, struct qeth_qdio_out_q *,
924 struct sk_buff *, struct qeth_hdr *, int, int, int); 924 struct sk_buff *, struct qeth_hdr *, int, int, int);
@@ -932,7 +932,7 @@ void qeth_core_get_drvinfo(struct net_device *, struct ethtool_drvinfo *);
932void qeth_dbf_longtext(debug_info_t *id, int level, char *text, ...); 932void qeth_dbf_longtext(debug_info_t *id, int level, char *text, ...);
933int qeth_core_ethtool_get_settings(struct net_device *, struct ethtool_cmd *); 933int qeth_core_ethtool_get_settings(struct net_device *, struct ethtool_cmd *);
934int qeth_set_access_ctrl_online(struct qeth_card *card, int fallback); 934int qeth_set_access_ctrl_online(struct qeth_card *card, int fallback);
935int qeth_hdr_chk_and_bounce(struct sk_buff *, int); 935int qeth_hdr_chk_and_bounce(struct sk_buff *, struct qeth_hdr **, int);
936int qeth_configure_cq(struct qeth_card *, enum qeth_cq); 936int qeth_configure_cq(struct qeth_card *, enum qeth_cq);
937int qeth_hw_trap(struct qeth_card *, enum qeth_diags_trap_action); 937int qeth_hw_trap(struct qeth_card *, enum qeth_diags_trap_action);
938int qeth_query_ipassists(struct qeth_card *, enum qeth_prot_versions prot); 938int qeth_query_ipassists(struct qeth_card *, enum qeth_prot_versions prot);
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
index 451f92020599..6cd0fc1b203a 100644
--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -335,7 +335,7 @@ static inline int qeth_alloc_cq(struct qeth_card *card)
335 335
336 card->qdio.no_in_queues = 2; 336 card->qdio.no_in_queues = 2;
337 337
338 card->qdio.out_bufstates = (struct qdio_outbuf_state *) 338 card->qdio.out_bufstates =
339 kzalloc(card->qdio.no_out_queues * 339 kzalloc(card->qdio.no_out_queues *
340 QDIO_MAX_BUFFERS_PER_Q * 340 QDIO_MAX_BUFFERS_PER_Q *
341 sizeof(struct qdio_outbuf_state), GFP_KERNEL); 341 sizeof(struct qdio_outbuf_state), GFP_KERNEL);
@@ -3717,7 +3717,7 @@ int qeth_get_elements_for_frags(struct sk_buff *skb)
3717} 3717}
3718EXPORT_SYMBOL_GPL(qeth_get_elements_for_frags); 3718EXPORT_SYMBOL_GPL(qeth_get_elements_for_frags);
3719 3719
3720int qeth_get_elements_no(struct qeth_card *card, void *hdr, 3720int qeth_get_elements_no(struct qeth_card *card,
3721 struct sk_buff *skb, int elems) 3721 struct sk_buff *skb, int elems)
3722{ 3722{
3723 int dlen = skb->len - skb->data_len; 3723 int dlen = skb->len - skb->data_len;
@@ -3736,7 +3736,7 @@ int qeth_get_elements_no(struct qeth_card *card, void *hdr,
3736} 3736}
3737EXPORT_SYMBOL_GPL(qeth_get_elements_no); 3737EXPORT_SYMBOL_GPL(qeth_get_elements_no);
3738 3738
3739int qeth_hdr_chk_and_bounce(struct sk_buff *skb, int len) 3739int qeth_hdr_chk_and_bounce(struct sk_buff *skb, struct qeth_hdr **hdr, int len)
3740{ 3740{
3741 int hroom, inpage, rest; 3741 int hroom, inpage, rest;
3742 3742
@@ -3749,6 +3749,8 @@ int qeth_hdr_chk_and_bounce(struct sk_buff *skb, int len)
3749 return 1; 3749 return 1;
3750 memmove(skb->data - rest, skb->data, skb->len - skb->data_len); 3750 memmove(skb->data - rest, skb->data, skb->len - skb->data_len);
3751 skb->data -= rest; 3751 skb->data -= rest;
3752 skb->tail -= rest;
3753 *hdr = (struct qeth_hdr *)skb->data;
3752 QETH_DBF_MESSAGE(2, "skb bounce len: %d rest: %d\n", len, rest); 3754 QETH_DBF_MESSAGE(2, "skb bounce len: %d rest: %d\n", len, rest);
3753 } 3755 }
3754 return 0; 3756 return 0;
diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c
index 155b101bd730..ec8ccdae7aba 100644
--- a/drivers/s390/net/qeth_l2_main.c
+++ b/drivers/s390/net/qeth_l2_main.c
@@ -302,7 +302,8 @@ static void qeth_l2_process_vlans(struct qeth_card *card)
302 spin_unlock_bh(&card->vlanlock); 302 spin_unlock_bh(&card->vlanlock);
303} 303}
304 304
305static int qeth_l2_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) 305static int qeth_l2_vlan_rx_add_vid(struct net_device *dev,
306 __be16 proto, u16 vid)
306{ 307{
307 struct qeth_card *card = dev->ml_priv; 308 struct qeth_card *card = dev->ml_priv;
308 struct qeth_vlan_vid *id; 309 struct qeth_vlan_vid *id;
@@ -331,7 +332,8 @@ static int qeth_l2_vlan_rx_add_vid(struct net_device *dev, unsigned short vid)
331 return 0; 332 return 0;
332} 333}
333 334
334static int qeth_l2_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) 335static int qeth_l2_vlan_rx_kill_vid(struct net_device *dev,
336 __be16 proto, u16 vid)
335{ 337{
336 struct qeth_vlan_vid *id, *tmpid = NULL; 338 struct qeth_vlan_vid *id, *tmpid = NULL;
337 struct qeth_card *card = dev->ml_priv; 339 struct qeth_card *card = dev->ml_priv;
@@ -771,8 +773,7 @@ static int qeth_l2_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
771 } 773 }
772 } 774 }
773 775
774 elements = qeth_get_elements_no(card, (void *)hdr, new_skb, 776 elements = qeth_get_elements_no(card, new_skb, elements_needed);
775 elements_needed);
776 if (!elements) { 777 if (!elements) {
777 if (data_offset >= 0) 778 if (data_offset >= 0)
778 kmem_cache_free(qeth_core_header_cache, hdr); 779 kmem_cache_free(qeth_core_header_cache, hdr);
@@ -780,7 +781,7 @@ static int qeth_l2_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
780 } 781 }
781 782
782 if (card->info.type != QETH_CARD_TYPE_IQD) { 783 if (card->info.type != QETH_CARD_TYPE_IQD) {
783 if (qeth_hdr_chk_and_bounce(new_skb, 784 if (qeth_hdr_chk_and_bounce(new_skb, &hdr,
784 sizeof(struct qeth_hdr_layer2))) 785 sizeof(struct qeth_hdr_layer2)))
785 goto tx_drop; 786 goto tx_drop;
786 rc = qeth_do_send_packet(card, queue, new_skb, hdr, 787 rc = qeth_do_send_packet(card, queue, new_skb, hdr,
@@ -959,7 +960,7 @@ static int qeth_l2_setup_netdev(struct qeth_card *card)
959 SET_ETHTOOL_OPS(card->dev, &qeth_l2_ethtool_ops); 960 SET_ETHTOOL_OPS(card->dev, &qeth_l2_ethtool_ops);
960 else 961 else
961 SET_ETHTOOL_OPS(card->dev, &qeth_l2_osn_ops); 962 SET_ETHTOOL_OPS(card->dev, &qeth_l2_osn_ops);
962 card->dev->features |= NETIF_F_HW_VLAN_FILTER; 963 card->dev->features |= NETIF_F_HW_VLAN_CTAG_FILTER;
963 card->info.broadcast_capable = 1; 964 card->info.broadcast_capable = 1;
964 qeth_l2_request_initial_mac(card); 965 qeth_l2_request_initial_mac(card);
965 SET_NETDEV_DEV(card->dev, &card->gdev->dev); 966 SET_NETDEV_DEV(card->dev, &card->gdev->dev);
diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c
index 1f7edf1b26c3..c1b0b2761f8d 100644
--- a/drivers/s390/net/qeth_l3_main.c
+++ b/drivers/s390/net/qeth_l3_main.c
@@ -1659,7 +1659,8 @@ static void qeth_l3_add_vlan_mc(struct qeth_card *card)
1659 for_each_set_bit(vid, card->active_vlans, VLAN_N_VID) { 1659 for_each_set_bit(vid, card->active_vlans, VLAN_N_VID) {
1660 struct net_device *netdev; 1660 struct net_device *netdev;
1661 1661
1662 netdev = __vlan_find_dev_deep(card->dev, vid); 1662 netdev = __vlan_find_dev_deep(card->dev, htons(ETH_P_8021Q),
1663 vid);
1663 if (netdev == NULL || 1664 if (netdev == NULL ||
1664 !(netdev->flags & IFF_UP)) 1665 !(netdev->flags & IFF_UP))
1665 continue; 1666 continue;
@@ -1720,7 +1721,8 @@ static void qeth_l3_add_vlan_mc6(struct qeth_card *card)
1720 for_each_set_bit(vid, card->active_vlans, VLAN_N_VID) { 1721 for_each_set_bit(vid, card->active_vlans, VLAN_N_VID) {
1721 struct net_device *netdev; 1722 struct net_device *netdev;
1722 1723
1723 netdev = __vlan_find_dev_deep(card->dev, vid); 1724 netdev = __vlan_find_dev_deep(card->dev, htons(ETH_P_8021Q),
1725 vid);
1724 if (netdev == NULL || 1726 if (netdev == NULL ||
1725 !(netdev->flags & IFF_UP)) 1727 !(netdev->flags & IFF_UP))
1726 continue; 1728 continue;
@@ -1764,7 +1766,7 @@ static void qeth_l3_free_vlan_addresses4(struct qeth_card *card,
1764 1766
1765 QETH_CARD_TEXT(card, 4, "frvaddr4"); 1767 QETH_CARD_TEXT(card, 4, "frvaddr4");
1766 1768
1767 netdev = __vlan_find_dev_deep(card->dev, vid); 1769 netdev = __vlan_find_dev_deep(card->dev, htons(ETH_P_8021Q), vid);
1768 if (!netdev) 1770 if (!netdev)
1769 return; 1771 return;
1770 in_dev = in_dev_get(netdev); 1772 in_dev = in_dev_get(netdev);
@@ -1794,7 +1796,7 @@ static void qeth_l3_free_vlan_addresses6(struct qeth_card *card,
1794 1796
1795 QETH_CARD_TEXT(card, 4, "frvaddr6"); 1797 QETH_CARD_TEXT(card, 4, "frvaddr6");
1796 1798
1797 netdev = __vlan_find_dev_deep(card->dev, vid); 1799 netdev = __vlan_find_dev_deep(card->dev, htons(ETH_P_8021Q), vid);
1798 if (!netdev) 1800 if (!netdev)
1799 return; 1801 return;
1800 in6_dev = in6_dev_get(netdev); 1802 in6_dev = in6_dev_get(netdev);
@@ -1824,7 +1826,8 @@ static void qeth_l3_free_vlan_addresses(struct qeth_card *card,
1824 rcu_read_unlock(); 1826 rcu_read_unlock();
1825} 1827}
1826 1828
1827static int qeth_l3_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) 1829static int qeth_l3_vlan_rx_add_vid(struct net_device *dev,
1830 __be16 proto, u16 vid)
1828{ 1831{
1829 struct qeth_card *card = dev->ml_priv; 1832 struct qeth_card *card = dev->ml_priv;
1830 1833
@@ -1832,7 +1835,8 @@ static int qeth_l3_vlan_rx_add_vid(struct net_device *dev, unsigned short vid)
1832 return 0; 1835 return 0;
1833} 1836}
1834 1837
1835static int qeth_l3_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) 1838static int qeth_l3_vlan_rx_kill_vid(struct net_device *dev,
1839 __be16 proto, u16 vid)
1836{ 1840{
1837 struct qeth_card *card = dev->ml_priv; 1841 struct qeth_card *card = dev->ml_priv;
1838 unsigned long flags; 1842 unsigned long flags;
@@ -1975,7 +1979,8 @@ static int qeth_l3_process_inbound_buffer(struct qeth_card *card,
1975 &vlan_tag); 1979 &vlan_tag);
1976 len = skb->len; 1980 len = skb->len;
1977 if (is_vlan && !card->options.sniffer) 1981 if (is_vlan && !card->options.sniffer)
1978 __vlan_hwaccel_put_tag(skb, vlan_tag); 1982 __vlan_hwaccel_put_tag(skb,
1983 htons(ETH_P_8021Q), vlan_tag);
1979 napi_gro_receive(&card->napi, skb); 1984 napi_gro_receive(&card->napi, skb);
1980 } 1985 }
1981 break; 1986 break;
@@ -2084,7 +2089,8 @@ static int qeth_l3_verify_vlan_dev(struct net_device *dev,
2084 struct net_device *netdev; 2089 struct net_device *netdev;
2085 2090
2086 rcu_read_lock(); 2091 rcu_read_lock();
2087 netdev = __vlan_find_dev_deep(card->dev, vid); 2092 netdev = __vlan_find_dev_deep(card->dev, htons(ETH_P_8021Q),
2093 vid);
2088 rcu_read_unlock(); 2094 rcu_read_unlock();
2089 if (netdev == dev) { 2095 if (netdev == dev) {
2090 rc = QETH_VLAN_CARD; 2096 rc = QETH_VLAN_CARD;
@@ -3031,8 +3037,7 @@ static int qeth_l3_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
3031 qeth_l3_hdr_csum(card, hdr, new_skb); 3037 qeth_l3_hdr_csum(card, hdr, new_skb);
3032 } 3038 }
3033 3039
3034 elems = qeth_get_elements_no(card, (void *)hdr, new_skb, 3040 elems = qeth_get_elements_no(card, new_skb, elements_needed);
3035 elements_needed);
3036 if (!elems) { 3041 if (!elems) {
3037 if (data_offset >= 0) 3042 if (data_offset >= 0)
3038 kmem_cache_free(qeth_core_header_cache, hdr); 3043 kmem_cache_free(qeth_core_header_cache, hdr);
@@ -3050,7 +3055,7 @@ static int qeth_l3_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
3050 else 3055 else
3051 len = sizeof(struct qeth_hdr_layer3); 3056 len = sizeof(struct qeth_hdr_layer3);
3052 3057
3053 if (qeth_hdr_chk_and_bounce(new_skb, len)) 3058 if (qeth_hdr_chk_and_bounce(new_skb, &hdr, len))
3054 goto tx_drop; 3059 goto tx_drop;
3055 rc = qeth_do_send_packet(card, queue, new_skb, hdr, 3060 rc = qeth_do_send_packet(card, queue, new_skb, hdr,
3056 elements_needed); 3061 elements_needed);
@@ -3294,9 +3299,9 @@ static int qeth_l3_setup_netdev(struct qeth_card *card)
3294 card->dev->watchdog_timeo = QETH_TX_TIMEOUT; 3299 card->dev->watchdog_timeo = QETH_TX_TIMEOUT;
3295 card->dev->mtu = card->info.initial_mtu; 3300 card->dev->mtu = card->info.initial_mtu;
3296 SET_ETHTOOL_OPS(card->dev, &qeth_l3_ethtool_ops); 3301 SET_ETHTOOL_OPS(card->dev, &qeth_l3_ethtool_ops);
3297 card->dev->features |= NETIF_F_HW_VLAN_TX | 3302 card->dev->features |= NETIF_F_HW_VLAN_CTAG_TX |
3298 NETIF_F_HW_VLAN_RX | 3303 NETIF_F_HW_VLAN_CTAG_RX |
3299 NETIF_F_HW_VLAN_FILTER; 3304 NETIF_F_HW_VLAN_CTAG_FILTER;
3300 card->dev->priv_flags &= ~IFF_XMIT_DST_RELEASE; 3305 card->dev->priv_flags &= ~IFF_XMIT_DST_RELEASE;
3301 card->dev->gso_max_size = 15 * PAGE_SIZE; 3306 card->dev->gso_max_size = 15 * PAGE_SIZE;
3302 3307