From nobody Mon May 25 03:46:53 2026 Received: from mail-dy1-f176.google.com (mail-dy1-f176.google.com [74.125.82.176]) (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 7FB2C1E1E04 for ; Tue, 19 May 2026 03:20:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779160850; cv=none; b=FD/6sU7elWeHEtQ8rt++CB9F8y8HMuplFxQjC/dgD5w5qExUzLWfv1RFi1TauiF+3Yr4+ECXisiYDm/Lvt7fqAPrNmBPOM95WLq+VrECDzhyJill4s9ZpS2deFA/Pu2pNUwcA/mWDY67lB1wp3KjLDiDytkseVQbmjWEkhuX4EE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779160850; c=relaxed/simple; bh=6ovJCIwwLZn121afkcd/89zOigrli5BIWjWHW4IyEYs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=nVvEdqTgO5/jjpqgw720Vc5Gee1/7n+KjA5f7FHBbLC0VXZhIkVHftaIrDCzX7BbfN9vkEc6JA8qlSaZmL/XLNbzSOrLMSpeBQYyyY04jEE3FF28WBbZFPVd6922HMQ9ZZiIB/1s3eD8BIX28pazX2q3MnvsHl8K3mDu85LvfN4= 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=nPD4jdy4; arc=none smtp.client-ip=74.125.82.176 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="nPD4jdy4" Received: by mail-dy1-f176.google.com with SMTP id 5a478bee46e88-2f7ca62a3c4so2914377eec.0 for ; Mon, 18 May 2026 20:20:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779160848; x=1779765648; 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=qpraoA5lKj7fpo85IodFDYaegQ1/6mbajvu2cjV8zNk=; b=nPD4jdy480JtADPodZ3l/hvDPseZaHb/ndoyAhQUS3DZWl37lH0NP42u8I9np+pVAy 44eGa/OtsaoV9dtL46oRofcgzPuJeBD+fkhI25zckHaJCedfuOh4yVHVVhGhvlTw4Yjr w0bnu74H097I6VS75HO7m2Di5zUoR6cK3ezhVCqad34IntU4wMTh0vkl+9VMYqi3mksh /WLF1tJAEjAjm+VYOwC+JM+wG72b03rlZsNSdXX5o4QMIFrDi+o3pvH0JEyyiS4nMrbI 4N95BZf9sEixdqjiDSOAqlW1tDowTDCZLhUbLN9HOfJpIPn9LEgyAGshB0K8aBUS/gz/ VhPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779160848; x=1779765648; 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=qpraoA5lKj7fpo85IodFDYaegQ1/6mbajvu2cjV8zNk=; b=kAkQ9qgLjmGd9yFnRLp+s3JvBVLdFyqhls4bOMYGSunuUtk1TI62pqhbsxkXHu3w4i MKKgmeta18jQUZAMcBcyXD24zcamqk6t2KFqWk3TM6/qWQ73NPkIyICr35DmPgHENyY/ zqpnhuBjdiaqjiq/4uBC6FVdYMVopVCMZ8HpJ2zwjv9zw62pftJG4zs/dN9uaWRkAl2y OvW4kjFUImyYS9P2JZMvqPy43uLfDK0Fj3kcHIOhjf3q6D0uwNljLU0BL8aiwFmrkhYi HsXLnoMf0GB1Jk4AIyg8Jp48cmQBjT96e+BEJCvq7ocTX4KdsLp6kvpKX7X1A2lwW4ft gYlQ== X-Forwarded-Encrypted: i=1; AFNElJ9zs3SLHL9wnpeXi2NYCKHOEUVEWIaOSj+UAIIAD+rtaWIiLg3paof4Ce37GKJL14HU+H23dN88IUiTSnY=@vger.kernel.org X-Gm-Message-State: AOJu0YyHZP+/j0+hQaiws7Du1g+oecpFIRab2WLG6KVRTY4Zz/1pvd2g VoHVrlB5Ym0oWDg/DGSTg+auG4BJt+52Djps4xcIxb18YBduW9Uwlay7 X-Gm-Gg: Acq92OHMI+ur4aiHx+terrhk4BsTToBXjWqLbWGxtexyeF4jvn5BIZFzUP1dcBAE1Ym uJgwEa/6aRKh/7AOSyy0sCcxLWSev+B8T5+/IF9gnky7OKqcHBkdkRt4y6IPmQpxghLDPbGaOvw GsS5xS2jyEoJbZar5dnfcKYR1i3X/YxID0DsTPBgoI77fYALrUfxGP+JW+vjLeTNIzSy85xCAkI t8PdRyUiq0ycriGoxedeg0dLDR/wPo+idOSiZJHXO80fXJtzhNLIrpwV79XVLJHNp0WfkpIxfiT JJB2gAyGcVfNQQJntSsuNA7UGXVreNKZDqtx3G1N26dCwE8fTvSrr96YNM98o56We1ADN/RGAi0 qQ8mQLwd4LJQzY6GKOtL6yU5w06eW4d21DDkh33QG86YPsFjzwDXmrG2YLa6a5pp5JwL0+0e8Ro Zensa8e1IoeRn4zNIy4UDytBbaZRYVMFkxhA1by8ypciGLX9Ng90qZfs4j8NbxP7ZwdxaZlYaap g== X-Received: by 2002:a05:7300:7490:b0:2f5:5907:3a48 with SMTP id 5a478bee46e88-30398285d3bmr7982153eec.1.1779160847489; Mon, 18 May 2026 20:20:47 -0700 (PDT) Received: from [192.168.1.18] (177-4-162-74.user3p.v-tal.net.br. [177.4.162.74]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-30293e2e69esm19431427eec.1.2026.05.18.20.20.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 20:20:47 -0700 (PDT) From: =?utf-8?q?C=C3=A1ssio_Gabriel?= Date: Tue, 19 May 2026 00:20:41 -0300 Subject: [PATCH] ALSA: usx2y: Drain pending US-428 pipe-4 output commands 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: quoted-printable Message-Id: <20260519-alsa-usx2y-p4out-drain-v1-1-8f0a4550bae2@gmail.com> X-B4-Tracking: v=1; b=H4sIAAAAAAAC/yXMQQ6CMBBA0auQWTtJ2zQIXsW4GNpRxphCOpRgC He36vIt/t9BOQsrXJodMq+iMqUKe2ogjJQejBKrwRnXGu86pJcSFt3cG2c/lQVjJknYB4qD7a0 /mxZqPGe+y/YbX29/axmeHJbvDY7jA3/C2lJ6AAAA X-Change-ID: 20260428-alsa-usx2y-p4out-drain-9cadb1914706 To: Takashi Iwai , Jaroslav Kysela Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?C=C3=A1ssio_Gabriel?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3421; i=cassiogabrielcontato@gmail.com; h=from:subject:message-id; bh=6ovJCIwwLZn121afkcd/89zOigrli5BIWjWHW4IyEYs=; b=owGbwMvMwCV2IdZeKur/u2bG02pJDFnc13ntj7C1/A5LPdm1+CPPzbDGh4Yvy54q+35y6s91l Jvz0Tugo5SFQYyLQVZMkWV10iLLPV0PrtbHrfCAmcPKBDKEgYtTACayXZrhr3Duhz/z2UwnPjs7 YWmCJY/5TYW1cdMPvbshdfXI4/0c6msZ/pmfXcR96+o8/h79SbNZJTcer9JwtL3qds7265I9x7l UK5kA X-Developer-Key: i=cassiogabrielcontato@gmail.com; a=openpgp; fpr=AB62A239BC8AE0D57F5EA848D05D3F1A5AFFEE83 The US-428 pipe-4 output path submits at most one pending p4out entry from the shared-memory ring per input interrupt. If userspace queues more than one command before the interrupt handler runs, later commands remain pending until later input interrupts, even when async pipe-4 URBs are available. Drain pending entries while idle async URBs are available. Copy each command into the existing per-URB async buffer before submission, so the submitted transfer does not depend on a userspace-mapped ring slot remaining unchanged after p4out_sent is advanced. Also update p4out_sent only after usb_submit_urb() succeeds, so a failed submission is not reported as sent. This keeps the shared-memory ABI unchanged and fixes only the local queue-draining behavior. Signed-off-by: C=C3=A1ssio Gabriel --- sound/usb/usx2y/usbusx2y.c | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/sound/usb/usx2y/usbusx2y.c b/sound/usb/usx2y/usbusx2y.c index f34e78910200..4190227c5a2a 100644 --- a/sound/usb/usx2y/usbusx2y.c +++ b/sound/usb/usx2y/usbusx2y.c @@ -180,7 +180,7 @@ static void i_usx2y_in04_int(struct urb *urb) struct usx2ydev *usx2y =3D urb->context; struct us428ctls_sharedmem *us428ctls =3D usx2y->us428ctls_sharedmem; struct us428_p4out *p4out; - int i, j, n, diff, send; + int i, j, n, diff, send, len; =20 usx2y->in04_int_calls++; =20 @@ -222,24 +222,31 @@ static void i_usx2y_in04_int(struct urb *urb) } while (!err && usx2y->us04->submitted < usx2y->us04->len); } } else { - if (us428ctls && us428ctls->p4out_last >=3D 0 && us428ctls->p4out_last <= N_US428_P4OUT_BUFS) { - if (us428ctls->p4out_last !=3D us428ctls->p4out_sent) { - send =3D us428ctls->p4out_sent + 1; - if (send >=3D N_US428_P4OUT_BUFS) - send =3D 0; - for (j =3D 0; j < URBS_ASYNC_SEQ && !err; ++j) { - if (!usx2y->as04.urb[j]->status) { - p4out =3D us428ctls->p4out + send; // FIXME if more than 1 p4out is = new, 1 gets lost. - usb_fill_bulk_urb(usx2y->as04.urb[j], usx2y->dev, - usb_sndbulkpipe(usx2y->dev, 0x04), &p4out->val.vol, - p4out->type =3D=3D ELT_LIGHT ? sizeof(struct us428_lights) : 5, - i_usx2y_out04_int, usx2y); - err =3D usb_submit_urb(usx2y->as04.urb[j], GFP_ATOMIC); + while (us428ctls && + us428ctls->p4out_last >=3D 0 && + us428ctls->p4out_last < N_US428_P4OUT_BUFS && + us428ctls->p4out_last !=3D us428ctls->p4out_sent) { + for (j =3D 0; j < URBS_ASYNC_SEQ && !err; ++j) { + if (!usx2y->as04.urb[j]->status) { + send =3D us428ctls->p4out_sent + 1; + if (send >=3D N_US428_P4OUT_BUFS) + send =3D 0; + + p4out =3D us428ctls->p4out + send; + len =3D p4out->type =3D=3D ELT_LIGHT ? + sizeof(struct us428_lights) : 5; + memcpy(usx2y->as04.urb[j]->transfer_buffer, + &p4out->val.vol, len); + usx2y->as04.urb[j]->transfer_buffer_length =3D len; + err =3D usb_submit_urb(usx2y->as04.urb[j], GFP_ATOMIC); + if (!err) us428ctls->p4out_sent =3D send; - break; - } + + break; } } + if (j >=3D URBS_ASYNC_SEQ || err) + break; } } =20 --- base-commit: 7c94f5e77906abd7b9ba81875ae238c802a187cb change-id: 20260428-alsa-usx2y-p4out-drain-9cadb1914706 Best regards, -- =20 C=C3=A1ssio Gabriel