From nobody Sat Sep 26 20:03:49 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1789808182; cv=none; d=zohomail.com; s=zohoarc; b=k5Lyk8VLZriKi0JI6YYBm3mDHbihAADs5RJ3I13rR8YKoDTby3ww2RS5D7zvIAeWBGP5s/qheIyFxwv3kjgUJ686YMHJsspbnfbqUYKgUIqJjm9QhG/x+ot2MfyFjoO1iyyHMlyPf9q5e0g8jH0lOOmBm07PVON6W6EBnfk5/EQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789808182; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=fdG8iXqPUCUC/4wJK/Az/Smh8dRjZ4Q22DabWoEWdDE=; b=l5v9p2Mr+F2K5pnWgW7PtRmqCB2Vi8SLdJIAXKuaQVwKdHQubkhQUWvS6EFE5G8TBSZFjdzZcWOswOlXlrF7UoZVEA8dU3rwkeG0W4Qk3PHe9dg9WAdN74OffJid3JXueMSwuHyrOnj9HMRl9yN2hwC1tOCNl4vHl8LPBBH/AhU= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1789808182252655.9021733890359; Sat, 19 Sep 2026 01:56:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x7qqx-0005B6-5I; Sat, 19 Sep 2026 04:55:23 -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 1x7qqv-0005Aa-M9 for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:21 -0400 Received: from mail-wm2-x11.google.com ([2a00:1450:4864:31::11]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x7qqo-0007HR-MU for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:21 -0400 Received: by mail-wm2-x11.google.com with SMTP id 5b1f17b1804b1-49e721b5503so14662945e9.0 for ; Sat, 19 Sep 2026 01:55:14 -0700 (PDT) Received: from localhost.localdomain (athedsl-116222.home.otenet.gr. [85.75.29.157]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fc58ce1ddsm82736875e9.3.2026.09.19.01.55.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 01:55:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1789808113; x=1790412913; 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=fdG8iXqPUCUC/4wJK/Az/Smh8dRjZ4Q22DabWoEWdDE=; b=cEgb7FFqnSGabkC4t3M/ql8eykM7iZaNl6trxPr83+DIGYZh+cCitWK+1C/hAI0Y05 UhyKgfu+0yGBvsMr7+x7bEp4p1cPDEvWLCRXEaOWG6AUNmAvfBcOnE9jM+C+4FifwE7h 7PfRxTNcicYP/G8ZPvWdhXrP5yZZKSorPJhbP7nUkz72Aqrd4gaI/7b6vjhReXTZzaHC 1gN1OZ7CuD+eJg+hfwHXgq2c+CEc9bwVzLpPGiHO3Dk/Lus7AJfVJy6vAnjUIMK3HrSB cY7dqPxfeBeaddqak+hi8DzCTX6UCLLN7Hp7Pz9xcGpIae0zc88+65odgB+k54gXGGlx s3MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789808113; x=1790412913; 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=fdG8iXqPUCUC/4wJK/Az/Smh8dRjZ4Q22DabWoEWdDE=; b=g7zHbI2lnen5cKuoxov+qe1CKQIKQJffgw1B8YWRI2NuJpj5yLiCvIRsn2M4Rc4Dw/ Kb0f/zFhRc0fKdiXtY/VK4Nw1YDpNtErjjJhIuN9l3+T35rPJcBcykVUTp4D0pX4ot6S hDGOznY+4wS2dvncMHhsjHpOgsTpe4GlWwDLYZ/k5ykTrzotbikvXsZLpYFkXeJI4OjD yk2GEwwHkmVtjrdukHBElCTr25pGVgsEUhJeF5nFkQPOfNt8ScqZuIbhQB4LsHltl6cC yaHoDwyRNnee0dnMJVXea2TqbwsXaquvuLiZNNb+IKHsw0748o5QO1hi2kDpT+U5W9Ws XzSQ== X-Gm-Message-State: AFuF++k3LXGs2li9D0qwTwvM/w9joqgsMy8Ims02HuFXG5hZ1xmKFbje d/QOFIGZTjwWupaZT2B/zCMB8ty+jjw27HXWsmwmyFd11XiusCX4btjav++peqVoxyschgerFDE uMtTLfDM= X-Gm-Gg: AYBFou2/JqKtk2HCF3zE7Nj8MFwNJD1koJwxXgDZ7LjPX1/EOZkfhfrbMAoH5TBPRo4 HXpxAHx+4RMAcZaRc90WHnWwS2b2mH2Nd6oOAlJ1RhvfPNeJRjghuiVtIRrUbMBHPPUdLgx0Uvg 8lGZhdrZHhr4+Pgy/QfCWYTeD3m7oSXM2+Cttj6xDpst5ooZdqC9NgGSEkl1TTvP5Rh4noBVznf tntO5CZQ5H8/AtWfBvqGps2NHPBpB6WOIO8Wzpm4EeUNjSMTOwIhtRd4Gicf4ZEPfnGCtre8tif wSECI2xYkJ1NrJp1buG6GtcXt9e8pfEpc3J3xj3L8O6G2XzSMWUPDe7Zsix5ghcGPGv2KBj35k8 4hGyj8zUJxDEGhDv7bwMUxd5N3lvqXMBU5loBfYgHw99P5oMBk/wkI01oMVZGvt1r1392Ro64dt OilFHsmYnGAVMrBiyTI91MuJAfoaUlIl/NgyDVC8KP7pNC/IVCRV4Mv7Sa3JyJbe5qGHKEbMn7L 1KugFTuqQwEgqayGOOnaT+ua2JEzO4iPomDKnlarzTNVX4GZpQt1BVCKPHrb0cYgLhwRauEWugb J+FKAl2DaCtGu3MNGiWBo6TBftQFL11haDgDN/POZ/37ScjTewMHyhJnhBspSu1VXAg8OVrDCKs fKJSo8Z4jRVVAufCgTRT1GXpSyTl3LmzmIQ== X-Received: by 2002:a05:600c:468c:b0:49e:81db:4926 with SMTP id 5b1f17b1804b1-49fc5670ff1mr72579515e9.5.1789808113016; Sat, 19 Sep 2026 01:55:13 -0700 (PDT) From: Manos Pitsidianakis To: qemu-devel@nongnu.org Cc: Alexander Mikhalitsyn , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , "Michael S. Tsirkin" , Gerd Hoffmann Subject: [PULL v2 01/10] hw/audio/virtio-sound: remove channel positions field from VirtIOSoundPCMStream Date: Sat, 19 Sep 2026 11:54:48 +0300 Message-ID: <20260919085510.3388454-2-manos.pitsidianakis@linaro.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> References: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> 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:31::11; envelope-from=manos.pitsidianakis@linaro.org; helo=mail-wm2-x11.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, 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 @linaro.org) X-ZM-MESSAGEID: 1789808183882158500 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 Message-ID: <20260803081159.91981-2-alexander@mihalicyn.com> Signed-off-by: Manos Pitsidianakis --- include/hw/audio/virtio-snd.h | 2 -- hw/audio/virtio-snd.c | 2 -- 2 files changed, 4 deletions(-) diff --git a/include/hw/audio/virtio-snd.h b/include/hw/audio/virtio-snd.h index e28f1be5db..f8bb5c95b9 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; diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index 694bcebb60..46d81cc9ec 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) { --=20 =CE=B3=CE=B1=E1=BF=96=CE=B1 =CF=80=CF=85=CF=81=CE=AF =CE=BC=CE=B9=CF=87=CE= =B8=CE=AE=CF=84=CF=89 From nobody Sat Sep 26 20:03:49 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1789808172; cv=none; d=zohomail.com; s=zohoarc; b=RgRYzHydww0Wv0SpusNbUsAiYRzfiBpyjafIdRgchw7yKqIGO8jsKS5ZI7o8aJ7n1qr9Fnop2tsASPxnIr7ZhMwEn0ryvVIN8qWyTUbDbY7RWKh3MmLLxJcuXMzLOCVEdj8zyyr8Wigl0FvN+dcxPEpAhQsj2viDq2sEx2W1WAg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789808172; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=TfWtRMVTGUYok1dnpe7O4lkf1E1YGNiXpJ5wSK2yxSE=; b=XU1C6RKVt26bGKiwVL1krwOWn2OiCbU5y6MJG1Kb2YHFiHh6BaDNqIb17tZTqnOddk3Hvn36pzlEVBJg9sgsKmXG/EyPFPWfRfDzcHkurJ0iORE2g9pYPn6xBYMyXFGzvNCm3M19qaDWxycpzpJ3FYOfHs/XNJVn0C8hEKqG+Cc= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1789808172592782.4063291030291; Sat, 19 Sep 2026 01:56:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x7qqy-0005C6-Rp; Sat, 19 Sep 2026 04:55:24 -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 1x7qqw-0005Am-Mo for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:22 -0400 Received: from mail-wm2-x10.google.com ([2a00:1450:4864:31::10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x7qqv-0007Hf-3T for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:22 -0400 Received: by mail-wm2-x10.google.com with SMTP id 5b1f17b1804b1-49b912d3920so10095135e9.1 for ; Sat, 19 Sep 2026 01:55:14 -0700 (PDT) Received: from localhost.localdomain (athedsl-116222.home.otenet.gr. [85.75.29.157]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fc58ce1ddsm82736875e9.3.2026.09.19.01.55.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 01:55:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1789808114; x=1790412914; 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=TfWtRMVTGUYok1dnpe7O4lkf1E1YGNiXpJ5wSK2yxSE=; b=oYGbmaNxQddPfVC2Vns5VEqpeY3DjBXkVwPwwjgDfsxYnH63oHFR0A1smxbjcbRsuo NCHfoAtZ3M6Dtet5Zixuu9mMWEctEv2s8r6UMGBV3JGBT5oYh7UZ6RsbL1NgzjqTVyKt Dhlpe8DIQgZiOkVeNj4CKZ9DxzTlUavBvXlmr9/THnzm1mKH2JXwNLWBDUFqeuUJ6HJ5 V2jY/FbhPgz7evSTkDrsjDtKo5hzGyFhYdRO5ul4Cqb2ng7Pyy+GEuKS6+DF/+GyOV9y D//rQRzXg4Wn9p4JQdxRgE5HEjOnp81L/hCG9yoy+xDtXmdiC4ccWMDXE7oq2/333VwE tCOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789808114; x=1790412914; 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=TfWtRMVTGUYok1dnpe7O4lkf1E1YGNiXpJ5wSK2yxSE=; b=Wds1Ka/nCBCYB8JAywQblrT03irdV2QFlbyr1JN7norp61f9d4Wf3V55aBNNS8TCtT ysz1+e2AvvgdYR8GjGUEd+ALxsm6aW/Urwe+yQBBeEl6SuwVSuON/vf+MQxqh9LOQbf6 v/b48wLaHRo7k3u/njbUJU9TOsyCNPzWbpS7wtQEyHavx1ab4tN81soYZx/lR558lOry WyO9Z+DTVdI4YNF4UXAsw+Pcj+Dt/ZeDMCgw8Z0ESB2uQMUWFQmWwWaxHCyMS3hcgcOo sa2DNK8W0HoxH3AD/5i+RPovcAXOporfl4gWN1/ArK21gql+LHjIej/c6Xl8Urck9nR9 mh5g== X-Gm-Message-State: AFuF++k/RrVD23XlsWf0IFl546UxLDRvykJwQhcyp775yR1sB+g/jbEb MUaDqY8qYtYa9vD3Cwtavg/KUwwAc1P//MESfBbvsFnAJaz3kPS9hFWF8/SHI7C9Ixfj+DTtuze 3WSuR7S8= X-Gm-Gg: AYBFou2XTPXYxvaziR6lemfAPG6HZQK8aB2gWQsR7VSqep/8n26CCw1gfeUhqYhoz/7 eAPjAik2+AdypeeozxqgBAl9Lyg9DZLVARJ2tAI8E+wP8k4yXVjQbhYU70JnFKjotCLdom2qz2C tPGNNs72oHHn2grB0I28rMecghljrZlBT0WFKL6J91NuOz2Xdfnhhl8Dx0KmP4k1oDRBDs6X/fA e94xQuOppW9GI4HWIF8tdTtE8iECeE4bwKn8yqe3+aEliMh+K0/vne10R2KSy4Y6SRJPvegypqv N7cRDjWGxYA9xzsedvHYllf9fD9C1bDY7lo+PHclfbxEeIw+Z5t76tkt+EdsnNmjq9qbsyAsHc1 MIEWU+3B8NYPXcjEpeyyZUztm72UVtL6pCRNRAVT77lFRCvLt8HTh8O6gEaBW+MrhBns5k5kBGA gsF70W8GBL+ESX0Rn+Jn6Ga51G1ewfklGWLMts5y0y6aUqbrLqe0dXgnTW4N081ImJ8xjp/Sm9Y 5fvtoUzUenWeh2ED0Z47Iwv+p5s1UcSIstwj2cmbAfWmunnvW4H+FhJcfi6kWZEbfi2SR8IYqcx eIHUwjG7eRw+Rd3yma3iEG1BYVcEpX3J+k1Ue+F25J9LAKpHuDMcKqtBnfRACP8sCpC//eZd5IV 4PEyp42m8DCx5EsrGXN4FjefJxHSY/+P8wKfbzUlMrWsX X-Received: by 2002:a05:600c:3ba4:b0:49c:fc6c:be15 with SMTP id 5b1f17b1804b1-49fc57414c4mr84729675e9.27.1789808113800; Sat, 19 Sep 2026 01:55:13 -0700 (PDT) From: Manos Pitsidianakis To: qemu-devel@nongnu.org Cc: Alexander Mikhalitsyn , Gerd Hoffmann Subject: [PULL v2 02/10] hw/audio/virtio-sound: drop unused struct VirtIOSoundPCMStream.flushing field Date: Sat, 19 Sep 2026 11:54:49 +0300 Message-ID: <20260919085510.3388454-3-manos.pitsidianakis@linaro.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> References: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> 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:31::10; envelope-from=manos.pitsidianakis@linaro.org; helo=mail-wm2-x10.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 @linaro.org) X-ZM-MESSAGEID: 1789808173964158500 From: Alexander Mikhalitsyn Signed-off-by: Alexander Mikhalitsyn Reviewed-by: Manos Pitsidianakis Message-ID: <20260803081159.91981-3-alexander@mihalicyn.com> Signed-off-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 f8bb5c95b9..b60b098ccd 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 =CE=B3=CE=B1=E1=BF=96=CE=B1 =CF=80=CF=85=CF=81=CE=AF =CE=BC=CE=B9=CF=87=CE= =B8=CE=AE=CF=84=CF=89 From nobody Sat Sep 26 20:03:49 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1789808218; cv=none; d=zohomail.com; s=zohoarc; b=aa/OLZTOE+FGvG+wn4mOaC1J3IKKuUWqmlu4LxeswZ38U0v40VtWaYs7EoR2c1KaC8FlTrikX8fDPalAHjOYrE9Uj0JUM93WZ4QaSYo+r8byaap8t/MVoxjg9DWD0uCV+lOZzD47uFKEonCJP09CMf66uokNq2cE7bvfVtM9Tyw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789808218; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=6M0nfJL6B1hRZbNEfE9XctLUkdS0dQKDP4zpnJvlvQU=; b=Dd5/zzcv579I9Bi4W99MUiFuJui7vXWE9NARRBE51pYQjbfkg00odffRqS6Nvp1FmjzSu+zJ2SOc4dNXPhvWeUTmGrQ5NVKWSqtv3DzGKDirMfzlETOdyv/0cCn/r1Mpa5HmN8vEtxLeBhu9yh7o8bukl5FYUKbb8zxxTy+ch4M= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1789808218310391.75027165283245; Sat, 19 Sep 2026 01:56:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x7qr1-0005Cp-0M; Sat, 19 Sep 2026 04:55:27 -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 1x7qqy-0005C9-Tn for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:24 -0400 Received: from mail-wm2-x10.google.com ([2a00:1450:4864:31::10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x7qqv-0007Hs-6b for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:24 -0400 Received: by mail-wm2-x10.google.com with SMTP id 5b1f17b1804b1-49d097b4939so7230695e9.0 for ; Sat, 19 Sep 2026 01:55:15 -0700 (PDT) Received: from localhost.localdomain (athedsl-116222.home.otenet.gr. [85.75.29.157]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fc58ce1ddsm82736875e9.3.2026.09.19.01.55.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 01:55:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1789808115; x=1790412915; 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=6M0nfJL6B1hRZbNEfE9XctLUkdS0dQKDP4zpnJvlvQU=; b=mgtpsq4ame9lKECpcImr/M8Wl7Uz1aH15hL14wOOHD18SuQK4eQjD0K+kGV0i0xqkt o1696xUdGlapiL9f9385shboomdv0Nl0WyzbV8h6F7zQ1jFW8hirDc6X2NwkSYnLJCgB EpfQPFJq3tQycs2pI8HQTmwFnNYU4TAxdz/evEIF/pY15IGMmiFivH/Co2qClcvAU76/ NXaoPsQ9u7fycndPG4kk2AcBy42c81Y5jo3T2zufDORlRM/+Pz6NTHMGnTh1/B92ciWE moI8rqglUGGVf3T+qC1ErhZ03kGkc7YEQExj0fIapzXImuJWqXaCVtFaQuAy5ep7XwEW Vaxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789808115; x=1790412915; 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=6M0nfJL6B1hRZbNEfE9XctLUkdS0dQKDP4zpnJvlvQU=; b=kSJaj7LYPZ0y1tLmfRs1cHw1HZuQztMBqv0oeOkpynJ/rU0OSaeXf5hjAyaFFQRovm kxT1BK3QgzsE1nV9fB419YKn1m20/GsMfELyAh2KvT/qKyXUXp2kzHh2hC5x8ftBGJjs lRTJe++SkAN153zldEc/58GC3c1POMiv8MWUMmPdBwdNp1Ce5RTr2UdeUHkxS72mOTE3 7alMxnzmCYQi5AgEjmpD/6keHjB+FoLKFuWYPeRmAN5wToWbH+awpe8/38yZ3e0ZldPX Wht9niX2c3m5ZmTtF9/sZxQvZ0GMc7klibO9cVAUUmrpbvp+xpGUHXXHIOno+GGwrewf xCHg== X-Gm-Message-State: AFuF++lF3lN4/X9aTjsYlUaAtG8117Z94KGJmgMuYZPMQnm4i+bijnxP JCsy+GMJgDvv3QhQdvoHDqFD5JQ4oPXvp28G3NIEMkyFs9OkLoSwM9eipIYaHwS7PdOxgSAb9eU nG87aQdw= X-Gm-Gg: AYBFou0bfYnV+KUMy5xSn75Gb5skEmSnQaGh0bcK5KCgZPeoLNim3ezGPUOyCBzecd7 AP3CcRHEMt6cPEaXojkXFriWzqBZjmWnplT7i838WoMIoJ3fgTjGJIcUi5k3VP89IZ/NP0XO9Xf QeeF5uIn53S+JIIQMFoIH07tcvJqFc3rUcDrevAj1fgZsPQJH8AmSrNV4SOIOEhh9nc6lBbGvbh IMCTC2u9lEGtHdUpeeFZd1eMImnSgUB1j/RInIc3zVV0Knu9ot2RbuPOkh4EKNMLA2gIpJhG73z cRiIgMfwJEHlyb4OB5RZeav1bK0+OiEKk+UqMInXAOqebsrJVWxrT5Qo50InodhNWsWHe3TTGCk qSO4EyOxeF+BYfOlEwM8J3nm0I/EUZlVRr+mIxaG3DpxB1ssZ0lrMtNRIFIZmHkf9W+gQm6BCA7 R/MYtmOcbLgrCDVnEwrgSpv+6q95uZ+YoK4ToUkCpPHXEhDn0bG3YhaZrKaCYOWYoM41ZHkGFD7 vNuEx2LE/ao7Cu1M8IFsU39OuzNOTNwjLMLRdBta1KL1mT/rXQ7vdogiaonW7/cOqDvwFzZGRXg VgAdyVnSYKEtOHBgdZ8H446W0g0qUpewhoDs1cyhyRD8SQhvOXwqNEyDl3B9hrs07Uvy0wTwH+D cKymK7jpEULo/njToaX0iZeTnambIyQq5jA== X-Received: by 2002:a05:600c:6212:b0:499:9240:9a1c with SMTP id 5b1f17b1804b1-49fc56f8327mr57061625e9.15.1789808114748; Sat, 19 Sep 2026 01:55:14 -0700 (PDT) From: Manos Pitsidianakis To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Volker=20R=C3=BCmelin?= , Alexander Mikhalitsyn , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , "Michael S. Tsirkin" , Gerd Hoffmann Subject: [PULL v2 03/10] hw/audio/virtio-sound: remove command and stream mutexes Date: Sat, 19 Sep 2026 11:54:50 +0300 Message-ID: <20260919085510.3388454-4-manos.pitsidianakis@linaro.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> References: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> 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:31::10; envelope-from=manos.pitsidianakis@linaro.org; helo=mail-wm2-x10.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 @linaro.org) X-ZM-MESSAGEID: 1789808220266158500 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. [AM: there were too many conflicts, I did `git checkout --ours -- <.>` and then reimplemented the patch idea /AM] Signed-off-by: Volker R=C3=BCmelin Signed-off-by: Alexander Mikhalitsyn Reviewed-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Manos Pitsidianakis Message-ID: <20260803081159.91981-4-alexander@mihalicyn.com> Signed-off-by: Manos Pitsidianakis --- include/hw/audio/virtio-snd.h | 3 - hw/audio/virtio-snd.c | 244 +++++++++++++++------------------- 2 files changed, 109 insertions(+), 138 deletions(-) diff --git a/include/hw/audio/virtio-snd.h b/include/hw/audio/virtio-snd.h index b60b098ccd..884c475ffd 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. diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index 46d81cc9ec..cbf739f8a7 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; - } + while (!QTAILQ_EMPTY(&s->cmdq)) { + cmd =3D QTAILQ_FIRST(&s->cmdq); =20 - WITH_QEMU_LOCK_GUARD(&s->cmdq_mutex) { - qatomic_set(&s->processing_cmdq, true); - while (!QTAILQ_EMPTY(&s->cmdq)) { - cmd =3D QTAILQ_FIRST(&s->cmdq); + /* process command */ + process_cmd(s, cmd); =20 - /* process command */ - process_cmd(s, cmd); + QTAILQ_REMOVE(&s->cmdq, cmd, next); =20 - QTAILQ_REMOVE(&s->cmdq, cmd, next); - - 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; =20 - 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; + } + + 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); =20 - max_size =3D iov_size(buffer->elem->in_sg, buffer->elem->in_nu= m); - if (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 --=20 =CE=B3=CE=B1=E1=BF=96=CE=B1 =CF=80=CF=85=CF=81=CE=AF =CE=BC=CE=B9=CF=87=CE= =B8=CE=AE=CF=84=CF=89 From nobody Sat Sep 26 20:03:49 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1789808197; cv=none; d=zohomail.com; s=zohoarc; b=lkbChob0onkmXHQgM0KWVJICt1nWDyl+hoL8tadvSEpJwUnsKQ7g8JPK8A5rUSZSSXZbQPtHTOctOts0/9XDto2bNd/XxG+o5HbiDkrz1Yib+CSdhnJrclqT+fyzsSUViBgeNW+GAmVQSJ5uZCMW5/at2RuyROF2HY1j4hgAwME= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789808197; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ro6q4939JlTOoOj5Xj4n/vp5fXJkovksjsh3vzBpvoY=; b=X6jKdAkcKZp+xAwIa1bohQ+K25dr1dno5XlvhcJQSbrSBNugcFO8c1dkW/7CirYsu09vcIlaaceilTXBKbai8AEkhoWkoJddQ83MUDU7fff26MyVHrPdl7ZTTBtmQS9ueE2yjY3yNdp1XNWr8uuXVSHb8eT54Wh/3hFmBqNOIlY= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1789808197304719.8266041703928; Sat, 19 Sep 2026 01:56:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x7qr0-0005Cl-AZ; Sat, 19 Sep 2026 04:55:26 -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 1x7qqy-0005BV-Cv for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:24 -0400 Received: from mail-wm2-x11.google.com ([2a00:1450:4864:31::11]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x7qqv-0007Hw-EM for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:24 -0400 Received: by mail-wm2-x11.google.com with SMTP id 5b1f17b1804b1-49e6b885ef8so8212905e9.1 for ; Sat, 19 Sep 2026 01:55:17 -0700 (PDT) Received: from localhost.localdomain (athedsl-116222.home.otenet.gr. [85.75.29.157]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fc58ce1ddsm82736875e9.3.2026.09.19.01.55.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 01:55:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1789808116; x=1790412916; 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=ro6q4939JlTOoOj5Xj4n/vp5fXJkovksjsh3vzBpvoY=; b=m0RlCKElLDvxFnAxzjuMTEwDusLdVHgvZ6G68roDEMlYZ/0d7ZuAHUFlJExRrOEUMP Z2bGhy0a4vArnspWm2hCziZU6ZfCQ7Wz4MK9Z8CpWgUih7eeS7/2gcMlkNKpOOg3reb3 m+68Q2nDd8MQHMVNq9iPHRSjqa9B/Z/7je5B/T6zWn1/shcGkRg7TqSUujN+AeTXl9ui 4eCi9YdIhocH+9xXuofLJC6mWSdC9lZ4WfGwU59WCWsh/7Tifg6A21Xnlufe0aM+rcPt +81G7bRztyixf1wBYYxb7h+6tSlce9dhhq0TCDH01lOcel+WM3uLyTnV1vYwRBjKjpn3 4HkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789808116; x=1790412916; 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=ro6q4939JlTOoOj5Xj4n/vp5fXJkovksjsh3vzBpvoY=; b=ny+i2XGOMn/3DzY5RvPw18EQ7GJFQm6aabab3bCm3AVNr6aDXz1iwaHfcCCcMyD1w6 PVhSXO35/2DvjvQJJbJB6UpiKoKTgbtMc8JqqYlq3NP0LFfe/5hxgDhVoh+fCXQSZM81 X6nztToEZS2JRBq/o1raDaOcXEwzBz7FpfOFVTj4/nybRjgiooD+CCwbTr0tfR9e3xnY fXyC75yccCj18uWUeqAjwx3+S0YjRi5eUBJugn0MgYryhq/W1kzfGUr/kvisJigTg0aw QTevrwVDtVMVwkxTfvZ08K19oOjkhTSrEVLPRbREMs9rVU5guKqV2F96mBOm7rH/idyw OqZg== X-Gm-Message-State: AFuF++k6uswvckIp/RRSjOePsO4XXyuqtmWYazP3Vz0BKFw3wiFLKcep 0z06ONK9/AMN1s4HawWokYP4Tl01Oi07kqGZj7YtVjziPQw9pDTkuNcXUZJiL+4V/sAy3i94Pgu pU//YluI= X-Gm-Gg: AYBFou3bxNzXNeoHmrO3+ZVg6kyHjm24bf6+u5iJuU//FKpdzMqXeC1e1hNw2W9aAe1 XNrYxNlMIW05Jd/dtdfGO/o2BuLTDT9bSM9RD5Hiq8veI5PRetSW6Dxutv+mely0KgK8nFNM83U VZfMgatnywDUHo03VknS9vBJCWk6zp1KTsCVjZV3gUvmagMJj9zSZysme7IlaS25ezhhixnKhAj Zs/qIjf8SlnKRHAk8UF2MN545XMD0pyCpgeXGCkngST59FVqbZeFsvhcyKNnaOspPynn4TFlDgO pYoxKhifzrc0blaAgIygw3hpzj9Hjb1fhxtwTV/GjlTK8WKoMjbYR2Ls5RMWZ5aJO+Cf6iaLLq+ MgASk86lq86ucWvM1E6T89Ejc0hqqSOEzBWNmm1znhehK1Lcrm55UWdIfjUr9qNFIEQDeYvR8EK 19N2TCkqNEbE4F7s7zDZSvHiuHqOZBicAfZFB5eMwTEiRxa5HZS/flsfvOjt5K4Yjm1jKDN/dOS M0q+a0d0x118qu5t8znxnCm5iZ/DxVlPf3Ua27xUkWpnM2TDAKwt00A1Wx//Pv3rFbCZL3ddqlX wBlP6MEyfSldS5pgFExwZWfUMprVOyEPgUEcRQeU3++DryO4udSU2fGTU+mSvMjgNXKM+2tef3Q RCjnJhTORlmCC1LH+JD45FIHlpU3hZB63Ow== X-Received: by 2002:a05:600c:4e53:b0:49e:715e:ec1f with SMTP id 5b1f17b1804b1-49fc5757378mr67488005e9.30.1789808115665; Sat, 19 Sep 2026 01:55:15 -0700 (PDT) From: Manos Pitsidianakis To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Volker=20R=C3=BCmelin?= , Alexander Mikhalitsyn , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , "Michael S. Tsirkin" , Gerd Hoffmann Subject: [PULL v2 04/10] hw/audio/virtio-sound: allocate an array of streams Date: Sat, 19 Sep 2026 11:54:51 +0300 Message-ID: <20260919085510.3388454-5-manos.pitsidianakis@linaro.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> References: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> 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:31::11; envelope-from=manos.pitsidianakis@linaro.org; helo=mail-wm2-x11.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, 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 @linaro.org) X-ZM-MESSAGEID: 1789808198042158500 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. [AM: there were too many conflicts, I did `git checkout --ours -- <.>` and then reimplemented the patch idea /AM] Signed-off-by: Volker R=C3=BCmelin Signed-off-by: Alexander Mikhalitsyn Reviewed-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260803081159.91981-5-alexander@mihalicyn.com> Signed-off-by: Manos Pitsidianakis --- include/hw/audio/virtio-snd.h | 2 +- hw/audio/virtio-snd.c | 33 +++++++++++++++++++++------------ 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/include/hw/audio/virtio-snd.h b/include/hw/audio/virtio-snd.h index 884c475ffd..97ffaae18b 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; diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index cbf739f8a7..84083be882 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]); --=20 =CE=B3=CE=B1=E1=BF=96=CE=B1 =CF=80=CF=85=CF=81=CE=AF =CE=BC=CE=B9=CF=87=CE= =B8=CE=AE=CF=84=CF=89 From nobody Sat Sep 26 20:03:49 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1789808219; cv=none; d=zohomail.com; s=zohoarc; b=AkN4pkSEP4Ays8idRPebA1zOcx7tokBFxfF0jAlHfdeCAKFQ7NFk8Q1EHGC6edPRZGd9Cbdx/6eo12PNDWIV+vzGnWXKAFkVkEmnP1pMMdP2Ih1VCuvBGgbB3zL5JXS19kPNfoSrbBch02onmiTiz/XYfJq0FFf1ZiKKRF41v2E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789808219; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=0GWHmPabWSPLaPy4afNz6W8nfAlTeFytEjlJU9wAePc=; b=YmgqGnP1Iw1GgtXTRajT1pDMelxCrElYzm47Sjma+Y8oss1SgcZDmbrrbDVvneZDq3NwA6jzzjrnuENFDd2IZkQXNarsoiA1OawYHxmOhQCYWFeXTkh3riYqAleJMN821o3L8eb5U7QQIlIM0Bw8EPJn/S6lLd1YaX0N2czZA38= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17898082197711011.9228142096089; Sat, 19 Sep 2026 01:56:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x7qr0-0005Cj-AH; Sat, 19 Sep 2026 04:55:26 -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 1x7qqy-0005BO-5E for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:24 -0400 Received: from mail-wm2-x10.google.com ([2a00:1450:4864:31::10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x7qqv-0007Hy-EM for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:23 -0400 Received: by mail-wm2-x10.google.com with SMTP id 5b1f17b1804b1-49d097b4939so7230785e9.0 for ; Sat, 19 Sep 2026 01:55:17 -0700 (PDT) Received: from localhost.localdomain (athedsl-116222.home.otenet.gr. [85.75.29.157]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fc58ce1ddsm82736875e9.3.2026.09.19.01.55.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 01:55:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1789808117; x=1790412917; 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=0GWHmPabWSPLaPy4afNz6W8nfAlTeFytEjlJU9wAePc=; b=eEPupRjcl6exAu4Ea6nbFCZ8Wyv5HuNIKLgAx/ElYRDOuLf7Q7y5slG1YVQ1SRPybw KInvvQi4o1N8I2oKE2GbGRqL72rYHY+6k0KEp7GDRNQqSzm7YrpUJpXqN7L2YFvXO3dE +HDEAhxQtVDtvhxc003bqsNvXV/SUaeKNRIIjgEbGijfteR01bi6ezEvUFsGNFNVExcT aLLF7/ax6mL8/vROq58sAyfpmEqYZ+4p6r+NxHV2nI8jIwAHlLKtqyZpNtyk/SY7ynsb sAEu2HxFK08lzOMXwRm5t+VaiFUOXUon0axVsW07L2xCRIk199VldSyBPoMeoJbnJMih eXbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789808117; x=1790412917; 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=0GWHmPabWSPLaPy4afNz6W8nfAlTeFytEjlJU9wAePc=; b=HlOAgSewEZ8Fiw1PcmWpdgqg8FPVfc8h37uS9w1NzjsAGa/nd+sVTNC1BlCmxN6FmF N7ey085ClOXx425G0UzhmAlWLUyoLiyoeXTrHc5UuvYKxFiv4zFOFhfA2vH9SAHh2XvI rziHHrPk+q5k4tfmXcnPzch+Pwm4+7D4XibIYRDxjkwrAD2wgC32VcpJnOQSyh+DSYpv ow5gBTDLOtPug9s5iugkGcdMviPHQQRAapxpa56SD5qUiIPt8yAq5ZRMfBWppDpHtZ4L O/IOBjgbB8pdWY3t9fLgc/+EnLFDRsZFSS543eUxKDjIrNY9qpbjT7p+baTLWyYr2w8z mF/A== X-Gm-Message-State: AFuF++m9I4B0P9PllTwKAnvjxqi25KKiSQfum1GpP8u1Kd9uljtKOpc+ W0qlD2hyS3RSJCD1wHKd9ZHpORlyAJQrfeIATqs6REM1DN+PfR7GCQXHe4g1CrUI+iJmT6NchFh uuXauGKA= X-Gm-Gg: AYBFou0RQYALmYgnt0BINhKeYs3DKF8k9oszCNUZFgP/EnTQZtnhM+/sfGDHSOZLW+s CwxbWIWa74tctPleayNZ0+bIGPL+PXj2+EhYOYhlezdyCZo5MEZJzv5TShP9rBG3S/UJlZwg32M qf3MGSfOjmMhT6z18nz2lhGNWK20jMT3b5Gy57QRT96BBFDW0pZ7p7XXlqXEzgnlOCWmZz6IYhW XGNS5lby0cEc0oyGg5cNEy5UF5vuOIvNTkuXl77NRymPRupWK01Gax8IrfpBnXAfX9ThE+LP2Sv xyqiJDpFD6ZfB8RuJq0XwswzjmSZ4GD8ShV7dSvPzOWn5HEt9EUP9f0a1mApbANpCvM4MxJ+Osb Xnt+GSsM1r88m2wbc04wDRYWCcZdsqPRYn/itugbK5L92bgIxglJ27LDzNDmMcWRtV7Y/Le+AuS oGCfc9frIkOWxEthgs0QaE1/v2yysQ29/yEylpBFJdAcBddOUyBmod9J3oneciWZ9bpkrYqxOI8 H3RyrqD9j6An01gNe7irbyuHlwVAlsXuoYo2S0jk86VT/g8hgjB13e2jzoIWvi5kejJqNsGVzV7 tNp7ybx/nD/9Gx6lt7CtDJYCXxd4HK2H7DF18uZpQUNIBS++uVURDaXwWPvUPYqcvpVG0+E1tKv TtlXQJjyzgQDigrTPqWR8y3oDQc8I4O9I5g== X-Received: by 2002:a05:600c:3547:b0:49c:fa21:e73c with SMTP id 5b1f17b1804b1-49fc574121dmr56028075e9.18.1789808116533; Sat, 19 Sep 2026 01:55:16 -0700 (PDT) From: Manos Pitsidianakis To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Volker=20R=C3=BCmelin?= , Alexander Mikhalitsyn , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Gerd Hoffmann , "Michael S. Tsirkin" Subject: [PULL v2 05/10] hw/audio/virtio-sound: free all stream buffers on reset Date: Sat, 19 Sep 2026 11:54:52 +0300 Message-ID: <20260919085510.3388454-6-manos.pitsidianakis@linaro.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> References: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> 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:31::10; envelope-from=manos.pitsidianakis@linaro.org; helo=mail-wm2-x10.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 @linaro.org) X-ZM-MESSAGEID: 1789808220157158500 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 Message-ID: <20260803081159.91981-6-alexander@mihalicyn.com> Signed-off-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 84083be882..f9822fc609 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 =CE=B3=CE=B1=E1=BF=96=CE=B1 =CF=80=CF=85=CF=81=CE=AF =CE=BC=CE=B9=CF=87=CE= =B8=CE=AE=CF=84=CF=89 From nobody Sat Sep 26 20:03:49 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1789808222; cv=none; d=zohomail.com; s=zohoarc; b=KomVzbIH6ZqqiW+CRNz5C7B7J2XCVs0ZAcJS7TQJ+g05InTrzJeiAuh1yaDnF5vfmQ43OnUSdUBfqrtq6Dpi4uqFYwU0nM7RRDvmPheJzx9qu+odvlG+T7oApCsXAgtWIFM/i2xjdOrCfaC0/oUaXhdSpQN+6z4ARgA6zarBs1M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789808222; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=0xxlWberjV/um7rJumsSX31jfpCd1ioF9db9gWnV3gk=; b=SccsUocLyi8kH2P0dYU5h/B5RU6taQAsLxS0ep5OMoiY7goitu+m+1k4HbzBDPkH8olj86hqQcXslRohA1/fcBYgv/wKTtO5aj9fUdLUTWKJtfnKQzaR0RTtOosCNGOlOL3OCj96T6MOBu2fGCxOhFS+zB3wGf7XhOGaTHPg1HQ= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1789808222203115.3242617936337; Sat, 19 Sep 2026 01:57:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x7qr1-0005Cq-0k; Sat, 19 Sep 2026 04:55:27 -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 1x7qqx-0005BH-Uh for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:23 -0400 Received: from mail-wm2-x10.google.com ([2a00:1450:4864:31::10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x7qqv-0007I5-6n for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:23 -0400 Received: by mail-wm2-x10.google.com with SMTP id 5b1f17b1804b1-49cc9f581c4so5680815e9.0 for ; Sat, 19 Sep 2026 01:55:18 -0700 (PDT) Received: from localhost.localdomain (athedsl-116222.home.otenet.gr. [85.75.29.157]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fc58ce1ddsm82736875e9.3.2026.09.19.01.55.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 01:55:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1789808117; x=1790412917; 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=0xxlWberjV/um7rJumsSX31jfpCd1ioF9db9gWnV3gk=; b=zU8qHjv1lYp1repsAxXs9QLY6m1ktcG+z5RPr5lAba49RW4cAtS/q00o0PuhYuRPuh t1mYRwDZDQLnDYS9f21Nr6siE613c9zwgoA+WUHEN8IPqJiqKidWGZk+kUgkhIC0RCaS FX2GQgsv2rgZn3D/nKIX8qH/5I4nyIAdwvtDLrGvtflgbU1HIglsIg32cIa35VUF+K0z hXGWkzOb6jsCcYJ0WDri5Ro7/ZaRKb9teiIWzo9Iqc8x58sHGaq6wnca/uS6EhQnOCYB YwRoD48m9ImXHLsfsE0vfMqnBOJRT49tPawBJbjlQ1yLiK2TXX5qqpsu6UlzekD4ojVj 1DvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789808117; x=1790412917; 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=0xxlWberjV/um7rJumsSX31jfpCd1ioF9db9gWnV3gk=; b=pyd1qj9S/Ed8YskRl4LGPIBrDzbKak6ON44ZI6RKG6cQI8K8p8IBghL+XNR+7AOs/s UFDHZH8id9szMn2Ed7qyzc1zYvvEHf2zp3AzCZXa6+6MtrTgmlT4Rgjn7nYGw/Hajy/Z p3X7kczQxkSEUd7LhXDVecqmHigl5ufe+TGGe+1/owMsGh16H+YYycjqrIYsS1l8D3t0 /tmJvkoNNW8k3bAqYqNQ8zFDkBWc6Ly3Z1KWfckc7mUqz2zId/UD3K6Qyd42hok579jU lPggHlZTv7zuznb8NawDqsCyV+RYKZQLw56c+G0gKCWi2HYR4Z3nr9iXDJFgP3pm/Wrh 36NA== X-Gm-Message-State: AFuF++mwTR2M/cyUSWB6vOGdpUxgEu3gcsnXnYVHu5bqDxMj1cqPkWW3 6ktDCf6vwfH7kdCage8ifg6tOsHoNPLz7H1eUbH5otKOi/zmEDNPC7qhQgZS6g4A3q19GDrIRh6 wWZxIEJ0= X-Gm-Gg: AYBFou13nigVjvCMFtvF3Ge53pSC5/7rtn7+wL0Vj07pbN4//11Mq4yU+x4QBnoER4Y cerGHRJteKbpo6Jtp4d0KJYlPfE/5fNWpUtrzZn4Gbik9MT5bzYBGEXmjWkgyC3v5Cb1CXsZi7k uofnWSGHJ5fbpZ2gv5aBvXANytwTInjb9sLEn5haWl9yPpRH9/mhKnlwO1THb0xwxGXZg2Zecrd NyKLuIOL3fJcQjaTT5sYuZGO6M3m9yKGID/IIsK//83D7tpW6yNaJPkhezJhdTCG+v0yhYSsz2p suITPuBJK9pk9zOpjl6iPH9Bqtv90tZUrpelZxFYNsTHIQQVDZvMYAA2/k0bpHvpgsfUZ57fv5p h/8R59X+enQ3YOliuiZbiGaDdQsyd+Iai4cOEc/xLBUwb77cs7suGUv53ePurTB56kbX6HmX0Va nxUwIJVjpQW/jtF+62oK85oxaWZoFYX3ikF8ogk1DjVOCTQHKqiiuY1hXAQJzfCvQkKGMaUFvzu 2iOzcIr2IgSdJJtbWbWEvK2KFE9MMaOdAN48wiXjRI6joDcr31wSTqdSBa+uRfJlnzkqjvEPi+B O54UL3aLrle5viyw7cXAeY8CZN3dGapgAT/mn5zBdtnolk0rdjqgriQ/RvHwctyP+lKKEumcfGK ZFgzKibqzHLGRyPdSlsi4MskLA5S7AwPRkA== X-Received: by 2002:a05:600c:37c3:b0:49c:e37e:4389 with SMTP id 5b1f17b1804b1-49fc4f8528cmr73293965e9.4.1789808117475; Sat, 19 Sep 2026 01:55:17 -0700 (PDT) From: Manos Pitsidianakis To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Volker=20R=C3=BCmelin?= , Alexander Mikhalitsyn , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , "Michael S. Tsirkin" , Gerd Hoffmann Subject: [PULL v2 06/10] hw/audio/virtio-sound: split out virtio_snd_pcm_start_stop() Date: Sat, 19 Sep 2026 11:54:53 +0300 Message-ID: <20260919085510.3388454-7-manos.pitsidianakis@linaro.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> References: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> 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:31::10; envelope-from=manos.pitsidianakis@linaro.org; helo=mail-wm2-x10.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 @linaro.org) X-ZM-MESSAGEID: 1789808224020158500 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. [AM: there were too many conflicts, I did `git checkout --ours -- <.>` and then reimplemented the patch idea /AM] Signed-off-by: Volker R=C3=BCmelin Signed-off-by: Alexander Mikhalitsyn Reviewed-by: Marc-Andr=C3=A9 Lureau Message-ID: <20260803081159.91981-7-alexander@mihalicyn.com> Signed-off-by: Manos Pitsidianakis --- 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 f9822fc609..46026b8cff 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 =CE=B3=CE=B1=E1=BF=96=CE=B1 =CF=80=CF=85=CF=81=CE=AF =CE=BC=CE=B9=CF=87=CE= =B8=CE=AE=CF=84=CF=89 From nobody Sat Sep 26 20:03:49 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1789808193; cv=none; d=zohomail.com; s=zohoarc; b=nUCvVE4PQIu5ZGOswYNb4sPhtmnw01M/iZ2jxpPmxXiZQVNe+I3OH3mqtgE+xnxB2OPq0VaYddlAQIfVmrEsNaakOITvKxzwI61cgHvkG0Ko2m9mZmdZRQJ3/naUvDyIhxUWVHyTZhsQF06DTKNH92Z11b4Q1LDG0+Ycz/3+Y4A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789808193; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=GYlLTu5rquxdE3NcE4fe94KC98Y9bqPnIsrGIJD1aLk=; b=SJdUFww7Vp5FIFQWzAls9GD53DUVJtrjQW9IsunfOcnEAkc5f7KDYBBcS2dT7LFn2aNYT0eNohTzrjdWYB+woGjfX6d0BqLVzn6ZCHu6NPh0UlqtIb9QaaQ2ZEK+C9XPKJw5ctX7KYlZaV3shuHoifHEQnOW8jDAHfOpWsXxWD8= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1789808193692865.0029649626257; Sat, 19 Sep 2026 01:56:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x7qr1-0005Cx-EJ; Sat, 19 Sep 2026 04:55:27 -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 1x7qqz-0005CJ-ET for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:25 -0400 Received: from mail-wm2-x11.google.com ([2a00:1450:4864:31::11]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x7qqv-0007I9-Dt for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:25 -0400 Received: by mail-wm2-x11.google.com with SMTP id 5b1f17b1804b1-49b912e2406so7142325e9.1 for ; Sat, 19 Sep 2026 01:55:19 -0700 (PDT) Received: from localhost.localdomain (athedsl-116222.home.otenet.gr. [85.75.29.157]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fc58ce1ddsm82736875e9.3.2026.09.19.01.55.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 01:55:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1789808118; x=1790412918; 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=GYlLTu5rquxdE3NcE4fe94KC98Y9bqPnIsrGIJD1aLk=; b=IxqJ9yX6N28WCpQIAvTFGXnES4ymX7N1vcBWQEcclFQCAAnVyBzGeOWbrgwEGHA4wq cDKz3+RYftQe3flPyyFIVHcwgVhlsN7zRfpfUJNT3K51wAIFqpi9zZ8EkFlG1CumBHWk 45UqUOHxrrcO5bUllABv7cvop/+dI/UbhIVgQoaaQF1/lCk/8HtbARHona8YeGCAeuVZ 0Y4gOhXbn63jAw/SWh3rv0s8LWelpD26KB+KlkxWvLGDrFOUaZACNCBHjnEoh0XQ7i17 voVXvPmPdr7BTn3Fa67FKItNFUnf+wzOQ3pkRVE6OKr1dEPJQTIBvRa/cUI8xdv9wFpZ HW4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789808118; x=1790412918; 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=GYlLTu5rquxdE3NcE4fe94KC98Y9bqPnIsrGIJD1aLk=; b=dfg1/d9lImWdkZ8xe6+7fqaEFELr792mccEc3z8yyxLxtn75zgIlZO7YkZIxn9lK8m 988Opb2AudJbVG8UrjK67wkicyHlbbAK6/c/QCsvBuIuznwIEBsuxOKKfJR1lzfJm+9a 0o0qXnmNWKzl6ItXAvs/am3QZU9qyg5zGxBp97vbC8sbnQCfngn0uucMbmagpfRQjNuH YlY1EdYja83dsnENtWN9PR28pbBh/pMrk84K885ube0xq6ArYhSApmNxferI6evIp5DF c+LEPuaym9xnmcl9ikv/L2w9xdO1EiOaFy7s3mEPXfxgqykEDOZP5L9CCRxMttvsDCBS I5Eg== X-Gm-Message-State: AFuF++mtcYz+wHvbRz0R8V46iSdgJGv/keJI3ybnBg9brWyLIvq+jmdd uXuubJzS5Ot/8WJMuDewBG1ZjXBcNWLecZJBrdS4WiIHbHBwJ9oHzh2ZLdjDFE8pXTy5wkUGkJz iKNqWTnc= X-Gm-Gg: AYBFou3WZZ66lkiZWmDj8+lkrp6bZW1wYPyKK7Osw9xEgfEGZ9uhhq4N4ihlpODZCb/ gZDaVkqPaGn+6OgFgnN/ns1CR2jPiJiyDcyBXlYfDjfWjQduVcRE1r2TpUeG9ZgTEaBW+h/s3CO kmFg6GKFWgH6mp/kC0/bQawIbsk/f7IMjxiTBYX2Z5ex+jS5MLGo3QtHckrj8CEZaLFGa2tl8I/ GN6XB+AQY8+F0aBc1vDhNbEFXuzm6ZzIotWlyZbv5qPI4mX07dwKEbqzVZRRxZG/sc2Hi86/UeH U1k+Oj06mfROPSWWBWx0Cu+WNNhp9wOgpOciVmD3bz3Whuc5Tm75iJQ1s4G7nqWRB9l64onJ82W 07X0loShliPXASm1ca/+FHEbvVXqEMql8a69pkThAoujrgQ4vnF8fbtzCyjAWJW7II15h+Fssmb 6mt6ocK1+GRhk45ZlRUgGS1LhN1CXcsKdpMLRFjKOjRHbN688OgSsjWUiIV2vUXIBKioZzeRz51 lwBJGZlz3BlAkYr8nalrWtBMIcncnrjt+S4i0m7tt7hhIN8cjjFPeurR4863fiKWBKsdxeSm7q7 scjk7hS2BrnHgJYi5E254ivb0mGOcJaMSf9+uYks0QkjQv7Wt3zA92b4d0qfFR+OQltwAQZejBX T19d25ldH38rdkfGKRBLtpVymThsf0HKZNqA= X-Received: by 2002:a05:600c:4e89:b0:49e:6ca6:d40f with SMTP id 5b1f17b1804b1-49fc4ff40a9mr78819475e9.9.1789808118430; Sat, 19 Sep 2026 01:55:18 -0700 (PDT) From: Manos Pitsidianakis To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Volker=20R=C3=BCmelin?= , Alexander Mikhalitsyn , Gerd Hoffmann , "Michael S. Tsirkin" Subject: [PULL v2 07/10] hw/audio/virtio-sound: add stream state variable Date: Sat, 19 Sep 2026 11:54:54 +0300 Message-ID: <20260919085510.3388454-8-manos.pitsidianakis@linaro.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> References: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> 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:31::11; envelope-from=manos.pitsidianakis@linaro.org; helo=mail-wm2-x11.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, 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 @linaro.org) X-ZM-MESSAGEID: 1789808196094158500 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. [AM: there were too many conflicts, I did `git checkout --ours -- <.>` and then reimplemented the patch idea /AM] Signed-off-by: Volker R=C3=BCmelin Signed-off-by: Alexander Mikhalitsyn Reviewed-by: Manos Pitsidianakis Message-ID: <20260803081159.91981-8-alexander@mihalicyn.com> Signed-off-by: Manos Pitsidianakis --- include/hw/audio/virtio-snd.h | 17 +-- hw/audio/virtio-snd.c | 217 ++++++++++++++++++++-------------- 2 files changed, 126 insertions(+), 108 deletions(-) diff --git a/include/hw/audio/virtio-snd.h b/include/hw/audio/virtio-snd.h index 97ffaae18b..85d5d7c861 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; diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index 46026b8cff..1c218569cf 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); + } + + 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 params =3D virtio_snd_pcm_get_params(s, stream_id); - if (params =3D=3D NULL) { - return cpu_to_le32(VIRTIO_SND_S_BAD_MSG); - } - - 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; - } =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); --=20 =CE=B3=CE=B1=E1=BF=96=CE=B1 =CF=80=CF=85=CF=81=CE=AF =CE=BC=CE=B9=CF=87=CE= =B8=CE=AE=CF=84=CF=89 From nobody Sat Sep 26 20:03:49 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1789808190; cv=none; d=zohomail.com; s=zohoarc; b=iipL1NiAqUSni7Bfk1W7yrMxpvbPzdz6k1SOIRXHCH3fQy0CdsCXmKMBYZE28i2gmigXGegBiG106voEB0sTyWteDxEF7WbkmnCEVuTIjZyKDGRYIrj6wNjcKXAv0rbdyQ6n+1mhfWnc1j8EFu1HQLsm8p+jQ3bHqsXU2L+T7rU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789808190; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=jC5ApYaM6D7JDXls9hD8kZ6TLH9GMRvv40+wb09BZ3s=; b=n3ugSTRZ12IwHUwHYij6BixRJUl7YdkB06dPNqNNO9BdW3a2PoWA7xLgEjQE+7/6ZWXQoQ6OZ75wEYFyjsL1BfSa3rMd1mJ+pI0VD1+B14IzXIhKyCHJtk82I7C6ZPQLBrLd01jm3zeGRY2xfpcTv+h8fED8T7haQuuiDyCNemA= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1789808190843580.5326433006161; Sat, 19 Sep 2026 01:56:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x7qr0-0005Cn-EK; Sat, 19 Sep 2026 04:55:26 -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 1x7qqx-0005B7-2O for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:23 -0400 Received: from mail-wm2-x10.google.com ([2a00:1450:4864:31::10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x7qqv-0007ID-6p for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:22 -0400 Received: by mail-wm2-x10.google.com with SMTP id 5b1f17b1804b1-49d097b4939so7230955e9.0 for ; Sat, 19 Sep 2026 01:55:20 -0700 (PDT) Received: from localhost.localdomain (athedsl-116222.home.otenet.gr. [85.75.29.157]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fc58ce1ddsm82736875e9.3.2026.09.19.01.55.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 01:55:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1789808119; x=1790412919; 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=jC5ApYaM6D7JDXls9hD8kZ6TLH9GMRvv40+wb09BZ3s=; b=beAAuYdh8Ji7kUpQ6MjGfYPkKpmiZsj4LbqSEfFnsNxeUlE8/TcXhiwb2KUnhiMwKr unZ7DqgJebq1FIWNX/eKEhtf+AaKuZi8WMhGlTeFsUne6rlIA7lXM1F8PGo+XQZfUyfC IA2FdhmYV6/rcRlaWhIIk6Ul0ZM/rJRqrBIeNoBvha4dcDMnOPvPNKlk5L9eZE8Bpy02 qsDWNJONRssM+g9TmZRrT0oeTsYSDcgE2ZutbPNz3iSVO/RoJ9iCDNFNGa0B34AWJzwg ejGTHdKRHWqNnyirvW0dduuid3ZBw+PfXecx/gXvV1rZvA1Bh6TG5juMiAhiR2ZrYox/ xG+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789808119; x=1790412919; 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=jC5ApYaM6D7JDXls9hD8kZ6TLH9GMRvv40+wb09BZ3s=; b=0o+OXdp5oXJC1XfmOWUobbhasHDeuE50Ub9wTAo98dGYJ+OYomlXHo4Y3cDeeszKZA 60Id7mXteQJQUYfpQ6aFFvxfV/4XDDj3jQQ47mxWZyi335ClcHPlBo46747owr4sG+Wd K0k92iwbr75c4rPgx5S+NgfvSD1Fr6j15LmFq7wOE5EleXFhtIrAtj88Z5YsKOUjqzt2 1PL6kR4DsYEHarQU+CU3ppu3N0teCx67yTyvWbLTcw/WIAaxizZhThzM2evKO0NJs49V IF4OFM/Fncpi9tbR42L8wTFeL1pX6Sr/ihJ5ru4xT66DItKi9f0lu1abt9e1liGgbqSz Cuxg== X-Gm-Message-State: AFuF++kDiA5egfLFgCnWDAxnoWB/dgR2fD8aiBRwzZfD8DDOlcQ1K69x IcHbgWQtQZGuv6TL9cLASw2EZauIxhFjUzIkJ1ZcTPChATD0zrxSxohHEa23bvjzK40LKdiuypp lOaODmVA= X-Gm-Gg: AYBFou3F4c5hdTB9Wcbyw4AJBHmuKh/3IKt8+w1gpI/9Bw07aNoJWvnH753De9yGT80 sWHeeUnUBn4Dn+B+aJ6MmpcHQmfETGkRWHC9y12/ApK4NkQJjYTAVhOTUGZV9syKlbB19D3W1Ud OqUi5DsZjagGcnjxvxMZB43bHZr8xNT5B8Dj5Thv5DMduHMeIcdh8vjBbXHCmnSE1fqeXT69TuD oIjNO8YFgiW0If6n/HWYRzknZmWBS5BrFbENQz97+vjH4kaeRWgyQHbpoAe40fDMoXboV7Wnm8w XGv73wU5bC03SHgJSFFtPrP2HwjEVDjzVowAAC8SsnQ6CbZ9QlITaLgsMtUOJcRoZ1YKWWB7Jn7 t3wKg1u68ga0eSlQ374pk181RPKiLAPIVwpdhxaAT5nJeH0At6RAOs3I/LPkeHNUo/m6gasHOYP 9yYIIvR3H+Jw5E4J149paqKtEJ5duymvnYX6GBjpUfJXihSSccv1QmhFumasi3Ps0v4mDxV+ORN Lpyf5ked/Rw19XEzzkuIggmq1NzA810uagSo9VreP0ad85vFaeFAs52QvFOUgMErT6sUJApRVMC 9WXwgC3o0k3Cnr7B7Gen5rSVaf7pko3p+04Qb2tyygd7p+LrWfnO8YQfzbmSaGHlZyMoDhX0E7S MhqxNB42N+bYR4Zibe9m9k5cvElLEGg/ptQ== X-Received: by 2002:a05:600c:19cb:b0:49e:8184:f619 with SMTP id 5b1f17b1804b1-49fc57410f2mr67152235e9.22.1789808119554; Sat, 19 Sep 2026 01:55:19 -0700 (PDT) From: Manos Pitsidianakis To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Volker=20R=C3=BCmelin?= , Alexander Mikhalitsyn , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , "Michael S. Tsirkin" , Gerd Hoffmann Subject: [PULL v2 08/10] hw/audio/virtio-sound: introduce virtio_snd_pcm_open() Date: Sat, 19 Sep 2026 11:54:55 +0300 Message-ID: <20260919085510.3388454-9-manos.pitsidianakis@linaro.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> References: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> 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:31::10; envelope-from=manos.pitsidianakis@linaro.org; helo=mail-wm2-x10.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 @linaro.org) X-ZM-MESSAGEID: 1789808192049158500 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 Message-ID: <20260803081159.91981-9-alexander@mihalicyn.com> Signed-off-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 1c218569cf..7944d2b3b9 100644 --- a/hw/audio/virtio-snd.c +++ b/hw/audio/virtio-snd.c @@ -430,6 +430,37 @@ static void virtio_snd_get_qemu_audsettings(audsetting= s *as, } =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. * * @stream: VirtIOSoundPCMStream *stream @@ -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 =CE=B3=CE=B1=E1=BF=96=CE=B1 =CF=80=CF=85=CF=81=CE=AF =CE=BC=CE=B9=CF=87=CE= =B8=CE=AE=CF=84=CF=89 From nobody Sat Sep 26 20:03:49 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1789808175; cv=none; d=zohomail.com; s=zohoarc; b=Z8dhipe6hpTi9ssakV3JnIi1ehzk0ZJ8G/zgN7kRpACFqN2ZJ5/cc7+bUwIOQvmBoPgRgB9xk/ZwCO2/bOWd0SxVaX9lqgnATDZoSDUiN+t9NXN8WSbvpqR3Ot7q91opMDlD94eUpW/uhrvXCLubpfYDKahqROe4Qf1bXhoccVA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789808175; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=AcYTJx9E4CYdyyMY0Az5kiAEmPZKXqi/EESegL6wNG0=; b=TeiQNb+jG3WmWMcOUVfMiJYkAg9VCVy3gO+FCYkpTbxIIh6wZ6Rzl317ZQXNw32EosSuIQgezvps1Mw3I9GUOmChtKsyK/uQsfNvb+kvaMRlFs1PRmFVTcymo1jFU0BPb2QAR0VdhvEsnZD65K2hmtkTr9AjOS8ddeBdXJNICKw= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1789808175156480.16028951379735; Sat, 19 Sep 2026 01:56:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x7qr0-0005Co-Vq; Sat, 19 Sep 2026 04:55:27 -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 1x7qqz-0005CH-8m for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:25 -0400 Received: from mail-wm2-x10.google.com ([2a00:1450:4864:31::10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x7qqv-0007IL-SL for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:25 -0400 Received: by mail-wm2-x10.google.com with SMTP id 5b1f17b1804b1-49b912e4b11so7911375e9.3 for ; Sat, 19 Sep 2026 01:55:21 -0700 (PDT) Received: from localhost.localdomain (athedsl-116222.home.otenet.gr. [85.75.29.157]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fc58ce1ddsm82736875e9.3.2026.09.19.01.55.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 01:55:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1789808120; x=1790412920; 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=AcYTJx9E4CYdyyMY0Az5kiAEmPZKXqi/EESegL6wNG0=; b=aV0YVcRGmyGdsiCFltvSz9RzUEiYzXlaAyBIV67NAhtBe719+jCY2QzrQOdKe4vtVO bX+yQFCcjaAI0WJJUefa71agKQ9CX/OWuKsSaO59JY8S1Jfr7V/tn7cpR/GqpMhw14bF d0ZFEybqeytaMg4qGX8qWeIExpLretf6KgGqWYRUROqzh/wMJERqPkC0hYmY3AnEJs+N CoSouZqseiMgCCzTQK+Moywqx2lqcaKA+6jVfMabaDzru+EWtDs8EUCc6jyxSJvKttDA LQ50nrOGvoX/kgA2XpJ0eySNjYY/lmsVxNvGMc1bM8lRQi4cs+bwPkEdUhP2r3S9vsOe 2/GQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789808120; x=1790412920; 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=AcYTJx9E4CYdyyMY0Az5kiAEmPZKXqi/EESegL6wNG0=; b=Hq8cGlkrrSfzIHDOsYMjd7yWhgMoc+yaEC2unUpZ5KF/Lst+VPi9tlNYAtdMiXA0DE 4ttVlgQcjGwUHieWg8UNamhRxv+vfx3NoD9VfM33PRw3mSSVjyHzMvRGf7juojz3znoK LxweNn+Sdez4FfpoHn209qwCGEdFoUbSR1Kgq90E1OIUMCzuAi6dxOS4ciSeEPIIcQVK Tw6o4j3Liph1txxkUpmeyFlEu+rHsZuMhbO+9OpZcqdN0yjNSxVEbNEyZLZTe537GQea FqTpjPULwqvLZmyn+sn4YTLgfrpRA+qSsL4H+zYk+bMIB4gpA4q11vDnmh+sTdD64/m7 /2oA== X-Gm-Message-State: AFuF++lFuh/NGeZsboeZNPnyuMbD045SH/MC4WHMHyDXBJML+kGUhx/j 6qHaNfJ9tfL33iKnha6iy7krQlUHY9n6fM+2QoMV4RWYz22iJKCZTAbJkFUx95/NY8b9oZkFyRA 51QQY0zo= X-Gm-Gg: AYBFou21IhzUHuq0a63N/4B3RR427m4Slxwd01aLwMatCRlSgQq+HCXfeOX1njoHZlK kGRrBnPEvxq7wJI2DIcXca0kCxYuJeuUKThSzKrm+dDFwQ4Am/FaZzwPDsUHt7LrTt8Zj+TWAK6 bd2fabdH2M9XznN1yHv9jHnzrjkdmuAMAmNV9ZYMT9jN29KmHvtlS/S+KRdhAJUvy6K5W4DHerx NqT/JaKglMMcRyjtsxdzhpY1U+uEQzaSRieFi0GHCrcnpo4PIhf9XTTEl1ojPurdrWYyAcktxEz WOp//v426clyLSskr6/AiDcxlv0zcLU4jlGPHnpPSM9YdnRae/cCy1pCs/8uWh64SLos4Y78it+ ECnGHAU1iKJ93GBj8UKW5Hjt1QCIh7B0rw1j5w7W3i8exIxG3WerbxnIk9YuFYgvWoe5HYGnvbo Fe4IpVgFQnW4Iut05WY4NEc9GhY02DyZOt1Pcg4OnZ9TqpZp9ljZcYDQAXRRj0T5X2sI8gU131k sVM7co+VklhKEHZ4gR021xl3lGs/y57+PbsGA9xJGxJ/SvJGH/pZHlHh9Vld7zsHF2MNzbytx3i ublrzmA8sdT8hkOC43ZVdKSdeHXIifQue41nZCe1txkTjYPlAgYUUOYLAWhwErbYKrvV4Vo2DFx jcYvhax0QloZn5Dgsyd/j/OrtYG6T6rWFxDkWYVmWHUJZ X-Received: by 2002:a05:600c:46c7:b0:49e:7a00:b9a5 with SMTP id 5b1f17b1804b1-49fc56dbb20mr70023155e9.4.1789808120480; Sat, 19 Sep 2026 01:55:20 -0700 (PDT) From: Manos Pitsidianakis To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Volker=20R=C3=BCmelin?= , Alexander Mikhalitsyn , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , "Michael S. Tsirkin" , Gerd Hoffmann Subject: [PULL v2 09/10] hw/audio/virtio-sound: introduce virtio_snd_set_active() Date: Sat, 19 Sep 2026 11:54:56 +0300 Message-ID: <20260919085510.3388454-10-manos.pitsidianakis@linaro.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> References: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> 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:31::10; envelope-from=manos.pitsidianakis@linaro.org; helo=mail-wm2-x10.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 @linaro.org) X-ZM-MESSAGEID: 1789808175843158500 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 Message-ID: <20260803081159.91981-10-alexander@mihalicyn.com> Signed-off-by: Manos Pitsidianakis --- 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 7944d2b3b9..12473862d2 100644 --- a/hw/audio/virtio-snd.c +++ b/hw/audio/virtio-snd.c @@ -461,6 +461,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. * * @stream: VirtIOSoundPCMStream *stream @@ -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 =CE=B3=CE=B1=E1=BF=96=CE=B1 =CF=80=CF=85=CF=81=CE=AF =CE=BC=CE=B9=CF=87=CE= =B8=CE=AE=CF=84=CF=89 From nobody Sat Sep 26 20:03:49 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=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1789808176; cv=none; d=zohomail.com; s=zohoarc; b=Lys4bOVBwqhDQPiAjsuoAxV9eFSyBTSNhUvM4TIVEsR7nKo6Zn/VQWOFQhn5VDHE9yhU/5nnqa7WxQyKpLN8RAaLXC4a81+TDaBxLeaVPz6CKjGAIm9ga96pHUgyHSHqb/LuZ2u18aEzoARC2opMGX65ds0nAhPZyh6OYFZ3sIE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1789808176; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ev1EtVgOCLRng9RIv1gIUfgjXM5TZkVOcIQwbt1kHH4=; b=a2k2lvEIf/me6j2+fzG7hdVhnEgOyiqc0Eq2SmC7ZTDUtBVSPHQ8C2UeskZwvB1I3e4GD7pXr/kLSLaYLFhI1spObL/yvfl7yw1BHKWXNeC+2xpm0HVHWzn/ZVIiynSNG6IXcfAj30QhzzcxgcVugJ/ajOqsPvrIUQCNiEvh5Uc= 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=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1789808176198993.4565145267466; Sat, 19 Sep 2026 01:56:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x7qr6-0005EO-U9; Sat, 19 Sep 2026 04:55:33 -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 1x7qqz-0005CW-NP for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:25 -0400 Received: from mail-wm2-x11.google.com ([2a00:1450:4864:31::11]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x7qqw-0007If-SN for qemu-devel@nongnu.org; Sat, 19 Sep 2026 04:55:25 -0400 Received: by mail-wm2-x11.google.com with SMTP id 5b1f17b1804b1-49b912d3931so10848605e9.3 for ; Sat, 19 Sep 2026 01:55:22 -0700 (PDT) Received: from localhost.localdomain (athedsl-116222.home.otenet.gr. [85.75.29.157]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49fc58ce1ddsm82736875e9.3.2026.09.19.01.55.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Sep 2026 01:55:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1789808121; x=1790412921; 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=ev1EtVgOCLRng9RIv1gIUfgjXM5TZkVOcIQwbt1kHH4=; b=BzcU2qkKa4T1Q4GIcTO6rLsU8ZuJ8/T7SJKBoMp0dguOvyFI6M8hMpeG9mYxc9lvv/ JqtiJadWsnbHcRGYeopOj/EJ+TFPogQ4tiGNBdSemqQA4IYcru7uGJpuaNFOEh6dpgot kE8y94DkK//ARjhKev9BPDD/3MYrOJjuut+zw3/ZkrzTB+JqJgm/j8j8LoueA4mVo+MI oyYbV/wDeQB/P+LbDadBYC+wQJofVdZjh/iwah8T5azq4oNp0a9+1lK4oYFfT/iclpMG UMvKsDfyMVjc4F4q2OrL3KB3lDcxZf5m/lB0qhoCvF7F2+PyOoiyx8CrM5swleWa8r4q sUJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789808121; x=1790412921; 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=ev1EtVgOCLRng9RIv1gIUfgjXM5TZkVOcIQwbt1kHH4=; b=zWgxeB9Omcjy1jcTgYq1oQoJlMuQI0eHg9znCAQ9a07PEHvz2Uf8QLSqWzXGeTF3dO zy3GuO9RhXOGZVGumN6RPLfbF6tywHSgH1Z/2VwkvQteclHZk7AD4E2rUbxs4QgcDCCs rO0W1dFOZ0U3HBry7hLKbzIkDKvtzY5VPxpwW5oTJGiakn291E8c5Yu453YLxzg4FJaU Aa0iKvsuuClhHAgFKePz+o1FKsbhlqrBquDxHzWOD8hQfCr/4HdVJbCoCcproCF9GGTy qdjgV40nirK/iV4GI5IvY8/ZcNlk/IYk1hcUwuGXTn7dV24MAJZO5dHK4HNk/ER03HsB GhYg== X-Gm-Message-State: AFuF++lEljSNlFqGi3zXdUf+UkPrR3oj89UEFja+zh4t1WhimIFn+ogc rlldqUWevDOgzXxxNbTlDWZPlNQ7xsmRUol1RDYzVl6FcRbRXWmNkGD3c0c4DncTXkMesNOcPRF SnCE+i/E= X-Gm-Gg: AYBFou3kkIETE7uNdspN+I9bGa2J5H+VJNNxlqSgxtHK3+xRJAHwJouytKDcZOGgpGG AeuI1hEGVElXfKaRqYj4AfzZ7ofDghR/M0Jgm3pPIc58vLitO8nW2Nq9NJB3I53RsQhHr4yHMm1 sAfEm7ycycZ3XUsbJ2tQY/FOCmq3I8CAdpLKUDZbFMnncfHQJEeGk92XkY9CZT2rjGVO6393g7Q WsPUoAXWCXl9gSZz+4ZAWkGWH4jelr2B5qL7An+VU+jf6e0CzSDStq7pWTKI45qc0WbTaXRYgkk 1Zu212DGRbyvR6kNTvlJ9ySqZ9CUtFAjCIb9CT5PwFJGx1HM34JKqV8fS40mb01+I6TpUTG2+J3 miiDW3uAYLGwQzqBMsYa3wQiYBNRLFYu+xVRZPtTaRmKy/dlSs+VXUl56lpm+fEqPV4qX3ggjm/ L6bX8Ab+VW/5mMlNYNVbcfadvZS0MCsgedL6YwFhT3NZ3i0pO24ViQltCFO7+hkDYLmLuLGPnw6 dmNLlrMpmAYSIGV1KZItOLQ3Oyn8Cbr42F58DbeTIOC78fPLiWIC3DhtRUzBw7EspRdNSpLFctz D7U2KvUlkcxIaxoaFQyOx4Eetcct7ekcfc6JBYj8gYqHrKYVyUZ4v82/N4N/tG2bx8Ook0+uInn DTB7MHShf+qeHl1bZCNO4prdKXkmTzYGalw== X-Received: by 2002:a05:600c:1d99:b0:499:8ff5:8ecc with SMTP id 5b1f17b1804b1-49fc56dacbfmr80282155e9.15.1789808121421; Sat, 19 Sep 2026 01:55:21 -0700 (PDT) From: Manos Pitsidianakis To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Volker=20R=C3=BCmelin?= , Alexander Mikhalitsyn , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , "Michael S. Tsirkin" , Gerd Hoffmann Subject: [PULL v2 10/10] hw/audio/virtio-sound: add missing vmstate fields Date: Sat, 19 Sep 2026 11:54:57 +0300 Message-ID: <20260919085510.3388454-11-manos.pitsidianakis@linaro.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> References: <20260919085510.3388454-1-manos.pitsidianakis@linaro.org> 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:31::11; envelope-from=manos.pitsidianakis@linaro.org; helo=mail-wm2-x11.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, 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 @linaro.org) X-ZM-MESSAGEID: 1789808177877158500 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 Message-ID: <20260803081159.91981-11-alexander@mihalicyn.com> Signed-off-by: Manos Pitsidianakis --- include/hw/audio/virtio-snd.h | 1 + hw/audio/virtio-snd.c | 83 +++++++++++++++++++++++++++++++---- 2 files changed, 76 insertions(+), 8 deletions(-) diff --git a/include/hw/audio/virtio-snd.h b/include/hw/audio/virtio-snd.h index 85d5d7c861..384d2868c1 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; diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index 12473862d2..6df7ea0eb0 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; --=20 =CE=B3=CE=B1=E1=BF=96=CE=B1 =CF=80=CF=85=CF=81=CE=AF =CE=BC=CE=B9=CF=87=CE= =B8=CE=AE=CF=84=CF=89