kvm-irqchip: introduce new API to support route change
Paolo suggested adding the new API to support route changes [1]. We should invoke kvm_irqchip_begin_route_changes() before changing the routes, increasing the KVMRouteChange.changes if the routes are changed, and commit the changes at last. [1] https://lists.gnu.org/archive/html/qemu-devel/2021-11/msg02898.html Signed-off-by: Longpeng <longpeng2@huawei.com> Message-Id: <20220222141116.2091-2-longpeng2@huawei.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
a6a7ebc817
commit
9568690868
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user