All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] Fix issues in accel/mshv ioeventfd handling
@ 2026-04-09 11:53 Aastha Rawat
  2026-04-09 11:53 ` [PATCH 1/2] accel/mshv: fix ioeventfd deassignment to forward correct datamatch value Aastha Rawat
  2026-04-09 11:53 ` [PATCH 2/2] accel/mshv: return correct errno value from ioeventfd failure Aastha Rawat
  0 siblings, 2 replies; 5+ messages in thread
From: Aastha Rawat @ 2026-04-09 11:53 UTC (permalink / raw)
  To: qemu-devel; +Cc: Magnus Kulke, Wei Liu, Aastha Rawat

This series fixes two bugs in the MSHV accelerator's ioeventfd
implementation, discovered while booting arm64 EDK2 firmware with
MSHV accel.

---
Aastha Rawat (2):
      accel/mshv: fix ioeventfd deassignment to forward correct datamatch value
      accel/mshv: return correct errno value from ioeventfd failure

 accel/mshv/mshv-all.c | 23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)
---
base-commit: e29302cbe6ada855bb7f18854ad215533e15b2e9
change-id: 20260409-fix_ioevent-423785d270d7

Best regards,
--  
Aastha Rawat <aastharawat@linux.microsoft.com>



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/2] accel/mshv: fix ioeventfd deassignment to forward correct datamatch value
  2026-04-09 11:53 [PATCH 0/2] Fix issues in accel/mshv ioeventfd handling Aastha Rawat
@ 2026-04-09 11:53 ` Aastha Rawat
  2026-04-10 15:15   ` Magnus Kulke
  2026-04-09 11:53 ` [PATCH 2/2] accel/mshv: return correct errno value from ioeventfd failure Aastha Rawat
  1 sibling, 1 reply; 5+ messages in thread
From: Aastha Rawat @ 2026-04-09 11:53 UTC (permalink / raw)
  To: qemu-devel; +Cc: Magnus Kulke, Wei Liu, Aastha Rawat

unregister_ioevent() is not forwarding the datamatch (queue index) to
the mshv driver, causing only the first VirtIO-MMIO queue to be
deassigned correctly. Subsequent queues fail with `-ENOENT`, triggering
a fatal abort().

This failure was discovered while booting arm64 EDK2 firmware with mshv
accel.

Signed-off-by: Aastha Rawat <aastharawat@linux.microsoft.com>
---
 accel/mshv/mshv-all.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/accel/mshv/mshv-all.c b/accel/mshv/mshv-all.c
index d4cc7f5371..e1a8d62f8d 100644
--- a/accel/mshv/mshv-all.c
+++ b/accel/mshv/mshv-all.c
@@ -278,13 +278,22 @@ static int ioeventfd(int vm_fd, int event_fd, uint64_t addr, Datamatch dm,
     return ioctl(vm_fd, MSHV_IOEVENTFD, &args);
 }
 
-static int unregister_ioevent(int vm_fd, int event_fd, uint64_t mmio_addr)
+static int unregister_ioevent(int vm_fd, int event_fd, uint64_t mmio_addr,
+                              uint64_t data, uint32_t len, bool data_match)
 {
     uint32_t flags = 0;
     Datamatch dm = {0};
 
     flags |= BIT(MSHV_IOEVENTFD_BIT_DEASSIGN);
-    dm.tag = DATAMATCH_NONE;
+    if (!data_match) {
+        dm.tag = DATAMATCH_NONE;
+    } else if (len == sizeof(uint64_t)) {
+        dm.tag = DATAMATCH_U64;
+        dm.value.u64 = data;
+    } else {
+        dm.tag = DATAMATCH_U32;
+        dm.value.u32 = data;
+    }
 
     return ioeventfd(vm_fd, event_fd, mmio_addr, dm, flags);
 }
@@ -337,11 +346,12 @@ static void mem_ioeventfd_del(MemoryListener *listener,
     int fd = event_notifier_get_fd(e);
     int ret;
     uint64_t addr = section->offset_within_address_space;
+    uint64_t len = int128_get64(section->size);
 
     trace_mshv_mem_ioeventfd_del(section->offset_within_address_space,
                                  int128_get64(section->size), data);
 
-    ret = unregister_ioevent(mshv_state->vm, fd, addr);
+    ret = unregister_ioevent(mshv_state->vm, fd, addr, data, len, match_data);
     if (ret < 0) {
         error_report("Failed to unregister ioeventfd: %s (%d)", strerror(-ret),
                      -ret);

-- 
2.45.4



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/2] accel/mshv: return correct errno value from ioeventfd failure
  2026-04-09 11:53 [PATCH 0/2] Fix issues in accel/mshv ioeventfd handling Aastha Rawat
  2026-04-09 11:53 ` [PATCH 1/2] accel/mshv: fix ioeventfd deassignment to forward correct datamatch value Aastha Rawat
@ 2026-04-09 11:53 ` Aastha Rawat
  2026-04-10 15:02   ` Magnus Kulke
  1 sibling, 1 reply; 5+ messages in thread
From: Aastha Rawat @ 2026-04-09 11:53 UTC (permalink / raw)
  To: qemu-devel; +Cc: Magnus Kulke, Wei Liu, Aastha Rawat

Returning the raw ioctl return value results in misleading error
message. Ensure that actual failure reason is propagated by returning
-errno for ioeventfd failure.

Signed-off-by: Aastha Rawat <aastharawat@linux.microsoft.com>
---
 accel/mshv/mshv-all.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/accel/mshv/mshv-all.c b/accel/mshv/mshv-all.c
index e1a8d62f8d..58af674bd9 100644
--- a/accel/mshv/mshv-all.c
+++ b/accel/mshv/mshv-all.c
@@ -275,7 +275,12 @@ static int ioeventfd(int vm_fd, int event_fd, uint64_t addr, Datamatch dm,
         }
     }
 
-    return ioctl(vm_fd, MSHV_IOEVENTFD, &args);
+    int ret = ioctl(vm_fd, MSHV_IOEVENTFD, &args);
+    if (ret < 0) {
+        return -errno;
+    }
+
+    return ret;
 }
 
 static int unregister_ioevent(int vm_fd, int event_fd, uint64_t mmio_addr,

-- 
2.45.4



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 2/2] accel/mshv: return correct errno value from ioeventfd failure
  2026-04-09 11:53 ` [PATCH 2/2] accel/mshv: return correct errno value from ioeventfd failure Aastha Rawat
@ 2026-04-10 15:02   ` Magnus Kulke
  0 siblings, 0 replies; 5+ messages in thread
From: Magnus Kulke @ 2026-04-10 15:02 UTC (permalink / raw)
  To: Aastha Rawat; +Cc: qemu-devel, Wei Liu

On Thu, Apr 09, 2026 at 11:53:07AM +0000, Aastha Rawat wrote:
> Returning the raw ioctl return value results in misleading error
> message. Ensure that actual failure reason is propagated by returning
> -errno for ioeventfd failure.
> 
> Signed-off-by: Aastha Rawat <aastharawat@linux.microsoft.com>
> ---
>  accel/mshv/mshv-all.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/accel/mshv/mshv-all.c b/accel/mshv/mshv-all.c
> index e1a8d62f8d..58af674bd9 100644
> --- a/accel/mshv/mshv-all.c
> +++ b/accel/mshv/mshv-all.c
> @@ -275,7 +275,12 @@ static int ioeventfd(int vm_fd, int event_fd, uint64_t addr, Datamatch dm,
>          }
>      }
>  
> -    return ioctl(vm_fd, MSHV_IOEVENTFD, &args);
> +    int ret = ioctl(vm_fd, MSHV_IOEVENTFD, &args);
> +    if (ret < 0) {
> +        return -errno;
> +    }
> +
> +    return ret;
>  }
>  
>  static int unregister_ioevent(int vm_fd, int event_fd, uint64_t mmio_addr,
> 

Reviewed-by: Magnus Kulke <magnuskulke@linux.microsoft.com>


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] accel/mshv: fix ioeventfd deassignment to forward correct datamatch value
  2026-04-09 11:53 ` [PATCH 1/2] accel/mshv: fix ioeventfd deassignment to forward correct datamatch value Aastha Rawat
@ 2026-04-10 15:15   ` Magnus Kulke
  0 siblings, 0 replies; 5+ messages in thread
From: Magnus Kulke @ 2026-04-10 15:15 UTC (permalink / raw)
  To: Aastha Rawat; +Cc: qemu-devel, Wei Liu

On Thu, Apr 09, 2026 at 11:53:06AM +0000, Aastha Rawat wrote:
> unregister_ioevent() is not forwarding the datamatch (queue index) to
> the mshv driver, causing only the first VirtIO-MMIO queue to be
> deassigned correctly. Subsequent queues fail with `-ENOENT`, triggering
> a fatal abort().
> 
> This failure was discovered while booting arm64 EDK2 firmware with mshv
> accel.
> 

Looks good, I tested the patch on x86 w/ virtio queues.

Reviewed-by: Magnus Kulke <magnuskulke@linux.microsoft.com>


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-04-10 15:16 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-09 11:53 [PATCH 0/2] Fix issues in accel/mshv ioeventfd handling Aastha Rawat
2026-04-09 11:53 ` [PATCH 1/2] accel/mshv: fix ioeventfd deassignment to forward correct datamatch value Aastha Rawat
2026-04-10 15:15   ` Magnus Kulke
2026-04-09 11:53 ` [PATCH 2/2] accel/mshv: return correct errno value from ioeventfd failure Aastha Rawat
2026-04-10 15:02   ` Magnus Kulke

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.