[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 11/23] hyperv: allow passing arbitrary data to si
From: |
Roman Kagan |
Subject: |
[Qemu-devel] [PATCH v2 11/23] hyperv: allow passing arbitrary data to sint ack callback |
Date: |
Wed, 21 Jun 2017 19:24:12 +0300 |
Make sint ack callback accept an opaque pointer, that is stored on
sint_route at creation time.
This allows for more convenient interaction with the callback.
Besides, nothing outside hyperv.c should need to know the layout of
HvSintRoute fields any more so its declaration can be removed from the
header.
Signed-off-by: Roman Kagan <address@hidden>
---
target/i386/hyperv.h | 14 +++-----------
hw/misc/hyperv_testdev.c | 2 +-
target/i386/hyperv.c | 16 ++++++++++++++--
3 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/target/i386/hyperv.h b/target/i386/hyperv.h
index 82f4757..93f7300 100644
--- a/target/i386/hyperv.h
+++ b/target/i386/hyperv.h
@@ -19,21 +19,13 @@
#include "qemu/event_notifier.h"
typedef struct HvSintRoute HvSintRoute;
-typedef void (*HvSintAckClb)(HvSintRoute *sint_route);
-
-struct HvSintRoute {
- uint32_t sint;
- uint32_t vcpu_id;
- int gsi;
- EventNotifier sint_set_notifier;
- EventNotifier sint_ack_notifier;
- HvSintAckClb sint_ack_clb;
-};
+typedef void (*HvSintAckClb)(void *data);
int kvm_hv_handle_exit(X86CPU *cpu, struct kvm_hyperv_exit *exit);
HvSintRoute *kvm_hv_sint_route_create(uint32_t vp_index, uint32_t sint,
- HvSintAckClb sint_ack_clb);
+ HvSintAckClb sint_ack_clb,
+ void *sint_ack_clb_data);
void kvm_hv_sint_route_destroy(HvSintRoute *sint_route);
diff --git a/hw/misc/hyperv_testdev.c b/hw/misc/hyperv_testdev.c
index b47af47..827a8b1 100644
--- a/hw/misc/hyperv_testdev.c
+++ b/hw/misc/hyperv_testdev.c
@@ -55,7 +55,7 @@ static void sint_route_create(HypervTestDev *dev, uint8_t
vpidx, uint8_t sint)
sint_route->vpidx = vpidx;
sint_route->sint = sint;
- sint_route->sint_route = kvm_hv_sint_route_create(vpidx, sint, NULL);
+ sint_route->sint_route = kvm_hv_sint_route_create(vpidx, sint, NULL, NULL);
assert(sint_route->sint_route);
QLIST_INSERT_HEAD(&dev->sint_routes, sint_route, le);
diff --git a/target/i386/hyperv.c b/target/i386/hyperv.c
index 3594bd0..84ea228 100644
--- a/target/i386/hyperv.c
+++ b/target/i386/hyperv.c
@@ -16,6 +16,16 @@
#include "hyperv.h"
#include "hyperv_proto.h"
+struct HvSintRoute {
+ uint32_t sint;
+ uint32_t vcpu_id;
+ int gsi;
+ EventNotifier sint_set_notifier;
+ EventNotifier sint_ack_notifier;
+ HvSintAckClb sint_ack_clb;
+ void *sint_ack_clb_data;
+};
+
uint32_t hyperv_vp_index(X86CPU *cpu)
{
return CPU(cpu)->cpu_index;
@@ -77,11 +87,12 @@ static void kvm_hv_sint_ack_handler(EventNotifier *notifier)
HvSintRoute *sint_route = container_of(notifier, HvSintRoute,
sint_ack_notifier);
event_notifier_test_and_clear(notifier);
- sint_route->sint_ack_clb(sint_route);
+ sint_route->sint_ack_clb(sint_route->sint_ack_clb_data);
}
HvSintRoute *kvm_hv_sint_route_create(uint32_t vp_index, uint32_t sint,
- HvSintAckClb sint_ack_clb)
+ HvSintAckClb sint_ack_clb,
+ void *sint_ack_clb_data)
{
HvSintRoute *sint_route;
EventNotifier *ack_notifier;
@@ -116,6 +127,7 @@ HvSintRoute *kvm_hv_sint_route_create(uint32_t vp_index,
uint32_t sint,
}
sint_route->gsi = gsi;
sint_route->sint_ack_clb = sint_ack_clb;
+ sint_route->sint_ack_clb_data = sint_ack_clb_data;
sint_route->vcpu_id = vp_index;
sint_route->sint = sint;
--
2.9.4
- [Qemu-devel] [PATCH v2 07/23] hyperv: ensure VP index equal to QEMU cpu_index, (continued)
- [Qemu-devel] [PATCH v2 07/23] hyperv: ensure VP index equal to QEMU cpu_index, Roman Kagan, 2017/06/21
- Re: [Qemu-devel] [PATCH v2 07/23] hyperv: ensure VP index equal to QEMU cpu_index, Igor Mammedov, 2017/06/28
- Re: [Qemu-devel] [PATCH v2 07/23] hyperv: ensure VP index equal to QEMU cpu_index, Roman Kagan, 2017/06/29
- Re: [Qemu-devel] [PATCH v2 07/23] hyperv: ensure VP index equal to QEMU cpu_index, Igor Mammedov, 2017/06/29
- Re: [Qemu-devel] [PATCH v2 07/23] hyperv: ensure VP index equal to QEMU cpu_index, Roman Kagan, 2017/06/29
- Re: [Qemu-devel] [PATCH v2 07/23] hyperv: ensure VP index equal to QEMU cpu_index, Igor Mammedov, 2017/06/29
- Re: [Qemu-devel] [PATCH v2 07/23] hyperv: ensure VP index equal to QEMU cpu_index, Roman Kagan, 2017/06/29
[Qemu-devel] [PATCH v2 08/23] hyperv_testdev: refactor for readability, Roman Kagan, 2017/06/21
[Qemu-devel] [PATCH v2 09/23] hyperv: cosmetic: g_malloc -> g_new, Roman Kagan, 2017/06/21
[Qemu-devel] [PATCH v2 10/23] hyperv: synic: only setup ack notifier if there's a callback, Roman Kagan, 2017/06/21
[Qemu-devel] [PATCH v2 11/23] hyperv: allow passing arbitrary data to sint ack callback,
Roman Kagan <=
[Qemu-devel] [PATCH v2 12/23] hyperv: address HvSintRoute by X86CPU pointer, Roman Kagan, 2017/06/21
[Qemu-devel] [PATCH v2 13/23] hyperv: make HvSintRoute reference-counted, Roman Kagan, 2017/06/21
[Qemu-devel] [PATCH v2 14/23] hyperv: qom-ify SynIC, Roman Kagan, 2017/06/21
[Qemu-devel] [PATCH v2 15/23] hyperv: block SynIC use in QEMU in incompatible configurations, Roman Kagan, 2017/06/21
[Qemu-devel] [PATCH v2 16/23] hyperv: make overlay pages for SynIC, Roman Kagan, 2017/06/21
[Qemu-devel] [PATCH v2 18/23] hyperv: add synic event flag signaling, Roman Kagan, 2017/06/21
[Qemu-devel] [PATCH v2 19/23] hyperv: process SIGNAL_EVENT hypercall, Roman Kagan, 2017/06/21
[Qemu-devel] [PATCH v2 20/23] hyperv: process POST_MESSAGE hypercall, Roman Kagan, 2017/06/21