From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=BAYES_00,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4EC0CC433B4 for ; Fri, 7 May 2021 09:03:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1021C6144F for ; Fri, 7 May 2021 09:03:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231745AbhEGJEv (ORCPT ); Fri, 7 May 2021 05:04:51 -0400 Received: from mail.kernel.org ([198.145.29.99]:60546 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230108AbhEGJEu (ORCPT ); Fri, 7 May 2021 05:04:50 -0400 Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 757386144A; Fri, 7 May 2021 09:03:51 +0000 (UTC) Received: from 78.163-31-62.static.virginmediabusiness.co.uk ([62.31.163.78] helo=why.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1lewOj-00BQgL-9i; Fri, 07 May 2021 10:03:49 +0100 Date: Fri, 07 May 2021 10:03:48 +0100 Message-ID: <87k0oaq5jf.wl-maz@kernel.org> From: Marc Zyngier To: Shaokun Zhang Cc: , , , , Alex Williamson , Cornelia Huck , Nianyao Tang , Bjorn Helgaas Subject: Re: Question on guest enable msi fail when using GICv4/4.1 In-Reply-To: <3a2c66d6-6ca0-8478-d24b-61e8e3241b20@hisilicon.com> References: <3a2c66d6-6ca0-8478-d24b-61e8e3241b20@hisilicon.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/27.1 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII X-SA-Exim-Connect-IP: 62.31.163.78 X-SA-Exim-Rcpt-To: zhangshaokun@hisilicon.com, kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org, linux-pci@vger.kernel.org, alex.williamson@redhat.com, cohuck@redhat.com, tangnianyao@huawei.com, bhelgaas@google.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org On Fri, 07 May 2021 06:57:04 +0100, Shaokun Zhang wrote: > > [This letter comes from Nianyao Tang] > > Hi, > > Using GICv4/4.1 and msi capability, guest vf driver requires 3 > vectors and enable msi, will lead to guest stuck. Stuck how? > Qemu gets number of interrupts from Multiple Message Capable field > set by guest. This field is aligned to a power of 2(if a function > requires 3 vectors, it initializes it to 2). So I guess this is a MultiMSI device with 4 vectors, right? > However, guest driver just sends 3 mapi-cmd to vits and 3 ite > entries is recorded in host. Vfio initializes msi interrupts using > the number of interrupts 4 provide by qemu. When it comes to the > 4th msi without ite in vits, in irq_bypass_register_producer, > producer and consumer will __connect fail, due to find_ite fail, and > do not resume guest. Let me rephrase this to check that I understand it: - The device has 4 vectors - The guest only create mappings for 3 of them - VFIO calls kvm_vgic_v4_set_forwarding() for each vector - KVM doesn't have a mapping for the 4th vector and returns an error - VFIO disable this 4th vector Is that correct? If yes, I don't understand why that impacts the guest at all. From what I can see, vfio_msi_set_vector_signal() just prints a message on the console and carries on. > Do we support this case, Guest function using msi interrupts number > not aligned to a power of 2? Or qemu should provide correct msi > interrupts number? QEMU cannot know how many vectors are in use, and the guest is free to issue mappings for the exact number of vectors it wants to service. Please describe what breaks the guest here. Thanks, M. -- Without deviation from the norm, progress is not possible.