Messages in this thread | | | From | "Mike Black" <> | Subject | 2.2.13pre14 lockup caused by do_check_pgt_cache() | Date | Wed, 29 Sep 1999 07:34:15 -0400 |
| |
Running 2.2.13pre14 SMP on Dual PIII/450 w/256Meg RAM compiled with egcs-2.91.66, 2.2.12-ikd1, and raid0145-19990824-2.2.11
Lockup occurred in do_check_pgt_cache() -- this would jive with the reports of lockups under heavy I/O...my application runs fine until vmstat shows cache being maxed out and then locks up shortly thereafter (within about 10 seconds of max cache).
It looks like do_check_pgt_cache got stuck in it's loop. Not sure which path it was following but it looks like get_pgd_fast->get_pgd_slow does NOT always change pgtable_cache_size. get_pmd_fast does NOTHING, and get_pte_fast decrements. I'm adding an escape counter inside the loop to test further...(and disabling SMP).
int do_check_pgt_cache(int low, int high) { int freed = 0; if(pgtable_cache_size > high) { do { if(pgd_quicklist) free_pgd_slow(get_pgd_fast()), freed++; if(pmd_quicklist) free_pmd_slow(get_pmd_fast()), freed++; if(pte_quicklist) free_pte_slow(get_pte_fast()), freed++; } while(pgtable_cache_size > low); } return freed; }
extern __inline__ void free_pgd_slow(pgd_t *pgd) { free_page((unsigned long)pgd); }
extern __inline__ void free_pmd_slow(pmd_t *pmd) { }
extern __inline__ void free_pte_slow(pte_t *pte) { free_page((unsigned long)pte); }
extern __inline__ void free_pgd_fast(pgd_t *pgd) { *(unsigned long *)pgd = (unsigned long) pgd_quicklist; pgd_quicklist = (unsigned long *) pgd; pgtable_cache_size++; }
extern __inline__ pgd_t *get_pgd_fast(void) { unsigned long *ret;
if((ret = pgd_quicklist) != NULL) { pgd_quicklist = (unsigned long *)(*ret); ret[0] = ret[1]; pgtable_cache_size--; } else ret = (unsigned long *)get_pgd_slow(); return (pgd_t *)ret; }
________________________________________ Michael D. Black Principal Engineer mblack@csi.cc 407-676-2923,x203 http://www.csi.cc Computer Science Innovations http://www.csi.cc/~mike My home page FAX 407-676-2355
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |