[Crash-utility] ERROR: fixme, need to add more zones (ZONE_ALLOC)
Dave Anderson
anderson at redhat.com
Thu Jun 15 16:02:05 UTC 2006
Takao Indoh wrote:
> 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
>
Thanks, Takao -- looks good to me...
Dave
>
> 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;
> }
> }
>
>
> --
> Crash-utility mailing list
> Crash-utility at redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility
More information about the Crash-utility
mailing list