Message ID | 20250307220304.247725-9-romank@linux.microsoft.com (mailing list archive) |
---|---|
State | Handled Elsewhere |
Delegated to: | Krzysztof WilczyĆski |
Headers | show |
Series | arm64: hyperv: Support Virtual Trust Level Boot | expand |
On Fri, Mar 7, 2025, at 23:03, Roman Kisel wrote: > > +static int __maybe_unused vmbus_set_irq(struct platform_device *pdev) Instead of the __maybe_unused annotation here > > +#ifndef HYPERVISOR_CALLBACK_VECTOR > + ret = vmbus_set_irq(pdev); > + if (ret) > + return ret; > +#endif > + you can use if (!__is_defined(HYPERVISOR_CALLBACK_VECTOR)) ret = vmbus_set_irq(pdev); and make it a little more readable. Arnd
On 3/8/2025 1:11 PM, Arnd Bergmann wrote: > On Fri, Mar 7, 2025, at 23:03, Roman Kisel wrote: >> >> +static int __maybe_unused vmbus_set_irq(struct platform_device *pdev) > > Instead of the __maybe_unused annotation here > >> >> +#ifndef HYPERVISOR_CALLBACK_VECTOR >> + ret = vmbus_set_irq(pdev); >> + if (ret) >> + return ret; >> +#endif >> + > > you can use > > if (!__is_defined(HYPERVISOR_CALLBACK_VECTOR)) > ret = vmbus_set_irq(pdev); > > and make it a little more readable. > Thanks you very much, will update! Very neat :) > Arnd
From: Roman Kisel <romank@linux.microsoft.com> Sent: Friday, March 7, 2025 2:03 PM > > The VMBus driver uses ACPI for interrupt assignment on > arm64 hence it won't function in the VTL mode where only > DeviceTree can be used. > > Update the VMBus driver to discover interrupt configuration > from DT. > > Signed-off-by: Roman Kisel <romank@linux.microsoft.com> > Reviewed-by: Michael Kelley <mhklinux@outlook.com> > --- > drivers/hv/vmbus_drv.c | 36 ++++++++++++++++++++++++++++++++++++ > 1 file changed, 36 insertions(+) > > diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c > index 75eb1390b45c..c8474b48dcd2 100644 > --- a/drivers/hv/vmbus_drv.c > +++ b/drivers/hv/vmbus_drv.c > @@ -2345,6 +2345,36 @@ static int vmbus_acpi_add(struct platform_device *pdev) > } > #endif > > +static int __maybe_unused vmbus_set_irq(struct platform_device *pdev) > +{ > + struct irq_data *data; > + int irq; > + irq_hw_number_t hwirq; > + > + irq = platform_get_irq(pdev, 0); > + if (irq == 0) { > + pr_err("VMBus interrupt mapping failure\n"); > + return -EINVAL; > + } > + if (irq < 0) { > + pr_err("VMBus interrupt data can't be read from DeviceTree, error %d\n", irq); > + return irq; > + } > + > + data = irq_get_irq_data(irq); > + if (!data) { > + pr_err("No interrupt data for VMBus virq %d\n", irq); > + return -ENODEV; > + } > + hwirq = irqd_to_hwirq(data); > + > + vmbus_irq = irq; > + vmbus_interrupt = hwirq; > + pr_debug("VMBus virq %d, hwirq %d\n", vmbus_irq, vmbus_interrupt); > + > + return 0; > +} > + > static int vmbus_device_add(struct platform_device *pdev) > { > struct resource **cur_res = &hyperv_mmio; > @@ -2359,6 +2389,12 @@ static int vmbus_device_add(struct platform_device *pdev) > if (ret) > return ret; > > +#ifndef HYPERVISOR_CALLBACK_VECTOR > + ret = vmbus_set_irq(pdev); > + if (ret) > + return ret; > +#endif > + > for_each_of_range(&parser, &range) { > struct resource *res; > > -- > 2.43.0 > Modulo Arnd's suggestion for avoiding the #ifndef, Reviewed-by: Michael Kelley <mhklinux@outlook.com>
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c index 75eb1390b45c..c8474b48dcd2 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c @@ -2345,6 +2345,36 @@ static int vmbus_acpi_add(struct platform_device *pdev) } #endif +static int __maybe_unused vmbus_set_irq(struct platform_device *pdev) +{ + struct irq_data *data; + int irq; + irq_hw_number_t hwirq; + + irq = platform_get_irq(pdev, 0); + if (irq == 0) { + pr_err("VMBus interrupt mapping failure\n"); + return -EINVAL; + } + if (irq < 0) { + pr_err("VMBus interrupt data can't be read from DeviceTree, error %d\n", irq); + return irq; + } + + data = irq_get_irq_data(irq); + if (!data) { + pr_err("No interrupt data for VMBus virq %d\n", irq); + return -ENODEV; + } + hwirq = irqd_to_hwirq(data); + + vmbus_irq = irq; + vmbus_interrupt = hwirq; + pr_debug("VMBus virq %d, hwirq %d\n", vmbus_irq, vmbus_interrupt); + + return 0; +} + static int vmbus_device_add(struct platform_device *pdev) { struct resource **cur_res = &hyperv_mmio; @@ -2359,6 +2389,12 @@ static int vmbus_device_add(struct platform_device *pdev) if (ret) return ret; +#ifndef HYPERVISOR_CALLBACK_VECTOR + ret = vmbus_set_irq(pdev); + if (ret) + return ret; +#endif + for_each_of_range(&parser, &range) { struct resource *res;