diff options
author | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2008-08-14 09:28:14 +0200 |
---|---|---|
committer | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2008-10-15 22:21:07 +0200 |
commit | ed6ffd08084c68e9c3911e27706dec9d4c9a4175 (patch) | |
tree | e13379a355b162636c8e06a82b71c2d145de5708 /drivers/ide | |
parent | cd8c79f17a878b01f3e83a8efd89da18ccdc7ef3 (diff) | |
download | op-kernel-dev-ed6ffd08084c68e9c3911e27706dec9d4c9a4175.zip op-kernel-dev-ed6ffd08084c68e9c3911e27706dec9d4c9a4175.tar.gz |
ieee1394: sbp2: enforce s/g segment size limit
1. We don't need to round the SBP-2 segment size limit down to a
multiple of 4 kB (0xffff -> 0xf000). It is only necessary to
ensure quadlet alignment (0xffff -> 0xfffc).
2. Use dma_set_max_seg_size() to tell the DMA mapping infrastructure
and the block IO layer about the restriction. This way we can
remove the size checks and segment splitting in the queuecommand
path.
This assumes that no other code in the ieee1394 stack uses
dma_map_sg() with conflicting requirements. It furthermore assumes
that the controller device's platform actually allows us to set the
segment size to our liking. Assert the latter with a BUG_ON().
3. Also use blk_queue_max_segment_size() to tell the block IO layer
about it. It cannot know it because our scsi_add_host() does not
point to the FireWire controller's device.
We can also uniformly use dma_map_sg() for the single segment case just
like for the multi segment case, to further simplify the code.
Also clean up how the page table is converted to big endian.
Thanks to Grant Grundler and FUJITA Tomonori for advice.
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'drivers/ide')
0 files changed, 0 insertions, 0 deletions