Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
645dd5c
cxl: support Type2 when initializing cxl_dev_state
alucerop Mar 6, 2026
2bc7fd2
cxl: export internal structs for external Type2 drivers
alucerop Mar 6, 2026
8b61bd2
cxl: Move pci generic code from cxl_pci to core/cxl_pci
alucerop Mar 6, 2026
d3059e8
cxl/pci: Remove redundant cxl_pci_find_port() call
Mar 6, 2026
513a2a5
NVIDIA: VR: SAUCE: sfc: add cxl support
alucerop Apr 23, 2026
ba9972c
NVIDIA: VR: SAUCE: cxl/sfc: Map cxl regs
alucerop May 13, 2026
cb8c412
NVIDIA: VR: SAUCE: cxl/sfc: Initialize dpa without a mailbox
alucerop Apr 23, 2026
7965450
NVIDIA: VR: SAUCE: cxl: Prepare memdev creation for type2
alucerop Apr 23, 2026
9c91236
NVIDIA: VR: SAUCE: sfc: create type2 cxl memdev
alucerop Apr 23, 2026
388dc8c
NVIDIA: VR: SAUCE: cxl: attach region to an accelerator/type2 memdev
alucerop Apr 23, 2026
d6acd1d
NVIDIA: VR: SAUCE: cxl: Avoid dax creation for accelerators
alucerop Apr 23, 2026
0fdb201
NVIDIA: VR: SAUCE: sfc: support pio mapping based on cxl
alucerop May 13, 2026
1d651db
NVIDIA: VR: SAUCE: dax/hmem: Request cxl_acpi and cxl_pci before walk…
djbw Feb 10, 2026
77ac7f9
NVIDIA: VR: SAUCE: dax/hmem: Gate Soft Reserved deferral on DEV_DAX_CXL
djbw Feb 10, 2026
d8ce89e
NVIDIA: VR: SAUCE: cxl/region: Skip decoder reset on detach for autod…
skoralah Feb 10, 2026
79356d9
NVIDIA: VR: SAUCE: dax/cxl, hmem: Initialize hmem early and defer dax…
djbw Feb 10, 2026
3a52fc6
NVIDIA: VR: SAUCE: dax: Track all dax_region allocations under a glob…
skoralah Feb 10, 2026
3a6c6f5
NVIDIA: VR: SAUCE: cxl/region: Add helper to check Soft Reserved cont…
skoralah Feb 10, 2026
2e43346
NVIDIA: VR: SAUCE: dax: Add deferred-work helpers for dax_hmem and da…
skoralah Feb 10, 2026
c0db8c8
NVIDIA: VR: SAUCE: dax/hmem, cxl: Defer and resolve ownership of Soft…
skoralah Feb 10, 2026
8cb4fea
NVIDIA: VR: SAUCE: dax/hmem: Reintroduce Soft Reserved ranges back in…
skoralah Feb 10, 2026
7a6aebb
NVIDIA: VR: SAUCE: cxl/region: Support multi-level interleaving with …
Oct 28, 2025
a2eba9d
NVIDIA: VR: SAUCE: [Config] CXL config annotations for Type-2 device …
JiandiAnNVIDIA May 13, 2026
e3aadf6
NVIDIA: VR: SAUCE: [Config] Enable CXL DAX and KMEM built-in for CXL …
JiandiAnNVIDIA May 13, 2026
5268ad9
NVIDIA: VR: SAUCE: [Config] Add PCI_CXL annotation for CXL state save…
JiandiAnNVIDIA May 13, 2026
e90b1ee
NVIDIA: SAUCE: Revert "NVIDIA: VR: SAUCE: cxl: add support for cxl re…
kobak2026 May 18, 2026
07705ee
NVIDIA: VR: SAUCE: PCI: Add CXL DVSEC control, lock, and range regist…
SriMNvidia Mar 6, 2026
82adede
NVIDIA: VR: SAUCE: cxl: Move HDM decoder and register map definitions…
SriMNvidia Mar 6, 2026
9a09ee0
NVIDIA: VR: SAUCE: PCI: Add virtual extended cap save buffer for CXL …
SriMNvidia Mar 6, 2026
969356c
NVIDIA: VR: SAUCE: PCI: Add cxl DVSEC state save/restore across resets
SriMNvidia Mar 6, 2026
42ade8e
NVIDIA: VR: SAUCE: PCI: Add HDM decoder state save/restore
SriMNvidia Mar 6, 2026
52975ec
NVIDIA: VR: SAUCE: PCI: Add CXL DVSEC reset and capability register d…
SriMNvidia Mar 6, 2026
d1c9d1b
NVIDIA: VR: SAUCE: PCI: Export pci_dev_save_and_disable() and pci_dev…
SriMNvidia Mar 6, 2026
baa527d
NVIDIA: VR: SAUCE: cxl: Add memory offlining and cache flush helpers
SriMNvidia Mar 6, 2026
3a245b9
NVIDIA: VR: SAUCE: cxl: Add multi-function sibling coordination for C…
SriMNvidia Mar 6, 2026
6e9e72b
NVIDIA: VR: SAUCE: cxl: Add CXL DVSEC reset sequence and flow orchest…
SriMNvidia Mar 6, 2026
c6db6ce
NVIDIA: VR: SAUCE: cxl: Add cxl_reset sysfs interface for PCI devices
SriMNvidia Mar 6, 2026
9bf30cf
NVIDIA: VR: SAUCE: Documentation: ABI: Add CXL PCI cxl_reset sysfs at…
SriMNvidia Mar 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions Documentation/ABI/testing/sysfs-bus-pci
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,28 @@ Description:
similiar to writing 1 to their individual "reset" file, so use
with caution.

What: /sys/bus/pci/devices/.../cxl_reset
Date: February 2026
Contact: linux-cxl@vger.kernel.org
Description:
This attribute is only visible when the device advertises
CXL Reset Capable in the CXL DVSEC Capability register
(CXL r3.2, section 8.1.3).

Writing 1 to this file triggers a CXL device reset which
affects CXL.cache and CXL.mem state on all CXL functions
(i.e. those not listed in the Non-CXL Function Map DVSEC,
section 8.1.4), not just CXL.io/PCIe state. This is
separate from the standard PCI reset interface because CXL
Reset has different scope.

The reset will fail with -EBUSY if any CXL regions using this
device have drivers bound. Active regions are torn down as
part of the reset sequence.

This attribute is registered by the CXL core when a CXL device
is discovered, independent of which driver binds the PCI device.

What: /sys/bus/pci/devices/.../vpd
Date: February 2008
Contact: Ben Hutchings <bwh@kernel.org>
Expand Down
51 changes: 51 additions & 0 deletions debian.nvidia-bos/config/annotations
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,15 @@

include "../../debian.master/config/annotations"

CONFIG_ACPI_APEI_EINJ policy<{'amd64': 'y', 'arm64': 'y'}>
CONFIG_ACPI_APEI_EINJ note<'Required for CONFIG_ACPI_APEI_EINJ_CXL'>

CONFIG_ACPI_APEI_EINJ_CXL policy<{'amd64': 'y', 'arm64': 'y'}>
CONFIG_ACPI_APEI_EINJ_CXL note<'CXL protocol error injection support via APEI EINJ'>

CONFIG_ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION policy<{'amd64': 'y', 'arm64': 'y'}>
CONFIG_ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION note<'Override debian.master amd64-only; arm64 selects this via arch/arm64/Kconfig since 4d873c5dc3ed'>

CONFIG_ARM64_ERRATUM_1902691 policy<{'arm64': 'y'}>
CONFIG_ARM64_ERRATUM_1902691 note<'Required for Grace enablement'>

Expand Down Expand Up @@ -36,6 +45,9 @@ CONFIG_ARM64_WORKAROUND_TRBE_OVERWRITE_FILL_MODE note<'Required for Grace enable
CONFIG_ARM64_WORKAROUND_TRBE_WRITE_OUT_OF_RANGE policy<{'arm64': 'y'}>
CONFIG_ARM64_WORKAROUND_TRBE_WRITE_OUT_OF_RANGE note<'Required for Grace enablement'>

CONFIG_CACHEMAINT_FOR_HOTPLUG policy<{'amd64': '-', 'arm64': 'n'}>
CONFIG_CACHEMAINT_FOR_HOTPLUG note<'Optional HiSilicon HHA cache maintenance driver; depends on GENERIC_CPU_CACHE_MAINTENANCE; not needed for NVIDIA platforms'>

CONFIG_ARM_FFA_TRANSPORT policy<{'arm64': 'y'}>
CONFIG_ARM_FFA_TRANSPORT note<'LP: #2111511'>

Expand Down Expand Up @@ -111,9 +123,24 @@ CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE note<'LP: #2028576: Perf governo
CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL policy<{'amd64': 'n', 'arm64': 'n'}>
CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL note<'LP: #2028576: Perf governor required for NVIDIA workloads'>

CONFIG_CXL_BUS policy<{'amd64': 'y', 'arm64': 'y'}>
CONFIG_CXL_BUS note<'Enable CXL bus support built-in; required for CXL Type-2 device and RAS support'>

CONFIG_CXL_MEM policy<{'amd64': 'y', 'arm64': 'y'}>
CONFIG_CXL_MEM note<'Auto-selected by CXL_PCI; required for CXL memory expansion and Type-2 device support'>

CONFIG_CXL_MEM_RAW_COMMANDS policy<{'amd64': 'n', 'arm64': 'y'}>
CONFIG_CXL_MEM_RAW_COMMANDS note<'Enable CXL raw commands for memory devices'>

CONFIG_CXL_PCI policy<{'amd64': 'y', 'arm64': 'y'}>
CONFIG_CXL_PCI note<'Enable CXL PCI management built-in; auto-selects CXL_MEM; required for CXL Type-2 device support'>

CONFIG_CXL_PORT policy<{'amd64': 'y', 'arm64': 'y'}>
CONFIG_CXL_PORT note<'Required for CXL port enumeration; defaults to CXL_BUS value'>

CONFIG_CXL_RAS policy<{'amd64': 'y', 'arm64': 'y'}>
CONFIG_CXL_RAS note<'New def_bool replacing PCIEAER_CXL; auto-enabled with ACPI_APEI_GHES+PCIEAER+CXL_BUS; CXL RAS error handling support'>

CONFIG_DRM_NOUVEAU policy<{'amd64': 'n', 'arm64': 'n'}>
CONFIG_DRM_NOUVEAU note<'Disable nouveau for NVIDIA kernels'>

Expand All @@ -135,6 +162,12 @@ CONFIG_EFI_CAPSULE_LOADER note<'LP: #2067111'>
CONFIG_ETM4X_IMPDEF_FEATURE policy<{'arm64': 'n'}>
CONFIG_ETM4X_IMPDEF_FEATURE note<'Required for Grace enablement'>

CONFIG_FWCTL policy<{'amd64': 'y', 'arm64': 'y'}>
CONFIG_FWCTL note<'Selected by CXL_BUS when CXL_FEATURES is enabled; required for CXL feature mailbox access'>

CONFIG_GENERIC_CPU_CACHE_MAINTENANCE policy<{'amd64': '-', 'arm64': 'y'}>
CONFIG_GENERIC_CPU_CACHE_MAINTENANCE note<'Selected by arm64 via arch/arm64/Kconfig since 4d873c5dc3ed; not selected by x86'>

CONFIG_GPIO_AAEON policy<{'amd64': '-'}>
CONFIG_GPIO_AAEON note<'Disable all Ubuntu ODM drivers'>

Expand Down Expand Up @@ -180,6 +213,9 @@ CONFIG_NOUVEAU_PLATFORM_DRIVER note<'Disable nouveau for NVIDIA
CONFIG_NR_CPUS policy<{'amd64': '8192', 'arm64': '512'}>
CONFIG_NR_CPUS note<'LP: #1864198'>

CONFIG_PCIEAER_CXL policy<{'amd64': '-', 'arm64': '-'}>
CONFIG_PCIEAER_CXL note<'Removed by commit d18f1b7beadf (PCI/AER: Replace PCIEAER_CXL symbol with CXL_RAS)'>

CONFIG_NVGRACE_EGM policy<{'arm64': 'm'}>
CONFIG_NVGRACE_EGM note<'LP: #2119656'>

Expand Down Expand Up @@ -207,6 +243,9 @@ CONFIG_SAMPLE_CORESIGHT_SYSCFG note<'Required for Grace enablem
CONFIG_SENSORS_AAEON policy<{'amd64': '-'}>
CONFIG_SENSORS_AAEON note<'Disable all Ubuntu ODM drivers'>

CONFIG_SFC_CXL policy<{'amd64': 'n', 'arm64': 'n'}>
CONFIG_SFC_CXL note<'Solarflare SFC9100-family CXL Type-2 device support; not needed for NVIDIA platforms'>

CONFIG_SPI_TEGRA210_QUAD policy<{'arm64': 'y'}>
CONFIG_SPI_TEGRA210_QUAD note<'Ensures the TPM is available before the IMA driver initializes'>

Expand All @@ -225,6 +264,18 @@ CONFIG_UBUNTU_ODM_DRIVERS note<'Disable all Ubuntu ODM dri
CONFIG_ULTRASOC_SMB policy<{'arm64': 'n'}>
CONFIG_ULTRASOC_SMB note<'Required for Grace enablement'>

CONFIG_DEV_DAX policy<{'amd64': 'y', 'arm64': 'y'}>
CONFIG_DEV_DAX note<'Override debian.master m->y; required built-in for DEV_DAX_CXL=y'>

CONFIG_DEV_DAX_CXL policy<{'amd64': 'y', 'arm64': 'y'}>
CONFIG_DEV_DAX_CXL note<'Override debian.master m->y; CXL RAM region DAX access; depends on CXL_BUS+CXL_REGION+DEV_DAX'>

CONFIG_DEV_DAX_KMEM policy<{'amd64': 'y', 'arm64': 'y'}>
CONFIG_DEV_DAX_KMEM note<'Override debian.master m->y; map CXL DAX devices as System-RAM'>

CONFIG_PCI_CXL policy<{'amd64': 'y', 'arm64': 'y'}>
CONFIG_PCI_CXL note<'Hidden bool; auto-enabled by CXL_BUS; PCI core CXL DVSEC and HDM state save/restore support'>

CONFIG_VFIO_CONTAINER policy<{'amd64': 'y', 'arm64': 'n'}>
CONFIG_VFIO_CONTAINER note<'LP: #2095028'>

Expand Down
6 changes: 6 additions & 0 deletions drivers/cxl/core/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ void __iomem *devm_cxl_iomap_block(struct device *dev, resource_size_t addr,
struct dentry *cxl_debugfs_create_dir(const char *dir);
int cxl_dpa_set_part(struct cxl_endpoint_decoder *cxled,
enum cxl_partition_mode mode);
struct cxl_memdev_state;
int cxl_mem_get_partition_info(struct cxl_memdev_state *mds);
int cxl_dpa_alloc(struct cxl_endpoint_decoder *cxled, u64 size);
int cxl_dpa_free(struct cxl_endpoint_decoder *cxled);
resource_size_t cxl_dpa_size(struct cxl_endpoint_decoder *cxled);
Expand Down Expand Up @@ -136,6 +138,8 @@ extern struct cxl_rwsem cxl_rwsem;
int cxl_memdev_init(void);
void cxl_memdev_exit(void);
void cxl_mbox_init(void);
void cxl_reset_sysfs_init(void);
void cxl_reset_sysfs_exit(void);

enum cxl_poison_trace_type {
CXL_POISON_TRACE_LIST,
Expand Down Expand Up @@ -224,4 +228,6 @@ int cxl_set_feature(struct cxl_mailbox *cxl_mbox, const uuid_t *feat_uuid,
u16 *return_code);
#endif

resource_size_t cxl_rcd_component_reg_phys(struct device *dev,
struct cxl_dport *dport);
#endif /* __CXL_CORE_H__ */
63 changes: 6 additions & 57 deletions drivers/cxl/core/mbox.c
Original file line number Diff line number Diff line change
Expand Up @@ -1151,7 +1151,7 @@ EXPORT_SYMBOL_NS_GPL(cxl_mem_get_event_records, "CXL");
*
* See CXL @8.2.9.5.2.1 Get Partition Info
*/
static int cxl_mem_get_partition_info(struct cxl_memdev_state *mds)
int cxl_mem_get_partition_info(struct cxl_memdev_state *mds)
{
struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox;
struct cxl_mbox_get_partition_info pi;
Expand Down Expand Up @@ -1307,55 +1307,6 @@ int cxl_mem_sanitize(struct cxl_memdev *cxlmd, u16 cmd)
return -EBUSY;
}

static void add_part(struct cxl_dpa_info *info, u64 start, u64 size, enum cxl_partition_mode mode)
{
int i = info->nr_partitions;

if (size == 0)
return;

info->part[i].range = (struct range) {
.start = start,
.end = start + size - 1,
};
info->part[i].mode = mode;
info->nr_partitions++;
}

int cxl_mem_dpa_fetch(struct cxl_memdev_state *mds, struct cxl_dpa_info *info)
{
struct cxl_dev_state *cxlds = &mds->cxlds;
struct device *dev = cxlds->dev;
int rc;

if (!cxlds->media_ready) {
info->size = 0;
return 0;
}

info->size = mds->total_bytes;

if (mds->partition_align_bytes == 0) {
add_part(info, 0, mds->volatile_only_bytes, CXL_PARTMODE_RAM);
add_part(info, mds->volatile_only_bytes,
mds->persistent_only_bytes, CXL_PARTMODE_PMEM);
return 0;
}

rc = cxl_mem_get_partition_info(mds);
if (rc) {
dev_err(dev, "Failed to query partition information\n");
return rc;
}

add_part(info, 0, mds->active_volatile_bytes, CXL_PARTMODE_RAM);
add_part(info, mds->active_volatile_bytes, mds->active_persistent_bytes,
CXL_PARTMODE_PMEM);

return 0;
}
EXPORT_SYMBOL_NS_GPL(cxl_mem_dpa_fetch, "CXL");

int cxl_get_dirty_count(struct cxl_memdev_state *mds, u32 *count)
{
struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox;
Expand Down Expand Up @@ -1521,23 +1472,21 @@ int cxl_mailbox_init(struct cxl_mailbox *cxl_mbox, struct device *host)
}
EXPORT_SYMBOL_NS_GPL(cxl_mailbox_init, "CXL");

struct cxl_memdev_state *cxl_memdev_state_create(struct device *dev)
struct cxl_memdev_state *cxl_memdev_state_create(struct device *dev, u64 serial,
u16 dvsec)
{
struct cxl_memdev_state *mds;
int rc;

mds = devm_kzalloc(dev, sizeof(*mds), GFP_KERNEL);
mds = devm_cxl_dev_state_create(dev, CXL_DEVTYPE_CLASSMEM, serial,
dvsec, struct cxl_memdev_state, cxlds,
true);
if (!mds) {
dev_err(dev, "No memory available\n");
return ERR_PTR(-ENOMEM);
}

mutex_init(&mds->event.log_lock);
mds->cxlds.dev = dev;
mds->cxlds.reg_map.host = dev;
mds->cxlds.cxl_mbox.host = dev;
mds->cxlds.reg_map.resource = CXL_RESOURCE_NONE;
mds->cxlds.type = CXL_DEVTYPE_CLASSMEM;

rc = devm_cxl_register_mce_notifier(dev, &mds->mce_notifier);
if (rc == -EOPNOTSUPP)
Expand Down
105 changes: 103 additions & 2 deletions drivers/cxl/core/memdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include <linux/slab.h>
#include <linux/idr.h>
#include <linux/pci.h>
#include <cxl/cxl.h>
#include <cxlmem.h>
#include "trace.h"
#include "core.h"
Expand Down Expand Up @@ -576,12 +577,85 @@ static const struct device_type cxl_memdev_type = {
.groups = cxl_memdev_attribute_groups,
};

static const struct device_type cxl_accel_memdev_type = {
.name = "cxl_accel_memdev",
.release = cxl_memdev_release,
.devnode = cxl_memdev_devnode,
};

bool is_cxl_memdev(const struct device *dev)
{
return dev->type == &cxl_memdev_type;
return (dev->type == &cxl_memdev_type ||
dev->type == &cxl_accel_memdev_type);
}
EXPORT_SYMBOL_NS_GPL(is_cxl_memdev, "CXL");

static void add_part(struct cxl_dpa_info *info, u64 start, u64 size, enum cxl_partition_mode mode)
{
int i = info->nr_partitions;

if (size == 0)
return;

info->part[i].range = (struct range) {
.start = start,
.end = start + size - 1,
};
info->part[i].mode = mode;
info->nr_partitions++;
}

int cxl_mem_dpa_fetch(struct cxl_memdev_state *mds, struct cxl_dpa_info *info)
{
struct cxl_dev_state *cxlds = &mds->cxlds;
struct device *dev = cxlds->dev;
int rc;

if (!cxlds->media_ready) {
info->size = 0;
return 0;
}

info->size = mds->total_bytes;

if (mds->partition_align_bytes == 0) {
add_part(info, 0, mds->volatile_only_bytes, CXL_PARTMODE_RAM);
add_part(info, mds->volatile_only_bytes,
mds->persistent_only_bytes, CXL_PARTMODE_PMEM);
return 0;
}

rc = cxl_mem_get_partition_info(mds);
if (rc) {
dev_err(dev, "Failed to query partition information\n");
return rc;
}

add_part(info, 0, mds->active_volatile_bytes, CXL_PARTMODE_RAM);
add_part(info, mds->active_volatile_bytes, mds->active_persistent_bytes,
CXL_PARTMODE_PMEM);

return 0;
}
EXPORT_SYMBOL_NS_GPL(cxl_mem_dpa_fetch, "CXL");

/**
* cxl_set_capacity: initialize dpa by a driver without a mailbox.
*
* @cxlds: pointer to cxl_dev_state
* @capacity: device volatile memory size
*/
int cxl_set_capacity(struct cxl_dev_state *cxlds, u64 capacity)
{
struct cxl_dpa_info range_info = {
.size = capacity,
};

add_part(&range_info, 0, capacity, CXL_PARTMODE_RAM);
return cxl_dpa_setup(cxlds, &range_info);
}
EXPORT_SYMBOL_NS_GPL(cxl_set_capacity, "CXL");

/**
* set_exclusive_cxl_commands() - atomically disable user cxl commands
* @mds: The device state to operate on
Expand Down Expand Up @@ -656,6 +730,30 @@ static void detach_memdev(struct work_struct *work)

static struct lock_class_key cxl_memdev_key;

struct cxl_dev_state *_devm_cxl_dev_state_create(struct device *dev,
enum cxl_devtype type,
u64 serial, u16 dvsec,
size_t size, bool has_mbox)
{
struct cxl_dev_state *cxlds = devm_kzalloc(dev, size, GFP_KERNEL);

if (!cxlds)
return NULL;

cxlds->dev = dev;
cxlds->type = type;
cxlds->serial = serial;
cxlds->cxl_dvsec = dvsec;
cxlds->reg_map.host = dev;
cxlds->reg_map.resource = CXL_RESOURCE_NONE;

if (has_mbox)
cxlds->cxl_mbox.host = dev;

return cxlds;
}
EXPORT_SYMBOL_NS_GPL(_devm_cxl_dev_state_create, "CXL");

static struct cxl_memdev *cxl_memdev_alloc(struct cxl_dev_state *cxlds,
const struct file_operations *fops,
const struct cxl_memdev_attach *attach)
Expand Down Expand Up @@ -683,7 +781,10 @@ static struct cxl_memdev *cxl_memdev_alloc(struct cxl_dev_state *cxlds,
dev->parent = cxlds->dev;
dev->bus = &cxl_bus_type;
dev->devt = MKDEV(cxl_mem_major, cxlmd->id);
dev->type = &cxl_memdev_type;
if (cxlds->type == CXL_DEVTYPE_DEVMEM)
dev->type = &cxl_accel_memdev_type;
else
dev->type = &cxl_memdev_type;
device_set_pm_not_required(dev);
INIT_WORK(&cxlmd->detach_work, detach_memdev);

Expand Down
Loading
Loading