qede: fix interrupt coalescing configuration
authorManish Chopra <manishc@marvell.com>
Thu, 16 Feb 2023 11:54:47 +0000 (03:54 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 20 Feb 2023 08:25:25 +0000 (08:25 +0000)
On default driver load device gets configured with unexpected
higher interrupt coalescing values instead of default expected
values as memory allocated from krealloc() is not supposed to
be zeroed out and may contain garbage values.

Fix this by allocating the memory of required size first with
kcalloc() and then use krealloc() to resize and preserve the
contents across down/up of the interface.

Signed-off-by: Manish Chopra <manishc@marvell.com>
Fixes: b0ec5489c480 ("qede: preserve per queue stats across up/down of interface")
Cc: stable@vger.kernel.org
Cc: Bhaskar Upadhaya <bupadhaya@marvell.com>
Cc: David S. Miller <davem@davemloft.net>
Link: https://bugzilla.redhat.com/show_bug.cgi?id=2160054
Signed-off-by: Alok Prasad <palok@marvell.com>
Signed-off-by: Ariel Elior <aelior@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qlogic/qede/qede_main.c

index 953f304b8588c58c35eda919b385621ee2951ba1..af39513db1ba30ad715c60ce12f62b4c32df4926 100644 (file)
@@ -970,8 +970,15 @@ static int qede_alloc_fp_array(struct qede_dev *edev)
                goto err;
        }
 
-       mem = krealloc(edev->coal_entry, QEDE_QUEUE_CNT(edev) *
-                      sizeof(*edev->coal_entry), GFP_KERNEL);
+       if (!edev->coal_entry) {
+               mem = kcalloc(QEDE_MAX_RSS_CNT(edev),
+                             sizeof(*edev->coal_entry), GFP_KERNEL);
+       } else {
+               mem = krealloc(edev->coal_entry,
+                              QEDE_QUEUE_CNT(edev) * sizeof(*edev->coal_entry),
+                              GFP_KERNEL);
+       }
+
        if (!mem) {
                DP_ERR(edev, "coalesce entry allocation failed\n");
                kfree(edev->coal_entry);