diff mbox

[net] bnx2x: limit fw delay in kdump to 5s after boot

Message ID 1431023830-445-1-git-send-email-mschmidt@redhat.com
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Michal Schmidt May 7, 2015, 6:37 p.m. UTC
Commit 12a8541d5c82 "bnx2x: Delay during kdump load" added a 5 seconds
delay to bnx2x's probe function in the kdump case to let the firmware
realize the old driver is gone.

The problem with the delay is that it is per-device, so if you have
several bnx2x NICs in NPAR mode, the delays can accumulate to minutes.

Fix it by adjusting the delay so that we do not wait more than
necessary, i.e. no more delaying after 5 seconds of kernel boot time.

Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
---
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

Comments

Yuval Mintz May 7, 2015, 7:03 p.m. UTC | #1
> +       if (is_kdump_kernel()) {
> +               ktime_t now = ktime_get_boottime();
> +               ktime_t fw_ready_time = ktime_set(5, 0);
> +
> +               if (ktime_before(now, fw_ready_time))
> +                       msleep(ktime_ms_delta(fw_ready_time, now));

Can't really say I'm familiar with these APIs , but what about the lower
msleep limit (is 20 or 50 milliseconds today?)?
Shouldn't there be an msleep variant that's good for such cases?
[Or is it a non-issue, since at most msleep will be inaccurate]

Regardless, the patch itself looks good.

> +       }--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Michal Schmidt May 7, 2015, 9:19 p.m. UTC | #2
Dne 7.5.2015 v 21:03 Yuval Mintz napsal(a):
>> +       if (is_kdump_kernel()) {
>> +               ktime_t now = ktime_get_boottime();
>> +               ktime_t fw_ready_time = ktime_set(5, 0);
>> +
>> +               if (ktime_before(now, fw_ready_time))
>> +                       msleep(ktime_ms_delta(fw_ready_time, now));
>
> Can't really say I'm familiar with these APIs , but what about the lower
> msleep limit (is 20 or 50 milliseconds today?)?
> Shouldn't there be an msleep variant that's good for such cases?
> [Or is it a non-issue, since at most msleep will be inaccurate]

msleep(<small_number>) may sleep for a couple of jiffies more than one 
would expect. I think that's what you mean by "the lower msleep limit". 
It does not matter. It's not like we have to hit the 5 seconds mark exactly.

> Regardless, the patch itself looks good.

Thanks,
Michal

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller May 10, 2015, 11:23 p.m. UTC | #3
From: Michal Schmidt <mschmidt@redhat.com>
Date: Thu,  7 May 2015 20:37:10 +0200

> Commit 12a8541d5c82 "bnx2x: Delay during kdump load" added a 5 seconds
> delay to bnx2x's probe function in the kdump case to let the firmware
> realize the old driver is gone.
> 
> The problem with the delay is that it is per-device, so if you have
> several bnx2x NICs in NPAR mode, the delays can accumulate to minutes.
> 
> Fix it by adjusting the delay so that we do not wait more than
> necessary, i.e. no more delaying after 5 seconds of kernel boot time.
> 
> Signed-off-by: Michal Schmidt <mschmidt@redhat.com>

Applied, thanks.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index 556dcc1..fd52ce9 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -13371,8 +13371,13 @@  static int bnx2x_init_one(struct pci_dev *pdev,
 	/* Management FW 'remembers' living interfaces. Allow it some time
 	 * to forget previously living interfaces, allowing a proper re-load.
 	 */
-	if (is_kdump_kernel())
-		msleep(5000);
+	if (is_kdump_kernel()) {
+		ktime_t now = ktime_get_boottime();
+		ktime_t fw_ready_time = ktime_set(5, 0);
+
+		if (ktime_before(now, fw_ready_time))
+			msleep(ktime_ms_delta(fw_ready_time, now));
+	}
 
 	/* An estimated maximum supported CoS number according to the chip
 	 * version.