Re: A page fault in subr_turnstile.c:propogate_priority()

From: John Baldwin <jhb_at_FreeBSD.org>
Date: Wed, 03 Dec 2003 13:02:56 -0500 (EST)
On 03-Dec-2003 Igor Sysoev wrote:
> On Wed, 3 Dec 2003, John Baldwin wrote:
> 
>> 
>> On 03-Dec-2003 Igor Sysoev wrote:
>> > On Wed, 3 Dec 2003, John Baldwin wrote:
>> > 
>> >> On 03-Dec-2003 Brian F. Feldman wrote:
>> >> > Igor Sysoev <is_at_rambler-co.ru> wrote:
>> >> >> I'd cvsup'ed 5.1-CURRENT from 2003.11.04.02.02.00 up to
>> >> >> 2003.11.28.00.00.00 with the turnstile support and it can still
>> >> >> causes sometimes a page fault in propogate_priority().
>> >> >> I have core dump and can send debug output.
>> >> > 
>> >> > Go ahead and load up kernel.debug and the core dump in gdb -k, and show us 
>> >> > the backtrace.  Also, do you have any idea about more specific circumstances 
>> >> > that will cause this problem?  Thanks!
>> >> 
>> >> Actually, please try http://www.FreeBSD.org/~jhb/patches/turnstile.patch
>> > 
>> > I've applied patch.
>> > Now it's a second fault.
>> 
>> This is the same fault.  Did you just apply this patch today or did
>> you apply an earlier version of it a while ago?  I just updated it
>> two days ago.
> 
> In <Pine.BSF.4.21.0312031726420.24397-100000_at_is> I sent trace before
> the patch. It seems to me that it's singe fault.
> 
> Then I applied patch I saw the double fault. This trace I sent in
> <Pine.BSF.4.21.0312031855400.24397-100000_at_is>.

Both faults are a trap 12 page fault with a faulting va of 0xe5
because td1 is NULL in priority propagation.  Try this change to
get a better cashdump that can be analyzed:

Index: subr_turnstile.c
===================================================================
RCS file: /usr/cvs/src/sys/kern/subr_turnstile.c,v
retrieving revision 1.134
diff -u -r1.134 subr_turnstile.c
--- subr_turnstile.c    12 Nov 2003 23:48:42 -0000      1.134
+++ subr_turnstile.c    3 Dec 2003 17:48:02 -0000
_at__at_ -254,6 +254,7 _at__at_
                }
 
                td1 = TAILQ_PREV(td, threadqueue, td_lockq);
+               MPASS(td1 != NULL);
                if (td1->td_priority <= pri) {
                        mtx_unlock_spin(&tc->tc_lock);
                        continue;

Then print 'td' and '*ts' in gdb from the priority_propagation()
frame and mail the output.

-- 

John Baldwin <jhb_at_FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/
Received on Wed Dec 03 2003 - 09:02:58 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:32 UTC