From nobody Tue Feb 04 13:52:03 2025 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 4YnPtW44LFz5mr7l; Tue, 04 Feb 2025 13:52:03 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4YnPtW3JpJz3xCM; Tue, 04 Feb 2025 13:52:03 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1738677123; 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=xpbQgzpj4yBHSK+YQe0iT3cTT374A+/sIbLCHt0A5yM=; b=rSbW7tJYoSQXQw1nkKzZSFp/ClaQawcd6sGQZW3lMpd1a/x3FzsDY1CV71FqSuT1stpf0m VO2ufpt1ynAElY4PrwpMFEIZcxPS3132OvE21HHGMGtVdjEN0ppVZC7k9Cq2d9lH4CJf85 +QYDmic3QwBBtnNJjxdHpl7YBkZ2gchnxjMkSl5aMxkCDnuqtm8dvVSA0J8Mu4Nfntfl8j 7yOkylNZRb22VCLx82fyKxFKHjLhu/kpD0A8Tiljz7dvC2f5iL8OYwocZ9iKFvpD7ZOASD yAWIpYC/ZroU08MB6ivTgGyNTMHXWf2GFnHKsRqaKfFUq/+GlqAPk1TBH/YfPQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1738677123; 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=xpbQgzpj4yBHSK+YQe0iT3cTT374A+/sIbLCHt0A5yM=; b=b0Q0U0OSCrnkiQzTAjtipQgWei5ObOWWXUeMB+x+Xc83F9nECgyI8IMqvG2aJVNNn3M3b/ mXnyhrP88QXM3i0I9Ckkt35CZCMW2DmuXtUq35bETyQ1sPFxP/IV9jCcTxBkf08KB60MXp jGYlONQJatkgezFuffEV1l8GUWB5RikWFrKK6cFnPF9+ULl4CxQloCvRVTN5k9EjPW7/Yx T52QoS2r2YZe7jLVx5/1NpdBuJqAeFToLH9ThGxho7ppN0yqX/D+JAmXD94foyK+Gt6whQ i3lk1nIVX+sSccN3Lf1VV0SbuoX6yTyxWEAQ0cDvayJW2uEGxOB4AN0DaccP0g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1738677123; a=rsa-sha256; cv=none; b=gD60H9kJLTZReeZG7FQJUEMlk3mG5Kl7tdWEIKRIOJTTXCkwDyRPdANP/39FzuVt8mm87D TShqnoWBMiKgw//3fYIe5yto4qGZAgOjpTiY4sk4ZeRBKMgrLZyGPqBa62BkAjm3JhPLKc ASupyVdHFh/zim7i/jFJkz3B6OGi3xHP61Gd8Y0QJbh+N/Zr/HiJGlFxb9u9xKZswX4XNU UB0FzhBpyMvLcyRQGiHnOtYDrtQaNfUSmiLnsZg9o3gtfvUYoul2xgnnIbz+F8f9YKONb6 E0Ge9FFtz7nSYChDxrhk8XLGWr2QqtfRIIu+0z+mU7IwfnCz77vEBnOaQoxF2w== ARC-Authentication-Results: i=1; mx1.freebsd.org; none 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 4YnPtW2JyBz1N9n; Tue, 04 Feb 2025 13:52:03 +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 514Dq3gp007034; Tue, 4 Feb 2025 13:52:03 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 514Dq3tT007031; Tue, 4 Feb 2025 13:52:03 GMT (envelope-from git) Date: Tue, 4 Feb 2025 13:52:03 GMT Message-Id: <202502041352.514Dq3tT007031@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Wei Hu Subject: git: da1deb784d9a - main - Hyper-V: hn: rewrite hn rsc swtich to avoid sysctl hang 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: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@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/main X-Git-Reftype: branch X-Git-Commit: da1deb784d9ad3a4015a3f91fa1a5ce394fd3fdb Auto-Submitted: auto-generated The branch main has been updated by whu: URL: https://cgit.FreeBSD.org/src/commit/?id=da1deb784d9ad3a4015a3f91fa1a5ce394fd3fdb commit da1deb784d9ad3a4015a3f91fa1a5ce394fd3fdb Author: Wei Hu AuthorDate: 2025-02-04 13:39:14 +0000 Commit: Wei Hu CommitDate: 2025-02-04 13:39:14 +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 --- 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 212b6bc0ff57..ab7671025107 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