Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Jan 2017 07:33:22 +0000 (UTC)
From:      Andrew Rybchenko <arybchik@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r311497 - stable/10/sys/dev/sfxge
Message-ID:  <201701060733.v067XMxm047128@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: arybchik
Date: Fri Jan  6 07:33:22 2017
New Revision: 311497
URL: https://svnweb.freebsd.org/changeset/base/311497

Log:
  MFC r310818
  
  sfxge(4): support per-command MCDI timeout
  
  Submitted by:   Andy Moreton <amoreton at solarflare.com>
  Sponsored by:   Solarflare Communications, Inc.

Modified:
  stable/10/sys/dev/sfxge/sfxge_mcdi.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/sfxge/sfxge_mcdi.c
==============================================================================
--- stable/10/sys/dev/sfxge/sfxge_mcdi.c	Fri Jan  6 07:32:19 2017	(r311496)
+++ stable/10/sys/dev/sfxge/sfxge_mcdi.c	Fri Jan  6 07:33:22 2017	(r311497)
@@ -55,7 +55,6 @@ __FBSDID("$FreeBSD$");
 
 #define	SFXGE_MCDI_POLL_INTERVAL_MIN 10		/* 10us in 1us units */
 #define	SFXGE_MCDI_POLL_INTERVAL_MAX 100000	/* 100ms in 1us units */
-#define	SFXGE_MCDI_WATCHDOG_INTERVAL 10000000	/* 10s in 1us units */
 
 static void
 sfxge_mcdi_timeout(struct sfxge_softc *sc)
@@ -70,7 +69,7 @@ sfxge_mcdi_timeout(struct sfxge_softc *s
 }
 
 static void
-sfxge_mcdi_poll(struct sfxge_softc *sc)
+sfxge_mcdi_poll(struct sfxge_softc *sc, uint32_t timeout_us)
 {
 	efx_nic_t *enp;
 	clock_t delay_total;
@@ -87,7 +86,7 @@ sfxge_mcdi_poll(struct sfxge_softc *sc)
 			return;
 		}
 
-		if (delay_total > SFXGE_MCDI_WATCHDOG_INTERVAL) {
+		if (delay_total > timeout_us) {
 			aborted = efx_mcdi_request_abort(enp);
 			KASSERT(aborted, ("abort failed"));
 			sfxge_mcdi_timeout(sc);
@@ -115,6 +114,7 @@ sfxge_mcdi_execute(void *arg, efx_mcdi_r
 {
 	struct sfxge_softc *sc;
 	struct sfxge_mcdi *mcdi;
+	uint32_t timeout_us = 0;
 
 	sc = (struct sfxge_softc *)arg;
 	mcdi = &sc->mcdi;
@@ -125,8 +125,11 @@ sfxge_mcdi_execute(void *arg, efx_mcdi_r
 	    ("MCDI not initialized"));
 
 	/* Issue request and poll for completion. */
+	efx_mcdi_get_timeout(sc->enp, emrp, &timeout_us);
+	KASSERT(timeout_us > 0, ("MCDI timeout not initialized"));
+
 	efx_mcdi_request_start(sc->enp, emrp, B_FALSE);
-	sfxge_mcdi_poll(sc);
+	sfxge_mcdi_poll(sc, timeout_us);
 
 	SFXGE_MCDI_UNLOCK(mcdi);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201701060733.v067XMxm047128>