Cover Letter Detail
Show a cover letter.
GET /api/1.1/covers/2230518/?format=api
{ "id": 2230518, "url": "http://patchwork.ozlabs.org/api/1.1/covers/2230518/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/cover/20260429135717.3048713-1-joshualant@gmail.com/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/1.1/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20260429135717.3048713-1-joshualant@gmail.com>", "date": "2026-04-29T13:48:34", "name": "[RFC,QEMU,00/10] Initial Support for VCS Switching", "submitter": { "id": 93283, "url": "http://patchwork.ozlabs.org/api/1.1/people/93283/?format=api", "name": "Joshua Lant", "email": "joshualant@gmail.com" }, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/cover/20260429135717.3048713-1-joshualant@gmail.com/mbox/", "series": [ { "id": 502144, "url": "http://patchwork.ozlabs.org/api/1.1/series/502144/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=502144", "date": "2026-04-29T13:48:40", "name": "Initial Support for VCS Switching", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/502144/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/covers/2230518/comments/", "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=phTaGqOC;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g5Stj74VFz1yHX\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 06:04:13 +1000 (AEST)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wIB82-0003a8-74; Wed, 29 Apr 2026 16:03:26 -0400", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <joshualant@gmail.com>)\n id 1wI5QP-00083w-Gm\n for qemu-devel@nongnu.org; Wed, 29 Apr 2026 09:58:01 -0400", "from mail-wm1-x329.google.com ([2a00:1450:4864:20::329])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <joshualant@gmail.com>)\n id 1wI5QM-0007gD-Oe\n for qemu-devel@nongnu.org; Wed, 29 Apr 2026 09:58:01 -0400", "by mail-wm1-x329.google.com with SMTP id\n 5b1f17b1804b1-4891c00e7aeso98068085e9.2\n for <qemu-devel@nongnu.org>; Wed, 29 Apr 2026 06:57:56 -0700 (PDT)", "from node1.manccluster.local (revolution.cs.man.ac.uk.\n [130.88.198.135]) by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-447b3d48517sm5205950f8f.5.2026.04.29.06.57.53\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 29 Apr 2026 06:57:53 -0700 (PDT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20251104; t=1777471075; x=1778075875; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:from:to:cc:subject:date:message-id:reply-to;\n bh=HSyR30y14N6Go6z0CTh+z8a0vdIoiDWRnE1Zhp/jpmg=;\n b=phTaGqOC7mMdlTiXyf9poCzZds+Qf+rcbmzG/3FaFLyMH2QHFLssMzLCBxgBZsSSJN\n WKldGGA1SgPBBQJL7vcpiejUBqD7/58TcWf/iW+uwsOuGyScXiKOpCVA5z1nYidzVobp\n qMGFaZjBzELKIf3gKj+twLxk/xC/+AANiFX9+rWSdmYihRNEQD7vrOktRhqZoGl043Nu\n fDdJSrsA/Wkm6I9A91I5mQ2hy2+uAuvmNjkV3eOCRbbvA6Dd+TW3U6M1vC9n72qh7vx9\n V1DE+ICvla/wykQxhN/OZkRYKBv9jGVf1NtS0Jgy9/mvVgRz74oOgX6Su81uCoGIQAR6\n B98A==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777471075; x=1778075875;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=HSyR30y14N6Go6z0CTh+z8a0vdIoiDWRnE1Zhp/jpmg=;\n b=co6rItFw8+xEuZgdBRuTRwg0I5vc/gNlbjBWzUb31BTL5Fi0yWdxZH+9ztwCvpn0fu\n GPIs7Qu7wMfgGERu5ZFQ8ABRWhR1bV0Ps3IlMFPVzAKWaX88mPOkQQImP2ojJtw7FsyB\n z7tS0M31B4keNlvHw1vWeQDaZYqsrMmmzNkWcJXOYfWKg6WPNTqPnYBtTo+UZKl2NMjv\n F609yGzPc1Rl0XwD8aNqBINoUuYNP6hZnhk6uEA+mM9VJIbrMtZ0O6HS3iw0Rr5+Ad5j\n F0NoJU3sP8vPENSC7wKlWklcAP178ENM6mBMMB6CsheIs7fwAdHlTVtULaiXXj5B9ENb\n TcGw==", "X-Gm-Message-State": "AOJu0Yz+7qUCfXswvHtl9ClJIfAbETPQQBRGElbO3LZ49wh6oQGpRpCT\n 31QehTMdxHTyHcDhxz2/0pPOXxs0J7bkqh4o+dbfX2ck1VeA9WSJRl2J", "X-Gm-Gg": "AeBDievsc9OvQH99p6Xr/QHa9oFH/Sx6Fu4dnZKFII100rnKPjJdIQl13qU3Cp3yyuW\n 2JNhfUH1U+L6e/eDVU2nKma1F3SrtjwaNKeLj/ivo08J6XAPrhPheZafPDA3Ac0IVzbuLb8tgrF\n eGCjT6xORhdNolpVVNNyUg3i41prEC0yD2D7EehGFPtHRAJz/hjNe48fSGcHyvYMaj0KJ45Izsc\n 9OCIlS12ttbz/CQ15KscM3ql1hgWO51GcjJIu8jk7PQi5oBEYiBwgCqRa36/EdgFfjxSJQJ95A3\n eXmKSPy3q+e2MXwdYV4GUyQuTfEqe7zhuL1GaFkjrosPMhQz5nHYalIfvEVkJHFjHkS117FK3nB\n 8jqO9n1bbzlSXgCdWjdtxeGXK/WYlgZ6PHCv5vpeWGHfR0l7KprtoBgDHjIiVzUrsTf3+7Avdsu\n s2PrHsE4gaT4nUxEdd/+WqTuuA7Lkij+3hwUach6083NxGw2w5q+Z7XWmsA+2zUYSIeMpWZeuV", "X-Received": "by 2002:a05:600c:1c20:b0:489:1aed:1658 with SMTP id\n 5b1f17b1804b1-48a77b241admr129709105e9.23.1777471074474;\n Wed, 29 Apr 2026 06:57:54 -0700 (PDT)", "From": "Joshua Lant <joshualant@gmail.com>", "To": "linux-cxl@vger.kernel.org", "Cc": "qemu-devel@nongnu.org, Jonathan.Cameron@huawei.com,\n arpit1.kumar@samsung.com, Joshua Lant <joshualant@gmail.com>", "Subject": "[RFC QEMU PATCH 00/10] Initial Support for VCS Switching", "Date": "Wed, 29 Apr 2026 14:48:34 +0100", "Message-ID": "<20260429135717.3048713-1-joshualant@gmail.com>", "X-Mailer": "git-send-email 2.47.3", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit", "Received-SPF": "pass client-ip=2a00:1450:4864:20::329;\n envelope-from=joshualant@gmail.com; helo=mail-wm1-x329.google.com", "X-Spam_score_int": "-20", "X-Spam_score": "-2.1", "X-Spam_bar": "--", "X-Spam_report": "(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no", "X-Spam_action": "no action", "X-Mailman-Approved-At": "Wed, 29 Apr 2026 16:03:14 -0400", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "qemu development <qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org" }, "content": "Hi,\n\n(All references to the CXL specification here are made to v3.2.)\n\nVCS= Virtual CXL Switch\nPPB= PCI-PCI bridge\nvPPB= virtual PCI-PCI bridge\nSLD= Single Logical Device\nFM= Fabric Manager\nUSP/DSP=Upstream/Downstream Port\n\nThis patchset provides basic functionality for emulation of an FM-owned,\nmulti-VCS CXL switch (7.1.3). Primarily it adds a new object defined\nin hw/cxl/cxl-vcs-switch.c, and supports the FMAPI commands vppb get\ninfo/bind/unbind 0x5200/0x5201/0x5202 (7.6.7.2.1-7.6.7.2.3) to be used on SLD’s.\n\nIt is posted as an RFC since:\u2028\n1). There are several limitations with this work and I would like to discuss\nhow to proceed.\n2). There has been prior discussion on potential restructuring of the CXL\ncci/switch code[1], which I suppose will dictate how to move forward with parts\nof this series…\n\n-------------------\nVCS Emulation\n\nThe VCS command set should ultimately allow for multi-host sharing of a MLD/DCD\ndevice through the same switched fabric, with a single Fabric Manager/CCI-mailbox\nendpoint for configuration/management. The work here is a stepping stone toward\nthat, allowing for SLD’s to be bound/unbound to a local QEMU instance by the FM.\n\nThe cxl-vcs-switch is comprised of one or more VCSs, and one or more hidden\nendpoint devices. A single VCS is defined as a single cxl-upstream-port\n(meaning a 1:1 mapping between physical upstream PPBs and number of VCS’s),\nand one or more cxl-downstream-ports (these form the vPPBs of each VCS). The\nnumber of vcs-attached endpoints defined on the CLI forms the number of\ndownstream PPBs the switch would have. These endpoints are hidden on boot, and\nconnect to one of the vPPBs upon bind. This means that there is in effect\nno real downstream PPB in QEMU. The vPPB device effectively becomes the\ndownstream PPB following bind.\n\nWhen the topology is initialised:\n- Upstream/downstream ports instantiated as part of a VCS switch are realized\nnormally, but additionally register with the cxl-vcs-switch object, which are\nthen referenced by the bind/unbind FMAPI commands etc.\n- The endpoint devices which connect to the downstream PPBs use the\nDeviceListener functionality for hiding devices (see the reference in the\ncommit message of patch 2). The QDict from the CLI is stored in the VCS structs,\nwhich are then realized/unrealized on bind/unbind commands from the FM.\n\nAll this means that on boot the guest sees its upstream port and all downstream\nports (vppbs) enumerated (as is described in section 7.1.4 and 7.2.1.3), but\nnone of the endpoints are seen.\n\nThe cxl-vcs-switch itself is implemented as a user creatable class, since it\ndoes not fit the single inheritance device model of QEMU, which would force\nassociation with a single PCIe bus, which will not work for multiple USPs.\n\nThe cxl-vcs-switch uses local-fm=true/false CLI option to dictate whether the\nobject will have a CCI mailbox attached. VCS state information will be held in\nthe local-fm=true instance, and the FM will communicate directly with this\ninstance only. IPC will be used (in multi-USP, multi-QEMU process environments)\nin order to maintain correct state information in the local-fm, and to\nbind/unbind devices in remote QEMU processes.\n\nCurrently only the “managed hot-remove” flow is complete (Table 7-34) for the\nunbind operation, notifying the guest of removal and awaiting signal from\nthe OS for unbind completion from the unrealize DeviceListener function.\n\nThis is tested with the topology below and some additional libcxlmi test\nprograms[2]. I am able to bind and unbind correctly to multiple VCSs, see the\nupdated switch state, and see the delay in the unrealize listener callback from\nthe delays in OS notification.\n\n-------------------\nLimitations and open questions\n\n1. Unbound, but fully realized devices (allowing proper MLDs/DCDs)\n\nThe current method of hiding the endpoint device and storing the QDicts works\nfor simple devices only. But ultimately the FM should be able to tunnel commands\nthrough the switch to communicate with the device, whether a guest is bound to\nit or not... We need a method of fully realizing the device, but on some sort of\ndummy bus that is not seen by the guest. I am unsure how to do this currently,\nsince AFAICT it goes against the qdev model of device realization, being\ninherently associated with attaching to the guest’s bus (please correct me if\nI’m wrong on this). It will require a way to properly realize the devices, but\nbypass automatic association with the guest’s QOM tree? I don’t know if there\nis any precedent for behaviour like this in QEMU?\n\n2. Integration with Physical Switch Command set.\n\nCurrently the physical switch command set in cci-mailbox-utils.c has not been\nmodified to account for a VCS target (i.e. using those commands with a VCS\ntarget currently breaks things). This is where the discussion in [1] comes in.\n\n> - Move the call that caches state to the cxl_upstream_port reset\n> to ensure downstream ports are in place before it is called.\n> Also will make it available from whatever CCI. If we ever support\n> multiple VCS switches this will need to move an appropriate structure\n> representing whole switch information. With only one USP that is\n> a reasonable place to put full switch info.\n\nSince in my implementation the CXLPhyPortInfo will end up being associated with\nthe VCS object and not with the USP, further refactoring will be required for\nthis patch series to generalise the physical switch command set functions.\n\n3. Distributed VCS control\n\nSince the ultimate aim of this is to give the FM control of multiple VCSs in\nmultiple QEMU instances, some method of sending FM commands between QEMU\nprocesses is needed, since the switch state will be distributed over these\nprocesses (with status kept in the local-fm=true instance). Does QEMU have a\nstandard way for implementing such IPC or shall I just add some simple sockets\ncommunication into the cxl-vcs-switch.c?\n\n4. Unimplemented commands from virtual switch command set.\u2028\n\nThe actual bind process described in 7.6.6.7 shows how event records must be\nused, and the FMAPI command should return success without waiting on binding\ncompletion. Further work is needed to completely emulate the flow as described\nin the specification, and implement the remaining FMAPI commands.\n\n5. Tiered switching.\n\nCurrently the downstream PPBs are nothing more than a struct, and only endpoint\ndevices can be hidden. There should be some way to implement another complete\nswitch below the downstream PPB of the first switch, as described in\nsection 9.12.2.\n\n-------------------\nTesting\n\ntopology:\n\n-device usb-ehci,id=ehci \\\n-object memory-backend-file,id=cxl-mem1,share=on,mem-path=/$LOG_DIR/t3_cxl1.raw,size=8G \\\n-object memory-backend-file,id=cxl-lsa1,share=on,mem-path=/$LOG_DIR/t3_lsa1.raw,size=1M \\\n-object memory-backend-file,id=cxl-mem2,share=on,mem-path=/$LOG_DIR/t3_cxl2.raw,size=8G \\\n-object memory-backend-file,id=cxl-lsa2,share=on,mem-path=/$LOG_DIR/t3_lsa2.raw,size=1M \\\n-object memory-backend-file,id=cxl-mem3,share=on,mem-path=/$LOG_DIR/t3_cxl3.raw,size=8G \\\n-object memory-backend-file,id=cxl-lsa3,share=on,mem-path=/$LOG_DIR/t3_lsa3.raw,size=1M \\\n-object memory-backend-file,id=cxl-mem4,share=on,mem-path=/$LOG_DIR/t3_cxl4.raw,size=8G \\\n-object memory-backend-file,id=cxl-lsa4,share=on,mem-path=/$LOG_DIR/t3_lsa4.raw,size=1M \\\n-object cxl-vcs-switch,id=vcs0,usp-ppbs=2,dsp-ppbs=4,local-fm=true \\\n-device pxb-cxl,bus_nr=12,bus=pcie.0,id=cxl.0,hdm_for_passthrough=true \\\n-device cxl-rp,port=0,bus=cxl.0,id=root_port1,chassis=0,slot=1 \\\n-device pxb-cxl,bus_nr=22,bus=pcie.0,id=cxl.1,hdm_for_passthrough=true \\\n-device cxl-rp,port=0,bus=cxl.1,id=root_port2,chassis=1,slot=1 \\\n-device cxl-upstream,port=0,sn=1234,bus=root_port1,id=us0,addr=0.0,multifunction=on,vcs=vcs0,usppb=0 \\\n-device cxl-upstream,port=0,sn=5678,bus=root_port2,id=us1,addr=0.0,multifunction=on,vcs=vcs0,usppb=1 \\\n-device cxl-switch-mailbox-cci,bus=root_port1,addr=0.3,target=vcs0 \\\n-device usb-cxl-mctp,bus=ehci.0,id=usb0,target=vcs0 \\\n-device cxl-downstream,port=0,bus=us0,id=swport0,slot=3 \\\n-device cxl-downstream,port=1,bus=us0,id=swport1,slot=4 \\\n-device cxl-downstream,port=2,bus=us0,id=swport2,slot=5 \\\n-device cxl-downstream,port=3,bus=us0,id=swport3,slot=6 \\\n-device cxl-downstream,port=0,bus=us1,id=swport4,slot=7 \\\n-device cxl-downstream,port=1,bus=us1,id=swport5,slot=8 \\\n-device cxl-downstream,port=2,bus=us1,id=swport6,slot=9 \\\n-device cxl-downstream,port=3,bus=us1,id=swport7,slot=10 \\\n-device cxl-type3,persistent-memdev=cxl-mem1,id=cxl-ep1,lsa=cxl-lsa1,sn=99,vcs=vcs0,dsppb=0 \\\n-device cxl-type3,persistent-memdev=cxl-mem2,id=cxl-ep2,lsa=cxl-lsa2,sn=100,vcs=vcs0,dsppb=1 \\\n-device cxl-type3,volatile-dc-memdev=cxl-mem3,id=cxl-dcd1,lsa=cxl-lsa3,num-dc-regions=8,sn=101,vcs=vcs0,dsppb=2 \\\n-device cxl-type3,volatile-dc-memdev=cxl-mem4,id=cxl-dcd2,lsa=cxl-lsa4,num-dc-regions=8,sn=102,vcs=vcs0,dsppb=3 \\\n-machine cxl-fmw.0.targets.0=cxl.0,cxl-fmw.0.size=8G,cxl-fmw.1.targets.0=cxl.1,cxl-fmw.1.size=8G\n\nlibcxlmi:\n\nSee [2]…\n\n1. Setup MCTP communication: e.g.\nmctp link set mctpusb0 up;\nmctp addr add 8 dev mctpusb0;\nmctp link set mctpusb0 net 1;\nsystemctl restart mctpd.service\nbusctl call au.com.codeconstruct.MCTP1 /au/com/codeconstruct/mctp1/interfaces/mctpusb0 au.com.codeconstruct.MCTP.BusOwner1 SetupEndpoint ay 0\n\n2. Build, then run libcxlmi commands to bind vcs0:\n./build/examples/vcs-bind-mctp 1 9 0 0 0\n./build/examples/vcs-get-virtual-switch-info-mctp 1 9\n\n3. Demonstrate the CXL device is usable:\ncxl create-region -m -t pmem -d decoder0.0 -w 1 -g 1024 -s 256M mem0\nndctl create-namespace --region region0 --mode fsdax --size 256M\necho \"HELLO WORLD...\" > /dev/pmem0\ncat /dev/pmem0\n\n4. Teardown the device, and rebind to vcs1, and check that it maps\ncorrectly:\nndctl disable-namespace namespace0.0\nndctl destroy-namespace namespace0.0\ncxl disable-region region0\ncxl destroy-region region0\ncxl disable-memdev mem0\n./build/examples/vcs-unbind-mctp 1 9 0 0 1\n# wait 5s for the hp notification... see lspci/dmesg change\n# bind the same device to the other VCS.\n./build/examples/vcs-bind-mctp 1 9 1 0 0\ncxl create-region -m -t pmem -d decoder0.1 -w 1 -g 1024 -s 256M mem0\nndctl create-namespace --region region1 --mode fsdax --size 256M\ncat /dev/pmem1\n# See the hello world originally written by vcs0!\n\n-------------------\nBuild\n\nThe patches are applied on the upstream qemu 10.2 release, on top of the\nfollowing patchsets from various branches of Jonathan’s fork:\n\n1: [PATCH qemu v5 0/5] cxl: r3.2 specification event updates.\nhttps://lore.kernel.org/linux-cxl/20260205112350.60681-1-Jonathan.Cameron@huawei.com/\n\n2: [PATCH qemu for 10.2 0/3] cxl: Additional RAS features support.\nhttps://lore.kernel.org/linux-cxl/20250917143330.294698-1-Jonathan.Cameron@huawei.com/\n\n3: [PATCH qemu 0/2] hw/cxl: Two media operations related fixes.\nhttps://lore.kernel.org/linux-cxl/20260102154731.474859-1-Jonathan.Cameron@huawei.com/\n\n4: [PATCH qemu v7 0/7] hw/cxl: Support Back-Invalidate (+ PCIe Flit mode)\nhttps://lore.kernel.org/linux-cxl/20260204170936.43959-1-Jonathan.Cameron@huawei.com/\n\n5: [PATCH qemu v5 0/3] hw/cxl: FM-API Physical Switch Command Set Support.\nhttps://lore.kernel.org/linux-cxl/20260204173223.44122-1-Jonathan.Cameron@huawei.com/\n\n6: [RFC PATCH qemu 0/5] hw/cxl/mctp/i2c/usb: MCTP for OoB control of CXL devices.\nhttps://lore.kernel.org/linux-cxl/20250609163334.922346-1-Jonathan.Cameron@huawei.com/\n\n-------------------\nReferences\n\n[1] https://lore.kernel.org/linux-cxl/20260127152350.00006447@huawei.com/\n\n[2] https://github.com/joshualant/libcxlmi/tree/vcs-testing\n\n\nMany thanks,\n\nJosh\n\nJoshua Lant (10):\n docs: Add documentation for cxl-vcs-switch\n qdev/qbus: Allow hidden devices to be busless on QEMU startup\n cxl-type3: Properly unmap the memory-backend on device exit\n cxl_downstream: enable power controller present capability.\n cxl-vcs-switch: Initial support for CXL VCS.\n cxl-upstream-port: Add support for targeting a VCS switch\n cxl-downstream-port: Add support for VCS switching\n cxl-cci-mailbox: Add support for targeting a VCS switch\n cxl-mailbox-utils: Add support for VCS bind/unbind commands.\n cxl-mailbox-utils: Add support for VCS Get Virtual CXL Switch Info\n command.\n\n docs/system/devices/cxl.rst | 90 +++-\n hw/cxl/cxl-mailbox-utils.c | 207 ++++++++-\n hw/cxl/cxl-vcs-switch.c | 524 ++++++++++++++++++++++\n hw/cxl/meson.build | 1 +\n hw/cxl/switch-mailbox-cci.c | 33 +-\n hw/mem/cxl_type3.c | 3 +\n hw/pci-bridge/cxl_downstream.c | 13 +\n hw/pci-bridge/cxl_upstream.c | 20 +\n hw/usb/dev-mctp.c | 23 +-\n include/hw/cxl/cxl_device.h | 10 +-\n include/hw/cxl/cxl_vcs_switch.h | 134 ++++++\n include/hw/pci-bridge/cxl_upstream_port.h | 2 +\n qapi/qom.json | 19 +\n system/qdev-monitor.c | 10 +-\n 14 files changed, 1055 insertions(+), 34 deletions(-)\n create mode 100644 hw/cxl/cxl-vcs-switch.c\n create mode 100644 include/hw/cxl/cxl_vcs_switch.h" }