[PATCH hyperv-next v5 09/11] Drivers: hv: vmbus: Introduce hv_get_vmbus_root_device()
Tianyu Lan
ltykernel at gmail.com
Mon Mar 10 06:41:57 PDT 2025
On Sat, Mar 8, 2025 at 6:05 AM Roman Kisel <romank at linux.microsoft.com> wrote:
>
> The ARM64 PCI code for hyperv needs to know the VMBus root
> device, and it is private.
>
> Provide a function that returns it. Rename it from "hv_dev"
> as "hv_dev" as a symbol is very overloaded. No functional
> changes.
>
> Signed-off-by: Roman Kisel <romank at linux.microsoft.com>
Why change all device's parent to vmbus_root_device?
The ARM64 platform uses the device tree to enumerate vmbus
devices.. Can we find the root device via device tree? vmbus
code on the x86 use ACPI and it seems to work via ACPI.
> ---
> drivers/hv/vmbus_drv.c | 23 +++++++++++++++--------
> include/linux/hyperv.h | 2 ++
> 2 files changed, 17 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
> index c8474b48dcd2..7bfafe702963 100644
> --- a/drivers/hv/vmbus_drv.c
> +++ b/drivers/hv/vmbus_drv.c
> @@ -45,7 +45,8 @@ struct vmbus_dynid {
> struct hv_vmbus_device_id id;
> };
>
> -static struct device *hv_dev;
> +/* VMBus Root Device */
> +static struct device *vmbus_root_device;
>
> static int hyperv_cpuhp_online;
>
> @@ -80,9 +81,15 @@ static struct resource *fb_mmio;
> static struct resource *hyperv_mmio;
> static DEFINE_MUTEX(hyperv_mmio_lock);
>
> +struct device *hv_get_vmbus_root_device(void)
> +{
> + return vmbus_root_device;
> +}
> +EXPORT_SYMBOL_GPL(hv_get_vmbus_root_device);
> +
> static int vmbus_exists(void)
> {
> - if (hv_dev == NULL)
> + if (vmbus_root_device == NULL)
> return -ENODEV;
>
> return 0;
> @@ -861,7 +868,7 @@ static int vmbus_dma_configure(struct device *child_device)
> * On x86/x64 coherence is assumed and these calls have no effect.
> */
> hv_setup_dma_ops(child_device,
> - device_get_dma_attr(hv_dev) == DEV_DMA_COHERENT);
> + device_get_dma_attr(vmbus_root_device) == DEV_DMA_COHERENT);
> return 0;
> }
>
> @@ -1930,7 +1937,7 @@ int vmbus_device_register(struct hv_device *child_device_obj)
> &child_device_obj->channel->offermsg.offer.if_instance);
>
> child_device_obj->device.bus = &hv_bus;
> - child_device_obj->device.parent = hv_dev;
> + child_device_obj->device.parent = vmbus_root_device;
> child_device_obj->device.release = vmbus_device_release;
>
> child_device_obj->device.dma_parms = &child_device_obj->dma_parms;
> @@ -2292,7 +2299,7 @@ static int vmbus_acpi_add(struct platform_device *pdev)
> struct acpi_device *ancestor;
> struct acpi_device *device = ACPI_COMPANION(&pdev->dev);
>
> - hv_dev = &device->dev;
> + vmbus_root_device = &device->dev;
>
> /*
> * Older versions of Hyper-V for ARM64 fail to include the _CCA
> @@ -2383,7 +2390,7 @@ static int vmbus_device_add(struct platform_device *pdev)
> struct device_node *np = pdev->dev.of_node;
> int ret;
>
> - hv_dev = &pdev->dev;
> + vmbus_root_device = &pdev->dev;
>
> ret = of_range_parser_init(&parser, np);
> if (ret)
> @@ -2702,7 +2709,7 @@ static int __init hv_acpi_init(void)
> if (ret)
> return ret;
>
> - if (!hv_dev) {
> + if (!vmbus_root_device) {
> ret = -ENODEV;
> goto cleanup;
> }
> @@ -2733,7 +2740,7 @@ static int __init hv_acpi_init(void)
>
> cleanup:
> platform_driver_unregister(&vmbus_platform_driver);
> - hv_dev = NULL;
> + vmbus_root_device = NULL;
> return ret;
> }
>
> diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
> index 7f4f8d8bdf43..1f0851fde041 100644
> --- a/include/linux/hyperv.h
> +++ b/include/linux/hyperv.h
> @@ -1333,6 +1333,8 @@ static inline void *hv_get_drvdata(struct hv_device *dev)
> return dev_get_drvdata(&dev->device);
> }
>
> +struct device *hv_get_vmbus_root_device(void);
> +
> struct hv_ring_buffer_debug_info {
> u32 current_interrupt_mask;
> u32 current_read_index;
> --
> 2.43.0
>
>
--
Thanks
Tianyu Lan
More information about the linux-arm-kernel
mailing list