diff options
author | FUJITA Tomonori <tomof@acm.org> | 2008-02-05 01:28:17 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-05 12:44:12 -0500 |
commit | 99c84dbdc73d158a1ab955a4a5f74c18074796a3 (patch) | |
tree | 497fc8e86eca9b22a159c512e68ff8828a5e923b /drivers/scsi | |
parent | 681cc5cd3efbeafca6386114070e0bfb5012e249 (diff) |
iommu sg merging: call dma_set_seg_boundary in __scsi_alloc_queue()
This is a one-line patch to add the following to __scsi_alloc_queue():
dma_set_seg_boundary(dev, shost->dma_boundary);
This is the simplest approach but the result looks odd,
__scsi_alloc_queue() does:
blk_queue_segment_boundary(q, shost->dma_boundary);
dma_set_seg_boundary(dev, shost->dma_boundary);
blk_queue_max_segment_size(q, dma_get_max_seg_size(dev));
I think that it would be better to set up segment boundary in the same
way as we did for the maximum segment size. That is, removing
shost->dma_boundary and LLDs call pci_set_dma_seg_boundary (or its
friends).
Then __scsi_alloc_queue() can set up both limits in the same way:
blk_queue_segment_boundary(q, dma_get_seg_boundary(dev));
blk_queue_max_segment_size(q, dma_get_max_seg_size(dev));
killing dma_boundary in scsi_host_template needs a large patch for
libata (dma_boundary is used by only libata and sym53c8xx). I'll send
a patch to do that if it is acceptable. James and Jeff?
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Cc: James Bottomley <James.Bottomley@steeleye.com>
Cc: Jens Axboe <jens.axboe@oracle.com>
Cc: Greg KH <greg@kroah.com>
Cc: Jeff Garzik <jeff@garzik.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/scsi_lib.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 68e424f09acb..f243fc30c908 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
@@ -1584,6 +1584,7 @@ struct request_queue *__scsi_alloc_queue(struct Scsi_Host *shost, | |||
1584 | blk_queue_max_sectors(q, shost->max_sectors); | 1584 | blk_queue_max_sectors(q, shost->max_sectors); |
1585 | blk_queue_bounce_limit(q, scsi_calculate_bounce_limit(shost)); | 1585 | blk_queue_bounce_limit(q, scsi_calculate_bounce_limit(shost)); |
1586 | blk_queue_segment_boundary(q, shost->dma_boundary); | 1586 | blk_queue_segment_boundary(q, shost->dma_boundary); |
1587 | dma_set_seg_boundary(dev, shost->dma_boundary); | ||
1587 | 1588 | ||
1588 | blk_queue_max_segment_size(q, dma_get_max_seg_size(dev)); | 1589 | blk_queue_max_segment_size(q, dma_get_max_seg_size(dev)); |
1589 | 1590 | ||