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);
 }
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to