From nobody Mon Sep 28 01:12:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=mihalicyn.com ARC-Seal: i=1; a=rsa-sha256; t=1785744764; cv=none; d=zohomail.com; s=zohoarc; b=ACl1tLfKdV71La1YYhgQ4HM13+tckESDj8pPaucbN4OMDvFx0vEn95BFBkJQD0H5jUf+jDODCs7Ez8T+sTxTAuV6Tl7KYhbYVuRynzuZQwfT0Wy6ae0o3+BtbxoLEuuvrB/xi+EKBU6qy8NxvWY6KKo73erEB+n/az7VvRFP9/k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785744764; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=H69vIMTc6zbjreaaAW8A21vCRMcF+sLX1oKxSski0YU=; b=XQ2Bx8ZM87JHiLBURSTr4SRSt5wboOvbyhNc+kObHdJYOMQHAAA8PiKusad51zKS4+yADzAeOGFA9uv/qnzL2VfpfdGgQG+Xz9SO0bMyu2nywPCq1M0qi2adHh1aLyRTXfyoGsPDMa5r216q3srfrkUubkDYL01JJ2eHDMcE4q8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785744763979129.0174127743063; Mon, 3 Aug 2026 01:12:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wqnmJ-0001an-Sk; Mon, 03 Aug 2026 04:12:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wqnmH-0001aQ-PT for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:05 -0400 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wqnmG-0003em-CH for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:05 -0400 Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-4953de5be0aso11322325e9.0 for ; Mon, 03 Aug 2026 01:12:03 -0700 (PDT) Received: from alex-laptop.lan (p200300cf574a7200803110ea947f174a.dip0.t-ipconnect.de. [2003:cf:574a:7200:8031:10ea:947f:174a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49807b98284sm209358435e9.12.2026.08.03.01.12.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 01:12:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mihalicyn.com; s=mihalicyn; t=1785744723; x=1786349523; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=H69vIMTc6zbjreaaAW8A21vCRMcF+sLX1oKxSski0YU=; b=aGE8NNxQX0c6MUPdi6Hi8N+96p+tlu9MU4oO+pfj2YK/ZoYjVT8i9EOc8oPxwCz7hb msvyPI3KkX/ZlEDyoZO0SGnVxjP9uowEjq3LI7UYbcHXcVrgSqIFSRzqLXC520VZd4g6 G9hl3mmKCavQKIc8B+6nnnnpFAF/2Wa7buiHU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785744723; x=1786349523; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=H69vIMTc6zbjreaaAW8A21vCRMcF+sLX1oKxSski0YU=; b=IIcPxCx+I9Hiuo6MbJBPpU7MU+RYmOqsoYjDn1cbz68D4rpLqK7mZj3Zz2kgazb0ja 4KjdJigd4CL9WIqpIQiZ5UkyzYZBM4esnbboFIy+HeK9wD/SAzbzTqhDKwS7xlyF4RK4 HDGJ/twnFlO7NEVkkZTbS+XAXcgnlTPV+/+OnNZ2UOpiQHoRBdVvg5Iiui/BXjhURp// Rfly553Z7WROj0SIWCXWLWoP7Wx01NzWBtO+hF35PBxINzmofPEMNGCYwlx7toE1OEcJ BBYWcTPWolTslrRUSc+D71OwZ7lPKQgYfTl8J5nmy0UW4a+I2n3YzRuVF3UBeylhzZon JvFQ== X-Gm-Message-State: AOJu0YxbXtWvI2n3Ne+wBAAgmn83S/U7e39XywrTfWt08/XP8e0ccw3r DcgZDOFF+JQdnl3jX2mfGWn2IJdsF28xhccybHcqO0FiLZeXG42ExSCzIUZioPECSW+wMg6y2dl Tp/bP X-Gm-Gg: AR+sD13a6+pdT0BgYE8/cE85A5VLJxVBAaedU3yXEpakRmKh5T/1aVW0tsJrdR8azpP zejCPF+uC8EcLa5s+3LIBxImCxdSN9bCGDNqY6K1nobyArXeXxnstEJTYsU3zGNLQuF5cfNJYoO GlBvcEeGfrW1NwhsReydSQyvoelAmshiBWG92MMLmezlIahk46DeX0yzqycbOWgXmfs+VF7vXA2 QC8cWwpQErwV4AxnM8i1yBEJiv7o/WjnjP2XU25CRCEAkuc4FGwDayEJj5INDvLVy1Bcr4MLMqv wYbtTqJ3lVKcqDeLcUuATc+smm9ludfgV7ky5VVfVgqZgWZ6kM1dofNe2boo4qpGjfK7SiBm/pu M4svIJvsUH7TDwS05Ar1Te4SaAaYyKVGf6YyifhVjfhJLgeXY42HrQWB4uj4o/NV2Xn43taGkba DvGDAOGptbR/LY6Q5HAqeNWSxfom3DAgbAWi+7SYCDez38aPY0FrkiEgWz/N/ViEm+LBELZpcE1 Bh4R832YNFac6HKB/utKs8YGy/Vvr342ZCGcZrkjDxoZdWXpkmEd8nUrhY9 X-Received: by 2002:a05:600c:564b:b0:496:c93d:e2f with SMTP id 5b1f17b1804b1-4980c65e93bmr137863995e9.15.1785744722661; Mon, 03 Aug 2026 01:12:02 -0700 (PDT) From: Alexander Mikhalitsyn To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , =?UTF-8?q?Volker=20R=C3=BCmelin?= , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Gerd Hoffmann , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , Alexander Mikhalitsyn , "Michael S. Tsirkin" , =?UTF-8?q?St=C3=A9phane=20Graber?= , Alexander Mikhalitsyn Subject: [PATCH v5 01/10] hw/audio/virtio-sound: remove channel positions field from VirtIOSoundPCMStream Date: Mon, 3 Aug 2026 10:11:50 +0200 Message-ID: <20260803081159.91981-2-alexander@mihalicyn.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260803081159.91981-1-alexander@mihalicyn.com> References: <20260803081159.91981-1-alexander@mihalicyn.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::335; envelope-from=alexander@mihalicyn.com; helo=mail-wm1-x335.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @mihalicyn.com) X-ZM-MESSAGEID: 1785744767117158500 From: Alexander Mikhalitsyn This field seems to be useless currently, as we don't implement VIRTIO_SND_R_CHMAP_INFO. Suggested-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Alexander Mikhalitsyn Reviewed-by: Manos Pitsidianakis Reviewed-by: Marc-Andr=C3=A9 Lureau --- v4: - moved this patch to the beginning of the series (suggested by Manos Pitsidianakis) v3: - this patch was added --- hw/audio/virtio-snd.c | 2 -- include/hw/audio/virtio-snd.h | 2 -- 2 files changed, 4 deletions(-) diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index 694bcebb60f..46d81cc9ec4 100644 --- a/hw/audio/virtio-snd.c +++ b/hw/audio/virtio-snd.c @@ -463,8 +463,6 @@ static uint32_t virtio_snd_pcm_prepare(VirtIOSound *s, = uint32_t stream_id) stream->info.rates =3D supported_rates; stream->params =3D *params; =20 - stream->positions[0] =3D VIRTIO_SND_CHMAP_FL; - stream->positions[1] =3D VIRTIO_SND_CHMAP_FR; stream->as =3D as; =20 if (stream->info.direction =3D=3D VIRTIO_SND_D_OUTPUT) { diff --git a/include/hw/audio/virtio-snd.h b/include/hw/audio/virtio-snd.h index e28f1be5db9..f8bb5c95b97 100644 --- a/include/hw/audio/virtio-snd.h +++ b/include/hw/audio/virtio-snd.h @@ -137,8 +137,6 @@ struct VirtIOSoundPCMStream { virtio_snd_pcm_info info; virtio_snd_pcm_set_params params; uint32_t id; - /* channel position values (VIRTIO_SND_CHMAP_XXX) */ - uint8_t positions[VIRTIO_SND_CHMAP_MAX_SIZE]; VirtIOSound *s; bool flushing; audsettings as; --=20 2.47.3 From nobody Mon Sep 28 01:12:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=mihalicyn.com ARC-Seal: i=1; a=rsa-sha256; t=1785744782; cv=none; d=zohomail.com; s=zohoarc; b=Ld8C3+iEvS9wGVMe5ApEQ3EyRuAfoikC3flGgN//5R+RpbqhMLsUqr9YTjMAoAbrmu0PI/no+OOP4P9ZvBuybXGXLsBF7d/8kWWmgkbeI3dMRO+ZMHcQkgh05lZ4VzoTj7WXxKPpVJWxv0I9rVxwGT4rFm8IbWcGeAByP7B5GXk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785744782; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=mgozXciHTThk22TT8NHrXksaBCyxZBiWb8wXbhOl/N4=; b=CN1LJHuf91F6kBDobMXXidXFUd0cuOzc8WEIuwbOhfC1kGPsAFFfQWDT53z2WNaWwiOilnsp7E5x6I9VAOrZ7W0nxen6WW3v9Tu4r0vsAaF40W04gh1H+5IJwZklOxrqLKXThNz9fXyI6MFJxdFhvNmyYg99i3+eKhT4GIC2s5w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785744782099475.40087321962005; Mon, 3 Aug 2026 01:13:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wqnmM-0001bV-FQ; Mon, 03 Aug 2026 04:12:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wqnmK-0001bJ-6w for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:08 -0400 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wqnmI-0003es-Od for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:07 -0400 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-4954dff6536so12210615e9.0 for ; Mon, 03 Aug 2026 01:12:06 -0700 (PDT) Received: from alex-laptop.lan (p200300cf574a7200803110ea947f174a.dip0.t-ipconnect.de. [2003:cf:574a:7200:8031:10ea:947f:174a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49807b98284sm209358435e9.12.2026.08.03.01.12.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 01:12:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mihalicyn.com; s=mihalicyn; t=1785744724; x=1786349524; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=mgozXciHTThk22TT8NHrXksaBCyxZBiWb8wXbhOl/N4=; b=jPAogKmZRz27e+cPSimiSzPNhmvZsjOXZzSis0DkZ3c3nI+HmUH50jOq8ww97Pzs78 1wK7AVYKzfP4Ls0KEsdkR3vc2t+NntY0mNo0DRJ9XdXhyDI2boxUxFTxdbU/u82MAD7n f5A1eky26T3iL5Ngw6wu5I70StULUKG+zVCt8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785744724; x=1786349524; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=mgozXciHTThk22TT8NHrXksaBCyxZBiWb8wXbhOl/N4=; b=hfk6KR/x3GhEHE8+K64MPJoqQA1EanZFmcg3jVt3ug0MtRkp3GeHXQ11nh2V5ZDcfT tQ/4g/2bpazBWekG+U3v3WUsfgFGAGj8CZxj0nZYS3ITRL+qxpNKA9cDxFELbETSuBRa kYVKXTkwTcaSjJUZJQNCVHo1RVPw5M5koxmnsrGwqUjcicGDTFpiVnhsb5rgx2oI2KNs aj/OPJoOYo5eRSxNiNw8EjXKv1tFyr4dmh2Wcm6IKEh4/nKNMPnfBHzZ6y56OHaxuJLO DhG4ZtnmPqFHn8NGBo/TFmZTgP3aAbTfVcNTueBvGtJ2xic35fIRG7srGSBuIkwwVIdf lwWw== X-Gm-Message-State: AOJu0Yx3vXZyGLCmBiuO8i40NVii5Em5fqnaX1toG59vT5r+ZKP9fkdS pKYNh59u2Xo2vrecoQw1BZG95888ThGniLPpgpOObd3WGJu6BiqXWnl5uzB9vz6Yy9c4lGO6Y9r O9JPx X-Gm-Gg: AR+sD11hZcGzGe8WTm4qO1ZHQIvjxxe3WLZcwOi4DTr53Ce8YC56iRKAye42cRXgQMK Rl1lASSAfbdxpaBZvq9dNsTbzcHWYwKNhW84UmygOenhMLk+gBcyToIhFFpvXOwPfYRwOEUP21h 8LLyaSpkV93SiisRZ3YCEnZmBX3poI0pSNhoRwP7TwGQkMYOh/HPlXYI1rC9IK3pFyOLhKVQStq LJ2DH5tsufWm3t6njG3C/EOq6Dm+sgjkIOXDCbAotIT7KNyq17Vpcu3pCVjN9tWqTF38U2wv0zw r+tCnj8oBW7KFQ05DVcu6BCFPRH/gpXrzxwhJB7w4PdJJQ3VfV3aUg6mxxSW2OU6/kbG9JQjr0b JpDIWi7cOLi04RFJV9FpCenn7XlGK2ypCbnUzYKzGNqziezKh5ZFhUW9fxADJau2E8XqfdI8uR0 U6LHFCFs9qhxbOTue2MU5th6zhlogSfMiuDxjU9uoz2hfaDlR5yEwzEHHVJB9KfERXzWctcsrzx IxYLtvkmHabssVFeNUX9min1U4GssgNhWp1WA9odoKgpKZNTpqbER+FNJcQ X-Received: by 2002:a05:600c:524a:b0:498:28b:1025 with SMTP id 5b1f17b1804b1-4980c66c838mr182685135e9.5.1785744723693; Mon, 03 Aug 2026 01:12:03 -0700 (PDT) From: Alexander Mikhalitsyn To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , =?UTF-8?q?Volker=20R=C3=BCmelin?= , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Gerd Hoffmann , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , Alexander Mikhalitsyn , "Michael S. Tsirkin" , =?UTF-8?q?St=C3=A9phane=20Graber?= , Alexander Mikhalitsyn Subject: [PATCH v5 02/10] hw/audio/virtio-sound: drop unused struct VirtIOSoundPCMStream.flushing field Date: Mon, 3 Aug 2026 10:11:51 +0200 Message-ID: <20260803081159.91981-3-alexander@mihalicyn.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260803081159.91981-1-alexander@mihalicyn.com> References: <20260803081159.91981-1-alexander@mihalicyn.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32f; envelope-from=alexander@mihalicyn.com; helo=mail-wm1-x32f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @mihalicyn.com) X-ZM-MESSAGEID: 1785744784533158500 Content-Type: text/plain; charset="utf-8" From: Alexander Mikhalitsyn Signed-off-by: Alexander Mikhalitsyn Reviewed-by: Manos Pitsidianakis --- v5: - added RWB tag from Manos v4: - this commit was split from "hw/audio/virtio-sound: add stream state variable" (suggested by Manos Pitsidianakis) --- include/hw/audio/virtio-snd.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/hw/audio/virtio-snd.h b/include/hw/audio/virtio-snd.h index f8bb5c95b97..b60b098ccd8 100644 --- a/include/hw/audio/virtio-snd.h +++ b/include/hw/audio/virtio-snd.h @@ -138,7 +138,6 @@ struct VirtIOSoundPCMStream { virtio_snd_pcm_set_params params; uint32_t id; VirtIOSound *s; - bool flushing; audsettings as; union { SWVoiceIn *in; --=20 2.47.3 From nobody Mon Sep 28 01:12:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=mihalicyn.com ARC-Seal: i=1; a=rsa-sha256; t=1785744805; cv=none; d=zohomail.com; s=zohoarc; b=M1ktDut0Igm/H1Y8bfzMNy06Vg39cwJ58SK2f5hV7Zwx9qXyaLw4p0SSU0qTyQxnD3jWSs/8rIyVlWhrManFXpBUXUqJTC4GTYiyN5Z5r7oWVLVPJ/+vf5WoNnmWW9SQlU77okf1XjS3DFMwYH8Pn2/lAymKbpVp5R6ljLibR0I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785744805; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=+OQnGd/VssRY3c9PIQDh3w6TM7Z+wYhgLftlLZUUP+k=; b=HOqy0Jgd+plR8LwrSS5FDDtBOY6EI3KbqeqzmFbgXy8nR1iUVXRKZrtYpJkbkQDZBUNCHPDxWp0XPuDOLnB5LDWnGumRdeV07WOnKLZisAdY+p3RKUer6wAm1mWQawtHlqKqqsGspTR6ek3ijAnKAcpVpvY9MAsqVDT73hk+4MI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785744805740256.5157978131882; Mon, 3 Aug 2026 01:13:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wqnmP-0001cf-AB; Mon, 03 Aug 2026 04:12:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wqnmN-0001bn-0L for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:11 -0400 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wqnmI-0003ev-OU for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:09 -0400 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-4954df200ddso11280185e9.0 for ; Mon, 03 Aug 2026 01:12:05 -0700 (PDT) Received: from alex-laptop.lan (p200300cf574a7200803110ea947f174a.dip0.t-ipconnect.de. [2003:cf:574a:7200:8031:10ea:947f:174a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49807b98284sm209358435e9.12.2026.08.03.01.12.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 01:12:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mihalicyn.com; s=mihalicyn; t=1785744725; x=1786349525; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=+OQnGd/VssRY3c9PIQDh3w6TM7Z+wYhgLftlLZUUP+k=; b=OYOl1sS9rKSU9HCrLzBCJmdzzjYjm0diNZntQlLK29uQkeCKTihk68K8mp3Tb5ZewQ 8RriBHPlwt8VDjLpaE0PVc+/3TbsQWuNFz3ygFx9NlfKRszbi5/oHhyIpCJRagdqrPSj ECTI3Sgkv5ft/0M1BSiazD10cBHUnerorRN84= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785744725; x=1786349525; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=+OQnGd/VssRY3c9PIQDh3w6TM7Z+wYhgLftlLZUUP+k=; b=bGwWFQ1xPSZ9LnaPwbBwvJBUghK1TDZSoG3wGtdKPBNGOIc5xD4fehrja8E06qlK2j CVm6CKkERYeAW7e8QDNh9k9DentLrePx1hgM1kzvgpxFBZAjyQYpXQMJBWzJM0bgBobe o8WKMvj8+AvI8D+anNHDNApvtusYEf7B3TQ1NWEFemCL6XVDA0hpjO3z/VK1mP94eIEd AWHJMEAWUq1AtQ1MKcAKk0YCp+UJHqpgSnOhUYeR8OZyaH3ER7kwIyo+rVcPOKwY3rVW ZryX9RjuMJfVSoz44AWJJ0pWB7hMCDJVP1EHHwH8p4ULbgDOGS/RVZi+O8tcyJiQYvq1 oenA== X-Gm-Message-State: AOJu0YzKf8DkJhnmJO6pijcTGBwtl4HctjbQt8k8r9RH0fK2xIGim4He CNPeiJHb3slroPpqyOtGPeYa5xbuAWeArPqpospPB2X6gUtfSTd+XI9uvEhRfd5RDTKkZiRictv MzLGM X-Gm-Gg: AR+sD10+sHYr6tkhGwH+FE948KVaNSo+qaSG7DmpvuVCwpTubf1u8SIXFQJ44VWBZ8S NWrh1OY0fry3t5LAVc0I+eNxT8YyM9FSl5W9p756nyZqQqTp4ocekjl1lH2y6T7vVgbOIgfYOCT q6d1MigI8BACZGyM9falto1jn61MZWItTJMg9NlmCNkK+wOQqfixgHy6AklcEjf464F5kixDZ/z riS/m0mxM8PogieraN4PEg4huFFySrpm4aF03F37OKYJFxoEMW79MqombGe0zEkKvBgJRkFQtD5 cql8UX4yioWqp6duDC8eaxrUSOUYUzWZywyByzjOa3WAUgZDhmjWkOofdzFI49CSP5oQJHKqzhk +IlEVsWwCD9aaJowy6NmgPk5KGB6oqGmziWjkRKZB2rtIH4F8BVNhow/YqCffbgqgouB5HoY/S1 72GFQvAXEUEwdeBJeP8uyxAGL+quwyI58JF6UpzsIUbGX0rs/2GqYtJMldKcorfNLYL9gE2f4AF bud/fkWOAYLbtTO9ZrcUjAqr3aViITddFD0x6tb42sG37nIvCpo30OigQt6 X-Received: by 2002:a05:600c:1992:b0:498:28b:1045 with SMTP id 5b1f17b1804b1-4980c645611mr150808685e9.3.1785744724777; Mon, 03 Aug 2026 01:12:04 -0700 (PDT) From: Alexander Mikhalitsyn To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , =?UTF-8?q?Volker=20R=C3=BCmelin?= , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Gerd Hoffmann , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , Alexander Mikhalitsyn , "Michael S. Tsirkin" , =?UTF-8?q?St=C3=A9phane=20Graber?= , Alexander Mikhalitsyn Subject: [PATCH v5 03/10] hw/audio/virtio-sound: remove command and stream mutexes Date: Mon, 3 Aug 2026 10:11:52 +0200 Message-ID: <20260803081159.91981-4-alexander@mihalicyn.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260803081159.91981-1-alexander@mihalicyn.com> References: <20260803081159.91981-1-alexander@mihalicyn.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::331; envelope-from=alexander@mihalicyn.com; helo=mail-wm1-x331.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @mihalicyn.com) X-ZM-MESSAGEID: 1785744806686158500 From: Volker R=C3=BCmelin All code in virtio-snd.c runs with the BQL held. Remove the command queue mutex and the stream queue mutexes. The qatomic functions are also not needed. Signed-off-by: Volker R=C3=BCmelin [AM: there were too many conflicts, I did `git checkout --ours -- <.>` and then reimplemented the patch idea /AM] Signed-off-by: Alexander Mikhalitsyn Reviewed-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Manos Pitsidianakis --- hw/audio/virtio-snd.c | 246 +++++++++++++++------------------- include/hw/audio/virtio-snd.h | 3 - 2 files changed, 110 insertions(+), 139 deletions(-) diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index 46d81cc9ec4..cbf739f8a7d 100644 --- a/hw/audio/virtio-snd.c +++ b/hw/audio/virtio-snd.c @@ -19,7 +19,6 @@ #include "qemu/iov.h" #include "qemu/log.h" #include "qemu/error-report.h" -#include "qemu/lockable.h" #include "system/runstate.h" #include "trace.h" #include "qapi/error.h" @@ -442,7 +441,6 @@ static uint32_t virtio_snd_pcm_prepare(VirtIOSound *s, = uint32_t stream_id) stream->id =3D stream_id; stream->s =3D s; stream->latency_bytes =3D 0; - qemu_mutex_init(&stream->queue_mutex); QSIMPLEQ_INIT(&stream->queue); =20 /* @@ -566,9 +564,7 @@ static void virtio_snd_handle_pcm_start_stop(VirtIOSoun= d *s, =20 stream =3D virtio_snd_pcm_get_stream(s, stream_id); if (stream) { - WITH_QEMU_LOCK_GUARD(&stream->queue_mutex) { - stream->active =3D start; - } + stream->active =3D start; if (stream->info.direction =3D=3D VIRTIO_SND_D_OUTPUT) { audio_be_set_active_out(s->audio_be, stream->voice.out, start); } else { @@ -592,10 +588,8 @@ static size_t virtio_snd_pcm_get_io_msgs_count(VirtIOS= oundPCMStream *stream) VirtIOSoundPCMBuffer *buffer, *next; size_t count =3D 0; =20 - WITH_QEMU_LOCK_GUARD(&stream->queue_mutex) { - QSIMPLEQ_FOREACH_SAFE(buffer, &stream->queue, entry, next) { - count +=3D 1; - } + QSIMPLEQ_FOREACH_SAFE(buffer, &stream->queue, entry, next) { + count +=3D 1; } return count; } @@ -737,23 +731,15 @@ static void virtio_snd_process_cmdq(VirtIOSound *s) { virtio_snd_ctrl_command *cmd; =20 - if (unlikely(qatomic_read(&s->processing_cmdq))) { - return; - } - - WITH_QEMU_LOCK_GUARD(&s->cmdq_mutex) { - qatomic_set(&s->processing_cmdq, true); - while (!QTAILQ_EMPTY(&s->cmdq)) { - cmd =3D QTAILQ_FIRST(&s->cmdq); + while (!QTAILQ_EMPTY(&s->cmdq)) { + cmd =3D QTAILQ_FIRST(&s->cmdq); =20 - /* process command */ - process_cmd(s, cmd); + /* process command */ + process_cmd(s, cmd); =20 - QTAILQ_REMOVE(&s->cmdq, cmd, next); + QTAILQ_REMOVE(&s->cmdq, cmd, next); =20 - virtio_snd_ctrl_cmd_free(cmd); - } - qatomic_set(&s->processing_cmdq, false); + virtio_snd_ctrl_cmd_free(cmd); } } =20 @@ -896,17 +882,16 @@ static void virtio_snd_handle_tx_xfer(VirtIODevice *v= dev, VirtQueue *vq) if (!g_size_checked_add(&tmp, sizeof(VirtIOSoundPCMBuffer), size))= { goto tx_err; } - WITH_QEMU_LOCK_GUARD(&stream->queue_mutex) { - buffer =3D g_malloc0(sizeof(VirtIOSoundPCMBuffer) + size); - buffer->elem =3D elem; - buffer->populated =3D false; - buffer->vq =3D vq; - buffer->size =3D size; - buffer->offset =3D 0; - stream->latency_bytes +=3D size; - - QSIMPLEQ_INSERT_TAIL(&stream->queue, buffer, entry); - } + + buffer =3D g_malloc0(sizeof(VirtIOSoundPCMBuffer) + size); + buffer->elem =3D elem; + buffer->populated =3D false; + buffer->vq =3D vq; + buffer->size =3D size; + buffer->offset =3D 0; + stream->latency_bytes +=3D size; + + QSIMPLEQ_INSERT_TAIL(&stream->queue, buffer, entry); continue; =20 tx_err: @@ -983,14 +968,14 @@ static void virtio_snd_handle_rx_xfer(VirtIODevice *v= dev, VirtQueue *vq) if (!g_size_checked_add(&tmp, sizeof(VirtIOSoundPCMBuffer), size))= { goto rx_err; } - WITH_QEMU_LOCK_GUARD(&stream->queue_mutex) { - buffer =3D g_malloc0(sizeof(VirtIOSoundPCMBuffer) + size); - buffer->elem =3D elem; - buffer->vq =3D vq; - buffer->size =3D 0; - buffer->offset =3D 0; - QSIMPLEQ_INSERT_TAIL(&stream->queue, buffer, entry); - } + + buffer =3D g_malloc0(sizeof(VirtIOSoundPCMBuffer) + size); + buffer->elem =3D elem; + buffer->vq =3D vq; + buffer->size =3D 0; + buffer->offset =3D 0; + QSIMPLEQ_INSERT_TAIL(&stream->queue, buffer, entry); + continue; =20 rx_err: @@ -1094,7 +1079,6 @@ static void virtio_snd_realize(DeviceState *dev, Erro= r **errp) virtio_add_queue(vdev, 64, virtio_snd_handle_tx_xfer); vsnd->queues[VIRTIO_SND_VQ_RX] =3D virtio_add_queue(vdev, 64, virtio_snd_handle_rx_xfer); - qemu_mutex_init(&vsnd->cmdq_mutex); QTAILQ_INIT(&vsnd->cmdq); QSIMPLEQ_INIT(&vsnd->invalid); =20 @@ -1162,52 +1146,50 @@ static void virtio_snd_pcm_out_cb(void *data, int a= vailable) VirtIOSoundPCMBuffer *buffer; size_t size; =20 - WITH_QEMU_LOCK_GUARD(&stream->queue_mutex) { - while (!QSIMPLEQ_EMPTY(&stream->queue)) { - buffer =3D QSIMPLEQ_FIRST(&stream->queue); - if (!virtio_queue_ready(buffer->vq)) { - return; + while (!QSIMPLEQ_EMPTY(&stream->queue)) { + buffer =3D QSIMPLEQ_FIRST(&stream->queue); + if (!virtio_queue_ready(buffer->vq)) { + return; + } + if (!stream->active) { + /* Stream has stopped, so do not perform audio_be_write. */ + return_tx_buffer(stream, buffer); + continue; + } + if (!buffer->populated) { + iov_to_buf(buffer->elem->out_sg, + buffer->elem->out_num, + sizeof(virtio_snd_pcm_xfer), + buffer->data, + buffer->size); + buffer->populated =3D true; + } + for (;;) { + size =3D audio_be_write(stream->s->audio_be, + stream->voice.out, + buffer->data + buffer->offset, + MIN(buffer->size, available)); + assert(size <=3D MIN(buffer->size, available)); + if (size =3D=3D 0) { + /* break out of both loops */ + available =3D 0; + break; } - if (!stream->active) { - /* Stream has stopped, so do not perform audio_be_write. */ + buffer->size -=3D size; + buffer->offset +=3D size; + available -=3D size; + update_latency(stream, size); + if (buffer->size < 1) { return_tx_buffer(stream, buffer); - continue; - } - if (!buffer->populated) { - iov_to_buf(buffer->elem->out_sg, - buffer->elem->out_num, - sizeof(virtio_snd_pcm_xfer), - buffer->data, - buffer->size); - buffer->populated =3D true; - } - for (;;) { - size =3D audio_be_write(stream->s->audio_be, - stream->voice.out, - buffer->data + buffer->offset, - MIN(buffer->size, available)); - assert(size <=3D MIN(buffer->size, available)); - if (size =3D=3D 0) { - /* break out of both loops */ - available =3D 0; - break; - } - buffer->size -=3D size; - buffer->offset +=3D size; - available -=3D size; - update_latency(stream, size); - if (buffer->size < 1) { - return_tx_buffer(stream, buffer); - break; - } - if (!available) { - break; - } + break; } if (!available) { break; } } + if (!available) { + break; + } } } =20 @@ -1258,55 +1240,53 @@ static void virtio_snd_pcm_in_cb(void *data, int av= ailable) VirtIOSoundPCMBuffer *buffer; size_t size, max_size, to_read; =20 - WITH_QEMU_LOCK_GUARD(&stream->queue_mutex) { - while (!QSIMPLEQ_EMPTY(&stream->queue)) { - buffer =3D QSIMPLEQ_FIRST(&stream->queue); - if (!virtio_queue_ready(buffer->vq)) { - return; - } - if (!stream->active) { - /* Stream has stopped, so do not perform audio_be_read. */ - return_rx_buffer(stream, buffer); - continue; - } + while (!QSIMPLEQ_EMPTY(&stream->queue)) { + buffer =3D QSIMPLEQ_FIRST(&stream->queue); + if (!virtio_queue_ready(buffer->vq)) { + return; + } + if (!stream->active) { + /* Stream has stopped, so do not perform audio_be_read. */ + return_rx_buffer(stream, buffer); + continue; + } =20 - max_size =3D iov_size(buffer->elem->in_sg, buffer->elem->in_nu= m); - if (max_size <=3D sizeof(virtio_snd_pcm_status)) { + max_size =3D iov_size(buffer->elem->in_sg, buffer->elem->in_num); + if (max_size <=3D sizeof(virtio_snd_pcm_status)) { + return_rx_buffer(stream, buffer); + continue; + } + max_size -=3D sizeof(virtio_snd_pcm_status); + + for (;;) { + if (buffer->size >=3D max_size) { return_rx_buffer(stream, buffer); - continue; + break; } - max_size -=3D sizeof(virtio_snd_pcm_status); - - for (;;) { - if (buffer->size >=3D max_size) { - return_rx_buffer(stream, buffer); - break; - } - to_read =3D stream->params.period_bytes - buffer->size; - to_read =3D MIN(to_read, available); - to_read =3D MIN(to_read, max_size - buffer->size); - size =3D audio_be_read(stream->s->audio_be, - stream->voice.in, - buffer->data + buffer->size, - to_read); - if (!size) { - available =3D 0; - break; - } - buffer->size +=3D size; - available -=3D size; - if (buffer->size >=3D stream->params.period_bytes) { - return_rx_buffer(stream, buffer); - break; - } - if (!available) { - break; - } + to_read =3D stream->params.period_bytes - buffer->size; + to_read =3D MIN(to_read, available); + to_read =3D MIN(to_read, max_size - buffer->size); + size =3D audio_be_read(stream->s->audio_be, + stream->voice.in, + buffer->data + buffer->size, + to_read); + if (!size) { + available =3D 0; + break; + } + buffer->size +=3D size; + available -=3D size; + if (buffer->size >=3D stream->params.period_bytes) { + return_rx_buffer(stream, buffer); + break; } if (!available) { break; } } + if (!available) { + break; + } } } =20 @@ -1323,11 +1303,9 @@ static inline void virtio_snd_pcm_flush(VirtIOSoundP= CMStream *stream) (stream->info.direction =3D=3D VIRTIO_SND_D_OUTPUT) ? return_tx_bu= ffer : return_rx_buffer; =20 - WITH_QEMU_LOCK_GUARD(&stream->queue_mutex) { - while (!QSIMPLEQ_EMPTY(&stream->queue)) { - buffer =3D QSIMPLEQ_FIRST(&stream->queue); - cb(stream, buffer); - } + while (!QSIMPLEQ_EMPTY(&stream->queue)) { + buffer =3D QSIMPLEQ_FIRST(&stream->queue); + cb(stream, buffer); } } =20 @@ -1346,14 +1324,12 @@ static void virtio_snd_unrealize(DeviceState *dev) if (stream) { virtio_snd_process_cmdq(stream->s); virtio_snd_pcm_close(stream); - qemu_mutex_destroy(&stream->queue_mutex); g_free(stream); } } g_free(vsnd->pcm.streams); } g_free(vsnd->pcm.pcm_params); - qemu_mutex_destroy(&vsnd->cmdq_mutex); virtio_delete_queue(vsnd->queues[VIRTIO_SND_VQ_CONTROL]); virtio_delete_queue(vsnd->queues[VIRTIO_SND_VQ_EVENT]); virtio_delete_queue(vsnd->queues[VIRTIO_SND_VQ_TX]); @@ -1374,12 +1350,10 @@ static void virtio_snd_reset(VirtIODevice *vdev) */ g_assert(QSIMPLEQ_EMPTY(&vsnd->invalid)); =20 - WITH_QEMU_LOCK_GUARD(&vsnd->cmdq_mutex) { - while (!QTAILQ_EMPTY(&vsnd->cmdq)) { - cmd =3D QTAILQ_FIRST(&vsnd->cmdq); - QTAILQ_REMOVE(&vsnd->cmdq, cmd, next); - virtio_snd_ctrl_cmd_free(cmd); - } + while (!QTAILQ_EMPTY(&vsnd->cmdq)) { + cmd =3D QTAILQ_FIRST(&vsnd->cmdq); + QTAILQ_REMOVE(&vsnd->cmdq, cmd, next); + virtio_snd_ctrl_cmd_free(cmd); } } =20 diff --git a/include/hw/audio/virtio-snd.h b/include/hw/audio/virtio-snd.h index b60b098ccd8..884c475ffd9 100644 --- a/include/hw/audio/virtio-snd.h +++ b/include/hw/audio/virtio-snd.h @@ -143,7 +143,6 @@ struct VirtIOSoundPCMStream { SWVoiceIn *in; SWVoiceOut *out; } voice; - QemuMutex queue_mutex; bool active; uint32_t latency_bytes; QSIMPLEQ_HEAD(, VirtIOSoundPCMBuffer) queue; @@ -215,9 +214,7 @@ struct VirtIOSound { AudioBackend *audio_be; VMChangeStateEntry *vmstate; virtio_snd_config snd_conf; - QemuMutex cmdq_mutex; QTAILQ_HEAD(, virtio_snd_ctrl_command) cmdq; - bool processing_cmdq; /* * Convenience queue to keep track of invalid tx/rx queue messages ins= ide * the tx/rx callbacks. --=20 2.47.3 From nobody Mon Sep 28 01:12:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=mihalicyn.com ARC-Seal: i=1; a=rsa-sha256; t=1785744810; cv=none; d=zohomail.com; s=zohoarc; b=RNTs6p4jJl29AlrDtkIDtiJEepwEg8CXb/v6yP9/r2zTDqeMDPlnbosIKlzNRXkdGFUO2Er7qBMrlAPplH6d9EgvwU2cD0twxZeagCTq1aIzMoGTyJwihqqr/wkemRmrbwMRLmu/aLAdzOh7TvkWbYe2vY0Rwxut8oXiZHS2qEw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785744810; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=gaXNKce+6SBp9rMa7VVO5dpXFHXBN1RPswRUdk4bqXs=; b=TLc2xAEntQgPvOBveMIDJqXLu1NW1ofGqQdI5/eL4qfN0G32KHkqnhofGpRwpOtlwRLsQgEG3rlad7PI4NIZO6juawlx4k6M3RBXwUSFSfgvCb5KK4GAYGYDVV88HrYfoh/j6hDsUe2pvOxcbjHUYMciAs86yFUln01augwbXZE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785744810187459.2460073784563; Mon, 3 Aug 2026 01:13:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wqnmP-0001cU-2H; Mon, 03 Aug 2026 04:12:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wqnmN-0001bm-00 for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:11 -0400 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wqnmJ-0003fE-Hb for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:09 -0400 Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-496bb7cdf51so18092785e9.2 for ; Mon, 03 Aug 2026 01:12:07 -0700 (PDT) Received: from alex-laptop.lan (p200300cf574a7200803110ea947f174a.dip0.t-ipconnect.de. [2003:cf:574a:7200:8031:10ea:947f:174a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49807b98284sm209358435e9.12.2026.08.03.01.12.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 01:12:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mihalicyn.com; s=mihalicyn; t=1785744726; x=1786349526; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=gaXNKce+6SBp9rMa7VVO5dpXFHXBN1RPswRUdk4bqXs=; b=JfFGKboiXdXgaOS1A/Jmb4mKU6LOadguvcneUNFJfneQJx4gjpzSr/EbmWrJOa4eT/ oJy99kYEtFIueydIEKh1LJidCSN19N3bT+/nQbEHxrap/YszvyvvJBqF0JZ6H33yThKY W8fVVfF5qh86WnkGbm9GXtLRnXuOfHzhPg5sA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785744726; x=1786349526; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=gaXNKce+6SBp9rMa7VVO5dpXFHXBN1RPswRUdk4bqXs=; b=lEd7GtF5Rv4KWeX3vjJ6GWgnPRc87kiXGAhH3mn2VNWuVAI2sLY3QdDi1zOED94yca tblA0TvOHtuMHv9EbQZhZUBsJ5qyjUM0RogyM4VrQEL5PtbuthL6JTTzSDvSOJ0Ud/FR LL+2sWxb1GXcocCxEzyf1dYANZWXZTc+GYyE64QhbTA+RJUaIwEYX0RgHm6y4wA+MAZt nmCSCWozP1JxXra9vfrSSczV0UIwIv+5QrKN2L4trXlnwD2H+8wyTHIBHWH1kwZbimdY iO2C/tB2OEO+bHDqnQ0fVxBKqBR+AhBWs8Qdr//dbA4IZ4dpCelyGvQejuX2DcBOvOSJ 1HHw== X-Gm-Message-State: AOJu0YzVCZSkGl4eMtF6jP8SqFCKqvKJclqs0xUuzq1GFTEb0UIhietL pZTQLDGC2XOoo2MZxvbhRwG2kctLJjqmBJZU76J5tX1633/bcl+tMWWx17Wvgx+WYySu8cUZHMj dC1Hx X-Gm-Gg: AR+sD109XfC0nfCQtGozk4HuOrA6bffFoEZUTPlaTQ8aIqlrNR2IaSKCB7uyFp0CVig AMn4MYp0vlS7a4y7mL1o07sI3Y9dgL1B/vx6Ue9iJJkqc3S295N92xg7G/ZhnBI+Vxg9dI7+rF7 pKu5rxoYEBygrtPXGcA+qd91IH/MkIYdeNM4uh2SljhDluX5hw+EwvKR6RVtb+HVe0qL90RQCR8 NjnZKM53oX6f/3fjKAGoPdUHNihxOt1E6YpRYp1RsW9TLDVDNedeVD5NThM/EDKPGCFNq3NANYd HvkPcTFv7/n2KZbiNvaVqoTP7r48nnI27ylDgmiGgnRqO/PZzEjJTos2hGLdgKgqY5+PUbEkpqF +rftVVmnZ6RanKsYtjxD0I5EELHnONzkCZFr5avoLUYusO7IgMJ6CeUFGrnWT0vElSZmPn6sOuc 8EELqWiccP4kwJZ9OWDl+LKjeTgnezwaAiguPbxBKfrGTMZRDOx2KLmBKUuH4jvlLncZHeU+wf6 X3IEaASGmVNFmOI1OVbaj1n/juLgHlPjKFMSwWUfRvtbiGmc2iYxNbh0EfQ X-Received: by 2002:a05:600c:608e:b0:493:f140:c3fb with SMTP id 5b1f17b1804b1-4980c64a978mr245000195e9.7.1785744725877; Mon, 03 Aug 2026 01:12:05 -0700 (PDT) From: Alexander Mikhalitsyn To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , =?UTF-8?q?Volker=20R=C3=BCmelin?= , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Gerd Hoffmann , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , Alexander Mikhalitsyn , "Michael S. Tsirkin" , =?UTF-8?q?St=C3=A9phane=20Graber?= , Alexander Mikhalitsyn Subject: [PATCH v5 04/10] hw/audio/virtio-sound: allocate an array of streams Date: Mon, 3 Aug 2026 10:11:53 +0200 Message-ID: <20260803081159.91981-5-alexander@mihalicyn.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260803081159.91981-1-alexander@mihalicyn.com> References: <20260803081159.91981-1-alexander@mihalicyn.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::329; envelope-from=alexander@mihalicyn.com; helo=mail-wm1-x329.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @mihalicyn.com) X-ZM-MESSAGEID: 1785744810671158500 From: Volker R=C3=BCmelin It is much easier to migrate an array of structs than individual structs that are accessed via a pointer to a pointer to an array of pointers to struct. For this reason, allocate an array of streams in virtio_snd_realize() and initialise all stream variables that are constant at runtime immediately after allocation. This makes it easier to remove the virtio_snd_set_pcm_params() and virtio_snd_pcm_prepare() calls in the realisation phase and to migrate the audio streams of the virtio sound device after the next few patches. Signed-off-by: Volker R=C3=BCmelin [AM: there were too many conflicts, I did `git checkout --ours -- <.>` and then reimplemented the patch idea /AM] Signed-off-by: Alexander Mikhalitsyn Reviewed-by: Marc-Andr=C3=A9 Lureau --- v4: - fixed stream->info.channels_max value (problem was noticed by Manos Pitsidianakis) v3: As suggested by Marc-Andr=C3=A9 Lureau: - drop VirtIOSoundPCMStream's id field --- hw/audio/virtio-snd.c | 33 +++++++++++++++++++++------------ include/hw/audio/virtio-snd.h | 2 +- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index cbf739f8a7d..84083be8825 100644 --- a/hw/audio/virtio-snd.c +++ b/hw/audio/virtio-snd.c @@ -436,12 +436,9 @@ static uint32_t virtio_snd_pcm_prepare(VirtIOSound *s,= uint32_t stream_id) =20 stream =3D virtio_snd_pcm_get_stream(s, stream_id); if (stream =3D=3D NULL) { - stream =3D g_new0(VirtIOSoundPCMStream, 1); + stream =3D &s->streams[stream_id]; stream->active =3D false; - stream->id =3D stream_id; - stream->s =3D s; stream->latency_bytes =3D 0; - QSIMPLEQ_INIT(&stream->queue); =20 /* * stream_id >=3D s->snd_conf.streams was checked before so this is @@ -451,14 +448,7 @@ static uint32_t virtio_snd_pcm_prepare(VirtIOSound *s,= uint32_t stream_id) } =20 virtio_snd_get_qemu_audsettings(&as, params); - stream->info.direction =3D stream_id < s->snd_conf.streams / 2 + - (s->snd_conf.streams & 1) ? VIRTIO_SND_D_OUTPUT : VIRTIO_SND_D_INP= UT; - stream->info.hdr.hda_fn_nid =3D VIRTIO_SOUND_HDA_FN_NID; - stream->info.features =3D 0; - stream->info.channels_min =3D 1; stream->info.channels_max =3D as.nchannels; - stream->info.formats =3D supported_formats; - stream->info.rates =3D supported_rates; stream->params =3D *params; =20 stream->as =3D as; @@ -1056,6 +1046,24 @@ static void virtio_snd_realize(DeviceState *dev, Err= or **errp) vsnd->vmstate =3D qemu_add_vm_change_state_handler(virtio_snd_vm_state_change, vsnd); =20 + vsnd->streams =3D g_new0(VirtIOSoundPCMStream, vsnd->snd_conf.streams); + + for (uint32_t i =3D 0; i < vsnd->snd_conf.streams; i++) { + VirtIOSoundPCMStream *stream =3D &vsnd->streams[i]; + + stream->s =3D vsnd; + QSIMPLEQ_INIT(&stream->queue); + stream->info.hdr.hda_fn_nid =3D VIRTIO_SOUND_HDA_FN_NID; + stream->info.features =3D 0; + stream->info.formats =3D supported_formats; + stream->info.rates =3D supported_rates; + stream->info.direction =3D + i < vsnd->snd_conf.streams / 2 + (vsnd->snd_conf.streams & 1) + ? VIRTIO_SND_D_OUTPUT : VIRTIO_SND_D_INPUT; + stream->info.channels_min =3D 1; + stream->info.channels_max =3D 2; + } + vsnd->pcm.streams =3D g_new0(VirtIOSoundPCMStream *, vsnd->snd_conf.streams); vsnd->pcm.pcm_params =3D @@ -1324,12 +1332,13 @@ static void virtio_snd_unrealize(DeviceState *dev) if (stream) { virtio_snd_process_cmdq(stream->s); virtio_snd_pcm_close(stream); - g_free(stream); } } g_free(vsnd->pcm.streams); } g_free(vsnd->pcm.pcm_params); + g_free(vsnd->streams); + vsnd->streams =3D NULL; virtio_delete_queue(vsnd->queues[VIRTIO_SND_VQ_CONTROL]); virtio_delete_queue(vsnd->queues[VIRTIO_SND_VQ_EVENT]); virtio_delete_queue(vsnd->queues[VIRTIO_SND_VQ_TX]); diff --git a/include/hw/audio/virtio-snd.h b/include/hw/audio/virtio-snd.h index 884c475ffd9..97ffaae18be 100644 --- a/include/hw/audio/virtio-snd.h +++ b/include/hw/audio/virtio-snd.h @@ -136,7 +136,6 @@ struct VirtIOSoundPCM { struct VirtIOSoundPCMStream { virtio_snd_pcm_info info; virtio_snd_pcm_set_params params; - uint32_t id; VirtIOSound *s; audsettings as; union { @@ -211,6 +210,7 @@ struct VirtIOSound { VirtQueue *queues[VIRTIO_SND_VQ_MAX]; uint64_t features; VirtIOSoundPCM pcm; + VirtIOSoundPCMStream *streams; AudioBackend *audio_be; VMChangeStateEntry *vmstate; virtio_snd_config snd_conf; --=20 2.47.3 From nobody Mon Sep 28 01:12:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=mihalicyn.com ARC-Seal: i=1; a=rsa-sha256; t=1785744764; cv=none; d=zohomail.com; s=zohoarc; b=dgZzLDWrqMVI6LuY7R3Fwwi0In3+uPB3iPoTOEYWpKuunZIpP28GPZFD/aynazqFerME/O6GSRB3CTQbyke38aNIoQTJej9RrcQKLig7icGMSFvxbrl8C1OsF88Weq3ui8sCXfefcYRRpC8H/egoe4XAE5jXQQ5SC2mPGFm1cUk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785744764; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=AZRKMVtsLh2FlJrqbHcFTrJa0a2L1BmpZYhwv58PQLU=; b=ITOIKdF9BUEdcV5v0oR+O7xX/6nz9gYSYiMinPLbWfIYSOMRmLpUPIZIcuzcd6wj5bbkc8YcotCrJYBWnLVtZZc8YsjIUl9GvHSaFUeYiRyxIu3quP/MiJV+95dEgkFdlLCItjfVb4iycykigiDNBLyq7FouDeB/ba2R0NjyFM8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785744764082209.5087826180046; Mon, 3 Aug 2026 01:12:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wqnmN-0001cO-Tw; Mon, 03 Aug 2026 04:12:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wqnmN-0001bo-1B for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:11 -0400 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wqnmK-0003fL-Lc for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:10 -0400 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-49557167508so16093735e9.1 for ; Mon, 03 Aug 2026 01:12:08 -0700 (PDT) Received: from alex-laptop.lan (p200300cf574a7200803110ea947f174a.dip0.t-ipconnect.de. [2003:cf:574a:7200:8031:10ea:947f:174a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49807b98284sm209358435e9.12.2026.08.03.01.12.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 01:12:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mihalicyn.com; s=mihalicyn; t=1785744727; x=1786349527; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=AZRKMVtsLh2FlJrqbHcFTrJa0a2L1BmpZYhwv58PQLU=; b=edbqH8xROwDXDb+RUiiV3RdxZYs/L5I6ewwNDzHsaSrI8Kz7R+RmQX+63/0TzluhpM 4m3WCmliB1oq6tiVvct1FSOfymbetyQIp6DXRU+xgaqmws0PBsCt26KVhpYnRej+MGvT GNDnaCPqEuowuql/y3xGEYjtYcmgV4lixodko= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785744727; x=1786349527; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=AZRKMVtsLh2FlJrqbHcFTrJa0a2L1BmpZYhwv58PQLU=; b=rXqwZdC+7p25jQgBD9XYmay8hwel4ZTjw50goC90AdfhUbsViz6D1wCMHkN+j/5/5M YiLOiHuM7ZHl6XOTL3+zkYI5mnOaJltDc+Y4Gh699MS7GIxvohmsqEP+loWWC0diFBrE iSNog20bQ+AwR1yKGo16k+XuUtRgkJykP4YMkuo7BPRVfl/+ZanJWEEEw9ZckYKy9LYz Yrhq7LYHDA+/Z1qGV+yRQ4WSbZxPYxM8/AbH/YSyWEdfnVGPL+Vivc9FV91xlzeQBUfv voI+MKCdfidp6MBTl1KcE8as2B1pttQsbpoQiWWaAzlLPJ1CrUFlgIHFJMGcsafRbrTO zkmA== X-Gm-Message-State: AOJu0YxsFCbHhuA7d2YYKfy+DWnyHsiBz9nvOPTQRTJ/PRqbJZ0JMXR7 BBNDu7EBmpfajPMcgobmd7ce6p0uTpouiSDz05/qs3KtoGKXruSrljWQzXEsZgdS9JbHkZC+lJ3 B8oU6 X-Gm-Gg: AR+sD13nxUWlKZ18YghOk4x/NFHmGUlVXtZieRK/cp+XKAirrEhiXfbXU4RKxHVQL9i qWP6/yjt1sZhFuDrwplZUuXZk7JtlVi3z7f+x2eWUWDTU4wuPYRW8rX9Qex0HDM0SJc8b/IaplM w2PuoZXehSwGV9bTM8QP+aYSVhkzchGn4pvhS22z3svYIOQzkr4yNX5A8otWMcVBdCgfP438ro8 dXThlUGo81povHvJ7YlfaLQwXq1CKv+pGU8YfZ38meT6DgoLDk3UMLdWbjvZBml7ju1bm/K3YXb acbUlJDzEfJQK0zVoJklyw6ezqT54ktyyxTATFDjV9zRlozo44Sa6eh3updosKzM8CPBmjSF2ct YWdatezyPtoL7o/euGPPg39NtRRrp71CXkwUp+aJOnX1ZbUWFaC3x5lnxB/0+HlbQ/VAlAdQDdU LTwOjPeerZBTMYdBUKv7YXggVBNqeD/oJU9r2ZebfptstNW0xgIo0ucwCGdjKeSdNjQdPzzOj5n O5hoDD3ZcowVKnIBYMEBMKTB4rU5qzhXdbQs9pvUngcbLPuUg/b7+U/ytWPE9E0QiDjgz9h X-Received: by 2002:a05:600c:917:b0:496:c06b:9fb4 with SMTP id 5b1f17b1804b1-4980c65c487mr135716155e9.14.1785744727058; Mon, 03 Aug 2026 01:12:07 -0700 (PDT) From: Alexander Mikhalitsyn To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , =?UTF-8?q?Volker=20R=C3=BCmelin?= , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Gerd Hoffmann , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , Alexander Mikhalitsyn , "Michael S. Tsirkin" , =?UTF-8?q?St=C3=A9phane=20Graber?= , Alexander Mikhalitsyn Subject: [PATCH v5 05/10] hw/audio/virtio-sound: free all stream buffers on reset Date: Mon, 3 Aug 2026 10:11:54 +0200 Message-ID: <20260803081159.91981-6-alexander@mihalicyn.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260803081159.91981-1-alexander@mihalicyn.com> References: <20260803081159.91981-1-alexander@mihalicyn.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::336; envelope-from=alexander@mihalicyn.com; helo=mail-wm1-x336.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @mihalicyn.com) X-ZM-MESSAGEID: 1785744767056158500 From: Volker R=C3=BCmelin All remaining stream buffers in the stream queues must be freed after a reset. This is the initial state of the virtio-sound device. Signed-off-by: Volker R=C3=BCmelin [AM: trivial variable rename s -> vsnd] Signed-off-by: Alexander Mikhalitsyn Reviewed-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Manos Pitsidianakis --- v4: - reduced a scope of loop counter variable in virtio_snd_reset (as suggested by Manos Pitsidianakis) --- hw/audio/virtio-snd.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index 84083be8825..f9822fc609a 100644 --- a/hw/audio/virtio-snd.c +++ b/hw/audio/virtio-snd.c @@ -1364,6 +1364,16 @@ static void virtio_snd_reset(VirtIODevice *vdev) QTAILQ_REMOVE(&vsnd->cmdq, cmd, next); virtio_snd_ctrl_cmd_free(cmd); } + + for (uint32_t i =3D 0; i < vsnd->snd_conf.streams; i++) { + VirtIOSoundPCMStream *stream =3D &vsnd->streams[i]; + VirtIOSoundPCMBuffer *buffer; + + while ((buffer =3D QSIMPLEQ_FIRST(&stream->queue))) { + QSIMPLEQ_REMOVE_HEAD(&stream->queue, entry); + virtio_snd_pcm_buffer_free(buffer); + } + } } =20 static void virtio_snd_class_init(ObjectClass *klass, const void *data) --=20 2.47.3 From nobody Mon Sep 28 01:12:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=mihalicyn.com ARC-Seal: i=1; a=rsa-sha256; t=1785744794; cv=none; d=zohomail.com; s=zohoarc; b=K9nWniwnv+4uu9qSVKuS57lJ6CGl6WejNXe/1lolVR3BAHrT4WeY2DYfk79FHLcTUAZjmeVuTvcDpttV8ptpdMO0aR/BJopKvB1xqcigiBYr/Ru3WRmM3RINiSk1jCt3ftv4z2r3im+yfdGSDaQ9gS9Zq52XkBZ23KnJebOB6Zg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785744794; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=aghHjZ96emr+tjbq8TJHZIm2vM8aHDkko7Nbnok0WfY=; b=jfteRImVBz5g81W3RTbitGFP9cknjdCymqyJNC2Jy4TmTdEShuwNsMpLdWhW2ouT7dVJ7aczjz+h4JUGTABv3NGxh8CMzZW+TLQUoNooJajqRgBGUczp8QnAOjuVdYxr0IljhpwRrWlF0QtJKgpJOo15eu82HtgNX5NkZhPV4FE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785744794708587.0952120400029; Mon, 3 Aug 2026 01:13:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wqnmQ-0001db-RD; Mon, 03 Aug 2026 04:12:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wqnmO-0001cW-Di for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:12 -0400 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wqnmM-0003fY-Om for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:12 -0400 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-493b966dd74so9355765e9.3 for ; Mon, 03 Aug 2026 01:12:09 -0700 (PDT) Received: from alex-laptop.lan (p200300cf574a7200803110ea947f174a.dip0.t-ipconnect.de. [2003:cf:574a:7200:8031:10ea:947f:174a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49807b98284sm209358435e9.12.2026.08.03.01.12.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 01:12:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mihalicyn.com; s=mihalicyn; t=1785744728; x=1786349528; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=aghHjZ96emr+tjbq8TJHZIm2vM8aHDkko7Nbnok0WfY=; b=b3jMz873miILrqkNzzykqsnyLI8MQAHWPfA5uraBfRP/2nTd5vTPe7AdSsrQ/VzUy9 VGRtGOo6LT4InYvWrA4hFPjKGwJxyPt9YOe5jiyGEGWdtKe4EynOglCAQPJoYQgSyepp WhKEkns84RtNZH8iRm+cnTpLca+YRCUH7lpq4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785744728; x=1786349528; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=aghHjZ96emr+tjbq8TJHZIm2vM8aHDkko7Nbnok0WfY=; b=aFznC3HN53gFKHlKOl9e6a4QZPxjY4M64WLkQglJfdNYHeOhcpelmIv1rAEaKrz6cq qONd0661lKiyy291KD51ItqYurYPDNqho3sUsmZEqyx8cyF0HPrCCh8xvMzdBYNgMLo1 pWNGWAapuwZtx4tM5xsxeSuPw/MnEi04k0HU9VjtOzIS59KQPLNBdX5v+tNv7pIflW8T P2L+kmF3DcYnDl89YMQnTHXowUUNAtcHHs2948R+jPI9qg3d2kKe6UJ0iXtLOQ9Csb6g OkznAZNbWNaEjKGYEPGLqL3BBO2Bhaeae5L5YFHfUKTsxorLKTVEUIRJjQRhA12z4wO0 CphA== X-Gm-Message-State: AOJu0YzlIyzRrzIt28o61WWnPr6UWuSvIjvW195Le37DlDDmqOTDTPgN K7BjiXgwtmCYlGBNCxlRMhTqfoxkAO6CFCd/gi3ylZaf4GSK2GXGdf6c32KwbztrK2YwrQ6aNep vTluM X-Gm-Gg: AR+sD11+TjXuH0cl2uEcDAZdrNg1tRzosYoSdmwNZRPBcuq6rQsp9I9zcxViqr1SWUZ I4HDXonTcFIdObjx7uEk6NCfiwdme97KsP9Fd7ADXfRrX9p9oq7GLNRYbHTHxe9lAmqUvwvhMVX 5Kt5t6FfmT+J9gKuF2JhWjv+C1JyfJdYFUxMGJ4h/ODRx6wAP5/70GJoMwPw+RXYPZZxkxpTdK8 2wh4noHSGTob/SH6DeqvmqAnnMv6eMHjODY9fob16GU6Ns5BoHoJO2Zee3f63y/K1u/EYTvbIFZ eSHsBT3qcaSf/dmOAxDRXWxjhLdJ0b6rjXYoIE/3KZj/DrMjVnKvv2NWBNijF7bJKn6qYy8411p 4E6wEaIrXZl1m/19IZduATobIAJ22lbbB6PKvDbSH3OwzmA27pYbqqe85u2JmBjbHYfRub8jvcg XI/m58CXT4XbYBEWIOZ9qR9L9wqHUrfWEquOzMAFuH2wj/j8D+uaqeq4IduIO1iAQ1nLHrl3q+H G/nJz5E3NL69cq9hy6Mch099MqsSH9YLo2QlLJec0j1oPxf0a4ZwS6H+zuk X-Received: by 2002:a05:600c:4e86:b0:493:e460:1f6 with SMTP id 5b1f17b1804b1-4980c5ec7a1mr168089745e9.0.1785744728114; Mon, 03 Aug 2026 01:12:08 -0700 (PDT) From: Alexander Mikhalitsyn To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , =?UTF-8?q?Volker=20R=C3=BCmelin?= , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Gerd Hoffmann , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , Alexander Mikhalitsyn , "Michael S. Tsirkin" , =?UTF-8?q?St=C3=A9phane=20Graber?= , Alexander Mikhalitsyn Subject: [PATCH v5 06/10] hw/audio/virtio-sound: split out virtio_snd_pcm_start_stop() Date: Mon, 3 Aug 2026 10:11:55 +0200 Message-ID: <20260803081159.91981-7-alexander@mihalicyn.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260803081159.91981-1-alexander@mihalicyn.com> References: <20260803081159.91981-1-alexander@mihalicyn.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::331; envelope-from=alexander@mihalicyn.com; helo=mail-wm1-x331.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @mihalicyn.com) X-ZM-MESSAGEID: 1785744796540158500 From: Volker R=C3=BCmelin Split out virtio_snd_pcm_start_stop(). This is a preparation for the next patch so that it doesn't become too big. Signed-off-by: Volker R=C3=BCmelin [AM: there were too many conflicts, I did `git checkout --ours -- <.>` and then reimplemented the patch idea /AM] Signed-off-by: Alexander Mikhalitsyn Reviewed-by: Marc-Andr=C3=A9 Lureau --- v4: - minor formatting change in qemu_log_mask() - moved the trace_*() calls at the start of the function (as suggested by Manos Pitsidianakis) v3: - resurrected error_report(..) as suggested by Marc-Andr=C3=A9 Lureau --- hw/audio/virtio-snd.c | 58 ++++++++++++++++++++++++++++--------------- 1 file changed, 38 insertions(+), 20 deletions(-) diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index f9822fc609a..46026b8cffc 100644 --- a/hw/audio/virtio-snd.c +++ b/hw/audio/virtio-snd.c @@ -520,7 +520,43 @@ static void virtio_snd_handle_pcm_prepare(VirtIOSound = *s, } =20 /* - * Handles VIRTIO_SND_R_PCM_START. + * Starts/Stops a VirtIOSound card stream. + * Returns the response status code. (VIRTIO_SND_S_*). + * + * @s: VirtIOSound device + * @stream_id: stream id + * @start: whether to start or stop the stream + */ +static uint32_t virtio_snd_pcm_start_stop(VirtIOSound *s, + uint32_t stream_id, + bool start) +{ + VirtIOSoundPCMStream *stream; + + trace_virtio_snd_handle_pcm_start_stop(start ? "VIRTIO_SND_R_PCM_START= " : + "VIRTIO_SND_R_PCM_STOP", + stream_id); + + stream =3D virtio_snd_pcm_get_stream(s, stream_id); + if (!stream) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: Invalid stream id: %"PRIu32 "\n", + __func__, stream_id); + return cpu_to_le32(VIRTIO_SND_S_BAD_MSG); + } + + stream->active =3D start; + if (stream->info.direction =3D=3D VIRTIO_SND_D_OUTPUT) { + audio_be_set_active_out(s->audio_be, stream->voice.out, start); + } else { + audio_be_set_active_in(s->audio_be, stream->voice.in, start); + } + + return cpu_to_le32(VIRTIO_SND_S_OK); +} + +/* + * Handles VIRTIO_SND_R_PCM_START and VIRTIO_SND_R_PCM_STOP. * * @s: VirtIOSound device * @cmd: The request command queue element from VirtIOSound cmdq field @@ -530,7 +566,6 @@ static void virtio_snd_handle_pcm_start_stop(VirtIOSoun= d *s, virtio_snd_ctrl_command *cmd, bool start) { - VirtIOSoundPCMStream *stream; virtio_snd_pcm_hdr req; uint32_t stream_id; size_t msg_sz =3D iov_to_buf(cmd->elem->out_sg, @@ -548,24 +583,7 @@ static void virtio_snd_handle_pcm_start_stop(VirtIOSou= nd *s, } =20 stream_id =3D le32_to_cpu(req.stream_id); - cmd->resp.code =3D cpu_to_le32(VIRTIO_SND_S_OK); - trace_virtio_snd_handle_pcm_start_stop(start ? "VIRTIO_SND_R_PCM_START= " : - "VIRTIO_SND_R_PCM_STOP", stream_id); - - stream =3D virtio_snd_pcm_get_stream(s, stream_id); - if (stream) { - stream->active =3D start; - if (stream->info.direction =3D=3D VIRTIO_SND_D_OUTPUT) { - audio_be_set_active_out(s->audio_be, stream->voice.out, start); - } else { - audio_be_set_active_in(s->audio_be, stream->voice.in, start); - } - } else { - error_report("Invalid stream id: %"PRIu32, stream_id); - cmd->resp.code =3D cpu_to_le32(VIRTIO_SND_S_BAD_MSG); - return; - } - stream->active =3D start; + cmd->resp.code =3D virtio_snd_pcm_start_stop(s, stream_id, start); } =20 /* --=20 2.47.3 From nobody Mon Sep 28 01:12:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=mihalicyn.com ARC-Seal: i=1; a=rsa-sha256; t=1785744810; cv=none; d=zohomail.com; s=zohoarc; b=EY/07sApATD4LdgTrymYMlwNnUiov/Xl7qg00nC46cgzdkDFcGbbv+m+DiI9I63QUfCVUin9enikLtQJKbDjH8ym4rnQE3pcv2qXbJ7g0NIFxf2jfEexsyebpYzSxaRq6GUuTPk/1+BC0WWCY0eiJagMJYihZqon2cb4BcFMzf0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785744810; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=7mgM+VAolp7euvhJBouKeAa/FO6Fi0oMiowNk/qeDkw=; b=iBQmsABQbSkGFXgyy29UJS7tE7qhcJ4AtZTGLq4LDNJ+S31uTSN09gHGY7RRU5k7z7MlAAwKKNBgrdcxj1HhYNGytOf6S6/d8VCGD+vwkablvaBXo+NC7ah5SpqW1BuCxSZhtW4YRt5UCiumlq9grNoznarSPkgh/ShCFiN9lz8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785744810294947.6043065931956; Mon, 3 Aug 2026 01:13:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wqnmR-0001eE-9t; Mon, 03 Aug 2026 04:12:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wqnmP-0001cz-J4 for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:13 -0400 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wqnmN-0003fh-0B for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:13 -0400 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-472326ca506so2136980f8f.2 for ; Mon, 03 Aug 2026 01:12:10 -0700 (PDT) Received: from alex-laptop.lan (p200300cf574a7200803110ea947f174a.dip0.t-ipconnect.de. [2003:cf:574a:7200:8031:10ea:947f:174a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49807b98284sm209358435e9.12.2026.08.03.01.12.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 01:12:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mihalicyn.com; s=mihalicyn; t=1785744729; x=1786349529; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=7mgM+VAolp7euvhJBouKeAa/FO6Fi0oMiowNk/qeDkw=; b=jgUQ4CRmWalwHt2sKO/TuhlgmOjKwOIhzbpM+btwyshkI/Bw0rMs1lDPuvA0YpIb2R WqIFH0XIUgQM3QhhZQqSSCjzDB0QQtkxHdk3MuRTOd0a9LtRFEth/VdLsN7OHlYvpDDH TogvWYbD9GUTa1yJfCOPc3j8K2L/kAgMXWpBE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785744729; x=1786349529; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=7mgM+VAolp7euvhJBouKeAa/FO6Fi0oMiowNk/qeDkw=; b=Qu1oK6D/bVcBlmusqansVvILP8Ybhg7rz/7kq7QXlvl/SFE2OWn3C6FgMrP4a60Nlq 788d3lkjsmU6U9LnmGw1BPaT9GSXPdNJgxEUapZI9afslPW3Q3ut4CpiyJrexfusItVJ IIKiVo7kgiog6VaD3PmEs9J6mH2deE1R/GiCUCHeoRK4uuJLczQIgBNJH7DkRLXtRrFx Kt2qQPgu9ChN7y857dFqzCmydAQmNw+h57PhFg3DyAIX0s64DpqFX3LA0QrO+7rt6rz8 WfVYskGw0hCbD8gSUaWMPgNPmHqJ9ycOiHAlMHeDrX7HmGXriVS52+k5eHh3eMBPJQ/a xuXg== X-Gm-Message-State: AOJu0YwiSIdzW18BZl3Mpyl2B8p5n6AzWLR1JBu19zaeWS0jMJV48NUu BEB2E39d5rk6VIUwxSWLqoi/hd9HreQM2OeojByR+tDQnp18vyk4LpLkL9x09HHRWU2YF1R1qQg aPQzx X-Gm-Gg: AR+sD12y4DwtkPWuKEmY0ix3mRrfz/4QKLXYCFjGFz+LILotltK4m9j4GFnL+oGT1an NCck9AfuwNacGu472nNEBla+SeFop71RdNrdI+vKbljBrbxYSm6wwC05+BItDL8RAA9/CcVv0Er 9QAW7hw/hHRvcaVnJvb7aLvAmfpJz4rdFfvnQF8PsZIXiXW+b2jXs+s3uJpA0ZaYvouUpAYWXAd +u+Oq+/Je9Ydl2RVXaO9C+r/gDAw1dt7AAX/rWgdBjDphKJVV2Gq5XRUSuslPbubtMqw694edir ie/P/g3BQn8wfzT3AGf8OuAXHLBBhLEPqY7EndoX/fi49kdOfdHVxDsWDX2+fn1TWk9lv8DIJly le+iKKh1NEsdwCuOBrxaU6dmRxf6wYhoW2ECwnxcFMxXOTBmcAlXbvTxtKayHIdog4nJ41Cu3Qb SKpHsaje/lrCEzzcmyr/sDL92Im/8RmmeceyNiZ2xRLpUHhh+9YLoNX5r5MvHJkUWfzsOHp8f1r PN6DwXWocl0YINepuXpaua25TWAqwlhPzOEfkpisE+cMua7g1PxRWGT7DwY X-Received: by 2002:a05:600d:6451:20b0:495:4d5c:903e with SMTP id 5b1f17b1804b1-4980c66d950mr140771445e9.7.1785744729314; Mon, 03 Aug 2026 01:12:09 -0700 (PDT) From: Alexander Mikhalitsyn To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , =?UTF-8?q?Volker=20R=C3=BCmelin?= , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Gerd Hoffmann , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , Alexander Mikhalitsyn , "Michael S. Tsirkin" , =?UTF-8?q?St=C3=A9phane=20Graber?= , Alexander Mikhalitsyn Subject: [PATCH v5 07/10] hw/audio/virtio-sound: add stream state variable Date: Mon, 3 Aug 2026 10:11:56 +0200 Message-ID: <20260803081159.91981-8-alexander@mihalicyn.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260803081159.91981-1-alexander@mihalicyn.com> References: <20260803081159.91981-1-alexander@mihalicyn.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::42a; envelope-from=alexander@mihalicyn.com; helo=mail-wr1-x42a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @mihalicyn.com) X-ZM-MESSAGEID: 1785744812649158500 From: Volker R=C3=BCmelin So far, only rudimentary checks have been made to ensure that the guest only performs state transitions described in virtio-v1.2-csd01 5.14.6.6.1 PCM Command Lifecycle. While this is not a Device Requirement, let's add a state variable per audio stream and check all state transitions. Because only permitted state transitions are now possible, only one copy of the audio stream parameters is required and these do not need to be initialised with default values. The state variable will also make it easier to restore the audio stream after migration. Signed-off-by: Volker R=C3=BCmelin [AM: there were too many conflicts, I did `git checkout --ours -- <.>` and then reimplemented the patch idea /AM] Signed-off-by: Alexander Mikhalitsyn Reviewed-by: Manos Pitsidianakis --- v5: - checkpatch fix v4: - switched to enum virtio_snd_pcm_state (suggested by Manos Pitsidianakis) - call virtio_snd_pcm_close() when switching to VSND_PCMSTREAM_STATE_PARAMS_SET and VSND_PCMSTREAM_STATE_RELEASED states - added virtio_error() in case when stream->state is unexpected - fixed an error message text in virtio_snd_set_pcm_params (suggestions from Marc-Andr=C3=A9 Lureau) v3: - explicitly call virtio_snd_pcm_close() from unrealize - remove a call to virtio_snd_pcm_flush() from virtio_snd_pcm_close() [ ^ this was my rebase mistake ] --- hw/audio/virtio-snd.c | 213 ++++++++++++++++++++-------------- include/hw/audio/virtio-snd.h | 17 +-- 2 files changed, 124 insertions(+), 106 deletions(-) diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index 46026b8cffc..1c218569cfd 100644 --- a/hw/audio/virtio-snd.c +++ b/hw/audio/virtio-snd.c @@ -30,11 +30,26 @@ #define VIRTIO_SOUND_CHMAP_DEFAULT 0 #define VIRTIO_SOUND_HDA_FN_NID 0 =20 +typedef enum virtio_snd_pcm_state { + VIRTIO_SND_PCM_STATE_UNINIT =3D 0, + VIRTIO_SND_PCM_STATE_PARAMS_SET, + VIRTIO_SND_PCM_STATE_PREPARED, + VIRTIO_SND_PCM_STATE_STARTED, + VIRTIO_SND_PCM_STATE_STOPPED, + VIRTIO_SND_PCM_STATE_RELEASED, +} virtio_snd_pcm_state; + +static inline bool virtio_snd_pcm_state_prepared(virtio_snd_pcm_state s) +{ + return s > VIRTIO_SND_PCM_STATE_PARAMS_SET && + s < VIRTIO_SND_PCM_STATE_RELEASED; +} + static void virtio_snd_pcm_out_cb(void *data, int available); static void virtio_snd_process_cmdq(VirtIOSound *s); static void virtio_snd_pcm_flush(VirtIOSoundPCMStream *stream); +static void virtio_snd_pcm_close(VirtIOSoundPCMStream *stream); static void virtio_snd_pcm_in_cb(void *data, int available); -static void virtio_snd_unrealize(DeviceState *dev); =20 static uint32_t supported_formats =3D BIT(VIRTIO_SND_PCM_FMT_S8) | BIT(VIRTIO_SND_PCM_FMT_U8) @@ -129,7 +144,7 @@ static VirtIOSoundPCMStream *virtio_snd_pcm_get_stream(= VirtIOSound *s, uint32_t stream_id) { return stream_id >=3D s->snd_conf.streams ? NULL : - s->pcm.streams[stream_id]; + &s->streams[stream_id]; } =20 /* @@ -141,8 +156,8 @@ static VirtIOSoundPCMStream *virtio_snd_pcm_get_stream(= VirtIOSound *s, static virtio_snd_pcm_set_params *virtio_snd_pcm_get_params(VirtIOSound *s, uint32_t strea= m_id) { - return stream_id >=3D s->snd_conf.streams ? NULL - : &s->pcm.pcm_params[stream_id]; + return stream_id >=3D s->snd_conf.streams ? NULL : + &s->streams[stream_id].params; } =20 /* @@ -245,11 +260,10 @@ static void virtio_snd_handle_pcm_info(VirtIOSound *s, =20 /* * Set the given stream params. - * Called by both virtio_snd_handle_pcm_set_params and during device - * initialization. * Returns the response status code. (VIRTIO_SND_S_*). * * @s: VirtIOSound device + * @stream_id: stream id * @params: The PCM params as defined in the virtio specification */ static @@ -257,14 +271,27 @@ uint32_t virtio_snd_set_pcm_params(VirtIOSound *s, uint32_t stream_id, virtio_snd_pcm_set_params *params) { + VirtIOSoundPCMStream *stream; virtio_snd_pcm_set_params *st_params; =20 - if (stream_id >=3D s->snd_conf.streams || s->pcm.pcm_params =3D=3D NUL= L) { - virtio_error(VIRTIO_DEVICE(s), "Streams have not been initialized.= \n"); + stream =3D virtio_snd_pcm_get_stream(s, stream_id); + if (!stream) { + virtio_error(VIRTIO_DEVICE(s), "invalid stream id: %"PRIu32, + stream_id); return cpu_to_le32(VIRTIO_SND_S_BAD_MSG); } =20 - st_params =3D virtio_snd_pcm_get_params(s, stream_id); + switch (stream->state) { + case VIRTIO_SND_PCM_STATE_UNINIT: + case VIRTIO_SND_PCM_STATE_PARAMS_SET: + case VIRTIO_SND_PCM_STATE_PREPARED: + case VIRTIO_SND_PCM_STATE_RELEASED: + break; + default: + virtio_error(VIRTIO_DEVICE(s), "unexpected stream state: %"PRIu32, + stream->state); + return cpu_to_le32(VIRTIO_SND_S_BAD_MSG); + } =20 if (params->channels < 1 || params->channels > AUDIO_MAX_CHANNELS) { error_report("Number of channels is not supported."); @@ -281,6 +308,8 @@ uint32_t virtio_snd_set_pcm_params(VirtIOSound *s, return cpu_to_le32(VIRTIO_SND_S_NOT_SUPP); } =20 + st_params =3D virtio_snd_pcm_get_params(s, stream_id); + st_params->buffer_bytes =3D le32_to_cpu(params->buffer_bytes); st_params->period_bytes =3D le32_to_cpu(params->period_bytes); st_params->features =3D le32_to_cpu(params->features); @@ -289,6 +318,15 @@ uint32_t virtio_snd_set_pcm_params(VirtIOSound *s, st_params->format =3D params->format; st_params->rate =3D params->rate; =20 + if (virtio_snd_pcm_state_prepared(stream->state)) { + /* implicit VIRTIO_SND_R_PCM_RELEASE */ + virtio_snd_pcm_flush(stream); + } + + virtio_snd_pcm_close(stream); + + stream->state =3D VIRTIO_SND_PCM_STATE_PARAMS_SET; + return cpu_to_le32(VIRTIO_SND_S_OK); } =20 @@ -398,15 +436,12 @@ static void virtio_snd_get_qemu_audsettings(audsettin= gs *as, */ static void virtio_snd_pcm_close(VirtIOSoundPCMStream *stream) { - if (stream) { - virtio_snd_pcm_flush(stream); - if (stream->info.direction =3D=3D VIRTIO_SND_D_OUTPUT) { - audio_be_close_out(stream->s->audio_be, stream->voice.out); - stream->voice.out =3D NULL; - } else if (stream->info.direction =3D=3D VIRTIO_SND_D_INPUT) { - audio_be_close_in(stream->s->audio_be, stream->voice.in); - stream->voice.in =3D NULL; - } + if (stream->info.direction =3D=3D VIRTIO_SND_D_OUTPUT) { + audio_be_close_out(stream->s->audio_be, stream->voice.out); + stream->voice.out =3D NULL; + } else if (stream->info.direction =3D=3D VIRTIO_SND_D_INPUT) { + audio_be_close_in(stream->s->audio_be, stream->voice.in); + stream->voice.in =3D NULL; } } =20 @@ -423,33 +458,26 @@ static uint32_t virtio_snd_pcm_prepare(VirtIOSound *s= , uint32_t stream_id) virtio_snd_pcm_set_params *params; VirtIOSoundPCMStream *stream; =20 - if (s->pcm.streams =3D=3D NULL || - s->pcm.pcm_params =3D=3D NULL || - stream_id >=3D s->snd_conf.streams) { + stream =3D virtio_snd_pcm_get_stream(s, stream_id); + if (!stream) { return cpu_to_le32(VIRTIO_SND_S_BAD_MSG); } =20 - params =3D virtio_snd_pcm_get_params(s, stream_id); - if (params =3D=3D NULL) { + switch (stream->state) { + case VIRTIO_SND_PCM_STATE_PARAMS_SET: + case VIRTIO_SND_PCM_STATE_PREPARED: + case VIRTIO_SND_PCM_STATE_RELEASED: + break; + default: + virtio_error(VIRTIO_DEVICE(s), "unexpected stream state: %"PRIu32, + stream->state); return cpu_to_le32(VIRTIO_SND_S_BAD_MSG); } =20 - stream =3D virtio_snd_pcm_get_stream(s, stream_id); - if (stream =3D=3D NULL) { - stream =3D &s->streams[stream_id]; - stream->active =3D false; - stream->latency_bytes =3D 0; - - /* - * stream_id >=3D s->snd_conf.streams was checked before so this is - * in-bounds - */ - s->pcm.streams[stream_id] =3D stream; - } + params =3D virtio_snd_pcm_get_params(s, stream_id); =20 virtio_snd_get_qemu_audsettings(&as, params); stream->info.channels_max =3D as.nchannels; - stream->params =3D *params; =20 stream->as =3D as; =20 @@ -471,6 +499,8 @@ static uint32_t virtio_snd_pcm_prepare(VirtIOSound *s, = uint32_t stream_id) audio_be_set_volume_in_lr(s->audio_be, stream->voice.in, 0, 255, 2= 55); } =20 + stream->state =3D VIRTIO_SND_PCM_STATE_PREPARED; + return cpu_to_le32(VIRTIO_SND_S_OK); } =20 @@ -545,7 +575,31 @@ static uint32_t virtio_snd_pcm_start_stop(VirtIOSound = *s, return cpu_to_le32(VIRTIO_SND_S_BAD_MSG); } =20 - stream->active =3D start; + if (start) { + switch (stream->state) { + case VIRTIO_SND_PCM_STATE_PREPARED: + case VIRTIO_SND_PCM_STATE_STOPPED: + break; + default: + virtio_error(VIRTIO_DEVICE(s), "unexpected stream state: %"PRI= u32, + stream->state); + return cpu_to_le32(VIRTIO_SND_S_BAD_MSG); + } + + stream->state =3D VIRTIO_SND_PCM_STATE_STARTED; + } else { + switch (stream->state) { + case VIRTIO_SND_PCM_STATE_STARTED: + break; + default: + virtio_error(VIRTIO_DEVICE(s), "unexpected stream state: %"PRI= u32, + stream->state); + return cpu_to_le32(VIRTIO_SND_S_BAD_MSG); + } + + stream->state =3D VIRTIO_SND_PCM_STATE_STOPPED; + } + if (stream->info.direction =3D=3D VIRTIO_SND_D_OUTPUT) { audio_be_set_active_out(s->audio_be, stream->voice.out, start); } else { @@ -639,6 +693,17 @@ static void virtio_snd_handle_pcm_release(VirtIOSound = *s, return; } =20 + switch (stream->state) { + case VIRTIO_SND_PCM_STATE_PREPARED: + case VIRTIO_SND_PCM_STATE_STOPPED: + break; + default: + virtio_error(VIRTIO_DEVICE(s), "unexpected stream state: %"PRIu32, + stream->state); + cmd->resp.code =3D cpu_to_le32(VIRTIO_SND_S_BAD_MSG); + return; + } + if (virtio_snd_pcm_get_io_msgs_count(stream)) { /* * virtio-v1.2-csd01, 5.14.6.6.5.1, @@ -653,6 +718,10 @@ static void virtio_snd_handle_pcm_release(VirtIOSound = *s, virtio_snd_pcm_flush(stream); } =20 + virtio_snd_pcm_close(stream); + + stream->state =3D VIRTIO_SND_PCM_STATE_RELEASED; + cmd->resp.code =3D cpu_to_le32(VIRTIO_SND_S_OK); } =20 @@ -876,12 +945,11 @@ static void virtio_snd_handle_tx_xfer(VirtIODevice *v= dev, VirtQueue *vq) size =3D iov_size(elem->out_sg, elem->out_num) - msg_sz; stream_id =3D le32_to_cpu(hdr.stream_id); =20 - if (stream_id >=3D vsnd->snd_conf.streams - || vsnd->pcm.streams[stream_id] =3D=3D NULL) { + if (stream_id >=3D vsnd->snd_conf.streams) { goto tx_err; } =20 - stream =3D vsnd->pcm.streams[stream_id]; + stream =3D &vsnd->streams[stream_id]; if (stream->info.direction !=3D VIRTIO_SND_D_OUTPUT) { goto tx_err; } @@ -959,15 +1027,13 @@ static void virtio_snd_handle_rx_xfer(VirtIODevice *= vdev, VirtQueue *vq) } stream_id =3D le32_to_cpu(hdr.stream_id); =20 - if (stream_id >=3D vsnd->snd_conf.streams - || !vsnd->pcm.streams[stream_id]) { + if (stream_id >=3D vsnd->snd_conf.streams) { goto rx_err; } =20 - stream =3D vsnd->pcm.streams[stream_id]; + stream =3D &vsnd->streams[stream_id]; size =3D iov_size(elem->in_sg, elem->in_num); - if (stream =3D=3D NULL - || stream->info.direction !=3D VIRTIO_SND_D_INPUT + if (stream->info.direction !=3D VIRTIO_SND_D_INPUT || size < sizeof(virtio_snd_pcm_status)) { goto rx_err; } @@ -1031,8 +1097,6 @@ static void virtio_snd_realize(DeviceState *dev, Erro= r **errp) ERRP_GUARD(); VirtIOSound *vsnd =3D VIRTIO_SND(dev); VirtIODevice *vdev =3D VIRTIO_DEVICE(dev); - virtio_snd_pcm_set_params default_params =3D { 0 }; - uint32_t status; =20 trace_virtio_snd_realize(vsnd); =20 @@ -1069,6 +1133,7 @@ static void virtio_snd_realize(DeviceState *dev, Erro= r **errp) for (uint32_t i =3D 0; i < vsnd->snd_conf.streams; i++) { VirtIOSoundPCMStream *stream =3D &vsnd->streams[i]; =20 + stream->state =3D VIRTIO_SND_PCM_STATE_UNINIT; stream->s =3D vsnd; QSIMPLEQ_INIT(&stream->queue); stream->info.hdr.hda_fn_nid =3D VIRTIO_SOUND_HDA_FN_NID; @@ -1082,21 +1147,9 @@ static void virtio_snd_realize(DeviceState *dev, Err= or **errp) stream->info.channels_max =3D 2; } =20 - vsnd->pcm.streams =3D - g_new0(VirtIOSoundPCMStream *, vsnd->snd_conf.streams); - vsnd->pcm.pcm_params =3D - g_new0(virtio_snd_pcm_set_params, vsnd->snd_conf.streams); - virtio_init(vdev, VIRTIO_ID_SOUND, sizeof(virtio_snd_config)); virtio_add_feature(&vsnd->features, VIRTIO_F_VERSION_1); =20 - /* set default params for all streams */ - default_params.features =3D 0; - default_params.buffer_bytes =3D cpu_to_le32(8192); - default_params.period_bytes =3D cpu_to_le32(2048); - default_params.channels =3D 2; - default_params.format =3D VIRTIO_SND_PCM_FMT_S16; - default_params.rate =3D VIRTIO_SND_PCM_RATE_48000; vsnd->queues[VIRTIO_SND_VQ_CONTROL] =3D virtio_add_queue(vdev, 64, virtio_snd_handle_ctrl); vsnd->queues[VIRTIO_SND_VQ_EVENT] =3D @@ -1107,28 +1160,6 @@ static void virtio_snd_realize(DeviceState *dev, Err= or **errp) virtio_add_queue(vdev, 64, virtio_snd_handle_rx_xfer); QTAILQ_INIT(&vsnd->cmdq); QSIMPLEQ_INIT(&vsnd->invalid); - - for (uint32_t i =3D 0; i < vsnd->snd_conf.streams; i++) { - status =3D virtio_snd_set_pcm_params(vsnd, i, &default_params); - if (status !=3D cpu_to_le32(VIRTIO_SND_S_OK)) { - error_setg(errp, - "Can't initialize stream params, device responded w= ith %s.", - print_code(status)); - goto error_cleanup; - } - status =3D virtio_snd_pcm_prepare(vsnd, i); - if (status !=3D cpu_to_le32(VIRTIO_SND_S_OK)) { - error_setg(errp, - "Can't prepare streams, device responded with %s.", - print_code(status)); - goto error_cleanup; - } - } - - return; - -error_cleanup: - virtio_snd_unrealize(dev); } =20 static inline void update_latency(VirtIOSoundPCMStream *s, size_t used) @@ -1177,7 +1208,7 @@ static void virtio_snd_pcm_out_cb(void *data, int ava= ilable) if (!virtio_queue_ready(buffer->vq)) { return; } - if (!stream->active) { + if (stream->state !=3D VIRTIO_SND_PCM_STATE_STARTED) { /* Stream has stopped, so do not perform audio_be_write. */ return_tx_buffer(stream, buffer); continue; @@ -1271,7 +1302,7 @@ static void virtio_snd_pcm_in_cb(void *data, int avai= lable) if (!virtio_queue_ready(buffer->vq)) { return; } - if (!stream->active) { + if (stream->state !=3D VIRTIO_SND_PCM_STATE_STARTED) { /* Stream has stopped, so do not perform audio_be_read. */ return_rx_buffer(stream, buffer); continue; @@ -1344,17 +1375,16 @@ static void virtio_snd_unrealize(DeviceState *dev) qemu_del_vm_change_state_handler(vsnd->vmstate); trace_virtio_snd_unrealize(vsnd); =20 - if (vsnd->pcm.streams) { + if (vsnd->streams) { + virtio_snd_process_cmdq(vsnd); for (uint32_t i =3D 0; i < vsnd->snd_conf.streams; i++) { - stream =3D vsnd->pcm.streams[i]; - if (stream) { - virtio_snd_process_cmdq(stream->s); - virtio_snd_pcm_close(stream); + stream =3D &vsnd->streams[i]; + if (virtio_snd_pcm_state_prepared(stream->state)) { + virtio_snd_pcm_flush(stream); } + virtio_snd_pcm_close(stream); } - g_free(vsnd->pcm.streams); } - g_free(vsnd->pcm.pcm_params); g_free(vsnd->streams); vsnd->streams =3D NULL; virtio_delete_queue(vsnd->queues[VIRTIO_SND_VQ_CONTROL]); @@ -1387,6 +1417,9 @@ static void virtio_snd_reset(VirtIODevice *vdev) VirtIOSoundPCMStream *stream =3D &vsnd->streams[i]; VirtIOSoundPCMBuffer *buffer; =20 + virtio_snd_pcm_close(stream); + stream->state =3D VIRTIO_SND_PCM_STATE_UNINIT; + while ((buffer =3D QSIMPLEQ_FIRST(&stream->queue))) { QSIMPLEQ_REMOVE_HEAD(&stream->queue, entry); virtio_snd_pcm_buffer_free(buffer); diff --git a/include/hw/audio/virtio-snd.h b/include/hw/audio/virtio-snd.h index 97ffaae18be..85d5d7c8619 100644 --- a/include/hw/audio/virtio-snd.h +++ b/include/hw/audio/virtio-snd.h @@ -75,8 +75,6 @@ typedef struct VirtIOSoundPCMStream VirtIOSoundPCMStream; =20 typedef struct virtio_snd_ctrl_command virtio_snd_ctrl_command; =20 -typedef struct VirtIOSoundPCM VirtIOSoundPCM; - typedef struct VirtIOSoundPCMBuffer VirtIOSoundPCMBuffer; =20 /* @@ -121,28 +119,16 @@ struct VirtIOSoundPCMBuffer { uint8_t data[]; }; =20 -struct VirtIOSoundPCM { - /* - * PCM parameters are a separate field instead of a VirtIOSoundPCMStre= am - * field, because the operation of PCM control requests is first - * VIRTIO_SND_R_PCM_SET_PARAMS and then VIRTIO_SND_R_PCM_PREPARE; this - * means that some times we get parameters without having an allocated - * stream yet. - */ - virtio_snd_pcm_set_params *pcm_params; - VirtIOSoundPCMStream **streams; -}; - struct VirtIOSoundPCMStream { virtio_snd_pcm_info info; virtio_snd_pcm_set_params params; + uint32_t state; VirtIOSound *s; audsettings as; union { SWVoiceIn *in; SWVoiceOut *out; } voice; - bool active; uint32_t latency_bytes; QSIMPLEQ_HEAD(, VirtIOSoundPCMBuffer) queue; }; @@ -209,7 +195,6 @@ struct VirtIOSound { =20 VirtQueue *queues[VIRTIO_SND_VQ_MAX]; uint64_t features; - VirtIOSoundPCM pcm; VirtIOSoundPCMStream *streams; AudioBackend *audio_be; VMChangeStateEntry *vmstate; --=20 2.47.3 From nobody Mon Sep 28 01:12:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=mihalicyn.com ARC-Seal: i=1; a=rsa-sha256; t=1785744831; cv=none; d=zohomail.com; s=zohoarc; b=O2OHoi2aBYRWpSqf72AWdlQHUCYnaxQaNXAA8NMIzRGR/5zZbvWBnIe6jFBalWa+dbkC6/yWpa1qGCgBQJf5akHZsaVdJG//J2Ha3Xr7s0j8c/t+nB3ulljhz+i1MzCK1QsgWmxTxnWOAKOmnuMu9ip07pKM8FqlHTuiW/DOvfw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785744831; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=3r2H3SFIP78dGg+cFa1xx0QpDLzPKisuuGstXTSGwhc=; b=MusDqLYJq+eEOaV/ex4gYelyj/UI5M4SluSmaZjhLnhy9ppeJrqH8S1v+h6FlBa7nIovkgt3wqN0cC3wmQgtMWNJ0ivxGbyVXxVpR4CvILYJDe+RS/3tqm03hq8ZDgRfbQnMhfJOcCWIJbQtRYAvGuV5vXD5R3TidD0SZk4tB5E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785744831292386.3050226040591; Mon, 3 Aug 2026 01:13:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wqnmT-0001ek-FD; Mon, 03 Aug 2026 04:12:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wqnmP-0001d0-K8 for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:13 -0400 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wqnmN-0003fy-MR for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:13 -0400 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-49545ba3d4eso7497855e9.3 for ; Mon, 03 Aug 2026 01:12:11 -0700 (PDT) Received: from alex-laptop.lan (p200300cf574a7200803110ea947f174a.dip0.t-ipconnect.de. [2003:cf:574a:7200:8031:10ea:947f:174a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49807b98284sm209358435e9.12.2026.08.03.01.12.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 01:12:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mihalicyn.com; s=mihalicyn; t=1785744730; x=1786349530; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=3r2H3SFIP78dGg+cFa1xx0QpDLzPKisuuGstXTSGwhc=; b=WUA0SMDgG5k8RYsRH+/t2qvZE4dp2Eb86mGfHabM8ZWjHo2/ini0FSW11wct+usht7 fSy9w4msS9jgntZQByTd3xth+Z6b+eHu1V98xjqIFViZ2k2b0YzRazf0GMAQqY8jjYJ4 PcVoxEAniYY2wXa65vsBs7UT1GVsAer4wMeas= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785744730; x=1786349530; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=3r2H3SFIP78dGg+cFa1xx0QpDLzPKisuuGstXTSGwhc=; b=UXunupKEx/AB271Ob2GxeS2mEC9ZiFr5GsRAYBS18nQ9THsPhFbDc+YzQKuSpWEVnu zx50qx70oipT/Tot/s7f9CDLSqlBT2ALcQJTvOtqr6P5XIAgqPoZf4YTgDvXUyOHnRsO guwhudHSaxXvUWp3m36PvUOv9Bly1gGhW51VQ+0fNFiTF+0KCtKRdrUPDZLZjus5SAEO jiJ2rqxc7+X2tWT/WfnGATMqn947qN9BpgXsmxj0UmUKdxwmYmdY2jR8gM8u2CkV7I72 VLYbEK3fneFVhNsN2ThhwmGOGHhsDEpR83hveSk1LVEJDjAVuWG14saLfJO4qhvGLFHz R7lg== X-Gm-Message-State: AOJu0Yw8gWr6AkYtlNEZx7yohBJYJfDJcKL+Y7c+ODjh6Kt6MnGiAVO0 hzjJFxmtvkqhIYM8Qyh8d6aZW6Ej+B6Ui2Z4yYFh/tbp3A4/9xCs8ISBW6B6gtHGuXDTimi+tl9 eT+Xy X-Gm-Gg: AR+sD10s5OIrZwkUvRyJ1e6b+gMXUm99SYyn46tL65cAneLStEEy2yip7rd3lmgsQ7e cg9/t7FXsV1jHM56ISPt40Xm4xsBFtuohAIeYdRvADnjZMF0gghSfFwLTLQoAB23F2x8dJyRY3I LN57aO0lxdJEfzDstX4igHljfKjVrjMs8VLOUBO2/VhxsGLslah/LAqQjsP9Pu1DEx+eBoodN4o iZ2k9c88gcYwXBqTc//GPP2kq/0JlwnJQzDE71eYqfp0ONvXv++66qr/rLHPDQ4/tMfRMD/M05m Tv5wrk/gZsNGajOOyIwrjuHxKTi7amOoWwjIIxTdlvS1HtP+vbO0WFmpH0kirV5AhTULvsgF9eQ YmW4WzwGDRGa+R5XjqK4JCQrV96Xndy8hYJvUzAL/2rIZJCCn2LNEYuQx26fXOVKwCIzNr08Kz+ wFqZIilpsgehZ+bFAPyrYeoLUqpBSNtKSPqzLn84a8mkNDm+iLgrUxGBZU+ea2mp+ZwTKAwJNEe hPMsHGIbUxksipymHtiRQzKCgzPyT7PiKDHyhIYpZSU0dSOvWWKpdaz23I8 X-Received: by 2002:a05:600c:3045:b0:495:7a5a:d96c with SMTP id 5b1f17b1804b1-4980c696b4amr118814185e9.18.1785744730379; Mon, 03 Aug 2026 01:12:10 -0700 (PDT) From: Alexander Mikhalitsyn To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , =?UTF-8?q?Volker=20R=C3=BCmelin?= , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Gerd Hoffmann , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , Alexander Mikhalitsyn , "Michael S. Tsirkin" , =?UTF-8?q?St=C3=A9phane=20Graber?= , Alexander Mikhalitsyn Subject: [PATCH v5 08/10] hw/audio/virtio-sound: introduce virtio_snd_pcm_open() Date: Mon, 3 Aug 2026 10:11:57 +0200 Message-ID: <20260803081159.91981-9-alexander@mihalicyn.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260803081159.91981-1-alexander@mihalicyn.com> References: <20260803081159.91981-1-alexander@mihalicyn.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::336; envelope-from=alexander@mihalicyn.com; helo=mail-wm1-x336.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @mihalicyn.com) X-ZM-MESSAGEID: 1785744832810158500 From: Volker R=C3=BCmelin Split out the function virtio_snd_pcm_open() from virtio_snd_pcm_prepare(). A later patch also needs the new function. There is no functional change. Signed-off-by: Volker R=C3=BCmelin [AM: trivial rebase changes] Signed-off-by: Alexander Mikhalitsyn Reviewed-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Manos Pitsidianakis --- hw/audio/virtio-snd.c | 58 ++++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index 1c218569cfd..7944d2b3b95 100644 --- a/hw/audio/virtio-snd.c +++ b/hw/audio/virtio-snd.c @@ -429,6 +429,37 @@ static void virtio_snd_get_qemu_audsettings(audsetting= s *as, as->big_endian =3D false; /* Conforming to VIRTIO 1.0: always little e= ndian. */ } =20 +/* + * Open a stream. + * + * @stream: VirtIOSoundPCMStream *stream + */ +static void virtio_snd_pcm_open(VirtIOSoundPCMStream *stream) +{ + virtio_snd_get_qemu_audsettings(&stream->as, &stream->params); + stream->info.channels_max =3D stream->as.nchannels; + + if (stream->info.direction =3D=3D VIRTIO_SND_D_OUTPUT) { + stream->voice.out =3D audio_be_open_out(stream->s->audio_be, + stream->voice.out, + "virtio-sound.out", + stream, + virtio_snd_pcm_out_cb, + &stream->as); + audio_be_set_volume_out_lr(stream->s->audio_be, + stream->voice.out, 0, 255, 255); + } else { + stream->voice.in =3D audio_be_open_in(stream->s->audio_be, + stream->voice.in, + "virtio-sound.in", + stream, + virtio_snd_pcm_in_cb, + &stream->as); + audio_be_set_volume_in_lr(stream->s->audio_be, + stream->voice.in, 0, 255, 255); + } +} + /* * Close a stream and free all its resources. * @@ -454,8 +485,6 @@ static void virtio_snd_pcm_close(VirtIOSoundPCMStream *= stream) */ static uint32_t virtio_snd_pcm_prepare(VirtIOSound *s, uint32_t stream_id) { - audsettings as; - virtio_snd_pcm_set_params *params; VirtIOSoundPCMStream *stream; =20 stream =3D virtio_snd_pcm_get_stream(s, stream_id); @@ -474,30 +503,7 @@ static uint32_t virtio_snd_pcm_prepare(VirtIOSound *s,= uint32_t stream_id) return cpu_to_le32(VIRTIO_SND_S_BAD_MSG); } =20 - params =3D virtio_snd_pcm_get_params(s, stream_id); - - virtio_snd_get_qemu_audsettings(&as, params); - stream->info.channels_max =3D as.nchannels; - - stream->as =3D as; - - if (stream->info.direction =3D=3D VIRTIO_SND_D_OUTPUT) { - stream->voice.out =3D audio_be_open_out(s->audio_be, - stream->voice.out, - "virtio-sound.out", - stream, - virtio_snd_pcm_out_cb, - &as); - audio_be_set_volume_out_lr(s->audio_be, stream->voice.out, 0, 255,= 255); - } else { - stream->voice.in =3D audio_be_open_in(s->audio_be, - stream->voice.in, - "virtio-sound.in", - stream, - virtio_snd_pcm_in_cb, - &as); - audio_be_set_volume_in_lr(s->audio_be, stream->voice.in, 0, 255, 2= 55); - } + virtio_snd_pcm_open(stream); =20 stream->state =3D VIRTIO_SND_PCM_STATE_PREPARED; =20 --=20 2.47.3 From nobody Mon Sep 28 01:12:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=mihalicyn.com ARC-Seal: i=1; a=rsa-sha256; t=1785744820; cv=none; d=zohomail.com; s=zohoarc; b=dUjxCnxNP7UiGAg4Q/VLSerPHnDeEf7LtVWbCsFAfuKynI8cLI7tGw22YLHrX5u00Ueq38e41UdTERwUmubKnY8FoLLQSRcHKom4ZaOmExNuF5r2yq2jGdNSkxZPkG+4JDnfJJNKsNU0hMzRIym23GSItHsmwjhRet3hv4BfX8c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785744820; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Yk4QU/rg0hF+eFgydaLhp9Xo1khNYSDib0HHocRC0zs=; b=PPA+EaLAqXLmYqNrAjSq6M/EjCgJgMcjaypCyaqYyCLpK8+Zql228z+O/zNUNuUOsOjQb5R+C5ycYMemnCseOdJPLcrASPwIT1jw2YmlUeV4TS03YOTaT4a44TILylbXBwUhhSm/8lWE1mDk/nV7w38KhszUc+YUnjti46uEs/M= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785744820807421.29886699169174; Mon, 3 Aug 2026 01:13:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wqnmT-0001eo-R3; Mon, 03 Aug 2026 04:12:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wqnmQ-0001dW-Eg for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:14 -0400 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wqnmO-0003gB-Qe for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:14 -0400 Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-495757ccbc1so16038645e9.2 for ; Mon, 03 Aug 2026 01:12:12 -0700 (PDT) Received: from alex-laptop.lan (p200300cf574a7200803110ea947f174a.dip0.t-ipconnect.de. [2003:cf:574a:7200:8031:10ea:947f:174a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49807b98284sm209358435e9.12.2026.08.03.01.12.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 01:12:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mihalicyn.com; s=mihalicyn; t=1785744731; x=1786349531; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=Yk4QU/rg0hF+eFgydaLhp9Xo1khNYSDib0HHocRC0zs=; b=GROxNQpI6nO6Kxkc5MoVmDIMNhFR9pXpjh2Yzb+meCqeJZwdzLDxr8/hspNEnfFtVp X7lCzliePzh5vi3zp0aq6IoSMFP/4mlINzCHsjNWu6f1jW2n+KStKFjIkS9CN46EJ7zE JQX15yEZe7rWTXHxlI3dt9uSBHoSOd4mqo+z4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785744731; x=1786349531; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Yk4QU/rg0hF+eFgydaLhp9Xo1khNYSDib0HHocRC0zs=; b=THQ/QYmNYmzTKAXtSVFqFUEEr7+Or3EohU/Qh+kNe8I8V5MaOj8qTzmGMCrFbX02Au 1dCKofiHGtGlj7ptnOxBbmyIAG1ghVqO+2w1npiFFGi3emh2nJcCBLwFHh+QuWiuvGuM Y/5SAq8scyuCXP/UA5GZ62qsxXrsHIqnSy/stnoV0sgoUcUksLEHRLk6rOhKG6peKqJX 5YOvr9Jy2I11JrK+mPUzE52v3Z1/fT11kq95ngnEL58wXNWrtvmQSTZKH6OHCeJROjvA CXQRP5mJMjqOsphkBm9COPu/+C36RQz0uQWgXE5sZvlZ/GXbaEKUqbC4lBMleDhycwdF SjDw== X-Gm-Message-State: AOJu0YxUXQGiPtlSZ7mV5VJwtovJ0GMcIRFmRUgY7EY05GChhPajaGPt ueOAMo7OUHTYYnkuSLVDzBXAWaYYnMsJSVb7s+rG3uaFP87/XcAEV6TtBJ5N3xC21MS0/qrBDJJ u1lzb X-Gm-Gg: AR+sD13Smm/0jQQweo3zZCUMV/ePKJwc9s1kWUnEU4ZLUTqVxrnjoLiBvM6IFRryo+j S+anqeOTl/Nm2TxNqmYVOF9LZZQcgQ7E2Vmie3j1fJ636re7dZoaiL2jc61yxaIiAGx6eJlig4y SKHoRi5z3LiDu3dHdw7bSCu1WK97+fmySyIVYWdFDi7QGckuxLfU58MLxCmbOWncO+aj9KRJ3Xg YUWlMD8cJtQatrzLAQTmYO+c7lPF/8dP2b5W2MOrDKQFd1mG10trSAPU74euoJKXBtxbk/FnL4E 7AuAKs0P6+d3Q3TXK8Rs6gVo4UOhh+z8jbYVs9auLFRbU9yyG6I51xn1jobpYgPt//ka7sUxcdY 6Ywp1Hu/57dzx6LRiyo/KxSospNQD5QzuWEd7JqPtHq8EatC2vSlqQG6QVEnaH3OBN7Ch33EdLy hXIytLzD9yjcwR5+lf4d72lw2WCi4zaUy0Hl07+jFtBZyz87na53OKt56zIGRRtb4lXP/3t/R2V MrIoacFp+BY1JQCIZUNnbCXuDBM/f8O1WMzbWCms6tLFFcJXVRD1nJAbLKK X-Received: by 2002:a05:600c:4444:b0:496:c249:dd9a with SMTP id 5b1f17b1804b1-4980c66c931mr167362905e9.3.1785744731432; Mon, 03 Aug 2026 01:12:11 -0700 (PDT) From: Alexander Mikhalitsyn To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , =?UTF-8?q?Volker=20R=C3=BCmelin?= , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Gerd Hoffmann , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , Alexander Mikhalitsyn , "Michael S. Tsirkin" , =?UTF-8?q?St=C3=A9phane=20Graber?= , Alexander Mikhalitsyn Subject: [PATCH v5 09/10] hw/audio/virtio-sound: introduce virtio_snd_set_active() Date: Mon, 3 Aug 2026 10:11:58 +0200 Message-ID: <20260803081159.91981-10-alexander@mihalicyn.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260803081159.91981-1-alexander@mihalicyn.com> References: <20260803081159.91981-1-alexander@mihalicyn.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::329; envelope-from=alexander@mihalicyn.com; helo=mail-wm1-x329.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @mihalicyn.com) X-ZM-MESSAGEID: 1785744822583158500 From: Volker R=C3=BCmelin Split out the function virtio_snd_pcm_set_active() from virtio_snd_pcm_start_stop(). A later patch also needs this new funcion. There is no functional change. Signed-off-by: Volker R=C3=BCmelin [AM: trivial rebase changes] Signed-off-by: Alexander Mikhalitsyn Reviewed-by: Marc-Andr=C3=A9 Lureau --- hw/audio/virtio-snd.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index 7944d2b3b95..12473862d24 100644 --- a/hw/audio/virtio-snd.c +++ b/hw/audio/virtio-snd.c @@ -460,6 +460,21 @@ static void virtio_snd_pcm_open(VirtIOSoundPCMStream *= stream) } } =20 +/* + * Activate/deactivate a stream. + * + * @stream: VirtIOSoundPCMStream *stream + * @active: whether to activate or deactivate the stream + */ +static void virtio_snd_pcm_set_active(VirtIOSoundPCMStream *stream, bool a= ctive) +{ + if (stream->info.direction =3D=3D VIRTIO_SND_D_OUTPUT) { + audio_be_set_active_out(stream->s->audio_be, stream->voice.out, ac= tive); + } else { + audio_be_set_active_in(stream->s->audio_be, stream->voice.in, acti= ve); + } +} + /* * Close a stream and free all its resources. * @@ -606,11 +621,7 @@ static uint32_t virtio_snd_pcm_start_stop(VirtIOSound = *s, stream->state =3D VIRTIO_SND_PCM_STATE_STOPPED; } =20 - if (stream->info.direction =3D=3D VIRTIO_SND_D_OUTPUT) { - audio_be_set_active_out(s->audio_be, stream->voice.out, start); - } else { - audio_be_set_active_in(s->audio_be, stream->voice.in, start); - } + virtio_snd_pcm_set_active(stream, start); =20 return cpu_to_le32(VIRTIO_SND_S_OK); } --=20 2.47.3 From nobody Mon Sep 28 01:12:08 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=mihalicyn.com ARC-Seal: i=1; a=rsa-sha256; t=1785744770; cv=none; d=zohomail.com; s=zohoarc; b=fQj7KyMpnx3cBQuqHfOEwvDAFu7c7X46XhL4NlkyF1b9lB1Z989tukeJtqOG6XvrJGT5MFDlghTFtbnllwuE9J6IvMxa//jAPxtP9ubPQ+oBcX4VPNBatVTL6dtq0SXL7qUwzDRGqwvJFfs9M5Xb1nJXUhZhGQ8asxhU+Z5IWVs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785744770; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=+ELrjsZqo0Fw4SJlqfLv6tV+ltQSyYmy368fF7LwM9E=; b=cehJrD2LDUXOc7BGgdig8cUnrUHS4zinPyQ7eY6Bvti+Z/pNjmzHpi8+qfsZ31sfqV28Yaa6fhzdnAijRpZWa4uVoOAbzyP8yr8OpdBwsavG1Ca5fAXZwgdWJCs9wCq/atxUXrIWtS6UQml1AslaKT1J/vHP4JEhJ1/nuswFlS8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17857447701041.26206949128607; Mon, 3 Aug 2026 01:12:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wqnmU-0001eq-En; Mon, 03 Aug 2026 04:12:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wqnmS-0001eJ-1y for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:16 -0400 Received: from mail-wr1-x435.google.com ([2a00:1450:4864:20::435]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wqnmQ-0003gO-5r for qemu-devel@nongnu.org; Mon, 03 Aug 2026 04:12:15 -0400 Received: by mail-wr1-x435.google.com with SMTP id ffacd0b85a97d-47f904e80eeso2837216f8f.1 for ; Mon, 03 Aug 2026 01:12:13 -0700 (PDT) Received: from alex-laptop.lan (p200300cf574a7200803110ea947f174a.dip0.t-ipconnect.de. [2003:cf:574a:7200:8031:10ea:947f:174a]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49807b98284sm209358435e9.12.2026.08.03.01.12.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 01:12:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mihalicyn.com; s=mihalicyn; t=1785744732; x=1786349532; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=+ELrjsZqo0Fw4SJlqfLv6tV+ltQSyYmy368fF7LwM9E=; b=UYbWnKMnKPG8gJjBaFoeZnfV2lAcd3f7gGbHEBuLW1M4ur5d2x+NifMdp46rlS1d6j tELzotUd6ckWpUu/dsWCDckiqX6mZbDKdpluxUZVJe2a5ccUo52/0u5YqKRoNYPBtHgR iSGlRuSYdF+vYUVKrkwRVKMHjzx9p4Kx8GFK0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785744732; x=1786349532; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=+ELrjsZqo0Fw4SJlqfLv6tV+ltQSyYmy368fF7LwM9E=; b=cJeimmZMdQfcDazu9va6jTEs/9OnSDQ43u6qIU72EyDTJaxsE8o4nhXRpaKrzUm9gH 4YEsKOoEFrFAcxcYbGRaSsvx/E9tnjy37fEvjmHxIBa4PHIsCVAluISDL/VV8N3CKZ5T zaq4YblYbLWYfxPtxhP36ieE3fGRxVwnbKUmrY3wFQtyP+k2a7AagS+YcrDjwKDpt41p V55GDdKc1VBoY/K0O2T7uW1jjN22LD/rpN+bAwT3GbeleFFRhIyBS0tVqLZoT6RZsLTQ 12kbgZEWym2cyzviJj9+L0OeAxKi9GTJLUjQURr2M4+WvKuMxiC6T/1odstZWKPt4jqM Y5Vg== X-Gm-Message-State: AOJu0YydPaZ2hatCOSf5nmxxJex4HTzsgU8HuyWVeJixfIPEw0kk5DlP yG/5CkX/Vmj3kAYkhClugy6byKNPTB6KFd2tLCyb3iMkQIx2ZvEm9ivlc5PGc1PKrzcAmfsZcGv 9D2mt X-Gm-Gg: AR+sD13MaDutYnlFc9wcZHzcgHmSE9EWQ9FY3772LFPiO+TWZxszyEFrRqUfBX9cFaK jKkYyx4kh3RoBY9bwBL49o2+3E18S3rJQcZuwaPmSFoxM9d71n+tN8UUjOY0QnRLe0z6JYp6FcU PNyD3+mLR/eO1OFp/sBXu/PMqWGu1t6+HY13q1dSvABi5UkAux01a3fVoJbJlwSyRN4sUYrpoMo 4/my9OmVnjIK0XN4oQOS+0KO6t2arFT0xI4Hu8lboWJWhviAgQ2Furq4qHpsr/MhHBkwSoBMmF8 eHRxqYlc1T4pQIYMI3E/DqUtlywOj/sZtNyda6rgaobCjHLe9wxrlzm/eT5rjdcsSFV4UU6ctRi LGm4Nw10R9ZveptehJYl+TMzRPTJyf+2OQ64qwQRyBZuqp8HwhcI7ACvyH8BrCV+rU6RCTjc7eA K2pXKfRINhCKgQHZE20/w3VppN10aE91EEm341+khCsx+0aLUMFr9FC+0yCpAX/Y2lMmlZn8LT7 H9rSd2d9/vtjaqSEVbIMzlxa6bV7YwOY4FZKK0L6ZJBjCOiRokw3S5w5GTI X-Received: by 2002:a05:600c:a016:b0:495:573e:1c54 with SMTP id 5b1f17b1804b1-4980c6523bamr229663095e9.9.1785744732393; Mon, 03 Aug 2026 01:12:12 -0700 (PDT) From: Alexander Mikhalitsyn To: qemu-devel@nongnu.org Cc: Manos Pitsidianakis , =?UTF-8?q?Volker=20R=C3=BCmelin?= , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Gerd Hoffmann , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , Alexander Mikhalitsyn , "Michael S. Tsirkin" , =?UTF-8?q?St=C3=A9phane=20Graber?= , Alexander Mikhalitsyn Subject: [PATCH v5 10/10] hw/audio/virtio-sound: add missing vmstate fields Date: Mon, 3 Aug 2026 10:11:59 +0200 Message-ID: <20260803081159.91981-11-alexander@mihalicyn.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260803081159.91981-1-alexander@mihalicyn.com> References: <20260803081159.91981-1-alexander@mihalicyn.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::435; envelope-from=alexander@mihalicyn.com; helo=mail-wr1-x435.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @mihalicyn.com) X-ZM-MESSAGEID: 1785744772722158500 From: Volker R=C3=BCmelin The virtio-sound device is currently not migratable. Add the missing VMSTATE fields, enable migration and reconnect the audio streams after migration. The queue_inuse[] array variables mimic the inuse variable in struct VirtQueue which is private. They are needed to restart the virtio queues after migration. Signed-off-by: Volker R=C3=BCmelin [AM: trivial rebase changes] Signed-off-by: Alexander Mikhalitsyn Reviewed-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Manos Pitsidianakis --- v4: - added assert(. > 0) before decremeting s->queue_inuse[.] (suggested by Manos Pitsidianakis) v3: - added latency_bytes field to VMStateDescription As suggested by Marc-Andr=C3=A9 Lureau: - removed the "rc" variable from virtio_snd_post_load() - dropped info field from VMStateDescription, because it can't be modified by guest and initialized only from realize - added minimum_version_id/version_id so we can extend VMStateDescription without breaking compatibility in the future --- hw/audio/virtio-snd.c | 83 +++++++++++++++++++++++++++++++---- include/hw/audio/virtio-snd.h | 1 + 2 files changed, 76 insertions(+), 8 deletions(-) diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index 12473862d24..6df7ea0eb04 100644 --- a/hw/audio/virtio-snd.c +++ b/hw/audio/virtio-snd.c @@ -24,7 +24,6 @@ #include "qapi/error.h" #include "hw/audio/virtio-snd.h" =20 -#define VIRTIO_SOUND_VM_VERSION 1 #define VIRTIO_SOUND_JACK_DEFAULT 0 #define VIRTIO_SOUND_STREAM_DEFAULT 2 #define VIRTIO_SOUND_CHMAP_DEFAULT 0 @@ -74,17 +73,40 @@ static uint32_t supported_rates =3D BIT(VIRTIO_SND_PCM_= RATE_5512) | BIT(VIRTIO_SND_PCM_RATE_192000) | BIT(VIRTIO_SND_PCM_RATE_384000); =20 +static const VMStateDescription vmstate_virtio_snd_stream =3D { + .name =3D "virtio-sound-stream", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32(state, VirtIOSoundPCMStream), + VMSTATE_UINT32(params.buffer_bytes, VirtIOSoundPCMStream), + VMSTATE_UINT32(params.period_bytes, VirtIOSoundPCMStream), + VMSTATE_UINT32(params.features, VirtIOSoundPCMStream), + VMSTATE_UINT8(params.channels, VirtIOSoundPCMStream), + VMSTATE_UINT8(params.format, VirtIOSoundPCMStream), + VMSTATE_UINT8(params.rate, VirtIOSoundPCMStream), + VMSTATE_UINT32(latency_bytes, VirtIOSoundPCMStream), + VMSTATE_END_OF_LIST() + }, +}; + static const VMStateDescription vmstate_virtio_snd_device =3D { - .name =3D TYPE_VIRTIO_SND, - .version_id =3D VIRTIO_SOUND_VM_VERSION, - .minimum_version_id =3D VIRTIO_SOUND_VM_VERSION, + .name =3D "virtio-sound-device", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32_ARRAY(queue_inuse, VirtIOSound, VIRTIO_SND_VQ_MAX), + VMSTATE_STRUCT_VARRAY_POINTER_UINT32(streams, VirtIOSound, + snd_conf.streams, + vmstate_virtio_snd_stream, VirtIOSoundPCMStream), + VMSTATE_END_OF_LIST() + }, }; =20 static const VMStateDescription vmstate_virtio_snd =3D { - .name =3D TYPE_VIRTIO_SND, - .unmigratable =3D 1, - .minimum_version_id =3D VIRTIO_SOUND_VM_VERSION, - .version_id =3D VIRTIO_SOUND_VM_VERSION, + .name =3D "virtio-sound", + .version_id =3D 1, + .minimum_version_id =3D 1, .fields =3D (const VMStateField[]) { VMSTATE_VIRTIO_DEVICE, VMSTATE_END_OF_LIST() @@ -813,6 +835,8 @@ process_cmd(VirtIOSound *s, virtio_snd_ctrl_command *cm= d) sizeof(virtio_snd_hdr)); virtqueue_push(cmd->vq, cmd->elem, sizeof(virtio_snd_hdr) + cmd->payload_size); + g_assert(s->queue_inuse[VIRTIO_SND_VQ_CONTROL] > 0); + s->queue_inuse[VIRTIO_SND_VQ_CONTROL] -=3D 1; virtio_notify(VIRTIO_DEVICE(s), cmd->vq); } =20 @@ -859,6 +883,7 @@ static void virtio_snd_handle_ctrl(VirtIODevice *vdev, = VirtQueue *vq) =20 elem =3D virtqueue_pop(vq, sizeof(VirtQueueElement)); while (elem) { + s->queue_inuse[VIRTIO_SND_VQ_CONTROL] +=3D 1; cmd =3D g_new0(virtio_snd_ctrl_command, 1); cmd->elem =3D elem; cmd->vq =3D vq; @@ -976,6 +1001,7 @@ static void virtio_snd_handle_tx_xfer(VirtIODevice *vd= ev, VirtQueue *vq) goto tx_err; } =20 + vsnd->queue_inuse[VIRTIO_SND_VQ_TX] +=3D 1; buffer =3D g_malloc0(sizeof(VirtIOSoundPCMBuffer) + size); buffer->elem =3D elem; buffer->populated =3D false; @@ -1060,6 +1086,7 @@ static void virtio_snd_handle_rx_xfer(VirtIODevice *v= dev, VirtQueue *vq) goto rx_err; } =20 + vsnd->queue_inuse[VIRTIO_SND_VQ_RX] +=3D 1; buffer =3D g_malloc0(sizeof(VirtIOSoundPCMBuffer) + size); buffer->elem =3D elem; buffer->vq =3D vq; @@ -1200,6 +1227,8 @@ static inline void return_tx_buffer(VirtIOSoundPCMStr= eam *stream, virtqueue_push(buffer->vq, buffer->elem, sizeof(virtio_snd_pcm_status)); + g_assert(stream->s->queue_inuse[VIRTIO_SND_VQ_TX] > 0); + stream->s->queue_inuse[VIRTIO_SND_VQ_TX] -=3D 1; virtio_notify(VIRTIO_DEVICE(stream->s), buffer->vq); QSIMPLEQ_REMOVE(&stream->queue, buffer, @@ -1293,6 +1322,8 @@ static inline void return_rx_buffer(VirtIOSoundPCMStr= eam *stream, virtqueue_push(buffer->vq, buffer->elem, sizeof(virtio_snd_pcm_status) + buffer->size); + g_assert(stream->s->queue_inuse[VIRTIO_SND_VQ_RX] > 0); + stream->s->queue_inuse[VIRTIO_SND_VQ_RX] -=3D 1; virtio_notify(VIRTIO_DEVICE(stream->s), buffer->vq); QSIMPLEQ_REMOVE(&stream->queue, buffer, @@ -1411,6 +1442,37 @@ static void virtio_snd_unrealize(DeviceState *dev) virtio_cleanup(vdev); } =20 +static int virtio_snd_post_load(VirtIODevice *vdev) +{ + VirtIOSound *s =3D VIRTIO_SND(vdev); + uint32_t i; + + for (i =3D 0; i < s->snd_conf.streams; i++) { + struct VirtIOSoundPCMStream *stream; + + stream =3D virtio_snd_pcm_get_stream(s, i); + if (virtio_snd_pcm_state_prepared(stream->state)) { + virtio_snd_pcm_open(stream); + + if (stream->state =3D=3D VIRTIO_SND_PCM_STATE_STARTED) { + virtio_snd_pcm_set_active(stream, true); + } + } + } + + for (i =3D 0; i < VIRTIO_SND_VQ_MAX; i++) { + if (s->queue_inuse[i]) { + if (!virtqueue_rewind(s->queues[i], s->queue_inuse[i])) { + error_report( + "virtio-snd: could not rewind %u elements in queue %u", + s->queue_inuse[i], i); + } + s->queue_inuse[i] =3D 0; + } + } + + return 0; +} =20 static void virtio_snd_reset(VirtIODevice *vdev) { @@ -1442,6 +1504,10 @@ static void virtio_snd_reset(VirtIODevice *vdev) virtio_snd_pcm_buffer_free(buffer); } } + + for (uint32_t i =3D 0; i < VIRTIO_SND_VQ_MAX; i++) { + vsnd->queue_inuse[i] =3D 0; + } } =20 static void virtio_snd_class_init(ObjectClass *klass, const void *data) @@ -1455,6 +1521,7 @@ static void virtio_snd_class_init(ObjectClass *klass,= const void *data) =20 dc->vmsd =3D &vmstate_virtio_snd; vdc->vmsd =3D &vmstate_virtio_snd_device; + vdc->post_load =3D virtio_snd_post_load; vdc->realize =3D virtio_snd_realize; vdc->unrealize =3D virtio_snd_unrealize; vdc->get_config =3D virtio_snd_get_config; diff --git a/include/hw/audio/virtio-snd.h b/include/hw/audio/virtio-snd.h index 85d5d7c8619..384d2868c19 100644 --- a/include/hw/audio/virtio-snd.h +++ b/include/hw/audio/virtio-snd.h @@ -194,6 +194,7 @@ struct VirtIOSound { VirtIODevice parent_obj; =20 VirtQueue *queues[VIRTIO_SND_VQ_MAX]; + uint32_t queue_inuse[VIRTIO_SND_VQ_MAX]; uint64_t features; VirtIOSoundPCMStream *streams; AudioBackend *audio_be; --=20 2.47.3