Hi Jason,

> Subject: Re: [RFC v2 1/8] dma-buf: Add support for map/unmap APIs for
> interconnects
> 
> On Sun, Oct 26, 2025 at 09:44:13PM -0700, Vivek Kasireddy wrote:
> > For the map operation, the dma-buf core will create an xarray but
> > the exporter needs to populate it with the interconnect specific
> > addresses. And, similarly for unmap, the exporter is expected to
> > cleanup the individual entries of the xarray.
> 
> I don't think we should limit this to xarrays, nor do I think it is a
> great datastructure for what is usually needed here..
One of the goals (as suggested by Christian) is to have a container that
can be used with an iterator. So, instead of creating a new data structure,
I figured using an xarray would make sense here. And, since the entries
of an xarray can be of any type, I think another advantage is that the
dma-buf core only needs to be aware of the xarray but the exporter can
use an interconnect specific type to populate the entries that the importer
would be aware of.

> 
> I just posted the patches showing what iommufd needs, and it wants
> something like
> 
> struct mapping {
>    struct p2p_provider *provider;
>    size_t nelms;
>    struct phys_vec *phys;
> };
> 
> Which is not something that make sense as an xarray.
If we do not want to use an xarray, I guess we can try to generalize the
struct that holds the addresses and any additional info (such as provider).
Would any of the following look OK to you:
struct dma_buf_mapping {
        struct phys_vec *phys;
        unsigned int nents;
        void *map_data;
};

Or

struct dma_buf_ranges {
        struct range *ranges;
        unsigned int nranges;
        void *ranges_data;
};

> 
> I think the interconnect should have its own functions for map/unmap,
> ie instead of trying to have them as a commmon
> dma_buf_interconnect_ops do something like
In my current design, the exporter would call the interconnect specific
map/unmap functions from its common map() callback. But I guess I can
try to implement and test your suggestions to see if they are more 
robust/elegant.

> 
> struct dma_buf_interconnect_ops {
>         const char *name;
>         bool (*supports_interconnects)(struct dma_buf_attachment *attach,
I have this as part of dma_buf_attach_ops for the importer but I'll explore your
idea in more detail.

>                                       const struct dma_buf_interconnect_match 
> *,
>                                       unsigned int num_ics);
> };
> 
> struct dma_buf_iov_interconnect_ops {
>      struct dma_buf_interconnect_ops ic_ops;
>      struct xx *(*map)(struct dma_buf_attachment *attach,
Do we want each specific interconnect to have its own return type for map?

>                          unsigned int *bar_number,
>                          size_t *nelms);
>      // No unmap for iov
> };
> 
> static inline struct xx *dma_buf_iov_map(struct dma_buf_attachment
> *attach,
>                          unsigned int *bar_number,
>                          size_t *nelms)
> {
>      return container_of(attach->ic_ops, struct dma_buf_iov_interconnect_ops,
> ic_ops)->map(
>                  attach, bar_number, nelms));
> }
> 
> > +/**
> > + * dma_buf_attachment_is_dynamic - check if the importer can handle
> move_notify.
> > + * @attach: the attachment to check
> > + *
> > + * Returns true if a DMA-buf importer has indicated that it can handle
> dmabuf
> > + * location changes through the move_notify callback.
> > + */
> > +static inline bool
> > +dma_buf_attachment_is_dynamic(struct dma_buf_attachment *attach)
> > +{
> > +   return !!attach->importer_ops;
> > +}
> 
> Why is this in this patch?
I figured it makes sense to limit map/unmap interconnect ops to dynamic
importers (that register a move_notify callback) only. I guess I could move the
above change into a separate patch.

> 
> I also think this patch should be second in the series, it makes more
> sense to figure out how to attach with an interconnect then show how
> to map/unmap with that interconnect
> 
> Like I'm not sure why this introduces allow_ic?
Ok, I'll move it to the other patch that introduces 
dma_buf_match_interconnects().

Thanks,
Vivek

> 
> Jason

Reply via email to