From owner-svn-src-all@FreeBSD.ORG Mon Feb 16 15:46:17 2015 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 4B1DC205; Mon, 16 Feb 2015 15:46:17 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::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 1CBD78FF; Mon, 16 Feb 2015 15:46:17 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t1GFkGtY092984; Mon, 16 Feb 2015 15:46:16 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t1GFkGgJ092983; Mon, 16 Feb 2015 15:46:16 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <201502161546.t1GFkGgJ092983@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 16 Feb 2015 15:46:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r278852 - head/sys/dev/usb/video X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 16 Feb 2015 15:46:17 -0000 Author: hselasky Date: Mon Feb 16 15:46:16 2015 New Revision: 278852 URL: https://svnweb.freebsd.org/changeset/base/278852 Log: Avoid recursive locking. Modified: head/sys/dev/usb/video/udl.c Modified: head/sys/dev/usb/video/udl.c ============================================================================== --- head/sys/dev/usb/video/udl.c Mon Feb 16 15:39:51 2015 (r278851) +++ head/sys/dev/usb/video/udl.c Mon Feb 16 15:46:16 2015 (r278852) @@ -428,11 +428,10 @@ udl_fb_setblankmode(void *arg, int mode) } static struct udl_cmd_buf * -udl_cmd_buf_alloc(struct udl_softc *sc, int flags) +udl_cmd_buf_alloc_locked(struct udl_softc *sc, int flags) { struct udl_cmd_buf *cb; - UDL_LOCK(sc); while ((cb = TAILQ_FIRST(&sc->sc_cmd_buf_free)) == NULL) { if (flags != M_WAITOK) break; @@ -442,6 +441,16 @@ udl_cmd_buf_alloc(struct udl_softc *sc, TAILQ_REMOVE(&sc->sc_cmd_buf_free, cb, entry); cb->off = 0; } + return (cb); +} + +static struct udl_cmd_buf * +udl_cmd_buf_alloc(struct udl_softc *sc, int flags) +{ + struct udl_cmd_buf *cb; + + UDL_LOCK(sc); + cb = udl_cmd_buf_alloc_locked(sc, flags); UDL_UNLOCK(sc); return (cb); } @@ -465,7 +474,7 @@ udl_cmd_buf_send(struct udl_softc *sc, s } static struct udl_cmd_buf * -udl_fb_synchronize(struct udl_softc *sc) +udl_fb_synchronize_locked(struct udl_softc *sc) { const uint32_t max = udl_get_fb_size(sc); @@ -482,7 +491,7 @@ udl_fb_synchronize(struct udl_softc *sc) if (bcmp(sc->sc_fb_addr + sc->sc_sync_off, sc->sc_fb_copy + sc->sc_sync_off, delta) != 0) { struct udl_cmd_buf *cb; - cb = udl_cmd_buf_alloc(sc, M_NOWAIT); + cb = udl_cmd_buf_alloc_locked(sc, M_NOWAIT); if (cb == NULL) goto done; memcpy(sc->sc_fb_copy + sc->sc_sync_off, @@ -518,7 +527,7 @@ tr_setup: for (i = 0; i != UDL_CMD_MAX_FRAMES; i++) { cb = TAILQ_FIRST(&sc->sc_cmd_buf_pending); if (cb == NULL) { - cb = udl_fb_synchronize(sc); + cb = udl_fb_synchronize_locked(sc); if (cb == NULL) break; } else {