Opened 4 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 , 4 years ago
| Component: | guest additions → other |
|---|---|
| Owner: | set to |
| Status: | new → accepted |
comment:2 by , 4 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
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