* gnu/packages/patches/libdrm-symbol-check.patch: Delete file. * gnu/packages/patches/libdrm-realpath-virtio.patch: New file. * gnu/local.mk (dist_patch_DATA): Adjust accordingly. * gnu/packages/xdisorg.scm (libdrm): Update to 2.4.101. [source](uri): Adjust for new .tar.xz tarball. [source](patches): Adjust patch list as above.
		
			
				
	
	
		
			42 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| Only check for for relative path on virtio devices.  Otherwise it could
 | |
| break driver loading in some circumstances, notably the IceCat sandbox.
 | |
| 
 | |
| https://gitlab.freedesktop.org/mesa/drm/-/issues/39
 | |
| 
 | |
| Taken from upstream:
 | |
| https://gitlab.freedesktop.org/mesa/drm/-/commit/57df07572ce45a1b60bae6fb89770388d3abd6dd
 | |
| 
 | |
| diff --git a/xf86drm.c b/xf86drm.c
 | |
| --- a/xf86drm.c
 | |
| +++ b/xf86drm.c
 | |
| @@ -3103,15 +3103,18 @@ static int drmParseSubsystemType(int maj, int min)
 | |
|      int subsystem_type;
 | |
|  
 | |
|      snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device", maj, min);
 | |
| -    if (!realpath(path, real_path))
 | |
| -        return -errno;
 | |
| -    snprintf(path, sizeof(path), "%s", real_path);
 | |
|  
 | |
|      subsystem_type = get_subsystem_type(path);
 | |
| +    /* Try to get the parent (underlying) device type */
 | |
|      if (subsystem_type == DRM_BUS_VIRTIO) {
 | |
| +        /* Assume virtio-pci on error */
 | |
| +        if (!realpath(path, real_path))
 | |
| +            return DRM_BUS_VIRTIO;
 | |
|          strncat(path, "/..", PATH_MAX);
 | |
|          subsystem_type = get_subsystem_type(path);
 | |
| -    }
 | |
| +        if (subsystem_type < 0)
 | |
| +            return DRM_BUS_VIRTIO;
 | |
| +     }
 | |
|      return subsystem_type;
 | |
|  #elif defined(__OpenBSD__) || defined(__DragonFly__) || defined(__FreeBSD__)
 | |
|      return DRM_BUS_PCI;
 | |
| @@ -3920,6 +3923,7 @@ process_device(drmDevicePtr *device, const char *d_name,
 | |
|  
 | |
|      switch (subsystem_type) {
 | |
|      case DRM_BUS_PCI:
 | |
| +    case DRM_BUS_VIRTIO:
 | |
|          return drmProcessPciDevice(device, node, node_type, maj, min,
 | |
|                                     fetch_deviceinfo, flags);
 | |
|      case DRM_BUS_USB:
 |