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?
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.
Regards,
Hans