From owner-freebsd-net@FreeBSD.ORG Tue Mar 18 09:59:50 2014 Return-Path: Delivered-To: net@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id BAFC8588 for ; Tue, 18 Mar 2014 09:59:50 +0000 (UTC) Received: from shelob.oktetlabs.ru (shelob.oktetlabs.ru [188.134.15.200]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 729EB6E3 for ; Tue, 18 Mar 2014 09:59:50 +0000 (UTC) Received: from [192.168.38.17] (aros.oktetlabs.ru [192.168.38.17]) (using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by shelob.oktetlabs.ru (Postfix) with ESMTPSA id 68EE07F572; Tue, 18 Mar 2014 13:59:47 +0400 (MSK) X-DKIM: Sendmail DKIM Filter v2.8.2 shelob.oktetlabs.ru 68EE07F572 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=oktetlabs.ru; s=default; t=1395136787; bh=w418HQ5g99hSGrA6pyEIUA6adONHXRjOhdmKWP97TOk=; l=1943; h=Message-ID:Date:From:MIME-Version:To:CC:Subject:Content-Type: Content-Transfer-Encoding; b=eEo4Rb5kS/XTsC5C5BgeEYQFojfp650s1sYD+WUtg3RdgC5U+CYza9hqZThZDatkF fNQSYMiWyVt1ldgHi53cY+mw/s2TOQygbAqUbpF7hN9zniAZur5dx5gw6j3il892p1 OFJjO8YUBApON3oNxZWZl+XpevyhkRisHIPPTxX0= Message-ID: <53281914.1000309@oktetlabs.ru> Date: Tue, 18 Mar 2014 13:59:48 +0400 From: Andrew Rybchenko Organization: OKTET Labs User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.3.0 MIME-Version: 1.0 To: net@FreeBSD.org Subject: [PATCH 5/6] sfxge: access statistics buffers under port lock Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.17 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 18 Mar 2014 09:59:50 -0000 sfxge: access statistics buffers under port lock Allow access to statistics data not only from sysctl handlers. Submitted-by: Boris Misenov Sponsored by: Solarflare Communications, Inc. diff -r af2586a023d8 -r 7f58b1a5ea60 src/driver/freebsd/sfxge_port.c --- a/head/sys/dev/sfxge/sfxge_port.c Mon Mar 10 11:37:12 2014 +0400 +++ b/head/sys/dev/sfxge/sfxge_port.c Mon Mar 10 11:37:12 2014 +0400 @@ -48,7 +48,7 @@ unsigned int count; int rc; - mtx_lock(&port->lock); + mtx_assert(&port->lock, MA_OWNED); if (port->init_state != SFXGE_PORT_STARTED) { rc = 0; @@ -82,7 +82,6 @@ rc = ETIMEDOUT; out: - mtx_unlock(&port->lock); return rc; } @@ -93,12 +92,16 @@ unsigned int id = arg2; int rc; + mtx_lock(&sc->port.lock); if ((rc = sfxge_mac_stat_update(sc)) != 0) - return rc; + goto out; - return SYSCTL_OUT(req, + rc = SYSCTL_OUT(req, (uint64_t *)sc->port.mac_stats.decode_buf + id, sizeof(uint64_t)); +out: + mtx_unlock(&sc->port.lock); + return rc; } static void @@ -442,7 +445,7 @@ unsigned int count; int rc; - mtx_lock(&port->lock); + mtx_assert(&port->lock, MA_OWNED); if (port->init_state != SFXGE_PORT_STARTED) { rc = 0; @@ -476,7 +479,6 @@ rc = ETIMEDOUT; out: - mtx_unlock(&port->lock); return rc; } @@ -487,12 +489,16 @@ unsigned int id = arg2; int rc; + mtx_lock(&sc->port.lock); if ((rc = sfxge_phy_stat_update(sc)) != 0) - return rc; + goto out; - return SYSCTL_OUT(req, + rc = SYSCTL_OUT(req, (uint32_t *)sc->port.phy_stats.decode_buf + id, sizeof(uint32_t)); +out: + mtx_unlock(&sc->port.lock); + return rc; } static void