From owner-freebsd-current@FreeBSD.ORG Tue Nov 27 15:36:44 2012 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0366779B for ; Tue, 27 Nov 2012 15:36:43 +0000 (UTC) (envelope-from andre@freebsd.org) Received: from c00l3r.networx.ch (c00l3r.networx.ch [62.48.2.2]) by mx1.freebsd.org (Postfix) with ESMTP id 5F8A88FC0C for ; Tue, 27 Nov 2012 15:36:42 +0000 (UTC) Received: (qmail 35499 invoked from network); 27 Nov 2012 17:08:20 -0000 Received: from unknown (HELO [62.48.0.94]) ([62.48.0.94]) (envelope-sender ) by c00l3r.networx.ch (qmail-ldap-1.03) with SMTP for ; 27 Nov 2012 17:08:20 -0000 Message-ID: <50B4DE64.5090809@freebsd.org> Date: Tue, 27 Nov 2012 16:38:12 +0100 From: Andre Oppermann User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20121026 Thunderbird/16.0.2 MIME-Version: 1.0 To: Konstantin Belousov Subject: Re: panic: vm_object_madvise: page 0xfffffe0413c58630 is fictitious References: <50B4A374.5040705@freebsd.org> <20121127150625.GJ3013@kib.kiev.ua> In-Reply-To: <20121127150625.GJ3013@kib.kiev.ua> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: alc@freebsd.org, freebsd-current@freebsd.org X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Nov 2012 15:36:44 -0000 On 27.11.2012 16:06, Konstantin Belousov wrote: > On Tue, Nov 27, 2012 at 12:26:44PM +0100, Andre Oppermann wrote: >> FreeBSD bbb.ccc 10.0-CURRENT FreeBSD 10.0-CURRENT #0: >> Fri Nov 23 17:00:40 CET 2012 >> aaa@bbb.ccc:/usr/obj/usr/src/head/sys/GENERIC amd64 >> >> #0 doadump (textdump=-2014022336) at pcpu.h:229 >> #1 0xffffffff8033e2d2 in db_fncall (dummy1=, >> dummy2=, >> dummy3=, dummy4=) >> at /usr/src/head/sys/ddb/db_command.c:578 >> #2 0xffffffff8033e074 in db_command (last_cmdp=, >> cmd_table=, dopager=1) at >> /usr/src/head/sys/ddb/db_command.c:449 >> #3 0xffffffff8033dd62 in db_command_loop () at >> /usr/src/head/sys/ddb/db_command.c:502 >> #4 0xffffffff80340690 in db_trap (type=, code=0) >> at /usr/src/head/sys/ddb/db_main.c:231 >> #5 0xffffffff808b375e in kdb_trap (type=3, code=0, tf=> out>) >> at /usr/src/head/sys/kern/subr_kdb.c:654 >> #6 0xffffffff80bfc71a in trap (frame=0xffffff8487f478a0) >> at /usr/src/head/sys/amd64/amd64/trap.c:579 >> #7 0xffffffff80be65b2 in calltrap () at /tmp/exception-3nQ6Cf.s:179 >> #8 0xffffffff808b2f5e in kdb_enter (why=0xffffffff80e5e23b "panic", >> msg=) >> at cpufunc.h:63 >> #9 0xffffffff8088086f in panic (fmt=) >> at /usr/src/head/sys/kern/kern_shutdown.c:628 >> #10 0xffffffff80adea4a in vm_object_madvise (object=, >> pindex=, end=8952, advise=) >> at /usr/src/head/sys/vm/vm_object.c:1101 >> #11 0xffffffff80ad759a in vm_map_madvise (map=0xfffffe0018260188, >> start=, >> end=, behav=5) at >> /usr/src/head/sys/vm/vm_map.c:2140 >> #12 0xffffffff80adbd8d in sys_madvise (td=, >> uap=) >> at /usr/src/head/sys/vm/vm_mmap.c:752 >> #13 0xffffffff80bfd3a5 in amd64_syscall (td=0xfffffe0018230000, >> traced=0) at subr_syscall.c:135 >> #14 0xffffffff80be689b in Xfast_syscall () at /tmp/exception-3nQ6Cf.s:329 >> #15 0x00000000016f3bfa in ?? () > > I think this is an omission in the check for the object types. BTW, this > pattern already repeats in several places, I thought about adding either > new pager method, like boolean_t vm_pager_is_pageable(), or just a flag > fields to the struct vm_pager to classify the vm objects. > > I am curious, what was the process which caused the panic ? Clang doing a manual kernel build of my work tree with "make -j8 kernel". -- Andre > diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c > index e19750c..5b8ed23 100644 > --- a/sys/vm/vm_object.c > +++ b/sys/vm/vm_object.c > @@ -1060,7 +1060,10 @@ shadowlookup: > (tobject->flags & OBJ_ONEMAPPING) == 0) { > goto unlock_tobject; > } > - } else if (tobject->type == OBJT_PHYS) > + } else if (tobject->type == OBJT_PHYS || > + tobject->type == OBJT_SG || > + tobject->type == OBJT_MGTDEVICE || > + tobject->type == OBJT_DEVICE) > goto unlock_tobject; > m = vm_page_lookup(tobject, tpindex); > if (m == NULL && advise == MADV_WILLNEED) { >