qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC][PATCH 05/11] kvm: Introduce kvm_irqchip_add_msi_r


From: Jan Kiszka
Subject: Re: [Qemu-devel] [RFC][PATCH 05/11] kvm: Introduce kvm_irqchip_add_msi_route
Date: Mon, 25 Jun 2012 15:50:02 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.8.1.12) Gecko/20080226 SUSE/2.0.0.12-1.1 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666

On 2012-06-25 15:38, Alex Williamson wrote:
> On Mon, 2012-05-14 at 18:07 -0300, Jan Kiszka wrote:
>> Add a service that establishes a static route from a virtual IRQ line to
>> an MSI message. Will be used for IRQFD and device assignment. As we will
>> use this service outside of CONFIG_KVM protected code, stub it properly.
>>
>> Signed-off-by: Jan Kiszka <address@hidden>
>> ---
>>  kvm-all.c  |   31 +++++++++++++++++++++++++++++++
>>  kvm-stub.c |    8 ++++++++
>>  kvm.h      |   10 ++++++----
>>  3 files changed, 45 insertions(+), 4 deletions(-)
>>
>> diff --git a/kvm-all.c b/kvm-all.c
>> index 8ab83db..f45b852 100644
>> --- a/kvm-all.c
>> +++ b/kvm-all.c
>> @@ -1080,6 +1080,32 @@ int kvm_irqchip_send_msi(KVMState *s, MSIMessage msg)
>>      return kvm_irqchip_set_irq(s, route->kroute.gsi, 1);
>>  }
>>  
>> +int kvm_irqchip_add_msi_route(KVMState *s, MSIMessage msg)
>> +{
>> +    struct kvm_irq_routing_entry kroute;
>> +    int gsi;
>> +
>> +    if (!kvm_irqchip_in_kernel()) {
>> +        return -ENOSYS;
>> +    }
>> +
>> +    gsi = kvm_get_pseudo_gsi(s);
>> +    if (gsi < 0) {
>> +        return gsi;
>> +    }
>> +
>> +    kroute.gsi = gsi;
>> +    kroute.type = KVM_IRQ_ROUTING_MSI;
>> +    kroute.flags = 0;
>> +    kroute.u.msi.address_lo = (uint32_t)msg.address;
>> +    kroute.u.msi.address_hi = msg.address >> 32;
>> +    kroute.u.msi.data = msg.data;
>> +
>> +    kvm_add_routing_entry(s, &kroute);
>> +
>> +    return gsi;
>> +}
>> +
>>  #else /* !KVM_CAP_IRQ_ROUTING */
>>  
>>  static void kvm_init_irq_routing(KVMState *s)
>> @@ -1090,6 +1116,11 @@ int kvm_irqchip_send_msi(KVMState *s, MSIMessage msg)
>>  {
>>      abort();
>>  }
>> +
>> +int kvm_irqchip_add_msi_route(KVMState *s, MSIMessage msg)
>> +{
>> +    abort();
>> +}
>>  #endif /* !KVM_CAP_IRQ_ROUTING */
> 
> 
> Jan,
> 
> Could we perhaps return a sane error value here?  This seems to be the
> initial function used to setup direct MSI injection and if we have code
> like:
> 
> virq = kvm_irqchip_add_msi_route(...)
> if (virq < 0) {
>     slow path...
> } else {
>     fast path...
> }
> 
> It works on x86 w/ or w/o irqchip, works with kvm disabled, but gives an
> abort on !x86.  I really don't want to have to surround the above in a
> #define or in-kernel ioapic test.  Thanks,

No problems, just send a patch.

Jan

-- 
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux



reply via email to

[Prev in Thread] Current Thread [Next in Thread]