[Intel-gfx] [PATCH] drm/i915: Don't prefault the entire obj if the vma is smaller
Daniel Vetter
daniel at ffwll.ch
Tue Jun 17 23:35:40 CEST 2014
On Tue, Jun 17, 2014 at 10:11:45PM +0100, Chris Wilson wrote:
> On Tue, Jun 17, 2014 at 09:03:00PM +0300, ville.syrjala at linux.intel.com wrote:
> > From: Ville Syrjälä <ville.syrjala at linux.intel.com>
> >
> > Take the minimum of the object size and the vma size and prefault
> > only that much. Avoids a SIGBUS when mmapping only a portion of the
> > object.
> >
> > Prefaulting was introduced here:
> > commit b90b91d87038f6b257b40a02b42ed4f9705e06f0
> > Author: Chris Wilson <chris at chris-wilson.co.uk>
> > Date: Tue Jun 10 12:14:40 2014 +0100
> >
> > drm/i915: Prefault the entire object on first page fault
> >
> > Cc: Chris Wilson <chris at chris-wilson.co.uk>
> > Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > ---
> > drivers/gpu/drm/i915/i915_gem.c | 5 ++++-
> > 1 file changed, 4 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> > index 6f8c206..4ef80d1 100644
> > --- a/drivers/gpu/drm/i915/i915_gem.c
> > +++ b/drivers/gpu/drm/i915/i915_gem.c
> > @@ -1578,9 +1578,12 @@ int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
> > pfn >>= PAGE_SHIFT;
> >
> > if (!obj->fault_mappable) {
> > + unsigned long size = min_t(unsigned long,
> > + vma->vm_end - vma->vm_start,
> > + obj->base.size);
>
> The vma should be the same size as the obj... Unless it gets
> coalesced... I wonder if that is even legal for our objects because I
> was under the impression that we depended upon it in other places.
You have to map from the first page otherwise the lookup won't find it.
But apparently we have at least igts that hit this (Rodrigo's psr test as
an example). And it's easy to test and easy to fix, so figured ok to
merge.
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
More information about the Intel-gfx
mailing list