All of lore.kernel.org
 help / color / mirror / Atom feed
From: FUJITA Tomonori <tomof@acm.org>
To: akpm@linux-foundation.org
Cc: linux-kernel@vger.kernel.org, linux-scsi@vger.kernel.org,
	James.Bottomley@SteelEye.com, jens.axboe@oracle.com,
	greg@kroah.com, jeff@garzik.org, fujita.tomonori@lab.ntt.co.jp
Subject: [PATCH -mm 01/11] add device_dma_parameters structure
Date: Wed, 24 Oct 2007 19:48:01 +0900	[thread overview]
Message-ID: <20071024174021G.tomof@acm.org> (raw)
In-Reply-To: <67bb10d9f4e9473ddc84d9839114602c1966f19f.tomof@acm.org>

iommu code merges scatter/gather segments without considering a low
level driver's restrictions. The problem is that iommu code can't
access to the limitations because they are in request_queue.

This patch adds a new structure, device_dma_parameters, including dma
information. A pointer to device_dma_parameters is added to struct
device.

- there are only max_segment_size and segment_boundary_mask there but
we'll move more dma stuff in struct device (like dma_mask) to struct
device_dma_parameters later. segment_boundary_mask is not supported
yet.

- new accessors for the dma parameters are added. So we can easily
change where to place struct device_dma_parameters in the future.

- dma_get_max_seg_size returns 64K if dma_parms in struct device isn't
set up properly. 64K is the default max_segment_size in the block
layer.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
---
 include/linux/device.h      |   11 +++++++++++
 include/linux/dma-mapping.h |   15 +++++++++++++++
 2 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/include/linux/device.h b/include/linux/device.h
index 2e15822..9eb883f 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -397,6 +397,15 @@ extern int devres_release_group(struct device *dev, void *id);
 extern void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp);
 extern void devm_kfree(struct device *dev, void *p);
 
+struct device_dma_parameters {
+	/*
+	 * a low level driver may set these to teach IOMMU code about
+	 * sg limitations.
+	 */
+	unsigned int max_segment_size;
+	unsigned long segment_boundary_mask;
+};
+
 struct device {
 	struct klist		klist_children;
 	struct klist_node	knode_parent;		/* node in sibling list */
@@ -432,6 +441,8 @@ struct device {
 					     64 bit addresses for consistent
 					     allocations such descriptors. */
 
+	struct device_dma_parameters *dma_parms;
+
 	struct list_head	dma_pools;	/* dma pools (if dma'ble) */
 
 	struct dma_coherent_mem	*dma_mem; /* internal for coherent mem
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index 101a2d4..71972ca 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -60,6 +60,21 @@ static inline int is_device_dma_capable(struct device *dev)
 
 extern u64 dma_get_required_mask(struct device *dev);
 
+static inline unsigned int dma_get_max_seg_size(struct device *dev)
+{
+	return dev->dma_parms ? dev->dma_parms->max_segment_size : 65536;
+}
+
+static inline unsigned int dma_set_max_seg_size(struct device *dev,
+						unsigned int size)
+{
+	if (dev->dma_parms) {
+		dev->dma_parms->max_segment_size = size;
+		return 0;
+	} else
+		return -EIO;
+}
+
 /* flags for the coherent memory api */
 #define	DMA_MEMORY_MAP			0x01
 #define DMA_MEMORY_IO			0x02
-- 
1.5.2.4


  reply	other threads:[~2007-10-24 10:58 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-24 10:47 [PATCH -mm 0/11] fix iommu sg merging problem FUJITA Tomonori
2007-10-24 10:48 ` FUJITA Tomonori [this message]
2007-10-24 11:33   ` [PATCH -mm 01/11] add device_dma_parameters structure Jeff Garzik
2007-10-24 10:48 ` [PATCH -mm 02/11] PCI: add device_dma_parameters support FUJITA Tomonori
2007-10-24 11:34   ` Jeff Garzik
2007-10-24 13:41     ` FUJITA Tomonori
2007-10-24 10:48 ` [PATCH -mm 03/11] x86: make pci-gart iommu respect the segment size limits FUJITA Tomonori
2007-10-24 10:48 ` [PATCH -mm 04/11] ppc: make " FUJITA Tomonori
2007-10-24 10:48 ` [PATCH -mm 05/11] IA64: make sba_iommu " FUJITA Tomonori
2007-10-24 10:48 ` [PATCH -mm 06/11] alpha: make pci_iommu " FUJITA Tomonori
2007-10-24 10:48 ` [PATCH -mm 07/11] sparc64: make iommu " FUJITA Tomonori
2007-10-24 10:48 ` [PATCH -mm 08/11] parisc: " FUJITA Tomonori
2007-10-24 11:35   ` Jeff Garzik
2007-10-24 10:48 ` [PATCH -mm 09/11] call blk_queue_segment_boundary in __scsi_alloc_queue FUJITA Tomonori
2007-10-24 11:39   ` Jeff Garzik
2007-10-24 14:15     ` FUJITA Tomonori
2007-10-24 14:28       ` Jens Axboe
2007-10-24 14:36         ` FUJITA Tomonori
2007-10-24 14:36           ` FUJITA Tomonori
2007-10-24 14:34       ` Jeff Garzik
2007-10-24 10:48 ` [PATCH -mm 10/11] sata_inic162x: use pci_set_dma_max_seg_size FUJITA Tomonori
2007-10-24 11:39   ` Jeff Garzik
2007-10-24 10:48 ` [PATCH -mm 11/11] aacraid: " FUJITA Tomonori
2007-10-24 11:31   ` Jeff Garzik
2007-10-24 11:35     ` FUJITA Tomonori
2007-10-24 13:34     ` Salyzyn, Mark
2007-10-24 13:34       ` Salyzyn, Mark
2007-10-24 13:34   ` Salyzyn, Mark
2007-10-24 13:34     ` Salyzyn, Mark
2007-10-24 16:21     ` FUJITA Tomonori
2007-10-24 16:25       ` Salyzyn, Mark
2007-10-24 16:25         ` Salyzyn, Mark
2007-10-24 11:40 ` [PATCH -mm 0/11] fix iommu sg merging problem Jeff Garzik
2007-10-24 14:32   ` FUJITA Tomonori
2007-10-24 13:24 ` Jens Axboe

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=20071024174021G.tomof@acm.org \
    --to=tomof@acm.org \
    --cc=James.Bottomley@SteelEye.com \
    --cc=akpm@linux-foundation.org \
    --cc=fujita.tomonori@lab.ntt.co.jp \
    --cc=greg@kroah.com \
    --cc=jeff@garzik.org \
    --cc=jens.axboe@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    /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.