From: <mhonap@nvidia.com>
To: <alex@shazbot.org>, <jgg@ziepe.ca>, <ankita@nvidia.com>,
<jic23@kernel.org>, <dave.jiang@intel.com>,
<alejandro.lucero-palau@amd.com>, <smadhavan@nvidia.com>,
<corbet@lwn.net>, <skhan@linuxfoundation.org>,
<dave@stgolabs.net>, <alison.schofield@intel.com>,
<vishal.l.verma@intel.com>, <iweiny@kernel.org>,
<ming.li@zohomail.com>, <yishaih@nvidia.com>,
<skolothumtho@nvidia.com>, <kevin.tian@intel.com>,
<bhelgaas@google.com>, <dmatlack@google.com>, <kees@kernel.org>,
<gustavoars@kernel.org>
Cc: <cjia@nvidia.com>, <kjaju@nvidia.com>, <vsethi@nvidia.com>,
<zhiw@nvidia.com>, <mhonap@nvidia.com>,
<linux-doc@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<kvm@vger.kernel.org>, <linux-cxl@vger.kernel.org>,
<linux-pci@vger.kernel.org>, <linux-kselftest@vger.kernel.org>,
<linux-hardening@vger.kernel.org>
Subject: [PATCH v6 00/31] vfio/pci: Add CXL Type-2 device passthrough support
Date: Fri, 16 Oct 2026 21:48:07 +0530 [thread overview]
Message-ID: <20261016161839.2765592-1-mhonap@nvidia.com> (raw)
From: Manish Honap <mhonap@nvidia.com>
Hello CXL Community,
This series adds VFIO passthrough for CXL Type-2 accelerators. The guest
drives its own virtual HDM decoder and can reset the device. The host
owns the physical decoder and the host physical address the memory lands
at. The guest only picks a guest physical address. This series targets a
single, non-interleaved, firmware-committed endpoint decoder.
Base and dependencies
---------------------
Base: Linux 7.3-rc5 (72d3fcf802c4), plus:
- Richard's zero-sized HDM decoder series (v10) [1].
- Srirangan's cxl_reset series (v15) [2]. It caches the endpoint
decoder settings in pdev->hdm at enumeration and implements CXL Reset
as a PCI reset method in drivers/pci/cxl.c.
Patch 4 of this series changes drivers/pci/cxl.c from [2]. v15 exports
no reset entry that a module can call, and its reset method falls
through to FLR when it cannot run, so patch 4 adds an entry for a
driver that holds the HDM range and exports the helpers vfio-cxl needs.
Runtime requirement on arm64: CXL Reset invalidates the CPU caches for
the HDM range, which needs a registered cache maintenance driver. The
series was tested with the SMCCC cache clean/invalidate provider (v3)
[3] and firmware that implements the SMCCC cache operations; v4 [4] has
since been posted. This is not a build dependency. Without a provider
the device binds as plain vfio-pci, without the CXL extensions.
Changes since v5
----------------
v5 [5] kept the v4 provider model. v6 keeps it too and folds the v5
review, the rebase onto cxl_reset v15, and fixes found by testing on
hardware.
Base and dependency
- Rebased from cxl_reset v12 onto v15. v15 moved the reset into
drivers/pci/cxl.c, so the v5 patch that added
cxl_reset_dvsec_sequence() in drivers/cxl/core/resource.c is replaced
by patch 4: pci_cxl_reset_owned() runs the reset for the driver that
holds the HDM range and returns its failure to that driver. A reset
that cannot run fails instead of falling through to FLR.
- Bind requires that the host can run CXL Reset for the device,
including the CPU cache invalidation. Otherwise the device binds
without CXL support, so no guest gets device memory that the host
cannot clear on the next reset.
Structural
- Patches 07 and 08 are folded into 06 (now patch 7).
- The excluded-range patches 09 and 10 are now three: per-BAR sorted
lists with the read/write path and MSI-X moved onto them, the sparse
mmap capability, and refusing ioeventfds and dma-buf exports over an
excluded range.
- The HDM region patch is split into read/write (21) and mmap (22).
- New vfio-pci-core patches: one try-reset helper for every reset point
(15), revoke and re-arm of one device-specific region with its
dma-bufs (16), and provider hooks across low power (17).
- New PCI patch: bus and slot reset are refused below a CXL port with
Secondary Bus Reset (SBR) masked (5).
Behavioral
- Low power is supported and the D0 pin is gone. vfio-cxl takes the
HDM region out of use before the device leaves D0 and restores the
decoder when it returns.
- The HDM region and its dma-bufs follow the committed decoder, not
Memory Space Enable. vfio-pci-core no longer knows about HDM: each
dma-buf records the region it was exported from, and vfio-cxl revokes
and re-arms its own region around reset, hot reset and low power.
- With SBR masked, VFIO_DEVICE_PCI_HOT_RESET fails instead of reporting
a reset that never reached the device. With SBR unmasked, reset_done
restores the decoder and the ioctl fails if the restore fails.
- A failed CXL Reset returns its error and leaves the HDM region out of
use until a later CXL Reset succeeds. A hot reset or a return from
low power in between does not reopen it. The first reset at open
fails the open only on -EAGAIN.
- AER and DPC recovery take the HDM region out of use, and put it back
only if it was in use before the error and the decoder is still
committed.
- Reads of the decoder register region fail with -EIO while Memory
Space is disabled, as BAR reads do.
- HDM region read and write copy through a page-sized kernel buffer, so
memory_lock is not held across a user copy.
- The guest's Initiate CXL Reset doorbell runs the real reset and
reports Reset Complete or Reset Error in the shadow Status2.
- Without a provider, vfio-pci still guards the CXL DVSEC of a Type-2
function: Lock and Range writes are dropped, and Initiate CXL Reset
runs as a vfio reset.
- The CXL DVSEC is matched by offset range, so a DVSEC right before or
after it in config space no longer bypasses the virtualization or
indexes past the permission map.
- CXL specification references are updated to CXL r4.0.
Found in hardware testing
vfio-cxl now waits for Memory_Active, up to the Memory_Active_Timeout
the device reports, before it puts the HDM region back. It also waits
at bind, since a reset just before the bind clears it too.
- The bind-time copy of the HDM state used a helper that asserts the
device lock. The PCI core can run probe in a worker on the device's
NUMA node, so lockdep warned at every bind. Patch 4 adds
pci_cxl_hdm_snapshot(), which needs no device lock.
- The disable_cxl module parameter was never read. It now takes effect.
Reviewer feedback addressed
---------------------------
The v5 [5] thread has the full discussion. This is where each comment
landed.
Alex Williamson
- Provider load and its failure handling are one patch (7), and the
messages say "continuing without CXL support".
- The excluded-range list is per BAR, sorted, and rejects overlaps; the
ROM is left alone; ioeventfds and dma-buf exports over an excluded
range are refused (8 to 10).
- cxl_dvsec_len had no user in v5 (11). It now has one: the CXL DVSEC
is matched by offset range.
- vfio-pci exports vfio_pci_core_reset_prepare() and
vfio_pci_core_reset_done(), and calls them from its own error
handlers instead of reaching into drvdata (13).
- Low power is supported instead of pinning D0 (17, 21).
- vfio_pci_core_unregister_dev_region() is gone. vfio-pci-core frees
every dynamic region on a failed open as well as on close (12), so
vfio-cxl has nothing to unwind.
- hdm_valid is set at bind and changed only by reset, hot reset and
low power.
- vfio_pci_zap_bars() covers only the BARs again; a device-specific
region is revoked by its provider (16).
- The decoder register read takes memory_lock and checks Memory Space
(24).
- Hot reset with SBR masked and unmasked (5, 26).
- Reset is a mandatory provider op behind one try-reset helper (15),
with a success-oriented flow in vfio-cxl (29). .hdm_active is gone.
Jonathan Cameron
- Patch 1 keeps the Reviewed-by tag.
- A BAR-owning driver records one owned resource; a second call warns
and fails with -EBUSY (2).
- The uapi header uses __GENMASK() and _BITUL() (3).
- CXL Reset writes back and invalidates the CPU caches for the HDM
range before and after the reset (4).
- Allocator and style changes in 9, 11 and 12, and the devres group
factored into a helper (19).
Richard Cheng
- The provider module reference is pinned per bound device (7).
- ioeventfds and dma-buf exports over an excluded range are refused
(10).
- A dma-buf of the HDM region is exported with no_peer2peer set (28).
- The PCI state is saved before the reset at open (15).
Gregory Price
- The documentation is reworked (30) as per review comments.
Patch order
-----------
The tree builds at every commit. Five groups:
Part 1 CXL core and PCI (patches 1 to 5)
- Split the BAR block request and ioremap helpers, and let a
BAR-owning driver own the component register block, so the HDM
and RAS sub-blocks are left for vfio-cxl.
- Move the component register defines to include/uapi/cxl/cxl_regs.h
so a VMM and the selftest can use them.
- Let the driver that owns the HDM range run CXL Reset.
- Refuse bus and slot reset below a CXL port with SBR masked.
Part 2 vfio-pci-core (patches 6 to 17)
- The CXL provider ops registration and on-demand provider load.
- The generic excluded-range list, its sparse mmap capability, and
the ioeventfd and dma-buf checks.
- The CXL DVSEC virtualization, the open and close hooks, the reset
hooks, and the disable_cxl opt-out.
- The try-reset helper, per-region revoke and re-arm, and the low
power hooks.
Part 3 vfio-cxl provider and HDM regions (patches 18 to 28)
- The vfio-cxl module, the CXL memdev created at bind, and ownership
of the whole component BAR.
- The HDM memory region (read/write, then mmap), memory-failure
containment for it, and the read-only decoder register region.
- Excluding the decoder block from the direct BAR, the decoder
restore after a hot reset, the device and decoder geometry
capability, and the dma-buf export.
Part 4 vfio-cxl reset (patch 29)
- Run CXL Reset at every vfio reset point.
Part 5 Documentation and selftests (patches 30 and 31)
Subsystem boundary
------------------
vfio-pci-core does not implement CXL registers. vfio-cxl is a separate
module that registers a struct vfio_cxl_ops at init. vfio-pci-core loads
it on demand for a CXL device (request_module() after pcie_is_cxl()) and
pins it per bound device. If a modular provider is missing or fails to
load, the device is driven as plain vfio-pci. The bind only defers for a
built-in provider whose initcall has not run yet.
vfio-pci-core provides generic pieces that a provider calls: the
excluded-range list, revoke and re-arm of one device-specific region,
the try-reset helper and the low power hooks. The CXL-specific work stays
behind the ops. The CXL DVSEC virtualization is the one CXL piece in
vfio-pci-core, because it lives in the config space permission hooks.
Memory ownership
----------------
The host resolves the host physical address once, at bind, from the
committed decoder. vfio-cxl creates the memdev at bind and tears it down
at unbind. It claims the HPA range with request_mem_region_exclusive(),
so nothing, /dev/mem included, can map a conflicting cacheable alias.
The guest programs a guest physical address into a virtual decoder that
the VMM emulates. It never reaches the physical decoder registers: those
are read through a read-only region and are excluded from the direct BAR
mapping, so the guest cannot move the host physical window.
HDM region access
-----------------
The HDM region carries the coherent device memory. A VMM mmaps it and
maps it into the guest through stage-2. The fault handler inserts the
host PFNs, including PMD-sized mappings when the mapping is aligned, only
while the committed decoder is in place and the media is ready.
Otherwise the fault gets SIGBUS. Region read and write check the same
state and return -EIO while the region is out of use. The range has no
struct page and is registered with the memory-failure machinery, so a
memory error is contained to a SIGBUS.
DMA and iommufd
---------------
Some accelerators, for example a GPU, send ATS-translated DMA to their
own HDM, so that range must be in the guest IOAS. IOMMU_IOAS_MAP cannot
pin a range with no struct page. VFIO_DEVICE_FEATURE_DMA_BUF on the HDM
region returns a dma-buf fd that iommufd maps with IOMMU_IOAS_MAP_FILE.
vfio-cxl revokes the dma-buf whenever it takes the region out of use.
iommufd then unmaps the range, and the VMM maps the same dma-buf again
once the region is back.
Reset
-----
An FLR does not reset CXL.cache or CXL.mem state and does not clear
device memory (CXL r4.0 sec 9.5), so it cannot separate one user of the
device from the next. vfio-cxl runs CXL Reset with Memory Clear at every
vfio reset point: open and close, VFIO_DEVICE_RESET, a guest FLR through
config space, and the guest's Initiate CXL Reset doorbell. Under
memory_lock, with the HDM mmap zapped and the dma-buf revoked, the host
invalidates the CPU caches for the HDM range, resets the function,
restores the decoder and the PCI config state, and invalidates the
caches again. vfio-cxl then waits for Memory_Active before it puts the
region back.
A CXL port masks SBR by default (CXL r4.0 sec 8.1.5.2). The PCI core now
refuses a bus or slot reset below such a port, so the vfio hot reset
ioctls fail and a VMM uses VFIO_DEVICE_RESET. If the port has SBR
unmasked, the hot reset decommits the decoder, and vfio-cxl restores it
in reset_done with cxl_restore_state_after_pci_reset(), the helper the
PCI core's cxl_bus reset method uses.
Low power
---------
The device may enter D3hot or runtime low power while it is assigned.
Low power loses the committed decoder, so vfio-cxl takes the HDM region
out of use first and restores the decoder when the device is back in D0.
Device memory is not saved or restored across low power.
Deferred
--------
- Switched, multi-decoder and interleaved topologies stay rejected at
bind.
- Decoders that firmware did not commit are not supported.
Validation
----------
- Each patch builds with W=1 (drivers/cxl, drivers/pci and
drivers/vfio/pci, x86_64, VFIO_CXL=m).
- scripts/checkpatch.pl --strict --codespell reports no errors or
warnings. Patch 16 has one CHECK, a missing blank line between two
inline stubs, kept to match the other stubs in vfio_pci_priv.h.
- The selftest, tools/testing/selftests/vfio/vfio_cxl_type2_test.c, has
27 tests: the device flag and regions, the HDM mmap and huge fault,
the decoder register region and its -EIO gate, the dma-buf map with
IOMMU_IOAS_MAP_FILE, region read and write across pages, the DVSEC
reset doorbell, and the decoder after a D3hot cycle. All 27 pass on
an arm64 host with 64K pages and lockdep (PROVE_LOCKING) enabled.
- A guest with the device assigned booted, ran CUDA and unified memory
workloads, and reset the device twice through guest CXL Reset through
guest sysfs reset file and by using the CTRL2_INIT_CXL_RST in the
guest. (used with QEMU vfio-cxl support v2 [6]).
AI assistance disclosure
------------------------
This series was developed with substantial AI assistance (Anthropic
Claude, through the Claude Code CLI). It was used for design trade-offs,
multi-agent regression and adversarial review of the v5 feedback using
review-core.md, the port to cxl_reset v15, analysis of the hardware
failures, and drafting the selftests and the documentation.
Following Documentation/process/coding-assistants.rst, each patch
carries an Assisted-by: LLM tag. I ran the tests on hardware, have
reviewed every change, and take full DCO responsibility for the series.
References
----------
[1] [PATCH v10 0/3] Support zero-sized HDM decoders
https://lore.kernel.org/all/20260914090858.19181-1-icheng@nvidia.com/
[2] [PATCH v15 00/16] PCI/CXL: Add CXL reset support for Type 2 devices
https://lore.kernel.org/all/20261011021422.3428136-1-smadhavan@nvidia.com/
[3] [PATCH v3 0/2] Add SMCCC cache clean/invalidate provider
https://lore.kernel.org/all/20260910082142.1522865-1-smadhavan@nvidia.com/
[4] [PATCH v4 0/2] Add SMCCC cache clean/invalidate provider
https://lore.kernel.org/all/20261013070205.3566865-1-smadhavan@nvidia.com/
[5] [PATCH v5 0/27] vfio/pci: Add CXL Type-2 device passthrough support
https://lore.kernel.org/all/20260916183540.3813685-1-mhonap@nvidia.com/
[6] [PATCH v2 00/10] QEMU: CXL Type-2 device passthrough via vfio-pci
https://lore.kernel.org/linux-cxl/20260916184412.3825713-1-mhonap@nvidia.com/
Manish Honap (31):
cxl/regs: Split the BAR block request and ioremap helpers
cxl/regs: Let a BAR-owning driver own the component register block
cxl: Move component register defines to uapi/cxl/cxl_regs.h
PCI/CXL: Let the driver that owns the HDM range run CXL Reset
PCI: Refuse bus and slot reset below a CXL port with SBR masked
vfio/pci: Add the CXL provider ops registration interface
vfio/pci: Detect CXL devices and load the CXL provider on demand
vfio/pci: Add a generic excluded-range list
vfio/pci: Advertise the mmap areas around excluded ranges
vfio/pci: Refuse ioeventfds and dma-buf exports over excluded ranges
vfio/pci: Virtualize the CXL DVSEC in vfio_pci_config.c
vfio/pci: Call the CXL open and close hooks around device use
vfio/pci: Bracket PCI resets with the CXL reset hooks
vfio/pci: Provide an opt-out for the CXL Type-2 extensions
vfio/pci: Route every reset point through a try-reset helper
vfio/pci: Revoke and re-arm one device-specific region
vfio/pci: Call the device provider across low-power transitions
vfio/cxl: Add the vfio-cxl provider module skeleton
vfio/cxl: Create the CXL memdev and set media ready at bind
vfio/cxl: Own the whole component register BAR
vfio/cxl: Expose the HDM memory region to the guest
vfio/cxl: Allow mmap of the HDM memory region
vfio/cxl: Contain HDM memory errors with memory_failure()
vfio/cxl: Expose the HDM decoder registers read-only to the guest
vfio/cxl: Exclude the HDM decoder registers from direct BAR access
vfio/cxl: Restore the HDM decoder after a hot reset
vfio/cxl: Describe the CXL device and decoder geometry to userspace
vfio/cxl: Export the HDM memory region as a dma-buf
vfio/cxl: Run the CXL reset at the vfio reset points
Documentation: vfio-pci: Document CXL Type-2 device passthrough
selftests/vfio: Add CXL Type-2 passthrough tests
Documentation/driver-api/index.rst | 1 +
Documentation/driver-api/vfio-pci-cxl.rst | 312 +++++
MAINTAINERS | 10 +
drivers/cxl/core/hdm_state.c | 22 +-
drivers/cxl/core/regs.c | 64 +-
drivers/cxl/cxl.h | 47 +-
drivers/pci/cxl.c | 136 +-
drivers/pci/pci.c | 31 +-
drivers/pci/pci.h | 18 +-
drivers/vfio/pci/Kconfig | 2 +
drivers/vfio/pci/Makefile | 2 +
drivers/vfio/pci/cxl/Kconfig | 11 +
drivers/vfio/pci/cxl/Makefile | 3 +
drivers/vfio/pci/cxl/vfio_cxl_core.c | 1124 +++++++++++++++++
drivers/vfio/pci/vfio_pci.c | 52 +-
drivers/vfio/pci/vfio_pci_config.c | 225 +++-
drivers/vfio/pci/vfio_pci_core.c | 747 ++++++++++-
drivers/vfio/pci/vfio_pci_dmabuf.c | 183 ++-
drivers/vfio/pci/vfio_pci_priv.h | 20 +
drivers/vfio/pci/vfio_pci_rdwr.c | 76 +-
include/cxl/cxl.h | 2 +
include/cxl/hdm.h | 3 +-
include/cxl/pci.h | 42 +
include/linux/vfio_pci_core.h | 92 ++
include/uapi/cxl/cxl_regs.h | 56 +
include/uapi/linux/vfio.h | 24 +
tools/testing/selftests/vfio/Makefile | 1 +
.../vfio/lib/include/libvfio/iommu.h | 3 +
tools/testing/selftests/vfio/lib/iommu.c | 29 +
.../selftests/vfio/lib/vfio_pci_device.c | 57 +-
.../selftests/vfio/vfio_cxl_type2_test.c | 1095 ++++++++++++++++
31 files changed, 4306 insertions(+), 184 deletions(-)
create mode 100644 Documentation/driver-api/vfio-pci-cxl.rst
create mode 100644 drivers/vfio/pci/cxl/Kconfig
create mode 100644 drivers/vfio/pci/cxl/Makefile
create mode 100644 drivers/vfio/pci/cxl/vfio_cxl_core.c
create mode 100644 include/uapi/cxl/cxl_regs.h
create mode 100644 tools/testing/selftests/vfio/vfio_cxl_type2_test.c
--
2.53.0
next reply other threads:[~2026-10-16 16:19 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-16 16:18 mhonap [this message]
2026-10-16 16:18 ` [PATCH v6 01/31] cxl/regs: Split the BAR block request and ioremap helpers mhonap
2026-10-16 16:18 ` [PATCH v6 02/31] cxl/regs: Let a BAR-owning driver own the component register block mhonap
2026-10-16 16:18 ` [PATCH v6 03/31] cxl: Move component register defines to uapi/cxl/cxl_regs.h mhonap
2026-10-16 16:18 ` [PATCH v6 04/31] PCI/CXL: Let the driver that owns the HDM range run CXL Reset mhonap
2026-10-16 16:18 ` [PATCH v6 05/31] PCI: Refuse bus and slot reset below a CXL port with SBR masked mhonap
2026-10-16 16:18 ` [PATCH v6 06/31] vfio/pci: Add the CXL provider ops registration interface mhonap
2026-10-16 16:18 ` [PATCH v6 07/31] vfio/pci: Detect CXL devices and load the CXL provider on demand mhonap
2026-10-16 16:18 ` [PATCH v6 08/31] vfio/pci: Add a generic excluded-range list mhonap
2026-10-16 16:18 ` [PATCH v6 09/31] vfio/pci: Advertise the mmap areas around excluded ranges mhonap
2026-10-16 16:18 ` [PATCH v6 10/31] vfio/pci: Refuse ioeventfds and dma-buf exports over " mhonap
2026-10-16 16:18 ` [PATCH v6 11/31] vfio/pci: Virtualize the CXL DVSEC in vfio_pci_config.c mhonap
2026-10-16 16:18 ` [PATCH v6 12/31] vfio/pci: Call the CXL open and close hooks around device use mhonap
2026-10-16 16:18 ` [PATCH v6 13/31] vfio/pci: Bracket PCI resets with the CXL reset hooks mhonap
2026-10-16 16:18 ` [PATCH v6 14/31] vfio/pci: Provide an opt-out for the CXL Type-2 extensions mhonap
2026-10-16 16:18 ` [PATCH v6 15/31] vfio/pci: Route every reset point through a try-reset helper mhonap
2026-10-16 16:18 ` [PATCH v6 16/31] vfio/pci: Revoke and re-arm one device-specific region mhonap
2026-10-16 16:18 ` [PATCH v6 17/31] vfio/pci: Call the device provider across low-power transitions mhonap
2026-10-16 16:18 ` [PATCH v6 18/31] vfio/cxl: Add the vfio-cxl provider module skeleton mhonap
2026-10-16 16:18 ` [PATCH v6 19/31] vfio/cxl: Create the CXL memdev and set media ready at bind mhonap
2026-10-16 16:18 ` [PATCH v6 20/31] vfio/cxl: Own the whole component register BAR mhonap
2026-10-16 16:18 ` [PATCH v6 21/31] vfio/cxl: Expose the HDM memory region to the guest mhonap
2026-10-16 16:18 ` [PATCH v6 22/31] vfio/cxl: Allow mmap of the HDM memory region mhonap
2026-10-16 16:18 ` [PATCH v6 23/31] vfio/cxl: Contain HDM memory errors with memory_failure() mhonap
2026-10-16 16:18 ` [PATCH v6 24/31] vfio/cxl: Expose the HDM decoder registers read-only to the guest mhonap
2026-10-16 16:18 ` [PATCH v6 25/31] vfio/cxl: Exclude the HDM decoder registers from direct BAR access mhonap
2026-10-16 16:18 ` [PATCH v6 26/31] vfio/cxl: Restore the HDM decoder after a hot reset mhonap
2026-10-16 16:18 ` [PATCH v6 27/31] vfio/cxl: Describe the CXL device and decoder geometry to userspace mhonap
2026-10-16 16:18 ` [PATCH v6 28/31] vfio/cxl: Export the HDM memory region as a dma-buf mhonap
2026-10-16 16:18 ` [PATCH v6 29/31] vfio/cxl: Run the CXL reset at the vfio reset points mhonap
2026-10-16 16:18 ` [PATCH v6 30/31] Documentation: vfio-pci: Document CXL Type-2 device passthrough mhonap
2026-10-16 16:18 ` [PATCH v6 31/31] selftests/vfio: Add CXL Type-2 passthrough tests mhonap
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261016161839.2765592-1-mhonap@nvidia.com \
--to=mhonap@nvidia.com \
--cc=alejandro.lucero-palau@amd.com \
--cc=alex@shazbot.org \
--cc=alison.schofield@intel.com \
--cc=ankita@nvidia.com \
--cc=bhelgaas@google.com \
--cc=cjia@nvidia.com \
--cc=corbet@lwn.net \
--cc=dave.jiang@intel.com \
--cc=dave@stgolabs.net \
--cc=dmatlack@google.com \
--cc=gustavoars@kernel.org \
--cc=iweiny@kernel.org \
--cc=jgg@ziepe.ca \
--cc=jic23@kernel.org \
--cc=kees@kernel.org \
--cc=kevin.tian@intel.com \
--cc=kjaju@nvidia.com \
--cc=kvm@vger.kernel.org \
--cc=linux-cxl@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=ming.li@zohomail.com \
--cc=skhan@linuxfoundation.org \
--cc=skolothumtho@nvidia.com \
--cc=smadhavan@nvidia.com \
--cc=vishal.l.verma@intel.com \
--cc=vsethi@nvidia.com \
--cc=yishaih@nvidia.com \
--cc=zhiw@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox