Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2f08fe52 authored by Jens Axboe's avatar Jens Axboe
Browse files

qlogicpti: sg chaining support

parent 8145bfe4
Loading
Loading
Loading
Loading
+8 −7
Original line number Original line Diff line number Diff line
@@ -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++) {
		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,
			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;
		}
		}