Re: [PATCH v2 1/1] mshv: Add conditional VMBus dependency
From: Wei Liu
Date: Wed May 27 2026 - 18:11:45 EST
On Tue, May 26, 2026 at 07:13:04AM -0700, Michael Kelley wrote:
> From: Michael Kelley <mhklinux@xxxxxxxxxxx>
>
> When the VMBus driver is not part of the kernel (CONFIG_HYPERV_VMBUS=n),
> the MSHV root driver fails to link:
>
> ERROR: modpost: "hv_vmbus_exists" [drivers/hv/mshv_root.ko] undefined!
>
> Fix this while meeting these requirements:
> * It must be possible to include the MSHV root driver without the
> VMBus driver. In such case, the MSHV root driver can be built-in
> to the kernel image, or it can be built as a separate module.
> * If both the MSHV root driver and the VMBus driver are present, the
> MSHV root driver and VMBus driver can both be built-in, or they can
> both be separate modules. Or the MSHV root driver can be a module
> while the VMBus driver can be built-in, but the reverse is
> disallowed. Regardless of the build choices, the VMBus driver must
> be loaded before the MSHV driver in order for the SynIC to be
> managed properly (see comments in the MSHV SynIC code).
>
> The fix has two parts:
> * Add a Kconfig entry for MSHV_ROOT to depend on HYPERV_VMBUS if
> HYPERV_VMBUS is present. The entry disallows MSHV_ROOT being
> built-in when HYPERV_VMBUS is a module, but without requiring that
> HYPERV_VMBUS be built.
> * Add a stub implementation of hv_vmbus_exists() for when the
> VMBus driver is not present so that the MSHV root driver has
> no module dependency on VMBus. When the VMBus driver *is*
> present, the module dependency ensures that the VMBus driver
> loads first when both are built as modules.
>
> Existing code ensures that the VMBus driver loads first if it is
> built-in. The VMBus driver uses subsys_initcall(), which is
> initcall level 4. The MSHV root driver uses module_init(), which
> becomes device_init() when built-in, and device_init() is
> initcall level 6.
>
> Reported-by: Arnd Bergmann <arnd@xxxxxxxx>
> Closes: https://lore.kernel.org/all/20260520074044.923728-1-arnd@xxxxxxxxxx/
> Signed-off-by: Michael Kelley <mhklinux@xxxxxxxxxxx>
> Acked-by: Arnd Bergmann <arnd@xxxxxxxx>
> Reviewed-by: Jork Loeser <jloeser@xxxxxxxxxxxxxxxxxxx>
Applied. Thanks everyone.