Try reverting these two changes. This is not an ACPI problem. The fact that ACPI needs to allocate some memory early on in the boot for its sleep code is what triggers this bug. src/sys/vm/vm_contig.c:1.31 src/sys/vm/vm_page.c:1.277 http://docs.freebsd.org/cgi/getmsg.cgi?fetch=326708+0+current/cvs-src I think the bug is the loop accessing i - 1 right from the start. It may be correct to do: for (i = start + 1; ... But I don't know this section of the code. -Nate On Wed, 3 Mar 2004, Marcel Moolenaar wrote: > Did you try a kernel with ACPI compiled in? My laptop has an early > page fault (backtrace provided through gdb). I'll look into it > some more, but wanted to give you a headsup first: > > (kgdb) l *0xc066167a > 0xc066167a is in contigmalloc1 (../../../vm/vm_contig.c:235). > 230 } > 231 } > 232 mtx_lock_spin(&vm_page_queue_free_mtx); > 233 for (i = start; i < (start + size / PAGE_SIZE); i++) { > 234 pqtype = pga[i].queue - pga[i].pc; > 235 if ((VM_PAGE_TO_PHYS(&pga[i]) != > 236 (VM_PAGE_TO_PHYS(&pga[i - 1]) + PAGE_SIZE)) || > 237 (pqtype != PQ_FREE)) { > 238 start++; > 239 goto again; > (kgdb) l *0xc0661920 > 0xc0661920 is in contigmalloc (../../../vm/vm_contig.c:311). > 306 unsigned long boundary) > 307 { > 308 void * ret; > 309 > 310 mtx_lock(&Giant); > 311 ret = contigmalloc1(size, type, flags, low, high, alignment, boundary, > 312 kernel_map); > 313 mtx_unlock(&Giant); > 314 return (ret); > 315 } > (kgdb) l *0xc068036f > 0xc068036f is in bus_dmamem_alloc (../../../i386/i386/busdma_machdep.c:430). > 425 /* > 426 * XXX Use Contigmalloc until it is merged into this facility > 427 * and handles multi-seg allocations. Nobody is doing > 428 * multi-seg allocations yet though. > 429 */ > 430 *vaddr = contigmalloc(dmat->maxsize, M_DEVBUF, mflags, > 431 0ul, dmat->lowaddr, dmat->alignment? dmat->alignment : 1ul, > 432 dmat->boundary); > 433 } > 434 if (*vaddr == NULL) > (kgdb) l *0xc067efcf > 0xc067efcf is in acpi_alloc_wakeup_handler (../../../i386/acpica/acpi_wakeup.c:318). > 313 &Giant, &acpi_waketag) != 0) { > 314 printf("acpi_alloc_wakeup_handler: can't create wake tag\n"); > 315 return; > 316 } > 317 > 318 if (bus_dmamem_alloc(acpi_waketag, (void **)&acpi_wakeaddr, > 319 BUS_DMA_NOWAIT, &acpi_wakemap)) { > 320 printf("acpi_alloc_wakeup_handler: can't alloc wake memory\n"); > 321 return; > 322 } > (kgdb) l *0xc053ff66 > 0xc053ff66 is in mi_startup (../../../kern/init_main.c:215). > 210 > 211 /* Call function */ > 212 (*((*sipp)->func))((*sipp)->udata); > 213 > 214 /* Check off the one we're just done */ > 215 (*sipp)->subsystem = SI_SUB_DONE; > 216 > 217 /* Check if we've installed more sysinit items via KLD */ > 218 if (newsysinit != NULL) { > 219 if (sysinit != SET_BEGIN(sysinit_set)) > > -- > Marcel Moolenaar USPA: A-39004 marcel_at_xcllnt.net >Received on Thu Mar 04 2004 - 15:16:19 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:46 UTC