Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1269108

[PATCHv5 4/6] x86-pci: allow pci domain specific dma ops

Path csiph.com!news.mixmin.net!weretis.net!feeder1.news.weretis.net!newsfeed.CARNet.hr!news.spin.it!bofh.it!news.nic.it!robomod
From Keith Busch <keith.busch@intel.com>
Newsgroups linux.kernel
Subject [PATCHv5 4/6] x86-pci: allow pci domain specific dma ops
Date Fri, 13 Nov 2015 18:20:04 +0100
Message-ID <quqb2-Rg-31@gated-at.bofh.it> (permalink)
References <quqb0-Rg-3@gated-at.bofh.it>
X-Original-To LKML <linux-kernel@vger.kernel.org>, x86@kernel.org, linux-pci@vger.kernel.org
X-Extloop1 1
X-Ironport-Av E=Sophos;i="5.20,288,1444719600"; d="scan'208";a="837188644"
X-Mailer git-send-email 1.7.1
Sender robomod@news.nic.it
List-ID <linux-kernel.vger.kernel.org>
X-Mailing-List linux-kernel@vger.kernel.org
Approved robomod@news.nic.it
Lines 95
Organization linux.* mail to news gateway
X-Original-Cc Jiang Liu <jiang.liu@linux.intel.com>, Thomas Gleixner <tglx@linutronix.de>, Dan Williams <dan.j.williams@intel.com>, Bjorn Helgaas <bhelgaas@google.com>, Bryan Veal <bryan.e.veal@intel.com>, Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>, Martin Mares <mj@ucw.cz>, Jon Derrick <jonathan.derrick@intel.com>, Keith Busch <keith.busch@intel.com>
X-Original-Date Fri, 13 Nov 2015 10:17:35 -0700
X-Original-Message-ID <1447435057-5212-5-git-send-email-keith.busch@intel.com>
X-Original-References <1447435057-5212-1-git-send-email-keith.busch@intel.com>
X-Original-Sender linux-kernel-owner@vger.kernel.org
Xref csiph.com linux.kernel:1269108

Show key headers only | View raw


New x86 pci h/w will require dma operations specific to that domain. This
patch allows those domains to register their operations, and sets devices
as they are discovere3d in that domain to use them.

Signed-off-by: Keith Busch <keith.busch@intel.com>
---
 arch/x86/include/asm/device.h | 10 ++++++++++
 arch/x86/pci/common.c         | 38 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 48 insertions(+)

diff --git a/arch/x86/include/asm/device.h b/arch/x86/include/asm/device.h
index 03dd729..3b23897 100644
--- a/arch/x86/include/asm/device.h
+++ b/arch/x86/include/asm/device.h
@@ -10,6 +10,16 @@ struct dev_archdata {
 #endif
 };
 
+#if defined(CONFIG_X86_DEV_DMA_OPS) && defined(CONFIG_PCI_DOMAINS)
+struct dma_domain {
+	struct list_head node;
+	struct dma_map_ops *dma_ops;
+	int domain_nr;
+};
+extern void add_dma_domain(struct dma_domain *domain);
+extern void del_dma_domain(struct dma_domain *domain);
+#endif
+
 struct pdev_archdata {
 };
 
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
index dc78a4a..e227ba2 100644
--- a/arch/x86/pci/common.c
+++ b/arch/x86/pci/common.c
@@ -641,6 +641,43 @@ unsigned int pcibios_assign_all_busses(void)
 	return (pci_probe & PCI_ASSIGN_ALL_BUSSES) ? 1 : 0;
 }
 
+#if defined(CONFIG_X86_DEV_DMA_OPS) && defined(CONFIG_PCI_DOMAINS)
+LIST_HEAD(dma_domain_list);
+DEFINE_SPINLOCK(dma_domain_list_lock);
+
+void add_dma_domain(struct dma_domain *domain)
+{
+	spin_lock(&dma_domain_list_lock);
+	list_add(&domain->node, &dma_domain_list);
+	spin_unlock(&dma_domain_list_lock);
+}
+EXPORT_SYMBOL_GPL(add_dma_domain);
+
+void del_dma_domain(struct dma_domain *domain)
+{
+	spin_lock(&dma_domain_list_lock);
+	list_del(&domain->node);
+	spin_unlock(&dma_domain_list_lock);
+}
+EXPORT_SYMBOL_GPL(del_dma_domain);
+
+static void set_dma_domain_ops(struct pci_dev *pdev)
+{
+	struct dma_domain *domain;
+
+	spin_lock(&dma_domain_list_lock);
+	list_for_each_entry(domain, &dma_domain_list, node) {
+		if (pci_domain_nr(pdev->bus) == domain->domain_nr) {
+			pdev->dev.archdata.dma_ops = domain->dma_ops;
+			break;
+		}
+	}
+	spin_unlock(&dma_domain_list_lock);
+}
+#else
+static void set_dma_domain_ops(struct pci_dev *pdev) {}
+#endif
+
 int pcibios_add_device(struct pci_dev *dev)
 {
 	struct setup_data *data;
@@ -670,6 +707,7 @@ int pcibios_add_device(struct pci_dev *dev)
 		pa_data = data->next;
 		iounmap(data);
 	}
+	set_dma_domain_ops(dev);
 	return 0;
 }
 
-- 
2.6.2.307.g37023ba

--
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/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCHv5 0/6] Driver for new VMD device Keith Busch <keith.busch@intel.com> - 2015-11-13 18:20 +0100
  [PATCHv5 2/6] pci: skip child bus with conflicting resources Keith Busch <keith.busch@intel.com> - 2015-11-13 18:20 +0100
  [PATCHv5 6/6] pciutils: Allow 32-bit domains Keith Busch <keith.busch@intel.com> - 2015-11-13 18:20 +0100
  [PATCHv5 5/6] x86/pci: Initial commit for new VMD device driver Keith Busch <keith.busch@intel.com> - 2015-11-13 18:20 +0100
    Re: [PATCHv5 5/6] x86/pci: Initial commit for new VMD device  driver Thomas Gleixner <tglx@linutronix.de> - 2015-11-13 22:30 +0100
      Re: [PATCHv5 5/6] x86/pci: Initial commit for new VMD device driver Keith Busch <keith.busch@intel.com> - 2015-11-13 22:50 +0100
  [PATCHv5 4/6] x86-pci: allow pci domain specific dma ops Keith Busch <keith.busch@intel.com> - 2015-11-13 18:20 +0100
  [PATCHv5 1/6] msi: Relax msi_domain_alloc() to support parentless MSI irqdomains Keith Busch <keith.busch@intel.com> - 2015-11-13 18:20 +0100
    Re: [PATCHv5 1/6] msi: Relax msi_domain_alloc() to support parentless  MSI irqdomains Thomas Gleixner <tglx@linutronix.de> - 2015-11-13 22:30 +0100
  Re: [PATCHv5 0/6] Driver for new VMD device Thomas Gleixner <tglx@linutronix.de> - 2015-11-13 22:30 +0100

csiph-web