Re: [PATCH v12 8/8] cxl/core: Enforce partition order/simplify partition calls

Alison Schofield <[email protected]> Mon, 3 Aug 2026 18:37:58 -0700
Newsgroups gmane.linux.kernel
Message-ID <[email protected]>
On Fri, Jul 31, 2026 at 01:48:13AM -0700, Anisa Su wrote:
> From: Ira Weiny <[email protected]>
> 
> Device partitions have an implied order which is made more complex by
> the addition of a dynamic partition
> 
> Remove the ram special case information calls in favor of generic calls
> with a check ahead of time to ensure the preservation of the implied
> partition order.

Hi Anisa,

I think the changelog needs more explanation here. It says there is an
"implied partition order", that is made "more complex by the addition
of a dynamic partition" but never explains what that order is, where it
comes from, or that this patch starts enforcing it.

I jumped to the diff thinking it must be there, but nope. If I 
am remembering correctly we've had ascii art for this layouts
so I'm surprised that's not here.

After this patch, the code relies on the numeric ordering of
enum cxl_partition_mode. That seems worth documenting, perhaps alongside
the enum itself.

A bit more below-

skip
> @@ -457,6 +457,7 @@ static const char *cxl_mode_name(enum cxl_partition_mode mode)
>  int cxl_dpa_setup(struct cxl_dev_state *cxlds, const struct cxl_dpa_info *info)
>  {
>  	struct device *dev = cxlds->dev;
> +	int i;
>  
>  	guard(rwsem_write)(&cxl_rwsem.dpa);
>  
> @@ -469,9 +470,17 @@ int cxl_dpa_setup(struct cxl_dev_state *cxlds, const struct cxl_dpa_info *info)
>  		return 0;
>  	}
>  
> +	/* Verify partitions are in expected order. */
> +	for (i = 1; i < info->nr_partitions; i++) {
Just 'int i' above. Sharing that index is not worth the extra diff.

> +		if (info->part[i].mode < info->part[i - 1].mode) {
> +			dev_err(dev, "Partition order mismatch\n");

A bit minimalist err message. Do we have more useful info to add?


> +			return -EINVAL;
> +		}
> +	}
> +
>  	cxlds->dpa_res = DEFINE_RES_MEM(0, info->size);
>  
> -	for (int i = 0; i < info->nr_partitions; i++) {
> +	for (i = 0; i < info->nr_partitions; i++) {
>  		const struct cxl_dpa_part_info *part = &info->part[i];
>  		int rc;

snip