55 lines
2.1 KiB
Diff
55 lines
2.1 KiB
Diff
From: Sameeh Jubran <sameehj@amazon.com>
|
|
Date: Mon, 3 Jun 2019 17:43:26 +0300
|
|
Subject: [PATCH] net: ena: add support for changing max_header_size in LLQ
|
|
mode
|
|
Origin: https://git.kernel.org/linus/cdf449eccc5946d5dd4145b38347874a7423c50d
|
|
Bug-Debian: https://bugs.debian.org/941291
|
|
|
|
Up until now the driver always used a single setting for the sizes
|
|
of the different parts of the llq entry - 128 for entry size, 2 for
|
|
descriptors before header and 96 for maximum header size.
|
|
|
|
The current code makes sure that the parts of the llq entry are
|
|
compatible with each other and with the initial llq entry size given
|
|
by the device.
|
|
|
|
This commit changes this code to support any llq entry size
|
|
|
|
Signed-off-by: Arthur Kiyanovski <akiyano@amazon.com>
|
|
Signed-off-by: Sameeh Jubran <sameehj@amazon.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
drivers/net/ethernet/amazon/ena/ena_com.c | 10 ++++------
|
|
1 file changed, 4 insertions(+), 6 deletions(-)
|
|
|
|
Index: linux/drivers/net/ethernet/amazon/ena/ena_com.c
|
|
===================================================================
|
|
--- linux.orig/drivers/net/ethernet/amazon/ena/ena_com.c
|
|
+++ linux/drivers/net/ethernet/amazon/ena/ena_com.c
|
|
@@ -2936,8 +2936,8 @@ int ena_com_config_dev_mode(struct ena_c
|
|
struct ena_admin_feature_llq_desc *llq_features,
|
|
struct ena_llq_configurations *llq_default_cfg)
|
|
{
|
|
+ struct ena_com_llq_info *llq_info = &ena_dev->llq_info;
|
|
int rc;
|
|
- int size;
|
|
|
|
if (!llq_features->max_llq_num) {
|
|
ena_dev->tx_mem_queue_type = ENA_ADMIN_PLACEMENT_POLICY_HOST;
|
|
@@ -2948,12 +2948,10 @@ int ena_com_config_dev_mode(struct ena_c
|
|
if (rc)
|
|
return rc;
|
|
|
|
- /* Validate the descriptor is not too big */
|
|
- size = ena_dev->tx_max_header_size;
|
|
- size += ena_dev->llq_info.descs_num_before_header *
|
|
- sizeof(struct ena_eth_io_tx_desc);
|
|
+ ena_dev->tx_max_header_size = llq_info->desc_list_entry_size -
|
|
+ (llq_info->descs_num_before_header * sizeof(struct ena_eth_io_tx_desc));
|
|
|
|
- if (unlikely(ena_dev->llq_info.desc_list_entry_size < size)) {
|
|
+ if (unlikely(ena_dev->tx_max_header_size == 0)) {
|
|
pr_err("the size of the LLQ entry is smaller than needed\n");
|
|
return -EINVAL;
|
|
}
|