Hi, When I tested LKCD on a machine which has big memory, an error occurred and the following message was displayed. fixme, need to add more zones (ZONE_ALLOC) This message means that zone size(the size is defined statically by ZONE_ALLOC) is too small. Attached patch fixes crash to expand zone size dynamically. Regards, Takao Indoh diff -Nurp crash-4.0-2.30.org/lkcd_common.c crash-4.0-2.30/lkcd_common.c --- crash-4.0-2.30.org/lkcd_common.c 2006-06-14 22:14:09.000000000 +0900 +++ crash-4.0-2.30/lkcd_common.c 2006-06-15 12:34:08.000000000 +0900 @@ -670,6 +670,8 @@ save_offset(uint64_t paddr, off_t off) { uint64_t zone, page; int ii, ret; + int max_zones; + struct physmem_zone *zones; zone = paddr & lkcd->zone_mask; @@ -696,6 +698,7 @@ save_offset(uint64_t paddr, off_t off) lkcd->num_zones++; } +retry: /* find the zone */ for (ii=0; ii < lkcd->num_zones; ii++) { if (lkcd->zones[ii].start == zone) { @@ -737,8 +740,20 @@ save_offset(uint64_t paddr, off_t off) ret = 1; lkcd->num_zones++; } else { - lkcd_print("fixme, need to add more zones (ZONE_ALLOC)\n"); - exit(1); + /* need to expand zone */ + max_zones = lkcd->max_zones * 2; + zones = malloc(max_zones * sizeof(struct physmem_zone)); + if (!zones) { + return -1; /* This should be fatal */ + } + BZERO(zones, max_zones * sizeof(struct physmem_zone)); + memcpy(zones, lkcd->zones, + lkcd->max_zones * sizeof(struct physmem_zone)); + free(lkcd->zones); + + lkcd->zones = zones; + lkcd->max_zones = max_zones; + goto retry; } }