aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/ena
diff options
context:
space:
mode:
authorOsama Abboud <osamaabb@amazon.com>2024-08-07 06:24:22 +0000
committerOsama Abboud <osamaabb@FreeBSD.org>2024-10-15 17:38:32 +0000
commitd0419551d96c8f995bdf6388a8e69684be33f9b5 (patch)
tree6b3a2ff5e10a9b9131cbb3a5850b930d76411a46 /sys/dev/ena
parentb1c38df05d79c81ee1e9fd0942774820a4ffcb63 (diff)
Diffstat (limited to 'sys/dev/ena')
-rw-r--r--sys/dev/ena/ena.c36
1 files changed, 21 insertions, 15 deletions
diff --git a/sys/dev/ena/ena.c b/sys/dev/ena/ena.c
index fadba819652b..28a4d7842306 100644
--- a/sys/dev/ena/ena.c
+++ b/sys/dev/ena/ena.c
@@ -2831,28 +2831,34 @@ ena_calc_io_queue_size(struct ena_calc_queue_size_ctx *ctx, struct ena_adapter *
max_queues->max_packet_rx_descs);
}
- /* round down to the nearest power of 2 */
- max_tx_queue_size = 1 << (flsl(max_tx_queue_size) - 1);
- max_rx_queue_size = 1 << (flsl(max_rx_queue_size) - 1);
-
- /*
- * When using large headers, we multiply the entry size by 2,
- * and therefore divide the queue size by 2, leaving the amount
- * of memory used by the queues unchanged.
- */
if (adapter->llq_policy == ENA_ADMIN_LIST_ENTRY_SIZE_256B) {
- if (ena_dev->tx_mem_queue_type ==
- ENA_ADMIN_PLACEMENT_POLICY_DEV) {
- max_tx_queue_size /= 2;
- ena_log(ctx->pdev, INFO,
- "Using large headers and decreasing maximum Tx queue size to %d\n",
- max_tx_queue_size);
+ if (ena_dev->tx_mem_queue_type == ENA_ADMIN_PLACEMENT_POLICY_DEV) {
+ if (llq->max_wide_llq_depth != max_tx_queue_size) {
+ if (llq->max_wide_llq_depth == 0) {
+ /* if there is no large llq max depth from device, we divide
+ * the queue size by 2, leaving the amount of memory
+ * used by the queues unchanged.
+ */
+ max_tx_queue_size /= 2;
+ } else {
+ max_tx_queue_size = llq->max_wide_llq_depth;
+ }
+ ena_log(ctx->pdev, INFO,
+ "Using large LLQ headers and decreasing maximum Tx queue size to %d\n",
+ max_tx_queue_size);
+ } else {
+ ena_log(ctx->pdev, INFO, "Using large LLQ headers\n");
+ }
} else {
ena_log(ctx->pdev, WARN,
"Using large headers failed: LLQ is disabled or device does not support large headers\n");
}
}
+ /* round down to the nearest power of 2 */
+ max_tx_queue_size = 1 << (flsl(max_tx_queue_size) - 1);
+ max_rx_queue_size = 1 << (flsl(max_rx_queue_size) - 1);
+
tx_queue_size = clamp_val(tx_queue_size, ENA_MIN_RING_SIZE,
max_tx_queue_size);
rx_queue_size = clamp_val(rx_queue_size, ENA_MIN_RING_SIZE,