RE: [patch] Staging: hv: Fix vmbus load hang caused by wrong datapacking

From: Haiyang Zhang
Date: Mon Oct 12 2009 - 16:51:09 EST


> Can you figure out why? What is the output of gcc for both ways?
There are no build errors in either ways, I think it may be a bug in gcc handing __attribute__((packed)).

> Can you show what is fixed by this change?
Before the fix:
The command "insmod hv_vmbus.ko" hangs.
Root cause: The message data sent from Linux guest to HyperV host were not correctly packed and not recognized by HyperV host. So, the host doesn't acknowledge that the vmbus channel is set up. Then, the guest keeps on waiting for the event and hangs the insmod command.

After the fix:
The command "insmod hv_vmbus.ko" completes successfully with vmbus module loaded.

> Also note that #pragma packed is not supported by older versions of gcc,
> so I don't think that it would work at all on some compiler versions
> that are still legal to use for the kernel. But I'm not quite sure when
> it was added, so I might be wrong.
This pragma was used in older distro, such as SLES10 (kernel 2.6.16) without any problem.

>From your newer email:
> I also note that you are packing more structures here with this patch than the code before the patch had. Could that be the
> issue here? The additional structures are ones that should be packed instead?
No, the extra packed structures are not required for this bug fix. Just to make sure any future struct related to message is packed, so I put the pack() around the entire file.

Thanks,

- Haiyang
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/