hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/net/thunderbolt.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0
12 /*
23 * Networking over Thunderbolt cable using Apple ThunderboltIP protocol
34 *
....@@ -5,10 +6,6 @@
56 * Authors: Amir Levy <amir.jer.levy@intel.com>
67 * Michael Jamet <michael.jamet@intel.com>
78 * Mika Westerberg <mika.westerberg@linux.intel.com>
8
- *
9
- * This program is free software; you can redistribute it and/or modify
10
- * it under the terms of the GNU General Public License version 2 as
11
- * published by the Free Software Foundation.
129 */
1310
1411 #include <linux/atomic.h>
....@@ -869,8 +866,8 @@
869866 eof_mask = BIT(TBIP_PDF_FRAME_END);
870867
871868 ring = tb_ring_alloc_rx(xd->tb->nhi, -1, TBNET_RING_SIZE,
872
- RING_FLAG_FRAME | RING_FLAG_E2E, sof_mask,
873
- eof_mask, tbnet_start_poll, net);
869
+ RING_FLAG_FRAME, sof_mask, eof_mask,
870
+ tbnet_start_poll, net);
874871 if (!ring) {
875872 netdev_err(dev, "failed to allocate Rx ring\n");
876873 tb_ring_free(net->tx_ring.ring);
....@@ -961,12 +958,11 @@
961958 *tucso = ~csum_tcpudp_magic(ip_hdr(skb)->saddr,
962959 ip_hdr(skb)->daddr, 0,
963960 ip_hdr(skb)->protocol, 0);
964
- } else if (skb_is_gso_v6(skb)) {
961
+ } else if (skb_is_gso(skb) && skb_is_gso_v6(skb)) {
965962 tucso = dest + ((void *)&(tcp_hdr(skb)->check) - data);
966963 *tucso = ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
967964 &ipv6_hdr(skb)->daddr, 0,
968965 IPPROTO_TCP, 0);
969
- return false;
970966 } else if (protocol == htons(ETH_P_IPV6)) {
971967 tucso = dest + skb_checksum_start_offset(skb) + skb->csum_offset;
972968 *tucso = ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
....@@ -1008,7 +1004,7 @@
10081004 const skb_frag_t *frag = &skb_shinfo(skb)->frags[frag_num];
10091005
10101006 *len = skb_frag_size(frag);
1011
- return kmap_atomic(skb_frag_page(frag)) + frag->page_offset;
1007
+ return kmap_atomic(skb_frag_page(frag)) + skb_frag_off(frag);
10121008 }
10131009
10141010 static netdev_tx_t tbnet_start_xmit(struct sk_buff *skb,
....@@ -1338,16 +1334,29 @@
13381334 tb_property_add_immediate(tbnet_dir, "prtcid", 1);
13391335 tb_property_add_immediate(tbnet_dir, "prtcvers", 1);
13401336 tb_property_add_immediate(tbnet_dir, "prtcrevs", 1);
1337
+ /* Currently only announce support for match frags ID (bit 1). Bit 0
1338
+ * is reserved for full E2E flow control which we do not support at
1339
+ * the moment.
1340
+ */
13411341 tb_property_add_immediate(tbnet_dir, "prtcstns",
13421342 TBNET_MATCH_FRAGS_ID);
13431343
13441344 ret = tb_register_property_dir("network", tbnet_dir);
1345
- if (ret) {
1346
- tb_property_free_dir(tbnet_dir);
1347
- return ret;
1348
- }
1345
+ if (ret)
1346
+ goto err_free_dir;
13491347
1350
- return tb_register_service_driver(&tbnet_driver);
1348
+ ret = tb_register_service_driver(&tbnet_driver);
1349
+ if (ret)
1350
+ goto err_unregister;
1351
+
1352
+ return 0;
1353
+
1354
+err_unregister:
1355
+ tb_unregister_property_dir("network", tbnet_dir);
1356
+err_free_dir:
1357
+ tb_property_free_dir(tbnet_dir);
1358
+
1359
+ return ret;
13511360 }
13521361 module_init(tbnet_init);
13531362