From nobody Wed Mar 12 08:39:11 2025 X-Original-To: dev-commits-src-branches@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 4ZCPDv5bfDz5qc31; Wed, 12 Mar 2025 08:39:11 +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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZCPDv4vcmz3wdm; Wed, 12 Mar 2025 08:39:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1741768751; 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=yEmTfuP90IC3g3vdmJciiSvwcVdA+uR1wHHKD8yWPEI=; b=j909hJJpsRP8k3Tzh4Xxm5qPuWtO3775MMI3BWUGiaeM09y+PScF4EZQlRyzGM7+kp3/wn E7bjB7D+DtXCxcW1FJcjoGNZqKW5NPK0Nfs+PD196z3Gw4DgDV1bBbsDRR6bzrvy+j/icV a3wM6JOfPESELmPtiC/DCvA80bu08o8eB5O+B2nW3u1PKB2CHMpM2k03rvnZw1NaziHMUA 7I3pmyrxrUvoq79NewFHs5KS2mNVJftILQGPqj/FTekpNdWszVqlTxInKsJYlx4ShX8XN6 IhXiTnKJyB+ZS6F4mDYw4KhhHgWD52iJP61ji2nmnj62p4iLoslj/XNGqicdIA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1741768751; a=rsa-sha256; cv=none; b=lTSsmQbFyzgyHmIjLgqMneFZ+KxD8MiAoA9bm2QX0Icwplv4Qd8OtsCCjxdSVdC1Remutm NFVBFBtgBs6raOzhwgyYLuYhZrXiHjhWnK0SJcB7NSZ+Ys5jPww9BnhN7seAkc6M3TqWdg LcXZrqbCi6lcpvbe6iutRo6HBwi5X4MkbBN97REtOrql91RroXg/SRN86ysINQPwpW3JA4 bKOglC1uYPeN9etQfKckRpnDGCvrx/+6rxJBTGGbdlTPNSTp4yi1rA5i9BJyof/zKiZ052 52oxf0xccUdOGR69bEHkoo0iMfVC+OH4AClXK3+eHayRnGow6vb6Oxo2D5nlMA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1741768751; 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=yEmTfuP90IC3g3vdmJciiSvwcVdA+uR1wHHKD8yWPEI=; b=LpXFMphCDfsZqn9j2rDpin/gbdTTDv8B86E3FbOHPJbJJVBNkI0b9Pdv08V+qHba8kwTUP vsS2pBSdfEc0omjhV89niQo70KrtrBkdwY2M1Nc23otCfKEzyoxXT/ObCYsCzja6QQT4BW HRwT2IFoCjMCPRkqcEUWVQ7NneYVyTe5kew3JtUNelJBOed+xEL7eOXM7m32lPtLxC3WXR EuP9MtMh/t69Kolgl61miJtjBC7pjiaqOB/nD6/pejuWgg9408b0FnJUCJA1fDGB7WX0yw eUHEvZkGkLMcz3wh0rdatrUVYxJgz1prtfDjXHNfHJMJXbhyuEoik4EljRPAPQ== 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 4ZCPDv4TjJz14P4; Wed, 12 Mar 2025 08:39:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 52C8dBkG006931; Wed, 12 Mar 2025 08:39:11 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 52C8dBLH006928; Wed, 12 Mar 2025 08:39:11 GMT (envelope-from git) Date: Wed, 12 Mar 2025 08:39:11 GMT Message-Id: <202503120839.52C8dBLH006928@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Wei Hu Subject: git: ec0c098369c8 - stable/14 - Hyper-V: hn: rewrite hn rsc swtich to avoid sysctl hang List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: whu X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: ec0c098369c8fb1acbe0b0566769dd8b98d75753 Auto-Submitted: auto-generated The branch stable/14 has been updated by whu: URL: https://cgit.FreeBSD.org/src/commit/?id=ec0c098369c8fb1acbe0b0566769dd8b98d75753 commit ec0c098369c8fb1acbe0b0566769dd8b98d75753 Author: Wei Hu AuthorDate: 2025-02-04 13:39:14 +0000 Commit: Wei Hu CommitDate: 2025-03-12 08:18:01 +0000 Hyper-V: hn: rewrite hn rsc swtich to avoid sysctl hang Changing the rsc_switch flag using sysctl to turn rsc on or off could hang. The orignal code sends request to host to get the mtu setting. Sometimes the host fails to reply, causing the thread to sleep forever waiting for the host response. Use existing cached mtu from hn device instead to avoid calling host. Reported by: whu Tested by: whu MFC after: 1 week (cherry picked from commit da1deb784d9ad3a4015a3f91fa1a5ce394fd3fdb) --- sys/dev/hyperv/netvsc/if_hn.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/sys/dev/hyperv/netvsc/if_hn.c b/sys/dev/hyperv/netvsc/if_hn.c index 9f51f5b32199..db5ebdfd65bc 100644 --- a/sys/dev/hyperv/netvsc/if_hn.c +++ b/sys/dev/hyperv/netvsc/if_hn.c @@ -2355,7 +2355,7 @@ hn_attach(device_t dev) } SYSCTL_ADD_PROC(ctx, child, OID_AUTO, "rsc_switch", - CTLTYPE_UINT | CTLFLAG_RW, sc, 0, hn_rsc_sysctl, "A", + CTLTYPE_UINT | CTLFLAG_RW, sc, 0, hn_rsc_sysctl, "I", "switch to rsc"); /* @@ -4523,24 +4523,22 @@ static int hn_rsc_sysctl(SYSCTL_HANDLER_ARGS) { struct hn_softc *sc = arg1; - uint32_t mtu; + int rsc_ctrl, mtu; int error; - HN_LOCK(sc); - error = hn_rndis_get_mtu(sc, &mtu); - if (error) { - if_printf(sc->hn_ifp, "failed to get mtu\n"); - goto back; - } - error = SYSCTL_OUT(req, &(sc->hn_rsc_ctrl), sizeof(sc->hn_rsc_ctrl)); + + rsc_ctrl = sc->hn_rsc_ctrl; + error = sysctl_handle_int(oidp, &rsc_ctrl, 0, req); if (error || req->newptr == NULL) - goto back; + return (error); + + if (sc->hn_rsc_ctrl != rsc_ctrl) { + HN_LOCK(sc); + sc->hn_rsc_ctrl = rsc_ctrl; + mtu = if_getmtu(sc->hn_ifp); + error = hn_rndis_reconf_offload(sc, mtu); + HN_UNLOCK(sc); + } - error = SYSCTL_IN(req, &(sc->hn_rsc_ctrl), sizeof(sc->hn_rsc_ctrl)); - if (error) - goto back; - error = hn_rndis_reconf_offload(sc, mtu); -back: - HN_UNLOCK(sc); return (error); } #ifndef RSS