Re: linux-next: Tree for Oct 31 (vboxguest)

From: Randy Dunlap
Date: Wed Oct 31 2018 - 15:07:47 EST


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