From a23c97ad89b0f6bc2f3cde0c7e058edcd2cdf345 Mon Sep 17 00:00:00 2001 From: Kip Macy Date: Tue, 12 Dec 2006 03:50:06 +0000 Subject: [PATCH] workaround kernel malloc's brittleness - don't shuffle phys_avail following kernel to the beginning if the range is less than what would remain in a 256MB page (248MB) --- sys/sun4v/sun4v/pmap.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sys/sun4v/sun4v/pmap.c b/sys/sun4v/sun4v/pmap.c index 224221b6e6e..0f6847b6405 100644 --- a/sys/sun4v/sun4v/pmap.c +++ b/sys/sun4v/sun4v/pmap.c @@ -654,14 +654,21 @@ pmap_bootstrap(vm_offset_t ekva) for (j = 0; phys_avail[j] != 0; j += 2) if (nucleus_memory_start < phys_avail[j]) break; + /* + * Don't shuffle unless we have a full 256M page in the range + * our kernel malloc appears to be horribly brittle + */ + if ((phys_avail[j + 1] - phys_avail[j]) < PAGE_SIZE_4M*62) + goto skipshuffle; + for (i = j, k = 0; phys_avail[i] != 0; k++, i++) tmp_phys_avail[k] = phys_avail[i]; for (i = 0; i < j; i++) tmp_phys_avail[k + i] = phys_avail[i]; for (i = 0; i < 128; i++) phys_avail[i] = tmp_phys_avail[i]; - +skipshuffle: for (i = 0; real_phys_avail[i] != 0; i += 2) if (pmap_debug_range || pmap_debug) printf("real_phys_avail[%d]=0x%lx real_phys_avail[%d]=0x%lx\n",