Roland McGrath <[EMAIL PROTECTED]> writes: > The only interesting thread is the last one. The others are service > threads waiting for something to do, which is normal. When showing cold > backtraces, always include "x/i $pc" and "info regs" as well. It's > annoying that the arguments are omitted from most of the frames from "bt > full", like the pager_memcpy call. Anyway, we can suspect that getting > that info would show that do_memcpy got a mapping and that memcpy is hung > in the rep;stosl insn with esi/edi being the DATA argument to > _diskfs_rdwr_internal (which should be the OTHER argument to pager_memcpy > as well, not shown in the backtrace) and the page just got from vm_map. If > that's so, it means the hang is in a page fault on that newly-mapped page. > That means all the troubles are actually in the default pager (or kernel). > After verifying that the above is what's happening and vm_map was happy, > you need to start tracing the interactions of the default pager and the > kernel.
Thanks for your help. For completeness here is the "bt full" of thread 4, with debugging symbols for glibc this time, x/i and info regs. What I expect is that after the page is deattached from the memory the object is destroyed... That is what the test program I wrote made me think. Does that make sense or do you have another idea? Well, I hope this new backtrace helps a bit more. :) > If debugging the live default pager turns into a nightmare, it may be > worthwhile to do a little hacking so you can run a hacked mach-defpager > server that is not installed as the kernel's default pager, which you > separately use for tmpfs's default_pager_object_create. Ok. #0 0x01140dd3 in memcpy (dstpp=0x1d000, srcpp=0x128bf60, len=2) at ../sysdeps/generic/memcpy.c:61 __d0 = 2 dstp = 118784 srcp = 19447648 #1 0x01042f14 in do_memcpy.2 () at /home/marco/src/hurdcvs/hurd/libpager/pager-memcpy.c:125 buf = {{__jmpbuf = {19446804, 40608, 0, 118784, 19447164, 19447132}, __mask_was_saved = 19446804, __saved_mask = 17051412}} _pager_class = (struct port_class *) 0x804e928 #2 0x01042fb4 in do_copy.1 () at /home/marco/src/hurdcvs/hurd/libpager/pager-memcpy.c:166 buf = {{__jmpbuf = {4096, 19447164, 19447120, 2, 0, 19446840}, __mask_was_saved = 19446840, __saved_mask = 17061048}} _pager_class = (struct port_class *) 0x804e928 #3 0x010d9643 in hurd_catch_signal () at catch-signal.c:60 No locals. #4 0x010431cf in pager_memcpy () at /home/marco/src/hurdcvs/hurd/libpager/pager-memcpy.c:207 No locals. #5 0x01039127 in _diskfs_rdwr_internal (np=0x80550f8, data=0x128bf60 "a\n\001", offset=0, amt=0x128df60, dir=1, notime=0) at ../../hurd/libdiskfs/rdwr-internal.c:61 memobj = 41 ---Type <return> to continue, or q <return> to quit--- prot = 3 err = EKERN_NO_SPACE #6 0x0103554c in diskfs_S_io_write (cred=0x804ef28, data=0x128bf60 "a\n\001", datalen=2, offset=-1, amt=0x128df60) at ../../hurd/libdiskfs/io-write.c:80 np = (struct node *) 0x80550f8 err = 0 off = 0 #7 0x01035808 in _Xio_write (InHeadP=0x128bf3c, OutHeadP=0x128df3c) at ioServer.c:131 In1P = (Request *) 0x128b740 msgh_size = 118784 msgh_size_delta = 2 offsetCheck = {msgt_name = 11, msgt_size = 64, msgt_number = 1, msgt_inline = 1, msgt_longform = 0, msgt_deallocate = 0, msgt_unused = 0} amountType = {msgt_name = 2, msgt_size = 32, msgt_number = 1, msgt_inline = 1, msgt_longform = 0, msgt_deallocate = 0, msgt_unused = 0} io_object = 0x804ef28 #8 0x01035705 in diskfs_io_server (InHeadP=0x128bf3c, OutHeadP=0x1d000) at ioServer.c:1999 RetCodeType = {msgt_name = 2, msgt_size = 32, msgt_number = 1, msgt_inline = 1, msgt_longform = 0, msgt_deallocate = 0, msgt_unused = 0} routine = 0x2 #9 0x01027da1 in diskfs_demuxer (inp=0x128bf3c, outp=0x128df3c) at ../../hurd/libdiskfs/demuxer.c:32 ---Type <return> to continue, or q <return> to quit--- No locals. #10 0x01097e51 in internal_demuxer.0 () at /home/marco/src/hurdcvs/hurd/libports/manage-multithread.c:101 No locals. #11 0x010c3490 in __mach_msg_server_timeout (demux=0x127ff2c, max_size=8192, rcv_name=24, option=2048, timeout=0) at msgserver.c:147 request = (struct {...} *) 0x128bf3c reply = (struct {...} *) 0x128df3c mr = 2 #12 0x01097f50 in thread_function.1 () at /home/marco/src/hurdcvs/hurd/libports/manage-multithread.c:136 No locals. #13 0x010926d8 in cthread_body (self=0x804edf0) at /home/marco/src/hurdcvs/hurd/libthreads/cthreads.c:306 t = 0x804ed78 (gdb) x/i $pc 0x1140dd3 <memcpy+47>: repz movsb %ds:(%esi),%es:(%edi) (gdb) info registerseax 0x2 2 ecx 0x2 2 edx 0x1d000 118784 ebx 0x10454b8 17061048 esp 0x128bbcc 0x128bbcc ebp 0x128bbd4 0x128bbd4 esi 0x128bf60 19447648 edi 0x1d000 118784 eip 0x1140dd3 0x1140dd3 eflags 0x10293 66195 cs 0x17 23 ss 0x1f 31 ds 0x1f 31 es 0x1f 31 fs 0x1f 31 gs 0x1f 31 fctrl 0x0 0 fstat 0x0 0 ftag 0x0 0 fiseg 0x0 0 fioff 0x0 0 foseg 0x0 0 fooff 0x0 0 fop 0x0 0 _______________________________________________ Bug-hurd mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/bug-hurd