From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7BF2538A73F for ; Sat, 7 Mar 2026 18:57:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772909850; cv=none; b=bPTdLU/xFNprqga026y0HRzuk9dPMWbpwq/lXe6p3ewldmgsXsFYZvrCnaR16/FRI6P8+h72NOijZAmHAAc9sHmQKLK82jNX3LBgmEza87FKY6cYT1r6t1g8hsdV/pyHRKL9eS8gMwmEzxv7fUJHXAdfvhsIf5VSO7EMFTH++Zc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772909850; c=relaxed/simple; bh=ohZWnTOgcHl6b5ydSuDEJoSGGZ+o1J4dHKqpIcEFxd0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=mpMBtqvOVNQxS38GKe8E1dQWmJ8KGvzaYEnIK7FTCAseKJiwdxUzvXyqnueLyYdh2HmlQ0a2dGeW4Lbed0fGQIHYZT2R6M9Hq76RjvvLbiwvlyDIsM4gRtVSK0NOWnbP3y9YoW0Y32quzLHcQlCTHipM7PQ1XWelB1+lk33zqek= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=NP6dHp/2; arc=none smtp.client-ip=209.85.221.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="NP6dHp/2" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-439cd6b0aedso2566990f8f.1 for ; Sat, 07 Mar 2026 10:57:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772909847; x=1773514647; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=jVKa9KQkK+sGb14EixM9ppAv5O/LJIHEZ/73SrIqbWo=; b=NP6dHp/2PPWnuARwla3VWPq0wD2pzD9Q137+o15rxoP3ux2a2mcf2l4WXOvbkE3Kug HfM870ZnBfIG2O3uASNir6tRMPfLufZqQFtUWx/HFcSJNptQLU0+rx/Hbq1svthfYcF1 ppoE+ElorhPjc7ZByIWBMSSd2oTiLFe6XO/ucDMmqTLMb3n2Z11oCnOzhhCZEJBmFvOr hgku8MIFb1Irax0Jen7S9KvFPu7167MOF9QKELCfseFPDqPi4t6dTr2uQZRZ0VhthwuT fFaODcd+t8jZA4e/+vcyX7xEqIzdt88vB8ndvT2zPafemVUdgliSTXDN1gchFwz9etEa whcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772909847; x=1773514647; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=jVKa9KQkK+sGb14EixM9ppAv5O/LJIHEZ/73SrIqbWo=; b=juweKr3uLzqH8hC7x1LmQuZtyBOkkEWr77Axchr2CzUer6ru1Wt7E2entdLIvsGutU CwrSEnPUcLobQnBng5u1opkETJk+KOkIF8vGmJ5omnSbbgfY5Y5bncU4DUSwxdW9axhQ WGmPVmK/07U/chQmZEDM42ffC40zwjKR/QaZstu4j/Xi/13UCNkbw6yN/lUBNJf1C6Eb stQ14ixTa9HS6ClQ82sasvk5DzOQofTdR3AKdwj3qDKZ4nM1d/eg3jd9iWKrSvINdfwY oDNfY8y3HaxfLqsoaufq6bwxBbUrVYN5ZKfwDcYTu4HeFbpklDY5ZLeAdOoQpNhEDNMT TPCw== X-Forwarded-Encrypted: i=1; AJvYcCUtnecAV+k58PvndGTmXgEX//pz04XeSfCz+2ODK2zAnbt7c7dMKH/6wNZUrO5iZ5PYYLPAzmXnZEK3Vyo=@vger.kernel.org X-Gm-Message-State: AOJu0YzzfAMRGAj47Ozae4LQkzYdSgip4Pgw9JXDIIg7700tBZx00d2d mSbw5cyneBARTB5AsYdZJ6aA1Ngcc8ZecK8Bxv2KxhCVB6/9GKjUHpgs X-Gm-Gg: ATEYQzzq83IoukncFVqKumE6ZI108rZ6lJ1f0X7wazWlm7pT60FxNGzy+42PYKJH0p2 R4L4gRGwV5M9DwdndnKPFJ9Di/jEXXor3tD0tdRgOlb2eLJew3WiURFveMeGFtnl7VvLoEJldcV GP6Mjp7dygCGnVj0gk+PnEtUHwVMedUpwvSp2DMTvh26cuDXw+nsA7+RX/3GddUwAnayLhjsEqq iaz13T3uZtPmCpEvzu8IAx7Gx1h1GBqWWlAEB1Nv7md4128v+yGnbJ8H0Y0fUGS2VT2mnT1GKXz lkcBZJ1xYcO3A2syXUsFq2BCDVRCI1sk5dN8DoVg7UmLolKQ630Poo/5rudxZVCikLaLEGrsUv3 pK8h3lTgm+eTaRX1fhOx8vMsCCUtTTj++Zm/nrzOk7qYBi7Mp4AZoFQ9NWuwL9d/oPeEekIPsRg 11DmJ5WJa5Z0up7qX6XmseCklajhTdEluXg+QHQWGhUQzk9zkG X-Received: by 2002:a05:6000:3112:b0:439:b4c5:cef1 with SMTP id ffacd0b85a97d-439da65bc86mr10783110f8f.13.1772909846734; Sat, 07 Mar 2026 10:57:26 -0800 (PST) Received: from [192.168.178.21] ([2001:9e8:fba0:be00:22c9:d0ff:fe7b:79cb]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-439dae2b9fbsm12530995f8f.23.2026.03.07.10.57.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 07 Mar 2026 10:57:25 -0800 (PST) From: Liam Mitchell Date: Sat, 07 Mar 2026 19:57:09 +0100 Subject: [PATCH v2] usbhid: tolerate intermittent errors Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260307-usbhid-eproto-v2-1-e5a8abce4652@gmail.com> X-B4-Tracking: v=1; b=H4sIAAAAAAAC/3XMSw7CIBSF4a00dyyGS4JFR+6j6YCX5Sa2NFCJp mHvYucO/5Ocb4fsE/kMt26H5AtliksLcerABr1MnpFrDYKLCxdcsVc2gRzza4pbZCiF7bWxBpW E9lmTf9D78IaxdaC8xfQ5+IK/9Z9UkCGTqhcWubtyY+7TrOl5tnGGsdb6BQ1V1KKqAAAA X-Change-ID: 20260208-usbhid-eproto-152c7abcb185 To: Jiri Kosina , Benjamin Tissoires Cc: Alan Stern , Oliver Neukum , linux-usb@vger.kernel.org, linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, Liam Mitchell X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1772909845; l=2884; i=mitchell.liam@gmail.com; s=20260207; h=from:subject:message-id; bh=ohZWnTOgcHl6b5ydSuDEJoSGGZ+o1J4dHKqpIcEFxd0=; b=wvPQ9LTVGcnBcWJBP1UX/KdL/QZgvPr/b6Fgb3fA6Vc0X4SE1j62vfkLgfNVzakCUCNGfALum vddJfzfWKYKD9iWoYUqCmU8MOs//fhGIrqsBTzeig53A0CiCVt078vC X-Developer-Key: i=mitchell.liam@gmail.com; a=ed25519; pk=Y9mPqBk1OuHZ0OaUZ5a8Nc5X7YHs7+SKiNwUfcLfPmg= Modifies usbhid error handling to tolerate intermittent protocol errors, avoiding URB resubmission delay and device reset. --- Protocol errors like EPROTO can occur randomly, sometimes frequently and are often not fixed by a device reset. The current error handling will only resubmit the URB after at least 13ms delay and may reset the USB device if another error occurs 1-1.5s later, regardless of error type or count. These delays and device resets increase the chance that input events will be missed and that users see symptoms like missed or sticky keyboard keys. This patch allows one protocol error per 500ms to be tolerated and have the URB re-submitted immediately. 500ms was chosen to be well above the error rate of a malfunctioning device but low enough to be useful for users with devices noisier than mine. Signed-off-by: Liam Mitchell Link: https://lore.kernel.org/linux-input/CAOQ1CL6Q+4GNy=kgisLzs0UBXFT3b02PG8t-0rPuW-Wf6NhQ6g@mail.gmail.com/ --- Changes in v2: - revert changes to hid_io_error - add more specific fix in hid_irq_in - Link to v1: https://lore.kernel.org/r/20260208-usbhid-eproto-v1-1-5872c10d90bb@gmail.com --- drivers/hid/usbhid/hid-core.c | 5 +++++ drivers/hid/usbhid/usbhid.h | 1 + 2 files changed, 6 insertions(+) diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c index 758eb21430cd..939e095eddfe 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c @@ -313,6 +313,11 @@ static void hid_irq_in(struct urb *urb) case -ETIME: /* protocol error or unplug */ case -ETIMEDOUT: /* Should never happen, but... */ usbhid_mark_busy(usbhid); + /* Tolerate intermittent protocol errors */ + if (time_after(jiffies, usbhid->last_proto_error + msecs_to_jiffies(500))) { + usbhid->last_proto_error = jiffies; + break; + } clear_bit(HID_IN_RUNNING, &usbhid->iofl); hid_io_error(hid); return; diff --git a/drivers/hid/usbhid/usbhid.h b/drivers/hid/usbhid/usbhid.h index 75fe85d3d27a..6aab9101fe34 100644 --- a/drivers/hid/usbhid/usbhid.h +++ b/drivers/hid/usbhid/usbhid.h @@ -86,6 +86,7 @@ struct usbhid_device { struct timer_list io_retry; /* Retry timer */ unsigned long stop_retry; /* Time to give up, in jiffies */ unsigned int retry_delay; /* Delay length in ms */ + unsigned long last_proto_error; /* Last protocol error time, in jiffies */ struct work_struct reset_work; /* Task context for resets */ wait_queue_head_t wait; /* For sleeping */ }; --- base-commit: b91e36222ccfb1b0985d1fcc4fb13b68fb99c972 change-id: 20260208-usbhid-eproto-152c7abcb185 Best regards, -- Liam Mitchell