[PATCH v3] cxl: Export AFU error buffer via sysfs
Michael Neuling
mikey at neuling.org
Thu May 21 13:48:29 AEST 2015
On Thu, 2015-05-21 at 09:06 +0530, trigg wrote:
>
>
> > On 21-May-2015, at 05:16, Michael Neuling <mikey at neuling.org> wrote:
> >
> > + */
> > > +ssize_t cxl_afu_read_err_buffer(struct cxl_afu *afu, char *buf,
> > > + loff_t off, size_t count)
> > > +{
> > > + loff_t aligned_off;
> > > + size_t aligned_count;
> > > + const void __iomem *ebuf = afu->afu_desc_mmio +
> > > afu->eb_offset;
> > > +
> > > + if (!afu->eb_len || count == 0 || off < 0)
> >
> > if eb_len == 0 we don't even create the sysfs file. So is this
> > check
> > needed?
> This function is non static so it can be potentially called from
> kernel.
What? You mean outside this file?
> Condition check of "if (count == 0 || off < 0 || (size_t)off
> >= afu->eb_len) "
> should work solving the problem below too.
It makes no sense to call this outside of sysfs reading the error
buffer.
> > > + aligned_off = round_down(off, 8);
> > > + aligned_count = round_up(off + count, 8) - aligned_off;
> >
> > I kinda preferred the start end variables, and length was just end -
> > start.
> >
> > I though it was more readable. IMHO
> >
> > How about:
> >
> > aligned_start = round_down(off, 8);
> > aligned_end = round_up(off + count, 8);
> > aligned_length = aligned_end - aligned_start;
> Agreed on aligned_start and aligned_end but would not
> need aligned_end in rest of the code.
Aligned_end makes it more readable.
> >
> > > +
> > > + /* fast path */
> > > + if ((aligned_off == off) && (aligned_count == count)) {
> > > + /* no need to use the bounce buffer */
> > > + _memcpy_fromio(buf, ebuf + off, count);
> >
> > I would drop this, as the other code path should work fine.
> > Premature optimisation.....
> I am inclined to differ on this. Code below uses a bounce buffer
> which needs more than double the amount of loads and stores.
Cacheable vs non-cacheable is important here though.
> If the caller wants to speed up things it can simply ask for aligned
> read that won't have this overhead. This will be especially useful
> In large reads.
The overhead will mostly be in the non-cachable/MMIO load/stores rather
than the cacheable load/stores, so there may be little performance
difference anyway.
The only reason this could be useful is if you have a really really
large error buffer. Even then, why do you need to read it that quickly?
Mikey
More information about the Linuxppc-dev
mailing list