ena.c (e2735b095b7e31a6e07b8639ed151456a610bc07) | ena.c (56d41ad5fe9c2fcbc2363bf3ca7e69684a26b4bd) |
---|---|
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 --- 1225 unchanged lines hidden (view full) --- 1234 } 1235 1236 ENA_LOCK_UNLOCK(adapter); 1237 1238 return (rc); 1239} 1240 1241static void | 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 --- 1225 unchanged lines hidden (view full) --- 1234 } 1235 1236 ENA_LOCK_UNLOCK(adapter); 1237 1238 return (rc); 1239} 1240 1241static void |
1242ena_update_io_rings(struct ena_adapter *adapter, uint32_t num) 1243{ 1244 ena_free_all_io_rings_resources(adapter); 1245 /* Force indirection table to be reinitialized */ 1246 ena_com_rss_destroy(adapter->ena_dev); 1247 1248 adapter->num_io_queues = num; 1249 ena_init_io_rings(adapter); 1250} 1251 1252/* Caller should sanitize new_num */ 1253int 1254ena_update_io_queue_nb(struct ena_adapter *adapter, uint32_t new_num) 1255{ 1256 uint32_t old_num; 1257 int rc = 0; 1258 bool dev_was_up; 1259 1260 ENA_LOCK_LOCK(adapter); 1261 1262 dev_was_up = ENA_FLAG_ISSET(ENA_FLAG_DEV_UP, adapter); 1263 old_num = adapter->num_io_queues; 1264 ena_down(adapter); 1265 1266 ena_update_io_rings(adapter, new_num); 1267 1268 if (dev_was_up) { 1269 rc = ena_up(adapter); 1270 if (unlikely(rc != 0)) { 1271 device_printf(adapter->pdev, 1272 "Failed to configure device with %u IO queues. " 1273 "Reverting to previous value: %u\n", 1274 new_num, old_num); 1275 1276 ena_update_io_rings(adapter, old_num); 1277 1278 rc = ena_up(adapter); 1279 if (unlikely(rc != 0)) { 1280 device_printf(adapter->pdev, 1281 "Failed to revert to previous setup IO " 1282 "queues. Triggering device reset.\n"); 1283 ENA_FLAG_SET_ATOMIC( 1284 ENA_FLAG_DEV_UP_BEFORE_RESET, adapter); 1285 ena_trigger_reset(adapter, 1286 ENA_REGS_RESET_OS_TRIGGER); 1287 } 1288 } 1289 } 1290 1291 ENA_LOCK_UNLOCK(adapter); 1292 1293 return (rc); 1294} 1295 1296static void |
|
1242ena_free_rx_bufs(struct ena_adapter *adapter, unsigned int qid) 1243{ 1244 struct ena_ring *rx_ring = &adapter->rx_ring[qid]; 1245 unsigned int i; 1246 1247 for (i = 0; i < rx_ring->ring_size; i++) { 1248 struct ena_rx_buffer *rx_info = &rx_ring->rx_buffer_info[i]; 1249 --- 610 unchanged lines hidden (view full) --- 1860 1861/* Configure the Rx forwarding */ 1862static int 1863ena_rss_configure(struct ena_adapter *adapter) 1864{ 1865 struct ena_com_dev *ena_dev = adapter->ena_dev; 1866 int rc; 1867 | 1297ena_free_rx_bufs(struct ena_adapter *adapter, unsigned int qid) 1298{ 1299 struct ena_ring *rx_ring = &adapter->rx_ring[qid]; 1300 unsigned int i; 1301 1302 for (i = 0; i < rx_ring->ring_size; i++) { 1303 struct ena_rx_buffer *rx_info = &rx_ring->rx_buffer_info[i]; 1304 --- 610 unchanged lines hidden (view full) --- 1915 1916/* Configure the Rx forwarding */ 1917static int 1918ena_rss_configure(struct ena_adapter *adapter) 1919{ 1920 struct ena_com_dev *ena_dev = adapter->ena_dev; 1921 int rc; 1922 |
1923 /* In case the RSS table was destroyed */ 1924 if (!ena_dev->rss.tbl_log_size) { 1925 rc = ena_rss_init_default(adapter); 1926 if (unlikely((rc != 0) && (rc != EOPNOTSUPP))) { 1927 device_printf(adapter->pdev, 1928 "WARNING: RSS was not properly re-initialized," 1929 " it will affect bandwidth\n"); 1930 ENA_FLAG_CLEAR_ATOMIC(ENA_FLAG_RSS_ACTIVE, adapter); 1931 return (rc); 1932 } 1933 } 1934 |
|
1868 /* Set indirect table */ 1869 rc = ena_com_indirect_table_set(ena_dev); 1870 if (unlikely((rc != 0) && (rc != EOPNOTSUPP))) 1871 return (rc); 1872 1873 /* Configure hash function (if supported) */ 1874 rc = ena_com_set_hash_function(ena_dev); 1875 if (unlikely((rc != 0) && (rc != EOPNOTSUPP))) --- 9 unchanged lines hidden (view full) --- 1885 1886static int 1887ena_up_complete(struct ena_adapter *adapter) 1888{ 1889 int rc; 1890 1891 if (likely(ENA_FLAG_ISSET(ENA_FLAG_RSS_ACTIVE, adapter))) { 1892 rc = ena_rss_configure(adapter); | 1935 /* Set indirect table */ 1936 rc = ena_com_indirect_table_set(ena_dev); 1937 if (unlikely((rc != 0) && (rc != EOPNOTSUPP))) 1938 return (rc); 1939 1940 /* Configure hash function (if supported) */ 1941 rc = ena_com_set_hash_function(ena_dev); 1942 if (unlikely((rc != 0) && (rc != EOPNOTSUPP))) --- 9 unchanged lines hidden (view full) --- 1952 1953static int 1954ena_up_complete(struct ena_adapter *adapter) 1955{ 1956 int rc; 1957 1958 if (likely(ENA_FLAG_ISSET(ENA_FLAG_RSS_ACTIVE, adapter))) { 1959 rc = ena_rss_configure(adapter); |
1893 if (rc != 0) | 1960 if (rc != 0) { 1961 device_printf(adapter->pdev, 1962 "Failed to configure RSS\n"); |
1894 return (rc); | 1963 return (rc); |
1964 } |
|
1895 } 1896 1897 rc = ena_change_mtu(adapter->ifp, adapter->ifp->if_mtu); 1898 if (unlikely(rc != 0)) 1899 return (rc); 1900 1901 ena_refill_all_rx_bufs(adapter); 1902 ena_reset_counters((counter_u64_t *)&adapter->hw_stats, --- 1786 unchanged lines hidden --- | 1965 } 1966 1967 rc = ena_change_mtu(adapter->ifp, adapter->ifp->if_mtu); 1968 if (unlikely(rc != 0)) 1969 return (rc); 1970 1971 ena_refill_all_rx_bufs(adapter); 1972 ena_reset_counters((counter_u64_t *)&adapter->hw_stats, --- 1786 unchanged lines hidden --- |