ena.c (4f8f476e73e55a95b15caad7187bd3863abfa520) | ena.c (9eb1615f33e9174fa5f1ca46954c35b3f026a98a) |
---|---|
1/*- 2 * BSD LICENSE 3 * 4 * Copyright (c) 2015-2020 Amazon.com, Inc. or its affiliates. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 212 unchanged lines hidden (view full) --- 221 maxsize, /* maxsize */ 222 1, /* nsegments */ 223 maxsize, /* maxsegsize */ 224 BUS_DMA_ALLOCNOW, /* flags */ 225 NULL, /* lockfunc */ 226 NULL, /* lockarg */ 227 &dma->tag); 228 if (unlikely(error != 0)) { | 1/*- 2 * BSD LICENSE 3 * 4 * Copyright (c) 2015-2020 Amazon.com, Inc. or its affiliates. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 212 unchanged lines hidden (view full) --- 221 maxsize, /* maxsize */ 222 1, /* nsegments */ 223 maxsize, /* maxsegsize */ 224 BUS_DMA_ALLOCNOW, /* flags */ 225 NULL, /* lockfunc */ 226 NULL, /* lockarg */ 227 &dma->tag); 228 if (unlikely(error != 0)) { |
229 ena_trace(ENA_ALERT, "bus_dma_tag_create failed: %d\n", error); | 229 ena_trace(NULL, ENA_ALERT, "bus_dma_tag_create failed: %d\n", error); |
230 goto fail_tag; 231 } 232 233 error = bus_dmamem_alloc(dma->tag, (void**) &dma->vaddr, 234 BUS_DMA_COHERENT | BUS_DMA_ZERO, &dma->map); 235 if (unlikely(error != 0)) { | 230 goto fail_tag; 231 } 232 233 error = bus_dmamem_alloc(dma->tag, (void**) &dma->vaddr, 234 BUS_DMA_COHERENT | BUS_DMA_ZERO, &dma->map); 235 if (unlikely(error != 0)) { |
236 ena_trace(ENA_ALERT, "bus_dmamem_alloc(%ju) failed: %d\n", | 236 ena_trace(NULL, ENA_ALERT, "bus_dmamem_alloc(%ju) failed: %d\n", |
237 (uintmax_t)size, error); 238 goto fail_map_create; 239 } 240 241 dma->paddr = 0; 242 error = bus_dmamap_load(dma->tag, dma->map, dma->vaddr, 243 size, ena_dmamap_callback, &dma->paddr, mapflags); 244 if (unlikely((error != 0) || (dma->paddr == 0))) { | 237 (uintmax_t)size, error); 238 goto fail_map_create; 239 } 240 241 dma->paddr = 0; 242 error = bus_dmamap_load(dma->tag, dma->map, dma->vaddr, 243 size, ena_dmamap_callback, &dma->paddr, mapflags); 244 if (unlikely((error != 0) || (dma->paddr == 0))) { |
245 ena_trace(ENA_ALERT, ": bus_dmamap_load failed: %d\n", error); | 245 ena_trace(NULL, ENA_ALERT, ": bus_dmamap_load failed: %d\n", error); |
246 goto fail_map_load; 247 } 248 249 bus_dmamap_sync(dma->tag, dma->map, 250 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 251 252 return (0); 253 --- 56 unchanged lines hidden (view full) --- 310 311 pci_vendor_id = pci_get_vendor(dev); 312 pci_device_id = pci_get_device(dev); 313 314 ent = ena_vendor_info_array; 315 while (ent->vendor_id != 0) { 316 if ((pci_vendor_id == ent->vendor_id) && 317 (pci_device_id == ent->device_id)) { | 246 goto fail_map_load; 247 } 248 249 bus_dmamap_sync(dma->tag, dma->map, 250 BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 251 252 return (0); 253 --- 56 unchanged lines hidden (view full) --- 310 311 pci_vendor_id = pci_get_vendor(dev); 312 pci_device_id = pci_get_device(dev); 313 314 ent = ena_vendor_info_array; 315 while (ent->vendor_id != 0) { 316 if ((pci_vendor_id == ent->vendor_id) && 317 (pci_device_id == ent->device_id)) { |
318 ena_trace(ENA_DBG, "vendor=%x device=%x\n", | 318 ena_trace(NULL, ENA_DBG, "vendor=%x device=%x\n", |
319 pci_vendor_id, pci_device_id); 320 321 sprintf(adapter_name, DEVICE_DESC); 322 device_set_desc_copy(dev, adapter_name); 323 return (BUS_PROBE_DEFAULT); 324 } 325 326 ent++; --- 13 unchanged lines hidden (view full) --- 340 device_printf(adapter->pdev, "Invalid MTU setting. " 341 "new_mtu: %d max mtu: %d min mtu: %d\n", 342 new_mtu, adapter->max_mtu, ENA_MIN_MTU); 343 return (EINVAL); 344 } 345 346 rc = ena_com_set_dev_mtu(adapter->ena_dev, new_mtu); 347 if (likely(rc == 0)) { | 319 pci_vendor_id, pci_device_id); 320 321 sprintf(adapter_name, DEVICE_DESC); 322 device_set_desc_copy(dev, adapter_name); 323 return (BUS_PROBE_DEFAULT); 324 } 325 326 ent++; --- 13 unchanged lines hidden (view full) --- 340 device_printf(adapter->pdev, "Invalid MTU setting. " 341 "new_mtu: %d max mtu: %d min mtu: %d\n", 342 new_mtu, adapter->max_mtu, ENA_MIN_MTU); 343 return (EINVAL); 344 } 345 346 rc = ena_com_set_dev_mtu(adapter->ena_dev, new_mtu); 347 if (likely(rc == 0)) { |
348 ena_trace(ENA_DBG, "set MTU to %d\n", new_mtu); | 348 ena_trace(NULL, ENA_DBG, "set MTU to %d\n", new_mtu); |
349 if_setmtu(ifp, new_mtu); 350 } else { 351 device_printf(adapter->pdev, "Failed to set MTU to %d\n", 352 new_mtu); 353 } 354 355 return (rc); 356} --- 304 unchanged lines hidden (view full) --- 661 drbr_flush(adapter->ifp, tx_ring->br); 662 ENA_RING_MTX_UNLOCK(tx_ring); 663 664 /* ... and create the buffer DMA maps */ 665 for (i = 0; i < tx_ring->ring_size; i++) { 666 err = bus_dmamap_create(adapter->tx_buf_tag, 0, 667 &tx_ring->tx_buffer_info[i].dmamap); 668 if (unlikely(err != 0)) { | 349 if_setmtu(ifp, new_mtu); 350 } else { 351 device_printf(adapter->pdev, "Failed to set MTU to %d\n", 352 new_mtu); 353 } 354 355 return (rc); 356} --- 304 unchanged lines hidden (view full) --- 661 drbr_flush(adapter->ifp, tx_ring->br); 662 ENA_RING_MTX_UNLOCK(tx_ring); 663 664 /* ... and create the buffer DMA maps */ 665 for (i = 0; i < tx_ring->ring_size; i++) { 666 err = bus_dmamap_create(adapter->tx_buf_tag, 0, 667 &tx_ring->tx_buffer_info[i].dmamap); 668 if (unlikely(err != 0)) { |
669 ena_trace(ENA_ALERT, | 669 ena_trace(NULL, ENA_ALERT, |
670 "Unable to create Tx DMA map for buffer %d\n", 671 i); 672 goto err_map_release; 673 } 674 675#ifdef DEV_NETMAP 676 if (adapter->ifp->if_capenable & IFCAP_NETMAP) { 677 map = tx_ring->tx_buffer_info[i].nm_info.map_seg; 678 for (j = 0; j < ENA_PKT_MAX_BUFS; j++) { 679 err = bus_dmamap_create(adapter->tx_buf_tag, 0, 680 &map[j]); 681 if (unlikely(err != 0)) { | 670 "Unable to create Tx DMA map for buffer %d\n", 671 i); 672 goto err_map_release; 673 } 674 675#ifdef DEV_NETMAP 676 if (adapter->ifp->if_capenable & IFCAP_NETMAP) { 677 map = tx_ring->tx_buffer_info[i].nm_info.map_seg; 678 for (j = 0; j < ENA_PKT_MAX_BUFS; j++) { 679 err = bus_dmamap_create(adapter->tx_buf_tag, 0, 680 &map[j]); 681 if (unlikely(err != 0)) { |
682 ena_trace(ENA_ALERT, "Unable to create " | 682 ena_trace(NULL, ENA_ALERT, "Unable to create " |
683 "Tx DMA for buffer %d %d\n", i, j); 684 goto err_map_release; 685 } 686 } 687 } 688#endif /* DEV_NETMAP */ 689 } 690 691 /* Allocate taskqueues */ 692 TASK_INIT(&tx_ring->enqueue_task, 0, ena_deferred_mq_start, tx_ring); 693 tx_ring->enqueue_tq = taskqueue_create_fast("ena_tx_enque", M_NOWAIT, 694 taskqueue_thread_enqueue, &tx_ring->enqueue_tq); 695 if (unlikely(tx_ring->enqueue_tq == NULL)) { | 683 "Tx DMA for buffer %d %d\n", i, j); 684 goto err_map_release; 685 } 686 } 687 } 688#endif /* DEV_NETMAP */ 689 } 690 691 /* Allocate taskqueues */ 692 TASK_INIT(&tx_ring->enqueue_task, 0, ena_deferred_mq_start, tx_ring); 693 tx_ring->enqueue_tq = taskqueue_create_fast("ena_tx_enque", M_NOWAIT, 694 taskqueue_thread_enqueue, &tx_ring->enqueue_tq); 695 if (unlikely(tx_ring->enqueue_tq == NULL)) { |
696 ena_trace(ENA_ALERT, | 696 ena_trace(NULL, ENA_ALERT, |
697 "Unable to create taskqueue for enqueue task\n"); 698 i = tx_ring->ring_size; 699 goto err_map_release; 700 } 701 702 tx_ring->running = true; 703 704 taskqueue_start_threads(&tx_ring->enqueue_tq, 1, PI_NET, --- 168 unchanged lines hidden (view full) --- 873 rx_ring->next_to_clean = 0; 874 rx_ring->next_to_use = 0; 875 876 /* ... and create the buffer DMA maps */ 877 for (i = 0; i < rx_ring->ring_size; i++) { 878 err = bus_dmamap_create(adapter->rx_buf_tag, 0, 879 &(rx_ring->rx_buffer_info[i].map)); 880 if (err != 0) { | 697 "Unable to create taskqueue for enqueue task\n"); 698 i = tx_ring->ring_size; 699 goto err_map_release; 700 } 701 702 tx_ring->running = true; 703 704 taskqueue_start_threads(&tx_ring->enqueue_tq, 1, PI_NET, --- 168 unchanged lines hidden (view full) --- 873 rx_ring->next_to_clean = 0; 874 rx_ring->next_to_use = 0; 875 876 /* ... and create the buffer DMA maps */ 877 for (i = 0; i < rx_ring->ring_size; i++) { 878 err = bus_dmamap_create(adapter->rx_buf_tag, 0, 879 &(rx_ring->rx_buffer_info[i].map)); 880 if (err != 0) { |
881 ena_trace(ENA_ALERT, | 881 ena_trace(NULL, ENA_ALERT, |
882 "Unable to create Rx DMA map for buffer %d\n", i); 883 goto err_buf_info_unmap; 884 } 885 } 886 887 /* Create LRO for the ring */ 888 if ((adapter->ifp->if_capenable & IFCAP_LRO) != 0) { 889 int err = tcp_lro_init(&rx_ring->lro); 890 if (err != 0) { 891 device_printf(adapter->pdev, 892 "LRO[%d] Initialization failed!\n", qid); 893 } else { | 882 "Unable to create Rx DMA map for buffer %d\n", i); 883 goto err_buf_info_unmap; 884 } 885 } 886 887 /* Create LRO for the ring */ 888 if ((adapter->ifp->if_capenable & IFCAP_LRO) != 0) { 889 int err = tcp_lro_init(&rx_ring->lro); 890 if (err != 0) { 891 device_printf(adapter->pdev, 892 "LRO[%d] Initialization failed!\n", qid); 893 } else { |
894 ena_trace(ENA_INFO, | 894 ena_trace(NULL, ENA_INFO, |
895 "RX Soft LRO[%d] Initialized\n", qid); 896 rx_ring->lro.ifp = adapter->ifp; 897 } 898 } 899 900 return (0); 901 902err_buf_info_unmap: --- 114 unchanged lines hidden (view full) --- 1017 mlen = MCLBYTES; 1018 } else { 1019 mlen = rx_ring->rx_mbuf_sz; 1020 } 1021 /* Set mbuf length*/ 1022 rx_info->mbuf->m_pkthdr.len = rx_info->mbuf->m_len = mlen; 1023 1024 /* Map packets for DMA */ | 895 "RX Soft LRO[%d] Initialized\n", qid); 896 rx_ring->lro.ifp = adapter->ifp; 897 } 898 } 899 900 return (0); 901 902err_buf_info_unmap: --- 114 unchanged lines hidden (view full) --- 1017 mlen = MCLBYTES; 1018 } else { 1019 mlen = rx_ring->rx_mbuf_sz; 1020 } 1021 /* Set mbuf length*/ 1022 rx_info->mbuf->m_pkthdr.len = rx_info->mbuf->m_len = mlen; 1023 1024 /* Map packets for DMA */ |
1025 ena_trace(ENA_DBG | ENA_RSC | ENA_RXPTH, | 1025 ena_trace(NULL, ENA_DBG | ENA_RSC | ENA_RXPTH, |
1026 "Using tag %p for buffers' DMA mapping, mbuf %p len: %d\n", 1027 adapter->rx_buf_tag,rx_info->mbuf, rx_info->mbuf->m_len); 1028 error = bus_dmamap_load_mbuf_sg(adapter->rx_buf_tag, rx_info->map, 1029 rx_info->mbuf, segs, &nsegs, BUS_DMA_NOWAIT); 1030 if (unlikely((error != 0) || (nsegs != 1))) { | 1026 "Using tag %p for buffers' DMA mapping, mbuf %p len: %d\n", 1027 adapter->rx_buf_tag,rx_info->mbuf, rx_info->mbuf->m_len); 1028 error = bus_dmamap_load_mbuf_sg(adapter->rx_buf_tag, rx_info->map, 1029 rx_info->mbuf, segs, &nsegs, BUS_DMA_NOWAIT); 1030 if (unlikely((error != 0) || (nsegs != 1))) { |
1031 ena_trace(ENA_WARNING, "failed to map mbuf, error: %d, " | 1031 ena_trace(NULL, ENA_WARNING, "failed to map mbuf, error: %d, " |
1032 "nsegs: %d\n", error, nsegs); 1033 counter_u64_add(rx_ring->rx_stats.dma_mapping_err, 1); 1034 goto exit; 1035 1036 } 1037 1038 bus_dmamap_sync(adapter->rx_buf_tag, rx_info->map, BUS_DMASYNC_PREREAD); 1039 1040 ena_buf = &rx_info->ena_buf; 1041 ena_buf->paddr = segs[0].ds_addr; 1042 ena_buf->len = mlen; 1043 | 1032 "nsegs: %d\n", error, nsegs); 1033 counter_u64_add(rx_ring->rx_stats.dma_mapping_err, 1); 1034 goto exit; 1035 1036 } 1037 1038 bus_dmamap_sync(adapter->rx_buf_tag, rx_info->map, BUS_DMASYNC_PREREAD); 1039 1040 ena_buf = &rx_info->ena_buf; 1041 ena_buf->paddr = segs[0].ds_addr; 1042 ena_buf->len = mlen; 1043 |
1044 ena_trace(ENA_DBG | ENA_RSC | ENA_RXPTH, | 1044 ena_trace(NULL, ENA_DBG | ENA_RSC | ENA_RXPTH, |
1045 "ALLOC RX BUF: mbuf %p, rx_info %p, len %d, paddr %#jx\n", 1046 rx_info->mbuf, rx_info,ena_buf->len, (uintmax_t)ena_buf->paddr); 1047 1048 return (0); 1049 1050exit: 1051 m_freem(rx_info->mbuf); 1052 rx_info->mbuf = NULL; 1053 return (EFAULT); 1054} 1055 1056static void 1057ena_free_rx_mbuf(struct ena_adapter *adapter, struct ena_ring *rx_ring, 1058 struct ena_rx_buffer *rx_info) 1059{ 1060 1061 if (rx_info->mbuf == NULL) { | 1045 "ALLOC RX BUF: mbuf %p, rx_info %p, len %d, paddr %#jx\n", 1046 rx_info->mbuf, rx_info,ena_buf->len, (uintmax_t)ena_buf->paddr); 1047 1048 return (0); 1049 1050exit: 1051 m_freem(rx_info->mbuf); 1052 rx_info->mbuf = NULL; 1053 return (EFAULT); 1054} 1055 1056static void 1057ena_free_rx_mbuf(struct ena_adapter *adapter, struct ena_ring *rx_ring, 1058 struct ena_rx_buffer *rx_info) 1059{ 1060 1061 if (rx_info->mbuf == NULL) { |
1062 ena_trace(ENA_WARNING, "Trying to free unallocated buffer\n"); | 1062 ena_trace(NULL, ENA_WARNING, "Trying to free unallocated buffer\n"); |
1063 return; 1064 } 1065 1066 bus_dmamap_sync(adapter->rx_buf_tag, rx_info->map, 1067 BUS_DMASYNC_POSTREAD); 1068 bus_dmamap_unload(adapter->rx_buf_tag, rx_info->map); 1069 m_freem(rx_info->mbuf); 1070 rx_info->mbuf = NULL; --- 8 unchanged lines hidden (view full) --- 1079int 1080ena_refill_rx_bufs(struct ena_ring *rx_ring, uint32_t num) 1081{ 1082 struct ena_adapter *adapter = rx_ring->adapter; 1083 uint16_t next_to_use, req_id; 1084 uint32_t i; 1085 int rc; 1086 | 1063 return; 1064 } 1065 1066 bus_dmamap_sync(adapter->rx_buf_tag, rx_info->map, 1067 BUS_DMASYNC_POSTREAD); 1068 bus_dmamap_unload(adapter->rx_buf_tag, rx_info->map); 1069 m_freem(rx_info->mbuf); 1070 rx_info->mbuf = NULL; --- 8 unchanged lines hidden (view full) --- 1079int 1080ena_refill_rx_bufs(struct ena_ring *rx_ring, uint32_t num) 1081{ 1082 struct ena_adapter *adapter = rx_ring->adapter; 1083 uint16_t next_to_use, req_id; 1084 uint32_t i; 1085 int rc; 1086 |
1087 ena_trace(ENA_DBG | ENA_RXPTH | ENA_RSC, "refill qid: %d\n", | 1087 ena_trace(NULL, ENA_DBG | ENA_RXPTH | ENA_RSC, "refill qid: %d\n", |
1088 rx_ring->qid); 1089 1090 next_to_use = rx_ring->next_to_use; 1091 1092 for (i = 0; i < num; i++) { 1093 struct ena_rx_buffer *rx_info; 1094 | 1088 rx_ring->qid); 1089 1090 next_to_use = rx_ring->next_to_use; 1091 1092 for (i = 0; i < num; i++) { 1093 struct ena_rx_buffer *rx_info; 1094 |
1095 ena_trace(ENA_DBG | ENA_RXPTH | ENA_RSC, | 1095 ena_trace(NULL, ENA_DBG | ENA_RXPTH | ENA_RSC, |
1096 "RX buffer - next to use: %d\n", next_to_use); 1097 1098 req_id = rx_ring->free_rx_ids[next_to_use]; 1099 rx_info = &rx_ring->rx_buffer_info[req_id]; 1100#ifdef DEV_NETMAP 1101 if (ena_rx_ring_in_netmap(adapter, rx_ring->qid)) 1102 rc = ena_netmap_alloc_rx_slot(adapter, rx_ring, rx_info); 1103 else 1104#endif /* DEV_NETMAP */ 1105 rc = ena_alloc_rx_mbuf(adapter, rx_ring, rx_info); 1106 if (unlikely(rc != 0)) { | 1096 "RX buffer - next to use: %d\n", next_to_use); 1097 1098 req_id = rx_ring->free_rx_ids[next_to_use]; 1099 rx_info = &rx_ring->rx_buffer_info[req_id]; 1100#ifdef DEV_NETMAP 1101 if (ena_rx_ring_in_netmap(adapter, rx_ring->qid)) 1102 rc = ena_netmap_alloc_rx_slot(adapter, rx_ring, rx_info); 1103 else 1104#endif /* DEV_NETMAP */ 1105 rc = ena_alloc_rx_mbuf(adapter, rx_ring, rx_info); 1106 if (unlikely(rc != 0)) { |
1107 ena_trace(ENA_WARNING, | 1107 ena_trace(NULL, ENA_WARNING, |
1108 "failed to alloc buffer for rx queue %d\n", 1109 rx_ring->qid); 1110 break; 1111 } 1112 rc = ena_com_add_single_rx_desc(rx_ring->ena_com_io_sq, 1113 &rx_info->ena_buf, req_id); 1114 if (unlikely(rc != 0)) { | 1108 "failed to alloc buffer for rx queue %d\n", 1109 rx_ring->qid); 1110 break; 1111 } 1112 rc = ena_com_add_single_rx_desc(rx_ring->ena_com_io_sq, 1113 &rx_info->ena_buf, req_id); 1114 if (unlikely(rc != 0)) { |
1115 ena_trace(ENA_WARNING, | 1115 ena_trace(NULL, ENA_WARNING, |
1116 "failed to add buffer for rx queue %d\n", 1117 rx_ring->qid); 1118 break; 1119 } 1120 next_to_use = ENA_RX_RING_IDX_NEXT(next_to_use, 1121 rx_ring->ring_size); 1122 } 1123 1124 if (unlikely(i < num)) { 1125 counter_u64_add(rx_ring->rx_stats.refil_partial, 1); | 1116 "failed to add buffer for rx queue %d\n", 1117 rx_ring->qid); 1118 break; 1119 } 1120 next_to_use = ENA_RX_RING_IDX_NEXT(next_to_use, 1121 rx_ring->ring_size); 1122 } 1123 1124 if (unlikely(i < num)) { 1125 counter_u64_add(rx_ring->rx_stats.refil_partial, 1); |
1126 ena_trace(ENA_WARNING, | 1126 ena_trace(NULL, ENA_WARNING, |
1127 "refilled rx qid %d with only %d mbufs (from %d)\n", 1128 rx_ring->qid, i, num); 1129 } 1130 1131 if (likely(i != 0)) 1132 ena_com_write_sq_doorbell(rx_ring->ena_com_io_sq); 1133 1134 rx_ring->next_to_use = next_to_use; --- 192 unchanged lines hidden (view full) --- 1327 struct ena_ring *rx_ring; 1328 int i, rc, bufs_num; 1329 1330 for (i = 0; i < adapter->num_io_queues; i++) { 1331 rx_ring = &adapter->rx_ring[i]; 1332 bufs_num = rx_ring->ring_size - 1; 1333 rc = ena_refill_rx_bufs(rx_ring, bufs_num); 1334 if (unlikely(rc != bufs_num)) | 1127 "refilled rx qid %d with only %d mbufs (from %d)\n", 1128 rx_ring->qid, i, num); 1129 } 1130 1131 if (likely(i != 0)) 1132 ena_com_write_sq_doorbell(rx_ring->ena_com_io_sq); 1133 1134 rx_ring->next_to_use = next_to_use; --- 192 unchanged lines hidden (view full) --- 1327 struct ena_ring *rx_ring; 1328 int i, rc, bufs_num; 1329 1330 for (i = 0; i < adapter->num_io_queues; i++) { 1331 rx_ring = &adapter->rx_ring[i]; 1332 bufs_num = rx_ring->ring_size - 1; 1333 rc = ena_refill_rx_bufs(rx_ring, bufs_num); 1334 if (unlikely(rc != bufs_num)) |
1335 ena_trace(ENA_WARNING, "refilling Queue %d failed. " | 1335 ena_trace(NULL, ENA_WARNING, "refilling Queue %d failed. " |
1336 "Allocated %d buffers from: %d\n", i, rc, bufs_num); 1337#ifdef DEV_NETMAP 1338 rx_ring->initialized = true; 1339#endif /* DEV_NETMAP */ 1340 } 1341} 1342 1343static void --- 24 unchanged lines hidden (view full) --- 1368 continue; 1369 1370 if (print_once) { 1371 device_printf(adapter->pdev, 1372 "free uncompleted tx mbuf qid %d idx 0x%x\n", 1373 qid, i); 1374 print_once = false; 1375 } else { | 1336 "Allocated %d buffers from: %d\n", i, rc, bufs_num); 1337#ifdef DEV_NETMAP 1338 rx_ring->initialized = true; 1339#endif /* DEV_NETMAP */ 1340 } 1341} 1342 1343static void --- 24 unchanged lines hidden (view full) --- 1368 continue; 1369 1370 if (print_once) { 1371 device_printf(adapter->pdev, 1372 "free uncompleted tx mbuf qid %d idx 0x%x\n", 1373 qid, i); 1374 print_once = false; 1375 } else { |
1376 ena_trace(ENA_DBG, | 1376 ena_trace(NULL, ENA_DBG, |
1377 "free uncompleted tx mbuf qid %d idx 0x%x\n", 1378 qid, i); 1379 } 1380 1381 bus_dmamap_sync(adapter->tx_buf_tag, tx_info->dmamap, 1382 BUS_DMASYNC_POSTWRITE); 1383 bus_dmamap_unload(adapter->tx_buf_tag, tx_info->dmamap); 1384 --- 199 unchanged lines hidden (view full) --- 1584 } 1585 1586 /* Reserved the max msix vectors we might need */ 1587 msix_vecs = ENA_MAX_MSIX_VEC(adapter->max_num_io_queues); 1588 1589 adapter->msix_entries = malloc(msix_vecs * sizeof(struct msix_entry), 1590 M_DEVBUF, M_WAITOK | M_ZERO); 1591 | 1377 "free uncompleted tx mbuf qid %d idx 0x%x\n", 1378 qid, i); 1379 } 1380 1381 bus_dmamap_sync(adapter->tx_buf_tag, tx_info->dmamap, 1382 BUS_DMASYNC_POSTWRITE); 1383 bus_dmamap_unload(adapter->tx_buf_tag, tx_info->dmamap); 1384 --- 199 unchanged lines hidden (view full) --- 1584 } 1585 1586 /* Reserved the max msix vectors we might need */ 1587 msix_vecs = ENA_MAX_MSIX_VEC(adapter->max_num_io_queues); 1588 1589 adapter->msix_entries = malloc(msix_vecs * sizeof(struct msix_entry), 1590 M_DEVBUF, M_WAITOK | M_ZERO); 1591 |
1592 ena_trace(ENA_DBG, "trying to enable MSI-X, vectors: %d\n", msix_vecs); | 1592 ena_trace(NULL, ENA_DBG, "trying to enable MSI-X, vectors: %d\n", msix_vecs); |
1593 1594 for (i = 0; i < msix_vecs; i++) { 1595 adapter->msix_entries[i].entry = i; 1596 /* Vectors must start from 1 */ 1597 adapter->msix_entries[i].vector = i + 1; 1598 } 1599 1600 msix_req = msix_vecs; --- 61 unchanged lines hidden (view full) --- 1662 irq_idx = ENA_IO_IRQ_IDX(i); 1663 1664 snprintf(adapter->irq_tbl[irq_idx].name, ENA_IRQNAME_SIZE, 1665 "%s-TxRx-%d", device_get_nameunit(adapter->pdev), i); 1666 adapter->irq_tbl[irq_idx].handler = ena_handle_msix; 1667 adapter->irq_tbl[irq_idx].data = &adapter->que[i]; 1668 adapter->irq_tbl[irq_idx].vector = 1669 adapter->msix_entries[irq_idx].vector; | 1593 1594 for (i = 0; i < msix_vecs; i++) { 1595 adapter->msix_entries[i].entry = i; 1596 /* Vectors must start from 1 */ 1597 adapter->msix_entries[i].vector = i + 1; 1598 } 1599 1600 msix_req = msix_vecs; --- 61 unchanged lines hidden (view full) --- 1662 irq_idx = ENA_IO_IRQ_IDX(i); 1663 1664 snprintf(adapter->irq_tbl[irq_idx].name, ENA_IRQNAME_SIZE, 1665 "%s-TxRx-%d", device_get_nameunit(adapter->pdev), i); 1666 adapter->irq_tbl[irq_idx].handler = ena_handle_msix; 1667 adapter->irq_tbl[irq_idx].data = &adapter->que[i]; 1668 adapter->irq_tbl[irq_idx].vector = 1669 adapter->msix_entries[irq_idx].vector; |
1670 ena_trace(ENA_INFO | ENA_IOQ, "ena_setup_io_intr vector: %d\n", | 1670 ena_trace(NULL, ENA_INFO | ENA_IOQ, "ena_setup_io_intr vector: %d\n", |
1671 adapter->msix_entries[irq_idx].vector); 1672 1673 /* 1674 * We want to bind rings to the corresponding cpu 1675 * using something similar to the RSS round-robin technique. 1676 */ 1677 if (unlikely(last_bind_cpu < 0)) 1678 last_bind_cpu = CPU_FIRST(); --- 33 unchanged lines hidden (view full) --- 1712 rman_get_start(irq->res), rc); 1713 goto err_res_free; 1714 } 1715 irq->requested = true; 1716 1717 return (rc); 1718 1719err_res_free: | 1671 adapter->msix_entries[irq_idx].vector); 1672 1673 /* 1674 * We want to bind rings to the corresponding cpu 1675 * using something similar to the RSS round-robin technique. 1676 */ 1677 if (unlikely(last_bind_cpu < 0)) 1678 last_bind_cpu = CPU_FIRST(); --- 33 unchanged lines hidden (view full) --- 1712 rman_get_start(irq->res), rc); 1713 goto err_res_free; 1714 } 1715 irq->requested = true; 1716 1717 return (rc); 1718 1719err_res_free: |
1720 ena_trace(ENA_INFO | ENA_ADMQ, "releasing resource for irq %d\n", | 1720 ena_trace(NULL, ENA_INFO | ENA_ADMQ, "releasing resource for irq %d\n", |
1721 irq->vector); 1722 rcc = bus_release_resource(adapter->pdev, SYS_RES_IRQ, 1723 irq->vector, irq->res); 1724 if (unlikely(rcc != 0)) 1725 device_printf(adapter->pdev, "dev has no parent while " 1726 "releasing res for irq: %d\n", irq->vector); 1727 irq->res = NULL; 1728 --- 36 unchanged lines hidden (view full) --- 1765 if (unlikely(rc != 0)) { 1766 device_printf(adapter->pdev, "failed to register " 1767 "interrupt handler for irq %ju: %d\n", 1768 rman_get_start(irq->res), rc); 1769 goto err; 1770 } 1771 irq->requested = true; 1772 | 1721 irq->vector); 1722 rcc = bus_release_resource(adapter->pdev, SYS_RES_IRQ, 1723 irq->vector, irq->res); 1724 if (unlikely(rcc != 0)) 1725 device_printf(adapter->pdev, "dev has no parent while " 1726 "releasing res for irq: %d\n", irq->vector); 1727 irq->res = NULL; 1728 --- 36 unchanged lines hidden (view full) --- 1765 if (unlikely(rc != 0)) { 1766 device_printf(adapter->pdev, "failed to register " 1767 "interrupt handler for irq %ju: %d\n", 1768 rman_get_start(irq->res), rc); 1769 goto err; 1770 } 1771 irq->requested = true; 1772 |
1773 ena_trace(ENA_INFO, "queue %d - cpu %d\n", | 1773 ena_trace(NULL, ENA_INFO, "queue %d - cpu %d\n", |
1774 i - ENA_IO_IRQ_FIRST_IDX, irq->cpu); 1775 } 1776 1777 return (rc); 1778 1779err: 1780 1781 for (; i >= ENA_IO_IRQ_FIRST_IDX; i--) { --- 30 unchanged lines hidden (view full) --- 1812static void 1813ena_free_mgmnt_irq(struct ena_adapter *adapter) 1814{ 1815 struct ena_irq *irq; 1816 int rc; 1817 1818 irq = &adapter->irq_tbl[ENA_MGMNT_IRQ_IDX]; 1819 if (irq->requested) { | 1774 i - ENA_IO_IRQ_FIRST_IDX, irq->cpu); 1775 } 1776 1777 return (rc); 1778 1779err: 1780 1781 for (; i >= ENA_IO_IRQ_FIRST_IDX; i--) { --- 30 unchanged lines hidden (view full) --- 1812static void 1813ena_free_mgmnt_irq(struct ena_adapter *adapter) 1814{ 1815 struct ena_irq *irq; 1816 int rc; 1817 1818 irq = &adapter->irq_tbl[ENA_MGMNT_IRQ_IDX]; 1819 if (irq->requested) { |
1820 ena_trace(ENA_INFO | ENA_ADMQ, "tear down irq: %d\n", | 1820 ena_trace(NULL, ENA_INFO | ENA_ADMQ, "tear down irq: %d\n", |
1821 irq->vector); 1822 rc = bus_teardown_intr(adapter->pdev, irq->res, irq->cookie); 1823 if (unlikely(rc != 0)) 1824 device_printf(adapter->pdev, "failed to tear " 1825 "down irq: %d\n", irq->vector); 1826 irq->requested = 0; 1827 } 1828 1829 if (irq->res != NULL) { | 1821 irq->vector); 1822 rc = bus_teardown_intr(adapter->pdev, irq->res, irq->cookie); 1823 if (unlikely(rc != 0)) 1824 device_printf(adapter->pdev, "failed to tear " 1825 "down irq: %d\n", irq->vector); 1826 irq->requested = 0; 1827 } 1828 1829 if (irq->res != NULL) { |
1830 ena_trace(ENA_INFO | ENA_ADMQ, "release resource irq: %d\n", | 1830 ena_trace(NULL, ENA_INFO | ENA_ADMQ, "release resource irq: %d\n", |
1831 irq->vector); 1832 rc = bus_release_resource(adapter->pdev, SYS_RES_IRQ, 1833 irq->vector, irq->res); 1834 irq->res = NULL; 1835 if (unlikely(rc != 0)) 1836 device_printf(adapter->pdev, "dev has no parent while " 1837 "releasing res for irq: %d\n", irq->vector); 1838 } 1839} 1840 1841static void 1842ena_free_io_irq(struct ena_adapter *adapter) 1843{ 1844 struct ena_irq *irq; 1845 int rc; 1846 1847 for (int i = ENA_IO_IRQ_FIRST_IDX; i < adapter->msix_vecs; i++) { 1848 irq = &adapter->irq_tbl[i]; 1849 if (irq->requested) { | 1831 irq->vector); 1832 rc = bus_release_resource(adapter->pdev, SYS_RES_IRQ, 1833 irq->vector, irq->res); 1834 irq->res = NULL; 1835 if (unlikely(rc != 0)) 1836 device_printf(adapter->pdev, "dev has no parent while " 1837 "releasing res for irq: %d\n", irq->vector); 1838 } 1839} 1840 1841static void 1842ena_free_io_irq(struct ena_adapter *adapter) 1843{ 1844 struct ena_irq *irq; 1845 int rc; 1846 1847 for (int i = ENA_IO_IRQ_FIRST_IDX; i < adapter->msix_vecs; i++) { 1848 irq = &adapter->irq_tbl[i]; 1849 if (irq->requested) { |
1850 ena_trace(ENA_INFO | ENA_IOQ, "tear down irq: %d\n", | 1850 ena_trace(NULL, ENA_INFO | ENA_IOQ, "tear down irq: %d\n", |
1851 irq->vector); 1852 rc = bus_teardown_intr(adapter->pdev, irq->res, 1853 irq->cookie); 1854 if (unlikely(rc != 0)) { 1855 device_printf(adapter->pdev, "failed to tear " 1856 "down irq: %d\n", irq->vector); 1857 } 1858 irq->requested = 0; 1859 } 1860 1861 if (irq->res != NULL) { | 1851 irq->vector); 1852 rc = bus_teardown_intr(adapter->pdev, irq->res, 1853 irq->cookie); 1854 if (unlikely(rc != 0)) { 1855 device_printf(adapter->pdev, "failed to tear " 1856 "down irq: %d\n", irq->vector); 1857 } 1858 irq->requested = 0; 1859 } 1860 1861 if (irq->res != NULL) { |
1862 ena_trace(ENA_INFO | ENA_IOQ, "release resource irq: %d\n", | 1862 ena_trace(NULL, ENA_INFO | ENA_IOQ, "release resource irq: %d\n", |
1863 irq->vector); 1864 rc = bus_release_resource(adapter->pdev, SYS_RES_IRQ, 1865 irq->vector, irq->res); 1866 irq->res = NULL; 1867 if (unlikely(rc != 0)) { 1868 device_printf(adapter->pdev, "dev has no parent" 1869 " while releasing res for irq: %d\n", 1870 irq->vector); --- 130 unchanged lines hidden (view full) --- 2001 */ 2002 set_io_rings_size(adapter, adapter->requested_tx_ring_size, 2003 adapter->requested_rx_ring_size); 2004 2005 while (1) { 2006 /* Allocate transmit descriptors */ 2007 rc = ena_setup_all_tx_resources(adapter); 2008 if (unlikely(rc != 0)) { | 1863 irq->vector); 1864 rc = bus_release_resource(adapter->pdev, SYS_RES_IRQ, 1865 irq->vector, irq->res); 1866 irq->res = NULL; 1867 if (unlikely(rc != 0)) { 1868 device_printf(adapter->pdev, "dev has no parent" 1869 " while releasing res for irq: %d\n", 1870 irq->vector); --- 130 unchanged lines hidden (view full) --- 2001 */ 2002 set_io_rings_size(adapter, adapter->requested_tx_ring_size, 2003 adapter->requested_rx_ring_size); 2004 2005 while (1) { 2006 /* Allocate transmit descriptors */ 2007 rc = ena_setup_all_tx_resources(adapter); 2008 if (unlikely(rc != 0)) { |
2009 ena_trace(ENA_ALERT, "err_setup_tx\n"); | 2009 ena_trace(NULL, ENA_ALERT, "err_setup_tx\n"); |
2010 goto err_setup_tx; 2011 } 2012 2013 /* Allocate receive descriptors */ 2014 rc = ena_setup_all_rx_resources(adapter); 2015 if (unlikely(rc != 0)) { | 2010 goto err_setup_tx; 2011 } 2012 2013 /* Allocate receive descriptors */ 2014 rc = ena_setup_all_rx_resources(adapter); 2015 if (unlikely(rc != 0)) { |
2016 ena_trace(ENA_ALERT, "err_setup_rx\n"); | 2016 ena_trace(NULL, ENA_ALERT, "err_setup_rx\n"); |
2017 goto err_setup_rx; 2018 } 2019 2020 /* Create IO queues for Rx & Tx */ 2021 rc = ena_create_io_queues(adapter); 2022 if (unlikely(rc != 0)) { | 2017 goto err_setup_rx; 2018 } 2019 2020 /* Create IO queues for Rx & Tx */ 2021 rc = ena_create_io_queues(adapter); 2022 if (unlikely(rc != 0)) { |
2023 ena_trace(ENA_ALERT, | 2023 ena_trace(NULL, ENA_ALERT, |
2024 "create IO queues failed\n"); 2025 goto err_io_que; 2026 } 2027 2028 return (0); 2029 2030err_io_que: 2031 ena_free_all_rx_resources(adapter); 2032err_setup_rx: 2033 ena_free_all_tx_resources(adapter); 2034err_setup_tx: 2035 /* 2036 * Lower the ring size if ENOMEM. Otherwise, return the 2037 * error straightaway. 2038 */ 2039 if (unlikely(rc != ENOMEM)) { | 2024 "create IO queues failed\n"); 2025 goto err_io_que; 2026 } 2027 2028 return (0); 2029 2030err_io_que: 2031 ena_free_all_rx_resources(adapter); 2032err_setup_rx: 2033 ena_free_all_tx_resources(adapter); 2034err_setup_tx: 2035 /* 2036 * Lower the ring size if ENOMEM. Otherwise, return the 2037 * error straightaway. 2038 */ 2039 if (unlikely(rc != ENOMEM)) { |
2040 ena_trace(ENA_ALERT, | 2040 ena_trace(NULL, ENA_ALERT, |
2041 "Queue creation failed with error code: %d\n", rc); 2042 return (rc); 2043 } 2044 2045 cur_tx_ring_size = adapter->tx_ring[0].ring_size; 2046 cur_rx_ring_size = adapter->rx_ring[0].ring_size; 2047 2048 device_printf(adapter->pdev, --- 38 unchanged lines hidden (view full) --- 2087 if (ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter)) 2088 return (0); 2089 2090 device_printf(adapter->pdev, "device is going UP\n"); 2091 2092 /* setup interrupts for IO queues */ 2093 rc = ena_setup_io_intr(adapter); 2094 if (unlikely(rc != 0)) { | 2041 "Queue creation failed with error code: %d\n", rc); 2042 return (rc); 2043 } 2044 2045 cur_tx_ring_size = adapter->tx_ring[0].ring_size; 2046 cur_rx_ring_size = adapter->rx_ring[0].ring_size; 2047 2048 device_printf(adapter->pdev, --- 38 unchanged lines hidden (view full) --- 2087 if (ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter)) 2088 return (0); 2089 2090 device_printf(adapter->pdev, "device is going UP\n"); 2091 2092 /* setup interrupts for IO queues */ 2093 rc = ena_setup_io_intr(adapter); 2094 if (unlikely(rc != 0)) { |
2095 ena_trace(ENA_ALERT, "error setting up IO interrupt\n"); | 2095 ena_trace(NULL, ENA_ALERT, "error setting up IO interrupt\n"); |
2096 goto error; 2097 } 2098 rc = ena_request_io_irq(adapter); 2099 if (unlikely(rc != 0)) { | 2096 goto error; 2097 } 2098 rc = ena_request_io_irq(adapter); 2099 if (unlikely(rc != 0)) { |
2100 ena_trace(ENA_ALERT, "err_req_irq\n"); | 2100 ena_trace(NULL, ENA_ALERT, "err_req_irq\n"); |
2101 goto error; 2102 } 2103 2104 device_printf(adapter->pdev, 2105 "Creating %u IO queues. Rx queue size: %d, Tx queue size: %d, " 2106 "LLQ is %s\n", 2107 adapter->num_io_queues, 2108 adapter->requested_rx_ring_size, 2109 adapter->requested_tx_ring_size, 2110 (adapter->ena_dev->tx_mem_queue_type == 2111 ENA_ADMIN_PLACEMENT_POLICY_DEV) ? "ENABLED" : "DISABLED"); 2112 2113 rc = create_queues_with_size_backoff(adapter); 2114 if (unlikely(rc != 0)) { | 2101 goto error; 2102 } 2103 2104 device_printf(adapter->pdev, 2105 "Creating %u IO queues. Rx queue size: %d, Tx queue size: %d, " 2106 "LLQ is %s\n", 2107 adapter->num_io_queues, 2108 adapter->requested_rx_ring_size, 2109 adapter->requested_tx_ring_size, 2110 (adapter->ena_dev->tx_mem_queue_type == 2111 ENA_ADMIN_PLACEMENT_POLICY_DEV) ? "ENABLED" : "DISABLED"); 2112 2113 rc = create_queues_with_size_backoff(adapter); 2114 if (unlikely(rc != 0)) { |
2115 ena_trace(ENA_ALERT, | 2115 ena_trace(NULL, ENA_ALERT, |
2116 "error creating queues with size backoff\n"); 2117 goto err_create_queues_with_backoff; 2118 } 2119 2120 if (ENA_FLAG_ISSET(ENA_FLAG_LINK_UP, adapter)) 2121 if_link_state_change(adapter->ifp, LINK_STATE_UP); 2122 2123 rc = ena_up_complete(adapter); --- 65 unchanged lines hidden (view full) --- 2189 /* Media Change is not supported by firmware */ 2190 return (0); 2191} 2192 2193static void 2194ena_media_status(if_t ifp, struct ifmediareq *ifmr) 2195{ 2196 struct ena_adapter *adapter = if_getsoftc(ifp); | 2116 "error creating queues with size backoff\n"); 2117 goto err_create_queues_with_backoff; 2118 } 2119 2120 if (ENA_FLAG_ISSET(ENA_FLAG_LINK_UP, adapter)) 2121 if_link_state_change(adapter->ifp, LINK_STATE_UP); 2122 2123 rc = ena_up_complete(adapter); --- 65 unchanged lines hidden (view full) --- 2189 /* Media Change is not supported by firmware */ 2190 return (0); 2191} 2192 2193static void 2194ena_media_status(if_t ifp, struct ifmediareq *ifmr) 2195{ 2196 struct ena_adapter *adapter = if_getsoftc(ifp); |
2197 ena_trace(ENA_DBG, "enter\n"); | 2197 ena_trace(NULL, ENA_DBG, "enter\n"); |
2198 2199 ENA_LOCK_LOCK(adapter); 2200 2201 ifmr->ifm_status = IFM_AVALID; 2202 ifmr->ifm_active = IFM_ETHER; 2203 2204 if (!ENA_FLAG_ISSET(ENA_FLAG_LINK_UP, adapter)) { 2205 ENA_LOCK_UNLOCK(adapter); | 2198 2199 ENA_LOCK_LOCK(adapter); 2200 2201 ifmr->ifm_status = IFM_AVALID; 2202 ifmr->ifm_active = IFM_ETHER; 2203 2204 if (!ENA_FLAG_ISSET(ENA_FLAG_LINK_UP, adapter)) { 2205 ENA_LOCK_UNLOCK(adapter); |
2206 ena_trace(ENA_INFO, "Link is down\n"); | 2206 ena_trace(NULL, ENA_INFO, "Link is down\n"); |
2207 return; 2208 } 2209 2210 ifmr->ifm_status |= IFM_ACTIVE; 2211 ifmr->ifm_active |= IFM_UNKNOWN | IFM_FDX; 2212 2213 ENA_LOCK_UNLOCK(adapter); 2214} --- 177 unchanged lines hidden (view full) --- 2392ena_setup_ifnet(device_t pdev, struct ena_adapter *adapter, 2393 struct ena_com_dev_get_features_ctx *feat) 2394{ 2395 if_t ifp; 2396 int caps = 0; 2397 2398 ifp = adapter->ifp = if_gethandle(IFT_ETHER); 2399 if (unlikely(ifp == NULL)) { | 2207 return; 2208 } 2209 2210 ifmr->ifm_status |= IFM_ACTIVE; 2211 ifmr->ifm_active |= IFM_UNKNOWN | IFM_FDX; 2212 2213 ENA_LOCK_UNLOCK(adapter); 2214} --- 177 unchanged lines hidden (view full) --- 2392ena_setup_ifnet(device_t pdev, struct ena_adapter *adapter, 2393 struct ena_com_dev_get_features_ctx *feat) 2394{ 2395 if_t ifp; 2396 int caps = 0; 2397 2398 ifp = adapter->ifp = if_gethandle(IFT_ETHER); 2399 if (unlikely(ifp == NULL)) { |
2400 ena_trace(ENA_ALERT, "can not allocate ifnet structure\n"); | 2400 ena_trace(NULL, ENA_ALERT, "can not allocate ifnet structure\n"); |
2401 return (ENXIO); 2402 } 2403 if_initname(ifp, device_get_name(pdev), device_get_unit(pdev)); 2404 if_setdev(ifp, pdev); 2405 if_setsoftc(ifp, adapter); 2406 2407 if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST | 2408 IFF_KNOWSEPOCH); --- 120 unchanged lines hidden (view full) --- 2529 vm_size_t len; 2530 int rc; 2531 2532 va = (vm_offset_t)rman_get_virtual(res); 2533 len = rman_get_size(res); 2534 /* Enable write combining */ 2535 rc = pmap_change_attr(va, len, VM_MEMATTR_WRITE_COMBINING); 2536 if (unlikely(rc != 0)) { | 2401 return (ENXIO); 2402 } 2403 if_initname(ifp, device_get_name(pdev), device_get_unit(pdev)); 2404 if_setdev(ifp, pdev); 2405 if_setsoftc(ifp, adapter); 2406 2407 if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST | 2408 IFF_KNOWSEPOCH); --- 120 unchanged lines hidden (view full) --- 2529 vm_size_t len; 2530 int rc; 2531 2532 va = (vm_offset_t)rman_get_virtual(res); 2533 len = rman_get_size(res); 2534 /* Enable write combining */ 2535 rc = pmap_change_attr(va, len, VM_MEMATTR_WRITE_COMBINING); 2536 if (unlikely(rc != 0)) { |
2537 ena_trace(ENA_ALERT, "pmap_change_attr failed, %d\n", rc); | 2537 ena_trace(NULL, ENA_ALERT, "pmap_change_attr failed, %d\n", rc); |
2538 return (rc); 2539 } 2540 2541 return (0); 2542#endif 2543 return (EOPNOTSUPP); 2544} 2545 --- 194 unchanged lines hidden (view full) --- 2740{ 2741 struct ena_adapter *adapter; 2742 devclass_t dc; 2743 int max; 2744 int rc; 2745 2746 dc = devclass_find("ena"); 2747 if (unlikely(dc == NULL)) { | 2538 return (rc); 2539 } 2540 2541 return (0); 2542#endif 2543 return (EOPNOTSUPP); 2544} 2545 --- 194 unchanged lines hidden (view full) --- 2740{ 2741 struct ena_adapter *adapter; 2742 devclass_t dc; 2743 int max; 2744 int rc; 2745 2746 dc = devclass_find("ena"); 2747 if (unlikely(dc == NULL)) { |
2748 ena_trace(ENA_ALERT, "No devclass ena\n"); | 2748 ena_trace(NULL, ENA_ALERT, "No devclass ena\n"); |
2749 return; 2750 } 2751 2752 max = devclass_get_maxunit(dc); 2753 while (max-- >= 0) { 2754 adapter = devclass_get_softc(dc, max); 2755 if (adapter != NULL) { 2756 rc = ena_rss_init_default(adapter); --- 14 unchanged lines hidden (view full) --- 2771{ 2772 struct ena_admin_host_info *host_info; 2773 uintptr_t rid; 2774 int rc; 2775 2776 /* Allocate only the host info */ 2777 rc = ena_com_allocate_host_info(ena_dev); 2778 if (unlikely(rc != 0)) { | 2749 return; 2750 } 2751 2752 max = devclass_get_maxunit(dc); 2753 while (max-- >= 0) { 2754 adapter = devclass_get_softc(dc, max); 2755 if (adapter != NULL) { 2756 rc = ena_rss_init_default(adapter); --- 14 unchanged lines hidden (view full) --- 2771{ 2772 struct ena_admin_host_info *host_info; 2773 uintptr_t rid; 2774 int rc; 2775 2776 /* Allocate only the host info */ 2777 rc = ena_com_allocate_host_info(ena_dev); 2778 if (unlikely(rc != 0)) { |
2779 ena_trace(ENA_ALERT, "Cannot allocate host info\n"); | 2779 ena_trace(NULL, ENA_ALERT, "Cannot allocate host info\n"); |
2780 return; 2781 } 2782 2783 host_info = ena_dev->host_attr.host_info; 2784 2785 if (pci_get_id(dev, PCI_ID_RID, &rid) == 0) 2786 host_info->bdf = rid; 2787 host_info->os_type = ENA_ADMIN_OS_FREEBSD; --- 8 unchanged lines hidden (view full) --- 2796 (DRV_MODULE_VER_MAJOR) | 2797 (DRV_MODULE_VER_MINOR << ENA_ADMIN_HOST_INFO_MINOR_SHIFT) | 2798 (DRV_MODULE_VER_SUBMINOR << ENA_ADMIN_HOST_INFO_SUB_MINOR_SHIFT); 2799 host_info->num_cpus = mp_ncpus; 2800 2801 rc = ena_com_set_host_attributes(ena_dev); 2802 if (unlikely(rc != 0)) { 2803 if (rc == EOPNOTSUPP) | 2780 return; 2781 } 2782 2783 host_info = ena_dev->host_attr.host_info; 2784 2785 if (pci_get_id(dev, PCI_ID_RID, &rid) == 0) 2786 host_info->bdf = rid; 2787 host_info->os_type = ENA_ADMIN_OS_FREEBSD; --- 8 unchanged lines hidden (view full) --- 2796 (DRV_MODULE_VER_MAJOR) | 2797 (DRV_MODULE_VER_MINOR << ENA_ADMIN_HOST_INFO_MINOR_SHIFT) | 2798 (DRV_MODULE_VER_SUBMINOR << ENA_ADMIN_HOST_INFO_SUB_MINOR_SHIFT); 2799 host_info->num_cpus = mp_ncpus; 2800 2801 rc = ena_com_set_host_attributes(ena_dev); 2802 if (unlikely(rc != 0)) { 2803 if (rc == EOPNOTSUPP) |
2804 ena_trace(ENA_WARNING, "Cannot set host attributes\n"); | 2804 ena_trace(NULL, ENA_WARNING, "Cannot set host attributes\n"); |
2805 else | 2805 else |
2806 ena_trace(ENA_ALERT, "Cannot set host attributes\n"); | 2806 ena_trace(NULL, ENA_ALERT, "Cannot set host attributes\n"); |
2807 2808 goto err; 2809 } 2810 2811 return; 2812 2813err: 2814 ena_com_delete_host_info(ena_dev); --- 237 unchanged lines hidden (view full) --- 3052 ENA_REGS_RESET_MISS_INTERRUPT); 3053 return (EIO); 3054 } 3055 3056 /* Check again if packet is still waiting */ 3057 if (unlikely(time_offset > adapter->missing_tx_timeout)) { 3058 3059 if (!tx_buf->print_once) | 2807 2808 goto err; 2809 } 2810 2811 return; 2812 2813err: 2814 ena_com_delete_host_info(ena_dev); --- 237 unchanged lines hidden (view full) --- 3052 ENA_REGS_RESET_MISS_INTERRUPT); 3053 return (EIO); 3054 } 3055 3056 /* Check again if packet is still waiting */ 3057 if (unlikely(time_offset > adapter->missing_tx_timeout)) { 3058 3059 if (!tx_buf->print_once) |
3060 ena_trace(ENA_WARNING, "Found a Tx that wasn't " | 3060 ena_trace(NULL, ENA_WARNING, "Found a Tx that wasn't " |
3061 "completed on time, qid %d, index %d.\n", 3062 tx_ring->qid, i); 3063 3064 tx_buf->print_once = true; 3065 missed_tx++; 3066 } 3067 } 3068 --- 712 unchanged lines hidden (view full) --- 3781} 3782 3783static void ena_notification(void *adapter_data, 3784 struct ena_admin_aenq_entry *aenq_e) 3785{ 3786 struct ena_adapter *adapter = (struct ena_adapter *)adapter_data; 3787 struct ena_admin_ena_hw_hints *hints; 3788 | 3061 "completed on time, qid %d, index %d.\n", 3062 tx_ring->qid, i); 3063 3064 tx_buf->print_once = true; 3065 missed_tx++; 3066 } 3067 } 3068 --- 712 unchanged lines hidden (view full) --- 3781} 3782 3783static void ena_notification(void *adapter_data, 3784 struct ena_admin_aenq_entry *aenq_e) 3785{ 3786 struct ena_adapter *adapter = (struct ena_adapter *)adapter_data; 3787 struct ena_admin_ena_hw_hints *hints; 3788 |
3789 ENA_WARN(aenq_e->aenq_common_desc.group != ENA_ADMIN_NOTIFICATION, | 3789 ENA_WARN(NULL, aenq_e->aenq_common_desc.group != ENA_ADMIN_NOTIFICATION, |
3790 "Invalid group(%x) expected %x\n", aenq_e->aenq_common_desc.group, 3791 ENA_ADMIN_NOTIFICATION); 3792 | 3790 "Invalid group(%x) expected %x\n", aenq_e->aenq_common_desc.group, 3791 ENA_ADMIN_NOTIFICATION); 3792 |
3793 switch (aenq_e->aenq_common_desc.syndrom) { | 3793 switch (aenq_e->aenq_common_desc.syndrome) { |
3794 case ENA_ADMIN_UPDATE_HINTS: 3795 hints = 3796 (struct ena_admin_ena_hw_hints *)(&aenq_e->inline_data_w4); 3797 ena_update_hints(adapter, hints); 3798 break; 3799 default: 3800 device_printf(adapter->pdev, 3801 "Invalid aenq notification link state %d\n", | 3794 case ENA_ADMIN_UPDATE_HINTS: 3795 hints = 3796 (struct ena_admin_ena_hw_hints *)(&aenq_e->inline_data_w4); 3797 ena_update_hints(adapter, hints); 3798 break; 3799 default: 3800 device_printf(adapter->pdev, 3801 "Invalid aenq notification link state %d\n", |
3802 aenq_e->aenq_common_desc.syndrom); | 3802 aenq_e->aenq_common_desc.syndrome); |
3803 } 3804} 3805 3806/** 3807 * This handler will called for unknown event group or unimplemented handlers 3808 **/ 3809static void 3810unimplemented_aenq_handler(void *adapter_data, --- 44 unchanged lines hidden --- | 3803 } 3804} 3805 3806/** 3807 * This handler will called for unknown event group or unimplemented handlers 3808 **/ 3809static void 3810unimplemented_aenq_handler(void *adapter_data, --- 44 unchanged lines hidden --- |