From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.suse.de (ns.suse.de [195.135.220.2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "mx1.suse.de", Issuer "Thawte Premium Server CA" (verified OK)) by ozlabs.org (Postfix) with ESMTP id 3A7EB67B5A for ; Sat, 25 Feb 2006 21:27:37 +1100 (EST) Date: Sat, 25 Feb 2006 11:27:31 +0100 From: Olaf Hering To: linuxppc-dev@ozlabs.org, Benjamin Herrenschmidt Subject: [PATCH] processes stuck forever in __do_get_xsec Message-ID: <20060225102730.GA17550@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 64bit processes loop forever in __do_get_xsec, r8 is loaded, but r4 is compared. Also, gdb doesnt understand __do_get_xsec and __get_datapage. No idea if my change is correct. (gdb) info registers r0 0x1 1 r1 0xfffff8587c0 17592178018240 r2 0x40000661448 4398053200968 r3 0x102000 1056768 r4 0x4400116315df5 1196273318321653 r5 0x14cb69f61f48246 93650487927407174 r6 0x4400116315df2 1196273318321650 r7 0x3 3 r8 0x3644 13892 r9 0x4ae52fab6fd92 1317571323690386 r10 0x0 0 r11 0xfffff8588b0 17592178018480 r12 0x40000599648 4398052382280 r13 0x400000321c0 4398046716352 r14 0xfffff85c644 17592178034244 r15 0x400000c0de8 4398047301096 r16 0x67 103 r17 0x23 35 r18 0x338 824 r19 0x0 0 r20 0x4 4 r21 0x1017b350 269988688 r22 0x102604c0 270927040 r23 0xfffff858950 17592178018640 r24 0x101f35a0 270480800 r25 0x40000249598 4398048908696 r26 0xfffff85c5d0 17592178034128 r27 0x0 0 r28 0x40000223928 4398048753960 r29 0x35ac5 219845 r30 0x0 0 r31 0xfffff8588b0 17592178018480 pc 0x1005f4 1050100 cr 0x48022224 1208099364 lr 0x100464 1049700 ctr 0x100450 1049680 xer 0x0 0 (gdb) bt #0 0x00000000001005f4 in __kernel_clock_getres () #1 0x0000000000100464 in __kernel_gettimeofday () #2 0x0000040000599648 in .__gettimeofday_internal () from /lib64/power5/libc.so.6 #3 0x00000400002acef4 in .rpmswNow () from /usr/lib64/librpmio-4.4.so #4 0x00000400002acf74 in .rpmswExit () from /usr/lib64/librpmio-4.4.so #5 0x000004000014f244 in .rpmdbAdd () from /usr/lib64/librpmdb-4.4.so #6 0x0000040000072f80 in .rpmpsmStage () from /usr/lib64/librpm-4.4.so #7 0x0000040000074254 in .rpmpsmStage () from /usr/lib64/librpm-4.4.so #8 0x00000400000739ec in .rpmpsmStage () from /usr/lib64/librpm-4.4.so #9 0x0000040000074254 in .rpmpsmStage () from /usr/lib64/librpm-4.4.so #10 0x00000400000732d8 in .rpmpsmStage () from /usr/lib64/librpm-4.4.so #11 0x000004000009fed4 in .rpmtsRun () from /usr/lib64/librpm-4.4.so #12 0x0000040000089208 in .rpmInstall () from /usr/lib64/librpm-4.4.so #13 0x0000000010004f30 in ?? () #14 0x220004224d502053 in ?? () #15 0x000004000003d010 in ?? () from /usr/lib64/librpm-4.4.so #16 0x0000000000000000 in ?? () (gdb) disassemble __kernel_gettimeofday Dump of assembler code for function __kernel_gettimeofday: 0x0000000000100450 <__kernel_gettimeofday+0>: mflr r12 0x0000000000100454 <__kernel_gettimeofday+4>: mr r11,r3 0x0000000000100458 <__kernel_gettimeofday+8>: mr r10,r4 0x000000000010045c <__kernel_gettimeofday+12>: bl 0x10063c <__kernel_clock_getres+136> 0x0000000000100460 <__kernel_gettimeofday+16>: bl 0x1005f4 <__kernel_clock_getres+64> 0x0000000000100464 <__kernel_gettimeofday+20>: lis r7,15 0x0000000000100468 <__kernel_gettimeofday+24>: ori r7,r7,16960 0x000000000010046c <__kernel_gettimeofday+28>: rldicl r5,r4,44,20 0x0000000000100470 <__kernel_gettimeofday+32>: rldicr r6,r5,20,43 0x0000000000100474 <__kernel_gettimeofday+36>: std r5,0(r11) 0x0000000000100478 <__kernel_gettimeofday+40>: subf r0,r6,r4 0x000000000010047c <__kernel_gettimeofday+44>: mulld r0,r0,r7 0x0000000000100480 <__kernel_gettimeofday+48>: rldicl r0,r0,44,20 0x0000000000100484 <__kernel_gettimeofday+52>: cmpldi r10,0 0x0000000000100488 <__kernel_gettimeofday+56>: std r0,8(r11) 0x000000000010048c <__kernel_gettimeofday+60>: beq- 0x1004a0 <__kernel_gettimeofday+80> 0x0000000000100490 <__kernel_gettimeofday+64>: lwz r4,88(r3) 0x0000000000100494 <__kernel_gettimeofday+68>: lwz r5,92(r3) 0x0000000000100498 <__kernel_gettimeofday+72>: stw r4,0(r10) 0x000000000010049c <__kernel_gettimeofday+76>: stw r5,4(r10) 0x00000000001004a0 <__kernel_gettimeofday+80>: mtlr r12 0x00000000001004a4 <__kernel_gettimeofday+84>: crclr so 0x00000000001004a8 <__kernel_gettimeofday+88>: li r3,0 0x00000000001004ac <__kernel_gettimeofday+92>: blr (gdb) disassemble __kernel_clock_getres Dump of assembler code for function __kernel_clock_getres: 0x00000000001005b4 <__kernel_clock_getres+0>: cmpwi r3,0 0x00000000001005b8 <__kernel_clock_getres+4>: cmpwi cr1,r3,1 0x00000000001005bc <__kernel_clock_getres+8>: cror eq,eq,4*cr1+eq 0x00000000001005c0 <__kernel_clock_getres+12>: bne- 0x1005e8 <__kernel_clock_getres+52> 0x00000000001005c4 <__kernel_clock_getres+16>: li r3,0 0x00000000001005c8 <__kernel_clock_getres+20>: cmplwi r4,0 0x00000000001005cc <__kernel_clock_getres+24>: crclr so 0x00000000001005d0 <__kernel_clock_getres+28>: beqlr 0x00000000001005d4 <__kernel_clock_getres+32>: lis r5,152 0x00000000001005d8 <__kernel_clock_getres+36>: ori r5,r5,38528 0x00000000001005dc <__kernel_clock_getres+40>: std r3,0(r4) 0x00000000001005e0 <__kernel_clock_getres+44>: std r5,8(r4) 0x00000000001005e4 <__kernel_clock_getres+48>: blr 0x00000000001005e8 <__kernel_clock_getres+52>: li r0,247 0x00000000001005ec <__kernel_clock_getres+56>: sc 0x00000000001005f0 <__kernel_clock_getres+60>: blr 0x00000000001005f4 <__kernel_clock_getres+64>: ld r8,80(r3) 0x00000000001005f8 <__kernel_clock_getres+68>: andi. r0,r4,1 0x00000000001005fc <__kernel_clock_getres+72>: bne- 0x1005f4 <__kernel_clock_getres+64> 0x0000000000100600 <__kernel_clock_getres+76>: xor r0,r4,r4 0x0000000000100604 <__kernel_clock_getres+80>: add r3,r3,r0 0x0000000000100608 <__kernel_clock_getres+84>: mftb r7 0x000000000010060c <__kernel_clock_getres+88>: ld r9,48(r3) 0x0000000000100610 <__kernel_clock_getres+92>: subf r7,r9,r7 0x0000000000100614 <__kernel_clock_getres+96>: ld r5,64(r3) 0x0000000000100618 <__kernel_clock_getres+100>: mulhdu r7,r7,r5 0x000000000010061c <__kernel_clock_getres+104>: ld r6,72(r3) 0x0000000000100620 <__kernel_clock_getres+108>: add r4,r6,r7 0x0000000000100624 <__kernel_clock_getres+112>: xor r0,r4,r4 0x0000000000100628 <__kernel_clock_getres+116>: add r3,r3,r0 0x000000000010062c <__kernel_clock_getres+120>: ld r0,80(r3) 0x0000000000100630 <__kernel_clock_getres+124>: cmpld r0,r8 0x0000000000100634 <__kernel_clock_getres+128>: bne- 0x1005f4 <__kernel_clock_getres+64> 0x0000000000100638 <__kernel_clock_getres+132>: blr 0x000000000010063c <__kernel_clock_getres+136>: mflr r0 0x0000000000100640 <__kernel_clock_getres+140>: bcl- 20,4*cr7+so,0x100648 <__kernel_datapage_offset+4> Signed-off-by: Olaf Hering arch/powerpc/kernel/vdso64/gettimeofday.S | 1 + 1 files changed, 1 insertion(+) Index: linux-2.6.16-rc4-olh/arch/powerpc/kernel/vdso64/gettimeofday.S =================================================================== --- linux-2.6.16-rc4-olh.orig/arch/powerpc/kernel/vdso64/gettimeofday.S +++ linux-2.6.16-rc4-olh/arch/powerpc/kernel/vdso64/gettimeofday.S @@ -225,6 +225,7 @@ V_FUNCTION_BEGIN(__do_get_xsec) .cfi_startproc /* check for update count & load values */ 1: ld r8,CFG_TB_UPDATE_COUNT(r3) + mr r4,r8 andi. r0,r4,1 /* pending update ? loop */ bne- 1b xor r0,r4,r4 /* create dependency */