|
@@ -224,6 +224,11 @@ DECLARE_INSTANCE_CHECKER(KVMState, KVM_STATE,
|
|
|
extern KVMState *kvm_state;
|
|
|
typedef struct Notifier Notifier;
|
|
|
|
|
|
+typedef struct KVMRouteChange {
|
|
|
+ KVMState *s;
|
|
|
+ int changes;
|
|
|
+} KVMRouteChange;
|
|
|
+
|
|
|
/* external API */
|
|
|
|
|
|
bool kvm_has_free_slot(MachineState *ms);
|
|
@@ -494,6 +499,20 @@ int kvm_irqchip_add_msi_route(KVMState *s, int vector, PCIDevice *dev);
|
|
|
int kvm_irqchip_update_msi_route(KVMState *s, int virq, MSIMessage msg,
|
|
|
PCIDevice *dev);
|
|
|
void kvm_irqchip_commit_routes(KVMState *s);
|
|
|
+
|
|
|
+static inline KVMRouteChange kvm_irqchip_begin_route_changes(KVMState *s)
|
|
|
+{
|
|
|
+ return (KVMRouteChange) { .s = s, .changes = 0 };
|
|
|
+}
|
|
|
+
|
|
|
+static inline void kvm_irqchip_commit_route_changes(KVMRouteChange *c)
|
|
|
+{
|
|
|
+ if (c->changes) {
|
|
|
+ kvm_irqchip_commit_routes(c->s);
|
|
|
+ c->changes = 0;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void kvm_irqchip_release_virq(KVMState *s, int virq);
|
|
|
|
|
|
int kvm_irqchip_add_adapter_route(KVMState *s, AdapterInfo *adapter);
|