Commit Graph
100 Commits
Author SHA1 Message Date
FUJITA Tomonori a852250920 swiotlb: use iommu_is_span_boundary helper function
iommu_is_span_boundary in lib/iommu-helper.c was exported for PARISC IOMMUs
(commit 3715863aa1).  SWIOTLB can use it instead
of the homegrown function.

Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: H. Peter Anvin <[email protected]>
Cc: Tony Luck <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
2008-04-29 08:06:05 -07:00
FUJITA Tomonori 93c20a59af [SCSI] scsi_transport_sas: fix the lifetime of sas bsg objects
scsi_transport_sas calls blk_cleanup_queue too early for bsg
queues. If a user holds a sas_host, end_device, or expander device
open, remove the device, then send a request to it, we get a kernel
crash. We need to call blk_cleanup_queue in the release callback as we
do with scsi devices.

This patch moves blk_cleanup_queue to sas_expander_release and
sas_end_device_release from sas_bsg_remove. sas_host can't use the
release callback in struct device so use bsg's release callback.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-22 15:16:32 -05:00
FUJITA Tomonori 97f46ae45c [SCSI] bsg: add release callback support
This patch adds release callback support, which is called when a bsg
device goes away. bsg_register_queue() takes a pointer to a callback
function. This feature is useful for stuff like sas_host that can't
use the release callback in struct device.

If a caller doesn't need bsg's release callback, it can call
bsg_register_queue() with NULL pointer (e.g. scsi devices can use
release callback in struct device so they don't need bsg's callback).

With this patch, bsg uses kref for refcounts on bsg devices instead of
get/put_device in fops->open/release. bsg calls put_device and the
caller's release callback (if it was registered) in kref_put's
release.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-22 15:16:32 -05:00
FUJITA Tomonori f18573abcc block: move the padding adjustment to blk_rq_map_sg
blk_rq_map_user adjusts bi_size of the last bio. It breaks the rule
that req->data_len (the true data length) is equal to sum(bio). It
broke the scsi command completion code.

commit e97a294ef6 was introduced to fix
the above issue. However, the partial completion code doesn't work
with it. The commit is also a layer violation (scsi mid-layer should
not know about the block layer's padding).

This patch moves the padding adjustment to blk_rq_map_sg (suggested by
James). The padding works like the drain buffer. This patch breaks the
rule that req->data_len is equal to sum(sg), however, the drain buffer
already broke it. So this patch just restores the rule that
req->data_len is equal to sub(bio) without breaking anything new.

Now when a low level driver needs padding, blk_rq_map_user and
blk_rq_map_user_iov guarantee there's enough room for padding.
blk_rq_map_sg can safely extend the last entry of a scatter list.

blk_rq_map_sg must extend the last entry of a scatter list only for a
request that got through bio_copy_user_iov. This patches introduces
new REQ_COPY_USER flag.

Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Tejun Heo <[email protected]>
Cc: Mike Christie <[email protected]>
Cc: James Bottomley <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2008-04-21 09:50:08 +02:00
FUJITA Tomonori afdc1a780e block: add bio_copy_user_iov support to blk_rq_map_user_iov
With this patch, blk_rq_map_user_iov uses bio_copy_user_iov when a low
level driver needs padding or a buffer in sg_iovec isn't aligned. That
is, it uses temporary kernel buffers instead of mapping user pages
directly.

When a LLD needs padding, later blk_rq_map_sg needs to extend the last
entry of a scatter list. bio_copy_user_iov guarantees that there is
enough space for padding by using temporary kernel buffers instead of
user pages.

blk_rq_map_user_iov needs buffers in sg_iovec to be aligned. The
comment in blk_rq_map_user_iov indicates that drivers/scsi/sg.c also
needs buffers in sg_iovec to be aligned. Actually, drivers/scsi/sg.c
works with unaligned buffers in sg_iovec (it always uses temporary
kernel buffers).

Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Tejun Heo <[email protected]>
Cc: Mike Christie <[email protected]>
Cc: James Bottomley <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2008-04-21 09:50:08 +02:00
FUJITA Tomonori c5dec1c303 block: convert bio_copy_user to bio_copy_user_iov
This patch enables bio_copy_user to take struct sg_iovec (renamed
bio_copy_user_iov). bio_copy_user uses bio_copy_user_iov internally as
bio_map_user uses bio_map_user_iov.

The major changes are:

- adds sg_iovec array to struct bio_map_data

- adds __bio_copy_iov that copy data between bio and
sg_iovec. bio_copy_user_iov and bio_uncopy_user use it.

Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Tejun Heo <[email protected]>
Cc: Mike Christie <[email protected]>
Cc: James Bottomley <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2008-04-21 09:50:08 +02:00
FUJITA Tomonori 99773aab03 [SCSI] bsg: no need to set BSG_F_BLOCK bit in bsg_complete_all_commands
Before bsg_complete_all_commands is called, BSG_F_BLOCK bit is always
set.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-18 11:48:43 -05:00
FUJITA Tomonori 842ea771c3 [SCSI] bsg: remove minor in struct bsg_device
minor in struct bsg_device is used as identifier to find the
corresponding struct bsg_device_class. However, request_queuse can be
used as identifier for that and the minor in struct bsg_device is
unnecessary.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-18 11:48:26 -05:00
FUJITA Tomonori 43ac9e62c4 [SCSI] bsg: use better helper list functions
This replace hlist_for_each and list_entry with hlist_for_each_entry
and list_first_entry respectively.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-18 11:48:08 -05:00
FUJITA Tomonori c3ff1b90d8 [SCSI] bsg: replace kobject_get with blk_get_queue
Both takes a ref to a queue. But blk_get_queue checks QUEUE_FLAG_DEAD
and is more appropriate interface here.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-18 11:47:49 -05:00
FUJITA Tomonori d45ac4fa8f [SCSI] bsg: takes a ref to struct device in fops->open
bsg_register_queue() takes a ref to struct device that a caller
passes. For example, bsg takes a ref to the sdev_gendev for scsi
devices. However, bsg doesn't inrease the refcount in fops->open. So
while an application opens a bsg device, the scsi device that the bsg
device holds can go away (bsg also takes a ref to a queue, but it
doesn't prevent the device from going away).

With this patch, bsg increases the refcount of struct device in
fops->open and decreases it in fops->release.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-18 11:47:19 -05:00
FUJITA Tomonori b312bab3b9 [SCSI] tgt: use KMEM_CACHE macro
This uses new KMEM_CACHE() macro instead of kmem_cache_create directly
to simplify slab cache creation.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-16 09:22:19 -05:00
FUJITA Tomonori b34eb53cdc [IA64] make IOMMU respect the segment boundary limits
IA64's IOMMU implementation allocates memory areas spanning LLD's segment
boundary limit.  It forces low level drivers to have a workaround to adjust
scatter lists that the IOMMU builds.

We are in the process of making all the IOMMUs respect the segment boundary
limits to remove such work around in LLDs.  This patch is for IA64's IOMMU.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Tony Luck <[email protected]>
2008-04-09 10:37:21 -07:00
FUJITA Tomonori 8dea0d02f8 [SCSI] scsi_debug: remove unnecessary function declarations
This patch removes function declarations with moving some
functions. This cleans up them a bit to silence checkpatch.pl. There
is no functional change.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:19:07 -05:00
FUJITA Tomonori 5f2578e579 [SCSI] scsi_debug: support large non-fake virtual disk
Currently, the maximum amount of RAM that scsi_debug can allocate is
4GB. This patch increases it to 2TB; scsi_debug can allocates 2TB
memory and export it as if it were 2TB scsi disk.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:19:07 -05:00
FUJITA Tomonori 1978910062 [SCSI] scsi_debug: remove the duplicated code in resp_read and resp_write
resp_read and resp_write performs READ_* and WRITE_* commands
respectively. This sweeps up the similar code in them.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:19:06 -05:00
FUJITA Tomonori 28898873b0 [SCSI] scsi_debug: sweep up sdebug_capacity calculation
sdebug_capacity is calculated at five different places. This add a
helper function to calculate sdebug_capacity to sweep up the
duplicatated code.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:19:06 -05:00
FUJITA Tomonori f58b0efbf4 [SCSI] scsi_debug: remove unnecessary sdebug_store_size
sdebug_store_size doesn't need to be static global. It's used at
startup only.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:19:06 -05:00
FUJITA Tomonori d5cdc9898b [SCSI] scsi_debug: fix lba and data length calculation bugs
For example, `modprobe scsi_debug virtual_gb=1100` gives:

scsi7 : scsi_debug, version 1.81 [20070104], dev_size_mb=8, opts=0x0
scsi 7:0:0:0: Direct-Access     Linux    scsi_debug       0004 PQ: 0 ANSI: 5
sd 7:0:0:0: [sdc] 2306867200 512-byte hardware sectors (1181116 MB)
sd 7:0:0:0: [sdc] Write Protect is off
sd 7:0:0:0: [sdc] Mode Sense: 73 00 10 08
sd 7:0:0:0: [sdc] Write cache: enabled, read cache: enabled, supports DPO and FUA
sd 7:0:0:0: [sdc] 2306867200 512-byte hardware sectors (1181116 MB)
sd 7:0:0:0: [sdc] Write Protect is off
sd 7:0:0:0: [sdc] Mode Sense: 73 00 10 08
sd 7:0:0:0: [sdc] Write cache: enabled, read cache: enabled, supports DPO and FUA
 sdc: unknown partition table
sd 7:0:0:0: [sdc] Attached SCSI disk
sd 7:0:0:0: Attached scsi generic sg6 type 0
end_request: I/O error, dev sdc, sector 2306867072
Buffer I/O error on device sdc, logical block 288358384
end_request: I/O error, dev sdc, sector 2306867072
Buffer I/O error on device sdc, logical block 288358384
end_request: I/O error, dev sdc, sector 2306867192

(snip)

Note that this converts all the calculations (including the correct
calculations) for unification.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:19:03 -05:00
FUJITA Tomonori 53df8ba801 [SCSI] ps3rom: use scsi_build_sense_buffer
Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Geert Uytterhoeven <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:19:02 -05:00
FUJITA Tomonori 11002fbcb4 [SCSI] stex: use scsi_build_sense_buffer
Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Ed Lin <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:19:02 -05:00
FUJITA Tomonori 526917641a [SCSI] libata: use scsi_build_sense_buffer
Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Jeff Garzik <[email protected]>
Cc: Tejun Heo <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:19:02 -05:00
FUJITA Tomonori a34c4e9836 [SCSI] scsi_debug: use scsi_build_sense_buffer
Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:19:01 -05:00
FUJITA Tomonori 3bc6a26192 [SCSI] add scsi_build_sense_buffer helper function
This adds scsi_build_sense_buffer, a simple helper function to build
sense data in a buffer.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:19:01 -05:00
FUJITA Tomonori 639db475c8 [SCSI] scsi_debug: remove unnecessary function declarations
This patch removes lots of function declarations with moving
scsi_debug_queuecommand. This cleans up scsi_debug_queuecommand a bit
to silence checkpatch.pl

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:18:59 -05:00
FUJITA Tomonori 8b40228f3f [SCSI] scsi_debug: use list_for_each_entry_safe
This replaces list_for_each_safe and list_entry with
list_for_each_entry_safe.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:18:59 -05:00
FUJITA Tomonori a75869d1ff [SCSI] scsi_debug: remove unnecessary condition test in devInfoReg
open_devip is always non NULL.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:18:58 -05:00
FUJITA Tomonori 5cb2fc0610 [SCSI] scsi_debug: create new scsi_debug devices at a single place
Two functions, sdebug_add_adapter and devInfoReg, creates new
scsi_debug devices. To simplify the code, this patch adds a new helper
function to create new scsi_debug devices (sdebug_device_create) and
converts both functions to use it.

I plan to add more to scsi_debug devices (e.g. using a thread for a
scsi_debug device for scalability testings). This patch enable me to
add such to just the new helper function instead of touching two
functions, sdebug_add_adapter and devInfoReg.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:18:58 -05:00
FUJITA Tomonori f3df41cff4 [SCSI] scsi_debug: remove temporary hack around sscanf for negative values
sscanf can handle negative values.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:18:58 -05:00
FUJITA Tomonori 035f5e0651 [SCSI] 3w-9xxx: use sg buffer copy helper functions
Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Adam Radford <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:15:46 -05:00
FUJITA Tomonori e943752ecf [SCSI] 3w-xxxx: use sg buffer copy helper functions
This rewrites tw_transfer_internal with scsi_sg_copy_from/to_buffer.

Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Adam Radford <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:15:46 -05:00
FUJITA Tomonori 31fe47d437 [SCSI] stex: use sg buffer copy helper functions
This replaces stex_internal_copy with scsi_sg_copy_to/from_buffer.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Ed Lin <[email protected]>
Signed-off-by: James Bottomley <[email protected]>

Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:15:46 -05:00
FUJITA Tomonori d4345028d4 [SCSI] aacraid: use sg buffer copy helper functions
This replaces aac_internal_transfer with scsi_sg_copy_to/from_buffer.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Mark Salyzyn <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:15:46 -05:00
FUJITA Tomonori 6690bae7e0 [SCSI] ips: use sg buffer copy helper funcitons
This rewrites ips_scmd_buf_write/read with scsi_sg_copy_from/to_buffer
respectively.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Salyzyn, Mark <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:15:46 -05:00
FUJITA Tomonori 1a7a2e1a77 [SCSI] simscsi: use sg buffer copy helper funcitons
This replaces simscsi_fillresult with scsi_sg_copy_from_buffer.

Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Tony Luck <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:15:45 -05:00
FUJITA Tomonori 944cf8b4cb [SCSI] ps3rom: use sg buffer copy helper funcitons
Note that if scsi_bufflen(cmd) is not zero, the command always has an
sg list. So this patch doesn't do the error checking in
fill_from_dev_buffer and fetch_to_dev_buffer did.

Signed-off-by: FUJITA Tomonori <[email protected]>
Looks-OK-to: Geert Uytterhoeven <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:15:45 -05:00
FUJITA Tomonori 21a6182924 [SCSI] scsi_debug: use sg buffer copy helper functions
Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:15:45 -05:00
FUJITA Tomonori 9ac16b616a [SCSI] scsi: add wrapper functions for sg buffer copy helper functions
LLDs need to copies data between the SG table in struct scsi_cmnd and
liner buffer. So they use the helper functions like

sg_copy_from_buffer(scsi_sglist(sc), scsi_sg_count(sc), buf, buflen)
sg_copy_to_buffer(scsi_sglist(sc), scsi_sg_count(sc), buf, buflen)

This patch just adds wrapper functions:

scsi_sg_copy_from_buffer(sc, buf, buflen)
scsi_sg_copy_to_buffer(sc, buf, buflen)

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:15:45 -05:00
FUJITA Tomonori b1adaf65ba [SCSI] block: add sg buffer copy helper functions
This patch adds new three helper functions to copy data between an SG
list and a linear buffer.

- sg_copy_from_buffer copies data from linear buffer to an SG list

- sg_copy_to_buffer copies data from an SG list to a linear buffer

When the APIs copy data from a linear buffer to an SG list,
flush_kernel_dcache_page is called. It's not necessary for everyone
but it's a no-op on most architectures and in general the API is not
used in performance critical path.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Jens Axboe <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:15:45 -05:00
FUJITA Tomonori 2505873afe [SCSI] aic79xx: fix IOMMU mapping failure handling
Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:15:44 -05:00
FUJITA Tomonori 647b242562 [SCSI] aic7xxx: fix IOMMU mapping failure handling
Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:15:44 -05:00
FUJITA Tomonori d1e4c9c57c [SCSI] scsi_debug: use shost_priv macro
Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:15:41 -05:00
FUJITA Tomonori 96ad0dfe83 [SCSI] scsi_debug: remove unnecessary checking
Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:15:41 -05:00
FUJITA Tomonori 9e603ca06a [SCSI] scsi_debug: remove scsi_debug.h
scsi_debug.h just incldues some function declarations. This patch removes it
with moving the scsi_host_template.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:15:41 -05:00
FUJITA Tomonori 9ff26eefd4 [SCSI] scsi_debug: stop including drivers/scsi/scsi.h
This converts scsi_debug to include header files in include/scsi/
instead of drivers/scsi/scsi.h.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:15:40 -05:00
FUJITA Tomonori b271f1c881 [SCSI] aacraid: READ_CAPACITY_16 shouldn't trust allocation length in cdb
When aacraid spoofs READ_CAPACITY_16, it assumes that the data length
in the sg list is equal to allocation length in cdb. But sg can put
any value in scb so the driver needs to check both the data length in
the sg list and allocation length in cdb.

If allocation length is larger than the response length that the
driver expects, it clears the data buffer in the sg list to zero but
it doesn't need to do. Just setting resid is fine.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Mark Salyzyn <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-04-07 12:15:40 -05:00
FUJITA Tomonori c819914e0d sparc64: remove unused calc_npages() in iommu_common.h
Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
2008-03-28 15:56:01 -07:00
FUJITA Tomonori f088025729 sparc64: add the segment boundary checking to IOMMUs while merging SG entries
Some IOMMUs allocate memory areas spanning LLD's segment boundary limit.  It
forces low level drivers to have a workaround to adjust scatter lists that the
IOMMU builds.  We are in the process of making all the IOMMUs respect the
segment boundary limits to remove such work around in LLDs.

SPARC64 IOMMUs were rewritten to use the IOMMU helper functions and the commit
89c94f2f70 made the IOMMUs not allocate memory
areas spanning the segment boundary limit.

However, SPARC64 IOMMUs allocate memory areas first then try to merge them
(while some IOMMUs walk through all the sg entries to see how they can be
merged first and allocate memory areas).  So SPARC64 IOMMUs also need the
boundary limit checking when they try to merge sg entries.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
2008-03-28 15:55:41 -07:00
FUJITA Tomonori 56ee0cfd09 [PARISC] make ptr_to_pide() static
Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Kyle McMartin <[email protected]>
2008-03-15 19:17:12 -07:00
FUJITA Tomonori fd28841d2d alpha: use iommu_is_span_boundary helper function
iommu_is_span_boundary in lib/iommu-helper.c was exported for PARISC IOMMUs
(commit 3715863aa1).  Alpha's IOMMU can use it.

This removes the check on the boundary size alignment because
iommu_is_span_boundary does.

Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Richard Henderson <[email protected]>
Acked-by: Ivan Kokshaysky <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
2008-03-13 13:11:43 -07:00
FUJITA Tomonori 4a0d3f3afd parisc: fix IOMMU's device boundary overflow bug on 32bits arch
On 32bits boxes, boundary_size becomes zero due to a overflow and we
hit BUG_ON in iommu_is_span_boundary.

Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Kyle McMartin <[email protected]>
Cc: Matthew Wilcox <[email protected]>
Acked-by: Grant Grundler <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
2008-03-05 17:55:13 -08:00
FUJITA Tomonori 466634488e iommu: parisc: make the IOMMUs respect the segment boundary limits
Make PARISC's two IOMMU implementations not allocate a memory area spanning
LLD's segment boundary.

[[email protected]: coding-style fixes]
Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Kyle McMartin <[email protected]>
Cc: Matthew Wilcox <[email protected]>
Cc: Grant Grundler <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
2008-03-04 16:35:17 -08:00
FUJITA Tomonori 7c8cda625a iommu: parisc: pass struct device to iommu_alloc_range
This adds struct device argument to sba_alloc_range and ccio_alloc_range, a
preparation for modifications to fix the IOMMU segment boundary problem.  This
change enables ccio_alloc_range to access to LLD's segment boundary limits.

[[email protected]: coding-style fixes]
Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Kyle McMartin <[email protected]>
Cc: Matthew Wilcox <[email protected]>
Cc: Grant Grundler <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
2008-03-04 16:35:17 -08:00
FUJITA Tomonori 3715863aa1 iommu: export iommu_is_span_boundary helper function
iommu_is_span_boundary is used internally in the IOMMU helper
(lib/iommu-helper.c), a primitive function that judges whether a memory area
spans LLD's segment boundary or not.

It's difficult to convert some IOMMUs to use the IOMMU helper but
iommu_is_span_boundary is still useful for them.  So this patch exports it.

This is needed for the parisc iommu fixes.

Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Kyle McMartin <[email protected]>
Cc: Matthew Wilcox <[email protected]>
Cc: Grant Grundler <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
2008-03-04 16:35:17 -08:00
FUJITA Tomonori d5a4630a0d alpha: remove unused DEBUG_FORCEDAC define in IOMMU
This just removes unused DEBUG_FORCEDAC define in the IOMMU code.

Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Richard Henderson <[email protected]>
Cc: Ivan Kokshaysky <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
2008-03-04 16:35:14 -08:00
FUJITA Tomonori cf54014548 alpha: make IOMMU respect the segment boundary limits
This patch makes the IOMMU code not allocate a memory area spanning LLD's
segment boundary.

is_span_boundary() judges whether a memory area spans LLD's segment boundary.
If iommu_arena_find_pages() finds such a area, it tries to find the next
available memory area.

Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Richard Henderson <[email protected]>
Cc: Ivan Kokshaysky <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
2008-03-04 16:35:14 -08:00
FUJITA Tomonori 23d7e0390a alpha: IOMMU had better access to the free space bitmap at only one place
iommu_arena_find_pages duplicates the code to access to the bitmap for free
space management.  This patch convert the IOMMU code to have only one place to
access the bitmap, in the popular way that other IOMMUs (e.g.  POWER and
SPARC) do.

This patch is preparation for modifications to fix the IOMMU segment boundary
problem.

Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Richard Henderson <[email protected]>
Cc: Ivan Kokshaysky <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
2008-03-04 16:35:14 -08:00
FUJITA Tomonori 3c5f1def7d alpha: convert IOMMU to use ALIGN()
This patch is preparation for modifications to fix the IOMMU segment boundary
problem.

Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Richard Henderson <[email protected]>
Cc: Ivan Kokshaysky <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
2008-03-04 16:35:13 -08:00
FUJITA Tomonori 7a85f8896f block: restore the meaning of rq->data_len to the true data length
The meaning of rq->data_len was changed to the length of an allocated
buffer from the true data length. It breaks SG_IO friends and
bsg. This patch restores the meaning of rq->data_len to the true data
length and adds rq->extra_len to store an extended length (due to
drain buffer and padding).

This patch also removes the code to update bio in blk_rq_map_user
introduced by the commit 40b01b9bbd.
The commit adjusts bio according to memory alignment
(queue_dma_alignment). However, memory alignment is NOT padding
alignment. This adjustment also breaks SG_IO friends and bsg. Padding
alignment needs to be fixed in a proper way (by a separate patch).

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2008-03-04 11:17:11 +01:00
FUJITA Tomonori 21f1e91d4b [SCSI] tgt: fix build errors when dprintk is defined
drivers/scsi/ibmvscsi/ibmvstgt.c: In function 'ibmvstgt_cmd_done':
drivers/scsi/ibmvscsi/ibmvstgt.c:292: error: 'cmd' undeclared (first use in this function)
drivers/scsi/ibmvscsi/ibmvstgt.c:292: error: (Each undeclared identifier is reported only once
drivers/scsi/ibmvscsi/ibmvstgt.c:292: error: for each function it appears in.)

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-03-03 13:19:52 -06:00
FUJITA Tomonori cccddc2d15 [SCSI] tgt: set the data length properly
scsi_tgt uses REQ_TYPE_BLOCK_PC so scsi_init_io doesn't set the length
for us. scsi_tgt needs to do it by itself.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-03-03 13:19:35 -06:00
FUJITA Tomonori 36802e9989 [SCSI] tgt: stop zero'ing scsi_cmnd
The scsi midlayer allocates scsi_cmnd->sense_buffer dynamically so we
can't initialize scsi_cmnd (the midlyaer does for us).

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-03-03 13:19:18 -06:00
FUJITA Tomonori b560665ce5 [SCSI] ibmvstgt: set up scsi_host properly before __scsi_alloc_queue
Before calling __scsi_alloc_queue, scsi_host->shost_gendev.parent must
be initialized properly.

This patch moves __scsi_alloc_queue after scsi_add_host (like
initiator drivers do).

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-03-03 13:19:03 -06:00
FUJITA Tomonori 57fd2b6c89 [SCSI] ps3rom: disable clustering
ps3rom does:

scsi_for_each_sg(cmd, sgpnt, scsi_sg_count(cmd), k) {
	kaddr = kmap_atomic(sg_page(sgpnt), KM_IRQ0);

We cannot do something like that with the clustering enabled (or we
can use scsi_kmap_atomic_sg).

Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Geert Uytterhoeven <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-03-03 13:08:13 -06:00
FUJITA Tomonori 67768f675f [SCSI] ps3rom: fix wrong resid calculation bug
sg driver rounds up the length in struct scatterlist to be a multiple
of 512 in some conditions. So LLDs can't use the data length in a sg
list to calculate residual. Instead, the length in struct scsi_cmnd
should be used.

[Geert: the variable buflen already contains scsi_bufflen(cmd)]

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Geert Uytterhoeven <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-03-03 13:06:37 -06:00
FUJITA Tomonori c9872fe1ad [SCSI] stex: stex_internal_copy should be called with sg_count in struct st_ccb
stex_internal_copy copies an in-kernel buffer to a sg list by using
scsi_kmap_atomic_sg. Some functions calls stex_internal_copy with
sg_count in struct st_ccb, which is the value that dma_map_sg
returned. However it might be shorter than the actual number of sg
entries (if the IOMMU merged the sg entries).

scsi_kmap_atomic_sg doesn't see sg->dma_length so stex_internal_copy
should be called with the actual number of sg entries
(i.e. scsi_sg_count), because if the sg entries were merged,
stex_direct_copy wrongly think that the data length in the sg list is
shorter than the actual length.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Ed Lin <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-02-22 17:20:59 -06:00
FUJITA Tomonori 26106e3ca3 [SCSI] stex: stex_direct_copy shouldn't call dma_map_sg
stex_direct_copy copies an in-kernel buffer to a sg list in order to
spoof some SCSI commands. stex_direct_copy calls dma_map_sg and then
stex_internal_copy with the value that dma_map_sg returned. It calls
scsi_kmap_atomic_sg to copy data.

scsi_kmap_atomic_sg doesn't see sg->dma_length so if dma_map_sg merges
sg entries, stex_internal_copy gets the smaller number of sg entries
than the acutual number, which means it wrongly think that the data
length in the sg list is shorter than the actual length.

stex_direct_copy shouldn't call dma_map_sg and it doesn't need since
this code path doesn't involve dma transfers. This patch removes
stex_direct_copy and simply calls stex_internal_copy with the actual
number of sg entries.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Ed Lin <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-02-22 17:20:39 -06:00
FUJITA Tomonori 89c94f2f70 [SPARC64]: make IOMMU code respect the segment boundary limits
Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
2008-02-20 22:56:42 -08:00
FUJITA Tomonori cbccc20712 [SCSI] scsi_debug: disable clustering
scsi_debug does at several places:

for_each_sg(sdb->table.sgl, sg, sdb->table.nents, k) {
	kaddr = (unsigned char *)
		kmap_atomic(sg_page(sg), KM_USER0);

We cannot do something like that with the clustering enabled (or we
can use scsi_kmap_atomic_sg).

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-02-18 08:57:16 -06:00
FUJITA Tomonori 7d5d408c77 [SCSI] advansys: fix overrun_buf aligned bug
struct asc_dvc_var needs overrun buffer to be placed on an 8 byte
boundary. advansys defines struct asc_dvc_var:

struct asc_dvc_var {
	...
	uchar overrun_buf[ASC_OVERRUN_BSIZE] __aligned(8);

The problem is that struct asc_dvc_var is placed on
shost->hostdata. So if the hostdata is not on an 8 byte boundary, the
advansys crashes. The hostdata is placed on a sizeof(unsigned long)
boundary so the 8 byte boundary is not garanteed with x86_32.

With 2.6.23 and 2.6.24, the hostdata is on an 8 byte boundary by
chance, but with the current git, it's not.

This patch removes overrun_buf static array and use kzalloc.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-02-11 10:20:53 -06:00
FUJITA Tomonori 5aa22af3d0 [SCSI] ch: remove forward declarations
This moves ch_template and changer_fops structs to the end of file and
removes forward declarations.

This also removes some trailing whitespace.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-01-25 09:22:12 -06:00
FUJITA Tomonori da707c54c3 [SCSI] ch: fix device minor number management bug
ch_probe uses the total number of ch devices as minor.

ch_probe:
	ch->minor = ch_devcount;
...
	ch_devcount++;

Then ch_remove decreases ch_devcount:

ch_remove:
	ch_devcount--;

If you have two ch devices, sch0 and sch1, and remove sch0,
ch_devcount is 1. Then if you add another ch device, ch_probe tries to
create sch1. So you get a warning and fail to create sch1:

Jan 24 16:01:05 nice kernel: sysfs: duplicate filename 'sch1' can not be created
Jan 24 16:01:05 nice kernel: WARNING: at fs/sysfs/dir.c:424 sysfs_add_one()
Jan 24 16:01:05 nice kernel: Pid: 2571, comm: iscsid Not tainted 2.6.24-rc7-ga3d2c2e8-dirty #1
Jan 24 16:01:05 nice kernel:
Jan 24 16:01:05 nice kernel: Call Trace:
Jan 24 16:01:05 nice kernel:  [<ffffffff802a22b8>] sysfs_add_one+0x54/0xbd
Jan 24 16:01:05 nice kernel:  [<ffffffff802a283c>] create_dir+0x4f/0x87
Jan 24 16:01:05 nice kernel:  [<ffffffff802a28a9>] sysfs_create_dir+0x35/0x4a
Jan 24 16:01:05 nice kernel:  [<ffffffff803069a1>] kobject_get+0x12/0x17
Jan 24 16:01:05 nice kernel:  [<ffffffff80306ece>] kobject_add+0xf3/0x1a6
Jan 24 16:01:05 nice kernel:  [<ffffffff8034252b>] class_device_add+0xaa/0x39d
Jan 24 16:01:05 nice kernel:  [<ffffffff803428fb>] class_device_create+0xcb/0xfa
Jan 24 16:01:05 nice kernel:  [<ffffffff80229e09>] printk+0x4e/0x56
Jan 24 16:01:05 nice kernel:  [<ffffffff802a2054>] sysfs_ilookup_test+0x0/0xf
Jan 24 16:01:05 nice kernel:  [<ffffffff88022580>] :ch:ch_probe+0xbe/0x61a

(snip)

This patch converts ch to use a standard minor number management way,
idr like sg and bsg.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-01-25 09:21:55 -06:00
FUJITA Tomonori de25deb180 [SCSI] use dynamically allocated sense buffer
This removes static array sense_buffer in scsi_cmnd and uses
dynamically allocated sense_buffer (with GFP_DMA).

The reason for doing this is that some architectures need cacheline
aligned buffer for DMA:

http://lkml.org/lkml/2007/11/19/2

The problems are that scsi_eh_prep_cmnd puts scsi_cmnd::sense_buffer
to sglist and some LLDs directly DMA to scsi_cmnd::sense_buffer. It's
necessary to DMA to scsi_cmnd::sense_buffer safely. This patch solves
these issues.

__scsi_get_command allocates sense_buffer via kmem_cache_alloc and
attaches it to a scsi_cmnd so everything just work as before.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-01-23 11:37:37 -06:00
FUJITA Tomonori d07e03610c [SCSI] sg: handle class_device_create failure properly
Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-01-23 11:29:28 -06:00
FUJITA Tomonori a24484f281 [SCSI] sg: set class_data after success
If cdev_add fails in sg_add, sg_remove crashes since class_data is
bogus.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Douglas Gilbert <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-01-23 11:29:28 -06:00
FUJITA Tomonori 166a72878f [SCSI] fix scsi_setup_command_freelist failure path race
Looks like that host_cmd_pool_mutex are necessary here.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-01-11 18:29:18 -06:00
FUJITA Tomonori 38b3167f75 [SCSI] mpt fusion: make mptsas_smp_handler update resid
This patch fixes mptsas_smp_handler to update both din_resid or
dout_resid on success. bsg can report back the residual.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2008-01-11 18:29:09 -06:00
FUJITA Tomonori 5336940dd8 x86: fix pci-gart failure handling
blk_rq_map_sg doesn't initialize sg->dma_address/length to zero
anymore. Some low level drivers reuse sg lists without initializing so
IOMMUs might get non-zero dma_address/length. If map_sg fails, we need
pass the number of the mapped entries to gart_unmap_sg.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2007-10-29 09:18:03 +01:00
FUJITA Tomonori 4f33a9d9a4 ub: add sg_init_table for sense and read capacity commands
Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2007-10-25 09:17:03 +02:00
FUJITA Tomonori e88a39dee1 x86: pci-gart fix
map_sg could copy the last sg element to another position (if merging
some elements). It breaks sg chaining. This copies only
dma_address/length instead of the whole sg element.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2007-10-25 09:13:32 +02:00
FUJITA Tomonori cb92ae8150 sparc64: zero out dma_length
zero out dma_length in the entry immediately following the last mapped
entry for unmap_sg.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2007-10-23 12:58:39 +02:00
FUJITA Tomonori 12d4d40e6f intel-iommu: fix sg_page()
Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2007-10-23 09:49:33 +02:00
FUJITA Tomonori b61e8f4844 parisc: fix sg_page() fallout
arch/parisc/kernel/pci-dma.c: In function 'pa11_dma_map_sg':
arch/parisc/kernel/pci-dma.c:487: error: 'struct scatterlist' has no member named 'page'
arch/parisc/kernel/pci-dma.c: In function 'pa11_dma_unmap_sg':
arch/parisc/kernel/pci-dma.c:508: error: 'struct scatterlist' has no member named 'page'
arch/parisc/kernel/pci-dma.c:508: error: 'struct scatterlist' has no member named 'page'
arch/parisc/kernel/pci-dma.c: In function 'pa11_dma_sync_sg_for_cpu':
arch/parisc/kernel/pci-dma.c:535: error: 'struct scatterlist' has no member named 'page'
arch/parisc/kernel/pci-dma.c:535: error: 'struct scatterlist' has no member named 'page'
arch/parisc/kernel/pci-dma.c: In function 'pa11_dma_sync_sg_for_device':
arch/parisc/kernel/pci-dma.c:545: error: 'struct scatterlist' has no member named 'page'
arch/parisc/kernel/pci-dma.c:545: error: 'struct scatterlist' has no member named 'page'

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2007-10-23 09:49:31 +02:00
FUJITA Tomonori dc81785dd6 ide: build fix
git-drivers/ide/ide-probe.c: In function 'hwif_init':
drivers/ide/ide-probe.c:1327: error: implicit declaration of function
'sg_init_table'

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2007-10-23 09:49:29 +02:00
FUJITA Tomonori 9f2326be52 arm: build fix
arch/arm/common/dmabounce.c: In function 'dma_map_sg':
arch/arm/common/dmabounce.c:445: error: implicit declaration of function 'sg_page'

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2007-10-23 09:11:41 +02:00
FUJITA Tomonori f5c0dde4c6 [SCSI] Remove full sg table memset()
We don't need to do that anymore, since blk_rq_map_sg() clears
individual entries.

Signed-off-by: Jens Axboe <[email protected]>
2007-10-17 13:42:11 +02:00
FUJITA Tomonori bdb02504f4 IA64: iommu uses sg_next with an invalid sg element
sg list elements might not be continuous.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2007-10-17 10:51:20 +02:00
FUJITA Tomonori 9e91fdb32d swiotlb: fix map_sg failure handling
sg list elements might not be continuous.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2007-10-17 10:06:18 +02:00
FUJITA Tomonori 24c31eede6 SPARC64: fix iommu sg chaining
Commit 2c941a2040 looks incomplete. The
helper functions like prepare_sg() need to support sg chaining too.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2007-10-17 09:22:14 +02:00
FUJITA Tomonori 2a7c59e79c remove sglist_len
Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2007-10-16 11:24:44 +02:00
FUJITA Tomonori 8889e3c129 remove blk_queue_max_phys_segments in libata
LIBATA_MAX_PRD is the maximum number of DMA scatter/gather elements
permitted by the HBA's DMA engine. It's properly set to
q->max_hw_segments via the sg_tablesize parameter.

libata shouldn't call blk_queue_max_phys_segments. Now LIBATA_MAX_PRD
is equal to SCSI_MAX_PHYS_SEGMENTS by default (both is 128), so
everything is fine. But if they are changed, some code (like the scsi
mid layer, sg chaining, etc) might not work properly.

(Addition from Jens) The basic issue is that the physical segment
setting is purely a driver issue. And since SCSI is managing the sglist,
libata has no business changing the setting. All libata should care
about is the hw segment setting.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2007-10-16 11:24:44 +02:00
FUJITA Tomonori fd820f4055 revert sg segment size ifdefs
This reverts sg segment size ifdefs that the current code has in order
to provide a way to reduce sgpool memory consumption.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2007-10-16 11:24:44 +02:00
FUJITA Tomonori 633ed113d4 qla1280: enable use_sg_chaining option
Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2007-10-16 11:24:43 +02:00
FUJITA Tomonori c0dcffd71d qla1280: sg chaining fixes
Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2007-10-16 11:21:01 +02:00
FUJITA Tomonori 0874ee76bc libata sg chaining support fix
Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2007-10-16 11:21:01 +02:00
FUJITA Tomonori e0eaf88828 ips: sg chaining support
ips properly uses scsi_for_each_sg for the normal I/O path, however,
the breakup path doesn't.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
2007-10-16 11:21:00 +02:00
FUJITA Tomonori a43e6bd1be [SCSI] fc4: convert to use the data buffer accessors
- remove the unnecessary map_single path.

- convert to use the new accessors for the sg lists and the
parameters.

Signed-off-by: FUJITA Tomonori <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2007-10-12 14:40:00 -04:00
FUJITA Tomonori 358147403d [SCSI] ps3rom: convert to use the data buffer accessors
This converts ps3rom driver to use the new accessors for the sg lists
and the parameters.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Geert Uytterhoeven <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2007-10-12 14:38:13 -04:00
FUJITA Tomonori 3236822b1c [SCSI] ib_srp: convert to use the srp transport class
This converts ib_srp to use the srp transport class.

I don't have ib hardware so I've not tested this patch.

Signed-off-by: FUJITA Tomonori <[email protected]>
Cc: Roland Dreier <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2007-10-12 14:37:42 -04:00
FUJITA Tomonori 4d68041907 [SCSI] ibmvscsi: convert to use the srp transport class
This converts ibmvscsi to use the srp transport class.

Signed-off-by: FUJITA Tomonori <[email protected]>
Acked-by: Brian King <[email protected]>
Signed-off-by: James Bottomley <[email protected]>
2007-10-12 14:37:39 -04:00