From nobody Sun Aug 17 21:02:26 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 4c4pFZ4K6Nz642wm; Sun, 17 Aug 2025 21:02:26 +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 4c4pFZ3HMbz3V59; Sun, 17 Aug 2025 21:02:26 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1755464546; 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=cPpUlDApAitUTyuXWX0J6C+LcsRYlyw4fmJ519zBn4k=; b=W6SE1oXyvOA8xeq9MbVMTJzPfkzDrEi6IRRWE90dZl3iLKg7Py9USKS2tv1oY2uOf314DN ej648fpt7iQYrSDbjj57ApXr7Pak895E9AVq8sc5llI5RiRmM5HL6aP7XyCPcDSeLh/GTr t97zhnAtRskUbc/3hl05Tv8iqoTsU3jM+4odnIs2+Eg7ou6lg9hR/0GHXiZNiNK2dLKpDu LEobeE0P+6mM2lBdMjqO3CyzksoD9SuIf/kolwzlzwQXz0oX9JkD3Zwxhll8gOFNSdX2HL 0MdgcMBfi206dqRnQfnTXY+CmVL7ZVldhsBLBBr8tbLta5qv72x9JBPBGlrTWA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1755464546; 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=cPpUlDApAitUTyuXWX0J6C+LcsRYlyw4fmJ519zBn4k=; b=eAbLBj1PK3I1xjv1r6SBNVvOXPu0BTK6sPd1dCehyAVZbC6vlHNKoBg830Nc9EQuEEiL+J qDJV9XZptcaKfyZqWj3TCy1B6vbs8tQj/KkalzPinUmtj+UBvWlQbGBMUpyxpQfrDs9jpS nJkka64U59CaK474lmZHlce80/jpV9nD3wXwNls5kCboQbB2Z9AZOEj/qGNoPYQB4QJs0Q xBE81AUeDetdTb+WSFWoJCI2gjYvw/16hGZFTrc2MIUu50ei+6J2nx3Mr/9r6RG4b1m6S7 twU/SDIzJOZpuC7lN5O7svUDD50rZFEam0GfQfIQ/NnrRKOIxF9T+oH4Rq1VNQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1755464546; a=rsa-sha256; cv=none; b=blFykOg8Hbt5+kQciOocaw1v1cpFyyC2wSEAC8XeSM8KbW80ENDyKS3wfqS9/TRIGYX4b0 Fmt+/h7q8dd8q/nu3+ktr23HfR03dZtvjxPKcT1e7VSQNeLFtETdfzq9wtd7o/j1D2DIBT My4HCBItaRm9EL/sA44Fl4Fvm0ON1Uuh08owEc1y8tOOSozOuyxy28QkpZ0TL7A1yCBOjC jZZH4dxcs8J9FwX2g4qYUWtkQL1yySvAT2TFKFTscW/ZGIZ0EscQQQZ5m6V+eFEhgIUbum 0BduaS5TyzoE02KZCtU9tPr+iApGK2wj79ub/2uBf3iz2TJH9iLRvoE6qGmXFw== 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 4c4pFZ2rHyzBgQ; Sun, 17 Aug 2025 21:02:26 +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 57HL2Q7n085232; Sun, 17 Aug 2025 21:02:26 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 57HL2Qjs085230; Sun, 17 Aug 2025 21:02:26 GMT (envelope-from git) Date: Sun, 17 Aug 2025 21:02:26 GMT Message-Id: <202508172102.57HL2Qjs085230@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Vladimir Kondratyev Subject: git: 7699ec1558b7 - main - hid: Add HQ_NO_READAHEAD quirk and implement it in usbhid(4) 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: wulf X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 7699ec1558b7ec2224a4db992ab63aaa849b26fd Auto-Submitted: auto-generated The branch main has been updated by wulf: URL: https://cgit.FreeBSD.org/src/commit/?id=7699ec1558b7ec2224a4db992ab63aaa849b26fd commit 7699ec1558b7ec2224a4db992ab63aaa849b26fd Author: Vladimir Kondratyev AuthorDate: 2025-08-17 21:00:44 +0000 Commit: Vladimir Kondratyev CommitDate: 2025-08-17 21:00:44 +0000 hid: Add HQ_NO_READAHEAD quirk and implement it in usbhid(4) It disables interrupt emulation on poll-driven buses like USB and forces aquiring of only one USB frame per read(2) operation. This avoids an FIDO/U2F issue where IN endpoint data received from the device right before the file handle is closed, gets lost. PR: 263995 Reviewed by: aokblast Differential revision: https://reviews.freebsd.org/D51605 --- sys/dev/hid/hidquirk.h | 1 + sys/dev/usb/input/usbhid.c | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/sys/dev/hid/hidquirk.h b/sys/dev/hid/hidquirk.h index 4f8b8acbe201..f6fa9f88c6c9 100644 --- a/sys/dev/hid/hidquirk.h +++ b/sys/dev/hid/hidquirk.h @@ -50,6 +50,7 @@ HQ(IS_XBOX360GP), /* device is XBox 360 GamePad */ \ HQ(NOWRITE), /* device does not support writes */ \ HQ(IICHID_SAMPLING), /* IIC backend runs in sampling mode */ \ + HQ(NO_READAHEAD), /* Disable interrupt after one report */\ \ /* Various quirks */ \ HQ(HID_IGNORE), /* device should be ignored by hid class */ \ diff --git a/sys/dev/usb/input/usbhid.c b/sys/dev/usb/input/usbhid.c index df810012b3f8..255e639621fe 100644 --- a/sys/dev/usb/input/usbhid.c +++ b/sys/dev/usb/input/usbhid.c @@ -114,6 +114,7 @@ struct usbhid_xfer_ctx { void *cb_ctx; int waiters; bool influx; + bool no_readahead; }; struct usbhid_softc { @@ -272,7 +273,7 @@ usbhid_intr_handler_cb(struct usbhid_xfer_ctx *xfer_ctx) sc->sc_intr_handler(sc->sc_intr_ctx, xfer_ctx->buf, xfer_ctx->req.intr.actlen); - return (0); + return (xfer_ctx->no_readahead ? ECANCELED : 0); } static int @@ -430,6 +431,7 @@ usbhid_intr_start(device_t dev, device_t child __unused) .cb = usbhid_intr_handler_cb, .cb_ctx = sc, .buf = sc->sc_intr_buf, + .no_readahead = hid_test_quirk(&sc->sc_hw, HQ_NO_READAHEAD), }; sc->sc_xfer_ctx[POLL_XFER(USBHID_INTR_IN_DT)] = (struct usbhid_xfer_ctx) { .req.intr.maxlen =