mmap fails for DRM_IOCTL_MODE_MAP_DUMB for Radeon, Nouveau, and VMWGFX
Rian Quinn
rianquinn at gmail.com
Mon Nov 10 14:38:13 PST 2014
Your a life savor man. That did the trick. I cannot test on the Radeon and
Nouveau until I get back into the office tomorrow, but it worked great on
the VMWGFX driver.
I'll also email David to let him know as his examples (which a lot of
people reference) also need to that #define.
Thanks again,
- Rian
On Mon, Nov 10, 2014 at 5:33 PM, Dave Airlie <airlied at gmail.com> wrote:
> On 11 November 2014 07:33, Rian Quinn <rianquinn at gmail.com> wrote:
> > I would be surprised if the size argument was the issue. That comes right
> > out out of the create IOCTL unmodified. Here is the full source that I am
> > using.
> >
> > // Clear the arg buffers.
> > memset(&create_arg, 0, sizeof(create_arg));
> > memset(&map_arg, 0, sizeof(map_arg));
> >
> > //
> > ------------------------------------------------------------------------
> > // Allocate
> >
> > // Fill in the arguments for the IOCTL. Note that we only support
> 32bpp
> > // dumb buffers so that is hard coded here.
> > create_arg.width = width;
> > create_arg.height = height;
> > create_arg.bpp = 32;
> >
> > // Allocate the dumb buffer
> > if (drmIoctl(gpu->fd(), DRM_IOCTL_MODE_CREATE_DUMB, &create_arg))
> > {
> > svWarning(0) << "Failed: DRM_IOCTL_MODE_CREATE_DUMB - " <<
> > strerror(errno);
> > return;
> > }
> >
> > // Store the dumb buffer properties.
> > mSize = create_arg.size;
> > mStride = create_arg.pitch;
> > mHandle = create_arg.handle;
> >
> > //
> > ------------------------------------------------------------------------
> > // Map
> >
> > // Fill in the arguments for the IOCTL.
> > map_arg.handle = mHandle;
> >
> > // Allocate the dumb buffer
> > if (drmIoctl(gpu->fd(), DRM_IOCTL_MODE_MAP_DUMB, &map_arg))
> > {
> > svWarning(0) << "Failed: DRM_IOCTL_MODE_MAP_DUMB - " <<
> > strerror(errno);
> > return;
> > }
> >
> > // Store the mapped memory
> > if ((mVaddr = (svuint32 *)mmap(0, mSize, PROT_READ | PROT_WRITE,
> > MAP_SHARED, gpu->fd(), map_arg.offset)) == MAP_FAILED)
> > {
> > // Need to clear out the address so that we don't try to use it.
> > mVaddr = NULL;
> >
> > // Error out.
> > svWarning(0) << "Failed: Dumb Buffer mmap - " << strerror(errno);
> > return;
> > }
> >
>
> mmap is probably truncating the offset,
>
> look into,
> #define _FILE_OFFSET_BITS 64
>
> AC_SYS_LARGEFILE
>
> Dave.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20141110/d30bc5dd/attachment.html>
More information about the dri-devel
mailing list