Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1269108
| From | Keith Busch <keith.busch@intel.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCHv5 4/6] x86-pci: allow pci domain specific dma ops |
| Date | 2015-11-13 18:20 +0100 |
| Message-ID | <quqb2-Rg-31@gated-at.bofh.it> (permalink) |
| References | <quqb0-Rg-3@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
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 | Next — Previous in thread | Next in thread | Find similar | Unroll 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