aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAge
* x86-64: update pci-gart iommu to sg helpersJens Axboe2007-10-16
| | | | Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* x86-64: update nommu to sg helpersJens Axboe2007-10-16
| | | | | Acked-by: Muli Ben-Yehuda <muli@il.ibm.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* x86-64: update calgary iommu to sg helpersJens Axboe2007-10-16
| | | | | Acked-by: Muli Ben-Yehuda <muli@il.ibm.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* swiotlb: sg chaining supportJens Axboe2007-10-16
| | | | Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* i386: enable sg chainingJens Axboe2007-10-16
| | | | | | We don't need to do more on x86, there's no iommu to be worried about. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* i386 dma_map_sg: convert to using sg helpersJens Axboe2007-10-16
| | | | | | | | The dma mapping helpers need to be converted to using sg helpers as well, so they will work with a chained sglist setup. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* mmc: need to zero sglist on initJens Axboe2007-10-16
| | | | | | | | Otherwise we could have junk in the sg fields, fooling the sg chaining into thinking ->page is valid. Acked-by: Pierre Ossman <drzeus@drzeus.cx> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* Panic in blk_rq_map_sg() from CCISS driverLee Schermerhorn2007-10-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | New scatter/gather list chaining [sg_next()] treats 'page' member of struct scatterlist with low bit set [0x01] as a chain pointer to another struct scatterlist [array]. The CCISS driver request function passes an uninitialized, temporary, on-stack scatterlist array to blk_rq_map_sq(). sg_next() interprets random data on the stack as a chain pointer and eventually tries to de-reference an invalid pointer, resulting in: [<ffffffff8031dd70>] blk_rq_map_sg+0x70/0x170 PGD 6090c3067 PUD 0 Oops: 0000 [1] SMP last sysfs file: /block/cciss!c0d0/cciss!c0d0p1/dev CPU 6 Modules linked in: ehci_hcd ohci_hcd uhci_hcd Pid: 1, comm: init Not tainted 2.6.23-rc6-mm1 #3 RIP: 0010:[<ffffffff8031dd70>] [<ffffffff8031dd70>] blk_rq_map_sg+0x70/0x170 RSP: 0018:ffff81060901f768 EFLAGS: 00010206 RAX: 000000040b161000 RBX: ffff81060901f7d8 RCX: 000000040b162c00 RDX: 0000000000000000 RSI: ffff81060b13a260 RDI: ffff81060b139600 RBP: 0000000000001400 R08: 00000000fffffffe R09: 0000000000000400 R10: 0000000000000000 R11: 000000040b163000 R12: ffff810102fe0000 R13: 0000000000000001 R14: 0000000000000001 R15: 00001e0000000000 FS: 00000000026108f0(0063) GS:ffff810409000b80(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b CR2: 000000010000001e CR3: 00000006090c6000 CR4: 00000000000006e0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 Process init (pid: 1, threadinfo ffff81060901e000, task ffff810409020800) last branch before last exception/interrupt from [<ffffffff8031de0a>] blk_rq_map_sg+0x10a/0x170 to [<ffffffff8031dd70>] blk_rq_map_sg+0x70/0x170 Stack: 000000018068ea00 ffff810102fe0000 0000000000000000 ffff810011400000 0000000000000002 0000000000000000 ffff81040b172000 ffffffff803acd3d 0000000000003ec1 ffff8106090d5000 ffff8106090d5000 ffff810102fe0000 Call Trace: [<ffffffff803acd3d>] do_cciss_request+0x15d/0x4c0 [<ffffffff80298968>] new_slab+0x1c8/0x270 [<ffffffff80298ffd>] __slab_alloc+0x22d/0x470 [<ffffffff8027327b>] mempool_alloc+0x4b/0x130 [<ffffffff8032b21e>] cfq_set_request+0xee/0x380 [<ffffffff8027327b>] mempool_alloc+0x4b/0x130 [<ffffffff8031ff98>] get_request+0x168/0x360 [<ffffffff80331b0d>] rb_insert_color+0x8d/0x110 [<ffffffff8031cfd8>] elv_rb_add+0x58/0x60 [<ffffffff8032a329>] cfq_add_rq_rb+0x69/0xa0 [<ffffffff8031c1ab>] elv_merged_request+0x5b/0x60 [<ffffffff803224fd>] __make_request+0x23d/0x650 [<ffffffff80298ffd>] __slab_alloc+0x22d/0x470 [<ffffffff80270000>] generic_write_checks+0x140/0x190 [<ffffffff8031f012>] generic_make_request+0x1c2/0x3a0 <etc> Kernel panic - not syncing: Attempted to kill init! This patch initializes the tmp_sg array to zeroes. Perhaps not the ultimate fix, but an effective work-around. I can now boot 23-rc6-mm1 on an HP Proliant x86_64 with CCISS boot disk. Signed-off-by: Lee Schermerhorn <lee.schermerhorn@hp.com> drivers/block/cciss.c | 1 + 1 file changed, 1 insertion(+) Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* remove sglist_lenFUJITA Tomonori2007-10-16
| | | | | Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* remove blk_queue_max_phys_segments in libataFUJITA Tomonori2007-10-16
| | | | | | | | | | | | | | | | | | | 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 <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* revert sg segment size ifdefsFUJITA Tomonori2007-10-16
| | | | | | | | 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 <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* Fixup u14-34f ENABLE_SG_CHAININGAndrew Morton2007-10-16
| | | | | Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* qla1280: enable use_sg_chaining optionFUJITA Tomonori2007-10-16
| | | | | Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* [SCSI] add use_sg_chaining option to scsi_host_templateFUJITA Tomonori2007-10-16
| | | | | | | | | | This option is true if a low-level driver can support sg chaining. This will be removed eventually when all the drivers are converted to support sg chaining. q->max_phys_segments is set to SCSI_MAX_SG_SEGMENTS if false. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* qla1280: sg chaining fixesFUJITA Tomonori2007-10-16
| | | | | Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* libata sg chaining support fixFUJITA Tomonori2007-10-16
| | | | | Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* zfcp: sg chaining supportFUJITA Tomonori2007-10-16
| | | | | Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* ips: sg chaining supportFUJITA Tomonori2007-10-16
| | | | | | | | ips properly uses scsi_for_each_sg for the normal I/O path, however, the breakup path doesn't. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* IDE: sg chaining supportJens Axboe2007-10-16
| | | | | Acked-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* i2o: sg chaining supportJens Axboe2007-10-16
| | | | | Acked-by: Alan Cox <alan@redhat.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* Fusion: sg chaining supportJens Axboe2007-10-16
| | | | Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* USB storage: sg chaining supportJens Axboe2007-10-16
| | | | | | | | | | | [PATCH] USB storage: sg chaining support Modify usb_stor_access_xfer_buf() to take a pointer to an sg entry pointer, so we can keep track of that instead of passing around an integer index (which we can't use when dealing with multiple scatterlist arrays). Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* infiniband: sg chaining supportJens Axboe2007-10-16
| | | | Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* aha1542: convert to use the data buffer accessorsJens Axboe2007-10-16
| | | | Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* ide-scsi: sg chaining supportJens Axboe2007-10-16
| | | | | Acked-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* qlogicpti: sg chaining supportJens Axboe2007-10-16
| | | | Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* aic94xx: sg chaining supportJens Axboe2007-10-16
| | | | Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* qla1280: sg chaining supportJens Axboe2007-10-16
| | | | | | Interesting hardware setup... Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* scsi generic: sg chaining supportJens Axboe2007-10-16
| | | | Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* scsi_debug: support sg chainingJens Axboe2007-10-16
| | | | | Signed-off-by: Douglas Gilbert <dougg@torque.net> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* libata: convert to using sg helpersJens Axboe2007-10-16
| | | | | | | This converts libata to using the sg helpers for looking up sg elements, instead of doing it manually. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* SCSI: support for allocating large scatterlistsJens Axboe2007-10-16
| | | | | | | | | | This is what enables large commands. If we need to allocate an sgtable that doesn't fit in a single page, allocate several SCSI_MAX_SG_SEGMENTS sized tables and chain them together. SCSI defaults to large chained sg tables, if the arch supports it. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* scsi: simplify scsi_free_sgtable()Jens Axboe2007-10-16
| | | | | | | Just pass in the command, no point in passing in the scatterlist and scatterlist pool index seperately. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* use sg helper function in DMA mapping documentationsaeed bishara2007-10-16
| | | | | Signed-off-by: Saeed Bishara <saeed.bishara@gmail.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* ll_rw_blk: temporarily enable max_segments tweakingJens Axboe2007-10-16
| | | | | | | | Expose this setting for now, so that users can play with enabling large commands without defaulting it to on globally. This is a debug patch, it will be dropped for the final versions. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* Add chained sg support to linux/scatterlist.hJens Axboe2007-10-16
| | | | | | | | | | | | The core of the patch - allow the last sg element in a scatterlist table to point to the start of a new table. We overload the LSB of the page pointer to indicate whether this is a valid sg entry, or merely a link to the next list. Includes a fix from Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> correcting the ifdef ARCH_HAS_SG_CHAIN guarding sg_last(). Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* scsi: convert to using sg helpersJens Axboe2007-10-16
| | | | | | | This converts the SCSI mid layer to using the sg helpers for looking up sg elements, instead of doing it manually. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* block: convert to using sg helpersJens Axboe2007-10-16
| | | | | | Convert the main rq mapper (blk_rq_map_sg()) to the sg helper setup. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* Add sg helpers for iterating over a scatterlist tableJens Axboe2007-10-16
| | | | | | | First step to being able to change the scatterlist setup without having to modify drivers (a lot :-) Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* crypto: don't pollute the global namespace with sg_next()Jens Axboe2007-10-16
| | | | | | | It's a subsystem function, prefix it as such. Acked-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* pktcdvd: don't rely on bio_init() preserving bio->bi_destructorLaurent Riffard2007-10-16
| | | | | Signed-off-by: Laurent Riffard <laurent.riffard@free.fr> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* pktcdvd: don't rely on bio_init() preserving bio->bi_io_vecJens Axboe2007-10-16
| | | | Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* remove ide_get_error_location()Adrian Bunk2007-10-16
| | | | | Signed-off-by: Adrian Bunk <bunk@kernel.org> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* block: convert blkdev_issue_flush() to use empty barriersJens Axboe2007-10-16
| | | | | | | Then we can get rid of ->issue_flush_fn() and all the driver private implementations of that. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* block: Initial support for data-less (or empty) barrier supportJens Axboe2007-10-16
| | | | | | | | | This implements functionality to pass down or insert a barrier in a queue, without having data attached to it. The ->prepare_flush_fn() infrastructure from data barriers are reused to provide this functionality. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* block: factor our bio_check_eod()Jens Axboe2007-10-16
| | | | | | | | End of device check is done twice in __generic_make_request() and it's fully inlined each time. Factor out bio_check_eod(). Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* block: add end_queued_request() and end_dequeued_request() helpersJens Axboe2007-10-16
| | | | | | | We can use this helper in the elevator core for BLKPREP_KILL, and it'll also be useful for the empty barrier patch. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* bio: make freeing of ->bi_io_vec conditional in bio_free()Jens Axboe2007-10-16
| | | | | | | The empty barrier patches do not carry data, so they have no iovec attached. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* bio: use memset() in bio_init()Jens Axboe2007-10-16
| | | | | | Use memset() to clear the bio, instead of doing each field manually. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
* block: ll_rw_blk.c: cosmeticsJens Axboe2007-10-16
| | | | | | Fix ?: construct, a typo, whitespace, and similar. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>