From patchwork Mon Jul 20 13:02:12 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andre Przywara X-Patchwork-Id: 6827361 Return-Path: X-Original-To: patchwork-kvm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 8692BC05AC for ; Mon, 20 Jul 2015 13:02:32 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id C0FFD20687 for ; Mon, 20 Jul 2015 13:02:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id DCD6420670 for ; Mon, 20 Jul 2015 13:02:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755916AbbGTNC3 (ORCPT ); Mon, 20 Jul 2015 09:02:29 -0400 Received: from foss.arm.com ([217.140.101.70]:55596 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755767AbbGTNC2 (ORCPT ); Mon, 20 Jul 2015 09:02:28 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1DACE606; Mon, 20 Jul 2015 06:02:44 -0700 (PDT) Received: from e104803-lin.lan (unknown [10.1.203.153]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E51133F21A; Mon, 20 Jul 2015 06:02:26 -0700 (PDT) From: Andre Przywara To: will.deacon@arm.com, marc.zyngier@arm.com Cc: kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org, eric.auger@linaro.org, Pavel Fedin Subject: [PATCH 10/14] PCI: inject PCI device ID on MSI injection Date: Mon, 20 Jul 2015 14:02:12 +0100 Message-Id: <1437397336-21385-11-git-send-email-andre.przywara@arm.com> X-Mailer: git-send-email 2.3.5 In-Reply-To: <1437397336-21385-1-git-send-email-andre.przywara@arm.com> References: <1437397336-21385-1-git-send-email-andre.przywara@arm.com> Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Spam-Status: No, score=-8.1 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The ITS emulation requires a unique device ID to be passed along the MSI payload when kvmtool wants to trigger an MSI in the guest. According to the proposed changes to the interface add the PCI bus/device/function triple to the structure passed with the ioctl. Check the respective capability before actually adding the device ID to the kvm_msi struct. Signed-off-by: Andre Przywara --- virtio/pci.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/virtio/pci.c b/virtio/pci.c index 625fec0..e92a2df 100644 --- a/virtio/pci.c +++ b/virtio/pci.c @@ -305,14 +305,28 @@ static void virtio_pci__msix_mmio_callback(struct kvm_cpu *vcpu, update_msix_map(vpci, table, (addr - offset) / 16); } -static void virtio_pci__signal_msi(struct kvm *kvm, struct virtio_pci *vpci, int vec) +static void virtio_pci__signal_msi(struct kvm *kvm, struct virtio_pci *vpci, + int vec) { + static int needs_devid = 0; struct kvm_msi msi = { .address_lo = vpci->msix_table[vec].msg.address_lo, .address_hi = vpci->msix_table[vec].msg.address_hi, .data = vpci->msix_table[vec].msg.data, }; + if (needs_devid == 0) { + if (kvm__supports_vm_extension(kvm, KVM_CAP_MSI_DEVID)) + needs_devid = 1; + else + needs_devid = -1; + } + + if (needs_devid > 0) { + msi.flags = KVM_MSI_VALID_DEVID; + msi.devid = vpci->dev_hdr.dev_num << 3; + } + ioctl(kvm->vm_fd, KVM_SIGNAL_MSI, &msi); }