From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770538; cv=none; d=zohomail.com; s=zohoarc; b=YrkzG0qfrJWiWaTtI/WYnoUXcFWKtwQr/b4Hzajt64DMtuBgD3KOYVM+YAuQ98NaxqhXhICYN0OvuNvSV9YHRWkFXUWRqFsBWFW0ekAAxXeNyWMYoiwLuFFn3jV7XzrMIAlXOWr+OPQsOAVN/HwVCiyniEPRrVfHk4qOtVD6KhU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770538; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=QbcvBNqbzFwjNeD7oZ2DnxvwurhyiDZl0WS2Ou2JOJE=; b=N0jCBTWNTsWZir7YKvAAlvdOeA5zz0UorEZonRhfzcTrvLQl9wkHMoguPxzV6cTIB9/CuqXRdgYFfzdraY5yu0xBsuPqIpek9Ac5UjYJKolr6orrLkTBCgttmZaO6fDBeNuc64RYLvYQlufuOOaMFWFV1p93XEAvQxkTL9Pmnhs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177177053821146.28045574479552; Sun, 22 Feb 2026 06:28:58 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuARi-0007xT-JG; Sun, 22 Feb 2026 09:28:30 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuARd-0007xA-0z for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:26 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuARb-0006eV-H2 for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:24 -0500 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-548-lT6AtbM_PxyYXtUVpr2qMg-1; Sun, 22 Feb 2026 09:28:21 -0500 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-48079ae1001so6108915e9.0 for ; Sun, 22 Feb 2026 06:28:20 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970d4cc81sm11791946f8f.26.2026.02.22.06.28.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:28:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770502; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QbcvBNqbzFwjNeD7oZ2DnxvwurhyiDZl0WS2Ou2JOJE=; b=P9Mrrg0ANqp0ZigMQ65q3koXenvxLySBF3WHxI/blm4sBVXutHailnnfxbO2lrANC5QGnN ZlGGEyp2O5N2FldKzhi2YKC6owr9cUmbtZkzdr9m6jYoBrCPLLanjAK+mEN6e7VwtEVUlO iDVxFVkCLNDPrIQlAp6t8MbrKLNbB4E= X-MC-Unique: lT6AtbM_PxyYXtUVpr2qMg-1 X-Mimecast-MFC-AGG-ID: lT6AtbM_PxyYXtUVpr2qMg_1771770500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770500; x=1772375300; darn=nongnu.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=QbcvBNqbzFwjNeD7oZ2DnxvwurhyiDZl0WS2Ou2JOJE=; b=KLhH5PtN0BVHkBJgaFxNh9y7xNDJMUvATH+DlwbYeIrd/Erc0Zw6gN5ZSuHQEqQQdL M8POpYAfEHNatKLfedmDKbKTx4DvZjKSp0AASRmdPSjACMKoc9dt/f4bgMKX9roYf8pH BMXF2lkU1wyGfd+qOFitAFZgUHal9hwOM6+s4wmqhdhnZynJnO1dF3qSAa5KSJAXppN4 pfBILlx5iWQrlmXK7p0R2OPqpHnbKVs0+VwNIsXI21Qx8mH0WKormKFmg/3L8i+MEfx9 hQQvq0F879YvoJFZ9StxYkbqijyJQ7v+c43UDImRSzSCCYnMi9wX0brPBX8NBcNLE5QQ 7KIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770500; x=1772375300; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=QbcvBNqbzFwjNeD7oZ2DnxvwurhyiDZl0WS2Ou2JOJE=; b=WDwi/5a0PCUU9MB1THrw8SUL6+gpaD2hMXIsqftcWy7vTG0gibcHlUul21XYbnYNNh j66nLTxUbKQKhMiLiEcM2mfXe3dwGuP1qg47u+hBlSG2fqMGhVgM6JSuvbDmMSwTLF0N tJSCkjxgaJTDyToFrK18KNnE/bFVtqfq/dsqo7ZbalXqtQzFSHy0itD0bwk5rXL/79hX aPYcQrwQZa8FVP3KokTlFHUIxjXG4aRq350aM6ZsmR7BPdRPURqsa4VVytO9shz4jO1F 5L5pGxn9iEcDNBZHPv6WfoRC2c0OyGgiMJ7byFYxS/DDEZ1OdFcTXqoO5Qh0q5clBRv3 2h+g== X-Gm-Message-State: AOJu0YzJseWut6nz8skBNjDlYLD+VXDfixFi0zge9MqMy6O5nzgRwMOa Ez7yeRFeIIA3wRr0TMOlOAFuSbmLQ3h3XQWHHVfYK8CKqC2WtBAUMAxqAg7w/DKCxJIeFnscm/m tzr/qaxolZ4eyAJ2+B6xfXBV4luG/OnPJ8ivnk8hCCfPhzEfwBRpqWB0yd2I3mvoipB8xu5ylfI eeBlWJRLmTld/cYgR2lz65EXr1kNXQF8pIew== X-Gm-Gg: AZuq6aJUu/jE60ryrJJHBjHcmktEz5bCgSndLuGSVMr+kqzUd8aaUEd0ehsWj9urBR4 eFPgTlJOCcnzEP0Skhy34laxCSHDFxFsHhRriBWva6HlFcFwLI/m06SHhsgK0Ie+ewLDys+ploF tdZsDFFHeGU29XpeA6SruorlKARAAQkzE0+f3ifZU0m0v3FU0sJ1+FjSoKyQsjVlR4bNvYxtAcu t894HjbUAs3abCT5WZE8/cKfEjrR1nH2CvEZpsf4QdtxTZV1JQJ+hyNWdvy/3OlnhIX7BfjWx41 bljoOTWmz+e8dFDjgN7vWBDcXy8Cbdmi4OodplUiSklx3nMSG2WlOIq4hhcmGbK1vbHSibEAHqG Q2rHcCsS3x0/HryPC5ubpg6h/mEHUA7L3rZRfzR7cvNVp7Q== X-Received: by 2002:a05:6000:2485:b0:435:9cd5:bb2a with SMTP id ffacd0b85a97d-4396f15bd9cmr10795069f8f.24.1771770499530; Sun, 22 Feb 2026 06:28:19 -0800 (PST) X-Received: by 2002:a05:6000:2485:b0:435:9cd5:bb2a with SMTP id ffacd0b85a97d-4396f15bd9cmr10795011f8f.24.1771770498845; Sun, 22 Feb 2026 06:28:18 -0800 (PST) Date: Sun, 22 Feb 2026 09:28:16 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Yodel Eldar , =?utf-8?Q?Marc-Andr=C3=A9?= Lureau , Stefano Garzarella , Pierrick Bouvier , Paolo Bonzini , Daniel =?utf-8?B?UC4gQmVycmFuZ8Op?= , Philippe =?utf-8?Q?Mathieu-Daud=C3=A9?= Subject: [PULL 01/33] tests/vhost-user-bridge: Move to contrib/vhost-user-bridge/ Message-ID: <42d2c1cc9e89b77f1287ed433c655bc9e98bdc41.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770540660154100 From: Yodel Eldar After the introduction of vhost-user-bridge and libvhost-user, we formed the convention of placing vhost-user daemons in eponymous subdirs of contrib/. Follow this convention. Create a contrib/vhost-user-bridge/ directory and move vhost-user-bridge into it. Extract its build target definition from tests/meson.build into the new directory, and include its subdir in the root-level meson.build. Add a section about it in the "vhost-user daemons in contrib" document. Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Yodel Eldar Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260129133049.119829-2-yodel.eldar@yodel.dev> --- contrib/vhost-user-bridge/meson.build | 4 ++ .../vhost-user-bridge}/vhost-user-bridge.c | 0 .../devices/virtio/vhost-user-contrib.rst | 39 +++++++++++++++++++ meson.build | 1 + tests/meson.build | 6 --- 5 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 contrib/vhost-user-bridge/meson.build rename {tests =3D> contrib/vhost-user-bridge}/vhost-user-bridge.c (100%) diff --git a/contrib/vhost-user-bridge/meson.build b/contrib/vhost-user-bri= dge/meson.build new file mode 100644 index 0000000000..aa58c1df20 --- /dev/null +++ b/contrib/vhost-user-bridge/meson.build @@ -0,0 +1,4 @@ +if have_tools and have_vhost_user and host_os =3D=3D 'linux' + executable('vhost-user-bridge', files('vhost-user-bridge.c'), + dependencies: [qemuutil, vhost_user], install: false) +endif diff --git a/tests/vhost-user-bridge.c b/contrib/vhost-user-bridge/vhost-us= er-bridge.c similarity index 100% rename from tests/vhost-user-bridge.c rename to contrib/vhost-user-bridge/vhost-user-bridge.c diff --git a/docs/system/devices/virtio/vhost-user-contrib.rst b/docs/syste= m/devices/virtio/vhost-user-contrib.rst index 48d04d2ade..660d29a700 100644 --- a/docs/system/devices/virtio/vhost-user-contrib.rst +++ b/docs/system/devices/virtio/vhost-user-contrib.rst @@ -85,3 +85,42 @@ vhost-user-scsi - SCSI controller =20 The vhost-user-scsi daemon can proxy iSCSI devices onto a virtualized SCSI controller. + +.. _vhost_user_bridge: + +vhost-user-bridge - Network bridge +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +The vhost-user-bridge daemon serves as a development tool for testing real +internet traffic by providing a networking backend, i.e. server, for the +vhost-user protocol. + +Example +------- +For a single QEMU instance that both runs the user-mode net stack (slirp) = and +serves as a vhost-user protocol frontend, i.e. client, simultaneously: + +First, start vhost-user-bridge: + +:: + + $ vhost-user-bridge -u /tmp/vubr.sock \ + -l 127.0.0.1:4444 \ + -r 127.0.0.1:5555 + +Then, invoke QEMU: + +:: + + $ qemu-system-x86_64 \ + -m 4G \ + -object memory-backend-memfd,id=3Dmem0,size=3D4G,share=3Don,preall= oc=3Don \ + -numa node,memdev=3Dmem0 \ + -chardev socket,id=3Dchar0,path=3D/tmp/vubr.sock \ + -netdev vhost-user,id=3Dvhost0,chardev=3Dchar0,vhostforce=3Don \ + -device virtio-net-pci,netdev=3Dvhost0 \ + -netdev socket,id=3Dudp0,udp=3Dlocalhost:4444,localaddr=3Dlocalhos= t:5555 \ + -netdev user,id=3Duser0 \ + -netdev hubport,id=3Dhub0,hubid=3D0,netdev=3Dudp0 \ + -netdev hubport,id=3Dhub1,hubid=3D0,netdev=3Duser0 \ + ... diff --git a/meson.build b/meson.build index 4af32c3e1f..620b2ad903 100644 --- a/meson.build +++ b/meson.build @@ -4504,6 +4504,7 @@ if have_tools =20 if have_vhost_user subdir('contrib/vhost-user-blk') + subdir('contrib/vhost-user-bridge') subdir('contrib/vhost-user-gpu') subdir('contrib/vhost-user-input') subdir('contrib/vhost-user-scsi') diff --git a/tests/meson.build b/tests/meson.build index cbe7916241..87861b2857 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -70,12 +70,6 @@ test_deps =3D { 'test-qht-par': qht_bench, } =20 -if have_tools and have_vhost_user and host_os =3D=3D 'linux' - executable('vhost-user-bridge', - sources: files('vhost-user-bridge.c'), - dependencies: [qemuutil, vhost_user]) -endif - subdir('decode') =20 if 'CONFIG_TCG' in config_all_accel --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770629; cv=none; d=zohomail.com; s=zohoarc; b=lHUJJJaKsI65bhl65nfrPlf8azLHILK2NdUdG6KBnfZeE/2orWveswGV4D599BFxLraQik3BbmFXNn+V0Lh1MJQxw5M30yUtgfVsYoXShqn/G8UTl5bl+An5hkyy/kfL7T51xZgIu72CohPwEYtYUSyUUWfewNj5MxOozsjGbQ8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770629; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=eGKrtZ65eeoh5VAdeDsU+0l7R0P7GOEKpcj1zRC00bg=; b=LWJTyhIvGa7lUQUCHjbi3PPhoN5hASQI1i/qknTqi/ivNgIV78cvNn8vyN6GWRSmakgWqUPQHI27cAjvpUekU4oatfnkldUKx63+46xxFWbnNsGdzLHEkkDixIJb8kF8ZlAptZeTMUlI3r8StgxSlAEqnB0k3yONxRDtDad+wFQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770629201913.5257640000003; Sun, 22 Feb 2026 06:30:29 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuARy-0007zf-Fb; Sun, 22 Feb 2026 09:28:46 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuARh-0007y8-1e for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:30 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuARe-0006ez-MS for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:28 -0500 Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-398-n01onvEXMvynTfdmg8QR0A-1; Sun, 22 Feb 2026 09:28:24 -0500 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-4376761037bso2954019f8f.1 for ; Sun, 22 Feb 2026 06:28:23 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970bf9ff5sm13445374f8f.4.2026.02.22.06.28.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:28:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770505; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=eGKrtZ65eeoh5VAdeDsU+0l7R0P7GOEKpcj1zRC00bg=; b=g27jauuV7gMUxtg/O6/m7eRwV6FauRxBEHdDjqjGatFURBVOy1kK8IdyNlgvdxQlU+bZeG 5+IHeFoJpVcvxbJPtW/uha6293UxZ2f/KzsMkxWRm2FWu12lTeL/mbcP3fYQ31+4FdkuQQ T6m4MUz14tGfXf4HoAMLlCo0drKSnYE= X-MC-Unique: n01onvEXMvynTfdmg8QR0A-1 X-Mimecast-MFC-AGG-ID: n01onvEXMvynTfdmg8QR0A_1771770503 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770502; x=1772375302; darn=nongnu.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=eGKrtZ65eeoh5VAdeDsU+0l7R0P7GOEKpcj1zRC00bg=; b=WsoDUwcVxUHLeeAYTxfW/UhV32NiAvSnanRyAQnzBreaXMPacZzAWQYSsSiagLkNKk vBn3/wQiKvJ0DjSxqTv9wD9yBFMaTo3FHM0KjkyrCYkKj1c/MEiq7r1hlFgmuYq622Ng Q6IqXPkGOzp4CmzniWLBBp4/7k3/bJnBdKVvAvID0Cs+Me3ZqbBfuT6j245ztYSJBBZU HBxy8hwEAHwO/WlTlrn8uCPTGcaSDzYicpFwAcA7+47M53z86TDyzWtDQoryKO4cMq7J 61l+214joh+avJ/61ndAEczTrtD8df6aEG/4ZdJ7up8uTJXTGnq4Cp7PvMj7A+hnG7XR pJxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770502; x=1772375302; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=eGKrtZ65eeoh5VAdeDsU+0l7R0P7GOEKpcj1zRC00bg=; b=s5eWaJvRJV08XFLAyztggEn32tcqWdgQdByuJc8APdgHooYOv2uHk4LCdaI8LZyPt9 Y9MAWyUn+wo7VYFzaGcrScoaRpGIChI8rSk6DmSZvVenNb6swRSgNmEHaNbgH5+Zrk36 0aNy08U8MJznvAUBrneRQFzbd+On4RH9KbxRMcFcmFWHOs8/zeYqEVc9T+2X+S3JxXa1 8ChG+LPubyz6Vi5ISk1lzZZWeFOy6d4dU1NpbUesMug2Uc6Dq0CajfDQrR+AySsO1wNq 2XPLkEvUCULe8FrkGJFyCAXyN+gBIbfFCar9Pb20iUjqr7SgAcDYsYejZNqi9lwZcWpD c/XQ== X-Gm-Message-State: AOJu0YykjW7lVsXLUin49VZMh3A+4S+TDUsTpogMb6Sx09E/KBHw3iho Rp7jxEOGYpq2zsXOJGIUgp8nvbiT7Q58G5vcuTuLJ5V72bOcvFZeyX+LLWfD2GVJqWmJ5VVSAx3 9cS8YHr5xScSsn3pjTt8ZalUh72YnhTAykUvpj+qRTP9KLVlvCOjCueLSyuOsfWI2XoiTfhYNmH uQDYr8N5vSoEWAMmEFRDCEoyxqCo74kZRLwg== X-Gm-Gg: AZuq6aLUjJZV/5NrGerQ5IKqkidm96AYR1LLLviM4Z47fF/4+EON+ve5RKHpvDue7S0 V6RwSJj4E7C38E4XRdYnhTg35bvx0rmXrsKVmeWpZyyGiz+1eUu/8QKVVamojFoYZCrM2zZiZWY HNU9roMhzEZV1O6LMs48wEt+ibvsarkoHV3pAZBOG+Ds5FTPc1R5PfgHcebnHWFf/yMOuE5t30h UEdWJqPQE8OPSJhr5eC2+s7oGb3w/vGuhqoNUgJPk+Sbu0/tJ3sXxzODzQ0HF7EEdrAbpXwdY2u CD/QY3tuqqEj/DsGigISk/wSbpfZxKXqONyTeyLfWMdWIzLsfcSp8FLPjmTR296MYj3V4YH2acZ I820cUGa2WtyQpSggnhj2aWh0WSJ3UNaOGrZUsXqmVhenbg== X-Received: by 2002:a05:6000:2385:b0:436:8f7e:a486 with SMTP id ffacd0b85a97d-4396fda980fmr9804251f8f.11.1771770502315; Sun, 22 Feb 2026 06:28:22 -0800 (PST) X-Received: by 2002:a05:6000:2385:b0:436:8f7e:a486 with SMTP id ffacd0b85a97d-4396fda980fmr9804201f8f.11.1771770501599; Sun, 22 Feb 2026 06:28:21 -0800 (PST) Date: Sun, 22 Feb 2026 09:28:19 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Yodel Eldar , =?utf-8?Q?C=C3=A9dric?= Le Goater , =?utf-8?Q?Marc-Andr=C3=A9?= Lureau , Thomas Huth , =?utf-8?Q?Marc-Andr=C3=A9?= Lureau , Paolo Bonzini , Zhao Liu , Stefano Garzarella Subject: [PULL 02/33] tests/functional/x86_64: Add vhost-user-bridge test Message-ID: <051364b36b2c68058f7e6d2204ef2a877b0bb221.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770631140158500 From: Yodel Eldar Introduce a functional test of vhost-user-bridge and enter it into MAINTAINERS under the vhost section. The test runs vhost-user-bridge as a subprocess, then launches a guest with four backends: a unix domain socket for vhost-user, a UDP socket, a user-mode net, and a hubport to hub the UDP and user backends; only the vhost-user backend is exposed, the rest are deviceless. This configuration mimics the testing setup described in the initial commit of vhost-user-bridge in 3595e2eb0a23. The test creates a scratch file containing a hardcoded UUID on the host and exposes it to the the guest via the tftp parameter of the user netdev. After the guest invokes tftp to request the file, the test verifies the transfer by hashsum. Similarly, the test creates a file with another hardcoded UUID in the guest. A call to check_http_download() serves the file to the host via http, whereupon a check of the file hashsum occurs on the host. Lastly, add the test to the thorough tests suite in meson.build. Suggested-by: C=C3=A9dric Le Goater Suggested-by: Marc-Andr=C3=A9 Lureau Suggested-by: Michael S. Tsirkin Suggested-by: Thomas Huth Reviewed-by: Thomas Huth Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Yodel Eldar Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260129133049.119829-3-yodel.eldar@yodel.dev> --- MAINTAINERS | 1 + tests/functional/x86_64/meson.build | 1 + .../x86_64/test_vhost_user_bridge.py | 147 ++++++++++++++++++ 3 files changed, 149 insertions(+) create mode 100755 tests/functional/x86_64/test_vhost_user_bridge.py diff --git a/MAINTAINERS b/MAINTAINERS index e0c481e212..8df82f313e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2406,6 +2406,7 @@ F: subprojects/libvhost-user/ F: block/export/vhost-user* F: util/vhost-user-server.c F: net/vhost* +F: tests/functional/x86_64/test_vhost_user_bridge.py =20 vhost-shadow-virtqueue R: Eugenio P=C3=A9rez diff --git a/tests/functional/x86_64/meson.build b/tests/functional/x86_64/= meson.build index f78eec5e6c..beab4f304b 100644 --- a/tests/functional/x86_64/meson.build +++ b/tests/functional/x86_64/meson.build @@ -34,6 +34,7 @@ tests_x86_64_system_thorough =3D [ 'reverse_debug', 'tuxrun', 'vfio_user_client', + 'vhost_user_bridge', 'virtio_balloon', 'virtio_gpu', ] diff --git a/tests/functional/x86_64/test_vhost_user_bridge.py b/tests/func= tional/x86_64/test_vhost_user_bridge.py new file mode 100755 index 0000000000..c36c625420 --- /dev/null +++ b/tests/functional/x86_64/test_vhost_user_bridge.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2025 Software Freedom Conservancy, Inc. +# +# Author: Yodel Eldar +# +# SPDX-License-Identifier: GPL-2.0-or-later +""" +Test vhost-user-bridge (vubr) functionality: + + 1) Run vhost-user-bridge on the host. + 2) Launch a guest VM: + a) Instantiate a unix domain socket to the vubr-created path + b) Instantiate a vhost-user backend on top of that socket + c) Map a virtio-net-pci device to the vhost-user backend + d) Instantiate a UDP socket backend + e) Instantiate a user-mode net backend + i) Forward an ephemeral port to port 8080 in-guest with hostfw= d=3D + ii) Expose a generated scratch file to the guest with tftp=3D + f) Hub the UDP and user-mode backends. + 3) Invoke tftp in the guest to download exported scratch file from the= host. + 4) Serve a file to the host via http server in the guest. +""" + +import os +import shutil +import subprocess +from qemu_test import Asset, LinuxKernelTest, which +from qemu_test import exec_command_and_wait_for_pattern +from qemu_test import is_readable_executable_file +from qemu_test import wait_for_console_pattern +from qemu_test.ports import Ports + +class VhostUserBridge(LinuxKernelTest): + + ASSET_KERNEL_INITRAMFS =3D Asset( + "https://github.com/yodel/vhost-user-bridge-test/raw/refs/heads/ma= in/bzImage", + "8860d7aa59434f483542cdf25b42eacae0d4d4aa7ec923af9589d1ad4703d42b") + + HOST_UUID =3D "ba4c2e39-627f-487d-ae3b-93cc5d783eb8" + HOST_UUID_HSUM =3D \ + "d2932e34bf6c17b33e7325140b691e27c191d9ac4dfa550f68c09506facb09b9" + + GUEST_UUID =3D "143d2b21-fdf0-4c5e-a9ef-f35ebbac8945" + GUEST_UUID_HSUM =3D \ + "14b64203f5cf2afe520f8be0fdfe630aafc1e85d1301f55a0d1681e68881f3a2" + + def configure_vm(self, ud_socket_path, lport, rport, hostfwd_port, tft= pdir): + self.require_accelerator("kvm") + self.require_netdev("vhost-user") + self.require_netdev("socket") + self.require_netdev("hubport") + self.require_netdev("user") + self.require_device("virtio-net-pci") + self.set_machine("q35") + self.vm.add_args( + "-cpu", "host", + "-accel", "kvm", + "-append", "printk.time=3D0 console=3DttyS0", + "-smp", "2", + "-m", "128M", + "-object", "memory-backend-memfd,id=3Dmem0," + "size=3D128M,share=3Don,prealloc=3Don", + "-numa", "node,memdev=3Dmem0", + "-chardev", f"socket,id=3Dchar0,path=3D{ud_socket_path}", + "-netdev", "vhost-user,id=3Dvhost0,chardev=3Dchar0,vhostforc= e=3Don", + "-device", "virtio-net-pci,netdev=3Dvhost0", + "-netdev", f"socket,id=3Dudp0,udp=3Dlocalhost:{lport}," + f"localaddr=3Dlocalhost:{rport}", + "-netdev", "hubport,id=3Dhub0,hubid=3D0,netdev=3Dudp0", + "-netdev", f"user,id=3Duser0,tftp=3D{tftpdir}," + f"hostfwd=3Dtcp:127.0.0.1:{hostfwd_port}-:8080", + "-netdev", "hubport,id=3Dhub1,hubid=3D0,netdev=3Duser0" + ) + + def assemble_vubr_args(self, vubr_path, ud_socket_path, lport, rport): + vubr_args =3D [] + + if (stdbuf_path :=3D which("stdbuf")) is None: + self.log.info("Could not find stdbuf: vhost-user-bridge " + "log lines may appear out of order") + else: + vubr_args +=3D [stdbuf_path, "-o0", "-e0"] + + vubr_args +=3D [vubr_path, "-u", f"{ud_socket_path}", + "-l", f"127.0.0.1:{lport}", "-r", f"127.0.0.1:{rport= }"] + + return vubr_args + + def test_vhost_user_bridge(self): + prompt =3D "~ # " + host_uuid_filename =3D "vubr-test-uuid.txt" + guest_uuid_path =3D "/tmp/uuid.txt" + kernel_path =3D self.ASSET_KERNEL_INITRAMFS.fetch() + + vubr_path =3D self.build_file("contrib", "vhost-user-bridge", + "vhost-user-bridge") + if not is_readable_executable_file(vubr_path): + self.skipTest("Could not find a readable and executable " + "vhost-user-bridge") + + vubr_log_path =3D self.log_file("vhost-user-bridge.log") + self.log.info("For the vhost-user-bridge application log," + f" see: {vubr_log_path}") + + sock_dir =3D self.socket_dir() + ud_socket_path =3D os.path.join(sock_dir.name, "vubr-test.sock") + + tftpdir =3D self.scratch_file("tftp") + shutil.rmtree(tftpdir, ignore_errors=3DTrue) + os.mkdir(tftpdir) + host_uuid_path =3D self.scratch_file("tftp", host_uuid_filename) + with open(host_uuid_path, "w", encoding=3D"utf-8") as host_uuid_fi= le: + host_uuid_file.write(self.HOST_UUID) + + with Ports() as ports: + # pylint: disable=3Dunbalanced-tuple-unpacking + lport, rport, hostfwd_port =3D ports.find_free_ports(3) + + self.configure_vm(ud_socket_path, lport, rport, hostfwd_port, + tftpdir) + + vubr_args =3D self.assemble_vubr_args(vubr_path, ud_socket_pat= h, + lport, rport) + + with open(vubr_log_path, "w", encoding=3D"utf-8") as vubr_log,= \ + subprocess.Popen(vubr_args, stdin=3Dsubprocess.DEVNULL, + stdout=3Dvubr_log, + stderr=3Dsubprocess.STDOUT) as vubr_proc: + self.launch_kernel(kernel_path, wait_for=3Dprompt) + + exec_command_and_wait_for_pattern(self, + f"tftp -g -r {host_uuid_filename} 10.0.2.2 ; " + f"sha256sum {host_uuid_filename}", self.HOST_UUID_HSUM) + wait_for_console_pattern(self, prompt) + + exec_command_and_wait_for_pattern(self, + f"echo -n '{self.GUEST_UUID}' > {guest_uuid_path}", pr= ompt) + self.check_http_download(guest_uuid_path, self.GUEST_UUID_= HSUM) + wait_for_console_pattern(self, prompt) + + self.vm.shutdown() + vubr_proc.terminate() + vubr_proc.wait() + +if __name__ =3D=3D '__main__': + LinuxKernelTest.main() --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770766; cv=none; d=zohomail.com; s=zohoarc; b=S8by3WY24qITlyc6oI3rTorxSClihMGQurgNLVVjpSheQ3EPg7W/XKNvXxtKpbOCAcgJm4+mr9StfdnSjfYU2ygGNPk20056WbyhQfMW3uVNFs/HsiAlx1RL8cQGZGtpudzTROAQ1b1QXy2d5WSm5rsy2uq3rYf5gfhATAh+Dw4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770766; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=6Vc1eHralXDftsudwcbcWVLtbmhHYnqnn64R5UkrMqM=; b=XGY75f7tb6KSGYe7vkcHwMAByGWgkhbBbE/7hEbGozdgx6dM8uReOi7Wayq6Rnnb+3TYx5O4xo+DhGgSdPCm5xTN/uLHEVpQQHt2SrBCus9qg+BRdivhwZmhLWIDuPZS+GbJoIU6ZGHWahJOXDd5cyHhAIkIgJVBXVtdVUo2j3s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770766847526.6314325776439; Sun, 22 Feb 2026 06:32:46 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASK-000892-1c; Sun, 22 Feb 2026 09:29:08 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuARk-0007yg-99 for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:38 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuARh-0006fL-Us for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:31 -0500 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-271-EQA39TiLOmOY8upekkxMTA-1; Sun, 22 Feb 2026 09:28:26 -0500 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-4837246211bso38982345e9.0 for ; Sun, 22 Feb 2026 06:28:25 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483a9b75b4dsm194818005e9.4.2026.02.22.06.28.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:28:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770509; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=6Vc1eHralXDftsudwcbcWVLtbmhHYnqnn64R5UkrMqM=; b=AhrQ6SyZl1wRSjnBrWCCpDPOOlWV0L8a1q/yAY8N/ksX431LQcmXPdSza0Zy1oBs7EqgE0 Q7EzIcW7KtmfbS9ZZp7MtH6YjhaNcr4rITfeht33SYiRv9Z/tNqrEPwM/o0oFlkrB0gEK+ /qDf0GlLCl8RoGaE1IDOuq7uf0TBcdE= X-MC-Unique: EQA39TiLOmOY8upekkxMTA-1 X-Mimecast-MFC-AGG-ID: EQA39TiLOmOY8upekkxMTA_1771770505 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770505; x=1772375305; darn=nongnu.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=6Vc1eHralXDftsudwcbcWVLtbmhHYnqnn64R5UkrMqM=; b=E/Sk0EePaC9gsRtgP5tHrgK+DoaiWhFPnDuKEU1Nv0aIqf0AK0uE7BBzSdOkD9+8vj 0qcIFDOJutYqxoecNEjzW+To7EJhusGXMd/luJW5Fr/NKbmn5rxzlwDtBPiqE408yDye 3V6VgC8xAB1Zc7KHmPL9x5BuGJr6FjploigbFcCVOXf3ne5DTYOu0W0dVd6Bmcb1s97i 9ePEpDgoPM8JxH4BKex/n4IVE+nLmQ50fImRwccu0OQd4xpa0RQr0ji7Yp0USXkDija5 u19xYOAXvWy5ZypVPXek4uS/6egt0TEaXuwDE2jJW8+RxUFKMGm5lxpY4pink8OIyB8i p2dA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770505; x=1772375305; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=6Vc1eHralXDftsudwcbcWVLtbmhHYnqnn64R5UkrMqM=; b=sYpfZUEfQiHEL6LxKKaP8OHV2qvHbMjtDim2x+2lpcsh0LBGQZ/b9uibzQqdzYJPVT CdQuwB5H1Job19II9iDJbblxJeGFkymjGBWMuzX3F87Nud229Y8i1UNHUvJTiPTc5Vzt QTo3czfVhL1Z+im6mEe7U6bizu3kmJNJPrRrIz2IbSjOZ7Aq3kE36TV5FEKp4CL8h0hj tBs2AHWp9pJlm0DGswn66Y5bm9wBy9Ps0DZAv/LaoEGJa/Bnb0qDwwo53SZgBw/06kv/ IXLSNN2JwZYOqjYO5nR0xIYbwcqNmm+7LgqM9jfBcJ0AQ/2X6CiOSYeqJwP0RaZrElBO 372Q== X-Gm-Message-State: AOJu0Yyl6bG8dviyEvbM6SdybdVqKee0DQ6SAcl41exB4BjtUmoYg/MC 98OTYDJqUSixCfx86SBTZIP+lOYok++gEHQvJy9wlqregvacrQP3WwD6WP59XoVre/XBIVbJGbz NdaSyequti/EZ0878uZoNsVPumQViBlQWbBf/yMoZls+dAm4FH5v2Foliuppj0yV/zCAF8Yfrci RQh+beizzWDQKGZ/lwubh41i2Q1Nz3aPbojQ== X-Gm-Gg: AZuq6aLn0W+e3D/1gp26Hg0jE+Qtuzh+ZSsQuZvCHsvUNQiokNJXmdsN8rDbC7UIS4S WyGhbe1pyr7d6mssDcus/4Ex2IAalomeI+r8oWQjdF1dKTI8xO9IA4LSkl8JZNDXrXEq1ZGjzvQ P8nwwkS6dEQQ3+rZaTWakOwm2OD+c0bm9tmfoC853tciUmTra4z1k7FHZDRZrDP8cqsEcu/ufyI Sn7kuf4EQ2/WscGQU2tMppTB3RVQ59KedTjyQdNy3Dsbjb1bKOkjdcr684UGFaNtp3udMA9ir1/ xGMEMi0BX/9jSkZfCn5jXcklo2wx24+8+XF1ATVZWqWQj5lEy9QmzJUkUSU76tMwvVktQXJYDD1 9cYHEdP/20WPJVXwQj0qG0cfmCnxVtrNcxDIeGQC+mHmLtA== X-Received: by 2002:a05:600c:4e8a:b0:47e:e91d:73c0 with SMTP id 5b1f17b1804b1-483a962e37emr87501395e9.19.1771770504485; Sun, 22 Feb 2026 06:28:24 -0800 (PST) X-Received: by 2002:a05:600c:4e8a:b0:47e:e91d:73c0 with SMTP id 5b1f17b1804b1-483a962e37emr87500985e9.19.1771770503900; Sun, 22 Feb 2026 06:28:23 -0800 (PST) Date: Sun, 22 Feb 2026 09:28:21 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Yodel Eldar , =?utf-8?Q?Marc-Andr=C3=A9?= Lureau , Stefano Garzarella Subject: [PULL 03/33] contrib/vhost-user-bridge: Add UDP receive hexdump Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -4 X-Spam_score: -0.5 X-Spam_bar: / X-Spam_report: (-0.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770769213154100 From: Yodel Eldar vhost-user-bridge debug prints UDP TX hexdumps in its transmit handler, but does not for receives, even though they are beneficial for testing. Add an RX hexdump in the receive callback. To delineate between transmits and receives, also add a debug print indicating that the program is in the transmit handler. Reviewed-by: Marc-Andr=C3=A9 Lureau Signed-off-by: Yodel Eldar Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260129133049.119829-4-yodel.eldar@yodel.dev> --- contrib/vhost-user-bridge/vhost-user-bridge.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/contrib/vhost-user-bridge/vhost-user-bridge.c b/contrib/vhost-= user-bridge/vhost-user-bridge.c index ce4c3426d3..3f0fd0fa49 100644 --- a/contrib/vhost-user-bridge/vhost-user-bridge.c +++ b/contrib/vhost-user-bridge/vhost-user-bridge.c @@ -179,6 +179,9 @@ vubr_handle_tx(VuDev *dev, int qidx) =20 assert(qidx % 2); =20 + DPRINT("\n\n *** IN UDP TRANSMIT HANDLER ***\n\n"); + DPRINT(" hdrlen =3D %d\n", hdrlen); + for (;;) { ssize_t ret; unsigned int out_num; @@ -333,6 +336,10 @@ vubr_backend_recv_cb(int sock, void *ctx) }; ret =3D RETRY_ON_EINTR(recvmsg(vubr->backend_udp_sock, &msg, 0)); =20 + if (ret > 0 && VHOST_USER_BRIDGE_DEBUG) { + iov_hexdump(sg, num, stderr, "RX:", ret); + } + if (i =3D=3D 0) { iov_restore_front(elem->in_sg, sg, hdrlen); } --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770704; cv=none; d=zohomail.com; s=zohoarc; b=f9b3i3TICgTSdO/AnSt3qkDQ08RlquDuT7H8Du2RBMpHz9Zmny07z40fROcoKgPyYRz5rP6fuA+jfOEwt/s2/+FNRL97cyOwSeAUlQAQ627OSAcqPPBKtr+9tZSesRvcMR5V/n/kZbkkxRfVxAsNTt/1sLC3QijZalkEx33qlLk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770704; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=bmD4zIj27NuwPp8hAQ0/t6jv8rHwYFNnHQEC52ejfsU=; b=QJ4xJpw8goDQfjWuRLJL4oVej/sv3FTN23otxTUCJRnlcg12NHnEl2bOlp79H/Q5UoV6CUuqlHevnCJeuEgjpcleo/pIpOO5UuGr+0uqkOIs1afgcsJ5xvkxKWTtFz0ynmcBEOaWrJfHBewBfKnaPzwBRTD3bMUePlsi0dXQkuE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770703983924.5719155782899; Sun, 22 Feb 2026 06:31:43 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASJ-00088I-4m; Sun, 22 Feb 2026 09:29:07 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuARk-0007yh-C3 for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:36 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuARi-0006fR-Qc for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:32 -0500 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-464-2lRfI8KkMMS2Tv9PeeJAxA-1; Sun, 22 Feb 2026 09:28:28 -0500 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4837bfcfe0dso38799505e9.1 for ; Sun, 22 Feb 2026 06:28:28 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483a31c56d8sm305619905e9.8.2026.02.22.06.28.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:28:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770509; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=bmD4zIj27NuwPp8hAQ0/t6jv8rHwYFNnHQEC52ejfsU=; b=iij5QhH577HUQpabKcf50WFFdzmv+VxBMXVLl9is7OPywrnW2eeEoNnuqYxQ+ato0KHVVC zikg0+uwzwcfU+wFqRl/UZ02Ys2bvewE5RbYRAWmN9iCUueA3ba9jXH16Sk+kSwXwm1WLk gQGTHeXu3c26ZWTVMHaWWiKjQcsPazc= X-MC-Unique: 2lRfI8KkMMS2Tv9PeeJAxA-1 X-Mimecast-MFC-AGG-ID: 2lRfI8KkMMS2Tv9PeeJAxA_1771770507 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770507; x=1772375307; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=bmD4zIj27NuwPp8hAQ0/t6jv8rHwYFNnHQEC52ejfsU=; b=VY0AcvHacECcotHY8Z2q2IpLQfdXAV5dDmCQURDjSrFgciCTzP3HXX32b2Ke+2hIDI upOYN2Q4aIj/9dysfNgfhCBeUIGuzDPvC7mRfDrkMonGeZGOPYnLWKWbUbzfc14gUTJn aWGWKB6XHAjbEq8+1xltF5ybRDR1buVN6sLDGDuY/lj4xMorYcY9zwFE4ZU1BOtv/dHz 6X6+rkckXIz38iSkStpZInYMKrDnqrC3GB9w+jyywlDMrNrtmVDxihDCTO/2b0HsLMQJ AmmOZQobMiCmJaJcD4gFJvRYLSSJtXW1HEUsInr6cXY+bbc2vF+83ko0S4BMx1svZWia wYEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770507; x=1772375307; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bmD4zIj27NuwPp8hAQ0/t6jv8rHwYFNnHQEC52ejfsU=; b=NGR64HJxL4dQkWde6B8ztpHB607299GwsOfbizs9lEPP9EUlA60Plm4n7fkFPuH9/u F5TUPbBRw8tt2xPiGT7r5jk3PXSLRX6IId6/suEjU+DNplq7HDqsVpdkvakFOQ89UfjF Wf2Z7BqXjw8ImWmgGeRxLh4bWMXVHUvPJxbQJvkuarHacBKSK3nS38F3iY/+5ujwHNgM BGVjT/MzdLAl26CsSlGUwNCpvCXMxMqFRGUKyXFrF+ePPzZ96afadYb6Ag1z6f2BHc+C cvNch5lLGaLTP5K6jCdvxnMdMgwQuGCTI8Gn5SZpfv3uLm9QE/lBqxthml6M8zpIXHDK 6GAw== X-Gm-Message-State: AOJu0YxAOT02WhRk4/Ojr6XaDy/MXqhgtl0kCCkeGwuTjVvqxbJHO4ug aO9cZwpqCOys8HDfdW0GzRAGF7aCCDKzbCZ4c99/aEUGDvLlTGvyA9MMQLhlqeb0f5L5t6tVo6P BNmvXPS1PsLtbWhRL1iiqB9laTjIS5i59ovDOmi85derpKq/Ra6rlgm67IeNjX1ebTo5oB0aXz2 8TMVrhsxDKXEly9nNt6RVA4Tm8tmF/D3p8Vg== X-Gm-Gg: AZuq6aImFCrpXD5FbZK0Qto8iUzaDHwTBDKS4vf4c8v4KytqV1qS7pBnQ+kOzphhQV3 jSaRHMWnnF0HrYLtW2zKbnvsuKNab+K/5VrqeeLYylvflcVJXesYsLIyeVc7KzTH7hkhIUyTfKo gio9x/dJCljSwED5GKN8gG0S+z62KHwRvUV63iRCjs9wJgjWWnwZO474hbZfMcI3ZzMw/2y/jVE Nf9em32EADeJMChJi5YPAqAx1Z+HQv1C7nhiM67WcXAbfIV3/XEG/jSVY81f+QhGVkaIgPSZpFv MnFR+WS4cnKwyqCwDH9dvp3aKSjVxV1rDBn3dApe+rrWmanu74e+vvfIVGz/VEIEtSyq98bJpnk dZZosdTjCtZ362CPY1BVnQeKikIUVcHYsOU3oL6KxEo+XZA== X-Received: by 2002:a05:600c:828c:b0:47e:e48b:506d with SMTP id 5b1f17b1804b1-483a962e003mr109282575e9.16.1771770506671; Sun, 22 Feb 2026 06:28:26 -0800 (PST) X-Received: by 2002:a05:600c:828c:b0:47e:e48b:506d with SMTP id 5b1f17b1804b1-483a962e003mr109281965e9.16.1771770506081; Sun, 22 Feb 2026 06:28:26 -0800 (PST) Date: Sun, 22 Feb 2026 09:28:24 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Yanfeng Liu , Yanfeng Liu , Manos Pitsidianakis , Gerd Hoffmann Subject: [PULL 04/33] audio/virtio-snd: fix latency calc Message-ID: <27b370829294dcc4d1e9052e42bcd2b7cdd5c072.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770705164158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Yanfeng Liu Media players needs meaningful latency_bytes update but it is zero now most of the time. This adds stream-wise latency_bytes calculation so that to improve the situation. Signed-off-by: Yanfeng Liu Reviewed-by: Manos Pitsidianakis Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: --- hw/audio/virtio-snd.c | 12 +++++++++++- include/hw/audio/virtio-snd.h | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index 9101560f38..ed0422b45a 100644 --- a/hw/audio/virtio-snd.c +++ b/hw/audio/virtio-snd.c @@ -431,6 +431,7 @@ static uint32_t virtio_snd_pcm_prepare(VirtIOSound *s, = uint32_t stream_id) stream->id =3D stream_id; stream->pcm =3D s->pcm; stream->s =3D s; + stream->latency_bytes =3D 0; qemu_mutex_init(&stream->queue_mutex); QSIMPLEQ_INIT(&stream->queue); =20 @@ -899,6 +900,7 @@ static void virtio_snd_handle_tx_xfer(VirtIODevice *vde= v, VirtQueue *vq) 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); } @@ -1112,12 +1114,19 @@ error_cleanup: virtio_snd_unrealize(dev); } =20 +static inline void update_latency(VirtIOSoundPCMStream *s, size_t used) +{ + s->latency_bytes =3D s->latency_bytes > used ? + s->latency_bytes - used : 0; +} + static inline void return_tx_buffer(VirtIOSoundPCMStream *stream, VirtIOSoundPCMBuffer *buffer) { virtio_snd_pcm_status resp =3D { 0 }; resp.status =3D cpu_to_le32(VIRTIO_SND_S_OK); - resp.latency_bytes =3D cpu_to_le32((uint32_t)buffer->size); + update_latency(stream, buffer->size); + resp.latency_bytes =3D cpu_to_le32(stream->latency_bytes); iov_from_buf(buffer->elem->in_sg, buffer->elem->in_num, 0, @@ -1178,6 +1187,7 @@ static void virtio_snd_pcm_out_cb(void *data, int ava= ilable) 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; diff --git a/include/hw/audio/virtio-snd.h b/include/hw/audio/virtio-snd.h index c176066584..9560bac8b1 100644 --- a/include/hw/audio/virtio-snd.h +++ b/include/hw/audio/virtio-snd.h @@ -150,6 +150,7 @@ struct VirtIOSoundPCMStream { } voice; QemuMutex queue_mutex; bool active; + uint32_t latency_bytes; QSIMPLEQ_HEAD(, VirtIOSoundPCMBuffer) queue; }; =20 --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770566; cv=none; d=zohomail.com; s=zohoarc; b=eqGEvpLqkGGkLNMAY8dDbVx2vj5tsmTpHp74/2ojHJCcx4EuIHdY2kKG+JhqipvEGNXrnrBlvIl+8I0nugFvGQkFQGyT1q99xTA5+SIcb3G0RtVQ4zK7M80jlj9UZXYrna3ta8K4lp+beHk86+09ysogFac2OYx8+ZWndUC8Lzg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770566; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Im7oNw2Zu+WcIRrJsnueW164kyYoY+VkGWcj5I81nLU=; b=kgDLV8G9QxvzvB981dNpH+XEjjxzyUqS4s/DdTaN7GlmzcRQFyutqGphdR+swCAZnaepn15x88O7brwALAqTMHD5uzTrpBdR6yH9yryECLXYv0BMLr2bFcESGbdX+MXHSUqzpgosI0FLpRYWVID2uaBee8vtstpOVfVSgts0aMM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770566746948.7583264119751; Sun, 22 Feb 2026 06:29:26 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASB-00084N-Ke; Sun, 22 Feb 2026 09:29:01 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuARm-0007yi-0Y for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:38 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuARk-0006fa-JM for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:33 -0500 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-591-RDFGr-yrMXGnbdGyRo9Yrw-1; Sun, 22 Feb 2026 09:28:30 -0500 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4836cc0b38eso37563435e9.2 for ; Sun, 22 Feb 2026 06:28:29 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483a9b75b4dsm194822945e9.4.2026.02.22.06.28.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:28:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770511; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=Im7oNw2Zu+WcIRrJsnueW164kyYoY+VkGWcj5I81nLU=; b=BGsMLfqFQVXOztYiwPeZd/xxwYjVEYkCWybjlBFqEXtARYw+XgNCMMMNEPavcXM+0szrRJ Et15+XN94Ur5bvNGOVpGQmcgiMFzidUqwLuKy6E6gdtJgi/54Xwc64CyPx6jt6k0tbg459 dl79g/lV4jfz+/FbWkjqPviNtGL8QnU= X-MC-Unique: RDFGr-yrMXGnbdGyRo9Yrw-1 X-Mimecast-MFC-AGG-ID: RDFGr-yrMXGnbdGyRo9Yrw_1771770509 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770509; x=1772375309; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=Im7oNw2Zu+WcIRrJsnueW164kyYoY+VkGWcj5I81nLU=; b=kV8RON78J4pC/v+lZ8qN17MtGBBSPeDww732yBa9PUN99Ps3EOJBVoFV0w/F1kviKn qRnu8cy1Te4oT6BFs7Jei6BVGbodqOYzChJPGAJLkDWzgCQgZEj183zCQUgRJxdPY+WZ SHlWXsacZb+yjdkPcYb0BSyDXrJV8OuMs72lIW8TN8x+mW0Obrm60Cy2AdH2syvPuU4d iwxaDadjMfEYtgWGRkfV3prlBSfEtExyKeA8WNjJNhD4ZNZTOYGnRMwdiht0JTcYdqZn S+O5Np6w6w0Oe1yHq6ou+QbKec0da31ssSGfKGwM7wMBo71aaov9/g4IkMVnPmjKglrB fl1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770509; x=1772375309; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Im7oNw2Zu+WcIRrJsnueW164kyYoY+VkGWcj5I81nLU=; b=KqTn8g3S4oeCmHH2P0WNbXYmAS4rGGYZoZ6nGPUEI6ZKe/+cydx1Syv+c3GklDiX6+ xeMY6osD3RtD5125t3f982rA+U1kEftGEY9Ux6F/A/jn5I6pMFRagLaY+FzzzpOlQI3e nCwZWxqp37C7p4Y8+ZfKx+Yzcn7C/B1vKPMAx+SJEiVZxjx4rI9kzcLSo/6yfZgNPw1C Phl7bJJdS6Yly9ri+J6lTN0cxlxj0rStssrkbH5XOgNzRSYpaU1dHC/IeZSAOSI36YPC 7W2Dkqjv90ztbHE3JJOY0ulA5wb9Z71JqjzB/sdzkwoQixtx9XUNy+MJj2ObgzD+OXNh 0Rzw== X-Gm-Message-State: AOJu0YxjV8i5hbCJ+JQNhxb6CTx4yOwK8rh+hOTj09E6Sl9cLjQAgeE9 t3v+cqi19WQCpyzgmpRM9KGPFd/87un8tPaWdDvviOk2kMcejULyeEZdWah9LADrnLaD4pFPTRB cvOMrFm3HEKEamNhYyfyokXHEJGWRsOJsntD7BklvEUiy3lnHUn/soO6bBkibWaZ7u1x/dZcO+C wij4aM+7G5QSTrgrQvJAui+dB3IVNzVhh1Iw== X-Gm-Gg: AZuq6aLa4uja/kq/gXL4MPKF0JrTHcM1vsK1+wGC/M9pu22dEBiIQMocuHgTAxeOdH8 W7Tresuf4XxZwD8yItNwJLd82QsYhCmYBKEVmR9jpG8X1RS+TvYTlEEZwCOznGbxVrWxh4z15TL OghAUoeoOPHbSJs+VB5JQSjwScASdv4F4mwWYIufDF5vvfC+VJJySzOQTZhl7Hz07gUDwKU6g5I iMn6U7albGz5J4lj/VQR7xQW+JxsATqrtiOnBc94ymjnApcnP/s02YlRdGhU5D5s+6+6jgsV4Jg 1KvgWD/ST93TdrnZpWOotxlpLpKMvBA+ci+f6Dp6+svdQGunCDDrCXl+aqqreKT1bglCR8LsxTx dOAntfcvmiY7cs43yoFzlF/YZl0DxJKXh6V4yUjgzW0vq9g== X-Received: by 2002:a05:600c:1f8f:b0:477:73e9:dc17 with SMTP id 5b1f17b1804b1-483a95ee63amr123422505e9.35.1771770508608; Sun, 22 Feb 2026 06:28:28 -0800 (PST) X-Received: by 2002:a05:600c:1f8f:b0:477:73e9:dc17 with SMTP id 5b1f17b1804b1-483a95ee63amr123422095e9.35.1771770508162; Sun, 22 Feb 2026 06:28:28 -0800 (PST) Date: Sun, 22 Feb 2026 09:28:26 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Mohamed Mediouni , Ani Sinha , Igor Mammedov Subject: [PULL 05/33] tests/data/acpi: disassemble-aml: rename and change interpreter line Message-ID: <4d0830ea34abed563f15d3a236bef83a9026a7e8.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -4 X-Spam_score: -0.5 X-Spam_bar: / X-Spam_report: (-0.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770569001158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Mohamed Mediouni /usr/bin/bash isn't guaranteed to be present. Switch to /usr/bin/env bash. Specifically, on Darwin/macOS: $ which bash /opt/homebrew/bin/bash Rename disassemle to disassemble in the same commit (typo fix). Adapt the correponding message in rebuild-expected-aml. Signed-off-by: Mohamed Mediouni Reviewed-by: Ani Sinha Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260210041248.14701-1-mohamed@unpredictable.fr> --- tests/data/acpi/{disassemle-aml.sh =3D> disassemble-aml.sh} | 4 ++-- tests/data/acpi/rebuild-expected-aml.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename tests/data/acpi/{disassemle-aml.sh =3D> disassemble-aml.sh} (92%) diff --git a/tests/data/acpi/disassemle-aml.sh b/tests/data/acpi/disassembl= e-aml.sh similarity index 92% rename from tests/data/acpi/disassemle-aml.sh rename to tests/data/acpi/disassemble-aml.sh index 89561d233d..62e1991ace 100755 --- a/tests/data/acpi/disassemle-aml.sh +++ b/tests/data/acpi/disassemble-aml.sh @@ -1,4 +1,4 @@ -#!/usr/bin/bash +#!/usr/bin/env bash =20 outdir=3D while getopts "o:" arg; do @@ -7,7 +7,7 @@ while getopts "o:" arg; do outdir=3D$OPTARG ;; \? ) - echo "Usage: ./tests/data/acpi/disassemle-aml.sh [-o ]" + echo "Usage: ./tests/data/acpi/disassemble-aml.sh [-o ]" exit 1 ;; =20 diff --git a/tests/data/acpi/rebuild-expected-aml.sh b/tests/data/acpi/rebu= ild-expected-aml.sh index cbf9ffe0dd..af45cf3007 100755 --- a/tests/data/acpi/rebuild-expected-aml.sh +++ b/tests/data/acpi/rebuild-expected-aml.sh @@ -57,7 +57,7 @@ old_allowed_dif=3D`grep -v -e 'List of comma-separated ch= anged AML files to ignore echo '/* List of comma-separated changed AML files to ignore */' > ${SRC_P= ATH}/tests/qtest/bios-tables-test-allowed-diff.h =20 echo "The files were rebuilt and can be added to git." -echo "You can use ${SRC_PATH}/tests/data/acpi/disassemle-aml.sh to disasse= mble them to ASL." +echo "You can use ${SRC_PATH}/tests/data/acpi/disassemble-aml.sh to disass= emble them to ASL." =20 if [ -z "$old_allowed_dif" ]; then echo "Note! Please do not commit expected files with source changes" --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770707; cv=none; d=zohomail.com; s=zohoarc; b=Cuo1TUMhjqcNqdDpayphIuUN+VzKfvmrg1gccX/zajhd0P4kluvHMJdEIdCIbUm26UvxjSuuqHW+x39gy50uDjHDdlDONFW8mOKix8ZiJc7PSjK8PoX+x0UdCm1p0t6XKhZj2GyiKkssy92A2GOqbmpxyAGrDru1M3JSD4NAAsQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770707; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ZT1jjcynHlpwnOmhAYl5vZGEqvjYd5WZl8NUZ8Ui4yE=; b=NLEjbQKONvLRp2gdeBmMUSaxI28De4TNKL1nZnroXIWaiZ4mv8ge/h4UT6nFY9jHVUD55GxOzei+3tk547IeZuqPDzGeDciKq1wHAkhQv11UnU0oh3UHnIH+oRsmcKK2R3LdOLrCTno5cOvdY61X+YuZgXeBTSCwyN3F+9Y+Kpg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770707044213.60065848851355; Sun, 22 Feb 2026 06:31:47 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASI-00086n-Lx; Sun, 22 Feb 2026 09:29:06 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuARp-0007yp-A1 for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:38 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuARm-0006fu-Fi for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:35 -0500 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-62-eywJbfgjMKaVDY3TixESpA-1; Sun, 22 Feb 2026 09:28:32 -0500 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4836b7fbf4fso35307805e9.2 for ; Sun, 22 Feb 2026 06:28:31 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483a3dfd3d6sm93633665e9.3.2026.02.22.06.28.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:28:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770514; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZT1jjcynHlpwnOmhAYl5vZGEqvjYd5WZl8NUZ8Ui4yE=; b=jFxi4Tkxfj4L9CSOH43ePGBS/SRR2x7Pz7omAzRjSJxAv41E4DkvoX0HbzrqNL7Cti2GHm g/uvhEYnapI5AnFrsGevAFtbHpPsjGqQtEjtg33qGz/q/gxxO4VjrrEfeVo6jiBM/Wmth5 kXwZQOP2FI+TB9Fk8pBm+6f+/pjv22A= X-MC-Unique: eywJbfgjMKaVDY3TixESpA-1 X-Mimecast-MFC-AGG-ID: eywJbfgjMKaVDY3TixESpA_1771770511 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770511; x=1772375311; darn=nongnu.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=ZT1jjcynHlpwnOmhAYl5vZGEqvjYd5WZl8NUZ8Ui4yE=; b=lAi5D7j9a8X9PWNdzpVZ2H1Xd4Tt5akKK1nSmGPGFBs6QvmWW81NHorxMtiefZaMQf 9Lw/Qjb7AgbmsP3UKkawVlEcMxVCGXoA8APfgwVQLpnpKcRDhRnZbZd0M1RXIbO+AFFA qIpj8lFFDYCFTjGdTRNRS2+ZSbKPQNw1diGj80eUWezTmilm3KMvxlVPZncCS7MjNkqz 05kfO8zTrDDvJxSavmpuIFaI2Q9lIKUC7hD2Nh7y7JmdGwwaX3QYsEyEMZMFBVshVSSv 0j7c14eBRB4LTnJTPn+ay5dxRre3Xoggrwi239qh6/v8gWEdW8fE4ArxZFEnZG0pFpDW O8cw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770511; x=1772375311; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ZT1jjcynHlpwnOmhAYl5vZGEqvjYd5WZl8NUZ8Ui4yE=; b=QjGDtSsN0mqJtbYAPkmY40ytVrhkudMocFSsPKeNiU4i/kI0tvNnSyFQoWvMat7rxv aJiuoJevY1E9pZvT+wujOyD5SOIg4I2AOn4t8c7Vbfr4yl5xFvo7JuPYS61iBsWDhoWr TZRkLDp06KZWSlZQ5JnwXYh0v6YwpYyZdFouIqcqBw6xPRybZhyDe/IADCVe1Txb8olZ 9RNkrNkm7h3Ig9DN9/9LBkANFSPOVnjMQKCdIbdGFjKCPj/Tg/Ua3ixa3SqQYczQKYSW OJb80IGfGSrVfSw9WWRbRQXVEkyNF4qFvaT2POckbINhf6yf5E6T3G3D+KX0AR3LVGw1 17RA== X-Gm-Message-State: AOJu0Yz+YYF/yTVAjV+ffhJosEi61nCPjc+qW4C9xbPAMUPKUSwShRZA 0tKyRNNgim0rYBSnk3ioByHsxN+x5gx11ppjSZpc6Ta3fe3pHuOV8lyVe9YM5v5VBUsHifwJ7Mb 41nKzHzxyuGnJRN8QxmIupYfYGrq4A1Hi1Xu/lOyYOxVz2DFFe0VfPk7YAqcB9pGA7uvBrjakax gxr6ie6CpOm/qUZLW73CEw79L+LcwcTDZaZQ== X-Gm-Gg: AZuq6aJqtBQmOBqu9POnGLrRePziGGBRpd/6cOYd5mIJF5Ot8SDhL4/5pusCS4Uxlu5 4amvt8f1zqwP+b5bm9sJYmB+UurW20/4AcSK265n7KzocTw/1TqKfkWhkH1wo0D5ZGr8qDFPmFL uUH2xmDSlzlKqBZYqVunIeSxoxkSajUwcmD5tTOLUCD/WxsaOJbPsEfKCJm73BXv7ULAsVjRQEU tgjgLuIE4fFAtCrxt/xNGwsMaMUzQ1Eknm0L0VHOm9RHFLVZGvQ5qHwIFMEr8Mxud1YqU90kdcW uCsaG80dq/jN0RDISKGBPdTG4x7pfk5Mc2qoo9YMuzBtlwFFK20fwzhAbCGKmXtgVWAgzrDGFe6 Zzc2i2Z1S9Tkz0TxDayjlkNyxsBlCCXulMA0YGxMaQ7GZSA== X-Received: by 2002:a05:600c:c8a:b0:47e:e78a:c833 with SMTP id 5b1f17b1804b1-483a95f8c27mr78576475e9.32.1771770510645; Sun, 22 Feb 2026 06:28:30 -0800 (PST) X-Received: by 2002:a05:600c:c8a:b0:47e:e78a:c833 with SMTP id 5b1f17b1804b1-483a95f8c27mr78576215e9.32.1771770510088; Sun, 22 Feb 2026 06:28:30 -0800 (PST) Date: Sun, 22 Feb 2026 09:28:28 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Philippe =?utf-8?Q?Mathieu-Daud=C3=A9?= Subject: [PULL 06/33] hw/virtio: Pass VirtIODevice* to virtio_reset() Message-ID: <843a97fa2c9f42685d714c00a1a812cb886017f5.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770709105158500 From: Philippe Mathieu-Daud=C3=A9 virtio_reset() expects a VirtIODevice pointer, which is what the single caller - virtio_bus_reset - passes. Promote the opaque argument to a plain VirtIODevice. Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260201223929.78790-1-philmd@linaro.org> --- hw/virtio/virtio.c | 3 +-- include/hw/virtio/virtio.h | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index 77ca54e520..e9d5532952 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -3235,9 +3235,8 @@ int virtio_set_features_ex(VirtIODevice *vdev, const = uint64_t *features) return ret; } =20 -void virtio_reset(void *opaque) +void virtio_reset(VirtIODevice *vdev) { - VirtIODevice *vdev =3D opaque; VirtioDeviceClass *k =3D VIRTIO_DEVICE_GET_CLASS(vdev); uint64_t features[VIRTIO_FEATURES_NU64S]; int i; diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h index 27cd98d2fe..fcaa9b03b4 100644 --- a/include/hw/virtio/virtio.h +++ b/include/hw/virtio/virtio.h @@ -370,7 +370,7 @@ void virtio_queue_set_vector(VirtIODevice *vdev, int n,= uint16_t vector); int virtio_queue_set_host_notifier_mr(VirtIODevice *vdev, int n, MemoryRegion *mr, bool assign); int virtio_set_status(VirtIODevice *vdev, uint8_t val); -void virtio_reset(void *opaque); +void virtio_reset(VirtIODevice *vdev); void virtio_queue_reset(VirtIODevice *vdev, uint32_t queue_index); void virtio_queue_enable(VirtIODevice *vdev, uint32_t queue_index); void virtio_update_irq(VirtIODevice *vdev); --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770683; cv=none; d=zohomail.com; s=zohoarc; b=GYXuMezIxPwW/dQavzmOl1Dq3/Wy8n63hZZywlHqFCY66lyq/v20fkfw1iXMeNsINcK3MM7nfhMZ5x012p4n5AC+fuOj54Snhvb2+Jllad2UWjC1j7zCsDzxW5/HJSviqRP2j/XQxvKSRkNLmwBdDRI1Q8z00v4Ee7Re+xDnFKE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770683; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=b7jj4bO0BpZFDJlcU0gJFZM3UtLcehjzveNq1sniWtA=; b=BNg+AJZGlBdLnOZ+vvlwFDaCdjYihO0rBNcSp3jeBZZUVfws5v4FWpCmx0k+Ai9uPhz0Z4wM7TKr93Jev7hcHH9s6pePo2NCkzMxqadx2rfugVVKUf8OmUDjT/rLIN3aXHCkLJhKZITwFLkh9ifq58Gr8rtZ61tUshtzJz91j3Y= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770683914817.2899945788703; Sun, 22 Feb 2026 06:31:23 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASJ-00088z-AG; Sun, 22 Feb 2026 09:29:07 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuARr-0007yr-2L for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:40 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuARp-0006fz-3B for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:38 -0500 Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-503-9rBL1CbAOaCpCFzAABRvJQ-1; Sun, 22 Feb 2026 09:28:34 -0500 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-43771113b3bso2858258f8f.0 for ; Sun, 22 Feb 2026 06:28:34 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970bfa001sm13095460f8f.2.2026.02.22.06.28.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:28:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770516; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=b7jj4bO0BpZFDJlcU0gJFZM3UtLcehjzveNq1sniWtA=; b=T2w3YfxxtOLNZAFBdDhaePi3DdnuKy+0ZFjoDSHXwu3yHJcDKYxmuqBV812hjePtZghA2T v+Vj4wC73Pbji5JIZ+XCgjwiEL37bcuRf3DmQmbUUC5lW8Ys0qZtOlIcYIY4vUc47gjWoT UVQqA2XaCKOIdGbS6c4RtpGUM+M54rw= X-MC-Unique: 9rBL1CbAOaCpCFzAABRvJQ-1 X-Mimecast-MFC-AGG-ID: 9rBL1CbAOaCpCFzAABRvJQ_1771770513 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770513; x=1772375313; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=b7jj4bO0BpZFDJlcU0gJFZM3UtLcehjzveNq1sniWtA=; b=i9MHyynbn3afcGRW4Xd6WrICe8PJ0WKNbvWs76z9+11baRC0sflBibwiEambmyj8Ci qOZCTgpr/qNNX+KVCur12RfK/056DbXVb9k751tpxF6zpyGQbo2OPJlH6OorCZctjQgG y/VYPZPZiefoRcwr27pek1IaPya5Y7i2uqZqVGS024j3pPpyA9th0gnUX6nQCmhAcedP ykqrtHTAopWLr+4jCiprlirXvq+eC+1JrtxNrexNmY3zpWWtpAjf7zhe39iC0X65WSum TMlqqHphQ1mqDuKlNJhP03uBItd1Eng45BeFYoWtIP/wh7xgxr8azZCcaRZ+tJBGzGLN /Gbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770513; x=1772375313; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=b7jj4bO0BpZFDJlcU0gJFZM3UtLcehjzveNq1sniWtA=; b=j3ca2zLItpzTHZsousM/NfLXkvegOSU6nvJYKl+3IgKF+aCsIPfw/qDzMNgIxi68qN ctc5ZBi5YeMvsd4doeoW7QGNE2VOtRmOoNIwMqyPXmkz2FQgtzugXoqLgCfGV9t1qNfb zr7++CNaoQyWVqOFC9vvYBsyGNXK2UC3NJTOIRCKTeOUmus9B9WyDB1jQCeZRoPiI0JQ wz5sgvcQZeFyqdhEWesfTBHOcuCYPND4+h+d0FudbueJmMs0CakrL2LeyuKVkKfSjWU2 CPG8xHOYelWHqgdzk/1+aO0iMCW8s4SHZBYodrbp0rb4kgg4AwoLIlsNQS6HtoNa0Go2 B1KQ== X-Gm-Message-State: AOJu0YwaePKlVOBfWIJcWxGGRJP55IzJLJ5QFmh46qAsEJx7HFBnM4mA t/RcoJ+eV9wExaCEW1U5CAXS6adDLyTtFnTxnHatkf0CAAbHX5TYByDl2T0eRVkznDN2H8gQ0Iv zD+BWBj7yblsgoiXC5Ifok97y3/k9al7dwChO+W3TIa4mhZDQpNmNoHTaeZq+1F3jAdesqRILeG UBqkPRIZoGMxMItwPEN1Wu9zwze+htOP22Sw== X-Gm-Gg: AZuq6aKgQGLeQThWIHvM41KmMZYuxJA1CYakxBwaMdMxXqY+nhb2vs6xbFKEhF7KfNf 6BAYSFeKOP4j2e1zziwPEUMl+2UqsaZGZLtaZVEqzCbXH7HJo0KZ4mbfzvaHAPSeZOZ+vF0ZbJS q5n5zJeSDqRpNNmVyiouU075I1/RgOh/irg9+0zz0Z+i4ajaBDSy4phDNmwkNfbO6nparhcrEQI 0vOakk2CbR73q5mVb8Rz6UPzxBeOd4ctOhJcnMQiLNj25EpwMwFK6r4LBnhQmyrRmikFCfZWTov IyWTY3Jht2ADIqV97is/E1xXOoDGVT+VWzKq5CzFA6S9P67rxDeMCI98MZaLid/MZrdlIw9kgS5 4JuyA3TlEXIPeEnDbYXVgvb3a3UL53XG0cBq2nYemgcbbSQ== X-Received: by 2002:a5d:64e5:0:b0:435:e47b:e746 with SMTP id ffacd0b85a97d-4396f17a9c6mr10329178f8f.36.1771770513036; Sun, 22 Feb 2026 06:28:33 -0800 (PST) X-Received: by 2002:a5d:64e5:0:b0:435:e47b:e746 with SMTP id ffacd0b85a97d-4396f17a9c6mr10329133f8f.36.1771770512396; Sun, 22 Feb 2026 06:28:32 -0800 (PST) Date: Sun, 22 Feb 2026 09:28:30 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Shiju Jose , Markus Armbruster , Ravi Jonnalagadda , Jonathan Cameron , Eric Blake , Fan Ni Subject: [PULL 07/33] qapi: cxl: Refactor CXL event injection for common commands arguments Message-ID: <2fc064e23ecb1e83c26c7146aaa71ca5adec573e.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -4 X-Spam_score: -0.5 X-Spam_bar: / X-Spam_report: (-0.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770686158154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Shiju Jose Refactor CXL event injection to use struct for common command arguments. Suggested-by: Markus Armbruster Signed-off-by: Shiju Jose Acked-by: Markus Armbruster Reviewed-by: Ravi Jonnalagadda Signed-off-by: Jonathan Cameron Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260205112350.60681-2-Jonathan.Cameron@huawei.com> --- qapi/cxl.json | 89 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 58 insertions(+), 31 deletions(-) diff --git a/qapi/cxl.json b/qapi/cxl.json index eeddb58d1d..55a088586e 100644 --- a/qapi/cxl.json +++ b/qapi/cxl.json @@ -31,11 +31,10 @@ } =20 ## -# @cxl-inject-general-media-event: +# @CXLCommonEventBase: # -# Inject an event record for a General Media Event (CXL r3.0 -# 8.2.9.2.1.1). This event type is reported via one of the event logs -# specified via the log parameter. +# Common event base for a CXL Event (CXL r3.0 8.2.9.2.1 +# Table 8-42 Common Event Record Format). # # @path: CXL type 3 device canonical QOM path # @@ -44,6 +43,16 @@ # @flags: Event Record Flags. See CXL r3.0 Table 8-42 Common Event # Record Format, Event Record Flags for subfield definitions. # +# Since: 8.1 +## +{ 'struct': 'CXLCommonEventBase', + 'data': { 'path': 'str', 'log': 'CxlEventLog', 'flags': 'uint8' } } + +## +# @CXLGeneralMediaEvent: +# +# Event record for a General Media Event (CXL r3.0 8.2.9.2.1.1). +# # @dpa: Device Physical Address (relative to @path device). Note # lower bits include some flags. See CXL r3.0 Table 8-43 General # Media Event Record, Physical Address. @@ -74,26 +83,29 @@ # # Since: 8.1 ## -{ 'command': 'cxl-inject-general-media-event', - 'data': { 'path': 'str', 'log': 'CxlEventLog', 'flags': 'uint8', - 'dpa': 'uint64', 'descriptor': 'uint8', +{ 'struct': 'CXLGeneralMediaEvent', + 'base': 'CXLCommonEventBase', + 'data': { 'dpa': 'uint64', 'descriptor': 'uint8', 'type': 'uint8', 'transaction-type': 'uint8', '*channel': 'uint8', '*rank': 'uint8', '*device': 'uint32', '*component-id': 'str' } } =20 ## -# @cxl-inject-dram-event: +# @cxl-inject-general-media-event: # -# Inject an event record for a DRAM Event (CXL r3.0 8.2.9.2.1.2). -# This event type is reported via one of the event logs specified via -# the log parameter. +# Inject an event record for a General Media Event (CXL r3.0 +# 8.2.9.2.1.1). This event type is reported via one of the event +# logs specified via the log parameter. # -# @path: CXL type 3 device canonical QOM path +# Since: 8.1 +## +{ 'command': 'cxl-inject-general-media-event', + 'data': 'CXLGeneralMediaEvent' } + +## +# @CXLDRAMEvent: # -# @log: Event log to add the event to -# -# @flags: Event Record Flags. See CXL r3.0 Table 8-42 Common Event -# Record Format, Event Record Flags for subfield definitions. +# Event record for a DRAM Event (CXL r3.0 8.2.9.2.1.2). # # @dpa: Device Physical Address (relative to @path device). Note # lower bits include some flags. See CXL r3.0 Table 8-44 DRAM @@ -133,9 +145,9 @@ # # Since: 8.1 ## -{ 'command': 'cxl-inject-dram-event', - 'data': { 'path': 'str', 'log': 'CxlEventLog', 'flags': 'uint8', - 'dpa': 'uint64', 'descriptor': 'uint8', +{ 'struct': 'CXLDRAMEvent', + 'base': 'CXLCommonEventBase', + 'data': { 'dpa': 'uint64', 'descriptor': 'uint8', 'type': 'uint8', 'transaction-type': 'uint8', '*channel': 'uint8', '*rank': 'uint8', '*nibble-mask': 'uint32= ', '*bank-group': 'uint8', '*bank': 'uint8', '*row': 'uint32', @@ -143,18 +155,21 @@ }} =20 ## -# @cxl-inject-memory-module-event: +# @cxl-inject-dram-event: # -# Inject an event record for a Memory Module Event (CXL r3.0 -# 8.2.9.2.1.3). This event includes a copy of the Device Health info -# at the time of the event. +# Inject an event record for a DRAM Event (CXL r3.0 8.2.9.2.1.2). +# This event type is reported via one of the event logs +# specified via the log parameter. # -# @path: CXL type 3 device canonical QOM path +# Since: 8.1 +## +{ 'command': 'cxl-inject-dram-event', + 'data': 'CXLDRAMEvent' } + +## +# @CXLMemModuleEvent: # -# @log: Event Log to add the event to -# -# @flags: Event Record Flags. See CXL r3.0 Table 8-42 Common Event -# Record Format, Event Record Flags for subfield definitions. +# Event record for a Memory Module Event (CXL r3.0 8.2.9.2.1.3). # # @type: Device Event Type. See CXL r3.0 Table 8-45 Memory Module # Event Record for bit definitions for bit definiions. @@ -185,9 +200,9 @@ # # Since: 8.1 ## -{ 'command': 'cxl-inject-memory-module-event', - 'data': { 'path': 'str', 'log': 'CxlEventLog', 'flags' : 'uint8', - 'type': 'uint8', 'health-status': 'uint8', +{ 'struct': 'CXLMemModuleEvent', + 'base': 'CXLCommonEventBase', + 'data': { 'type': 'uint8', 'health-status': 'uint8', 'media-status': 'uint8', 'additional-status': 'uint8', 'life-used': 'uint8', 'temperature' : 'int16', 'dirty-shutdown-count': 'uint32', @@ -195,6 +210,18 @@ 'corrected-persistent-error-count': 'uint32' }} =20 +## +# @cxl-inject-memory-module-event: +# +# Inject an event record for a Memory Module Event (CXL r3.0 +# 8.2.9.2.1.3). This event includes a copy of the Device Health info +# at the time of the event. +# +# Since: 8.1 +## +{ 'command': 'cxl-inject-memory-module-event', + 'data': 'CXLMemModuleEvent' } + ## # @cxl-inject-poison: # --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770581; cv=none; d=zohomail.com; s=zohoarc; b=WlC9pqGc28FIklU5xPhqY9jSsQek3wieMi3rCn9qbcJjYQ/VUGDx8APSf1fjf2bknc12VxjZJNMTzqgPFTzqNl8mVjOHtypDYzrvjEY4O44YDlbxbNcrP8MXQmkhMTwZcRdu1UOxv30XN0FjQWI0mgxe7keQhD7CBLTPtv+IM/w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770581; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Lh5AtZWWoRDP1dtYN9KUI+XYGg3AtIkXQ6gc+MiG9fI=; b=G+B4PG7zvoSNnXGJSZRzak5kUETd5kuRMsvCYXaeMbJbmJtTmFfOi8plCsJmTVJfZF+DTuDum0Km3nESNLVXT+meUH50QNoz+1d5ZybhbrEGpNXki0mylezOhr/wMLLP6EAjVFj1rR+9AOXicJWWb+FA7C5tP5zH7bieFbut5vM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177177058189648.034671072432616; Sun, 22 Feb 2026 06:29:41 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASJ-000890-L8; Sun, 22 Feb 2026 09:29:07 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuARt-0007zU-R4 for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:42 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuARr-0006gC-L4 for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:41 -0500 Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-126-BeDsRQxyMS-356V3o_4Ohg-1; Sun, 22 Feb 2026 09:28:37 -0500 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-4837b9913c9so37782455e9.0 for ; Sun, 22 Feb 2026 06:28:36 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483a4e869a3sm116744085e9.1.2026.02.22.06.28.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:28:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770519; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=Lh5AtZWWoRDP1dtYN9KUI+XYGg3AtIkXQ6gc+MiG9fI=; b=JkkroC21P5Vfe6tfURzoA8/K/5+jBB+naSMF1HQkOCH+e+x2cpDmHOAHJ06HBUfrBUpknM qMxfMDzdWOO2H45VwuaLmUxT4Mis4w7lyC6FXS/klt4nHLIhAhFgG4ALqgRQdUIgzAqh/3 5L3P04gfDo1hbhDouugwJTR9O+NdQ0Y= X-MC-Unique: BeDsRQxyMS-356V3o_4Ohg-1 X-Mimecast-MFC-AGG-ID: BeDsRQxyMS-356V3o_4Ohg_1771770516 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770515; x=1772375315; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=Lh5AtZWWoRDP1dtYN9KUI+XYGg3AtIkXQ6gc+MiG9fI=; b=oz1JQq2XAXgjNvePmD7jPjQJtX2XAIcz+pdUgEWiRJktUyFkB8sCAvhhnV7akfOuTQ QRjo5jO6FQzTj2nm5wVIvtjoaO1OhM6yYEtdg1hMc+z9rtoV1wk5bmfsZPio8UjCx6uT mJ+tbt5ytu39QGuv1TLT8FwlqIoUQERT1h3yA2PuPesGx+08x3yVxLLwkzJZ9gvug7r3 7MfGKhMal9eXx9me/npV2F0DKGpxHw07faD3RJ/+0Y4qcTpxx2BPtyMjtNJzZFYpQMy2 tX4RAwylGWPbv7VXR6tD+WEIIfe/56cpyzrnf91EC7jhJwObuq0+rXnppSgWXPj64VnT C5MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770515; x=1772375315; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Lh5AtZWWoRDP1dtYN9KUI+XYGg3AtIkXQ6gc+MiG9fI=; b=LP1QOlQhmFhNJLY3umyyE8kZGaWT0Y+a7GBbiy58b3idRt0aJVTd8QLQKZ9XXRlqio F3uPRO3Kf/fw2B/U4rqWCOHNXmIWGNRtiCxXCvBFyaJEGMh42lBvwHwDj7Esqs4q0Ntv bMMHUVRdv56gzIdoXmaWg3qQqkicDmesmuCA72nGdNMIrQBYtA8hi7CF6qetToTU93yY waeyLfTI6ZQI/fN69iSq1fLZy6XGx0ioIRBY4HW+n2ccamdWPW8TrZ1QVWjz5h9YUrFU csVIOHPlbUQIeTkQVhPqJgl4/qf/6S2rmmLr11itqU0SiKVoQMdJ7dhnlXYCWo4rd3Ig CG+g== X-Gm-Message-State: AOJu0YwYGvZG6+NRO3jlVpIndipIIy1NorEUh184SSRZFSOrFIDd7BGZ S8B8j5M+H1Eg8IB3TwCvIL6n593LEDgK1qbKBTf1crWTfARRIyYtG7cJW1qlWblWqlegKy4TY5v jRCHcZIGqByb4UajHA1N5Wc85MzqanPT+fp4HMEYau4r7OA2sYRsz/5oxICu9v08L15n8nAvfPy I/mCGK5gPWnD6nhn1EgSSIJRS+wguoT5PR5Q== X-Gm-Gg: AZuq6aJetkJitVML5VKmTyhFUdfyt+PlW3XQXKaRS/aWIW011OnC+S/Cc+30ObP43AM QAIgiwXY0cAoSOUHE9++f9kEQAQVWykm+SWJNZBH3gGteudXMMJ189JwPpnz9RAuMzQztE/azGn IWj62gKkemRpQxVg4adnbQDQwtTVWNfBfwh1wGoukBjqkophs16qDtdcQ9locuEZ2AhclH+M3Wx XQ9zm3kSzKB3gHCIguuF1mdr6816b31k/Mc+VJVaSKHg2bl16OPYPmuykMaTH0R9HYt8aLC6pvv U8BtbYZttYhWj0ahMv14QZ3jc6CuR9UgcsiFeQu4fhFC/AFS2MchRohFYM7CGkNIPg+/PyaKHuJ qvhbh4RmcXUvNdlo0y/7BJYysxC/MSl4LfOIXIyyYu9UH1Q== X-Received: by 2002:a05:600c:1c22:b0:483:79ad:f3b9 with SMTP id 5b1f17b1804b1-483a95eada4mr99682655e9.28.1771770515276; Sun, 22 Feb 2026 06:28:35 -0800 (PST) X-Received: by 2002:a05:600c:1c22:b0:483:79ad:f3b9 with SMTP id 5b1f17b1804b1-483a95eada4mr99682025e9.28.1771770514716; Sun, 22 Feb 2026 06:28:34 -0800 (PST) Date: Sun, 22 Feb 2026 09:28:32 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Shiju Jose , Markus Armbruster , Ravi Jonnalagadda , Jonathan Cameron , Fan Ni , Eric Blake Subject: [PULL 08/33] hw/cxl/events: Update for rev3.2 common event record format Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770584856154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Shiju Jose CXL spec 3.2 section 8.2.9.2.1 Table 8-55, Common Event Record format has updated with optional Maintenance Operation Subclass, LD ID and ID of the device head information. Add updates for the above optional parameters in the related CXL events reporting and in the QMP commands to inject CXL events. Update all related specification references to CXL r3.2 to ensure one consistent source. Signed-off-by: Shiju Jose Acked-by: Markus Armbruster Reviewed-by: Ravi Jonnalagadda Signed-off-by: Jonathan Cameron Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260205112350.60681-3-Jonathan.Cameron@huawei.com> --- hw/cxl/cxl-events.c | 3 +- hw/cxl/cxl-mailbox-utils.c | 3 +- hw/mem/cxl_type3.c | 70 ++++++++++++++++++++++++++++++++----- hw/mem/cxl_type3_stubs.c | 24 +++++++++++-- include/hw/cxl/cxl_device.h | 7 +++- include/hw/cxl/cxl_events.h | 15 ++++++-- qapi/cxl.json | 21 ++++++++--- 7 files changed, 122 insertions(+), 21 deletions(-) diff --git a/hw/cxl/cxl-events.c b/hw/cxl/cxl-events.c index 7583dd9162..5356dfb5b3 100644 --- a/hw/cxl/cxl-events.c +++ b/hw/cxl/cxl-events.c @@ -271,7 +271,8 @@ void cxl_create_dc_event_records_for_extents(CXLType3De= v *ct3d, &dynamic_capacity_uuid, (1 << CXL_EVENT_TYPE_INFO), sizeof(event_rec), - cxl_device_get_timestamp(&ct3d->cxl_dstate)); + cxl_device_get_timestamp(&ct3d->cxl_dstate), + 0, 0, 0, 0, 0, 0, 0, 0); event_rec.type =3D type; event_rec.validity_flags =3D 1; event_rec.host_id =3D 0; diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index 9b99d44a80..125f417aa4 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -3463,7 +3463,8 @@ static CXLRetCode cmd_fm_set_dc_region_config(const s= truct cxl_cmd *cmd, &dynamic_capacity_uuid, (1 << CXL_EVENT_TYPE_INFO), sizeof(dcEvent), - cxl_device_get_timestamp(&ct3d->cxl_dstate)); + cxl_device_get_timestamp(&ct3d->cxl_dstate), + 0, 0, 0, 0, 0, 0, 0, 0); dcEvent.type =3D DC_EVENT_REGION_CONFIG_UPDATED; dcEvent.validity_flags =3D 1; dcEvent.host_id =3D 0; diff --git a/hw/mem/cxl_type3.c b/hw/mem/cxl_type3.c index 6eb20137a0..371bd4dc6a 100644 --- a/hw/mem/cxl_type3.c +++ b/hw/mem/cxl_type3.c @@ -1592,12 +1592,39 @@ void qmp_cxl_inject_correctable_error(const char *p= ath, CxlCorErrorType type, =20 void cxl_assign_event_header(CXLEventRecordHdr *hdr, const QemuUUID *uuid, uint32_t flags, - uint8_t length, uint64_t timestamp) + uint8_t length, uint64_t timestamp, + bool has_maint_op_class, uint8_t maint_op_cla= ss, + bool has_maint_op_subclass, + uint8_t maint_op_subclass, + bool has_ld_id, uint16_t ld_id, + bool has_head_id, uint8_t head_id) { - st24_le_p(&hdr->flags, flags); hdr->length =3D length; memcpy(&hdr->id, uuid, sizeof(hdr->id)); stq_le_p(&hdr->timestamp, timestamp); + + if (has_maint_op_class) { + hdr->maint_op_class =3D maint_op_class; + } else { + hdr->maint_op_class =3D 0; + } + + if (has_maint_op_subclass) { + flags |=3D CXL_EVENT_REC_FLAGS_MAINT_OP_SUBCLASS_VALID; + hdr->maint_op_subclass =3D maint_op_subclass; + } + + if (has_ld_id) { + flags |=3D CXL_EVENT_REC_FLAGS_LD_ID_VALID; + stw_le_p(&hdr->ld_id, ld_id); + } + + if (has_head_id) { + flags |=3D CXL_EVENT_REC_FLAGS_HEAD_ID_VALID; + hdr->head_id =3D head_id; + } + + st24_le_p(&hdr->flags, flags); } =20 static const QemuUUID gen_media_uuid =3D { @@ -1637,7 +1664,13 @@ static int ct3d_qmp_cxl_event_log_enc(CxlEventLog lo= g) } /* Component ID is device specific. Define this as a string. */ void qmp_cxl_inject_general_media_event(const char *path, CxlEventLog log, - uint8_t flags, uint64_t dpa, + uint32_t flags, bool has_maint_op_= class, + uint8_t maint_op_class, + bool has_maint_op_subclass, + uint8_t maint_op_subclass, + bool has_ld_id, uint16_t ld_id, + bool has_head_id, uint8_t head_id, + uint64_t dpa, uint8_t descriptor, uint8_t type, uint8_t transaction_type, bool has_channel, uint8_t channel, @@ -1675,7 +1708,10 @@ void qmp_cxl_inject_general_media_event(const char *= path, CxlEventLog log, =20 memset(&gem, 0, sizeof(gem)); cxl_assign_event_header(hdr, &gen_media_uuid, flags, sizeof(gem), - cxl_device_get_timestamp(&ct3d->cxl_dstate)); + cxl_device_get_timestamp(&ct3d->cxl_dstate), + has_maint_op_class, maint_op_class, + has_maint_op_subclass, maint_op_subclass, + has_ld_id, ld_id, has_head_id, head_id); =20 stq_le_p(&gem.phys_addr, dpa); gem.descriptor =3D descriptor; @@ -1719,7 +1755,13 @@ void qmp_cxl_inject_general_media_event(const char *= path, CxlEventLog log, #define CXL_DRAM_VALID_COLUMN BIT(6) #define CXL_DRAM_VALID_CORRECTION_MASK BIT(7) =20 -void qmp_cxl_inject_dram_event(const char *path, CxlEventLog log, uint8_t = flags, +void qmp_cxl_inject_dram_event(const char *path, CxlEventLog log, + uint32_t flags, + bool has_maint_op_class, uint8_t maint_op_c= lass, + bool has_maint_op_subclass, + uint8_t maint_op_subclass, + bool has_ld_id, uint16_t ld_id, + bool has_head_id, uint8_t head_id, uint64_t dpa, uint8_t descriptor, uint8_t type, uint8_t transaction_type, bool has_channel, uint8_t channel, @@ -1762,7 +1804,10 @@ void qmp_cxl_inject_dram_event(const char *path, Cxl= EventLog log, uint8_t flags, =20 memset(&dram, 0, sizeof(dram)); cxl_assign_event_header(hdr, &dram_uuid, flags, sizeof(dram), - cxl_device_get_timestamp(&ct3d->cxl_dstate)); + cxl_device_get_timestamp(&ct3d->cxl_dstate), + has_maint_op_class, maint_op_class, + has_maint_op_subclass, maint_op_subclass, + has_ld_id, ld_id, has_head_id, head_id); stq_le_p(&dram.phys_addr, dpa); dram.descriptor =3D descriptor; dram.type =3D type; @@ -1822,7 +1867,13 @@ void qmp_cxl_inject_dram_event(const char *path, Cxl= EventLog log, uint8_t flags, } =20 void qmp_cxl_inject_memory_module_event(const char *path, CxlEventLog log, - uint8_t flags, uint8_t type, + uint32_t flags, bool has_maint_op_= class, + uint8_t maint_op_class, + bool has_maint_op_subclass, + uint8_t maint_op_subclass, + bool has_ld_id, uint16_t ld_id, + bool has_head_id, uint8_t head_id, + uint8_t type, uint8_t health_status, uint8_t media_status, uint8_t additional_status, @@ -1861,7 +1912,10 @@ void qmp_cxl_inject_memory_module_event(const char *= path, CxlEventLog log, =20 memset(&module, 0, sizeof(module)); cxl_assign_event_header(hdr, &memory_module_uuid, flags, sizeof(module= ), - cxl_device_get_timestamp(&ct3d->cxl_dstate)); + cxl_device_get_timestamp(&ct3d->cxl_dstate), + has_maint_op_class, maint_op_class, + has_maint_op_subclass, maint_op_subclass, + has_ld_id, ld_id, has_head_id, head_id); =20 module.type =3D type; module.health_status =3D health_status; diff --git a/hw/mem/cxl_type3_stubs.c b/hw/mem/cxl_type3_stubs.c index c1a5e4a7c1..91b1478114 100644 --- a/hw/mem/cxl_type3_stubs.c +++ b/hw/mem/cxl_type3_stubs.c @@ -14,7 +14,13 @@ #include "qapi/qapi-commands-cxl.h" =20 void qmp_cxl_inject_general_media_event(const char *path, CxlEventLog log, - uint8_t flags, uint64_t dpa, + uint32_t flags, bool has_maint_op_= class, + uint8_t maint_op_class, + bool has_maint_op_subclass, + uint8_t maint_op_subclass, + bool has_ld_id, uint16_t ld_id, + bool has_head_id, uint8_t head_id, + uint64_t dpa, uint8_t descriptor, uint8_t type, uint8_t transaction_type, bool has_channel, uint8_t channel, @@ -23,7 +29,13 @@ void qmp_cxl_inject_general_media_event(const char *path= , CxlEventLog log, const char *component_id, Error **errp) {} =20 -void qmp_cxl_inject_dram_event(const char *path, CxlEventLog log, uint8_t = flags, +void qmp_cxl_inject_dram_event(const char *path, CxlEventLog log, + uint32_t flags, + bool has_maint_op_class, uint8_t maint_op_c= lass, + bool has_maint_op_subclass, + uint8_t maint_op_subclass, + bool has_ld_id, uint16_t ld_id, + bool has_head_id, uint8_t head_id, uint64_t dpa, uint8_t descriptor, uint8_t type, uint8_t transaction_type, bool has_channel, uint8_t channel, @@ -38,7 +50,13 @@ void qmp_cxl_inject_dram_event(const char *path, CxlEven= tLog log, uint8_t flags, Error **errp) {} =20 void qmp_cxl_inject_memory_module_event(const char *path, CxlEventLog log, - uint8_t flags, uint8_t type, + uint32_t flags, bool has_maint_op_= class, + uint8_t maint_op_class, + bool has_maint_op_subclass, + uint8_t maint_op_subclass, + bool has_ld_id, uint16_t ld_id, + bool has_head_id, uint8_t head_id, + uint8_t type, uint8_t health_status, uint8_t media_status, uint8_t additional_status, diff --git a/include/hw/cxl/cxl_device.h b/include/hw/cxl/cxl_device.h index 165355baf9..e461a824b6 100644 --- a/include/hw/cxl/cxl_device.h +++ b/include/hw/cxl/cxl_device.h @@ -723,7 +723,12 @@ bool ct3_test_region_block_backed(CXLType3Dev *ct3d, u= int64_t dpa, uint64_t len); void cxl_assign_event_header(CXLEventRecordHdr *hdr, const QemuUUID *uuid, uint32_t flags, - uint8_t length, uint64_t timestamp); + uint8_t length, uint64_t timestamp, + bool has_maint_op_class, uint8_t maint_op_cla= ss, + bool has_maint_op_subclass, + uint8_t maint_op_subclass, + bool has_ld_id, uint16_t ld_id, + bool has_head_id, uint8_t head_id); void cxl_create_dc_event_records_for_extents(CXLType3Dev *ct3d, CXLDCEventType type, CXLDCExtentRaw extents[], diff --git a/include/hw/cxl/cxl_events.h b/include/hw/cxl/cxl_events.h index 758b075a64..4d9cfdb621 100644 --- a/include/hw/cxl/cxl_events.h +++ b/include/hw/cxl/cxl_events.h @@ -29,9 +29,15 @@ typedef enum CXLEventLogType { =20 /* * Common Event Record Format - * CXL r3.1 section 8.2.9.2.1: Event Records; Table 8-43 + * CXL r3.2 section 8.2.10.2.1: Event Records; Table 8-55 */ -#define CXL_EVENT_REC_HDR_RES_LEN 0xf +#define CXL_EVENT_REC_FLAGS_PERMANENT_COND BIT(2) +#define CXL_EVENT_REC_FLAGS_MAINT_NEEDED BIT(3) +#define CXL_EVENT_REC_FLAGS_PERF_DEGRADED BIT(4) +#define CXL_EVENT_REC_FLAGS_HW_REPLACEMENT_NEEDED BIT(5) +#define CXL_EVENT_REC_FLAGS_MAINT_OP_SUBCLASS_VALID BIT(6) +#define CXL_EVENT_REC_FLAGS_LD_ID_VALID BIT(7) +#define CXL_EVENT_REC_FLAGS_HEAD_ID_VALID BIT(8) typedef struct CXLEventRecordHdr { QemuUUID id; uint8_t length; @@ -40,7 +46,10 @@ typedef struct CXLEventRecordHdr { uint16_t related_handle; uint64_t timestamp; uint8_t maint_op_class; - uint8_t reserved[CXL_EVENT_REC_HDR_RES_LEN]; + uint8_t maint_op_subclass; + uint16_t ld_id; + uint8_t head_id; + uint8_t reserved[0xb]; } QEMU_PACKED CXLEventRecordHdr; =20 #define CXL_EVENT_RECORD_DATA_LENGTH 0x50 diff --git a/qapi/cxl.json b/qapi/cxl.json index 55a088586e..82001c0591 100644 --- a/qapi/cxl.json +++ b/qapi/cxl.json @@ -33,20 +33,33 @@ ## # @CXLCommonEventBase: # -# Common event base for a CXL Event (CXL r3.0 8.2.9.2.1 -# Table 8-42 Common Event Record Format). +# Common event base for a CXL Event (CXL r3.2 8.2.10.2.1 +# Table 8-55 Common Event Record Format). # # @path: CXL type 3 device canonical QOM path # # @log: event log to add the event to # -# @flags: Event Record Flags. See CXL r3.0 Table 8-42 Common Event +# @flags: Event Record Flags. See CXL r3.2 Table 8-55 Common Event # Record Format, Event Record Flags for subfield definitions. # +# @maint-op-class: Maintenance operation class the device requests to +# initiate. +# +# @maint-op-subclass: Maintenance operation subclass the device +# requests to initiate. +# +# @ld-id: Logical Device (LD) ID of LD from where the event +# originated. +# +# @head-id: ID of the device head from where the event originated. +# # Since: 8.1 ## { 'struct': 'CXLCommonEventBase', - 'data': { 'path': 'str', 'log': 'CxlEventLog', 'flags': 'uint8' } } + 'data': { 'path': 'str', 'log': 'CxlEventLog', 'flags': 'uint32', + '*maint-op-class':'uint8', '*maint-op-subclass':'uint8', + '*ld-id':'uint16', '*head-id':'uint8' } } =20 ## # @CXLGeneralMediaEvent: --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770645; cv=none; d=zohomail.com; s=zohoarc; b=T0HEiRPgLbE6rzhjFoByTgkW8WrluBbc+sR38Wt71AClqLjV345LQczoJPvjrT6RzSHyPOj310OsR9U3HOpRXl1/UoadA1eWF4o2wARIocM/ElfYUo00k1vJ4yjvP9KZcaxsfStz5mbfvwXxKThtx7bsFE23uX/8FgYjHcRHHjk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770645; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=CmO3F7ykaFCJkUyLzi4jRP22kFdoWcISouSDSQqFs+g=; b=iu8wg75Hjj8z8HpPqGxxsWH7zwjcf1k6HBJDoX7dWOaASDHf9zFuYDO2SpLRHxR1FrallFqSRimgV7LND0P3/nOQjKhO6Tp/TFIUi1xXiI7RN/roCLyD+se+j58fmTN0ukHpP20ojdCELhgDu4AN/+Pqg597gzOOEpGAnUngHNc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770645698665.5591300309109; Sun, 22 Feb 2026 06:30:45 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASE-00085n-Ro; Sun, 22 Feb 2026 09:29:02 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuARw-0007zp-OK for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:46 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuARu-0006gP-UG for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:44 -0500 Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-367-Jls_YnzuOKC3Ul2a6uFTOA-1; Sun, 22 Feb 2026 09:28:40 -0500 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-4836ff58111so46683675e9.1 for ; Sun, 22 Feb 2026 06:28:40 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970d401aasm12267168f8f.23.2026.02.22.06.28.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:28:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770522; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=CmO3F7ykaFCJkUyLzi4jRP22kFdoWcISouSDSQqFs+g=; b=dH+EGTR+fXyJmQtHjR2IfJ12OqY//OnOIzHt5wEh1rVzgwtPRISognQ2S7wZKfflrXRSBR 2ENXyuOSDI/So4xiy5naMGeYg/27XzNPFFK7dsLGrIskegc2qpOraoO39y88yuKsTIBSe7 ZSm93q2F0780EL+iDL9PCKLEN6wyyB8= X-MC-Unique: Jls_YnzuOKC3Ul2a6uFTOA-1 X-Mimecast-MFC-AGG-ID: Jls_YnzuOKC3Ul2a6uFTOA_1771770519 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770519; x=1772375319; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=CmO3F7ykaFCJkUyLzi4jRP22kFdoWcISouSDSQqFs+g=; b=XC17yWXWiSSFqpjX2Y2butU1+c3ZyhmGC6R5jG+YVNGjy5DlhVPsndG+BOH+VWrqAU mLO//uJp3JBlyFj8EPsoXsprS2ImT3V9zNa333GcOAjaDNiBKN2kMty7U8brRRhMWTdN 2YKKJk+V77ZGlW4I67jiaQexER69uF91rB0l00l8I1XpbQXP2GclakmQAbhM9wYSOFEI 6w7dI61Bi8qNmBTFm9CGqbgXPYMi5KSOlzwxUhPSvnt9L4SrRoRHyMNnIZK7FaEFGYdp HsPDlSGqPnY9HgTD7ogrD7pcgrBA7oqq0oAv9UnGHL8t2B0AgxsWXM16ora4ICIoaLo5 XO7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770519; x=1772375319; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CmO3F7ykaFCJkUyLzi4jRP22kFdoWcISouSDSQqFs+g=; b=c4vUovhDN3NhS/oY63xoWTHe8NQvi9sY0QG2k+oSnc7l/Dv+0m1vphk2vgl4ibX7ad 83D3QwkKQlrGHyBlAm3hZXVhFwaGoT2l3w3P1AhHpmK8YR8T7W6xLXe/6oltzOT1RNpa SxM4xbzbTO1/3dIXZBlh5i6mjWU/tdgw28i++bxRFyuI9EPmFqgMn9j8Ty5tmzJ2eG+r O5ryfFYUbrOZcfFPV0xQivd8gMQLV5jHEENpi9mEHxgRc+kXGkOMxWk0xzHAifmAtf8N GZnMbO1JL7tZyIP8kPYuxrPLg0/60+Y9DbiI1SUv9MxvHckfG26DuciMx/GTlnc4UL7g 4LzA== X-Gm-Message-State: AOJu0Yy5UT2FSLeSVIUGGV6ngDN4RpFXeAQs4xd7ri/IYUKk4VVvwpkw KsicDYbgVY1chzcwV9z3ZbUTe5KUiteI8TNsrAbvyssa6Nix1zi5+tglFL2ib8OXlbtCpAt6NHH ziHoiN5IwlR+uynNlhh0/KkvZhRTotz1RznQIxIeFjXfDytx12LU+yRYw1QdKQT6jAvmnVEFeMe vIfheDTXrWyTi12VzLUKwOUyZiZb5mJM+Ehw== X-Gm-Gg: AZuq6aI9eqzIotfAOwcj/9urciOijAM5qyppqzCntEYXtLbb+l2XUIw9JyJXNgS0N5J i0ufcL/IPajFKkQRhUjCz1D9GkMU63TxjdLSwd1bz0XzBMAI20fNX7ILjA7KTSJWsL51TRwjkEC MCHcjh8POe97iHS0+f2124xPq6mEOWyIRi1eqkAyVxSVERcZAmyN6x4OLRe/TnsBhRGGlbyStx/ pP+I8GOhriO5G0CGRKDicqTsZTxxUB+3nu8nNfwM8GdVbhqNyFrgS3xVPsyqMpKEuie6D8NOTqa WoReksiQhPHyNvHejviiq6W8riGUzA+o/0s9kxnC+n7LanDUVWuZfxJKLYluxrYVEyzCCFGXVaP 1oGel9yRTlsjYbYg5vZNgh4EsD6KTqgiwTstruVaV7dd5Eg== X-Received: by 2002:a05:600c:34cb:b0:479:1b0f:dfff with SMTP id 5b1f17b1804b1-483a95bef2amr85615505e9.10.1771770518923; Sun, 22 Feb 2026 06:28:38 -0800 (PST) X-Received: by 2002:a05:600c:34cb:b0:479:1b0f:dfff with SMTP id 5b1f17b1804b1-483a95bef2amr85615105e9.10.1771770518289; Sun, 22 Feb 2026 06:28:38 -0800 (PST) Date: Sun, 22 Feb 2026 09:28:34 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Shiju Jose , Markus Armbruster , Jonathan Cameron , Fan Ni , Eric Blake Subject: [PULL 09/33] hw/cxl/events: Updates for rev3.2 general media event record Message-ID: <1aa989a1767f91803493ec05d399f9c96bed3b90.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -4 X-Spam_score: -0.5 X-Spam_bar: / X-Spam_report: (-0.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770647856154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Shiju Jose CXL spec rev3.2 section 8.2.10.2.1.1 Table 8-57, general media event table has updated with following new fields. 1. Advanced Programmable Corrected Memory Error Threshold Event Flags 2. Corrected Memory Error Count at Event 3. Memory Event Sub-Type 4. Support for component ID in the PLDM format. Add updates for the above spec changes in the CXL general media event reporting and QMP command to inject general media event. In order to have one consistent source of references, update all to references for this command to CXL r3.2. Signed-off-by: Shiju Jose Acked-by: Markus Armbruster Signed-off-by: Jonathan Cameron Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260205112350.60681-4-Jonathan.Cameron@huawei.com> --- hw/mem/cxl_type3.c | 31 ++++++++++++++++++++++++++++++- hw/mem/cxl_type3_stubs.c | 6 ++++++ include/hw/cxl/cxl_events.h | 7 +++++-- qapi/cxl.json | 29 +++++++++++++++++++++-------- 4 files changed, 62 insertions(+), 11 deletions(-) diff --git a/hw/mem/cxl_type3.c b/hw/mem/cxl_type3.c index 371bd4dc6a..229be88708 100644 --- a/hw/mem/cxl_type3.c +++ b/hw/mem/cxl_type3.c @@ -1646,6 +1646,11 @@ static const QemuUUID memory_module_uuid =3D { #define CXL_GMER_VALID_RANK BIT(1) #define CXL_GMER_VALID_DEVICE BIT(2) #define CXL_GMER_VALID_COMPONENT BIT(3) +#define CXL_GMER_VALID_COMPONENT_ID_FORMAT BIT(4) + +#define CXL_GMER_EV_DESC_UCE BIT(0) +#define CXL_GMER_EV_DESC_THRESHOLD_EVENT BIT(1) +#define CXL_GMER_EV_DESC_POISON_LIST_OVERFLOW_EVENT BIT(2) =20 static int ct3d_qmp_cxl_event_log_enc(CxlEventLog log) { @@ -1677,6 +1682,12 @@ void qmp_cxl_inject_general_media_event(const char *= path, CxlEventLog log, bool has_rank, uint8_t rank, bool has_device, uint32_t device, const char *component_id, + bool has_comp_id_pldm, + bool is_comp_id_pldm, + bool has_cme_ev_flags, + uint8_t cme_ev_flags, + bool has_cme_count, uint32_t cme_c= ount, + uint8_t sub_type, Error **errp) { Object *obj =3D object_resolve_path(path, NULL); @@ -1714,7 +1725,6 @@ void qmp_cxl_inject_general_media_event(const char *p= ath, CxlEventLog log, has_ld_id, ld_id, has_head_id, head_id); =20 stq_le_p(&gem.phys_addr, dpa); - gem.descriptor =3D descriptor; gem.type =3D type; gem.transaction_type =3D transaction_type; =20 @@ -1737,10 +1747,29 @@ void qmp_cxl_inject_general_media_event(const char = *path, CxlEventLog log, strncpy((char *)gem.component_id, component_id, sizeof(gem.component_id) - 1); valid_flags |=3D CXL_GMER_VALID_COMPONENT; + if (has_comp_id_pldm && is_comp_id_pldm) { + valid_flags |=3D CXL_GMER_VALID_COMPONENT_ID_FORMAT; + } } =20 stw_le_p(&gem.validity_flags, valid_flags); =20 + if (has_cme_ev_flags) { + gem.cme_ev_flags =3D cme_ev_flags; + } else { + gem.cme_ev_flags =3D 0; + } + + if (has_cme_count) { + descriptor |=3D CXL_GMER_EV_DESC_THRESHOLD_EVENT; + st24_le_p(gem.cme_count, cme_count); + } else { + st24_le_p(gem.cme_count, 0); + } + gem.descriptor =3D descriptor; + + gem.sub_type =3D sub_type; + if (cxl_event_insert(cxlds, enc_log, (CXLEventRecordRaw *)&gem)) { cxl_event_irq_assert(ct3d); } diff --git a/hw/mem/cxl_type3_stubs.c b/hw/mem/cxl_type3_stubs.c index 91b1478114..2047e97846 100644 --- a/hw/mem/cxl_type3_stubs.c +++ b/hw/mem/cxl_type3_stubs.c @@ -27,6 +27,12 @@ void qmp_cxl_inject_general_media_event(const char *path= , CxlEventLog log, bool has_rank, uint8_t rank, bool has_device, uint32_t device, const char *component_id, + bool has_comp_id_pldm, + bool is_comp_id_pldm, + bool has_cme_ev_flags, + uint8_t cme_ev_flags, + bool has_cme_count, uint32_t cme_c= ount, + uint8_t sub_type, Error **errp) {} =20 void qmp_cxl_inject_dram_event(const char *path, CxlEventLog log, diff --git a/include/hw/cxl/cxl_events.h b/include/hw/cxl/cxl_events.h index 4d9cfdb621..352f9891bd 100644 --- a/include/hw/cxl/cxl_events.h +++ b/include/hw/cxl/cxl_events.h @@ -115,10 +115,10 @@ typedef struct CXLEventInterruptPolicy { =20 /* * General Media Event Record - * CXL r3.1 Section 8.2.9.2.1.1; Table 8-45 + * CXL r3.2 Section 8.2.10.2.1.1; Table 8-57 */ #define CXL_EVENT_GEN_MED_COMP_ID_SIZE 0x10 -#define CXL_EVENT_GEN_MED_RES_SIZE 0x2e +#define CXL_EVENT_GEN_MED_RES_SIZE 0x29 typedef struct CXLEventGenMedia { CXLEventRecordHdr hdr; uint64_t phys_addr; @@ -130,6 +130,9 @@ typedef struct CXLEventGenMedia { uint8_t rank; uint8_t device[3]; uint8_t component_id[CXL_EVENT_GEN_MED_COMP_ID_SIZE]; + uint8_t cme_ev_flags; + uint8_t cme_count[3]; + uint8_t sub_type; uint8_t reserved[CXL_EVENT_GEN_MED_RES_SIZE]; } QEMU_PACKED CXLEventGenMedia; =20 diff --git a/qapi/cxl.json b/qapi/cxl.json index 82001c0591..4ff66fc6c1 100644 --- a/qapi/cxl.json +++ b/qapi/cxl.json @@ -64,22 +64,22 @@ ## # @CXLGeneralMediaEvent: # -# Event record for a General Media Event (CXL r3.0 8.2.9.2.1.1). +# Event record for a General Media Event (CXL r3.2 8.2.10.2.1.1). # # @dpa: Device Physical Address (relative to @path device). Note -# lower bits include some flags. See CXL r3.0 Table 8-43 General +# lower bits include some flags. See CXL r3.2 Table 8-57 General # Media Event Record, Physical Address. # # @descriptor: Memory Event Descriptor with additional memory event -# information. See CXL r3.0 Table 8-43 General Media Event +# information. See CXL r3.2 Table 8-57 General Media Event # Record, Memory Event Descriptor for bit definitions. # -# @type: Type of memory event that occurred. See CXL r3.0 Table 8-43 +# @type: Type of memory event that occurred. See CXL r3.2 Table 8-57 # General Media Event Record, Memory Event Type for possible # values. # # @transaction-type: Type of first transaction that caused the event -# to occur. See CXL r3.0 Table 8-43 General Media Event Record, +# to occur. See CXL r3-2 Table 8-57 General Media Event Record, # Transaction Type for possible values. # # @channel: The channel of the memory event location. A channel is an @@ -94,6 +94,16 @@ # @component-id: Device specific component identifier for the event. # May describe a field replaceable sub-component of the device. # +# @is-comp-id-pldm: This flag specifies whether the device-specific +# component identifier format follows PLDM. +# +# @cme-ev-flags: Advanced programmable corrected memory error +# threshold event flags. +# +# @cme-count: Corrected memory error count at event. +# +# @sub-type: Memory event sub-type. +# # Since: 8.1 ## { 'struct': 'CXLGeneralMediaEvent', @@ -101,13 +111,16 @@ 'data': { 'dpa': 'uint64', 'descriptor': 'uint8', 'type': 'uint8', 'transaction-type': 'uint8', '*channel': 'uint8', '*rank': 'uint8', - '*device': 'uint32', '*component-id': 'str' } } + '*device': 'uint32', '*component-id': 'str', + '*is-comp-id-pldm':'bool', + '*cme-ev-flags':'uint8', '*cme-count':'uint32', + 'sub-type':'uint8' } } =20 ## # @cxl-inject-general-media-event: # -# Inject an event record for a General Media Event (CXL r3.0 -# 8.2.9.2.1.1). This event type is reported via one of the event +# Inject an event record for a General Media Event (CXL r3.2 +# 8.2.10.2.1.1). This event type is reported via one of the event # logs specified via the log parameter. # # Since: 8.1 --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770599; cv=none; d=zohomail.com; s=zohoarc; b=QkI3n3Iq8t1ahl5INLn6L2fzWTk7ZnYUE6vBh074rP9GI+neoFMbGbAIvbSn1ZnTFdIQzhn4Va1Sw0jpsmcKnFXOM4DctxI1ns2ksUHtmtBmKe8uSzmaIVmV18+U3MB/uhN/VDacxp7vO204AkGAlM7emrgZ/BKxU0WAB/bs4xk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770599; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Q5//VazXW7wADCbfP9nhBrYMpz6KwtNQEosG71RpWuw=; b=kBmotoQ2bBbFNB036+8QcK797h4NGllC3AB2TbtcF6m300LzN1jWoNPs/S9ijkcJAXlZUm2x6bgd/6M/J6diGGQrSnE6fEs+szyjly/ARoMHyTqu6r21UFmAtWVAjUxEpc0KophvKOCnySGw0D57i1ZqayqVK4Cqd86iV6d8TlE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770599567526.98706002414; Sun, 22 Feb 2026 06:29:59 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASJ-000891-QB; Sun, 22 Feb 2026 09:29:07 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuAS1-00080Z-SJ for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:51 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuARx-0006gb-B8 for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:48 -0500 Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-652-cxPwpCqyPjS4EpxXcQ3cow-1; Sun, 22 Feb 2026 09:28:43 -0500 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-4836cd6dfe6so4813605e9.2 for ; Sun, 22 Feb 2026 06:28:43 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483a31b3d88sm219868765e9.3.2026.02.22.06.28.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:28:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770524; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=Q5//VazXW7wADCbfP9nhBrYMpz6KwtNQEosG71RpWuw=; b=iZupk4a68QIs6UN93IHFuCW+zZpsXil80NxLgxMsznMF5JjMcJv71SMxNZYJUCGDbL91tf nWTN9AA/o4m48XgLYFgza4AbympqDBOCNfW4NrVMbdnup/BqMJU9Ii1uY4eT+44Dv3macD G7SsS5NOMZnZu6GiPSJ7uAYsRZPlUlA= X-MC-Unique: cxPwpCqyPjS4EpxXcQ3cow-1 X-Mimecast-MFC-AGG-ID: cxPwpCqyPjS4EpxXcQ3cow_1771770522 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770522; x=1772375322; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=Q5//VazXW7wADCbfP9nhBrYMpz6KwtNQEosG71RpWuw=; b=F2gvRj4sRDc2r9ZfmOhJ0agWA/tajnpdIE9KRnYnFRcF1j1GMylGSx1ACCFdgeyzzz oTHyJClTp9qEnxDT0OzfARAIGGmwpva+/+rzsDSkyW82a3vgaSaaIklZ/EicjkbJbWMi 7LBxGoFmcXTYwmZ96YvvKfIqZayKDo+Nyv5GLuWwCHgUYUafbAueeV7gF+sCIHot/KQ0 SPPrJUcs2lA3sHMNXWRbDp9gMORhOcRDTasRBcE5L/O0nAQoQCizRypU0jkrKTzP4cAX uuzDKFjmAYFQHqX6Tjlr56xjgnagWYALvSlMZCGZuykH59iO0irTI7LtcGGQWb4l8RCA JUqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770522; x=1772375322; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Q5//VazXW7wADCbfP9nhBrYMpz6KwtNQEosG71RpWuw=; b=rTX21VFyQMx2pRvV2szv+BAXaIxjHapIV8WB5NAWR9PnjIFTifi13fgFzpwGbE79p+ Yf+fpIUnO0C+uqdbhR6LYZaye6VlOnid9CDrEcQMgHt33zXoKTRzuXjqEakvWmuiH9ab nMu/WrpU/lOlnhekmmzxKWhVmiE+PcuPDmB2dJy10q33tsTaDfio1J3CvRSrnD8enFnQ nG+Qj+lM2JZ/+eB4FAot4FAx0Djrh3GDA0l15sK88BGNZIy8PrX547Vqy03558W0xJ/X 24hJim7aEN1s1k/NCwp7Bsp0NghVFaNWMuQVQujGwMxnrBrh4O+PHFgumzO+Ir0sbECU 139Q== X-Gm-Message-State: AOJu0YwoJRpc0jRDasF3c8YLO6b1JpSSvd2O4kb7eDX6DT/o8+g8OHE0 DumD4i/Ukty+TliQjEnjnnQ71oqstYlzBnUTQolqqHNta3O8StR5ut9Yc9N0iuXsfws11CpR6sN hPrbw6Z4cuXoE92TMl3jvuL8WoH/cdb96E0a7ld5u0bzwI0FOdI1nN1+eFB251CDzdH+NV2UPMq g0M6JI6DDh3ksNaz2FQ8WiW8PGROkerU3vbQ== X-Gm-Gg: AZuq6aKHffnfuE6CeelJLgIcXlpYtIJJbz+xbt20OJQLpBqehVts4bgubXzs7Sp6Ajg 7DTXHql/4Vj0i8DoMe9fvZlpHFbxJILDVrFh8xyg8Q6HOXacCP2l1lSVwLfFEubgb7CSEHquc9o R1cD+huOg9wf7UaoOSLyYyOyp0PSiqny5czKxk6kHX+PWRiNytHdrR5yn3DenxyoLrb3bNH6rSz 8hrEdwlDDJetkpeObDfWoUdrpnvV1RpSxkydKwBqp0mEb5uYZnNICvaMSLCVaChKXvPbtv6JZEg tSDglgTUePadAGRoRuC3Tkv3DzATyHrQXxZveO4FhuxAj0gfmvg/qk8Te5ghDK6zMUpI9WEf3fS mzkAX9hCgJBeD8O4xjXbIGPCMeecuvhb+QuRSUdnUmsI/jQ== X-Received: by 2002:a05:600c:3b20:b0:477:561f:6fc8 with SMTP id 5b1f17b1804b1-483a95eabadmr98807265e9.5.1771770521926; Sun, 22 Feb 2026 06:28:41 -0800 (PST) X-Received: by 2002:a05:600c:3b20:b0:477:561f:6fc8 with SMTP id 5b1f17b1804b1-483a95eabadmr98806845e9.5.1771770521404; Sun, 22 Feb 2026 06:28:41 -0800 (PST) Date: Sun, 22 Feb 2026 09:28:38 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Shiju Jose , Markus Armbruster , Jonathan Cameron , Fan Ni , Eric Blake Subject: [PULL 10/33] hw/cxl/events: Updates for rev3.2 DRAM event record Message-ID: <94976b8631a11297b52826f51a638242b2767f9f.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770601135154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Shiju Jose CXL spec rev3.2 section 8.2.10.2.1.2 Table 8-58, DRAM event record has updated with following new fields. 1. Component Identifier 2. Sub-channel of the memory event location 3. Advanced Programmable Corrected Memory Error Threshold Event Flags 4. Corrected Volatile Memory Error Count at Event 5. Memory Event Sub-Type Add updates for the above spec changes in the CXL DRAM event reporting and QMP command to inject DRAM event. In order to ensure consistency update all specification references for this command to CXL r3.2. Signed-off-by: Shiju Jose Acked-by: Markus Armbruster Signed-off-by: Jonathan Cameron Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260205112350.60681-5-Jonathan.Cameron@huawei.com> --- hw/mem/cxl_type3.c | 44 ++++++++++++++++++++++++++++++++++++- hw/mem/cxl_type3_stubs.c | 7 ++++++ include/hw/cxl/cxl_events.h | 9 ++++++-- qapi/cxl.json | 33 ++++++++++++++++++++++------ 4 files changed, 83 insertions(+), 10 deletions(-) diff --git a/hw/mem/cxl_type3.c b/hw/mem/cxl_type3.c index 229be88708..be99d20faf 100644 --- a/hw/mem/cxl_type3.c +++ b/hw/mem/cxl_type3.c @@ -1783,6 +1783,13 @@ void qmp_cxl_inject_general_media_event(const char *= path, CxlEventLog log, #define CXL_DRAM_VALID_ROW BIT(5) #define CXL_DRAM_VALID_COLUMN BIT(6) #define CXL_DRAM_VALID_CORRECTION_MASK BIT(7) +#define CXL_DRAM_VALID_COMPONENT BIT(8) +#define CXL_DRAM_VALID_COMPONENT_ID_FORMAT BIT(9) +#define CXL_DRAM_VALID_SUB_CHANNEL BIT(10) + +#define CXL_DRAM_EV_DESC_UCE BIT(0) +#define CXL_DRAM_EV_DESC_THRESHOLD_EVENT BIT(1) +#define CXL_DRAM_EV_DESC_POISON_LIST_OVERFLOW_EVENT BIT(2) =20 void qmp_cxl_inject_dram_event(const char *path, CxlEventLog log, uint32_t flags, @@ -1802,6 +1809,12 @@ void qmp_cxl_inject_dram_event(const char *path, Cxl= EventLog log, bool has_column, uint16_t column, bool has_correction_mask, uint64List *correction_mask, + const char *component_id, + bool has_comp_id_pldm, bool is_comp_id_pldm, + bool has_sub_channel, uint8_t sub_channel, + bool has_cme_ev_flags, uint8_t cme_ev_flags, + bool has_cvme_count, uint32_t cvme_count, + uint8_t sub_type, Error **errp) { Object *obj =3D object_resolve_path(path, NULL); @@ -1838,7 +1851,6 @@ void qmp_cxl_inject_dram_event(const char *path, CxlE= ventLog log, has_maint_op_subclass, maint_op_subclass, has_ld_id, ld_id, has_head_id, head_id); stq_le_p(&dram.phys_addr, dpa); - dram.descriptor =3D descriptor; dram.type =3D type; dram.transaction_type =3D transaction_type; =20 @@ -1888,6 +1900,36 @@ void qmp_cxl_inject_dram_event(const char *path, Cxl= EventLog log, valid_flags |=3D CXL_DRAM_VALID_CORRECTION_MASK; } =20 + if (component_id) { + strncpy((char *)dram.component_id, component_id, + sizeof(dram.component_id) - 1); + valid_flags |=3D CXL_DRAM_VALID_COMPONENT; + if (has_comp_id_pldm && is_comp_id_pldm) { + valid_flags |=3D CXL_DRAM_VALID_COMPONENT_ID_FORMAT; + } + } + + if (has_sub_channel) { + dram.sub_channel =3D sub_channel; + valid_flags |=3D CXL_DRAM_VALID_SUB_CHANNEL; + } + + if (has_cme_ev_flags) { + dram.cme_ev_flags =3D cme_ev_flags; + } else { + dram.cme_ev_flags =3D 0; + } + + if (has_cvme_count) { + descriptor |=3D CXL_DRAM_EV_DESC_THRESHOLD_EVENT; + st24_le_p(dram.cvme_count, cvme_count); + } else { + st24_le_p(dram.cvme_count, 0); + } + dram.descriptor =3D descriptor; + + dram.sub_type =3D sub_type; + stw_le_p(&dram.validity_flags, valid_flags); =20 if (cxl_event_insert(cxlds, enc_log, (CXLEventRecordRaw *)&dram)) { diff --git a/hw/mem/cxl_type3_stubs.c b/hw/mem/cxl_type3_stubs.c index 2047e97846..231dda263f 100644 --- a/hw/mem/cxl_type3_stubs.c +++ b/hw/mem/cxl_type3_stubs.c @@ -53,6 +53,13 @@ void qmp_cxl_inject_dram_event(const char *path, CxlEven= tLog log, bool has_column, uint16_t column, bool has_correction_mask, uint64List *correction_mask, + const char *component_id, + bool has_comp_id_pldm, + bool is_comp_id_pldm, + bool has_sub_channel, uint8_t sub_channel, + bool has_cme_ev_flags, uint8_t cme_ev_flags, + bool has_cvme_count, uint32_t cvme_count, + uint8_t sub_type, Error **errp) {} =20 void qmp_cxl_inject_memory_module_event(const char *path, CxlEventLog log, diff --git a/include/hw/cxl/cxl_events.h b/include/hw/cxl/cxl_events.h index 352f9891bd..a3c5f2ec20 100644 --- a/include/hw/cxl/cxl_events.h +++ b/include/hw/cxl/cxl_events.h @@ -138,7 +138,7 @@ typedef struct CXLEventGenMedia { =20 /* * DRAM Event Record - * CXL r3.1 Section 8.2.9.2.1.2: Table 8-46 + * CXL r3.2 Section 8.2.10.2.1.2: Table 8-58 * All fields little endian. */ typedef struct CXLEventDram { @@ -156,7 +156,12 @@ typedef struct CXLEventDram { uint8_t row[3]; uint16_t column; uint64_t correction_mask[4]; - uint8_t reserved[0x17]; + uint8_t component_id[CXL_EVENT_GEN_MED_COMP_ID_SIZE]; + uint8_t sub_channel; + uint8_t cme_ev_flags; + uint8_t cvme_count[3]; + uint8_t sub_type; + uint8_t reserved; } QEMU_PACKED CXLEventDram; =20 /* diff --git a/qapi/cxl.json b/qapi/cxl.json index 4ff66fc6c1..1dc8b08ca3 100644 --- a/qapi/cxl.json +++ b/qapi/cxl.json @@ -131,21 +131,21 @@ ## # @CXLDRAMEvent: # -# Event record for a DRAM Event (CXL r3.0 8.2.9.2.1.2). +# Event record for a DRAM Event (CXL r3.2 8.2.10.2.1.2). # # @dpa: Device Physical Address (relative to @path device). Note -# lower bits include some flags. See CXL r3.0 Table 8-44 DRAM +# lower bits include some flags. See CXL r3.2 Table 8-58 DRAM # Event Record, Physical Address. # # @descriptor: Memory Event Descriptor with additional memory event -# information. See CXL r3.0 Table 8-44 DRAM Event Record, Memory +# information. See CXL r3.2 Table 8-58 DRAM Event Record, Memory # Event Descriptor for bit definitions. # -# @type: Type of memory event that occurred. See CXL r3.0 Table 8-44 +# @type: Type of memory event that occurred. See CXL r3.2 Table 8-58 # DRAM Event Record, Memory Event Type for possible values. # # @transaction-type: Type of first transaction that caused the event -# to occur. See CXL r3.0 Table 8-44 DRAM Event Record, +# to occur. See CXL r3.2 Table 8-58 DRAM Event Record, # Transaction Type for possible values. # # @channel: The channel of the memory event location. A channel is an @@ -169,6 +169,21 @@ # @correction-mask: Bits within each nibble. Used in order of bits # set in the nibble-mask. Up to 4 nibbles may be covered. # +# @component-id: Device specific component identifier for the event. +# May describe a field replaceable sub-component of the device. +# +# @is-comp-id-pldm: This flag specifies whether the device-specific +# component identifier format follows PLDM. +# +# @sub-channel: The sub-channel of the memory event location. +# +# @cme-ev-flags: Advanced programmable corrected memory error +# threshold event flags. +# +# @cvme-count: Corrected volatile memory error count at event. +# +# @sub-type: Memory event sub-type. +# # Since: 8.1 ## { 'struct': 'CXLDRAMEvent', @@ -177,13 +192,17 @@ 'type': 'uint8', 'transaction-type': 'uint8', '*channel': 'uint8', '*rank': 'uint8', '*nibble-mask': 'uint32= ', '*bank-group': 'uint8', '*bank': 'uint8', '*row': 'uint32', - '*column': 'uint16', '*correction-mask': [ 'uint64' ] + '*column': 'uint16', '*correction-mask': [ 'uint64' ], + '*component-id': 'str', '*is-comp-id-pldm':'bool', + '*sub-channel':'uint8', + '*cme-ev-flags':'uint8', '*cvme-count':'uint32', + 'sub-type':'uint8' }} =20 ## # @cxl-inject-dram-event: # -# Inject an event record for a DRAM Event (CXL r3.0 8.2.9.2.1.2). +# Inject an event record for a DRAM Event (CXL r3.2 8.2.10.2.1.2). # This event type is reported via one of the event logs # specified via the log parameter. # --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770736; cv=none; d=zohomail.com; s=zohoarc; b=Z7lAPq0fW0IuC8MYvjRTUJwYyvlXvoRp1xLD5L5lX3aSN3GU5iYVJRXyCfBT/T41xnbt4sP69ZosI1TMy8dn2dtvQqWPMTy/BkonJhBhNArIaghT9aVhI/of9+GLYBKY/K+U8bwe/ZIDCTrJIIFf5TU7XAkQX05jmaIUOHiNDkI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770736; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=AQ8QEe6bM9LPkh94Ea4ZBPRh4my0yC9DE08GC55pqY4=; b=jzsPFKsk2dTnNwHJHxNYRU0WtaM66QUXI3JjTtgrdF3LTQJfZjC6UzajhXtrM6aWZij1hZjQsbqSHA+Aru+5l8BRJ2J59fWE0j+999eyI+YccU9TZwUMSjqNCtrZWHcZy+8eU6cpPmjAtbqNTJYTaji6ISuV+A9B3aC7+MGDjUY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770736220688.8102150675205; Sun, 22 Feb 2026 06:32:16 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASK-000893-6C; Sun, 22 Feb 2026 09:29:08 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuAS3-00080c-Gi for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:51 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuAS1-0006gh-Kv for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:51 -0500 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-654-1SbtHP2NMl6DyKySGF3afQ-1; Sun, 22 Feb 2026 09:28:45 -0500 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-48071615686so35594675e9.1 for ; Sun, 22 Feb 2026 06:28:45 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970bfa1bdsm11499833f8f.3.2026.02.22.06.28.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:28:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770527; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=AQ8QEe6bM9LPkh94Ea4ZBPRh4my0yC9DE08GC55pqY4=; b=B1ZU8hmPZs8xqiMZl84ckmTRhWotFl2vAuOIkuv27L1DLSd9wJ/I+D8b+sQ7+K4+RolcU2 jBoss7tnNfgPqip1eCHC1RfKDPLERJuhVajCt4bXh/vi7my9ifm9gvqpCjIuiPqwAOf6h7 LgcTtlXT4RQ3eVSaIMHo3z8aebUGevA= X-MC-Unique: 1SbtHP2NMl6DyKySGF3afQ-1 X-Mimecast-MFC-AGG-ID: 1SbtHP2NMl6DyKySGF3afQ_1771770525 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770524; x=1772375324; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=AQ8QEe6bM9LPkh94Ea4ZBPRh4my0yC9DE08GC55pqY4=; b=pOKs3GOgFYhv1N0nHcCwAuQstcuvog+olFkQYTw6w9zyKSFgqyQY8XmpMmYiBtw6hm yVKdBd9ipklT5a6KSwXSgJRUJ66WRu8oD5eVN/RcCPnT3j12UcQ8aZvOW7e8f2aIw8TZ TFjg74WmNfKxrnivXWUCrEVvjpUwp2SBDXvXtRIva/lp7iEQkw2r9oF6eIe5O+clCH4r RkQLMps4u1r9ULhVI0kTAm+kxlMMF9aQ4uvCFX29dW/ikgf98y55jYQnon2VdBtEJHLJ p6IlONzw6xuee/3Rfh9Jn9xRxFwbM743y4TOnzVq5W/Q6k3oB3v84SAeZIwk+j3SWNBR fzxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770524; x=1772375324; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AQ8QEe6bM9LPkh94Ea4ZBPRh4my0yC9DE08GC55pqY4=; b=g4ruhyckGgNlxpZveF8psZmMxktwqqmPMpExVH3UzJnTo1RFX7TZOtIJjv7oQrjfac Y9p7IL0ekek0PILxlmRLOJfSHaqov4gYRPrDV4k2j0i9d1zZMlj1UHsFFOH7Rbaq+oqt VkHzM6w6CgPEgGb6xsE/Kh6oOf7tCUXsycmyEsppQ2ymDhfrNbLuZqwh9fee1pRoSC/W YLsInjlGqOPRFrxkadS3NwJ/fcGfJjQbLRUpQhb5rWyTYUlWlyTrruNE8e8BojrkN60B 6L6Ucgm4Z5xo1VFcnRpqR7RQqCwUPnMGT2cCEuuN+TsC7jm2iAD5KLqtg5Tej/EXq1oc XsJQ== X-Gm-Message-State: AOJu0YzGKCBpf9b+3IDKHxtYfhG7OYKpNnCK6ShT6snvP+lzaX60/6D9 QsT9PeNhKVrQTo411EnqGCJP35n2qOw7knBh5FJyHyiwo2mqQ6dhv8Y/5YJF2vEZyd3Lf0eVhmS 5Q5zHngV4/LOY8lL0HYmwkh/eP634Uz1R8U7/UZRoTBdVNFaTq17JoPNGuMqMXujf9AGAkP74QG W3J19Dj3A1i20rs6078AZT6ZUsGAXgiY7g9w== X-Gm-Gg: AZuq6aJnHMfy9y+P2w01GIE7WTIS78E7dK5/rTZiY4ze2y+zc6t5tTfxvtrW+X4GAgp jRxdG3GNKxCLG/2RU6v+8YfbSqZOR048AHaWP4hP+/h8VwwyIovWd5/WGIDb1IBBLr2RjTL7ur5 lL1FV1rny6UXf5vbxb4lS3i+yd9IRZBR3JDfyuTAf5VThnNlGG1D0QKOu2l+fb4YQMX65hI8bmj xv8z2h7b3/9e50iQcbXp9mp5BiPoY2fkePYBnITh9N6lXBVAgKbCX66KtobiVb4bm+u1KXRoWMI oF/6i0z0qmIEGjrzF1zSVzmzw1K2Ua1aGONszAuXHxHho+QDUNQ4+3fj6cXuIh1QdfJOjAXpQuK dmKqBbRwiqZqV80quIqLGZtsSJJ8D6Wq4RW1mpPq1RpBsVQ== X-Received: by 2002:a05:600c:3f05:b0:47d:8479:78d5 with SMTP id 5b1f17b1804b1-483a95aae85mr97090245e9.7.1771770524171; Sun, 22 Feb 2026 06:28:44 -0800 (PST) X-Received: by 2002:a05:600c:3f05:b0:47d:8479:78d5 with SMTP id 5b1f17b1804b1-483a95aae85mr97089895e9.7.1771770523615; Sun, 22 Feb 2026 06:28:43 -0800 (PST) Date: Sun, 22 Feb 2026 09:28:41 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Shiju Jose , Markus Armbruster , Jonathan Cameron , Fan Ni , Eric Blake Subject: [PULL 11/33] hw/cxl/events: Updates for rev3.2 memory module event record Message-ID: <1fc57dd250944805a5d5f498ebf0775234be3851.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770738828154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Shiju Jose CXL spec rev3.2 section 8.2.10.2.1.3 Table 8-59, memory module event record has updated with following new fields. 1. Validity Flags 2. Component Identifier 3. Device Event Sub-Type Add updates for the above spec changes in the CXL memory module event reporting and QMP command to inject memory module event. Updated all references for this command to the CXL r3.2 specification. Signed-off-by: Shiju Jose Acked-by: Markus Armbruster Signed-off-by: Jonathan Cameron Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260205112350.60681-6-Jonathan.Cameron@huawei.com> --- hw/mem/cxl_type3.c | 20 ++++++++++++++++++++ hw/mem/cxl_type3_stubs.c | 4 ++++ include/hw/cxl/cxl_events.h | 7 +++++-- qapi/cxl.json | 30 ++++++++++++++++++++---------- 4 files changed, 49 insertions(+), 12 deletions(-) diff --git a/hw/mem/cxl_type3.c b/hw/mem/cxl_type3.c index be99d20faf..acb75f8f01 100644 --- a/hw/mem/cxl_type3.c +++ b/hw/mem/cxl_type3.c @@ -1937,6 +1937,9 @@ void qmp_cxl_inject_dram_event(const char *path, CxlE= ventLog log, } } =20 +#define CXL_MMER_VALID_COMPONENT BIT(0) +#define CXL_MMER_VALID_COMPONENT_ID_FORMAT BIT(1) + void qmp_cxl_inject_memory_module_event(const char *path, CxlEventLog log, uint32_t flags, bool has_maint_op_= class, uint8_t maint_op_class, @@ -1953,11 +1956,16 @@ void qmp_cxl_inject_memory_module_event(const char = *path, CxlEventLog log, uint32_t dirty_shutdown_count, uint32_t corrected_volatile_error_= count, uint32_t corrected_persist_error_c= ount, + const char *component_id, + bool has_comp_id_pldm, + bool is_comp_id_pldm, + uint8_t sub_type, Error **errp) { Object *obj =3D object_resolve_path(path, NULL); CXLEventMemoryModule module; CXLEventRecordHdr *hdr =3D &module.hdr; + uint16_t valid_flags =3D 0; CXLDeviceState *cxlds; CXLType3Dev *ct3d; uint8_t enc_log; @@ -2000,6 +2008,18 @@ void qmp_cxl_inject_memory_module_event(const char *= path, CxlEventLog log, stl_le_p(&module.corrected_persistent_error_count, corrected_persist_error_count); =20 + if (component_id) { + strncpy((char *)module.component_id, component_id, + sizeof(module.component_id) - 1); + valid_flags |=3D CXL_MMER_VALID_COMPONENT; + if (has_comp_id_pldm && is_comp_id_pldm) { + valid_flags |=3D CXL_MMER_VALID_COMPONENT_ID_FORMAT; + } + } + module.sub_type =3D sub_type; + + stw_le_p(&module.validity_flags, valid_flags); + if (cxl_event_insert(cxlds, enc_log, (CXLEventRecordRaw *)&module)) { cxl_event_irq_assert(ct3d); } diff --git a/hw/mem/cxl_type3_stubs.c b/hw/mem/cxl_type3_stubs.c index 231dda263f..98292a931c 100644 --- a/hw/mem/cxl_type3_stubs.c +++ b/hw/mem/cxl_type3_stubs.c @@ -78,6 +78,10 @@ void qmp_cxl_inject_memory_module_event(const char *path= , CxlEventLog log, uint32_t dirty_shutdown_count, uint32_t corrected_volatile_error_= count, uint32_t corrected_persist_error_c= ount, + const char *component_id, + bool has_comp_id_pldm, + bool is_comp_id_pldm, + uint8_t sub_type, Error **errp) {} =20 void qmp_cxl_inject_poison(const char *path, uint64_t start, uint64_t leng= th, diff --git a/include/hw/cxl/cxl_events.h b/include/hw/cxl/cxl_events.h index a3c5f2ec20..4a7836ad72 100644 --- a/include/hw/cxl/cxl_events.h +++ b/include/hw/cxl/cxl_events.h @@ -166,7 +166,7 @@ typedef struct CXLEventDram { =20 /* * Memory Module Event Record - * CXL r3.1 Section 8.2.9.2.1.3: Table 8-47 + * CXL r3.2 Section 8.2.10.2.1.3: Table 8-59 * All fields little endian. */ typedef struct CXLEventMemoryModule { @@ -180,7 +180,10 @@ typedef struct CXLEventMemoryModule { uint32_t dirty_shutdown_count; uint32_t corrected_volatile_error_count; uint32_t corrected_persistent_error_count; - uint8_t reserved[0x3d]; + uint16_t validity_flags; + uint8_t component_id[CXL_EVENT_GEN_MED_COMP_ID_SIZE]; + uint8_t sub_type; + uint8_t reserved[0x2a]; } QEMU_PACKED CXLEventMemoryModule; =20 /* diff --git a/qapi/cxl.json b/qapi/cxl.json index 1dc8b08ca3..81d6198ba0 100644 --- a/qapi/cxl.json +++ b/qapi/cxl.json @@ -214,20 +214,20 @@ ## # @CXLMemModuleEvent: # -# Event record for a Memory Module Event (CXL r3.0 8.2.9.2.1.3). +# Event record for a Memory Module Event (CXL r3.2 8.2.10.2.1.3). # -# @type: Device Event Type. See CXL r3.0 Table 8-45 Memory Module +# @type: Device Event Type. See CXL r3.2 Table 8-59 Memory Module # Event Record for bit definitions for bit definiions. # -# @health-status: Overall health summary bitmap. See CXL r3.0 Table -# 8-100 Get Health Info Output Payload, Health Status for bit +# @health-status: Overall health summary bitmap. See CXL r3.2 Table +# 8-148 Get Health Info Output Payload, Health Status for bit # definitions. # -# @media-status: Overall media health summary. See CXL r3.0 Table -# 8-100 Get Health Info Output Payload, Media Status for bit +# @media-status: Overall media health summary. See CXL r3.2 Table +# 8-148 Get Health Info Output Payload, Media Status for bit # definitions. # -# @additional-status: See CXL r3.0 Table 8-100 Get Health Info Output +# @additional-status: See CXL r3.2 Table 8-148 Get Health Info Output # Payload, Additional Status for subfield definitions. # # @life-used: Percentage (0-100) of factory expected life span. @@ -243,6 +243,14 @@ # @corrected-persistent-error-count: Total number of correctable # errors in persistent memory # +# @component-id: Device specific component identifier for the event. +# May describe a field replaceable sub-component of the device. +# +# @is-comp-id-pldm: This flag specifies whether the device-specific +# component identifier format follows PLDM. +# +# @sub-type: Device event sub-type. +# # Since: 8.1 ## { 'struct': 'CXLMemModuleEvent', @@ -252,14 +260,16 @@ 'life-used': 'uint8', 'temperature' : 'int16', 'dirty-shutdown-count': 'uint32', 'corrected-volatile-error-count': 'uint32', - 'corrected-persistent-error-count': 'uint32' + 'corrected-persistent-error-count': 'uint32', + '*component-id': 'str', '*is-comp-id-pldm':'bool', + 'sub-type':'uint8' }} =20 ## # @cxl-inject-memory-module-event: # -# Inject an event record for a Memory Module Event (CXL r3.0 -# 8.2.9.2.1.3). This event includes a copy of the Device Health info +# Inject an event record for a Memory Module Event (CXL r3.2 +# 8.2.10.2.1.3). This event includes a copy of the Device Health info # at the time of the event. # # Since: 8.1 --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770686; cv=none; d=zohomail.com; s=zohoarc; b=Uwm1p2t2bnsDZo34oQRVBShroKBdI0Ncqxuvwxr2Eo2/0AqREx5L/KVD8fcV+ssjdjodi0nSO/DwuodjgY7AYicLCh+Hg6nwsxe4jgZ732FSNBCjy3Hwvdd4dsjgWAhKPx7Sto9qIEYQcrnHpRdVC3F4IrPYNDCwBbMsEe0PZsQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770686; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=YQq2jEXU76sJtiThK7kgx3Pj3drtYSaaDPP/37DA9dI=; b=MXWwnv5jzYCxkNAW63ijjAYwTDOxNhmyrpdqvCpA1NTaza2egySP3/v8TwMWDAJa3aWWyTA430sEmpHb0AFHZmXCNoXNkWd5tqDBP0TXBMB/XMcsDc58EqTdxvzKBIKkgQdFcRwFFGCGbPBW/ZoI3O/JbQfEiVeR5d+lt14rJB0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17717706867501018.1111309682875; Sun, 22 Feb 2026 06:31:26 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASK-00089B-GF; Sun, 22 Feb 2026 09:29:08 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuAS3-00080b-9M for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:51 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuAS1-0006gl-Pt for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:51 -0500 Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-646-yV3U1EHnPjGCLgfAflMjiQ-1; Sun, 22 Feb 2026 09:28:47 -0500 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-43964455342so1755495f8f.0 for ; Sun, 22 Feb 2026 06:28:47 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970bf9fb2sm13088199f8f.1.2026.02.22.06.28.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:28:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770529; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=YQq2jEXU76sJtiThK7kgx3Pj3drtYSaaDPP/37DA9dI=; b=eLQ0KDxcZ2PS+KAYuEbvMCwgeWJ9jRD0GApdYbkOlzrUXQdL0qkqe4i+pf0/tX3dy9ozzD 4VnkUDBSlUnYPYWSmC33z6E5MOPRo3bHA/kIt315iBFjPExtgAhyHTFrDcNaw/i8Bz4U8q /1YHtT9a5/rmxT3x4yXhvVOu45IePQI= X-MC-Unique: yV3U1EHnPjGCLgfAflMjiQ-1 X-Mimecast-MFC-AGG-ID: yV3U1EHnPjGCLgfAflMjiQ_1771770527 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770526; x=1772375326; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=YQq2jEXU76sJtiThK7kgx3Pj3drtYSaaDPP/37DA9dI=; b=aiqctDGddxCkzSOqRZgXU6MF4kfpwIIQO4g81rCIlabfoWgRe+W1WgCCE7+yaGzdr8 ZhljOwCQ7+WMt3T+OSrXKhz/FvPCJWmVKSZLn+5+HCLMxqm65Tr8CN0uKTiEiUvmkaq5 RrJfap2FlJ3hzyR6ifma70AubvjLgUfvvNMr3wGeSU8CcdAaCuZVtpeYkZVFwQepkGjP bWnPwqPZSg0e2UE7fL67A2PHRKcd4vgxtt08rUUOOwh528HVdrEVlmMRo848t6W7L9p2 hZwh6rxW4ZqkTI4ACYGpMY943Q7mojRorkVE/OAX0ybezi/3hawCH3PTL9siKBlZAhrP 0Xeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770526; x=1772375326; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YQq2jEXU76sJtiThK7kgx3Pj3drtYSaaDPP/37DA9dI=; b=nGcvg5Wip9viWhh+diokQQ8VKefJoPZmiMjJTu1EeuVQzsYKsuVN1PRAuSfUIxfjH2 kE7UG2oi3Aak6YWhaN2cji2OnfAJL3PYoWODyxL0X2NuRLGOMfkiZNtPpVZNSDdsYl7w JK42y+0UKroCRJLmxDALA9riKiJY2PlNcz+Is3QmqfwoOsxHqdOO4osaUtr5sEj1MKdT +EElU6I4oA3J0bVv2Om8b6sJ+32ofh3oppkyE71zT7vScwTTpfa2y6CZr9zyue+k5nSb zEM/JE7H7RCqIafcK1mzpCYXiRkV7nvmSM7EZi/CzSU/eZDQFlLqIHLY2ZGpwbOpyuLU TZIg== X-Gm-Message-State: AOJu0YwZaw9LxTjMVUQaVr9SH5/n7LVokAriHtJAnm1AmQjkekjy5KiD M+EuSYwo/KkDwhBo4A9qlsczTK+NDOXPPIMWkWbouoW8/HqidLXr3VROQe5ksKaQvGWFgzZz6Ud gwA8af8W0ufeUFiP134jb4z3IjTKhSPAYj6ewO1b2WhHK+fW/QijN8/2yPoW5QggjB5NmoeMYLp QqHQmmF4uBvzDzE1Qqr0zK6lirYHnVW2rw6Q== X-Gm-Gg: AZuq6aJEFBd6ah2yAq0kBOZI2sm92Iu9QlxKppCRd8zL+wcpWh9B9s2OdCDApnWPf85 TE6rXKWdk/h/oN/FnlHHG7cgqGd6nWcDeceCtCKK9/KHRXnZuwS0ekJN15AZ9npWO/9RV6XL16i 4o+gKvrPibJ3NgROUNi8qBi359IdkFCSygmtWOqcinm58/+M3H/OEtmG4xycv6dhYVSYnTXVfhg AG7FQr+F6R2sKEMbzVsqW1U0jTtshMa2at8oB9wiMVb2HpTOqMSGf39ZgnNegnT6SNzXuM8x0HP IY8by0+pasCUihkj4T7wj9M8hhrsoSamTpAg/EmHBQQa85hoMPL485A0jUY5yxe9EoFQ6JgrbaB +YBQCFb+KZm/0c48yKnQTbHJZyztz9o8DCsqE//GGRQmv7Q== X-Received: by 2002:a05:6000:40cc:b0:435:bcbd:cb29 with SMTP id ffacd0b85a97d-439625c9bbbmr22781752f8f.2.1771770526369; Sun, 22 Feb 2026 06:28:46 -0800 (PST) X-Received: by 2002:a05:6000:40cc:b0:435:bcbd:cb29 with SMTP id ffacd0b85a97d-439625c9bbbmr22781715f8f.2.1771770525772; Sun, 22 Feb 2026 06:28:45 -0800 (PST) Date: Sun, 22 Feb 2026 09:28:43 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Shiju Jose , Jonathan Cameron , Fan Ni Subject: [PULL 12/33] hw/cxl/cxl-mailbox-utils: Move declaration of scrub and ECS feature attributes in cmd_features_set_feature() Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770688043154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Shiju Jose Move the declaration of scrub and ECS feature attributes in cmd_features_set_feature() to the local scope where they are used. Signed-off-by: Shiju Jose Signed-off-by: Jonathan Cameron Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20250917143330.294698-2-Jonathan.Cameron@huawei.com> --- hw/cxl/cxl-mailbox-utils.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index 125f417aa4..8b471c7d93 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -1351,10 +1351,6 @@ static CXLRetCode cmd_features_set_feature(const str= uct cxl_cmd *cmd, CXLCCI *cci) { CXLSetFeatureInHeader *hdr =3D (void *)payload_in; - CXLMemPatrolScrubWriteAttrs *ps_write_attrs; - CXLMemPatrolScrubSetFeature *ps_set_feature; - CXLMemECSWriteAttrs *ecs_write_attrs; - CXLMemECSSetFeature *ecs_set_feature; CXLSetFeatureInfo *set_feat_info; uint16_t bytes_to_copy =3D 0; uint8_t data_transfer_flag; @@ -1396,13 +1392,14 @@ static CXLRetCode cmd_features_set_feature(const st= ruct cxl_cmd *cmd, } =20 if (qemu_uuid_is_equal(&hdr->uuid, &patrol_scrub_uuid)) { + CXLMemPatrolScrubSetFeature *ps_set_feature =3D (void *)payload_in; + CXLMemPatrolScrubWriteAttrs *ps_write_attrs =3D + &ps_set_feature->feat_data; + if (hdr->version !=3D CXL_MEMDEV_PS_SET_FEATURE_VERSION) { return CXL_MBOX_UNSUPPORTED; } =20 - ps_set_feature =3D (void *)payload_in; - ps_write_attrs =3D &ps_set_feature->feat_data; - if ((uint32_t)hdr->offset + bytes_to_copy > sizeof(ct3d->patrol_scrub_wr_attrs)) { return CXL_MBOX_INVALID_PAYLOAD_LENGTH; @@ -1423,13 +1420,13 @@ static CXLRetCode cmd_features_set_feature(const st= ruct cxl_cmd *cmd, } } else if (qemu_uuid_is_equal(&hdr->uuid, &ecs_uuid)) { + CXLMemECSSetFeature *ecs_set_feature =3D (void *)payload_in; + CXLMemECSWriteAttrs *ecs_write_attrs =3D ecs_set_feature->feat_dat= a; + if (hdr->version !=3D CXL_ECS_SET_FEATURE_VERSION) { return CXL_MBOX_UNSUPPORTED; } =20 - ecs_set_feature =3D (void *)payload_in; - ecs_write_attrs =3D ecs_set_feature->feat_data; - if ((uint32_t)hdr->offset + bytes_to_copy > sizeof(ct3d->ecs_wr_attrs)) { return CXL_MBOX_INVALID_PAYLOAD_LENGTH; --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770682; cv=none; d=zohomail.com; s=zohoarc; b=XeTQNQHnaA7cnEKU2bOc0img96yPNaygfCsUhPPzRWfiZas2QT3o+kg6fp6sEWemgC6IjvDPVW57CAuxR6W0Zv+RtfdrYnoiRTiU48FZhPzOgB3hrTuyE0H5h0hAmka9btrKwhpmvRvLefG6CmcMUktEACCy8oserQ77c0pC6OA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770682; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Lydss1k89V/8lbFWiww6LDgDn6tT0DEK3ZSxi0vt8K0=; b=mdsjMH/eKRNwsfeKXWGq/sonO11VT/Rq1UdVl32XYVu8kFbsMJ8y42t4op2SosWxnZfaPEljoqrs2Jy7BAdXnuNobbta7dqNFiLX6n6535zuXe9YZ0QdkbditiTNeuQxama+iP8dRXLjEqlHUlNPFI5mtW6qxoXX2t5SsAd3C9Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770682385778.6996442884154; Sun, 22 Feb 2026 06:31:22 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASK-00089U-NQ; Sun, 22 Feb 2026 09:29:08 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuAS8-00081N-1P for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:57 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuAS4-0006kK-Pe for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:55 -0500 Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-682-02WfBvZIPHGUsy2q7NVcig-1; Sun, 22 Feb 2026 09:28:50 -0500 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-4363333c102so2947785f8f.1 for ; Sun, 22 Feb 2026 06:28:50 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970d4bf89sm11949077f8f.29.2026.02.22.06.28.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:28:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770532; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=Lydss1k89V/8lbFWiww6LDgDn6tT0DEK3ZSxi0vt8K0=; b=aUrSBOD0wsOxcWQ3SWyj0SNPxWnk1ey+9QOxpIg1tltV3OCZYzP4fh2bdwgrTyEkLNjZLK zjnZkN/uYCNQXCxr7bTLR73K6XUj0Po4Oqoav1bGU0yromhSTCSs3oCIfrf/m7y7Qjybc3 szUGBOH4taXlVa4vSJZPtISSWBzAKek= X-MC-Unique: 02WfBvZIPHGUsy2q7NVcig-1 X-Mimecast-MFC-AGG-ID: 02WfBvZIPHGUsy2q7NVcig_1771770529 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770529; x=1772375329; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=Lydss1k89V/8lbFWiww6LDgDn6tT0DEK3ZSxi0vt8K0=; b=HL8eK416bW2WrX1nmPkQbQ6yCr+X2NzDPppylfUPvpZIwYI4hdqtTX+Egyfe0lKw3I RlnKt4qDI/hw1ugWTQ+xKoxXuIMz99mx4IHjK+w3G4bj3iKYvaKM4eswcrVzZN7ebYoy qtMA4kuxM8pupnEyE3SHEUyEusg7sUL+TimU2uzoNyyK4sapkjkVfoiNDtpgKZmi8nkn nyYIIsxk54RZWow1FrSEm4twTuxrD15nm73Mz+t6ZF7601RWjACu0ojIf9okZNDrwX1W CuKftY0BVMQBzfKQ3A+CPmKwLYwcdJ+Aaun86//IG+VGW7Feqx+jo+5cSfEMxsKt866c ridQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770529; x=1772375329; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Lydss1k89V/8lbFWiww6LDgDn6tT0DEK3ZSxi0vt8K0=; b=ANpzGy8rZqBDLgPtHFkzRYY+gr2tNKFE8yXhpJ9vEgJJ0IMiGvLomHp+fnQJgpC9p4 lx/8pzpb5uJNnPEq1gWO7EzqcVukv1bJLEfix3RX1WP8Al9flBDyeteov1JOn3YGlVm8 Y6Db4wGQbA+cfK4B/eajpQBSkxIbFZ1PEifrA0+QnO2wILLCEVlu7UuW2FaFWplcwATH WD690uD9VHaxnqntstP6IYZKPeGa+LGE7PwFW3IEEzGBD4e3a+MHADKLF/lXMofyziKw u/wk/Qve/UiafEHSGSO6zsr1t7FgJ08Tqv3JoTQiFH3jH1mkDq7rIhnd2fQ+n8nSC6GX 9kyA== X-Gm-Message-State: AOJu0Yw5DPDXnyn4Op04cqqYkDxl/TLrvoWndBptiDhb/Uf/uStYAKnM /0ctWxOLcLXtplWE0agLr11h02vwmN/Y+Q5G6yHiGxZixlTUgivJfRW9TsYibsIGy8Tr7LnR42d 8B4J7OWjMVBlIJ0YQfbINXUmz069IC3BeY0GxFMjNhv8AUygXk0xtfA8TkVJGf1sLo6eUH352K6 c1KJe8uVSYSIx5Om+naV1q4HaUBIGTU64qjw== X-Gm-Gg: AZuq6aJWgeZpB4Dxk9W0dXhOlJ4VxhhtdoTtuzHlCc+O6aIIKvYFHE+HmLoTafQJbiE PenQgyeqOsHkQo2byK8w0mOkLa4RqzQWVyrSNxiEV7DCNoS5O1tkqD5hr3i/6ouTKKL0BhwkhWB tdTGtv5Kk7RvcMxjUbyPZGNaDyltD8WBkRgkg0aYHuTXR7JRuUyi3htSjEPqPIOE4Htgb5Y2Fdu UihI4YRmg2Fp2Kt0Msw7CrLwzQOjFOiMuy843pI/mNRzEVZ0me1QmxR8RAPCh+KNXHqL8ql/1gu jSaSsqE5u6tapxKdCjy2LifyE5Ubd1BEBIG5xJ1zN5cFF7VoMUKXjxdET0tvAKNG+CB9E/ib5fl q8th/5+EOESED7zutw2VgIf3j6FR3h5Z+OmHSye8RYsAaZg== X-Received: by 2002:a05:6000:604:b0:435:8ad8:b7a with SMTP id ffacd0b85a97d-4396f181362mr11071331f8f.46.1771770528775; Sun, 22 Feb 2026 06:28:48 -0800 (PST) X-Received: by 2002:a05:6000:604:b0:435:8ad8:b7a with SMTP id ffacd0b85a97d-4396f181362mr11071281f8f.46.1771770528076; Sun, 22 Feb 2026 06:28:48 -0800 (PST) Date: Sun, 22 Feb 2026 09:28:46 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Davidlohr Bueso , Shiju Jose , Jonathan Cameron , Fan Ni Subject: [PULL 13/33] hw/cxl: Add support for Maintenance command and Post Package Repair (PPR) Message-ID: <5e5a86bab8308a9d5db09cbfdf12cc3751dce0f7.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770683321158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Davidlohr Bueso This adds initial support for the Maintenance command, specifically the soft and hard PPR operations on a dpa. The implementation allows to be executed at runtime, therefore semantically, data is retained and CXL.mem requests are correctly processed. Keep track of the requests upon a general media or DRAM event. Post Package Repair (PPR) maintenance operations may be supported by CXL devices that implement CXL.mem protocol. A PPR maintenance operation requests the CXL device to perform a repair operation on its media. For example, a CXL device with DRAM components that support PPR features may implement PPR Maintenance operations. DRAM components may support two types of PPR, hard PPR (hPPR), for a permanent row repair, and Soft PPR (sPPR), for a temporary row repair. Soft PPR is much faster than hPPR, but the repair is lost with a power cycle. CXL spec 3.2 section 8.2.10.7.1.2 describes the device's sPPR (soft PPR) maintenance operation and section 8.2.10.7.1.3 describes the device's hPPR (hard PPR) maintenance operation feature. CXL spec 3.2 section 8.2.10.7.2.1 describes the sPPR feature discovery and configuration. CXL spec 3.2 section 8.2.10.7.2.2 describes the hPPR feature discovery and configuration. CXL spec 3.2 section 8.2.10.2.1.4 Table 8-60 describes the Memory Sparing Event Record. Signed-off-by: Davidlohr Bueso Co-developed-by: Shiju Jose Signed-off-by: Shiju Jose Signed-off-by: Jonathan Cameron Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20250917143330.294698-3-Jonathan.Cameron@huawei.com> --- hw/cxl/cxl-mailbox-utils.c | 240 +++++++++++++++++++++++++++++++++++- hw/mem/cxl_type3.c | 125 +++++++++++++++++++ include/hw/cxl/cxl_device.h | 112 +++++++++++++++++ include/hw/cxl/cxl_events.h | 42 +++++++ 4 files changed, 517 insertions(+), 2 deletions(-) diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index 8b471c7d93..59f7a392ef 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -86,6 +86,8 @@ enum { #define GET_SUPPORTED 0x0 #define GET_FEATURE 0x1 #define SET_FEATURE 0x2 + MAINTENANCE =3D 0x06, + #define PERFORM 0x0 IDENTIFY =3D 0x40, #define MEMORY_DEVICE 0x0 CCLS =3D 0x41, @@ -1111,8 +1113,8 @@ typedef struct CXLSupportedFeatureEntry { #define CXL_FEAT_ENTRY_ATTR_FLAG_CHANGABLE BIT(0) #define CXL_FEAT_ENTRY_ATTR_FLAG_DEEPEST_RESET_PERSISTENCE_MASK GENMASK(3,= 1) #define CXL_FEAT_ENTRY_ATTR_FLAG_PERSIST_ACROSS_FIRMWARE_UPDATE BIT(4) -#define CXL_FEAT_ENTRY_ATTR_FLAG_SUPPORT_DEFAULT_SELECTION BIT(5) -#define CXL_FEAT_ENTRY_ATTR_FLAG_SUPPORT_SAVED_SELECTION BIT(6) +#define CXL_FEAT_ENTRY_ATTR_FLAG_SUPPORT_DEFAULT_SEL BIT(5) +#define CXL_FEAT_ENTRY_ATTR_FLAG_SUPPORT_SAVED_SEL BIT(6) =20 /* Supported Feature Entry : set feature effects */ #define CXL_FEAT_ENTRY_SFE_CONFIG_CHANGE_COLD_RESET BIT(0) @@ -1131,6 +1133,8 @@ typedef struct CXLSupportedFeatureEntry { enum CXL_SUPPORTED_FEATURES_LIST { CXL_FEATURE_PATROL_SCRUB =3D 0, CXL_FEATURE_ECS, + CXL_FEATURE_SPPR, + CXL_FEATURE_HPPR, CXL_FEATURE_MAX }; =20 @@ -1172,6 +1176,28 @@ enum CXL_SET_FEATURE_FLAG_DATA_TRANSFER { }; #define CXL_SET_FEAT_DATA_SAVED_ACROSS_RESET BIT(3) =20 +/* CXL r3.2 section 8.2.10.7.2.1: sPPR Feature Discovery and Configuration= */ +static const QemuUUID soft_ppr_uuid =3D { + .data =3D UUID(0x892ba475, 0xfad8, 0x474e, 0x9d, 0x3e, + 0x69, 0x2c, 0x91, 0x75, 0x68, 0xbb) +}; + +typedef struct CXLMemSoftPPRSetFeature { + CXLSetFeatureInHeader hdr; + CXLMemSoftPPRWriteAttrs feat_data; +} QEMU_PACKED QEMU_ALIGNED(16) CXLMemSoftPPRSetFeature; + +/* CXL r3.2 section 8.2.10.7.2.2: hPPR Feature Discovery and Configuration= */ +static const QemuUUID hard_ppr_uuid =3D { + .data =3D UUID(0x80ea4521, 0x786f, 0x4127, 0xaf, 0xb1, + 0xec, 0x74, 0x59, 0xfb, 0x0e, 0x24) +}; + +typedef struct CXLMemHardPPRSetFeature { + CXLSetFeatureInHeader hdr; + CXLMemHardPPRWriteAttrs feat_data; +} QEMU_PACKED QEMU_ALIGNED(16) CXLMemHardPPRSetFeature; + /* CXL r3.1 section 8.2.9.9.11.1: Device Patrol Scrub Control Feature */ static const QemuUUID patrol_scrub_uuid =3D { .data =3D UUID(0x96dad7d6, 0xfde8, 0x482b, 0xa7, 0x33, @@ -1235,6 +1261,38 @@ static CXLRetCode cmd_features_get_supported(const s= truct cxl_cmd *cmd, for (entry =3D 0, index =3D get_feats_in->start_index; entry < req_entries; index++) { switch (index) { + case CXL_FEATURE_SPPR: + /* Fill supported feature entry for soft-PPR */ + get_feats_out->feat_entries[entry++] =3D + (struct CXLSupportedFeatureEntry) { + .uuid =3D soft_ppr_uuid, + .feat_index =3D index, + .get_feat_size =3D sizeof(CXLMemSoftPPRReadAttrs), + .set_feat_size =3D sizeof(CXLMemSoftPPRWriteAttrs), + .attr_flags =3D CXL_FEAT_ENTRY_ATTR_FLAG_CHANGABLE | + CXL_FEAT_ENTRY_ATTR_FLAG_SUPPORT_DEFAULT_SEL, + .get_feat_version =3D CXL_MEMDEV_SPPR_GET_FEATURE_VERSION, + .set_feat_version =3D CXL_MEMDEV_SPPR_SET_FEATURE_VERSION, + .set_feat_effects =3D CXL_FEAT_ENTRY_SFE_IMMEDIATE_CONFIG_= CHANGE | + CXL_FEAT_ENTRY_SFE_CEL_VALID, + }; + break; + case CXL_FEATURE_HPPR: + /* Fill supported feature entry for hard-PPR */ + get_feats_out->feat_entries[entry++] =3D + (struct CXLSupportedFeatureEntry) { + .uuid =3D hard_ppr_uuid, + .feat_index =3D index, + .get_feat_size =3D sizeof(CXLMemHardPPRReadAttrs), + .set_feat_size =3D sizeof(CXLMemHardPPRWriteAttrs), + .attr_flags =3D CXL_FEAT_ENTRY_ATTR_FLAG_CHANGABLE | + CXL_FEAT_ENTRY_ATTR_FLAG_SUPPORT_DEFAULT_SEL, + .get_feat_version =3D CXL_MEMDEV_HPPR_GET_FEATURE_VERSION, + .set_feat_version =3D CXL_MEMDEV_HPPR_SET_FEATURE_VERSION, + .set_feat_effects =3D CXL_FEAT_ENTRY_SFE_IMMEDIATE_CONFIG_= CHANGE | + CXL_FEAT_ENTRY_SFE_CEL_VALID, + }; + break; case CXL_FEATURE_PATROL_SCRUB: /* Fill supported feature entry for device patrol scrub contro= l */ get_feats_out->feat_entries[entry++] =3D @@ -1333,6 +1391,26 @@ static CXLRetCode cmd_features_get_feature(const str= uct cxl_cmd *cmd, memcpy(payload_out, (uint8_t *)&ct3d->ecs_attrs + get_feature->offset, bytes_to_copy); + } else if (qemu_uuid_is_equal(&get_feature->uuid, &soft_ppr_uuid)) { + if (get_feature->offset >=3D sizeof(CXLMemSoftPPRReadAttrs)) { + return CXL_MBOX_INVALID_INPUT; + } + bytes_to_copy =3D sizeof(CXLMemSoftPPRReadAttrs) - + get_feature->offset; + bytes_to_copy =3D MIN(bytes_to_copy, get_feature->count); + memcpy(payload_out, + (uint8_t *)&ct3d->soft_ppr_attrs + get_feature->offset, + bytes_to_copy); + } else if (qemu_uuid_is_equal(&get_feature->uuid, &hard_ppr_uuid)) { + if (get_feature->offset >=3D sizeof(CXLMemHardPPRReadAttrs)) { + return CXL_MBOX_INVALID_INPUT; + } + bytes_to_copy =3D sizeof(CXLMemHardPPRReadAttrs) - + get_feature->offset; + bytes_to_copy =3D MIN(bytes_to_copy, get_feature->count); + memcpy(payload_out, + (uint8_t *)&ct3d->hard_ppr_attrs + get_feature->offset, + bytes_to_copy); } else { return CXL_MBOX_UNSUPPORTED; } @@ -1444,6 +1522,44 @@ static CXLRetCode cmd_features_set_feature(const str= uct cxl_cmd *cmd, ct3d->ecs_wr_attrs.fru_attrs[count].ecs_config & 0= x1F; } } + } else if (qemu_uuid_is_equal(&hdr->uuid, &soft_ppr_uuid)) { + CXLMemSoftPPRSetFeature *sppr_set_feature =3D (void *)payload_in; + CXLMemSoftPPRWriteAttrs *sppr_write_attrs =3D + &sppr_set_feature->feat_data; + + if (hdr->version !=3D CXL_MEMDEV_SPPR_SET_FEATURE_VERSION) { + return CXL_MBOX_UNSUPPORTED; + } + + memcpy((uint8_t *)&ct3d->soft_ppr_wr_attrs + hdr->offset, + sppr_write_attrs, bytes_to_copy); + set_feat_info->data_size +=3D bytes_to_copy; + + if (data_transfer_flag =3D=3D CXL_SET_FEATURE_FLAG_FULL_DATA_TRANS= FER || + data_transfer_flag =3D=3D CXL_SET_FEATURE_FLAG_FINISH_DATA_TR= ANSFER) { + ct3d->soft_ppr_attrs.op_mode =3D ct3d->soft_ppr_wr_attrs.op_mo= de; + ct3d->soft_ppr_attrs.sppr_op_mode =3D + ct3d->soft_ppr_wr_attrs.sppr_op_mode; + } + } else if (qemu_uuid_is_equal(&hdr->uuid, &hard_ppr_uuid)) { + CXLMemHardPPRSetFeature *hppr_set_feature =3D (void *)payload_in; + CXLMemHardPPRWriteAttrs *hppr_write_attrs =3D + &hppr_set_feature->feat_data; + + if (hdr->version !=3D CXL_MEMDEV_HPPR_SET_FEATURE_VERSION) { + return CXL_MBOX_UNSUPPORTED; + } + + memcpy((uint8_t *)&ct3d->hard_ppr_wr_attrs + hdr->offset, + hppr_write_attrs, bytes_to_copy); + set_feat_info->data_size +=3D bytes_to_copy; + + if (data_transfer_flag =3D=3D CXL_SET_FEATURE_FLAG_FULL_DATA_TRANS= FER || + data_transfer_flag =3D=3D CXL_SET_FEATURE_FLAG_FINISH_DATA_TR= ANSFER) { + ct3d->hard_ppr_attrs.op_mode =3D ct3d->hard_ppr_wr_attrs.op_mo= de; + ct3d->hard_ppr_attrs.hppr_op_mode =3D + ct3d->hard_ppr_wr_attrs.hppr_op_mode; + } } else { return CXL_MBOX_UNSUPPORTED; } @@ -1456,6 +1572,10 @@ static CXLRetCode cmd_features_set_feature(const str= uct cxl_cmd *cmd, memset(&ct3d->patrol_scrub_wr_attrs, 0, set_feat_info->data_si= ze); } else if (qemu_uuid_is_equal(&hdr->uuid, &ecs_uuid)) { memset(&ct3d->ecs_wr_attrs, 0, set_feat_info->data_size); + } else if (qemu_uuid_is_equal(&hdr->uuid, &soft_ppr_uuid)) { + memset(&ct3d->soft_ppr_wr_attrs, 0, set_feat_info->data_size); + } else if (qemu_uuid_is_equal(&hdr->uuid, &hard_ppr_uuid)) { + memset(&ct3d->hard_ppr_wr_attrs, 0, set_feat_info->data_size); } set_feat_info->data_transfer_flag =3D 0; set_feat_info->data_saved_across_reset =3D false; @@ -1466,6 +1586,116 @@ static CXLRetCode cmd_features_set_feature(const st= ruct cxl_cmd *cmd, return CXL_MBOX_SUCCESS; } =20 +static void cxl_mbox_create_mem_sparing_event_records(CXLType3Dev *ct3d, + uint8_t maint_op_class, uint8_t maint_op_sub_c= lass, + CXLMaintenance *ent) +{ + CXLEventSparing event_rec =3D {}; + + cxl_assign_event_header(&event_rec.hdr, + &sparing_uuid, + (1 << CXL_EVENT_TYPE_INFO), + sizeof(event_rec), + cxl_device_get_timestamp(&ct3d->cxl_dstate), + 1, maint_op_class, 1, maint_op_sub_class, + 0, 0, 0, 0); + if (ent) { + event_rec.flags =3D 0; + event_rec.result =3D 0; + stw_le_p(&event_rec.res_avail, 2); + stw_le_p(&event_rec.validity_flags, ent->validity_flags); + event_rec.channel =3D ent->channel; + event_rec.rank =3D ent->rank; + st24_le_p(event_rec.nibble_mask, ent->nibble_mask); + event_rec.bank_group =3D ent->bank_group; + event_rec.bank =3D ent->bank; + st24_le_p(event_rec.row, ent->row); + stw_le_p(&event_rec.column, ent->column); + event_rec.sub_channel =3D ent->sub_channel; + if (ent->validity_flags & CXL_MSER_VALID_COMP_ID) { + strncpy((char *)event_rec.component_id, (char *)ent->component= _id, + sizeof(event_rec.component_id)); + } + } else { + return; + } + + if (cxl_event_insert(&ct3d->cxl_dstate, + CXL_EVENT_TYPE_INFO, + (CXLEventRecordRaw *)&event_rec)) { + cxl_event_irq_assert(ct3d); + } +} + + +static void cxl_perform_ppr(CXLType3Dev *ct3d, uint64_t dpa) +{ + CXLMaintenance *ent, *next; + + QLIST_FOREACH_SAFE(ent, &ct3d->maint_list, node, next) { + if (dpa =3D=3D ent->dpa) { + /* Produce a Memory Sparing Event Record */ + if (ct3d->soft_ppr_attrs.sppr_op_mode & + CXL_MEMDEV_SPPR_OP_MODE_MEM_SPARING_EV_REC_EN) { + cxl_mbox_create_mem_sparing_event_records(ct3d, + CXL_MEMDEV_MAINT_CLASS_SPARING, + CXL_MEMDEV_MAINT_SUBCLASS_CACHELINE_SPARIN= G, + ent); + } + break; + } + } +} + +/* CXL r3.2 section 8.2.10.7.1 - Perform Maintenance (Opcode 0600h) */ +#define MAINTENANCE_PPR_QUERY_RESOURCES BIT(0) + +static CXLRetCode cmd_media_perform_maintenance(const struct cxl_cmd *cmd, + uint8_t *payload_in, size_t len_in, + uint8_t *payload_out, size_t *len_out, + CXLCCI *cci) +{ + struct { + uint8_t class; + uint8_t subclass; + union { + struct { + uint8_t flags; + uint64_t dpa; + uint8_t nibble_mask[3]; + } QEMU_PACKED ppr; + }; + } QEMU_PACKED *maint_in =3D (void *)payload_in; + CXLType3Dev *ct3d =3D CXL_TYPE3(cci->d); + + if (maintenance_running(cci)) { + return CXL_MBOX_BUSY; + } + + switch (maint_in->class) { + case CXL_MEMDEV_MAINT_CLASS_NO_OP: + return CXL_MBOX_SUCCESS; /* nop */ + case CXL_MEMDEV_MAINT_CLASS_PPR: + if (maint_in->ppr.flags & MAINTENANCE_PPR_QUERY_RESOURCES) { + return CXL_MBOX_SUCCESS; + } + + switch (maint_in->subclass) { + case CXL_MEMDEV_MAINT_SUBCLASS_SPPR: + case CXL_MEMDEV_MAINT_SUBCLASS_HPPR: + cxl_perform_ppr(ct3d, ldq_le_p(&maint_in->ppr.dpa)); + return CXL_MBOX_SUCCESS; + default: + return CXL_MBOX_INVALID_INPUT; + } + break; + default: + return CXL_MBOX_INVALID_INPUT; + } + + return CXL_MBOX_SUCCESS; +} + /* CXL r3.1 Section 8.2.9.9.1.1: Identify Memory Device (Opcode 4000h) */ static CXLRetCode cmd_identify_memory_device(const struct cxl_cmd *cmd, uint8_t *payload_in, @@ -3767,6 +3997,12 @@ static const struct cxl_cmd cxl_cmd_set[256][256] = =3D { CXL_MBOX_IMMEDIATE_POLICY_CHANGE | CXL_MBOX_IMMEDIATE_LOG_CHANGE | CXL_MBOX_SECURITY_STATE_CHANGE)}, + [MAINTENANCE][PERFORM] =3D { "MAINTENANCE_PERFORM", + cmd_media_perform_maintenance, ~0, + CXL_MBOX_IMMEDIATE_CONFIG_CHANGE | + CXL_MBOX_IMMEDIATE_DATA_CHANGE | + CXL_MBOX_IMMEDIATE_LOG_CHANGE | + CXL_MBOX_BACKGROUND_OPERATION }, [IDENTIFY][MEMORY_DEVICE] =3D { "IDENTIFY_MEMORY_DEVICE", cmd_identify_memory_device, 0, 0 }, [CCLS][GET_PARTITION_INFO] =3D { "CCLS_GET_PARTITION_INFO", diff --git a/hw/mem/cxl_type3.c b/hw/mem/cxl_type3.c index acb75f8f01..697b3fa0de 100644 --- a/hw/mem/cxl_type3.c +++ b/hw/mem/cxl_type3.c @@ -964,6 +964,32 @@ static void ct3_realize(PCIDevice *pci_dev, Error **er= rp) ct3d->ecs_attrs.fru_attrs[count].ecs_flags =3D 0; } =20 + /* Set default values for soft-PPR attributes */ + ct3d->soft_ppr_attrs =3D (CXLMemSoftPPRReadAttrs) { + .max_maint_latency =3D 0x5, /* 100 ms */ + .op_caps =3D 0, /* require host involvement */ + .op_mode =3D 0, + .maint_op_class =3D CXL_MEMDEV_MAINT_CLASS_PPR, + .maint_op_subclass =3D CXL_MEMDEV_MAINT_SUBCLASS_SPPR, + .sppr_flags =3D CXL_MEMDEV_SPPR_DPA_SUPPORT_FLAG | + CXL_MEMDEV_SPPR_MEM_SPARING_EV_REC_CAP_FLAG, + .restriction_flags =3D 0, + .sppr_op_mode =3D CXL_MEMDEV_SPPR_OP_MODE_MEM_SPARING_EV_REC_EN + }; + + /* Set default value for hard-PPR attributes */ + ct3d->hard_ppr_attrs =3D (CXLMemHardPPRReadAttrs) { + .max_maint_latency =3D 0x5, /* 100 ms */ + .op_caps =3D 0, /* require host involvement */ + .op_mode =3D 0, + .maint_op_class =3D CXL_MEMDEV_MAINT_CLASS_PPR, + .maint_op_subclass =3D CXL_MEMDEV_MAINT_SUBCLASS_HPPR, + .hppr_flags =3D CXL_MEMDEV_HPPR_DPA_SUPPORT_FLAG | + CXL_MEMDEV_HPPR_MEM_SPARING_EV_REC_CAP_FLAG, + .restriction_flags =3D 0, + .hppr_op_mode =3D CXL_MEMDEV_HPPR_OP_MODE_MEM_SPARING_EV_REC_EN + }; + return; =20 err_release_cdat: @@ -1667,6 +1693,75 @@ static int ct3d_qmp_cxl_event_log_enc(CxlEventLog lo= g) return -EINVAL; } } + +static void cxl_maintenance_insert(CXLType3Dev *ct3d, uint64_t dpa, + bool has_channel, uint8_t channel, + bool has_rank, uint8_t rank, + bool has_nibble_mask, uint32_t nibble_m= ask, + bool has_bank_group, uint8_t bank_group, + bool has_bank, uint8_t bank, + bool has_row, uint32_t row, + bool has_column, uint16_t column, + const char *component_id, + bool has_comp_id_pldm, bool is_comp_id_= pldm, + bool has_sub_channel, uint8_t sub_chann= el) +{ + CXLMaintenance *ent, *m; + + QLIST_FOREACH(ent, &ct3d->maint_list, node) { + if (dpa =3D=3D ent->dpa) { + return; + } + } + m =3D g_new0(CXLMaintenance, 1); + memset(m, 0, sizeof(*m)); + m->dpa =3D dpa; + m->validity_flags =3D 0; + + if (has_channel) { + m->channel =3D channel; + m->validity_flags |=3D CXL_MSER_VALID_CHANNEL; + } + if (has_rank) { + m->rank =3D rank; + m->validity_flags |=3D CXL_MSER_VALID_RANK; + } + if (has_nibble_mask) { + m->nibble_mask =3D nibble_mask; + m->validity_flags |=3D CXL_MSER_VALID_NIB_MASK; + } + if (has_bank_group) { + m->bank_group =3D bank_group; + m->validity_flags |=3D CXL_MSER_VALID_BANK_GROUP; + } + if (has_bank) { + m->bank =3D bank; + m->validity_flags |=3D CXL_MSER_VALID_BANK; + } + if (has_row) { + m->row =3D row; + m->validity_flags |=3D CXL_MSER_VALID_ROW; + } + if (has_column) { + m->column =3D column; + m->validity_flags |=3D CXL_MSER_VALID_COLUMN; + } + if (has_sub_channel) { + m->sub_channel =3D sub_channel; + m->validity_flags |=3D CXL_MSER_VALID_SUB_CHANNEL; + } + if (component_id) { + strncpy((char *)m->component_id, component_id, + sizeof(m->component_id) - 1); + m->validity_flags |=3D CXL_MSER_VALID_COMP_ID; + if (has_comp_id_pldm && is_comp_id_pldm) { + m->validity_flags |=3D CXL_MSER_VALID_COMP_ID_FORMAT; + } + } + + QLIST_INSERT_HEAD(&ct3d->maint_list, m, node); +} + /* Component ID is device specific. Define this as a string. */ void qmp_cxl_inject_general_media_event(const char *path, CxlEventLog log, uint32_t flags, bool has_maint_op_= class, @@ -1715,6 +1810,11 @@ void qmp_cxl_inject_general_media_event(const char *= path, CxlEventLog log, error_setg(errp, "Unhandled error log type"); return; } + if (rc =3D=3D CXL_EVENT_TYPE_INFO && + (flags & CXL_EVENT_REC_FLAGS_MAINT_NEEDED)) { + error_setg(errp, "Informational event cannot require maintenance"); + return; + } enc_log =3D rc; =20 memset(&gem, 0, sizeof(gem)); @@ -1773,6 +1873,15 @@ void qmp_cxl_inject_general_media_event(const char *= path, CxlEventLog log, if (cxl_event_insert(cxlds, enc_log, (CXLEventRecordRaw *)&gem)) { cxl_event_irq_assert(ct3d); } + + if (flags & CXL_EVENT_REC_FLAGS_MAINT_NEEDED) { + cxl_maintenance_insert(ct3d, dpa, has_channel, channel, + has_rank, rank, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, component_id, + has_comp_id_pldm, is_comp_id_pldm, + 0, 0); + } } =20 #define CXL_DRAM_VALID_CHANNEL BIT(0) @@ -1842,6 +1951,11 @@ void qmp_cxl_inject_dram_event(const char *path, Cxl= EventLog log, error_setg(errp, "Unhandled error log type"); return; } + if (rc =3D=3D CXL_EVENT_TYPE_INFO && + (flags & CXL_EVENT_REC_FLAGS_MAINT_NEEDED)) { + error_setg(errp, "Informational event cannot require maintenance"); + return; + } enc_log =3D rc; =20 memset(&dram, 0, sizeof(dram)); @@ -1935,6 +2049,17 @@ void qmp_cxl_inject_dram_event(const char *path, Cxl= EventLog log, if (cxl_event_insert(cxlds, enc_log, (CXLEventRecordRaw *)&dram)) { cxl_event_irq_assert(ct3d); } + + if (flags & CXL_EVENT_REC_FLAGS_MAINT_NEEDED) { + cxl_maintenance_insert(ct3d, dpa, has_channel, channel, + has_rank, rank, + has_nibble_mask, nibble_mask, + has_bank_group, bank_group, + has_bank, bank, has_row, row, + has_column, column, component_id, + has_comp_id_pldm, is_comp_id_pldm, + has_sub_channel, sub_channel); + } } =20 #define CXL_MMER_VALID_COMPONENT BIT(0) diff --git a/include/hw/cxl/cxl_device.h b/include/hw/cxl/cxl_device.h index e461a824b6..2d4f26acfd 100644 --- a/include/hw/cxl/cxl_device.h +++ b/include/hw/cxl/cxl_device.h @@ -430,6 +430,12 @@ static inline bool cxl_dev_media_disabled(CXLDeviceSta= te *cxl_dstate) uint64_t dev_status_reg =3D cxl_dstate->mbox_reg_state64[R_CXL_MEM_DEV= _STS]; return FIELD_EX64(dev_status_reg, CXL_MEM_DEV_STS, MEDIA_STATUS) =3D= =3D 0x3; } + +static inline bool maintenance_running(CXLCCI *cci) +{ + return cci->bg.runtime && cci->bg.opcode =3D=3D 0x0600; +} + static inline bool scan_media_running(CXLCCI *cci) { return !!cci->bg.runtime && cci->bg.opcode =3D=3D 0x4304; @@ -443,6 +449,23 @@ typedef struct CXLError { =20 typedef QTAILQ_HEAD(, CXLError) CXLErrorList; =20 +typedef struct CXLMaintenance { + uint64_t dpa; + uint16_t validity_flags; + uint8_t channel; + uint8_t rank; + uint32_t nibble_mask; + uint8_t bank_group; + uint8_t bank; + uint32_t row; + uint16_t column; + uint8_t component_id[CXL_EVENT_GEN_MED_COMP_ID_SIZE]; + uint8_t sub_channel; + QLIST_ENTRY(CXLMaintenance) node; +} CXLMaintenance; + +typedef QLIST_HEAD(, CXLMaintenance) CXLMaintenanceList; + typedef struct CXLPoison { uint64_t start, length; uint8_t type; @@ -455,6 +478,87 @@ typedef struct CXLPoison { typedef QLIST_HEAD(, CXLPoison) CXLPoisonList; #define CXL_POISON_LIST_LIMIT 256 =20 +/* CXL memory maintenance operation */ +/* + * CXL r3.2 section 8.2.10.7.2, Table 8-125: Mainteance Operation: + * Classes, Subclasses, and Feature UUIDs + */ +#define CXL_MEMDEV_MAINT_CLASS_NO_OP 0x0 +#define CXL_MEMDEV_MAINT_CLASS_PPR 0x1 +#define CXL_MEMDEV_MAINT_CLASS_SPARING 0x2 +#define CXL_MEMDEV_MAINT_CLASS_DEV_BUILT_IN_TEST 0x3 + +#define CXL_MEMDEV_MAINT_SUBCLASS_SPPR 0x0 +#define CXL_MEMDEV_MAINT_SUBCLASS_HPPR 0x1 + +#define CXL_MEMDEV_MAINT_SUBCLASS_CACHELINE_SPARING 0x0 +#define CXL_MEMDEV_MAINT_SUBCLASS_ROW_SPARING 0x1 +#define CXL_MEMDEV_MAINT_SUBCLASS_BANK_SPARING 0x2 +#define CXL_MEMDEV_MAINT_SUBCLASS_RANK_SPARING 0x3 + +/* CXL memory Post Package Repair control attributes */ +/* + * CXL r3.2 section 8.2.10.7.2.1, Table 8-128 and 8-129: + * sPPR Feature Readable/Writable Attributes + */ +typedef struct CXLMemSoftPPRReadAttrs { + uint8_t max_maint_latency; + uint16_t op_caps; + uint16_t op_mode; + uint8_t maint_op_class; + uint8_t maint_op_subclass; + uint8_t rsvd[9]; + uint8_t sppr_flags; + uint16_t restriction_flags; + uint8_t sppr_op_mode; +} QEMU_PACKED CXLMemSoftPPRReadAttrs; + +typedef struct CXLMemSoftPPRWriteAttrs { + uint16_t op_mode; + uint8_t sppr_op_mode; +} QEMU_PACKED CXLMemSoftPPRWriteAttrs; + +#define CXL_MEMDEV_SPPR_GET_FEATURE_VERSION 0x03 +#define CXL_MEMDEV_SPPR_SET_FEATURE_VERSION 0x03 +#define CXL_MEMDEV_SPPR_DPA_SUPPORT_FLAG BIT(0) +#define CXL_MEMDEV_SPPR_NIBBLE_SUPPORT_FLAG BIT(1) +#define CXL_MEMDEV_SPPR_MEM_SPARING_EV_REC_CAP_FLAG BIT(2) +#define CXL_MEMDEV_SPPR_DEV_INITIATED_AT_BOOT_CAP_FLAG BIT(3) + +#define CXL_MEMDEV_SPPR_OP_MODE_MEM_SPARING_EV_REC_EN BIT(0) +#define CXL_MEMDEV_SPPR_OP_MODE_DEV_INITIATED_AT_BOOT BIT(1) + +/* + * CXL r3.2 section 8.2.10.7.2.2, Table 8-131 and 8-132: + * hPPR Feature Readable/Writable Attributes + */ +typedef struct CXLMemHardPPRReadAttrs { + uint8_t max_maint_latency; + uint16_t op_caps; + uint16_t op_mode; + uint8_t maint_op_class; + uint8_t maint_op_subclass; + uint8_t rsvd[9]; + uint8_t hppr_flags; + uint16_t restriction_flags; + uint8_t hppr_op_mode; +} QEMU_PACKED CXLMemHardPPRReadAttrs; + +typedef struct CXLMemHardPPRWriteAttrs { + uint16_t op_mode; + uint8_t hppr_op_mode; +} QEMU_PACKED CXLMemHardPPRWriteAttrs; + +#define CXL_MEMDEV_HPPR_GET_FEATURE_VERSION 0x03 +#define CXL_MEMDEV_HPPR_SET_FEATURE_VERSION 0x03 +#define CXL_MEMDEV_HPPR_DPA_SUPPORT_FLAG BIT(0) +#define CXL_MEMDEV_HPPR_NIBBLE_SUPPORT_FLAG BIT(1) +#define CXL_MEMDEV_HPPR_MEM_SPARING_EV_REC_CAP_FLAG BIT(2) +#define CXL_MEMDEV_HPPR_DEV_INITIATED_AT_BOOT_CAP_FLAG BIT(3) + +#define CXL_MEMDEV_HPPR_OP_MODE_MEM_SPARING_EV_REC_EN BIT(0) +#define CXL_MEMDEV_HPPR_OP_MODE_DEV_INITIATED_AT_BOOT BIT(1) + /* CXL memory device patrol scrub control attributes */ typedef struct CXLMemPatrolScrubReadAttrs { uint8_t scrub_cycle_cap; @@ -605,6 +709,9 @@ struct CXLType3Dev { /* Error injection */ CXLErrorList error_list; =20 + /* Keep track of maintenance requests */ + CXLMaintenanceList maint_list; + /* Poison Injection - cache */ CXLPoisonList poison_list; unsigned int poison_list_cnt; @@ -617,6 +724,11 @@ struct CXLType3Dev { =20 CXLSetFeatureInfo set_feat_info; =20 + /* PPR control attributes */ + CXLMemSoftPPRReadAttrs soft_ppr_attrs; + CXLMemSoftPPRWriteAttrs soft_ppr_wr_attrs; + CXLMemHardPPRReadAttrs hard_ppr_attrs; + CXLMemHardPPRWriteAttrs hard_ppr_wr_attrs; /* Patrol scrub control attributes */ CXLMemPatrolScrubReadAttrs patrol_scrub_attrs; CXLMemPatrolScrubWriteAttrs patrol_scrub_wr_attrs; diff --git a/include/hw/cxl/cxl_events.h b/include/hw/cxl/cxl_events.h index 4a7836ad72..3052bc9f18 100644 --- a/include/hw/cxl/cxl_events.h +++ b/include/hw/cxl/cxl_events.h @@ -219,4 +219,46 @@ typedef enum CXLDCEventType { DC_EVENT_CAPACITY_RELEASED =3D 0x5, } CXLDCEventType; =20 +/* + * CXL r3.2 section Table 8-60: Memory Sparing Event Record + * All fields little endian. + */ +#define CXL_MSER_VALID_CHANNEL BIT(0) +#define CXL_MSER_VALID_RANK BIT(1) +#define CXL_MSER_VALID_NIB_MASK BIT(2) +#define CXL_MSER_VALID_BANK_GROUP BIT(3) +#define CXL_MSER_VALID_BANK BIT(4) +#define CXL_MSER_VALID_ROW BIT(5) +#define CXL_MSER_VALID_COLUMN BIT(6) +#define CXL_MSER_VALID_COMP_ID BIT(7) +#define CXL_MSER_VALID_COMP_ID_FORMAT BIT(8) +#define CXL_MSER_VALID_SUB_CHANNEL BIT(9) + +typedef struct CXLEventSparing { + CXLEventRecordHdr hdr; + uint8_t maint_op_class; + uint8_t maint_op_subclass; + uint8_t flags; + uint8_t result; + uint16_t validity_flags; + uint8_t reserved1[6]; + uint16_t res_avail; + uint8_t channel; + uint8_t rank; + uint8_t nibble_mask[3]; + uint8_t bank_group; + uint8_t bank; + uint8_t row[3]; + uint16_t column; + uint8_t component_id[CXL_EVENT_GEN_MED_COMP_ID_SIZE]; + uint8_t sub_channel; + uint8_t reserved2[0x25]; +} QEMU_PACKED CXLEventSparing; + +/* CXL r3.2 Table 8-60: Memory Sparing Event Record */ +static const QemuUUID sparing_uuid =3D { + .data =3D UUID(0xe71f3a40, 0x2d29, 0x4092, 0x8a, 0x39, + 0x4d, 0x1c, 0x96, 0x6c, 0x7c, 0x65), +}; + #endif /* CXL_EVENTS_H */ --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770745; cv=none; d=zohomail.com; s=zohoarc; b=bC5QIeAKKBd55TM3TjOM+IjffcbbYSE4cpO8ibzSkerIlpPpUr2XJuSBOnCbK8ANzv2OzWNzNoi2O0gayAoVt3L9bCqZdruCPh35v26Lph8g3EBiUCE6Hf3WQ81fE7GGqhAFNtdPXyuqn1jFNLo3tuDkg0wDV9Znmk6xR7u/FT0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770745; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=hBvBhkuTtNo/1Z3UhHrnrLOdTTFyKB5m1GZFrWnEH/0=; b=Bhqi5jvcd5cd+0IXCegJluxvdgTgyDPr8GwgdOyoaWQL08kX59rfKpED0b8OZ6v01CzfahXVJN1WSNfZI4RLUqKtTGJLKZBJ0nGjI8kxPq3ElZUPqWdwtWRUNE1PDH8eyCj+VbqM7XeEOPRzxM/u3vTSfwhtrGIdIOsKfIkMSRU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770745249309.2406958135384; Sun, 22 Feb 2026 06:32:25 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASU-0008Dj-3k; Sun, 22 Feb 2026 09:29:18 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASD-00084t-9d for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:01 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuAS8-0006nH-Id for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:59 -0500 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-594-mi4rOFIiNJqpRkVt8C4Ahg-1; Sun, 22 Feb 2026 09:28:53 -0500 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-48079ae1001so6109745e9.0 for ; Sun, 22 Feb 2026 06:28:53 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483a9b668f3sm128414255e9.3.2026.02.22.06.28.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:28:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770535; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=hBvBhkuTtNo/1Z3UhHrnrLOdTTFyKB5m1GZFrWnEH/0=; b=SuUM+ZoWXdMyBFWqzV6YGhN0Cy8/g4Z1afZU1W/XTsq1sSFX5o4nJuClCgmoyBMR+bDO27 hd5iRF9ZJS4lliYBJqBvrhMrKO0mRXoZ797bbWzkj7cYR1EMyFCClrtvs+dX8a7rrqmnVV bS3PUvReYW9Qp6qtdmwqBAM+sUCe8Jo= X-MC-Unique: mi4rOFIiNJqpRkVt8C4Ahg-1 X-Mimecast-MFC-AGG-ID: mi4rOFIiNJqpRkVt8C4Ahg_1771770532 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770532; x=1772375332; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=hBvBhkuTtNo/1Z3UhHrnrLOdTTFyKB5m1GZFrWnEH/0=; b=ZUzkVrJgw0ah4oM+JHiIpM45Hw2VyepQJVzrdVrPd/2Ca/MuJBFOK2wUn+V2Jt1aiN c6KXCf/vH1CJNCCiVyuFvT1vYjRlRsLDIHj2VtvPmuLzuVrm6ji/RE00RIKvBFhxBzYY nyX3ZYs6flVxd8yD5fARq6EVefW41PBXXBd2I25g17A533evxvUyIAN/PqudG/z+ffIH odYA3ZlSGXdMObZtEuXV4Pe+1oRmauKgrC097QsRlsF3X9GMu6KQHqN767JCD0UsVHqh Zv0ju+wq3vE8lweRtB3CkuQrZhRRa5RP4ywveMKjvV9HWUYdyFthLCUt6abbI/Czp5um 2ZoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770532; x=1772375332; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hBvBhkuTtNo/1Z3UhHrnrLOdTTFyKB5m1GZFrWnEH/0=; b=YeIG9jXQfYIGpLtVxFE/y4xAmBuw/SesCNFomjXvu0uzxNSGyrPCCpBjQVF9ToisQ6 it19ubh5qVoo9c2nkBIT8GYEP8QO7qkuc175iUVoRqOFCWwhIXKlJCc4NeBNzSV0+ni0 QadpzMzceX6ifHBF5wwLrHTwse+wPWYAxlnNkgkKANDoGrAvRlt/aTaHhd0IgLFY3oyJ djK/Dtwg+Q2hp9PMUxQDBC2gbP+NUUe1sGHJ41Ed5YVVZ+k5a4qEergDos51lY7xvThF +K9fccN6jNAvuV/1hlN/ab/NVg/+iLvpzGMJIM6cSjQptgtSFH1eu1KV9Zg1bGBLBzdn 5yuA== X-Gm-Message-State: AOJu0Yw4QoZo11Wj8YpmXPJc+sWG3iFcOcLBHenhjQda9xND60+xg/zO Q9KhXz+XEVWB6gnkgzo1w6EwtT3AUC1KyJnIqyTB3Vi+ev2CDuIco0439Hdwhl0XfuV+fQ/fdXP pruRYk7sNQafTdZpLYcPEx4gxg4n9jxKKgM17KHglRjSreC3n9WmMIfph6c79hEgFnMUaFfkQHu 2gGzmuymGiak86fSBz9VZn19kiJpbDKdrWxw== X-Gm-Gg: AZuq6aIrpbD4CEVi4kk5epOKD66O3JBbq4cklUfi1Gskd/fEHzbE42MYbROlNb6EJtX 0mpegC80fsU+y77vg4SmaioiCgp6Ca3xHd6DDOX7xGDAtdcG/KiXMYIyAlzoakckx6GV6FgrpJO 5Il0FEpV9449ubySfVEEQkiMwDJOVQN7Eoa10XBk1V2EWwRfkdWMDU5D57ISquscp/wQN21FuYT x5WWwLVVgEKo3MCLDjQATqI66ol2V6lQMqQQt105K1S+iSCK3Ndjy0owS7VYxIZLFj9FuKld6O3 NhaQC3GToUQ5W1tR+3mJvLCh2HNyTHckGJ1vNknnV/oLP1bWXeBw65kS4Gtbw2QIc1tmxoRy402 qoaFhmRA5zj/sfL1M24Y+Ct5vATE7RtCIGRyzXb6IeR4R3Q== X-Received: by 2002:a05:600c:4e4a:b0:483:129e:b573 with SMTP id 5b1f17b1804b1-483a962d1d1mr106888115e9.18.1771770531553; Sun, 22 Feb 2026 06:28:51 -0800 (PST) X-Received: by 2002:a05:600c:4e4a:b0:483:129e:b573 with SMTP id 5b1f17b1804b1-483a962d1d1mr106887615e9.18.1771770530997; Sun, 22 Feb 2026 06:28:50 -0800 (PST) Date: Sun, 22 Feb 2026 09:28:48 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Shiju Jose , Jonathan Cameron , Fan Ni Subject: [PULL 14/33] hw/cxl: Add emulation for memory sparing control feature Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770747137154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Shiju Jose Memory sparing is defined as a repair function that replaces a portion of memory with a portion of functional memory at that same DPA. The subclasses for this operation vary in terms of the scope of the sparing being performed. The Cacheline sparing subclass refers to a sparing action that can replace a full cacheline. Row sparing is provided as an alternative to PPR sparing functions and its scope is that of a single DDR row. Bank sparing allows an entire bank to be replaced. Rank sparing is defined as an operation in which an entire DDR rank is replaced. Memory sparing maintenance operations may be supported by CXL devices that implement CXL.mem protocol. A sparing maintenance operation requests the CXL device to perform a repair operation on its media. For example, a CXL device with DRAM components that support memory sparing features may implement sparing Maintenance operations. The host may issue a query command by setting Query Resources flag in the Input Payload (CXL Spec 3.2 Table 8-120) to determine availability of sparing resources for a given address. In response to a query request, the device shall report the resource availability by producing the Memory Sparing Event Record (CXL Spec 3.2 Table 8-60) in which the Channel, Rank, Nibble Mask, Bank Group, Bank, Row, Column, Sub-Channel fields are a copy of the values specified in the request. During the execution of a sparing maintenance operation, a CXL memory device: - May or may not retain data - May or may not be able to process CXL.mem requests correctly. These CXL memory device capabilities are specified by restriction flags in the memory sparing feature readable attributes. When a CXL device identifies error on a memory component, the device may inform the host about the need for a memory sparing maintenance operation by using DRAM event record, where the 'maintenance needed' flag may set. The event record contains some of the DPA, Channel, Rank, Nibble Mask, Bank Group, Bank, Row, Column, Sub-Channel fields that should be repaired. The userspace tool requests for maintenance operation if the 'maintenance needed' flag set in the CXL DRAM error record. CXL spec 3.2 section 8.2.10.7.2.3 describes the memory sparing feature discovery and configuration. CXL spec 3.2 section 8.2.10.7.1.4 describes the device's memory sparing maintenance operation feature. Add emulation for CXL memory device memory sparing control feature and memory sparing maintenance operation command. Signed-off-by: Shiju Jose Signed-off-by: Jonathan Cameron Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20250917143330.294698-4-Jonathan.Cameron@huawei.com> --- hw/cxl/cxl-mailbox-utils.c | 317 +++++++++++++++++++++++++++++++++++- hw/mem/cxl_type3.c | 44 +++++ include/hw/cxl/cxl_device.h | 33 ++++ include/hw/cxl/cxl_events.h | 5 + 4 files changed, 395 insertions(+), 4 deletions(-) diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index 59f7a392ef..2f449980cd 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -1135,6 +1135,10 @@ enum CXL_SUPPORTED_FEATURES_LIST { CXL_FEATURE_ECS, CXL_FEATURE_SPPR, CXL_FEATURE_HPPR, + CXL_FEATURE_CACHELINE_SPARING, + CXL_FEATURE_ROW_SPARING, + CXL_FEATURE_BANK_SPARING, + CXL_FEATURE_RANK_SPARING, CXL_FEATURE_MAX }; =20 @@ -1223,6 +1227,35 @@ typedef struct CXLMemECSSetFeature { CXLMemECSWriteAttrs feat_data[]; } QEMU_PACKED QEMU_ALIGNED(16) CXLMemECSSetFeature; =20 +/* + * CXL r3.2 section 8.2.10.7.2.3: + * Memory Sparing Features Discovery and Configuration + */ +static const QemuUUID cacheline_sparing_uuid =3D { + .data =3D UUID(0x96C33386, 0x91dd, 0x44c7, 0x9e, 0xcb, + 0xfd, 0xaf, 0x65, 0x03, 0xba, 0xc4) +}; + +static const QemuUUID row_sparing_uuid =3D { + .data =3D UUID(0x450ebf67, 0xb135, 0x4f97, 0xa4, 0x98, + 0xc2, 0xd5, 0x7f, 0x27, 0x9b, 0xed) +}; + +static const QemuUUID bank_sparing_uuid =3D { + .data =3D UUID(0x78b79636, 0x90ac, 0x4b64, 0xa4, 0xef, + 0xfa, 0xac, 0x5d, 0x18, 0xa8, 0x63) +}; + +static const QemuUUID rank_sparing_uuid =3D { + .data =3D UUID(0x34dbaff5, 0x0552, 0x4281, 0x8f, 0x76, + 0xda, 0x0b, 0x5e, 0x7a, 0x76, 0xa7) +}; + +typedef struct CXLMemSparingSetFeature { + CXLSetFeatureInHeader hdr; + CXLMemSparingWriteAttrs feat_data; +} QEMU_PACKED QEMU_ALIGNED(16) CXLMemSparingSetFeature; + /* CXL r3.1 section 8.2.9.6.1: Get Supported Features (Opcode 0500h) */ static CXLRetCode cmd_features_get_supported(const struct cxl_cmd *cmd, uint8_t *payload_in, @@ -1323,6 +1356,70 @@ static CXLRetCode cmd_features_get_supported(const s= truct cxl_cmd *cmd, CXL_FEAT_ENTRY_SFE_CEL_VALID, }; break; + case CXL_FEATURE_CACHELINE_SPARING: + /* Fill supported feature entry for Cacheline Memory Sparing */ + get_feats_out->feat_entries[entry++] =3D + (struct CXLSupportedFeatureEntry) { + .uuid =3D cacheline_sparing_uuid, + .feat_index =3D index, + .get_feat_size =3D sizeof(CXLMemSparingReadAttrs), + .set_feat_size =3D sizeof(CXLMemSparingWriteAttrs), + .attr_flags =3D CXL_FEAT_ENTRY_ATTR_FLAG_CHANGABLE | + CXL_FEAT_ENTRY_ATTR_FLAG_SUPPORT_DEFAULT_SEL, + .get_feat_version =3D CXL_MEMDEV_SPARING_GET_FEATURE_VERSI= ON, + .set_feat_version =3D CXL_MEMDEV_SPARING_SET_FEATURE_VERSI= ON, + .set_feat_effects =3D CXL_FEAT_ENTRY_SFE_IMMEDIATE_CONFIG_= CHANGE | + CXL_FEAT_ENTRY_SFE_CEL_VALID, + }; + break; + case CXL_FEATURE_ROW_SPARING: + /* Fill supported feature entry for Row Memory Sparing */ + get_feats_out->feat_entries[entry++] =3D + (struct CXLSupportedFeatureEntry) { + .uuid =3D row_sparing_uuid, + .feat_index =3D index, + .get_feat_size =3D sizeof(CXLMemSparingReadAttrs), + .set_feat_size =3D sizeof(CXLMemSparingWriteAttrs), + .attr_flags =3D CXL_FEAT_ENTRY_ATTR_FLAG_CHANGABLE | + CXL_FEAT_ENTRY_ATTR_FLAG_SUPPORT_DEFAULT_SEL, + .get_feat_version =3D CXL_MEMDEV_SPARING_GET_FEATURE_VERSI= ON, + .set_feat_version =3D CXL_MEMDEV_SPARING_SET_FEATURE_VERSI= ON, + .set_feat_effects =3D CXL_FEAT_ENTRY_SFE_IMMEDIATE_CONFIG_= CHANGE | + CXL_FEAT_ENTRY_SFE_CEL_VALID, + }; + break; + case CXL_FEATURE_BANK_SPARING: + /* Fill supported feature entry for Bank Memory Sparing */ + get_feats_out->feat_entries[entry++] =3D + (struct CXLSupportedFeatureEntry) { + .uuid =3D bank_sparing_uuid, + .feat_index =3D index, + .get_feat_size =3D sizeof(CXLMemSparingReadAttrs), + .set_feat_size =3D sizeof(CXLMemSparingWriteAttrs), + .attr_flags =3D CXL_FEAT_ENTRY_ATTR_FLAG_CHANGABLE | + CXL_FEAT_ENTRY_ATTR_FLAG_SUPPORT_DEFAULT_SEL, + .get_feat_version =3D CXL_MEMDEV_SPARING_GET_FEATURE_VERSI= ON, + .set_feat_version =3D CXL_MEMDEV_SPARING_SET_FEATURE_VERSI= ON, + .set_feat_effects =3D CXL_FEAT_ENTRY_SFE_IMMEDIATE_CONFIG_= CHANGE | + CXL_FEAT_ENTRY_SFE_CEL_VALID, + }; + break; + case CXL_FEATURE_RANK_SPARING: + /* Fill supported feature entry for Rank Memory Sparing */ + get_feats_out->feat_entries[entry++] =3D + (struct CXLSupportedFeatureEntry) { + .uuid =3D rank_sparing_uuid, + .feat_index =3D index, + .get_feat_size =3D sizeof(CXLMemSparingReadAttrs), + .set_feat_size =3D sizeof(CXLMemSparingWriteAttrs), + .attr_flags =3D CXL_FEAT_ENTRY_ATTR_FLAG_CHANGABLE | + CXL_FEAT_ENTRY_ATTR_FLAG_SUPPORT_DEFAULT_SEL, + .get_feat_version =3D CXL_MEMDEV_SPARING_GET_FEATURE_VERSI= ON, + .set_feat_version =3D CXL_MEMDEV_SPARING_SET_FEATURE_VERSI= ON, + .set_feat_effects =3D CXL_FEAT_ENTRY_SFE_IMMEDIATE_CONFIG_= CHANGE | + CXL_FEAT_ENTRY_SFE_CEL_VALID, + }; + break; default: __builtin_unreachable(); } @@ -1411,6 +1508,47 @@ static CXLRetCode cmd_features_get_feature(const str= uct cxl_cmd *cmd, memcpy(payload_out, (uint8_t *)&ct3d->hard_ppr_attrs + get_feature->offset, bytes_to_copy); + } else if (qemu_uuid_is_equal(&get_feature->uuid, + &cacheline_sparing_uuid)) { + if (get_feature->offset >=3D sizeof(CXLMemSparingReadAttrs)) { + return CXL_MBOX_INVALID_INPUT; + } + bytes_to_copy =3D sizeof(CXLMemSparingReadAttrs) - + get_feature->offset; + bytes_to_copy =3D MIN(bytes_to_copy, get_feature->count); + memcpy(payload_out, + (uint8_t *)&ct3d->cacheline_sparing_attrs + get_feature->of= fset, + bytes_to_copy); + } else if (qemu_uuid_is_equal(&get_feature->uuid, &row_sparing_uuid)) { + if (get_feature->offset >=3D sizeof(CXLMemSparingReadAttrs)) { + return CXL_MBOX_INVALID_INPUT; + } + bytes_to_copy =3D sizeof(CXLMemSparingReadAttrs) - + get_feature->offset; + bytes_to_copy =3D MIN(bytes_to_copy, get_feature->count); + memcpy(payload_out, + (uint8_t *)&ct3d->row_sparing_attrs + get_feature->offset, + bytes_to_copy); + } else if (qemu_uuid_is_equal(&get_feature->uuid, &bank_sparing_uuid))= { + if (get_feature->offset >=3D sizeof(CXLMemSparingReadAttrs)) { + return CXL_MBOX_INVALID_INPUT; + } + bytes_to_copy =3D sizeof(CXLMemSparingReadAttrs) - + get_feature->offset; + bytes_to_copy =3D MIN(bytes_to_copy, get_feature->count); + memcpy(payload_out, + (uint8_t *)&ct3d->bank_sparing_attrs + get_feature->offset, + bytes_to_copy); + } else if (qemu_uuid_is_equal(&get_feature->uuid, &rank_sparing_uuid))= { + if (get_feature->offset >=3D sizeof(CXLMemSparingReadAttrs)) { + return CXL_MBOX_INVALID_INPUT; + } + bytes_to_copy =3D sizeof(CXLMemSparingReadAttrs) - + get_feature->offset; + bytes_to_copy =3D MIN(bytes_to_copy, get_feature->count); + memcpy(payload_out, + (uint8_t *)&ct3d->rank_sparing_attrs + get_feature->offset, + bytes_to_copy); } else { return CXL_MBOX_UNSUPPORTED; } @@ -1560,6 +1698,78 @@ static CXLRetCode cmd_features_set_feature(const str= uct cxl_cmd *cmd, ct3d->hard_ppr_attrs.hppr_op_mode =3D ct3d->hard_ppr_wr_attrs.hppr_op_mode; } + } else if (qemu_uuid_is_equal(&hdr->uuid, &cacheline_sparing_uuid)) { + CXLMemSparingSetFeature *mem_sparing_set_feature =3D (void *)paylo= ad_in; + CXLMemSparingWriteAttrs *mem_sparing_write_attrs =3D + &mem_sparing_set_feature->feat_data; + + if (hdr->version !=3D CXL_MEMDEV_SPARING_SET_FEATURE_VERSION) { + return CXL_MBOX_UNSUPPORTED; + } + + memcpy((uint8_t *)&ct3d->cacheline_sparing_wr_attrs + hdr->offset, + mem_sparing_write_attrs, bytes_to_copy); + set_feat_info->data_size +=3D bytes_to_copy; + + if (data_transfer_flag =3D=3D CXL_SET_FEATURE_FLAG_FULL_DATA_TRANS= FER || + data_transfer_flag =3D=3D CXL_SET_FEATURE_FLAG_FINISH_DATA_TRA= NSFER) { + ct3d->cacheline_sparing_attrs.op_mode =3D + ct3d->cacheline_sparing_wr_attrs.op_mo= de; + } + } else if (qemu_uuid_is_equal(&hdr->uuid, &row_sparing_uuid)) { + CXLMemSparingSetFeature *mem_sparing_set_feature =3D (void *)paylo= ad_in; + CXLMemSparingWriteAttrs *mem_sparing_write_attrs =3D + &mem_sparing_set_feature->feat_data; + + if (hdr->version !=3D CXL_MEMDEV_SPARING_SET_FEATURE_VERSION) { + return CXL_MBOX_UNSUPPORTED; + } + + memcpy((uint8_t *)&ct3d->row_sparing_wr_attrs + hdr->offset, + mem_sparing_write_attrs, bytes_to_copy); + set_feat_info->data_size +=3D bytes_to_copy; + + if (data_transfer_flag =3D=3D CXL_SET_FEATURE_FLAG_FULL_DATA_TRANS= FER || + data_transfer_flag =3D=3D CXL_SET_FEATURE_FLAG_FINISH_DATA_TRA= NSFER) { + ct3d->row_sparing_attrs.op_mode =3D + ct3d->row_sparing_wr_attrs.op_mode; + } + } else if (qemu_uuid_is_equal(&hdr->uuid, &bank_sparing_uuid)) { + CXLMemSparingSetFeature *mem_sparing_set_feature =3D (void *)paylo= ad_in; + CXLMemSparingWriteAttrs *mem_sparing_write_attrs =3D + &mem_sparing_set_feature->feat_data; + + if (hdr->version !=3D CXL_MEMDEV_SPARING_SET_FEATURE_VERSION) { + return CXL_MBOX_UNSUPPORTED; + } + + memcpy((uint8_t *)&ct3d->bank_sparing_wr_attrs + hdr->offset, + mem_sparing_write_attrs, bytes_to_copy); + set_feat_info->data_size +=3D bytes_to_copy; + + if (data_transfer_flag =3D=3D CXL_SET_FEATURE_FLAG_FULL_DATA_TRANS= FER || + data_transfer_flag =3D=3D CXL_SET_FEATURE_FLAG_FINISH_DATA_TRA= NSFER) { + ct3d->bank_sparing_attrs.op_mode =3D + ct3d->bank_sparing_wr_attrs.op_mode; + } + } else if (qemu_uuid_is_equal(&hdr->uuid, &rank_sparing_uuid)) { + CXLMemSparingSetFeature *mem_sparing_set_feature =3D (void *)paylo= ad_in; + CXLMemSparingWriteAttrs *mem_sparing_write_attrs =3D + &mem_sparing_set_feature->feat_data; + + if (hdr->version !=3D CXL_MEMDEV_SPARING_SET_FEATURE_VERSION) { + return CXL_MBOX_UNSUPPORTED; + } + + memcpy((uint8_t *)&ct3d->rank_sparing_wr_attrs + hdr->offset, + mem_sparing_write_attrs, bytes_to_copy); + set_feat_info->data_size +=3D bytes_to_copy; + + if (data_transfer_flag =3D=3D CXL_SET_FEATURE_FLAG_FULL_DATA_TRANS= FER || + data_transfer_flag =3D=3D CXL_SET_FEATURE_FLAG_FINISH_DATA_TRA= NSFER) { + ct3d->rank_sparing_attrs.op_mode =3D + ct3d->rank_sparing_wr_attrs.op_mode; + } } else { return CXL_MBOX_UNSUPPORTED; } @@ -1576,6 +1786,15 @@ static CXLRetCode cmd_features_set_feature(const str= uct cxl_cmd *cmd, memset(&ct3d->soft_ppr_wr_attrs, 0, set_feat_info->data_size); } else if (qemu_uuid_is_equal(&hdr->uuid, &hard_ppr_uuid)) { memset(&ct3d->hard_ppr_wr_attrs, 0, set_feat_info->data_size); + } else if (qemu_uuid_is_equal(&hdr->uuid, &cacheline_sparing_uuid)= ) { + memset(&ct3d->cacheline_sparing_wr_attrs, 0, + set_feat_info->data_size); + } else if (qemu_uuid_is_equal(&hdr->uuid, &row_sparing_uuid)) { + memset(&ct3d->row_sparing_wr_attrs, 0, set_feat_info->data_siz= e); + } else if (qemu_uuid_is_equal(&hdr->uuid, &bank_sparing_uuid)) { + memset(&ct3d->bank_sparing_wr_attrs, 0, set_feat_info->data_si= ze); + } else if (qemu_uuid_is_equal(&hdr->uuid, &rank_sparing_uuid)) { + memset(&ct3d->rank_sparing_wr_attrs, 0, set_feat_info->data_si= ze); } set_feat_info->data_transfer_flag =3D 0; set_feat_info->data_saved_across_reset =3D false; @@ -1586,9 +1805,27 @@ static CXLRetCode cmd_features_set_feature(const str= uct cxl_cmd *cmd, return CXL_MBOX_SUCCESS; } =20 -static void cxl_mbox_create_mem_sparing_event_records(CXLType3Dev *ct3d, +#define CXL_MEM_SPARING_FLAGS_QUERY_RESOURCES BIT(0) +#define CXL_MEM_SPARING_FLAGS_HARD_SPARING BIT(1) +#define CXL_MEM_SPARING_FLAGS_SUB_CHANNEL_VALID BIT(2) +#define CXL_MEM_SPARING_FLAGS_NIB_MASK_VALID BIT(3) + +typedef struct CXLMemSparingMaintInPayload { + uint8_t flags; + uint8_t channel; + uint8_t rank; + uint8_t nibble_mask[3]; + uint8_t bank_group; + uint8_t bank; + uint8_t row[3]; + uint16_t column; + uint8_t sub_channel; +} QEMU_PACKED CXLMemSparingMaintInPayload; + +static void cxl_create_mem_sparing_event_records(CXLType3Dev *ct3d, uint8_t maint_op_class, uint8_t maint_op_sub_c= lass, - CXLMaintenance *ent) + CXLMaintenance *ent, + CXLMemSparingMaintInPayload *sparing_pi) { CXLEventSparing event_rec =3D {}; =20 @@ -1616,6 +1853,31 @@ static void cxl_mbox_create_mem_sparing_event_record= s(CXLType3Dev *ct3d, strncpy((char *)event_rec.component_id, (char *)ent->component= _id, sizeof(event_rec.component_id)); } + } else if (sparing_pi) { + event_rec.flags =3D CXL_MSER_FLAGS_QUERY_RESOURCES; + event_rec.result =3D 0; + event_rec.validity_flags =3D CXL_MSER_VALID_CHANNEL | + CXL_MSER_VALID_RANK | + CXL_MSER_VALID_NIB_MASK | + CXL_MSER_VALID_BANK_GROUP | + CXL_MSER_VALID_BANK | + CXL_MSER_VALID_ROW | + CXL_MSER_VALID_COLUMN; + event_rec.res_avail =3D 1; + event_rec.channel =3D sparing_pi->channel; + event_rec.rank =3D sparing_pi->rank; + if (sparing_pi->flags & CXL_MEM_SPARING_FLAGS_NIB_MASK_VALID) { + memcpy(event_rec.nibble_mask, sparing_pi->nibble_mask, + sizeof(sparing_pi->nibble_mask)); + } + event_rec.bank_group =3D sparing_pi->bank_group; + event_rec.bank =3D sparing_pi->bank; + event_rec.column =3D sparing_pi->column; + memcpy(event_rec.row, sparing_pi->row, sizeof(sparing_pi->row)); + if (sparing_pi->flags & CXL_MEM_SPARING_FLAGS_SUB_CHANNEL_VALID) { + event_rec.sub_channel =3D sparing_pi->sub_channel; + event_rec.validity_flags |=3D CXL_MSER_VALID_SUB_CHANNEL; + } } else { return; } @@ -1627,6 +1889,26 @@ static void cxl_mbox_create_mem_sparing_event_record= s(CXLType3Dev *ct3d, } } =20 +static CXLRetCode cxl_perform_mem_sparing(CXLType3Dev *ct3d, uint8_t sub_c= lass, + void *maint_pi) +{ + switch (sub_class) { + case CXL_MEMDEV_MAINT_SUBCLASS_CACHELINE_SPARING: + qemu_log("Cacheline Memory Sparing\n"); + return CXL_MBOX_SUCCESS; + case CXL_MEMDEV_MAINT_SUBCLASS_ROW_SPARING: + qemu_log("Row Memory Sparing\n"); + return CXL_MBOX_SUCCESS; + case CXL_MEMDEV_MAINT_SUBCLASS_BANK_SPARING: + qemu_log("Bank Memory Sparing\n"); + return CXL_MBOX_SUCCESS; + case CXL_MEMDEV_MAINT_SUBCLASS_RANK_SPARING: + qemu_log("Rank Memory Sparing\n"); + return CXL_MBOX_SUCCESS; + default: + return CXL_MBOX_INVALID_INPUT; + } +} =20 static void cxl_perform_ppr(CXLType3Dev *ct3d, uint64_t dpa) { @@ -1637,10 +1919,10 @@ static void cxl_perform_ppr(CXLType3Dev *ct3d, uint= 64_t dpa) /* Produce a Memory Sparing Event Record */ if (ct3d->soft_ppr_attrs.sppr_op_mode & CXL_MEMDEV_SPPR_OP_MODE_MEM_SPARING_EV_REC_EN) { - cxl_mbox_create_mem_sparing_event_records(ct3d, + cxl_create_mem_sparing_event_records(ct3d, CXL_MEMDEV_MAINT_CLASS_SPARING, CXL_MEMDEV_MAINT_SUBCLASS_CACHELINE_SPARIN= G, - ent); + ent, NULL); } break; } @@ -1664,6 +1946,7 @@ static CXLRetCode cmd_media_perform_maintenance(const= struct cxl_cmd *cmd, uint64_t dpa; uint8_t nibble_mask[3]; } QEMU_PACKED ppr; + CXLMemSparingMaintInPayload mem_sparing_pi; }; } QEMU_PACKED *maint_in =3D (void *)payload_in; CXLType3Dev *ct3d =3D CXL_TYPE3(cci->d); @@ -1689,6 +1972,32 @@ static CXLRetCode cmd_media_perform_maintenance(cons= t struct cxl_cmd *cmd, return CXL_MBOX_INVALID_INPUT; } break; + case CXL_MEMDEV_MAINT_CLASS_SPARING: + if (maint_in->mem_sparing_pi.flags & + CXL_MEM_SPARING_FLAGS_QUERY_RESOURCES) { + /* + * CXL r3.2 sect 8.2.10.7.1.4 - Memory Sparing Maintenance Ope= ration + * Produce Memory Sparing Event record to report resources + * availability. + */ + cxl_create_mem_sparing_event_records(ct3d, maint_in->class, + maint_in->subclass, NULL, + &maint_in->mem_sparing_pi= ); + + return CXL_MBOX_SUCCESS; + } + + switch (maint_in->subclass) { + case CXL_MEMDEV_MAINT_SUBCLASS_CACHELINE_SPARING: + case CXL_MEMDEV_MAINT_SUBCLASS_ROW_SPARING: + case CXL_MEMDEV_MAINT_SUBCLASS_BANK_SPARING: + case CXL_MEMDEV_MAINT_SUBCLASS_RANK_SPARING: + return cxl_perform_mem_sparing(ct3d, maint_in->subclass, + &maint_in->mem_sparing_pi); + default: + return CXL_MBOX_INVALID_INPUT; + } + break; default: return CXL_MBOX_INVALID_INPUT; } diff --git a/hw/mem/cxl_type3.c b/hw/mem/cxl_type3.c index 697b3fa0de..10ad3b8b59 100644 --- a/hw/mem/cxl_type3.c +++ b/hw/mem/cxl_type3.c @@ -990,6 +990,50 @@ static void ct3_realize(PCIDevice *pci_dev, Error **er= rp) .hppr_op_mode =3D CXL_MEMDEV_HPPR_OP_MODE_MEM_SPARING_EV_REC_EN }; =20 + /* Set default value for Cacheline Memory Sparing attributes */ + ct3d->cacheline_sparing_attrs =3D (CXLMemSparingReadAttrs) { + .max_maint_latency =3D 0x5, /* 100 ms */ + .op_caps =3D 0, /* require host involvement */ + .op_mode =3D 0, + .maint_op_class =3D CXL_MEMDEV_MAINT_CLASS_SPARING, + .maint_op_subclass =3D CXL_MEMDEV_MAINT_SUBCLASS_CACHELINE_SPARING, + .restriction_flags =3D CXL_MEMDEV_HARD_SPARING_SUPPORT_FLAG | + CXL_MEMDEV_SOFT_SPARING_SUPPORT_FLAG, + }; + + /* Set default value for Row Memory Sparing attributes */ + ct3d->row_sparing_attrs =3D (CXLMemSparingReadAttrs) { + .max_maint_latency =3D 0x5, /* 100 ms */ + .op_caps =3D 0, /* require host involvement */ + .op_mode =3D 0, + .maint_op_class =3D CXL_MEMDEV_MAINT_CLASS_SPARING, + .maint_op_subclass =3D CXL_MEMDEV_MAINT_SUBCLASS_ROW_SPARING, + .restriction_flags =3D CXL_MEMDEV_HARD_SPARING_SUPPORT_FLAG | + CXL_MEMDEV_SOFT_SPARING_SUPPORT_FLAG, + }; + + /* Set default value for Bank Memory Sparing attributes */ + ct3d->bank_sparing_attrs =3D (CXLMemSparingReadAttrs) { + .max_maint_latency =3D 0x5, /* 100 ms */ + .op_caps =3D 0, /* require host involvement */ + .op_mode =3D 0, + .maint_op_class =3D CXL_MEMDEV_MAINT_CLASS_SPARING, + .maint_op_subclass =3D CXL_MEMDEV_MAINT_SUBCLASS_BANK_SPARING, + .restriction_flags =3D CXL_MEMDEV_HARD_SPARING_SUPPORT_FLAG | + CXL_MEMDEV_SOFT_SPARING_SUPPORT_FLAG, + }; + + /* Set default value for Rank Memory Sparing attributes */ + ct3d->rank_sparing_attrs =3D (CXLMemSparingReadAttrs) { + .max_maint_latency =3D 0x5, /* 100 ms */ + .op_caps =3D 0, /* require host involvement */ + .op_mode =3D 0, + .maint_op_class =3D CXL_MEMDEV_MAINT_CLASS_SPARING, + .maint_op_subclass =3D CXL_MEMDEV_MAINT_SUBCLASS_RANK_SPARING, + .restriction_flags =3D CXL_MEMDEV_HARD_SPARING_SUPPORT_FLAG | + CXL_MEMDEV_SOFT_SPARING_SUPPORT_FLAG, + }; + return; =20 err_release_cdat: diff --git a/include/hw/cxl/cxl_device.h b/include/hw/cxl/cxl_device.h index 2d4f26acfd..d5906afb19 100644 --- a/include/hw/cxl/cxl_device.h +++ b/include/hw/cxl/cxl_device.h @@ -608,6 +608,30 @@ typedef struct CXLMemECSWriteAttrs { CXLMemECSFRUWriteAttrs fru_attrs[CXL_ECS_NUM_MEDIA_FRUS]; } QEMU_PACKED CXLMemECSWriteAttrs; =20 +/* + * CXL r3.2 section 8.2.10.7.2.3, Table 8-134 and 8-135: + * Memory Sparing Feature Readable/Writable Attributes + */ +typedef struct CXLMemSparingReadAttrs { + uint8_t max_maint_latency; + uint16_t op_caps; + uint16_t op_mode; + uint8_t maint_op_class; + uint8_t maint_op_subclass; + uint8_t rsvd[10]; + uint16_t restriction_flags; +} QEMU_PACKED CXLMemSparingReadAttrs; + +typedef struct CXLMemSparingWriteAttrs { + uint16_t op_mode; +} QEMU_PACKED CXLMemSparingWriteAttrs; + +#define CXL_MEMDEV_SPARING_GET_FEATURE_VERSION 0x01 +#define CXL_MEMDEV_SPARING_SET_FEATURE_VERSION 0x01 +#define CXL_MEMDEV_SPARING_SAFE_IN_USE_FLAG BIT(0) +#define CXL_MEMDEV_HARD_SPARING_SUPPORT_FLAG BIT(1) +#define CXL_MEMDEV_SOFT_SPARING_SUPPORT_FLAG BIT(2) + #define DCD_MAX_NUM_REGION 8 =20 typedef struct CXLDCExtentRaw { @@ -735,6 +759,15 @@ struct CXLType3Dev { /* ECS control attributes */ CXLMemECSReadAttrs ecs_attrs; CXLMemECSWriteAttrs ecs_wr_attrs; + /* Memory Sparing control attributes */ + CXLMemSparingReadAttrs cacheline_sparing_attrs; + CXLMemSparingWriteAttrs cacheline_sparing_wr_attrs; + CXLMemSparingReadAttrs row_sparing_attrs; + CXLMemSparingWriteAttrs row_sparing_wr_attrs; + CXLMemSparingReadAttrs bank_sparing_attrs; + CXLMemSparingWriteAttrs bank_sparing_wr_attrs; + CXLMemSparingReadAttrs rank_sparing_attrs; + CXLMemSparingWriteAttrs rank_sparing_wr_attrs; =20 struct dynamic_capacity { HostMemoryBackend *host_dc; diff --git a/include/hw/cxl/cxl_events.h b/include/hw/cxl/cxl_events.h index 3052bc9f18..89f6aad531 100644 --- a/include/hw/cxl/cxl_events.h +++ b/include/hw/cxl/cxl_events.h @@ -223,6 +223,11 @@ typedef enum CXLDCEventType { * CXL r3.2 section Table 8-60: Memory Sparing Event Record * All fields little endian. */ + +#define CXL_MSER_FLAGS_QUERY_RESOURCES BIT(0) +#define CXL_MSER_FLAGS_HARD_SPARING BIT(1) +#define CXL_MSER_FLAGS_DEV_INITIATED BIT(2) + #define CXL_MSER_VALID_CHANNEL BIT(0) #define CXL_MSER_VALID_RANK BIT(1) #define CXL_MSER_VALID_NIB_MASK BIT(2) --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770709; cv=none; d=zohomail.com; s=zohoarc; b=fRZnMXWRkxTywGpUh2ZidtklEbDp9aCIjrWViyfapHbASfZ5c+fSsWC0tgLK6nSbgNuQuiTR8tNfes1Vs75uHe704n5bGgyK/EU2zo5RkYpiTOm2d/ojx/s7F4c4dMI0+/Azosn6EP7/IbywMi6QYNFdijRca8enig+ne3Z2WA8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770709; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=1Z2tVFmaYSwzGEpyq4V6ueV4IT/I1gX5l24piymDD74=; b=dOa00GIRXDgc2nYJljh27G+7itZVhRdHXe0DfWKG8SjcqpToMfC/k+uGuYiw0XP/3BnIRYaQcOkaSacjQMzQcBzqeyxq/QEeJq71KiUMsj/9vp/pD4Zyl2qGq5EmnbfxWQ6WygH41q4sPO6IY6qrj/zUUcRk7JxZsGjKVkNEmv8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770709966870.2138883466848; Sun, 22 Feb 2026 06:31:49 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASK-000897-Bv; Sun, 22 Feb 2026 09:29:08 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASB-00084q-Vn for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:01 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuAS9-0006nP-Sy for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:28:59 -0500 Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-203-QhIMeO8wPz6Pj3a7-ZOljQ-1; Sun, 22 Feb 2026 09:28:55 -0500 Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-4376ec2b1cfso396107f8f.0 for ; Sun, 22 Feb 2026 06:28:55 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970d54760sm12542521f8f.35.2026.02.22.06.28.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:28:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770537; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=1Z2tVFmaYSwzGEpyq4V6ueV4IT/I1gX5l24piymDD74=; b=C2hcPQXHN0ddqnMSbT/bnJvq297XZ60xI5zC+JIWyrKLfUu/z+U1FnDPnWXSeSOrfwlJEJ kQHrz8sDNCAV1pQrhopsLw5dr9Tp/JfASR2DmIFHf0Jq3QBfU03ltFxd5s99C1o+8iLpj0 z9HBDYBRT4IwiETJAg7MM/BGI13bSd8= X-MC-Unique: QhIMeO8wPz6Pj3a7-ZOljQ-1 X-Mimecast-MFC-AGG-ID: QhIMeO8wPz6Pj3a7-ZOljQ_1771770534 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770534; x=1772375334; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=1Z2tVFmaYSwzGEpyq4V6ueV4IT/I1gX5l24piymDD74=; b=lXlvMRQa5rclt8cVyFOZ0u8A6XivcY4DR4LSLyU5sI1KO9g0wwuIawiUYeC2DmKv6H XDSwb/Q+vqNtG8dWF43OWRQsEwZW/oCvTVd9jsok6aRFbdBbifTF7GcOb3AOwIiqRMj7 FRbVqtgxMLXRgIAnJHt4e0ghfTsxLCRuRlHl1OuBvIySLnvILq9Foot+2ZKntKbfu86W WkMw+2LmSrFp3dtyVdhmLpkp3Zt/PnJchHV8aKiPYnUvMbEcMt4ynRKxjKN1stGE6wGq YPvjsMFI+V5CNRaqI4Ebn5EspRrL1FiRC+HFPVmGlq53Zf7ZiiFZ6O6cDA8WlqKIl7nb yi9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770534; x=1772375334; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1Z2tVFmaYSwzGEpyq4V6ueV4IT/I1gX5l24piymDD74=; b=g3xnNL2/5l5ktqlH4QRG3fefm5TJnofc5E5zx33EiFdFmxwtAXo3pCqA/pzIPBXQpW T0hsfYpM3ZXjo4Iigcy/04QPehSCIjaZhyGGhgZpbYREid7JaKQwgOACjnv8tP8a5gbs A3YPULvBjDOBGoEssVO6e1UvePEO+//03pJyZasKUt7z/UIcB9JWAWeHmZVyiJBQ+LC/ 9zpzfSMD0xH5lRZAjRN3J2h0gzcFtr7Q51TutEzhfMyOWSHKRzJUWa2lnuqrR+D5kU+S GXEqJtgvixUWigni0qtzB/woMzj5/ZDd1gaszCfelQrF3ioYjX5jW28SfCGICFggI/Iw 1zpw== X-Gm-Message-State: AOJu0YyVKxxS0syRmlL+dixi+Jodz3AnPPMfYFagvWdbc+LlnxghlbTH 4XrqRZdh62apb2tXrvG1unT+otlYJPxrNBFIhsDi8SJQ7ib2WUybszpIKTkNkdfRajDbwWH2yen YffmDenQ+83HPpfkNo1dB83pdNLV4od13VhcTFD3HTKFQqF+1HvupnxLj9VMPLgN611VWrhCm2+ aigpKEeYnOUX442Egr71kKPtpmpKuhjGVD8g== X-Gm-Gg: AZuq6aLyjCq6JlKIQpnW37sgfuSYHNjsMkAjk4om/xqXkehouamZeZyQ2dT+gUdQomH BrjILm3IcfoSwRyt3+oL7ZGJeOZxNf0o3mDZQxgTSScTi7qfhJst9ouZnHjeyTLxAXxHvYEVEye X6UY6qJdRZpiICCUKBCP+NTX5sd/KThMIkPPXfYillwcDzJZ0NZwI8a6B55yKwXYjrVSDtfMgcY w22ZgRYxp75TwsRZ4+Z0VHrR6iyD8wSCHh3lO/FQi07a/2cg03jHqvjvaqxXkHTwSu1TBgH/wOW 4bGfSn6tT+tw4Ml6N18o9Mp9AZFlF6+0qaEyE/EE+1MDwp1puJy8nb4cWCnP3CiI1i9HwvwIebl C8uxLWj2Jb0m8xVpC8ImxynAWc1/LGETTPl0DrX0sDvXcgQ== X-Received: by 2002:a05:6000:2c0e:b0:437:6e55:a736 with SMTP id ffacd0b85a97d-4396f153a10mr10698692f8f.7.1771770533872; Sun, 22 Feb 2026 06:28:53 -0800 (PST) X-Received: by 2002:a05:6000:2c0e:b0:437:6e55:a736 with SMTP id ffacd0b85a97d-4396f153a10mr10698655f8f.7.1771770533322; Sun, 22 Feb 2026 06:28:53 -0800 (PST) Date: Sun, 22 Feb 2026 09:28:51 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Davidlohr Bueso , Jonathan Cameron , Dongjoo Seo , Fan Ni , Marcel Apfelbaum Subject: [PULL 15/33] hw/pcie: Support enabling flit mode Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -4 X-Spam_score: -0.5 X-Spam_bar: / X-Spam_report: (-0.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770712575154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Davidlohr Bueso PCIe Flit Mode, introduced with the PCIe 6.0 specification, is a fundamental change in how data is transmitted over the bus to improve transfer rates. It shifts from variable-sized Transaction Layer Packets (TLPs) to fixed 256-byte Flow Control Units (FLITs). As with the link speed and width training, have ad-hoc property for setting the flit mode and allow CXL components to make use of it. For the CXL root port and dsp cases, always report flit mode but the actual value after 'training' will depend on the downstream device configuration. Suggested-by: Jonathan Cameron Tested-by: Dongjoo Seo Signed-off-by: Davidlohr Bueso Signed-off-by: Jonathan Cameron Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260204170936.43959-2-Jonathan.Cameron@huawei.com> --- hw/mem/cxl_type3.c | 6 ++++-- hw/pci-bridge/cxl_downstream.c | 8 +++++--- hw/pci-bridge/cxl_root_port.c | 8 +++++--- hw/pci-bridge/cxl_upstream.c | 16 +++++++++------- hw/pci/pcie.c | 23 +++++++++++++++++++---- include/hw/cxl/cxl_device.h | 1 + include/hw/pci-bridge/cxl_upstream_port.h | 1 + include/hw/pci/pcie.h | 2 +- include/hw/pci/pcie_port.h | 1 + 9 files changed, 46 insertions(+), 20 deletions(-) diff --git a/hw/mem/cxl_type3.c b/hw/mem/cxl_type3.c index 10ad3b8b59..328322b1ef 100644 --- a/hw/mem/cxl_type3.c +++ b/hw/mem/cxl_type3.c @@ -405,7 +405,7 @@ static void build_dvsecs(CXLType3Dev *ct3d) dvsec =3D (uint8_t *)&(CXLDVSECPortFlexBus){ .cap =3D 0x26, /* 68B, IO, Mem, non-MLD */ .ctrl =3D 0x02, /* IO always enabled */ - .status =3D 0x26, /* same as capabilities */ + .status =3D ct3d->flitmode ? 0x6 : 0x26, /* lack = of 68B */ .rcvd_mod_ts_data_phase1 =3D 0xef, /* WTF? */ }; cxl_component_create_dvsec(cxl_cstate, CXL2_TYPE3_DEVICE, @@ -1315,7 +1315,8 @@ static void ct3d_reset(DeviceState *dev) uint32_t *reg_state =3D ct3d->cxl_cstate.crb.cache_mem_registers; uint32_t *write_msk =3D ct3d->cxl_cstate.crb.cache_mem_regs_write_mask; =20 - pcie_cap_fill_link_ep_usp(PCI_DEVICE(dev), ct3d->width, ct3d->speed); + pcie_cap_fill_link_ep_usp(PCI_DEVICE(dev), ct3d->width, ct3d->speed, + ct3d->flitmode); cxl_component_register_init_common(reg_state, write_msk, CXL2_TYPE3_DE= VICE); cxl_device_register_init_t3(ct3d, CXL_T3_MSIX_MBOX); =20 @@ -1354,6 +1355,7 @@ static const Property ct3_props[] =3D { speed, PCIE_LINK_SPEED_32), DEFINE_PROP_PCIE_LINK_WIDTH("x-width", CXLType3Dev, width, PCIE_LINK_WIDTH_16), + DEFINE_PROP_BOOL("x-256b-flit", CXLType3Dev, flitmode, false), }; =20 static uint64_t get_lsa_size(CXLType3Dev *ct3d) diff --git a/hw/pci-bridge/cxl_downstream.c b/hw/pci-bridge/cxl_downstream.c index f7b131e67e..64086d8ec2 100644 --- a/hw/pci-bridge/cxl_downstream.c +++ b/hw/pci-bridge/cxl_downstream.c @@ -94,8 +94,9 @@ static void cxl_dsp_reset(DeviceState *qdev) latch_registers(dsp); } =20 -static void build_dvsecs(CXLComponentState *cxl) +static void build_dvsecs(PCIDevice *d, CXLComponentState *cxl) { + PCIESlot *s =3D PCIE_SLOT(d); uint8_t *dvsec; =20 dvsec =3D (uint8_t *)&(CXLDVSECPortExt){ 0 }; @@ -107,7 +108,7 @@ static void build_dvsecs(CXLComponentState *cxl) dvsec =3D (uint8_t *)&(CXLDVSECPortFlexBus){ .cap =3D 0x27, /* Cache, IO, Mem, non-MLD */ .ctrl =3D 0x02, /* IO always enabled */ - .status =3D 0x26, /* same */ + .status =3D s->flitmode ? 0x6 : 0x26, /* lack of = 68B */ .rcvd_mod_ts_data_phase1 =3D 0xef, /* WTF? */ }; cxl_component_create_dvsec(cxl, CXL2_DOWNSTREAM_PORT, @@ -182,7 +183,7 @@ static void cxl_dsp_realize(PCIDevice *d, Error **errp) =20 cxl_cstate->dvsec_offset =3D CXL_DOWNSTREAM_PORT_DVSEC_OFFSET; cxl_cstate->pdev =3D d; - build_dvsecs(cxl_cstate); + build_dvsecs(d, cxl_cstate); cxl_component_register_block_init(OBJECT(d), cxl_cstate, TYPE_CXL_DSP); pci_register_bar(d, CXL_COMPONENT_REG_BAR_IDX, PCI_BASE_ADDRESS_SPACE_MEMORY | @@ -217,6 +218,7 @@ static const Property cxl_dsp_props[] =3D { speed, PCIE_LINK_SPEED_64), DEFINE_PROP_PCIE_LINK_WIDTH("x-width", PCIESlot, width, PCIE_LINK_WIDTH_16), + DEFINE_PROP_BOOL("x-256b-flit", PCIESlot, flitmode, true), }; =20 static void cxl_dsp_class_init(ObjectClass *oc, const void *data) diff --git a/hw/pci-bridge/cxl_root_port.c b/hw/pci-bridge/cxl_root_port.c index 197d3148d2..5641048084 100644 --- a/hw/pci-bridge/cxl_root_port.c +++ b/hw/pci-bridge/cxl_root_port.c @@ -104,8 +104,9 @@ static void latch_registers(CXLRootPort *crp) cxl_component_register_init_common(reg_state, write_msk, CXL2_ROOT_POR= T); } =20 -static void build_dvsecs(CXLComponentState *cxl) +static void build_dvsecs(PCIDevice *d, CXLComponentState *cxl) { + PCIESlot *s =3D PCIE_SLOT(d); uint8_t *dvsec; =20 dvsec =3D (uint8_t *)&(CXLDVSECPortExt){ 0 }; @@ -126,7 +127,7 @@ static void build_dvsecs(CXLComponentState *cxl) dvsec =3D (uint8_t *)&(CXLDVSECPortFlexBus){ .cap =3D 0x26, /* IO, Mem, non-MLD */ .ctrl =3D 0x2, - .status =3D 0x26, /* same */ + .status =3D s->flitmode ? 0x6 : 0x26, /* lack of = 68B */ .rcvd_mod_ts_data_phase1 =3D 0xef, }; cxl_component_create_dvsec(cxl, CXL2_ROOT_PORT, @@ -176,7 +177,7 @@ static void cxl_rp_realize(DeviceState *dev, Error **er= rp) =20 cxl_cstate->dvsec_offset =3D CXL_ROOT_PORT_DVSEC_OFFSET; cxl_cstate->pdev =3D pci_dev; - build_dvsecs(cxl_cstate); + build_dvsecs(pci_dev, cxl_cstate); =20 cxl_component_register_block_init(OBJECT(pci_dev), cxl_cstate, TYPE_CXL_ROOT_PORT); @@ -211,6 +212,7 @@ static const Property gen_rp_props[] =3D { speed, PCIE_LINK_SPEED_64), DEFINE_PROP_PCIE_LINK_WIDTH("x-width", PCIESlot, width, PCIE_LINK_WIDTH_32), + DEFINE_PROP_BOOL("x-256b-flit", PCIESlot, flitmode, true), }; =20 static void cxl_rp_dvsec_write_config(PCIDevice *dev, uint32_t addr, diff --git a/hw/pci-bridge/cxl_upstream.c b/hw/pci-bridge/cxl_upstream.c index 6d708fadc2..c352d11dc7 100644 --- a/hw/pci-bridge/cxl_upstream.c +++ b/hw/pci-bridge/cxl_upstream.c @@ -101,28 +101,29 @@ static void cxl_usp_reset(DeviceState *qdev) =20 pci_bridge_reset(qdev); pcie_cap_deverr_reset(d); - pcie_cap_fill_link_ep_usp(d, usp->width, usp->speed); + pcie_cap_fill_link_ep_usp(d, usp->width, usp->speed, usp->flitmode); latch_registers(usp); } =20 -static void build_dvsecs(CXLComponentState *cxl) +static void build_dvsecs(CXLUpstreamPort *usp) { + CXLComponentState *cxl_cstate =3D &usp->cxl_cstate; uint8_t *dvsec; =20 dvsec =3D (uint8_t *)&(CXLDVSECPortExt){ .status =3D 0x1, /* Port Power Management Init Complete */ }; - cxl_component_create_dvsec(cxl, CXL2_UPSTREAM_PORT, + cxl_component_create_dvsec(cxl_cstate, CXL2_UPSTREAM_PORT, EXTENSIONS_PORT_DVSEC_LENGTH, EXTENSIONS_PORT_DVSEC, EXTENSIONS_PORT_DVSEC_REVID, dvsec); dvsec =3D (uint8_t *)&(CXLDVSECPortFlexBus){ .cap =3D 0x27, /* Cache, IO, Mem, non-MLD */ .ctrl =3D 0x27, /* Cache, IO, Mem */ - .status =3D 0x26, /* same */ + .status =3D usp->flitmode ? 0x6 : 0x26, /* lack o= f 68B */ .rcvd_mod_ts_data_phase1 =3D 0xef, /* WTF? */ }; - cxl_component_create_dvsec(cxl, CXL2_UPSTREAM_PORT, + cxl_component_create_dvsec(cxl_cstate, CXL2_UPSTREAM_PORT, PCIE_CXL3_FLEXBUS_PORT_DVSEC_LENGTH, PCIE_FLEXBUS_PORT_DVSEC, PCIE_CXL3_FLEXBUS_PORT_DVSEC_REVID, dvsec); @@ -132,7 +133,7 @@ static void build_dvsecs(CXLComponentState *cxl) .reg0_base_lo =3D RBI_COMPONENT_REG | CXL_COMPONENT_REG_BAR_IDX, .reg0_base_hi =3D 0, }; - cxl_component_create_dvsec(cxl, CXL2_UPSTREAM_PORT, + cxl_component_create_dvsec(cxl_cstate, CXL2_UPSTREAM_PORT, REG_LOC_DVSEC_LENGTH, REG_LOC_DVSEC, REG_LOC_DVSEC_REVID, dvsec); } @@ -327,7 +328,7 @@ static void cxl_usp_realize(PCIDevice *d, Error **errp) } cxl_cstate->dvsec_offset =3D CXL_UPSTREAM_PORT_DVSEC_OFFSET; cxl_cstate->pdev =3D d; - build_dvsecs(cxl_cstate); + build_dvsecs(usp); cxl_component_register_block_init(OBJECT(d), cxl_cstate, TYPE_CXL_USP); pci_register_bar(d, CXL_COMPONENT_REG_BAR_IDX, PCI_BASE_ADDRESS_SPACE_MEMORY | @@ -369,6 +370,7 @@ static const Property cxl_upstream_props[] =3D { speed, PCIE_LINK_SPEED_32), DEFINE_PROP_PCIE_LINK_WIDTH("x-width", CXLUpstreamPort, width, PCIE_LINK_WIDTH_16), + DEFINE_PROP_BOOL("x-256b-flit", CXLUpstreamPort, flitmode, false), }; =20 static void cxl_upstream_class_init(ObjectClass *oc, const void *data) diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c index 50fc4aa8eb..cae5061e69 100644 --- a/hw/pci/pcie.c +++ b/hw/pci/pcie.c @@ -113,7 +113,7 @@ pcie_cap_v1_fill(PCIDevice *dev, uint8_t port, uint8_t = type, uint8_t version) =20 /* Includes setting the target speed default */ static void pcie_cap_fill_lnk(uint8_t *exp_cap, PCIExpLinkWidth width, - PCIExpLinkSpeed speed) + PCIExpLinkSpeed speed, bool flitmode) { /* Clear and fill LNKCAP from what was configured above */ pci_long_test_and_clear_mask(exp_cap + PCI_EXP_LNKCAP, @@ -158,10 +158,15 @@ static void pcie_cap_fill_lnk(uint8_t *exp_cap, PCIEx= pLinkWidth width, PCI_EXP_LNKCAP2_SLS_64_0GB); } } + + if (flitmode) { + pci_long_test_and_set_mask(exp_cap + PCI_EXP_LNKSTA2, + PCI_EXP_LNKSTA2_FLIT); + } } =20 void pcie_cap_fill_link_ep_usp(PCIDevice *dev, PCIExpLinkWidth width, - PCIExpLinkSpeed speed) + PCIExpLinkSpeed speed, bool flitmode) { uint8_t *exp_cap =3D dev->config + dev->exp.exp_cap; =20 @@ -175,7 +180,7 @@ void pcie_cap_fill_link_ep_usp(PCIDevice *dev, PCIExpLi= nkWidth width, QEMU_PCI_EXP_LNKSTA_NLW(width) | QEMU_PCI_EXP_LNKSTA_CLS(speed)); =20 - pcie_cap_fill_lnk(exp_cap, width, speed); + pcie_cap_fill_lnk(exp_cap, width, speed, flitmode); } =20 static void pcie_cap_fill_slot_lnk(PCIDevice *dev) @@ -212,7 +217,7 @@ static void pcie_cap_fill_slot_lnk(PCIDevice *dev) /* the PCI_EXP_LNKSTA_DLLLA will be set in the hotplug function */ } =20 - pcie_cap_fill_lnk(exp_cap, s->width, s->speed); + pcie_cap_fill_lnk(exp_cap, s->width, s->speed, s->flitmode); } =20 int pcie_cap_init(PCIDevice *dev, uint8_t offset, @@ -1175,6 +1180,8 @@ void pcie_sync_bridge_lnk(PCIDevice *bridge_dev) if (!target || !target->exp.exp_cap) { lnksta =3D lnkcap; } else { + uint16_t lnksta2; + lnksta =3D target->config_read(target, target->exp.exp_cap + PCI_EXP_LNKSTA, sizeof(lnksta)); @@ -1188,6 +1195,14 @@ void pcie_sync_bridge_lnk(PCIDevice *bridge_dev) lnksta &=3D ~PCI_EXP_LNKSTA_CLS; lnksta |=3D lnkcap & PCI_EXP_LNKCAP_SLS; } + + lnksta2 =3D target->config_read(target, + target->exp.exp_cap + PCI_EXP_LNKSTA= 2, + sizeof(lnksta2)); + pci_word_test_and_clear_mask(exp_cap + PCI_EXP_LNKSTA2, + PCI_EXP_LNKSTA2_FLIT); + pci_word_test_and_set_mask(exp_cap + PCI_EXP_LNKSTA2, + lnksta2 & PCI_EXP_LNKSTA2_FLIT); } =20 if (!(lnksta & PCI_EXP_LNKSTA_NLW)) { diff --git a/include/hw/cxl/cxl_device.h b/include/hw/cxl/cxl_device.h index d5906afb19..7d9236db8c 100644 --- a/include/hw/cxl/cxl_device.h +++ b/include/hw/cxl/cxl_device.h @@ -726,6 +726,7 @@ struct CXLType3Dev { /* PCIe link characteristics */ PCIExpLinkSpeed speed; PCIExpLinkWidth width; + bool flitmode; =20 /* DOE */ DOECap doe_cdat; diff --git a/include/hw/pci-bridge/cxl_upstream_port.h b/include/hw/pci-bri= dge/cxl_upstream_port.h index f208397ffe..e3d6a27acc 100644 --- a/include/hw/pci-bridge/cxl_upstream_port.h +++ b/include/hw/pci-bridge/cxl_upstream_port.h @@ -15,6 +15,7 @@ typedef struct CXLUpstreamPort { =20 PCIExpLinkSpeed speed; PCIExpLinkWidth width; + bool flitmode; =20 DOECap doe_cdat; uint64_t sn; diff --git a/include/hw/pci/pcie.h b/include/hw/pci/pcie.h index d4e065db82..71ba94874b 100644 --- a/include/hw/pci/pcie.h +++ b/include/hw/pci/pcie.h @@ -144,7 +144,7 @@ void pcie_ari_init(PCIDevice *dev, uint16_t offset); void pcie_dev_ser_num_init(PCIDevice *dev, uint16_t offset, uint64_t ser_n= um); void pcie_ats_init(PCIDevice *dev, uint16_t offset, bool aligned); void pcie_cap_fill_link_ep_usp(PCIDevice *dev, PCIExpLinkWidth width, - PCIExpLinkSpeed speed); + PCIExpLinkSpeed speed, bool flitmode); =20 void pcie_cap_slot_pre_plug_cb(HotplugHandler *hotplug_dev, DeviceState *d= ev, Error **errp); diff --git a/include/hw/pci/pcie_port.h b/include/hw/pci/pcie_port.h index 7cd7af8cfa..53cd64c5ed 100644 --- a/include/hw/pci/pcie_port.h +++ b/include/hw/pci/pcie_port.h @@ -58,6 +58,7 @@ struct PCIESlot { =20 PCIExpLinkSpeed speed; PCIExpLinkWidth width; + bool flitmode; =20 /* Disable ACS (really for a pcie_root_port) */ bool disable_acs; --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770862; cv=none; d=zohomail.com; s=zohoarc; b=Zi4XW9sNwyQoNCSi1Mctwek6TKdBr62j+/DakEIDyBsYxA+6y4U2nhNWQCivvLJVTUgQOIimuL6vu8DKlIEAKS/kTLj3m93czJ4Qm0kEP0RYvIr+As4stQitxbiL5cUyHHMHbV35a1KvG4egPICk6c/m2XNvXad+Jpo7/3b7o8w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770862; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=NXf3I54LQjbQo5rdjnX8oUBXAUmrFhpR1xfT44HvLzM=; b=BAKj/1Jsk78wzEpSrdceS4wzkikqButeWpdWDcYX0DNEO3hjeb7L89FpIHFjtXQx4TR8UJYXY81XUJ3668KYvRKjAS+Mvd+ErsV3d5ve6xhIpcj8ShZDcJ7G6Tx2N0hGoEFZyOfeHFaFcDqg0kbCsBcbrhfuWKchOLB9+JUfRbI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770862628199.63674995305814; Sun, 22 Feb 2026 06:34:22 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASl-00009S-GQ; Sun, 22 Feb 2026 09:29:35 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASD-000856-HS for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:02 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASB-0006nX-N3 for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:01 -0500 Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-55-fDOGoHU1OwSWoFr9kvKdSA-1; Sun, 22 Feb 2026 09:28:57 -0500 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-4368060a5e5so3855502f8f.3 for ; Sun, 22 Feb 2026 06:28:57 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970c00db8sm11909430f8f.12.2026.02.22.06.28.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:28:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770539; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=NXf3I54LQjbQo5rdjnX8oUBXAUmrFhpR1xfT44HvLzM=; b=XNBPKSU0tq+rPMSN4D8uo5nSruN8Gq8ssxixfT4Smn/CLeOHlghoAPvSTPWnkEaT/3f5H8 UoZy13nNPV+oF4CmVh/mJf3jauLbz+WeJrx36Pd8+RAYinl8cXZg84p5uPwBY0saV472H1 osTaaI0C9QzNN15dcwkMaHY72GkEpXU= X-MC-Unique: fDOGoHU1OwSWoFr9kvKdSA-1 X-Mimecast-MFC-AGG-ID: fDOGoHU1OwSWoFr9kvKdSA_1771770537 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770536; x=1772375336; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=NXf3I54LQjbQo5rdjnX8oUBXAUmrFhpR1xfT44HvLzM=; b=HYTMIdbnyDyHnXm/4eya1QNQHhKZ15tRbrYKfcTyE0+7On1fuBIQr8jyIpU8V/9dkS UypkxVHlcjkH5Tr32po4cX+f4yatIFSDSqMWWVm5wxHl2KISt3wnsF6u4wlxUczvzjOR Y22gA9OKvcKAG5z/Z0qKn00bsm7XyVn7TRd1klogUzCtWMNh5fpPgMRg9YE505MKWvKq /RLSkdsYBGMg9b73TKOuiN9DKFwm31NHdOh2hRbtx+Fh5eOL//3bnorA//IYB109Lv+g ywyYc22fR+NIhEtJtI1dWotEfb1eqhDi61BneonbeOiAKEMgcsQZEuY0L4QYIlE6cBAJ Lb4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770536; x=1772375336; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NXf3I54LQjbQo5rdjnX8oUBXAUmrFhpR1xfT44HvLzM=; b=G5QVI3JiGjvv/5dCkgeQuXEOCfQzDUbe+mCqTIipRPEb1TcxbrxsBSxrUeCMmOVq18 0ci3D7X6cfAfYkUsCqiKo01756TkZk7gSTmxNNaR4nGDOs0oAD90dIVU6PGr9R3qQt8c YcuqDxaktKW2dm0YtT0H7y2gqdSMH2DS19fJligwmTa7M+63Sj/Se92ATc3Yb0TYqXil 9UBawqwPLE1wEGaoA85Scv0W4KImVY5IpA9UzuB4qotYQGg47kaU2vnMr6tIpdrg5gUY OKSzCCBYlAJQDRGZK0k5mxp3nRSxbJcUfq+519a9yx/P2bCUE5s6YyavsALARWBcOvjk kCaw== X-Gm-Message-State: AOJu0YwtXt3sIFG1WvojEJVGd93buRh5SEBugsKT19g/EoAbpd8kyEuj e3OeufSCLPLdkCnu+RzdSynJWw3/M3RA4uABZ4gn868Qx6AuBw4+WL4YLTLc5RU2NS6Y9RT+3Bk RRQrqEnuMKIoh+0J0nqzY3vnTvf19a+/pCdegUEokMzM88mWLqYUqj143kMzm7kS71ZUy19ZiQR sW/WjIWF7JHJ9uARR6sxBfgQFaRY2Qi2365w== X-Gm-Gg: AZuq6aKJSxXe5Dqliwpe7vP8uBYpy4BbQfmu5ccSdU9fJ/l0iDltcQulUGijzQBqDgN 8l60uUYQ6jKYsvUQidudnBTeJjVyQ+t+YyUbyNe4YXjPER+A0DuvA6mGptSORdtuDb8XjeI/eBd orFi7vxz3ix73gxuisNgoICI4a+ofo8wSZi6WXG/PBLowOQjbu08VREP/BB6wt6Fa0mjiYpJ+SP HuY4a5UpBAbp/rHVNxzFR52MZfHmFzC4w6UUxdgyCEaR8ANSn/BCtw+oV5QSBfJ0qaFTAo17M2r /KPF1/tdkWOpy8lUUrHGKTuYv251CE4tUEx+QeLei0pm9ezmFMnKp7gGnsLvcOeHiioLZFx4C+F x/VSGA4NpoJCshwgtg2Dn1uhesYh7a1xWX4E+OBswln0sPQ== X-Received: by 2002:a05:6000:402b:b0:430:f5ed:83e3 with SMTP id ffacd0b85a97d-4396f150730mr10758321f8f.6.1771770536202; Sun, 22 Feb 2026 06:28:56 -0800 (PST) X-Received: by 2002:a05:6000:402b:b0:430:f5ed:83e3 with SMTP id ffacd0b85a97d-4396f150730mr10758274f8f.6.1771770535531; Sun, 22 Feb 2026 06:28:55 -0800 (PST) Date: Sun, 22 Feb 2026 09:28:53 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Ira Weiny , Dongjoo Seo , Davidlohr Bueso , Jonathan Cameron , Fan Ni Subject: [PULL 16/33] hw/cxl: Refactor component register initialization Message-ID: <5729c01a600d62c19202936481b06e84a14236ba.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -4 X-Spam_score: -0.5 X-Spam_bar: / X-Spam_report: (-0.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770864010158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ira Weiny CXL 3.2 8.2.4 Table 8-22 defines which capabilities are mandatory, not permitted, or optional for each type of device. cxl_component_register_init_common() uses a rather odd 'fall through' mechanism to define each component register set. This assumes that any device or capability being added builds on the previous devices capabilities. This is not true as there are mutually exclusive capabilities defined. For example, downstream ports can not have snoop but it can have Back Invalidate capable decoders. Refactor this code to make it easier to add individual capabilities as defined by a device type. Any capability which is not specified by the type is left NULL'ed out which complies with the packed nature of the register array. Update all spec references to 3.2. No functional changes should be seen with this patch. Signed-off-by: Ira Weiny Tested-by: Dongjoo Seo [rebased, no RAS for HBs, r3.2 references] Signed-off-by: Davidlohr Bueso Signed-off-by: Jonathan Cameron Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260204170936.43959-3-Jonathan.Cameron@huawei.com> --- hw/cxl/cxl-component-utils.c | 75 +++++++++++----------------------- include/hw/cxl/cxl_component.h | 33 ++++++++++----- 2 files changed, 46 insertions(+), 62 deletions(-) diff --git a/hw/cxl/cxl-component-utils.c b/hw/cxl/cxl-component-utils.c index 473895948b..91770f103a 100644 --- a/hw/cxl/cxl-component-utils.c +++ b/hw/cxl/cxl-component-utils.c @@ -284,32 +284,6 @@ void cxl_component_register_init_common(uint32_t *reg_= state, { int caps =3D 0; =20 - /* - * In CXL 2.0 the capabilities required for each CXL component are such - * that, with the ordering chosen here, a single number can be used to - * define which capabilities should be provided. - */ - switch (type) { - case CXL2_DOWNSTREAM_PORT: - case CXL2_DEVICE: - /* RAS, Link */ - caps =3D 2; - break; - case CXL2_UPSTREAM_PORT: - case CXL2_TYPE3_DEVICE: - case CXL2_LOGICAL_DEVICE: - /* + HDM */ - caps =3D 3; - break; - case CXL2_ROOT_PORT: - case CXL2_RC: - /* + Extended Security, + Snoop */ - caps =3D 5; - break; - default: - abort(); - } - memset(reg_state, 0, CXL2_COMPONENT_CM_REGION_SIZE); =20 /* CXL Capability Header Register */ @@ -317,11 +291,12 @@ void cxl_component_register_init_common(uint32_t *reg= _state, ARRAY_FIELD_DP32(reg_state, CXL_CAPABILITY_HEADER, VERSION, CXL_CAPABILITY_VERSION); ARRAY_FIELD_DP32(reg_state, CXL_CAPABILITY_HEADER, CACHE_MEM_VERSION, = 1); - ARRAY_FIELD_DP32(reg_state, CXL_CAPABILITY_HEADER, ARRAY_SIZE, caps); =20 #define init_cap_reg(reg, id, version) = \ do { = \ - int which =3D R_CXL_##reg##_CAPABILITY_HEADER; = \ + int which =3D CXL_##reg##_CAP_HDR_IDX; = \ + if (CXL_##reg##_CAP_HDR_IDX > caps) = \ + caps =3D CXL_##reg##_CAP_HDR_IDX; = \ reg_state[which] =3D FIELD_DP32(reg_state[which], = \ CXL_##reg##_CAPABILITY_HEADER, ID, i= d); \ reg_state[which] =3D = \ @@ -332,37 +307,35 @@ void cxl_component_register_init_common(uint32_t *reg= _state, CXL_##reg##_REGISTERS_OFFSET); = \ } while (0) =20 + /* CXL r3.2 8.2.4 Table 8-22 */ switch (type) { - case CXL2_DEVICE: + case CXL2_ROOT_PORT: + case CXL2_RC: + /* + Extended Security, + Snoop */ + init_cap_reg(EXTSEC, 6, 1); + init_cap_reg(SNOOP, 8, 1); + /* fallthrough */ + case CXL2_UPSTREAM_PORT: case CXL2_TYPE3_DEVICE: case CXL2_LOGICAL_DEVICE: - case CXL2_ROOT_PORT: - case CXL2_UPSTREAM_PORT: + /* + HDM */ + init_cap_reg(HDM, 5, 1); + hdm_init_common(reg_state, write_msk, type); + /* fallthrough */ case CXL2_DOWNSTREAM_PORT: - init_cap_reg(RAS, 2, CXL_RAS_CAPABILITY_VERSION); - ras_init_common(reg_state, write_msk); + case CXL2_DEVICE: + /* RAS, Link */ + if (type !=3D CXL2_RC) { + init_cap_reg(RAS, 2, 2); + ras_init_common(reg_state, write_msk); + } + init_cap_reg(LINK, 4, 2); break; default: - break; + abort(); } =20 - init_cap_reg(LINK, 4, CXL_LINK_CAPABILITY_VERSION); - - if (caps < 3) { - return; - } - - if (type !=3D CXL2_ROOT_PORT) { - init_cap_reg(HDM, 5, CXL_HDM_CAPABILITY_VERSION); - hdm_init_common(reg_state, write_msk, type); - } - if (caps < 5) { - return; - } - - init_cap_reg(EXTSEC, 6, CXL_EXTSEC_CAP_VERSION); - init_cap_reg(SNOOP, 8, CXL_SNOOP_CAP_VERSION); - + ARRAY_FIELD_DP32(reg_state, CXL_CAPABILITY_HEADER, ARRAY_SIZE, caps); #undef init_cap_reg } =20 diff --git a/include/hw/cxl/cxl_component.h b/include/hw/cxl/cxl_component.h index b0f2aa7914..1f167d3ef7 100644 --- a/include/hw/cxl/cxl_component.h +++ b/include/hw/cxl/cxl_component.h @@ -32,10 +32,20 @@ enum reg_type { }; =20 /* - * Capability registers are defined at the top of the CXL.cache/mem region= and - * are packed. For our purposes we will always define the caps in the same - * order. - * CXL r3.1 Table 8-22: CXL_CAPABILITY_ID Assignment for details. + * CXL r3.2 - 8.2.4 Table 8-22 and 8-23 + * + * Capability registers are defined at the top of the CXL.cache/mem region. + * They are defined to be packed and at variable offsets. However, NULL + * capabilities can be added to the packed array. To facilitate easier ac= cess + * within the QEMU code, define these at specified offsets. Then NULL out= any + * capabilities for devices which don't (or can't) have a particular capab= ility + * (see cxl_component_register_init_common). NULL capabilities are to be + * ignored by software. + * + * 'offsets' are based on index's which can then be used to report the arr= ay + * size in CXL Capability Header Register (index/offset 0). + * + * See CXL r3.2 Table 8-25 for an example of allowing a 'NULL' header. */ =20 /* CXL r3.1 Section 8.2.4.1: CXL Capability Header Register */ @@ -46,16 +56,17 @@ REG32(CXL_CAPABILITY_HEADER, 0) FIELD(CXL_CAPABILITY_HEADER, CACHE_MEM_VERSION, 20, 4) FIELD(CXL_CAPABILITY_HEADER, ARRAY_SIZE, 24, 8) =20 -#define CXLx_CAPABILITY_HEADER(type, offset) \ - REG32(CXL_##type##_CAPABILITY_HEADER, offset) \ +#define CXLx_CAPABILITY_HEADER(type, idx) \ + enum { CXL_##type##_CAP_HDR_IDX =3D idx }; \ + REG32(CXL_##type##_CAPABILITY_HEADER, (idx * 0x4)) \ FIELD(CXL_##type##_CAPABILITY_HEADER, ID, 0, 16) \ FIELD(CXL_##type##_CAPABILITY_HEADER, VERSION, 16, 4) \ FIELD(CXL_##type##_CAPABILITY_HEADER, PTR, 20, 12) -CXLx_CAPABILITY_HEADER(RAS, 0x4) -CXLx_CAPABILITY_HEADER(LINK, 0x8) -CXLx_CAPABILITY_HEADER(HDM, 0xc) -CXLx_CAPABILITY_HEADER(EXTSEC, 0x10) -CXLx_CAPABILITY_HEADER(SNOOP, 0x14) +CXLx_CAPABILITY_HEADER(RAS, 1) +CXLx_CAPABILITY_HEADER(LINK, 2) +CXLx_CAPABILITY_HEADER(HDM, 3) +CXLx_CAPABILITY_HEADER(EXTSEC, 4) +CXLx_CAPABILITY_HEADER(SNOOP, 5) =20 /* * Capability structures contain the actual registers that the CXL compone= nt --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770738; cv=none; d=zohomail.com; s=zohoarc; b=QXilPog3kjSKqSbNhdMhbgHRr9Uuu1OC/MvbbKI8DX8gtNoaBMJT8tQJD9xjrKncCtexX8QnJV674fOpxPGrA1+Xlm0ZYw9RHbFH/sssB1BzsSv/u4QkbM/iFyCOEdgGmkGfeSpypIauFLzJyjEF/OxI6Zhxkpt5gZifHe5UqqI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770738; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=nHJFAKQkQhzJOM5wxQIFWf/cckmeTE0+MbAxYSOGU/Q=; b=IBBtpCqMQjki2TB8vKoH85qOPKEZIVMMm2Z8RO4ZKMspT8kfwBLMb203/Clqzk7x4siX0Xc9oq1wvnu0T9w7HQ68svKifesHNIGodkAUnDi6R7mI1DdS325Mmz5xAljkhKVO0cWyOa/IepmzUh7KCmje+6HnYlJADybj+T49+rc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770738971666.3530195728392; Sun, 22 Feb 2026 06:32:18 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASM-0008A5-GA; Sun, 22 Feb 2026 09:29:10 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASG-00086W-2F for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:06 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASE-0006o7-PG for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:03 -0500 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-608-WcI20yp_PySkMFRO8Ki2cA-1; Sun, 22 Feb 2026 09:28:59 -0500 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-4837b9913c9so37783515e9.0 for ; Sun, 22 Feb 2026 06:28:59 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483a3df4859sm115680185e9.2.2026.02.22.06.28.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:28:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770541; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=nHJFAKQkQhzJOM5wxQIFWf/cckmeTE0+MbAxYSOGU/Q=; b=RhS1qaioqmudhYTnKZBEaYzzdjLkgZ8vVYt2etbegQxRdSQ1mNz8WoY8Nvi2aF5k5MGfut 1H/aFAjg9D082VanBhtLchbYdBBY2WRxZhOELA3RgYNB3icMnBlOtxp3VzENGJOcEGMyrL +o481OXXU683LTwNSWaW1ouXwhjXTsM= X-MC-Unique: WcI20yp_PySkMFRO8Ki2cA-1 X-Mimecast-MFC-AGG-ID: WcI20yp_PySkMFRO8Ki2cA_1771770538 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770538; x=1772375338; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=nHJFAKQkQhzJOM5wxQIFWf/cckmeTE0+MbAxYSOGU/Q=; b=hUvDn2S8p5WJVZo469wjPNlMVbUlE6WSeD2xAfzkV0dsGQHwM9QItGffaBvcIup4gS 1zD1qSDqf0pSvkIm6QSr2CQgBL4exDU78FSrPwFB9sg5WyHMkcRFyILiGxLzaRX/wGED OIohzrFYiVHqi+GaV9fNr4SD0NZvyfWrWE9yXxr+tUtjP/wpNVZMmZG+MNbPsml1tNVt ZEaEn+Hx84vJsKzb8PN+msqlT6Ky2OBbnu5kVYGeEEEH3DeiULdyexOtNDlr2Aj58FaH HBWYNpTsBImIMvjvjnEhH5fwGxrZbKTKm+gScc6g8cEvvTkVtTNq2YGnuneZO//kfVJa H4Zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770538; x=1772375338; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nHJFAKQkQhzJOM5wxQIFWf/cckmeTE0+MbAxYSOGU/Q=; b=aFRoYFR1PlBwILap2DJHZdwWAPBDFVNHbjPnpsv/+WzhJPnwV5L/DTEPFMbDA1VQ5t AF5SwpHHwapzICSbo42DAnVjYizIw74TSSB7XKGxZf/6TIImpy7PevpSFPtqvlCR5e5D 5+oH1MrKL8tUV926s8cBlA0FNvj9n20SREWimFq08xx8n9q3sQ+mOKL+mzob+J1BGPMi QQs1tQvxYBAPIKlNo5HxkgyeNQcdAB5kavbLe8j28lhmaGrXyC93EsAmrX1bSP74XFrS PcefWlkgU+QV6RINoOaMsvQZ1zkwNGW5szgmsDX1qHqRAPhcY/EbExSZ42WHgs6u3jwC D8pA== X-Gm-Message-State: AOJu0Ywk+5XHLcXD6O3FDHlp/qB7fzcs6vQ5ve1mZGSTJE4wzvNR9H8F ipW0hQ04BigshuSgqJoVv96RlcxiVlIXgeyboB04RH0cT4gqKwjNM7/dwn9u9hrRomVDI3LadPr ENbFdihk7DV4jP1Rg8H90ULusRu+3nFPIM5wa1DpvJWqwKv3isYHnjZpjobnFtmFCtsLnwGRGj0 t59TJl0rYaECpWDb2hfeWWTLjA6V2tUqYo3g== X-Gm-Gg: AZuq6aKQVmD2+EVqTYjKAN7rlYEHYsuc7/ECpN+oxWIGCu697F6rflFoJ4alCOK5byM mDlOt3MOXjmhQuLIX8kmoJ7fCR+Lg3MShXbKK1sfWq7rHnTKookznAubV6W0IfQSGnGVYkArXiA awfk5bMruhaAhdj9efk8kPlucJvj+ZEpf/P87Y407waI/rsIhOa/Db+m8/S8TIjbsYELv2cpwqr CG0VnHzCLhJGJE/hi2yGSo+DQ2M8F/PEF0nCNffpxIsXoP7rIWOHN7TKROVbCPg5EjpI4Cvs5R/ 1+OV3w1G+QUcdwSh3T4JoRmSH/kdMd7RrkBprQvIJyr/P1Je7Yf6c3Y6zfYFykT2Q4SvpyXMKFh PO6Rs+uR0x59Ue6Fp0cTRpac1pTH1Z4yglugWrtssxR3Q6Q== X-Received: by 2002:a05:600c:4e8e:b0:47f:f952:d207 with SMTP id 5b1f17b1804b1-483a95e251fmr77064715e9.19.1771770538160; Sun, 22 Feb 2026 06:28:58 -0800 (PST) X-Received: by 2002:a05:600c:4e8e:b0:47f:f952:d207 with SMTP id 5b1f17b1804b1-483a95e251fmr77064375e9.19.1771770537681; Sun, 22 Feb 2026 06:28:57 -0800 (PST) Date: Sun, 22 Feb 2026 09:28:55 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Jonathan Cameron , Igor Mammedov , Ani Sinha Subject: [PULL 17/33] tests/bios-tables-test: Excluded CEDT.cxl for BI restriction relaxation. Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770740756154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jonathan Cameron The next patch will relax restrictions on the fixed memory window to allow use with back invalidate capable devices. Signed-off-by: Jonathan Cameron Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260204170936.43959-4-Jonathan.Cameron@huawei.com> --- tests/qtest/bios-tables-test-allowed-diff.h | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios= -tables-test-allowed-diff.h index dfb8523c8b..b4646b5b31 100644 --- a/tests/qtest/bios-tables-test-allowed-diff.h +++ b/tests/qtest/bios-tables-test-allowed-diff.h @@ -1 +1,2 @@ /* List of comma-separated changed AML files to ignore */ +"tests/data/acpi/x86/q35/CEDT.cxl", --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770783; cv=none; d=zohomail.com; s=zohoarc; b=T4pGpKACV4R5YVobXmDC2l07oj1diHirni+pL+IS+7lRTwT5fnrrZ13bSyO6bvRTWXLs+uQ9g3ltVzMI9VPtch633Z7XqynaaRKzWM1K41srkqINnJYl2i2eS9ZEWRA1nFFKMOUUEGif0wYxxieKuVz9ziCTrGN7QwWnLnJ0084= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770783; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ip7Nftynx750AYFZGC7Njs3lqOYCdZvd4rGc6p0ItTQ=; b=mWsiOtW60wDiJficMP0UvbvTBCYwdNcXaN254XYjFYn9kyMZno6IFbLPTVdpTMn5SAirXmJG7/iFq1dyHbtR4KZIIzrTSMaGnvgfrtLXFn6vbk27snQGUmy9yFzIy0kehK5kfaIfWXiZyTE/Hf6IlD2CpiCBvNFGAbPNeogBhMs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770783062745.4574442877325; Sun, 22 Feb 2026 06:33:03 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASK-00089l-UV; Sun, 22 Feb 2026 09:29:08 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASH-00086e-Sx for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:06 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASG-0006oa-GD for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:05 -0500 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-131-u7fYPHlnOLyTlA_KoCDpdA-1; Sun, 22 Feb 2026 09:29:02 -0500 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-4837b6f6b93so26138465e9.3 for ; Sun, 22 Feb 2026 06:29:02 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483a3e01c27sm75074855e9.9.2026.02.22.06.28.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:29:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770543; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=ip7Nftynx750AYFZGC7Njs3lqOYCdZvd4rGc6p0ItTQ=; b=SZSvwQm/APvWKToIvAsMsAxlO78SRcfdVXl8927DbmrKx3iu2NihhZczQXmQVkElAjsxk1 yGb1BaUrXSWy0SpC8b96pc5JdzI1Krb/PZ5kKpc9TSLGWn9Cnyk6D+McvZrp+YED2VHLNX 2zPLADbY2ZKonL0Xc9Wj+I9dYIEa4Fw= X-MC-Unique: u7fYPHlnOLyTlA_KoCDpdA-1 X-Mimecast-MFC-AGG-ID: u7fYPHlnOLyTlA_KoCDpdA_1771770541 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770541; x=1772375341; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=ip7Nftynx750AYFZGC7Njs3lqOYCdZvd4rGc6p0ItTQ=; b=heB+nrecBcfA3nuWALQPnMbDLmYcrffcoMEW9MONsWykNvq8neq88dKYROkPT2+lAk ohM9s9Yst25oU0bF/MIpvoHMx7+3BskHa58ZY93zeZnsts/tjBSqtMamgZ0C0H8+MCI9 IFPv298VpyVg9BH18VbPU84hFDq18gKPVF+HWDrnRzV5qg9zdiIay2O6o4ck9BjePM6w Mz5C1lpFmP/qi9u524gcUWfbKCDszF2Z7biN4Uzaf6qFJzpd6+VcNv36q5DSMrsehknm l1j8wdMpJVmRvDiwoU8RJMVbdrv2EDyuQ0Q4aCGlKe15BAA2xyBbgPKAWhup3sletYXU InLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770541; x=1772375341; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ip7Nftynx750AYFZGC7Njs3lqOYCdZvd4rGc6p0ItTQ=; b=rJWCZKNmzc3H02P8AclXe8vKk3oCyvcDBfaD2dBVV1Ie7fRW9iHJr6oTJOukBLlRlA Q3b6t8bscMHaichf0iC9asTG8CstlYLN17EavBww1Soh/3zheBKyeXdAKTQRt/3ZODPs 8OmwPBB9xJ8cRcrGR50fOt7896h5qDRxeHMpgldqoiJnODgso2UKzLHTd8wiZXhVTlxi OM9Py7ibQhQRVV//etDZf5sBaM5aT1g2M2N6/UHXWndZRgzQ/ydcavQg/F5MU00IXJos aoo/FufY34tDDXGXsh1yldxHz6cpxZ724nDlOSyLzsA/rj4ZzGYlXY7nd7zNV0MXenu0 ejWg== X-Gm-Message-State: AOJu0Yy3ZgW+4Iu7m8q9WlYSkykFNSqaGn3CLQtBvSmXr7+I531Xc9qy kn9vtSOUSmW5T5F/RwZ2e3z6OI+ntBIPILkGZxlhee/+DBs54N4e3BUt61KTDfqkzL3Ndc04GHH pRiPX1opOgTQXnShQR+bIkqj6CPqyqLSgo1uriCH6fEQsKw3oTXq+wZF0K5efS0b7orzVsPp5hm LPqidS2As3FsccGxush8T6tJEtJNXinmAqkA== X-Gm-Gg: AZuq6aKf3Q17VnWCFhHSdmSOl7X9vE+iq7Mw2HqkKkMZHhY+GJVVO86g7Dx9dblWJCK JQmuYVS/HdeAjAAANroPnO23nKRQ0D3GIeP83CLo7rYdNyF6Ebns9pcSsHmTSXe5fo5aZNQ0oDb RPFswVVNDRiAiPr81AoWtYdyHABFsxY11aExeArajhLa1LcktltwZb250TqNeryKaR6X81x4tIL wD0IH1xW/vPBbPIJ+NMOlrJoOcxu0G9Gfj7JrKUdpi08OMJN+8JyvJK8mv03OEe2TDZQ8MmYgYM Q6OMMYJbRmiDyIZmAPeDnnLlFzMBTPM6dtUBtIHkMVZLpi52OTt9W/hQiF4CQsPopwE25DGBm7t 8nHncT/i8XUzEIJhUPbcqA9Hk59mafkWeDayMgrY8gWBzUw== X-Received: by 2002:a05:600c:3b08:b0:480:1c69:9d36 with SMTP id 5b1f17b1804b1-483a95eacf7mr83579905e9.17.1771770541025; Sun, 22 Feb 2026 06:29:01 -0800 (PST) X-Received: by 2002:a05:600c:3b08:b0:480:1c69:9d36 with SMTP id 5b1f17b1804b1-483a95eacf7mr83579475e9.17.1771770540516; Sun, 22 Feb 2026 06:29:00 -0800 (PST) Date: Sun, 22 Feb 2026 09:28:57 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Jonathan Cameron , Davidlohr Bueso , Igor Mammedov , Ani Sinha Subject: [PULL 18/33] hw/cxl: Update CXL Fixed Memory Window ACPI description to include Back Invalidate support. Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -4 X-Spam_score: -0.5 X-Spam_bar: / X-Spam_report: (-0.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770785504154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jonathan Cameron Defaults for these windows has always been to enable anything QEMU supports. With the addition of back invalidate support it is necessary to specify that host windows support this. CXL emulation is currently only suitable for software stack verification. The relaxation of the restrictions on this window to include BI have no affect on the OS until BI capable devices are added and until now these have not existed. As such no backwards compatibility impacts are expected from this change. Reviewed-by: Davidlohr Bueso Signed-off-by: Jonathan Cameron Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260204170936.43959-5-Jonathan.Cameron@huawei.com> --- hw/acpi/cxl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/acpi/cxl.c b/hw/acpi/cxl.c index 75edb2c0a6..f92f7fa3d5 100644 --- a/hw/acpi/cxl.c +++ b/hw/acpi/cxl.c @@ -172,7 +172,7 @@ static void cedt_build_cfmws(CXLFixedWindow *fw, Aml *c= edt) build_append_int_noprefix(table_data, fw->enc_int_gran, 4); =20 /* Window Restrictions */ - build_append_int_noprefix(table_data, 0x0f, 2); + build_append_int_noprefix(table_data, 0x2f, 2); =20 /* QTG ID */ build_append_int_noprefix(table_data, 0, 2); --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770651; cv=none; d=zohomail.com; s=zohoarc; b=XEeIWuCQDfcXFiX9BQPggCrpvAj5k/hCJpnTfUQzpVj3H2bezheoDaxI1CuQG/6gmFTHQdj7MRCrlLvC1ty0fLbLbmWe6YFg3H5ov/8W5F0TTPnKgwOPs0QNHblgtaxXkoHkflioecAC7nRezMV5orGv08STa2NYKJdNd4DaZD8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770651; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=wDeoaasGwmmImpda4GgNNJiqYPXvoxtfs4CRNeFN19M=; b=UbY+E9ENDSu/aG6xdSypeiyYE2Pf/3BffZOk/O7SiztOY0h74xKZyDbyB9iutLunRYdiRfXMcnogCBfoazazxrUR4W78Q1jhckSprwe1xmlYg/3MozwLC15jXNb9JmgxGsSsMpJDYg7veOmylSysqL/vK+gjAvB0QCjkS1gMyts= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770651911654.0414500542879; Sun, 22 Feb 2026 06:30:51 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASP-0008Bc-5u; Sun, 22 Feb 2026 09:29:13 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASK-00089J-Fr for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:08 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASJ-0006or-2e for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:08 -0500 Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-171-0tjHwVCKNIOH1GJEy1hIaQ-1; Sun, 22 Feb 2026 09:29:04 -0500 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-4836bf1a920so38838755e9.3 for ; Sun, 22 Feb 2026 06:29:04 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483a4e8d392sm164527995e9.2.2026.02.22.06.29.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:29:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770546; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=wDeoaasGwmmImpda4GgNNJiqYPXvoxtfs4CRNeFN19M=; b=GKbS2P0lNdZ7otjGlNJf32ELZGwbhCJ8c2r/6hgBMaWf4JohupfA6vTmmk4vD7/uaELEf+ MAIHOVRAkDG5tEWQO9HwKMMEjtFNM63B2WQBU9vCl44q9gW3ouY51+Pdfh87oAfqq7X4uk uX3w0xIIvqDAH+sPG/xi2VUXRN3nzC0= X-MC-Unique: 0tjHwVCKNIOH1GJEy1hIaQ-1 X-Mimecast-MFC-AGG-ID: 0tjHwVCKNIOH1GJEy1hIaQ_1771770543 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770543; x=1772375343; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=wDeoaasGwmmImpda4GgNNJiqYPXvoxtfs4CRNeFN19M=; b=qm7IEJ4hNBR28QLyvewWJe/nKSpM4TyPeUmk9tlkIxierm6WL+247wu6YImI8R3yt/ BPv05jMHjDf0gy1xgpYa6tlO2dBTg06dzYYmaHHmYisKcVeoyCDZeX5WSYkTRBql4Jll wRQO2ebkHsA3lFAsVygbtt0a5Knep+O69EG88GN5f4SOfzvfGA53xBHdDOfBIUEr7Brc 3gaMc+k8dAfMINbcoQt75pqh6aTMbdSe2LFZUhUAwtfZQI0blr7juJ95e53yr/viGPwj ko75Ki9jofU+dspzVPvu/CQ4jIwmkRQd61HJXcrFoWAHKooP+Jto7m+evboOHdxHEC+w ea3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770543; x=1772375343; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wDeoaasGwmmImpda4GgNNJiqYPXvoxtfs4CRNeFN19M=; b=PL9THQcWgr6zt0ZkFQFv1PlCcCHGuApN0T4CI2sfp8mYHmFeMP0MNiTl1Hw5ZkWJpC 0ffA4jp3p47ep/QSoSEBm01h4qIAAKDikpNG7YDVZo/yRavZ0LBoZ+Vgnu6wKF/YNBic Y+UpdCpjNIgyK3q4GB03t9eX15FxsaGXWxB5damngtLr9TKRkT8BOneiSUEYBoVRHdp0 j07gIZV2swExildvQb1ejeD9eqNbcZxjfXqyWELZIqr3QWGVk97R4QbpP09oks/ttq3s l1rmjtXLNVWiWPFywBGmIpZRVLN1SlI4tqdyVXPLJQwML2bSrU0Ah15ur3imGEhkmiBD 4/iQ== X-Gm-Message-State: AOJu0Yz5vv+681AEZxkxP/HWU/CLalX5foA/zdQIgokCyDI7t31WqigN S8xvRdWE8wvPKH0uwZ0slcMmJ+L8oa+bnMD0eOBTd5aVfGIDN9gyu8rPkmcgsYabLl1OA4DBrsx QBxKJJkJtp1JXuz3gytF/nb5JRzidTF18dhBYdOuN1XkoFnG2QlZzmCS6QiHvS2zlNoS8oOU4tN kXqsT0qTjcs5AEy4OIbJ7VTVLL4wRTM0X1uA== X-Gm-Gg: AZuq6aI7760OL7Rq7soT5U9Ws0bd76S/5oLkHLyfJSDK0BJCsA6wOJ0G6hoPP4Hjgn2 Y0dAH14ZvwxwhGifJ7yuzHLHGhb0MPu9ZKJbbOwh3XxWqXccTZtLq8oWVeP1qlIK7umhNt5yHV4 2Nw8+RoMwdiu0D7vJCnj4HzkSRRTCIJwaF3MDKJ4Kp2VuAXz/5NmAgKOA53nYfTGTEyUJYC3oV1 MBWFuioUrEBparMfT9i7syqReWl3FFUX8Jcw3XdVNVbjgsTrYbYkTpjVgMirjLfrdveAtt1P4oT BqUKMWTxpQNiNcfip3+rD+IOxIFQUuriW8vmhYp8Tpbijylfpys9vA1SD2ixWz3cNFv3YPI16KJ 0UNEJYaYgWC/b6nkMoN35JWKNqVoTAQUl6v6TiwYSrdSEwg== X-Received: by 2002:a05:600c:6298:b0:477:b734:8c53 with SMTP id 5b1f17b1804b1-483a95fc1b2mr94599295e9.12.1771770543162; Sun, 22 Feb 2026 06:29:03 -0800 (PST) X-Received: by 2002:a05:600c:6298:b0:477:b734:8c53 with SMTP id 5b1f17b1804b1-483a95fc1b2mr94598835e9.12.1771770542624; Sun, 22 Feb 2026 06:29:02 -0800 (PST) Date: Sun, 22 Feb 2026 09:29:00 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Jonathan Cameron , Igor Mammedov , Ani Sinha Subject: [PULL 19/33] tests/acpi/cxl: Update CEDT.cxl to allow BI in CFWMS Message-ID: <26cd3f8d96630d5735277a7fd5d5bc80fc8bb714.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -4 X-Spam_score: -0.5 X-Spam_bar: / X-Spam_report: (-0.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770653193158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jonathan Cameron With the addition of back invalidate support in the CXL emulation relax the restriction on the CXL Fixed Memory Window Structures so all advertised ranges continue to support being used with all features that QEMU emulates. [064h 0100 001h] Subtable Type : 01 [CXL Fixed Memory Window = Structure] [065h 0101 001h] Reserved : 00 [066h 0102 002h] Length : 0028 [068h 0104 004h] Reserved : 00000000 [06Ch 0108 008h] Window base address : 0000000110000000 [074h 0116 008h] Window size : 0000000100000000 [07Ch 0124 001h] Interleave Members : 00 [07Dh 0125 001h] Interleave Arithmetic : 00 [07Eh 0126 002h] Reserved : 0000 [080h 0128 004h] Granularity : 00000005 [084h 0132 002h] Restrictions : 002F # Changed from 000F [086h 0134 002h] QtgId : 0000 [088h 0136 004h] First Target : 0000000C Signed-off-by: Jonathan Cameron Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260204170936.43959-6-Jonathan.Cameron@huawei.com> --- tests/data/acpi/x86/q35/CEDT.cxl | Bin 184 -> 184 bytes tests/qtest/bios-tables-test-allowed-diff.h | 1 - 2 files changed, 1 deletion(-) diff --git a/tests/data/acpi/x86/q35/CEDT.cxl b/tests/data/acpi/x86/q35/CED= T.cxl index ff8203af070241bd23dd0eb8a51460692bb7d229..c35f3882eee67aa5613af427234= d1ccd196aa249 100644 GIT binary patch delta 36 scmdnNxPy_)+0`Xv2Ll5G (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177177058224597.53268165540248; Sun, 22 Feb 2026 06:29:42 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASS-0008Da-1f; Sun, 22 Feb 2026 09:29:17 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASN-0008BB-JO for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:12 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASL-0006p3-61 for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:11 -0500 Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-308-GiRMw8rGMFCVUXcSffzFdw-1; Sun, 22 Feb 2026 09:29:07 -0500 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-4376e25bb4dso2516790f8f.0 for ; Sun, 22 Feb 2026 06:29:07 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970d40004sm12599238f8f.21.2026.02.22.06.29.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:29:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770548; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=g5dVWYVLbeibZWFn1PV9MIeqQfGL9fhxO69u5qaMMHI=; b=ZvijpPMEXLlJxr1kn0jg4AC9eVewTkyHAcvpTCXrpvNp7DRTWERrmrAOxorLGzwzdc5Whx wcDuxv2DlhUWB8Ye43urCIJrRxZCMmZno/zi2WjpqLXkwZgwkoo5JdBrwR51htUp1Sa0v8 Sk4FEJQxHVWHcqrs3GAh70t9Yk4TAKo= X-MC-Unique: GiRMw8rGMFCVUXcSffzFdw-1 X-Mimecast-MFC-AGG-ID: GiRMw8rGMFCVUXcSffzFdw_1771770546 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770546; x=1772375346; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=g5dVWYVLbeibZWFn1PV9MIeqQfGL9fhxO69u5qaMMHI=; b=WbZB3K3rfkIr/Jz5mP8R1hx4TU8P5swpwCqZYg2hXxfaU/oiOqOCyy7rmCKF4nvnZd Iv3DrT5PCz2EVwAzRfpWeIN/mESt1T5UIbkbUzf/hwUJdP103haLMAAcyL/SwppSlPjG X6JZnV5OAEbqXgU3gIkrJfhqs7sHQ4gbLTxybavSOpvdwn/IlQJF5KIstz5UZAz0/9TG rf3cGgetJIubtk8qvTo9FoZpJcy7B9eoxgTtSBrhCz9QX36D95QIel+cl7nVej5LFIms MTLqsOI88cwu76yFDp8jgG2GuLmrSCLnYUxTVU7u/rx+znBHwLvbiPbh2UiZJRE+yKI6 FxOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770546; x=1772375346; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=g5dVWYVLbeibZWFn1PV9MIeqQfGL9fhxO69u5qaMMHI=; b=IHa+69BkgprgXCGKXszPs/A8fILtuugDrXoxSRTPaXZhiJoxuK5GQBGEvZzaiEatBx v/ENwL0YXJyQkPeOqcG7D7pQb9faGkx8ibP7Dr3VAJITJMVDmcAIoJ7UjEqnYCtnUXZB RGHd6ZQjQCWaPoVMbePANpGlouS2gn8R5QALAplJ6tFxN1Pt9glAjYtaiD3Y4YYvOqDs D6BQ4z2nxig607pJ+KuxzGfleZnwdvZ+nTcneCiXNBS4VTAgHwdtGnri2tvfVSjT/2li r4xitAC1uXzmv0BKSUAiCu1LdSbrKbXIIWdTp+VFogWLcM8lQLSaPrvFUwuoAowL+h3x 4mwQ== X-Gm-Message-State: AOJu0Yw3UbwwyjAWmNkLylDceW1ZVOzrQZOkNCDwRFG5LoHFyNys2Nkp hjJCjlNLx7Yya4HtZBURo6uD396hL8yduSSQ02CyCtuq022PHtIYTaFXHcwku2W6uqeGc7VPG/M miYL5m9tyBiU3gSHxxFaKg9qwTxKRGNKFaiw3vlKNJgqJmzn8ktYd6mor5o/30LYr11X+ob5knL 5JTQLA349R4p/4SOzrIveHARssvzvhy4V31Q== X-Gm-Gg: AZuq6aIWLKKkzRA3wi3pMvrZUurcZy1FQGoJDEhRIIGk7YNlOsxuV2l67fJsoaFApyM A3Yg66W7NdnCoh/YH+2K3nGo/vBRs3UxJHHExPX3QgN/LGv1RhcsV61FIg4WccgOptLtzj0eO1m 107/ACsQLJzH72QaE9rpL9IZdeUF4mp2k9jEp3876WYlJ3I+yeulluF6LV3XSORSr25a09Q/cgT aCgJIPs1k/y2PDhVHZU9N/8/0C+Ni8iRn2ntgu2l5EkrgVE6sl45rCx5oE/XpgVMQdE2KQ7xoLK woHMMqbzQNU+EBOxHIKejNTIp8ilhXfM4ztKVZYnbaF9RBDHIqrLhCXQKw56k9kVVBT2ONKfzzo rwfTTIEk3oisekue7c5fJzmqZmqpuAXv3CDm7cUM9tm6fMg== X-Received: by 2002:a5d:5888:0:b0:436:1946:c186 with SMTP id ffacd0b85a97d-4396f16e368mr11080799f8f.10.1771770545702; Sun, 22 Feb 2026 06:29:05 -0800 (PST) X-Received: by 2002:a5d:5888:0:b0:436:1946:c186 with SMTP id ffacd0b85a97d-4396f16e368mr11080748f8f.10.1771770545007; Sun, 22 Feb 2026 06:29:05 -0800 (PST) Date: Sun, 22 Feb 2026 09:29:02 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Davidlohr Bueso , Dongjoo Seo , Jonathan Cameron , Pierrick Bouvier , Fan Ni , Marcel Apfelbaum Subject: [PULL 20/33] hw/cxl: Support type3 HDM-DB Message-ID: <88ac457c88c237e1e025e88f71d8d1a2ff729aed.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770585225158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Davidlohr Bueso Add basic plumbing for memory expander devices that support Back Invalidation. This introduces a 'hdm-db=3Don|off' parameter and exposes the relevant BI RT/Decoder component cachemem registers. Some noteworthy properties: - Devices require enabling Flit mode across the CXL topology. - Explicit BI-ID commit is required. - HDM decoder support both host and dev coherency models. Tested-by: Dongjoo Seo Signed-off-by: Davidlohr Bueso Signed-off-by: Jonathan Cameron Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260204170936.43959-7-Jonathan.Cameron@huawei.com> --- docs/system/devices/cxl.rst | 23 +++++ hw/cxl/cxl-component-utils.c | 142 ++++++++++++++++++++++++++-- hw/mem/cxl_type3.c | 9 +- hw/pci-bridge/cxl_downstream.c | 2 +- hw/pci-bridge/cxl_root_port.c | 3 +- hw/pci-bridge/cxl_upstream.c | 2 +- hw/pci-bridge/pci_expander_bridge.c | 2 +- include/hw/cxl/cxl_component.h | 54 ++++++++++- include/hw/cxl/cxl_device.h | 3 + 9 files changed, 225 insertions(+), 15 deletions(-) diff --git a/docs/system/devices/cxl.rst b/docs/system/devices/cxl.rst index ca15a0da1c..9d0771cdfd 100644 --- a/docs/system/devices/cxl.rst +++ b/docs/system/devices/cxl.rst @@ -384,6 +384,29 @@ An example of 4 devices below a switch suitable for 1,= 2 or 4 way interleave:: -device cxl-type3,bus=3Dswport3,persistent-memdev=3Dcxl-mem3,lsa=3Dcxl-l= sa3,id=3Dcxl-pmem3,sn=3D0x4 \ -M cxl-fmw.0.targets.0=3Dcxl.1,cxl-fmw.0.size=3D4G,cxl-fmw.0.interleave-= granularity=3D4k =20 +An example of 4 type3 devices with volatile memory below a switch. Two of = the devices +use HDM-DB for coherence, which requires operating in Flit mode:: + + qemu-system-x86_64 -M q35,cxl=3Don -m 4G,maxmem=3D8G,slots=3D8 -smp 4 \ + ... + -object memory-backend-ram,id=3Dcxl-mem0,share=3Don,size=3D256M \ + -object memory-backend-ram,id=3Dcxl-mem1,share=3Don,size=3D256M \ + -object memory-backend-ram,id=3Dcxl-mem2,share=3Don,size=3D256M \ + -object memory-backend-ram,id=3Dcxl-mem3,share=3Don,size=3D256M \ + -device pxb-cxl,bus_nr=3D12,bus=3Dpcie.0,id=3Dcxl.1 \ + -device cxl-rp,port=3D0,bus=3Dcxl.1,id=3Droot_port0,chassis=3D0,slot=3D0= \ + -device cxl-rp,port=3D1,bus=3Dcxl.1,id=3Droot_port1,chassis=3D0,slot=3D1= \ + -device cxl-upstream,bus=3Droot_port0,id=3Dus0,x-256b-flit=3Don \ + -device cxl-downstream,port=3D0,bus=3Dus0,id=3Dswport0,chassis=3D0,slot= =3D4 \ + -device cxl-type3,bus=3Dswport0,volatile-memdev=3Dcxl-mem0,id=3Dcxl-mem0= ,sn=3D0x1,x-256b-flit=3Don,hdm-db=3Don \ + -device cxl-downstream,port=3D1,bus=3Dus0,id=3Dswport1,chassis=3D0,slot= =3D5 \ + -device cxl-type3,bus=3Dswport1,volatile-memdev=3Dcxl-mem1,id=3Dcxl-mem1= ,sn=3D0x2,x-256b-flit=3Don,hdm-db=3Don \ + -device cxl-downstream,port=3D2,bus=3Dus0,id=3Dswport2,chassis=3D0,slot= =3D6 \ + -device cxl-type3,bus=3Dswport2,volatile-memdev=3Dcxl-mem2,id=3Dcxl-mem2= ,sn=3D0x3 \ + -device cxl-downstream,port=3D3,bus=3Dus0,id=3Dswport3,chassis=3D0,slot= =3D7 \ + -device cxl-type3,bus=3Dswport3,volatile-memdev=3Dcxl-mem3,id=3Dcxl-mem3= ,sn=3D0x4 \ + -M cxl-fmw.0.targets.0=3Dcxl.1,cxl-fmw.0.size=3D4G,cxl-fmw.0.interleave-= granularity=3D4k + A simple arm/virt example featuring a single direct connected CXL Type 3 Volatile Memory device:: =20 diff --git a/hw/cxl/cxl-component-utils.c b/hw/cxl/cxl-component-utils.c index 91770f103a..a7d36e1128 100644 --- a/hw/cxl/cxl-component-utils.c +++ b/hw/cxl/cxl-component-utils.c @@ -71,10 +71,40 @@ static uint64_t cxl_cache_mem_read_reg(void *opaque, hw= addr offset, case 4: if (cregs->special_ops && cregs->special_ops->read) { return cregs->special_ops->read(cxl_cstate, offset, 4); - } else { - QEMU_BUILD_BUG_ON(sizeof(*cregs->cache_mem_registers) !=3D 4); - return cregs->cache_mem_registers[offset / 4]; } + + QEMU_BUILD_BUG_ON(sizeof(*cregs->cache_mem_registers) !=3D 4); + + if (offset =3D=3D A_CXL_BI_RT_STATUS || + offset =3D=3D A_CXL_BI_DECODER_STATUS) { + int type; + uint64_t started; + + type =3D (offset =3D=3D A_CXL_BI_RT_STATUS) ? + CXL_BISTATE_RT : CXL_BISTATE_DECODER; + started =3D cxl_cstate->bi_state[type].last_commit; + + if (started) { + uint32_t *cache_mem =3D cregs->cache_mem_registers; + uint32_t val =3D cache_mem[offset / 4]; + uint64_t now; + int set; + + now =3D qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL); + /* arbitrary 100 ms to do the commit */ + set =3D !!(now >=3D started + 100); + + if (offset =3D=3D A_CXL_BI_RT_STATUS) { + val =3D FIELD_DP32(val, CXL_BI_RT_STATUS, COMMITTED, s= et); + } else { + val =3D FIELD_DP32(val, CXL_BI_DECODER_STATUS, COMMITT= ED, + set); + } + stl_le_p((uint8_t *)cache_mem + offset, val); + } + } + + return cregs->cache_mem_registers[offset / 4]; case 8: qemu_log_mask(LOG_UNIMP, "CXL 8 byte cache mem registers not implemented\n"); @@ -118,6 +148,47 @@ static void dumb_hdm_handler(CXLComponentState *cxl_cs= tate, hwaddr offset, stl_le_p((uint8_t *)cache_mem + offset, value); } =20 +static void bi_handler(CXLComponentState *cxl_cstate, hwaddr offset, + uint32_t value) +{ + ComponentRegisters *cregs =3D &cxl_cstate->crb; + uint32_t sts, *cache_mem =3D cregs->cache_mem_registers; + bool to_commit =3D false; + int type =3D 0; /* Unused value - work around for compiler warning */ + + switch (offset) { + case A_CXL_BI_RT_CTRL: + to_commit =3D FIELD_EX32(value, CXL_BI_RT_CTRL, COMMIT); + if (to_commit) { + sts =3D cxl_cache_mem_read_reg(cxl_cstate, + R_CXL_BI_RT_STATUS, 4); + sts =3D FIELD_DP32(sts, CXL_BI_RT_STATUS, COMMITTED, 0); + stl_le_p((uint8_t *)cache_mem + R_CXL_BI_RT_STATUS, sts); + type =3D CXL_BISTATE_RT; + } + break; + case A_CXL_BI_DECODER_CTRL: + to_commit =3D FIELD_EX32(value, CXL_BI_DECODER_CTRL, COMMIT); + if (to_commit) { + sts =3D cxl_cache_mem_read_reg(cxl_cstate, + R_CXL_BI_DECODER_STATUS, 4); + sts =3D FIELD_DP32(sts, CXL_BI_DECODER_STATUS, COMMITTED, 0); + stl_le_p((uint8_t *)cache_mem + R_CXL_BI_DECODER_STATUS, sts); + type =3D CXL_BISTATE_DECODER; + } + break; + default: + break; + } + + if (to_commit) { + cxl_cstate->bi_state[type].last_commit =3D + qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL); + } + + stl_le_p((uint8_t *)cache_mem + offset, value); +} + static void cxl_cache_mem_write_reg(void *opaque, hwaddr offset, uint64_t = value, unsigned size) { @@ -141,6 +212,9 @@ static void cxl_cache_mem_write_reg(void *opaque, hwadd= r offset, uint64_t value, if (offset >=3D A_CXL_HDM_DECODER_CAPABILITY && offset <=3D A_CXL_HDM_DECODER3_TARGET_LIST_HI) { dumb_hdm_handler(cxl_cstate, offset, value); + } else if (offset =3D=3D A_CXL_BI_RT_CTRL || + offset =3D=3D A_CXL_BI_DECODER_CTRL) { + bi_handler(cxl_cstate, offset, value); } else { cregs->cache_mem_registers[offset / 4] =3D value; } @@ -230,7 +304,7 @@ static void ras_init_common(uint32_t *reg_state, uint32= _t *write_msk) } =20 static void hdm_init_common(uint32_t *reg_state, uint32_t *write_msk, - enum reg_type type) + enum reg_type type, bool bi) { int decoder_count =3D CXL_HDM_DECODER_COUNT; int hdm_inc =3D R_CXL_HDM_DECODER1_BASE_LO - R_CXL_HDM_DECODER0_BASE_L= O; @@ -255,7 +329,9 @@ static void hdm_init_common(uint32_t *reg_state, uint32= _t *write_msk, UIO_DECODER_COUNT, 0); ARRAY_FIELD_DP32(reg_state, CXL_HDM_DECODER_CAPABILITY, MEMDATA_NXM_CA= P, 0); ARRAY_FIELD_DP32(reg_state, CXL_HDM_DECODER_CAPABILITY, - SUPPORTED_COHERENCY_MODEL, 0); /* Unknown */ + SUPPORTED_COHERENCY_MODEL, + /* host+dev or Unknown */ + type =3D=3D CXL2_TYPE3_DEVICE && bi ? 3 : 0); ARRAY_FIELD_DP32(reg_state, CXL_HDM_DECODER_GLOBAL_CONTROL, HDM_DECODER_ENABLE, 0); write_msk[R_CXL_HDM_DECODER_GLOBAL_CONTROL] =3D 0x3; @@ -278,9 +354,43 @@ static void hdm_init_common(uint32_t *reg_state, uint3= 2_t *write_msk, } } =20 +static void bi_rt_init_common(uint32_t *reg_state, uint32_t *write_msk) +{ + /* switch usp must commit the new BI-ID, timeout of 2secs */ + ARRAY_FIELD_DP32(reg_state, CXL_BI_RT_CAPABILITY, EXPLICIT_COMMIT, 1); + + ARRAY_FIELD_DP32(reg_state, CXL_BI_RT_CTRL, COMMIT, 0); + write_msk[R_CXL_BI_RT_CTRL] =3D 0x1; + + ARRAY_FIELD_DP32(reg_state, CXL_BI_RT_STATUS, COMMITTED, 0); + ARRAY_FIELD_DP32(reg_state, CXL_BI_RT_STATUS, ERR_NOT_COMMITTED, 0); + ARRAY_FIELD_DP32(reg_state, CXL_BI_RT_STATUS, COMMIT_TMO_SCALE, 0x6); + ARRAY_FIELD_DP32(reg_state, CXL_BI_RT_STATUS, COMMIT_TMO_BASE, 0x2); +} + +static void bi_decoder_init_common(uint32_t *reg_state, uint32_t *write_ms= k, + enum reg_type type) +{ + ARRAY_FIELD_DP32(reg_state, CXL_BI_DECODER_CAPABILITY, HDM_D, 0); + /* switch dsp must commit the new BI-ID, timeout of 2secs */ + ARRAY_FIELD_DP32(reg_state, CXL_BI_DECODER_CAPABILITY, EXPLICIT_COMMIT, + (type !=3D CXL2_ROOT_PORT && type !=3D CXL2_TYPE3_DEV= ICE)); + + ARRAY_FIELD_DP32(reg_state, CXL_BI_DECODER_CTRL, BI_FW, 0); + ARRAY_FIELD_DP32(reg_state, CXL_BI_DECODER_CTRL, BI_ENABLE, 0); + ARRAY_FIELD_DP32(reg_state, CXL_BI_DECODER_CTRL, COMMIT, 0); + write_msk[R_CXL_BI_DECODER_CTRL] =3D 0x7; + + ARRAY_FIELD_DP32(reg_state, CXL_BI_DECODER_STATUS, COMMITTED, 0); + ARRAY_FIELD_DP32(reg_state, CXL_BI_DECODER_STATUS, ERR_NOT_COMMITTED, = 0); + ARRAY_FIELD_DP32(reg_state, CXL_BI_DECODER_STATUS, COMMIT_TMO_SCALE, 0= x6); + ARRAY_FIELD_DP32(reg_state, CXL_BI_DECODER_STATUS, COMMIT_TMO_BASE, 0x= 2); +} + void cxl_component_register_init_common(uint32_t *reg_state, uint32_t *write_msk, - enum reg_type type) + enum reg_type type, + bool bi) { int caps =3D 0; =20 @@ -320,7 +430,7 @@ void cxl_component_register_init_common(uint32_t *reg_s= tate, case CXL2_LOGICAL_DEVICE: /* + HDM */ init_cap_reg(HDM, 5, 1); - hdm_init_common(reg_state, write_msk, type); + hdm_init_common(reg_state, write_msk, type, bi); /* fallthrough */ case CXL2_DOWNSTREAM_PORT: case CXL2_DEVICE: @@ -335,6 +445,24 @@ void cxl_component_register_init_common(uint32_t *reg_= state, abort(); } =20 + /* back invalidate */ + if (bi) { + switch (type) { + case CXL2_UPSTREAM_PORT: + init_cap_reg(BI_RT, 11, CXL_BI_RT_CAP_VERSION); + bi_rt_init_common(reg_state, write_msk); + break; + case CXL2_ROOT_PORT: + case CXL2_DOWNSTREAM_PORT: + case CXL2_TYPE3_DEVICE: + init_cap_reg(BI_DECODER, 12, CXL_BI_DECODER_CAP_VERSION); + bi_decoder_init_common(reg_state, write_msk, type); + break; + default: + break; + } + } + ARRAY_FIELD_DP32(reg_state, CXL_CAPABILITY_HEADER, ARRAY_SIZE, caps); #undef init_cap_reg } diff --git a/hw/mem/cxl_type3.c b/hw/mem/cxl_type3.c index 328322b1ef..4739239da3 100644 --- a/hw/mem/cxl_type3.c +++ b/hw/mem/cxl_type3.c @@ -748,6 +748,11 @@ static bool cxl_setup_memory(CXLType3Dev *ct3d, Error = **errp) return false; } =20 + if (!ct3d->flitmode && ct3d->hdmdb) { + error_setg(errp, "hdm-db requires operating in 256b flit"); + return false; + } + if (ct3d->hostvmem) { MemoryRegion *vmr; char *v_name; @@ -1317,7 +1322,8 @@ static void ct3d_reset(DeviceState *dev) =20 pcie_cap_fill_link_ep_usp(PCI_DEVICE(dev), ct3d->width, ct3d->speed, ct3d->flitmode); - cxl_component_register_init_common(reg_state, write_msk, CXL2_TYPE3_DE= VICE); + cxl_component_register_init_common(reg_state, write_msk, + CXL2_TYPE3_DEVICE, ct3d->hdmdb); cxl_device_register_init_t3(ct3d, CXL_T3_MSIX_MBOX); =20 /* @@ -1356,6 +1362,7 @@ static const Property ct3_props[] =3D { DEFINE_PROP_PCIE_LINK_WIDTH("x-width", CXLType3Dev, width, PCIE_LINK_WIDTH_16), DEFINE_PROP_BOOL("x-256b-flit", CXLType3Dev, flitmode, false), + DEFINE_PROP_BOOL("hdm-db", CXLType3Dev, hdmdb, false), }; =20 static uint64_t get_lsa_size(CXLType3Dev *ct3d) diff --git a/hw/pci-bridge/cxl_downstream.c b/hw/pci-bridge/cxl_downstream.c index 64086d8ec2..320818a8f1 100644 --- a/hw/pci-bridge/cxl_downstream.c +++ b/hw/pci-bridge/cxl_downstream.c @@ -39,7 +39,7 @@ static void latch_registers(CXLDownstreamPort *dsp) uint32_t *write_msk =3D dsp->cxl_cstate.crb.cache_mem_regs_write_mask; =20 cxl_component_register_init_common(reg_state, write_msk, - CXL2_DOWNSTREAM_PORT); + CXL2_DOWNSTREAM_PORT, true); } =20 /* TODO: Look at sharing this code across all CXL port types */ diff --git a/hw/pci-bridge/cxl_root_port.c b/hw/pci-bridge/cxl_root_port.c index 5641048084..e2093ac39e 100644 --- a/hw/pci-bridge/cxl_root_port.c +++ b/hw/pci-bridge/cxl_root_port.c @@ -101,7 +101,8 @@ static void latch_registers(CXLRootPort *crp) uint32_t *reg_state =3D crp->cxl_cstate.crb.cache_mem_registers; uint32_t *write_msk =3D crp->cxl_cstate.crb.cache_mem_regs_write_mask; =20 - cxl_component_register_init_common(reg_state, write_msk, CXL2_ROOT_POR= T); + cxl_component_register_init_common(reg_state, write_msk, CXL2_ROOT_POR= T, + true); } =20 static void build_dvsecs(PCIDevice *d, CXLComponentState *cxl) diff --git a/hw/pci-bridge/cxl_upstream.c b/hw/pci-bridge/cxl_upstream.c index c352d11dc7..fb8d19539c 100644 --- a/hw/pci-bridge/cxl_upstream.c +++ b/hw/pci-bridge/cxl_upstream.c @@ -90,7 +90,7 @@ static void latch_registers(CXLUpstreamPort *usp) uint32_t *write_msk =3D usp->cxl_cstate.crb.cache_mem_regs_write_mask; =20 cxl_component_register_init_common(reg_state, write_msk, - CXL2_UPSTREAM_PORT); + CXL2_UPSTREAM_PORT, usp->flitmode); ARRAY_FIELD_DP32(reg_state, CXL_HDM_DECODER_CAPABILITY, TARGET_COUNT, = 8); } =20 diff --git a/hw/pci-bridge/pci_expander_bridge.c b/hw/pci-bridge/pci_expand= er_bridge.c index b6e2eb7969..11623a5666 100644 --- a/hw/pci-bridge/pci_expander_bridge.c +++ b/hw/pci-bridge/pci_expander_bridge.c @@ -300,7 +300,7 @@ static void pxb_cxl_dev_reset(DeviceState *dev) uint32_t *write_msk =3D cxl_cstate->crb.cache_mem_regs_write_mask; int dsp_count =3D 0; =20 - cxl_component_register_init_common(reg_state, write_msk, CXL2_RC); + cxl_component_register_init_common(reg_state, write_msk, CXL2_RC, fals= e); /* * The CXL specification allows for host bridges with no HDM decoders * if they only have a single root port. diff --git a/include/hw/cxl/cxl_component.h b/include/hw/cxl/cxl_component.h index 1f167d3ef7..ffc8220220 100644 --- a/include/hw/cxl/cxl_component.h +++ b/include/hw/cxl/cxl_component.h @@ -67,6 +67,8 @@ CXLx_CAPABILITY_HEADER(LINK, 2) CXLx_CAPABILITY_HEADER(HDM, 3) CXLx_CAPABILITY_HEADER(EXTSEC, 4) CXLx_CAPABILITY_HEADER(SNOOP, 5) +CXLx_CAPABILITY_HEADER(BI_RT, 6) +CXLx_CAPABILITY_HEADER(BI_DECODER, 7) =20 /* * Capability structures contain the actual registers that the CXL compone= nt @@ -211,10 +213,55 @@ HDM_DECODER_INIT(3); (CXL_IDE_REGISTERS_OFFSET + CXL_IDE_REGISTERS_SIZE) #define CXL_SNOOP_REGISTERS_SIZE 0x8 =20 -QEMU_BUILD_BUG_MSG((CXL_SNOOP_REGISTERS_OFFSET + - CXL_SNOOP_REGISTERS_SIZE) >=3D 0x1000, +#define CXL_BI_RT_CAP_VERSION 1 +#define CXL_BI_RT_REGISTERS_OFFSET \ + (CXL_SNOOP_REGISTERS_OFFSET + CXL_SNOOP_REGISTERS_SIZE) +#define CXL_BI_RT_REGISTERS_SIZE 0xC + +REG32(CXL_BI_RT_CAPABILITY, CXL_BI_RT_REGISTERS_OFFSET) + FIELD(CXL_BI_RT_CAPABILITY, EXPLICIT_COMMIT, 0, 1) +REG32(CXL_BI_RT_CTRL, CXL_BI_RT_REGISTERS_OFFSET + 0x4) + FIELD(CXL_BI_RT_CTRL, COMMIT, 0, 1) +REG32(CXL_BI_RT_STATUS, CXL_BI_RT_REGISTERS_OFFSET + 0x8) + FIELD(CXL_BI_RT_STATUS, COMMITTED, 0, 1) + FIELD(CXL_BI_RT_STATUS, ERR_NOT_COMMITTED, 1, 1) + FIELD(CXL_BI_RT_STATUS, COMMIT_TMO_SCALE, 8, 4) + FIELD(CXL_BI_RT_STATUS, COMMIT_TMO_BASE, 12, 4) + +/* CXL r3.2 8.2.4.27 - CXL BI Decoder Capability Structure */ +#define CXL_BI_DECODER_CAP_VERSION 1 +#define CXL_BI_DECODER_REGISTERS_OFFSET \ + (CXL_BI_RT_REGISTERS_OFFSET + CXL_BI_RT_REGISTERS_SIZE) +#define CXL_BI_DECODER_REGISTERS_SIZE 0xC + +REG32(CXL_BI_DECODER_CAPABILITY, CXL_BI_DECODER_REGISTERS_OFFSET) + FIELD(CXL_BI_DECODER_CAPABILITY, HDM_D, 0, 1) + FIELD(CXL_BI_DECODER_CAPABILITY, EXPLICIT_COMMIT, 1, 1) +REG32(CXL_BI_DECODER_CTRL, CXL_BI_DECODER_REGISTERS_OFFSET + 0x4) + FIELD(CXL_BI_DECODER_CTRL, BI_FW, 0, 1) + FIELD(CXL_BI_DECODER_CTRL, BI_ENABLE, 1, 1) + FIELD(CXL_BI_DECODER_CTRL, COMMIT, 2, 1) +REG32(CXL_BI_DECODER_STATUS, CXL_BI_DECODER_REGISTERS_OFFSET + 0x8) + FIELD(CXL_BI_DECODER_STATUS, COMMITTED, 0, 1) + FIELD(CXL_BI_DECODER_STATUS, ERR_NOT_COMMITTED, 1, 1) + FIELD(CXL_BI_DECODER_STATUS, COMMIT_TMO_SCALE, 8, 4) + FIELD(CXL_BI_DECODER_STATUS, COMMIT_TMO_BASE, 12, 4) + +QEMU_BUILD_BUG_MSG((CXL_BI_DECODER_REGISTERS_OFFSET + + CXL_BI_DECODER_REGISTERS_SIZE) >=3D 0x1000, "No space for registers"); =20 +/* track BI explicit commit handling for route table and decoder */ +enum { + CXL_BISTATE_RT =3D 0, + CXL_BISTATE_DECODER, + CXL_BISTATE_MAX +}; + +typedef struct bi_state { + uint64_t last_commit; /* last 0->1 transition */ +} BIState; + typedef struct component_registers { /* * Main memory region to be registered with QEMU core. @@ -259,6 +306,7 @@ typedef struct cxl_component { }; =20 CDATObject cdat; + BIState bi_state[CXL_BISTATE_MAX]; } CXLComponentState; =20 void cxl_component_register_block_init(Object *obj, @@ -266,7 +314,7 @@ void cxl_component_register_block_init(Object *obj, const char *type); void cxl_component_register_init_common(uint32_t *reg_state, uint32_t *write_msk, - enum reg_type type); + enum reg_type type, bool bi); =20 void cxl_component_create_dvsec(CXLComponentState *cxl_cstate, enum reg_type cxl_dev_type, uint16_t lengt= h, diff --git a/include/hw/cxl/cxl_device.h b/include/hw/cxl/cxl_device.h index 7d9236db8c..393f312217 100644 --- a/include/hw/cxl/cxl_device.h +++ b/include/hw/cxl/cxl_device.h @@ -770,6 +770,9 @@ struct CXLType3Dev { CXLMemSparingReadAttrs rank_sparing_attrs; CXLMemSparingWriteAttrs rank_sparing_wr_attrs; =20 + /* BI flows */ + bool hdmdb; + struct dynamic_capacity { HostMemoryBackend *host_dc; AddressSpace host_dc_as; --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770917; cv=none; d=zohomail.com; s=zohoarc; b=LEpElgTV9q3nLC+sw01fEYqcBEngJlN19XP6uaXT6LBcg5KEqZZQ5z6ZVmjv/ewGtXnCfojnSqyRiLiz289d/ZkrKVELbPRAtfkbcSuaz6qYbw/BoIDOpRBuxn4G2kcD4PczKEbGBBDuvKmfNMR3qCdhEf3A0LsDaF/v/ZzjBCM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770917; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=rgB949WAU4uCVPWaxAF4bhPoWYrxnuzG+Bl2uU3jGIo=; b=evIosJJW8Ob0I/3qa39j5sZih4FdWL6r8plneq3RVi9hXSzTopv3i10MI6jnA4R/HUI7n6Oec6WKsbWFJwHyhCfkgSRCHFYN9g91JYvGrRny9WS0Fqt89wvQRDzUrWKvYfrKgMOQvjuNWwgqPqHe0IpT204s6jaGumxQ2CetTD8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770917657614.3851382806591; Sun, 22 Feb 2026 06:35:17 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASn-0000R5-8p; Sun, 22 Feb 2026 09:29:37 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASQ-0008CH-56 for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:14 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASN-0006pI-94 for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:12 -0500 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-602-5ucY2ylnOHysOlcE73ukEw-1; Sun, 22 Feb 2026 09:29:09 -0500 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-4837a71903aso3184855e9.1 for ; Sun, 22 Feb 2026 06:29:09 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483a42eb84asm80113065e9.17.2026.02.22.06.29.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:29:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770550; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=rgB949WAU4uCVPWaxAF4bhPoWYrxnuzG+Bl2uU3jGIo=; b=G4aH0YyEuWaPjKijnk1v1a9bVG7p0WEFFG48b4ufXrpZSebWvqmfvTcCqo0k0SzwF/DgBx 2hsAsl+jaXp8qujX+WT91e9QeWCkR8QK0FyHJEJ9iKqd1roAGALE9ZsazApt+OGL0Egvyy TYPGfIYJOJ5w70pIYy/zVOOCVbiHHXg= X-MC-Unique: 5ucY2ylnOHysOlcE73ukEw-1 X-Mimecast-MFC-AGG-ID: 5ucY2ylnOHysOlcE73ukEw_1771770548 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770548; x=1772375348; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=rgB949WAU4uCVPWaxAF4bhPoWYrxnuzG+Bl2uU3jGIo=; b=iFg0P59vMGl9JFoc1mDAOV/ItvgxARXuBVi+SUaJ6W0zukT4j7EAoAHgGwx0adKtmK GL2mnmEmrLfLZSqGISW7o6ki0MbUa9Wc0sKmOFQCtllv+DDqN3JnD7La7fv9JVipz6BM a0ETfOMa/FzPwnVl/D7RNXcQeN2dQ7K3pULdbjoPvCz+d3KoSLfSAte1kEOz0r1C8N8C xmGXibbzL3IHkqGakymPb1+s6cyIWgD2DOA89KvAejcvfKprGhyRrkKhq+eoh7gZmoyf zIVhgoVGe2c7zK2pHtqSckF1dRAA6laCPRElnEnFVYvnDPwnvygUCvCFSORJnF2MOLMZ +Asw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770548; x=1772375348; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rgB949WAU4uCVPWaxAF4bhPoWYrxnuzG+Bl2uU3jGIo=; b=VLLUf5nkc435ohBYQwUkui19X/DC1p52wE/JN2ixHspMD7zy1y5Rjh02XNVcwjf9LI q9KQc1iogQ/LRBixcM1AYZPAEYqrrhcncioFvJsxopS4uGvDGyr8jjaAP7sZTkp4UWF6 yLuv9Qraxex/0e2sl0aOFMdUN6wprYoegJAaUmT8I7gGowHSi+RqgHt8plSdFzWBhC8A mFHVG+EFS4OLjWAmbdqRV/1HSm5ri2WWCwR7audyQla9gUkMoXenCmYangS91h6EOEbM KG9IGFIkZJUABgK94/KDrnwUPhtQnJFelsNb2S54SwavqiobNNw95cNPJwGUNRL0LyNQ ZSdA== X-Gm-Message-State: AOJu0YzPZ//gdcbmnaH6m95H90204oRx6VrdyuHJlqNSuU1deujDEOtK JHKkchAf09gb0roBfqrevmQTPqPk/PlrS0OMdiz1PVUme6mXEcmsatYJVadmfWZFPVYGRndWlaw murd1LROWzETNrof9fGO+iHnYAF5MgSKBwzW6VNIjl85kGSqwzGemQ41Nj3DK/zR9m/XEkbUBW9 ECzL4Ya24iGFKQwGhVSzMqmTqesbczzHwefQ== X-Gm-Gg: AZuq6aKOF3BiPBhc9AdV5shgxf23Di+W2LBkE/tPC5qH0gKc4CRb5B4OfTQxhy1d+/s YKyQ6f5aUhLCvhnZpPqs6TAG6Zd6OxCsWs6ACSONRz0dSR0SgpzwvZBOPXAY0qFJjRyXMwNDQNK 57H72+GCm1siSn8MMJ3PGmMgk3+hvLbdlu1OwMJE7ag+zEMtAIfw7eMaTKVlZpjSlZQHb3mLJ/t D1GSpUnZVU+x7j1/wBbl1xFE2SW333NW9TdgouXYQ4Gv2vWot3+MONg2NScdxYBxI1kfZatShrt KoK/7E1F2BUyK77lofZj3wordVLnEAL6CDa5J3MpKMXgbwtMJZPW+sWYTqxrXsi8vEYP4+nS/Tf H1HjsArb4iT/pi8f5rZBlWIXBB+lJRFRp8vQ8/hXLVIggmQ== X-Received: by 2002:a05:600c:820e:b0:482:e5d4:b7ca with SMTP id 5b1f17b1804b1-483a95f7d94mr85604315e9.8.1771770547852; Sun, 22 Feb 2026 06:29:07 -0800 (PST) X-Received: by 2002:a05:600c:820e:b0:482:e5d4:b7ca with SMTP id 5b1f17b1804b1-483a95f7d94mr85604035e9.8.1771770547363; Sun, 22 Feb 2026 06:29:07 -0800 (PST) Date: Sun, 22 Feb 2026 09:29:05 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Davidlohr Bueso , Jonathan.Cameron@huawei.com, Dongjoo Seo , Fan Ni Subject: [PULL 21/33] hw/cxl: Remove register special_ops->read() Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770917906158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Davidlohr Bueso ... this is unused, unlike its write counterpart. Scope needs to be added to avoid _Static_assert() immediately after a label. c23 makes this valid but before then it is compiler dependent. Suggested-by: Jonathan.Cameron@huawei.com Tested-by: Dongjoo Seo Signed-off-by: Davidlohr Bueso Signed-off-by: Jonathan Cameron Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260204170936.43959-8-Jonathan.Cameron@huawei.com> --- hw/cxl/cxl-component-utils.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/hw/cxl/cxl-component-utils.c b/hw/cxl/cxl-component-utils.c index a7d36e1128..07aabe331c 100644 --- a/hw/cxl/cxl-component-utils.c +++ b/hw/cxl/cxl-component-utils.c @@ -68,11 +68,7 @@ static uint64_t cxl_cache_mem_read_reg(void *opaque, hwa= ddr offset, ComponentRegisters *cregs =3D &cxl_cstate->crb; =20 switch (size) { - case 4: - if (cregs->special_ops && cregs->special_ops->read) { - return cregs->special_ops->read(cxl_cstate, offset, 4); - } - + case 4: { QEMU_BUILD_BUG_ON(sizeof(*cregs->cache_mem_registers) !=3D 4); =20 if (offset =3D=3D A_CXL_BI_RT_STATUS || @@ -105,6 +101,7 @@ static uint64_t cxl_cache_mem_read_reg(void *opaque, hw= addr offset, } =20 return cregs->cache_mem_registers[offset / 4]; + } case 8: qemu_log_mask(LOG_UNIMP, "CXL 8 byte cache mem registers not implemented\n"); --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770915; cv=none; d=zohomail.com; s=zohoarc; b=eLAxXaUtBALzHKgzG03k5066qSsaUPKbcnxJGbetVdibPdaXV7jJzxZvPbOtrN/2vivK0t0U/rYfqDG1SXOg71RYw9EVPPdmhdGm7sUJpKLOpINh3vxFPk4C+EfaWhyftmr3ftItciGheizD9wCGdJl1jn9yOD6zofeEF9kyEN4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770915; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=4A1n1SInCCQTIrX/1lNM4s5moTtIwvB3Wd7tcemWs8A=; b=U21QSac+sk61wc/kWCquX7k9IYxrA4PN8HSt3nh84/ydc/YDo7N7m1BSDRtSclsJBk83W5fV74kL0pDy8cTEdA0zz0gCBLCyEIwuUrb0DmPhtGyPrRMp9Aq1nwSLLyIfYRUEVHoSB3dRNn/Aop8+4XCHSebyaWSFlrJHxxAbQF8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770915271854.2486091201255; Sun, 22 Feb 2026 06:35:15 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASn-0000PL-6m; Sun, 22 Feb 2026 09:29:37 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASS-0008Di-Hc for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:17 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASP-0006qB-U6 for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:15 -0500 Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-353-mnHjmuMZMF608PiUHwEUkQ-1; Sun, 22 Feb 2026 09:29:11 -0500 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-43964455342so1755566f8f.0 for ; Sun, 22 Feb 2026 06:29:11 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970d4c60bsm11915907f8f.27.2026.02.22.06.29.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:29:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770552; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=4A1n1SInCCQTIrX/1lNM4s5moTtIwvB3Wd7tcemWs8A=; b=CiifNsGi1Y+wDk9kCugiXbi8fsXvIwVR6QFOplLrNYJWMlYC1TG0Cle/e57azI1HHkb71x gQLPD+Q4wuloUoJCOkEdKCY4pmwFYcRPT2QobD41L9E0WHjfT2rTSCzdtuaYJBlI3X1q0W ARRZawRv41BCZubpRhK69IZw8l/lZEw= X-MC-Unique: mnHjmuMZMF608PiUHwEUkQ-1 X-Mimecast-MFC-AGG-ID: mnHjmuMZMF608PiUHwEUkQ_1771770550 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770550; x=1772375350; darn=nongnu.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=4A1n1SInCCQTIrX/1lNM4s5moTtIwvB3Wd7tcemWs8A=; b=nysDU9bfwvPDK9UyYy6Nn9PEMbKVKawe5TXJjIxL9w4s246RrBelaVXJdFIFlpp61G NekKc1fgR1KCl3Nvvt0UqJ4C/5lD6O6btepHpKLWPeNkk4awsWEIbWYvxcHtqUjrc031 kSDnCUdbDyuLvfZJza+EB2/Iv5pbd0wMUxvL9GHQ0HTONHUw1FHOrgmVS3hjGIP68qx5 4CPCvdJeTNx1An0oEnDid3DjlXz80leAmVDhZUKlqm59eIuL1EJSfwwWOxKewYH1NRth H6ogCd7wljJdj4tvmSHbh1Wqpom+rf8IRrP/TUzf8ADmq7VNuCeBiHt3Jrw3JbCvPAHF idTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770550; x=1772375350; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=4A1n1SInCCQTIrX/1lNM4s5moTtIwvB3Wd7tcemWs8A=; b=e3gj6lWV8+OOa/YCYXYuglnjkgdLo4AcT1c2mlztG77WBD9RJA3qi62TpiX1/8YzEM EO/XV5lDPm2j6hOcfoyXC1Kif+lNjRQhGeOp3DQVopjzJR18jGhNtlnLshZ4qOrSR4ps iGzoYgrW0cXoUj4JJSyxKPT9y2eV7q50S1RThMxMiD5n2IuxYtieeLOwYhRs8BDrRa1M NP8/Q02kx0BIoBYQMCt1isSuMu2pAiTfoDOJLvEx76itq55OZCj9TMjVxi3WoHt8oc6f ze+a79zwZPg+HuV/bHT+6geuu2YqQ+0I0IGH3zeFAPdt01uVrB1xiW65pg/3IcdeNGpW ZB9g== X-Gm-Message-State: AOJu0YwhL09Aks38l+uhCiOaJvf/U3jPEFh7ho87+cePeJ8JM2m3z9Hs +4oeDnRzeVjBv/BC2eOpICRroDrdbZYj6Vd5JJrEjNYY4IIcEqX1QcPZA1nLeyUpjc6m1SWfM22 bNdyed3y4SzrTbiaZq1h20hPIvPoz3L8o8bx0P3MxLFFmNSf+PDJgV81V43We4tyhlw20EkVVs9 lcP4ID/h2j3UPsvIwIHBkrGCDNlAnRuz90fA== X-Gm-Gg: AZuq6aL4gHhj5nHYXLwQFtZiLYqyJiKeRLy7diGj14qgvZRy6gK+Od2O2U4K0/Miwoc B+MX4pORQtARWqF0ucS/FqO59YOVOjKKPa1vIPm6sQSq2xRu8rMMVnNejscBd5S0YBtVz41Fnk3 vikyUezPczVNgIEPkX/TNeWe5ZWYkBxYIJ0/ZUyBFOf7j3hZFIPUEnr91S/qBwF01aoBK2Iq9o9 WOMJtT16FYL6ZuQ62bwoWzUgYNKwD0xrslWuXbxCKDVf9eiRkvi0LK0cU638S1dlPCfVumXotuN Bmf0N9gKxRnHQjmSCg201kPMdLd7hOs82HAm1n9XwlWbCDHUAfvvnsORk269h6mlqnp6Kjlkdfu Co9XCwmfAISCIT5su19LA4tByvcaevX7dayuWI+MWuDrE3A== X-Received: by 2002:a05:6000:2c08:b0:437:6963:a10e with SMTP id ffacd0b85a97d-4396ffde572mr10374499f8f.23.1771770550017; Sun, 22 Feb 2026 06:29:10 -0800 (PST) X-Received: by 2002:a05:6000:2c08:b0:437:6963:a10e with SMTP id ffacd0b85a97d-4396ffde572mr10374457f8f.23.1771770549475; Sun, 22 Feb 2026 06:29:09 -0800 (PST) Date: Sun, 22 Feb 2026 09:29:07 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Eugenio =?utf-8?B?UMOpcmV6?= , Stefano Garzarella , Jason Wang Subject: [PULL 22/33] net/vhost-vdpa: Whitelist virtio-net GSO for shadow virtqueue Message-ID: <25730acda4ada4f136e04b246b31dd54d3bb54b1.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -4 X-Spam_score: -0.5 X-Spam_bar: / X-Spam_report: (-0.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770915853158500 From: Eugenio P=C3=A9rez Even if it is deprecated by the VirtIO standard it does not affect the layout of the queue, or introduces new operations. So Shadow Virtqueue can handle it just fine. Tested with OVS DPDK and VDUSE. Signed-off-by: Eugenio P=C3=A9rez Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260206144717.730799-1-eperezma@redhat.com> --- net/vhost-vdpa.c | 1 + 1 file changed, 1 insertion(+) diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c index f4b1f0e9e0..3df6091274 100644 --- a/net/vhost-vdpa.c +++ b/net/vhost-vdpa.c @@ -116,6 +116,7 @@ static const uint64_t vdpa_svq_device_features =3D BIT_ULL(VIRTIO_NET_F_MRG_RXBUF) | BIT_ULL(VIRTIO_NET_F_STATUS) | BIT_ULL(VIRTIO_NET_F_CTRL_VQ) | + BIT_ULL(VIRTIO_NET_F_GSO) | BIT_ULL(VIRTIO_NET_F_CTRL_RX) | BIT_ULL(VIRTIO_NET_F_CTRL_VLAN) | BIT_ULL(VIRTIO_NET_F_CTRL_RX_EXTRA) | --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770606; cv=none; d=zohomail.com; s=zohoarc; b=nyTjkbChPzUpYk6h8iHiJC+QqddCjQ0wHb+8QTShPLCB9Xlka/jOqh30lcbVD943lIAeYRgBt4YSnMUeGeRl4QMwpXXSCMfE9RTjAylF7mPNckxnBtB9HQYziuf2AMW9iOVwLA7NUCb3tn6MOa2keNdUvAdzVPZyB9e8dNv6uaY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770606; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=shJs6+uDrl1OnFwGXeXwGM3eD68HLZ/4D3ywa0biSus=; b=CiOUUeiNZaczmn5/63DqgQv3/STIk4MJlsPAqKgwQnydapA1lWd52G0ZaaWsMZD35U1LUpOoOMfhzc0ITOV+buVPQfe/rc2MNtK0AomV87egnB7q4U4R6aIP1ldTNwozz1Pbt2lC8iraP3K/DUcOVy1QpLusqhHRty3m7+fKfbM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770606759310.53283556021256; Sun, 22 Feb 2026 06:30:06 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASk-00005k-M7; Sun, 22 Feb 2026 09:29:35 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASU-0008EJ-DD for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:19 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASS-0006ql-AD for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:17 -0500 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-680-85liheLGMoKVZiY0yWq5Tw-1; Sun, 22 Feb 2026 09:29:13 -0500 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4837907ec88so44656285e9.0 for ; Sun, 22 Feb 2026 06:29:13 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970d54a73sm13140195f8f.37.2026.02.22.06.29.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:29:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770555; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=shJs6+uDrl1OnFwGXeXwGM3eD68HLZ/4D3ywa0biSus=; b=LPr7prZaagWd/dstOgdYxrbkxQ9iIt6WDjEcHfTPt3H350a65/vdCmvFXkFl/GUfy22Wmp OQL8g2mU08LpchE8zgjWGy2JF/d73WJ0Wqh1zIFvlxu08clQZBmVvbQCN9AdPpm1q2SD6D Tj0OFgHwlsw39q44lloJDQCcHo3G+1k= X-MC-Unique: 85liheLGMoKVZiY0yWq5Tw-1 X-Mimecast-MFC-AGG-ID: 85liheLGMoKVZiY0yWq5Tw_1771770553 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770552; x=1772375352; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=shJs6+uDrl1OnFwGXeXwGM3eD68HLZ/4D3ywa0biSus=; b=jDaDdapq+1V9tAAvHP3fnJqjWnYYHcbmQ3NofP3yWAS8WKG1hyojdT0hAOjTFuVovF yqXSiGUCUrIMdlVG7U0N7E+a7p+N/h/ez8SqJD6ZdXsSP4OKCkgL9cBA+qTtvnGDFlRL aZEH9f0E7pnhk6q5nBk5DhC4RPgI+tiUAATtY6S8VKaLBaWt+KQygBK8d5AJOfmMqlkS rmOu9sRznWfynWIezBB1FeDr3NcLA5NSkbObtmJqpbZdC4OpofSBOIxHnggYM4yaueez 6aALUzG62Ys9W2TnLrCKVkYYrFR+ct7KMZEo5bzazp8uiq/n8AjmfC2EYzMJQz+/TQ2U cHIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770552; x=1772375352; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=shJs6+uDrl1OnFwGXeXwGM3eD68HLZ/4D3ywa0biSus=; b=TWr+gEV5TvkqobUp7PAqiXzqYyPQymSqE2AkvZEpwgWREELIT+t6afHwbOAG3mjU9e xI/kQFhsfUoOtHM7Hwsr0ra+XJl6onWQoENUd0zhFHbpJ4+gxMVyaPWgd0yqaT3bAfn+ 0u/pjXruccC52corWs/lHLDC1C/3wE5T31fvG2FSNGGUGO9iCNk9KtiGZw7wmfAFbtbU SAPcdWWY8IvbsIXipYx4dv97OqB83nKU/eJ/c1AIkb0U3X4ekA73+wS+DoNwc46mgEff KzpQgD0P33TUkHcBOex4TB82UCJ3x8OWXW84j4WsZ3aQeNLAHbDqyMXp1OaKXfWmQb2F Hzcg== X-Gm-Message-State: AOJu0YzjwConszmcknUaPvqbEYfNSf+Y1D4HnQDhizvu6WXa8j/P84f4 DtkownnTFQL+fdswvzc5ib5s7cOI9dYnDmCtsCCmSetX+b/so9EqXjZbvAwOxf3lEaRdFJQN6vz vHEBayqBNiJ5E4llqza4gaeqMPLgvLJI8OAazcyK+rY4NEEGssuMPZ9WjK+FwZG2/htrrcBTsgb JgB/8Hcn4m38X8341ra8pKSwRIyVGKVHzFLA== X-Gm-Gg: AZuq6aKDccNDh7+zKWmJu5Q0yYAXLX5a3xUQzQhbIcxJvG9d6Xhg6G7fofnsGPA6BqD 4RnM/api9drbrffq9ADfADgrIS5VP9yexbV/93jVGUqSBSoFFyrA6BC7wKwZ89uWJIJxP5IRk2a g78CxzXlQEjmFzFPzpJvuCD1eGCk0CJzQsew5gpkI8bYetExnNTRo8CxA9thFmuoA/hnkEUKP9d m5tjviftsdHKOHBrkO+pABWgtZOVNswNwt02Y+0Zozjyg68U6daB2c268xVEr8JofOEFJKXNDLf kBlar4mWpb2+TGwwm0sZgzF4SnSypHRLuw3315nXyQNJFEp3SfFTEIqQe3qlKinyQhTCWXFFXx+ t1CMeOUbEuEwgnn6VNBoeJZnbAjfqwYGVDIjzcnhLvUJtnw== X-Received: by 2002:a05:600c:4f8a:b0:480:1d0b:2d32 with SMTP id 5b1f17b1804b1-483a95beb5bmr103361425e9.12.1771770552413; Sun, 22 Feb 2026 06:29:12 -0800 (PST) X-Received: by 2002:a05:600c:4f8a:b0:480:1d0b:2d32 with SMTP id 5b1f17b1804b1-483a95beb5bmr103360835e9.12.1771770551794; Sun, 22 Feb 2026 06:29:11 -0800 (PST) Date: Sun, 22 Feb 2026 09:29:09 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Clement Mathieu--Drif , Zhenzhong Duan , Jason Wang , Yi Liu , Marcel Apfelbaum , Paolo Bonzini , Richard Henderson , Eduardo Habkost Subject: [PULL 23/33] intel_iommu: Do not report recoverable faults to host Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770609231154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Clement Mathieu--Drif Signed-off-by: Clement Mathieu--Drif Reviewed-by: Zhenzhong Duan Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260208082252.288-1-clement.mathieu--drif@eviden.com> --- hw/i386/intel_iommu.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index 92a367d657..4924aa4375 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -1857,6 +1857,21 @@ static const bool vtd_qualified_faults[] =3D { [VTD_FR_MAX] =3D false, }; =20 +static const bool vtd_recoverable_faults[] =3D { + [VTD_FR_WRITE] =3D true, + [VTD_FR_READ] =3D true, + [VTD_FR_PASID_DIR_ENTRY_P] =3D true, + [VTD_FR_PASID_ENTRY_P] =3D true, + [VTD_FR_FS_PAGING_ENTRY_INV] =3D true, + [VTD_FR_FS_PAGING_ENTRY_P] =3D true, + [VTD_FR_FS_PAGING_ENTRY_RSVD] =3D true, + [VTD_FR_PASID_ENTRY_FSPTPTR_INV] =3D true, + [VTD_FR_FS_NON_CANONICAL] =3D true, + [VTD_FR_FS_PAGING_ENTRY_US] =3D true, + [VTD_FR_SM_WRITE] =3D true, + [VTD_FR_MAX] =3D false, +}; + /* To see if a fault condition is "qualified", which is reported to softwa= re * only if the FPD field in the context-entry used to process the faulting * request is 0. @@ -1866,6 +1881,11 @@ static inline bool vtd_is_qualified_fault(VTDFaultRe= ason fault) return vtd_qualified_faults[fault]; } =20 +static inline bool vtd_is_recoverable_fault(VTDFaultReason fault, int iomm= u_idx) +{ + return iommu_idx =3D=3D VTD_IDX_ATS && vtd_recoverable_faults[fault]; +} + static inline bool vtd_is_interrupt_addr(hwaddr addr) { return VTD_INTERRUPT_ADDR_FIRST <=3D addr && addr <=3D VTD_INTERRUPT_A= DDR_LAST; @@ -2237,8 +2257,10 @@ static bool vtd_do_iommu_translate(VTDAddressSpace *= vtd_as, PCIBus *bus, } =20 if (ret_fr) { - vtd_report_fault(s, -ret_fr, is_fpd_set, source_id, - addr, is_write, pasid !=3D PCI_NO_PASID, pasid); + if (!vtd_is_recoverable_fault(-ret_fr, iommu_idx)) { + vtd_report_fault(s, -ret_fr, is_fpd_set, source_id, + addr, is_write, pasid !=3D PCI_NO_PASID, pasid= ); + } goto error; } =20 --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770696; cv=none; d=zohomail.com; s=zohoarc; b=anHsQaWBfXgk8epki3zZpiJ6ZVPv6RFBcQ6KKpSNVzY69X53uRFBZ1zvfu5Y2UxzLvf/eiQEJ+T3+0mgp3/p4paEKvxa2w1AzqZ0B7QWm1dMEq5LRDhpj+tnwBAr1ZqVmJda60PIE8gsyFxi4pHH1AKzr+lhkx8fW/YdXCeNjeE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770696; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ahaZpslv1Klb2Dj4IC7LSc778IKY0QywKL9M3ZpD++s=; b=XEUEFr5zrF0+gJBYwjmqoAdzlEkPLQIf6nnYf742Eo+rbB3iVVW20S8iz+fZoGOo2MqLIMDFLGifnomL1Bz4Lj6eqHJpDfSnlpVz7Bg0d+UcBS5MA7hSJtSp9GFaK4R6r9pZPIJajeEfWvedu6CseWssfV/hpUoWKfL33SLQ4QA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770696472804.2294597406805; Sun, 22 Feb 2026 06:31:36 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASo-0000W1-6N; Sun, 22 Feb 2026 09:29:38 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASX-0008FI-4R for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:23 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASV-0006rb-Bl for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:20 -0500 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-595-UEbQxlxdOMKJneEst-aG2Q-1; Sun, 22 Feb 2026 09:29:16 -0500 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-4837b7903f3so44706335e9.2 for ; Sun, 22 Feb 2026 06:29:16 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970c00485sm13842080f8f.9.2026.02.22.06.29.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:29:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770558; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=ahaZpslv1Klb2Dj4IC7LSc778IKY0QywKL9M3ZpD++s=; b=F6s24df6HTCOwsOikt8vISB5k0QO+kg4/rHTbBKN7RxjYeaJpcjAx5LchbhRUz+/u37hLK CxgvIEdAa1+Dm8HOnWSExukAM3BhyIWBCTIsqRFYjBPv95/AS5Q0r6SwEYxzTr66ronRKr xRVBZB/gmRJWaKo9Eybr5CZ85uvpJeg= X-MC-Unique: UEbQxlxdOMKJneEst-aG2Q-1 X-Mimecast-MFC-AGG-ID: UEbQxlxdOMKJneEst-aG2Q_1771770556 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770555; x=1772375355; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=ahaZpslv1Klb2Dj4IC7LSc778IKY0QywKL9M3ZpD++s=; b=ONqPIDNnKAm7cRac56toGv327MaIMhBu4fRsn3HfWcEFg5xugKBBMfI84PHVRiTvcs N6dhR3MEtaZVnrO40rARGFYfKywsIRD8R+ax8DwycLh4l30Rm8kigcDxZsisrHfPEXzS 4wDZUVN/Q7hhwHXbXjBKIU71lAOGdlKh6RALaPrUTKwQ8ynRnX+j0S73Pjqla2Bn7BUk Y9IwxpCJsWTIRbW6EZlzykQbUaTQFNXWnaYqnHJ+tP69EMnmw6VfeSDwoNdozxjMeXP1 2feKFRe6fKS1GW4JM9NzKT2jrHTDaYqbdKGUfiZaGRbWMqpEYlNFPt9VTQ4hgKZlUxWo QKng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770555; x=1772375355; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ahaZpslv1Klb2Dj4IC7LSc778IKY0QywKL9M3ZpD++s=; b=CrddvO9JBrdbLy8UKnbkOS0pQPxCSuJr+VyenKwhB9MypOqmoOvGFdHP+MwP4mhoky 9Nu9aZY5ZwJwXDj3a+TJDI54lOfIZNo0dtFYDfWoFqvsgdKKjGwxONBGYW/tpZ1/aXNY yZpo7eU5lrMBLumcix3OVY0wBjrcO3FX4vQFqwT/KEBatu9GKIe9wvmlRXtxWFnMgOQk 2nVXwuruUih68EERSJucPBQa/Y4Z2nP1ge66nHIx0ygUxXI9Cik9Wb3A0njE8v+UsJoe gn6UrH/yOUh9PaMsWjAbUhDR/jkhikvbIA6baBfm8ppjIMaLxXPv6T/18crn1oR2iJ7+ NSNg== X-Gm-Message-State: AOJu0Yyvqxvce39Td5X4svYOdLOG88VO8h1wlVX3Lq6OtGHnNn0KFjhj /IaF7EXxns+wuwUFBEMAwmvnNU1LbfmS2Lyi8Isk2ZXhITyxYRgTHyvoLwPICj+CYTvYYQCdsW6 1WVTUHTEJc6eCfi9KUEsh/UHrE0LITIw/RgvPlpHwCnjQwCiwi9iVqR7CyL11YS+i0oVmBRr3OF FkEVHT+9+8xJeHx5QbfJbe9SMlUAW1RRuWgg== X-Gm-Gg: AZuq6aJ9HIs0qs3RTaK4Gu1YfHt/iIxXzyDUq/0YOb6wJeSMNsyO95DPg/ijnlBZl/j VY/d9SlkEL+Q0rClWDysWVDuC0CEUN7dyhmfS3FyzLzCU3gJlDGvjjLVfFBjsgaowT2OURviyAS kXoW6Qtzd4P0ih2ffiAI6tyE0z8cGkz1e24+WxYd5llAtk12+HsZJ9/Ce9kJp2e50qdr8M5YaK5 zAMcOxGjnI5VRRdAqJk5H8to5STP8nOZp2NHECRi/OiIgUuC6Bpr3I5o2xYyAKvYjjo6PtjShlm LELjzaXtdjlx6mdz6+8Z0k5d3rEkuEYUYi7s9KYD00UtpOTANtLxc3VHCd2Pj91cM8j58FbbFyr G2ejMbQnrU3tIdqAlYV13+r2nWdsnmF8EdRU9b8l2W2RYdA== X-Received: by 2002:a05:6000:26cd:b0:430:f6bc:2f8a with SMTP id ffacd0b85a97d-4396f17b527mr10479572f8f.47.1771770555325; Sun, 22 Feb 2026 06:29:15 -0800 (PST) X-Received: by 2002:a05:6000:26cd:b0:430:f6bc:2f8a with SMTP id ffacd0b85a97d-4396f17b527mr10479524f8f.47.1771770554708; Sun, 22 Feb 2026 06:29:14 -0800 (PST) Date: Sun, 22 Feb 2026 09:29:12 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Akihiko Odaki , qemu-stable@nongnu.org, Dmitry Osipenko , Joelle van Dyne , Alex =?utf-8?Q?Benn=C3=A9e?= Subject: [PULL 24/33] virtio-gpu-virgl: Add virtio-gpu-virgl-hostmem-region type Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -4 X-Spam_score: -0.5 X-Spam_bar: / X-Spam_report: (-0.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770698688154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Akihiko Odaki Commit e27194e087ae ("virtio-gpu-virgl: correct parent for blob memory region") made the name member of MemoryRegion unset, causing a NULL pointer dereference[1]: > Thread 2 "qemu-system-x86" received signal SIGSEGV, Segmentation fault. > (gdb) bt > #0 0x00007ffff56565e2 in __strcmp_evex () at /lib64/libc.so.6 > #1 0x0000555555841bdb in find_fd (head=3D0x5555572337d0 , > name=3D0x0, id=3D0) at ../migration/cpr.c:68 > #2 cpr_delete_fd (name=3Dname@entry=3D0x0, id=3Did@entry=3D0) at > ../migration/cpr.c:77 > #3 0x000055555582290a in qemu_ram_free (block=3D0x7ff7e93aa7f0) at > ../system/physmem.c:2615 > #4 0x000055555581ae02 in memory_region_finalize (obj=3D) > at ../system/memory.c:1816 > #5 0x0000555555a70ab9 in object_deinit (obj=3D, > type=3D) at ../qom/object.c:715 > #6 object_finalize (data=3D0x7ff7e936eff0) at ../qom/object.c:729 > #7 object_unref (objptr=3D0x7ff7e936eff0) at ../qom/object.c:1232 > #8 0x0000555555814fae in memory_region_unref (mr=3D) at > ../system/memory.c:1848 > #9 flatview_destroy (view=3D0x555559ed6c40) at ../system/memory.c:301 > #10 0x0000555555bfc122 in call_rcu_thread (opaque=3D) at > ../util/rcu.c:324 > #11 0x0000555555bf17a7 in qemu_thread_start (args=3D0x555557b99520) at > ../util/qemu-thread-posix.c:393 > #12 0x00007ffff556f464 in start_thread () at /lib64/libc.so.6 > #13 0x00007ffff55f25ac in __clone3 () at /lib64/libc.so.6 The intention of the aforementioned commit is to prevent a MemoryRegion from parenting itself while its references is counted indendependently of the device. To achieve the same goal, add a type of QOM objects that count references and parent MemoryRegions. [1] https://lore.kernel.org/qemu-devel/4eb93d7a-1fa9-4b3c-8ad7-a2eb64f025a0= @collabora.com/ Cc: qemu-stable@nongnu.org Fixes: e27194e087ae ("virtio-gpu-virgl: correct parent for blob memory regi= on") Signed-off-by: Akihiko Odaki Tested-by: Dmitry Osipenko Tested-by: Joelle van Dyne Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260214-region-v1-1-229f00ae1f38@rsg.ci.i.u-tokyo.ac.jp> --- hw/display/virtio-gpu-virgl.c | 54 +++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 15 deletions(-) diff --git a/hw/display/virtio-gpu-virgl.c b/hw/display/virtio-gpu-virgl.c index ecf8494f36..0f754829fb 100644 --- a/hw/display/virtio-gpu-virgl.c +++ b/hw/display/virtio-gpu-virgl.c @@ -52,11 +52,17 @@ virgl_get_egl_display(G_GNUC_UNUSED void *cookie) =20 #if VIRGL_VERSION_MAJOR >=3D 1 struct virtio_gpu_virgl_hostmem_region { + Object parent_obj; MemoryRegion mr; struct VirtIOGPU *g; bool finish_unmapping; }; =20 +#define TYPE_VIRTIO_GPU_VIRGL_HOSTMEM_REGION "virtio-gpu-virgl-hostmem-reg= ion" + +OBJECT_DECLARE_SIMPLE_TYPE(virtio_gpu_virgl_hostmem_region, + VIRTIO_GPU_VIRGL_HOSTMEM_REGION) + static struct virtio_gpu_virgl_hostmem_region * to_hostmem_region(MemoryRegion *mr) { @@ -70,14 +76,22 @@ static void virtio_gpu_virgl_resume_cmdq_bh(void *opaqu= e) virtio_gpu_process_cmdq(g); } =20 -static void virtio_gpu_virgl_hostmem_region_free(void *obj) +/* + * MR could outlive the resource if MR's reference is held outside of + * virtio-gpu. In order to prevent unmapping resource while MR is alive, + * and thus, making the data pointer invalid, we will block virtio-gpu + * command processing until MR is fully unreferenced and freed. + */ +static void virtio_gpu_virgl_hostmem_region_finalize(Object *obj) { - MemoryRegion *mr =3D MEMORY_REGION(obj); - struct virtio_gpu_virgl_hostmem_region *vmr; + struct virtio_gpu_virgl_hostmem_region *vmr =3D VIRTIO_GPU_VIRGL_HOSTM= EM_REGION(obj); VirtIOGPUBase *b; VirtIOGPUGL *gl; =20 - vmr =3D to_hostmem_region(mr); + if (!vmr->g) { + return; + } + vmr->finish_unmapping =3D true; =20 b =3D VIRTIO_GPU_BASE(vmr->g); @@ -92,11 +106,26 @@ static void virtio_gpu_virgl_hostmem_region_free(void = *obj) qemu_bh_schedule(gl->cmdq_resume_bh); } =20 +static const TypeInfo virtio_gpu_virgl_hostmem_region_info =3D { + .parent =3D TYPE_OBJECT, + .name =3D TYPE_VIRTIO_GPU_VIRGL_HOSTMEM_REGION, + .instance_size =3D sizeof(struct virtio_gpu_virgl_hostmem_region), + .instance_finalize =3D virtio_gpu_virgl_hostmem_region_finalize +}; + +static void virtio_gpu_virgl_types(void) +{ + type_register_static(&virtio_gpu_virgl_hostmem_region_info); +} + +type_init(virtio_gpu_virgl_types) + static int virtio_gpu_virgl_map_resource_blob(VirtIOGPU *g, struct virtio_gpu_virgl_resource *res, uint64_t offset) { + g_autofree char *name =3D NULL; struct virtio_gpu_virgl_hostmem_region *vmr; VirtIOGPUBase *b =3D VIRTIO_GPU_BASE(g); MemoryRegion *mr; @@ -117,21 +146,16 @@ virtio_gpu_virgl_map_resource_blob(VirtIOGPU *g, } =20 vmr =3D g_new0(struct virtio_gpu_virgl_hostmem_region, 1); + name =3D g_strdup_printf("blob[%" PRIu32 "]", res->base.resource_id); + object_initialize_child(OBJECT(g), name, vmr, + TYPE_VIRTIO_GPU_VIRGL_HOSTMEM_REGION); vmr->g =3D g; =20 mr =3D &vmr->mr; - memory_region_init_ram_ptr(mr, OBJECT(mr), NULL, size, data); + memory_region_init_ram_ptr(mr, OBJECT(vmr), "mr", size, data); memory_region_add_subregion(&b->hostmem, offset, mr); memory_region_set_enabled(mr, true); =20 - /* - * MR could outlive the resource if MR's reference is held outside of - * virtio-gpu. In order to prevent unmapping resource while MR is aliv= e, - * and thus, making the data pointer invalid, we will block virtio-gpu - * command processing until MR is fully unreferenced and freed. - */ - OBJECT(mr)->free =3D virtio_gpu_virgl_hostmem_region_free; - res->mr =3D mr; =20 trace_virtio_gpu_cmd_res_map_blob(res->base.resource_id, vmr, mr); @@ -163,7 +187,7 @@ virtio_gpu_virgl_unmap_resource_blob(VirtIOGPU *g, * 1. Begin async unmapping with memory_region_del_subregion() * and suspend/block cmd processing. * 2. Wait for res->mr to be freed and cmd processing resumed - * asynchronously by virtio_gpu_virgl_hostmem_region_free(). + * asynchronously by virtio_gpu_virgl_hostmem_region_finalize(). * 3. Finish the unmapping with final virgl_renderer_resource_unmap(). */ if (vmr->finish_unmapping) { @@ -186,7 +210,7 @@ virtio_gpu_virgl_unmap_resource_blob(VirtIOGPU *g, /* memory region owns self res->mr object and frees it by itself */ memory_region_set_enabled(mr, false); memory_region_del_subregion(&b->hostmem, mr); - object_unref(OBJECT(mr)); + object_unparent(OBJECT(vmr)); } =20 return 0; --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770893; cv=none; d=zohomail.com; s=zohoarc; b=BQJ8eyRXWIqoAu0eSVi1RRHouHGGAIet5Pi8dEtsvbA+21XsYqrrKF06Ir2NfPv2rbPvHlDuY4y0qddQ/fzvR01l19CFtuSeAiNNJnu4spE1bWvAmewMZQU92yj8ryYVs5FRjvT1rA3GILHch3TmPtWi4JisiiJCpqqaxQZVkgQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770893; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=rnkI9nMTthY8p6DDwYIOuhFVQyTvRTqLVnh7owDEQ5U=; b=BI9gOPNaecNPAZxhzVQ+rgW329hP1KdRVpX4k8dnjIjtR1bFmVlGPlUVrBluFLG2u4PF9DroXiBVF4kADHu3UbxcOM2Toi5bbBuXtLXfBTxbcoII+M8cbhY/m7l7r9v8fgTklf7pS2b4zF0+QVo0QKFmiz3AAVRaZf1vvqGYK0I= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770893300572.8596647508512; Sun, 22 Feb 2026 06:34:53 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASu-0000nf-20; Sun, 22 Feb 2026 09:29:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASZ-0008GL-QP for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:23 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASX-0006s4-82 for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:23 -0500 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-651-OfkyPjeHPbu7DfEjkY23qw-1; Sun, 22 Feb 2026 09:29:19 -0500 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4836b7c302fso31545745e9.1 for ; Sun, 22 Feb 2026 06:29:18 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483a42f7c4csm63521905e9.23.2026.02.22.06.29.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:29:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770560; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=rnkI9nMTthY8p6DDwYIOuhFVQyTvRTqLVnh7owDEQ5U=; b=NyPO1M+fYjXQDucVPqeLuEKIM+s+tZRpmSsleCHrvIjLj0wf5FM2nAyjU5qKbNmhZz9L+n vGTvpnWr+RLi7Y7162zQDSyiA3wGbs0M349119ASp262YWrowtaGlfQGiJROlCh5XzDqTV wGZQfKMEYKQ0V36Am+qVWmJL7UKho9E= X-MC-Unique: OfkyPjeHPbu7DfEjkY23qw-1 X-Mimecast-MFC-AGG-ID: OfkyPjeHPbu7DfEjkY23qw_1771770558 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770558; x=1772375358; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=rnkI9nMTthY8p6DDwYIOuhFVQyTvRTqLVnh7owDEQ5U=; b=ddIM3Fcfr2LF8+AAA9p6M1EDLSxJmrbtxeVZC4NKS2SjFtdvUOjKH0SVMH5oS0ISi8 d0k6LBLJyeZ8TP28XJJeJRJaGMMqa2XsibziR0Nz9t3y4Kg9a8+7ytfP1fww38MQfUOH FM1TADVoLvmwXz36Ud7zxGqHZUKDWU/mDPVssa947XGrX7zrwRH3CFc2q1GuI5OTlr+G 7y/Nl95hX/VUsOklMY63TqHOYBIfFLN6YYa0kd++YJIN4p/jmcmMuPk7cryaWQNkA8u6 SkvNno38DMAyla6ip2/DpeNFmUQT/ne7Hhr622+BTHDrg5KTKWcxbLMq61BDj15Xiyb2 SBcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770558; x=1772375358; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rnkI9nMTthY8p6DDwYIOuhFVQyTvRTqLVnh7owDEQ5U=; b=lHkZEYrhG2rtt/Kyk3kw57vKyhZ4xs7S9V8/Gn5MmwUT2hiyZ37qUbEF1xzQ00qocE r111Mze7g+XIilCjJS67+X50TdV8gu8AI1RGxQ4wGRqsvXLxZUsonmOT4pFxdWpbor1y ArmkG2hPRW7pETSh9X+dDbh3Gs/ITV4RS+EbipEUmYjW1w24/mEVQvNQTDn7k3TOHLEr 7Ew82sqrEiKq8cQXc06TZ+SEP0RN3kaUdGOMFJoA7RRbpqJ5QrTIallB7EVxokosNSSu DxhYVaqH5J1vyQMBoQuc/PbAmKlgCh9idt0fZsm2TU/EtFi5RcWmgMwUJMivjDch1mb4 iBrw== X-Gm-Message-State: AOJu0YxZMLHPp++RZ/3WMDm0Bj6FPXXNtLCpHEiyP3b4U/7f81zJHxsd wxGcXedHd5yAhe55FcFrSfWns2q8mK3HxHPqm09E5zbivwdrnM4o7MDmlRo7w3lsa0qVt7Z1V78 G++lZzvbVtxG1dgk8pm65bNPr7BPnFLYgEoDOYgaDtvFbgDtYTH4syLw072MX/6jui56BMJK9bn viglp5xxPECzZR98dut/XB+JwZMdqnqT+3UQ== X-Gm-Gg: AZuq6aJTllDnX4b19jr0DeAZm2UJCRZaLzcAu1o7HvUpFy2gBCRmRuUb6ZElcXaadML 4ILa+6Eq6Fa4RW/TzEo/VTQDY6CruVMZhoyIzq1zGnBXMXqQmedLvv/7qftAqMvQgaG4aifLOnv kCQMy0e3+PRXZtlEHP9tKUdKQNv121LlcVY/pcC6Ms9wsAzQlUysZ36LlH0o8SgycZnVKo4BcsT b4BtGDJNJyP50+QmQCkfE9E1MS0/DuxKgitxhF3R2MXhhmUukrRkyl3DZVxPhhHS8BLH/cDFDcX XWzT86HyEDn8CbEvF3Ids3r+R1CoKmpiFo6bR7qlJFutli74X45gobbVcQUOjVI4mWxgsTsv2+N fP/CdbNtYerzX4IxqqhTx8y8AjJYLVQU4oVojLtxS5uJOHQ== X-Received: by 2002:a05:600c:3587:b0:483:a27e:6706 with SMTP id 5b1f17b1804b1-483a95fc063mr103109295e9.9.1771770557562; Sun, 22 Feb 2026 06:29:17 -0800 (PST) X-Received: by 2002:a05:600c:3587:b0:483:a27e:6706 with SMTP id 5b1f17b1804b1-483a95fc063mr103108775e9.9.1771770556901; Sun, 22 Feb 2026 06:29:16 -0800 (PST) Date: Sun, 22 Feb 2026 09:29:14 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Arpit Kumar , Jonathan Cameron , Fan Ni Subject: [PULL 25/33] hw/cxl: Physical Port Info FMAPI - update to current spec and add defines. Message-ID: <7df839591cf9354f7cc054ff6d01e16d46ff9f33.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -4 X-Spam_score: -0.5 X-Spam_bar: / X-Spam_report: (-0.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770894908154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Arpit Kumar Add a new cxl/cxl_ports.h header for field definitions related only to port commands. Bring field naming up to date with spec as 'version' bitmasks have been replaced with bitmasks of the specific features. Fix a small issue where a reserved value for USP was set to 2 rather than 0. Signed-off-by: Arpit Kumar Co-developed-by: Jonathan Cameron Signed-off-by: Jonathan Cameron Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260204173223.44122-2-Jonathan.Cameron@huawei.com> --- hw/cxl/cxl-mailbox-utils.c | 31 ++++++++++++++-------- include/hw/cxl/cxl_port.h | 53 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 11 deletions(-) create mode 100644 include/hw/cxl/cxl_port.h diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index 2f449980cd..1c8cbe0f68 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -15,6 +15,7 @@ #include "hw/cxl/cxl.h" #include "hw/cxl/cxl_events.h" #include "hw/cxl/cxl_mailbox.h" +#include "hw/cxl/cxl_port.h" #include "hw/pci/pci.h" #include "hw/pci-bridge/cxl_upstream_port.h" #include "qemu/cutils.h" @@ -565,16 +566,16 @@ static CXLRetCode cmd_get_physical_port_state(const s= truct cxl_cmd *cmd, } QEMU_PACKED *in; =20 /* - * CXL r3.1 Table 7-19: Get Physical Port State Port Information Block + * CXL r3.2 Table 7-19: Get Physical Port State Port Information Block * Format */ struct cxl_fmapi_port_state_info_block { uint8_t port_id; uint8_t config_state; - uint8_t connected_device_cxl_version; + uint8_t connected_device_mode; uint8_t rsv1; uint8_t connected_device_type; - uint8_t port_cxl_version_bitmask; + uint8_t supported_cxl_mode_bitmask; uint8_t max_link_width; uint8_t negotiated_link_width; uint8_t supported_link_speeds_vector; @@ -623,21 +624,30 @@ static CXLRetCode cmd_get_physical_port_state(const s= truct cxl_cmd *cmd, if (port_dev) { /* DSP */ PCIDevice *ds_dev =3D pci_bridge_get_sec_bus(PCI_BRIDGE(port_d= ev)) ->devices[0]; - port->config_state =3D 3; + port->config_state =3D CXL_PORT_CONFIG_STATE_DSP; if (ds_dev) { if (object_dynamic_cast(OBJECT(ds_dev), TYPE_CXL_TYPE3)) { - port->connected_device_type =3D 5; /* Assume MLD for n= ow */ + /* Assume MLD for now */ + port->connected_device_type =3D + CXL_PORT_CONNECTED_DEV_TYPE_3_MLD; } else { - port->connected_device_type =3D 1; + port->connected_device_type =3D + CXL_PORT_CONNECTED_DEV_TYPE_PCIE; + port->connected_device_mode =3D + CXL_PORT_CONNECTED_DEV_MODE_NOT_CXL_OR_DISCONN; + } } else { - port->connected_device_type =3D 0; + port->connected_device_type =3D CXL_PORT_CONNECTED_DEV_TYP= E_NONE; + port->connected_device_mode =3D + CXL_PORT_CONNECTED_DEV_MODE_NOT_CXL_OR_DISCONN; } port->supported_ld_count =3D 3; } else if (usp->port =3D=3D in->ports[i]) { /* USP */ port_dev =3D PCI_DEVICE(usp); - port->config_state =3D 4; - port->connected_device_type =3D 0; + port->config_state =3D CXL_PORT_CONFIG_STATE_USP; + port->connected_device_type =3D 0; /* Reserved for USP */ + port->connected_device_mode =3D 0; /* Reserved for USP */ } else { return CXL_MBOX_INVALID_INPUT; } @@ -667,8 +677,7 @@ static CXLRetCode cmd_get_physical_port_state(const str= uct cxl_cmd *cmd, port->ltssm_state =3D 0x7; port->first_lane_num =3D 0; port->link_state =3D 0; - port->port_cxl_version_bitmask =3D 0x2; - port->connected_device_cxl_version =3D 0x2; + port->supported_cxl_mode_bitmask =3D CXL_PORT_SUPPORTS_68B_VH; } =20 pl_size =3D sizeof(*out) + sizeof(*out->ports) * in->num_ports; diff --git a/include/hw/cxl/cxl_port.h b/include/hw/cxl/cxl_port.h new file mode 100644 index 0000000000..04db60f7bc --- /dev/null +++ b/include/hw/cxl/cxl_port.h @@ -0,0 +1,53 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#ifndef CXL_PORT_H +#define CXL_PORT_H + +/* CXL r3.2 Table 7-19: Get Physical Port State Port Information Block For= mat */ +#define CXL_PORT_CONFIG_STATE_DISABLED 0x0 +#define CXL_PORT_CONFIG_STATE_BIND_IN_PROGRESS 0x1 +#define CXL_PORT_CONFIG_STATE_UNBIND_IN_PROGRESS 0x2 +#define CXL_PORT_CONFIG_STATE_DSP 0x3 +#define CXL_PORT_CONFIG_STATE_USP 0x4 +#define CXL_PORT_CONFIG_STATE_FABRIC_PORT 0x5 +#define CXL_PORT_CONFIG_STATE_INVALID_PORT_ID 0xF + +#define CXL_PORT_CONNECTED_DEV_MODE_NOT_CXL_OR_DISCONN 0x00 +#define CXL_PORT_CONNECTED_DEV_MODE_RCD 0x01 +#define CXL_PORT_CONNECTED_DEV_MODE_68B_VH 0x02 +#define CXL_PORT_CONNECTED_DEV_MODE_256B 0x03 +#define CXL_PORT_CONNECTED_DEV_MODE_LO_256B 0x04 +#define CXL_PORT_CONNECTED_DEV_MODE_PBR 0x05 + +#define CXL_PORT_CONNECTED_DEV_TYPE_NONE 0x00 +#define CXL_PORT_CONNECTED_DEV_TYPE_PCIE 0x01 +#define CXL_PORT_CONNECTED_DEV_TYPE_1 0x02 +#define CXL_PORT_CONNECTED_DEV_TYPE_2_OR_HBR_SWITCH 0x03 +#define CXL_PORT_CONNECTED_DEV_TYPE_3_SLD 0x04 +#define CXL_PORT_CONNECTED_DEV_TYPE_3_MLD 0x05 +#define CXL_PORT_CONNECTED_DEV_PBR_COMPONENT 0x06 + +#define CXL_PORT_SUPPORTS_RCD BIT(0) +#define CXL_PORT_SUPPORTS_68B_VH BIT(1) +#define CXL_PORT_SUPPORTS_256B BIT(2) +#define CXL_PORT_SUPPORTS_LO_256B BIT(3) +#define CXL_PORT_SUPPORTS_PBR BIT(4) + +#define CXL_PORT_LTSSM_DETECT 0x00 +#define CXL_PORT_LTSSM_POLLING 0x01 +#define CXL_PORT_LTSSM_CONFIGURATION 0x02 +#define CXL_PORT_LTSSM_RECOVERY 0x03 +#define CXL_PORT_LTSSM_L0 0x04 +#define CXL_PORT_LTSSM_L0S 0x05 +#define CXL_PORT_LTSSM_L1 0x06 +#define CXL_PORT_LTSSM_L2 0x07 +#define CXL_PORT_LTSSM_DISABLED 0x08 +#define CXL_PORT_LTSSM_LOOPBACK 0x09 +#define CXL_PORT_LTSSM_HOT_RESET 0x0A + +#define CXL_PORT_LINK_STATE_FLAG_LANE_REVERSED BIT(0) +#define CXL_PORT_LINK_STATE_FLAG_PERST_ASSERTED BIT(1) +#define CXL_PORT_LINK_STATE_FLAG_PRSNT BIT(2) +#define CXL_PORT_LINK_STATE_FLAG_POWER_OFF BIT(3) + +#endif /* CXL_PORT_H */ --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770894; cv=none; d=zohomail.com; s=zohoarc; b=Li5pWPx0VtCuYKtCXugEqMmyK9AkmjvwtRy/MTO+a6jLqTP9T7dBvOjXwqSnXN5OFOQbPX5cEPk0Nl3m5EoWrsCkw5ZNNQD3zSYhK5x18T8XmDZsON1rBljwY3L83kR4LkkP6Kv0HV+eCAYRSPZ2KfGQG1R1ynXE2Vr70oKQMMY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770894; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=pMGbJNVQmmXj2XYsxDUgnIqhPUEYPSlhqr1KI3l+La8=; b=QZykB0+R0dh5+dG2h1JVtqQqjwtMD/kaL7lIkQhqUoJfaUXtON9PmvnhTbGV1rO5QP6qquANFdYg/zRVSypvkQGCNSu3k0YipiLqfWOdYgVcJxvBxfHbMpxUATnIAkC366/xYFA9ENolLrea7oJDY6sfdRtc8Ej6xQQ1wyweOks= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770894237537.617626809041; Sun, 22 Feb 2026 06:34:54 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuAT7-0001DG-L2; Sun, 22 Feb 2026 09:29:57 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASi-0008OA-16 for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:33 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASf-0006we-4l for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:30 -0500 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-400-5kloRLARMJajr_XJhIloYg-1; Sun, 22 Feb 2026 09:29:22 -0500 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4836cc0b38eso37566925e9.2 for ; Sun, 22 Feb 2026 06:29:22 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483a42effe3sm90117165e9.8.2026.02.22.06.29.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:29:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770565; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=pMGbJNVQmmXj2XYsxDUgnIqhPUEYPSlhqr1KI3l+La8=; b=G9vXIFc6FQjjjnnPiSuAjzkqRPBD3hXVp8s/KM9jR21cKdRxE+rCRogcA4vM0R7hnzOUu6 FCaM9ge/Sn2TKygv2sMMt4+l0oJ430yYM871TTDoelxsc5hc8n2ijiKTjxvjbmd9dtIfEI If4djqEu3P1WejOMGS5a387Wk2zcsXo= X-MC-Unique: 5kloRLARMJajr_XJhIloYg-1 X-Mimecast-MFC-AGG-ID: 5kloRLARMJajr_XJhIloYg_1771770561 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770561; x=1772375361; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=pMGbJNVQmmXj2XYsxDUgnIqhPUEYPSlhqr1KI3l+La8=; b=LyUy9ZAabcpK15aGItakzqSJemdzrsvcz0WvH212d1LHpDfwjc/+mPPOSGwuc35PBy km+BZ16/6M5WMFJEpcpBGh8Dwbr/kK8dVGGyJbaeInUjZeEAiBIgg+d+8hpSB8RIDB78 Oa585A7ynElUi3LCE6zHsNDE3NiUhLSz4b8QoYnt2RCTBXcWO4zE6jTKh2nu5/HysJJN lvAnQh8nxdKnXE88MrjcA1m/GSSlg/8TCqAiIXI4KGFvKUNDjk94EaRu5MXx9OnHc0fF ak7bVnJUpPpQLDC4bbd/6DTKJeujIck0bTw0/edPvm4xG2u0BU2/ZyWCHs9wJhHrcmA9 b3kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770561; x=1772375361; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pMGbJNVQmmXj2XYsxDUgnIqhPUEYPSlhqr1KI3l+La8=; b=v0+gKyfWeLMjIYDDHrTSIL+/pqWvApXJkI1XMrHCSLQ7h9dMQZ2dJ7b+vQgdPjVTId 4BnkO3b6hDlUcaIvzkIqK/+KKD+Gqq3DV1RQNTyvTNI/Xy4zCn8mpPcoME9TJX9EaStZ xe6PvpYnZQooUkj+9ALFxLzFMR+Ldg8xeCSXySpQQMiMftqhkpXLIMRbN9bEhZuJ6hI5 ZjqzrXwgJbc6aRTh5MnLA0cs8REqZ8Oz9KVE33nS1J+A1XRTX+v66KKRBjPABMk4Br/k /LKt4XrnZKvj+CGyeJl2ykZBabPabQ+OvN/AtZDOMMCQW/4n0jMo7Kzms6qbSMaOTc+7 bj/Q== X-Gm-Message-State: AOJu0YwuWSC0OL5jmyZIINKsfLp9M6whVecc9eyod9y6LX3V8j43U8F+ 5czS8SE3n7LzuWtomSasLDZD+hngaqyt2CCmiem1pmVDg6GoLLl+UWcPHqL61oNVXiNntp41/Ir bVKB9YaqIQE2gGNwQ+e9lg/crIGUrK8pyBjpvpGnQUOuXMOag5CjLbnCB5BeO+1TOBYdpn0qY5T 0QGazTfQgML9B1czLJNlXlIY9Jx4aeRJiY3Q== X-Gm-Gg: AZuq6aItlZPD/9FgdQHQThNPa6Tj27zXu1rI1X0n6V9nC853T81137iKB1RM10uiuH5 t1Bd7UYwHUUtrH++VVLwqd6PxFZLpZoSD4QCI07x24gj6bLJNyJK+TzBvWt9KqwizChnhsEkcmx m9tHUflDnN5Gpp5ZQ6RgVhDtOfecRHFIAoRfBl+0A9bnAlc0hSsvAQbGrx7JrsphxitF+vFGyf6 UXEu9P+6QzQFu/iEwP2qiFi1aOVVgOL8/6k9iTQlV/0ifg53kk8Mn3/Af9ZVUsdfE+L0gNlZ2kr 92dT5RSw6FzVqvZI+GUWXG4jk2tyaWgX57vP58QyFatBGfm6n7SaH2mnK9mBnfsbhz6VJvCKzrU OXZW7MeSraVLznshH87QlYPht2ChtE5AHpuaLgETBzz4U6A== X-Received: by 2002:a05:600c:3b18:b0:483:64b4:79da with SMTP id 5b1f17b1804b1-483a95e6b80mr82756985e9.26.1771770561057; Sun, 22 Feb 2026 06:29:21 -0800 (PST) X-Received: by 2002:a05:600c:3b18:b0:483:64b4:79da with SMTP id 5b1f17b1804b1-483a95e6b80mr82756595e9.26.1771770560413; Sun, 22 Feb 2026 06:29:20 -0800 (PST) Date: Sun, 22 Feb 2026 09:29:17 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Jonathan Cameron , Fan Ni Subject: [PULL 26/33] hw/cxl: Get Physical Port State - update for PCIe flit mode Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770894955154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jonathan Cameron Recent support for 256B flits, was not accounted for in this FMAPI command that should be retrieving the current status of Physical Switch Ports. Note x-flit-mode control is via the downstream devices, so for USPs the property must be checked to establish support, but for DSPs this mode is always supported (control is with the next port downstream, typically the end point. All cases the linksta2 register may be queried to obtain current status. Note the PCI spec is a little confusing as it refers to this bit only being non 0 if Device Readiness Status (DRS) is in particular states (basically link trained) but Flit mode is a separate feature and DRS may not be present. It is not yet emulated in QEMU. So assume that we should reflect what states DRS would be reporting if it were actually present. One small thing to note is that the current link width for a port with nothing connected reports the same as the capability. This is odd but valid because the value under these circumstances is undefined (PCIe r6.2 table 7-26 Link Status Register - field Current Link Speed.) Signed-off-by: Jonathan Cameron Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260204173223.44122-3-Jonathan.Cameron@huawei.com> --- hw/cxl/cxl-mailbox-utils.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index 1c8cbe0f68..b6ac987ee0 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -627,9 +627,26 @@ static CXLRetCode cmd_get_physical_port_state(const st= ruct cxl_cmd *cmd, port->config_state =3D CXL_PORT_CONFIG_STATE_DSP; if (ds_dev) { if (object_dynamic_cast(OBJECT(ds_dev), TYPE_CXL_TYPE3)) { + uint16_t lnksta2; + + if (!port_dev->exp.exp_cap) { + return CXL_MBOX_INTERNAL_ERROR; + } + + lnksta2 =3D port_dev->config_read(port_dev, + port_dev->exp.exp_cap + PCI_EXP_LNKSTA2, + sizeof(lnksta2)); + /* Assume MLD for now */ port->connected_device_type =3D CXL_PORT_CONNECTED_DEV_TYPE_3_MLD; + if (lnksta2 & PCI_EXP_LNKSTA2_FLIT) { + port->connected_device_mode =3D + CXL_PORT_CONNECTED_DEV_MODE_256B; + } else { + port->connected_device_mode =3D + CXL_PORT_CONNECTED_DEV_MODE_68B_VH; + } } else { port->connected_device_type =3D CXL_PORT_CONNECTED_DEV_TYPE_PCIE; @@ -642,12 +659,17 @@ static CXLRetCode cmd_get_physical_port_state(const s= truct cxl_cmd *cmd, port->connected_device_mode =3D CXL_PORT_CONNECTED_DEV_MODE_NOT_CXL_OR_DISCONN; } + /* DSP currently always support modes implemented in QEMU */ + port->supported_cxl_mode_bitmask =3D CXL_PORT_SUPPORTS_68B_VH | + CXL_PORT_SUPPORTS_256B; port->supported_ld_count =3D 3; } else if (usp->port =3D=3D in->ports[i]) { /* USP */ port_dev =3D PCI_DEVICE(usp); port->config_state =3D CXL_PORT_CONFIG_STATE_USP; port->connected_device_type =3D 0; /* Reserved for USP */ port->connected_device_mode =3D 0; /* Reserved for USP */ + port->supported_cxl_mode_bitmask =3D CXL_PORT_SUPPORTS_68B_VH | + (CXL_USP(usp)->flitmode ? CXL_PORT_SUPPORTS_256B : 0); } else { return CXL_MBOX_INVALID_INPUT; } @@ -676,8 +698,6 @@ static CXLRetCode cmd_get_physical_port_state(const str= uct cxl_cmd *cmd, /* TODO: Track down if we can get the rest of the info */ port->ltssm_state =3D 0x7; port->first_lane_num =3D 0; - port->link_state =3D 0; - port->supported_cxl_mode_bitmask =3D CXL_PORT_SUPPORTS_68B_VH; } =20 pl_size =3D sizeof(*out) + sizeof(*out->ports) * in->num_ports; --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770912; cv=none; d=zohomail.com; s=zohoarc; b=FEWtLAnLrkOsfjjoSLZRvw3qIN6zIRQDZbhaZ1IuTZW7FYyNWho9rN+sbpwfBuA1YQcTI19tTUfhV7DDcO6taoM2NLMQi+1Nc85s0i28Dw9i7+ljCFYh1xy+gh2otNkttSfa1urlTQJ9tkKHU8CrBWsceGICq5oXlLPrbyfA6YA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770912; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=6zOzo7hNaZJwVvFx3QDu84NhS7TzXFaebjcVobYQalE=; b=b8fxj+fKnfVevGb9pVvIO/MgvK56B8LpIABqAnrJgTLCspgeOzG9mpvRA8wx5yWL/RMQHl6rQSCB1YG7XXFqzc2SvLLGKgorFurN/O6R8AyCzpJjTjjG/oRukLE/JUigWDEuPSDM9st/liMoE+oT6IH8/9NHDkH7/dX3aIGpIJY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770912231241.1754948994045; Sun, 22 Feb 2026 06:35:12 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASn-0000UC-WC; Sun, 22 Feb 2026 09:29:38 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASi-0008VQ-PD for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:33 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASg-0006wm-AB for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:32 -0500 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-6-__gQXQ97PmKzYrPP3gxmLg-1; Sun, 22 Feb 2026 09:29:25 -0500 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-4830e7c6131so34984555e9.2 for ; Sun, 22 Feb 2026 06:29:25 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483a430a33esm78968565e9.32.2026.02.22.06.29.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:29:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770567; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=6zOzo7hNaZJwVvFx3QDu84NhS7TzXFaebjcVobYQalE=; b=PU3OHmNHBUZqst8Kruwzs6V9wV1nvKxpFcKIhgZFyQNAvcTSgoS5xVO47/mOryT+OkOorh Vt4JaZCBmETKCwd5dB7jiey6LLrs9Ucla0bTvbuE/QiiRvrEmdkbDYGCSpGjuc2kKhXQtI pJDv/M8QEZvwhMkFCO2GCUbGYeegrl8= X-MC-Unique: __gQXQ97PmKzYrPP3gxmLg-1 X-Mimecast-MFC-AGG-ID: __gQXQ97PmKzYrPP3gxmLg_1771770565 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770564; x=1772375364; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=6zOzo7hNaZJwVvFx3QDu84NhS7TzXFaebjcVobYQalE=; b=BOvFZCsOf0f8b+iy0EWmRBXhChgPqkt9JjoMilF2eauYU8ysz5aIolMlu1QBRIeMpN p7TouQoHB5SM9XNKkPOBBcvK/gDQ+wgwBjrzqp/Y8BBXx/ZibYCFi+0Lin8vTYiMrFQj BnoNMq3WrLvx9phyCNXQKiPxt5MzU9CjOPqb0t9ywQDkrQfF2nOVXQOkXWpickv5OLYH My/lq8Y1HiYLFU8dotZGvlaOYb2M8RHhf6aNNXFgb58s0IQ0HXBfnM3xZePwjWOJG8Kj SqhYDm9YpzmH771ncpjE51XqexSwNm5ZS4BwyIkTjYxinMl209TTaajinnfYozlI5dHX +5hA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770564; x=1772375364; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6zOzo7hNaZJwVvFx3QDu84NhS7TzXFaebjcVobYQalE=; b=WTm2tMxGxBvEXvCWqRpp2U4oOYssl4TsCrxITfWLQXmWTOwDLiNmZWW6aGCZ9OQ+sg WXLr38FHoOB/nTQgVX1lXyuQtPU5tBIjxKVkIENmgbpGz+6ECcEMwxNMbBbM9MVTBWWS SJ2FNUhW6LYtCu89giClxIP+4fwve+nSoBilUmRRmFHio6lOiBZHxrfWAb3dRBpPgUdP N1rp488lT/amRdCtA7Emzq97cfhNADEcmcayZnSf7czamGFNKf4RVp+vE6G//UB6mpx/ yNWtyWCGMuFWSQq8tv6j8PhtR+gbRUuvqaqjXdQLqSJ5G+DifPhGxUlyWzTD955K5NKx VYVw== X-Gm-Message-State: AOJu0YzquSbK30e8oBr2YN54Eh2iWO8zg8A8Qjo2ZA9Ln3YK5zAbgW/b xEoiHBZRoQmWiIWv6ckr0Zq90FsxZvxvX951BUwq3MqIdbpA2+kUkEnblyMetoSQpBLs35ReT1P SjZ4Hmyrgv9bsA2tV54q2EuuNKCJBbyQAX1iyn+jn5LRK1clMZyE7nCHXmVMb4rZf2TGDc2/dh2 ZwMgjsOnhAYWDPMBwKY/RuEc7qG3g7neA2PQ== X-Gm-Gg: AZuq6aLJAySpdv94RLkw2ytY+0EbUHj1ExnnVgxjmDLol2wb8i5pB58gU3W98pXFAL2 TxEoFjWtp0eI1t6CZRVh9P++iinlgCpkcjBRkR1Voh+ZFH0/lp+l1pgR54RGg+L0M+JUOMvWmQJ dWZ3WSERSYTTpDVv/sqBJB21kkyQwAE8AZJEWwqAH8K+vm7w65zXOC2/pu9ewOCJGrs46MqpIKn lR4Wsoj9Rmz+MpLXHq6+BCKg0q7vNcfiDLo8tc5wgwtw/UmKPQ723s5TIH1fnx+6xWC74ZeyDBP LmZPwQAfHo6aEtAXIy/8LKUc1uUoSNAl6m8nyfu18z7E0leRXMvBDpqtcY8ao565vyl1v5o+3GK NhRlK6GqffbTnIa6nrGnFavljw+hTYmhdI8q3YrF1Sk0sUw== X-Received: by 2002:a05:600c:5020:b0:477:5cc6:7e44 with SMTP id 5b1f17b1804b1-483a95fb698mr105551985e9.11.1771770564228; Sun, 22 Feb 2026 06:29:24 -0800 (PST) X-Received: by 2002:a05:600c:5020:b0:477:5cc6:7e44 with SMTP id 5b1f17b1804b1-483a95fb698mr105551465e9.11.1771770563659; Sun, 22 Feb 2026 06:29:23 -0800 (PST) Date: Sun, 22 Feb 2026 09:29:20 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Arpit Kumar , Jonathan Cameron , Fan Ni , Marcel Apfelbaum Subject: [PULL 27/33] hw/cxl: Add Physical Port Control FMAPI Command (Opcode 5102h) Message-ID: <6e1410fdcf7040b2c32a7845b423ab604384aded.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770914017158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Arpit Kumar Added assert-deassert PERST implementation for physical ports (both USP and DSP's). Assert PERST involves bg operation for holding 100ms. Reset PPB implementation for physical ports. Signed-off-by: Arpit Kumar Co-developed-by: Jonathan Cameron Signed-off-by: Jonathan Cameron Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260204173223.44122-4-Jonathan.Cameron@huawei.com> --- hw/cxl/cxl-mailbox-utils.c | 130 ++++++++++++++++++++ hw/pci-bridge/cxl_downstream.c | 9 ++ hw/pci-bridge/cxl_upstream.c | 1 + include/hw/cxl/cxl_port.h | 20 +++ include/hw/pci-bridge/cxl_downstream_port.h | 12 ++ include/hw/pci-bridge/cxl_upstream_port.h | 2 + 6 files changed, 174 insertions(+) create mode 100644 include/hw/pci-bridge/cxl_downstream_port.h diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index b6ac987ee0..c83b5f90d4 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -17,6 +17,7 @@ #include "hw/cxl/cxl_mailbox.h" #include "hw/cxl/cxl_port.h" #include "hw/pci/pci.h" +#include "hw/pci-bridge/cxl_downstream_port.h" #include "hw/pci-bridge/cxl_upstream_port.h" #include "qemu/cutils.h" #include "qemu/host-utils.h" @@ -119,6 +120,7 @@ enum { PHYSICAL_SWITCH =3D 0x51, #define IDENTIFY_SWITCH_DEVICE 0x0 #define GET_PHYSICAL_PORT_STATE 0x1 + #define PHYSICAL_PORT_CONTROL 0x2 TUNNEL =3D 0x53, #define MANAGEMENT_COMMAND 0x0 FMAPI_DCD_MGMT =3D 0x56, @@ -616,6 +618,7 @@ static CXLRetCode cmd_get_physical_port_state(const str= uct cxl_cmd *cmd, struct cxl_fmapi_port_state_info_block *port; /* First try to match on downstream port */ PCIDevice *port_dev; + CXLPhyPortPerst *perst; uint16_t lnkcap, lnkcap2, lnksta; =20 port =3D &out->ports[i]; @@ -663,6 +666,7 @@ static CXLRetCode cmd_get_physical_port_state(const str= uct cxl_cmd *cmd, port->supported_cxl_mode_bitmask =3D CXL_PORT_SUPPORTS_68B_VH | CXL_PORT_SUPPORTS_256B; port->supported_ld_count =3D 3; + perst =3D cxl_dsp_get_perst(CXL_DSP(port_dev)); } else if (usp->port =3D=3D in->ports[i]) { /* USP */ port_dev =3D PCI_DEVICE(usp); port->config_state =3D CXL_PORT_CONFIG_STATE_USP; @@ -670,6 +674,7 @@ static CXLRetCode cmd_get_physical_port_state(const str= uct cxl_cmd *cmd, port->connected_device_mode =3D 0; /* Reserved for USP */ port->supported_cxl_mode_bitmask =3D CXL_PORT_SUPPORTS_68B_VH | (CXL_USP(usp)->flitmode ? CXL_PORT_SUPPORTS_256B : 0); + perst =3D &CXL_USP(usp)->perst; } else { return CXL_MBOX_INVALID_INPUT; } @@ -698,6 +703,7 @@ static CXLRetCode cmd_get_physical_port_state(const str= uct cxl_cmd *cmd, /* TODO: Track down if we can get the rest of the info */ port->ltssm_state =3D 0x7; port->first_lane_num =3D 0; + port->link_state =3D perst ? CXL_PORT_LINK_STATE_FLAG_PERST_ASSERT= ED : 0; } =20 pl_size =3D sizeof(*out) + sizeof(*out->ports) * in->num_ports; @@ -706,6 +712,115 @@ static CXLRetCode cmd_get_physical_port_state(const s= truct cxl_cmd *cmd, return CXL_MBOX_SUCCESS; } =20 +static void *bg_assertcb(void *opaque) +{ + CXLPhyPortPerst *perst =3D opaque; + + /* holding reset phase for 100ms */ + while (perst->asrt_time--) { + usleep(1000); + } + perst->issued_assert_perst =3D true; + return NULL; +} + +static CXLRetCode cxl_deassert_perst(Object *obj, CXLPhyPortPerst *perst) +{ + if (!perst->issued_assert_perst) { + return CXL_MBOX_INTERNAL_ERROR; + } + + QEMU_LOCK_GUARD(&perst->lock); + resettable_release_reset(obj, RESET_TYPE_COLD); + perst->issued_assert_perst =3D false; + perst->asrt_time =3D ASSERT_WAIT_TIME_MS; + + return CXL_MBOX_SUCCESS; +} + +static CXLRetCode cxl_assert_perst(Object *obj, CXLPhyPortPerst *perst) +{ + if (cxl_perst_asserted(perst)) { + return CXL_MBOX_INTERNAL_ERROR; + } + + QEMU_LOCK_GUARD(&perst->lock); + resettable_assert_reset(obj, RESET_TYPE_COLD); + qemu_thread_create(&perst->asrt_thread, "assert_thread", bg_assertcb, + perst, QEMU_THREAD_DETACHED); + + return CXL_MBOX_SUCCESS; +} + +static CXLDownstreamPort *cxl_find_dsp_on_bus(PCIBus *bus, uint8_t pn) +{ + + PCIDevice *port_dev =3D pcie_find_port_by_pn(bus, pn); + + if (object_dynamic_cast(OBJECT(port_dev), TYPE_CXL_DSP)) { + return CXL_DSP(port_dev); + } + + return NULL; +} + +/* CXL r3.2 Section 7.6.7.1.3: Get Physical Port Control (Opcode 5102h) */ +static CXLRetCode cmd_physical_port_control(const struct cxl_cmd *cmd, + uint8_t *payload_in, + size_t len_in, + uint8_t *payload_out, + size_t *len_out, + CXLCCI *cci) +{ + CXLUpstreamPort *pp =3D CXL_USP(cci->d); + CXLPhyPortPerst *perst; + PCIDevice *dev; + + struct cxl_fmapi_get_physical_port_control_req_pl { + uint8_t ppb_id; + uint8_t ports_op; + } QEMU_PACKED *in =3D (void *)payload_in; + + if (len_in < sizeof(*in)) { + return CXL_MBOX_INVALID_PAYLOAD_LENGTH; + } + + if (PCIE_PORT(pp)->port =3D=3D in->ppb_id) { + dev =3D PCI_DEVICE(pp); + perst =3D &pp->perst; + } else { + CXLDownstreamPort *dsp =3D + cxl_find_dsp_on_bus(&PCI_BRIDGE(pp)->sec_bus, in->ppb_id); + + if (!dsp) { + return CXL_MBOX_INVALID_INPUT; + } + dev =3D PCI_DEVICE(dsp); + perst =3D cxl_dsp_get_perst(dsp); + } + + switch (in->ports_op) { + case 0: + return cxl_assert_perst(OBJECT(&dev->qdev), perst); + case 1: + return cxl_deassert_perst(OBJECT(&dev->qdev), perst); + case 2: { + if (!perst) { + return CXL_MBOX_INVALID_INPUT; + } + + if (perst->issued_assert_perst || + perst->asrt_time < ASSERT_WAIT_TIME_MS) { + return CXL_MBOX_INTERNAL_ERROR; + } + device_cold_reset(&dev->qdev); + return CXL_MBOX_SUCCESS; + } + default: + return CXL_MBOX_INVALID_INPUT; + } +} + /* CXL r3.1 Section 8.2.9.1.2: Background Operation Status (Opcode 0002h) = */ static CXLRetCode cmd_infostat_bg_op_sts(const struct cxl_cmd *cmd, uint8_t *payload_in, @@ -4412,6 +4527,8 @@ static const struct cxl_cmd cxl_cmd_set_sw[256][256] = =3D { cmd_identify_switch_device, 0, 0 }, [PHYSICAL_SWITCH][GET_PHYSICAL_PORT_STATE] =3D { "SWITCH_PHYSICAL_PORT= _STATS", cmd_get_physical_port_state, ~0, 0 }, + [PHYSICAL_SWITCH][PHYSICAL_PORT_CONTROL] =3D { "SWITCH_PHYSICAL_PORT_C= ONTROL", + cmd_physical_port_control, 2, 0 }, [TUNNEL][MANAGEMENT_COMMAND] =3D { "TUNNEL_MANAGEMENT_COMMAND", cmd_tunnel_management_cmd, ~0, 0 }, }; @@ -4618,6 +4735,19 @@ static void cxl_rebuild_cel(CXLCCI *cci) } } =20 +void cxl_init_physical_port_control(CXLPhyPortPerst *perst) +{ + qemu_mutex_init(&perst->lock); + perst->issued_assert_perst =3D false; + /* + * Assert PERST involves physical port to be in + * hold reset phase for minimum 100ms. No other + * physical port control requests are entertained + * until Deassert PERST command. + */ + perst->asrt_time =3D ASSERT_WAIT_TIME_MS; +} + void cxl_init_cci(CXLCCI *cci, size_t payload_max) { cci->payload_max =3D payload_max; diff --git a/hw/pci-bridge/cxl_downstream.c b/hw/pci-bridge/cxl_downstream.c index 320818a8f1..ec450d1aa0 100644 --- a/hw/pci-bridge/cxl_downstream.c +++ b/hw/pci-bridge/cxl_downstream.c @@ -13,9 +13,11 @@ #include "hw/pci/msi.h" #include "hw/pci/pcie.h" #include "hw/pci/pcie_port.h" +#include "hw/pci-bridge/cxl_downstream_port.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev-properties-system.h" #include "hw/cxl/cxl.h" +#include "hw/cxl/cxl_port.h" #include "qapi/error.h" =20 typedef struct CXLDownstreamPort { @@ -24,6 +26,7 @@ typedef struct CXLDownstreamPort { =20 /*< public >*/ CXLComponentState cxl_cstate; + CXLPhyPortPerst perst; } CXLDownstreamPort; =20 #define CXL_DOWNSTREAM_PORT_MSI_OFFSET 0x70 @@ -81,6 +84,11 @@ static void cxl_dsp_config_write(PCIDevice *d, uint32_t = address, cxl_dsp_dvsec_write_config(d, address, val, len); } =20 +CXLPhyPortPerst *cxl_dsp_get_perst(CXLDownstreamPort *dsp) +{ + return &dsp->perst; +} + static void cxl_dsp_reset(DeviceState *qdev) { PCIDevice *d =3D PCI_DEVICE(qdev); @@ -92,6 +100,7 @@ static void cxl_dsp_reset(DeviceState *qdev) pci_bridge_reset(qdev); =20 latch_registers(dsp); + cxl_init_physical_port_control(&dsp->perst); } =20 static void build_dvsecs(PCIDevice *d, CXLComponentState *cxl) diff --git a/hw/pci-bridge/cxl_upstream.c b/hw/pci-bridge/cxl_upstream.c index fb8d19539c..b6281cbd4c 100644 --- a/hw/pci-bridge/cxl_upstream.c +++ b/hw/pci-bridge/cxl_upstream.c @@ -103,6 +103,7 @@ static void cxl_usp_reset(DeviceState *qdev) pcie_cap_deverr_reset(d); pcie_cap_fill_link_ep_usp(d, usp->width, usp->speed, usp->flitmode); latch_registers(usp); + cxl_init_physical_port_control(&usp->perst); } =20 static void build_dvsecs(CXLUpstreamPort *usp) diff --git a/include/hw/cxl/cxl_port.h b/include/hw/cxl/cxl_port.h index 04db60f7bc..fb2e22a9f2 100644 --- a/include/hw/cxl/cxl_port.h +++ b/include/hw/cxl/cxl_port.h @@ -3,6 +3,8 @@ #ifndef CXL_PORT_H #define CXL_PORT_H =20 +#include "qemu/thread.h" + /* CXL r3.2 Table 7-19: Get Physical Port State Port Information Block For= mat */ #define CXL_PORT_CONFIG_STATE_DISABLED 0x0 #define CXL_PORT_CONFIG_STATE_BIND_IN_PROGRESS 0x1 @@ -50,4 +52,22 @@ #define CXL_PORT_LINK_STATE_FLAG_PRSNT BIT(2) #define CXL_PORT_LINK_STATE_FLAG_POWER_OFF BIT(3) =20 +#define CXL_MAX_PHY_PORTS 256 +#define ASSERT_WAIT_TIME_MS 100 /* Assert - Deassert PERST */ + +/* Assert - Deassert PERST */ +typedef struct CXLPhyPortPerst { + bool issued_assert_perst; + QemuMutex lock; /* protecting assert-deassert reset request */ + uint64_t asrt_time; + QemuThread asrt_thread; /* thread for 100ms delay */ +} CXLPhyPortPerst; + +void cxl_init_physical_port_control(CXLPhyPortPerst *perst); + +static inline bool cxl_perst_asserted(CXLPhyPortPerst *perst) +{ + return perst->issued_assert_perst || perst->asrt_time < ASSERT_WAIT_TI= ME_MS; +} + #endif /* CXL_PORT_H */ diff --git a/include/hw/pci-bridge/cxl_downstream_port.h b/include/hw/pci-b= ridge/cxl_downstream_port.h new file mode 100644 index 0000000000..1611504c87 --- /dev/null +++ b/include/hw/pci-bridge/cxl_downstream_port.h @@ -0,0 +1,12 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef CXL_DOWNSTREAM_PORT_H +#define CXL_DOWNSTREAM_PORT_H +#include "include/hw/cxl/cxl_port.h" + +typedef struct CXLDownstreamPort CXLDownstreamPort; +CXLPhyPortPerst *cxl_dsp_get_perst(CXLDownstreamPort *dsp); + +#endif diff --git a/include/hw/pci-bridge/cxl_upstream_port.h b/include/hw/pci-bri= dge/cxl_upstream_port.h index e3d6a27acc..dfe01771c7 100644 --- a/include/hw/pci-bridge/cxl_upstream_port.h +++ b/include/hw/pci-bridge/cxl_upstream_port.h @@ -4,6 +4,7 @@ #include "hw/pci/pcie.h" #include "hw/pci/pcie_port.h" #include "hw/cxl/cxl.h" +#include "hw/cxl/cxl_port.h" =20 typedef struct CXLUpstreamPort { /*< private >*/ @@ -12,6 +13,7 @@ typedef struct CXLUpstreamPort { /*< public >*/ CXLComponentState cxl_cstate; CXLCCI swcci; + CXLPhyPortPerst perst; =20 PCIExpLinkSpeed speed; PCIExpLinkWidth width; --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770708; cv=none; d=zohomail.com; s=zohoarc; b=O2rCoe8W+EjMdRxSdz1KW+/b8d389DAvYxEse1nqqbjTH6K6a8iG4TA3NQZA3Xyq9nLP0cnPeMZwOKz3Pk/rkHwmK4FaovGa31vrnnFQ4nj3uvRwc8ABwbVsiS88yukuh1l7p2yLcBEtICbXwmOvjgJEccHYagS0iXmnYuqOjak= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770708; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=KS5MDuR4OMK9CX015rS11PKDv5GZRhv1uZXIyizwmFE=; b=VoHpbR/YNWnp2h7pxHyFIn0DIeU07pzFOCDGpA7iD3v8vs7RNN6KEspn4xv4DfLZjmmouR3f9XycAk8/qJ3OY2FBzwr0+VsJYmQP1PrrTuGDVD9U7BJin2uh1pSfMV+zAjTfqnB+UImMB+vn0HFrPat4Rwsur1ta9VgpgWb9DtQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770708456960.4089051093526; Sun, 22 Feb 2026 06:31:48 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASm-0000GY-DW; Sun, 22 Feb 2026 09:29:36 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASi-0008Od-98 for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:33 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASg-0006xr-Qh for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:32 -0500 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-154-sqQvnwRbM0-2ZFL4_BMlxw-1; Sun, 22 Feb 2026 09:29:28 -0500 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4836ff58111so46686985e9.1 for ; Sun, 22 Feb 2026 06:29:27 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970d4c96csm13631938f8f.30.2026.02.22.06.29.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:29:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770569; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=KS5MDuR4OMK9CX015rS11PKDv5GZRhv1uZXIyizwmFE=; b=M6gctbQrT9AFShnp9ZVVy6d/UOjD0CvPWlPz2bexkp2V/hsq6UV6FRVmAYvoaGHryrfhu9 fDu661YOPBzQLBj1cq/JbJo9ZSviGvF2kTFzppblj9m6D/OwM6Rb9/ic7Y2RDFmplUdG7h 9Fwp99W7zPSG7oRiPlEQMfnq/oOMcBk= X-MC-Unique: sqQvnwRbM0-2ZFL4_BMlxw-1 X-Mimecast-MFC-AGG-ID: sqQvnwRbM0-2ZFL4_BMlxw_1771770567 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770567; x=1772375367; darn=nongnu.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=KS5MDuR4OMK9CX015rS11PKDv5GZRhv1uZXIyizwmFE=; b=Ui4vlPI4GiN50VL4yLXaTtwuu4ampNW2JMUjI7fZmQVZBv3lXsQVeXwwquIJb+DqKm 2C2QPjnObBJ0VT8Xkgd2W5bTbtHA5DE2dFrRH2fPC87xFOAbwG9Eb9S1WfCUAKdqAaY9 TC/7ZLomPrp46Bu7S7sJHCiP9GFg49C1oq1VYh/0mNKwOWgX/uMmjZUCxqcYMCDEfSv1 CE2wn1sd1w7BzU6WaxlpkawelbPNJ+uIswad64ZsGoxwX89VLqTk6BGpLgVbjyLpIte+ MFsasLCaZZyH06DVBK93Z7aZqUu+DHcHbTtI5XJ446LZ/vBWLKCtWd+83MsuA1jlG4O3 agpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770567; x=1772375367; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=KS5MDuR4OMK9CX015rS11PKDv5GZRhv1uZXIyizwmFE=; b=bAifyIRGPrX5JvASl5Gm9NBkVJNjnJeyWYnZs6DpNCLEm4dcTNGy6k61khEf0/PgoI JuTLa9eRvaQNvwh4RNT3iOgcAAelHBkgTj4qBG5svCRE+RYuImjIONvTBZxx13cooLN7 ddwx6TaPfqmY/abMF4I4zKje51QFPMVX7EDG45YT50QhAz8LyS11D/AzZXgFt7IESXpl E87VsgbDMHuEVcHq0w3tMPGIGqVelFtpFyyzv0Gj754t+La6BrnfeePXqZAPMoovC8ar ludMvekP66JkDgq4sg4XlE+tOYqhMyLtLXzmxwvhu+Zq5JwLI8EKmrb+70CTHafJQRaV o/Kg== X-Gm-Message-State: AOJu0Yw+8vFGlPv1B6yZKlI9ClN9ZN6Vhs1MXm4orlhlwG3vfpkB6gPM jyqu55AqnCoZHhht9isgLAe0whAwGekWKeE+z3QQZDVFUBM3mpynnSWPciZNDarTYiCky6IPJHv kvEd7q6QDUDlD6etnObY3LIvhrxUMSC+c1yfissWgMxe66ElmHcgoTPq9o+LjWQaXoIty+K2SFK RQl0kBJ9rWTlNo43I8vYs9zE7K1UpH8vDf4A== X-Gm-Gg: AZuq6aKcgaRqJaVrDIbaQRHrsDkvy7NxrRkfbltj5ea/bxgRbYkrLEEHfLaH73snfLC nIpBJfskPRkVONibCfeJag1O1D+AGX3GLwFEWGAFkoPdY/UPcg7UlR6kF4mYkuQaLLwNdXFqUvJ 2uuGctc8QF6lXdaImARrlTJdW6dgu94mxBmlh+BrxEjWby5qhYUCgGxAnhxBUjjPcQZzpp2aoWl /Zk/yu7nqQhXAavmaOLoujecH/vbo1w/Hw4kxoAKmqoj9c24R7jdIUhwJbhlw47GucmYGc8aEFC Ei1iMH5okcXaq1g0U4EOw4EMSYzJdv8HkIWCFfiYnPmQ1KdHv5C2mFUc+3LS97aneJfZ0BxihPu LD4V/UFQDzKeP73IHJ7tbCdaook+VcaknVoxEcnm9R4nhnw== X-Received: by 2002:a05:600c:3b11:b0:483:79a6:e7e1 with SMTP id 5b1f17b1804b1-483a95b5a72mr99729945e9.7.1771770566580; Sun, 22 Feb 2026 06:29:26 -0800 (PST) X-Received: by 2002:a05:600c:3b11:b0:483:79a6:e7e1 with SMTP id 5b1f17b1804b1-483a95b5a72mr99729545e9.7.1771770566024; Sun, 22 Feb 2026 06:29:26 -0800 (PST) Date: Sun, 22 Feb 2026 09:29:23 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Manos Pitsidianakis , Alex =?utf-8?Q?Benn=C3=A9e?= , Philippe =?utf-8?Q?Mathieu-Daud=C3=A9?= , Thomas Huth , Pierrick Bouvier , Richard Henderson , =?utf-8?Q?C=C3=A9dric?= Le Goater Subject: [PULL 28/33] MAINTAINERS: add me as maintainer to virtio-snd Message-ID: <5cf298a394f230d919a8b44a2bdc17fc3149c0dd.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=-1, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770710430154100 From: Manos Pitsidianakis Cc: Michael S. Tsirkin Signed-off-by: Manos Pitsidianakis Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260220-virtio-snd-series-v1-1-207c4f7200a2@linaro.org> --- MAINTAINERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index 8df82f313e..4918f41ec4 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2602,7 +2602,7 @@ F: include/hw/virtio/virtio-mem.h =20 virtio-snd M: Gerd Hoffmann -R: Manos Pitsidianakis +M: Manos Pitsidianakis S: Supported F: hw/audio/virtio-snd.c F: hw/audio/virtio-snd-pci.c --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770669; cv=none; d=zohomail.com; s=zohoarc; b=D6/aFbEWLAmOfDEJAuez9WCcB18WuREZNiPMjTL5xX1ULxFQ4p0Lk58hIgVTIMsrifmUIHBF5fZPU+0epoDmvUVeoRl7SebefwTe7zJg7qg141QFifL7PTMFiyN6KgPpXgItnrt842Bfz5kuDnd2Fhr45PEm54SHfNJ6QhStaxY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770669; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=J7AJZnREnnuh4n1i+AX40VBaQWcsT67HBrhxUk6jlr8=; b=nVlTo714ax32XqYtH5bG21Xr8o24+eHcY6cic1iNkBN6Lk/YHF3xnNajGB7JdEHEukGXyp+rZ1n5w2Hk7mqiHJmvF7m+HjuEsCd2jlAtgVScNBCmkyut1PWL5+mOE7hUy2vUc3iV9HYKweTugSGiIZbm6RPxWP1qyF275INGojs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770669526658.6798713012693; Sun, 22 Feb 2026 06:31:09 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASr-0000hK-2X; Sun, 22 Feb 2026 09:29:42 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASm-0000GU-Ac for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:36 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASj-00071y-J9 for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:36 -0500 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-673-1unnFZ5kMUqHbLLR-ZEISQ-1; Sun, 22 Feb 2026 09:29:30 -0500 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-4837cee2e9bso6425305e9.3 for ; Sun, 22 Feb 2026 06:29:30 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970d54760sm12545551f8f.35.2026.02.22.06.29.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:29:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770572; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=J7AJZnREnnuh4n1i+AX40VBaQWcsT67HBrhxUk6jlr8=; b=i8Ubzms7HkjbSeYiNkU8CcEddnWxGbL0hEboWNHQABWjBAmub5Odih62Gvp2XCP+Td4Vt5 1sHvfxTIb36ZIiquxkq/P6UJXTVAT0QGA5jDnKNoZADuOR1oB08aRxlPvVlBFHYdKAnOep sbYluteesQRE7i95dT8oHyqOMJSsdho= X-MC-Unique: 1unnFZ5kMUqHbLLR-ZEISQ-1 X-Mimecast-MFC-AGG-ID: 1unnFZ5kMUqHbLLR-ZEISQ_1771770569 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770569; x=1772375369; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=J7AJZnREnnuh4n1i+AX40VBaQWcsT67HBrhxUk6jlr8=; b=gUouyI+Fmp6dARRwxEQy6hd8VKdA06M823EZQcz8xxDWFxGHHQAa7AifDYuV50AQ4L u0fe8noDwT7Hs+HGtMq8lrH5LhHb9mpYXmG6UljbcaiEdrlo4bGCm0rOvsMgW+wF9IKy Bd+Y0I7oN7BmqRxbPJLn8hdR6LMcfLZ7y7js4o5ZBotITP+R7oBCsYQGk0KhPDL63HYw I/gRli6kFoSjIK2SXDlYoK2OGkKuCkmqtjPQWVqhbSBu0pkjNet4iWnqzNBMfkst23Ug pR9CEqSEEKYOGqMtUcfIGg6e0G6yA6v3L5Jwme3FuEz2zS5iwLrQaxFzJK1T73qA0EDY MHVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770569; x=1772375369; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=J7AJZnREnnuh4n1i+AX40VBaQWcsT67HBrhxUk6jlr8=; b=eP5hnYRijomCp6pBvF4L+g+K9/y2fmRZKWJduQ5iqBC9X3RRjbQFmAlydBDAz7tdCJ ZkkFYQ9+O7dfMlFiuoe81CeXkQmUIVfAgDaW+dx7Q4HrxrggQIfnpjpM7ltEmoou0LPr PTyhb8Hma+3CTzIz5/fkgQKJJFLfiN0Qzt/8HszxXyPhmt1Npw8vN8Q02ZaJijovzv6G axrMK3lQlBNU4QCTweaPAWXX+xq/ScvAl6GiqZ8j2Mn/128fWghzt6ZhCsX+W5ILimMa +qOIOdb+pVn3/WnNsQ0Fk6cPPKXd9XRlM29mlTnAjX0f6ufIypW9b313lnLNhPkPsXHP lqdQ== X-Gm-Message-State: AOJu0YxEsw8iZabyysYIsgdLBxpGsevU2nc8cnSk3XNyPWsnrg94c7c4 lGLhekr2eNy7i8YzTUWnpz5SxdLKo3jUMbRFMy1FUyXu4OhSz25qBYSsqCuOol/ejz3SFH3ZyZo eepT0lmXelc1oM4QYI9OdSqiSleSdHxyJ4XnFrp+Qi5juQsE+qSe0DyMkmRSrLyquziT+HZ/Nre FgNivmBFyzMaNOOb6Wg5g4xvsiEBWfNaFayg== X-Gm-Gg: AZuq6aI5JI5tn4CCKOplua5Tcuu0G7/XI36Q0jo0sgGkGCFeCW9pM1AUpNjw5FFhcj0 lL6IgdrmTtjdKbSekdscO7ZC/M8/vOR1vzO+JpO+ByX3plkY89rwq6XL4xUha36v0eAhfu5tORu H8MgwD0XNC2p4Ouj+HSTcO3JXUi1F7xK0zV7ESBwhuwJDSWhiqwdkaDYSjHEDgKXDJhFJPn3dCk SHm8pvETF0kDyaaD1REqgpKxghPrEfwiOqvEc8GAcF3DJG94CeblSLcLbVWuimfB+f6b3+vOCXV vegwX+NNIUprbxb+NDM5pLoKl7Jx2nnIlpchXgQFJtivgvBHEpwH+etekAq4+AjkICi0tHWHqyT /bHBipbJqPNd7p+rgRAT4NszawZ0lV4U4FYlyZYEH3ZpcwQ== X-Received: by 2002:a05:600c:1e0f:b0:46e:4a13:e6c6 with SMTP id 5b1f17b1804b1-483afea0266mr23819735e9.19.1771770568780; Sun, 22 Feb 2026 06:29:28 -0800 (PST) X-Received: by 2002:a05:600c:1e0f:b0:46e:4a13:e6c6 with SMTP id 5b1f17b1804b1-483afea0266mr23819295e9.19.1771770568082; Sun, 22 Feb 2026 06:29:28 -0800 (PST) Date: Sun, 22 Feb 2026 09:29:26 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Manos Pitsidianakis , Gerd Hoffmann Subject: [PULL 29/33] virtio-snd: remove TODO comments Message-ID: <34238f078a04f24b91199249b83846ab082b4e05.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -4 X-Spam_score: -0.5 X-Spam_bar: / X-Spam_report: (-0.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770672086154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Manos Pitsidianakis Replying with a VIRTIO_SND_S_BAD_MSG error does not warrant a device reset. Instead, a device reset happens when the driver requests it from the transport. Signed-off-by: Manos Pitsidianakis Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260220-virtio-snd-series-v1-2-207c4f7200a2@linaro.org> --- hw/audio/virtio-snd.c | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index ed0422b45a..232179a04a 100644 --- a/hw/audio/virtio-snd.c +++ b/hw/audio/virtio-snd.c @@ -168,9 +168,6 @@ static void virtio_snd_handle_pcm_info(VirtIOSound *s, sizeof(virtio_snd_query_info)); =20 if (msg_sz !=3D sizeof(virtio_snd_query_info)) { - /* - * TODO: do we need to set DEVICE_NEEDS_RESET? - */ qemu_log_mask(LOG_GUEST_ERROR, "%s: virtio-snd command size incorrect %zu vs \ %zu\n", __func__, msg_sz, sizeof(virtio_snd_query_info)); @@ -184,9 +181,6 @@ static void virtio_snd_handle_pcm_info(VirtIOSound *s, =20 if (iov_size(cmd->elem->in_sg, cmd->elem->in_num) < sizeof(virtio_snd_hdr) + size * count) { - /* - * TODO: do we need to set DEVICE_NEEDS_RESET? - */ error_report("pcm info: buffer too small, got: %zu, needed: %zu", iov_size(cmd->elem->in_sg, cmd->elem->in_num), sizeof(virtio_snd_pcm_info)); @@ -244,9 +238,6 @@ uint32_t virtio_snd_set_pcm_params(VirtIOSound *s, virtio_snd_pcm_set_params *st_params; =20 if (stream_id >=3D s->snd_conf.streams || s->pcm->pcm_params =3D=3D NU= LL) { - /* - * TODO: do we need to set DEVICE_NEEDS_RESET? - */ virtio_error(VIRTIO_DEVICE(s), "Streams have not been initialized.= \n"); return cpu_to_le32(VIRTIO_SND_S_BAD_MSG); } @@ -297,9 +288,6 @@ static void virtio_snd_handle_pcm_set_params(VirtIOSoun= d *s, sizeof(virtio_snd_pcm_set_params)); =20 if (msg_sz !=3D sizeof(virtio_snd_pcm_set_params)) { - /* - * TODO: do we need to set DEVICE_NEEDS_RESET? - */ qemu_log_mask(LOG_GUEST_ERROR, "%s: virtio-snd command size incorrect %zu vs \ %zu\n", __func__, msg_sz, sizeof(virtio_snd_pcm_set_params= )); @@ -610,9 +598,6 @@ static void virtio_snd_handle_pcm_release(VirtIOSound *= s, sizeof(stream_id)); =20 if (msg_sz !=3D sizeof(stream_id)) { - /* - * TODO: do we need to set DEVICE_NEEDS_RESET? - */ qemu_log_mask(LOG_GUEST_ERROR, "%s: virtio-snd command size incorrect %zu vs \ %zu\n", __func__, msg_sz, sizeof(stream_id)); @@ -624,9 +609,6 @@ static void virtio_snd_handle_pcm_release(VirtIOSound *= s, trace_virtio_snd_handle_pcm_release(stream_id); stream =3D virtio_snd_pcm_get_stream(s, stream_id); if (stream =3D=3D NULL) { - /* - * TODO: do we need to set DEVICE_NEEDS_RESET? - */ error_report("already released stream %"PRIu32, stream_id); virtio_error(VIRTIO_DEVICE(s), "already released stream %"PRIu32, @@ -669,9 +651,6 @@ process_cmd(VirtIOSound *s, virtio_snd_ctrl_command *cm= d) sizeof(virtio_snd_hdr)); =20 if (msg_sz !=3D sizeof(virtio_snd_hdr)) { - /* - * TODO: do we need to set DEVICE_NEEDS_RESET? - */ qemu_log_mask(LOG_GUEST_ERROR, "%s: virtio-snd command size incorrect %zu vs \ %zu\n", __func__, msg_sz, sizeof(virtio_snd_hdr)); --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770684; cv=none; d=zohomail.com; s=zohoarc; b=e2SCv2v1+5KnrzXQxWJTcX3ba1qLxY+GO9Pcg7gV8Z9oZL89wfjxEG5DDznFufXyOI66ZWGuUODlzsw2WeiobQgUBPfC8JmB8cMdJHZspzNL/5OyNDj5yLl0Heoprc5D4/nJq6j09+5th7Ix3daykFJayR0so4GjWElN6wSJodo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770684; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=uKkPVQcUkW331rdfnbO03ZD7znaM0qOM81kMUIFvtcA=; b=dKGs2/4RM+Denz5noWdT82UkI2gpDVHJKb0yDsTH8n11LN/yJ/5kjcZRudga/2bwGDvBl4zPNdc014Nczo0OFtL64wZaAbXnbXW94y6HHtd+yl7yCqWYn0I977lGRGALy2VzQq75TlIN681RPQJmDQOQcHtbDZEmgXU2SJK5MKU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17717706845146.471948799618644; Sun, 22 Feb 2026 06:31:24 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASo-0000Z1-LC; Sun, 22 Feb 2026 09:29:38 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASm-0000It-Jp for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:36 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASk-00072A-Au for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:36 -0500 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-633-I4xSJUO3NmOe0VNpmagAOQ-1; Sun, 22 Feb 2026 09:29:32 -0500 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-483786a09b1so38834705e9.3 for ; Sun, 22 Feb 2026 06:29:32 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483a9b66932sm134821565e9.1.2026.02.22.06.29.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:29:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770573; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=uKkPVQcUkW331rdfnbO03ZD7znaM0qOM81kMUIFvtcA=; b=iUr1kcJ6V/NCM/Ojk1/88ySMdyPnrHl/YEoD3evFhOQtd4JLNlaLdbSmbdKvRwDwG4Kyeo HrBx/shw1JcKv4jic71S3S0ZwF2dOVU5W57h4Sc2Jkkr9kv0pAZzbUAQvAjL0uFClRg845 gmiyAFr1CDB+EnWJ2Iew0J9JKgTOWus= X-MC-Unique: I4xSJUO3NmOe0VNpmagAOQ-1 X-Mimecast-MFC-AGG-ID: I4xSJUO3NmOe0VNpmagAOQ_1771770571 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770571; x=1772375371; darn=nongnu.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=uKkPVQcUkW331rdfnbO03ZD7znaM0qOM81kMUIFvtcA=; b=IX8rIribQt4qN3BuwcXUMIawjPk5wIOf7tP4ZEFm1Px/DjFD2MqED5Ligtpfe6nThq oyWv1sLdo3pC7rm9DE0+sxfOwH3+dhSjM3LHje6/vnK/LYc0juIGr7gkfEJzLmclYQMU ANz3uELgEZa6csKnxUZUjNDUSPLi1lXO+d1LP2xelRitl91eGH6A+00TeG+WLLFNwP8l obr/JkbXGBJgeAg1NiF3Z90Rrj2qZfstYBob3EaifqlIJU6isPWJOVEe2Q3rDWe1N9F7 hm44flYtPiZDr4kiodRTcDKNnr8hdHFfR3xIpl8nJh5KVibOMKXDxrFz3TBzbvGcDIMn AF6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770571; x=1772375371; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=uKkPVQcUkW331rdfnbO03ZD7znaM0qOM81kMUIFvtcA=; b=JyaIbK4CzOmsIexcXFsxzCtZ8Wtc8JVVLwdsxIRlzE1vHpzzNQpy4givfMU0S7UK8D vPGS6EozhL3Ib14lAR48a8ADSeeZ7KOMceU2cGhtbhdy/5XN2oDIlXcymX3sg2ybGITp 7bmZEn+eK/EpsI6hCHW52xWa9IZafCal7JcaJgJo+RDIwXNmn2egfZSemKzbrGDB4qON cNLBq0LAWBurcwBijhx3EVaY1UWQyRroy1lr7v6k5PTqgUrf2ibHMe3RbkuDwkXHLdbR 3xIkWwKrC692Z7WtkEQPj7P5j8KKkki4atrRXa1aPJRNKMuRmCL7yz94VWlsBV+5+uzR u4yQ== X-Gm-Message-State: AOJu0YzFBMSAPhJj+IUsaMo7eoym0u76ORNxRd2OQH4h2fhKY26483Iw N6J1+5ByZpyK/yKc98nyJeCoTOv/GM9GrRFxo9F2PHQFV4KzFgWbve6a+fPOF8lWP8R79WSi4Mt LajTAau1j0NlHX04kqpWXe60f/B/uI7ao9t0EcsAcVlZtiDyMcuPOx2EnEic2had50ug+Vy2Jrb 0+vIHW10jAY2bq9BPpwhM36kWu4i0WBJJk9w== X-Gm-Gg: AZuq6aKtu+frS6hIzXoBSNc4o94b9KiNX+eG9vSuUHEN52PWK3YhHF68Gv03P8bavxp G5kff+Orc+0m5DHD7CvH3XiFjGeDf3zxMW/nhT6t1hKE0A0JY+rW5ElJhb7MX94Eu+ydYc3vSNl dwkarQ2TYAG+LqQnM8fqx6f8eIXQQi8hz/isIC0V8ojZ4ECmOfifaPz8GtWBUhxPzju/FaZoo/x Ka/Dd7Ivq7OrPxF6YlOQymdjp1aL3TbzEybGd6jZFPakq1OKEtwSYm0t4vbaWaJWOQDVedQXfus euWFs2MkeE8JXPDPdM9RjcHsCApkPdwAhmDQatCBQa3WbYjR70uzZdqTwl8b4h5p4PxoNv6qzdO s49RZ0+v1VK/7pEh2JKB3tH+DaJLJ+f3d2VweevLxK8ps4w== X-Received: by 2002:a05:600c:3b11:b0:483:79a6:e7e1 with SMTP id 5b1f17b1804b1-483a95b5a72mr99732165e9.7.1771770570811; Sun, 22 Feb 2026 06:29:30 -0800 (PST) X-Received: by 2002:a05:600c:3b11:b0:483:79a6:e7e1 with SMTP id 5b1f17b1804b1-483a95b5a72mr99731805e9.7.1771770570290; Sun, 22 Feb 2026 06:29:30 -0800 (PST) Date: Sun, 22 Feb 2026 09:29:28 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Manos Pitsidianakis , qemu-stable@nongnu.org, =?utf-8?B?572X6ZOt5rqQ?= , Gerd Hoffmann Subject: [PULL 30/33] virtio-snd: handle 5.14.6.2 for PCM_INFO properly Message-ID: <61679d7dcfa2dffc8fb115aa19b09e0e7cf5ea5c.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -4 X-Spam_score: -0.5 X-Spam_bar: / X-Spam_report: (-0.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770685629158500 From: Manos Pitsidianakis The section 5.14.6.2 of the VIRTIO spec says: 5.14.6.2 Driver Requirements: Item Information Request - The driver MUST NOT set start_id and count such that start_id + count is greater than the total number of particular items that is indicated in the device configuration space. - The driver MUST provide a buffer of sizeof(struct virtio_snd_hdr) + count * size bytes for the response. While we performed some check for the second requirement, it failed to check for integer overflow. Add also a check for the first requirement, which should limit exposure to any overflow, since realistically the number of streams will be low enough in value such that overflow is improbable. Cc: qemu-stable@nongnu.org Reported-by: =E7=BD=97=E9=93=AD=E6=BA=90 Signed-off-by: Manos Pitsidianakis Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260220-virtio-snd-series-v1-3-207c4f7200a2@linaro.org> --- hw/audio/virtio-snd.c | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index 232179a04a..ae8bfbca43 100644 --- a/hw/audio/virtio-snd.c +++ b/hw/audio/virtio-snd.c @@ -156,7 +156,7 @@ static virtio_snd_pcm_set_params *virtio_snd_pcm_get_pa= rams(VirtIOSound *s, static void virtio_snd_handle_pcm_info(VirtIOSound *s, virtio_snd_ctrl_command *cmd) { - uint32_t stream_id, start_id, count, size; + uint32_t stream_id, start_id, count, size, tmp; virtio_snd_pcm_info val; virtio_snd_query_info req; VirtIOSoundPCMStream *stream =3D NULL; @@ -179,11 +179,34 @@ static void virtio_snd_handle_pcm_info(VirtIOSound *s, count =3D le32_to_cpu(req.count); size =3D le32_to_cpu(req.size); =20 - if (iov_size(cmd->elem->in_sg, cmd->elem->in_num) < - sizeof(virtio_snd_hdr) + size * count) { + /* + * 5.14.6.2 Driver Requirements: Item Information Request + * "The driver MUST NOT set start_id and count such that start_id + co= unt + * is greater than the total number of particular items that is indica= ted + * in the device configuration space." + */ + if (start_id > s->snd_conf.streams + || !g_uint_checked_add(&tmp, start_id, count) + || start_id + count > s->snd_conf.streams) { + error_report("pcm info: start_id + count is greater than the total= " + "number of streams, got: start_id =3D %u, count =3D %= u", + start_id, count); + cmd->resp.code =3D cpu_to_le32(VIRTIO_SND_S_BAD_MSG); + return; + } + + /* + * 5.14.6.2 Driver Requirements: Item Information Request + * "The driver MUST provide a buffer of sizeof(struct virtio_snd_hdr) + + * count * size bytes for the response." + */ + if (!g_uint_checked_mul(&tmp, size, count) + || !g_uint_checked_add(&tmp, tmp, sizeof(virtio_snd_hdr)) + || iov_size(cmd->elem->in_sg, cmd->elem->in_num) < + sizeof(virtio_snd_hdr) + size * count) { error_report("pcm info: buffer too small, got: %zu, needed: %zu", iov_size(cmd->elem->in_sg, cmd->elem->in_num), - sizeof(virtio_snd_pcm_info)); + sizeof(virtio_snd_pcm_info) * count); cmd->resp.code =3D cpu_to_le32(VIRTIO_SND_S_BAD_MSG); return; } --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770912; cv=none; d=zohomail.com; s=zohoarc; b=el4pFfPAoTZRzkZ3bJM0w7n/ehKC79d3PyYvERDi+3xOcuGHZnD5fXgmV6fzMcY+2Z+XC1kITacwqe6kdt7LV4XJYvpDmoclxx9/5/3KUtXgeO4D5LSRZ5RmAD9InuaB0xiXYR9fIXR9o9fr2wDIVyRqPIUsDn8WRlTSed74Slk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770912; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=X1dv6PLRw1UnbQdZXrbn5V2sxyTS98yuZcopA32rD0g=; b=LG6JqycplBSNXML1oEZbNpZic7RadEzrh9vs1eBB3/HjyQer7AOEMPe5EoOZWYlViTLmxSv13iQjP8NK4eKfu65J4Z4kiS5crPu4dXksFAKCHchwc3TRMwyHWx96xkX588jdwBtjK3OvxUK0URGJTg9kNvsQoRnl6Frh+12TKRo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770912033440.80299883614543; Sun, 22 Feb 2026 06:35:12 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuASu-0000q9-EH; Sun, 22 Feb 2026 09:29:44 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASo-0000aD-ME for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:38 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASn-00072f-An for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:38 -0500 Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-695-IyPXseIMNUmTiJT5natYpw-1; Sun, 22 Feb 2026 09:29:35 -0500 Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-4376b624589so2197356f8f.3 for ; Sun, 22 Feb 2026 06:29:35 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970c00c18sm12076007f8f.14.2026.02.22.06.29.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:29:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770576; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=X1dv6PLRw1UnbQdZXrbn5V2sxyTS98yuZcopA32rD0g=; b=V++DImFxwQ9PJg1Y8FFg97rLk9WOakaAHGIytknCgjoc/uenoPZcrpAWOVBsT+9WPn4+ge m5sLkLOca/n7+IVo21qG431oVyZ4VmLIEgPJmA/DqReeqP6BNDtx8RkGo/CTBCArmtAHYL 4x9bVd8oo92oaIX47+VfEDPzOn/QPtA= X-MC-Unique: IyPXseIMNUmTiJT5natYpw-1 X-Mimecast-MFC-AGG-ID: IyPXseIMNUmTiJT5natYpw_1771770574 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770574; x=1772375374; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=X1dv6PLRw1UnbQdZXrbn5V2sxyTS98yuZcopA32rD0g=; b=lr2iUtd2GI3oFZkwDow1JdhLItlfupmKV0+sbcG+6eDfLcEx/htErEZ5SZSIeBJI3I EMxinGF/lFX5qUoAFmhiMG2RLoFSQT+U6GovgFs59hf4abo1rfF1UJDuAJa+UxCVSG7T i7C4qcNs24AYR+FppNlhoSuxwbJotb+x/lnzD5Vg4BhrAd1mFTzx5pkIE6bFyGiqBFs0 3sHoqHFwjWghl+xVrNvJmwsOyJigMwUkN2HjQjMBxMMX8+bRn8Hc6QgN0X0N3bYwXOTZ 8YPKZIbjs6DqFsQGJI3BkB8YTxL9y5xiM+GmuDu+x6ekA8aDwJ2L16ys+fnfEDO+w4xT JrJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770574; x=1772375374; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=X1dv6PLRw1UnbQdZXrbn5V2sxyTS98yuZcopA32rD0g=; b=kToeyiCxLUjbMOHnEeILa48e16Dmm8UNL4V/Z1l3Tdt3g7CYpjNm2PCmr+tranCX5p YJk3wl9V5a/ehlCWhWSNbCSSSu3PKA0syJD59pDXWh9O1E5ucitBDhYMwpRFhIPl4kA7 ZaWwJwIULSViO3ZPsMbtpwQvsWY4yew41oLVAdQrzgWuSYSOPr6IGXiodlNNnA/V/Pr5 /pfS4vJ09zLs817Ye+5B15uW51yu0LtftmZ8AHt0cOaiZtYJ6rZT1mXl+iH67zOKHbbh wfkQWroUn7CqY4CEYp8geY/vUOUhRpz+3rNq0o3y4K7J1w8DnO5vMU+bxAgDbXJkQIMv A3gQ== X-Gm-Message-State: AOJu0YzGrhnzX1QqB1VjnmZuC2n9iu1mmfOIkap8lJUmMC/9VwBxetDO ZGWS5M2Q3CLqCLkvZxqJgpnLoFWwAwCznRo6jrAz4JcdYAG0JFtJjRo4i0+xcXLScJlqP7YW1JC 6wtNGuDSWlkdcKAVHtfXlbZisppaYpMcKPBD8ZYCwZnzohHmElR/lCiTTVOFWkTxvhDbm8ZLRie aUf/m7uv60INfWXko0Lr8XdhZljchEXbsv/A== X-Gm-Gg: AZuq6aKT7yrT0Lsy0q4EZapF1r3X3IFnhZHXDOPwR7ETFqGgclp2BXvrdEVEPJtEVTd i/71RoxGTbk0HXrzlj4XxEvE56k89WPj8MIRpZPZjGow80ewQp3MhUmE7IbXFXK7U85p9U7Xc8R RO/q1g2fQuGS5kSrOnyc/qVRE2bf1OSzfmH3G/YWWMnbozCd1b0BYM/C33n8leia7OwU9dCVc/e on3z/HUtUnkmj+nr4xP0UaM+a2wB99QkS//64WPAFMGt8tNAA6Dv0Fo90p10lFFiA6vsCdDvaXy 4dXgvm3pyqYS/cUE8Vf5PXNNm+ySbBOhwgs1zd+0aoYMMIdbE1MnkPVQNGKw4jd8Ku4vK++vGH6 a2y49jG83C3vRmims87z7A3rx96kJ8+belfsEUe4xxuLcnQ== X-Received: by 2002:a05:6000:604:b0:435:97f6:4f44 with SMTP id ffacd0b85a97d-4396f1a97fcmr11789163f8f.56.1771770573620; Sun, 22 Feb 2026 06:29:33 -0800 (PST) X-Received: by 2002:a05:6000:604:b0:435:97f6:4f44 with SMTP id ffacd0b85a97d-4396f1a97fcmr11789117f8f.56.1771770573047; Sun, 22 Feb 2026 06:29:33 -0800 (PST) Date: Sun, 22 Feb 2026 09:29:30 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Manos Pitsidianakis , qemu-stable@nongnu.org, DARKNAVY , Gerd Hoffmann Subject: [PULL 31/33] virtio-snd: fix max_size bounds check in input cb Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -4 X-Spam_score: -0.5 X-Spam_bar: / X-Spam_report: (-0.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770913270154100 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Manos Pitsidianakis In 98e77e3d we calculated the max size and checked that each buffer is smal= ler than it. We neglected to subtract the size of the virtio_snd_pcm_status header from the max size, and max_size was thus larger than the correct value, leading to potential OOB writes. If the buffer cannot fit the header or can fit only the header, return the buffer immediately. Cc: qemu-stable@nongnu.org Fixes: 98e77e3dd8dd6e7aa9a7dffa60f49c8c8a49d4e3 ("virtio-snd: add max size = bounds check in input cb") Reported-by: DARKNAVY Signed-off-by: Manos Pitsidianakis Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260220-virtio-snd-series-v1-4-207c4f7200a2@linaro.org> --- hw/audio/virtio-snd.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index ae8bfbca43..d1a46d47bc 100644 --- a/hw/audio/virtio-snd.c +++ b/hw/audio/virtio-snd.c @@ -1265,6 +1265,12 @@ static void virtio_snd_pcm_in_cb(void *data, int ava= ilable) } =20 max_size =3D iov_size(buffer->elem->in_sg, buffer->elem->in_nu= m); + if (max_size <=3D sizeof(virtio_snd_pcm_status)) { + return_rx_buffer(stream, buffer); + continue; + } + max_size -=3D sizeof(virtio_snd_pcm_status); + for (;;) { if (buffer->size >=3D max_size) { return_rx_buffer(stream, buffer); --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770751; cv=none; d=zohomail.com; s=zohoarc; b=f85hRDFGzKvTxorXUsGsKkUJJ7mwwN+/nw31nnc62wUab1mZE6jgPxmALzAxlkWe361TsbgET5XD9aaYxh99pP48V5V82/hplHGfWDMXJhF5FGYcgxE5is7SA4C+cUs3eopxn0I011mEVovsOe391Oeg+LQumcgeoqJCLZCdXKA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770751; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=5W+WCYaPcjw+DbTWpVRSi4jP+J/l9WZesscDdkfYgWk=; b=D0CpnP7TMG6qeRZrIF0lOSTWQSNPBtsIwy2XDoiYeXbXYd8n7CMKBJSYnVI4s6nVBXOJfwcVbPb2S0aP9tU8bwJDEhy5XnHuB+zrgkSmmQvRBLC8JYAfZMIbQn3272oYcZcf6SLctVmx8Jc3hJlRC3w5hBWDHSHjMhH5/uo7EME= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17717707510995.819666585706273; Sun, 22 Feb 2026 06:32:31 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuAT0-000114-Pw; Sun, 22 Feb 2026 09:29:50 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASq-0000ge-Me for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:40 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASp-000732-8U for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:40 -0500 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-461-147nBn5tOau-7jd7FsfDRQ-1; Sun, 22 Feb 2026 09:29:37 -0500 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-482d8e6e13aso30577915e9.3 for ; Sun, 22 Feb 2026 06:29:36 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970d4c626sm13729659f8f.28.2026.02.22.06.29.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:29:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770578; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=5W+WCYaPcjw+DbTWpVRSi4jP+J/l9WZesscDdkfYgWk=; b=ZMx7xHUXCzv//kyVH59gD2H/PS0g8lWp7/aQVEL08UcHnx+mbAPgLey3cFjk4VTBnNhZIG XxOIUhtxLuCk8aden3sWFVYxGcLyC8j3Oa++8m8nnMya9NahdI3M/Tz8cWvI4qKZSXE8Br THf6CdyGJm7wn2W/bW19JFLNTttaxsU= X-MC-Unique: 147nBn5tOau-7jd7FsfDRQ-1 X-Mimecast-MFC-AGG-ID: 147nBn5tOau-7jd7FsfDRQ_1771770576 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770576; x=1772375376; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=5W+WCYaPcjw+DbTWpVRSi4jP+J/l9WZesscDdkfYgWk=; b=I2D+bgV7MAHX9NdwX/Y+YBNZ/qlMM6DyxU8zd9W2Nb9zfbJwe0xBuLDra/DFRAmQo0 vGidOkpaMO/3kQg8ApjQPoxC7PkZ+ckS6loXQ2vjDveaetv0VFFlOp76QfMqsYSvFzV9 Oc0bUvA7d/PQ9s2V7WOB9xctxWeozPzsoNgVrmvfqV7SCvewm/5t0iClKl36BzvmeIpR 1hBRL5isPY90hrdxblqgW/CYE2e5HmKg7oipqh1QCK/f6wwoy2NW1yu1UPwUy190/0c+ y/rZCch0Ukt6f4iFH+B0CWkCOM1IRMX6sMrqNAZo/Gn1kfF6C7HJefXZat6OtZmYvq4O 3MdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770576; x=1772375376; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5W+WCYaPcjw+DbTWpVRSi4jP+J/l9WZesscDdkfYgWk=; b=urzkWptJpGiKPL2kOB6bYhSW5qIR+3aKNbMf21M4HMtn1F4lOzPstRrBzenn+sazVL gF6Ul0NNezm7G+y2KkjlJK7y42VXloGE31YrvTjSezFFjYNbFldKt+9HSzmA+a7b5KKm HAX4dTRyZYEc3eBDeXgL02mSjyiMwmiXKwGs1S6KXGjK9msTg64T2WmzT+HvXyYQsCwi 3SgGwQtiH5PUIpJGBZUEUA9GMkumpTiWNCuvuCY/ohFP+r2UPKHThz8kWI9o6yfQvFpg MdHie3XPaXsF2OYc9cxDqifWCRcD95IqY2zltpRxKycVLK6YeZ9camJleh8TkbB11IWf 8S1A== X-Gm-Message-State: AOJu0Yxr1Ju4oOsJ8eRWULeV5Gy8vm9UU8XCwUhmMgdQEZurjskRcqMY 66HhNSBAVYY3fQv6DX95P6aw5btDW9xldEAm96Ld1/AAdK1DmHMLKSs9LzEPq8iNXBn0Du32t88 CTvxJFfxY6Y70aY0HFdwXxpzGEowcd0/5Q0TmAL5WdIndyekn+F6Xye88VcxTT00s6B3c1jr8g2 CsehNMSBseNYuZ/NnJVwo/uQUJwkfN95vARw== X-Gm-Gg: AZuq6aIGRB2n8lq2gZuCcQYSI8fATBD70F3p2tz9rAC3AL9MHI8Wsu0/aWFc/fHRLEs FOZYuwnt/BioI+PPElXs7jhUxvX6yuov/9iCevO75mHuTVWH854y5nlqaCIiHt2UJt7d/ra2Un3 f49qoRq77PTlVFG2naqtvOlQfAvpYcck1cLwgsWFdF75zY3LCzKpnH3yapS/j4FVL1MOU8/1oh0 ATsafxbDPj2z8Grbs0JZrZnb8Yl6hy6Nq1kZCploNmCnCmg4XKIrK3VQAsIuiCsgYCSaRF4Of09 l7n2OMOzaM6H64jMsrUQkf+wttPK1CppMqtMcicwKkBcYrdW6Zo43PwSb7fLh/3d8bEkW8GifnX pZjvXquGA3KQ886x5oBIII9GYFRD87vFGWOWUgEKndRbQYQ== X-Received: by 2002:a05:600c:314a:b0:47e:e2eb:bc22 with SMTP id 5b1f17b1804b1-483a95b3e62mr103736695e9.5.1771770575677; Sun, 22 Feb 2026 06:29:35 -0800 (PST) X-Received: by 2002:a05:600c:314a:b0:47e:e2eb:bc22 with SMTP id 5b1f17b1804b1-483a95b3e62mr103736255e9.5.1771770575113; Sun, 22 Feb 2026 06:29:35 -0800 (PST) Date: Sun, 22 Feb 2026 09:29:33 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Manos Pitsidianakis , qemu-stable@nongnu.org, DARKNAVY , Gerd Hoffmann Subject: [PULL 32/33] virtio-snd: tighten read amount in in_cb Message-ID: <7994203bb1b83a6604f3ab00fe9598909bb66164.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -4 X-Spam_score: -0.5 X-Spam_bar: / X-Spam_report: (-0.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770753487158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Manos Pitsidianakis The amount of bytes to read passed to AUD_read() should never surpass the maximum available buffer length. Tighten the current amount by MIN(, max_size - ). Cc: qemu-stable@nongnu.org Fixes: 98e77e3dd8dd6e7aa9a7dffa60f49c8c8a49d4e3 ("virtio-snd: add max size = bounds check in input cb") Reported-by: DARKNAVY Signed-off-by: Manos Pitsidianakis Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260220-virtio-snd-series-v1-5-207c4f7200a2@linaro.org> --- hw/audio/virtio-snd.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/hw/audio/virtio-snd.c b/hw/audio/virtio-snd.c index d1a46d47bc..d5d430ad65 100644 --- a/hw/audio/virtio-snd.c +++ b/hw/audio/virtio-snd.c @@ -1250,7 +1250,7 @@ static void virtio_snd_pcm_in_cb(void *data, int avai= lable) { VirtIOSoundPCMStream *stream =3D data; VirtIOSoundPCMBuffer *buffer; - size_t size, max_size; + size_t size, max_size, to_read; =20 WITH_QEMU_LOCK_GUARD(&stream->queue_mutex) { while (!QSIMPLEQ_EMPTY(&stream->queue)) { @@ -1276,10 +1276,12 @@ static void virtio_snd_pcm_in_cb(void *data, int av= ailable) 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 AUD_read(stream->voice.in, - buffer->data + buffer->size, - MIN(available, (stream->params.period_bytes - - buffer->size))); + buffer->data + buffer->size, + to_read); if (!size) { available =3D 0; break; --=20 MST From nobody Sun Apr 12 00:53:21 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1771770661; cv=none; d=zohomail.com; s=zohoarc; b=N2gxN31Nmh/awjF6hD21lEemV+kWLj0YVSDDxh62XCfcEiAoJquh1+UEUvIakph3zwT+CIEP/nVgfHGtgtlxe4NoCC0pmEOM9g3/846dg3VOCoEs3eGblpCt7AcZBX/Wzyj7O2/EF0vcDcFH1ZjUS1kxZhb6apWiYjKcXrC/BDI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1771770661; h=Content-Type:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=dGivE52lN7YTrWxIz+45vbVv648OVQoFgJW04Yu3Yy4=; b=nuN13U+QwjPEI/6Y5rsjAUxWqOMtRLpDjVm15/lnRMYSA7sanx1aBLopAgAqbRGzo169a6aDL6pzyUVGWkAUc9P0QyDtn8PJXlb/XqvHrbYObX3KYxyMuaJgCmKEGZlCaYh/5NSJGawuSnfx3n8xx+xMklCkUAzOrzk3Os/iRqw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1771770661360419.18872897660606; Sun, 22 Feb 2026 06:31:01 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vuAT5-0001BU-Jv; Sun, 22 Feb 2026 09:29:57 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASu-0000pt-Au for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:44 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vuASs-00073M-1f for qemu-devel@nongnu.org; Sun, 22 Feb 2026 09:29:43 -0500 Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-677-Eos57rukNOagEmHq1mX17g-1; Sun, 22 Feb 2026 09:29:39 -0500 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-435aadfaf4eso2582965f8f.2 for ; Sun, 22 Feb 2026 06:29:39 -0800 (PST) Received: from redhat.com (IGLD-80-230-79-166.inter.net.il. [80.230.79.166]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-43970bfa1bdsm11504703f8f.3.2026.02.22.06.29.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Feb 2026 06:29:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1771770581; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=dGivE52lN7YTrWxIz+45vbVv648OVQoFgJW04Yu3Yy4=; b=JFQn2MgoLr8ecslRWQEmZZFAzsTX6ybzAB0g4272Mx0Yv3EKGzs1YygKlWi2tn8BF9HFOr K6lkiZUxIyX5K175wwR/Gk09lo180Xk6shgYNEwAUpv/waNN8klta8kqT6/cJ7cAIefqWT FqEo7nwP758Y74GBksS7dk1TErmqrM0= X-MC-Unique: Eos57rukNOagEmHq1mX17g-1 X-Mimecast-MFC-AGG-ID: Eos57rukNOagEmHq1mX17g_1771770578 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1771770578; x=1772375378; darn=nongnu.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=dGivE52lN7YTrWxIz+45vbVv648OVQoFgJW04Yu3Yy4=; b=ZiL+RMRzkjEFqI8l6kbu6mnd0sLyMdQX6W5feSxLGFhH6/vQHcU+ZTI004kHtnXnem XY5FRZBYYVSXsNeTjzIu7UQcRFrldtAArygweNJyT63g05iasKxK8bHHgIR6bWtORDQc 4ijVPHBIMtW19dxZfAPKVe8aQhbQGAnCfjz01ow6Y3yvO3iBA0AfcW0OQJ6zz84MyQ49 VmwCvkh+j7ufMDBsOChesZAf+56ZzDNe1N8yQ6KuZviHxQjWug8p2KTUIcrlaPdwlj2K hC9V6HQVXUWNyKyMin7KJ1QVjkp7iStBl5Uo/vsdmwwkcGk9WX247PnL1nrk3XxYgkPZ nFGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771770578; x=1772375378; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dGivE52lN7YTrWxIz+45vbVv648OVQoFgJW04Yu3Yy4=; b=ZEQeY4+LfMTfwdIGhkEb24qHNyGedkMs0vfv47dOr0mM+M8syre6MOTIWrM24FhgIz OaSDK8krhakQhZyw7UNSG7rPJSaOR4U4wnD7X0+OzO6rZuiI8SMfu6h5NNFx5P8ZRcck yBr3DLf1eegCxZsn5mdtoEKM5xkpPwlRb6U/I03haTqJYmUazuEc6kyLX4mpO0eNpJUo 1QJGHLlAW9vz86ckb5OIVc/TRMDfhdJrVOuwtGbH6eaSb/zW4/SKvsWlC9J3PJ0fbWa6 LG7ykm9JgCZDETEB9RA3bgOTeb6tCP9XjJx8QDKjuGWwmixeuVJOvx3ZQMVYRVSwFKHV uU2w== X-Gm-Message-State: AOJu0YytYv9knz6kCIRLlWk4pdS0yN3lTPJw9VpS650Ej4JUP296UeT8 wkcN/Aig5UI9GoIg98WVY3ybUfwXQKkVNN6P/JKOcq/dqs22wcr8Hjxit85i0QAW2+MUktqd43G kVY0ORbZIxhjXlhfCXv5dDVJPhQv6g/Pk7SHd6gOiT4hwtHv1jDfHArIIwdxS52h0CAf8y2B4Xs 9/SDw6ssibVQ0BodKB35dsOQo6b2ltbhH94g== X-Gm-Gg: AZuq6aI6HYrx91rNaHiUUc9ysIwAWt/yNOIUYOX/rx3S1+6ARvaAaj+5er1/kD6n0d9 eK+lpt6vm5ZPmki1gAFRHIUgezhGMBUfnu8oJjeIS6yJNyfXDbTpyMlxzJvc+NOBVqiYFwiRkfE Oztie/NJ6CV3AQUju2XKoGzgaJs//iwopfxShlXgIB448LKbZwfpXOAyKilN3UUeWejOe9v7qUf ZZaqW+LoQtc7lPToPy7ONp9hDcgpwszTW9X658e3Tyqs3urlp3Ibzfj8u09x0VAsWaK8B5ZcAE3 Viz4rGgbijO8mUpGw7PPSa+p6FSzQVmX+SMw61rcJ6wQK80LoOzrtjq7qPDVCI6aeTdam0cs9kk qyMEiHOCMvUMdI2JlXKkYYtY+44PMsfXlLJuGAOM+CgbEDw== X-Received: by 2002:a05:6000:4310:b0:437:712a:fac9 with SMTP id ffacd0b85a97d-4396f16d27bmr9780530f8f.23.1771770578024; Sun, 22 Feb 2026 06:29:38 -0800 (PST) X-Received: by 2002:a05:6000:4310:b0:437:712a:fac9 with SMTP id ffacd0b85a97d-4396f16d27bmr9780496f8f.23.1771770577501; Sun, 22 Feb 2026 06:29:37 -0800 (PST) Date: Sun, 22 Feb 2026 09:29:35 -0500 From: "Michael S. Tsirkin" To: qemu-devel@nongnu.org Cc: Peter Maydell , Alexandr Moshkov , Vladimir Sementsov-Ogievskiy , Stefano Garzarella Subject: [PULL 33/33] vhost: fix vhost_inflight_buffer_pre_load Message-ID: <72f663f575ab5e0f31320d7c9f25cc1f086313bd.1771770471.git.mst@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-Mailer: git-send-email 2.27.0.106.g8ac3dc51b1 X-Mutt-Fcc: =sent 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=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=mst@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -4 X-Spam_score: -0.5 X-Spam_bar: / X-Spam_report: (-0.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.798, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.79, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 @redhat.com) X-ZM-MESSAGEID: 1771770663499158500 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Alexandr Moshkov While I was rebasing my series about inflight migration, I missed a small issue in vhost_inflight_buffer_preload: * fix wrong return type in function * fix error check Signed-off-by: Alexandr Moshkov Fixes: tag pls? Reviewed-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Michael S. Tsirkin Signed-off-by: Michael S. Tsirkin Message-Id: <20260220094800.276489-1-dtalexundeer@yandex-team.ru> --- hw/virtio/vhost.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 52801c1796..f83bdcaf8b 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1926,8 +1926,8 @@ static bool vhost_inflight_buffer_pre_load(void *opaq= ue, Error **errp) void *addr =3D qemu_memfd_alloc("vhost-inflight", inflight->size, F_SEAL_GROW | F_SEAL_SHRINK | F_SEAL_SEA= L, &fd, errp); - if (*errp) { - return -ENOMEM; + if (!addr) { + return false; } =20 inflight->offset =3D 0; --=20 MST