Trying to build evdi-dkms on the latest 5.11 kernel (on hirsute) returns the following build errors:
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_modeset.c:167:20: error: initialization of ‘void (*)(struct drm_c
rtc *, struct drm_atomic_state *)’ from incompatible pointer type ‘void (*)(struct drm_crtc *, struct drm_
crtc_state *)’ [-Werror=incompatible-pointer-types]
167 | .atomic_flush = evdi_crtc_atomic_flush,
| ^~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_modeset.c:167:20: note: (near initialization for ‘evdi_helper_fun
cs.atomic_flush’)
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:90:3: error: ‘struct drm_driver’ has no member named ‘precl
ose’; did you mean ‘postclose’?
90 | .preclose = evdi_driver_preclose,
| ^~~~~~~~
| postclose
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:90:14: error: initialization of ‘void (*)(struct drm_device
*)’ from incompatible pointer type ‘void (*)(struct drm_device *, struct drm_file *)’ [-Werror=incompatib
le-pointer-types]
90 | .preclose = evdi_driver_preclose,
| ^~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:90:14: note: (near initialization for ‘driver.release’)
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:96:3: error: ‘struct drm_driver’ has no member named ‘gem_f
ree_object_unlocked’
96 | .gem_free_object_unlocked = evdi_gem_free_object,
| ^~~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:96:30: error: initialization of ‘void (*)(struct drm_device
*)’ from incompatible pointer type ‘void (*)(struct drm_gem_object *)’ [-Werror=incompatible-pointer-type
s]
96 | .gem_free_object_unlocked = evdi_gem_free_object,
| ^~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:96:30: note: (near initialization for ‘driver.lastclose’)
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:100:3: error: ‘struct drm_driver’ has no member named ‘gem_
vm_ops’
100 | .gem_vm_ops = &evdi_gem_vm_ops,
| ^~~~~~~~~~
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:100:16: error: initialization of ‘void (*)(struct drm_devic
e *)’ from incompatible pointer type ‘const struct vm_operations_struct *’ [-Werror=incompatible-pointer-t
ypes]
100 | .gem_vm_ops = &evdi_gem_vm_ops,
| ^
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:100:16: note: (near initialization for ‘driver.unload’)
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:114:3: error: ‘struct drm_driver’ has no member named ‘gem_prime_export’; did you mean ‘gem_prime_import’?
114 | .gem_prime_export = drm_gem_prime_export,
| ^~~~~~~~~~~~~~~~
| gem_prime_import
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:114:22: error: initialization of ‘int (*)(struct drm_device *, struct drm_file *, int, uint32_t *)’ {aka ‘int (*)(struct drm_device *, struct drm_file *, int, unsigned int *)’} from incompatible pointer type ‘struct dma_buf * (*)(struct drm_gem_object *, int)’ [-Werror=incompatible-pointer-types]
114 | .gem_prime_export = drm_gem_prime_export,
| ^~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:114:22: error: initialization of ‘int (*)(struct drm_device *, struct drm_file *, int, uint32_t *)’ {aka ‘int (*)(struct drm_device *, struct drm_file *, int, unsigned int *)’} from incompatible pointer type ‘struct dma_buf * (*)(struct drm_gem_object *, int)’ [-Werror=incompatible-pointer-types]
114 | .gem_prime_export = drm_gem_prime_export,
| ^~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:114:22: note: (near initialization for ‘driver.prime_fd_to_handle’)
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:115:3: error: ‘struct drm_driver’ has no member named ‘gem_prime_get_sg_table’; did you mean ‘gem_prime_import_sg_table’?
115 | .gem_prime_get_sg_table = evdi_prime_get_sg_table,
| ^~~~~~~~~~~~~~~~~~~~~~
| gem_prime_import_sg_table
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:115:28: error: initialization of ‘struct drm_gem_object * (*)(struct drm_device *, struct dma_buf *)’ from incompatible pointer type ‘struct sg_table * (*)(struct drm_gem_object *)’ [-Werror=incompatible-pointer-types]
115 | .gem_prime_get_sg_table = evdi_prime_get_sg_table,
| ^~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:115:28: note: (near initialization for ‘driver.gem_prime_import’)
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:118:3: error: ‘struct drm_driver’ has no member named ‘enable_vblank’
118 | .enable_vblank = evdi_enable_vblank,
| ^~~~~~~~~~~~~
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:118:19: error: initialization of ‘int (*)(struct drm_gem_object *, struct vm_area_struct *)’ from incompatible pointer type ‘int (*)(struct drm_device *, unsigned int)’ [-Werror=incompatible-pointer-types]
118 | .enable_vblank = evdi_enable_vblank,
| ^~~~~~~~~~~~~~~~~~
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:118:19: note: (near initialization for ‘driver.gem_prime_mmap’)
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:119:3: error: ‘struct drm_driver’ has no member named ‘disable_vblank’
119 | .disable_vblank = evdi_disable_vblank,
| ^~~~~~~~~~~~~~
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:119:20: error: initialization of ‘int (*)(struct drm_file *, struct drm_device *, struct drm_mode_create_dumb *)’ from incompatible pointer type ‘void (*)(struct drm_device *, unsigned int)’ [-Werror=incompatible-pointer-types]
119 | .disable_vblank = evdi_disable_vblank,
| ^~~~~~~~~~~~~~~~~~~
/var/lib/dkms/evdi/1.7.0+dfsg/build/evdi_drv.c:119:20: note: (near initialization for ‘driver.dumb_create’)
cc1: some warnings being treated as errors
```
It has been a known issue for a while: https:/ /github. com/DisplayLink /evdi/issues/ 249
The trouble is we can patch and build it against 5.11 and it works at first, but it freezes the system if you rearrange the layout, change the resolution, unplug the screen, etc.