cciss updates for 2.6 [5 of 11]

From: mikem
Date: Wed Feb 04 2004 - 19:19:22 EST


Patch 5 of 11. Please apply in order.
This patch addresses a bug in the ASIC on the 6400 series controllers. When
prefetching from host memory we grab an extra 750 or so bytes of data. If
this occurs on a memory boundary the machine will MCA. This bug affects
IPF and Alpha based platforms. It is not known to be a problem on x86.
Prefetch will be disabled via the f/w. We need to enable it on x86 to
address a _big_ performance hit on RAID 1 operations.
It is in the 2.4 tree.
--------------------------------------------------------------------------------------
diff -burN lx261-p004/drivers/block/cciss.c lx261/drivers/block/cciss.c
--- lx261-p004/drivers/block/cciss.c 2004-01-21 17:02:06.000000000 -0600
+++ lx261/drivers/block/cciss.c 2004-01-22 14:12:04.000000000 -0600
@@ -2277,6 +2277,17 @@
printk("Does not appear to be a valid CISS config table\n");
return -1;
}
+
+#ifdef CONFIG_X86
+{
+ /* Need to enable prefetch in the SCSI core for 6400 in x86 */
+ __u32 prefetch;
+ prefetch = readl(&(c->cfgtable->SCSI_Prefetch));
+ prefetch |= 0x100;
+ writel(prefetch, &(c->cfgtable->SCSI_Prefetch));
+}
+#endif
+
#ifdef CCISS_DEBUG
printk("Trying to put board into Simple mode\n");
#endif /* CCISS_DEBUG */
diff -burN lx261-p004/drivers/block/cciss_cmd.h lx261/drivers/block/cciss_cmd.h
--- lx261-p004/drivers/block/cciss_cmd.h 2004-01-09 00:59:10.000000000 -0600
+++ lx261/drivers/block/cciss_cmd.h 2004-01-21 17:24:59.000000000 -0600
@@ -265,6 +265,7 @@
DWORD Reserved;
BYTE ServerName[16];
DWORD HeartBeat;
+ DWORD SCSI_Prefetch;
} CfgTable_struct;
#pragma pack()
#endif // CCISS_CMD_H

Thanks,
mikem
mike.miller@xxxxxx

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/