Commit 5a848d7d authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] cciss: disble prefetching in ASIC

From: mikem@beardog.cca.cpqcorp.net

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.
parent 56d40f64
...@@ -2277,6 +2277,17 @@ static int cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev) ...@@ -2277,6 +2277,17 @@ static int cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev)
printk("Does not appear to be a valid CISS config table\n"); printk("Does not appear to be a valid CISS config table\n");
return -1; 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 #ifdef CCISS_DEBUG
printk("Trying to put board into Simple mode\n"); printk("Trying to put board into Simple mode\n");
#endif /* CCISS_DEBUG */ #endif /* CCISS_DEBUG */
......
...@@ -265,6 +265,7 @@ typedef struct _CfgTable_struct { ...@@ -265,6 +265,7 @@ typedef struct _CfgTable_struct {
DWORD Reserved; DWORD Reserved;
BYTE ServerName[16]; BYTE ServerName[16];
DWORD HeartBeat; DWORD HeartBeat;
DWORD SCSI_Prefetch;
} CfgTable_struct; } CfgTable_struct;
#pragma pack() #pragma pack()
#endif // CCISS_CMD_H #endif // CCISS_CMD_H
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment