From nobody Fri Dec 10 13:53:38 2021 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id A554718E23D3 for ; Fri, 10 Dec 2021 13:53:48 +0000 (UTC) (envelope-from taku@tackymt.homeip.net) Received: from mica.tackymt.homeip.net (mica.tackymt.homeip.net [59.106.190.109]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4J9XSD1rNYz4chy; Fri, 10 Dec 2021 13:53:48 +0000 (UTC) (envelope-from taku@tackymt.homeip.net) Received: from mica.tackymt.homeip.net (localhost [127.0.0.1]) by mica.tackymt.homeip.net (Postfix) with ESMTP id 4DADA181C1D7; Fri, 10 Dec 2021 22:53:39 +0900 (JST) X-Virus-Scanned: amavisd-new at mica.tackymt.homeip.net Received: from mica.tackymt.homeip.net by mica.tackymt.homeip.net (amavisd-new, unix socket) with ESMTP id wY5G7MIzQY0k; Fri, 10 Dec 2021 22:53:38 +0900 (JST) Received: from [IPV6:240b:10:502:1f00:1a1d:eaff:feff:a4b] (graphite.tackymt.homeip.net [IPv6:240b:10:502:1f00:1a1d:eaff:feff:a4b]) by mica.tackymt.homeip.net (Postfix) with ESMTPSA; Fri, 10 Dec 2021 22:53:38 +0900 (JST) Message-ID: <58ca4b8b-d4b0-bfbc-3b1d-49f490e5ca00@tackymt.homeip.net> Date: Fri, 10 Dec 2021 22:53:38 +0900 List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:91.0) Gecko/20100101 Thunderbird/91.4.0 Subject: Re: git: 96e500a3f9f0 - main - hda: Push giant / newbus topo lock down a layer To: Warner Losh References: <202112100005.1BA05EhN060515@gitrepo.freebsd.org> Cc: dev-commits-src-main@FreeBSD.org From: Taku YAMAMOTO In-Reply-To: <202112100005.1BA05EhN060515@gitrepo.freebsd.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 4J9XSD1rNYz4chy X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[] X-Spam: Yes X-ThisMailContainsUnwantedMimeParts: N It looks like bus_topo_unlock() is called twice in hdaa_sysctl_reconfig() On 2021/12/10 9:05, Warner Losh wrote: > The branch main has been updated by imp: > > URL: https://cgit.FreeBSD.org/src/commit/?id=96e500a3f9f0e317875b5d5c2097df804106bc3f > > commit 96e500a3f9f0e317875b5d5c2097df804106bc3f > Author: Warner Losh > AuthorDate: 2021-12-09 23:52:55 +0000 > Commit: Warner Losh > CommitDate: 2021-12-10 00:04:58 +0000 > > hda: Push giant / newbus topo lock down a layer > > Rather than picking up Giant at the start of these sysctl handlers, push > acquiring Giant down a layer to protect walking the children and also > to add/delete children for the reconfigure. > > Sponsored by: Netflix > Reviewed by: mav, jhb > Differential Revision: https://reviews.freebsd.org/D33057 > --- > sys/dev/sound/pci/hda/hdaa.c | 13 +++++++++++-- > sys/dev/sound/pci/hda/hdac.c | 14 +++++++++++--- > 2 files changed, 22 insertions(+), 5 deletions(-) > > diff --git a/sys/dev/sound/pci/hda/hdaa.c b/sys/dev/sound/pci/hda/hdaa.c > index 82c309996d75..ddc22c3bc139 100644 > --- a/sys/dev/sound/pci/hda/hdaa.c > +++ b/sys/dev/sound/pci/hda/hdaa.c > @@ -6463,16 +6463,25 @@ hdaa_sysctl_reconfig(SYSCTL_HANDLER_ARGS) > HDA_BOOTHVERBOSE( > device_printf(dev, "Reconfiguration...\n"); > ); > - if ((error = device_delete_children(dev)) != 0) > + > + bus_topo_lock(); > + > + if ((error = device_delete_children(dev)) != 0) { > + bus_topo_unlock(); > return (error); > + } > hdaa_lock(devinfo); > hdaa_unconfigure(dev); > hdaa_configure(dev); > hdaa_unlock(devinfo); > bus_generic_attach(dev); > + bus_topo_unlock(); > HDA_BOOTHVERBOSE( > device_printf(dev, "Reconfiguration done\n"); > ); > + > + bus_topo_unlock(); > + > return (0); > } > > @@ -6669,7 +6678,7 @@ hdaa_attach(device_t dev) > devinfo, 0, hdaa_sysctl_gpo_config, "A", "GPO configuration"); > SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), > SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, > - "reconfig", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, > + "reconfig", CTLTYPE_INT | CTLFLAG_RW, > dev, 0, hdaa_sysctl_reconfig, "I", "Reprocess configuration"); > SYSCTL_ADD_INT(device_get_sysctl_ctx(dev), > SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, > diff --git a/sys/dev/sound/pci/hda/hdac.c b/sys/dev/sound/pci/hda/hdac.c > index 5d3f1d85a2ad..058eb63e268d 100644 > --- a/sys/dev/sound/pci/hda/hdac.c > +++ b/sys/dev/sound/pci/hda/hdac.c > @@ -1387,12 +1387,20 @@ sysctl_hdac_pindump(SYSCTL_HANDLER_ARGS) > return (0); > } > > - if ((err = device_get_children(dev, &devlist, &devcount)) != 0) > + bus_topo_lock(); > + > + if ((err = device_get_children(dev, &devlist, &devcount)) != 0) { > + bus_topo_unlock(); > return (err); > + } > + > hdac_lock(sc); > for (i = 0; i < devcount; i++) > HDAC_PINDUMP(devlist[i]); > hdac_unlock(sc); > + > + bus_topo_unlock(); > + > free(devlist, M_TEMP); > return (0); > } > @@ -1607,11 +1615,11 @@ hdac_attach2(void *arg) > > SYSCTL_ADD_PROC(device_get_sysctl_ctx(sc->dev), > SYSCTL_CHILDREN(device_get_sysctl_tree(sc->dev)), OID_AUTO, > - "pindump", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc->dev, > + "pindump", CTLTYPE_INT | CTLFLAG_RW, sc->dev, > sizeof(sc->dev), sysctl_hdac_pindump, "I", "Dump pin states/data"); > SYSCTL_ADD_PROC(device_get_sysctl_ctx(sc->dev), > SYSCTL_CHILDREN(device_get_sysctl_tree(sc->dev)), OID_AUTO, > - "polling", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc->dev, > + "polling", CTLTYPE_INT | CTLFLAG_RW, sc->dev, > sizeof(sc->dev), sysctl_hdac_polling, "I", "Enable polling mode"); > } > > -- -|-__ YAMAMOTO, Taku | __ <