From owner-svn-src-head@freebsd.org Fri Dec 30 12:10:17 2016 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 441EEC96FF2; Fri, 30 Dec 2016 12:10:17 +0000 (UTC) (envelope-from arybchik@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id EDD501F47; Fri, 30 Dec 2016 12:10:16 +0000 (UTC) (envelope-from arybchik@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id uBUCAGUi068384; Fri, 30 Dec 2016 12:10:16 GMT (envelope-from arybchik@FreeBSD.org) Received: (from arybchik@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id uBUCAGlR068383; Fri, 30 Dec 2016 12:10:16 GMT (envelope-from arybchik@FreeBSD.org) Message-Id: <201612301210.uBUCAGlR068383@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: arybchik set sender to arybchik@FreeBSD.org using -f From: Andrew Rybchenko Date: Fri, 30 Dec 2016 12:10:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r310818 - head/sys/dev/sfxge X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 30 Dec 2016 12:10:17 -0000 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 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); }