|
@@ -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,
|
|
n = sg_count;
|
|
n = sg_count;
|
|
if (n > 4)
|
|
if (n > 4)
|
|
n = 4;
|
|
n = 4;
|
|
- for (i = 0; i < n; i++, sg++) {
|
|
|
|
- ds[i].d_base = sg_dma_address(sg);
|
|
|
|
- ds[i].d_count = sg_dma_len(sg);
|
|
|
|
|
|
+ for_each_sg(sg, s, n, i) {
|
|
|
|
+ ds[i].d_base = sg_dma_address(s);
|
|
|
|
+ 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,
|
|
n = sg_count;
|
|
n = sg_count;
|
|
if (n > 7)
|
|
if (n > 7)
|
|
n = 7;
|
|
n = 7;
|
|
- for (i = 0; i < n; i++, sg++) {
|
|
|
|
- ds[i].d_base = sg_dma_address(sg);
|
|
|
|
- ds[i].d_count = sg_dma_len(sg);
|
|
|
|
|
|
+ for_each_sg(sg, s, n, i) {
|
|
|
|
+ ds[i].d_base = sg_dma_address(s);
|
|
|
|
+ ds[i].d_count = sg_dma_len(s);
|
|
}
|
|
}
|
|
sg_count -= n;
|
|
sg_count -= n;
|
|
}
|
|
}
|