public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
From: Dan Williams <dan.j.williams@intel.com>
To: Alejandro Lucero Palau <alucerop@amd.com>,
	Dan Williams <dan.j.williams@intel.com>,
	<alejandro.lucero-palau@amd.com>, <linux-cxl@vger.kernel.org>,
	<netdev@vger.kernel.org>, <martin.habets@xilinx.com>,
	<edward.cree@amd.com>, <davem@davemloft.net>, <kuba@kernel.org>,
	<pabeni@redhat.com>, <edumazet@google.com>,
	<dave.jiang@intel.com>
Subject: Re: [PATCH v8 01/27] cxl: add type2 device basic support
Date: Wed, 15 Jan 2025 22:16:49 -0800	[thread overview]
Message-ID: <6788a451b241a_20fa294f9@dwillia2-xfh.jf.intel.com.notmuch> (raw)
In-Reply-To: <7fc0b153-9eea-af2c-cd42-c66a2d4087bc@amd.com>

Alejandro Lucero Palau wrote:
[..]
> >> I could add a function for accel drivers doing the allocation as with
> >> current v9 code, and then using your changes for having common code.
> > Let me go look at what you have there, but the design principle of the
> > CXL core is a library and enabling (but not requiring) users to have a container_of()
> > relationship between the core context and their local context feels the
> > most maintainable at this point.
> >
> >> Also, I completely agree with merging the serial and dvsec
> >> initializations through arguments to cxl_dev_state_init, but we need the
> >> cxl_set_resource function for accel drivers. The current code for adding
> >> resources with memdev is relying on mbox commands, and although we could
> >> change that code for supporting accel drivers without an mbox, I would
> >> say the function/code added is simple enough for not requiring that
> >> effort. Note my goal is for an accel device without an mbox, but we will
> >> see devices with one in the future, so I bet for leaving any change
> >> there to that moment.
> > ...but the way it was adding those resources was just wrong. This also
> > collides with some of the changes proposed for DCD partition management.
> > I needs a rethink in terms of a data structure and API to describe the
> > DPA address map of a CXL.mem capable device to the core and the core
> > should not be hard-coding a memory-expander-class device definition to
> > that layout.
> 
> I think you say is wrong because you did not look at patch 8 where the 
> resources are requested based on the parent resource (dpa).

Patch 8 does not make things better. It leaves in place the confusion of
cxl_set_resource() which blindly overrides, without locks, the values of
the DPA resource tree. It further perpetuates this "enum
cxl_resource_type" proposal which I think is an API mistake given we
already have "enum cxl_decoder_mode" complication relative to new
partition types being added by DCD. The usage of release_resource() is
problematic because that deletes child resources, and static DPA
resources do not need to be released when ->dpa_res is also being
destroyed.

Much of this stems from the fact that cxl_pci and the cxl_core have been
too cozy to date with assumptions like "cxl_mem_create_range_info() can
be lockless because it is easy to see that the only user does the right
thing".

In fact part of the motivation for the 'EXPORT_SYMBOL_NS_GPL(..., "CXL")'
symbol namespace was to flag potential consumers outside
of cxl_pci to consider that they do not know the cxl_core internal
rules.

For accelerators, which may be spread across many drivers in the kernel,
clearer semantics and API safety are needed. I.e. with accelerator
drivers are entering an era where the cxl_core exported APIs can no
longer assume a known quantity cxl_pci consumer. It needs to be a
responsible library that limits API misuse.

> After seeing Ira's DCD patchset regarding the resources allocation 
> changes, and your comment there, I think I know that you have in mind. 
> But for Type2 the way resources information is obtained changes, at 
> least for the case of one without mailbox. In our case we are hardcoding 
> the resource definitions, although in the future (and likely other 
> drivers) we will use an internal/firmware path for obtaining the 
> information. So we have two cases:
> 
> 
> 1) accel driver with mailbox: an additional API function should allow 
> such accel driver to obtain the info or trigger the resource allocation 
> based on that command.
> 
> 2) accel driver without mailbox: a function for allocating the resources 
> based on hardcoded or driver-dependent dynamically-obtained data.

Lets just make those cases and the memory expander cases all the same.

The DPA resource map is always constructed and passed in explicitly, not
a side effect of other operations. Whether it came from a mailbox, or
was statically known by the driver ahead of time, the cxl_core should
not care.

> The current patchset is supporting the second one, and with the linked 
> use case, the first one should be delayed until some accel driver 
> requires it.
> 
> 
> I can adapt the current API for using the resource array exposed by 
> DCD's patches, and use  add_dpa_res function instead of current patchset 
> code.

The DCD code is also suffering from the explicit ->ram_res ->pmem_res
attributes of cxl_dev_state. That needs to cleaned up for both this
type-2 series and the DCD series to build on top.

> > I am imagining something similar to the way that resource range
> > resources are transmitted to platform device registration.
> 
> 
> I guess you mean to have  static/dynamic resource array with __init flag 
> for freeing the data after initialization, a CXL core function for 
> processing the array and calling add_dpa_res and aware of DCD patch 
> needs, and the resources linked to the device and released automatically 
> when unloading the driver.

The DPA address map is not dynamic. Once it is initialized there is no
need to release them. The DPA child reservations need to be released, but the
initial map is released just by freeing the cxl_dev_state. Notice how
there is no DPA resource release in cxl_pci for the top-level resources.

I am taking a shot at putting code where my mouth is to unblock the
type-2 and DCD series. I.e. just converting ram and pmem to an array,
and splitting cxl_mem_create_range_info() into cxl_mem_dpa_fetch() and
cxl_dpa_setup() where both the accelerator case and expander case will
share cxl_dpa_setup().

Going through tests now...

  reply	other threads:[~2025-01-16  6:17 UTC|newest]

Thread overview: 102+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-16 16:10 [PATCH v8 00/27] cxl: add type2 device basic support alejandro.lucero-palau
2024-12-16 16:10 ` [PATCH v8 01/27] " alejandro.lucero-palau
2024-12-24 16:35   ` Jonathan Cameron
2024-12-27  6:56     ` Alejandro Lucero Palau
2025-01-07 16:35   ` Alison Schofield
2025-01-07 23:42   ` Dan Williams
2025-01-08  1:33     ` Dan Williams
2025-01-08 14:32       ` Alejandro Lucero Palau
2025-01-14 14:35         ` Alejandro Lucero Palau
2025-01-14 16:40           ` Alejandro Lucero Palau
2025-01-14 22:52           ` Dan Williams
2025-01-15 16:01             ` Alejandro Lucero Palau
2025-01-16  6:16               ` Dan Williams [this message]
2025-01-16 10:02                 ` Alejandro Lucero Palau
2025-02-05 20:05             ` Dan Williams
2025-02-06 17:37               ` Alejandro Lucero Palau
2025-02-07  1:57                 ` Dan Williams
2025-01-24 13:38       ` Alejandro Lucero Palau
2025-01-08 14:11     ` Alejandro Lucero Palau
2025-01-14 23:48       ` Dan Williams
2024-12-16 16:10 ` [PATCH v8 02/27] sfc: add cxl support using new CXL API alejandro.lucero-palau
2024-12-24 17:04   ` Jonathan Cameron
2024-12-27  7:00     ` Alejandro Lucero Palau
2025-01-08  1:56   ` Dan Williams
2025-01-08 14:53     ` Alejandro Lucero Palau
2025-01-14 23:59       ` Dan Williams
2024-12-16 16:10 ` [PATCH v8 03/27] cxl: add capabilities field to cxl_dev_state and cxl_port alejandro.lucero-palau
2024-12-24 17:08   ` Jonathan Cameron
2024-12-27  7:07     ` Alejandro Lucero Palau
2025-01-02 12:49       ` Jonathan Cameron
2025-01-03  7:16         ` Alejandro Lucero Palau
2025-01-03 10:47           ` Jonathan Cameron
2024-12-16 16:10 ` [PATCH v8 04/27] cxl/pci: add check for validating capabilities alejandro.lucero-palau
2024-12-24 17:15   ` Jonathan Cameron
2024-12-27  7:47     ` Alejandro Lucero Palau
2024-12-16 16:10 ` [PATCH v8 05/27] cxl: move pci generic code alejandro.lucero-palau
2024-12-24 17:19   ` Jonathan Cameron
2024-12-27  7:53     ` Alejandro Lucero Palau
2025-01-08  5:19   ` Dan Williams
2025-01-08 14:39     ` Alejandro Lucero Palau
2024-12-16 16:10 ` [PATCH v8 06/27] cxl: add function for type2 cxl regs setup alejandro.lucero-palau
2024-12-24 17:22   ` Jonathan Cameron
2024-12-27  8:04     ` Alejandro Lucero Palau
2024-12-30  9:01       ` Alejandro Lucero Palau
2025-01-06 10:41   ` Dan Carpenter
2025-01-06 15:19     ` Alejandro Lucero Palau
2024-12-16 16:10 ` [PATCH v8 07/27] sfc: use cxl api for regs setup and checking alejandro.lucero-palau
2024-12-24 17:23   ` Jonathan Cameron
2024-12-27  8:05     ` Alejandro Lucero Palau
2024-12-16 16:10 ` [PATCH v8 08/27] cxl: add functions for resource request/release by a driver alejandro.lucero-palau
2024-12-24 17:25   ` Jonathan Cameron
2024-12-27  8:06     ` Alejandro Lucero Palau
2024-12-16 16:10 ` [PATCH v8 09/27] sfc: request cxl ram resource alejandro.lucero-palau
2024-12-24 17:27   ` Jonathan Cameron
2024-12-16 16:10 ` [PATCH v8 10/27] resource: harden resource_contains alejandro.lucero-palau
2024-12-24 17:27   ` Jonathan Cameron
2024-12-16 16:10 ` [PATCH v8 11/27] cxl: add function for setting media ready by a driver alejandro.lucero-palau
2024-12-24 17:29   ` Jonathan Cameron
2024-12-27  8:08     ` Alejandro Lucero Palau
2025-01-02 12:45       ` Jonathan Cameron
2024-12-16 16:10 ` [PATCH v8 12/27] sfc: set cxl media ready alejandro.lucero-palau
2024-12-16 16:10 ` [PATCH v8 13/27] cxl: prepare memdev creation for type2 alejandro.lucero-palau
2024-12-24 17:32   ` Jonathan Cameron
2024-12-27  8:28     ` Alejandro Lucero Palau
2024-12-16 16:10 ` [PATCH v8 14/27] sfc: create type2 cxl memdev alejandro.lucero-palau
2024-12-24 17:33   ` Jonathan Cameron
2024-12-16 16:10 ` [PATCH v8 15/27] cxl: define a driver interface for HPA free space enumeration alejandro.lucero-palau
2024-12-24 17:42   ` Jonathan Cameron
2024-12-27 10:05     ` Alejandro Lucero Palau
2024-12-16 16:10 ` [PATCH v8 16/27] sfc: obtain root decoder with enough HPA free space alejandro.lucero-palau
2024-12-18 11:17   ` Edward Cree
2024-12-24 17:43   ` Jonathan Cameron
2024-12-25 20:21   ` kernel test robot
2024-12-16 16:10 ` [PATCH v8 17/27] cxl: define a driver interface for DPA allocation alejandro.lucero-palau
2024-12-24 17:53   ` Jonathan Cameron
2024-12-27 10:23     ` Alejandro Lucero Palau
2024-12-16 16:10 ` [PATCH v8 18/27] sfc: get endpoint decoder alejandro.lucero-palau
2024-12-17 10:42   ` Simon Horman
2024-12-18  8:22     ` Alejandro Lucero Palau
2025-01-07 11:34       ` Simon Horman
2024-12-16 16:10 ` [PATCH v8 19/27] cxl: make region type based on endpoint type alejandro.lucero-palau
2024-12-24 17:54   ` Jonathan Cameron
2024-12-16 16:10 ` [PATCH v8 20/27] cxl/region: factor out interleave ways setup alejandro.lucero-palau
2024-12-24 17:56   ` Jonathan Cameron
2024-12-16 16:10 ` [PATCH v8 21/27] cxl/region: factor out interleave granularity setup alejandro.lucero-palau
2024-12-24 17:56   ` Jonathan Cameron
2024-12-16 16:10 ` [PATCH v8 22/27] cxl: allow region creation by type2 drivers alejandro.lucero-palau
2024-12-24 18:01   ` Jonathan Cameron
2024-12-27 10:27     ` Alejandro Lucero Palau
2024-12-16 16:10 ` [PATCH v8 23/27] cxl: add region flag for precluding a device memory to be used for dax alejandro.lucero-palau
2024-12-24 18:04   ` Jonathan Cameron
2024-12-27  8:46     ` Alejandro Lucero Palau
2024-12-16 16:10 ` [PATCH v8 24/27] sfc: create cxl region alejandro.lucero-palau
2024-12-24 18:05   ` Jonathan Cameron
2024-12-25 23:58   ` kernel test robot
2024-12-16 16:10 ` [PATCH v8 25/27] cxl: add function for obtaining region range alejandro.lucero-palau
2024-12-24 18:07   ` Jonathan Cameron
2024-12-16 16:10 ` [PATCH v8 26/27] sfc: update MCDI protocol headers alejandro.lucero-palau
2024-12-16 16:10 ` [PATCH v8 27/27] sfc: support pio mapping based on cxl alejandro.lucero-palau
2024-12-17 10:47   ` Simon Horman
2024-12-18  8:32     ` Alejandro Lucero Palau
2024-12-30 12:16       ` Alejandro Lucero Palau

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=6788a451b241a_20fa294f9@dwillia2-xfh.jf.intel.com.notmuch \
    --to=dan.j.williams@intel.com \
    --cc=alejandro.lucero-palau@amd.com \
    --cc=alucerop@amd.com \
    --cc=dave.jiang@intel.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=edward.cree@amd.com \
    --cc=kuba@kernel.org \
    --cc=linux-cxl@vger.kernel.org \
    --cc=martin.habets@xilinx.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.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