提交 2f08fe52 编写于 作者: J Jens Axboe

qlogicpti: sg chaining support

Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
上级 8145bfe4
...@@ -868,7 +868,7 @@ static inline int load_cmd(struct scsi_cmnd *Cmnd, struct Command_Entry *cmd, ...@@ -868,7 +868,7 @@ static inline int load_cmd(struct scsi_cmnd *Cmnd, struct Command_Entry *cmd,
struct qlogicpti *qpti, u_int in_ptr, u_int out_ptr) struct qlogicpti *qpti, u_int in_ptr, u_int out_ptr)
{ {
struct dataseg *ds; struct dataseg *ds;
struct scatterlist *sg; struct scatterlist *sg, *s;
int i, n; int i, n;
if (Cmnd->use_sg) { if (Cmnd->use_sg) {
...@@ -884,11 +884,12 @@ static inline int load_cmd(struct scsi_cmnd *Cmnd, struct Command_Entry *cmd, ...@@ -884,11 +884,12 @@ static inline int load_cmd(struct scsi_cmnd *Cmnd, struct Command_Entry *cmd,
n = sg_count; n = sg_count;
if (n > 4) if (n > 4)
n = 4; n = 4;
for (i = 0; i < n; i++, sg++) { for_each_sg(sg, s, n, i) {
ds[i].d_base = sg_dma_address(sg); ds[i].d_base = sg_dma_address(s);
ds[i].d_count = sg_dma_len(sg); ds[i].d_count = sg_dma_len(s);
} }
sg_count -= 4; sg_count -= 4;
sg = s;
while (sg_count > 0) { while (sg_count > 0) {
struct Continuation_Entry *cont; struct Continuation_Entry *cont;
...@@ -907,9 +908,9 @@ static inline int load_cmd(struct scsi_cmnd *Cmnd, struct Command_Entry *cmd, ...@@ -907,9 +908,9 @@ static inline int load_cmd(struct scsi_cmnd *Cmnd, struct Command_Entry *cmd,
n = sg_count; n = sg_count;
if (n > 7) if (n > 7)
n = 7; n = 7;
for (i = 0; i < n; i++, sg++) { for_each_sg(sg, s, n, i) {
ds[i].d_base = sg_dma_address(sg); ds[i].d_base = sg_dma_address(s);
ds[i].d_count = sg_dma_len(sg); ds[i].d_count = sg_dma_len(s);
} }
sg_count -= n; sg_count -= n;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册