ena.c (04cf2b885d7dc385ed8e48df1d0218b5e4162869) | ena.c (8483b844e7e48dbfc61c6e38908921c4fa691d4c) |
---|---|
1/*- 2 * BSD LICENSE 3 * 4 * Copyright (c) 2015-2019 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 --- 246 unchanged lines hidden (view full) --- 255fail_tag: 256 dma->tag = NULL; 257 dma->vaddr = NULL; 258 dma->paddr = 0; 259 260 return (error); 261} 262 | 1/*- 2 * BSD LICENSE 3 * 4 * Copyright (c) 2015-2019 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 --- 246 unchanged lines hidden (view full) --- 255fail_tag: 256 dma->tag = NULL; 257 dma->vaddr = NULL; 258 dma->paddr = 0; 259 260 return (error); 261} 262 |
263/* 264 * This function should generate unique key for the whole driver. 265 * If the key was already genereated in the previous call (for example 266 * for another adapter), then it should be returned instead. 267 */ 268void 269ena_rss_key_fill(void *key, size_t size) 270{ 271 static bool key_generated; 272 static uint8_t default_key[ENA_HASH_KEY_SIZE]; 273 274 KASSERT(size <= ENA_HASH_KEY_SIZE, ("Requested more bytes than ENA RSS key can hold")); 275 276 if (!key_generated) { 277 arc4random_buf(default_key, ENA_HASH_KEY_SIZE); 278 key_generated = true; 279 } 280 281 memcpy(key, default_key, size); 282} 283 |
|
263static void 264ena_free_pci_resources(struct ena_adapter *adapter) 265{ 266 device_t pdev = adapter->pdev; 267 268 if (adapter->memory != NULL) { 269 bus_release_resource(pdev, SYS_RES_MEMORY, 270 PCIR_BAR(ENA_MEM_BAR), adapter->memory); --- 117 unchanged lines hidden (view full) --- 388 /* TX/RX common ring state */ 389 ena_init_io_rings_common(adapter, txr, i); 390 ena_init_io_rings_common(adapter, rxr, i); 391 392 /* TX specific ring state */ 393 txr->ring_size = adapter->tx_ring_size; 394 txr->tx_max_header_size = ena_dev->tx_max_header_size; 395 txr->tx_mem_queue_type = ena_dev->tx_mem_queue_type; | 284static void 285ena_free_pci_resources(struct ena_adapter *adapter) 286{ 287 device_t pdev = adapter->pdev; 288 289 if (adapter->memory != NULL) { 290 bus_release_resource(pdev, SYS_RES_MEMORY, 291 PCIR_BAR(ENA_MEM_BAR), adapter->memory); --- 117 unchanged lines hidden (view full) --- 409 /* TX/RX common ring state */ 410 ena_init_io_rings_common(adapter, txr, i); 411 ena_init_io_rings_common(adapter, rxr, i); 412 413 /* TX specific ring state */ 414 txr->ring_size = adapter->tx_ring_size; 415 txr->tx_max_header_size = ena_dev->tx_max_header_size; 416 txr->tx_mem_queue_type = ena_dev->tx_mem_queue_type; |
396 txr->smoothed_interval = 397 ena_com_get_nonadaptive_moderation_interval_tx(ena_dev); | |
398 399 /* Allocate a buf ring */ 400 txr->buf_ring_size = adapter->buf_ring_size; 401 txr->br = buf_ring_alloc(txr->buf_ring_size, M_DEVBUF, 402 M_WAITOK, &txr->ring_mtx); 403 404 /* Alloc TX statistics. */ 405 ena_alloc_counters((counter_u64_t *)&txr->tx_stats, 406 sizeof(txr->tx_stats)); 407 408 /* RX specific ring state */ 409 rxr->ring_size = adapter->rx_ring_size; | 417 418 /* Allocate a buf ring */ 419 txr->buf_ring_size = adapter->buf_ring_size; 420 txr->br = buf_ring_alloc(txr->buf_ring_size, M_DEVBUF, 421 M_WAITOK, &txr->ring_mtx); 422 423 /* Alloc TX statistics. */ 424 ena_alloc_counters((counter_u64_t *)&txr->tx_stats, 425 sizeof(txr->tx_stats)); 426 427 /* RX specific ring state */ 428 rxr->ring_size = adapter->rx_ring_size; |
410 rxr->smoothed_interval = 411 ena_com_get_nonadaptive_moderation_interval_rx(ena_dev); | |
412 413 /* Alloc RX statistics. */ 414 ena_alloc_counters((counter_u64_t *)&rxr->rx_stats, 415 sizeof(rxr->rx_stats)); 416 417 /* Initialize locks */ 418 snprintf(txr->mtx_name, nitems(txr->mtx_name), "%s:tx(%d)", 419 device_get_nameunit(adapter->pdev), i); --- 317 unchanged lines hidden (view full) --- 737 738 /* And free allocated memory. */ 739 free(tx_ring->tx_buffer_info, M_DEVBUF); 740 tx_ring->tx_buffer_info = NULL; 741 742 free(tx_ring->free_tx_ids, M_DEVBUF); 743 tx_ring->free_tx_ids = NULL; 744 | 429 430 /* Alloc RX statistics. */ 431 ena_alloc_counters((counter_u64_t *)&rxr->rx_stats, 432 sizeof(rxr->rx_stats)); 433 434 /* Initialize locks */ 435 snprintf(txr->mtx_name, nitems(txr->mtx_name), "%s:tx(%d)", 436 device_get_nameunit(adapter->pdev), i); --- 317 unchanged lines hidden (view full) --- 754 755 /* And free allocated memory. */ 756 free(tx_ring->tx_buffer_info, M_DEVBUF); 757 tx_ring->tx_buffer_info = NULL; 758 759 free(tx_ring->free_tx_ids, M_DEVBUF); 760 tx_ring->free_tx_ids = NULL; 761 |
745 ENA_MEM_FREE(adapter->ena_dev->dmadev, 746 tx_ring->push_buf_intermediate_buf); | 762 free(tx_ring->push_buf_intermediate_buf, M_DEVBUF); |
747 tx_ring->push_buf_intermediate_buf = NULL; 748} 749 750/** 751 * ena_setup_all_tx_resources - allocate all queues Tx resources 752 * @adapter: network interface device structure 753 * 754 * Returns 0 on success, otherwise on failure. --- 328 unchanged lines hidden (view full) --- 1083 1084 if (unlikely(i < num)) { 1085 counter_u64_add(rx_ring->rx_stats.refil_partial, 1); 1086 ena_trace(ENA_WARNING, 1087 "refilled rx qid %d with only %d mbufs (from %d)\n", 1088 rx_ring->qid, i, num); 1089 } 1090 | 763 tx_ring->push_buf_intermediate_buf = NULL; 764} 765 766/** 767 * ena_setup_all_tx_resources - allocate all queues Tx resources 768 * @adapter: network interface device structure 769 * 770 * Returns 0 on success, otherwise on failure. --- 328 unchanged lines hidden (view full) --- 1099 1100 if (unlikely(i < num)) { 1101 counter_u64_add(rx_ring->rx_stats.refil_partial, 1); 1102 ena_trace(ENA_WARNING, 1103 "refilled rx qid %d with only %d mbufs (from %d)\n", 1104 rx_ring->qid, i, num); 1105 } 1106 |
1091 if (likely(i != 0)) { 1092 wmb(); | 1107 if (likely(i != 0)) |
1093 ena_com_write_sq_doorbell(rx_ring->ena_com_io_sq); | 1108 ena_com_write_sq_doorbell(rx_ring->ena_com_io_sq); |
1094 } | 1109 |
1095 rx_ring->next_to_use = next_to_use; 1096 return (i); 1097} 1098 1099static void 1100ena_free_rx_bufs(struct ena_adapter *adapter, unsigned int qid) 1101{ 1102 struct ena_ring *rx_ring = &adapter->rx_ring[qid]; --- 1809 unchanged lines hidden (view full) --- 2912 return; 2913 2914 if (ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter)) 2915 return; 2916 2917 for (i = 0; i < adapter->num_queues; i++) { 2918 rx_ring = &adapter->rx_ring[i]; 2919 | 1110 rx_ring->next_to_use = next_to_use; 1111 return (i); 1112} 1113 1114static void 1115ena_free_rx_bufs(struct ena_adapter *adapter, unsigned int qid) 1116{ 1117 struct ena_ring *rx_ring = &adapter->rx_ring[qid]; --- 1809 unchanged lines hidden (view full) --- 2927 return; 2928 2929 if (ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter)) 2930 return; 2931 2932 for (i = 0; i < adapter->num_queues; i++) { 2933 rx_ring = &adapter->rx_ring[i]; 2934 |
2920 refill_required = ena_com_free_desc(rx_ring->ena_com_io_sq); | 2935 refill_required = ena_com_free_q_entries(rx_ring->ena_com_io_sq); |
2921 if (unlikely(refill_required == (rx_ring->ring_size - 1))) { 2922 rx_ring->empty_rx_queue++; 2923 2924 if (rx_ring->empty_rx_queue >= EMPTY_RX_REFILL) { 2925 counter_u64_add(rx_ring->rx_stats.empty_rx_ring, 2926 1); 2927 2928 device_printf(adapter->pdev, --- 668 unchanged lines hidden --- | 2936 if (unlikely(refill_required == (rx_ring->ring_size - 1))) { 2937 rx_ring->empty_rx_queue++; 2938 2939 if (rx_ring->empty_rx_queue >= EMPTY_RX_REFILL) { 2940 counter_u64_add(rx_ring->rx_stats.empty_rx_ring, 2941 1); 2942 2943 device_printf(adapter->pdev, --- 668 unchanged lines hidden --- |