Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754173AbbGXJD2 (ORCPT ); Fri, 24 Jul 2015 05:03:28 -0400 Received: from mail-pd0-f181.google.com ([209.85.192.181]:36076 "EHLO mail-pd0-f181.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753765AbbGXJDY (ORCPT ); Fri, 24 Jul 2015 05:03:24 -0400 From: Pranavkumar Sawargaonkar To: kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, alex.williamson@redhat.com, christoffer.dall@linaro.org, marc.zyngier@arm.com, will.deacon@arm.com, bhelgaas@google.com, arnd@arndb.de, rob.herring@linaro.org, eric.auger@linaro.org, patches@apm.com, Pranavkumar Sawargaonkar Subject: [RFC 0/2] VFIO: Add virtual MSI doorbell support. Date: Fri, 24 Jul 2015 14:33:08 +0530 Message-Id: <1437728590-23126-1-git-send-email-pranavkumar@linaro.org> X-Mailer: git-send-email 1.7.9.5 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2468 Lines: 54 In current VFIO MSI/MSI-X implementation, linux host kernel allocates MSI/MSI-X vectors when userspace requests through vfio ioctls. Vfio creates irqfd mappings to notify MSI/MSI-X interrupts to the userspace when raised. Guest OS will see emulated MSI/MSI-X controller and receives an interrupt when kernel notifies the same via irqfd. Host kernel allocates MSI/MSI-X using standard linux routines like pci_enable_msix_range() and pci_enable_msi_range(). These routines along with requset_irq() in host kernel sets up MSI/MSI-X vectors with Physical MSI/MSI-X addresses provided by interrupt controller driver in host kernel. This means when a device is assigned with the guest OS, MSI/MSI-X addresses present in PCIe EP are the PAs programmed by the host linux kernel. In x86 MSI/MSI-X physical address range is reserved and iommu is aware about these addreses and transalation is bypassed for these address range. Unlike x86, ARM/ARM64 does not reserve MSI/MSI-X Physical address range and all the transactions including MSI go through iommu/smmu without bypass. This requires extending current vfio MSI layer with additional functionality for ARM/ARM64 by 1. Programing IOVA (referred as a MSI virtual doorbell address) in device's MSI vector as a MSI address. This IOVA will be provided by the userspace based on the MSI/MSI-X addresses reserved for the guest. 2. Create an IOMMU mapping between this IOVA and Physical address (PA) assigned to the MSI vector. This RFC is proposing a solution for MSI/MSI-X passthrough for ARM/ARM64. Pranavkumar Sawargaonkar (2): drivers: vfio: iommu map and unmap device specific memory from kernel. drivers: vfio: pci: Add virtual MSI doorbell support. drivers/vfio/pci/vfio_pci.c | 32 ++++++++++++++++++ drivers/vfio/pci/vfio_pci_intrs.c | 64 +++++++++++++++++++++++++++++++++++ drivers/vfio/pci/vfio_pci_private.h | 3 ++ drivers/vfio/vfio.c | 29 ++++++++++++++++ drivers/vfio/vfio_iommu_type1.c | 60 ++++++++++++++++++++++++++++++++ include/linux/vfio.h | 11 +++++- include/uapi/linux/vfio.h | 19 +++++++++++ 7 files changed, 217 insertions(+), 1 deletion(-) -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/