From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Kiszka Subject: Re: [RFC][PATCH 05/11] kvm: Introduce kvm_irqchip_add_msi_route Date: Mon, 25 Jun 2012 15:50:02 +0200 Message-ID: <4FE86C8A.6080700@siemens.com> References: <1340631494.14120.88.camel@bling.home> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Cc: Marcelo Tosatti , "Michael S. Tsirkin" , Avi Kivity , "kvm@vger.kernel.org" , qemu-devel To: Alex Williamson Return-path: In-Reply-To: <1340631494.14120.88.camel@bling.home> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+gceq-qemu-devel=gmane.org@nongnu.org Sender: qemu-devel-bounces+gceq-qemu-devel=gmane.org@nongnu.org List-Id: kvm.vger.kernel.org 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 >> --- >> 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