svn commit: r310818 - head/sys/dev/sfxge

Andrew Rybchenko arybchik at FreeBSD.org
Fri Dec 30 12:10:17 UTC 2016


Author: arybchik
Date: Fri Dec 30 12:10:15 2016
New Revision: 310818
URL: https://svnweb.freebsd.org/changeset/base/310818

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

Modified:
  head/sys/dev/sfxge/sfxge_mcdi.c

Modified: head/sys/dev/sfxge/sfxge_mcdi.c
==============================================================================
--- head/sys/dev/sfxge/sfxge_mcdi.c	Fri Dec 30 12:06:55 2016	(r310817)
+++ head/sys/dev/sfxge/sfxge_mcdi.c	Fri Dec 30 12:10:15 2016	(r310818)
@@ -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);
 }


More information about the svn-src-head mailing list