Date: Thu, 20 Jun 1996 00:56:21 -0700 From: David Greenman <davidg@root.com> To: John Capo <jc@irbs.com> Cc: freebsd-current@freefall.freebsd.org (freebsd-current) Subject: Re: vm_bounce_alloc: Unmapped page Message-ID: <199606200756.AAA03443@root.com> In-Reply-To: Your message of "Thu, 20 Jun 1996 00:54:47 EDT." <199606200454.AAA26797@irbs.irbs.com>
next in thread | previous in thread | raw e-mail | index | archive | help
>I installed -current on a 486 with 32MB and an Adaptec 1542B
>yesterday. I ran it hard for 24 hours with kernel sources from June
>7 and vm_machdep.c 1.63 with no problems.
>
>A kernel from up to date sources panics early in the boot. The
>core dump aborts at the 16Meg point with DMA past end of ISA message.
>Booting the previous kernel, savecore barfs with the same message
>and buffer already done messages.
>
>Current sources and vm_machdep.c 1.63 work fine. The new VM system
>sure feels snappy. :-)
The new versions of vmapbuf/vunmapbuf didn't account properly for a buffer
not starting on a page boundry, resulting in not enough pages being mapped.
The attached patch should fix this.
-DG
David Greenman
Core-team/Principal Architect, The FreeBSD Project
Index: vm_machdep.c
===================================================================
RCS file: /home/ncvs/src/sys/i386/i386/vm_machdep.c,v
retrieving revision 1.65
diff -c -r1.65 vm_machdep.c
*** vm_machdep.c 1996/06/20 01:47:21 1.65
--- vm_machdep.c 1996/06/20 07:55:22
***************
*** 691,697 ****
if ((bp->b_flags & B_PHYS) == 0)
panic("vmapbuf");
! for (v = bp->b_saveaddr, addr = bp->b_data;
addr < bp->b_data + bp->b_bufsize;
addr += PAGE_SIZE, v += PAGE_SIZE) {
/*
--- 691,697 ----
if ((bp->b_flags & B_PHYS) == 0)
panic("vmapbuf");
! for (v = bp->b_saveaddr, addr = trunc_page(bp->b_data);
addr < bp->b_data + bp->b_bufsize;
addr += PAGE_SIZE, v += PAGE_SIZE) {
/*
***************
*** 726,732 ****
if ((bp->b_flags & B_PHYS) == 0)
panic("vunmapbuf");
! for (addr = bp->b_data; addr < bp->b_data + bp->b_bufsize;
addr += PAGE_SIZE) {
pa = trunc_page(pmap_kextract((vm_offset_t) addr));
pmap_kremove((vm_offset_t) addr);
--- 726,732 ----
if ((bp->b_flags & B_PHYS) == 0)
panic("vunmapbuf");
! for (addr = trunc_page(bp->b_data); addr < bp->b_data + bp->b_bufsize;
addr += PAGE_SIZE) {
pa = trunc_page(pmap_kextract((vm_offset_t) addr));
pmap_kremove((vm_offset_t) addr);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199606200756.AAA03443>
