Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 27 Nov 2012 16:38:12 +0100
From:      Andre Oppermann <andre@freebsd.org>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        alc@freebsd.org, freebsd-current@freebsd.org
Subject:   Re: panic: vm_object_madvise: page 0xfffffe0413c58630 is fictitious
Message-ID:  <50B4DE64.5090809@freebsd.org>
In-Reply-To: <20121127150625.GJ3013@kib.kiev.ua>
References:  <50B4A374.5040705@freebsd.org> <20121127150625.GJ3013@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
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=<value optimized out>,
>> dummy2=<value optimized out>,
>>       dummy3=<value optimized out>, dummy4=<value optimized out>)
>>       at /usr/src/head/sys/ddb/db_command.c:578
>> #2  0xffffffff8033e074 in db_command (last_cmdp=<value optimized out>,
>>       cmd_table=<value optimized out>, 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=<value optimized out>, code=0)
>>       at /usr/src/head/sys/ddb/db_main.c:231
>> #5  0xffffffff808b375e in kdb_trap (type=3, code=0, tf=<value optimized
>> 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=<value optimized out>)
>>       at cpufunc.h:63
>> #9  0xffffffff8088086f in panic (fmt=<value optimized out>)
>>       at /usr/src/head/sys/kern/kern_shutdown.c:628
>> #10 0xffffffff80adea4a in vm_object_madvise (object=<value optimized out>,
>>       pindex=<value optimized out>, end=8952, advise=<value optimized out>)
>>       at /usr/src/head/sys/vm/vm_object.c:1101
>> #11 0xffffffff80ad759a in vm_map_madvise (map=0xfffffe0018260188,
>> start=<value optimized out>,
>>       end=<value optimized out>, behav=5) at
>> /usr/src/head/sys/vm/vm_map.c:2140
>> #12 0xffffffff80adbd8d in sys_madvise (td=<value optimized out>,
>> uap=<value optimized out>)
>>       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) {
>




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?50B4DE64.5090809>