Notice here is a simple solution, can be replaced later. Signed-off-by: Sheng Yang <sheng@xxxxxxxxxxxxxxx> --- libkvm/kvm-common.h | 1 + libkvm/libkvm.c | 10 ++++++++++ libkvm/libkvm.h | 8 ++++++++ 3 files changed, 19 insertions(+), 0 deletions(-) diff --git a/libkvm/kvm-common.h b/libkvm/kvm-common.h index d4fffbe..71690f6 100644 --- a/libkvm/kvm-common.h +++ b/libkvm/kvm-common.h @@ -64,6 +64,7 @@ struct kvm_context { #ifdef KVM_CAP_IRQ_ROUTING struct kvm_irq_routing *irq_routes; int nr_allocated_irq_routes; + int max_used_gsi; #endif }; diff --git a/libkvm/libkvm.c b/libkvm/libkvm.c index 571506a..b4433bd 100644 --- a/libkvm/libkvm.c +++ b/libkvm/libkvm.c @@ -1229,6 +1229,9 @@ int kvm_add_routing_entry(kvm_context_t kvm, new->type = entry->type; new->flags = entry->flags; new->u = entry->u; + + if (entry->gsi > kvm->max_used_gsi) + kvm->max_used_gsi = entry->gsi; return 0; #else return -ENOSYS; @@ -1332,3 +1335,10 @@ int kvm_commit_irq_routes(kvm_context_t kvm) return -ENOSYS; #endif } + +int kvm_get_irq_route_gsi(kvm_context_t kvm) +{ + return (kvm->max_used_gsi >= KVM_IOAPIC_NUM_PINS) ? + kvm->max_used_gsi : KVM_IOAPIC_NUM_PINS; +} + diff --git a/libkvm/libkvm.h b/libkvm/libkvm.h index d53d759..3c09be1 100644 --- a/libkvm/libkvm.h +++ b/libkvm/libkvm.h @@ -820,4 +820,12 @@ int kvm_del_routing_entry(kvm_context_t kvm, */ int kvm_commit_irq_routes(kvm_context_t kvm); +/*! + * \brief Get unused GSI number for irq routing table + * + * Get unused GSI number for irq routing table + * + * \param kvm Pointer to the current kvm_context + */ +int kvm_get_irq_route_gsi(kvm_context_t kvm); #endif -- 1.5.4.5 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html