On Thu, Nov 20, 2025 at 08:04:37AM +0000, Tian, Kevin wrote:
> > From: Jason Gunthorpe <[email protected]>
> > Sent: Saturday, November 8, 2025 12:50 AM
> > +
> > +static int pfn_reader_fill_dmabuf(struct pfn_reader_dmabuf *dmabuf,
> > +                             struct pfn_batch *batch,
> > +                             unsigned long start_index,
> > +                             unsigned long last_index)
> > +{
> > +   unsigned long start = dmabuf->start_offset + start_index * PAGE_SIZE;
> > +
> > +   /*
> > +    * This works in PAGE_SIZE indexes, if the dmabuf is sliced and
> > +    * starts/ends at a sub page offset then the batch to domain code will
> > +    * adjust it.
> > +    */
> 
> dmabuf->start_offset comes from pages->dmabuf.start, which is initialized as:
> 
>       pages->dmabuf.start = start - start_byte;
> 
> so it's always page-aligned. Where is the sub-page offset coming from?

I need to go over this again to check it, this sub-page stuff is
a bit convoluted. start_offset should include the sub page offset
here..

> > @@ -1687,6 +1737,12 @@ static void __iopt_area_unfill_domain(struct
> > iopt_area *area,
> > 
> >     lockdep_assert_held(&pages->mutex);
> > 
> > +   if (iopt_is_dmabuf(pages)) {
> > +           iopt_area_unmap_domain_range(area, domain, start_index,
> > +                                        last_index);
> > +           return;
> > +   }
> > +
> 
> this belongs to patch3?

This is part of programming the domain with the dmabuf, the patch3 was
about the revoke which is a slightly different topic though they are
both similar.

Thanks,
Jason

Reply via email to