From patchwork Thu Nov 13 21:00:18 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Zyngier X-Patchwork-Id: 40787 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-wg0-f71.google.com (mail-wg0-f71.google.com [74.125.82.71]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id DC7C5240ED for ; Thu, 13 Nov 2014 21:00:36 +0000 (UTC) Received: by mail-wg0-f71.google.com with SMTP id b13sf8156758wgh.2 for ; Thu, 13 Nov 2014 13:00:35 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:message-id:date:from:user-agent :mime-version:to:cc:subject:references:in-reply-to:sender:precedence :list-id:x-original-sender:x-original-authentication-results :mailing-list:list-post:list-help:list-archive:list-unsubscribe :content-type:content-transfer-encoding; bh=6fJq1u21O19/ZFGR96J9BlfP2/FpfeUZwvk4zPc81zI=; b=QPEzRfQhO+psYpMTJKgo6oAMWBU9qR8rxd0alBngdYQHz+Fc8LB+kx69l2pt9JuqRV VZw3HPbM3tKhsnbfbYdlUTtVX8XzgBgAb6jSayT4DsLGqE/4QsLNL2evqKOzSCyw85U0 kFMqmuANNV+W5vowC4cow8FkvQG7FO/5cmttR7n+3L1jtjcxSn0k9tN60QNy7ih2ibv0 d2LvxCqcMqQS4HIQYaGNi4y2lOB5ggN5Fj8baVUkHPhdbmm8DXtwG2MD54BgLTXoD87A Dqyj2EBT94HFIFQfRmFedG7CXmSTeyxpEjRU8cI+ERmaoeR47uUPYmvuM8VXt72RPelK 7Pmg== X-Gm-Message-State: ALoCoQlgfgJjAcumO+nkRgZ7xuedUQIrjQNvpQpGgNZo2wuW+DB4mUqzoZOQ2Ip76KEQ9Sml9ER0 X-Received: by 10.112.204.71 with SMTP id kw7mr965085lbc.13.1415912435910; Thu, 13 Nov 2014 13:00:35 -0800 (PST) X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.19.227 with SMTP id i3ls688438lae.28.gmail; Thu, 13 Nov 2014 13:00:35 -0800 (PST) X-Received: by 10.152.234.163 with SMTP id uf3mr4516275lac.45.1415912435733; Thu, 13 Nov 2014 13:00:35 -0800 (PST) Received: from mail-lb0-f169.google.com (mail-lb0-f169.google.com. [209.85.217.169]) by mx.google.com with ESMTPS id aq3si39638393lbc.78.2014.11.13.13.00.35 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 13 Nov 2014 13:00:35 -0800 (PST) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.217.169 as permitted sender) client-ip=209.85.217.169; Received: by mail-lb0-f169.google.com with SMTP id 10so11777666lbg.14 for ; Thu, 13 Nov 2014 13:00:35 -0800 (PST) X-Received: by 10.152.20.199 with SMTP id p7mr4508662lae.49.1415912435275; Thu, 13 Nov 2014 13:00:35 -0800 (PST) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.112.184.201 with SMTP id ew9csp660797lbc; Thu, 13 Nov 2014 13:00:33 -0800 (PST) X-Received: by 10.70.53.102 with SMTP id a6mr5465798pdp.70.1415912432858; Thu, 13 Nov 2014 13:00:32 -0800 (PST) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id td9si26657561pab.84.2014.11.13.13.00.27 for ; Thu, 13 Nov 2014 13:00:32 -0800 (PST) Received-SPF: none (google.com: linux-kernel-owner@vger.kernel.org does not designate permitted sender hosts) client-ip=209.132.180.67; Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934306AbaKMVAZ (ORCPT + 26 others); Thu, 13 Nov 2014 16:00:25 -0500 Received: from service87.mimecast.com ([91.220.42.44]:35992 "EHLO service87.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933526AbaKMVAY convert rfc822-to-8bit (ORCPT ); Thu, 13 Nov 2014 16:00:24 -0500 Received: from cam-owa1.Emea.Arm.com (fw-tnat.cambridge.arm.com [217.140.96.21]) by service87.mimecast.com; Thu, 13 Nov 2014 21:00:21 +0000 Received: from [10.1.209.143] ([10.1.255.212]) by cam-owa1.Emea.Arm.com with Microsoft SMTPSVC(6.0.3790.3959); Thu, 13 Nov 2014 21:00:19 +0000 Message-ID: <54651BE2.9080008@arm.com> Date: Thu, 13 Nov 2014 21:00:18 +0000 From: Marc Zyngier User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130330 Thunderbird/17.0.5 MIME-Version: 1.0 To: Jiang Liu CC: Bjorn Helgaas , Thomas Gleixner , Ingo Molnar , "grant.likely@linaro.org" , Yijing Wang , Yingjoe Chen , Borislav Petkov , "H. Peter Anvin" , Matthias Brugger , Tony Luck , "linux-kernel@vger.kernel.org" , "linux-pci@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" Subject: Re: [Patch V1 0/6] Refine generic/PCI MSI irqodmian interfaces References: <1415879029-20098-1-git-send-email-jiang.liu@linux.intel.com> In-Reply-To: <1415879029-20098-1-git-send-email-jiang.liu@linux.intel.com> X-Enigmail-Version: 1.4.6 X-OriginalArrivalTime: 13 Nov 2014 21:00:20.0008 (UTC) FILETIME=[D5854280:01CFFF84] X-MC-Unique: 114111321002101201 Sender: linux-kernel-owner@vger.kernel.org Precedence: list List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: marc.zyngier@arm.com X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.217.169 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , On 13/11/14 11:43, Jiang Liu wrote: > This patch set is based on tip/irq/irqdomain and tries to refine > interfaces to support irqdomain for generic MSI and PCI MSI. > > Patch 1 is just minor fixes for tip/irq/irqdomain. > > Patch 2 introduces some helpers to hide struct msi_desc implementation > details, so later we could move msi_list from struct pci_dev into > struct device to enable generic MSI support. > > Patch 3 introduces msi_domain_{alloc|free}_irqs() which generalize > pci_msi_domain_alloc_irqs() to support generic MSI. > > Patch 4 introduces default data structures and callback implementations > to support msi_domain_alloc_irqs(), so reduce burden on generic MSI > users. > > Patch 5 converts PCI MSI to use generic MSI interfaces, and also > implement default callbacks for PCI MSI. > > Patch 6 introduces a mechanism to replace arch_setup_msi_irq()/ > arch_setup_msi_irqs()/arch_teardown_msi_irq()/arch_teardown_msi_irqs(). > > With this patch set applied, the generic MSI and PCI MSI interfaces > are much easier to use. For extreme case, you only need to define > a "struct msi_domain_info" and don't need to implement any callbacks, > just using the default callbacks is OK:) > > This patch set is also a preparation for: > 1) Kill all weak functions in drivers/pci/msi.c > 2) Implement support for non-PCI-compliant MSI device I've rebased (once more!) the GICv3 ITS driver on top of this, and this is definitely a major improvement. This is basically the first version I can use without having to hack into the core code (apart from the couple of nits I've mentioned earlier). Now, Thomas' idea of putting the irq_domain close to the bus is very appealing, and I've tweaked an earlier patch in order to do this: >From f73c2df2f1e66fd13902b2c6bb5773df6538b7df Mon Sep 17 00:00:00 2001 From: Marc Zyngier Date: Wed, 12 Nov 2014 10:32:46 +0000 Subject: [PATCH] PCI/MSI: Allow an msi_chip to be associated to an irq domain With the new stacked irq domains, it becomes pretty tempting to allocate an MSI domain per PCI bus, which would remove the requirement of either relying on arch-specific code, or a default PCI MSI domain. By allowing the msi_chip structure to carry a pointer to an irq_domain, we can easily use this in pci_msi_setup_msi_irqs. The existing code can still be used as a fallback if the MSI driver does not populate the domain field. Tested on arm64 with the GICv3 ITS driver. Signed-off-by: Marc Zyngier --- drivers/pci/msi.c | 9 +++++++-- include/linux/msi.h | 3 +++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index 9947fb4..1752537 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c @@ -86,9 +86,14 @@ int __weak arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) static int pci_msi_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) { - struct irq_domain *domain; + struct irq_domain *domain = NULL; - domain = arch_get_pci_msi_domain(dev); +#ifdef CONFIG_GENERIC_MSI_IRQ_DOMAIN + if (dev->bus->msi) + domain = dev->bus->msi->domain; +#endif + if (!domain) + domain = arch_get_pci_msi_domain(dev); if (domain) return pci_msi_domain_alloc_irqs(domain, type, dev); diff --git a/include/linux/msi.h b/include/linux/msi.h index 9b2e73e..2325950 100644 --- a/include/linux/msi.h +++ b/include/linux/msi.h @@ -89,6 +89,9 @@ struct msi_chip { struct device *dev; struct device_node *of_node; struct list_head list; +#ifdef CONFIG_GENERIC_MSI_IRQ_DOMAIN + struct irq_domain *domain; +#endif int (*setup_irq)(struct msi_chip *chip, struct pci_dev *dev, struct msi_desc *desc);