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>