[parisc-linux-cvs] linux grundler

Grant Grundler grundler@dsl2.external.hp.com
Wed, 24 Jul 2002 00:27:26 -0600


Grant Grundler wrote:
> CVSROOT:	/var/cvs
> Module name:	linux
> Changes by:	grundler	02/07/24 00:21:44
> 
> Modified files:
> 	.              : Makefile 
> 	drivers/scsi/sym53c8xx_2: sym_malloc.c 
> 
> Log message:
> 2.4.18-pa57 fix sym53c8xx_2 "giving up" data page fault
> c3k has a narrow Bus and the sym53c8xx_2 doesn't know that.
> It trips over bad parity, prints "giving up..." msg and then
> data page faults (code 15). Problem is coalescing of free'd
> data buffers exceeds the max size the driver is expecting to handle
> and walk off the end of an array (h[i]) of pointers.

Alan,
Please apply this "upstream" after gerard has had a chance to review.

thanks,
grant


Index: Makefile
===================================================================
RCS file: /var/cvs/linux/Makefile,v
retrieving revision 1.327
diff -u -p -r1.327 Makefile
--- Makefile	19 Jul 2002 22:53:02 -0000	1.327
+++ Makefile	24 Jul 2002 06:17:41 -0000
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 4
 SUBLEVEL = 18
-EXTRAVERSION = -pa56
+EXTRAVERSION = -pa57
 
 KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 
Index: drivers/scsi/sym53c8xx_2/sym_malloc.c
===================================================================
RCS file: /var/cvs/linux/drivers/scsi/sym53c8xx_2/sym_malloc.c,v
retrieving revision 1.2
diff -u -p -r1.2 sym_malloc.c
--- drivers/scsi/sym53c8xx_2/sym_malloc.c	29 Nov 2001 15:49:45 -0000	1.2
+++ drivers/scsi/sym53c8xx_2/sym_malloc.c	24 Jul 2002 06:17:41 -0000
@@ -143,12 +143,15 @@ static void ___sym_mfree(m_pool_p mp, vo
 	a = (m_addr_t) ptr;
 
 	while (1) {
-#ifdef SYM_MEM_FREE_UNUSED
 		if (s == SYM_MEM_CLUSTER_SIZE) {
+#ifdef SYM_MEM_FREE_UNUSED
 			M_FREE_MEM_CLUSTER(a);
+#else
+			((m_link_p) a)->next = h[i].next;
+			h[i].next = (m_link_p) a;
+#endif
 			break;
 		}
-#endif
 		b = a ^ s;
 		q = &h[i];
 		while (q->next && q->next != (m_link_p) b) {