Opened 11 years ago
Closed 11 years ago
#11984 closed defect (fixed)
VirtualBox Guest Additions' vboxvideo_drm.c does not compile under SUSE Linux Enterprise Server (SLES) 11 SP3 -> fixed in releases later than 4.2
| Reported by: | Fate | Owned by: | |
|---|---|---|---|
| Component: | guest additions | Version: | VirtualBox 4.2.16 |
| Keywords: | sles sles11 sles11sp3 vboxvideo drm | Cc: | |
| Guest type: | Linux | Host type: | other |
Description
As was the case with RHEL in #11586, SUSE seems to have backported DRM code in SUSE Linux Enterprise Server (SLES) 11 SP3. Thus, without the attached patch vboxvideo_drm.c won't compile:
sles11sp3:/tmp/vbox.0.orig # make make KBUILD_VERBOSE=1 CONFIG_MODULE_SIG= -C /lib/modules/3.0.76-0.11-default/build SUBDIRS=/tmp/vbox.0.orig SRCROOT=/tmp/vbox.0.orig modules make[1]: Entering directory `/usr/src/linux-3.0.76-0.11-obj/x86_64/default' make -C ../../../linux-3.0.76-0.11 O=/usr/src/linux-3.0.76-0.11-obj/x86_64/default/. modules make -C /usr/src/linux-3.0.76-0.11-obj/x86_64/default \ KBUILD_SRC=/usr/src/linux-3.0.76-0.11 \ KBUILD_EXTMOD="/tmp/vbox.0.orig" -f /usr/src/linux-3.0.76-0.11/Makefile \ modules test -e include/generated/autoconf.h -a -e include/config/auto.conf || ( \ echo; \ echo " ERROR: Kernel configuration is invalid."; \ echo " include/generated/autoconf.h or include/config/auto.conf are missing.";\ echo " Run 'make oldconfig && make prepare' on kernel src to fix it."; \ echo; \ /bin/false) mkdir -p /tmp/vbox.0.orig/.tmp_versions ; rm -f /tmp/vbox.0.orig/.tmp_versions/* make -f /usr/src/linux-3.0.76-0.11/scripts/Makefile.build obj=/tmp/vbox.0.orig gcc -Wp,-MD,/tmp/vbox.0.orig/.vboxvideo_drm.o.d -nostdinc -isystem /usr/lib64/gcc/x86_64-suse-linux/4.3/include -I/usr/src/linux-3.0.76-0.11/arch/x86/include -Iarch/x86/include/generated -Iinclude -I/usr/src/linux-3.0.76-0.11/include -include include/generated/autoconf.h -I/tmp/vbox.0.orig -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m64 -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_AVX=1 -pipe -Wno-sign-compare -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-stack-protector -fomit-frame-pointer -fasynchronous-unwind-tables -g -fno-inline-functions-called-once -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fshort-wchar -include /tmp/vbox.0.orig/include/VBox/VBoxGuestMangling.h -I/lib/modules/3.0.76-0.11-default/build/include -I/tmp/vbox.0.orig/ -I/tmp/vbox.0.orig/include -I/tmp/vbox.0.orig/r0drv/linux -I/tmp/vbox.0.orig/vboxvideo/ -I/tmp/vbox.0.orig/vboxvideo/include -I/tmp/vbox.0.orig/vboxvideo/r0drv/linux -D__KERNEL__ -DMODULE -DRT_OS_LINUX -DIN_RING0 -DIN_RT_R0 -DIN_SUP_R0 -DVBOX -DVBOX_WITH_HGCM -DLOG_TO_BACKDOOR -DIN_MODULE -DIN_GUEST_R0 -DRT_NO_EXPORT_SYMBOL -DRT_ARCH_AMD64 -DVBOX_WITH_64_BITS_GUESTS -DMODULE -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(vboxvideo_drm)" -D"KBUILD_MODNAME=KBUILD_STR(vboxvideo)" -c -o /tmp/vbox.0.orig/.tmp_vboxvideo_drm.o /tmp/vbox.0.orig/vboxvideo_drm.c /tmp/vbox.0.orig/vboxvideo_drm.c:121: error: unknown field ‘reclaim_buffers’ specified in initializer /tmp/vbox.0.orig/vboxvideo_drm.c:121: warning: initialization from incompatible pointer type /tmp/vbox.0.orig/vboxvideo_drm.c:130: warning: braces around scalar initializer /tmp/vbox.0.orig/vboxvideo_drm.c:130: warning: (near initialization for ‘driver.fops’) /tmp/vbox.0.orig/vboxvideo_drm.c:131: error: field name not in record or union initializer /tmp/vbox.0.orig/vboxvideo_drm.c:131: error: (near initialization for ‘driver.fops’) /tmp/vbox.0.orig/vboxvideo_drm.c:131: warning: initialization from incompatible pointer type /tmp/vbox.0.orig/vboxvideo_drm.c:132: error: field name not in record or union initializer /tmp/vbox.0.orig/vboxvideo_drm.c:132: error: (near initialization for ‘driver.fops’) /tmp/vbox.0.orig/vboxvideo_drm.c:132: warning: excess elements in scalar initializer /tmp/vbox.0.orig/vboxvideo_drm.c:132: warning: (near initialization for ‘driver.fops’) /tmp/vbox.0.orig/vboxvideo_drm.c:133: error: field name not in record or union initializer /tmp/vbox.0.orig/vboxvideo_drm.c:133: error: (near initialization for ‘driver.fops’) /tmp/vbox.0.orig/vboxvideo_drm.c:133: warning: excess elements in scalar initializer /tmp/vbox.0.orig/vboxvideo_drm.c:133: warning: (near initialization for ‘driver.fops’) /tmp/vbox.0.orig/vboxvideo_drm.c:137: error: field name not in record or union initializer /tmp/vbox.0.orig/vboxvideo_drm.c:137: error: (near initialization for ‘driver.fops’) /tmp/vbox.0.orig/vboxvideo_drm.c:137: warning: excess elements in scalar initializer /tmp/vbox.0.orig/vboxvideo_drm.c:137: warning: (near initialization for ‘driver.fops’) /tmp/vbox.0.orig/vboxvideo_drm.c:141: error: field name not in record or union initializer /tmp/vbox.0.orig/vboxvideo_drm.c:141: error: (near initialization for ‘driver.fops’) /tmp/vbox.0.orig/vboxvideo_drm.c:141: warning: excess elements in scalar initializer /tmp/vbox.0.orig/vboxvideo_drm.c:141: warning: (near initialization for ‘driver.fops’) /tmp/vbox.0.orig/vboxvideo_drm.c:142: error: field name not in record or union initializer /tmp/vbox.0.orig/vboxvideo_drm.c:142: error: (near initialization for ‘driver.fops’) /tmp/vbox.0.orig/vboxvideo_drm.c:142: warning: excess elements in scalar initializer /tmp/vbox.0.orig/vboxvideo_drm.c:142: warning: (near initialization for ‘driver.fops’) /tmp/vbox.0.orig/vboxvideo_drm.c:143: error: field name not in record or union initializer /tmp/vbox.0.orig/vboxvideo_drm.c:143: error: (near initialization for ‘driver.fops’) /tmp/vbox.0.orig/vboxvideo_drm.c:143: warning: excess elements in scalar initializer /tmp/vbox.0.orig/vboxvideo_drm.c:143: warning: (near initialization for ‘driver.fops’) make[4]: *** [/tmp/vbox.0.orig/vboxvideo_drm.o] Error 1 make[3]: *** [_module_/tmp/vbox.0.orig] Error 2 make[2]: *** [sub-make] Error 2 make[1]: *** [all] Error 2 make[1]: Leaving directory `/usr/src/linux-3.0.76-0.11-obj/x86_64/default' make: *** [vboxvideo] Error 2
As can be seen in the attached patch, just defining DRM_RHEL63 does not suffice. And because SUSE seems to have abandoned the SLE_VERSION and SLE_VERSION_CODE macros in SLES11 which they used to have just as Red Hat, I took appropriate definitions from Linux's igb network driver.
Attachments (1)
Change History (4)
by , 11 years ago
| Attachment: | vboxvideo_drm.c-sles11sp3.diff added |
|---|
comment:1 by , 11 years ago
I have made local changes based on the logic in your patch. Could you please test these changes (against the version in our Subversion repository)?
Index: src/VBox/Additions/linux/drm/vboxvideo_drm.c
===================================================================
--- src/VBox/Additions/linux/drm/vboxvideo_drm.c (revision 87875)
+++ src/VBox/Additions/linux/drm/vboxvideo_drm.c (working copy)
@@ -68,10 +68,10 @@
# define DRM_RHEL61
# endif
# if RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(6, 3)
-# define DRM_RHEL63
+# define DRM_FOPS_AS_POINTER
# endif
# if RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(6, 4)
-# define DRM_RHEL64
+# define DRM_NO_RECLAIM_BUFFERS
# endif
# endif
# endif
@@ -82,11 +82,21 @@
# ifndef RHEL_RELEASE_CODE
# if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 39) && LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0)
# if defined(DRM_MODE_OBJECT_PLANE) && defined(DRM_IOCTL_MODE_ADDFB2)
-# define DRM_DEBIAN_34ON32
+# define DRM_FOPS_AS_POINTER
# endif
# endif
# endif
+#ifdef CONFIG_SUSE_KERNEL
+/* This is to cover the SLES 11 SP3 kernel back-ports. */
+# if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,61)
+# if LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0)
+# define DRM_FOPS_AS_POINTER
+# define DRM_NO_RECLAIM_BUFFERS
+# endif
+# endif
+#endif
+
static struct pci_device_id pciidlist[] = {
vboxvideo_PCI_IDS
};
@@ -101,7 +111,7 @@
return 0;
#endif
}
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0) || defined(DRM_RHEL63) || defined(DRM_DEBIAN_34ON32)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0) || defined(DRM_FOPS_AS_POINTER)
/* since linux-3.3.0-rc1 drm_driver::fops is pointer */
static struct file_operations driver_fops =
{
@@ -119,7 +129,7 @@
{
/* .driver_features = DRIVER_USE_MTRR, */
.load = vboxvideo_driver_load,
-#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0) && !defined(DRM_RHEL64)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0) && !defined(DRM_NO_RECLAIM_BUFFERS)
.reclaim_buffers = drm_core_reclaim_buffers,
#endif
/* As of Linux 2.6.37, always the internal functions are used. */
@@ -127,7 +137,7 @@
.get_map_ofs = drm_core_get_map_ofs,
.get_reg_ofs = drm_core_get_reg_ofs,
#endif
-# if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0) && !defined(DRM_RHEL63) && !defined(DRM_DEBIAN_34ON32)
+# if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0) && !defined(DRM_FOPS_AS_POINTER)
.fops =
{
.owner = THIS_MODULE,
@@ -144,7 +154,7 @@
.poll = drm_poll,
.fasync = drm_fasync,
},
-#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0) || defined(DRM_RHEL63) || defined(DRM_DEBIAN_34ON32) */
+#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0) || defined(DRM_FOPS_AS_POINTER) */
.fops = &driver_fops,
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 39) && !defined(DRM_RHEL61)
comment:2 by , 11 years ago
| Summary: | VirtualBox Guest Additions' vboxvideo_drm.c does not compile under SUSE Linux Enterprise Server (SLES) 11 SP3 → VirtualBox Guest Additions' vboxvideo_drm.c does not compile under SUSE Linux Enterprise Server (SLES) 11 SP3 -> fixed in releases later than 4.2 |
|---|
No response, so I committed the patch I posted above and we will see.
comment:3 by , 11 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |


Patch to make vboxvideo_drm.c compile under SLES11 SP3