net: ena: Fix error handling when calculating max IO queues number
authorArthur Kiyanovski <akiyano@amazon.com>
Sun, 2 Jan 2022 07:37:28 +0000 (07:37 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sun, 2 Jan 2022 12:45:13 +0000 (12:45 +0000)
The role of ena_calc_max_io_queue_num() is to return the number
of queues supported by the device, which means the return value
should be >=0.

The function that calls ena_calc_max_io_queue_num(), checks
the return value. If it is 0, it means the device reported
it supports 0 IO queues. This case is considered an error
and is handled by the calling function accordingly.

However the current implementation of ena_calc_max_io_queue_num()
is wrong, since when it detects the device supports 0 IO queues,
it returns -EFAULT.

In such a case the calling function doesn't detect the error,
and therefore doesn't handle it.

This commit changes ena_calc_max_io_queue_num() to return 0
in case the device reported it supports 0 queues, allowing the
calling function to properly handle the error case.

Fixes: 736ce3f414cc ("net: ena: make ethtool -l show correct max number of queues")
Signed-off-by: Shay Agroskin <shayagr@amazon.com>
Signed-off-by: Arthur Kiyanovski <akiyano@amazon.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/amazon/ena/ena_netdev.c

index 52a8c60..c72f0c7 100644 (file)
@@ -4026,10 +4026,6 @@ static u32 ena_calc_max_io_queue_num(struct pci_dev *pdev,
        max_num_io_queues = min_t(u32, max_num_io_queues, io_tx_cq_num);
        /* 1 IRQ for mgmnt and 1 IRQs for each IO direction */
        max_num_io_queues = min_t(u32, max_num_io_queues, pci_msix_vec_count(pdev) - 1);
-       if (unlikely(!max_num_io_queues)) {
-               dev_err(&pdev->dev, "The device doesn't have io queues\n");
-               return -EFAULT;
-       }
 
        return max_num_io_queues;
 }