NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/39526: adh driver crashes system if it runs out of memory



The following reply was made to PR kern/39526; it has been noted by GNATS.

From: Manuel Bouyer <bouyer%antioche.eu.org@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: kern-bug-people%NetBSD.org@localhost, gnats-admin%NetBSD.org@localhost, 
netbsd-bugs%NetBSD.org@localhost,
        Wolfgang.Stukenbrock%nagler-company.com@localhost
Subject: Re: kern/39526: adh driver crashes system if it runs out of memory
Date: Fri, 26 Sep 2008 22:32:07 +0200

 On Fri, Sep 26, 2008 at 11:50:04AM +0000, Wolfgang Stukenbrock wrote:
 > The following reply was made to PR kern/39526; it has been noted by GNATS.
 > 
 > From: Wolfgang Stukenbrock 
 > <Wolfgang.Stukenbrock%nagler-company.com@localhost>
 > To: gnats-bugs%NetBSD.org@localhost
 > Cc: 
 > Subject: Re: kern/39526: adh driver crashes system if it runs out of memory
 > Date: Fri, 26 Sep 2008 13:48:36 +0200
 > 
 >  Hi again,
 >  
 >  now I've a workaround that avoids crashing the system by the ahd driver.
 >  
 >  The workaround will allocate all SCB structures during startup if 64-bit 
 >  bus is detected. By dooing this it avoids any call to GROW the number of 
 >  SCB's later.
 >  That is the place where no memory was found and after some failed 
 >  allocations a kernel crash with "fatal page fault in supervisour mode" 
 >  happens.
 >  
 >  Wit this fix I've go no longer the kernel panic.
 >  So this workaround leads to a stable running driver, but it does not fix 
 >  the main cause of the problem!
 >  There seems to be something wrong in either this driver or the uvm stuff!
 >  
 >  I assume that the problem is in the uvm stuff, because I've a similar 
 >  problem with the ahc driver. It will crash too after more than 4G is 
 >  used by the system and the ahc driver will also try to allocate more SCB's.
 
 No, it's a bug in both ahc and ahd, which don't handle properly errors
 from bus_dma().
 
 >  in /usr/src/sys/dev/ic:
 >  
 >  
 >  --- aic79xx.c   2008/09/26 11:19:07     1.1
 >  +++ aic79xx.c   2008/09/26 11:26:57
 >  @@ -5441,6 +5441,24 @@
 >                         ahd_name(ahd));
 >                  goto error_exit;
 >          }
 >  +/*
 >  + * Workaround for the "more than 4GB main memory" crash.
 >  + * We allocate all SCB's now - no additional request taht may fail
 >  + * later.
 >  + * This will work around a bug in either this driver or the uvm part.
 >  + * Without this, the system will crash after some failed GROW requests with
 >  + * a "fatal page fault in supoervisor mode".
 >  + *
 >  + * This fix requires setting the 64-Bit Flag in ahd_pci.c too.
 >  + * Perhaps the amount of main memory should be checked here too ..
 >  + *
 >  +  W. Stukenbrock (09.2008)
 >  + */
 >  +       if ((ahd->flags & AHD_64BIT_ADDRESSING) != 0) {
 >  +               printf("%s: allocating all SCB entries - 64 bit workaround 
 > for 4G memory bug\n",
 >  +                       ahd_name(ahd));
 >  +               while (ahd_alloc_scbs(ahd) != 0);
 >  +       }
 
 Doing this based on AHD_64BIT_ADDRESSING is wrong. It will orrur as
 well, if not more, if the adapter can't handle 64bits addresses.
 
 -- 
 Manuel Bouyer <bouyer%antioche.eu.org@localhost>
      NetBSD: 26 ans d'experience feront toujours la difference
 --
 


Home | Main Index | Thread Index | Old Index