From: Neeraj Kumar <s.neeraj@samsung.com>
To: dan.j.williams@intel.com, dave@stgolabs.net,
jonathan.cameron@huawei.com, dave.jiang@intel.com,
alison.schofield@intel.com, vishal.l.verma@intel.com,
ira.weiny@intel.com
Cc: a.manzanares@samsung.com, nifan.cxl@gmail.com,
anisa.su@samsung.com, vishak.g@samsung.com,
krish.reddy@samsung.com, arun.george@samsung.com,
alok.rathore@samsung.com, s.neeraj@samsung.com,
neeraj.kernel@gmail.com, linux-kernel@vger.kernel.org,
linux-cxl@vger.kernel.org, nvdimm@lists.linux.dev,
gost.dev@samsung.com, cpgs@samsung.com
Subject: [RFC PATCH 02/20] nvdimm/label: Prep patch to accommodate cxl lsa 2.1 support
Date: Tue, 17 Jun 2025 18:09:26 +0530 [thread overview]
Message-ID: <700072760.81750165203833.JavaMail.epsvc@epcpadp1new> (raw)
In-Reply-To: <20250617123944.78345-1-s.neeraj@samsung.com>
In order to accommodate cxl lsa 2.1 format region label, renamed
nd_namespace_label to nd_lsa_label.
No functional change introduced.
Signed-off-by: Neeraj Kumar <s.neeraj@samsung.com>
---
drivers/nvdimm/label.c | 79 ++++++++++++++++++---------------
drivers/nvdimm/label.h | 12 ++++-
drivers/nvdimm/namespace_devs.c | 74 +++++++++++++++---------------
drivers/nvdimm/nd.h | 2 +-
4 files changed, 92 insertions(+), 75 deletions(-)
diff --git a/drivers/nvdimm/label.c b/drivers/nvdimm/label.c
index 48b5ba90216d..30bccad98939 100644
--- a/drivers/nvdimm/label.c
+++ b/drivers/nvdimm/label.c
@@ -271,7 +271,7 @@ static void nd_label_copy(struct nvdimm_drvdata *ndd,
memcpy(dst, src, sizeof_namespace_index(ndd));
}
-static struct nd_namespace_label *nd_label_base(struct nvdimm_drvdata *ndd)
+static struct nd_lsa_label *nd_label_base(struct nvdimm_drvdata *ndd)
{
void *base = to_namespace_index(ndd, 0);
@@ -279,7 +279,7 @@ static struct nd_namespace_label *nd_label_base(struct nvdimm_drvdata *ndd)
}
static int to_slot(struct nvdimm_drvdata *ndd,
- struct nd_namespace_label *nd_label)
+ struct nd_lsa_label *nd_label)
{
unsigned long label, base;
@@ -289,14 +289,14 @@ static int to_slot(struct nvdimm_drvdata *ndd,
return (label - base) / sizeof_namespace_label(ndd);
}
-static struct nd_namespace_label *to_label(struct nvdimm_drvdata *ndd, int slot)
+static struct nd_lsa_label *to_label(struct nvdimm_drvdata *ndd, int slot)
{
unsigned long label, base;
base = (unsigned long) nd_label_base(ndd);
label = base + sizeof_namespace_label(ndd) * slot;
- return (struct nd_namespace_label *) label;
+ return (struct nd_lsa_label *) label;
}
#define for_each_clear_bit_le(bit, addr, size) \
@@ -382,14 +382,14 @@ static void nsl_calculate_checksum(struct nvdimm_drvdata *ndd,
}
static bool slot_valid(struct nvdimm_drvdata *ndd,
- struct nd_namespace_label *nd_label, u32 slot)
+ struct nd_lsa_label *nd_label, u32 slot)
{
bool valid;
/* check that we are written where we expect to be written */
- if (slot != nsl_get_slot(ndd, nd_label))
+ if (slot != nsl_get_slot(ndd, &nd_label->ns_label))
return false;
- valid = nsl_validate_checksum(ndd, nd_label);
+ valid = nsl_validate_checksum(ndd, &nd_label->ns_label);
if (!valid)
dev_dbg(ndd->dev, "fail checksum. slot: %d\n", slot);
return valid;
@@ -405,7 +405,8 @@ int nd_label_reserve_dpa(struct nvdimm_drvdata *ndd)
return 0; /* no label, nothing to reserve */
for_each_clear_bit_le(slot, free, nslot) {
- struct nd_namespace_label *nd_label;
+ struct nd_lsa_label *nd_label;
+ struct nd_namespace_label *ns_label;
struct nd_region *nd_region = NULL;
struct nd_label_id label_id;
struct resource *res;
@@ -413,16 +414,17 @@ int nd_label_reserve_dpa(struct nvdimm_drvdata *ndd)
u32 flags;
nd_label = to_label(ndd, slot);
+ ns_label = &nd_label->ns_label;
if (!slot_valid(ndd, nd_label, slot))
continue;
- nsl_get_uuid(ndd, nd_label, &label_uuid);
- flags = nsl_get_flags(ndd, nd_label);
+ nsl_get_uuid(ndd, ns_label, &label_uuid);
+ flags = nsl_get_flags(ndd, ns_label);
nd_label_gen_id(&label_id, &label_uuid, flags);
res = nvdimm_allocate_dpa(ndd, &label_id,
- nsl_get_dpa(ndd, nd_label),
- nsl_get_rawsize(ndd, nd_label));
+ nsl_get_dpa(ndd, ns_label),
+ nsl_get_rawsize(ndd, ns_label));
nd_dbg_dpa(nd_region, ndd, res, "reserve\n");
if (!res)
return -EBUSY;
@@ -564,14 +566,14 @@ int nd_label_active_count(struct nvdimm_drvdata *ndd)
return 0;
for_each_clear_bit_le(slot, free, nslot) {
- struct nd_namespace_label *nd_label;
+ struct nd_lsa_label *nd_label;
nd_label = to_label(ndd, slot);
if (!slot_valid(ndd, nd_label, slot)) {
- u32 label_slot = nsl_get_slot(ndd, nd_label);
- u64 size = nsl_get_rawsize(ndd, nd_label);
- u64 dpa = nsl_get_dpa(ndd, nd_label);
+ u32 label_slot = nsl_get_slot(ndd, &nd_label->ns_label);
+ u64 size = nsl_get_rawsize(ndd, &nd_label->ns_label);
+ u64 dpa = nsl_get_dpa(ndd, &nd_label->ns_label);
dev_dbg(ndd->dev,
"slot%d invalid slot: %d dpa: %llx size: %llx\n",
@@ -583,7 +585,7 @@ int nd_label_active_count(struct nvdimm_drvdata *ndd)
return count;
}
-struct nd_namespace_label *nd_label_active(struct nvdimm_drvdata *ndd, int n)
+struct nd_lsa_label *nd_label_active(struct nvdimm_drvdata *ndd, int n)
{
struct nd_namespace_index *nsindex;
unsigned long *free;
@@ -593,7 +595,7 @@ struct nd_namespace_label *nd_label_active(struct nvdimm_drvdata *ndd, int n)
return NULL;
for_each_clear_bit_le(slot, free, nslot) {
- struct nd_namespace_label *nd_label;
+ struct nd_lsa_label *nd_label;
nd_label = to_label(ndd, slot);
if (!slot_valid(ndd, nd_label, slot))
@@ -731,7 +733,7 @@ static int nd_label_write_index(struct nvdimm_drvdata *ndd, int index, u32 seq,
}
static unsigned long nd_label_offset(struct nvdimm_drvdata *ndd,
- struct nd_namespace_label *nd_label)
+ struct nd_lsa_label *nd_label)
{
return (unsigned long) nd_label
- (unsigned long) to_namespace_index(ndd, 0);
@@ -885,7 +887,8 @@ static int __pmem_label_update(struct nd_region *nd_region,
struct nd_namespace_common *ndns = &nspm->nsio.common;
struct nd_interleave_set *nd_set = nd_region->nd_set;
struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
- struct nd_namespace_label *nd_label;
+ struct nd_lsa_label *nd_label;
+ struct nd_namespace_label *ns_label;
struct nd_namespace_index *nsindex;
struct nd_label_ent *label_ent;
struct nd_label_id label_id;
@@ -918,20 +921,22 @@ static int __pmem_label_update(struct nd_region *nd_region,
nd_label = to_label(ndd, slot);
memset(nd_label, 0, sizeof_namespace_label(ndd));
- nsl_set_uuid(ndd, nd_label, nspm->uuid);
- nsl_set_name(ndd, nd_label, nspm->alt_name);
- nsl_set_flags(ndd, nd_label, flags);
- nsl_set_nlabel(ndd, nd_label, nd_region->ndr_mappings);
- nsl_set_nrange(ndd, nd_label, 1);
- nsl_set_position(ndd, nd_label, pos);
- nsl_set_isetcookie(ndd, nd_label, cookie);
- nsl_set_rawsize(ndd, nd_label, resource_size(res));
- nsl_set_lbasize(ndd, nd_label, nspm->lbasize);
- nsl_set_dpa(ndd, nd_label, res->start);
- nsl_set_slot(ndd, nd_label, slot);
- nsl_set_type_guid(ndd, nd_label, &nd_set->type_guid);
- nsl_set_claim_class(ndd, nd_label, ndns->claim_class);
- nsl_calculate_checksum(ndd, nd_label);
+
+ ns_label = &nd_label->ns_label;
+ nsl_set_uuid(ndd, ns_label, nspm->uuid);
+ nsl_set_name(ndd, ns_label, nspm->alt_name);
+ nsl_set_flags(ndd, ns_label, flags);
+ nsl_set_nlabel(ndd, ns_label, nd_region->ndr_mappings);
+ nsl_set_nrange(ndd, ns_label, 1);
+ nsl_set_position(ndd, ns_label, pos);
+ nsl_set_isetcookie(ndd, ns_label, cookie);
+ nsl_set_rawsize(ndd, ns_label, resource_size(res));
+ nsl_set_lbasize(ndd, ns_label, nspm->lbasize);
+ nsl_set_dpa(ndd, ns_label, res->start);
+ nsl_set_slot(ndd, ns_label, slot);
+ nsl_set_type_guid(ndd, ns_label, &nd_set->type_guid);
+ nsl_set_claim_class(ndd, ns_label, ndns->claim_class);
+ nsl_calculate_checksum(ndd, ns_label);
nd_dbg_dpa(nd_region, ndd, res, "\n");
/* update label */
@@ -947,7 +952,7 @@ static int __pmem_label_update(struct nd_region *nd_region,
if (!label_ent->label)
continue;
if (test_and_clear_bit(ND_LABEL_REAP, &label_ent->flags) ||
- nsl_uuid_equal(ndd, label_ent->label, nspm->uuid))
+ nsl_uuid_equal(ndd, &label_ent->label->ns_label, nspm->uuid))
reap_victim(nd_mapping, label_ent);
}
@@ -1035,12 +1040,12 @@ static int del_labels(struct nd_mapping *nd_mapping, uuid_t *uuid)
mutex_lock(&nd_mapping->lock);
list_for_each_entry_safe(label_ent, e, &nd_mapping->labels, list) {
- struct nd_namespace_label *nd_label = label_ent->label;
+ struct nd_lsa_label *nd_label = label_ent->label;
if (!nd_label)
continue;
active++;
- if (!nsl_uuid_equal(ndd, nd_label, uuid))
+ if (!nsl_uuid_equal(ndd, &nd_label->ns_label, uuid))
continue;
active--;
slot = to_slot(ndd, nd_label);
diff --git a/drivers/nvdimm/label.h b/drivers/nvdimm/label.h
index 0650fb4b9821..4883b3a1320f 100644
--- a/drivers/nvdimm/label.h
+++ b/drivers/nvdimm/label.h
@@ -183,6 +183,16 @@ struct nd_namespace_label {
};
};
+/*
+ * LSA 2.1 format introduces region label, which can also reside
+ * into LSA along with only namespace label as per v1.1 and v1.2
+ */
+struct nd_lsa_label {
+ union {
+ struct nd_namespace_label ns_label;
+ };
+};
+
#define NVDIMM_BTT_GUID "8aed63a2-29a2-4c66-8b12-f05d15d3922a"
#define NVDIMM_BTT2_GUID "18633bfc-1735-4217-8ac9-17239282d3f8"
#define NVDIMM_PFN_GUID "266400ba-fb9f-4677-bcb0-968f11d0d225"
@@ -215,7 +225,7 @@ struct nvdimm_drvdata;
int nd_label_data_init(struct nvdimm_drvdata *ndd);
size_t sizeof_namespace_index(struct nvdimm_drvdata *ndd);
int nd_label_active_count(struct nvdimm_drvdata *ndd);
-struct nd_namespace_label *nd_label_active(struct nvdimm_drvdata *ndd, int n);
+struct nd_lsa_label *nd_label_active(struct nvdimm_drvdata *ndd, int n);
u32 nd_label_alloc_slot(struct nvdimm_drvdata *ndd);
bool nd_label_free_slot(struct nvdimm_drvdata *ndd, u32 slot);
u32 nd_label_nfree(struct nvdimm_drvdata *ndd);
diff --git a/drivers/nvdimm/namespace_devs.c b/drivers/nvdimm/namespace_devs.c
index 55cfbf1e0a95..f180f0068c15 100644
--- a/drivers/nvdimm/namespace_devs.c
+++ b/drivers/nvdimm/namespace_devs.c
@@ -1009,15 +1009,15 @@ static int namespace_update_uuid(struct nd_region *nd_region,
mutex_lock(&nd_mapping->lock);
list_for_each_entry(label_ent, &nd_mapping->labels, list) {
- struct nd_namespace_label *nd_label = label_ent->label;
+ struct nd_lsa_label *nd_label = label_ent->label;
struct nd_label_id label_id;
uuid_t uuid;
if (!nd_label)
continue;
- nsl_get_uuid(ndd, nd_label, &uuid);
+ nsl_get_uuid(ndd, &nd_label->ns_label, &uuid);
nd_label_gen_id(&label_id, &uuid,
- nsl_get_flags(ndd, nd_label));
+ nsl_get_flags(ndd, &nd_label->ns_label));
if (strcmp(old_label_id.id, label_id.id) == 0)
set_bit(ND_LABEL_REAP, &label_ent->flags);
}
@@ -1562,7 +1562,7 @@ static struct device **create_namespace_io(struct nd_region *nd_region)
static bool has_uuid_at_pos(struct nd_region *nd_region, const uuid_t *uuid,
u64 cookie, u16 pos)
{
- struct nd_namespace_label *found = NULL;
+ struct nd_lsa_label *found = NULL;
int i;
for (i = 0; i < nd_region->ndr_mappings; i++) {
@@ -1573,20 +1573,21 @@ static bool has_uuid_at_pos(struct nd_region *nd_region, const uuid_t *uuid,
bool found_uuid = false;
list_for_each_entry(label_ent, &nd_mapping->labels, list) {
- struct nd_namespace_label *nd_label = label_ent->label;
+ struct nd_lsa_label *nd_label = label_ent->label;
u16 position;
if (!nd_label)
continue;
- position = nsl_get_position(ndd, nd_label);
+ position = nsl_get_position(ndd, &nd_label->ns_label);
- if (!nsl_validate_isetcookie(ndd, nd_label, cookie))
+ if (!nsl_validate_isetcookie(ndd, &nd_label->ns_label,
+ cookie))
continue;
- if (!nsl_uuid_equal(ndd, nd_label, uuid))
+ if (!nsl_uuid_equal(ndd, &nd_label->ns_label, uuid))
continue;
- if (!nsl_validate_type_guid(ndd, nd_label,
+ if (!nsl_validate_type_guid(ndd, &nd_label->ns_label,
&nd_set->type_guid))
continue;
@@ -1595,7 +1596,8 @@ static bool has_uuid_at_pos(struct nd_region *nd_region, const uuid_t *uuid,
return false;
}
found_uuid = true;
- if (!nsl_validate_nlabel(nd_region, ndd, nd_label))
+ if (!nsl_validate_nlabel(nd_region,
+ ndd, &nd_label->ns_label))
continue;
if (position != pos)
continue;
@@ -1615,7 +1617,7 @@ static int select_pmem_id(struct nd_region *nd_region, const uuid_t *pmem_id)
for (i = 0; i < nd_region->ndr_mappings; i++) {
struct nd_mapping *nd_mapping = &nd_region->mapping[i];
struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
- struct nd_namespace_label *nd_label = NULL;
+ struct nd_lsa_label *nd_label = NULL;
u64 hw_start, hw_end, pmem_start, pmem_end;
struct nd_label_ent *label_ent;
@@ -1624,7 +1626,7 @@ static int select_pmem_id(struct nd_region *nd_region, const uuid_t *pmem_id)
nd_label = label_ent->label;
if (!nd_label)
continue;
- if (nsl_uuid_equal(ndd, nd_label, pmem_id))
+ if (nsl_uuid_equal(ndd, &nd_label->ns_label, pmem_id))
break;
nd_label = NULL;
}
@@ -1640,15 +1642,15 @@ static int select_pmem_id(struct nd_region *nd_region, const uuid_t *pmem_id)
*/
hw_start = nd_mapping->start;
hw_end = hw_start + nd_mapping->size;
- pmem_start = nsl_get_dpa(ndd, nd_label);
- pmem_end = pmem_start + nsl_get_rawsize(ndd, nd_label);
+ pmem_start = nsl_get_dpa(ndd, &nd_label->ns_label);
+ pmem_end = pmem_start + nsl_get_rawsize(ndd, &nd_label->ns_label);
if (pmem_start >= hw_start && pmem_start < hw_end
&& pmem_end <= hw_end && pmem_end > hw_start)
/* pass */;
else {
dev_dbg(&nd_region->dev, "%s invalid label for %pUb\n",
dev_name(ndd->dev),
- nsl_uuid_raw(ndd, nd_label));
+ nsl_uuid_raw(ndd, &nd_label->ns_label));
return -EINVAL;
}
@@ -1668,7 +1670,7 @@ static int select_pmem_id(struct nd_region *nd_region, const uuid_t *pmem_id)
*/
static struct device *create_namespace_pmem(struct nd_region *nd_region,
struct nd_mapping *nd_mapping,
- struct nd_namespace_label *nd_label)
+ struct nd_lsa_label *nd_label)
{
struct nvdimm_drvdata *ndd = to_ndd(nd_mapping);
struct nd_namespace_index *nsindex =
@@ -1689,14 +1691,14 @@ static struct device *create_namespace_pmem(struct nd_region *nd_region,
return ERR_PTR(-ENXIO);
}
- if (!nsl_validate_isetcookie(ndd, nd_label, cookie)) {
+ if (!nsl_validate_isetcookie(ndd, &nd_label->ns_label, cookie)) {
dev_dbg(&nd_region->dev, "invalid cookie in label: %pUb\n",
- nsl_uuid_raw(ndd, nd_label));
- if (!nsl_validate_isetcookie(ndd, nd_label, altcookie))
+ nsl_uuid_raw(ndd, &nd_label->ns_label));
+ if (!nsl_validate_isetcookie(ndd, &nd_label->ns_label, altcookie))
return ERR_PTR(-EAGAIN);
dev_dbg(&nd_region->dev, "valid altcookie in label: %pUb\n",
- nsl_uuid_raw(ndd, nd_label));
+ nsl_uuid_raw(ndd, &nd_label->ns_label));
}
nspm = kzalloc(sizeof(*nspm), GFP_KERNEL);
@@ -1712,7 +1714,7 @@ static struct device *create_namespace_pmem(struct nd_region *nd_region,
res->flags = IORESOURCE_MEM;
for (i = 0; i < nd_region->ndr_mappings; i++) {
- nsl_get_uuid(ndd, nd_label, &uuid);
+ nsl_get_uuid(ndd, &nd_label->ns_label, &uuid);
if (has_uuid_at_pos(nd_region, &uuid, cookie, i))
continue;
if (has_uuid_at_pos(nd_region, &uuid, altcookie, i))
@@ -1729,7 +1731,7 @@ static struct device *create_namespace_pmem(struct nd_region *nd_region,
* find a dimm with two instances of the same uuid.
*/
dev_err(&nd_region->dev, "%s missing label for %pUb\n",
- nvdimm_name(nvdimm), nsl_uuid_raw(ndd, nd_label));
+ nvdimm_name(nvdimm), nsl_uuid_raw(ndd, &nd_label->ns_label));
rc = -EINVAL;
goto err;
}
@@ -1739,14 +1741,14 @@ static struct device *create_namespace_pmem(struct nd_region *nd_region,
* that position at labels[0], and NULL at labels[1]. In the process,
* check that the namespace aligns with interleave-set.
*/
- nsl_get_uuid(ndd, nd_label, &uuid);
+ nsl_get_uuid(ndd, &nd_label->ns_label, &uuid);
rc = select_pmem_id(nd_region, &uuid);
if (rc)
goto err;
/* Calculate total size and populate namespace properties from label0 */
for (i = 0; i < nd_region->ndr_mappings; i++) {
- struct nd_namespace_label *label0;
+ struct nd_lsa_label *label0;
struct nvdimm_drvdata *ndd;
nd_mapping = &nd_region->mapping[i];
@@ -1760,17 +1762,17 @@ static struct device *create_namespace_pmem(struct nd_region *nd_region,
}
ndd = to_ndd(nd_mapping);
- size += nsl_get_rawsize(ndd, label0);
- if (nsl_get_position(ndd, label0) != 0)
+ size += nsl_get_rawsize(ndd, &label0->ns_label);
+ if (nsl_get_position(ndd, &label0->ns_label) != 0)
continue;
WARN_ON(nspm->alt_name || nspm->uuid);
- nspm->alt_name = kmemdup(nsl_ref_name(ndd, label0),
+ nspm->alt_name = kmemdup(nsl_ref_name(ndd, &label0->ns_label),
NSLABEL_NAME_LEN, GFP_KERNEL);
- nsl_get_uuid(ndd, label0, &uuid);
+ nsl_get_uuid(ndd, &label0->ns_label, &uuid);
nspm->uuid = kmemdup(&uuid, sizeof(uuid_t), GFP_KERNEL);
- nspm->lbasize = nsl_get_lbasize(ndd, label0);
+ nspm->lbasize = nsl_get_lbasize(ndd, &label0->ns_label);
nspm->nsio.common.claim_class =
- nsl_get_claim_class(ndd, label0);
+ nsl_get_claim_class(ndd, &label0->ns_label);
}
if (!nspm->alt_name || !nspm->uuid) {
@@ -1887,7 +1889,7 @@ void nd_region_create_btt_seed(struct nd_region *nd_region)
}
static int add_namespace_resource(struct nd_region *nd_region,
- struct nd_namespace_label *nd_label, struct device **devs,
+ struct nd_lsa_label *nd_label, struct device **devs,
int count)
{
struct nd_mapping *nd_mapping = &nd_region->mapping[0];
@@ -1902,7 +1904,7 @@ static int add_namespace_resource(struct nd_region *nd_region,
continue;
}
- if (!nsl_uuid_equal(ndd, nd_label, uuid))
+ if (!nsl_uuid_equal(ndd, &nd_label->ns_label, uuid))
continue;
dev_err(&nd_region->dev,
"error: conflicting extents for uuid: %pUb\n", uuid);
@@ -1943,15 +1945,15 @@ static struct device **scan_labels(struct nd_region *nd_region)
/* "safe" because create_namespace_pmem() might list_move() label_ent */
list_for_each_entry_safe(label_ent, e, &nd_mapping->labels, list) {
- struct nd_namespace_label *nd_label = label_ent->label;
+ struct nd_lsa_label *nd_label = label_ent->label;
struct device **__devs;
if (!nd_label)
continue;
/* skip labels that describe extents outside of the region */
- if (nsl_get_dpa(ndd, nd_label) < nd_mapping->start ||
- nsl_get_dpa(ndd, nd_label) > map_end)
+ if (nsl_get_dpa(ndd, &nd_label->ns_label) < nd_mapping->start ||
+ nsl_get_dpa(ndd, &nd_label->ns_label) > map_end)
continue;
i = add_namespace_resource(nd_region, nd_label, devs, count);
@@ -2122,7 +2124,7 @@ static int init_active_labels(struct nd_region *nd_region)
if (!count)
continue;
for (j = 0; j < count; j++) {
- struct nd_namespace_label *label;
+ struct nd_lsa_label *label;
label_ent = kzalloc(sizeof(*label_ent), GFP_KERNEL);
if (!label_ent)
diff --git a/drivers/nvdimm/nd.h b/drivers/nvdimm/nd.h
index 304f0e9904f1..2ead96ac598b 100644
--- a/drivers/nvdimm/nd.h
+++ b/drivers/nvdimm/nd.h
@@ -376,7 +376,7 @@ enum nd_label_flags {
struct nd_label_ent {
struct list_head list;
unsigned long flags;
- struct nd_namespace_label *label;
+ struct nd_lsa_label *label;
};
enum nd_mapping_lock_class {
--
2.34.1
next prev parent reply other threads:[~2025-06-17 13:00 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20250617124008epcas5p2e702f786645d44ceb1cdd980a914ce8e@epcas5p2.samsung.com>
[not found] ` <20250617123944.78345-1-s.neeraj@samsung.com>
2025-06-17 12:39 ` [RFC PATCH 01/20] nvdimm/label: Introduce NDD_CXL_LABEL flag to set cxl label format Neeraj Kumar
2025-06-20 16:40 ` Jonathan Cameron
2025-06-26 9:48 ` Neeraj Kumar
2025-07-02 18:02 ` Ira Weiny
2025-07-03 9:58 ` Neeraj Kumar
2025-07-09 22:57 ` Dave Jiang
2025-07-18 12:13 ` Neeraj Kumar
2025-06-17 12:39 ` Neeraj Kumar [this message]
2025-06-23 10:53 ` [RFC PATCH 02/20] nvdimm/label: Prep patch to accommodate cxl lsa 2.1 support Jonathan Cameron
2025-06-26 9:51 ` Neeraj Kumar
2025-07-02 17:55 ` Ira Weiny
2025-07-03 10:04 ` Neeraj Kumar
2025-06-17 12:39 ` [RFC PATCH 03/20] nvdimm/namespace_label: Add namespace label changes as per CXL LSA v2.1 Neeraj Kumar
2025-06-17 12:39 ` [RFC PATCH 04/20] nvdimm/label: CXL labels skip the need for 'interleave-set cookie' Neeraj Kumar
2025-06-17 12:39 ` [RFC PATCH 05/20] nvdimm/region_label: Add region label updation routine Neeraj Kumar
2025-06-23 9:05 ` Jonathan Cameron
2025-06-26 9:54 ` Neeraj Kumar
2025-07-17 22:53 ` Fabio M. De Francesco
2025-07-18 13:00 ` Neeraj Kumar
2025-06-17 12:39 ` [RFC PATCH 06/20] nvdimm/region_label: Add region label deletion routine Neeraj Kumar
2025-06-23 9:09 ` Jonathan Cameron
2025-06-26 9:55 ` Neeraj Kumar
2025-06-17 12:39 ` [RFC PATCH 07/20] nvdimm/namespace_label: Update namespace init_labels and its region_uuid Neeraj Kumar
2025-06-23 9:11 ` Jonathan Cameron
2025-06-26 9:58 ` Neeraj Kumar
2025-06-17 12:39 ` [RFC PATCH 08/20] nvdimm/label: Include region label in slot validation Neeraj Kumar
2025-06-23 9:13 ` Jonathan Cameron
2025-06-26 10:00 ` Neeraj Kumar
2025-06-17 12:39 ` [RFC PATCH 09/20] nvdimm/namespace_label: Skip region label during ns label DPA reservation Neeraj Kumar
2025-06-17 12:39 ` [RFC PATCH 10/20] nvdimm/region_label: Preserve cxl region information from region label Neeraj Kumar
2025-06-17 12:39 ` [RFC PATCH 11/20] nvdimm/region_label: Export routine to fetch region information Neeraj Kumar
2025-06-17 12:39 ` [RFC PATCH 12/20] nvdimm/namespace_label: Skip region label during namespace creation Neeraj Kumar
2025-06-23 9:17 ` Jonathan Cameron
2025-06-26 10:02 ` Neeraj Kumar
2025-06-17 12:39 ` [RFC PATCH 13/20] cxl/mem: Refactor cxl pmem region auto-assembling Neeraj Kumar
2025-06-23 9:20 ` Jonathan Cameron
2025-06-26 10:03 ` Neeraj Kumar
2025-07-10 0:38 ` Dave Jiang
2025-07-18 12:30 ` Neeraj Kumar
2025-07-21 18:11 ` Dave Jiang
2025-06-17 12:39 ` [RFC PATCH 14/20] cxl/region: Add cxl pmem region creation routine for region persistency Neeraj Kumar
2025-06-23 9:43 ` Jonathan Cameron
2025-06-26 10:23 ` Neeraj Kumar
2025-07-10 15:59 ` Dave Jiang
2025-07-18 12:45 ` Neeraj Kumar
2025-06-17 12:39 ` [RFC PATCH 15/20] cxl: Add a routine to find cxl root decoder on cxl bus Neeraj Kumar
2025-06-23 9:44 ` Jonathan Cameron
2025-06-26 10:38 ` Neeraj Kumar
2025-06-26 19:19 ` Alison Schofield
2025-06-27 9:03 ` Neeraj Kumar
2025-07-10 16:23 ` Dave Jiang
2025-07-18 12:48 ` Neeraj Kumar
2025-06-17 12:39 ` [RFC PATCH 16/20] cxl/mem: Preserve cxl root decoder during mem probe Neeraj Kumar
2025-06-17 12:39 ` [RFC PATCH 17/20] cxl/pmem: Preserve region information into nd_set Neeraj Kumar
2025-06-17 12:39 ` [RFC PATCH 18/20] cxl/pmem: Add support of cxl lsa 2.1 support in cxl pmem Neeraj Kumar
2025-06-23 9:48 ` Jonathan Cameron
2025-06-26 10:41 ` Neeraj Kumar
2025-07-10 17:18 ` Dave Jiang
2025-07-18 12:51 ` Neeraj Kumar
2025-07-21 17:44 ` Dave Jiang
2025-06-17 12:39 ` [RFC PATCH 19/20] cxl/pmem_region: Prep patch to accommodate pmem_region attributes Neeraj Kumar
2025-06-23 9:53 ` Jonathan Cameron
2025-06-26 10:45 ` Neeraj Kumar
2025-06-17 12:39 ` [RFC PATCH 20/20] cxl/pmem_region: Add cxl region label updation and deletion device attributes Neeraj Kumar
2025-06-23 9:56 ` Jonathan Cameron
2025-06-26 10:48 ` Neeraj Kumar
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=700072760.81750165203833.JavaMail.epsvc@epcpadp1new \
--to=s.neeraj@samsung.com \
--cc=a.manzanares@samsung.com \
--cc=alison.schofield@intel.com \
--cc=alok.rathore@samsung.com \
--cc=anisa.su@samsung.com \
--cc=arun.george@samsung.com \
--cc=cpgs@samsung.com \
--cc=dan.j.williams@intel.com \
--cc=dave.jiang@intel.com \
--cc=dave@stgolabs.net \
--cc=gost.dev@samsung.com \
--cc=ira.weiny@intel.com \
--cc=jonathan.cameron@huawei.com \
--cc=krish.reddy@samsung.com \
--cc=linux-cxl@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=neeraj.kernel@gmail.com \
--cc=nifan.cxl@gmail.com \
--cc=nvdimm@lists.linux.dev \
--cc=vishak.g@samsung.com \
--cc=vishal.l.verma@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.