From: Glauber Costa <gcosta@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: akpm@linux-foundation.org, glommer@gmail.com, mingo@elte.hu,
tglx@linutronix.de, kvm-devel@lists.sourceforge.net,
amit.shah@qumranet.com, avi@qumranet.com,
Glauber Costa <gcosta@redhat.com>
Subject: [PATCH 10/28] x86: unify pci-nommu
Date: Tue, 8 Apr 2008 13:20:52 -0300 [thread overview]
Message-ID: <12076717383759-git-send-email-gcosta@redhat.com> (raw)
In-Reply-To: <12076716702129-git-send-email-gcosta@redhat.com>
merge pci-base_32.c and pci-nommu_64.c into pci-nommu.c
Their code were made the same, so now they can be merged.
Signed-off-by: Glauber Costa <gcosta@redhat.com>
---
arch/x86/kernel/Makefile | 5 +-
arch/x86/kernel/pci-base_32.c | 60 ------------------------
arch/x86/kernel/pci-dma.c | 8 +++
arch/x86/kernel/pci-dma_64.c | 8 ---
arch/x86/kernel/pci-nommu.c | 100 ++++++++++++++++++++++++++++++++++++++++
arch/x86/kernel/pci-nommu_64.c | 100 ----------------------------------------
6 files changed, 110 insertions(+), 171 deletions(-)
delete mode 100644 arch/x86/kernel/pci-base_32.c
create mode 100644 arch/x86/kernel/pci-nommu.c
delete mode 100644 arch/x86/kernel/pci-nommu_64.c
diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
index befe901..b2a1358 100644
--- a/arch/x86/kernel/Makefile
+++ b/arch/x86/kernel/Makefile
@@ -25,9 +25,8 @@ obj-$(CONFIG_X86_64) += sys_x86_64.o x8664_ksyms_64.o
obj-$(CONFIG_X86_64) += syscall_64.o vsyscall_64.o setup64.o
obj-y += pci-dma_$(BITS).o bootflag.o e820_$(BITS).o
obj-y += pci-dma.o quirks.o i8237.o topology.o kdebugfs.o
-obj-y += alternative.o i8253.o
-obj-$(CONFIG_X86_64) += pci-nommu_64.o bugs_64.o
-obj-$(CONFIG_X86_32) += pci-base_32.o
+obj-y += alternative.o i8253.o pci-nommu.o
+obj-$(CONFIG_X86_64) += bugs_64.o
obj-y += tsc_$(BITS).o io_delay.o rtc.o
obj-y += process.o
diff --git a/arch/x86/kernel/pci-base_32.c b/arch/x86/kernel/pci-base_32.c
deleted file mode 100644
index b44ea51..0000000
--- a/arch/x86/kernel/pci-base_32.c
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <linux/mm.h>
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/dma-mapping.h>
-#include <asm/dma-mapping.h>
-
-static dma_addr_t pci32_map_single(struct device *dev, phys_addr_t ptr,
- size_t size, int direction)
-{
- WARN_ON(size == 0);
- flush_write_buffers();
- return ptr;
-}
-
-static int pci32_dma_map_sg(struct device *dev, struct scatterlist *sglist,
- int nents, int direction)
-{
- struct scatterlist *sg;
- int i;
-
- WARN_ON(nents == 0 || sglist[0].length == 0);
-
- for_each_sg(sglist, sg, nents, i) {
- BUG_ON(!sg_page(sg));
-
- sg->dma_address = sg_phys(sg);
- sg->dma_length = sg->length;
- }
-
- flush_write_buffers();
- return nents;
-}
-
-/* Make sure we keep the same behaviour */
-static int pci32_map_error(dma_addr_t dma_addr)
-{
- return 0;
-}
-
-const struct dma_mapping_ops pci32_dma_ops = {
- .map_single = pci32_map_single,
- .unmap_single = NULL,
- .map_sg = pci32_dma_map_sg,
- .unmap_sg = NULL,
- .sync_single_for_cpu = NULL,
- .sync_single_for_device = NULL,
- .sync_single_range_for_cpu = NULL,
- .sync_single_range_for_device = NULL,
- .sync_sg_for_cpu = NULL,
- .sync_sg_for_device = NULL,
- .mapping_error = pci32_map_error,
-};
-
-/* this is temporary */
-int __init no_iommu_init(void)
-{
- dma_ops = &pci32_dma_ops;
- return 0;
-}
-fs_initcall(no_iommu_init);
diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c
index d30634b..6b77fd8 100644
--- a/arch/x86/kernel/pci-dma.c
+++ b/arch/x86/kernel/pci-dma.c
@@ -7,6 +7,14 @@
const struct dma_mapping_ops *dma_ops;
EXPORT_SYMBOL(dma_ops);
+#ifdef CONFIG_IOMMU_DEBUG
+int panic_on_overflow __read_mostly = 1;
+int force_iommu __read_mostly = 1;
+#else
+int panic_on_overflow __read_mostly = 0;
+int force_iommu __read_mostly = 0;
+#endif
+
int dma_set_mask(struct device *dev, u64 mask)
{
if (!dev->dma_mask || !dma_supported(dev, mask))
diff --git a/arch/x86/kernel/pci-dma_64.c b/arch/x86/kernel/pci-dma_64.c
index e95f671..4202130 100644
--- a/arch/x86/kernel/pci-dma_64.c
+++ b/arch/x86/kernel/pci-dma_64.c
@@ -27,14 +27,6 @@ EXPORT_SYMBOL(iommu_bio_merge);
static int iommu_sac_force __read_mostly = 0;
int no_iommu __read_mostly;
-#ifdef CONFIG_IOMMU_DEBUG
-int panic_on_overflow __read_mostly = 1;
-int force_iommu __read_mostly = 1;
-#else
-int panic_on_overflow __read_mostly = 0;
-int force_iommu __read_mostly= 0;
-#endif
-
/* Set this to 1 if there is a HW IOMMU in the system */
int iommu_detected __read_mostly = 0;
diff --git a/arch/x86/kernel/pci-nommu.c b/arch/x86/kernel/pci-nommu.c
new file mode 100644
index 0000000..aec43d5
--- /dev/null
+++ b/arch/x86/kernel/pci-nommu.c
@@ -0,0 +1,100 @@
+/* Fallback functions when the main IOMMU code is not compiled in. This
+ code is roughly equivalent to i386. */
+#include <linux/mm.h>
+#include <linux/init.h>
+#include <linux/pci.h>
+#include <linux/string.h>
+#include <linux/dma-mapping.h>
+#include <linux/scatterlist.h>
+
+#include <asm/gart.h>
+#include <asm/processor.h>
+#include <asm/dma.h>
+
+static int
+check_addr(char *name, struct device *hwdev, dma_addr_t bus, size_t size)
+{
+ if (hwdev && bus + size > *hwdev->dma_mask) {
+ if (*hwdev->dma_mask >= DMA_32BIT_MASK)
+ printk(KERN_ERR
+ "nommu_%s: overflow %Lx+%zu of device mask %Lx\n",
+ name, (long long)bus, size,
+ (long long)*hwdev->dma_mask);
+ return 0;
+ }
+ return 1;
+}
+
+static dma_addr_t
+nommu_map_single(struct device *hwdev, phys_addr_t paddr, size_t size,
+ int direction)
+{
+ dma_addr_t bus = paddr;
+ WARN_ON(size == 0);
+ if (!check_addr("map_single", hwdev, bus, size))
+ return bad_dma_address;
+ flush_write_buffers();
+ return bus;
+}
+
+
+/* Map a set of buffers described by scatterlist in streaming
+ * mode for DMA. This is the scatter-gather version of the
+ * above pci_map_single interface. Here the scatter gather list
+ * elements are each tagged with the appropriate dma address
+ * and length. They are obtained via sg_dma_{address,length}(SG).
+ *
+ * NOTE: An implementation may be able to use a smaller number of
+ * DMA address/length pairs than there are SG table elements.
+ * (for example via virtual mapping capabilities)
+ * The routine returns the number of addr/length pairs actually
+ * used, at most nents.
+ *
+ * Device ownership issues as mentioned above for pci_map_single are
+ * the same here.
+ */
+static int nommu_map_sg(struct device *hwdev, struct scatterlist *sg,
+ int nents, int direction)
+{
+ struct scatterlist *s;
+ int i;
+
+ WARN_ON(nents == 0 || sg[0].length == 0);
+
+ for_each_sg(sg, s, nents, i) {
+ BUG_ON(!sg_page(s));
+ s->dma_address = sg_phys(s);
+ if (!check_addr("map_sg", hwdev, s->dma_address, s->length))
+ return 0;
+ s->dma_length = s->length;
+ }
+ flush_write_buffers();
+ return nents;
+}
+
+/* Make sure we keep the same behaviour */
+static int nommu_mapping_error(dma_addr_t dma_addr)
+{
+#ifdef CONFIG_X86_32
+ return 0;
+#else
+ return (dma_addr == bad_dma_address);
+#endif
+}
+
+
+const struct dma_mapping_ops nommu_dma_ops = {
+ .map_single = nommu_map_single,
+ .map_sg = nommu_map_sg,
+ .mapping_error = nommu_mapping_error,
+ .is_phys = 1,
+};
+
+void __init no_iommu_init(void)
+{
+ if (dma_ops)
+ return;
+
+ force_iommu = 0; /* no HW IOMMU */
+ dma_ops = &nommu_dma_ops;
+}
diff --git a/arch/x86/kernel/pci-nommu_64.c b/arch/x86/kernel/pci-nommu_64.c
deleted file mode 100644
index 8d036ae..0000000
--- a/arch/x86/kernel/pci-nommu_64.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/* Fallback functions when the main IOMMU code is not compiled in. This
- code is roughly equivalent to i386. */
-#include <linux/mm.h>
-#include <linux/init.h>
-#include <linux/pci.h>
-#include <linux/string.h>
-#include <linux/dma-mapping.h>
-#include <linux/scatterlist.h>
-
-#include <asm/gart.h>
-#include <asm/processor.h>
-#include <asm/dma.h>
-
-static int
-check_addr(char *name, struct device *hwdev, dma_addr_t bus, size_t size)
-{
- if (hwdev && bus + size > *hwdev->dma_mask) {
- if (*hwdev->dma_mask >= DMA_32BIT_MASK)
- printk(KERN_ERR
- "nommu_%s: overflow %Lx+%zu of device mask %Lx\n",
- name, (long long)bus, size,
- (long long)*hwdev->dma_mask);
- return 0;
- }
- return 1;
-}
-
-static dma_addr_t
-nommu_map_single(struct device *hwdev, phys_addr_t paddr, size_t size,
- int direction)
-{
- dma_addr_t bus = paddr;
- WARN_ON(size == 0);
- if (!check_addr("map_single", hwdev, bus, size))
- return bad_dma_address;
- flush_write_buffers();
- return bus;
-}
-
-
-/* Map a set of buffers described by scatterlist in streaming
- * mode for DMA. This is the scatter-gather version of the
- * above pci_map_single interface. Here the scatter gather list
- * elements are each tagged with the appropriate dma address
- * and length. They are obtained via sg_dma_{address,length}(SG).
- *
- * NOTE: An implementation may be able to use a smaller number of
- * DMA address/length pairs than there are SG table elements.
- * (for example via virtual mapping capabilities)
- * The routine returns the number of addr/length pairs actually
- * used, at most nents.
- *
- * Device ownership issues as mentioned above for pci_map_single are
- * the same here.
- */
-static int nommu_map_sg(struct device *hwdev, struct scatterlist *sg,
- int nents, int direction)
-{
- struct scatterlist *s;
- int i;
-
- WARN_ON(nents == 0 || sg[0].length == 0);
-
- for_each_sg(sg, s, nents, i) {
- BUG_ON(!sg_page(s));
- s->dma_address = sg_phys(s);
- if (!check_addr("map_sg", hwdev, s->dma_address, s->length))
- return 0;
- s->dma_length = s->length;
- }
- flush_write_buffers();
- return nents;
-}
-
-/* Make sure we keep the same behaviour */
-static int nommu_mapping_error(dma_addr_t dma_addr)
-{
-#ifdef CONFIG_X86_32
- return 0;
-#else
- return (dma_addr == bad_dma_address);
-#endif
-}
-
-
-const struct dma_mapping_ops nommu_dma_ops = {
- .map_single = nommu_map_single,
- .map_sg = nommu_map_sg,
- .mapping_error = nommu_mapping_error,
- .is_phys = 1,
-};
-
-void __init no_iommu_init(void)
-{
- if (dma_ops)
- return;
-
- force_iommu = 0; /* no HW IOMMU */
- dma_ops = &nommu_dma_ops;
-}
--
1.5.0.6
next prev parent reply other threads:[~2008-04-08 16:29 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-08 16:20 [PATCH 0/28] integrate dma_ops Glauber Costa
2008-04-08 16:20 ` [PATCH 01/28] x86: introduce pci-dma.c Glauber Costa
2008-04-08 16:20 ` [PATCH 02/28] x86: delete empty functions from pci-nommu_64.c Glauber Costa
2008-04-08 16:20 ` [PATCH 03/28] x86: implement mapping_error in pci-nommu_64.c Glauber Costa
2008-04-08 16:20 ` [PATCH 04/28] x86: Add flush_write_buffers in nommu functions Glauber Costa
2008-04-08 16:20 ` [PATCH 05/28] x86: use sg_phys in x86_64 Glauber Costa
2008-04-08 16:20 ` [PATCH 06/28] x86: use dma_length in i386 Glauber Costa
2008-04-08 16:20 ` [PATCH 07/28] x86: use WARN_ON in mapping functions Glauber Costa
2008-04-08 16:20 ` [PATCH 08/28] x86: move definition to pci-dma.c Glauber Costa
2008-04-08 16:20 ` [PATCH 09/28] x86: move initialization functions " Glauber Costa
2008-04-08 16:20 ` Glauber Costa [this message]
2008-04-08 16:20 ` [PATCH 11/28] x86: move pci fixup " Glauber Costa
2008-04-08 16:20 ` [PATCH 12/28] x86: move x86_64-specific to common code Glauber Costa
2008-04-08 16:20 ` [PATCH 13/28] x86: merge dma_supported Glauber Costa
2008-04-08 16:20 ` [PATCH 14/28] x86: merge iommu initialization parameters Glauber Costa
2008-04-08 16:20 ` [PATCH 15/28] x86: move dma_coherent functions to pci-dma.c Glauber Costa
2008-04-08 16:20 ` [PATCH 16/28] x86: isolate coherent mapping functions Glauber Costa
2008-04-08 16:20 ` [PATCH 17/28] x86: adjust dma_free_coherent for i386 Glauber Costa
2008-04-08 16:21 ` [PATCH 18/28] x86: move bad_dma_address Glauber Costa
2008-04-08 16:21 ` [PATCH 19/28] x86: remove virt_to_bus in pci-dma_64.c Glauber Costa
2008-04-08 16:21 ` [PATCH 20/28] x86: use numa allocation function in i386 Glauber Costa
2008-04-08 16:21 ` [PATCH 21/28] x86: retry allocation if failed Glauber Costa
2008-04-08 16:21 ` [PATCH 22/28] x86: use a fallback dev for i386 Glauber Costa
2008-04-08 16:21 ` [PATCH 23/28] x86: don't try to allocate from DMA zone at first Glauber Costa
2008-04-08 16:21 ` [PATCH 24/28] x86: unify gfp masks Glauber Costa
2008-04-08 16:21 ` [PATCH 25/28] x86: remove kludge from x86_64 Glauber Costa
2008-04-08 16:21 ` [PATCH 26/28] x86: return conditional to mmu Glauber Costa
2008-04-08 16:21 ` [PATCH 27/28] x86: don't do dma if mask is NULL Glauber Costa
2008-04-08 16:21 ` [PATCH 28/28] x86: integrate pci-dma.c Glauber Costa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=12076717383759-git-send-email-gcosta@redhat.com \
--to=gcosta@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=amit.shah@qumranet.com \
--cc=avi@qumranet.com \
--cc=glommer@gmail.com \
--cc=kvm-devel@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.