Opened 5 years ago
Closed 4 years ago
#19521 closed defect (fixed)
Can't build kernel modules on SLES12 SP5 => fixed in SVN
Reported by: | TomashT | Owned by: | Frank Batschulat (Oracle) |
---|---|---|---|
Component: | other | Version: | VirtualBox 6.1.6 |
Keywords: | SLES12SP5 | Cc: | |
Guest type: | Linux | Host type: | all |
Description
Install / build guest addition in SLES12 SP5 guest will fail (see below):
... /tmp/vbox.0/r0drv/linux/waitqueue-r0drv-linux.h:56:5: error: unknown type name ‘wait_queue_t’ wait_queue_t WaitQE; ^ In file included from /usr/src/linux-4.12.14-122.17/include/linux/mmzone.h:9:0, from /usr/src/linux-4.12.14-122.17/include/linux/gfp.h:5, from /usr/src/linux-4.12.14-122.17/include/linux/slab.h:14, from /tmp/vbox.0/r0drv/linux/the-linux-kernel.h:85, from /tmp/vbox.0/combined-os-specific.c:28: /tmp/vbox.0/r0drv/linux/waitqueue-r0drv-linux.h: In function ‘rtR0SemLnxWaitInit’: /usr/src/linux-4.12.14-122.17/include/linux/wait.h:1002:9: error: request for member ‘private’ in something not a structure or union (wait)->private = current; \ ^ /tmp/vbox.0/r0drv/linux/waitqueue-r0drv-linux.h:187:5: note: in expansion of macro ‘init_wait’ init_wait((&pWait->WaitQE)); ^ /usr/src/linux-4.12.14-122.17/include/linux/wait.h:1003:9: error: request for member ‘func’ in something not a structure or union (wait)->func = autoremove_wake_function; \ ^ /tmp/vbox.0/r0drv/linux/waitqueue-r0drv-linux.h:187:5: note: in expansion of macro ‘init_wait’ init_wait((&pWait->WaitQE)); ^ /usr/src/linux-4.12.14-122.17/include/linux/wait.h:1004:25: error: request for member ‘entry’ in something not a structure or union INIT_LIST_HEAD(&(wait)->entry); \ ^ /tmp/vbox.0/r0drv/linux/waitqueue-r0drv-linux.h:187:5: note: in expansion of macro ‘init_wait’ init_wait((&pWait->WaitQE)); ^ /usr/src/linux-4.12.14-122.17/include/linux/wait.h:1005:9: error: request for member ‘flags’ in something not a structure or union (wait)->flags = 0; \ ^ /tmp/vbox.0/r0drv/linux/waitqueue-r0drv-linux.h:187:5: note: in expansion of macro ‘init_wait’ init_wait((&pWait->WaitQE)); ^ In file included from /tmp/vbox.0/r0drv/linux/semevent-r0drv-linux.c:42:0, from /tmp/vbox.0/combined-os-specific.c:38: /tmp/vbox.0/r0drv/linux/waitqueue-r0drv-linux.h: In function ‘rtR0SemLnxWaitPrepare’: /tmp/vbox.0/r0drv/linux/waitqueue-r0drv-linux.h:211:5: warning: passing argument 2 of ‘prepare_to_wait’ from incompatible pointer type [enabled by default] prepare_to_wait(pWait->pWaitQueue, &pWait->WaitQE, pWait->iWaitState); ^ In file included from /usr/src/linux-4.12.14-122.17/include/linux/mmzone.h:9:0, from /usr/src/linux-4.12.14-122.17/include/linux/gfp.h:5, from /usr/src/linux-4.12.14-122.17/include/linux/slab.h:14, from /tmp/vbox.0/r0drv/linux/the-linux-kernel.h:85, from /tmp/vbox.0/combined-os-specific.c:28: /usr/src/linux-4.12.14-122.17/include/linux/wait.h:983:6: note: expected ‘struct wait_queue_entry *’ but argument is of type ‘int *’ void prepare_to_wait(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int state); ^ In file included from /tmp/vbox.0/r0drv/linux/semevent-r0drv-linux.c:42:0, from /tmp/vbox.0/combined-os-specific.c:38: /tmp/vbox.0/r0drv/linux/waitqueue-r0drv-linux.h: In function ‘rtR0SemLnxWaitDelete’: /tmp/vbox.0/r0drv/linux/waitqueue-r0drv-linux.h:275:5: warning: passing argument 2 of ‘finish_wait’ from incompatible pointer type [enabled by default] finish_wait(pWait->pWaitQueue, &pWait->WaitQE); ^ In file included from /usr/src/linux-4.12.14-122.17/include/linux/mmzone.h:9:0, from /usr/src/linux-4.12.14-122.17/include/linux/gfp.h:5, from /usr/src/linux-4.12.14-122.17/include/linux/slab.h:14, from /tmp/vbox.0/r0drv/linux/the-linux-kernel.h:85, from /tmp/vbox.0/combined-os-specific.c:28: /usr/src/linux-4.12.14-122.17/include/linux/wait.h:986:6: note: expected ‘struct wait_queue_entry *’ but argument is of type ‘int *’ void finish_wait(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry); ^ ./tools/objtool/objtool orc generate --module --no-fp --retpoline "/tmp/vbox.0/.tmp_VBoxGuest-linux.o"; /usr/src/linux-4.12.14-122.17/scripts/Makefile.build:323: recipe for target '/tmp/vbox.0/combined-os-specific.o' failed make[4]: *** [/tmp/vbox.0/combined-os-specific.o] Error 1 make[4]: *** Waiting for unfinished jobs.... ./tools/objtool/objtool orc generate --module --no-fp --retpoline "/tmp/vbox.0/.tmp_VBoxGuest.o"; if [ /tmp/vbox.0/VBoxGuest.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount "/tmp/vbox.0/VBoxGuest.o"; fi; if [ /tmp/vbox.0/VBoxGuest-linux.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount "/tmp/vbox.0/VBoxGuest-linux.o"; fi; ./tools/objtool/objtool orc generate --module --no-fp --retpoline "/tmp/vbox.0/.tmp_combined-agnostic.o"; if [ /tmp/vbox.0/combined-agnostic.o != "scripts/mod/empty.o" ]; then ./scripts/recordmcount "/tmp/vbox.0/combined-agnostic.o"; fi; /usr/src/linux-4.12.14-122.17/Makefile:1564: recipe for target '_module_/tmp/vbox.0' failed make[3]: *** [_module_/tmp/vbox.0] Error 2 Makefile:152: recipe for target 'sub-make' failed make[2]: *** [sub-make] Error 2 Makefile:24: recipe for target '__sub-make' failed make[1]: *** [__sub-make] Error 2 /tmp/vbox.0/Makefile-footer.gmk:114: recipe for target 'vboxguest' failed make: *** [vboxguest] Error 2 VBoxClient: info: Try 'VBoxClient --help' for more information modprobe vboxguest failed
It seems that this issue is the same like it was in SLES12 SP4. For new SLES releases "wait_queue_t" must be replaced for "wait_queue_entry_t".
As a workaround I replaced "KERNEL_VERSION(4, 13, 0)" for "KERNEL_VERSION(4, 12, 0)" in waitqueue-r0drv-linux.h:
/** * Kernel mode Linux wait state structure. */ typedef struct RTR0SEMLNXWAIT { /** The wait queue entry. */ #if LINUX_VERSION_CODE > KERNEL_VERSION(4, 12, 0) \ || defined(CONFIG_SUSE_VERSION) && CONFIG_SUSE_VERSION == 12 && CONFIG_SUSE_PATCHLEVEL == 4 \ || defined(CONFIG_SUSE_VERSION) && CONFIG_SUSE_VERSION == 15 wait_queue_entry_t WaitQE; #else wait_queue_t WaitQE; #endif
After restart of machine guest addition works properly. Please be so kind and add support for SLES12 SP5.
Attachments (1)
Change History (7)
comment:1 by , 5 years ago
Component: | guest additions → other |
---|---|
Owner: | set to |
Status: | new → accepted |
comment:2 by , 5 years ago
by , 4 years ago
Attachment: | sles125diffs.txt added |
---|
comment:3 by , 4 years ago
attached diffs fix all the problems that are encountered on a SLES 12.5 guest.
Just to make sure, I also tested it against the previous version SLES 12.4 ( 4.12.14-94.41-default ) and it does work there as well.
comment:4 by , 4 years ago
the fix has been commited to trunk, revision: r139773
comment:5 by , 4 years ago
the following test builds will have the fix:
trunk:
https://www.virtualbox.org/download/testcase/VirtualBox-6.1.97-139787-Linux_amd64.run
https://www.virtualbox.org/download/testcase/VBoxGuestAdditions_6.1.97-139787.iso
6.1.X:
https://www.virtualbox.org/download/testcase/VirtualBox-6.1.13-139785-Linux_amd64.run
https://www.virtualbox.org/download/testcase/VBoxGuestAdditions_6.1.13-139774.iso
comment:6 by , 4 years ago
Resolution: | → fixed |
---|---|
Status: | accepted → closed |
Summary: | Can't build kernel modules on SLES12 SP5 → Can't build kernel modules on SLES12 SP5 => fixed in SVN |
it is interesting to note, that although OpenSuse 15.1 runs the same kernel 4.12.14 it is not affected by the problem, only SLES12SP5 is:
failing SLES12SP5 : 4.12.14-122.17-default
good OpenSuse 15.1: 4.12.14-lp151.28.48