From: Jens Axboe <jens.axboe@oracle.com>
To: Badari Pulavarty <pbadari@gmail.com>
Cc: lkml <linux-kernel@vger.kernel.org>,
bhalevy@panasas.com, Andrew Morton <akpm@linux-foundation.org>,
fujita.tomonori@lab.ntt.co.jp, michaelc@cs.wisc.edu
Subject: Re: [PATCH] Chaining sg lists for big IO commands v5
Date: Thu, 24 May 2007 14:05:13 +0200 [thread overview]
Message-ID: <20070524120513.GT5722@kernel.dk> (raw)
In-Reply-To: <20070524093441.GP5722@kernel.dk>
On Thu, May 24 2007, Jens Axboe wrote:
> > Oops: Kernel access of bad area, sig: 11 [#1]
> > SMP NR_CPUS=32 NUMA pSeries
> > Modules linked in: qla2xxx scsi_transport_fc
> > NIP: c0000000000414a0 LR: c00000000004162c CTR: 0000000000000001
> > REGS: c0000000047bb130 TRAP: 0300 Not tainted (2.6.22-rc1)
> > MSR: 8000000000001032 <ME,IR,DR> CR: 28000022 XER: 00000008
> > DAR: 0000000000000000, DSISR: 0000000040000000
> > TASK = c0000000047a6aa0[0] 'swapper' THREAD: c0000000047b8000 CPU: 7
> > GPR00: 0000000000000080 c0000000047bb3b0 c000000000692358 c0000000047a6aa0
> > GPR04: 0000000000000000 0000000000000070 0000000000000000 c0000000005ac0b8
> > GPR08: 000000000000e4b4 0000000000000001 0000000000000000 0000000000000280
> > GPR12: 0000000000000020 c0000000005a3e80 0000000000000000 0000000007a8dd70
> > GPR16: 0000000000000000 0000000000000000 0000000000000000 c0000000047b8000
> > GPR20: 000000003b9aca00 c0000000047a6c50 0000000000000001 0000000000000000
> > GPR24: d000000000909048 0001dee6d30c0d30 c000000003b7dd80 c0000000047a6aa0
> > GPR28: 00000001079027ca c0000000047a6aa0 c0000000005b7cb0 c000000000472c9c
> > NIP [c0000000000414a0] .dequeue_task+0x0/0x9c
> > LR [c00000000004162c] .deactivate_task+0x40/0x60
> > Call Trace:
> > [c0000000047bb3b0] [c00000000004bccc] .printk+0x38/0x48 (unreliable)
> > [c0000000047bb440] [c000000000471704] .schedule+0x1fc/0x8dc
> > [c0000000047bb540] [c000000000472c9c] .schedule_timeout+0xa8/0xe8
> > [c0000000047bb610] [c000000000057260] .msleep+0x20/0x38
> > [c0000000047bb690] [c00000000003f5ec] .eeh_dn_check_failure+0x114/0x268
> > [c0000000047bb740] [c00000000003fc64] .eeh_check_failure+0xec/0x114
> > [c0000000047bb7c0] [d00000000086190c] .qla2300_fw_dump+0x1130/0x1c00 [qla2xxx]
> > [c0000000047bb8a0] [d000000000858d50] .qla2300_intr_handler+0x1e8/0x60c [qla2xxx]
> > [c0000000047bb950] [c000000000078368] .handle_IRQ_event+0x70/0xe4
> > [c0000000047bb9f0] [c00000000007a7e0] .handle_fasteoi_irq+0x11c/0x1d0
> > [c0000000047bba90] [c00000000000c178] .do_IRQ+0x90/0xec
> > [c0000000047bbb10] [c000000000004790] hardware_interrupt_entry+0x18/0x1c
>
> Not good. The qla changes are non-trivial (that hardware has a really
> funky sg setup), so I may have botched a part of it. I'll review the
> qla changes and get back to you.
Does this help?
diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
index 10251bf..5510b86 100644
--- a/drivers/scsi/qla2xxx/qla_iocb.c
+++ b/drivers/scsi/qla2xxx/qla_iocb.c
@@ -155,6 +155,8 @@ void qla2x00_build_scsi_iocbs_32(srb_t *sp, cmd_entry_t *cmd_pkt,
uint32_t *cur_dsd;
scsi_qla_host_t *ha;
struct scsi_cmnd *cmd;
+ struct scatterlist *sg;
+ int i;
cmd = sp->cmd;
@@ -178,13 +180,10 @@ void qla2x00_build_scsi_iocbs_32(srb_t *sp, cmd_entry_t *cmd_pkt,
/* Load data segments */
if (cmd->use_sg != 0) {
- struct scatterlist *cur_seg;
- struct scatterlist *end_seg;
-
- cur_seg = (struct scatterlist *)cmd->request_buffer;
- end_seg = cur_seg + tot_dsds;
- while (cur_seg < end_seg) {
- cont_entry_t *cont_pkt;
+ struct scatterlist *sgl = cmd->request_buffer;
+
+ for_each_sg(sgl, sg, tot_dsds, i) {
+ cont_entry_t *cont_pkt;
/* Allocate additional continuation packets? */
if (avail_dsds == 0) {
@@ -197,11 +196,9 @@ void qla2x00_build_scsi_iocbs_32(srb_t *sp, cmd_entry_t *cmd_pkt,
avail_dsds = 7;
}
- *cur_dsd++ = cpu_to_le32(sg_dma_address(cur_seg));
- *cur_dsd++ = cpu_to_le32(sg_dma_len(cur_seg));
+ *cur_dsd++ = cpu_to_le32(sg_dma_address(sg));
+ *cur_dsd++ = cpu_to_le32(sg_dma_len(sg));
avail_dsds--;
-
- cur_seg++;
}
} else {
*cur_dsd++ = cpu_to_le32(sp->dma_handle);
@@ -224,6 +221,9 @@ void qla2x00_build_scsi_iocbs_64(srb_t *sp, cmd_entry_t *cmd_pkt,
uint32_t *cur_dsd;
scsi_qla_host_t *ha;
struct scsi_cmnd *cmd;
+ struct scatterlist *sgl;
+ struct scatterlist *sg;
+ int i;
cmd = sp->cmd;
@@ -247,12 +247,8 @@ void qla2x00_build_scsi_iocbs_64(srb_t *sp, cmd_entry_t *cmd_pkt,
/* Load data segments */
if (cmd->use_sg != 0) {
- struct scatterlist *cur_seg;
- struct scatterlist *end_seg;
-
- cur_seg = (struct scatterlist *)cmd->request_buffer;
- end_seg = cur_seg + tot_dsds;
- while (cur_seg < end_seg) {
+ sgl = cmd->request_buffer;
+ for_each_sg(sgl, sg, tot_dsds, i) {
dma_addr_t sle_dma;
cont_a64_entry_t *cont_pkt;
@@ -267,13 +263,11 @@ void qla2x00_build_scsi_iocbs_64(srb_t *sp, cmd_entry_t *cmd_pkt,
avail_dsds = 5;
}
- sle_dma = sg_dma_address(cur_seg);
+ sle_dma = sg_dma_address(sg);
*cur_dsd++ = cpu_to_le32(LSD(sle_dma));
*cur_dsd++ = cpu_to_le32(MSD(sle_dma));
- *cur_dsd++ = cpu_to_le32(sg_dma_len(cur_seg));
+ *cur_dsd++ = cpu_to_le32(sg_dma_len(sg));
avail_dsds--;
-
- cur_seg++;
}
} else {
*cur_dsd++ = cpu_to_le32(LSD(sp->dma_handle));
@@ -642,6 +636,8 @@ qla24xx_build_scsi_iocbs(srb_t *sp, struct cmd_type_7 *cmd_pkt,
uint32_t *cur_dsd;
scsi_qla_host_t *ha;
struct scsi_cmnd *cmd;
+ struct scatterlist *sg, *sgl;
+ int i;
cmd = sp->cmd;
@@ -671,11 +667,8 @@ qla24xx_build_scsi_iocbs(srb_t *sp, struct cmd_type_7 *cmd_pkt,
/* Load data segments */
if (cmd->use_sg != 0) {
- struct scatterlist *sgl = cmd->request_buffer;
- struct scatterlist *cur_seg;
- int i;
-
- for_each_sg(sgl, cur_seg, tot_dsds, i) {
+ sgl = cmd->request_buffer;
+ for_each_sg(sgl, sg, tot_dsds, i) {
dma_addr_t sle_dma;
cont_a64_entry_t *cont_pkt;
@@ -690,10 +683,10 @@ qla24xx_build_scsi_iocbs(srb_t *sp, struct cmd_type_7 *cmd_pkt,
avail_dsds = 5;
}
- sle_dma = sg_dma_address(cur_seg);
+ sle_dma = sg_dma_address(sg);
*cur_dsd++ = cpu_to_le32(LSD(sle_dma));
*cur_dsd++ = cpu_to_le32(MSD(sle_dma));
- *cur_dsd++ = cpu_to_le32(sg_dma_len(cur_seg));
+ *cur_dsd++ = cpu_to_le32(sg_dma_len(sg));
avail_dsds--;
}
} else {
--
Jens Axboe
next prev parent reply other threads:[~2007-05-24 12:06 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-11 13:51 [PATCH] Chaining sg lists for big IO commands v5 Jens Axboe
2007-05-15 17:15 ` Badari Pulavarty
2007-05-15 17:20 ` Jens Axboe
2007-05-15 17:43 ` Badari Pulavarty
2007-05-15 17:50 ` Jens Axboe
2007-05-15 18:23 ` Jens Axboe
2007-05-16 20:58 ` Badari Pulavarty
2007-05-16 21:01 ` Badari Pulavarty
2007-05-17 6:27 ` Jens Axboe
2007-05-17 15:11 ` Badari Pulavarty
2007-05-18 7:33 ` Jens Axboe
2007-05-18 16:03 ` Badari Pulavarty
2007-05-18 17:03 ` Jens Axboe
2007-05-18 17:50 ` Badari Pulavarty
2007-05-17 15:15 ` Badari Pulavarty
2007-05-18 7:35 ` Jens Axboe
2007-05-18 17:51 ` Badari Pulavarty
2007-05-21 6:14 ` Jens Axboe
2007-05-21 6:35 ` Jens Axboe
2007-05-21 7:14 ` Benny Halevy
2007-05-22 22:15 ` Badari Pulavarty
2007-05-24 9:34 ` Jens Axboe
2007-05-24 9:43 ` FUJITA Tomonori
2007-05-24 10:00 ` Jens Axboe
2007-05-24 12:05 ` Jens Axboe
2007-05-24 12:44 ` FUJITA Tomonori
2007-05-24 12:49 ` Jens Axboe
2007-05-24 15:39 ` James Bottomley
2007-05-24 16:01 ` FUJITA Tomonori
2007-05-24 16:08 ` James Bottomley
2007-05-24 12:05 ` Jens Axboe [this message]
2007-05-24 15:25 ` Badari Pulavarty
2007-05-25 6:49 ` Jens Axboe
2007-05-22 15:35 ` Badari Pulavarty
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=20070524120513.GT5722@kernel.dk \
--to=jens.axboe@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=bhalevy@panasas.com \
--cc=fujita.tomonori@lab.ntt.co.jp \
--cc=linux-kernel@vger.kernel.org \
--cc=michaelc@cs.wisc.edu \
--cc=pbadari@gmail.com \
/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.