On Thu, Oct 10, 2013 at 03:07:01PM -0700, Kristian Høgsberg wrote: > The various create and open functions set the buffer size, but > drm_intel_bo_gem_create_from_prime() is an exception. In the 3.12 kernel > we can now use lseek on the prime fd to determine the size of the bo. > Use that and override the userprovided size. If the kernel doesn't > support this, we get an error and fall back to the user provided size. > > Signed-off-by: Kristian Høgsberg <krh@xxxxxxxxxxxxx> Reviewed-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > --- > intel/intel_bufmgr_gem.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/intel/intel_bufmgr_gem.c b/intel/intel_bufmgr_gem.c > index f98f7a7..278f5c8 100644 > --- a/intel/intel_bufmgr_gem.c > +++ b/intel/intel_bufmgr_gem.c > @@ -2452,7 +2452,17 @@ drm_intel_bo_gem_create_from_prime(drm_intel_bufmgr *bufmgr, int prime_fd, int s > if (!bo_gem) > return NULL; > > - bo_gem->bo.size = size; > + /* Determine size of bo. The fd-to-handle ioctl really should > + * return the size, but it doesn't. If we have kernel 3.12 or > + * later, we can lseek on the prime fd to get the size. Older > + * kernels will just fail, in which case we fall back to the > + * provided (estimated or guess size). */ > + ret = lseek(prime_fd, 0, SEEK_END); > + if (ret != -1) > + bo_gem->bo.size = ret; > + else > + bo_gem->bo.size = size; > + > bo_gem->bo.handle = handle; > bo_gem->bo.bufmgr = bufmgr; > > -- > 1.8.3.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel