From nobody Fri May 20 16:55:17 2022 X-Original-To: dev-commits-src-all@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 4143A1AED64F; Fri, 20 May 2022 16:55:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (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-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4L4XsL167Mz4bJs; Fri, 20 May 2022 16:55:18 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1653065718; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=510UpPZzjdWfswzXra4bqJp+pT+FEHDwfG49FxhiQao=; b=UT+bFVrRXLtTKwFX5y03PRDhS7U0MmaeMhK+7JW872EkPG2C/vPouOrFNDXHG0dAq/fV2x oYugrzok/dkrGiDniI/m30ac6C7sopifgCC8axRkmALVRcJI+Gm23/x6n1NuYb4ydVWyAi 2Zfkn7mAu7aAyoDg9S1ECfR3ma7nlj9HYdu7T0xJGd5y6gFH5MIzyMr8yvXZswKP/lJWSm 5ZqGKuAIqqPb2tkWQNM7ZsFzrY2UaJ4E5b/HhYslrJw9JUhhwiVJltc5zs+yJ7P6/Gzgen PKxVOZLjZ0fnSWbzjGf0I3F2vr4RmEZKUTVfp/FXSHAo9ORv+E84xbdZW1/4vw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 062A1160B2; Fri, 20 May 2022 16:55:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 24KGtHEx017202; Fri, 20 May 2022 16:55:17 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 24KGtH1g017201; Fri, 20 May 2022 16:55:17 GMT (envelope-from git) Date: Fri, 20 May 2022 16:55:17 GMT Message-Id: <202205201655.24KGtH1g017201@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: John Baldwin Subject: git: 7a0c23da4eaa - main - vmm: Destroy character devices synchronously. List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhb X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 7a0c23da4eaa63f00e53aa18f3ab1f2bb32f593a Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1653065718; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=510UpPZzjdWfswzXra4bqJp+pT+FEHDwfG49FxhiQao=; b=Ma4SrT4Gr0c1x6pY2tLiN92Mef6CFZb7s70UrZLXGM06AMUEcENqv5SiHEV60qd1uMU6JB Nu2msR//xC6yCrbnwV3spLSso3tdZ4y2cTjq193bGE0dx9Sfyw+2b9o/3ZK/yTXC+oC8zb lJdLvuJ9o4/epGzUtLL1KYY2squkIReGmgn5Va89Wz2cAGWGdqtQcSSPl2GLffgdkIyqHv r2VLsbVQK96o+/MxOnN/4zS6H4P8uqiCFK+epch+hLQy+s9+ryznPmyYs82IhUJkenO8Gt fMGlG2sR6MVJiA8Rp0oktzZiW8xU/tK0mJmzRH/tPwkEcsCw24TfLQlaJ8RKCQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1653065718; a=rsa-sha256; cv=none; b=Qe8VhAUMkU5Y4fM1rOctpOpBdaEELcR8atcBU0p8uyDYxWUFCFfhfrbGqZdpjCTHnNh2Pu NjDrKwraC23XafGIvY3TIy+jRluVk2yw51xsyjPD95CSO1gVNoeZa01eOm08n7m8Cx64V3 wv2zQDb20rsat9bIkV9pVKqlk4DhXMs66Mxa5CGMB+h7dryXLFeZTOHs35ZukTlnmfvFe7 TP8EB+jtLspZIjPjOvmE/Yt2IgcVGI7A1mtKJwWqGnILx9lX6/BsV2QPKVh2oeD0hVDNY+ gvk6XIKMiKHd28R4nnGv+LV3pdLlwaD5sZeFqUZGnKuQ0CMsg6xf+nGc9f4LYw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=7a0c23da4eaa63f00e53aa18f3ab1f2bb32f593a commit 7a0c23da4eaa63f00e53aa18f3ab1f2bb32f593a Author: John Baldwin AuthorDate: 2022-05-20 16:53:43 +0000 Commit: John Baldwin CommitDate: 2022-05-20 16:53:43 +0000 vmm: Destroy character devices synchronously. This fixes a userland race where bhyveload or bhyve can fail to reuse a VM name after bhyvectl --destroy has returned. Reported by: Michael Dexter Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D35186 --- sys/amd64/vmm/vmm_dev.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/sys/amd64/vmm/vmm_dev.c b/sys/amd64/vmm/vmm_dev.c index f5973ef5b6a7..db8563c91830 100644 --- a/sys/amd64/vmm/vmm_dev.c +++ b/sys/amd64/vmm/vmm_dev.c @@ -1052,10 +1052,7 @@ sysctl_vmm_destroy(SYSCTL_HANDLER_ARGS) } /* - * The 'cdev' will be destroyed asynchronously when 'si_threadcount' - * goes down to 0 so we should not do it again in the callback. - * - * Setting 'sc->cdev' to NULL is also used to indicate that the VM + * Setting 'sc->cdev' to NULL is used to indicate that the VM * is scheduled for destruction. */ cdev = sc->cdev; @@ -1063,21 +1060,19 @@ sysctl_vmm_destroy(SYSCTL_HANDLER_ARGS) mtx_unlock(&vmmdev_mtx); /* - * Schedule all cdevs to be destroyed: + * Destroy all cdevs: * * - any new operations on the 'cdev' will return an error (ENXIO). * - * - when the 'si_threadcount' dwindles down to zero the 'cdev' will - * be destroyed and the callback will be invoked in a taskqueue - * context. - * * - the 'devmem' cdevs are destroyed before the virtual machine 'cdev' */ SLIST_FOREACH(dsc, &sc->devmem, link) { KASSERT(dsc->cdev != NULL, ("devmem cdev already destroyed")); - destroy_dev_sched_cb(dsc->cdev, devmem_destroy, dsc); + destroy_dev(dsc->cdev); + devmem_destroy(dsc); } - destroy_dev_sched_cb(cdev, vmmdev_destroy, sc); + destroy_dev(cdev); + vmmdev_destroy(sc); error = 0; out: