Re: ACPI crash with recent changes

From: Nate Lawson <nate_at_root.org>
Date: Thu, 4 Mar 2004 16:16:20 -0800 (PST)
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