On 10/31/18 9:50 AM, Hans de Goede wrote: > Hi, > > On 31-10-18 16:51, Randy Dunlap wrote: >> On 10/30/18 8:59 PM, Stephen Rothwell wrote: >>> Hi all, >>> >>> Please do not add any v4.21/v5.1 code to your linux-next included trees >>> until after the merge window closes. >>> >>> Changes since 20181030: >>> >> >> >> on i386: >> >> ld: drivers/virt/vboxguest/vboxguest_core.o: in function `vbg_ioctl_hgcm_call': >> vboxguest_core.c:(.text+0x212b): undefined reference to `vbg_hgcm_call32' > > Are you perhaps using weird compiler options? Nope, just whatever kbuild gives me. I could suspect gcc v4.8.5, although I have been using it for quite awhile now. > This call should be optimized out on i386 (and we rely on calls being > removed be dead code elimination to avoid #ifdefs in various places, > iow this is a normal thing to rely on) : > > First we have: > > bool f32bit = false; > > ... > > switch (req_no_size) { > #ifdef CONFIG_COMPAT > case VBG_IOCTL_HGCM_CALL_32(0): > f32bit = true; > /* Fall through */ > #endif > case VBG_IOCTL_HGCM_CALL(0): > return vbg_ioctl_hgcm_call(gdev, session, f32bit, data); > } > > And then we also have: > > static int vbg_ioctl_hgcm_call(struct vbg_dev *gdev, > struct vbg_session *session, bool f32bit, > struct vbg_ioctl_hgcm_call *call) > { > ... > > if (f32bit) > ret = vbg_hgcm_call32(gdev, client_id, > call->function, call->timeout_ms, > VBG_IOCTL_HGCM_CALL_PARMS32(call), > call->parm_count, &call->hdr.rc); > else > ret = vbg_hgcm_call(gdev, client_id, > call->function, call->timeout_ms, > VBG_IOCTL_HGCM_CALL_PARMS(call), > call->parm_count, &call->hdr.rc); > } > > So on i386 CONFIG_COMPAT is never set, this f32bit is a 0 const > and the compiler removes the if branch of the if ... else ... > > This has been upstream like this since 4.16 without any problems sofar. That's nice. Here's what building with V=1 tells me for vboxguest_core.c: gcc -Wp,-MD,drivers/virt/vboxguest/.vboxguest_core.o.d -nostdinc -isystem /usr/lib64/gcc/x86_64-suse-linux/4.8/include -I../arch/x86/include -I./arch/x86/include/generated -I../include -I./include -I../arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I../include/uapi -I./include/generated/uapi -include ../include/linux/kconfig.h -include ../include/linux/compiler_types.h -I../drivers/virt/vboxguest -Idrivers/virt/vboxguest -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -fno-PIE -DCC_HAVE_ASM_GOTO -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -m32 -msoft-float -mregparm=3 -freg-struct-return -fno-pic -mpreferred-stack-boundary=2 -march=i586 -Wa,-mtune=generic32 -ffreestanding -maccumulate-outgoing-args -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -DCONFIG_AS_AVX512=1 -DCONFIG_AS_SHA1_NI=1 -DCONFIG_AS_SHA256_NI=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -Wa,arch/x86/kernel/macros.s -Wa,- -fno-delete-null-pointer-checks -Og -Wno-maybe-uninitialized -Wno-maybe-uninitialized --param=allow-store-data-races=0 -fno-reorder-blocks -fno-ipa-cp-clone -fno-partial-inlining -Wframe-larger-than=1024 -fno-stack-protector -Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-var-tracking-assignments -fno-inline-functions -fno-inline-small-functions -fno-inline-functions-called-once -pg -fno-inline-functions-called-once -Wdeclaration-after-statement -Wvla -Wno-pointer-sign -fno-strict-overflow -fno-merge-all-constants -fmerge-constants -fno-stack-check -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -DKBUILD_BASENAME='"vboxguest_core"' -DKBUILD_MODNAME='"vboxguest"' -c -o drivers/virt/vboxguest/.tmp_vboxguest_core.o ../drivers/virt/vboxguest/vboxguest_core.c thanks. -- ~Randy