[PATCH v8 RFC 1/3] sparc: Break up monolithic iommu table/lock into finer graularity pools and lock
Benjamin Herrenschmidt
benh at kernel.crashing.org
Sat Apr 4 08:06:50 AEDT 2015
On Fri, 2015-04-03 at 14:28 -0400, Sowmini Varadhan wrote:
>
> Just want to confirm:
>
> > > + again:
> > > + if (pass == 0 && handle && *handle &&
> > > + (*handle >= pool->start) && (*handle < pool->end))
> > > + start = *handle;
> > > + else
> > > + start = pool->hint;
> >
> > Now this means "handle" might be < pool->hint, in that case you also
> > need a lazy flush. Or rather only if the resulting alloc is. My
> :
>
> > > + } else {
> > > + /* give up */
> > > + n = DMA_ERROR_CODE;
> > > + goto bail;
> > > + }
> > > + }
> >
> > Here, make this something like:
> >
> > } else if (end < pool->hint)
> > need_flush = true;
>
> you mean
>
> } else if (start < pool->hint)
>
> right? (so I'm not missing some corner-case that you are thinking
> about here)
No, I meant "n < pool->hint", ie, the start of the newly allocated
block.
"end" hasn't been adjusted yet at that point but we don't want to
compare "end" anyway (which will be n + npages), we really want n, ie if
the *beginning* of the newly allocated chunk is before the end of the
previous one (after all they may even overlap if the previous one has
been freed).
Ben.
> --Sowmini
>
More information about the Linuxppc-dev
mailing list