<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Hi all!</p>
    <p>The last days I've been struggling with mesa3d to get GPU
      acceleration on X, on my Raspberry Pi 4 Model B. Maybe someone
      knows how to deal with it.</p>
    <p>Using Buildroot I've compiled a system with mesa3d, using KMSRO,
      V3D and VC4 Gallium drivers. X11 is starting up, stating that DRI
      is initialised and everything seems to work. But when I run
      glxinfo or glxgears, it is stating 'Failed to open bo 1:
      Permission denied'. glxgears opens a window which simply stays
      black. So I started to track it down and ended up in
      drivers/drm/drm_ioctl.c.</p>
    <p>The specific function that returns EACCES (-13) is
      drm_ioctl_permit(). To identify the failing condition I've added
      some DRM_DEBUG() for each one of the four condition there. After
      enabling drm.debug with</p>
    <p># echo 0xf > /sys/module/drm/parameters/debug</p>
    <p>I see that it fails on the DRM_RENDER_ALLOW condition. I don't
      know how this all works together and what it means, in detail. So
      I'm lost now. I assume that X11 is occupying the exclusive access
      to the render node /dev/dri/renderD128. But how does glxgears
      should work now? What I'm trying to archive is to run chromium
      with GPU acceleration, but the GPU process is crashing and reverts
      to software rendering.</p>
    <p>When running glxinfo it is showing all the renderer information,
      which looks good, though it shows that permission denied too. All
      programs are running as root at the moment and the filesystem
      permissions look good.</p>
    <p>As I said, I'm lost and don't know that much about all this to go
      any further, so I'm stuck at it now. I hope someone here got the
      missing piece for me to get it working, though I'm not sure wether
      it is the right place for this question. May be it's related to
      kernel configuration, to the Raspberry firmware, or what so ever.
      But I even don't know that.</p>
    <p>Software used:</p>
    <p>Mesa3D 20.3.4<br>
      Linux 5.10.y (branch at github.com/raspberrypi/linux)<br>
      Firmware stable (branch at github.com/raspberrypi/firmware)<br>
    </p>
    <p>Thank you in advance. Further down you will find some output from
      strace and drm.debug.</p>
    <p>Best regards,</p>
    <p>Michael</p>
    <pre>==== strace of glxgears
openat(AT_FDCWD, "/dev/dri/renderD128", O_RDWR|O_LARGEFILE|O_CLOEXEC) = 6
ioctl(6, DRM_IOCTL_VERSION, 0x15084e0)  = 0
ioctl(6, DRM_IOCTL_VERSION, 0x15084e0)  = 0
ioctl(6, DRM_IOCTL_GET_UNIQUE, 0xbedebcd0) = -1 EACCES (Permission denied)
ioctl(6, DRM_IOCTL_EXYNOS_GEM_GET or DRM_IOCTL_PANFROST_GET_PARAM or DRM_IOCTL_QXL_GETPARAM or DRM_IOCTL_SIS_FB_ALLOC or DRM_IOCTL_TEGRA_SYNCPT_WAIT or DRM_IOCTL_V3D_GET_PARAM or DRM_IOCTL_VC4_MMAP_BO, 0xbedebf00) = 0
ioctl(6, DRM_IOCTL_EXYNOS_GEM_GET or DRM_IOCTL_PANFROST_GET_PARAM or DRM_IOCTL_QXL_GETPARAM or DRM_IOCTL_SIS_FB_ALLOC or DRM_IOCTL_TEGRA_SYNCPT_WAIT or DRM_IOCTL_V3D_GET_PARAM or DRM_IOCTL_VC4_MMAP_BO, 0xbedebf10) = 0
ioctl(6, DRM_IOCTL_EXYNOS_GEM_GET or DRM_IOCTL_PANFROST_GET_PARAM or DRM_IOCTL_QXL_GETPARAM or DRM_IOCTL_SIS_FB_ALLOC or DRM_IOCTL_TEGRA_SYNCPT_WAIT or DRM_IOCTL_V3D_GET_PARAM or DRM_IOCTL_VC4_MMAP_BO, 0xbedebf28) = 0
ioctl(6, DRM_IOCTL_EXYNOS_GEM_GET or DRM_IOCTL_PANFROST_GET_PARAM or DRM_IOCTL_QXL_GETPARAM or DRM_IOCTL_SIS_FB_ALLOC or DRM_IOCTL_TEGRA_SYNCPT_WAIT or DRM_IOCTL_V3D_GET_PARAM or DRM_IOCTL_VC4_MMAP_BO, 0xbedebf28) = 0
ioctl(4, DRM_IOCTL_GET_CAP, 0xbedebf90) = 0
ioctl(6, DRM_IOCTL_SYNCOBJ_CREATE, 0xbedec770) = 0
ioctl(6, DRM_IOCTL_AMDGPU_CTX or DRM_IOCTL_ETNAVIV_GEM_NEW or DRM_IOCTL_LIMA_GEM_INFO or DRM_IOCTL_MSM_GEM_NEW or DRM_IOCTL_V3D_CREATE_BO or DRM_IOCTL_VC4_WAIT_BO, 0xbedec460) = 0
ioctl(6, DRM_IOCTL_ETNAVIV_GEM_INFO or DRM_IOCTL_OMAP_GEM_NEW or DRM_IOCTL_PANFROST_MMAP_BO or DRM_IOCTL_V3D_MMAP_BO or DRM_IOCTL_VC4_CREATE_BO or DRM_IOCTL_VIRTGPU_GETPARAM, 0xbedec410) = 0
openat(AT_FDCWD, "/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 7
ioctl(6, DRM_IOCTL_AMDGPU_CTX or DRM_IOCTL_ETNAVIV_GEM_NEW or DRM_IOCTL_LIMA_GEM_INFO or DRM_IOCTL_MSM_GEM_NEW or DRM_IOCTL_V3D_CREATE_BO or DRM_IOCTL_VC4_WAIT_BO, 0xbedec240) = 0
ioctl(6, DRM_IOCTL_ETNAVIV_GEM_INFO or DRM_IOCTL_OMAP_GEM_NEW or DRM_IOCTL_PANFROST_MMAP_BO or DRM_IOCTL_V3D_MMAP_BO or DRM_IOCTL_VC4_CREATE_BO or DRM_IOCTL_VIRTGPU_GETPARAM, 0xbedec210) = 0
ioctl(6, DRM_IOCTL_GEM_OPEN, 0xbedec818) = -1 EACCES (Permission denied)
write(2, "V3D:-1:: Failed to open bo 2: Pe"..., 48V3D:-1:: Failed to open bo 2: Permission denied
ioctl(6, DRM_IOCTL_SYNCOBJ_CREATE, 0xbedec6d8) = 0
ioctl(6, DRM_IOCTL_AMDGPU_CTX or DRM_IOCTL_ETNAVIV_GEM_NEW or DRM_IOCTL_LIMA_GEM_INFO or DRM_IOCTL_MSM_GEM_NEW or DRM_IOCTL_V3D_CREATE_BO or DRM_IOCTL_VC4_WAIT_BO, 0xbedec3c8) = 0
ioctl(6, DRM_IOCTL_ETNAVIV_GEM_INFO or DRM_IOCTL_OMAP_GEM_NEW or DRM_IOCTL_PANFROST_MMAP_BO or DRM_IOCTL_V3D_MMAP_BO or DRM_IOCTL_VC4_CREATE_BO or DRM_IOCTL_VIRTGPU_GETPARAM, 0xbedec378) = 0
ioctl(6, DRM_IOCTL_AMDGPU_CTX or DRM_IOCTL_ETNAVIV_GEM_NEW or DRM_IOCTL_LIMA_GEM_INFO or DRM_IOCTL_MSM_GEM_NEW or DRM_IOCTL_V3D_CREATE_BO or DRM_IOCTL_VC4_WAIT_BO, 0xbedec1a8) = 0
ioctl(6, DRM_IOCTL_ETNAVIV_GEM_INFO or DRM_IOCTL_OMAP_GEM_NEW or DRM_IOCTL_PANFROST_MMAP_BO or DRM_IOCTL_V3D_MMAP_BO or DRM_IOCTL_VC4_CREATE_BO or DRM_IOCTL_VIRTGPU_GETPARAM, 0xbedec178) = 0
ioctl(6, DRM_IOCTL_GEM_OPEN, 0xbedec818) = -1 EACCES (Permission denied)
write(2, "V3D:-1:: Failed to open bo 2: Pe"..., 48V3D:-1:: Failed to open bo 2: Permission denied




====== drm.debug
Mar 14 18:55:47 buildroot user.debug kernel: [35999.920528] [drm:drm_stub_open [drm]]
Mar 14 18:55:47 buildroot user.debug kernel: [35999.920751] [drm:drm_open [drm]] comm="glxgears", pid=448, minor=1
Mar 14 18:55:47 buildroot user.debug kernel: [35999.920995] [drm:drm_ioctl [drm]] comm="glxgears" pid=448, dev=0xe201, auth=1, DRM_IOCTL_GET_MAGIC
Mar 14 18:55:47 buildroot user.debug kernel: [35999.921207] [drm:drm_getmagic [drm]] 1
Mar 14 18:55:47 buildroot user.debug kernel: [35999.921520] [drm:drm_ioctl [drm]] comm="Xorg" pid=237, dev=0xe201, auth=1, DRM_IOCTL_AUTH_MAGIC
Mar 14 18:55:47 buildroot user.debug kernel: [35999.921733] [drm:drm_authmagic [drm]] 1
Mar 14 18:55:47 buildroot user.debug kernel: [35999.922042] [drm:drm_ioctl [drm]] comm="glxgears" pid=448, dev=0xe201, auth=1, DRM_IOCTL_VERSION
Mar 14 18:55:47 buildroot user.debug kernel: [35999.922257] [drm:drm_ioctl [drm]] comm="glxgears" pid=448, dev=0xe201, auth=1, DRM_IOCTL_VERSION
Mar 14 18:55:47 buildroot user.debug kernel: [35999.929723] [drm:drm_ioctl [drm]] comm="glxgears" pid=448, dev=0xe201, auth=1, DRM_IOCTL_VERSION
Mar 14 18:55:47 buildroot user.debug kernel: [35999.929942] [drm:drm_ioctl [drm]] comm="glxgears" pid=448, dev=0xe201, auth=1, DRM_IOCTL_VERSION
Mar 14 18:55:47 buildroot user.debug kernel: [35999.944279] [drm:drm_ioctl [drm]] comm="glxgears" pid=448, dev=0xe201, auth=1, DRM_IOCTL_VERSION
Mar 14 18:55:47 buildroot user.debug kernel: [35999.944500] [drm:drm_ioctl [drm]] comm="glxgears" pid=448, dev=0xe201, auth=1, DRM_IOCTL_VERSION
Mar 14 18:55:47 buildroot user.debug kernel: [35999.950969] [drm:drm_ioctl [drm]] comm="glxgears" pid=448, dev=0xe201, auth=1, DRM_IOCTL_VERSION
Mar 14 18:55:47 buildroot user.debug kernel: [35999.951187] [drm:drm_ioctl [drm]] comm="glxgears" pid=448, dev=0xe201, auth=1, DRM_IOCTL_VERSION
Mar 14 18:55:47 buildroot user.debug kernel: [35999.956154] [drm:drm_ioctl [drm]] comm="glxgears" pid=448, dev=0xe201, auth=1, VC4_GET_PARAM
Mar 14 18:55:47 buildroot user.debug kernel: [35999.956367] [drm:drm_ioctl [drm]] comm="glxgears", pid=448, ret=-19
Mar 14 18:55:47 buildroot user.debug kernel: [35999.956652] [drm:drm_stub_open [drm]]
Mar 14 18:55:47 buildroot user.debug kernel: [35999.956870] [drm:drm_open [drm]] comm="glxgears", pid=448, minor=128
Mar 14 18:55:47 buildroot user.debug kernel: [35999.957103] [drm:drm_ioctl [drm]] comm="glxgears" pid=448, dev=0xe280, auth=1, DRM_IOCTL_VERSION
Mar 14 18:55:47 buildroot user.debug kernel: [35999.957317] [drm:drm_ioctl [drm]] comm="glxgears" pid=448, dev=0xe280, auth=1, DRM_IOCTL_VERSION
Mar 14 18:55:47 buildroot user.debug kernel: [35999.957548] [drm:drm_release [drm]] open_count = 3
Mar 14 18:55:47 buildroot user.debug kernel: [35999.957754] [drm:drm_file_free.part.0 [drm]] comm="glxgears", pid=448, dev=0xe280, open_count=3
Mar 14 18:55:47 buildroot user.debug kernel: [36000.050627] [drm:drm_stub_open [drm]]
Mar 14 18:55:47 buildroot user.debug kernel: [36000.050844] [drm:drm_open [drm]] comm="glxgears", pid=448, minor=128
Mar 14 18:55:47 buildroot user.debug kernel: [36000.051068] [drm:drm_ioctl [drm]] comm="glxgears" pid=448, dev=0xe280, auth=1, DRM_IOCTL_VERSION
Mar 14 18:55:47 buildroot user.debug kernel: [36000.051279] [drm:drm_ioctl [drm]] comm="glxgears" pid=448, dev=0xe280, auth=1, DRM_IOCTL_VERSION
Mar 14 18:55:47 buildroot user.debug kernel: [36000.051502] [drm:drm_ioctl [drm]] comm="glxgears" pid=448, dev=0xe280, auth=1, DRM_IOCTL_GET_UNIQUE
Mar 14 18:55:47 buildroot user.debug kernel: [36000.051704] [drm:drm_ioctl_permit [drm]] DRM_RENDER_ALLOW
Mar 14 18:55:47 buildroot user.debug kernel: [36000.051905] [drm:drm_ioctl [drm]] comm="glxgears", pid=448, ret=-13
...snip...
Mar 14 18:55:47 buildroot user.debug kernel: [36000.121036] [drm:drm_ioctl [drm]] comm="glxgears" pid=448, dev=0xe280, auth=1, DRM_IOCTL_GEM_OPEN
Mar 14 18:55:47 buildroot user.debug kernel: [36000.121241] [drm:drm_ioctl_permit [drm]] DRM_RENDER_ALLOW
Mar 14 18:55:47 buildroot user.debug kernel: [36000.121433] [drm:drm_ioctl [drm]] comm="Xorg" pid=237, dev=0xe280, auth=1, V3D_MMAP_BO
Mar 14 18:55:47 buildroot user.debug kernel: [36000.121635] [drm:drm_ioctl [drm]] comm="glxgears", pid=448, ret=-13
Mar 14 18:55:47 buildroot user.debug kernel: [36000.121825] [drm:drm_ioctl [drm]] comm="Xorg" pid=237, dev=0xe280, auth=1, V3D_WAIT_BO
Mar 14 18:55:47 buildroot user.debug kernel: [36000.122071] [drm:drm_ioctl [drm]] comm="Xorg" pid=237, dev=0xe280, auth=1, V3D_SUBMIT_CL

</pre>
  </body>
</html>