384.59 divers, linux 4.13-rc1 and later kernel compile error with CONFIG_GCC_PLUGIN_RANDSTRUCT=y

Driver fails to compile after this commit:

commit 313dd1b629219db50cad532dba6a3b3b22ffe622
Author: Kees Cook keescook@chromium.org
Date: Fri May 5 23:37:45 2017 -0700

gcc-plugins: Add the randstruct plugin

and CONFIG_GCC_PLUGIN_RANDSTRUCT=y. Error messages:

/usr/src/valdis/NVIDIA-Linux-x86_64-381.22/kernel/nvidia-modeset/nvidia-modeset-linux.c:340:5: error: positional initialization of field in ‘struct’ de
clared with ‘designated_init’ attribute [-Werror=designated-init]
nvkms_suspend,
^~~~~~~~~~~~~
/usr/src/valdis/NVIDIA-Linux-x86_64-381.22/kernel/nvidia-modeset/nvidia-modeset-linux.c:340:5: note: (near initialization for ‘nvkms_rm_callbacks’)
/usr/src/valdis/NVIDIA-Linux-x86_64-381.22/kernel/nvidia-modeset/nvidia-modeset-linux.c:340:5: error: invalid initializer
/usr/src/valdis/NVIDIA-Linux-x86_64-381.22/kernel/nvidia-modeset/nvidia-modeset-linux.c:340:5: note: (near initialization for ‘nvkms_rm_callbacks.’)
/usr/src/valdis/NVIDIA-Linux-x86_64-381.22/kernel/nvidia-modeset/nvidia-modeset-linux.c:341:5: error: positional initialization of field in ‘struct’ de
clared with ‘designated_init’ attribute [-Werror=designated-init]
nvkms_resume
^~~~~~~~~~~~
/usr/src/valdis/NVIDIA-Linux-x86_64-381.22/kernel/nvidia-modeset/nvidia-modeset-linux.c:341:5: note: (near initialization for ‘nvkms_rm_callbacks’)

Patch for this: (Backward compatible to older kernels, so no conftest magic needed):

— nvidia-modeset/nvidia-modeset-linux.c.dist 2017-07-20 04:25:38.000000000 -0400
+++ nvidia-modeset/nvidia-modeset-linux.c 2017-08-02 14:44:22.979688575 -0400
@@ -337,8 +337,8 @@

static nvidia_modeset_rm_ops_t __rm_ops = { 0 };
static nvidia_modeset_callbacks_t nvkms_rm_callbacks = {

  • nvkms_suspend,
  • nvkms_resume
  • .suspend = nvkms_suspend,
  • .resume = nvkms_resume
    };

static int nvkms_alloc_rm(void)

v4.13-rc1-patch.txt (427 Bytes)

Damn, cut-n-pasted from the 381.22 build logfile. Same problem, same patch. :)

I can’t promise that we’ll officially support this configuration, but I filed enhancement request 1968780 to track this.