NVDIMM Device and Persistent Memory development
 help / color / mirror / Atom feed
From: Anisa Su <anisa.su887@gmail.com>
To: Jonathan Cameron <jic23@kernel.org>
Cc: Anisa Su <anisa.su887@gmail.com>,
	sashiko-bot@kernel.org, sashiko-reviews@lists.linux.dev,
	nvdimm@lists.linux.dev, linux-cxl@vger.kernel.org
Subject: Re: [PATCH v12 3/8] cxl/cdat: Gather DSMAS data for DCD partitions
Date: Mon, 28 Sep 2026 16:46:17 -0700	[thread overview]
Message-ID: <arr8ScmcSiuq8RIH@4470NRD-ASU.ssi.samsung.com> (raw)
In-Reply-To: <20260925201932.292f1451@jic23-hlaptop>

On Fri, Sep 25, 2026 at 08:19:32PM +0100, Jonathan Cameron wrote:
> On Wed, 23 Sep 2026 21:29:58 -0700
> Anisa Su <anisa.su887@gmail.com> wrote:
> 
> > On Tue, Sep 22, 2026 at 12:34:02AM +0100, Jonathan Cameron wrote:
> > > On Wed, 5 Aug 2026 01:30:16 -0700
> > > Anisa Su <anisa.su887@gmail.com> wrote:
> > >   
> > > > On Tue, Aug 04, 2026 at 01:07:48AM +0100, Jonathan Cameron wrote:  
> > > > > On Fri, 31 Jul 2026 09:02:49 +0000
> > > > > sashiko-bot@kernel.org wrote:
> > > > >     
> > > > > > Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
> > > > > > - [Medium] The commit message claims to extract and store the 'read only' attribute from DSMAS tables, but this logic is completely missing from the code.    
> > > > > 
> > > > > Given it will make a lot of difference to a user if they think they have writeable
> > > > > memory that isn't - I think we probably do want to have readonly here.
> > > > >     
> > > > I did some digging: it seems in v8, the read only flag was gathered and
> > > > exposed in sysfs, but dropped during the region -> partition rework.
> > > > 
> > > > v8 of this commit used to do:
> > > >     dent->read_only = dsmas->flags & ACPI_CDAT_DSMAS_READ_ONLY;
> > > >     ...
> > > >     mds->dc_region[i].read_only = dent->read_only;
> > > > 
> > > >     https://lore.kernel.org/all/20241210-dcd-type2-upstream-v8-6-812852504400@intel.com/
> > > > 
> > > > and a following patch exposed it, with a documented ABI:
> > > > 
> > > >   https://lore.kernel.org/all/20241210-dcd-type2-upstream-v8-7-812852504400@intel.com/
> > > > 
> > > >     /sys/bus/cxl/devices/memX/dcY/size
> > > >     /sys/bus/cxl/devices/memX/dcY/read_only
> > > >     /sys/bus/cxl/devices/memX/dcY/shareable
> > > >     /sys/bus/cxl/devices/memX/dcY/qos_class
> > > > 
> > > > In v9 dynamic capacity moved from its own dc_region[] array and dcY/
> > > > sysfs directory to the generic partition model:
> > > > 
> > > >   https://lore.kernel.org/all/20250413-dcd-type2-upstream-v9-3-1d4911a0b365@intel.com/
> > > > 
> > > > size and qos_class survived that move because ram and pmem already have
> > > > them. read_only and shareable did not, because the generic partition
> > > > model had nowhere to put attributes that only dynamic capacity has, but
> > > > the commit message survived the rework.
> > > > 
> > > > More specifically, read_only was dropped from both the sysfs commit and
> > > > this commit. shareable was dropped only from the sysfs commit, but still
> > > > read from the DSMAS entry in v9 of this commit. Not sure why though; I
> > > > didn't see any consumers of the attribute. Oh well... We use it now
> > > > since shared extents are supported to check if an extent marked shared
> > > > is actually in a shared partition.
> > > > 
> > > > So TLDR; I've removed the "read only" part from the commit message. But
> > > > let me know if you think it should be re-introduced?
> > > > 
> > > > I agree with what you said about it being important for a user to know
> > > > whether a partition is read only. Some things to consider:
> > > > 
> > > > - The partition model has no precedent for a DC only attribute.
> > > >   dynamic_ram_1/ currently exposes size and qos_class, the same two that
> > > >   ram/ and pmem/ expose. Adding read_only there would be the first
> > > >   attribute that exists for one partition mode and not the others.
> > > > 
> > > > - shareable is in exactly the same position. It is gathered and used
> > > >   internally but not exposed anywhere, so if we are adding one of these
> > > >   back we should probably decide about both.  
> > > 
> > > I vaguely recall the discussion on this ending up with we'd call the
> > > partition something different to reflect the extra property.  
> > > 
> > > dynamic_readonly_1 / dynamic_sharedram_1 maybe?  Argument being
> > > that these properties are as different from normal RAM as persistent
> > > memory is.
> > >   
> > Yeah I think we discussed making it its own partition mode but I don't think there
> > was a strong consensus, just that we agreed it should be exposed somewhere,
> > somehow...
> > 
> > I am leaning towards just putting it under dynamic_ram_1 even though
> > these attributes would only exist for dynamic_ram mode:
> > 
> > /sys/bus/cxl/devices/memX/dynamic_ram_1/shareable
> > /sys/bus/cxl/devices/memX/dynamic_ram_1/read_only
> > 
> > Mainly because if we go up to 8 partitions, we would have
> > (dynamic_ram, dynamic_shared, dynamic_readonly, dynamic_shared_readonly) * 8.
> > And NDCTL would have to know how to handle creating each type.
> > 
> > I also don't see anything in the code that makes it terrible:
> > - each partition mode has its own attribute array and visibility callback
> >   function, so it doesn't affect ram/pmem modes
> > 
> > I brought it up because I wasn't sure if there was a specific reason why
> > shareable and read_only weren't carried over after the partition
> > rework. From a code standpoint, it seems fine to me?
> > I assumed it was so all partitions would share common sub-attributes
> > but I guess I shouldn't have assumed...
> 
> I think this needs another discussion. I agree there were differences
> of opinion but thought we'd ended up with the different names rather
> than attributes for each one.
> 
I might have misremembered. Let me ask for some eyes on this.

Here's my case for adding shareable and read_only as a sub-attribute:

Shareable and read-only are independent bits, and a DC region can be
both, so we have 4 possibilities: dynamic_ram, dynamic_shared, dynamic_readonly, dynamic_shared_readonly.
Every consumer of the mode string grows with it: the memdev group
names, the decoder mode store, the mode-name helper in hdm.c, the
region mode description, cxl_test, QEMU and ndctl. If a third
property comes up later (but probably not?), it would double again.

What it would look like for new modes:

enum cxl_partition_mode {
 	CXL_PARTMODE_RAM,
 	CXL_PARTMODE_PMEM,
 	CXL_PARTMODE_DYNAMIC_RAM_1,
+	CXL_PARTMODE_DYNAMIC_SHARED_1,
+	CXL_PARTMODE_DYNAMIC_READONLY_1,
+	CXL_PARTMODE_DYNAMIC_SHARED_READONLY_1,
 };
 
+static inline bool cxl_partmode_is_dc(enum cxl_partition_mode mode)
+{
+	return mode >= CXL_PARTMODE_DYNAMIC_RAM_1;
+}

static const char *cxl_mode_name(enum cxl_partition_mode mode)
 		return "pmem";
 	case CXL_PARTMODE_DYNAMIC_RAM_1:
 		return "dynamic_ram_1";
+	case CXL_PARTMODE_DYNAMIC_SHARED_1:
+		return "dynamic_shared_1";
+	case CXL_PARTMODE_DYNAMIC_READONLY_1:
+		return "dynamic_readonly_1";
+	case CXL_PARTMODE_DYNAMIC_SHARED_READONLY_1:
+		return "dynamic_shared_readonly_1";
 	default:
 		return "";

If support for partitions 2-8 is added later, this multiplies by 8.

NDCTL would also need to support 4 modes of region creation:

cxl create-region ... -t dynamic_ram_1/dynamic_shared_1/dynamic_readonly_1/dynamic_shared_readonly_1

Counter argument:
Shareable and read_only are different enough from "regular" DC that
they should be their own modes. Since PMEM isn't expressed as a adding
a "persistent" attribute under ram/, the same should apply for shareable
and read_only. Especially since pmem can't be onlined as system RAM
through the normal path, the logic should also apply to
shareable and r_o.

If we prefer separate partition modes, I can do that, but we gotta decide
now because partition setup is in the prep series.

> > 
> > > > 
> > > > - I don't think the DSMAS Flags bit 6 (read only) is specific to DCD?  
> > > 
> > > In theory yes, in practice there isn't a path for non DCD to actually
> > > get the data in place and transtion to read only so maybe an expensive
> > > source of zeros?  So yes allowed but not much use to anyone so we
> > > won't see it.  
> > >   
> > Mmm very true. You might just clarifying this point here but just to make
> > sure we're on the same page: I dropped the R_O part of the series and deferred
> > it for the future because it includes implementing write rejection for
> > r_o partitions which IMO can be done after the core functionality is in.
> 
> Why do we need to reject writes?  The device just drops them. Maybe
> it is a nice to have to prevent the mapping path setting up writeable mappings
> and so fault earlier but I'm not sure it is necessary.
> 
I see. I thought it would be better to do it since the dropped write
is silent?

CXL r4.0 Section 9.13.3 "If the host issues a write to any DPA in a
read-only DC Region, the device shall drop the write and send an NDR
(see Section 3.3.9) as a response". I assume the rc is an ordinary Cmp,
which is returned for "completions for writebacks, reads and
invalidates" (Section 3.3.9 Table 3-50).

So any user that that maps the dax device writable thinks its stores
landed which seems not very good.

Anisa

> > 
> > Thanks,
> > Anisa
> > > >   It describes any device scoped memory range, so a read only ram or pmem
> > > >   partition is expressible in CDAT today and the driver ignores it.
> > > >   Maybe it should be exposed in sysfs for every partition
> > > >   rather than only on dynamic_ram_1? Which probably makes it a generic CDAT/partition
> > > >   patch rather than something for this series.
> > > >   
> > > Jonathan
> > >   
> 

  reply	other threads:[~2026-09-28 23:46 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-31  8:48 [PATCH v12 0/8] DCD Prep Series Anisa Su
2026-07-31  8:48 ` [PATCH v12 1/8] cxl/mbox: Flag support for Dynamic Capacity Devices (DCD) Anisa Su
2026-08-03 18:03   ` Dave Jiang
2026-08-03 21:30   ` Alison Schofield
2026-08-03 23:12     ` Jonathan Cameron
2026-08-04 15:45       ` Gregory Price
2026-08-04 15:45   ` Gregory Price
2026-08-04 18:10     ` Anisa Su
2026-08-04 16:55   ` Alison Schofield
2026-08-04 18:13     ` Anisa Su
2026-07-31  8:48 ` [PATCH v12 2/8] cxl/mem: Read dynamic capacity configuration from the device Anisa Su
2026-07-31  9:01   ` sashiko-bot
2026-08-04 20:30     ` Anisa Su
2026-08-03 14:33   ` Richard Cheng
2026-08-03 22:11     ` Anisa Su
2026-08-03 21:52   ` Alison Schofield
2026-08-04  9:12     ` Anisa Su
2026-08-04 16:00       ` Gregory Price
2026-08-21 18:55       ` Alison Schofield
2026-08-03 23:55   ` Jonathan Cameron
2026-08-04  9:54     ` Anisa Su
2026-07-31  8:48 ` [PATCH v12 3/8] cxl/cdat: Gather DSMAS data for DCD partitions Anisa Su
2026-07-31  9:02   ` sashiko-bot
2026-08-04  0:07     ` Jonathan Cameron
2026-08-05  8:30       ` Anisa Su
2026-09-21 23:34         ` Jonathan Cameron
2026-09-24  4:29           ` Anisa Su
2026-09-25 19:19             ` Jonathan Cameron
2026-09-28 23:46               ` Anisa Su [this message]
2026-08-03 22:56   ` Alison Schofield
2026-08-05  6:58     ` Anisa Su
2026-07-31  8:48 ` [PATCH v12 4/8] cxl/events: Split event msgnum configuration from irq setup Anisa Su
2026-08-03 23:01   ` Alison Schofield
2026-07-31  8:48 ` [PATCH v12 5/8] cxl/pci: Factor out interrupt policy check Anisa Su
2026-08-03 23:55   ` Alison Schofield
2026-08-06 12:27     ` Anisa Su
2026-07-31  8:48 ` [PATCH v12 6/8] cxl/mem: Configure dynamic capacity interrupts Anisa Su
2026-07-31  9:04   ` sashiko-bot
2026-08-01  9:30     ` Anisa Su
2026-08-04  0:25       ` Alison Schofield
2026-08-06 23:27         ` Anisa Su
2026-08-04  0:13   ` Jonathan Cameron
2026-08-04  0:34   ` Alison Schofield
2026-08-06 22:11     ` Anisa Su
2026-07-31  8:48 ` [PATCH v12 7/8] cxl/core: Return endpoint decoder information from region search Anisa Su
2026-07-31  9:01   ` sashiko-bot
2026-08-04  1:02   ` Alison Schofield
2026-07-31  8:48 ` [PATCH v12 8/8] cxl/core: Enforce partition order/simplify partition calls Anisa Su
2026-08-04  0:16   ` Jonathan Cameron
2026-08-04  1:37   ` Alison Schofield

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=arr8ScmcSiuq8RIH@4470NRD-ASU.ssi.samsung.com \
    --to=anisa.su887@gmail.com \
    --cc=jic23@kernel.org \
    --cc=linux-cxl@vger.kernel.org \
    --cc=nvdimm@lists.linux.dev \
    --cc=sashiko-bot@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /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