hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
kernel/drivers/net/ethernet/cisco/enic/enic_main.c
....@@ -80,7 +80,6 @@
8080 MODULE_DESCRIPTION(DRV_DESCRIPTION);
8181 MODULE_AUTHOR("Scott Feldman <scofeldm@cisco.com>");
8282 MODULE_LICENSE("GPL");
83
-MODULE_VERSION(DRV_VERSION);
8483 MODULE_DEVICE_TABLE(pci, enic_id_table);
8584
8685 #define ENIC_LARGE_PKT_THRESHOLD 1000
....@@ -177,50 +176,18 @@
177176 irq_set_affinity_hint(enic->msix_entry[i].vector, NULL);
178177 }
179178
180
-static void enic_udp_tunnel_add(struct net_device *netdev,
181
- struct udp_tunnel_info *ti)
179
+static int enic_udp_tunnel_set_port(struct net_device *netdev,
180
+ unsigned int table, unsigned int entry,
181
+ struct udp_tunnel_info *ti)
182182 {
183183 struct enic *enic = netdev_priv(netdev);
184
- __be16 port = ti->port;
185184 int err;
186185
187186 spin_lock_bh(&enic->devcmd_lock);
188187
189
- if (ti->type != UDP_TUNNEL_TYPE_VXLAN) {
190
- netdev_info(netdev, "udp_tnl: only vxlan tunnel offload supported");
191
- goto error;
192
- }
193
-
194
- switch (ti->sa_family) {
195
- case AF_INET6:
196
- if (!(enic->vxlan.flags & ENIC_VXLAN_OUTER_IPV6)) {
197
- netdev_info(netdev, "vxlan: only IPv4 offload supported");
198
- goto error;
199
- }
200
- /* Fall through */
201
- case AF_INET:
202
- break;
203
- default:
204
- goto error;
205
- }
206
-
207
- if (enic->vxlan.vxlan_udp_port_number) {
208
- if (ntohs(port) == enic->vxlan.vxlan_udp_port_number)
209
- netdev_warn(netdev, "vxlan: udp port already offloaded");
210
- else
211
- netdev_info(netdev, "vxlan: offload supported for only one UDP port");
212
-
213
- goto error;
214
- }
215
- if ((vnic_dev_get_res_count(enic->vdev, RES_TYPE_WQ) != 1) &&
216
- !(enic->vxlan.flags & ENIC_VXLAN_MULTI_WQ)) {
217
- netdev_info(netdev, "vxlan: vxlan offload with multi wq not supported on this adapter");
218
- goto error;
219
- }
220
-
221188 err = vnic_dev_overlay_offload_cfg(enic->vdev,
222189 OVERLAY_CFG_VXLAN_PORT_UPDATE,
223
- ntohs(port));
190
+ ntohs(ti->port));
224191 if (err)
225192 goto error;
226193
....@@ -229,51 +196,49 @@
229196 if (err)
230197 goto error;
231198
232
- enic->vxlan.vxlan_udp_port_number = ntohs(port);
233
-
234
- netdev_info(netdev, "vxlan fw-vers-%d: offload enabled for udp port: %d, sa_family: %d ",
235
- (int)enic->vxlan.patch_level, ntohs(port), ti->sa_family);
236
-
237
- goto unlock;
238
-
199
+ enic->vxlan.vxlan_udp_port_number = ntohs(ti->port);
239200 error:
240
- netdev_info(netdev, "failed to offload udp port: %d, sa_family: %d, type: %d",
241
- ntohs(port), ti->sa_family, ti->type);
242
-unlock:
243201 spin_unlock_bh(&enic->devcmd_lock);
202
+
203
+ return err;
244204 }
245205
246
-static void enic_udp_tunnel_del(struct net_device *netdev,
247
- struct udp_tunnel_info *ti)
206
+static int enic_udp_tunnel_unset_port(struct net_device *netdev,
207
+ unsigned int table, unsigned int entry,
208
+ struct udp_tunnel_info *ti)
248209 {
249210 struct enic *enic = netdev_priv(netdev);
250211 int err;
251212
252213 spin_lock_bh(&enic->devcmd_lock);
253214
254
- if ((ntohs(ti->port) != enic->vxlan.vxlan_udp_port_number) ||
255
- ti->type != UDP_TUNNEL_TYPE_VXLAN) {
256
- netdev_info(netdev, "udp_tnl: port:%d, sa_family: %d, type: %d not offloaded",
257
- ntohs(ti->port), ti->sa_family, ti->type);
258
- goto unlock;
259
- }
260
-
261215 err = vnic_dev_overlay_offload_ctrl(enic->vdev, OVERLAY_FEATURE_VXLAN,
262216 OVERLAY_OFFLOAD_DISABLE);
263
- if (err) {
264
- netdev_err(netdev, "vxlan: del offload udp port: %d failed",
265
- ntohs(ti->port));
217
+ if (err)
266218 goto unlock;
267
- }
268219
269220 enic->vxlan.vxlan_udp_port_number = 0;
270221
271
- netdev_info(netdev, "vxlan: del offload udp port %d, family %d\n",
272
- ntohs(ti->port), ti->sa_family);
273
-
274222 unlock:
275223 spin_unlock_bh(&enic->devcmd_lock);
224
+
225
+ return err;
276226 }
227
+
228
+static const struct udp_tunnel_nic_info enic_udp_tunnels = {
229
+ .set_port = enic_udp_tunnel_set_port,
230
+ .unset_port = enic_udp_tunnel_unset_port,
231
+ .tables = {
232
+ { .n_entries = 1, .tunnel_types = UDP_TUNNEL_TYPE_VXLAN, },
233
+ },
234
+}, enic_udp_tunnels_v4 = {
235
+ .set_port = enic_udp_tunnel_set_port,
236
+ .unset_port = enic_udp_tunnel_unset_port,
237
+ .flags = UDP_TUNNEL_NIC_INFO_IPV4_ONLY,
238
+ .tables = {
239
+ { .n_entries = 1, .tunnel_types = UDP_TUNNEL_TYPE_VXLAN, },
240
+ },
241
+};
277242
278243 static netdev_features_t enic_features_check(struct sk_buff *skb,
279244 struct net_device *dev,
....@@ -307,7 +272,7 @@
307272 case ntohs(ETH_P_IPV6):
308273 if (!(enic->vxlan.flags & ENIC_VXLAN_INNER_IPV6))
309274 goto out;
310
- /* Fall through */
275
+ fallthrough;
311276 case ntohs(ETH_P_IP):
312277 break;
313278 default:
....@@ -361,11 +326,11 @@
361326 struct enic *enic = vnic_dev_priv(wq->vdev);
362327
363328 if (buf->sop)
364
- pci_unmap_single(enic->pdev, buf->dma_addr,
365
- buf->len, PCI_DMA_TODEVICE);
329
+ dma_unmap_single(&enic->pdev->dev, buf->dma_addr, buf->len,
330
+ DMA_TO_DEVICE);
366331 else
367
- pci_unmap_page(enic->pdev, buf->dma_addr,
368
- buf->len, PCI_DMA_TODEVICE);
332
+ dma_unmap_page(&enic->pdev->dev, buf->dma_addr, buf->len,
333
+ DMA_TO_DEVICE);
369334
370335 if (buf->os_buf)
371336 dev_kfree_skb_any(buf->os_buf);
....@@ -609,8 +574,8 @@
609574 dma_addr_t dma_addr;
610575 int err = 0;
611576
612
- dma_addr = pci_map_single(enic->pdev, skb->data, head_len,
613
- PCI_DMA_TODEVICE);
577
+ dma_addr = dma_map_single(&enic->pdev->dev, skb->data, head_len,
578
+ DMA_TO_DEVICE);
614579 if (unlikely(enic_dma_map_check(enic, dma_addr)))
615580 return -ENOMEM;
616581
....@@ -640,8 +605,8 @@
640605 dma_addr_t dma_addr;
641606 int err = 0;
642607
643
- dma_addr = pci_map_single(enic->pdev, skb->data, head_len,
644
- PCI_DMA_TODEVICE);
608
+ dma_addr = dma_map_single(&enic->pdev->dev, skb->data, head_len,
609
+ DMA_TO_DEVICE);
645610 if (unlikely(enic_dma_map_check(enic, dma_addr)))
646611 return -ENOMEM;
647612
....@@ -696,8 +661,7 @@
696661 tcp_hdr(skb)->check = ~csum_tcpudp_magic(ip_hdr(skb)->saddr,
697662 ip_hdr(skb)->daddr, 0, IPPROTO_TCP, 0);
698663 } else if (skb->protocol == cpu_to_be16(ETH_P_IPV6)) {
699
- tcp_hdr(skb)->check = ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
700
- &ipv6_hdr(skb)->daddr, 0, IPPROTO_TCP, 0);
664
+ tcp_v6_gso_csum_prep(skb);
701665 }
702666 }
703667
....@@ -729,8 +693,9 @@
729693 */
730694 while (frag_len_left) {
731695 len = min(frag_len_left, (unsigned int)WQ_ENET_MAX_DESC_LEN);
732
- dma_addr = pci_map_single(enic->pdev, skb->data + offset, len,
733
- PCI_DMA_TODEVICE);
696
+ dma_addr = dma_map_single(&enic->pdev->dev,
697
+ skb->data + offset, len,
698
+ DMA_TO_DEVICE);
734699 if (unlikely(enic_dma_map_check(enic, dma_addr)))
735700 return -ENOMEM;
736701 enic_queue_wq_desc_tso(wq, skb, dma_addr, len, mss, hdr_len,
....@@ -788,8 +753,8 @@
788753 dma_addr_t dma_addr;
789754 int err = 0;
790755
791
- dma_addr = pci_map_single(enic->pdev, skb->data, head_len,
792
- PCI_DMA_TODEVICE);
756
+ dma_addr = dma_map_single(&enic->pdev->dev, skb->data, head_len,
757
+ DMA_TO_DEVICE);
793758 if (unlikely(enic_dma_map_check(enic, dma_addr)))
794759 return -ENOMEM;
795760
....@@ -899,7 +864,7 @@
899864 if (vnic_wq_desc_avail(wq) < MAX_SKB_FRAGS + ENIC_DESC_MAX_SPLITS)
900865 netif_tx_stop_queue(txq);
901866 skb_tx_timestamp(skb);
902
- if (!skb->xmit_more || netif_xmit_stopped(txq))
867
+ if (!netdev_xmit_more() || netif_xmit_stopped(txq))
903868 vnic_wq_doorbell(wq);
904869
905870 error:
....@@ -1098,7 +1063,7 @@
10981063 }
10991064
11001065 /* netif_tx_lock held, BHs disabled */
1101
-static void enic_tx_timeout(struct net_device *netdev)
1066
+static void enic_tx_timeout(struct net_device *netdev, unsigned int txqueue)
11021067 {
11031068 struct enic *enic = netdev_priv(netdev);
11041069 schedule_work(&enic->tx_hang_reset);
....@@ -1261,8 +1226,8 @@
12611226 if (!buf->os_buf)
12621227 return;
12631228
1264
- pci_unmap_single(enic->pdev, buf->dma_addr,
1265
- buf->len, PCI_DMA_FROMDEVICE);
1229
+ dma_unmap_single(&enic->pdev->dev, buf->dma_addr, buf->len,
1230
+ DMA_FROM_DEVICE);
12661231 dev_kfree_skb_any(buf->os_buf);
12671232 buf->os_buf = NULL;
12681233 }
....@@ -1287,8 +1252,8 @@
12871252 if (!skb)
12881253 return -ENOMEM;
12891254
1290
- dma_addr = pci_map_single(enic->pdev, skb->data, len,
1291
- PCI_DMA_FROMDEVICE);
1255
+ dma_addr = dma_map_single(&enic->pdev->dev, skb->data, len,
1256
+ DMA_FROM_DEVICE);
12921257 if (unlikely(enic_dma_map_check(enic, dma_addr))) {
12931258 dev_kfree_skb(skb);
12941259 return -ENOMEM;
....@@ -1320,8 +1285,8 @@
13201285 new_skb = netdev_alloc_skb_ip_align(netdev, len);
13211286 if (!new_skb)
13221287 return false;
1323
- pci_dma_sync_single_for_cpu(enic->pdev, buf->dma_addr, len,
1324
- DMA_FROM_DEVICE);
1288
+ dma_sync_single_for_cpu(&enic->pdev->dev, buf->dma_addr, len,
1289
+ DMA_FROM_DEVICE);
13251290 memcpy(new_skb->data, (*skb)->data, len);
13261291 *skb = new_skb;
13271292
....@@ -1370,8 +1335,8 @@
13701335 enic->rq_truncated_pkts++;
13711336 }
13721337
1373
- pci_unmap_single(enic->pdev, buf->dma_addr, buf->len,
1374
- PCI_DMA_FROMDEVICE);
1338
+ dma_unmap_single(&enic->pdev->dev, buf->dma_addr, buf->len,
1339
+ DMA_FROM_DEVICE);
13751340 dev_kfree_skb_any(skb);
13761341 buf->os_buf = NULL;
13771342
....@@ -1385,8 +1350,8 @@
13851350
13861351 if (!enic_rxcopybreak(netdev, &skb, buf, bytes_written)) {
13871352 buf->os_buf = NULL;
1388
- pci_unmap_single(enic->pdev, buf->dma_addr, buf->len,
1389
- PCI_DMA_FROMDEVICE);
1353
+ dma_unmap_single(&enic->pdev->dev, buf->dma_addr,
1354
+ buf->len, DMA_FROM_DEVICE);
13901355 }
13911356 prefetch(skb->data - NET_IP_ALIGN);
13921357
....@@ -1459,8 +1424,8 @@
14591424 /* Buffer overflow
14601425 */
14611426
1462
- pci_unmap_single(enic->pdev, buf->dma_addr, buf->len,
1463
- PCI_DMA_FROMDEVICE);
1427
+ dma_unmap_single(&enic->pdev->dev, buf->dma_addr, buf->len,
1428
+ DMA_FROM_DEVICE);
14641429 dev_kfree_skb_any(skb);
14651430 buf->os_buf = NULL;
14661431 }
....@@ -2215,9 +2180,9 @@
22152180 dma_addr_t rss_key_buf_pa;
22162181 int i, kidx, bidx, err;
22172182
2218
- rss_key_buf_va = pci_zalloc_consistent(enic->pdev,
2219
- sizeof(union vnic_rss_key),
2220
- &rss_key_buf_pa);
2183
+ rss_key_buf_va = dma_alloc_coherent(&enic->pdev->dev,
2184
+ sizeof(union vnic_rss_key),
2185
+ &rss_key_buf_pa, GFP_ATOMIC);
22212186 if (!rss_key_buf_va)
22222187 return -ENOMEM;
22232188
....@@ -2232,8 +2197,8 @@
22322197 sizeof(union vnic_rss_key));
22332198 spin_unlock_bh(&enic->devcmd_lock);
22342199
2235
- pci_free_consistent(enic->pdev, sizeof(union vnic_rss_key),
2236
- rss_key_buf_va, rss_key_buf_pa);
2200
+ dma_free_coherent(&enic->pdev->dev, sizeof(union vnic_rss_key),
2201
+ rss_key_buf_va, rss_key_buf_pa);
22372202
22382203 return err;
22392204 }
....@@ -2252,8 +2217,9 @@
22522217 unsigned int i;
22532218 int err;
22542219
2255
- rss_cpu_buf_va = pci_alloc_consistent(enic->pdev,
2256
- sizeof(union vnic_rss_cpu), &rss_cpu_buf_pa);
2220
+ rss_cpu_buf_va = dma_alloc_coherent(&enic->pdev->dev,
2221
+ sizeof(union vnic_rss_cpu),
2222
+ &rss_cpu_buf_pa, GFP_ATOMIC);
22572223 if (!rss_cpu_buf_va)
22582224 return -ENOMEM;
22592225
....@@ -2266,8 +2232,8 @@
22662232 sizeof(union vnic_rss_cpu));
22672233 spin_unlock_bh(&enic->devcmd_lock);
22682234
2269
- pci_free_consistent(enic->pdev, sizeof(union vnic_rss_cpu),
2270
- rss_cpu_buf_va, rss_cpu_buf_pa);
2235
+ dma_free_coherent(&enic->pdev->dev, sizeof(union vnic_rss_cpu),
2236
+ rss_cpu_buf_va, rss_cpu_buf_pa);
22712237
22722238 return err;
22732239 }
....@@ -2546,8 +2512,8 @@
25462512 #ifdef CONFIG_RFS_ACCEL
25472513 .ndo_rx_flow_steer = enic_rx_flow_steer,
25482514 #endif
2549
- .ndo_udp_tunnel_add = enic_udp_tunnel_add,
2550
- .ndo_udp_tunnel_del = enic_udp_tunnel_del,
2515
+ .ndo_udp_tunnel_add = udp_tunnel_nic_add_port,
2516
+ .ndo_udp_tunnel_del = udp_tunnel_nic_del_port,
25512517 .ndo_features_check = enic_features_check,
25522518 };
25532519
....@@ -2572,8 +2538,8 @@
25722538 #ifdef CONFIG_RFS_ACCEL
25732539 .ndo_rx_flow_steer = enic_rx_flow_steer,
25742540 #endif
2575
- .ndo_udp_tunnel_add = enic_udp_tunnel_add,
2576
- .ndo_udp_tunnel_del = enic_udp_tunnel_del,
2541
+ .ndo_udp_tunnel_add = udp_tunnel_nic_add_port,
2542
+ .ndo_udp_tunnel_del = udp_tunnel_nic_del_port,
25772543 .ndo_features_check = enic_features_check,
25782544 };
25792545
....@@ -2581,13 +2547,15 @@
25812547 {
25822548 unsigned int i;
25832549
2584
- for (i = 0; i < enic->rq_count; i++) {
2585
- napi_hash_del(&enic->napi[i]);
2586
- netif_napi_del(&enic->napi[i]);
2587
- }
2550
+ for (i = 0; i < enic->rq_count; i++)
2551
+ __netif_napi_del(&enic->napi[i]);
2552
+
25882553 if (vnic_dev_get_intr_mode(enic->vdev) == VNIC_DEV_INTR_MODE_MSIX)
25892554 for (i = 0; i < enic->wq_count; i++)
2590
- netif_napi_del(&enic->napi[enic_cq_wq(enic, i)]);
2555
+ __netif_napi_del(&enic->napi[enic_cq_wq(enic, i)]);
2556
+
2557
+ /* observe RCU grace period after __netif_napi_del() calls */
2558
+ synchronize_net();
25912559
25922560 enic_free_vnic_resources(enic);
25932561 enic_clear_intr_mode(enic);
....@@ -2753,21 +2721,21 @@
27532721 * fail to 32-bit.
27542722 */
27552723
2756
- err = pci_set_dma_mask(pdev, DMA_BIT_MASK(47));
2724
+ err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(47));
27572725 if (err) {
2758
- err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
2726
+ err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
27592727 if (err) {
27602728 dev_err(dev, "No usable DMA configuration, aborting\n");
27612729 goto err_out_release_regions;
27622730 }
2763
- err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
2731
+ err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
27642732 if (err) {
27652733 dev_err(dev, "Unable to obtain %u-bit DMA "
27662734 "for consistent allocations, aborting\n", 32);
27672735 goto err_out_release_regions;
27682736 }
27692737 } else {
2770
- err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(47));
2738
+ err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(47));
27712739 if (err) {
27722740 dev_err(dev, "Unable to obtain %u-bit DMA "
27732741 "for consistent allocations, aborting\n", 47);
....@@ -2983,6 +2951,13 @@
29832951 patch_level = fls(patch_level);
29842952 patch_level = patch_level ? patch_level - 1 : 0;
29852953 enic->vxlan.patch_level = patch_level;
2954
+
2955
+ if (vnic_dev_get_res_count(enic->vdev, RES_TYPE_WQ) == 1 ||
2956
+ enic->vxlan.flags & ENIC_VXLAN_MULTI_WQ) {
2957
+ netdev->udp_tunnel_nic_info = &enic_udp_tunnels_v4;
2958
+ if (enic->vxlan.flags & ENIC_VXLAN_OUTER_IPV6)
2959
+ netdev->udp_tunnel_nic_info = &enic_udp_tunnels;
2960
+ }
29862961 }
29872962
29882963 netdev->features |= netdev->hw_features;
....@@ -3074,8 +3049,6 @@
30743049
30753050 static int __init enic_init_module(void)
30763051 {
3077
- pr_info("%s, ver %s\n", DRV_DESCRIPTION, DRV_VERSION);
3078
-
30793052 return pci_register_driver(&enic_driver);
30803053 }
30813054