mmap fails for DRM_IOCTL_MODE_MAP_DUMB for Radeon, Nouveau, and VMWGFX

Rian Quinn rianquinn at gmail.com
Tue Nov 11 05:24:07 PST 2014


Verified that this fixed the issue for all of the video cards.

On Mon, Nov 10, 2014 at 5:38 PM, Rian Quinn <rianquinn at gmail.com> wrote:

> 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/20141111/14cfd0d7/attachment.html>


More information about the dri-devel mailing list