Commit 51cf2249 authored by Jens Axboe's avatar Jens Axboe
Browse files

aha1542: convert to use the data buffer accessors

parent d274a987
Loading
Loading
Loading
Loading
+15 −17
Original line number Diff line number Diff line
@@ -61,15 +61,15 @@ static void BAD_DMA(void *address, unsigned int length)
}

static void BAD_SG_DMA(Scsi_Cmnd * SCpnt,
		       struct scatterlist *sgpnt,
		       struct scatterlist *sgp,
		       int nseg,
		       int badseg)
{
	printk(KERN_CRIT "sgpnt[%d:%d] page %p/0x%llx length %u\n",
	       badseg, nseg,
	       page_address(sgpnt[badseg].page) + sgpnt[badseg].offset,
	       (unsigned long long)SCSI_SG_PA(&sgpnt[badseg]),
	       sgpnt[badseg].length);
	       page_address(sgp->page) + sgp->offset,
	       (unsigned long long)SCSI_SG_PA(sgp),
	       sgp->length);

	/*
	 * Not safe to continue.
@@ -691,7 +691,7 @@ static int aha1542_queuecommand(Scsi_Cmnd * SCpnt, void (*done) (Scsi_Cmnd *))
	memcpy(ccb[mbo].cdb, cmd, ccb[mbo].cdblen);

	if (SCpnt->use_sg) {
		struct scatterlist *sgpnt;
		struct scatterlist *sg;
		struct chain *cptr;
#ifdef DEBUG
		unsigned char *ptr;
@@ -699,23 +699,21 @@ static int aha1542_queuecommand(Scsi_Cmnd * SCpnt, void (*done) (Scsi_Cmnd *))
		int i;
		ccb[mbo].op = 2;	/* SCSI Initiator Command  w/scatter-gather */
		SCpnt->host_scribble = kmalloc(512, GFP_KERNEL | GFP_DMA);
		sgpnt = (struct scatterlist *) SCpnt->request_buffer;
		cptr = (struct chain *) SCpnt->host_scribble;
		if (cptr == NULL) {
			/* free the claimed mailbox slot */
			HOSTDATA(SCpnt->device->host)->SCint[mbo] = NULL;
			return SCSI_MLQUEUE_HOST_BUSY;
		}
		for (i = 0; i < SCpnt->use_sg; i++) {
			if (sgpnt[i].length == 0 || SCpnt->use_sg > 16 ||
			    (((int) sgpnt[i].offset) & 1) || (sgpnt[i].length & 1)) {
		scsi_for_each_sg(SCpnt, sg, SCpnt->use_sg, i) {
			if (sg->length == 0 || SCpnt->use_sg > 16 ||
			    (((int) sg->offset) & 1) || (sg->length & 1)) {
				unsigned char *ptr;
				printk(KERN_CRIT "Bad segment list supplied to aha1542.c (%d, %d)\n", SCpnt->use_sg, i);
				for (i = 0; i < SCpnt->use_sg; i++) {
				scsi_for_each_sg(SCpnt, sg, SCpnt->use_sg, i) {
					printk(KERN_CRIT "%d: %p %d\n", i,
					       (page_address(sgpnt[i].page) +
						sgpnt[i].offset),
					       sgpnt[i].length);
					       (page_address(sg->page) +
						sg->offset), sg->length);
				};
				printk(KERN_CRIT "cptr %x: ", (unsigned int) cptr);
				ptr = (unsigned char *) &cptr[i];
@@ -723,10 +721,10 @@ static int aha1542_queuecommand(Scsi_Cmnd * SCpnt, void (*done) (Scsi_Cmnd *))
					printk("%02x ", ptr[i]);
				panic("Foooooooood fight!");
			};
			any2scsi(cptr[i].dataptr, SCSI_SG_PA(&sgpnt[i]));
			if (SCSI_SG_PA(&sgpnt[i]) + sgpnt[i].length - 1 > ISA_DMA_THRESHOLD)
				BAD_SG_DMA(SCpnt, sgpnt, SCpnt->use_sg, i);
			any2scsi(cptr[i].datalen, sgpnt[i].length);
			any2scsi(cptr[i].dataptr, SCSI_SG_PA(sg));
			if (SCSI_SG_PA(sg) + sg->length - 1 > ISA_DMA_THRESHOLD)
				BAD_SG_DMA(SCpnt, sg, SCpnt->use_sg, i);
			any2scsi(cptr[i].datalen, sg->length);
		};
		any2scsi(ccb[mbo].datalen, SCpnt->use_sg * sizeof(struct chain));
		any2scsi(ccb[mbo].dataptr, SCSI_BUF_PA(cptr));