[Intel-gfx] [PATCH 16/19] drm/i915: Fix l3 parity buffer offset
Ben Widawsky
ben at bwidawsk.net
Wed Sep 11 19:59:47 CEST 2013
On Wed, Sep 11, 2013 at 08:44:21PM +0300, Ville Syrjälä wrote:
> On Wed, Sep 11, 2013 at 10:07:39AM -0700, Ben Widawsky wrote:
> > On Wed, Sep 11, 2013 at 02:45:28PM +0300, Ville Syrjälä wrote:
> > > On Tue, Sep 10, 2013 at 07:36:45PM -0300, Rodrigo Vivi wrote:
> > > > From: Ben Widawsky <benjamin.widawsky at intel.com>
> > > >
> > > > The buf pointer used during l3_write is just char *, therefore it does
> > > > not require the silly /4.
> > > >
> > > > Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
> > > > Signed-off-by: Rodrigo Vivi <rodrigo.vivi at gmail.com>
> > > > ---
> > > > drivers/gpu/drm/i915/i915_sysfs.c | 4 +---
> > > > 1 file changed, 1 insertion(+), 3 deletions(-)
> > > >
> > > > diff --git a/drivers/gpu/drm/i915/i915_sysfs.c b/drivers/gpu/drm/i915/i915_sysfs.c
> > > > index 05195c0..70de7a9 100644
> > > > --- a/drivers/gpu/drm/i915/i915_sysfs.c
> > > > +++ b/drivers/gpu/drm/i915/i915_sysfs.c
> > > > @@ -184,9 +184,7 @@ i915_l3_write(struct file *filp, struct kobject *kobj,
> > > > if (temp)
> > > > dev_priv->l3_parity.remap_info = temp;
> > > >
> > > > - memcpy(dev_priv->l3_parity.remap_info + (offset/4),
> > > > - buf + (offset/4),
> > > > - count);
> > > > + memcpy(dev_priv->l3_parity.remap_info + (offset/4), buf, count);
> > >
> > > The commit message doesn't really reflect the fact that you completely
> > > remove the offset from 'buf', which is actually the correct thing to do,
> > > but the commit message should match the patch.
> >
> > I don't know, it seems pretty clear to me. Shall I just copy and paste
> > what you wrote here?
>
> The commit msg says this:
> - buf + offset/4
> + buf + offset
>
> But the patch does this:
> - buf + offset/4
> + buf
>
> Doesn't seem very clear to me :)
>
That's fine. I want it to be as clear as possible (still seems clear to
me). What do you want me to write? I'll fix it with the below fixed as
well.
> >
> > >
> > > Also i915_l3_read() should get the same fix.
> >
> > Should it?
>
> Yes, 'buf' is just the buffer userspace will eventually get from the
> read() syscall. Seeking seeks inside the file, not inside the buffer
> userspace passes to read()/write().
>
> Well, actually 'buf' is one of two temp buffers inside the kernel. It
> looks like bin.c will copy from that buffer to another temp buffer,
> and then from the second temp buffer to userspace. Seems very
> inefficient, but perhaps there's a reason for it.
>
Now I see what I was missing. Thanks for catching it.
> >
> > >
> > > And while on the subject, I don't understand why we're playing weird
> > > tricks with the remap_info memory allocation. Ie. why don't we simply
> > > do this?
> >
> > It was mostly to be able to differentiate NULL vs. 0's. The former being
> > no remaps ever, the latter being a cleared remapping. That's why temp is
> > used.
>
> Hmm. I don't get it. The only difference between my idea and the current
> code is if i915_gpu_idle() fails for the first write. But we could just
> do the allocation after we've called i915_gpu_idle() and then there's no
> longer any difference.
>
> Also there's no guarantee that userspace would even write the whole
> thing. It could just write one byte and then we'd implicitly clear the
> rest to 0. Not sure if that's considered OK or not.
It's not required for userspace to write the whole thing. The operation
should be a RMW, except for the initial case where zero-filled is what
you want (all 0's should be no remapping).
If you want to submit cleanup patches on top of this, I can review them,
but I don't feel this suggestion belongs in this patch anyway.
>
> Actually 'temp' would make more sense if we'd do the allocation outside
> struct_mutex.
>
> > >
> > > ...
> > > if (!dev_priv->l3_parity.remap_info) {
> > > dev_priv->l3_parity.remap_info = kzalloc(GEN7_L3LOG_SIZE,
> > > GFP_KERNEL);
> > >
> > > if (!dev_priv->l3_parity.remap_info) {
> > > mutex_unlock(&drm_dev->struct_mutex);
> > > return -ENOMEM;
> > > }
> > > }
> > > ...
> > >
> > > >
> > > > i915_gem_l3_remap(drm_dev);
> > > >
> > > > --
> > > > 1.8.1.4
> > > >
> > > > _______________________________________________
> > > > Intel-gfx mailing list
> > > > Intel-gfx at lists.freedesktop.org
> > > > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
> > >
> > > --
> > > Ville Syrjälä
> > > Intel OTC
> >
> > --
> > Ben Widawsky, Intel Open Source Technology Center
>
> --
> Ville Syrjälä
> Intel OTC
--
Ben Widawsky, Intel Open Source Technology Center
More information about the Intel-gfx
mailing list