On Tue, May 20, 2025 at 01:30:04PM +0200, Magnus Kulke wrote:
> Implement initial interrupt handling logic in the MSHV backend. This
> includes management of MSI and un/registering of irqfd mechanisms.
> 
> Signed-off-by: Magnus Kulke <magnusku...@linux.microsoft.com>
> ---
[...]
> +int mshv_request_interrupt(int vm_fd, uint32_t interrupt_type, uint32_t 
> vector,
> +                           uint32_t vp_index, bool logical_dest_mode,
> +                           bool level_triggered)
> +{
> +    int ret;
> +
> +    if (vector == 0) {
> +        /* TODO: why do we receive this? */

You must have seen this in real life, right? We need to convince
ourselves why this is okay.

Thanks,
Wei.

> +        return 0;
> +    }
> +
> +    union hv_interrupt_control control = {
> +        .interrupt_type = interrupt_type,
> +        .level_triggered = level_triggered,
> +        .logical_dest_mode = logical_dest_mode,
> +        .rsvd = 0,
> +    };
> +
> +    struct hv_input_assert_virtual_interrupt arg = {0};
> +    arg.control = control;
> +    arg.dest_addr = (uint64_t)vp_index;
> +    arg.vector = vector;
> +
> +    struct mshv_root_hvcall args = {0};
> +    args.code   = HVCALL_ASSERT_VIRTUAL_INTERRUPT;
> +    args.in_sz  = sizeof(arg);
> +    args.in_ptr = (uint64_t)&arg;
> +
> +    ret = mshv_hvcall(vm_fd, &args);
> +    if (ret < 0) {
> +        error_report("Failed to request interrupt");
> +        return -errno;
> +    }
> +    return 0;
> +}
> +

Reply via email to