On Fri, 1 Sep 2017 06:22:57 +0200 Yi Min Zhao <zyi...@linux.vnet.ibm.com> wrote:
> The guest uses the mpcifc instruction to register the aibvo of a zpci > device, which is the starting offset of indicators in the indicator > area and thus remains constant. Each msix vector is an offset from the > aibvo. When we map a msix route to an adapter route, we should not > modify the starting offset, but instead add the vector to the starting > offset to get the absolute offset in the specific route. > > Signed-off-by: Yi Min Zhao <zyi...@linux.vnet.ibm.com> > --- > target/s390x/kvm.c | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c > index 3d490c5e4b..21ce06966c 100644 > --- a/target/s390x/kvm.c > +++ b/target/s390x/kvm.c > @@ -2545,14 +2545,12 @@ int kvm_arch_fixup_msi_route(struct > kvm_irq_routing_entry *route, > return -ENODEV; > } > > - pbdev->routes.adapter.ind_offset = vec; > - > route->type = KVM_IRQ_ROUTING_S390_ADAPTER; > route->flags = 0; > route->u.adapter.summary_addr = pbdev->routes.adapter.summary_addr; > route->u.adapter.ind_addr = pbdev->routes.adapter.ind_addr; > route->u.adapter.summary_offset = pbdev->routes.adapter.summary_offset; > - route->u.adapter.ind_offset = pbdev->routes.adapter.ind_offset; > + route->u.adapter.ind_offset = pbdev->routes.adapter.ind_offset + vec; > route->u.adapter.adapter_id = pbdev->routes.adapter.adapter_id; > return 0; > } Looks good. I assume you'll send a v3, so I'll hold off on applying for now.