LinuxPPC-Dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* Re: [Suggestion] powerpc: xmon: about 'longjmp' related warning.
From: Chen Gang @ 2013-07-26  4:11 UTC (permalink / raw)
  To: Michael Ellerman
  Cc: Michael Neuling, paulus@samba.org, Andrew Morton,
	linuxppc-dev@lists.ozlabs.org, jovi.zhangwei
In-Reply-To: <51EF21FD.9020509@asianux.com>

On 07/24/2013 08:38 AM, Chen Gang wrote:
> On 07/23/2013 09:58 PM, Michael Ellerman wrote:
>> On Mon, Jul 22, 2013 at 03:02:53PM +0800, Chen Gang wrote:
>>> Hello Maintainers:
>>>
>>> With allmodconfig and EXTRA_CFLAGS=-W", it reports warnings below:
>>
>>>
>>> arch/powerpc/xmon/xmon.c:3027:6: warning: variable ‘i’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
>>> arch/powerpc/xmon/xmon.c:3068:6: warning: variable ‘i’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
>>
>> In both these cases we are inside the body of a for loop and we do a
>> if (setjmp) / else block. Although looking at the source the value of i
>> is not modified by the setjmp, I guess it's possible that the compiler
>> might reorder the increment of i inside the setjmp and loose the value
>> when we longjmp.
>>
> 
> I should continue to confirm the details based on your valuable
> information, thanks.
> 
> 


For stop_spus() and restart_spus(), at least now, the related warnings
are not issue: the variable 'i' is stored in stack "120(r1)".

The related warning:

  arch/powerpc/xmon/xmon.c:3027:6: warning: variable ‘i’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
  arch/powerpc/xmon/xmon.c:3068:6: warning: variable ‘i’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]

The related source code:

3024 static void stop_spus(void)
3025 {
3026         struct spu *spu;
3027         int i;
3028         u64 tmp;
3029 
3030         for (i = 0; i < XMON_NUM_SPUS; i++) { /* XMON_NUM_SPUS == 16 */
3031                 if (!spu_info[i].spu)
3032                         continue;
3033 
3034                 if (setjmp(bus_error_jmp) == 0) {
3035                         catch_memory_errors = 1;
3036                         sync();
3037 
3038                         spu = spu_info[i].spu;
3039 
3040                         spu_info[i].saved_spu_runcntl_RW =
3041                                 in_be32(&spu->problem->spu_runcntl_RW);
3042 
3043                         tmp = spu_mfc_sr1_get(spu);
3044                         spu_info[i].saved_mfc_sr1_RW = tmp;
3045 
3046                         tmp &= ~MFC_STATE1_MASTER_RUN_CONTROL_MASK;
3047                         spu_mfc_sr1_set(spu, tmp);
3048 
3049                         sync();
3050                         __delay(200);
3051 
3052                         spu_info[i].stopped_ok = 1;
3053 
3054                         printf("Stopped spu %.2d (was %s)\n", i,
3055                                         spu_info[i].saved_spu_runcntl_RW ?
3056                                         "running" : "stopped");
3057                 } else {
3058                         catch_memory_errors = 0;
3059                         printf("*** Error stopping spu %.2d\n", i);
3060                 }
3061                 catch_memory_errors = 0;
3062         }
3063 }
3064 



The related disassembly code:

  "make ARCH=powerpc EXTRA_CFLAGS=-W"
  "powerpc64-linux-gnu-objdump -d vmlinux.o > vmlinux.S"
  "gcc version 4.7.1 20120606 (Red Hat 4.7.1-0.1.20120606) (GCC)"
  "GNU objdump version 2.23.51.0.3-1.fc16 20120918"

c00000000007cfd0 <.stop_spus>:
/* { */
c00000000007cfd0:	7c 08 02 a6 	mflr    r0
c00000000007cfd4:	fb c1 ff f0 	std     r30,-16(r1)
c00000000007cfd8:	fb e1 ff f8 	std     r31,-8(r1)
c00000000007cfdc:	3d 22 00 0f 	addis   r9,r2,15
c00000000007cfe0:	39 29 3e 10 	addi    r9,r9,15888
c00000000007cfe4:	3d 02 ff d4 	addis   r8,r2,-44
c00000000007cfe8:	39 29 21 50 	addi    r9,r9,8528
c00000000007cfec:	3d 42 ff d4 	addis   r10,r2,-44
c00000000007cff0:	39 08 83 f8 	addi    r8,r8,-31752
c00000000007cff4:	39 4a 83 d8 	addi    r10,r10,-31784
c00000000007cff8:	f8 01 00 10 	std     r0,16(r1)
c00000000007cffc:	f8 21 ff 51 	stdu    r1,-176(r1)
c00000000007d000:	f9 21 00 70 	std     r9,112(r1)
c00000000007d004:	39 20 00 00 	li      r9,0
c00000000007d008:	f9 21 00 78 	std     r9,120(r1)	; i = 0;
c00000000007d00c:	f9 01 00 88 	std     r8,136(r1)
c00000000007d010:	f9 41 00 90 	std     r10,144(r1)
c00000000007d014:	48 00 01 28 	b       c00000000007d13c <.stop_spus+0x16c>
c00000000007d018:	60 00 00 00 	nop
c00000000007d01c:	60 00 00 00 	nop


/*	 	if (setjmp(bus_error_jmp) == 0) { */
c00000000007d020:	3d 22 00 0f 	addis   r9,r2,15
c00000000007d024:	39 40 00 01 	li      r10,1
c00000000007d028:	39 29 3e 10 	addi    r9,r9,15888
c00000000007d02c:	91 49 20 c0 	stw     r10,8384(r9)
c00000000007d030:	7c 00 04 ac 	sync    
c00000000007d034:	4c 00 01 2c 	isync
c00000000007d038:	e9 01 00 80 	ld      r8,128(r1)
c00000000007d03c:	eb e8 00 00 	ld      r31,0(r8)
c00000000007d040:	e9 3f 00 20 	ld      r9,32(r31)
c00000000007d044:	7c 00 04 ac 	sync    
c00000000007d048:	81 29 40 1c 	lwz     r9,16412(r9)
c00000000007d04c:	0c 09 00 00 	twi     0,r9,0
c00000000007d050:	4c 00 01 2c 	isync
c00000000007d054:	91 28 00 10 	stw     r9,16(r8)
c00000000007d058:	3d 22 00 0f 	addis   r9,r2,15
c00000000007d05c:	3b c9 f5 e8 	addi    r30,r9,-2584
c00000000007d060:	7f e3 fb 78 	mr      r3,r31
c00000000007d064:	e9 3e 00 00 	ld      r9,0(r30)
c00000000007d068:	e9 29 00 60 	ld      r9,96(r9)
c00000000007d06c:	e9 49 00 00 	ld      r10,0(r9)
c00000000007d070:	f8 41 00 28 	std     r2,40(r1)
c00000000007d074:	7d 49 03 a6 	mtctr   r10
c00000000007d078:	e8 49 00 08 	ld      r2,8(r9)
c00000000007d07c:	4e 80 04 21 	bctrl
c00000000007d080:	e8 41 00 28 	ld      r2,40(r1)
c00000000007d084:	e9 01 00 80 	ld      r8,128(r1)
c00000000007d088:	e9 3e 00 00 	ld      r9,0(r30)
c00000000007d08c:	f8 68 00 08 	std     r3,8(r8)
c00000000007d090:	7c 64 1b 78 	mr      r4,r3
c00000000007d094:	78 84 d0 42 	rldicl  r4,r4,58,1
c00000000007d098:	7f e3 fb 78 	mr      r3,r31
c00000000007d09c:	78 84 30 00 	rotldi  r4,r4,6
c00000000007d0a0:	e9 29 00 58 	ld      r9,88(r9)
c00000000007d0a4:	e9 49 00 00 	ld      r10,0(r9)
c00000000007d0a8:	f8 41 00 28 	std     r2,40(r1)
c00000000007d0ac:	7d 49 03 a6 	mtctr   r10
c00000000007d0b0:	e8 49 00 08 	ld      r2,8(r9)
c00000000007d0b4:	4e 80 04 21 	bctrl
c00000000007d0b8:	e8 41 00 28 	ld      r2,40(r1)
c00000000007d0bc:	7c 00 04 ac 	sync    
c00000000007d0c0:	4c 00 01 2c 	isync
c00000000007d0c4:	38 60 00 c8 	li      r3,200
c00000000007d0c8:	4b fa 01 e9 	bl      c00000000001d2b0 <.__delay>	; __delay(200)
c00000000007d0cc:	60 00 00 00 	nop
c00000000007d0d0:	e9 01 00 80 	ld      r8,128(r1)
c00000000007d0d4:	39 40 00 01 	li      r10,1
c00000000007d0d8:	81 28 00 10 	lwz     r9,16(r8)
c00000000007d0dc:	99 48 00 20 	stb     r10,32(r8)
c00000000007d0e0:	3d 02 ff d4 	addis   r8,r2,-44
c00000000007d0e4:	38 a8 83 c8 	addi    r5,r8,-31800
c00000000007d0e8:	2f 89 00 00 	cmpwi   cr7,r9,0
c00000000007d0ec:	40 9e 00 0c 	bne-    cr7,c00000000007d0f8 <.stop_spus+0x128>
c00000000007d0f0:	3d 22 ff d4 	addis   r9,r2,-44
c00000000007d0f4:	38 a9 83 d0 	addi    r5,r9,-31792
c00000000007d0f8:	e8 61 00 90 	ld      r3,144(r1)
c00000000007d0fc:	e8 81 00 78 	ld      r4,120(r1)		; 120(r1) = i
c00000000007d100:	48 00 67 41 	bl      c000000000083840 <.xmon_printf>
c00000000007d104:	60 00 00 00 	nop


/* 		catch_memory_errors = 0; */
c00000000007d108:	3d 22 00 0f 	addis   r9,r2,15
c00000000007d10c:	39 40 00 00 	li      r10,0
c00000000007d110:	39 29 3e 10 	addi    r9,r9,15888
c00000000007d114:	91 49 20 c0 	stw     r10,8384(r9)


/* 	for (i = 0; i < XMON_NUM_SPUS; i++) { */
c00000000007d118:	e9 01 00 78 	ld      r8,120(r1)		; 120(r1) = i;
c00000000007d11c:	39 28 00 01 	addi    r9,r8,1			; i++
c00000000007d120:	2f 89 00 10 	cmpwi   cr7,r9,16		; i < XMON_NUM_SPUS
c00000000007d124:	7d 29 07 b4 	extsw   r9,r9
c00000000007d128:	f9 21 00 78 	std     r9,120(r1)		; 120(r1) = i;
c00000000007d12c:	e9 21 00 70 	ld      r9,112(r1)		;
c00000000007d130:	39 29 00 28 	addi    r9,r9,40		; 112(r1) =  [i] for spu_info;
c00000000007d134:	f9 21 00 70 	std     r9,112(r1)		;
c00000000007d138:	41 9e 00 58 	beq-    cr7,c00000000007d190 <.stop_spus+0x1c0>

/* 		if (!spu_info[i].spu) */
/*			continue; */
c00000000007d13c:	e9 01 00 70 	ld      r8,112(r1)
c00000000007d140:	3d 42 00 0f 	addis   r10,r2,15
c00000000007d144:	38 6a 5e 18 	addi    r3,r10,24088
c00000000007d148:	e9 28 00 00 	ld      r9,0(r8)
c00000000007d14c:	f9 01 00 80 	std     r8,128(r1)
c00000000007d150:	2f a9 00 00 	cmpdi   cr7,r9,0				
c00000000007d154:	41 9e ff c4 	beq+    cr7,c00000000007d118 <.stop_spus+0x148>

/* 		if (setjmp(bus_error_jmp) == 0) { */
c00000000007d158:	4b fa 44 99 	bl      c0000000000215f0 <.setjmp>
c00000000007d15c:	60 00 00 00 	nop
c00000000007d160:	2f a3 00 00 	cmpdi   cr7,r3,0
c00000000007d164:	e8 81 00 78 	ld      r4,120(r1)	; 120(r1) = i for 2nd param of printf in exception processing after setjmp.
c00000000007d168:	e8 61 00 88 	ld      r3,136(r1)
c00000000007d16c:	41 9e fe b4 	beq+    cr7,c00000000007d020 <.stop_spus+0x50>

/* 		} else { */
c00000000007d170:	3d 42 00 0f 	addis   r10,r2,15
c00000000007d174:	39 00 00 00 	li      r8,0
c00000000007d178:	39 4a 3e 10 	addi    r10,r10,15888
c00000000007d17c:	91 0a 20 c0 	stw     r8,8384(r10)				/* catch_memory_errors = 0; */
c00000000007d180:	48 00 66 c1 	bl      c000000000083840 <.xmon_printf>		/* called with correct i */
c00000000007d184:	60 00 00 00 	nop
c00000000007d188:	4b ff ff 80 	b       c00000000007d108 <.stop_spus+0x138>
c00000000007d18c:	60 00 00 00 	nop
/*	 } */

c00000000007d190:	38 21 00 b0 	addi    r1,r1,176
c00000000007d194:	e8 01 00 10 	ld      r0,16(r1)
c00000000007d198:	eb c1 ff f0 	ld      r30,-16(r1)
c00000000007d19c:	eb e1 ff f8 	ld      r31,-8(r1)
c00000000007d1a0:	7c 08 03 a6 	mtlr    r0
c00000000007d1a4:	4e 80 00 20 	blr
c00000000007d1a8:	60 00 00 00 	nop
c00000000007d1ac:	60 00 00 00 	nop
/* } */


The related assembly code (they really save and restore 'r1'):

_GLOBAL(setjmp)
        mflr    r0
        PPC_STL r0,0(r3)
        PPC_STL r1,SZL(r3)
        PPC_STL r2,2*SZL(r3)
        mfcr    r0
        PPC_STL r0,3*SZL(r3)
        PPC_STL r13,4*SZL(r3)
        PPC_STL r14,5*SZL(r3)
        PPC_STL r15,6*SZL(r3)
        PPC_STL r16,7*SZL(r3)
        PPC_STL r17,8*SZL(r3)
        PPC_STL r18,9*SZL(r3)
        PPC_STL r19,10*SZL(r3)
        PPC_STL r20,11*SZL(r3)
        PPC_STL r21,12*SZL(r3)
        PPC_STL r22,13*SZL(r3)
        PPC_STL r23,14*SZL(r3)
        PPC_STL r24,15*SZL(r3)
        PPC_STL r25,16*SZL(r3)
        PPC_STL r26,17*SZL(r3)
        PPC_STL r27,18*SZL(r3)
        PPC_STL r28,19*SZL(r3)
        PPC_STL r29,20*SZL(r3)
        PPC_STL r30,21*SZL(r3)
        PPC_STL r31,22*SZL(r3)
        li      r3,0
        blr

_GLOBAL(longjmp)
        PPC_LCMPI r4,0
        bne     1f
        li      r4,1
1:      PPC_LL  r13,4*SZL(r3)
        PPC_LL  r14,5*SZL(r3)
        PPC_LL  r15,6*SZL(r3)
        PPC_LL  r16,7*SZL(r3)
        PPC_LL  r17,8*SZL(r3)
        PPC_LL  r18,9*SZL(r3)
        PPC_LL  r19,10*SZL(r3)
        PPC_LL  r20,11*SZL(r3)
        PPC_LL  r21,12*SZL(r3)
        PPC_LL  r22,13*SZL(r3)
        PPC_LL  r23,14*SZL(r3)
        PPC_LL  r24,15*SZL(r3)
        PPC_LL  r25,16*SZL(r3)
        PPC_LL  r26,17*SZL(r3)
        PPC_LL  r27,18*SZL(r3)
        PPC_LL  r28,19*SZL(r3)
        PPC_LL  r29,20*SZL(r3)
        PPC_LL  r30,21*SZL(r3)
        PPC_LL  r31,22*SZL(r3)
        PPC_LL  r0,3*SZL(r3)
        mtcrf   0x38,r0
        PPC_LL  r0,0(r3)
        PPC_LL  r1,SZL(r3)
        PPC_LL  r2,2*SZL(r3)
        mtlr    r0
        mr      r3,r4
        blr




The same to resetart_spus()


3065 static void restart_spus(void)
3066 {
3067         struct spu *spu;
3068         int i;
3069 
3070         for (i = 0; i < XMON_NUM_SPUS; i++) {
3071                 if (!spu_info[i].spu)
3072                         continue;
3073 
3074                 if (!spu_info[i].stopped_ok) {
3075                         printf("*** Error, spu %d was not successfully stopped"
3076                                         ", not restarting\n", i);
3077                         continue;
3078                 }
3079 
3080                 if (setjmp(bus_error_jmp) == 0) {
3081                         catch_memory_errors = 1;
3082                         sync();
3083 
3084                         spu = spu_info[i].spu;
3085                         spu_mfc_sr1_set(spu, spu_info[i].saved_mfc_sr1_RW);
3086                         out_be32(&spu->problem->spu_runcntl_RW,
3087                                         spu_info[i].saved_spu_runcntl_RW);
3088 
3089                         sync();
3090                         __delay(200);
3091 
3092                         printf("Restarted spu %.2d\n", i);
3093                 } else {
3094                         catch_memory_errors = 0;
3095                         printf("*** Error restarting spu %.2d\n", i);
3096                 }
3097                 catch_memory_errors = 0;
3098         }
3099 }
3100 

c00000000007d1b0 <.restart_spus>:
/* { */
c00000000007d1b0:	7c 08 02 a6 	mflr    r0
c00000000007d1b4:	fb e1 ff f8 	std     r31,-8(r1)
c00000000007d1b8:	3d 22 00 0f 	addis   r9,r2,15
c00000000007d1bc:	3c e2 ff d4 	addis   r7,r2,-44
c00000000007d1c0:	39 29 3e 10 	addi    r9,r9,15888
c00000000007d1c4:	3d 02 ff d4 	addis   r8,r2,-44
c00000000007d1c8:	39 29 21 50 	addi    r9,r9,8528
c00000000007d1cc:	3d 42 ff d4 	addis   r10,r2,-44
c00000000007d1d0:	38 e7 84 70 	addi    r7,r7,-31632
c00000000007d1d4:	39 08 84 58 	addi    r8,r8,-31656
c00000000007d1d8:	f8 01 00 10 	std     r0,16(r1)
c00000000007d1dc:	39 4a 84 18 	addi    r10,r10,-31720
c00000000007d1e0:	f8 21 ff 51 	stdu    r1,-176(r1)
c00000000007d1e4:	f9 21 00 70 	std     r9,112(r1)
c00000000007d1e8:	39 20 00 00 	li      r9,0
c00000000007d1ec:	f9 21 00 78 	std     r9,120(r1)		; i = 0;
c00000000007d1f0:	f8 e1 00 88 	std     r7,136(r1)
c00000000007d1f4:	f9 01 00 98 	std     r8,152(r1)
c00000000007d1f8:	f9 41 00 90 	std     r10,144(r1)
c00000000007d1fc:	48 00 00 34 	b       c00000000007d230 <.restart_spus+0x80>

/*		if (!spu_info[i].stopped_ok) { */
/*			printf(....); */
/*			continue; */
c00000000007d200:	e8 61 00 90 	ld      r3,144(r1)
c00000000007d204:	48 00 66 3d 	bl      c000000000083840 <.xmon_printf>
c00000000007d208:	60 00 00 00 	nop

/*	for (i = 0; i < XMON_NUM_SPUS; i++) { */
c00000000007d20c:	e9 01 00 78 	ld      r8,120(r1)
c00000000007d210:	39 28 00 01 	addi    r9,r8,1		; i++
c00000000007d214:	2f 89 00 10 	cmpwi   cr7,r9,16	; i < XMON_NUM_SPUS
c00000000007d218:	7d 29 07 b4 	extsw   r9,r9
c00000000007d21c:	f9 21 00 78 	std     r9,120(r1)
c00000000007d220:	e9 21 00 70 	ld      r9,112(r1)
c00000000007d224:	39 29 00 28 	addi    r9,r9,40
c00000000007d228:	f9 21 00 70 	std     r9,112(r1)
c00000000007d22c:	41 9e 01 0c 	beq-    cr7,c00000000007d338 <.restart_spus+0x188>

/*		if (!spu_info[i].spu) */
/*			continue; */
c00000000007d230:	e9 01 00 70 	ld      r8,112(r1)
c00000000007d234:	3d 42 00 0f 	addis   r10,r2,15
c00000000007d238:	e8 81 00 78 	ld      r4,120(r1) 	; i as 2nd parameter for xmon_printf().
c00000000007d23c:	38 6a 5e 18 	addi    r3,r10,24088
c00000000007d240:	e9 28 00 00 	ld      r9,0(r8)
c00000000007d244:	f9 01 00 80 	std     r8,128(r1)
c00000000007d248:	2f a9 00 00 	cmpdi   cr7,r9,0
c00000000007d24c:	41 9e ff c0 	beq+    cr7,c00000000007d20c <.restart_spus+0x5c>

/*		if (!spu_info[i].stopped_ok) { */
c00000000007d250:	89 28 00 20 	lbz     r9,32(r8)
c00000000007d254:	2f 89 00 00 	cmpwi   cr7,r9,0
c00000000007d258:	41 9e ff a8 	beq+    cr7,c00000000007d200 <.restart_spus+0x50>
/*		} */

/*		if (setjmp(bus_error_jmp) == 0) { */
c00000000007d25c:	4b fa 43 95 	bl      c0000000000215f0 <.setjmp>
c00000000007d260:	60 00 00 00 	nop
c00000000007d264:	2f a3 00 00 	cmpdi   cr7,r3,0
c00000000007d268:	e8 81 00 78 	ld      r4,120(r1)	; i as 2nd parameter for xmon_printf() after setjmp().
c00000000007d26c:	e8 61 00 88 	ld      r3,136(r1)
c00000000007d270:	40 9e 00 e0 	bne-    cr7,c00000000007d350 <.restart_spus+0x1a0>

c00000000007d274:	3d 22 00 0f 	addis   r9,r2,15
c00000000007d278:	39 40 00 01 	li      r10,1
c00000000007d27c:	39 29 3e 10 	addi    r9,r9,15888
c00000000007d280:	91 49 20 c0 	stw     r10,8384(r9)
c00000000007d284:	7c 00 04 ac 	sync    
c00000000007d288:	4c 00 01 2c 	isync
c00000000007d28c:	3d 02 00 0f 	addis   r8,r2,15
c00000000007d290:	e9 41 00 80 	ld      r10,128(r1)
c00000000007d294:	39 28 f5 e8 	addi    r9,r8,-2584
c00000000007d298:	eb ea 00 00 	ld      r31,0(r10)
c00000000007d29c:	e8 8a 00 08 	ld      r4,8(r10)
c00000000007d2a0:	e9 29 00 00 	ld      r9,0(r9)
c00000000007d2a4:	7f e3 fb 78 	mr      r3,r31
c00000000007d2a8:	e9 29 00 58 	ld      r9,88(r9)
c00000000007d2ac:	e9 49 00 00 	ld      r10,0(r9)
c00000000007d2b0:	f8 41 00 28 	std     r2,40(r1)
c00000000007d2b4:	7d 49 03 a6 	mtctr   r10
c00000000007d2b8:	e8 49 00 08 	ld      r2,8(r9)
c00000000007d2bc:	4e 80 04 21 	bctrl
c00000000007d2c0:	e8 41 00 28 	ld      r2,40(r1)
c00000000007d2c4:	e9 01 00 80 	ld      r8,128(r1)
c00000000007d2c8:	e9 3f 00 20 	ld      r9,32(r31)
c00000000007d2cc:	81 48 00 10 	lwz     r10,16(r8)
c00000000007d2d0:	7c 00 04 ac 	sync    
c00000000007d2d4:	91 49 40 1c 	stw     r10,16412(r9)
c00000000007d2d8:	39 20 00 01 	li      r9,1
c00000000007d2dc:	99 2d 02 74 	stb     r9,628(r13)
c00000000007d2e0:	7c 00 04 ac 	sync    
c00000000007d2e4:	4c 00 01 2c 	isync
c00000000007d2e8:	38 60 00 c8 	li      r3,200
c00000000007d2ec:	4b f9 ff c5 	bl      c00000000001d2b0 <.__delay>
c00000000007d2f0:	60 00 00 00 	nop
c00000000007d2f4:	e8 61 00 98 	ld      r3,152(r1)
c00000000007d2f8:	e8 81 00 78 	ld      r4,120(r1)
c00000000007d2fc:	48 00 65 45 	bl      c000000000083840 <.xmon_printf>
c00000000007d300:	60 00 00 00 	nop
/*		} */

/*	for (i = 0; i < XMON_NUM_SPUS; i++) { */
c00000000007d304:	e9 01 00 78 	ld      r8,120(r1)
c00000000007d308:	3d 22 00 0f 	addis   r9,r2,15
c00000000007d30c:	39 40 00 00 	li      r10,0
c00000000007d310:	39 29 3e 10 	addi    r9,r9,15888
c00000000007d314:	91 49 20 c0 	stw     r10,8384(r9)		; catch_memory_errors = 0;
c00000000007d318:	39 28 00 01 	addi    r9,r8,1
c00000000007d31c:	2f 89 00 10 	cmpwi   cr7,r9,16		; i < XMON_NUM_SPUS
c00000000007d320:	7d 29 07 b4 	extsw   r9,r9
c00000000007d324:	f9 21 00 78 	std     r9,120(r1)		; i++;
c00000000007d328:	e9 21 00 70 	ld      r9,112(r1)
c00000000007d32c:	39 29 00 28 	addi    r9,r9,40		; [i] for spu_info
c00000000007d330:	f9 21 00 70 	std     r9,112(r1)
c00000000007d334:	40 9e fe fc 	bne+    cr7,c00000000007d230 <.restart_spus+0x80>

/* 	} */
c00000000007d338:	38 21 00 b0 	addi    r1,r1,176
c00000000007d33c:	e8 01 00 10 	ld      r0,16(r1)
c00000000007d340:	eb e1 ff f8 	ld      r31,-8(r1)
c00000000007d344:	7c 08 03 a6 	mtlr    r0
c00000000007d348:	4e 80 00 20 	blr
c00000000007d34c:	60 00 00 00 	nop
/* } */

/*		} else { */
c00000000007d350:	3d 42 00 0f 	addis   r10,r2,15
c00000000007d354:	39 00 00 00 	li      r8,0
c00000000007d358:	39 4a 3e 10 	addi    r10,r10,15888
c00000000007d35c:	91 0a 20 c0 	stw     r8,8384(r10)		; catch_memory_errors = 0;
c00000000007d360:	48 00 64 e1 	bl      c000000000083840 <.xmon_printf>
c00000000007d364:	60 00 00 00 	nop
c00000000007d368:	4b ff ff 9c 	b       c00000000007d304 <.restart_spus+0x154>
c00000000007d36c:	60 00 00 00 	nop



>>> arch/powerpc/xmon/xmon.c:352:48: warning: argument ‘fromipi’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
>>
>> This one I can't see, but I assume it's a similar case.
>>
> 
> OK, I should continue for it.
> 
> 
>>> Excuse me, I am not quite sure about it whether can cause issue or not.
>>
>> I've never seen it get stuck in those loops or anything, but I guess
>> it's possible.
>>
> 
> OK, I should make the confirmation.
> 
>> The first thing to do would be to analyse the generated assembler code
>> to determine if there really is any possiblity of the value being
>> clobbered, or if it's just a theoretical bug.
>>
> 
> Thank you for your valuable information again.
> 
> Excuse me, I have to do another things within this month, so I should
> provide the confirmation within next month (2013-08-31), is it OK (no
> reply means OK).
> 
> Welcome any suggestions or completions.
> 
> 
> Thanks.
> 


-- 
Chen Gang

^ permalink raw reply

* Re: [RFC PATCH 4/5] cpuidle/ppc: CPU goes tickless if there are no arch-specific constraints
From: Preeti U Murthy @ 2013-07-26  4:11 UTC (permalink / raw)
  To: Frederic Weisbecker
  Cc: deepthi, shangw, arnd, linux-pm, geoff, linux-kernel, rostedt,
	rjw, paul.gortmaker, paulus, srivatsa.bhat, schwidefsky,
	john.stultz, tglx, paulmck, linuxppc-dev, chenhui.zhao
In-Reply-To: <51F1E15B.3050106@linux.vnet.ibm.com>

Hi Frederic,

I apologise for the confusion. As Paul pointed out maybe the usage of
the term lapic is causing a large amount of confusion. So please see the
clarification below. Maybe it will help answer your question.

On 07/26/2013 08:09 AM, Preeti U Murthy wrote:
> Hi Frederic,
> 
> On 07/25/2013 07:00 PM, Frederic Weisbecker wrote:
>> On Thu, Jul 25, 2013 at 02:33:02PM +0530, Preeti U Murthy wrote:
>>> In the current design of timer offload framework, the broadcast cpu should
>>> *not* go into tickless idle so as to avoid missed wakeups on CPUs in deep idle states.
>>>
>>> Since we prevent the CPUs entering deep idle states from programming the lapic of the
>>> broadcast cpu for their respective next local events for reasons mentioned in
>>> PATCH[3/5], the broadcast CPU checks if there are any CPUs to be woken up during
>>> each of its timer interrupt programmed to its local events.
>>>
>>> With tickless idle, the broadcast CPU might not get a timer interrupt till after
>>> many ticks which can result in missed wakeups on CPUs in deep idle states. By
>>> disabling tickless idle, worst case, the tick_sched hrtimer will trigger a
>>> timer interrupt every period to check for broadcast.
>>>
>>> However the current setup of tickless idle does not let us make the choice
>>> of tickless on individual cpus. NOHZ_MODE_INACTIVE which disables tickless idle,
>>> is a system wide setting. Hence resort to an arch specific call to check if a cpu
>>> can go into tickless idle.
>>
>> Hi Preeti,
>>
>> I'm not exactly sure why you can't enter the broadcast CPU in dynticks idle mode.
>> I read in the previous patch that's because in dynticks idle mode the broadcast
>> CPU deactivates its lapic so it doesn't receive the IPI. But may be I misunderstood.
>> Anyway that's not good for powersaving.

Firstly, when CPUs enter deep idle states, their local clock event
devices get switched off. In the case of powerpc, local clock event
device is the decrementer. Hence such CPUs *do not get timer interrupts*
but are still *capable of taking IPIs.*

So we need to ensure that some other CPU, in this case the broadcast
CPU, makes note of when the timer interrupt of the CPU in such deep idle
states is to trigger and at that moment issue an IPI to that CPU.

*The broadcast CPU however should have its decrementer active always*,
meaning it is disallowed from entering deep idle states, where the
decrementer switches off, precisely because the other idling CPUs bank
on it for the above mentioned reason.

> *The lapic of a broadcast CPU is active always*. Say CPUX, wants the
> broadcast CPU to wake it up at timeX.  Since we cannot program the lapic
> of a remote CPU, CPUX will need to send an IPI to the broadcast CPU,
> asking it to program its lapic to fire at timeX so as to wake up CPUX.
> *With multiple CPUs the overhead of sending IPI, could result in
> performance bottlenecks and may not scale well.*

Rewording the above. The decrementer of the broadcast CPU is active
always. Since we cannot program the clock event device
of a remote CPU, CPUX will need to send an IPI to the broadcast CPU,
(which the broadcast CPU is very well capable of receiving), asking it
to program its decrementer to fire at timeX so as to wake up CPUX
*With multiple CPUs the overhead of sending IPI, could result in
performance bottlenecks and may not scale well.*

> 
> Hence the workaround is that the broadcast CPU on each of its timer
> interrupt checks if any of the next timer event of a CPU in deep idle
> state has expired, which can very well be found from dev->next_event of
> that CPU. For example the timeX that has been mentioned above has
> expired. If so the broadcast handler is called to send an IPI to the
> idling CPU to wake it up.
> 
> *If the broadcast CPU, is in tickless idle, its timer interrupt could be
> many ticks away. It could miss waking up a CPU in deep idle*, if its
> wakeup is much before this timer interrupt of the broadcast CPU. But
> without tickless idle, atleast at each period we are assured of a timer
> interrupt. At which time broadcast handling is done as stated in the
> previous paragraph and we will not miss wakeup of CPUs in deep idle states.
> 
> Yeah it is true that not allowing the broadcast CPU to enter tickless
> idle is bad for power savings, but for the use case that we are aiming
> at in this patch series, the current approach seems to be the best, with
> minimal trade-offs in performance, power savings, scalability and no
> change in the broadcast framework that exists today in the kernel.
> 

Regards
Preeti U Murthy

^ permalink raw reply

* Re: SIGSTKSZ/MINSIGSTKSZ too small on 64bit
From: Alan Modra @ 2013-07-26  5:05 UTC (permalink / raw)
  To: Anton Blanchard; +Cc: Michael Neuling, linuxppc-dev, Ryan Arnold
In-Reply-To: <20130726122325.10b900e4@kryten>

On Fri, Jul 26, 2013 at 12:23:25PM +1000, Anton Blanchard wrote:
> 
> Hi,
> 
> Alan has been looking at a glibc test fail. His analysis shows SEGVs
> in signal handlers using sigaltstack, and that MINSIGSTKSZ and SIGSTKSZ
> are too small.
> 
> We increased the size of rt_sigframe in commit 2b0a576d15e0
> (powerpc: Add new transactional memory state to the signal context) but
> didn't bump either SIGSTKSZ and MINSIGSTKSZ. We need to do that in both
> the kernel and glibc, but I'm a bit worried we could have broken
> existing applications that use sigaltstack.

Before VSX changes, struct rt_sigframe size was 1920 plus 128 for
__SIGNAL_FRAMESIZE giving ppc64 exactly the default MINSIGSTKSZ of
2048.

After VSX, ucontext increased by 256 bytes.  Oops, we're over
MINSIGSTKSZ.  Add another ucontext for TM and rt_sigframe is now at
3872, giving actual MINSIGSTKSZ of 4000.

The glibc testcase that I was looking at was tst-cancel21, which
allocates 2*SIGSTKSZ (not because the test is trying to be
conservative, but because the test actually has nested signal stack
frames).  We blew the allocation by 48 bytes when using current
mainline gcc to compile glibc (le ppc64).

The required stack depth in _dl_lookup_symbol_x from the top of the
next signal frame was 10944 bytes.  I guess you'd want to add 288 to
that, implying an actual SIGSTKSZ of 11232.

I think we want
#define MINSIGSTKSZ	4096
#define SIGSTKSZ	16384

							frame size	r1
#0  0x00000000295cdaec in _dl_lookup_symbol_x(memset)	190
#1  0x00000000295d3c4c in _dl_fixup()			 b0	10003310160
#2  0x00000000295dc818 in _dl_runtime_resolve()		 b0	10003310210
#3  0x00001fffff59ea8c in uw_init_context_1()		a30	100033102c0
#4  0x00001fffff59f560 in libc:_Unwind_ForcedUnwind()	c90	10003310cf0
#5  0x00001ffffffb9538 in pt:_Unwind_ForcedUnwind()	 90	10003311980
#6  0x00001ffffffb6418 in __pthread_unwind()		 70	10003311a10
#7  0x00001ffffffaaeb0 in sigcancel_handler()		 70	10003311a80
#8  <signal handler called> 1ffffffe0448 tramp		fa0	10003311af0
			10003311b70 rt_sigframe
			  10003311c58 sigcontext.gp_regs
			  10003311dd8 sigcontext.fp_regs
			  10003311ee0 sigcontext.v_regs
			  10003311ef0 sigcontext.vmx
			100033128d8 rt_sigframe.pinfo  offset d68
			10003312968 rt_sigframe.abigap
			10003312a88 end + 8 alignment
#9  0x00001ffffffb6f9c in 				 80	10003312a90
#10 0x00001ffffffb6f84 in 					10003312b10
#11 0x00000000100020f4 in delete_temp_files()		 80	10003312dc0
#12 0x0000000010002198 in 				 	10003313070
#13 <signal handler called>
#14 0x00001ffffffb6f9c in ?? ()
#15 0x00001ffffffb6f84 in ?? ()
#16 0x0000000010002274 in ?? ()
#17 0x0000000010002430 in ?? ()
#18 0x0000000010002644 in ?? ()
#19 0x0000000010001a1c in ?? ()
#20 0x00001fffffe17f0c in ?? ()
#21 0x00001fffffe18134 in ?? ()
#22 0x0000000000000000 in ?? ()


-- 
Alan Modra
Australia Development Lab, IBM

^ permalink raw reply

* [Resend RFC PATCH 0/5] cpuidle/ppc: Timer offload framework to support deep idle states
From: Preeti U Murthy @ 2013-07-26  5:13 UTC (permalink / raw)
  To: benh, paul.gortmaker, paulus, shangw, galak, fweisbec, paulmck,
	michael, arnd, linux-pm, rostedt, rjw, john.stultz, tglx,
	chenhui.zhao, deepthi, geoff, linux-kernel, srivatsa.bhat,
	schwidefsky, svaidy, linuxppc-dev

On PowerPC, when CPUs enter deep idle states, their local timers are
switched off. The responsibility of waking them up at their next timer event,
needs to be handed over to an external device. On PowerPC, we do not have an
external device equivalent to HPET, which is currently done on architectures
like x86. Instead we assign the local timer of one of the CPUs to do this
job.

This patchset is an attempt to make use of the existing timer broadcast
framework in the kernel to meet the above requirement, except that the tick
broadcast device is the local timer of the boot CPU.

This patch series is ported ontop of 3.11-rc1 + the cpuidle driver backend
for powernv posted by Deepthi Dharwar recently. The current design and
implementation supports the ONESHOT tick mode. It does not yet support
the PERIODIC tick mode. This patch is tested with NOHZ_FULL off.

Patch[1/5], Patch[2/5]: optimize the broadcast mechanism on ppc.
Patch[3/5]: Introduces the core of the timer offload framework on powerpc.
Patch[4/5]: The cpu doing the broadcast should not go into tickless idle.
Patch[5/5]: Add a deep idle state to the cpuidle state table on powernv.

Patch[5/5] is the patch that ultimately makes use of the timer offload
framework that the patches Patch[1/5] to Patch[4/5] build.

This patch series is being resent to clarify certain ambiguity in the patch
descriptions from the previous post. Discussion around this:
https://lkml.org/lkml/2013/7/25/754

---

Preeti U Murthy (3):
      cpuidle/ppc: Add timer offload framework to support deep idle states
      cpuidle/ppc: CPU goes tickless if there are no arch-specific constraints
      cpuidle/ppc: Add longnap state to the idle states on powernv

Srivatsa S. Bhat (2):
      powerpc: Free up the IPI message slot of ipi call function (PPC_MSG_CALL_FUNC)
      powerpc: Implement broadcast timer interrupt as an IPI message


 arch/powerpc/include/asm/smp.h                  |    3 +
 arch/powerpc/include/asm/time.h                 |    3 +
 arch/powerpc/kernel/smp.c                       |   23 ++++--
 arch/powerpc/kernel/time.c                      |   86 +++++++++++++++++++++++
 arch/powerpc/platforms/cell/interrupt.c         |    2 -
 arch/powerpc/platforms/powernv/Kconfig          |    1 
 arch/powerpc/platforms/powernv/processor_idle.c |   48 +++++++++++++
 arch/powerpc/platforms/ps3/smp.c                |    2 -
 kernel/time/tick-sched.c                        |    7 ++
 9 files changed, 163 insertions(+), 12 deletions(-)

^ permalink raw reply

* [Resend RFC PATCH 2/5] powerpc: Implement broadcast timer interrupt as an IPI message
From: Preeti U Murthy @ 2013-07-26  5:16 UTC (permalink / raw)
  To: benh, paul.gortmaker, paulus, shangw, galak, fweisbec, paulmck,
	michael, arnd, linux-pm, rostedt, rjw, john.stultz, tglx,
	chenhui.zhao, deepthi, geoff, linux-kernel, srivatsa.bhat,
	schwidefsky, svaidy, linuxppc-dev
In-Reply-To: <20130726050915.17167.16298.stgit@preeti>

From: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>

For scalability and performance reasons, we want the broadcast timer
interrupts to be handled as efficiently as possible. Fixed IPI messages
are one of the most efficient mechanisms available - they are faster
than the smp_call_function mechanism because the IPI handlers are fixed
and hence they don't involve costly operations such as adding IPI handlers
to the target CPU's function queue, acquiring locks for synchronization etc.

Luckily we have an unused IPI message slot, so use that to implement
broadcast timer interrupts efficiently.

Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Signed-off-by: Preeti U Murthy <preeti@linux.vnet.ibm.com>
---

 arch/powerpc/include/asm/smp.h          |    3 ++-
 arch/powerpc/kernel/smp.c               |   19 +++++++++++++++----
 arch/powerpc/platforms/cell/interrupt.c |    2 +-
 arch/powerpc/platforms/ps3/smp.c        |    2 +-
 4 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/arch/powerpc/include/asm/smp.h b/arch/powerpc/include/asm/smp.h
index 51bf017..d877b69 100644
--- a/arch/powerpc/include/asm/smp.h
+++ b/arch/powerpc/include/asm/smp.h
@@ -117,7 +117,7 @@ extern int cpu_to_core_id(int cpu);
  *
  * Make sure this matches openpic_request_IPIs in open_pic.c, or what shows up
  * in /proc/interrupts will be wrong!!! --Troy */
-#define PPC_MSG_UNUSED		0
+#define PPC_MSG_TIMER		0
 #define PPC_MSG_RESCHEDULE      1
 #define PPC_MSG_CALL_FUNC_SINGLE	2
 #define PPC_MSG_DEBUGGER_BREAK  3
@@ -190,6 +190,7 @@ extern struct smp_ops_t *smp_ops;
 
 extern void arch_send_call_function_single_ipi(int cpu);
 extern void arch_send_call_function_ipi_mask(const struct cpumask *mask);
+extern void arch_send_tick_broadcast(const struct cpumask *mask);
 
 /* Definitions relative to the secondary CPU spin loop
  * and entry point. Not all of them exist on both 32 and
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index bc41e9f..6a68ca4 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -35,6 +35,7 @@
 #include <asm/ptrace.h>
 #include <linux/atomic.h>
 #include <asm/irq.h>
+#include <asm/hw_irq.h>
 #include <asm/page.h>
 #include <asm/pgtable.h>
 #include <asm/prom.h>
@@ -111,9 +112,9 @@ int smp_generic_kick_cpu(int nr)
 }
 #endif /* CONFIG_PPC64 */
 
-static irqreturn_t unused_action(int irq, void *data)
+static irqreturn_t timer_action(int irq, void *data)
 {
-	/* This slot is unused and hence available for use, if needed */
+	timer_interrupt();
 	return IRQ_HANDLED;
 }
 
@@ -144,14 +145,14 @@ static irqreturn_t debug_ipi_action(int irq, void *data)
 }
 
 static irq_handler_t smp_ipi_action[] = {
-	[PPC_MSG_UNUSED] =  unused_action, /* Slot available for future use */
+	[PPC_MSG_TIMER] =  timer_action,
 	[PPC_MSG_RESCHEDULE] = reschedule_action,
 	[PPC_MSG_CALL_FUNC_SINGLE] = call_function_single_action,
 	[PPC_MSG_DEBUGGER_BREAK] = debug_ipi_action,
 };
 
 const char *smp_ipi_name[] = {
-	[PPC_MSG_UNUSED] =  "ipi unused",
+	[PPC_MSG_TIMER] =  "ipi timer",
 	[PPC_MSG_RESCHEDULE] = "ipi reschedule",
 	[PPC_MSG_CALL_FUNC_SINGLE] = "ipi call function single",
 	[PPC_MSG_DEBUGGER_BREAK] = "ipi debugger",
@@ -221,6 +222,8 @@ irqreturn_t smp_ipi_demux(void)
 		all = xchg(&info->messages, 0);
 
 #ifdef __BIG_ENDIAN
+		if (all & (1 << (24 - 8 * PPC_MSG_TIMER)))
+			timer_interrupt();
 		if (all & (1 << (24 - 8 * PPC_MSG_RESCHEDULE)))
 			scheduler_ipi();
 		if (all & (1 << (24 - 8 * PPC_MSG_CALL_FUNC_SINGLE)))
@@ -266,6 +269,14 @@ void arch_send_call_function_ipi_mask(const struct cpumask *mask)
 		do_message_pass(cpu, PPC_MSG_CALL_FUNC_SINGLE);
 }
 
+void arch_send_tick_broadcast(const struct cpumask *mask)
+{
+	unsigned int cpu;
+
+	for_each_cpu(cpu, mask)
+		do_message_pass(cpu, PPC_MSG_TIMER);
+}
+
 #if defined(CONFIG_DEBUGGER) || defined(CONFIG_KEXEC)
 void smp_send_debugger_break(void)
 {
diff --git a/arch/powerpc/platforms/cell/interrupt.c b/arch/powerpc/platforms/cell/interrupt.c
index 28166e4..1359113 100644
--- a/arch/powerpc/platforms/cell/interrupt.c
+++ b/arch/powerpc/platforms/cell/interrupt.c
@@ -213,7 +213,7 @@ static void iic_request_ipi(int msg)
 
 void iic_request_IPIs(void)
 {
-	iic_request_ipi(PPC_MSG_UNUSED);
+	iic_request_ipi(PPC_MSG_TIMER);
 	iic_request_ipi(PPC_MSG_RESCHEDULE);
 	iic_request_ipi(PPC_MSG_CALL_FUNC_SINGLE);
 	iic_request_ipi(PPC_MSG_DEBUGGER_BREAK);
diff --git a/arch/powerpc/platforms/ps3/smp.c b/arch/powerpc/platforms/ps3/smp.c
index 488f069..5cb742a 100644
--- a/arch/powerpc/platforms/ps3/smp.c
+++ b/arch/powerpc/platforms/ps3/smp.c
@@ -74,7 +74,7 @@ static int __init ps3_smp_probe(void)
 		* to index needs to be setup.
 		*/
 
-		BUILD_BUG_ON(PPC_MSG_UNUSED	      != 0);
+		BUILD_BUG_ON(PPC_MSG_TIMER	      != 0);
 		BUILD_BUG_ON(PPC_MSG_RESCHEDULE       != 1);
 		BUILD_BUG_ON(PPC_MSG_CALL_FUNC_SINGLE != 2);
 		BUILD_BUG_ON(PPC_MSG_DEBUGGER_BREAK   != 3);

^ permalink raw reply related

* [Resend RFC PATCH 3/5] cpuidle/ppc: Add timer offload framework to support deep idle states
From: Preeti U Murthy @ 2013-07-26  5:17 UTC (permalink / raw)
  To: benh, paul.gortmaker, paulus, shangw, galak, fweisbec, paulmck,
	michael, arnd, linux-pm, rostedt, rjw, john.stultz, tglx,
	chenhui.zhao, deepthi, geoff, linux-kernel, srivatsa.bhat,
	schwidefsky, svaidy, linuxppc-dev
In-Reply-To: <20130726050915.17167.16298.stgit@preeti>

On ppc, in deep idle states, the local clock event device of CPUs gets
switched off. On PowerPC, the local clock event device is called the
decrementer. Make use of the broadcast framework to issue interrupts to
cpus in deep idle states on their timer events, except that on ppc, we
do not have an external device such as HPET, but we use the decrementer
of one of the CPUs itself as the broadcast device.

Instantiate two different clock event devices, one representing the
decrementer and another representing the broadcast device for each cpu.
The cpu which registers its broadcast device will be responsible for
performing the function of issuing timer interrupts to CPUs in deep idle
states, and is referred to as the broadcast cpu in the changelogs of this
patchset for convenience. Such a CPU is not allowed to enter deep idle
states, where the decrementer is switched off.

For now, only the boot cpu's broadcast device gets registered as a clock event
device along with the decrementer. Hence this is the broadcast cpu.

On the broadcast cpu, on each timer interrupt, apart from the regular local
timer event handler the broadcast handler is also called. We avoid the overhead
of programming the decrementer specifically for a broadcast event. The reason is for
performance and scalability reasons. Say cpuX goes to deep idle state. It
has to ask the broadcast CPU to reprogram its(broadcast CPU's) decrementer for
the next local timer event of cpuX. cpuX can do so only by sending an IPI to the
broadcast CPU. With many more cpus going to deep idle, this model of sending
IPIs each time will result in performance bottleneck and may not scale well.

Apart from this there is no change in the way broadcast is handled today. On
a broadcast ipi the event handler for a timer interrupt is called on the cpu
in deep idle state to handle the local events.

The current design and implementation of the timer offload framework supports
the ONESHOT tick mode but not the PERIODIC mode.

Signed-off-by: Preeti U. Murthy <preeti@linux.vnet.ibm.com>
---

 arch/powerpc/include/asm/time.h        |    3 +
 arch/powerpc/kernel/smp.c              |    4 +-
 arch/powerpc/kernel/time.c             |   81 ++++++++++++++++++++++++++++++++
 arch/powerpc/platforms/powernv/Kconfig |    1 
 4 files changed, 86 insertions(+), 3 deletions(-)

diff --git a/arch/powerpc/include/asm/time.h b/arch/powerpc/include/asm/time.h
index c1f2676..936be0d 100644
--- a/arch/powerpc/include/asm/time.h
+++ b/arch/powerpc/include/asm/time.h
@@ -24,14 +24,17 @@ extern unsigned long tb_ticks_per_jiffy;
 extern unsigned long tb_ticks_per_usec;
 extern unsigned long tb_ticks_per_sec;
 extern struct clock_event_device decrementer_clockevent;
+extern struct clock_event_device broadcast_clockevent;
 
 struct rtc_time;
 extern void to_tm(int tim, struct rtc_time * tm);
 extern void GregorianDay(struct rtc_time *tm);
+extern void decrementer_timer_interrupt(void);
 
 extern void generic_calibrate_decr(void);
 
 extern void set_dec_cpu6(unsigned int val);
+extern int bc_cpu;
 
 /* Some sane defaults: 125 MHz timebase, 1GHz processor */
 extern unsigned long ppc_proc_freq;
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index 6a68ca4..d3b7014 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -114,7 +114,7 @@ int smp_generic_kick_cpu(int nr)
 
 static irqreturn_t timer_action(int irq, void *data)
 {
-	timer_interrupt();
+	decrementer_timer_interrupt();
 	return IRQ_HANDLED;
 }
 
@@ -223,7 +223,7 @@ irqreturn_t smp_ipi_demux(void)
 
 #ifdef __BIG_ENDIAN
 		if (all & (1 << (24 - 8 * PPC_MSG_TIMER)))
-			timer_interrupt();
+			decrementer_timer_interrupt();
 		if (all & (1 << (24 - 8 * PPC_MSG_RESCHEDULE)))
 			scheduler_ipi();
 		if (all & (1 << (24 - 8 * PPC_MSG_CALL_FUNC_SINGLE)))
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c
index 65ab9e9..7e858e1 100644
--- a/arch/powerpc/kernel/time.c
+++ b/arch/powerpc/kernel/time.c
@@ -42,6 +42,7 @@
 #include <linux/timex.h>
 #include <linux/kernel_stat.h>
 #include <linux/time.h>
+#include <linux/timer.h>
 #include <linux/init.h>
 #include <linux/profile.h>
 #include <linux/cpu.h>
@@ -97,8 +98,11 @@ static struct clocksource clocksource_timebase = {
 
 static int decrementer_set_next_event(unsigned long evt,
 				      struct clock_event_device *dev);
+static int broadcast_set_next_event(unsigned long evt,
+				      struct clock_event_device *dev);
 static void decrementer_set_mode(enum clock_event_mode mode,
 				 struct clock_event_device *dev);
+static void decrementer_timer_broadcast(const struct cpumask *mask);
 
 struct clock_event_device decrementer_clockevent = {
 	.name           = "decrementer",
@@ -106,13 +110,26 @@ struct clock_event_device decrementer_clockevent = {
 	.irq            = 0,
 	.set_next_event = decrementer_set_next_event,
 	.set_mode       = decrementer_set_mode,
-	.features       = CLOCK_EVT_FEAT_ONESHOT,
+	.broadcast	= decrementer_timer_broadcast,
+	.features       = CLOCK_EVT_FEAT_C3STOP | CLOCK_EVT_FEAT_ONESHOT,
 };
 EXPORT_SYMBOL(decrementer_clockevent);
 
+struct clock_event_device broadcast_clockevent = {
+	.name           = "broadcast",
+	.rating         = 200,
+	.irq            = 0,
+	.set_next_event = broadcast_set_next_event,
+	.set_mode       = decrementer_set_mode,
+	.features       = CLOCK_EVT_FEAT_ONESHOT,
+};
+EXPORT_SYMBOL(broadcast_clockevent);
+
 DEFINE_PER_CPU(u64, decrementers_next_tb);
 static DEFINE_PER_CPU(struct clock_event_device, decrementers);
+static DEFINE_PER_CPU(struct clock_event_device, bc_timer);
 
+int bc_cpu;
 #define XSEC_PER_SEC (1024*1024)
 
 #ifdef CONFIG_PPC64
@@ -487,6 +504,8 @@ void timer_interrupt(struct pt_regs * regs)
 	struct pt_regs *old_regs;
 	u64 *next_tb = &__get_cpu_var(decrementers_next_tb);
 	struct clock_event_device *evt = &__get_cpu_var(decrementers);
+	struct clock_event_device *bc_evt = &__get_cpu_var(bc_timer);
+	int cpu = smp_processor_id();
 	u64 now;
 
 	/* Ensure a positive value is written to the decrementer, or else
@@ -532,6 +551,10 @@ void timer_interrupt(struct pt_regs * regs)
 		*next_tb = ~(u64)0;
 		if (evt->event_handler)
 			evt->event_handler(evt);
+		if (cpu == bc_cpu && bc_evt->event_handler) {
+			bc_evt->event_handler(bc_evt);
+		}
+
 	} else {
 		now = *next_tb - now;
 		if (now <= DECREMENTER_MAX)
@@ -806,6 +829,20 @@ static int decrementer_set_next_event(unsigned long evt,
 	return 0;
 }
 
+/*
+ * We cannot program the decrementer of a remote CPU. Hence CPUs going into
+ * deep idle states need to send IPIs to the broadcast CPU to program its
+ * decrementer for their next local event so as to receive a broadcast IPI
+ * for the same. In order to avoid the overhead of multiple CPUs from sending
+ * IPIs, this function is a nop. Instead the broadcast CPU will handle the
+ * wakeup of CPUs in deep idle states in each of its local timer interrupts.
+ */
+static int broadcast_set_next_event(unsigned long evt,
+					struct clock_event_device *dev)
+{
+	return 0;
+}
+
 static void decrementer_set_mode(enum clock_event_mode mode,
 				 struct clock_event_device *dev)
 {
@@ -813,6 +850,20 @@ static void decrementer_set_mode(enum clock_event_mode mode,
 		decrementer_set_next_event(DECREMENTER_MAX, dev);
 }
 
+void decrementer_timer_interrupt(void)
+{
+	struct clock_event_device *evt;
+	evt = &per_cpu(decrementers, smp_processor_id());
+
+	if (evt->event_handler)
+		evt->event_handler(evt);
+}
+
+static void decrementer_timer_broadcast(const struct cpumask *mask)
+{
+	arch_send_tick_broadcast(mask);
+}
+
 static void register_decrementer_clockevent(int cpu)
 {
 	struct clock_event_device *dec = &per_cpu(decrementers, cpu);
@@ -826,6 +877,20 @@ static void register_decrementer_clockevent(int cpu)
 	clockevents_register_device(dec);
 }
 
+static void register_broadcast_clockevent(int cpu)
+{
+	struct clock_event_device *bc_evt = &per_cpu(bc_timer, cpu);
+
+	*bc_evt = broadcast_clockevent;
+	bc_evt->cpumask = cpumask_of(cpu);
+
+	printk_once(KERN_DEBUG "clockevent: %s mult[%x] shift[%d] cpu[%d]\n",
+		    bc_evt->name, bc_evt->mult, bc_evt->shift, cpu);
+
+	clockevents_register_device(bc_evt);
+	bc_cpu = cpu;
+}
+
 static void __init init_decrementer_clockevent(void)
 {
 	int cpu = smp_processor_id();
@@ -840,6 +905,19 @@ static void __init init_decrementer_clockevent(void)
 	register_decrementer_clockevent(cpu);
 }
 
+static void __init init_broadcast_clockevent(void)
+{
+	int cpu = smp_processor_id();
+
+	clockevents_calc_mult_shift(&broadcast_clockevent, ppc_tb_freq, 4);
+
+	broadcast_clockevent.max_delta_ns =
+		clockevent_delta2ns(DECREMENTER_MAX, &broadcast_clockevent);
+	broadcast_clockevent.min_delta_ns =
+		clockevent_delta2ns(2, &broadcast_clockevent);
+	register_broadcast_clockevent(cpu);
+}
+
 void secondary_cpu_time_init(void)
 {
 	/* Start the decrementer on CPUs that have manual control
@@ -916,6 +994,7 @@ void __init time_init(void)
 	clocksource_init();
 
 	init_decrementer_clockevent();
+	init_broadcast_clockevent();
 }
 
 
diff --git a/arch/powerpc/platforms/powernv/Kconfig b/arch/powerpc/platforms/powernv/Kconfig
index ace2d22..e1a96eb 100644
--- a/arch/powerpc/platforms/powernv/Kconfig
+++ b/arch/powerpc/platforms/powernv/Kconfig
@@ -6,6 +6,7 @@ config PPC_POWERNV
 	select PPC_ICP_NATIVE
 	select PPC_P7_NAP
 	select PPC_PCI_CHOICE if EMBEDDED
+	select GENERIC_CLOCKEVENTS_BROADCAST
 	select EPAPR_BOOT
 	default y
 

^ permalink raw reply related

* [Resend RFC PATCH 5/5] cpuidle/ppc: Add longnap state to the idle states on powernv
From: Preeti U Murthy @ 2013-07-26  5:21 UTC (permalink / raw)
  To: benh, paul.gortmaker, paulus, shangw, galak, fweisbec, paulmck,
	michael, arnd, linux-pm, rostedt, rjw, john.stultz, tglx,
	chenhui.zhao, deepthi, geoff, linux-kernel, srivatsa.bhat,
	schwidefsky, svaidy, linuxppc-dev
In-Reply-To: <20130726050915.17167.16298.stgit@preeti>

This patch hooks into the existing broadcast framework with the support that this
patchset introduces for ppc, and the cpuidle driver backend
for powernv(posted out recently by Deepthi Dharwar) to add sleep state as
one of the deep idle states, in which the decrementer is switched off.

However in this patch, we only emulate sleep by going into a state which does
a nap with the decrementer interrupts disabled, termed as longnap. This enables
focus on the timer broadcast framework for ppc in this series of patches ,
which is required as a first step to enable sleep on ppc.

Signed-off-by: Preeti U Murthy <preeti@linux.vnet.ibm.com>
---

 arch/powerpc/platforms/powernv/processor_idle.c |   48 +++++++++++++++++++++++
 1 file changed, 47 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/platforms/powernv/processor_idle.c b/arch/powerpc/platforms/powernv/processor_idle.c
index f43ad91a..9aca502 100644
--- a/arch/powerpc/platforms/powernv/processor_idle.c
+++ b/arch/powerpc/platforms/powernv/processor_idle.c
@@ -9,16 +9,18 @@
 #include <linux/cpuidle.h>
 #include <linux/cpu.h>
 #include <linux/notifier.h>
+#include <linux/clockchips.h>
 
 #include <asm/machdep.h>
 #include <asm/runlatch.h>
+#include <asm/time.h>
 
 struct cpuidle_driver powernv_idle_driver = {
 	.name =		"powernv_idle",
 	.owner =	THIS_MODULE,
 };
 
-#define MAX_IDLE_STATE_COUNT	2
+#define MAX_IDLE_STATE_COUNT	3
 
 static int max_idle_state = MAX_IDLE_STATE_COUNT - 1;
 static struct cpuidle_device __percpu *powernv_cpuidle_devices;
@@ -54,6 +56,43 @@ static int nap_loop(struct cpuidle_device *dev,
 	return index;
 }
 
+/* Emulate sleep, with long nap.
+ * During sleep, the core does not receive decrementer interrupts.
+ * Emulate sleep using long nap with decrementers interrupts disabled.
+ * This is an initial prototype to test the timer offload framework for ppc.
+ * We will eventually introduce the sleep state once the timer offload framework
+ * for ppc is stable.
+ */
+static int longnap_loop(struct cpuidle_device *dev,
+				struct cpuidle_driver *drv,
+				int index)
+{
+	int cpu = dev->cpu;
+
+	unsigned long lpcr = mfspr(SPRN_LPCR);
+
+	lpcr &= ~(LPCR_MER | LPCR_PECE); /* lpcr[mer] must be 0 */
+
+	/* exit powersave upon external interrupt, but not decrementer
+	 * interrupt, Emulate sleep.
+	 */
+	lpcr |= LPCR_PECE0;
+
+	if (cpu != bc_cpu) {
+		mtspr(SPRN_LPCR, lpcr);
+		clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, &cpu);
+		power7_nap();
+		clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &cpu);
+	} else {
+		/* Wakeup on a decrementer interrupt, Do a nap */
+		lpcr |= LPCR_PECE1;
+		mtspr(SPRN_LPCR, lpcr);
+		power7_nap();
+	}
+
+	return index;
+}
+
 /*
  * States for dedicated partition case.
  */
@@ -72,6 +111,13 @@ static struct cpuidle_state powernv_states[MAX_IDLE_STATE_COUNT] = {
 		.exit_latency = 10,
 		.target_residency = 100,
 		.enter = &nap_loop },
+	 { /* LongNap */
+		.name = "LongNap",
+		.desc = "LongNap",
+		.flags = CPUIDLE_FLAG_TIME_VALID,
+		.exit_latency = 10,
+		.target_residency = 100,
+		.enter = &longnap_loop },
 };
 
 static int powernv_cpuidle_add_cpu_notifier(struct notifier_block *n,

^ permalink raw reply related

* [Resend RFC PATCH 1/5] powerpc: Free up the IPI message slot of ipi call function (PPC_MSG_CALL_FUNC)
From: Preeti U Murthy @ 2013-07-26  5:15 UTC (permalink / raw)
  To: benh, paul.gortmaker, paulus, shangw, galak, fweisbec, paulmck,
	michael, arnd, linux-pm, rostedt, rjw, john.stultz, tglx,
	chenhui.zhao, deepthi, geoff, linux-kernel, srivatsa.bhat,
	schwidefsky, svaidy, linuxppc-dev
In-Reply-To: <20130726050915.17167.16298.stgit@preeti>

From: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>

The IPI handlers for both PPC_MSG_CALL_FUNC and PPC_MSG_CALL_FUNC_SINGLE
map to a common implementation - generic_smp_call_function_single_interrupt().
So, we can consolidate them and save one of the IPI message slots, (which are
precious, since only 4 of those slots are available).

So, implement the functionality of PPC_MSG_CALL_FUNC using
PPC_MSG_CALL_FUNC_SINGLE itself and release its IPI message slot, so that it
can be used for something else in the future, if desired.

Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Signed-off-by: Preeti U Murthy <preeti@linux.vnet.ibm.com>
---

 arch/powerpc/include/asm/smp.h          |    2 +-
 arch/powerpc/kernel/smp.c               |   12 +++++-------
 arch/powerpc/platforms/cell/interrupt.c |    2 +-
 arch/powerpc/platforms/ps3/smp.c        |    2 +-
 4 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/arch/powerpc/include/asm/smp.h b/arch/powerpc/include/asm/smp.h
index ffbaabe..51bf017 100644
--- a/arch/powerpc/include/asm/smp.h
+++ b/arch/powerpc/include/asm/smp.h
@@ -117,7 +117,7 @@ extern int cpu_to_core_id(int cpu);
  *
  * Make sure this matches openpic_request_IPIs in open_pic.c, or what shows up
  * in /proc/interrupts will be wrong!!! --Troy */
-#define PPC_MSG_CALL_FUNCTION   0
+#define PPC_MSG_UNUSED		0
 #define PPC_MSG_RESCHEDULE      1
 #define PPC_MSG_CALL_FUNC_SINGLE	2
 #define PPC_MSG_DEBUGGER_BREAK  3
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index 38b0ba6..bc41e9f 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -111,9 +111,9 @@ int smp_generic_kick_cpu(int nr)
 }
 #endif /* CONFIG_PPC64 */
 
-static irqreturn_t call_function_action(int irq, void *data)
+static irqreturn_t unused_action(int irq, void *data)
 {
-	generic_smp_call_function_interrupt();
+	/* This slot is unused and hence available for use, if needed */
 	return IRQ_HANDLED;
 }
 
@@ -144,14 +144,14 @@ static irqreturn_t debug_ipi_action(int irq, void *data)
 }
 
 static irq_handler_t smp_ipi_action[] = {
-	[PPC_MSG_CALL_FUNCTION] =  call_function_action,
+	[PPC_MSG_UNUSED] =  unused_action, /* Slot available for future use */
 	[PPC_MSG_RESCHEDULE] = reschedule_action,
 	[PPC_MSG_CALL_FUNC_SINGLE] = call_function_single_action,
 	[PPC_MSG_DEBUGGER_BREAK] = debug_ipi_action,
 };
 
 const char *smp_ipi_name[] = {
-	[PPC_MSG_CALL_FUNCTION] =  "ipi call function",
+	[PPC_MSG_UNUSED] =  "ipi unused",
 	[PPC_MSG_RESCHEDULE] = "ipi reschedule",
 	[PPC_MSG_CALL_FUNC_SINGLE] = "ipi call function single",
 	[PPC_MSG_DEBUGGER_BREAK] = "ipi debugger",
@@ -221,8 +221,6 @@ irqreturn_t smp_ipi_demux(void)
 		all = xchg(&info->messages, 0);
 
 #ifdef __BIG_ENDIAN
-		if (all & (1 << (24 - 8 * PPC_MSG_CALL_FUNCTION)))
-			generic_smp_call_function_interrupt();
 		if (all & (1 << (24 - 8 * PPC_MSG_RESCHEDULE)))
 			scheduler_ipi();
 		if (all & (1 << (24 - 8 * PPC_MSG_CALL_FUNC_SINGLE)))
@@ -265,7 +263,7 @@ void arch_send_call_function_ipi_mask(const struct cpumask *mask)
 	unsigned int cpu;
 
 	for_each_cpu(cpu, mask)
-		do_message_pass(cpu, PPC_MSG_CALL_FUNCTION);
+		do_message_pass(cpu, PPC_MSG_CALL_FUNC_SINGLE);
 }
 
 #if defined(CONFIG_DEBUGGER) || defined(CONFIG_KEXEC)
diff --git a/arch/powerpc/platforms/cell/interrupt.c b/arch/powerpc/platforms/cell/interrupt.c
index 2d42f3b..28166e4 100644
--- a/arch/powerpc/platforms/cell/interrupt.c
+++ b/arch/powerpc/platforms/cell/interrupt.c
@@ -213,7 +213,7 @@ static void iic_request_ipi(int msg)
 
 void iic_request_IPIs(void)
 {
-	iic_request_ipi(PPC_MSG_CALL_FUNCTION);
+	iic_request_ipi(PPC_MSG_UNUSED);
 	iic_request_ipi(PPC_MSG_RESCHEDULE);
 	iic_request_ipi(PPC_MSG_CALL_FUNC_SINGLE);
 	iic_request_ipi(PPC_MSG_DEBUGGER_BREAK);
diff --git a/arch/powerpc/platforms/ps3/smp.c b/arch/powerpc/platforms/ps3/smp.c
index 4b35166..488f069 100644
--- a/arch/powerpc/platforms/ps3/smp.c
+++ b/arch/powerpc/platforms/ps3/smp.c
@@ -74,7 +74,7 @@ static int __init ps3_smp_probe(void)
 		* to index needs to be setup.
 		*/
 
-		BUILD_BUG_ON(PPC_MSG_CALL_FUNCTION    != 0);
+		BUILD_BUG_ON(PPC_MSG_UNUSED	      != 0);
 		BUILD_BUG_ON(PPC_MSG_RESCHEDULE       != 1);
 		BUILD_BUG_ON(PPC_MSG_CALL_FUNC_SINGLE != 2);
 		BUILD_BUG_ON(PPC_MSG_DEBUGGER_BREAK   != 3);

^ permalink raw reply related

* Re: [V2 2/2] powerpc/512x: add LocalPlus Bus FIFO device driver
From: Alexander Popov @ 2013-07-26  5:31 UTC (permalink / raw)
  To: Alexander Popov, Benjamin Herrenschmidt, Paul Mackerras,
	Anatolij Gustschin, Grant Likely, Rob Herring, Chris Ball,
	Sascha Hauer, Timur Tabi, linuxppc-dev, linux-kernel
In-Reply-To: <20130717090310.GI7080@book.gsilab.sittig.org>

Thanks, Gerhard.

I'll improve the code and return with the third version.

Best regards,
Alexander.

^ permalink raw reply

* [Resend RFC PATCH 4/5] cpuidle/ppc: CPU goes tickless if there are no arch-specific constraints
From: Preeti U Murthy @ 2013-07-26  5:19 UTC (permalink / raw)
  To: benh, paul.gortmaker, paulus, shangw, galak, fweisbec, paulmck,
	michael, arnd, linux-pm, rostedt, rjw, john.stultz, tglx,
	chenhui.zhao, deepthi, geoff, linux-kernel, srivatsa.bhat,
	schwidefsky, svaidy, linuxppc-dev
In-Reply-To: <20130726050915.17167.16298.stgit@preeti>

In the current design of timer offload framework, the broadcast cpu should
*not* go into tickless idle so as to avoid missed wakeups on CPUs in deep idle states.

Since we prevent the CPUs entering deep idle states from programming the
decrementer of the broadcast cpu for their respective next local events for
reasons mentioned in PATCH[3/5], the broadcast CPU checks if there are any
CPUs to be woken up during each of its timer interrupt, which is programmed
to its local events.

With tickless idle, the broadcast CPU might not have a timer interrupt
pending till after many ticks, which can result in missed wakeups on CPUs
in deep idle states. By disabling tickless idle, worst case, the tick_sched
hrtimer will trigger a timer interrupt every period.

However the current setup of tickless idle does not let us make the choice
of tickless on individual cpus. NOHZ_MODE_INACTIVE which disables tickless idle,
is a system wide setting. Hence resort to an arch specific call to check if a cpu
can go into tickless idle.

Signed-off-by: Preeti U Murthy <preeti@linux.vnet.ibm.com>
---

 arch/powerpc/kernel/time.c |    5 +++++
 kernel/time/tick-sched.c   |    7 +++++++
 2 files changed, 12 insertions(+)

diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c
index 7e858e1..916c32f 100644
--- a/arch/powerpc/kernel/time.c
+++ b/arch/powerpc/kernel/time.c
@@ -864,6 +864,11 @@ static void decrementer_timer_broadcast(const struct cpumask *mask)
 	arch_send_tick_broadcast(mask);
 }
 
+int arch_can_stop_idle_tick(int cpu)
+{
+	return cpu != bc_cpu;
+}
+
 static void register_decrementer_clockevent(int cpu)
 {
 	struct clock_event_device *dec = &per_cpu(decrementers, cpu);
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
index 6960172..e9ffa84 100644
--- a/kernel/time/tick-sched.c
+++ b/kernel/time/tick-sched.c
@@ -700,8 +700,15 @@ static void tick_nohz_full_stop_tick(struct tick_sched *ts)
 #endif
 }
 
+int __weak arch_can_stop_idle_tick(int cpu)
+{
+	return 1;
+}
+
 static bool can_stop_idle_tick(int cpu, struct tick_sched *ts)
 {
+	if (!arch_can_stop_idle_tick(cpu))
+		return false;
 	/*
 	 * If this cpu is offline and it is the one which updates
 	 * jiffies, then give up the assignment and let it be taken by

^ permalink raw reply related

* [PATCH 1/4] powerpc: book3e: _PAGE_LENDIAN must be _PAGE_ENDIAN
From: Bharat Bhushan @ 2013-07-26  5:46 UTC (permalink / raw)
  To: kvm-ppc, kvm, linuxppc-dev, agraf, benh, scottwood; +Cc: Bharat Bhushan

For booke3e _PAGE_ENDIAN is not defined. Infact what is defined
is "_PAGE_LENDIAN" which is wrong and that should be _PAGE_ENDIAN.
There are no compilation errors as
arch/powerpc/include/asm/pte-common.h defines _PAGE_ENDIAN to 0
as it is not defined anywhere.

Signed-off-by: Bharat Bhushan <bharat.bhushan@freescale.com>
---
 arch/powerpc/include/asm/pte-book3e.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/powerpc/include/asm/pte-book3e.h b/arch/powerpc/include/asm/pte-book3e.h
index 0156702..576ad88 100644
--- a/arch/powerpc/include/asm/pte-book3e.h
+++ b/arch/powerpc/include/asm/pte-book3e.h
@@ -40,7 +40,7 @@
 #define _PAGE_U1	0x010000
 #define _PAGE_U0	0x020000
 #define _PAGE_ACCESSED	0x040000
-#define _PAGE_LENDIAN	0x080000
+#define _PAGE_ENDIAN	0x080000
 #define _PAGE_GUARDED	0x100000
 #define _PAGE_COHERENT	0x200000 /* M: enforce memory coherence */
 #define _PAGE_NO_CACHE	0x400000 /* I: cache inhibit */
-- 
1.7.0.4

^ permalink raw reply related

* [PATCH 2/4] kvm: powerpc: allow guest control "E" attribute in mas2
From: Bharat Bhushan @ 2013-07-26  5:46 UTC (permalink / raw)
  To: kvm-ppc, kvm, linuxppc-dev, agraf, benh, scottwood; +Cc: Bharat Bhushan
In-Reply-To: <1374817613-20169-1-git-send-email-Bharat.Bhushan@freescale.com>

"E" bit in MAS2 bit indicates whether the page is accessed
in Little-Endian or Big-Endian byte order.
There is no reason to stop guest setting  "E", so allow him."

Signed-off-by: Bharat Bhushan <bharat.bhushan@freescale.com>
---
 arch/powerpc/kvm/e500.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/powerpc/kvm/e500.h b/arch/powerpc/kvm/e500.h
index c2e5e98..277cb18 100644
--- a/arch/powerpc/kvm/e500.h
+++ b/arch/powerpc/kvm/e500.h
@@ -117,7 +117,7 @@ static inline struct kvmppc_vcpu_e500 *to_e500(struct kvm_vcpu *vcpu)
 #define E500_TLB_USER_PERM_MASK (MAS3_UX|MAS3_UR|MAS3_UW)
 #define E500_TLB_SUPER_PERM_MASK (MAS3_SX|MAS3_SR|MAS3_SW)
 #define MAS2_ATTRIB_MASK \
-	  (MAS2_X0 | MAS2_X1)
+	  (MAS2_X0 | MAS2_X1 | MAS2_E)
 #define MAS3_ATTRIB_MASK \
 	  (MAS3_U0 | MAS3_U1 | MAS3_U2 | MAS3_U3 \
 	   | E500_TLB_USER_PERM_MASK | E500_TLB_SUPER_PERM_MASK)
-- 
1.7.0.4

^ permalink raw reply related

* [PATCH 3/4] kvm: powerpc: allow guest control "G" attribute in mas2
From: Bharat Bhushan @ 2013-07-26  5:46 UTC (permalink / raw)
  To: kvm-ppc, kvm, linuxppc-dev, agraf, benh, scottwood; +Cc: Bharat Bhushan
In-Reply-To: <1374817613-20169-1-git-send-email-Bharat.Bhushan@freescale.com>

"G" bit in MAS2 indicates whether the page is Guarded.
There is no reason to stop guest setting  "G", so allow him.

Signed-off-by: Bharat Bhushan <bharat.bhushan@freescale.com>
---
 arch/powerpc/kvm/e500.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/powerpc/kvm/e500.h b/arch/powerpc/kvm/e500.h
index 277cb18..4fd9650 100644
--- a/arch/powerpc/kvm/e500.h
+++ b/arch/powerpc/kvm/e500.h
@@ -117,7 +117,7 @@ static inline struct kvmppc_vcpu_e500 *to_e500(struct kvm_vcpu *vcpu)
 #define E500_TLB_USER_PERM_MASK (MAS3_UX|MAS3_UR|MAS3_UW)
 #define E500_TLB_SUPER_PERM_MASK (MAS3_SX|MAS3_SR|MAS3_SW)
 #define MAS2_ATTRIB_MASK \
-	  (MAS2_X0 | MAS2_X1 | MAS2_E)
+	  (MAS2_X0 | MAS2_X1 | MAS2_E | MAS2_G)
 #define MAS3_ATTRIB_MASK \
 	  (MAS3_U0 | MAS3_U1 | MAS3_U2 | MAS3_U3 \
 	   | E500_TLB_USER_PERM_MASK | E500_TLB_SUPER_PERM_MASK)
-- 
1.7.0.4

^ permalink raw reply related

* [PATCH 4/4] kvm: powerpc: set cache coherency only for RAM pages
From: Bharat Bhushan @ 2013-07-26  5:46 UTC (permalink / raw)
  To: kvm-ppc, kvm, linuxppc-dev, agraf, benh, scottwood; +Cc: Bharat Bhushan
In-Reply-To: <1374817613-20169-1-git-send-email-Bharat.Bhushan@freescale.com>

If the page is RAM then map this as cacheable and coherent (set "M" bit)
otherwise this page is treated as I/O and map this as cache inhibited
and guarded (set  "I + G")

This helps setting proper MMU mapping for direct assigned device.

NOTE: There can be devices that require cacheable mapping, which is not yet supported.

Signed-off-by: Bharat Bhushan <bharat.bhushan@freescale.com>
---
 arch/powerpc/kvm/e500_mmu_host.c |   24 +++++++++++++++++++-----
 1 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/arch/powerpc/kvm/e500_mmu_host.c b/arch/powerpc/kvm/e500_mmu_host.c
index 1c6a9d7..5cbdc8f 100644
--- a/arch/powerpc/kvm/e500_mmu_host.c
+++ b/arch/powerpc/kvm/e500_mmu_host.c
@@ -64,13 +64,27 @@ static inline u32 e500_shadow_mas3_attrib(u32 mas3, int usermode)
 	return mas3;
 }
 
-static inline u32 e500_shadow_mas2_attrib(u32 mas2, int usermode)
+static inline u32 e500_shadow_mas2_attrib(u32 mas2, pfn_t pfn)
 {
+	u32 mas2_attr;
+
+	mas2_attr = mas2 & MAS2_ATTRIB_MASK;
+
+	if (kvm_is_mmio_pfn(pfn)) {
+		/*
+		 * If page is not RAM then it is treated as I/O page.
+		 * Map it with cache inhibited and guarded (set "I" + "G").
+		 */
+		mas2_attr |= MAS2_I | MAS2_G;
+		return mas2_attr;
+	}
+
+	/* Map RAM pages as cacheable (Not setting "I" in MAS2) */
 #ifdef CONFIG_SMP
-	return (mas2 & MAS2_ATTRIB_MASK) | MAS2_M;
-#else
-	return mas2 & MAS2_ATTRIB_MASK;
+	/* Also map as coherent (set "M") in SMP */
+	mas2_attr |= MAS2_M;
 #endif
+	return mas2_attr;
 }
 
 /*
@@ -313,7 +327,7 @@ static void kvmppc_e500_setup_stlbe(
 	/* Force IPROT=0 for all guest mappings. */
 	stlbe->mas1 = MAS1_TSIZE(tsize) | get_tlb_sts(gtlbe) | MAS1_VALID;
 	stlbe->mas2 = (gvaddr & MAS2_EPN) |
-		      e500_shadow_mas2_attrib(gtlbe->mas2, pr);
+		      e500_shadow_mas2_attrib(gtlbe->mas2, pfn);
 	stlbe->mas7_3 = ((u64)pfn << PAGE_SHIFT) |
 			e500_shadow_mas3_attrib(gtlbe->mas7_3, pr);
 
-- 
1.7.0.4

^ permalink raw reply related

* Re: [PATCH 4/4] kvm: powerpc: set cache coherency only for RAM pages
From: Benjamin Herrenschmidt @ 2013-07-26  8:26 UTC (permalink / raw)
  To: Bharat Bhushan
  Cc: kvm, agraf, kvm-ppc, Bharat Bhushan, scottwood, linuxppc-dev
In-Reply-To: <1374817613-20169-4-git-send-email-Bharat.Bhushan@freescale.com>

On Fri, 2013-07-26 at 11:16 +0530, Bharat Bhushan wrote:
> If the page is RAM then map this as cacheable and coherent (set "M" bit)
> otherwise this page is treated as I/O and map this as cache inhibited
> and guarded (set  "I + G")
> 
> This helps setting proper MMU mapping for direct assigned device.
> 
> NOTE: There can be devices that require cacheable mapping, which is not yet supported.

Why don't you do like server instead and enforce the use of the same I
and M bits as the corresponding qemu PTE ?

Cheers,
Ben.

> Signed-off-by: Bharat Bhushan <bharat.bhushan@freescale.com>
> ---
>  arch/powerpc/kvm/e500_mmu_host.c |   24 +++++++++++++++++++-----
>  1 files changed, 19 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/powerpc/kvm/e500_mmu_host.c b/arch/powerpc/kvm/e500_mmu_host.c
> index 1c6a9d7..5cbdc8f 100644
> --- a/arch/powerpc/kvm/e500_mmu_host.c
> +++ b/arch/powerpc/kvm/e500_mmu_host.c
> @@ -64,13 +64,27 @@ static inline u32 e500_shadow_mas3_attrib(u32 mas3, int usermode)
>  	return mas3;
>  }
>  
> -static inline u32 e500_shadow_mas2_attrib(u32 mas2, int usermode)
> +static inline u32 e500_shadow_mas2_attrib(u32 mas2, pfn_t pfn)
>  {
> +	u32 mas2_attr;
> +
> +	mas2_attr = mas2 & MAS2_ATTRIB_MASK;
> +
> +	if (kvm_is_mmio_pfn(pfn)) {
> +		/*
> +		 * If page is not RAM then it is treated as I/O page.
> +		 * Map it with cache inhibited and guarded (set "I" + "G").
> +		 */
> +		mas2_attr |= MAS2_I | MAS2_G;
> +		return mas2_attr;
> +	}
> +
> +	/* Map RAM pages as cacheable (Not setting "I" in MAS2) */
>  #ifdef CONFIG_SMP
> -	return (mas2 & MAS2_ATTRIB_MASK) | MAS2_M;
> -#else
> -	return mas2 & MAS2_ATTRIB_MASK;
> +	/* Also map as coherent (set "M") in SMP */
> +	mas2_attr |= MAS2_M;
>  #endif
> +	return mas2_attr;
>  }
>  
>  /*
> @@ -313,7 +327,7 @@ static void kvmppc_e500_setup_stlbe(
>  	/* Force IPROT=0 for all guest mappings. */
>  	stlbe->mas1 = MAS1_TSIZE(tsize) | get_tlb_sts(gtlbe) | MAS1_VALID;
>  	stlbe->mas2 = (gvaddr & MAS2_EPN) |
> -		      e500_shadow_mas2_attrib(gtlbe->mas2, pr);
> +		      e500_shadow_mas2_attrib(gtlbe->mas2, pfn);
>  	stlbe->mas7_3 = ((u64)pfn << PAGE_SHIFT) |
>  			e500_shadow_mas3_attrib(gtlbe->mas7_3, pr);
>  

^ permalink raw reply

* Re: [PATCH 4/4] kvm: powerpc: set cache coherency only for RAM pages
From: Alexander Graf @ 2013-07-26  8:50 UTC (permalink / raw)
  To: Benjamin Herrenschmidt
  Cc: kvm, kvm-ppc, Bharat Bhushan, Bharat Bhushan, scottwood,
	linuxppc-dev
In-Reply-To: <1374827190.6142.124.camel@pasglop>


On 26.07.2013, at 10:26, Benjamin Herrenschmidt wrote:

> On Fri, 2013-07-26 at 11:16 +0530, Bharat Bhushan wrote:
>> If the page is RAM then map this as cacheable and coherent (set "M" =
bit)
>> otherwise this page is treated as I/O and map this as cache inhibited
>> and guarded (set  "I + G")
>>=20
>> This helps setting proper MMU mapping for direct assigned device.
>>=20
>> NOTE: There can be devices that require cacheable mapping, which is =
not yet supported.
>=20
> Why don't you do like server instead and enforce the use of the same I
> and M bits as the corresponding qemu PTE ?

Specifically, Ben is talking about this code:


                /* Translate to host virtual address */
                hva =3D __gfn_to_hva_memslot(memslot, gfn);

                /* Look up the Linux PTE for the backing page */
                pte_size =3D psize;
                pte =3D lookup_linux_pte(pgdir, hva, writing, =
&pte_size);
                if (pte_present(pte)) {
                        if (writing && !pte_write(pte))
                                /* make the actual HPTE be read-only */
                                ptel =3D hpte_make_readonly(ptel);
                        is_io =3D hpte_cache_bits(pte_val(pte));
                        pa =3D pte_pfn(pte) << PAGE_SHIFT;
                }


Alex

^ permalink raw reply

* RE: [PATCH 4/4] kvm: powerpc: set cache coherency only for RAM pages
From: Bhushan Bharat-R65777 @ 2013-07-26  8:51 UTC (permalink / raw)
  To: Benjamin Herrenschmidt
  Cc: Wood Scott-B07421, linuxppc-dev@lists.ozlabs.org,
	kvm@vger.kernel.org, kvm-ppc@vger.kernel.org, agraf@suse.de
In-Reply-To: <1374827190.6142.124.camel@pasglop>

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQmVuamFtaW4gSGVycmVu
c2NobWlkdCBbbWFpbHRvOmJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZ10NCj4gU2VudDogRnJpZGF5
LCBKdWx5IDI2LCAyMDEzIDE6NTcgUE0NCj4gVG86IEJodXNoYW4gQmhhcmF0LVI2NTc3Nw0KPiBD
Yzoga3ZtLXBwY0B2Z2VyLmtlcm5lbC5vcmc7IGt2bUB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4cHBj
LWRldkBsaXN0cy5vemxhYnMub3JnOw0KPiBhZ3JhZkBzdXNlLmRlOyBXb29kIFNjb3R0LUIwNzQy
MTsgQmh1c2hhbiBCaGFyYXQtUjY1Nzc3DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggNC80XSBrdm06
IHBvd2VycGM6IHNldCBjYWNoZSBjb2hlcmVuY3kgb25seSBmb3IgUkFNIHBhZ2VzDQo+IA0KPiBP
biBGcmksIDIwMTMtMDctMjYgYXQgMTE6MTYgKzA1MzAsIEJoYXJhdCBCaHVzaGFuIHdyb3RlOg0K
PiA+IElmIHRoZSBwYWdlIGlzIFJBTSB0aGVuIG1hcCB0aGlzIGFzIGNhY2hlYWJsZSBhbmQgY29o
ZXJlbnQgKHNldCAiTSINCj4gPiBiaXQpIG90aGVyd2lzZSB0aGlzIHBhZ2UgaXMgdHJlYXRlZCBh
cyBJL08gYW5kIG1hcCB0aGlzIGFzIGNhY2hlDQo+ID4gaW5oaWJpdGVkIGFuZCBndWFyZGVkIChz
ZXQgICJJICsgRyIpDQo+ID4NCj4gPiBUaGlzIGhlbHBzIHNldHRpbmcgcHJvcGVyIE1NVSBtYXBw
aW5nIGZvciBkaXJlY3QgYXNzaWduZWQgZGV2aWNlLg0KPiA+DQo+ID4gTk9URTogVGhlcmUgY2Fu
IGJlIGRldmljZXMgdGhhdCByZXF1aXJlIGNhY2hlYWJsZSBtYXBwaW5nLCB3aGljaCBpcyBub3Qg
eWV0DQo+IHN1cHBvcnRlZC4NCj4gDQo+IFdoeSBkb24ndCB5b3UgZG8gbGlrZSBzZXJ2ZXIgaW5z
dGVhZCBhbmQgZW5mb3JjZSB0aGUgdXNlIG9mIHRoZSBzYW1lIEkgYW5kIE0NCj4gYml0cyBhcyB0
aGUgY29ycmVzcG9uZGluZyBxZW11IFBURSA/DQoNCkJlbi9BbGV4LCBJIHdpbGwgbG9vayBpbnRv
IHRoZSBjb2RlLiBDYW4geW91IHBsZWFzZSBkZXNjcmliZSBob3cgdGhpcyBpcyBoYW5kbGVkIG9u
IHNlcnZlcj8NCg0KVGhhbmtzDQotQmhhcmF0DQoNCj4gDQo+IENoZWVycywNCj4gQmVuLg0KPiAN
Cj4gPiBTaWduZWQtb2ZmLWJ5OiBCaGFyYXQgQmh1c2hhbiA8YmhhcmF0LmJodXNoYW5AZnJlZXNj
YWxlLmNvbT4NCj4gPiAtLS0NCj4gPiAgYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdV9ob3N0LmMg
fCAgIDI0ICsrKysrKysrKysrKysrKysrKystLS0tLQ0KPiA+ICAxIGZpbGVzIGNoYW5nZWQsIDE5
IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvYXJj
aC9wb3dlcnBjL2t2bS9lNTAwX21tdV9ob3N0LmMNCj4gPiBiL2FyY2gvcG93ZXJwYy9rdm0vZTUw
MF9tbXVfaG9zdC5jDQo+ID4gaW5kZXggMWM2YTlkNy4uNWNiZGM4ZiAxMDA2NDQNCj4gPiAtLS0g
YS9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11X2hvc3QuYw0KPiA+ICsrKyBiL2FyY2gvcG93ZXJw
Yy9rdm0vZTUwMF9tbXVfaG9zdC5jDQo+ID4gQEAgLTY0LDEzICs2NCwyNyBAQCBzdGF0aWMgaW5s
aW5lIHUzMiBlNTAwX3NoYWRvd19tYXMzX2F0dHJpYih1MzIgbWFzMywgaW50DQo+IHVzZXJtb2Rl
KQ0KPiA+ICAJcmV0dXJuIG1hczM7DQo+ID4gIH0NCj4gPg0KPiA+IC1zdGF0aWMgaW5saW5lIHUz
MiBlNTAwX3NoYWRvd19tYXMyX2F0dHJpYih1MzIgbWFzMiwgaW50IHVzZXJtb2RlKQ0KPiA+ICtz
dGF0aWMgaW5saW5lIHUzMiBlNTAwX3NoYWRvd19tYXMyX2F0dHJpYih1MzIgbWFzMiwgcGZuX3Qg
cGZuKQ0KPiA+ICB7DQo+ID4gKwl1MzIgbWFzMl9hdHRyOw0KPiA+ICsNCj4gPiArCW1hczJfYXR0
ciA9IG1hczIgJiBNQVMyX0FUVFJJQl9NQVNLOw0KPiA+ICsNCj4gPiArCWlmIChrdm1faXNfbW1p
b19wZm4ocGZuKSkgew0KPiA+ICsJCS8qDQo+ID4gKwkJICogSWYgcGFnZSBpcyBub3QgUkFNIHRo
ZW4gaXQgaXMgdHJlYXRlZCBhcyBJL08gcGFnZS4NCj4gPiArCQkgKiBNYXAgaXQgd2l0aCBjYWNo
ZSBpbmhpYml0ZWQgYW5kIGd1YXJkZWQgKHNldCAiSSIgKyAiRyIpLg0KPiA+ICsJCSAqLw0KPiA+
ICsJCW1hczJfYXR0ciB8PSBNQVMyX0kgfCBNQVMyX0c7DQo+ID4gKwkJcmV0dXJuIG1hczJfYXR0
cjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBNYXAgUkFNIHBhZ2VzIGFzIGNhY2hlYWJsZSAo
Tm90IHNldHRpbmcgIkkiIGluIE1BUzIpICovDQo+ID4gICNpZmRlZiBDT05GSUdfU01QDQo+ID4g
LQlyZXR1cm4gKG1hczIgJiBNQVMyX0FUVFJJQl9NQVNLKSB8IE1BUzJfTTsNCj4gPiAtI2Vsc2UN
Cj4gPiAtCXJldHVybiBtYXMyICYgTUFTMl9BVFRSSUJfTUFTSzsNCj4gPiArCS8qIEFsc28gbWFw
IGFzIGNvaGVyZW50IChzZXQgIk0iKSBpbiBTTVAgKi8NCj4gPiArCW1hczJfYXR0ciB8PSBNQVMy
X007DQo+ID4gICNlbmRpZg0KPiA+ICsJcmV0dXJuIG1hczJfYXR0cjsNCj4gPiAgfQ0KPiA+DQo+
ID4gIC8qDQo+ID4gQEAgLTMxMyw3ICszMjcsNyBAQCBzdGF0aWMgdm9pZCBrdm1wcGNfZTUwMF9z
ZXR1cF9zdGxiZSgNCj4gPiAgCS8qIEZvcmNlIElQUk9UPTAgZm9yIGFsbCBndWVzdCBtYXBwaW5n
cy4gKi8NCj4gPiAgCXN0bGJlLT5tYXMxID0gTUFTMV9UU0laRSh0c2l6ZSkgfCBnZXRfdGxiX3N0
cyhndGxiZSkgfCBNQVMxX1ZBTElEOw0KPiA+ICAJc3RsYmUtPm1hczIgPSAoZ3ZhZGRyICYgTUFT
Ml9FUE4pIHwNCj4gPiAtCQkgICAgICBlNTAwX3NoYWRvd19tYXMyX2F0dHJpYihndGxiZS0+bWFz
MiwgcHIpOw0KPiA+ICsJCSAgICAgIGU1MDBfc2hhZG93X21hczJfYXR0cmliKGd0bGJlLT5tYXMy
LCBwZm4pOw0KPiA+ICAJc3RsYmUtPm1hczdfMyA9ICgodTY0KXBmbiA8PCBQQUdFX1NISUZUKSB8
DQo+ID4gIAkJCWU1MDBfc2hhZG93X21hczNfYXR0cmliKGd0bGJlLT5tYXM3XzMsIHByKTsNCj4g
Pg0KPiANCj4gDQoNCg==

^ permalink raw reply

* RE: [PATCH 4/4] kvm: powerpc: set cache coherency only for RAM pages
From: Bhushan Bharat-R65777 @ 2013-07-26  8:52 UTC (permalink / raw)
  To: Alexander Graf, Benjamin Herrenschmidt
  Cc: Wood Scott-B07421, linuxppc-dev@lists.ozlabs.org,
	kvm@vger.kernel.org, kvm-ppc@vger.kernel.org
In-Reply-To: <6CF0D65E-76B6-4CDD-BADC-44DCCC8CAFF6@suse.de>



> -----Original Message-----
> From: kvm-ppc-owner@vger.kernel.org [mailto:kvm-ppc-owner@vger.kernel.org=
] On
> Behalf Of Alexander Graf
> Sent: Friday, July 26, 2013 2:20 PM
> To: Benjamin Herrenschmidt
> Cc: Bhushan Bharat-R65777; kvm-ppc@vger.kernel.org; kvm@vger.kernel.org;
> linuxppc-dev@lists.ozlabs.org; Wood Scott-B07421; Bhushan Bharat-R65777
> Subject: Re: [PATCH 4/4] kvm: powerpc: set cache coherency only for RAM p=
ages
>=20
>=20
> On 26.07.2013, at 10:26, Benjamin Herrenschmidt wrote:
>=20
> > On Fri, 2013-07-26 at 11:16 +0530, Bharat Bhushan wrote:
> >> If the page is RAM then map this as cacheable and coherent (set "M"
> >> bit) otherwise this page is treated as I/O and map this as cache
> >> inhibited and guarded (set  "I + G")
> >>
> >> This helps setting proper MMU mapping for direct assigned device.
> >>
> >> NOTE: There can be devices that require cacheable mapping, which is no=
t yet
> supported.
> >
> > Why don't you do like server instead and enforce the use of the same I
> > and M bits as the corresponding qemu PTE ?
>=20
> Specifically, Ben is talking about this code:
>=20
>=20
>                 /* Translate to host virtual address */
>                 hva =3D __gfn_to_hva_memslot(memslot, gfn);
>=20
>                 /* Look up the Linux PTE for the backing page */
>                 pte_size =3D psize;
>                 pte =3D lookup_linux_pte(pgdir, hva, writing, &pte_size);
>                 if (pte_present(pte)) {
>                         if (writing && !pte_write(pte))
>                                 /* make the actual HPTE be read-only */
>                                 ptel =3D hpte_make_readonly(ptel);
>                         is_io =3D hpte_cache_bits(pte_val(pte));
>                         pa =3D pte_pfn(pte) << PAGE_SHIFT;
>                 }
>=20

Ok

Thanks
-Bharat


>=20
> Alex
>=20
> --
> To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in the=
 body
> of a message to majordomo@vger.kernel.org More majordomo info at
> http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* RE: [RFC PATCH 0/5] cpuidle/ppc: Timer offload framework to support deep idle states
From: Li Yang-R58472 @ 2013-07-26 10:05 UTC (permalink / raw)
  To: Preeti U Murthy, benh@kernel.crashing.org,
	paul.gortmaker@windriver.com, paulus@samba.org,
	shangw@linux.vnet.ibm.com, galak@kernel.crashing.org,
	fweisbec@gmail.com, paulmck@linux.vnet.ibm.com,
	michael@ellerman.id.au, arnd@arndb.de, linux-pm@vger.kernel.org,
	rostedt@goodmis.org, rjw@sisk.pl, john.stultz@linaro.org,
	tglx@linutronix.de, Zhao Chenhui-B35336,
	deepthi@linux.vnet.ibm.com, geoff@infradead.org,
	linux-kernel@vger.kernel.org, srivatsa.bhat@linux.vnet.ibm.com,
	schwidefsky@de.ibm.com, svaidy@linux.vnet.ibm.com,
	linuxppc-dev@lists.ozlabs.org
In-Reply-To: <20130725090016.12500.28888.stgit@preeti.in.ibm.com>

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogbGludXgtcG0tb3duZXJA
dmdlci5rZXJuZWwub3JnIFttYWlsdG86bGludXgtcG0tDQo+IG93bmVyQHZnZXIua2VybmVsLm9y
Z10gT24gQmVoYWxmIE9mIFByZWV0aSBVIE11cnRoeQ0KPiBTZW50OiBUaHVyc2RheSwgSnVseSAy
NSwgMjAxMyA1OjAzIFBNDQo+IFRvOiBiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc7IHBhdWwuZ29y
dG1ha2VyQHdpbmRyaXZlci5jb207DQo+IHBhdWx1c0BzYW1iYS5vcmc7IHNoYW5nd0BsaW51eC52
bmV0LmlibS5jb207IGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc7DQo+IGZ3ZWlzYmVjQGdtYWls
LmNvbTsgcGF1bG1ja0BsaW51eC52bmV0LmlibS5jb207IG1pY2hhZWxAZWxsZXJtYW4uaWQuYXU7
DQo+IGFybmRAYXJuZGIuZGU7IGxpbnV4LXBtQHZnZXIua2VybmVsLm9yZzsgcm9zdGVkdEBnb29k
bWlzLm9yZzsgcmp3QHNpc2sucGw7DQo+IGpvaG4uc3R1bHR6QGxpbmFyby5vcmc7IHRnbHhAbGlu
dXRyb25peC5kZTsgWmhhbyBDaGVuaHVpLUIzNTMzNjsNCj4gZGVlcHRoaUBsaW51eC52bmV0Lmli
bS5jb207IGdlb2ZmQGluZnJhZGVhZC5vcmc7IGxpbnV4LQ0KPiBrZXJuZWxAdmdlci5rZXJuZWwu
b3JnOyBzcml2YXRzYS5iaGF0QGxpbnV4LnZuZXQuaWJtLmNvbTsNCj4gc2Nod2lkZWZza3lAZGUu
aWJtLmNvbTsgc3ZhaWR5QGxpbnV4LnZuZXQuaWJtLmNvbTsgbGludXhwcGMtDQo+IGRldkBsaXN0
cy5vemxhYnMub3JnDQo+IFN1YmplY3Q6IFtSRkMgUEFUQ0ggMC81XSBjcHVpZGxlL3BwYzogVGlt
ZXIgb2ZmbG9hZCBmcmFtZXdvcmsgdG8gc3VwcG9ydA0KPiBkZWVwIGlkbGUgc3RhdGVzDQo+IA0K
PiBPbiBQb3dlclBDLCB3aGVuIENQVXMgZW50ZXIgZGVlcCBpZGxlIHN0YXRlcywgdGhlaXIgbG9j
YWwgdGltZXJzIGFyZQ0KPiBzd2l0Y2hlZCBvZmYuIFRoZSByZXNwb25zaWJpbGl0eSBvZiB3YWtp
bmcgdGhlbSB1cCBhdCB0aGVpciBuZXh0IHRpbWVyDQo+IGV2ZW50LCBuZWVkcyB0byBiZSBoYW5k
ZWQgb3ZlciB0byBhbiBleHRlcm5hbCBkZXZpY2UuIE9uIFBvd2VyUEMsIHdlIGRvDQo+IG5vdCBo
YXZlIGFuIGV4dGVybmFsIGRldmljZSBlcXVpdmFsZW50IHRvIEhQRVQsIHdoaWNoIGlzIGN1cnJl
bnRseSBkb25lDQo+IG9uIGFyY2hpdGVjdHVyZXMgbGlrZSB4ODYuIEluc3RlYWQgd2UgYXNzaWdu
IHRoZSBsb2NhbCB0aW1lciBvZiBvbmUgb2YNCj4gdGhlIENQVXMgdG8gZG8gdGhpcyBqb2IuDQoN
CkkgZG9uJ3Qga25vdyBtdWNoIGFib3V0IHRoZSBkZWVwIGlkbGUgc3RhdGVzLiAgQnV0IGlzIGl0
IG5lY2Vzc2FyeSB0byB0dXJuIG9mZiB0aGUgdGltZXIgaW4gdGhlc2Ugc3RhdGVzPyAgSSBtZWFu
IHRoZSBleHRyYSB3b3JrIG5lZWRlZCBvbiB0aGUgYm9vdGluZyBDUFUgYW5kIHJlLXN5bmNpbmcg
VGltZSBCYXNlIGFmdGVyIHdha2V1cCBtaWdodCBkZWZlYXQgdGhlIHBvd2VyIGNvbnN1bXB0aW9u
IGJlbmVmaXQgb2YgdHVybmluZyBvZmYgdGhlIHRpbWVyLg0KDQpCdHcsIHRoZSBPcGVuIFBJQyBo
YXMgYW4gaW50ZXJuYWwgdGltZXIuICBDYW4gd2UgdXNlIGl0IGFzIHRoZSB3YWtldXAgZXZlbnQ/
DQoNClJlZ2FyZHMsDQpMZW8NCg0KPiANCj4gVGhpcyBwYXRjaHNldCBpcyBhbiBhdHRlbXB0IHRv
IG1ha2UgdXNlIG9mIHRoZSBleGlzdGluZyB0aW1lciBicm9hZGNhc3QNCj4gZnJhbWV3b3JrIGlu
IHRoZSBrZXJuZWwgdG8gbWVldCB0aGUgYWJvdmUgcmVxdWlyZW1lbnQsIGV4Y2VwdCB0aGF0IHRo
ZQ0KPiB0aWNrIGJyb2FkY2FzdCBkZXZpY2UgaXMgdGhlIGxvY2FsIHRpbWVyIG9mIHRoZSBib290
IENQVS4NCj4gDQo+IFRoaXMgcGF0Y2ggc2VyaWVzIGlzIHBvcnRlZCBvbnRvcCBvZiAzLjExLXJj
MSArIHRoZSBjcHVpZGxlIGRyaXZlcg0KPiBiYWNrZW5kIGZvciBwb3dlcm52IHBvc3RlZCBieSBE
ZWVwdGhpIERoYXJ3YXIgcmVjZW50bHkuIFRoZSBjdXJyZW50DQo+IGRlc2lnbiBhbmQgaW1wbGVt
ZW50YXRpb24gc3VwcG9ydHMgdGhlIE9ORVNIT1QgdGljayBtb2RlLiBJdCBkb2VzIG5vdCB5ZXQN
Cj4gc3VwcG9ydCB0aGUgUEVSSU9ESUMgdGljayBtb2RlLiBUaGlzIHBhdGNoIGlzIHRlc3RlZCB3
aXRoIE5PSFpfRlVMTCBvZmYuDQo+IA0KPiBQYXRjaFsxLzVdLCBQYXRjaFsyLzVdOiBvcHRpbWl6
ZSB0aGUgYnJvYWRjYXN0IG1lY2hhbmlzbSBvbiBwcGMuDQo+IFBhdGNoWzMvNV06IEludHJvZHVj
ZXMgdGhlIGNvcmUgb2YgdGhlIHRpbWVyIG9mZmxvYWQgZnJhbWV3b3JrIG9uIHBvd2VycGMuDQo+
IFBhdGNoWzQvNV06IFRoZSBjcHUgZG9pbmcgdGhlIGJyb2FkY2FzdCBzaG91bGQgbm90IGdvIGlu
dG8gdGlja2xlc3MgaWRsZS4NCj4gUGF0Y2hbNS81XTogQWRkIGEgZGVlcCBpZGxlIHN0YXRlIHRv
IHRoZSBjcHVpZGxlIHN0YXRlIHRhYmxlIG9uIHBvd2VybnYuDQo+IA0KPiBQYXRjaFs1LzVdIGlz
IHRoZSBwYXRjaCB0aGF0IHVsdGltYXRlbHkgbWFrZXMgdXNlIG9mIHRoZSB0aW1lciBvZmZsb2Fk
DQo+IGZyYW1ld29yayB0aGF0IHRoZSBwYXRjaGVzIFBhdGNoWzEvNV0gdG8gUGF0Y2hbNC81XSBi
dWlsZC4NCj4gDQo+IC0tLQ0KPiANCj4gUHJlZXRpIFUgTXVydGh5ICgzKToNCj4gICAgICAgY3B1
aWRsZS9wcGM6IEFkZCB0aW1lciBvZmZsb2FkIGZyYW1ld29yayB0byBzdXBwb3J0IGRlZXAgaWRs
ZQ0KPiBzdGF0ZXMNCj4gICAgICAgY3B1aWRsZS9wcGM6IENQVSBnb2VzIHRpY2tsZXNzIGlmIHRo
ZXJlIGFyZSBubyBhcmNoLXNwZWNpZmljDQo+IGNvbnN0cmFpbnRzDQo+ICAgICAgIGNwdWlkbGUv
cHBjOiBBZGQgbG9uZ25hcCBzdGF0ZSB0byB0aGUgaWRsZSBzdGF0ZXMgb24gcG93ZXJudg0KPiAN
Cj4gU3JpdmF0c2EgUy4gQmhhdCAoMik6DQo+ICAgICAgIHBvd2VycGM6IEZyZWUgdXAgdGhlIElQ
SSBtZXNzYWdlIHNsb3Qgb2YgaXBpIGNhbGwgZnVuY3Rpb24NCj4gKFBQQ19NU0dfQ0FMTF9GVU5D
KQ0KPiAgICAgICBwb3dlcnBjOiBJbXBsZW1lbnQgYnJvYWRjYXN0IHRpbWVyIGludGVycnVwdCBh
cyBhbiBJUEkgbWVzc2FnZQ0KPiANCj4gDQo+ICBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc21w
LmggICAgICAgICAgICAgICAgICB8ICAgIDMgKw0KPiAgYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNt
L3RpbWUuaCAgICAgICAgICAgICAgICAgfCAgICAzICsNCj4gIGFyY2gvcG93ZXJwYy9rZXJuZWwv
c21wLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMyArKysrLS0NCj4gIGFyY2gvcG93ZXJw
Yy9rZXJuZWwvdGltZS5jICAgICAgICAgICAgICAgICAgICAgIHwgICA4NA0KPiArKysrKysrKysr
KysrKysrKysrKysrKw0KPiAgYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5j
ICAgICAgICAgfCAgICAyIC0NCj4gIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29u
ZmlnICAgICAgICAgIHwgICAgMQ0KPiAgYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3By
b2Nlc3Nvcl9pZGxlLmMgfCAgIDQ4ICsrKysrKysrKysrKysNCj4gIGFyY2gvcG93ZXJwYy9wbGF0
Zm9ybXMvcHMzL3NtcC5jICAgICAgICAgICAgICAgIHwgICAgMiAtDQo+ICBrZXJuZWwvdGltZS90
aWNrLXNjaGVkLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKysNCj4gIDkgZmlsZXMg
Y2hhbmdlZCwgMTYxIGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQ0KPiANCj4gLS0NCj4g
U2lnbmF0dXJlDQo+IA0KPiAtLQ0KPiBUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2Vu
ZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgbGludXgtcG0iIGluDQo+IHRoZSBib2R5IG9mIGEgbWVz
c2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnIE1vcmUgbWFqb3Jkb21vIGluZm8gYXQN
Cj4gaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8taW5mby5odG1sDQoNCg==

^ permalink raw reply

* [PATCH v6 0/3] DMA: Freescale: Add support for 8-channel DMA engine
From: hongbo.zhang @ 2013-07-26 10:27 UTC (permalink / raw)
  To: vinod.koul, djbw, leoli, scottwood, linuxppc-dev
  Cc: Hongbo Zhang, devicetree, linux-kernel

From: Hongbo Zhang <hongbo.zhang@freescale.com>

Hi Vinod, Dan, Scott and Leo, please have a look at these V6 patches.

Freescale QorIQ T4 and B4 introduce new 8-channel DMA engines, this patch set
adds support this DMA engine.

V5->V6 changes:
- minor updates of descriptions in binding document and Kconfig
- remove [4/4], that should be another patch in future

V4->V5 changes:
- update description in the dt binding document, to make it more resonable
- add new patch [4/4] to eliminate a compiling warning which already exists
  for a long time

V3->V4 changes:
- introduce new patch [1/3] to revise the legacy dma binding document
- and then add new paragraph to describe new dt node binding in [2/3]
- rebase to latest kernel v3.11-rc1

V2->V3 changes:
- edit Documentation/devicetree/bindings/powerpc/fsl/dma.txt
- edit text string in Kconfig and the driver files, using "elo series" to
  mention all the current "elo*"

V1->V2 changes:
- removed the codes handling the register dgsr1, since it isn't used currently
- renamed the DMA DT compatible to "fsl,elo3-dma"
- renamed the new dts files to "elo3-dma-<n>.dtsi"

Hongbo Zhang (3):
  DMA: Freescale: revise device tree binding document
  DMA: Freescale: Add new 8-channel DMA engine device tree nodes
  DMA: Freescale: update driver to support 8-channel DMA engine

 .../devicetree/bindings/powerpc/fsl/dma.txt        |  118 +++++++++++++++-----
 arch/powerpc/boot/dts/fsl/b4si-post.dtsi           |    4 +-
 arch/powerpc/boot/dts/fsl/elo3-dma-0.dtsi          |   81 ++++++++++++++
 arch/powerpc/boot/dts/fsl/elo3-dma-1.dtsi          |   81 ++++++++++++++
 arch/powerpc/boot/dts/fsl/t4240si-post.dtsi        |    4 +-
 drivers/dma/Kconfig                                |    9 +-
 drivers/dma/fsldma.c                               |    9 +-
 drivers/dma/fsldma.h                               |    2 +-
 8 files changed, 268 insertions(+), 40 deletions(-)
 create mode 100644 arch/powerpc/boot/dts/fsl/elo3-dma-0.dtsi
 create mode 100644 arch/powerpc/boot/dts/fsl/elo3-dma-1.dtsi

-- 
1.7.9.5

^ permalink raw reply

* [PATCH v6 1/3] DMA: Freescale: revise device tree binding document
From: hongbo.zhang @ 2013-07-26 10:27 UTC (permalink / raw)
  To: vinod.koul, djbw, leoli, scottwood, linuxppc-dev
  Cc: Hongbo Zhang, devicetree, linux-kernel
In-Reply-To: <1374834436-7149-1-git-send-email-hongbo.zhang@freescale.com>

From: Hongbo Zhang <hongbo.zhang@freescale.com>

This patch updates the discription of each type of DMA controller and its
channels, it is preparation for adding another new DMA controller binding, it
also fixes some defects of indent for text alignment at the same time.

Signed-off-by: Hongbo Zhang <hongbo.zhang@freescale.com>
---
 .../devicetree/bindings/powerpc/fsl/dma.txt        |   52 +++++++++-----------
 1 file changed, 24 insertions(+), 28 deletions(-)

diff --git a/Documentation/devicetree/bindings/powerpc/fsl/dma.txt b/Documentation/devicetree/bindings/powerpc/fsl/dma.txt
index 2a4b4bc..ed703d9 100644
--- a/Documentation/devicetree/bindings/powerpc/fsl/dma.txt
+++ b/Documentation/devicetree/bindings/powerpc/fsl/dma.txt
@@ -1,33 +1,31 @@
-* Freescale 83xx DMA Controller
+* Freescale DMA Controllers
 
-Freescale PowerPC 83xx have on chip general purpose DMA controllers.
+** Freescale Elo DMA Controller
+   This is a little-endian DMA controller, used in Freescale mpc83xx series
+   chips such as mpc8315, mpc8349, mpc8379 etc.
 
 Required properties:
 
-- compatible        : compatible list, contains 2 entries, first is
-		 "fsl,CHIP-dma", where CHIP is the processor
-		 (mpc8349, mpc8360, etc.) and the second is
-		 "fsl,elo-dma"
+- compatible        : must include "fsl,elo-dma", and a "fsl,CHIP-dma" is
+                      optional, where CHIP is the processor name.
 - reg               : <registers mapping for DMA general status reg>
-- ranges		: Should be defined as specified in 1) to describe the
-		  DMA controller channels.
+- ranges            : describes the mapping between the address space of the
+                      DMA channels and the address space of the DMA controller.
 - cell-index        : controller index.  0 for controller @ 0x8100
 - interrupts        : <interrupt mapping for DMA IRQ>
 - interrupt-parent  : optional, if needed for interrupt mapping
 
-
 - DMA channel nodes:
-        - compatible        : compatible list, contains 2 entries, first is
-			 "fsl,CHIP-dma-channel", where CHIP is the processor
-			 (mpc8349, mpc8350, etc.) and the second is
-			 "fsl,elo-dma-channel". However, see note below.
+        - compatible        : must include "fsl,elo-dma-channel", and a
+                              "fsl,CHIP-dma-channel" is optional, where CHIP is
+                              the processor name, However, see note below.
         - reg               : <registers mapping for channel>
         - cell-index        : dma channel index starts at 0.
 
 Optional properties:
         - interrupts        : <interrupt mapping for DMA channel IRQ>
-			  (on 83xx this is expected to be identical to
-			   the interrupts property of the parent node)
+                              (on 83xx this is expected to be identical to
+                              the interrupts property of the parent node)
         - interrupt-parent  : optional, if needed for interrupt mapping
 
 Example:
@@ -70,27 +68,25 @@ Example:
 		};
 	};
 
-* Freescale 85xx/86xx DMA Controller
-
-Freescale PowerPC 85xx/86xx have on chip general purpose DMA controllers.
+** Freescale EloPlus DMA Controller
+   This is DMA controller with extended addresses and chaining, mainly used in
+   Freescale mpc85xx/86xx, Pxxx and BSC series chips, such as mpc8540, mpc8641
+   p4080, bsc9131 etc.
 
 Required properties:
 
-- compatible        : compatible list, contains 2 entries, first is
-		 "fsl,CHIP-dma", where CHIP is the processor
-		 (mpc8540, mpc8540, etc.) and the second is
-		 "fsl,eloplus-dma"
+- compatible        : must include "fsl,eloplus-dma", and a "fsl,CHIP-dma" is
+                      optional, where CHIP is the processor name.
 - reg               : <registers mapping for DMA general status reg>
 - cell-index        : controller index.  0 for controller @ 0x21000,
                                          1 for controller @ 0xc000
-- ranges		: Should be defined as specified in 1) to describe the
-		  DMA controller channels.
+- ranges            : describes the mapping between the address space of the
+                      DMA channels and the address space of the DMA controller
 
 - DMA channel nodes:
-        - compatible        : compatible list, contains 2 entries, first is
-			 "fsl,CHIP-dma-channel", where CHIP is the processor
-			 (mpc8540, mpc8560, etc.) and the second is
-			 "fsl,eloplus-dma-channel". However, see note below.
+        - compatible        : must include "fsl,eloplus-dma-channel", and a
+                              "fsl,CHIP-dma-channel" is optional, where CHIP is
+                              the processor name, However, see note below.
         - cell-index        : dma channel index starts at 0.
         - reg               : <registers mapping for channel>
         - interrupts        : <interrupt mapping for DMA channel IRQ>
-- 
1.7.9.5

^ permalink raw reply related

* [PATCH v6 2/3] DMA: Freescale: Add new 8-channel DMA engine device tree nodes
From: hongbo.zhang @ 2013-07-26 10:27 UTC (permalink / raw)
  To: vinod.koul, djbw, leoli, scottwood, linuxppc-dev
  Cc: Hongbo Zhang, devicetree, linux-kernel
In-Reply-To: <1374834436-7149-1-git-send-email-hongbo.zhang@freescale.com>

From: Hongbo Zhang <hongbo.zhang@freescale.com>

Freescale QorIQ T4 and B4 introduce new 8-channel DMA engines, this patch adds
the device tree nodes for them.

Signed-off-by: Hongbo Zhang <hongbo.zhang@freescale.com>
---
 .../devicetree/bindings/powerpc/fsl/dma.txt        |   66 ++++++++++++++++
 arch/powerpc/boot/dts/fsl/b4si-post.dtsi           |    4 +-
 arch/powerpc/boot/dts/fsl/elo3-dma-0.dtsi          |   81 ++++++++++++++++++++
 arch/powerpc/boot/dts/fsl/elo3-dma-1.dtsi          |   81 ++++++++++++++++++++
 arch/powerpc/boot/dts/fsl/t4240si-post.dtsi        |    4 +-
 5 files changed, 232 insertions(+), 4 deletions(-)
 create mode 100644 arch/powerpc/boot/dts/fsl/elo3-dma-0.dtsi
 create mode 100644 arch/powerpc/boot/dts/fsl/elo3-dma-1.dtsi

diff --git a/Documentation/devicetree/bindings/powerpc/fsl/dma.txt b/Documentation/devicetree/bindings/powerpc/fsl/dma.txt
index ed703d9..c9f81b9 100644
--- a/Documentation/devicetree/bindings/powerpc/fsl/dma.txt
+++ b/Documentation/devicetree/bindings/powerpc/fsl/dma.txt
@@ -130,6 +130,72 @@ Example:
 		};
 	};
 
+** Freescale Elo3 DMA Controller
+   This is EloPlus controller with 8 channels, used in Freescale Txxx and Bxxx
+   series chips, such as t1040, t4240, b4860.
+
+Required properties:
+
+- compatible        : must include "fsl,elo3-dma"
+- reg               : <registers mapping for DMA general status reg>
+- ranges            : describes the mapping between the address space of the
+                      DMA channels and the address space of the DMA controller
+
+- DMA channel nodes:
+        - compatible        : must include "fsl,eloplus-dma-channel"
+        - reg               : <registers mapping for channel>
+        - interrupts        : <interrupt mapping for DMA channel IRQ>
+        - interrupt-parent  : optional, if needed for interrupt mapping
+
+Example:
+dma@100300 {
+	#address-cells = <1>;
+	#size-cells = <1>;
+	compatible = "fsl,elo3-dma";
+	reg = <0x100300 0x4 0x100600 0x4>;
+	ranges = <0x0 0x100100 0x500>;
+	dma-channel@0 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x0 0x80>;
+		interrupts = <28 2 0 0>;
+	};
+	dma-channel@80 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x80 0x80>;
+		interrupts = <29 2 0 0>;
+	};
+	dma-channel@100 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x100 0x80>;
+		interrupts = <30 2 0 0>;
+	};
+	dma-channel@180 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x180 0x80>;
+		interrupts = <31 2 0 0>;
+	};
+	dma-channel@300 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x300 0x80>;
+		interrupts = <76 2 0 0>;
+	};
+	dma-channel@380 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x380 0x80>;
+		interrupts = <77 2 0 0>;
+	};
+	dma-channel@400 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x400 0x80>;
+		interrupts = <78 2 0 0>;
+	};
+	dma-channel@480 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x480 0x80>;
+		interrupts = <79 2 0 0>;
+	};
+};
+
 Note on DMA channel compatible properties: The compatible property must say
 "fsl,elo-dma-channel" or "fsl,eloplus-dma-channel" to be used by the Elo DMA
 driver (fsldma).  Any DMA channel used by fsldma cannot be used by another
diff --git a/arch/powerpc/boot/dts/fsl/b4si-post.dtsi b/arch/powerpc/boot/dts/fsl/b4si-post.dtsi
index 7399154..ea53ea1 100644
--- a/arch/powerpc/boot/dts/fsl/b4si-post.dtsi
+++ b/arch/powerpc/boot/dts/fsl/b4si-post.dtsi
@@ -223,13 +223,13 @@
 		reg = <0xe2000 0x1000>;
 	};
 
-/include/ "qoriq-dma-0.dtsi"
+/include/ "elo3-dma-0.dtsi"
 	dma@100300 {
 		fsl,iommu-parent = <&pamu0>;
 		fsl,liodn-reg = <&guts 0x580>; /* DMA1LIODNR */
 	};
 
-/include/ "qoriq-dma-1.dtsi"
+/include/ "elo3-dma-1.dtsi"
 	dma@101300 {
 		fsl,iommu-parent = <&pamu0>;
 		fsl,liodn-reg = <&guts 0x584>; /* DMA2LIODNR */
diff --git a/arch/powerpc/boot/dts/fsl/elo3-dma-0.dtsi b/arch/powerpc/boot/dts/fsl/elo3-dma-0.dtsi
new file mode 100644
index 0000000..69a3277
--- /dev/null
+++ b/arch/powerpc/boot/dts/fsl/elo3-dma-0.dtsi
@@ -0,0 +1,81 @@
+/*
+ * QorIQ DMA device tree stub [ controller @ offset 0x100000 ]
+ *
+ * Copyright 2013 Freescale Semiconductor Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of Freescale Semiconductor nor the
+ *       names of its contributors may be used to endorse or promote products
+ *       derived from this software without specific prior written permission.
+ *
+ *
+ * ALTERNATIVELY, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") as published by the Free Software
+ * Foundation, either version 2 of that License or (at your option) any
+ * later version.
+ *
+ * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+dma0: dma@100300 {
+	#address-cells = <1>;
+	#size-cells = <1>;
+	compatible = "fsl,elo3-dma";
+	reg = <0x100300 0x4 0x100600 0x4>;
+	ranges = <0x0 0x100100 0x500>;
+	dma-channel@0 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x0 0x80>;
+		interrupts = <28 2 0 0>;
+	};
+	dma-channel@80 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x80 0x80>;
+		interrupts = <29 2 0 0>;
+	};
+	dma-channel@100 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x100 0x80>;
+		interrupts = <30 2 0 0>;
+	};
+	dma-channel@180 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x180 0x80>;
+		interrupts = <31 2 0 0>;
+	};
+	dma-channel@300 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x300 0x80>;
+		interrupts = <76 2 0 0>;
+	};
+	dma-channel@380 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x380 0x80>;
+		interrupts = <77 2 0 0>;
+	};
+	dma-channel@400 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x400 0x80>;
+		interrupts = <78 2 0 0>;
+	};
+	dma-channel@480 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x480 0x80>;
+		interrupts = <79 2 0 0>;
+	};
+};
diff --git a/arch/powerpc/boot/dts/fsl/elo3-dma-1.dtsi b/arch/powerpc/boot/dts/fsl/elo3-dma-1.dtsi
new file mode 100644
index 0000000..d410948
--- /dev/null
+++ b/arch/powerpc/boot/dts/fsl/elo3-dma-1.dtsi
@@ -0,0 +1,81 @@
+/*
+ * QorIQ DMA device tree stub [ controller @ offset 0x101000 ]
+ *
+ * Copyright 2013 Freescale Semiconductor Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of Freescale Semiconductor nor the
+ *       names of its contributors may be used to endorse or promote products
+ *       derived from this software without specific prior written permission.
+ *
+ *
+ * ALTERNATIVELY, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") as published by the Free Software
+ * Foundation, either version 2 of that License or (at your option) any
+ * later version.
+ *
+ * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+dma1: dma@101300 {
+	#address-cells = <1>;
+	#size-cells = <1>;
+	compatible = "fsl,elo3-dma";
+	reg = <0x101300 0x4 0x101600 0x4>;
+	ranges = <0x0 0x101100 0x500>;
+	dma-channel@0 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x0 0x80>;
+		interrupts = <32 2 0 0>;
+	};
+	dma-channel@80 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x80 0x80>;
+		interrupts = <33 2 0 0>;
+	};
+	dma-channel@100 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x100 0x80>;
+		interrupts = <34 2 0 0>;
+	};
+	dma-channel@180 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x180 0x80>;
+		interrupts = <35 2 0 0>;
+	};
+	dma-channel@300 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x300 0x80>;
+		interrupts = <80 2 0 0>;
+	};
+	dma-channel@380 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x380 0x80>;
+		interrupts = <81 2 0 0>;
+	};
+	dma-channel@400 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x400 0x80>;
+		interrupts = <82 2 0 0>;
+	};
+	dma-channel@480 {
+		compatible = "fsl,eloplus-dma-channel";
+		reg = <0x480 0x80>;
+		interrupts = <83 2 0 0>;
+	};
+};
diff --git a/arch/powerpc/boot/dts/fsl/t4240si-post.dtsi b/arch/powerpc/boot/dts/fsl/t4240si-post.dtsi
index bd611a9..ec95c60 100644
--- a/arch/powerpc/boot/dts/fsl/t4240si-post.dtsi
+++ b/arch/powerpc/boot/dts/fsl/t4240si-post.dtsi
@@ -387,8 +387,8 @@
 		reg	   = <0xea000 0x4000>;
 	};
 
-/include/ "qoriq-dma-0.dtsi"
-/include/ "qoriq-dma-1.dtsi"
+/include/ "elo3-dma-0.dtsi"
+/include/ "elo3-dma-1.dtsi"
 
 /include/ "qoriq-espi-0.dtsi"
 	spi@110000 {
-- 
1.7.9.5

^ permalink raw reply related

* [PATCH v6 3/3] DMA: Freescale: update driver to support 8-channel DMA engine
From: hongbo.zhang @ 2013-07-26 10:27 UTC (permalink / raw)
  To: vinod.koul, djbw, leoli, scottwood, linuxppc-dev
  Cc: Hongbo Zhang, devicetree, linux-kernel
In-Reply-To: <1374834436-7149-1-git-send-email-hongbo.zhang@freescale.com>

From: Hongbo Zhang <hongbo.zhang@freescale.com>

This patch adds support to 8-channel DMA engine, thus the driver works for both
the new 8-channel and the legacy 4-channel DMA engines.

Signed-off-by: Hongbo Zhang <hongbo.zhang@freescale.com>
---
 drivers/dma/Kconfig  |    9 +++++----
 drivers/dma/fsldma.c |    9 ++++++---
 drivers/dma/fsldma.h |    2 +-
 3 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig
index 6825957..3979c65 100644
--- a/drivers/dma/Kconfig
+++ b/drivers/dma/Kconfig
@@ -89,14 +89,15 @@ config AT_HDMAC
 	  Support the Atmel AHB DMA controller.
 
 config FSL_DMA
-	tristate "Freescale Elo and Elo Plus DMA support"
+	tristate "Freescale Elo series DMA support"
 	depends on FSL_SOC
 	select DMA_ENGINE
 	select ASYNC_TX_ENABLE_CHANNEL_SWITCH
 	---help---
-	  Enable support for the Freescale Elo and Elo Plus DMA controllers.
-	  The Elo is the DMA controller on some 82xx and 83xx parts, and the
-	  Elo Plus is the DMA controller on 85xx and 86xx parts.
+	  Enable support for the Freescale Elo series DMA controllers.
+	  The Elo is the DMA controller on some mpc82xx and mpc83xx parts, the
+	  EloPlus is on mpc85xx and mpc86xx and Pxxx parts, and the Elo3 is on
+	  some Txxx and Bxxx parts.
 
 config MPC512X_DMA
 	tristate "Freescale MPC512x built-in DMA engine support"
diff --git a/drivers/dma/fsldma.c b/drivers/dma/fsldma.c
index 49e8fbd..16a9a48 100644
--- a/drivers/dma/fsldma.c
+++ b/drivers/dma/fsldma.c
@@ -1261,7 +1261,9 @@ static int fsl_dma_chan_probe(struct fsldma_device *fdev,
 	WARN_ON(fdev->feature != chan->feature);
 
 	chan->dev = fdev->dev;
-	chan->id = ((res.start - 0x100) & 0xfff) >> 7;
+	chan->id = (res.start & 0xfff) < 0x300 ?
+		   ((res.start - 0x100) & 0xfff) >> 7 :
+		   ((res.start - 0x200) & 0xfff) >> 7;
 	if (chan->id >= FSL_DMA_MAX_CHANS_PER_DEVICE) {
 		dev_err(fdev->dev, "too many channels for device\n");
 		err = -EINVAL;
@@ -1434,6 +1436,7 @@ static int fsldma_of_remove(struct platform_device *op)
 }
 
 static const struct of_device_id fsldma_of_ids[] = {
+	{ .compatible = "fsl,elo3-dma", },
 	{ .compatible = "fsl,eloplus-dma", },
 	{ .compatible = "fsl,elo-dma", },
 	{}
@@ -1455,7 +1458,7 @@ static struct platform_driver fsldma_of_driver = {
 
 static __init int fsldma_init(void)
 {
-	pr_info("Freescale Elo / Elo Plus DMA driver\n");
+	pr_info("Freescale Elo series DMA driver\n");
 	return platform_driver_register(&fsldma_of_driver);
 }
 
@@ -1467,5 +1470,5 @@ static void __exit fsldma_exit(void)
 subsys_initcall(fsldma_init);
 module_exit(fsldma_exit);
 
-MODULE_DESCRIPTION("Freescale Elo / Elo Plus DMA driver");
+MODULE_DESCRIPTION("Freescale Elo series DMA driver");
 MODULE_LICENSE("GPL");
diff --git a/drivers/dma/fsldma.h b/drivers/dma/fsldma.h
index f5c3879..1ffc244 100644
--- a/drivers/dma/fsldma.h
+++ b/drivers/dma/fsldma.h
@@ -112,7 +112,7 @@ struct fsldma_chan_regs {
 };
 
 struct fsldma_chan;
-#define FSL_DMA_MAX_CHANS_PER_DEVICE 4
+#define FSL_DMA_MAX_CHANS_PER_DEVICE 8
 
 struct fsldma_device {
 	void __iomem *regs;	/* DGSR register base */
-- 
1.7.9.5

^ permalink raw reply related

* Re: [PATCH 5/7] rapidio: add modular build option for the subsystem core
From: Jean Delvare @ 2013-07-26 11:00 UTC (permalink / raw)
  To: Alexandre Bounine
  Cc: Stef van Os, Micha Nelissen, linux-kernel, Andre van Herk,
	Andrew Morton, linuxppc-dev
In-Reply-To: <1372447136-5751-6-git-send-email-alexandre.bounine@idt.com>

Hi Alexandre,

Le Friday 28 June 2013 à 15:18 -0400, Alexandre Bounine a écrit :
> Add a configuration option to build RapidIO subsystem core code as a loadable
> kernel module. Currently this option is available only for x86-based platforms,
> with the additional patch for PowerPC planned to be provided later.
> 
> This patch replaces kernel command line parameter "riohdid=" with its
> module-specific analog "rapidio.hdid=".  
> 
> Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com>
> Cc: Matt Porter <mporter@kernel.crashing.org>
> Cc: Li Yang <leoli@freescale.com>
> Cc: Kumar Gala <galak@kernel.crashing.org>
> Cc: Andre van Herk <andre.van.herk@Prodrive.nl>
> Cc: Micha Nelissen <micha.nelissen@Prodrive.nl>
> Cc: Stef van Os <stef.van.os@Prodrive.nl>
> Cc: Jean Delvare <jdelvare@suse.de>
> ---
>  arch/x86/Kconfig         |    4 ++--
>  drivers/rapidio/Makefile |    4 +++-
>  drivers/rapidio/rio.c    |   27 ++++++++++++++-------------
>  3 files changed, 19 insertions(+), 16 deletions(-)
> 
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index fe120da..583ac42 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -2246,11 +2246,11 @@ source "drivers/pcmcia/Kconfig"
>  source "drivers/pci/hotplug/Kconfig"
>  
>  config RAPIDIO
> -	bool "RapidIO support"
> +	tristate "RapidIO support"

Is there a reason why this was only done for x86 and not for mips and
powerpc?

>  	depends on PCI
>  	default n
>  	help
> -	  If you say Y here, the kernel will include drivers and
> +	  If enabled this option will include drivers and the core
>  	  infrastructure code to support RapidIO interconnect devices.
>  

-- 
Jean Delvare
Suse L3

^ permalink raw reply

* Re: [Suggestion] powerpc: xmon: about 'longjmp' related warning.
From: Chen Gang @ 2013-07-26 11:45 UTC (permalink / raw)
  To: Michael Ellerman
  Cc: Michael Neuling, paulus@samba.org, Andrew Morton,
	linuxppc-dev@lists.ozlabs.org, jovi.zhangwei
In-Reply-To: <51F1F6E3.7040502@asianux.com>

Hello Maintainers:

This reply is the analyzing result for the warning:

  arch/powerpc/xmon/xmon.c:352:48: warning: argument ‘fromipi’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]

I assume: for CONFIG_SMP, the thread within the function can not switch
to another cpus (between local_irq_save and local_irq_restore). If my
assumption is incorrect, please tell me, thanks.

If my assumption is correct, the source code for setjmp() and longjmp()
looks OK to me: they are for checking recurse call, if it finds, it will
jump to outside with the jump buffer which lay on the stack.

For the related warning about 'fromipi' and 'longjmp', it is issue:
'fromipi' is saved in stack '680(r1)'.

The details may be a little complex by compiler's optimization, and
'fromipi' has 3 areas which each is optimized much, need read related
reconstructed code to understand (at least for me, these optimization
are correct).

And the disassembly code below is really a little longer, but they are
still simple enough for understanding (I have given some comments for
them, but not quite in details).


Welcome any additional suggestions or completions.

Thanks.



The related source code (!CONFIG_BOOKE, CONFIG_SMP):

 352 static int xmon_core(struct pt_regs *regs, int fromipi)
 353 {
 354         int cmd = 0;
 355         struct bpt *bp;
 356         long recurse_jmp[JMP_BUF_LEN];
 357         unsigned long offset;
 358         unsigned long flags;
 359 #ifdef CONFIG_SMP
 360         int cpu;
 361         int secondary;
 362         unsigned long timeout;
 363 #endif
 364 
 365         local_irq_save(flags);
 366 
 367         bp = in_breakpoint_table(regs->nip, &offset);
 368         if (bp != NULL) {
 369                 regs->nip = bp->address + offset;
 370                 atomic_dec(&bp->ref_count);
 371         }
 372 
 373         remove_cpu_bpts();
 374 
 375 #ifdef CONFIG_SMP
 376         cpu = smp_processor_id();
 377         if (cpumask_test_cpu(cpu, &cpus_in_xmon)) {
 378                 get_output_lock();
 379                 excprint(regs);
 380                 printf("cpu 0x%x: Exception %lx %s in xmon, "
 381                        "returning to main loop\n",
 382                        cpu, regs->trap, getvecname(TRAP(regs)));
 383                 release_output_lock();
 384                 longjmp(xmon_fault_jmp[cpu], 1);
 385         }
 386 
 387         if (setjmp(recurse_jmp) != 0) {
 388                 if (!in_xmon || !xmon_gate) {
 389                         get_output_lock();
 390                         printf("xmon: WARNING: bad recursive fault "
 391                                "on cpu 0x%x\n", cpu);
 392                         release_output_lock();
 393                         goto waiting;
 394                 }
 395                 secondary = !(xmon_taken && cpu == xmon_owner);
 396                 goto cmdloop;
 397         }
 398 
 399         xmon_fault_jmp[cpu] = recurse_jmp;
 400         cpumask_set_cpu(cpu, &cpus_in_xmon);
 401 
 402         bp = NULL;
 403         if ((regs->msr & (MSR_IR|MSR_PR|MSR_64BIT)) == (MSR_IR|MSR_64BIT))
 404                 bp = at_breakpoint(regs->nip);
 405         if (bp || unrecoverable_excp(regs))
 406                 fromipi = 0;
 407 
 408         if (!fromipi) {
 409                 get_output_lock();
 410                 excprint(regs);
 411                 if (bp) {
 412                         printf("cpu 0x%x stopped at breakpoint 0x%x (",
 413                                cpu, BP_NUM(bp));
 414                         xmon_print_symbol(regs->nip, " ", ")\n");
 415                 }
 416                 if (unrecoverable_excp(regs))
 417                         printf("WARNING: exception is not recoverable, "
 418                                "can't continue\n");
 419                 release_output_lock();
 420         }
 421 
 422  waiting:
 423         secondary = 1;
 424         while (secondary && !xmon_gate) {
 425                 if (in_xmon == 0) {
 426                         if (fromipi)
 427                                 goto leave;
 428                         secondary = test_and_set_bit(0, &in_xmon);
 429                 }
 430                 barrier();
 431         }
 432 
 433         if (!secondary && !xmon_gate) {
 434                 /* we are the first cpu to come in */
 435                 /* interrupt other cpu(s) */
 436                 int ncpus = num_online_cpus();
 437 
 438                 xmon_owner = cpu;
 439                 mb();
 440                 if (ncpus > 1) {
 441                         smp_send_debugger_break();
 442                         /* wait for other cpus to come in */
 443                         for (timeout = 100000000; timeout != 0; --timeout) {
 444                                 if (cpumask_weight(&cpus_in_xmon) >= ncpus)
 445                                         break;
 446                                 barrier();
 447                         }
 448                 }
 449                 remove_bpts();
 450                 disable_surveillance();
 451                 /* for breakpoint or single step, print the current instr. */
 452                 if (bp || TRAP(regs) == 0xd00)
 453                         ppc_inst_dump(regs->nip, 1, 0);
 454                 printf("enter ? for help\n");
 455                 mb();
 456                 xmon_gate = 1;
 457                 barrier();
 458         }
 459 
 460  cmdloop:
 461         while (in_xmon) {
 462                 if (secondary) {
 463                         if (cpu == xmon_owner) {
 464                                 if (!test_and_set_bit(0, &xmon_taken)) {
 465                                         secondary = 0;
 466                                         continue;
 467                                 }
 468                                 /* missed it */
 469                                 while (cpu == xmon_owner)
 470                                         barrier();
 471                         }
 472                         barrier();
 473                 } else {
 474                         cmd = cmds(regs);
 475                         if (cmd != 0) {
 476                                 /* exiting xmon */
 477                                 insert_bpts();
 478                                 xmon_gate = 0;
 479                                 wmb();
 480                                 in_xmon = 0;
 481                                 break;
 482                         }
 483                         /* have switched to some other cpu */
 484                         secondary = 1;
 485                 }
 486         }
 487  leave:
 488         cpumask_clear_cpu(cpu, &cpus_in_xmon);
 489         xmon_fault_jmp[cpu] = NULL;
 490 #else
 491         /* UP is simple... */
 492         if (in_xmon) {
 493                 printf("Exception %lx %s in xmon, returning to main loop\n",
 494                        regs->trap, getvecname(TRAP(regs)));
 495                 longjmp(xmon_fault_jmp[0], 1);
 496         }
 497         if (setjmp(recurse_jmp) == 0) {
 498                 xmon_fault_jmp[0] = recurse_jmp;
 499                 in_xmon = 1;
 500 
 501                 excprint(regs);
 502                 bp = at_breakpoint(regs->nip);
 503                 if (bp) {
 504                         printf("Stopped at breakpoint %x (", BP_NUM(bp));
 505                         xmon_print_symbol(regs->nip, " ", ")\n");
 506                 }
 507                 if (unrecoverable_excp(regs))
 508                         printf("WARNING: exception is not recoverable, "
 509                                "can't continue\n");
 510                 remove_bpts();
 511                 disable_surveillance();
 512                 /* for breakpoint or single step, print the current instr. */
 513                 if (bp || TRAP(regs) == 0xd00)
 514                         ppc_inst_dump(regs->nip, 1, 0);
 515                 printf("enter ? for help\n");
 516         }
 517 
 518         cmd = cmds(regs);
 519 
 520         insert_bpts();
 521         in_xmon = 0;
 522 #endif
 523 
 524 #ifdef CONFIG_BOOKE
 525         if (regs->msr & MSR_DE) {
 526                 bp = at_breakpoint(regs->nip);
 527                 if (bp != NULL) {
 528                         regs->nip = (unsigned long) &bp->instr[0];
 529                         atomic_inc(&bp->ref_count);
 530                 }
 531         }
 532 #else
 533         if ((regs->msr & (MSR_IR|MSR_PR|MSR_64BIT)) == (MSR_IR|MSR_64BIT)) {
 534                 bp = at_breakpoint(regs->nip);
 535                 if (bp != NULL) {
 536                         int stepped = emulate_step(regs, bp->instr[0]);
 537                         if (stepped == 0) {
 538                                 regs->nip = (unsigned long) &bp->instr[0];
 539                                 atomic_inc(&bp->ref_count);
 540                         } else if (stepped < 0) {
 541                                 printf("Couldn't single-step %s instruction\n",
 542                                     (IS_RFID(bp->instr[0])? "rfid": "mtmsrd"));
 543                         }
 544                 }
 545         }
 546 #endif
 547         insert_cpu_bpts();
 548 
 549         local_irq_restore(flags);
 550 
 551         return cmd != 'X' && cmd != EOF;
 552 }


The related disassembly code:

  "make ARCH=powerpc EXTRA_CFLAGS=-W"
  "powerpc64-linux-gnu-objdump -d vmlinux.o > vmlinux.S"
  "gcc version 4.7.1 20120606 (Red Hat 4.7.1-0.1.20120606) (GCC)"
  "GNU objdump version 2.23.51.0.3-1.fc16 20120918"


c0000000000804b0 <.xmon_core>:
c0000000000804b0:	7c 08 02 a6 	mflr    r0
c0000000000804b4:	f9 c1 ff 70 	std     r14,-144(r1)
c0000000000804b8:	f9 e1 ff 78 	std     r15,-136(r1)
c0000000000804bc:	fa 01 ff 80 	std     r16,-128(r1)
c0000000000804c0:	fa 21 ff 88 	std     r17,-120(r1)
c0000000000804c4:	fa 41 ff 90 	std     r18,-112(r1)
c0000000000804c8:	fa 61 ff 98 	std     r19,-104(r1)
c0000000000804cc:	fa 81 ff a0 	std     r20,-96(r1)
c0000000000804d0:	fa a1 ff a8 	std     r21,-88(r1)
c0000000000804d4:	fa c1 ff b0 	std     r22,-80(r1)
c0000000000804d8:	f8 01 00 10 	std     r0,16(r1)
c0000000000804dc:	fa e1 ff b8 	std     r23,-72(r1)
c0000000000804e0:	fb 01 ff c0 	std     r24,-64(r1)
c0000000000804e4:	fb 21 ff c8 	std     r25,-56(r1)
c0000000000804e8:	fb 41 ff d0 	std     r26,-48(r1)
c0000000000804ec:	fb 61 ff d8 	std     r27,-40(r1)
c0000000000804f0:	fb 81 ff e0 	std     r28,-32(r1)
c0000000000804f4:	fb a1 ff e8 	std     r29,-24(r1)
c0000000000804f8:	fb c1 ff f0 	std     r30,-16(r1)
c0000000000804fc:	fb e1 ff f8 	std     r31,-8(r1)
c000000000080500:	f8 21 fd 91 	stdu    r1,-624(r1)
c000000000080504:	f8 61 02 a0 	std     r3,672(r1)		; 672(r1) = parameter regs
c000000000080508:	f8 81 02 a8 	std     r4,680(r1)		; 680(r1) = parameter fromipi

c00000000008050c:	39 20 00 00 	li      r9,0
c000000000080510:	88 cd 02 72 	lbz     r6,626(r13)
c000000000080514:	99 2d 02 72 	stb     r9,626(r13)
c000000000080518:	3d 22 00 0f 	addis   r9,r2,15
c00000000008051c:	39 00 00 00 	li      r8,0
c000000000080520:	39 29 3e 10 	addi    r9,r9,15888
c000000000080524:	f8 c1 01 a8 	std     r6,424(r1)
c000000000080528:	39 29 00 08 	addi    r9,r9,8
c00000000008052c:	f9 01 01 70 	std     r8,368(r1)
c000000000080530:	e8 e1 02 a0 	ld      r7,672(r1)
c000000000080534:	e9 47 01 00 	ld      r10,256(r7)
c000000000080538:	7d 29 50 50 	subf    r9,r9,r10
c00000000008053c:	2b a9 1f ff 	cmpldi  cr7,r9,8191
c000000000080540:	41 9d 00 20 	bgt-    cr7,c000000000080560 <.xmon_core+0xb0>
c000000000080544:	79 29 06 e0 	clrldi  r9,r9,59
c000000000080548:	2f a9 00 08 	cmpdi   cr7,r9,8
c00000000008054c:	41 9e 03 f4 	beq-    cr7,c000000000080940 <.xmon_core+0x490>
c000000000080550:	2f a9 00 0c 	cmpdi   cr7,r9,12
c000000000080554:	41 9e 03 ec 	beq-    cr7,c000000000080940 <.xmon_core+0x490>
c000000000080558:	60 00 00 00 	nop
c00000000008055c:	60 00 00 00 	nop

/* 	remove_cpu_bpts() */
c000000000080560:	39 20 00 00 	li      r9,0
c000000000080564:	38 61 00 70 	addi    r3,r1,112
c000000000080568:	f9 21 00 70 	std     r9,112(r1)
c00000000008056c:	b1 21 00 78 	sth     r9,120(r1)
c000000000080570:	b1 21 00 7a 	sth     r9,122(r1)
c000000000080574:	4b f9 3a 0d 	bl      c000000000013f80 <.set_breakpoint>
c000000000080578:	60 00 00 00 	nop
c00000000008057c:	3d 22 00 0b 	addis   r9,r2,11
c000000000080580:	39 29 69 18 	addi    r9,r9,26904
c000000000080584:	e9 29 00 00 	ld      r9,0(r9)
c000000000080588:	e9 29 00 10 	ld      r9,16(r9)
c00000000008058c:	79 28 e7 e1 	rldicl. r8,r9,28,63
c000000000080590:	41 82 00 0c 	beq-    c00000000008059c <.xmon_core+0xec>
c000000000080594:	39 20 00 00 	li      r9,0
c000000000080598:	7d 32 fb a6 	mtspr   1010,r9

/* 	cpu = smp_processor_id(); */
/*	if (cpumask_test_cpu(cpu, &cpus_in_xmon)) { */
c00000000008059c:	a1 2d 00 0a 	lhz     r9,10(r13)
c0000000000805a0:	3f e2 00 0f 	addis   r31,r2,15
c0000000000805a4:	3b df 3e 10 	addi    r30,r31,15888
c0000000000805a8:	7d 2a 07 b4 	extsw   r10,r9
c0000000000805ac:	39 1e 24 e8 	addi    r8,r30,9448
c0000000000805b0:	79 46 d1 82 	rldicl  r6,r10,58,6
c0000000000805b4:	f9 41 01 78 	std     r10,376(r1)
c0000000000805b8:	78 ca 1f 24 	rldicr  r10,r6,3,60
c0000000000805bc:	55 27 06 be 	clrlwi  r7,r9,26
c0000000000805c0:	7d 48 50 2a 	ldx     r10,r8,r10
c0000000000805c4:	f8 c1 01 88 	std     r6,392(r1)
c0000000000805c8:	90 e1 01 90 	stw     r7,400(r1)
c0000000000805cc:	7d 49 3c 36 	srd     r9,r10,r7
c0000000000805d0:	79 28 07 e1 	clrldi. r8,r9,63
c0000000000805d4:	40 82 2a 6c 	bne-    c000000000083040 <.xmon_core+0x2b90>	; cpumask_test_cpu(cpu, &cpus_in_xmon) == true

/*
 387         if (setjmp(recurse_jmp) != 0) {
 388                 if (!in_xmon || !xmon_gate) {
 389                         get_output_lock();
 390                         printf("xmon: WARNING: bad recursive fault "
 391                                "on cpu 0x%x\n", cpu);
 392                         release_output_lock();
 393                         goto waiting;
 394                 }
 395                 secondary = !(xmon_taken && cpu == xmon_owner);
 396                 goto cmdloop;
 397         }
*/
c0000000000805d8:	38 61 00 70 	addi    r3,r1,112
c0000000000805dc:	4b fa 10 15 	bl      c0000000000215f0 <.setjmp>
c0000000000805e0:	60 00 00 00 	nop
c0000000000805e4:	2f a3 00 00 	cmpdi   cr7,r3,0
c0000000000805e8:	41 9e 02 b8 	beq-    cr7,c0000000000808a0 <.xmon_core+0x3f0>a
c0000000000805ec:	3d 22 00 09 	addis   r9,r2,9
c0000000000805f0:	e9 29 2f 00 	ld      r9,12032(r9)
c0000000000805f4:	2f a9 00 00 	cmpdi   cr7,r9,0
c0000000000805f8:	41 9e 00 18 	beq-    cr7,c000000000080610 <.xmon_core+0x160>
c0000000000805fc:	3d 42 00 0f 	addis   r10,r2,15
c000000000080600:	39 4a 3e 10 	addi    r10,r10,15888
c000000000080604:	81 0a 66 50 	lwz     r8,26192(r10)
c000000000080608:	2f 88 00 00 	cmpwi   cr7,r8,0
c00000000008060c:	40 9e 22 b0 	bne-    cr7,c0000000000828bc <.xmon_core+0x240c>
c000000000080610:	4b ff b2 51 	bl      c00000000007b860 <.get_output_lock>
c000000000080614:	3c 62 ff d4 	addis   r3,r2,-44
c000000000080618:	e8 81 01 78 	ld      r4,376(r1)		; 376(r1) = cpu
c00000000008061c:	38 63 8a e8 	addi    r3,r3,-29976
c000000000080620:	48 00 32 21 	bl      c000000000083840 <.xmon_printf>
c000000000080624:	60 00 00 00 	nop
c000000000080628:	3d 22 00 0f 	addis   r9,r2,15
c00000000008062c:	39 40 00 00 	li      r10,0
c000000000080630:	80 c1 01 90 	lwz     r6,400(r1)
c000000000080634:	91 49 3e 10 	stw     r10,15888(r9)
c000000000080638:	39 20 00 01 	li      r9,1
c00000000008063c:	7d 29 30 36 	sld     r9,r9,r6
c000000000080640:	f9 21 01 80 	std     r9,384(r1)

/*
 426                         if (fromipi)
 427                                 goto leave;
*/
c000000000080644:	e9 21 02 a8 	ld      r9,680(r1)
c000000000080648:	3d 42 00 09 	addis   r10,r2,9
c00000000008064c:	3c e2 00 0f 	addis   r7,r2,15
c000000000080650:	39 4a 2f 00 	addi    r10,r10,12032
c000000000080654:	39 00 00 01 	li      r8,1
c000000000080658:	2f 29 00 00 	cmpdi   cr6,r9,0
c00000000008065c:	48 00 00 2c 	b       c000000000080688 <.xmon_core+0x1d8>


c000000000080660:	40 9a 00 ec 	bne-    cr6,c00000000008074c <.xmon_core+0x29c>
c000000000080664:	7c 20 04 ac 	lwsync
c000000000080668:	7f 80 50 a8 	ldarx   r28,0,r10
c00000000008066c:	7f 89 43 78 	or      r9,r28,r8
c000000000080670:	7d 20 51 ad 	stdcx.  r9,0,r10
c000000000080674:	40 a2 ff f4 	bne-    c000000000080668 <.xmon_core+0x1b8>
c000000000080678:	7c 00 04 ac 	sync    
c00000000008067c:	7b 9c 07 e0 	clrldi  r28,r28,63
c000000000080680:	2f bc 00 00 	cmpdi   cr7,r28,0
c000000000080684:	41 9e 00 2c 	beq-    cr7,c0000000000806b0 <.xmon_core+0x200>
c000000000080688:	39 27 3e 10 	addi    r9,r7,15888
c00000000008068c:	81 29 66 50 	lwz     r9,26192(r9)
c000000000080690:	2f 89 00 00 	cmpwi   cr7,r9,0
c000000000080694:	40 9e 20 0c 	bne-    cr7,c0000000000826a0 <.xmon_core+0x21f0>
c000000000080698:	e9 2a 00 00 	ld      r9,0(r10)
c00000000008069c:	2f a9 00 00 	cmpdi   cr7,r9,0
c0000000000806a0:	41 9e ff c0 	beq+    cr7,c000000000080660 <.xmon_core+0x1b0>
c0000000000806a4:	7d 1c 43 78 	mr      r28,r8
c0000000000806a8:	2f bc 00 00 	cmpdi   cr7,r28,0
c0000000000806ac:	40 9e ff dc 	bne+    cr7,c000000000080688 <.xmon_core+0x1d8>
c0000000000806b0:	3f a2 00 0f 	addis   r29,r2,15
c0000000000806b4:	3b bd 3e 10 	addi    r29,r29,15888
c0000000000806b8:	81 3d 66 50 	lwz     r9,26192(r29)
c0000000000806bc:	2f 89 00 00 	cmpwi   cr7,r9,0
c0000000000806c0:	41 9e 25 c8 	beq-    cr7,c000000000082c88 <.xmon_core+0x27d8>
c0000000000806c4:	3d 22 00 09 	addis   r9,r2,9
c0000000000806c8:	e9 29 2f 00 	ld      r9,12032(r9)

c0000000000806cc:	2f a9 00 00 	cmpdi   cr7,r9,0
c0000000000806d0:	3c c2 ff d4 	addis   r6,r2,-44
c0000000000806d4:	eb 61 01 78 	ld      r27,376(r1)
c0000000000806d8:	3c e2 ff d4 	addis   r7,r2,-44
c0000000000806dc:	3d 02 ff d4 	addis   r8,r2,-44
c0000000000806e0:	3d 42 ff d4 	addis   r10,r2,-44
c0000000000806e4:	39 e7 99 68 	addi    r15,r7,-26264
c0000000000806e8:	3a 28 99 70 	addi    r17,r8,-26256
c0000000000806ec:	3f a2 ff d4 	addis   r29,r2,-44
c0000000000806f0:	3f c2 ff d4 	addis   r30,r2,-44
c0000000000806f4:	38 c6 99 50 	addi    r6,r6,-26288
c0000000000806f8:	39 4a 99 30 	addi    r10,r10,-26320
c0000000000806fc:	fa 21 01 a0 	std     r17,416(r1)
c000000000080700:	3f e2 00 0f 	addis   r31,r2,15
c000000000080704:	7d f1 7b 78 	mr      r17,r15
c000000000080708:	e9 e1 02 a0 	ld      r15,672(r1)
c00000000008070c:	3b bd 8b b8 	addi    r29,r29,-29768
c000000000080710:	3b de 8b c0 	addi    r30,r30,-29760
c000000000080714:	f8 c1 01 98 	std     r6,408(r1)
c000000000080718:	f9 41 01 b0 	std     r10,432(r1)
c00000000008071c:	41 9e 00 30 	beq-    cr7,c00000000008074c <.xmon_core+0x29c>
c000000000080720:	2f bc 00 00 	cmpdi   cr7,r28,0
c000000000080724:	39 3f 3e 10 	addi    r9,r31,15888
c000000000080728:	41 9e 02 c8 	beq-    cr7,c0000000000809f0 <.xmon_core+0x540>
c00000000008072c:	81 49 66 54 	lwz     r10,26196(r9)
c000000000080730:	7f 8a d8 00 	cmpw    cr7,r10,r27
c000000000080734:	41 9e 02 5c 	beq-    cr7,c000000000080990 <.xmon_core+0x4e0>
c000000000080738:	3b 80 00 01 	li      r28,1
c00000000008073c:	3d 22 00 09 	addis   r9,r2,9
c000000000080740:	e9 29 2f 00 	ld      r9,12032(r9)
c000000000080744:	2f a9 00 00 	cmpdi   cr7,r9,0
c000000000080748:	40 9e ff d8 	bne+    cr7,c000000000080720 <.xmon_core+0x270>

/*
 487  leave:
 488         cpumask_clear_cpu(cpu, &cpus_in_xmon);
 489         xmon_fault_jmp[cpu] = NULL;
*/
c00000000008074c:	3b 80 00 00 	li      r28,0
c000000000080750:	e8 c1 01 88 	ld      r6,392(r1)
c000000000080754:	3d 42 00 0f 	addis   r10,r2,15
c000000000080758:	e8 e1 01 80 	ld      r7,384(r1)
c00000000008075c:	39 4a 3e 10 	addi    r10,r10,15888
c000000000080760:	39 0a 24 e8 	addi    r8,r10,9448
c000000000080764:	78 c9 1f 24 	rldicr  r9,r6,3,60
c000000000080768:	7d 28 4a 14 	add     r9,r8,r9
c00000000008076c:	7d 00 48 a8 	ldarx   r8,0,r9
c000000000080770:	7d 08 38 78 	andc    r8,r8,r7
c000000000080774:	7d 00 49 ad 	stdcx.  r8,0,r9
c000000000080778:	40 a2 ff f4 	bne-    c00000000008076c <.xmon_core+0x2bc>
c00000000008077c:	e9 21 02 a0 	ld      r9,672(r1)
c000000000080780:	3d 00 80 00 	lis     r8,-32768
c000000000080784:	e8 c1 01 78 	ld      r6,376(r1)
c000000000080788:	79 08 07 c6 	rldicr  r8,r8,32,31
c00000000008078c:	e8 e9 01 08 	ld      r7,264(r9)
c000000000080790:	3d 20 80 00 	lis     r9,-32768
c000000000080794:	61 08 40 20 	ori     r8,r8,16416
c000000000080798:	79 29 07 c6 	rldicr  r9,r9,32,31
c00000000008079c:	7c e8 40 38 	and     r8,r7,r8
c0000000000807a0:	61 29 00 20 	ori     r9,r9,32
c0000000000807a4:	7f a8 48 00 	cmpd    cr7,r8,r9
c0000000000807a8:	78 c7 1f 24 	rldicr  r7,r6,3,60
c0000000000807ac:	7c ea 3a 14 	add     r7,r10,r7
c0000000000807b0:	38 c0 00 00 	li      r6,0
c0000000000807b4:	f8 c7 26 50 	std     r6,9808(r7)		; xmon_fault_jmp[cpu] = NULL;

/*
 533         if ((regs->msr & (MSR_IR|MSR_PR|MSR_64BIT)) == (MSR_IR|MSR_64BIT)) {
*/
c0000000000807b8:	41 9e 1f 34 	beq-    cr7,c0000000000826ec <.xmon_core+0x223c>
/*
 547         insert_cpu_bpts();
*/
c0000000000807bc:	3d 42 00 0f 	addis   r10,r2,15
c0000000000807c0:	39 4a 3e 10 	addi    r10,r10,15888
c0000000000807c4:	81 2a 66 fc 	lwz     r9,26364(r10)
c0000000000807c8:	2f 89 00 00 	cmpwi   cr7,r9,0
c0000000000807cc:	40 9e 1e f4 	bne-    cr7,c0000000000826c0 <.xmon_core+0x2210>
c0000000000807d0:	3d 22 00 0f 	addis   r9,r2,15
c0000000000807d4:	39 29 3e 10 	addi    r9,r9,15888
c0000000000807d8:	e9 29 67 08 	ld      r9,26376(r9)
c0000000000807dc:	2f a9 00 00 	cmpdi   cr7,r9,0
c0000000000807e0:	41 9e 00 30 	beq-    cr7,c000000000080810 <.xmon_core+0x360>
c0000000000807e4:	3d 42 00 0b 	addis   r10,r2,11
c0000000000807e8:	39 4a 69 18 	addi    r10,r10,26904
c0000000000807ec:	e9 4a 00 00 	ld      r10,0(r10)
c0000000000807f0:	e9 4a 00 10 	ld      r10,16(r10)
c0000000000807f4:	79 46 e7 e1 	rldicl. r6,r10,28,63
c0000000000807f8:	41 82 00 18 	beq-    c000000000080810 <.xmon_core+0x360>
c0000000000807fc:	81 49 00 14 	lwz     r10,20(r9)
c000000000080800:	e9 29 00 00 	ld      r9,0(r9)
c000000000080804:	79 4a 07 a0 	clrldi  r10,r10,62
c000000000080808:	7d 49 4b 78 	or      r9,r10,r9
c00000000008080c:	7d 32 fb a6 	mtspr   1010,r9

/*
 549         local_irq_restore(flags);
*/
c000000000080810:	e8 e1 01 a8 	ld      r7,424(r1)
c000000000080814:	2f a7 00 00 	cmpdi   cr7,r7,0
c000000000080818:	40 9e 01 60 	bne-    cr7,c000000000080978 <.xmon_core+0x4c8>
c00000000008081c:	38 60 00 00 	li      r3,0
c000000000080820:	4b f8 f3 81 	bl      c00000000000fba0 <.arch_local_irq_restore>
c000000000080824:	60 00 00 00 	nop
c000000000080828:	2f 9c 00 58 	cmpwi   cr7,r28,88
c00000000008082c:	38 60 00 00 	li      r3,0
c000000000080830:	41 9e 00 18 	beq-    cr7,c000000000080848 <.xmon_core+0x398>
c000000000080834:	3b 9c 00 01 	addi    r28,r28,1
c000000000080838:	7f 9c 00 34 	cntlzw  r28,r28
c00000000008083c:	57 9c d9 7e 	rlwinm  r28,r28,27,5,31
c000000000080840:	6b 83 00 01 	xori    r3,r28,1
c000000000080844:	7c 63 07 b4 	extsw   r3,r3
c000000000080848:	38 21 02 70 	addi    r1,r1,624
c00000000008084c:	e8 01 00 10 	ld      r0,16(r1)
c000000000080850:	e9 c1 ff 70 	ld      r14,-144(r1)
c000000000080854:	e9 e1 ff 78 	ld      r15,-136(r1)
c000000000080858:	ea 01 ff 80 	ld      r16,-128(r1)
c00000000008085c:	7c 08 03 a6 	mtlr    r0
c000000000080860:	ea 21 ff 88 	ld      r17,-120(r1)
c000000000080864:	ea 41 ff 90 	ld      r18,-112(r1)
c000000000080868:	ea 61 ff 98 	ld      r19,-104(r1)
c00000000008086c:	ea 81 ff a0 	ld      r20,-96(r1)
c000000000080870:	ea a1 ff a8 	ld      r21,-88(r1)
c000000000080874:	ea c1 ff b0 	ld      r22,-80(r1)
c000000000080878:	ea e1 ff b8 	ld      r23,-72(r1)
c00000000008087c:	eb 01 ff c0 	ld      r24,-64(r1)
c000000000080880:	eb 21 ff c8 	ld      r25,-56(r1)
c000000000080884:	eb 41 ff d0 	ld      r26,-48(r1)
c000000000080888:	eb 61 ff d8 	ld      r27,-40(r1)
c00000000008088c:	eb 81 ff e0 	ld      r28,-32(r1)
c000000000080890:	eb a1 ff e8 	ld      r29,-24(r1)
c000000000080894:	eb c1 ff f0 	ld      r30,-16(r1)
c000000000080898:	eb e1 ff f8 	ld      r31,-8(r1)
c00000000008089c:	4e 80 00 20 	blr
/* } // Function end */









/*
 399         xmon_fault_jmp[cpu] = recurse_jmp;
 400         cpumask_set_cpu(cpu, &cpus_in_xmon);
 401 
 402         bp = NULL;
 403         if ((regs->msr & (MSR_IR|MSR_PR|MSR_64BIT)) == (MSR_IR|MSR_64BIT))
 404                 bp = at_breakpoint(regs->nip);
 405         if (bp || unrecoverable_excp(regs))
 406                 fromipi = 0;
*/
c0000000000808a0:	e9 01 01 78 	ld      r8,376(r1)		; 376(r1) = cpu
c0000000000808a4:	e8 c1 01 88 	ld      r6,392(r1)
c0000000000808a8:	3d 42 00 0f 	addis   r10,r2,15
c0000000000808ac:	39 4a 3e 10 	addi    r10,r10,15888
c0000000000808b0:	79 07 1f 24 	rldicr  r7,r8,3,60
c0000000000808b4:	78 c9 1f 24 	rldicr  r9,r6,3,60
c0000000000808b8:	7c ea 3a 14 	add     r7,r10,r7
c0000000000808bc:	38 c1 00 70 	addi    r6,r1,112
c0000000000808c0:	f8 c7 26 50 	std     r6,9808(r7)		; xmon_fault_jmp[cpu] = recurse_jmp;
c0000000000808c4:	80 c1 01 90 	lwz     r6,400(r1)
c0000000000808c8:	38 e0 00 01 	li      r7,1
c0000000000808cc:	39 0a 24 e8 	addi    r8,r10,9448
c0000000000808d0:	7c e7 30 36 	sld     r7,r7,r6
c0000000000808d4:	7d 28 4a 14 	add     r9,r8,r9
c0000000000808d8:	f8 e1 01 80 	std     r7,384(r1)
c0000000000808dc:	7d 00 48 a8 	ldarx   r8,0,r9
c0000000000808e0:	7d 08 3b 78 	or      r8,r8,r7
c0000000000808e4:	7d 00 49 ad 	stdcx.  r8,0,r9
c0000000000808e8:	40 a2 ff f4 	bne-    c0000000000808dc <.xmon_core+0x42c>
c0000000000808ec:	e9 21 02 a0 	ld      r9,672(r1)
c0000000000808f0:	3d 00 80 00 	lis     r8,-32768
c0000000000808f4:	38 c0 00 00 	li      r6,0
c0000000000808f8:	79 08 07 c6 	rldicr  r8,r8,32,31
c0000000000808fc:	f8 c1 01 70 	std     r6,368(r1)
c000000000080900:	e8 e9 01 08 	ld      r7,264(r9)
c000000000080904:	3d 20 80 00 	lis     r9,-32768
c000000000080908:	61 08 40 20 	ori     r8,r8,16416
c00000000008090c:	79 29 07 c6 	rldicr  r9,r9,32,31
c000000000080910:	7c e8 40 38 	and     r8,r7,r8
c000000000080914:	61 29 00 20 	ori     r9,r9,32
c000000000080918:	7f a8 48 00 	cmpd    cr7,r8,r9
c00000000008091c:	41 9e 1f cc 	beq-    cr7,c0000000000828e8 <.xmon_core+0x2438>	; call bp = at_breakpoint(regs->nip);
c000000000080920:	78 e9 ff e3 	rldicl. r9,r7,63,63
c000000000080924:	41 82 20 1c 	beq-    c000000000082940 <.xmon_core+0x2490>
/*
 408         if (!fromipi) {
*/
c000000000080928:	e9 41 02 a8 	ld      r10,680(r1)
c00000000008092c:	2f aa 00 00 	cmpdi   cr7,r10,0
c000000000080930:	40 9e fd 14 	bne+    cr7,c000000000080644 <.xmon_core+0x194>
c000000000080934:	48 00 20 0c 	b       c000000000082940 <.xmon_core+0x2490>
c000000000080938:	60 00 00 00 	nop
c00000000008093c:	60 00 00 00 	nop

/*
 671 static struct bpt *in_breakpoint_table(unsigned long nip, unsigned long *offp)
*/
c000000000080940:	7c c9 50 51 	subf.   r6,r9,r10
c000000000080944:	f8 c1 01 70 	std     r6,368(r1)
c000000000080948:	41 a2 fc 18 	beq-    c000000000080560 <.xmon_core+0xb0>
c00000000008094c:	e9 06 00 00 	ld      r8,0(r6)
c000000000080950:	e8 e1 02 a0 	ld      r7,672(r1)
c000000000080954:	39 46 00 10 	addi    r10,r6,16
c000000000080958:	39 08 ff f8 	addi    r8,r8,-8
c00000000008095c:	7d 28 4a 14 	add     r9,r8,r9
c000000000080960:	f9 27 01 00 	std     r9,256(r7)
c000000000080964:	7d 20 50 28 	lwarx   r9,0,r10
c000000000080968:	31 29 ff ff 	addic   r9,r9,-1
c00000000008096c:	7d 20 51 2d 	stwcx.  r9,0,r10
c000000000080970:	40 a2 ff f4 	bne-    c000000000080964 <.xmon_core+0x4b4>
c000000000080974:	4b ff fb ec 	b       c000000000080560 <.xmon_core+0xb0>


/*
 549         local_irq_restore(flags);
*/
c000000000080978:	e8 61 01 a8 	ld      r3,424(r1)
c00000000008097c:	4b f8 f2 25 	bl      c00000000000fba0 <.arch_local_irq_restore>
c000000000080980:	60 00 00 00 	nop
c000000000080984:	4b ff fe a4 	b       c000000000080828 <.xmon_core+0x378>
c000000000080988:	60 00 00 00 	nop
c00000000008098c:	60 00 00 00 	nop


c000000000080990:	3d 02 ff ed 	addis   r8,r2,-19
c000000000080994:	39 40 00 01 	li      r10,1
c000000000080998:	39 08 44 e8 	addi    r8,r8,17640
c00000000008099c:	39 08 00 28 	addi    r8,r8,40
c0000000000809a0:	7c 20 04 ac 	lwsync
c0000000000809a4:	7c e0 40 a8 	ldarx   r7,0,r8
c0000000000809a8:	7c e6 53 78 	or      r6,r7,r10
c0000000000809ac:	7c c0 41 ad 	stdcx.  r6,0,r8
c0000000000809b0:	40 a2 ff f4 	bne-    c0000000000809a4 <.xmon_core+0x4f4>
c0000000000809b4:	7c 00 04 ac 	sync    
c0000000000809b8:	78 ea 07 e1 	clrldi. r10,r7,63
c0000000000809bc:	3b 80 00 00 	li      r28,0
c0000000000809c0:	41 82 fd 7c 	beq+    c00000000008073c <.xmon_core+0x28c>
c0000000000809c4:	48 00 00 10 	b       c0000000000809d4 <.xmon_core+0x524>
c0000000000809c8:	60 00 00 00 	nop
c0000000000809cc:	60 00 00 00 	nop


c0000000000809d0:	39 3f 3e 10 	addi    r9,r31,15888
c0000000000809d4:	81 29 66 54 	lwz     r9,26196(r9)
c0000000000809d8:	7f 89 d8 00 	cmpw    cr7,r9,r27
c0000000000809dc:	41 9e ff f4 	beq+    cr7,c0000000000809d0 <.xmon_core+0x520>
c0000000000809e0:	4b ff fd 58 	b       c000000000080738 <.xmon_core+0x288>
c0000000000809e4:	60 00 00 00 	nop
c0000000000809e8:	60 00 00 00 	nop
c0000000000809ec:	60 00 00 00 	nop

/*
 787 static int
 788 cmds(struct pt_regs *excp)
 789 {
*/
c0000000000809f0:	81 49 24 e0 	lwz     r10,9440(r9)
c0000000000809f4:	fb 89 26 38 	std     r28,9784(r9)
c0000000000809f8:	f9 e9 25 e8 	std     r15,9704(r9)
c0000000000809fc:	2f 8a 00 00 	cmpwi   cr7,r10,0
c000000000080a00:	41 9e 0f b0 	beq-    cr7,c0000000000819b0 <.xmon_core+0x1500>
c000000000080a04:	3d 22 ff d4 	addis   r9,r2,-44
c000000000080a08:	3a 49 99 18 	addi    r18,r9,-26344
c000000000080a0c:	60 00 00 00 	nop

/* 
 800         for(;;) {
*/
/*
 801 #ifdef CONFIG_SMP
 802                 printf("%x:", smp_processor_id());
 803 #endif \* CONFIG_SMP *\
 804                 printf("mon> ");
 805                 flush_input();
 806                 termch = 0;
 807                 cmd = skipbl();
*/
c000000000080a10:	a0 8d 00 0a 	lhz     r4,10(r13)
c000000000080a14:	7f a3 eb 78 	mr      r3,r29
c000000000080a18:	3b 5f 3e 10 	addi    r26,r31,15888
c000000000080a1c:	3b 20 00 00 	li      r25,0
c000000000080a20:	48 00 2e 21 	bl      c000000000083840 <.xmon_printf>
c000000000080a24:	60 00 00 00 	nop
c000000000080a28:	7f c3 f3 78 	mr      r3,r30
c000000000080a2c:	48 00 2e 15 	bl      c000000000083840 <.xmon_printf>
c000000000080a30:	60 00 00 00 	nop
c000000000080a34:	fb 3a 24 d0 	std     r25,9424(r26)
c000000000080a38:	93 3a 24 d8 	stw     r25,9432(r26)
c000000000080a3c:	4b ff e9 25 	bl      c00000000007f360 <.skipbl>
/*
 808                 if( cmd == '\n' ) {
*/
c000000000080a40:	2f 83 00 0a 	cmpwi   cr7,r3,10
c000000000080a44:	7c 7c 1b 78 	mr      r28,r3
c000000000080a48:	41 9e 00 b8 	beq-    cr7,c000000000080b00 <.xmon_core+0x650>
c000000000080a4c:	39 3c 00 01 	addi    r9,r28,1
c000000000080a50:	2b 89 00 7b 	cmplwi  cr7,r9,123
c000000000080a54:	40 9d 00 d4 	ble-    cr7,c000000000080b28 <.xmon_core+0x678>

/*
 904                 default:
 905                         printf("Unrecognized command: ");
 906                         do {
 907                                 if (' ' < cmd && cmd <= '~')
 908                                         putchar(cmd);
 909                                 else
 910                                         printf("\\x%x", cmd);
 911                                 cmd = inchar();
 912                         } while (cmd != '\n');
 913                         printf(" (type ? for help)\n");
 914                         break;
 915                 }
*/
c000000000080a58:	e8 61 01 98 	ld      r3,408(r1)
c000000000080a5c:	48 00 2d e5 	bl      c000000000083840 <.xmon_printf>
c000000000080a60:	60 00 00 00 	nop
c000000000080a64:	7f 84 e3 78 	mr      r4,r28
c000000000080a68:	48 00 00 24 	b       c000000000080a8c <.xmon_core+0x5dc>
c000000000080a6c:	60 00 00 00 	nop
c000000000080a70:	7c 83 23 78 	mr      r3,r4
c000000000080a74:	48 00 2a dd 	bl      c000000000083550 <.xmon_putchar>
c000000000080a78:	60 00 00 00 	nop
c000000000080a7c:	4b ff e2 75 	bl      c00000000007ecf0 <.inchar>
c000000000080a80:	2f 83 00 0a 	cmpwi   cr7,r3,10
c000000000080a84:	7c 64 1b 78 	mr      r4,r3
c000000000080a88:	41 9e 00 2c 	beq-    cr7,c000000000080ab4 <.xmon_core+0x604>
c000000000080a8c:	39 24 ff df 	addi    r9,r4,-33
c000000000080a90:	2b 89 00 5d 	cmplwi  cr7,r9,93
c000000000080a94:	40 9d ff dc 	ble+    cr7,c000000000080a70 <.xmon_core+0x5c0>
c000000000080a98:	7e 23 8b 78 	mr      r3,r17
c000000000080a9c:	48 00 2d a5 	bl      c000000000083840 <.xmon_printf>
c000000000080aa0:	60 00 00 00 	nop
c000000000080aa4:	4b ff e2 4d 	bl      c00000000007ecf0 <.inchar>
c000000000080aa8:	2f 83 00 0a 	cmpwi   cr7,r3,10
c000000000080aac:	7c 64 1b 78 	mr      r4,r3
c000000000080ab0:	40 9e ff dc 	bne+    cr7,c000000000080a8c <.xmon_core+0x5dc>
c000000000080ab4:	e8 61 01 a0 	ld      r3,416(r1)
c000000000080ab8:	3b 5f 3e 10 	addi    r26,r31,15888
c000000000080abc:	3b 20 00 00 	li      r25,0
c000000000080ac0:	48 00 2d 81 	bl      c000000000083840 <.xmon_printf>
c000000000080ac4:	60 00 00 00 	nop

/*
 801 #ifdef CONFIG_SMP
 802                 printf("%x:", smp_processor_id());
 803 #endif \* CONFIG_SMP *\
 804                 printf("mon> ");
 805                 flush_input();
 806                 termch = 0;
 807                 cmd = skipbl();
 808                 if( cmd == '\n' ) {
*/
c000000000080ac8:	7f a3 eb 78 	mr      r3,r29
c000000000080acc:	a0 8d 00 0a 	lhz     r4,10(r13)
c000000000080ad0:	48 00 2d 71 	bl      c000000000083840 <.xmon_printf>
c000000000080ad4:	60 00 00 00 	nop
c000000000080ad8:	7f c3 f3 78 	mr      r3,r30
c000000000080adc:	48 00 2d 65 	bl      c000000000083840 <.xmon_printf>
c000000000080ae0:	60 00 00 00 	nop
c000000000080ae4:	fb 3a 24 d0 	std     r25,9424(r26)
c000000000080ae8:	93 3a 24 d8 	stw     r25,9432(r26)
c000000000080aec:	4b ff e8 75 	bl      c00000000007f360 <.skipbl>
c000000000080af0:	2f 83 00 0a 	cmpwi   cr7,r3,10
c000000000080af4:	7c 7c 1b 78 	mr      r28,r3
c000000000080af8:	40 9e ff 54 	bne+    cr7,c000000000080a4c <.xmon_core+0x59c>
c000000000080afc:	60 00 00 00 	nop

/*
 809                         if (last_cmd == NULL)
 810                                 continue;
 811                         take_input(last_cmd);
 812                         last_cmd = NULL;
 813                         cmd = inchar();
 814                 }
*/
c000000000080b00:	e9 3a 26 38 	ld      r9,9784(r26)
c000000000080b04:	2f a9 00 00 	cmpdi   cr7,r9,0
c000000000080b08:	41 9e ff 08 	beq+    cr7,c000000000080a10 <.xmon_core+0x560>
c000000000080b0c:	f9 3a 24 d0 	std     r9,9424(r26)
c000000000080b10:	fb 3a 26 38 	std     r25,9784(r26)
c000000000080b14:	4b ff e1 dd 	bl      c00000000007ecf0 <.inchar>
/*
 815                 switch (cmd) {
*/
c000000000080b18:	7c 7c 1b 78 	mr      r28,r3
c000000000080b1c:	39 3c 00 01 	addi    r9,r28,1
c000000000080b20:	2b 89 00 7b 	cmplwi  cr7,r9,123
c000000000080b24:	41 9d ff 34 	bgt+    cr7,c000000000080a58 <.xmon_core+0x5a8>

c000000000080b28:	3d 42 ff 33 	addis   r10,r2,-205
c000000000080b2c:	79 29 17 88 	rldic   r9,r9,2,30
c000000000080b30:	39 4a f2 5c 	addi    r10,r10,-3492
c000000000080b34:	7d 2a 4a aa 	lwax    r9,r10,r9
c000000000080b38:	7d 49 52 14 	add     r10,r9,r10
c000000000080b3c:	7d 49 03 a6 	mtctr   r10
c000000000080b40:	4e 80 04 20 	bctr
c000000000080b44:	00 00 03 8c 	.long 0x38c
c000000000080b48:	ff ff ff 14 	.long 0xffffff14
c000000000080b4c:	ff ff ff 14 	.long 0xffffff14
c000000000080b50:	ff ff ff 14 	.long 0xffffff14
c000000000080b54:	ff ff ff 14 	.long 0xffffff14
c000000000080b58:	ff ff ff 14 	.long 0xffffff14
c000000000080b5c:	ff ff ff 14 	.long 0xffffff14
c000000000080b60:	ff ff ff 14 	.long 0xffffff14
c000000000080b64:	ff ff ff 14 	.long 0xffffff14
c000000000080b68:	ff ff ff 14 	.long 0xffffff14
c000000000080b6c:	ff ff ff 14 	.long 0xffffff14
c000000000080b70:	ff ff ff 14 	.long 0xffffff14
c000000000080b74:	ff ff ff 14 	.long 0xffffff14
c000000000080b78:	ff ff ff 14 	.long 0xffffff14
c000000000080b7c:	ff ff ff 14 	.long 0xffffff14
c000000000080b80:	ff ff ff 14 	.long 0xffffff14
c000000000080b84:	ff ff ff 14 	.long 0xffffff14
c000000000080b88:	ff ff ff 14 	.long 0xffffff14
c000000000080b8c:	ff ff ff 14 	.long 0xffffff14
c000000000080b90:	ff ff ff 14 	.long 0xffffff14
c000000000080b94:	ff ff ff 14 	.long 0xffffff14
c000000000080b98:	ff ff ff 14 	.long 0xffffff14
c000000000080b9c:	ff ff ff 14 	.long 0xffffff14
c000000000080ba0:	ff ff ff 14 	.long 0xffffff14
c000000000080ba4:	ff ff ff 14 	.long 0xffffff14
c000000000080ba8:	ff ff ff 14 	.long 0xffffff14
c000000000080bac:	ff ff ff 14 	.long 0xffffff14
c000000000080bb0:	ff ff ff 14 	.long 0xffffff14
c000000000080bb4:	ff ff ff 14 	.long 0xffffff14
c000000000080bb8:	ff ff ff 14 	.long 0xffffff14
c000000000080bbc:	ff ff ff 14 	.long 0xffffff14
c000000000080bc0:	ff ff ff 14 	.long 0xffffff14
c000000000080bc4:	ff ff ff 14 	.long 0xffffff14
c000000000080bc8:	ff ff ff 14 	.long 0xffffff14
c000000000080bcc:	ff ff ff 14 	.long 0xffffff14
c000000000080bd0:	ff ff ff 14 	.long 0xffffff14
c000000000080bd4:	ff ff ff 14 	.long 0xffffff14
c000000000080bd8:	ff ff ff 14 	.long 0xffffff14
c000000000080bdc:	ff ff ff 14 	.long 0xffffff14
c000000000080be0:	ff ff ff 14 	.long 0xffffff14
c000000000080be4:	ff ff ff 14 	.long 0xffffff14
c000000000080be8:	ff ff ff 14 	.long 0xffffff14
c000000000080bec:	ff ff ff 14 	.long 0xffffff14
c000000000080bf0:	ff ff ff 14 	.long 0xffffff14
c000000000080bf4:	ff ff ff 14 	.long 0xffffff14
c000000000080bf8:	ff ff ff 14 	.long 0xffffff14
c000000000080bfc:	ff ff ff 14 	.long 0xffffff14
c000000000080c00:	ff ff ff 14 	.long 0xffffff14
c000000000080c04:	ff ff ff 14 	.long 0xffffff14
c000000000080c08:	ff ff ff 14 	.long 0xffffff14
c000000000080c0c:	ff ff ff 14 	.long 0xffffff14
c000000000080c10:	ff ff ff 14 	.long 0xffffff14
c000000000080c14:	ff ff ff 14 	.long 0xffffff14
c000000000080c18:	ff ff ff 14 	.long 0xffffff14
c000000000080c1c:	ff ff ff 14 	.long 0xffffff14
c000000000080c20:	ff ff ff 14 	.long 0xffffff14
c000000000080c24:	ff ff ff 14 	.long 0xffffff14
c000000000080c28:	ff ff ff 14 	.long 0xffffff14
c000000000080c2c:	ff ff ff 14 	.long 0xffffff14
c000000000080c30:	ff ff ff 14 	.long 0xffffff14
c000000000080c34:	ff ff ff 14 	.long 0xffffff14
c000000000080c38:	ff ff ff 14 	.long 0xffffff14
c000000000080c3c:	ff ff ff 14 	.long 0xffffff14
c000000000080c40:	ff ff ff 14 	.long 0xffffff14
c000000000080c44:	00 00 03 6c 	.long 0x36c
c000000000080c48:	ff ff ff 14 	.long 0xffffff14
c000000000080c4c:	ff ff ff 14 	.long 0xffffff14
c000000000080c50:	ff ff ff 14 	.long 0xffffff14
c000000000080c54:	00 00 03 bc 	.long 0x3bc
c000000000080c58:	ff ff ff 14 	.long 0xffffff14
c000000000080c5c:	ff ff ff 14 	.long 0xffffff14
c000000000080c60:	ff ff ff 14 	.long 0xffffff14
c000000000080c64:	ff ff ff 14 	.long 0xffffff14
c000000000080c68:	ff ff ff 14 	.long 0xffffff14
c000000000080c6c:	ff ff ff 14 	.long 0xffffff14
c000000000080c70:	ff ff ff 14 	.long 0xffffff14
c000000000080c74:	ff ff ff 14 	.long 0xffffff14
c000000000080c78:	ff ff ff 14 	.long 0xffffff14
c000000000080c7c:	ff ff ff 14 	.long 0xffffff14
c000000000080c80:	ff ff ff 14 	.long 0xffffff14
c000000000080c84:	ff ff ff 14 	.long 0xffffff14
c000000000080c88:	ff ff ff 14 	.long 0xffffff14
c000000000080c8c:	ff ff ff 14 	.long 0xffffff14
c000000000080c90:	ff ff ff 14 	.long 0xffffff14
c000000000080c94:	00 00 03 2c 	.long 0x32c
c000000000080c98:	ff ff ff 14 	.long 0xffffff14
c000000000080c9c:	ff ff ff 14 	.long 0xffffff14
c000000000080ca0:	ff ff ff 14 	.long 0xffffff14
c000000000080ca4:	ff ff ff 14 	.long 0xffffff14
c000000000080ca8:	00 00 02 4c 	.long 0x24c
c000000000080cac:	ff ff ff 14 	.long 0xffffff14
c000000000080cb0:	ff ff ff 14 	.long 0xffffff14
c000000000080cb4:	ff ff ff 14 	.long 0xffffff14
c000000000080cb8:	ff ff ff 14 	.long 0xffffff14
c000000000080cbc:	ff ff ff 14 	.long 0xffffff14
c000000000080cc0:	ff ff ff 14 	.long 0xffffff14
c000000000080cc4:	ff ff ff 14 	.long 0xffffff14
c000000000080cc8:	ff ff ff 14 	.long 0xffffff14
c000000000080ccc:	ff ff ff 14 	.long 0xffffff14
c000000000080cd0:	00 00 0b 8c 	.long 0xb8c
c000000000080cd4:	00 00 0a ec 	.long 0xaec
c000000000080cd8:	00 00 0a 0c 	.long 0xa0c
c000000000080cdc:	00 00 09 fc 	.long 0x9fc
c000000000080ce0:	00 00 09 ec 	.long 0x9ec
c000000000080ce4:	ff ff ff 14 	.long 0xffffff14
c000000000080ce8:	ff ff ff 14 	.long 0xffffff14
c000000000080cec:	ff ff ff 14 	.long 0xffffff14
c000000000080cf0:	ff ff ff 14 	.long 0xffffff14
c000000000080cf4:	ff ff ff 14 	.long 0xffffff14
c000000000080cf8:	00 00 09 dc 	.long 0x9dc
c000000000080cfc:	00 00 05 1c 	.long 0x51c
c000000000080d00:	ff ff ff 14 	.long 0xffffff14
c000000000080d04:	ff ff ff 14 	.long 0xffffff14
c000000000080d08:	00 00 05 0c 	.long 0x50c
c000000000080d0c:	ff ff ff 14 	.long 0xffffff14
c000000000080d10:	00 00 0c fc 	.long 0xcfc
c000000000080d14:	00 00 01 fc 	.long 0x1fc
c000000000080d18:	00 00 0c cc 	.long 0xccc
c000000000080d1c:	00 00 04 fc 	.long 0x4fc
c000000000080d20:	ff ff ff 14 	.long 0xffffff14
c000000000080d24:	ff ff ff 14 	.long 0xffffff14
c000000000080d28:	00 00 02 4c 	.long 0x24c
c000000000080d2c:	ff ff ff 14 	.long 0xffffff14
c000000000080d30:	00 00 04 ac 	.long 0x4ac
c000000000080d34:	60 00 00 00 	nop
c000000000080d38:	60 00 00 00 	nop
c000000000080d3c:	60 00 00 00 	nop
 816                 case 'm':
 817                         cmd = inchar();
 818                         switch (cmd) {
 819                         case 'm':
 820                         case 's':
 821                         case 'd':
 822                                 memops(cmd);
 823                                 break;
 824                         case 'l':
 825                                 memlocate();
 826                                 break;
 827                         case 'z':
 828                                 memzcan();
 829                                 break;
 830                         case 'i':
 831                                 show_mem(0);
 832                                 break;
 833                         default:
 834                                 termch = cmd;
 835                                 memex();
 836                         }
 837                         break;
c000000000080d40:	4b ff df b1 	bl      c00000000007ecf0 <.inchar>
c000000000080d44:	2f 83 00 66 	cmpwi   cr7,r3,102
c000000000080d48:	7c 7a 1b 78 	mr      r26,r3
c000000000080d4c:	41 9e 15 50 	beq-    cr7,c00000000008229c <.xmon_core+0x1dec>
c000000000080d50:	41 9d 10 f0 	bgt-    cr7,c000000000081e40 <.xmon_core+0x1990>
c000000000080d54:	2f 83 00 64 	cmpwi   cr7,r3,100
c000000000080d58:	41 9e 16 10 	beq-    cr7,c000000000082368 <.xmon_core+0x1eb8>
c000000000080d5c:	3d 40 80 00 	lis     r10,-32768
c000000000080d60:	e9 0f 01 08 	ld      r8,264(r15)
c000000000080d64:	3d 20 80 00 	lis     r9,-32768
c000000000080d68:	79 4a 07 c6 	rldicr  r10,r10,32,31
c000000000080d6c:	79 29 07 c6 	rldicr  r9,r9,32,31
c000000000080d70:	61 4a 40 20 	ori     r10,r10,16416
c000000000080d74:	61 29 00 20 	ori     r9,r9,32
c000000000080d78:	7d 0a 50 38 	and     r10,r8,r10
c000000000080d7c:	7f aa 48 00 	cmpd    cr7,r10,r9
c000000000080d80:	41 9e 21 4c 	beq-    cr7,c000000000082ecc <.xmon_core+0x2a1c>
c000000000080d84:	e9 41 02 a0 	ld      r10,672(r1)
c000000000080d88:	61 08 04 00 	ori     r8,r8,1024
c000000000080d8c:	f9 0a 01 08 	std     r8,264(r10)
c000000000080d90:	3c e2 ff d4 	addis   r7,r2,-44
c000000000080d94:	3f e2 00 0f 	addis   r31,r2,15
c000000000080d98:	3b ff 3e 10 	addi    r31,r31,15888
c000000000080d9c:	3c c0 fc 00 	lis     r6,-1024
c000000000080da0:	3b 07 99 c8 	addi    r24,r7,-26168
c000000000080da4:	3c e0 fc 00 	lis     r7,-1024
c000000000080da8:	7f fb fb 78 	mr      r27,r31
c000000000080dac:	3d 02 ff ed 	addis   r8,r2,-19
c000000000080db0:	3d 42 ff d4 	addis   r10,r2,-44
c000000000080db4:	3d 22 ff d4 	addis   r9,r2,-44
c000000000080db8:	60 da 07 be 	ori     r26,r6,1982
c000000000080dbc:	60 f7 07 fe 	ori     r23,r7,2046
c000000000080dc0:	3c c0 7c 00 	lis     r6,31744
c000000000080dc4:	3c e0 4c 00 	lis     r7,19456
c000000000080dc8:	3b ff 00 08 	addi    r31,r31,8
c000000000080dcc:	60 d9 01 24 	ori     r25,r6,292
c000000000080dd0:	60 f6 00 24 	ori     r22,r7,36
c000000000080dd4:	3a a8 44 e8 	addi    r21,r8,17640
c000000000080dd8:	3a 8a 9a 10 	addi    r20,r10,-26096
c000000000080ddc:	3a 69 99 88 	addi    r19,r9,-26232
c000000000080de0:	3b db 20 08 	addi    r30,r27,8200
c000000000080de4:	48 00 00 18 	b       c000000000080dfc <.xmon_core+0x94c>
c000000000080de8:	60 00 00 00 	nop
c000000000080dec:	60 00 00 00 	nop


c000000000080df0:	3b ff 00 20 	addi    r31,r31,32
c000000000080df4:	7f bf f0 00 	cmpd    cr7,r31,r30
c000000000080df8:	41 9e 00 50 	beq-    cr7,c000000000080e48 <.xmon_core+0x998>
c000000000080dfc:	81 3f 00 14 	lwz     r9,20(r31)
c000000000080e00:	71 26 00 0a 	andi.   r6,r9,10
c000000000080e04:	41 82 ff ec 	beq+    c000000000080df0 <.xmon_core+0x940>
c000000000080e08:	3b bf 00 08 	addi    r29,r31,8
c000000000080e0c:	e8 7f 00 00 	ld      r3,0(r31)
c000000000080e10:	38 a0 00 04 	li      r5,4
c000000000080e14:	7f a4 eb 78 	mr      r4,r29
c000000000080e18:	4b ff b5 a9 	bl      c00000000007c3c0 <.mread>
c000000000080e1c:	2f 83 00 04 	cmpwi   cr7,r3,4
c000000000080e20:	41 9e 0a b0 	beq-    cr7,c0000000000818d0 <.xmon_core+0x1420>
c000000000080e24:	e8 9f 00 00 	ld      r4,0(r31)
c000000000080e28:	7e 63 9b 78 	mr      r3,r19
c000000000080e2c:	48 00 2a 15 	bl      c000000000083840 <.xmon_printf>
c000000000080e30:	60 00 00 00 	nop
c000000000080e34:	39 20 00 00 	li      r9,0
c000000000080e38:	91 3f 00 14 	stw     r9,20(r31)
c000000000080e3c:	3b ff 00 20 	addi    r31,r31,32
c000000000080e40:	7f bf f0 00 	cmpd    cr7,r31,r30
c000000000080e44:	40 9e ff b8 	bne+    cr7,c000000000080dfc <.xmon_core+0x94c>
c000000000080e48:	39 20 00 00 	li      r9,0
c000000000080e4c:	91 3b 66 50 	stw     r9,26192(r27)
c000000000080e50:	7c 00 04 ac 	sync    
c000000000080e54:	3d 22 00 09 	addis   r9,r2,9
c000000000080e58:	39 40 00 00 	li      r10,0
c000000000080e5c:	f9 49 2f 00 	std     r10,12032(r9)
c000000000080e60:	4b ff f8 f0 	b       c000000000080750 <.xmon_core+0x2a0>
c000000000080e64:	60 00 00 00 	nop
c000000000080e68:	60 00 00 00 	nop
c000000000080e6c:	60 00 00 00 	nop

/*
1620 static void super_regs(void)
1621 {
1622         int cmd;
1623         unsigned long val;
1624 
1625         cmd = skipbl();
1626         if (cmd == '\n') {
1627                 unsigned long sp, toc;
1628                 asm("mr %0,1" : "=r" (sp) :);
1629                 asm("mr %0,2" : "=r" (toc) :);
1630 
1631                 printf("msr  = "REG"  sprg0= "REG"\n",
1632                        mfmsr(), mfspr(SPRN_SPRG0));
1633                 printf("pvr  = "REG"  sprg1= "REG"\n",
1634                        mfspr(SPRN_PVR), mfspr(SPRN_SPRG1));
1635                 printf("dec  = "REG"  sprg2= "REG"\n",
1636                        mfspr(SPRN_DEC), mfspr(SPRN_SPRG2));
1637                 printf("sp   = "REG"  sprg3= "REG"\n", sp, mfspr(SPRN_SPRG3));
1638                 printf("toc  = "REG"  dar  = "REG"\n", toc, mfspr(SPRN_DAR));
1639 
1640                 return;
1641         }
1642 
1643         scanhex(&regno);
1644         switch (cmd) {
*/
c000000000080e70:	4b ff e4 f1 	bl      c00000000007f360 <.skipbl>
c000000000080e74:	2f 83 00 0a 	cmpwi   cr7,r3,10
c000000000080e78:	7c 7c 1b 78 	mr      r28,r3
c000000000080e7c:	41 9e 14 68 	beq-    cr7,c0000000000822e4 <.xmon_core+0x1e34>
c000000000080e80:	3b 5f 3e 10 	addi    r26,r31,15888
c000000000080e84:	38 7a 66 d8 	addi    r3,r26,26328
c000000000080e88:	4b ff e5 39 	bl      c00000000007f3c0 <.scanhex>
c000000000080e8c:	2f 9c 00 72 	cmpwi   cr7,r28,114
c000000000080e90:	41 9e 09 e0 	beq-    cr7,c000000000081870 <.xmon_core+0x13c0>
c000000000080e94:	2f 9c 00 77 	cmpwi   cr7,r28,119
c000000000080e98:	41 9e 09 b4 	beq-    cr7,c00000000008184c <.xmon_core+0x139c>
c000000000080e9c:	4b ff de e5 	bl      c00000000007ed80 <.scannl>
c000000000080ea0:	4b ff fb 70 	b       c000000000080a10 <.xmon_core+0x560>
c000000000080ea4:	60 00 00 00 	nop
c000000000080ea8:	60 00 00 00 	nop
c000000000080eac:	60 00 00 00 	nop


c000000000080eb0:	3c 62 ff d4 	addis   r3,r2,-44
c000000000080eb4:	38 63 92 48 	addi    r3,r3,-28088
c000000000080eb8:	48 00 2a 29 	bl      c0000000000838e0 <.xmon_puts>
c000000000080ebc:	60 00 00 00 	nop


c000000000080ec0:	4b ff fb 50 	b       c000000000080a10 <.xmon_core+0x560>
c000000000080ec4:	60 00 00 00 	nop
c000000000080ec8:	60 00 00 00 	nop
c000000000080ecc:	60 00 00 00 	nop


c000000000080ed0:	3c 62 ff d4 	addis   r3,r2,-44
c000000000080ed4:	38 63 92 30 	addi    r3,r3,-28112
c000000000080ed8:	48 00 29 69 	bl      c000000000083840 <.xmon_printf>
c000000000080edc:	60 00 00 00 	nop
c000000000080ee0:	3c 60 00 1e 	lis     r3,30
c000000000080ee4:	60 63 84 80 	ori     r3,r3,33920
c000000000080ee8:	4b f9 c4 29 	bl      c00000000001d310 <.udelay>
c000000000080eec:	60 00 00 00 	nop
c000000000080ef0:	4b ff fe a0 	b       c000000000080d90 <.xmon_core+0x8e0>
c000000000080ef4:	60 00 00 00 	nop
c000000000080ef8:	60 00 00 00 	nop
c000000000080efc:	60 00 00 00 	nop


c000000000080f00:	38 7f 3e 10 	addi    r3,r31,15888
c000000000080f04:	38 63 25 f0 	addi    r3,r3,9712
c000000000080f08:	4b ff e4 b9 	bl      c00000000007f3c0 <.scanhex>
c000000000080f0c:	2f a3 00 00 	cmpdi   cr7,r3,0
c000000000080f10:	41 9e fb 00 	beq+    cr7,c000000000080a10 <.xmon_core+0x560>
c000000000080f14:	3e e2 ff ed 	addis   r23,r2,-19
c000000000080f18:	3b 97 44 e8 	addi    r28,r23,17640
c000000000080f1c:	38 7c 00 58 	addi    r3,r28,88
c000000000080f20:	4b ff e4 a1 	bl      c00000000007f3c0 <.scanhex>
c000000000080f24:	2f a3 00 00 	cmpdi   cr7,r3,0
c000000000080f28:	41 9e fa e8 	beq+    cr7,c000000000080a10 <.xmon_core+0x560>
c000000000080f2c:	e9 3c 00 58 	ld      r9,88(r28)
c000000000080f30:	2f a9 00 00 	cmpdi   cr7,r9,0
c000000000080f34:	41 9e 20 ac 	beq-    cr7,c000000000082fe0 <.xmon_core+0x2b30>
c000000000080f38:	3b 40 ff ff 	li      r26,-1
c000000000080f3c:	3e c2 ff b1 	addis   r22,r2,-79
c000000000080f40:	3b 80 00 00 	li      r28,0
c000000000080f44:	7b 5a 04 20 	clrldi  r26,r26,48
c000000000080f48:	3b 20 00 00 	li      r25,0
c000000000080f4c:	3a d6 08 f0 	addi    r22,r22,2288
c000000000080f50:	48 00 00 48 	b       c000000000080f98 <.xmon_core+0xae8>
c000000000080f54:	60 00 00 00 	nop
c000000000080f58:	60 00 00 00 	nop
c000000000080f5c:	60 00 00 00 	nop


c000000000080f60:	89 21 01 60 	lbz     r9,352(r1)
c000000000080f64:	39 57 44 e8 	addi    r10,r23,17640
c000000000080f68:	3b 9c 00 01 	addi    r28,r28,1
c000000000080f6c:	e9 4a 00 58 	ld      r10,88(r10)
c000000000080f70:	7b 9c 00 20 	clrldi  r28,r28,32
c000000000080f74:	7d 29 d2 78 	xor     r9,r9,r26
c000000000080f78:	7b 5a c2 02 	rldicl  r26,r26,56,8
c000000000080f7c:	79 29 0d e8 	rldic   r9,r9,1,55
c000000000080f80:	7f bc 50 40 	cmpld   cr7,r28,r10
c000000000080f84:	7d 36 4a 14 	add     r9,r22,r9
c000000000080f88:	7f 99 e3 78 	mr      r25,r28
c000000000080f8c:	a1 29 01 78 	lhz     r9,376(r9)
c000000000080f90:	7d 3a d2 78 	xor     r26,r9,r26
c000000000080f94:	40 9c 1c 14 	bge-    cr7,c000000000082ba8 <.xmon_core+0x26f8>
c000000000080f98:	3b 1f 3e 10 	addi    r24,r31,15888
c000000000080f9c:	38 81 01 60 	addi    r4,r1,352
c000000000080fa0:	e8 78 25 f0 	ld      r3,9712(r24)
c000000000080fa4:	38 a0 00 01 	li      r5,1
c000000000080fa8:	7c 79 1a 14 	add     r3,r25,r3
c000000000080fac:	4b ff b4 15 	bl      c00000000007c3c0 <.mread>
c000000000080fb0:	2f a3 00 00 	cmpdi   cr7,r3,0
c000000000080fb4:	40 9e ff ac 	bne+    cr7,c000000000080f60 <.xmon_core+0xab0>
c000000000080fb8:	e8 98 25 f0 	ld      r4,9712(r24)
c000000000080fbc:	3c 62 ff d4 	addis   r3,r2,-44
c000000000080fc0:	38 63 98 f0 	addi    r3,r3,-26384
c000000000080fc4:	7c 99 22 14 	add     r4,r25,r4
c000000000080fc8:	48 00 28 79 	bl      c000000000083840 <.xmon_printf>
c000000000080fcc:	60 00 00 00 	nop
c000000000080fd0:	7f 44 07 b4 	extsw   r4,r26
c000000000080fd4:	3c 62 ff d3 	addis   r3,r2,-45
c000000000080fd8:	38 63 8a b8 	addi    r3,r3,-30024
c000000000080fdc:	48 00 28 65 	bl      c000000000083840 <.xmon_printf>
c000000000080fe0:	60 00 00 00 	nop
c000000000080fe4:	4b ff fa 2c 	b       c000000000080a10 <.xmon_core+0x560>
c000000000080fe8:	60 00 00 00 	nop
c000000000080fec:	60 00 00 00 	nop


c000000000080ff0:	4b ff dd 01 	bl      c00000000007ecf0 <.inchar>
c000000000080ff4:	2f 83 00 72 	cmpwi   cr7,r3,114
c000000000080ff8:	41 9e 1a e4 	beq-    cr7,c000000000082adc <.xmon_core+0x262c>
c000000000080ffc:	2f 83 00 68 	cmpwi   cr7,r3,104
c000000000081000:	41 9e 1b 3c 	beq-    cr7,c000000000082b3c <.xmon_core+0x268c>
c000000000081004:	2f 83 00 70 	cmpwi   cr7,r3,112
c000000000081008:	40 9e fa 08 	bne+    cr7,c000000000080a10 <.xmon_core+0x560>
c00000000008100c:	3d 22 00 0b 	addis   r9,r2,11
c000000000081010:	39 29 6a 30 	addi    r9,r9,27184
c000000000081014:	e9 29 01 30 	ld      r9,304(r9)
c000000000081018:	e9 49 00 00 	ld      r10,0(r9)
c00000000008101c:	f8 41 00 28 	std     r2,40(r1)
c000000000081020:	7d 49 03 a6 	mtctr   r10
c000000000081024:	e8 49 00 08 	ld      r2,8(r9)
c000000000081028:	4e 80 04 21 	bctrl
c00000000008102c:	e8 41 00 28 	ld      r2,40(r1)
c000000000081030:	4b ff f9 e0 	b       c000000000080a10 <.xmon_core+0x560>
c000000000081034:	60 00 00 00 	nop
c000000000081038:	60 00 00 00 	nop
c00000000008103c:	60 00 00 00 	nop


c000000000081040:	4b ff ef e1 	bl      c000000000080020 <.dump_segments>
c000000000081044:	4b ff f9 cc 	b       c000000000080a10 <.xmon_core+0x560>
c000000000081048:	60 00 00 00 	nop
c00000000008104c:	60 00 00 00 	nop


c000000000081050:	4b ff ec 31 	bl      c00000000007fc80 <.proccall>
c000000000081054:	4b ff f9 bc 	b       c000000000080a10 <.xmon_core+0x560>
c000000000081058:	60 00 00 00 	nop
c00000000008105c:	60 00 00 00 	nop

c000000000081060:	4b ff dc 91 	bl      c00000000007ecf0 <.inchar>
c000000000081064:	39 23 ff 9c 	addi    r9,r3,-100
c000000000081068:	7c 7c 1b 78 	mr      r28,r3
c00000000008106c:	2b 89 00 16 	cmplwi  cr7,r9,22
c000000000081070:	40 9d 09 80 	ble-    cr7,c0000000000819f0 <.xmon_core+0x1540>
c000000000081074:	3b 5f 3e 10 	addi    r26,r31,15888
c000000000081078:	38 7a 25 f0 	addi    r3,r26,9712
c00000000008107c:	93 9a 24 d8 	stw     r28,9432(r26)
c000000000081080:	4b ff e3 41 	bl      c00000000007f3c0 <.scanhex>
c000000000081084:	4b ff e2 dd 	bl      c00000000007f360 <.skipbl>
c000000000081088:	2f 83 00 3f 	cmpwi   cr7,r3,63
c00000000008108c:	41 9e 1e fc 	beq-    cr7,c000000000082f88 <.xmon_core+0x2ad8>
c000000000081090:	3d 22 ff d4 	addis   r9,r2,-44
c000000000081094:	90 7a 24 d8 	stw     r3,9432(r26)
c000000000081098:	39 29 8d f8 	addi    r9,r9,-29192
c00000000008109c:	3f 82 ff ed 	addis   r28,r2,-19
c0000000000810a0:	f9 3a 26 38 	std     r9,9784(r26)
c0000000000810a4:	3a c0 00 04 	li      r22,4
c0000000000810a8:	3a e0 00 02 	li      r23,2
c0000000000810ac:	3b 40 00 01 	li      r26,1
c0000000000810b0:	3b 00 00 08 	li      r24,8
c0000000000810b4:	3b 20 00 00 	li      r25,0
c0000000000810b8:	60 00 00 00 	nop
c0000000000810bc:	60 00 00 00 	nop
c0000000000810c0:	4b ff e2 a1 	bl      c00000000007f360 <.skipbl>
c0000000000810c4:	2f 83 00 0a 	cmpwi   cr7,r3,10
c0000000000810c8:	41 9e 00 3c 	beq-    cr7,c000000000081104 <.xmon_core+0xc54>
c0000000000810cc:	2f 83 00 6c 	cmpwi   cr7,r3,108
c0000000000810d0:	41 9e 08 80 	beq-    cr7,c000000000081950 <.xmon_core+0x14a0>
c0000000000810d4:	41 9d 07 cc 	bgt-    cr7,c0000000000818a0 <.xmon_core+0x13f0>
c0000000000810d8:	2f 83 00 62 	cmpwi   cr7,r3,98
c0000000000810dc:	41 9e 08 94 	beq-    cr7,c000000000081970 <.xmon_core+0x14c0>
c0000000000810e0:	2f 83 00 64 	cmpwi   cr7,r3,100
c0000000000810e4:	41 9e 08 7c 	beq-    cr7,c000000000081960 <.xmon_core+0x14b0>
c0000000000810e8:	2f 83 00 2e 	cmpwi   cr7,r3,46
c0000000000810ec:	40 9e ff d4 	bne+    cr7,c0000000000810c0 <.xmon_core+0xc10>
c0000000000810f0:	39 3f 3e 10 	addi    r9,r31,15888
c0000000000810f4:	93 29 66 d4 	stw     r25,26324(r9)
c0000000000810f8:	4b ff e2 69 	bl      c00000000007f360 <.skipbl>
c0000000000810fc:	2f 83 00 0a 	cmpwi   cr7,r3,10
c000000000081100:	40 9e ff cc 	bne+    cr7,c0000000000810cc <.xmon_core+0xc1c>
c000000000081104:	3d 42 ff ed 	addis   r10,r2,-19
c000000000081108:	39 4a 44 e8 	addi    r10,r10,17640
c00000000008110c:	81 2a 00 40 	lwz     r9,64(r10)
c000000000081110:	2f 89 00 00 	cmpwi   cr7,r9,0
c000000000081114:	40 9d 1b 28 	ble-    cr7,c000000000082c3c <.xmon_core+0x278c>
c000000000081118:	2f 89 00 08 	cmpwi   cr7,r9,8
c00000000008111c:	41 9d 18 ac 	bgt-    cr7,c0000000000829c8 <.xmon_core+0x2518>
c000000000081120:	3d 42 ff d4 	addis   r10,r2,-44
c000000000081124:	fb 61 01 c0 	std     r27,448(r1)
c000000000081128:	39 4a 8e 10 	addi    r10,r10,-29168
c00000000008112c:	fb c1 01 c8 	std     r30,456(r1)
c000000000081130:	f9 41 01 b8 	std     r10,440(r1)
c000000000081134:	39 3f 3e 10 	addi    r9,r31,15888
c000000000081138:	3c e2 ff d4 	addis   r7,r2,-44
c00000000008113c:	3e c2 ff d5 	addis   r22,r2,-43
c000000000081140:	e8 89 25 f0 	ld      r4,9712(r9)
c000000000081144:	3d 02 ff b1 	addis   r8,r2,-79
c000000000081148:	3f 02 ff d4 	addis   r24,r2,-44
c00000000008114c:	7d 3c 4b 78 	mr      r28,r9
c000000000081150:	3f 42 ff ed 	addis   r26,r2,-19
c000000000081154:	39 c7 8e 00 	addi    r14,r7,-29184
c000000000081158:	3a d6 f5 50 	addi    r22,r22,-2736
c00000000008115c:	3a 68 08 f0 	addi    r19,r8,2288
c000000000081160:	3b 18 86 58 	addi    r24,r24,-31144
c000000000081164:	3e e2 ff 33 	addis   r23,r2,-205
c000000000081168:	81 3c 66 d4 	lwz     r9,26324(r28)
c00000000008116c:	2f 89 00 00 	cmpwi   cr7,r9,0
c000000000081170:	41 9e 1a 00 	beq-    cr7,c000000000082b70 <.xmon_core+0x26c0>
c000000000081174:	80 bc 66 d0 	lwz     r5,26320(r28)
c000000000081178:	39 20 ff ae 	li      r9,-82
c00000000008117c:	7d c3 73 78 	mr      r3,r14
c000000000081180:	7c a5 00 34 	cntlzw  r5,r5
c000000000081184:	54 a5 d9 7e 	rlwinm  r5,r5,27,5,31
c000000000081188:	78 a5 00 20 	clrldi  r5,r5,32
c00000000008118c:	7c a5 00 d0 	neg     r5,r5
c000000000081190:	7c a5 48 38 	and     r5,r5,r9
c000000000081194:	38 a5 00 72 	addi    r5,r5,114
c000000000081198:	48 00 26 a9 	bl      c000000000083840 <.xmon_printf>
c00000000008119c:	60 00 00 00 	nop
c0000000000811a0:	81 3c 66 d4 	lwz     r9,26324(r28)
c0000000000811a4:	2f 89 00 00 	cmpwi   cr7,r9,0
c0000000000811a8:	40 9e 00 a8 	bne-    cr7,c000000000081250 <.xmon_core+0xda0>
c0000000000811ac:	81 3c 66 d0 	lwz     r9,26320(r28)
c0000000000811b0:	2f 89 00 00 	cmpwi   cr7,r9,0
c0000000000811b4:	40 9e 18 88 	bne-    cr7,c000000000082a3c <.xmon_core+0x258c>
c0000000000811b8:	38 60 00 20 	li      r3,32
c0000000000811bc:	48 00 23 95 	bl      c000000000083550 <.xmon_putchar>
c0000000000811c0:	60 00 00 00 	nop
c0000000000811c4:	e9 21 01 60 	ld      r9,352(r1)
c0000000000811c8:	2f a9 00 00 	cmpdi   cr7,r9,0
c0000000000811cc:	41 9e 1e 20 	beq-    cr7,c000000000082fec <.xmon_core+0x2b3c>
c0000000000811d0:	3a a1 01 27 	addi    r21,r1,295
c0000000000811d4:	3b 60 00 01 	li      r27,1
c0000000000811d8:	60 00 00 00 	nop
c0000000000811dc:	60 00 00 00 	nop
c0000000000811e0:	8c 95 00 01 	lbzu    r4,1(r21)
c0000000000811e4:	7f 03 c3 78 	mr      r3,r24
c0000000000811e8:	7f 79 07 b4 	extsw   r25,r27
c0000000000811ec:	48 00 26 55 	bl      c000000000083840 <.xmon_printf>
c0000000000811f0:	60 00 00 00 	nop
c0000000000811f4:	e9 21 01 60 	ld      r9,352(r1)
c0000000000811f8:	7f a9 d8 40 	cmpld   cr7,r9,r27
c0000000000811fc:	3b 7b 00 01 	addi    r27,r27,1
c000000000081200:	41 9d ff e0 	bgt+    cr7,c0000000000811e0 <.xmon_core+0xd30>
c000000000081204:	39 3a 44 e8 	addi    r9,r26,17640
c000000000081208:	81 29 00 40 	lwz     r9,64(r9)
c00000000008120c:	7f 89 c8 00 	cmpw    cr7,r9,r25
c000000000081210:	40 9d 00 40 	ble-    cr7,c000000000081250 <.xmon_core+0xda0>
c000000000081214:	60 00 00 00 	nop
c000000000081218:	60 00 00 00 	nop
c00000000008121c:	60 00 00 00 	nop
c000000000081220:	e9 3c 21 4a 	lwa     r9,8520(r28)
c000000000081224:	7e c3 b3 78 	mr      r3,r22
c000000000081228:	79 29 1f 24 	rldicr  r9,r9,3,60
c00000000008122c:	7c 93 48 2a 	ldx     r4,r19,r9
c000000000081230:	48 00 26 11 	bl      c000000000083840 <.xmon_printf>
c000000000081234:	60 00 00 00 	nop
c000000000081238:	39 3a 44 e8 	addi    r9,r26,17640
c00000000008123c:	81 49 00 40 	lwz     r10,64(r9)
c000000000081240:	39 39 00 01 	addi    r9,r25,1
c000000000081244:	7d 39 07 b4 	extsw   r25,r9
c000000000081248:	7f 8a 48 00 	cmpw    cr7,r10,r9
c00000000008124c:	41 9d ff d4 	bgt+    cr7,c000000000081220 <.xmon_core+0xd70>
c000000000081250:	38 60 00 20 	li      r3,32
c000000000081254:	3b 20 00 00 	li      r25,0
c000000000081258:	48 00 22 f9 	bl      c000000000083550 <.xmon_putchar>
c00000000008125c:	60 00 00 00 	nop
c000000000081260:	39 3a 44 e8 	addi    r9,r26,17640
c000000000081264:	3b 60 00 00 	li      r27,0
c000000000081268:	ea 89 00 42 	lwa     r20,64(r9)
c00000000008126c:	3a a0 00 0a 	li      r21,10
c000000000081270:	3b c0 00 0d 	li      r30,13
c000000000081274:	60 00 00 00 	nop
c000000000081278:	60 00 00 00 	nop
c00000000008127c:	60 00 00 00 	nop
c000000000081280:	38 61 01 60 	addi    r3,r1,352
c000000000081284:	4b ff e1 3d 	bl      c00000000007f3c0 <.scanhex>
c000000000081288:	2f a3 00 00 	cmpdi   cr7,r3,0
c00000000008128c:	41 9e 00 6c 	beq-    cr7,c0000000000812f8 <.xmon_core+0xe48>
c000000000081290:	39 3a 44 e8 	addi    r9,r26,17640
c000000000081294:	80 e9 00 40 	lwz     r7,64(r9)
c000000000081298:	2f 87 00 00 	cmpwi   cr7,r7,0
c00000000008129c:	7c e5 07 b4 	extsw   r5,r7
c0000000000812a0:	40 9d 00 38 	ble-    cr7,c0000000000812d8 <.xmon_core+0xe28>
c0000000000812a4:	e8 c1 01 60 	ld      r6,352(r1)
c0000000000812a8:	39 01 01 27 	addi    r8,r1,295
c0000000000812ac:	78 e7 18 28 	rldic   r7,r7,3,32
c0000000000812b0:	7f 69 db 78 	mr      r9,r27
c0000000000812b4:	60 00 00 00 	nop
c0000000000812b8:	60 00 00 00 	nop
c0000000000812bc:	60 00 00 00 	nop
c0000000000812c0:	39 49 00 08 	addi    r10,r9,8
c0000000000812c4:	7c c9 4c 36 	srd     r9,r6,r9
c0000000000812c8:	7f 8a 38 40 	cmplw   cr7,r10,r7
c0000000000812cc:	9d 28 00 01 	stbu    r9,1(r8)
c0000000000812d0:	79 49 00 20 	clrldi  r9,r10,32
c0000000000812d4:	40 9e ff ec 	bne+    cr7,c0000000000812c0 <.xmon_core+0xe10>
c0000000000812d8:	81 3c 66 d0 	lwz     r9,26320(r28)
c0000000000812dc:	2f 89 00 00 	cmpwi   cr7,r9,0
c0000000000812e0:	41 9e 13 90 	beq-    cr7,c000000000082670 <.xmon_core+0x21c0>
c0000000000812e4:	e8 7c 25 f0 	ld      r3,9712(r28)
c0000000000812e8:	38 81 01 28 	addi    r4,r1,296
c0000000000812ec:	4b ff b9 35 	bl      c00000000007cc20 <.mwrite>
c0000000000812f0:	39 3a 44 e8 	addi    r9,r26,17640
c0000000000812f4:	ea 89 00 42 	lwa     r20,64(r9)
c0000000000812f8:	4b ff e0 69 	bl      c00000000007f360 <.skipbl>
c0000000000812fc:	2f 83 00 0a 	cmpwi   cr7,r3,10
c000000000081300:	41 9e 18 98 	beq-    cr7,c000000000082b98 <.xmon_core+0x26e8>
c000000000081304:	38 63 00 01 	addi    r3,r3,1
c000000000081308:	7f 74 db 78 	mr      r20,r27
c00000000008130c:	2b 83 00 79 	cmplwi  cr7,r3,121
c000000000081310:	41 9d ff 70 	bgt+    cr7,c000000000081280 <.xmon_core+0xdd0>
c000000000081314:	39 37 fa 44 	addi    r9,r23,-1468
c000000000081318:	78 63 17 88 	rldic   r3,r3,2,30
c00000000008131c:	7d 49 1a aa 	lwax    r10,r9,r3
c000000000081320:	7d 2a 4a 14 	add     r9,r10,r9
c000000000081324:	7d 29 03 a6 	mtctr   r9
c000000000081328:	4e 80 04 20 	bctr
c00000000008132c:	00 00 13 14 	.long 0x1314
c000000000081330:	ff ff ff 54 	.long 0xffffff54
c000000000081334:	ff ff ff 54 	.long 0xffffff54
c000000000081338:	ff ff ff 54 	.long 0xffffff54
c00000000008133c:	ff ff ff 54 	.long 0xffffff54
c000000000081340:	ff ff ff 54 	.long 0xffffff54
c000000000081344:	ff ff ff 54 	.long 0xffffff54
c000000000081348:	ff ff ff 54 	.long 0xffffff54
c00000000008134c:	ff ff ff 54 	.long 0xffffff54
c000000000081350:	ff ff ff 54 	.long 0xffffff54
c000000000081354:	ff ff ff 54 	.long 0xffffff54
c000000000081358:	ff ff ff 54 	.long 0xffffff54
c00000000008135c:	ff ff ff 54 	.long 0xffffff54
c000000000081360:	ff ff ff 54 	.long 0xffffff54
c000000000081364:	ff ff ff 54 	.long 0xffffff54
c000000000081368:	ff ff ff 54 	.long 0xffffff54
c00000000008136c:	ff ff ff 54 	.long 0xffffff54
c000000000081370:	ff ff ff 54 	.long 0xffffff54
c000000000081374:	ff ff ff 54 	.long 0xffffff54
c000000000081378:	ff ff ff 54 	.long 0xffffff54
c00000000008137c:	ff ff ff 54 	.long 0xffffff54
c000000000081380:	ff ff ff 54 	.long 0xffffff54
c000000000081384:	ff ff ff 54 	.long 0xffffff54
c000000000081388:	ff ff ff 54 	.long 0xffffff54
c00000000008138c:	ff ff ff 54 	.long 0xffffff54
c000000000081390:	ff ff ff 54 	.long 0xffffff54
c000000000081394:	ff ff ff 54 	.long 0xffffff54
c000000000081398:	ff ff ff 54 	.long 0xffffff54
c00000000008139c:	ff ff ff 54 	.long 0xffffff54
c0000000000813a0:	ff ff ff 54 	.long 0xffffff54
c0000000000813a4:	ff ff ff 54 	.long 0xffffff54
c0000000000813a8:	ff ff ff 54 	.long 0xffffff54
c0000000000813ac:	ff ff ff 54 	.long 0xffffff54
c0000000000813b0:	ff ff ff 54 	.long 0xffffff54
c0000000000813b4:	ff ff ff 54 	.long 0xffffff54
c0000000000813b8:	ff ff ff 54 	.long 0xffffff54
c0000000000813bc:	ff ff ff 54 	.long 0xffffff54
c0000000000813c0:	ff ff ff 54 	.long 0xffffff54
c0000000000813c4:	ff ff ff 54 	.long 0xffffff54
c0000000000813c8:	ff ff ff 54 	.long 0xffffff54
c0000000000813cc:	00 00 12 48 	.long 0x1248
c0000000000813d0:	ff ff ff 54 	.long 0xffffff54
c0000000000813d4:	ff ff ff 54 	.long 0xffffff54
c0000000000813d8:	ff ff ff 54 	.long 0xffffff54
c0000000000813dc:	ff ff ff 54 	.long 0xffffff54
c0000000000813e0:	00 00 12 2c 	.long 0x122c
c0000000000813e4:	ff ff ff 54 	.long 0xffffff54
c0000000000813e8:	00 00 12 1c 	.long 0x121c
c0000000000813ec:	00 00 11 e0 	.long 0x11e0
c0000000000813f0:	ff ff ff 54 	.long 0xffffff54
c0000000000813f4:	ff ff ff 54 	.long 0xffffff54
c0000000000813f8:	ff ff ff 54 	.long 0xffffff54
c0000000000813fc:	ff ff ff 54 	.long 0xffffff54
c000000000081400:	ff ff ff 54 	.long 0xffffff54
c000000000081404:	ff ff ff 54 	.long 0xffffff54
c000000000081408:	ff ff ff 54 	.long 0xffffff54
c00000000008140c:	ff ff ff 54 	.long 0xffffff54
c000000000081410:	ff ff ff 54 	.long 0xffffff54
c000000000081414:	ff ff ff 54 	.long 0xffffff54
c000000000081418:	ff ff ff 54 	.long 0xffffff54
c00000000008141c:	ff ff ff 54 	.long 0xffffff54
c000000000081420:	00 00 11 a0 	.long 0x11a0
c000000000081424:	ff ff ff 54 	.long 0xffffff54
c000000000081428:	00 00 11 74 	.long 0x1174
c00000000008142c:	00 00 11 60 	.long 0x1160
c000000000081430:	ff ff ff 54 	.long 0xffffff54
c000000000081434:	ff ff ff 54 	.long 0xffffff54
c000000000081438:	ff ff ff 54 	.long 0xffffff54
c00000000008143c:	ff ff ff 54 	.long 0xffffff54
c000000000081440:	ff ff ff 54 	.long 0xffffff54
c000000000081444:	ff ff ff 54 	.long 0xffffff54
c000000000081448:	ff ff ff 54 	.long 0xffffff54
c00000000008144c:	ff ff ff 54 	.long 0xffffff54
c000000000081450:	ff ff ff 54 	.long 0xffffff54
c000000000081454:	ff ff ff 54 	.long 0xffffff54
c000000000081458:	ff ff ff 54 	.long 0xffffff54
c00000000008145c:	ff ff ff 54 	.long 0xffffff54
c000000000081460:	ff ff ff 54 	.long 0xffffff54
c000000000081464:	ff ff ff 54 	.long 0xffffff54
c000000000081468:	ff ff ff 54 	.long 0xffffff54
c00000000008146c:	ff ff ff 54 	.long 0xffffff54
c000000000081470:	ff ff ff 54 	.long 0xffffff54
c000000000081474:	ff ff ff 54 	.long 0xffffff54
c000000000081478:	ff ff ff 54 	.long 0xffffff54
c00000000008147c:	ff ff ff 54 	.long 0xffffff54
c000000000081480:	ff ff ff 54 	.long 0xffffff54
c000000000081484:	ff ff ff 54 	.long 0xffffff54
c000000000081488:	ff ff ff 54 	.long 0xffffff54
c00000000008148c:	ff ff ff 54 	.long 0xffffff54
c000000000081490:	ff ff ff 54 	.long 0xffffff54
c000000000081494:	ff ff ff 54 	.long 0xffffff54
c000000000081498:	ff ff ff 54 	.long 0xffffff54
c00000000008149c:	ff ff ff 54 	.long 0xffffff54
c0000000000814a0:	00 00 11 3c 	.long 0x113c
c0000000000814a4:	ff ff ff 54 	.long 0xffffff54
c0000000000814a8:	00 00 11 20 	.long 0x1120
c0000000000814ac:	ff ff ff 54 	.long 0xffffff54
c0000000000814b0:	ff ff ff 54 	.long 0xffffff54
c0000000000814b4:	ff ff ff 54 	.long 0xffffff54
c0000000000814b8:	00 00 11 0c 	.long 0x110c
c0000000000814bc:	ff ff ff 54 	.long 0xffffff54
c0000000000814c0:	ff ff ff 54 	.long 0xffffff54
c0000000000814c4:	ff ff ff 54 	.long 0xffffff54
c0000000000814c8:	ff ff ff 54 	.long 0xffffff54
c0000000000814cc:	ff ff ff 54 	.long 0xffffff54
c0000000000814d0:	ff ff ff 54 	.long 0xffffff54
c0000000000814d4:	ff ff ff 54 	.long 0xffffff54
c0000000000814d8:	ff ff ff 54 	.long 0xffffff54
c0000000000814dc:	ff ff ff 54 	.long 0xffffff54
c0000000000814e0:	00 00 10 f8 	.long 0x10f8
c0000000000814e4:	00 00 10 e4 	.long 0x10e4
c0000000000814e8:	00 00 10 d4 	.long 0x10d4
c0000000000814ec:	ff ff ff 54 	.long 0xffffff54
c0000000000814f0:	ff ff ff 54 	.long 0xffffff54
c0000000000814f4:	ff ff ff 54 	.long 0xffffff54
c0000000000814f8:	00 00 10 bc 	.long 0x10bc
c0000000000814fc:	ff ff ff 54 	.long 0xffffff54
c000000000081500:	ff ff ff 54 	.long 0xffffff54
c000000000081504:	00 00 10 a8 	.long 0x10a8
c000000000081508:	00 00 11 0c 	.long 0x110c
c00000000008150c:	00 00 11 cc 	.long 0x11cc
c000000000081510:	00 00 13 14 	.long 0x1314
c000000000081514:	60 00 00 00 	nop
c000000000081518:	60 00 00 00 	nop
c00000000008151c:	60 00 00 00 	nop
c000000000081520:	4b ff e9 a1 	bl      c00000000007fec0 <.symbol_lookup>
c000000000081524:	4b ff f4 ec 	b       c000000000080a10 <.xmon_core+0x560>
c000000000081528:	60 00 00 00 	nop
c00000000008152c:	60 00 00 00 	nop


c000000000081530:	4b ff e5 d1 	bl      c00000000007fb00 <.cacheflush>
c000000000081534:	4b ff f4 dc 	b       c000000000080a10 <.xmon_core+0x560>
c000000000081538:	60 00 00 00 	nop
c00000000008153c:	60 00 00 00 	nop


c000000000081540:	7d e3 7b 78 	mr      r3,r15
c000000000081544:	4b ff db 1d 	bl      c00000000007f060 <.excprint>
c000000000081548:	4b ff f4 c8 	b       c000000000080a10 <.xmon_core+0x560>
c00000000008154c:	60 00 00 00 	nop


c000000000081550:	4b ff d7 a1 	bl      c00000000007ecf0 <.inchar>
c000000000081554:	2f 83 00 70 	cmpwi   cr7,r3,112
c000000000081558:	7c 7c 1b 78 	mr      r28,r3
c00000000008155c:	41 9e 15 ac 	beq-    cr7,c000000000082b08 <.xmon_core+0x2658>
c000000000081560:	78 69 00 20 	clrldi  r9,r3,32
c000000000081564:	39 49 ff d0 	addi    r10,r9,-48
c000000000081568:	2b 8a 00 09 	cmplwi  cr7,r10,9
c00000000008156c:	40 9d 04 74 	ble-    cr7,c0000000000819e0 <.xmon_core+0x1530>
c000000000081570:	39 49 ff 9f 	addi    r10,r9,-97
c000000000081574:	2b 8a 00 05 	cmplwi  cr7,r10,5
c000000000081578:	40 9d 0b e8 	ble-    cr7,c000000000082160 <.xmon_core+0x1cb0>
c00000000008157c:	39 29 ff bf 	addi    r9,r9,-65
c000000000081580:	2b 89 00 05 	cmplwi  cr7,r9,5
c000000000081584:	41 9d 04 48 	bgt-    cr7,c0000000000819cc <.xmon_core+0x151c>
c000000000081588:	2f 9c 00 64 	cmpwi   cr7,r28,100
c00000000008158c:	40 9e 04 54 	bne-    cr7,c0000000000819e0 <.xmon_core+0x1530>
c000000000081590:	3b 5f 3e 10 	addi    r26,r31,15888
c000000000081594:	38 7a 25 f0 	addi    r3,r26,9712
c000000000081598:	4b ff de 29 	bl      c00000000007f3c0 <.scanhex>
c00000000008159c:	81 3a 24 d8 	lwz     r9,9432(r26)
c0000000000815a0:	2f 89 00 0a 	cmpwi   cr7,r9,10
c0000000000815a4:	41 9e 00 0c 	beq-    cr7,c0000000000815b0 <.xmon_core+0x1100>
c0000000000815a8:	39 20 00 00 	li      r9,0
c0000000000815ac:	91 3a 24 d8 	stw     r9,9432(r26)
c0000000000815b0:	2f 9c 00 69 	cmpwi   cr7,r28,105
c0000000000815b4:	41 9e 12 30 	beq-    cr7,c0000000000827e4 <.xmon_core+0x2334>
c0000000000815b8:	2f 9c 00 6c 	cmpwi   cr7,r28,108
c0000000000815bc:	41 9e 15 d4 	beq-    cr7,c000000000082b90 <.xmon_core+0x26e0>
c0000000000815c0:	2f 9c 00 72 	cmpwi   cr7,r28,114
c0000000000815c4:	3f 82 ff ed 	addis   r28,r2,-19
c0000000000815c8:	3b 9c 44 e8 	addi    r28,r28,17640
c0000000000815cc:	38 7c 00 50 	addi    r3,r28,80
c0000000000815d0:	41 9e 0b a8 	beq-    cr7,c000000000082178 <.xmon_core+0x1cc8>
c0000000000815d4:	4b ff dd ed 	bl      c00000000007f3c0 <.scanhex>
c0000000000815d8:	e8 9c 00 50 	ld      r4,80(r28)
c0000000000815dc:	2f a4 00 00 	cmpdi   cr7,r4,0
c0000000000815e0:	40 9e 0a 10 	bne-    cr7,c000000000081ff0 <.xmon_core+0x1b40>
c0000000000815e4:	39 20 00 40 	li      r9,64
c0000000000815e8:	38 80 00 40 	li      r4,64
c0000000000815ec:	f9 3c 00 50 	std     r9,80(r28)
c0000000000815f0:	3b 9f 3e 10 	addi    r28,r31,15888
c0000000000815f4:	e8 7c 25 f0 	ld      r3,9712(r28)
c0000000000815f8:	4b ff d2 99 	bl      c00000000007e890 <.prdump>
c0000000000815fc:	3d 22 ff ed 	addis   r9,r2,-19
c000000000081600:	e9 5c 25 f0 	ld      r10,9712(r28)
c000000000081604:	39 29 44 e8 	addi    r9,r9,17640
c000000000081608:	e9 09 00 50 	ld      r8,80(r9)
c00000000008160c:	3d 22 ff db 	addis   r9,r2,-37
c000000000081610:	39 29 df 10 	addi    r9,r9,-8432
c000000000081614:	7d 48 52 14 	add     r10,r8,r10
c000000000081618:	f9 3c 26 38 	std     r9,9784(r28)
c00000000008161c:	f9 5c 25 f0 	std     r10,9712(r28)
c000000000081620:	4b ff f3 f0 	b       c000000000080a10 <.xmon_core+0x560>
c000000000081624:	60 00 00 00 	nop
c000000000081628:	60 00 00 00 	nop
c00000000008162c:	60 00 00 00 	nop


c000000000081630:	38 61 01 60 	addi    r3,r1,352
c000000000081634:	4b ff dd 8d 	bl      c00000000007f3c0 <.scanhex>
c000000000081638:	2f a3 00 00 	cmpdi   cr7,r3,0
c00000000008163c:	41 9e 08 1c 	beq-    cr7,c000000000081e58 <.xmon_core+0x19a8>
c000000000081640:	e8 81 01 60 	ld      r4,352(r1)
c000000000081644:	39 3f 3e 10 	addi    r9,r31,15888
c000000000081648:	39 09 24 e8 	addi    r8,r9,9448
c00000000008164c:	7c 8a 36 70 	srawi   r10,r4,6
c000000000081650:	7d 4a 01 94 	addze   r10,r10
c000000000081654:	7d 4a 07 b4 	extsw   r10,r10
c000000000081658:	79 4a 1f 24 	rldicr  r10,r10,3,60
c00000000008165c:	7d 08 50 2a 	ldx     r8,r8,r10
c000000000081660:	78 8a 06 a0 	clrldi  r10,r4,58
c000000000081664:	7d 0a 54 36 	srd     r10,r8,r10
c000000000081668:	79 48 07 e1 	clrldi. r8,r10,63
c00000000008166c:	41 82 10 44 	beq-    c0000000000826b0 <.xmon_core+0x2200>
c000000000081670:	3d 02 ff ed 	addis   r8,r2,-19
c000000000081674:	38 e0 00 00 	li      r7,0
c000000000081678:	39 48 44 e8 	addi    r10,r8,17640
c00000000008167c:	f8 ea 00 28 	std     r7,40(r10)
c000000000081680:	7c 00 04 ac 	sync    
c000000000081684:	e8 e1 01 60 	ld      r7,352(r1)
c000000000081688:	90 e9 66 54 	stw     r7,26196(r9)
c00000000008168c:	e9 2a 00 28 	ld      r9,40(r10)
c000000000081690:	2f a9 00 00 	cmpdi   cr7,r9,0
c000000000081694:	40 9e 00 30 	bne-    cr7,c0000000000816c4 <.xmon_core+0x1214>
c000000000081698:	3d 40 00 98 	lis     r10,152
c00000000008169c:	61 46 96 7f 	ori     r6,r10,38527
c0000000000816a0:	7c c9 03 a6 	mtctr   r6
c0000000000816a4:	48 00 00 10 	b       c0000000000816b4 <.xmon_core+0x1204>
c0000000000816a8:	60 00 00 00 	nop
c0000000000816ac:	60 00 00 00 	nop


c0000000000816b0:	42 40 13 e0 	bdz-    c000000000082a90 <.xmon_core+0x25e0>
c0000000000816b4:	39 28 44 e8 	addi    r9,r8,17640
c0000000000816b8:	e9 49 00 28 	ld      r10,40(r9)
c0000000000816bc:	2f aa 00 00 	cmpdi   cr7,r10,0
c0000000000816c0:	41 9e ff f0 	beq+    cr7,c0000000000816b0 <.xmon_core+0x1200>
c0000000000816c4:	3b 80 00 01 	li      r28,1
c0000000000816c8:	4b ff f0 74 	b       c00000000008073c <.xmon_core+0x28c>
c0000000000816cc:	60 00 00 00 	nop


c0000000000816d0:	3d 22 ff d4 	addis   r9,r2,-44
c0000000000816d4:	39 29 9a 90 	addi    r9,r9,-25968
c0000000000816d8:	e8 69 00 00 	ld      r3,0(r9)
c0000000000816dc:	e8 89 00 08 	ld      r4,8(r9)
c0000000000816e0:	e8 a9 00 10 	ld      r5,16(r9)
c0000000000816e4:	e8 c9 00 18 	ld      r6,24(r9)
c0000000000816e8:	e8 e9 00 20 	ld      r7,32(r9)
c0000000000816ec:	e9 09 00 28 	ld      r8,40(r9)
c0000000000816f0:	81 49 00 30 	lwz     r10,48(r9)
c0000000000816f4:	89 29 00 34 	lbz     r9,52(r9)
c0000000000816f8:	f8 61 01 28 	std     r3,296(r1)
c0000000000816fc:	f8 81 01 30 	std     r4,304(r1)
c000000000081700:	f8 a1 01 38 	std     r5,312(r1)
c000000000081704:	f8 c1 01 40 	std     r6,320(r1)
c000000000081708:	f8 e1 01 48 	std     r7,328(r1)
c00000000008170c:	f9 01 01 50 	std     r8,336(r1)
c000000000081710:	91 41 01 58 	stw     r10,344(r1)
c000000000081714:	99 21 01 5c 	stb     r9,348(r1)
c000000000081718:	4b ff d5 d9 	bl      c00000000007ecf0 <.inchar>
c00000000008171c:	2f 83 00 64 	cmpwi   cr7,r3,100
c000000000081720:	41 9e 09 c4 	beq-    cr7,c0000000000820e4 <.xmon_core+0x1c34>
c000000000081724:	2f 83 00 69 	cmpwi   cr7,r3,105
c000000000081728:	41 9e 09 38 	beq-    cr7,c000000000082060 <.xmon_core+0x1bb0>
c00000000008172c:	2f 83 00 63 	cmpwi   cr7,r3,99
c000000000081730:	41 9e 08 d8 	beq-    cr7,c000000000082008 <.xmon_core+0x1b58>
c000000000081734:	3b 9f 3e 10 	addi    r28,r31,15888
c000000000081738:	90 7c 24 d8 	stw     r3,9432(r28)
c00000000008173c:	4b ff dc 25 	bl      c00000000007f360 <.skipbl>
c000000000081740:	2f 83 00 3f 	cmpwi   cr7,r3,63
c000000000081744:	7c 69 1b 78 	mr      r9,r3
c000000000081748:	41 9e 14 80 	beq-    cr7,c000000000082bc8 <.xmon_core+0x2718>
c00000000008174c:	38 61 01 60 	addi    r3,r1,352
c000000000081750:	91 3c 24 d8 	stw     r9,9432(r28)
c000000000081754:	4b ff dc 6d 	bl      c00000000007f3c0 <.scanhex>
c000000000081758:	2f a3 00 00 	cmpdi   cr7,r3,0
c00000000008175c:	40 9e 11 30 	bne-    cr7,c00000000008288c <.xmon_core+0x23dc>
c000000000081760:	3c 62 ff d4 	addis   r3,r2,-44
c000000000081764:	38 63 98 a8 	addi    r3,r3,-26456
c000000000081768:	48 00 20 d9 	bl      c000000000083840 <.xmon_printf>
c00000000008176c:	60 00 00 00 	nop
c000000000081770:	81 3c 66 fc 	lwz     r9,26364(r28)
c000000000081774:	2f 89 00 00 	cmpwi   cr7,r9,0
c000000000081778:	40 9e 12 d8 	bne-    cr7,c000000000082a50 <.xmon_core+0x25a0>
c00000000008177c:	3b 3f 3e 10 	addi    r25,r31,15888
c000000000081780:	3e c2 ff d4 	addis   r22,r2,-44
c000000000081784:	3e e2 ff d8 	addis   r23,r2,-40
c000000000081788:	3f 02 ff d5 	addis   r24,r2,-43
c00000000008178c:	3b 99 00 08 	addi    r28,r25,8
c000000000081790:	3b 40 00 00 	li      r26,0
c000000000081794:	3a d6 98 e0 	addi    r22,r22,-26400
c000000000081798:	3a f7 b7 38 	addi    r23,r23,-18632
c00000000008179c:	3b 18 0e 68 	addi    r24,r24,3688
c0000000000817a0:	3e 82 ff d3 	addis   r20,r2,-45
c0000000000817a4:	3e a2 ff d4 	addis   r21,r2,-44
c0000000000817a8:	3b 39 20 08 	addi    r25,r25,8200
c0000000000817ac:	48 00 00 34 	b       c0000000000817e0 <.xmon_core+0x1330>


c0000000000817b0:	38 b5 8a a0 	addi    r5,r21,-30048
c0000000000817b4:	7e c3 b3 78 	mr      r3,r22
c0000000000817b8:	48 00 20 89 	bl      c000000000083840 <.xmon_printf>
c0000000000817bc:	60 00 00 00 	nop
c0000000000817c0:	e8 7c 00 00 	ld      r3,0(r28)
c0000000000817c4:	7e e4 bb 78 	mr      r4,r23
c0000000000817c8:	7f 05 c3 78 	mr      r5,r24
c0000000000817cc:	4b ff aa 95 	bl      c00000000007c260 <.xmon_print_symbol>
c0000000000817d0:	3b 9c 00 20 	addi    r28,r28,32
c0000000000817d4:	3b 5a 00 20 	addi    r26,r26,32
c0000000000817d8:	7f bc c8 40 	cmpld   cr7,r28,r25
c0000000000817dc:	40 9c f2 34 	bge+    cr7,c000000000080a10 <.xmon_core+0x560>
c0000000000817e0:	81 3c 00 14 	lwz     r9,20(r28)
c0000000000817e4:	2f 89 00 00 	cmpwi   cr7,r9,0
c0000000000817e8:	41 9e ff e8 	beq+    cr7,c0000000000817d0 <.xmon_core+0x1320>
c0000000000817ec:	79 26 ff e3 	rldicl. r6,r9,63,63
c0000000000817f0:	7f 44 2e 74 	sradi   r4,r26,5
c0000000000817f4:	38 84 00 01 	addi    r4,r4,1
c0000000000817f8:	40 82 ff b8 	bne+    c0000000000817b0 <.xmon_core+0x1300>
c0000000000817fc:	38 b4 a1 88 	addi    r5,r20,-24184
c000000000081800:	4b ff ff b4 	b       c0000000000817b4 <.xmon_core+0x1304>
c000000000081804:	60 00 00 00 	nop
c000000000081808:	60 00 00 00 	nop
c00000000008180c:	60 00 00 00 	nop


c000000000081810:	38 61 01 60 	addi    r3,r1,352
c000000000081814:	4b ff db ad 	bl      c00000000007f3c0 <.scanhex>
c000000000081818:	2f a3 00 00 	cmpdi   cr7,r3,0
c00000000008181c:	40 9e 06 04 	bne-    cr7,c000000000081e20 <.xmon_core+0x1970>
c000000000081820:	e8 6f 00 08 	ld      r3,8(r15)
c000000000081824:	e8 8f 01 20 	ld      r4,288(r15)
c000000000081828:	e8 af 01 00 	ld      r5,256(r15)
c00000000008182c:	4b ff af 55 	bl      c00000000007c780 <.xmon_show_stack>
c000000000081830:	4b ff d5 51 	bl      c00000000007ed80 <.scannl>
c000000000081834:	4b ff f1 dc 	b       c000000000080a10 <.xmon_core+0x560>
c000000000081838:	60 00 00 00 	nop
c00000000008183c:	60 00 00 00 	nop


c000000000081840:	7d e3 7b 78 	mr      r3,r15
c000000000081844:	4b ff df cd 	bl      c00000000007f810 <.prregs>
c000000000081848:	4b ff f1 c8 	b       c000000000080a10 <.xmon_core+0x560>


/*
1645         case 'w':
1646                 val = read_spr(regno);
1647                 scanhex(&val);
1648                 write_spr(regno, val);
1649                 /* fall through */
1650         case 'r':
1651                 printf("spr %lx = %lx\n", regno, read_spr(regno));
1652                 break;
1653         }
1654         scannl();
1655 }
*/
c00000000008184c:	e8 7a 66 de 	lwa     r3,26332(r26)
c000000000081850:	4b ff b6 71 	bl      c00000000007cec0 <.read_spr>
c000000000081854:	7c 29 0b 78 	mr      r9,r1
c000000000081858:	f8 69 01 61 	stdu    r3,352(r9)
c00000000008185c:	7d 23 4b 78 	mr      r3,r9
c000000000081860:	4b ff db 61 	bl      c00000000007f3c0 <.scanhex>
c000000000081864:	e8 7a 66 de 	lwa     r3,26332(r26)
c000000000081868:	e8 81 01 60 	ld      r4,352(r1)
c00000000008186c:	4b ff b5 75 	bl      c00000000007cde0 <.write_spr>
c000000000081870:	39 3f 3e 10 	addi    r9,r31,15888
c000000000081874:	eb 89 66 d8 	ld      r28,26328(r9)
c000000000081878:	7f 83 07 b4 	extsw   r3,r28
c00000000008187c:	4b ff b6 45 	bl      c00000000007cec0 <.read_spr>
c000000000081880:	7f 84 e3 78 	mr      r4,r28
c000000000081884:	7c 65 1b 78 	mr      r5,r3
c000000000081888:	3c 62 ff d4 	addis   r3,r2,-44
c00000000008188c:	38 63 91 c8 	addi    r3,r3,-28216
c000000000081890:	48 00 1f b1 	bl      c000000000083840 <.xmon_printf>
c000000000081894:	60 00 00 00 	nop
c000000000081898:	4b ff d4 e9 	bl      c00000000007ed80 <.scannl>
c00000000008189c:	4b ff f1 74 	b       c000000000080a10 <.xmon_core+0x560>


c0000000000818a0:	2f 83 00 72 	cmpwi   cr7,r3,114
c0000000000818a4:	41 9e 00 ec 	beq-    cr7,c000000000081990 <.xmon_core+0x14e0>
c0000000000818a8:	2f 83 00 77 	cmpwi   cr7,r3,119
c0000000000818ac:	41 9e 00 d4 	beq-    cr7,c000000000081980 <.xmon_core+0x14d0>
c0000000000818b0:	2f 83 00 6e 	cmpwi   cr7,r3,110
c0000000000818b4:	40 9e f8 0c 	bne+    cr7,c0000000000810c0 <.xmon_core+0xc10>
c0000000000818b8:	39 3f 3e 10 	addi    r9,r31,15888
c0000000000818bc:	93 49 66 d4 	stw     r26,26324(r9)
c0000000000818c0:	4b ff f8 00 	b       c0000000000810c0 <.xmon_core+0xc10>
c0000000000818c4:	60 00 00 00 	nop
c0000000000818c8:	60 00 00 00 	nop
c0000000000818cc:	60 00 00 00 	nop


c0000000000818d0:	81 3f 00 08 	lwz     r9,8(r31)
c0000000000818d4:	7d 2a d0 38 	and     r10,r9,r26
c0000000000818d8:	7f 8a c8 00 	cmpw    cr7,r10,r25
c0000000000818dc:	41 9e 05 24 	beq-    cr7,c000000000081e00 <.xmon_core+0x1950>
c0000000000818e0:	7d 29 b8 38 	and     r9,r9,r23
c0000000000818e4:	7f 89 b0 00 	cmpw    cr7,r9,r22
c0000000000818e8:	41 9e 05 18 	beq-    cr7,c000000000081e00 <.xmon_core+0x1950>
c0000000000818ec:	7c 00 e8 6c 	dcbst   0,r29
c0000000000818f0:	7c 00 04 ac 	sync    
c0000000000818f4:	7c 00 ef ac 	icbi    0,r29
c0000000000818f8:	4c 00 01 2c 	isync
c0000000000818fc:	81 3f 00 14 	lwz     r9,20(r31)
c000000000081900:	79 27 ff e3 	rldicl. r7,r9,63,63
c000000000081904:	40 82 f4 ec 	bne+    c000000000080df0 <.xmon_core+0x940>
c000000000081908:	e8 7f 00 00 	ld      r3,0(r31)
c00000000008190c:	7e a4 ab 78 	mr      r4,r21
c000000000081910:	38 a0 00 04 	li      r5,4
c000000000081914:	4b ff b3 0d 	bl      c00000000007cc20 <.mwrite>
c000000000081918:	2f 83 00 04 	cmpwi   cr7,r3,4
c00000000008191c:	41 9e 0f 50 	beq-    cr7,c00000000008286c <.xmon_core+0x23bc>
c000000000081920:	e8 9f 00 00 	ld      r4,0(r31)
c000000000081924:	7e 83 a3 78 	mr      r3,r20
c000000000081928:	48 00 1f 19 	bl      c000000000083840 <.xmon_printf>
c00000000008192c:	60 00 00 00 	nop
c000000000081930:	81 3f 00 14 	lwz     r9,20(r31)
c000000000081934:	55 29 e0 7e 	rlwinm  r9,r9,28,1,31
c000000000081938:	55 29 20 3e 	rotlwi  r9,r9,4
c00000000008193c:	91 3f 00 14 	stw     r9,20(r31)
c000000000081940:	4b ff f4 b0 	b       c000000000080df0 <.xmon_core+0x940>
c000000000081944:	60 00 00 00 	nop
c000000000081948:	60 00 00 00 	nop
c00000000008194c:	60 00 00 00 	nop


c000000000081950:	39 3c 44 e8 	addi    r9,r28,17640
c000000000081954:	92 c9 00 40 	stw     r22,64(r9)
c000000000081958:	4b ff f7 68 	b       c0000000000810c0 <.xmon_core+0xc10>
c00000000008195c:	60 00 00 00 	nop


c000000000081960:	39 3c 44 e8 	addi    r9,r28,17640
c000000000081964:	93 09 00 40 	stw     r24,64(r9)
c000000000081968:	4b ff f7 58 	b       c0000000000810c0 <.xmon_core+0xc10>
c00000000008196c:	60 00 00 00 	nop


c000000000081970:	39 3c 44 e8 	addi    r9,r28,17640
c000000000081974:	93 49 00 40 	stw     r26,64(r9)
c000000000081978:	4b ff f7 48 	b       c0000000000810c0 <.xmon_core+0xc10>
c00000000008197c:	60 00 00 00 	nop


c000000000081980:	39 3c 44 e8 	addi    r9,r28,17640
c000000000081984:	92 e9 00 40 	stw     r23,64(r9)
c000000000081988:	4b ff f7 38 	b       c0000000000810c0 <.xmon_core+0xc10>
c00000000008198c:	60 00 00 00 	nop


c000000000081990:	39 5f 3e 10 	addi    r10,r31,15888
c000000000081994:	81 2a 66 d0 	lwz     r9,26320(r10)
c000000000081998:	7d 29 00 34 	cntlzw  r9,r9
c00000000008199c:	55 29 d9 7e 	rlwinm  r9,r9,27,5,31
c0000000000819a0:	91 2a 66 d0 	stw     r9,26320(r10)
c0000000000819a4:	4b ff f7 1c 	b       c0000000000810c0 <.xmon_core+0xc10>
c0000000000819a8:	60 00 00 00 	nop
c0000000000819ac:	60 00 00 00 	nop

/*
 796                 xmon_no_auto_backtrace = 1;
 797                 xmon_show_stack(excp->gpr[1], excp->link, excp->nip);
*/
c0000000000819b0:	e8 6f 00 08 	ld      r3,8(r15)
c0000000000819b4:	e8 8f 01 20 	ld      r4,288(r15)
c0000000000819b8:	39 40 00 01 	li      r10,1
c0000000000819bc:	e8 af 01 00 	ld      r5,256(r15)
c0000000000819c0:	91 49 24 e0 	stw     r10,9440(r9)
c0000000000819c4:	4b ff ad bd 	bl      c00000000007c780 <.xmon_show_stack>
c0000000000819c8:	4b ff f0 3c 	b       c000000000080a04 <.xmon_core+0x554>


c0000000000819cc:	2f 83 00 0a 	cmpwi   cr7,r3,10
c0000000000819d0:	40 be fb c0 	bne-    cr7,c000000000081590 <.xmon_core+0x10e0>
c0000000000819d4:	60 00 00 00 	nop
c0000000000819d8:	60 00 00 00 	nop
c0000000000819dc:	60 00 00 00 	nop


c0000000000819e0:	39 3f 3e 10 	addi    r9,r31,15888
c0000000000819e4:	93 89 24 d8 	stw     r28,9432(r9)
c0000000000819e8:	4b ff fb a8 	b       c000000000081590 <.xmon_core+0x10e0>
c0000000000819ec:	60 00 00 00 	nop


c0000000000819f0:	3d 42 ff 33 	addis   r10,r2,-205
c0000000000819f4:	79 29 17 88 	rldic   r9,r9,2,30
c0000000000819f8:	39 4a 01 24 	addi    r10,r10,292
c0000000000819fc:	7d 2a 4a aa 	lwax    r9,r10,r9
c000000000081a00:	7d 49 52 14 	add     r10,r9,r10
c000000000081a04:	7d 49 03 a6 	mtctr   r10
c000000000081a08:	4e 80 04 20 	bctr
c000000000081a0c:	00 00 02 d4 	.long 0x2d4
c000000000081a10:	ff ff f6 68 	.long 0xfffff668
c000000000081a14:	ff ff f6 68 	.long 0xfffff668
c000000000081a18:	ff ff f6 68 	.long 0xfffff668
c000000000081a1c:	ff ff f6 68 	.long 0xfffff668
c000000000081a20:	00 00 02 c4 	.long 0x2c4
c000000000081a24:	ff ff f6 68 	.long 0xfffff668
c000000000081a28:	ff ff f6 68 	.long 0xfffff668
c000000000081a2c:	00 00 01 8c 	.long 0x18c
c000000000081a30:	00 00 02 d4 	.long 0x2d4
c000000000081a34:	ff ff f6 68 	.long 0xfffff668
c000000000081a38:	ff ff f6 68 	.long 0xfffff668
c000000000081a3c:	ff ff f6 68 	.long 0xfffff668
c000000000081a40:	ff ff f6 68 	.long 0xfffff668
c000000000081a44:	ff ff f6 68 	.long 0xfffff668
c000000000081a48:	00 00 02 d4 	.long 0x2d4
c000000000081a4c:	ff ff f6 68 	.long 0xfffff668
c000000000081a50:	ff ff f6 68 	.long 0xfffff668
c000000000081a54:	ff ff f6 68 	.long 0xfffff668
c000000000081a58:	ff ff f6 68 	.long 0xfffff668
c000000000081a5c:	ff ff f6 68 	.long 0xfffff668
c000000000081a60:	ff ff f6 68 	.long 0xfffff668
c000000000081a64:	00 00 00 5c 	.long 0x5c
c000000000081a68:	3b 9f 3e 10 	addi    r28,r31,15888
c000000000081a6c:	38 7c 66 b0 	addi    r3,r28,26288
c000000000081a70:	4b ff d9 51 	bl      c00000000007f3c0 <.scanhex>
c000000000081a74:	81 3c 24 d8 	lwz     r9,9432(r28)
c000000000081a78:	2f 89 00 0a 	cmpwi   cr7,r9,10
c000000000081a7c:	41 9e 00 0c 	beq-    cr7,c000000000081a88 <.xmon_core+0x15d8>
c000000000081a80:	39 20 00 00 	li      r9,0
c000000000081a84:	91 3c 24 d8 	stw     r9,9432(r28)
c000000000081a88:	3c 62 ff ed 	addis   r3,r2,-19
c000000000081a8c:	38 63 44 e8 	addi    r3,r3,17640
c000000000081a90:	38 63 00 30 	addi    r3,r3,48
c000000000081a94:	4b ff d9 2d 	bl      c00000000007f3c0 <.scanhex>
c000000000081a98:	39 3f 3e 10 	addi    r9,r31,15888
c000000000081a9c:	81 49 24 d8 	lwz     r10,9432(r9)
c000000000081aa0:	2f 8a 00 0a 	cmpwi   cr7,r10,10
c000000000081aa4:	41 9e 00 0c 	beq-    cr7,c000000000081ab0 <.xmon_core+0x1600>
c000000000081aa8:	39 40 00 00 	li      r10,0
c000000000081aac:	91 49 24 d8 	stw     r10,9432(r9)
c000000000081ab0:	3f 02 ff ed 	addis   r24,r2,-19
c000000000081ab4:	3b 98 44 e8 	addi    r28,r24,17640
c000000000081ab8:	38 7c 00 38 	addi    r3,r28,56
c000000000081abc:	4b ff d9 05 	bl      c00000000007f3c0 <.scanhex>
c000000000081ac0:	39 3f 3e 10 	addi    r9,r31,15888
c000000000081ac4:	eb 49 66 b0 	ld      r26,26288(r9)
c000000000081ac8:	e9 3c 00 38 	ld      r9,56(r28)
c000000000081acc:	7b 5c 00 20 	clrldi  r28,r26,32
c000000000081ad0:	7f a9 e0 40 	cmpld   cr7,r9,r28
c000000000081ad4:	7f 9a e3 78 	mr      r26,r28
c000000000081ad8:	40 9d ef 38 	ble+    cr7,c000000000080a10 <.xmon_core+0x560>
c000000000081adc:	3e c2 ff d4 	addis   r22,r2,-44
c000000000081ae0:	3e e2 ff d4 	addis   r23,r2,-44
c000000000081ae4:	3a a0 00 00 	li      r21,0
c000000000081ae8:	3a d6 8c 30 	addi    r22,r22,-29648
c000000000081aec:	3a f7 8c 20 	addi    r23,r23,-29664
c000000000081af0:	48 00 00 44 	b       c000000000081b34 <.xmon_core+0x1684>
c000000000081af4:	60 00 00 00 	nop
c000000000081af8:	60 00 00 00 	nop
c000000000081afc:	60 00 00 00 	nop


c000000000081b00:	40 9e 04 d4 	bne-    cr7,c000000000081fd4 <.xmon_core+0x1b24>
c000000000081b04:	39 38 44 e8 	addi    r9,r24,17640
c000000000081b08:	e8 89 00 30 	ld      r4,48(r9)
c000000000081b0c:	7d 5c 22 14 	add     r10,r28,r4
c000000000081b10:	7f aa e0 40 	cmpld   cr7,r10,r28
c000000000081b14:	41 9c 00 64 	blt-    cr7,c000000000081b78 <.xmon_core+0x16c8>
c000000000081b18:	7f 5a 22 14 	add     r26,r26,r4
c000000000081b1c:	e9 29 00 38 	ld      r9,56(r9)
c000000000081b20:	7f 35 cb 78 	mr      r21,r25
c000000000081b24:	7b 5a 00 20 	clrldi  r26,r26,32
c000000000081b28:	7f ba 48 40 	cmpld   cr7,r26,r9
c000000000081b2c:	7f 5c d3 78 	mr      r28,r26
c000000000081b30:	40 9c 00 48 	bge-    cr7,c000000000081b78 <.xmon_core+0x16c8>
c000000000081b34:	7f 83 e3 78 	mr      r3,r28
c000000000081b38:	38 81 01 60 	addi    r4,r1,352
c000000000081b3c:	38 a0 00 01 	li      r5,1
c000000000081b40:	4b ff a8 81 	bl      c00000000007c3c0 <.mread>
c000000000081b44:	2f b5 00 00 	cmpdi   cr7,r21,0
c000000000081b48:	7c 79 1b 79 	mr.     r25,r3
c000000000081b4c:	41 82 ff b4 	beq+    c000000000081b00 <.xmon_core+0x1650>
c000000000081b50:	40 9e ff b4 	bne+    cr7,c000000000081b04 <.xmon_core+0x1654>
c000000000081b54:	7f 44 d3 78 	mr      r4,r26
c000000000081b58:	7e e3 bb 78 	mr      r3,r23
c000000000081b5c:	48 00 1c e5 	bl      c000000000083840 <.xmon_printf>
c000000000081b60:	60 00 00 00 	nop
c000000000081b64:	39 38 44 e8 	addi    r9,r24,17640
c000000000081b68:	e8 89 00 30 	ld      r4,48(r9)
c000000000081b6c:	7d 5c 22 14 	add     r10,r28,r4
c000000000081b70:	7f aa e0 40 	cmpld   cr7,r10,r28
c000000000081b74:	40 9c ff a4 	bge+    cr7,c000000000081b18 <.xmon_core+0x1668>
c000000000081b78:	2f b9 00 00 	cmpdi   cr7,r25,0
c000000000081b7c:	41 9e ee 94 	beq+    cr7,c000000000080a10 <.xmon_core+0x560>
c000000000081b80:	3c 62 ff d4 	addis   r3,r2,-44
c000000000081b84:	7c 84 e0 50 	subf    r4,r4,r28
c000000000081b88:	38 63 8c 30 	addi    r3,r3,-29648
c000000000081b8c:	48 00 1c b5 	bl      c000000000083840 <.xmon_printf>
c000000000081b90:	60 00 00 00 	nop
c000000000081b94:	4b ff ee 7c 	b       c000000000080a10 <.xmon_core+0x560>


c000000000081b98:	3b 9f 3e 10 	addi    r28,r31,15888
c000000000081b9c:	3d 22 ff d4 	addis   r9,r2,-44
c000000000081ba0:	39 29 8c 08 	addi    r9,r9,-29688
c000000000081ba4:	38 7c 66 b0 	addi    r3,r28,26288
c000000000081ba8:	f9 3c 26 38 	std     r9,9784(r28)
c000000000081bac:	4b ff d8 15 	bl      c00000000007f3c0 <.scanhex>
c000000000081bb0:	81 3c 24 d8 	lwz     r9,9432(r28)
c000000000081bb4:	2f 89 00 0a 	cmpwi   cr7,r9,10
c000000000081bb8:	41 9e 00 50 	beq-    cr7,c000000000081c08 <.xmon_core+0x1758>
c000000000081bbc:	3b 40 00 00 	li      r26,0
c000000000081bc0:	38 7c 66 c8 	addi    r3,r28,26312
c000000000081bc4:	93 5c 24 d8 	stw     r26,9432(r28)
c000000000081bc8:	4b ff d7 f9 	bl      c00000000007f3c0 <.scanhex>
c000000000081bcc:	81 3c 24 d8 	lwz     r9,9432(r28)
c000000000081bd0:	2f 89 00 0a 	cmpwi   cr7,r9,10
c000000000081bd4:	41 9e 00 34 	beq-    cr7,c000000000081c08 <.xmon_core+0x1758>
c000000000081bd8:	38 7c 26 40 	addi    r3,r28,9792
c000000000081bdc:	93 5c 24 d8 	stw     r26,9432(r28)
c000000000081be0:	4b ff d7 e1 	bl      c00000000007f3c0 <.scanhex>
c000000000081be4:	81 3c 24 d8 	lwz     r9,9432(r28)
c000000000081be8:	2f 89 00 0a 	cmpwi   cr7,r9,10
c000000000081bec:	39 20 ff ff 	li      r9,-1
c000000000081bf0:	91 3c 66 cc 	stw     r9,26316(r28)
c000000000081bf4:	41 9e 00 08 	beq-    cr7,c000000000081bfc <.xmon_core+0x174c>
c000000000081bf8:	93 5c 24 d8 	stw     r26,9432(r28)
c000000000081bfc:	38 7f 3e 10 	addi    r3,r31,15888
c000000000081c00:	38 63 66 cc 	addi    r3,r3,26316
c000000000081c04:	4b ff d7 bd 	bl      c00000000007f3c0 <.scanhex>
c000000000081c08:	39 3f 3e 10 	addi    r9,r31,15888
c000000000081c0c:	83 89 66 b4 	lwz     r28,26292(r9)
c000000000081c10:	81 29 66 c8 	lwz     r9,26312(r9)
c000000000081c14:	7f 89 e0 40 	cmplw   cr7,r9,r28
c000000000081c18:	40 9d ed f8 	ble+    cr7,c000000000080a10 <.xmon_core+0x560>
c000000000081c1c:	3f 22 ff d4 	addis   r25,r2,-44
c000000000081c20:	3b 40 00 00 	li      r26,0
c000000000081c24:	3b 39 8c 10 	addi    r25,r25,-29680
c000000000081c28:	48 00 00 20 	b       c000000000081c48 <.xmon_core+0x1798>
c000000000081c2c:	60 00 00 00 	nop


c000000000081c30:	39 3f 3e 10 	addi    r9,r31,15888
c000000000081c34:	3b 9c 00 04 	addi    r28,r28,4
c000000000081c38:	81 29 66 c8 	lwz     r9,26312(r9)
c000000000081c3c:	7f 89 e0 40 	cmplw   cr7,r9,r28
c000000000081c40:	7b 9c 00 20 	clrldi  r28,r28,32
c000000000081c44:	40 9d ed cc 	ble+    cr7,c000000000080a10 <.xmon_core+0x560>
c000000000081c48:	7f 83 e3 78 	mr      r3,r28
c000000000081c4c:	38 81 01 28 	addi    r4,r1,296
c000000000081c50:	38 a0 00 04 	li      r5,4
c000000000081c54:	4b ff a7 6d 	bl      c00000000007c3c0 <.mread>
c000000000081c58:	2f 83 00 04 	cmpwi   cr7,r3,4
c000000000081c5c:	40 9e ff d4 	bne+    cr7,c000000000081c30 <.xmon_core+0x1780>
c000000000081c60:	88 a1 01 28 	lbz     r5,296(r1)
c000000000081c64:	89 21 01 29 	lbz     r9,297(r1)
c000000000081c68:	89 01 01 2a 	lbz     r8,298(r1)
c000000000081c6c:	89 41 01 2b 	lbz     r10,299(r1)
c000000000081c70:	55 29 80 1e 	rlwinm  r9,r9,16,0,15
c000000000081c74:	54 a5 c0 0e 	rlwinm  r5,r5,24,0,7
c000000000081c78:	7c a5 4a 14 	add     r5,r5,r9
c000000000081c7c:	55 08 40 2e 	rlwinm  r8,r8,8,0,23
c000000000081c80:	39 3f 3e 10 	addi    r9,r31,15888
c000000000081c84:	7c a5 42 14 	add     r5,r5,r8
c000000000081c88:	7c a5 52 14 	add     r5,r5,r10
c000000000081c8c:	e9 49 26 40 	ld      r10,9792(r9)
c000000000081c90:	81 29 66 cc 	lwz     r9,26316(r9)
c000000000081c94:	7c a5 07 b4 	extsw   r5,r5
c000000000081c98:	7c aa 52 78 	xor     r10,r5,r10
c000000000081c9c:	7d 46 48 39 	and.    r6,r10,r9
c000000000081ca0:	40 82 ff 90 	bne+    c000000000081c30 <.xmon_core+0x1780>
c000000000081ca4:	3b 5a 00 01 	addi    r26,r26,1
c000000000081ca8:	7f 23 cb 78 	mr      r3,r25
c000000000081cac:	7f 84 e3 78 	mr      r4,r28
c000000000081cb0:	48 00 1b 91 	bl      c000000000083840 <.xmon_printf>
c000000000081cb4:	60 00 00 00 	nop
c000000000081cb8:	2b 9a 00 09 	cmplwi  cr7,r26,9
c000000000081cbc:	7b 5a 00 20 	clrldi  r26,r26,32
c000000000081cc0:	40 9d ff 70 	ble+    cr7,c000000000081c30 <.xmon_core+0x1780>
c000000000081cc4:	4b ff ed 4c 	b       c000000000080a10 <.xmon_core+0x560>
c000000000081cc8:	60 00 00 00 	nop
c000000000081ccc:	60 00 00 00 	nop


c000000000081cd0:	38 60 00 00 	li      r3,0
c000000000081cd4:	48 38 ae 9d 	bl      c00000000040cb70 <.show_mem>
c000000000081cd8:	60 00 00 00 	nop
c000000000081cdc:	4b ff ed 34 	b       c000000000080a10 <.xmon_core+0x560>


c000000000081ce0:	3b 5f 3e 10 	addi    r26,r31,15888
c000000000081ce4:	38 7a 66 b0 	addi    r3,r26,26288
c000000000081ce8:	4b ff d6 d9 	bl      c00000000007f3c0 <.scanhex>
c000000000081cec:	81 3a 24 d8 	lwz     r9,9432(r26)
c000000000081cf0:	2f 89 00 0a 	cmpwi   cr7,r9,10
c000000000081cf4:	41 9e 00 0c 	beq-    cr7,c000000000081d00 <.xmon_core+0x1850>
c000000000081cf8:	39 20 00 00 	li      r9,0
c000000000081cfc:	91 3a 24 d8 	stw     r9,9432(r26)
c000000000081d00:	2f 9c 00 73 	cmpwi   cr7,r28,115
c000000000081d04:	38 7f 3e 10 	addi    r3,r31,15888
c000000000081d08:	41 9e 0e a8 	beq-    cr7,c000000000082bb0 <.xmon_core+0x2700>
c000000000081d0c:	38 63 26 48 	addi    r3,r3,9800
c000000000081d10:	4b ff d6 b1 	bl      c00000000007f3c0 <.scanhex>
c000000000081d14:	39 3f 3e 10 	addi    r9,r31,15888
c000000000081d18:	81 49 24 d8 	lwz     r10,9432(r9)
c000000000081d1c:	2f 8a 00 0a 	cmpwi   cr7,r10,10
c000000000081d20:	41 9e 00 0c 	beq-    cr7,c000000000081d2c <.xmon_core+0x187c>
c000000000081d24:	39 40 00 00 	li      r10,0
c000000000081d28:	91 49 24 d8 	stw     r10,9432(r9)
c000000000081d2c:	3b 5f 3e 10 	addi    r26,r31,15888
c000000000081d30:	38 7a 66 b8 	addi    r3,r26,26296
c000000000081d34:	4b ff d6 8d 	bl      c00000000007f3c0 <.scanhex>
c000000000081d38:	2f 9c 00 6d 	cmpwi   cr7,r28,109
c000000000081d3c:	41 9e 0e e8 	beq-    cr7,c000000000082c24 <.xmon_core+0x2774>
c000000000081d40:	2f 9c 00 73 	cmpwi   cr7,r28,115
c000000000081d44:	41 9e 0e c8 	beq-    cr7,c000000000082c0c <.xmon_core+0x275c>
c000000000081d48:	2f 9c 00 64 	cmpwi   cr7,r28,100
c000000000081d4c:	40 9e ec c4 	bne+    cr7,c000000000080a10 <.xmon_core+0x560>
c000000000081d50:	81 3a 24 d8 	lwz     r9,9432(r26)
c000000000081d54:	2f 89 00 0a 	cmpwi   cr7,r9,10
c000000000081d58:	41 9e 00 0c 	beq-    cr7,c000000000081d64 <.xmon_core+0x18b4>
c000000000081d5c:	39 20 00 00 	li      r9,0
c000000000081d60:	91 3a 24 d8 	stw     r9,9432(r26)
c000000000081d64:	3b 9f 3e 10 	addi    r28,r31,15888
c000000000081d68:	38 7c 66 c0 	addi    r3,r28,26304
c000000000081d6c:	4b ff d6 55 	bl      c00000000007f3c0 <.scanhex>
c000000000081d70:	81 3c 66 bc 	lwz     r9,26300(r28)
c000000000081d74:	e8 9c 66 b0 	ld      r4,26288(r28)
c000000000081d78:	e8 dc 26 48 	ld      r6,9800(r28)
c000000000081d7c:	82 dc 66 c4 	lwz     r22,26308(r28)
c000000000081d80:	2f a9 00 00 	cmpdi   cr7,r9,0
c000000000081d84:	41 9e ec 8c 	beq+    cr7,c000000000080a10 <.xmon_core+0x560>
c000000000081d88:	39 29 ff ff 	addi    r9,r9,-1
c000000000081d8c:	3a e4 00 01 	addi    r23,r4,1
c000000000081d90:	79 29 00 20 	clrldi  r9,r9,32
c000000000081d94:	3f 02 ff d4 	addis   r24,r2,-44
c000000000081d98:	7e f7 4a 14 	add     r23,r23,r9
c000000000081d9c:	3b 20 00 00 	li      r25,0
c000000000081da0:	3b 18 8b c8 	addi    r24,r24,-29752
c000000000081da4:	48 00 00 1c 	b       c000000000081dc0 <.xmon_core+0x1910>
c000000000081da8:	60 00 00 00 	nop
c000000000081dac:	60 00 00 00 	nop


c000000000081db0:	7f ba b8 00 	cmpd    cr7,r26,r23
c000000000081db4:	7f 44 d3 78 	mr      r4,r26
c000000000081db8:	7f 86 e3 78 	mr      r6,r28
c000000000081dbc:	41 9e 10 b0 	beq-    cr7,c000000000082e6c <.xmon_core+0x29bc>
c000000000081dc0:	88 a4 00 00 	lbz     r5,0(r4)
c000000000081dc4:	88 e6 00 00 	lbz     r7,0(r6)
c000000000081dc8:	3b 44 00 01 	addi    r26,r4,1
c000000000081dcc:	3b 86 00 01 	addi    r28,r6,1
c000000000081dd0:	7f 85 38 40 	cmplw   cr7,r5,r7
c000000000081dd4:	41 9e ff dc 	beq+    cr7,c000000000081db0 <.xmon_core+0x1900>
c000000000081dd8:	39 39 00 01 	addi    r9,r25,1
c000000000081ddc:	7f 96 48 40 	cmplw   cr7,r22,r9
c000000000081de0:	79 39 00 20 	clrldi  r25,r9,32
c000000000081de4:	41 9c ff cc 	blt+    cr7,c000000000081db0 <.xmon_core+0x1900>
c000000000081de8:	7f 03 c3 78 	mr      r3,r24
c000000000081dec:	48 00 1a 55 	bl      c000000000083840 <.xmon_printf>
c000000000081df0:	60 00 00 00 	nop
c000000000081df4:	4b ff ff bc 	b       c000000000081db0 <.xmon_core+0x1900>
c000000000081df8:	60 00 00 00 	nop
c000000000081dfc:	60 00 00 00 	nop


c000000000081e00:	e8 9f 00 00 	ld      r4,0(r31)
c000000000081e04:	7f 03 c3 78 	mr      r3,r24
c000000000081e08:	48 00 1a 39 	bl      c000000000083840 <.xmon_printf>
c000000000081e0c:	60 00 00 00 	nop
c000000000081e10:	39 20 00 00 	li      r9,0
c000000000081e14:	91 3f 00 14 	stw     r9,20(r31)
c000000000081e18:	4b ff ef d8 	b       c000000000080df0 <.xmon_core+0x940>


c000000000081e1c:	60 00 00 00 	nop
c000000000081e20:	e8 61 01 60 	ld      r3,352(r1)
c000000000081e24:	38 80 00 00 	li      r4,0
c000000000081e28:	38 a0 00 00 	li      r5,0
c000000000081e2c:	4b ff a9 55 	bl      c00000000007c780 <.xmon_show_stack>
c000000000081e30:	4b ff cf 51 	bl      c00000000007ed80 <.scannl>
c000000000081e34:	4b ff eb dc 	b       c000000000080a10 <.xmon_core+0x560>
c000000000081e38:	60 00 00 00 	nop
c000000000081e3c:	60 00 00 00 	nop


/*
3213         case 's':
3214                 stop_spus();
3215                 break;
3216         case 'r':
3217                 restart_spus();
3218                 break;
*/
c000000000081e40:	2f 83 00 72 	cmpwi   cr7,r3,114
c000000000081e44:	41 9e 03 2c 	beq-    cr7,c000000000082170 <.xmon_core+0x1cc0>
c000000000081e48:	2f 83 00 73 	cmpwi   cr7,r3,115
c000000000081e4c:	40 9e ef 10 	bne+    cr7,c000000000080d5c <.xmon_core+0x8ac>		; for default, return -1
c000000000081e50:	4b ff b1 81 	bl      c00000000007cfd0 <.stop_spus>
c000000000081e54:	4b ff eb bc 	b       c000000000080a10 <.xmon_core+0x560>


c000000000081e58:	3c 62 ff d4 	addis   r3,r2,-44
c000000000081e5c:	3b 40 ff ff 	li      r26,-1
c000000000081e60:	38 63 99 08 	addi    r3,r3,-26360
c000000000081e64:	3a ff 3e 10 	addi    r23,r31,15888
c000000000081e68:	48 00 19 d9 	bl      c000000000083840 <.xmon_printf>
c000000000081e6c:	60 00 00 00 	nop
c000000000081e70:	39 40 ff ff 	li      r10,-1
c000000000081e74:	3d 22 ff b3 	addis   r9,r2,-77
c000000000081e78:	f9 41 01 60 	std     r10,352(r1)
c000000000081e7c:	39 29 19 68 	addi    r9,r9,6504
c000000000081e80:	3e a2 ff db 	addis   r21,r2,-37
c000000000081e84:	3e 82 ff d6 	addis   r20,r2,-42
c000000000081e88:	38 80 ff ff 	li      r4,-1
c000000000081e8c:	eb 09 00 00 	ld      r24,0(r9)
c000000000081e90:	3b 80 00 00 	li      r28,0
c000000000081e94:	7b 5a 00 20 	clrldi  r26,r26,32
c000000000081e98:	3f 22 00 09 	addis   r25,r2,9
c000000000081e9c:	3a f7 24 e8 	addi    r23,r23,9448
c000000000081ea0:	3a c0 00 00 	li      r22,0
c000000000081ea4:	3a b5 e4 50 	addi    r21,r21,-7088
c000000000081ea8:	3a 94 8f d0 	addi    r20,r20,-28720
c000000000081eac:	60 00 00 00 	nop
c000000000081eb0:	38 a4 00 01 	addi    r5,r4,1
c000000000081eb4:	7f 03 c3 78 	mr      r3,r24
c000000000081eb8:	38 80 08 00 	li      r4,2048
c000000000081ebc:	7c a5 07 b4 	extsw   r5,r5
c000000000081ec0:	48 39 62 81 	bl      c000000000418140 <.find_next_bit>
c000000000081ec4:	60 00 00 00 	nop
c000000000081ec8:	39 39 33 b8 	addi    r9,r25,13240
c000000000081ecc:	e9 29 00 02 	lwa     r9,0(r9)
c000000000081ed0:	7c 64 d0 38 	and     r4,r3,r26
c000000000081ed4:	f8 81 01 60 	std     r4,352(r1)
c000000000081ed8:	7f a4 48 40 	cmpld   cr7,r4,r9
c000000000081edc:	40 9c 00 68 	bge-    cr7,c000000000081f44 <.xmon_core+0x1a94>
c000000000081ee0:	7c 69 36 70 	srawi   r9,r3,6
c000000000081ee4:	7d 29 01 94 	addze   r9,r9
c000000000081ee8:	78 63 06 a0 	clrldi  r3,r3,58
c000000000081eec:	7d 29 07 b4 	extsw   r9,r9
c000000000081ef0:	79 29 1f 24 	rldicr  r9,r9,3,60
c000000000081ef4:	7d 37 48 2a 	ldx     r9,r23,r9
c000000000081ef8:	7d 23 1c 36 	srd     r3,r9,r3
c000000000081efc:	78 67 07 e1 	clrldi. r7,r3,63
c000000000081f00:	41 82 00 80 	beq-    c000000000081f80 <.xmon_core+0x1ad0>
c000000000081f04:	2f bc 00 00 	cmpdi   cr7,r28,0
c000000000081f08:	41 9e 00 b8 	beq-    cr7,c000000000081fc0 <.xmon_core+0x1b10>
c000000000081f0c:	38 a4 00 01 	addi    r5,r4,1
c000000000081f10:	7f 03 c3 78 	mr      r3,r24
c000000000081f14:	38 80 08 00 	li      r4,2048
c000000000081f18:	7c a5 07 b4 	extsw   r5,r5
c000000000081f1c:	48 39 62 25 	bl      c000000000418140 <.find_next_bit>
c000000000081f20:	60 00 00 00 	nop
c000000000081f24:	39 39 33 b8 	addi    r9,r25,13240
c000000000081f28:	3b 9c 00 01 	addi    r28,r28,1
c000000000081f2c:	7f 9c 07 b4 	extsw   r28,r28
c000000000081f30:	e9 29 00 02 	lwa     r9,0(r9)
c000000000081f34:	7c 64 d0 38 	and     r4,r3,r26
c000000000081f38:	f8 81 01 60 	std     r4,352(r1)
c000000000081f3c:	7f a4 48 40 	cmpld   cr7,r4,r9
c000000000081f40:	41 9c ff a0 	blt+    cr7,c000000000081ee0 <.xmon_core+0x1a30>
c000000000081f44:	2f 9c 00 01 	cmpwi   cr7,r28,1
c000000000081f48:	40 9d 00 18 	ble-    cr7,c000000000081f60 <.xmon_core+0x1ab0>
c000000000081f4c:	3c 62 ff db 	addis   r3,r2,-37
c000000000081f50:	38 80 07 ff 	li      r4,2047
c000000000081f54:	38 63 e4 50 	addi    r3,r3,-7088
c000000000081f58:	48 00 18 e9 	bl      c000000000083840 <.xmon_printf>
c000000000081f5c:	60 00 00 00 	nop
c000000000081f60:	3c 62 ff d5 	addis   r3,r2,-43
c000000000081f64:	38 63 0e 68 	addi    r3,r3,3688
c000000000081f68:	48 00 18 d9 	bl      c000000000083840 <.xmon_printf>
c000000000081f6c:	60 00 00 00 	nop
c000000000081f70:	4b ff ea a0 	b       c000000000080a10 <.xmon_core+0x560>
c000000000081f74:	60 00 00 00 	nop
c000000000081f78:	60 00 00 00 	nop
c000000000081f7c:	60 00 00 00 	nop


c000000000081f80:	2f 9c 00 01 	cmpwi   cr7,r28,1
c000000000081f84:	40 9d 00 2c 	ble-    cr7,c000000000081fb0 <.xmon_core+0x1b00>
c000000000081f88:	38 84 ff ff 	addi    r4,r4,-1
c000000000081f8c:	7e a3 ab 78 	mr      r3,r21
c000000000081f90:	48 00 18 b1 	bl      c000000000083840 <.xmon_printf>
c000000000081f94:	60 00 00 00 	nop
c000000000081f98:	7e dc b3 78 	mr      r28,r22
c000000000081f9c:	e8 81 01 60 	ld      r4,352(r1)
c000000000081fa0:	4b ff ff 10 	b       c000000000081eb0 <.xmon_core+0x1a00>
c000000000081fa4:	60 00 00 00 	nop
c000000000081fa8:	60 00 00 00 	nop
c000000000081fac:	60 00 00 00 	nop


c000000000081fb0:	7e dc b3 78 	mr      r28,r22
c000000000081fb4:	4b ff fe fc 	b       c000000000081eb0 <.xmon_core+0x1a00>
c000000000081fb8:	60 00 00 00 	nop
c000000000081fbc:	60 00 00 00 	nop


c000000000081fc0:	7e 83 a3 78 	mr      r3,r20
c000000000081fc4:	48 00 18 7d 	bl      c000000000083840 <.xmon_printf>
c000000000081fc8:	60 00 00 00 	nop


c000000000081fcc:	e8 81 01 60 	ld      r4,352(r1)
c000000000081fd0:	4b ff ff 3c 	b       c000000000081f0c <.xmon_core+0x1a5c>


c000000000081fd4:	39 38 44 e8 	addi    r9,r24,17640
c000000000081fd8:	7e c3 b3 78 	mr      r3,r22
c000000000081fdc:	e8 89 00 30 	ld      r4,48(r9)
c000000000081fe0:	7c 84 e0 50 	subf    r4,r4,r28
c000000000081fe4:	48 00 18 5d 	bl      c000000000083840 <.xmon_printf>
c000000000081fe8:	60 00 00 00 	nop
c000000000081fec:	4b ff fb 18 	b       c000000000081b04 <.xmon_core+0x1654>


c000000000081ff0:	3d 20 00 02 	lis     r9,2
c000000000081ff4:	7f a4 48 40 	cmpld   cr7,r4,r9
c000000000081ff8:	40 9d f5 f8 	ble+    cr7,c0000000000815f0 <.xmon_core+0x1140>
c000000000081ffc:	f9 3c 00 50 	std     r9,80(r28)
c000000000082000:	3c 80 00 02 	lis     r4,2
c000000000082004:	4b ff f5 ec 	b       c0000000000815f0 <.xmon_core+0x1140>


c000000000082008:	38 61 01 60 	addi    r3,r1,352
c00000000008200c:	4b ff d3 b5 	bl      c00000000007f3c0 <.scanhex>
c000000000082010:	2f a3 00 00 	cmpdi   cr7,r3,0
c000000000082014:	40 9e 07 54 	bne-    cr7,c000000000082768 <.xmon_core+0x22b8>
c000000000082018:	38 e0 01 00 	li      r7,256
c00000000008201c:	39 3f 3e 10 	addi    r9,r31,15888
c000000000082020:	7c e9 03 a6 	mtctr   r7
c000000000082024:	39 29 00 1c 	addi    r9,r9,28
c000000000082028:	39 40 00 00 	li      r10,0
c00000000008202c:	60 00 00 00 	nop
c000000000082030:	91 49 00 00 	stw     r10,0(r9)
c000000000082034:	39 29 00 20 	addi    r9,r9,32
c000000000082038:	42 00 ff f8 	bdnz+   c000000000082030 <.xmon_core+0x1b80>
c00000000008203c:	3c 62 ff d4 	addis   r3,r2,-44
c000000000082040:	39 3f 3e 10 	addi    r9,r31,15888
c000000000082044:	39 40 00 00 	li      r10,0
c000000000082048:	38 63 97 18 	addi    r3,r3,-26856
c00000000008204c:	f9 49 67 08 	std     r10,26376(r9)
c000000000082050:	91 49 66 fc 	stw     r10,26364(r9)
c000000000082054:	48 00 17 ed 	bl      c000000000083840 <.xmon_printf>
c000000000082058:	60 00 00 00 	nop
c00000000008205c:	4b ff e9 b4 	b       c000000000080a10 <.xmon_core+0x560>


c000000000082060:	3d 22 00 0b 	addis   r9,r2,11
c000000000082064:	39 29 69 18 	addi    r9,r9,26904
c000000000082068:	e9 29 00 00 	ld      r9,0(r9)
c00000000008206c:	e9 29 00 10 	ld      r9,16(r9)
c000000000082070:	79 26 e7 e1 	rldicl. r6,r9,28,63
c000000000082074:	41 82 07 5c 	beq-    c0000000000827d0 <.xmon_core+0x2320>
c000000000082078:	39 5f 3e 10 	addi    r10,r31,15888
c00000000008207c:	e9 2a 67 08 	ld      r9,26376(r10)
c000000000082080:	2f a9 00 00 	cmpdi   cr7,r9,0
c000000000082084:	41 9e 00 18 	beq-    cr7,c00000000008209c <.xmon_core+0x1bec>
c000000000082088:	81 09 00 14 	lwz     r8,20(r9)
c00000000008208c:	55 08 00 3a 	rlwinm  r8,r8,0,0,29
c000000000082090:	91 09 00 14 	stw     r8,20(r9)
c000000000082094:	39 20 00 00 	li      r9,0
c000000000082098:	f9 2a 67 08 	std     r9,26376(r10)
c00000000008209c:	38 61 01 60 	addi    r3,r1,352
c0000000000820a0:	4b ff d3 21 	bl      c00000000007f3c0 <.scanhex>
c0000000000820a4:	2f a3 00 00 	cmpdi   cr7,r3,0
c0000000000820a8:	41 9e e9 68 	beq+    cr7,c000000000080a10 <.xmon_core+0x560>
c0000000000820ac:	e8 61 01 60 	ld      r3,352(r1)
c0000000000820b0:	4b ff aa 41 	bl      c00000000007caf0 <.check_bp_loc>
c0000000000820b4:	2f a3 00 00 	cmpdi   cr7,r3,0
c0000000000820b8:	41 9e e9 58 	beq+    cr7,c000000000080a10 <.xmon_core+0x560>
c0000000000820bc:	e8 61 01 60 	ld      r3,352(r1)
c0000000000820c0:	4b ff 9a 11 	bl      c00000000007bad0 <.new_breakpoint>
c0000000000820c4:	2c 23 00 00 	cmpdi   r3,0
c0000000000820c8:	41 82 e9 48 	beq+    c000000000080a10 <.xmon_core+0x560>
c0000000000820cc:	81 03 00 14 	lwz     r8,20(r3)
c0000000000820d0:	39 5f 3e 10 	addi    r10,r31,15888
c0000000000820d4:	f8 6a 67 08 	std     r3,26376(r10)
c0000000000820d8:	61 08 00 03 	ori     r8,r8,3
c0000000000820dc:	91 03 00 14 	stw     r8,20(r3)
c0000000000820e0:	4b ff e9 30 	b       c000000000080a10 <.xmon_core+0x560>


c0000000000820e4:	4b ff cc 0d 	bl      c00000000007ecf0 <.inchar>
c0000000000820e8:	3b 40 00 05 	li      r26,5
c0000000000820ec:	2f 83 00 72 	cmpwi   cr7,r3,114
c0000000000820f0:	41 9e 00 1c 	beq-    cr7,c00000000008210c <.xmon_core+0x1c5c>
c0000000000820f4:	2f 83 00 77 	cmpwi   cr7,r3,119
c0000000000820f8:	3b 40 00 06 	li      r26,6
c0000000000820fc:	41 9e 00 10 	beq-    cr7,c00000000008210c <.xmon_core+0x1c5c>
c000000000082100:	39 3f 3e 10 	addi    r9,r31,15888
c000000000082104:	3b 40 00 07 	li      r26,7
c000000000082108:	90 69 24 d8 	stw     r3,9432(r9)
c00000000008210c:	3b 9f 3e 10 	addi    r28,r31,15888
c000000000082110:	39 20 00 00 	li      r9,0
c000000000082114:	38 7c 66 e8 	addi    r3,r28,26344
c000000000082118:	f9 3c 66 e8 	std     r9,26344(r28)
c00000000008211c:	91 3c 66 fc 	stw     r9,26364(r28)
c000000000082120:	4b ff d2 a1 	bl      c00000000007f3c0 <.scanhex>
c000000000082124:	2f a3 00 00 	cmpdi   cr7,r3,0
c000000000082128:	41 9e e8 e8 	beq+    cr7,c000000000080a10 <.xmon_core+0x560>
c00000000008212c:	3d 20 bf ff 	lis     r9,-16385
c000000000082130:	e9 5c 66 e8 	ld      r10,26344(r28)
c000000000082134:	61 29 ff ff 	ori     r9,r9,65535
c000000000082138:	79 29 07 c6 	rldicr  r9,r9,32,31
c00000000008213c:	65 29 ff ff 	oris    r9,r9,65535
c000000000082140:	61 29 ff ff 	ori     r9,r9,65535
c000000000082144:	7f aa 48 40 	cmpld   cr7,r10,r9
c000000000082148:	40 9d 0d 74 	ble-    cr7,c000000000082ebc <.xmon_core+0x2a0c>
c00000000008214c:	79 4a 07 24 	rldicr  r10,r10,0,60
c000000000082150:	63 5a 00 10 	ori     r26,r26,16
c000000000082154:	f9 5c 66 e8 	std     r10,26344(r28)
c000000000082158:	93 5c 66 fc 	stw     r26,26364(r28)
c00000000008215c:	4b ff e8 b4 	b       c000000000080a10 <.xmon_core+0x560>


c000000000082160:	2f 83 00 66 	cmpwi   cr7,r3,102
c000000000082164:	41 9e f4 2c 	beq+    cr7,c000000000081590 <.xmon_core+0x10e0>
c000000000082168:	4b ff f4 20 	b       c000000000081588 <.xmon_core+0x10d8>
c00000000008216c:	60 00 00 00 	nop

/*
3216         case 'r':
3217                 restart_spus();
3218                 break;
*/
c000000000082170:	4b ff b0 41 	bl      c00000000007d1b0 <.restart_spus>
c000000000082174:	4b ff e8 9c 	b       c000000000080a10 <.xmon_core+0x560>


c000000000082178:	4b ff d2 49 	bl      c00000000007f3c0 <.scanhex>
c00000000008217c:	ea bc 00 50 	ld      r21,80(r28)
c000000000082180:	39 3f 3e 10 	addi    r9,r31,15888
c000000000082184:	2f b5 00 00 	cmpdi   cr7,r21,0
c000000000082188:	40 9e 09 dc 	bne-    cr7,c000000000082b64 <.xmon_core+0x26b4>
c00000000008218c:	39 40 00 40 	li      r10,64
c000000000082190:	ea 69 25 f0 	ld      r19,9712(r9)
c000000000082194:	3a a0 00 40 	li      r21,64
c000000000082198:	f9 5c 00 50 	std     r10,80(r28)
c00000000008219c:	3e c2 ff d5 	addis   r22,r2,-43
c0000000000821a0:	3e e2 ff b1 	addis   r23,r2,-79
c0000000000821a4:	3f 02 ff d4 	addis   r24,r2,-44
c0000000000821a8:	3b 21 01 28 	addi    r25,r1,296
c0000000000821ac:	3a 00 00 00 	li      r16,0
c0000000000821b0:	3a d6 f5 50 	addi    r22,r22,-2736
c0000000000821b4:	3a f7 08 f0 	addi    r23,r23,2288
c0000000000821b8:	3b 18 86 58 	addi    r24,r24,-31144
c0000000000821bc:	60 00 00 00 	nop
c0000000000821c0:	2f b5 00 10 	cmpdi   cr7,r21,16
c0000000000821c4:	7e ba ab 78 	mr      r26,r21
c0000000000821c8:	40 9d 00 08 	ble-    cr7,c0000000000821d0 <.xmon_core+0x1d20>
c0000000000821cc:	3b 40 00 10 	li      r26,16
c0000000000821d0:	7e 63 9b 78 	mr      r3,r19
c0000000000821d4:	7f 24 cb 78 	mr      r4,r25
c0000000000821d8:	7f 45 07 b4 	extsw   r5,r26
c0000000000821dc:	7e 1c 83 78 	mr      r28,r16
c0000000000821e0:	4b ff a1 e1 	bl      c00000000007c3c0 <.mread>
c0000000000821e4:	7c 6e 1b 78 	mr      r14,r3
c0000000000821e8:	7c 74 1b 78 	mr      r20,r3
c0000000000821ec:	7e 73 1a 14 	add     r19,r19,r3
c0000000000821f0:	48 00 00 2c 	b       c00000000008221c <.xmon_core+0x1d6c>
c0000000000821f4:	60 00 00 00 	nop
c0000000000821f8:	60 00 00 00 	nop
c0000000000821fc:	60 00 00 00 	nop


c000000000082200:	7c 99 e0 ae 	lbzx    r4,r25,r28
c000000000082204:	7f 03 c3 78 	mr      r3,r24
c000000000082208:	3b 9c 00 01 	addi    r28,r28,1
c00000000008220c:	48 00 16 35 	bl      c000000000083840 <.xmon_printf>
c000000000082210:	60 00 00 00 	nop
c000000000082214:	7f ba e0 00 	cmpd    cr7,r26,r28
c000000000082218:	40 9d 00 34 	ble-    cr7,c00000000008224c <.xmon_core+0x1d9c>
c00000000008221c:	7f b4 e0 00 	cmpd    cr7,r20,r28
c000000000082220:	41 9d ff e0 	bgt+    cr7,c000000000082200 <.xmon_core+0x1d50>
c000000000082224:	39 3f 3e 10 	addi    r9,r31,15888
c000000000082228:	7e c3 b3 78 	mr      r3,r22
c00000000008222c:	e9 29 21 4a 	lwa     r9,8520(r9)
c000000000082230:	3b 9c 00 01 	addi    r28,r28,1
c000000000082234:	79 29 1f 24 	rldicr  r9,r9,3,60
c000000000082238:	7c 97 48 2a 	ldx     r4,r23,r9
c00000000008223c:	48 00 16 05 	bl      c000000000083840 <.xmon_printf>
c000000000082240:	60 00 00 00 	nop
c000000000082244:	7f ba e0 00 	cmpd    cr7,r26,r28
c000000000082248:	41 9d ff d4 	bgt+    cr7,c00000000008221c <.xmon_core+0x1d6c>
c00000000008224c:	7f ba 70 00 	cmpd    cr7,r26,r14
c000000000082250:	7e ba a8 50 	subf    r21,r26,r21
c000000000082254:	41 9d 00 0c 	bgt-    cr7,c000000000082260 <.xmon_core+0x1db0>
c000000000082258:	2f b5 00 00 	cmpdi   cr7,r21,0
c00000000008225c:	41 9d ff 64 	bgt+    cr7,c0000000000821c0 <.xmon_core+0x1d10>
c000000000082260:	3c 62 ff d5 	addis   r3,r2,-43
c000000000082264:	38 63 0e 68 	addi    r3,r3,3688
c000000000082268:	48 00 15 d9 	bl      c000000000083840 <.xmon_printf>
c00000000008226c:	60 00 00 00 	nop
c000000000082270:	3d 42 ff ed 	addis   r10,r2,-19
c000000000082274:	39 3f 3e 10 	addi    r9,r31,15888
c000000000082278:	39 4a 44 e8 	addi    r10,r10,17640
c00000000008227c:	e9 09 25 f0 	ld      r8,9712(r9)
c000000000082280:	e8 ea 00 50 	ld      r7,80(r10)
c000000000082284:	3d 42 ff d4 	addis   r10,r2,-44
c000000000082288:	39 4a 91 20 	addi    r10,r10,-28384
c00000000008228c:	7d 07 42 14 	add     r8,r7,r8
c000000000082290:	f9 49 26 38 	std     r10,9784(r9)
c000000000082294:	f9 09 25 f0 	std     r8,9712(r9)
c000000000082298:	4b ff e7 78 	b       c000000000080a10 <.xmon_core+0x560>
/*
3223         case 'f':
3224                 scanhex(&num);
3225                 if (num >= XMON_NUM_SPUS || !spu_info[num].spu) {
3226                         printf("*** Error: invalid spu number\n");
3227                         return 0;
3228                 }
3229 
3230                 switch (cmd) {
3231                 case 'f':
3232                         dump_spu_fields(spu_info[num].spu);
3233                         break;
3234                 default:
3235                         dump_spu_ls(num, subcmd);
3236                         break;
3237                 }
3238 
3239                 break;
*/
c00000000008229c:	3b 20 00 00 	li      r25,0
c0000000000822a0:	3b 9f 3e 10 	addi    r28,r31,15888
c0000000000822a4:	38 7c 66 e0 	addi    r3,r28,26336
c0000000000822a8:	4b ff d1 19 	bl      c00000000007f3c0 <.scanhex>
c0000000000822ac:	e9 3c 66 e0 	ld      r9,26336(r28)
c0000000000822b0:	2b a9 00 0f 	cmpldi  cr7,r9,15
c0000000000822b4:	41 9d 01 0c 	bgt-    cr7,c0000000000823c0 <.xmon_core+0x1f10>
c0000000000822b8:	1d 49 00 28 	mulli   r10,r9,40
c0000000000822bc:	7f 9c 52 14 	add     r28,r28,r10
c0000000000822c0:	e8 7c 21 50 	ld      r3,8528(r28)
c0000000000822c4:	2f a3 00 00 	cmpdi   cr7,r3,0
c0000000000822c8:	41 9e 00 f8 	beq-    cr7,c0000000000823c0 <.xmon_core+0x1f10>
c0000000000822cc:	2f 9a 00 66 	cmpwi   cr7,r26,102		; 102 = 'f'
c0000000000822d0:	41 9e 05 b4 	beq-    cr7,c000000000082884 <.xmon_core+0x23d4>
c0000000000822d4:	7d 23 4b 78 	mr      r3,r9
c0000000000822d8:	7f 24 cb 78 	mr      r4,r25
c0000000000822dc:	4b ff df e5 	bl      c0000000000802c0 <.dump_spu_ls>
c0000000000822e0:	4b ff e7 30 	b       c000000000080a10 <.xmon_core+0x560>

/*
1627                 unsigned long sp, toc;
1628                 asm("mr %0,1" : "=r" (sp) :);
1629                 asm("mr %0,2" : "=r" (toc) :);
1630 
1631                 printf("msr  = "REG"  sprg0= "REG"\n",
1632                        mfmsr(), mfspr(SPRN_SPRG0));
1633                 printf("pvr  = "REG"  sprg1= "REG"\n",
1634                        mfspr(SPRN_PVR), mfspr(SPRN_SPRG1));
1635                 printf("dec  = "REG"  sprg2= "REG"\n",
1636                        mfspr(SPRN_DEC), mfspr(SPRN_SPRG2));
1637                 printf("sp   = "REG"  sprg3= "REG"\n", sp, mfspr(SPRN_SPRG3));
1638                 printf("toc  = "REG"  dar  = "REG"\n", toc, mfspr(SPRN_DAR));
1639 
1640                 return;
*/
c0000000000822e4:	7c 3a 0b 78 	mr      r26,r1
c0000000000822e8:	7c 5c 13 78 	mr      r28,r2
c0000000000822ec:	7c 80 00 a6 	mfmsr   r4
c0000000000822f0:	7c b0 42 a6 	mfsprg  r5,0
c0000000000822f4:	3c 62 ff d4 	addis   r3,r2,-44
c0000000000822f8:	38 63 91 28 	addi    r3,r3,-28376
c0000000000822fc:	48 00 15 45 	bl      c000000000083840 <.xmon_printf>
c000000000082300:	60 00 00 00 	nop
c000000000082304:	7c 9f 42 a6 	mfpvr   r4
c000000000082308:	7c b1 42 a6 	mfsprg  r5,1
c00000000008230c:	3c 62 ff d4 	addis   r3,r2,-44
c000000000082310:	38 63 91 48 	addi    r3,r3,-28344
c000000000082314:	48 00 15 2d 	bl      c000000000083840 <.xmon_printf>
c000000000082318:	60 00 00 00 	nop
c00000000008231c:	7c 96 02 a6 	mfdec   r4
c000000000082320:	7c b2 42 a6 	mfsprg  r5,2
c000000000082324:	3c 62 ff d4 	addis   r3,r2,-44
c000000000082328:	38 63 91 68 	addi    r3,r3,-28312
c00000000008232c:	48 00 15 15 	bl      c000000000083840 <.xmon_printf>
c000000000082330:	60 00 00 00 	nop
c000000000082334:	7c b3 42 a6 	mfsprg  r5,3
c000000000082338:	3c 62 ff d4 	addis   r3,r2,-44
c00000000008233c:	7f 44 d3 78 	mr      r4,r26
c000000000082340:	38 63 91 88 	addi    r3,r3,-28280
c000000000082344:	48 00 14 fd 	bl      c000000000083840 <.xmon_printf>
c000000000082348:	60 00 00 00 	nop
c00000000008234c:	7c b3 02 a6 	mfdar   r5
c000000000082350:	3c 62 ff d4 	addis   r3,r2,-44
c000000000082354:	7f 84 e3 78 	mr      r4,r28
c000000000082358:	38 63 91 a8 	addi    r3,r3,-28248
c00000000008235c:	48 00 14 e5 	bl      c000000000083840 <.xmon_printf>
c000000000082360:	60 00 00 00 	nop
c000000000082364:	4b ff e6 ac 	b       c000000000080a10 <.xmon_core+0x560>


c000000000082368:	4b ff c9 89 	bl      c00000000007ecf0 <.inchar>
c00000000008236c:	78 69 00 20 	clrldi  r9,r3,32
c000000000082370:	7c 79 1b 78 	mr      r25,r3
c000000000082374:	39 49 ff d0 	addi    r10,r9,-48
c000000000082378:	2b 8a 00 09 	cmplwi  cr7,r10,9
c00000000008237c:	40 9d 00 24 	ble-    cr7,c0000000000823a0 <.xmon_core+0x1ef0>
c000000000082380:	39 49 ff 9f 	addi    r10,r9,-97
c000000000082384:	2b 8a 00 05 	cmplwi  cr7,r10,5
c000000000082388:	40 9d 00 18 	ble-    cr7,c0000000000823a0 <.xmon_core+0x1ef0>
c00000000008238c:	39 29 ff bf 	addi    r9,r9,-65
c000000000082390:	2b 89 00 05 	cmplwi  cr7,r9,5
c000000000082394:	40 9d 00 0c 	ble-    cr7,c0000000000823a0 <.xmon_core+0x1ef0>
c000000000082398:	2f 83 00 0a 	cmpwi   cr7,r3,10
c00000000008239c:	40 9e ff 04 	bne+    cr7,c0000000000822a0 <.xmon_core+0x1df0>
c0000000000823a0:	3b 9f 3e 10 	addi    r28,r31,15888
c0000000000823a4:	39 3f 3e 10 	addi    r9,r31,15888
c0000000000823a8:	38 7c 66 e0 	addi    r3,r28,26336
c0000000000823ac:	93 29 24 d8 	stw     r25,9432(r9)
c0000000000823b0:	4b ff d0 11 	bl      c00000000007f3c0 <.scanhex>
c0000000000823b4:	e9 3c 66 e0 	ld      r9,26336(r28)
c0000000000823b8:	2b a9 00 0f 	cmpldi  cr7,r9,15
c0000000000823bc:	40 9d fe fc 	ble+    cr7,c0000000000822b8 <.xmon_core+0x1e08>
c0000000000823c0:	3c 62 ff d4 	addis   r3,r2,-44
c0000000000823c4:	38 63 91 d8 	addi    r3,r3,-28200
c0000000000823c8:	48 00 14 79 	bl      c000000000083840 <.xmon_printf>
c0000000000823cc:	60 00 00 00 	nop
c0000000000823d0:	4b ff e6 40 	b       c000000000080a10 <.xmon_core+0x560>


c0000000000823d4:	39 3a 44 e8 	addi    r9,r26,17640
c0000000000823d8:	39 40 00 08 	li      r10,8
c0000000000823dc:	91 49 00 40 	stw     r10,64(r9)
c0000000000823e0:	7f 74 db 78 	mr      r20,r27
c0000000000823e4:	4b ff ee 9c 	b       c000000000081280 <.xmon_core+0xdd0>


c0000000000823e8:	81 3c 66 d0 	lwz     r9,26320(r28)
c0000000000823ec:	7f 74 db 78 	mr      r20,r27
c0000000000823f0:	7d 29 00 34 	cntlzw  r9,r9
c0000000000823f4:	55 29 d9 7e 	rlwinm  r9,r9,27,5,31
c0000000000823f8:	91 3c 66 d0 	stw     r9,26320(r28)
c0000000000823fc:	4b ff ee 84 	b       c000000000081280 <.xmon_core+0xdd0>


c000000000082400:	39 20 00 01 	li      r9,1
c000000000082404:	7f 74 db 78 	mr      r20,r27
c000000000082408:	91 3c 66 d4 	stw     r9,26324(r28)
c00000000008240c:	4b ff ee 74 	b       c000000000081280 <.xmon_core+0xdd0>


c000000000082410:	3c c2 00 0f 	addis   r6,r2,15
c000000000082414:	7f 74 db 78 	mr      r20,r27
c000000000082418:	38 66 64 00 	addi    r3,r6,25600
c00000000008241c:	4b ff cf a5 	bl      c00000000007f3c0 <.scanhex>
c000000000082420:	4b ff ee 60 	b       c000000000081280 <.xmon_core+0xdd0>


c000000000082424:	39 3a 44 e8 	addi    r9,r26,17640
c000000000082428:	39 40 00 04 	li      r10,4
c00000000008242c:	91 49 00 40 	stw     r10,64(r9)
c000000000082430:	7f 74 db 78 	mr      r20,r27
c000000000082434:	4b ff ee 4c 	b       c000000000081280 <.xmon_core+0xdd0>


c000000000082438:	39 3a 44 e8 	addi    r9,r26,17640
c00000000008243c:	39 40 00 01 	li      r10,1
c000000000082440:	91 49 00 40 	stw     r10,64(r9)
c000000000082444:	7f 74 db 78 	mr      r20,r27
c000000000082448:	4b ff ee 38 	b       c000000000081280 <.xmon_core+0xdd0>


c00000000008244c:	39 3a 44 e8 	addi    r9,r26,17640
c000000000082450:	e9 5c 25 f0 	ld      r10,9712(r28)
c000000000082454:	7f 74 db 78 	mr      r20,r27
c000000000082458:	e9 29 00 42 	lwa     r9,64(r9)
c00000000008245c:	7d 29 50 50 	subf    r9,r9,r10
c000000000082460:	f9 3c 25 f0 	std     r9,9712(r28)
c000000000082464:	4b ff ee 1c 	b       c000000000081280 <.xmon_core+0xdd0>


c000000000082468:	2f 99 00 00 	cmpwi   cr7,r25,0
c00000000008246c:	41 9c 07 70 	blt-    cr7,c000000000082bdc <.xmon_core+0x272c>
c000000000082470:	e9 5c 25 f0 	ld      r10,9712(r28)
c000000000082474:	39 20 00 10 	li      r9,16
c000000000082478:	3b 20 ff fc 	li      r25,-4
c00000000008247c:	7d 29 50 50 	subf    r9,r9,r10
c000000000082480:	7f 74 db 78 	mr      r20,r27
c000000000082484:	f9 3c 25 f0 	std     r9,9712(r28)
c000000000082488:	4b ff ed f8 	b       c000000000081280 <.xmon_core+0xdd0>


c00000000008248c:	e8 61 01 b8 	ld      r3,440(r1)
c000000000082490:	7f 74 db 78 	mr      r20,r27
c000000000082494:	48 00 13 ad 	bl      c000000000083840 <.xmon_printf>
c000000000082498:	60 00 00 00 	nop
c00000000008249c:	4b ff ed e4 	b       c000000000081280 <.xmon_core+0xdd0>


c0000000000824a0:	39 3a 44 e8 	addi    r9,r26,17640
c0000000000824a4:	38 61 01 60 	addi    r3,r1,352
c0000000000824a8:	e9 29 00 42 	lwa     r9,64(r9)
c0000000000824ac:	7f 74 db 78 	mr      r20,r27
c0000000000824b0:	f9 21 01 60 	std     r9,352(r1)
c0000000000824b4:	4b ff cf 0d 	bl      c00000000007f3c0 <.scanhex>
c0000000000824b8:	e9 3c 25 f0 	ld      r9,9712(r28)
c0000000000824bc:	e9 41 01 60 	ld      r10,352(r1)
c0000000000824c0:	7d 2a 4a 14 	add     r9,r10,r9
c0000000000824c4:	f9 3c 25 f0 	std     r9,9712(r28)
c0000000000824c8:	4b ff ed b8 	b       c000000000081280 <.xmon_core+0xdd0>


c0000000000824cc:	39 3a 44 e8 	addi    r9,r26,17640
c0000000000824d0:	38 61 01 60 	addi    r3,r1,352
c0000000000824d4:	e9 29 00 42 	lwa     r9,64(r9)
c0000000000824d8:	7f 74 db 78 	mr      r20,r27
c0000000000824dc:	f9 21 01 60 	std     r9,352(r1)
c0000000000824e0:	4b ff ce e1 	bl      c00000000007f3c0 <.scanhex>
c0000000000824e4:	e9 5c 25 f0 	ld      r10,9712(r28)
c0000000000824e8:	e9 21 01 60 	ld      r9,352(r1)
c0000000000824ec:	7d 29 50 50 	subf    r9,r9,r10
c0000000000824f0:	f9 3c 25 f0 	std     r9,9712(r28)
c0000000000824f4:	4b ff ed 8c 	b       c000000000081280 <.xmon_core+0xdd0>


c0000000000824f8:	39 3a 44 e8 	addi    r9,r26,17640
c0000000000824fc:	39 40 00 02 	li      r10,2
c000000000082500:	91 49 00 40 	stw     r10,64(r9)
c000000000082504:	7f 74 db 78 	mr      r20,r27
c000000000082508:	4b ff ed 78 	b       c000000000081280 <.xmon_core+0xdd0>


c00000000008250c:	2f 99 00 00 	cmpwi   cr7,r25,0
c000000000082510:	40 9d 06 a8 	ble-    cr7,c000000000082bb8 <.xmon_core+0x2708>
c000000000082514:	39 20 00 01 	li      r9,1
c000000000082518:	e9 1c 25 f0 	ld      r8,9712(r28)
c00000000008251c:	7d 2a c8 30 	slw     r10,r9,r25
c000000000082520:	3b 39 00 04 	addi    r25,r25,4
c000000000082524:	7d 29 c8 30 	slw     r9,r9,r25
c000000000082528:	7d 4a 07 b4 	extsw   r10,r10
c00000000008252c:	7d 4a 40 50 	subf    r10,r10,r8
c000000000082530:	7f 39 07 b4 	extsw   r25,r25
c000000000082534:	7d 29 07 b4 	extsw   r9,r9
c000000000082538:	7d 2a 4a 14 	add     r9,r10,r9
c00000000008253c:	7f 74 db 78 	mr      r20,r27
c000000000082540:	f9 3c 25 f0 	std     r9,9712(r28)
c000000000082544:	4b ff ed 3c 	b       c000000000081280 <.xmon_core+0xdd0>


c000000000082548:	39 20 00 00 	li      r9,0
c00000000008254c:	7f 74 db 78 	mr      r20,r27
c000000000082550:	91 3c 66 d4 	stw     r9,26324(r28)
c000000000082554:	4b ff ed 2c 	b       c000000000081280 <.xmon_core+0xdd0>


c000000000082558:	39 3a 44 e8 	addi    r9,r26,17640
c00000000008255c:	7f 74 db 78 	mr      r20,r27
c000000000082560:	e9 49 00 42 	lwa     r10,64(r9)
c000000000082564:	e9 3c 25 f0 	ld      r9,9712(r28)
c000000000082568:	7d 2a 4a 14 	add     r9,r10,r9
c00000000008256c:	f9 3c 25 f0 	std     r9,9712(r28)
c000000000082570:	4b ff ed 10 	b       c000000000081280 <.xmon_core+0xdd0>


c000000000082574:	4b ff c7 7d 	bl      c00000000007ecf0 <.inchar>
c000000000082578:	3a 00 00 09 	li      r16,9
c00000000008257c:	3a 80 00 08 	li      r20,8
c000000000082580:	2f a3 00 5c 	cmpdi   cr7,r3,92
c000000000082584:	f8 61 01 60 	std     r3,352(r1)
c000000000082588:	41 9e 00 8c 	beq-    cr7,c000000000082614 <.xmon_core+0x2164>
c00000000008258c:	60 00 00 00 	nop
c000000000082590:	2f a3 00 27 	cmpdi   cr7,r3,39
c000000000082594:	41 9e 00 f4 	beq-    cr7,c000000000082688 <.xmon_core+0x21d8>
c000000000082598:	39 3a 44 e8 	addi    r9,r26,17640
c00000000008259c:	80 e9 00 40 	lwz     r7,64(r9)
c0000000000825a0:	2f 87 00 00 	cmpwi   cr7,r7,0
c0000000000825a4:	7c e5 07 b4 	extsw   r5,r7
c0000000000825a8:	40 9d 00 30 	ble-    cr7,c0000000000825d8 <.xmon_core+0x2128>
c0000000000825ac:	e8 c1 01 60 	ld      r6,352(r1)
c0000000000825b0:	39 01 01 27 	addi    r8,r1,295
c0000000000825b4:	78 e7 18 28 	rldic   r7,r7,3,32
c0000000000825b8:	7f 69 db 78 	mr      r9,r27
c0000000000825bc:	60 00 00 00 	nop
c0000000000825c0:	39 49 00 08 	addi    r10,r9,8
c0000000000825c4:	7c c9 4c 36 	srd     r9,r6,r9
c0000000000825c8:	7f 8a 38 40 	cmplw   cr7,r10,r7
c0000000000825cc:	9d 28 00 01 	stbu    r9,1(r8)
c0000000000825d0:	79 49 00 20 	clrldi  r9,r10,32
c0000000000825d4:	40 9e ff ec 	bne+    cr7,c0000000000825c0 <.xmon_core+0x2110>
c0000000000825d8:	81 3c 66 d0 	lwz     r9,26320(r28)
c0000000000825dc:	2f 89 00 00 	cmpwi   cr7,r9,0
c0000000000825e0:	41 9e 00 70 	beq-    cr7,c000000000082650 <.xmon_core+0x21a0>
c0000000000825e4:	e8 7c 25 f0 	ld      r3,9712(r28)
c0000000000825e8:	38 81 01 28 	addi    r4,r1,296
c0000000000825ec:	4b ff a6 35 	bl      c00000000007cc20 <.mwrite>
c0000000000825f0:	39 3a 44 e8 	addi    r9,r26,17640
c0000000000825f4:	e9 49 00 42 	lwa     r10,64(r9)
c0000000000825f8:	e9 3c 25 f0 	ld      r9,9712(r28)
c0000000000825fc:	7d 2a 4a 14 	add     r9,r10,r9
c000000000082600:	f9 3c 25 f0 	std     r9,9712(r28)
c000000000082604:	4b ff c6 ed 	bl      c00000000007ecf0 <.inchar>
c000000000082608:	2f a3 00 5c 	cmpdi   cr7,r3,92
c00000000008260c:	f8 61 01 60 	std     r3,352(r1)
c000000000082610:	40 9e ff 80 	bne+    cr7,c000000000082590 <.xmon_core+0x20e0>
c000000000082614:	4b ff c6 dd 	bl      c00000000007ecf0 <.inchar>
c000000000082618:	7e a9 ab 78 	mr      r9,r21
c00000000008261c:	2f 83 00 6e 	cmpwi   cr7,r3,110
c000000000082620:	41 9e 00 18 	beq-    cr7,c000000000082638 <.xmon_core+0x2188>
c000000000082624:	41 9d 02 28 	bgt-    cr7,c00000000008284c <.xmon_core+0x239c>
c000000000082628:	2f 83 00 62 	cmpwi   cr7,r3,98
c00000000008262c:	7e 89 a3 78 	mr      r9,r20
c000000000082630:	41 9e 00 08 	beq-    cr7,c000000000082638 <.xmon_core+0x2188>
c000000000082634:	7c 69 1b 78 	mr      r9,r3
c000000000082638:	f9 21 01 60 	std     r9,352(r1)
c00000000008263c:	4b ff ff 5c 	b       c000000000082598 <.xmon_core+0x20e8>


c000000000082640:	eb 61 01 c0 	ld      r27,448(r1)
c000000000082644:	eb c1 01 c8 	ld      r30,456(r1)
c000000000082648:	4b ff c7 39 	bl      c00000000007ed80 <.scannl>
c00000000008264c:	4b ff e3 c4 	b       c000000000080a10 <.xmon_core+0x560>


c000000000082650:	7c a4 2b 78 	mr      r4,r5
c000000000082654:	38 61 01 28 	addi    r3,r1,296
c000000000082658:	f8 a1 01 d0 	std     r5,464(r1)
c00000000008265c:	4b ff c7 75 	bl      c00000000007edd0 <.byterev>
c000000000082660:	e8 a1 01 d0 	ld      r5,464(r1)
c000000000082664:	4b ff ff 80 	b       c0000000000825e4 <.xmon_core+0x2134>
c000000000082668:	60 00 00 00 	nop
c00000000008266c:	60 00 00 00 	nop


c000000000082670:	7c a4 2b 78 	mr      r4,r5
c000000000082674:	38 61 01 28 	addi    r3,r1,296
c000000000082678:	f8 a1 01 d0 	std     r5,464(r1)
c00000000008267c:	4b ff c7 55 	bl      c00000000007edd0 <.byterev>
c000000000082680:	e8 a1 01 d0 	ld      r5,464(r1)
c000000000082684:	4b ff ec 60 	b       c0000000000812e4 <.xmon_core+0xe34>


c000000000082688:	39 3a 44 e8 	addi    r9,r26,17640
c00000000008268c:	ea 89 00 42 	lwa     r20,64(r9)
c000000000082690:	e9 3c 25 f0 	ld      r9,9712(r28)
c000000000082694:	7d 34 48 50 	subf    r9,r20,r9
c000000000082698:	f9 3c 25 f0 	std     r9,9712(r28)
c00000000008269c:	4b ff eb e4 	b       c000000000081280 <.xmon_core+0xdd0>


c0000000000826a0:	3d 22 00 09 	addis   r9,r2,9
c0000000000826a4:	3b 80 00 01 	li      r28,1
c0000000000826a8:	e9 29 2f 00 	ld      r9,12032(r9)
c0000000000826ac:	4b ff e0 20 	b       c0000000000806cc <.xmon_core+0x21c>


c0000000000826b0:	7e 43 93 78 	mr      r3,r18
c0000000000826b4:	48 00 11 8d 	bl      c000000000083840 <.xmon_printf>
c0000000000826b8:	60 00 00 00 	nop
c0000000000826bc:	4b ff e3 54 	b       c000000000080a10 <.xmon_core+0x560>


/*
 747                 brk.address = dabr.address;
 748                 brk.type = (dabr.enabled & HW_BRK_TYPE_DABR) | HW_BRK_TYPE_PRIV_ALL;
 749                 brk.len = 8;
 750                 set_breakpoint(&brk);
*/
c0000000000826c0:	55 29 07 7e 	clrlwi  r9,r9,29
c0000000000826c4:	e9 4a 66 e8 	ld      r10,26344(r10)
c0000000000826c8:	38 61 01 28 	addi    r3,r1,296
c0000000000826cc:	61 29 00 38 	ori     r9,r9,56
c0000000000826d0:	b1 21 01 30 	sth     r9,304(r1)
c0000000000826d4:	39 20 00 08 	li      r9,8
c0000000000826d8:	f9 41 01 28 	std     r10,296(r1)
c0000000000826dc:	b1 21 01 32 	sth     r9,306(r1)
c0000000000826e0:	4b f9 18 a1 	bl      c000000000013f80 <.set_breakpoint>
c0000000000826e4:	60 00 00 00 	nop
c0000000000826e8:	4b ff e0 e8 	b       c0000000000807d0 <.xmon_core+0x320>


/*
 533         if ((regs->msr & (MSR_IR|MSR_PR|MSR_64BIT)) == (MSR_IR|MSR_64BIT)) {
 534                 bp = at_breakpoint(regs->nip);
 535                 if (bp != NULL) {
 536                         int stepped = emulate_step(regs, bp->instr[0]);
 537                         if (stepped == 0) {
 538                                 regs->nip = (unsigned long) &bp->instr[0];
 539                                 atomic_inc(&bp->ref_count);
 540                         } else if (stepped < 0) {
 541                                 printf("Couldn't single-step %s instruction\n",
 542                                     (IS_RFID(bp->instr[0])? "rfid": "mtmsrd"));
 543                         }
 544                 }
 545         }
*/
c0000000000826ec:	e8 e1 02 a0 	ld      r7,672(r1)
c0000000000826f0:	3b ea 00 08 	addi    r31,r10,8
c0000000000826f4:	39 4a 20 08 	addi    r10,r10,8200
c0000000000826f8:	e9 07 01 00 	ld      r8,256(r7)
c0000000000826fc:	48 00 00 10 	b       c00000000008270c <.xmon_core+0x225c>
c000000000082700:	3b ff 00 20 	addi    r31,r31,32
c000000000082704:	7f bf 50 00 	cmpd    cr7,r31,r10
c000000000082708:	41 9e e0 b4 	beq+    cr7,c0000000000807bc <.xmon_core+0x30c>
c00000000008270c:	81 3f 00 14 	lwz     r9,20(r31)
c000000000082710:	2f 89 00 00 	cmpwi   cr7,r9,0
c000000000082714:	41 9e ff ec 	beq+    cr7,c000000000082700 <.xmon_core+0x2250>
c000000000082718:	e9 3f 00 00 	ld      r9,0(r31)
c00000000008271c:	7f a8 48 00 	cmpd    cr7,r8,r9
c000000000082720:	40 9e ff e0 	bne+    cr7,c000000000082700 <.xmon_core+0x2250>
c000000000082724:	2f bf 00 00 	cmpdi   cr7,r31,0
c000000000082728:	41 be e0 94 	beq-    cr7,c0000000000807bc <.xmon_core+0x30c>
c00000000008272c:	80 9f 00 08 	lwz     r4,8(r31)
c000000000082730:	e8 61 02 a0 	ld      r3,672(r1)
c000000000082734:	48 79 b0 ed 	bl      c00000000081d820 <.emulate_step>
c000000000082738:	60 00 00 00 	nop
c00000000008273c:	2c 23 00 00 	cmpdi   r3,0
c000000000082740:	40 82 05 08 	bne-    c000000000082c48 <.xmon_core+0x2798>
c000000000082744:	e9 01 02 a0 	ld      r8,672(r1)
c000000000082748:	39 3f 00 08 	addi    r9,r31,8
c00000000008274c:	f9 28 01 00 	std     r9,256(r8)
c000000000082750:	39 3f 00 10 	addi    r9,r31,16
c000000000082754:	7d 40 48 28 	lwarx   r10,0,r9
c000000000082758:	31 4a 00 01 	addic   r10,r10,1
c00000000008275c:	7d 40 49 2d 	stwcx.  r10,0,r9
c000000000082760:	40 a2 ff f4 	bne-    c000000000082754 <.xmon_core+0x22a4>
c000000000082764:	4b ff e0 58 	b       c0000000000807bc <.xmon_core+0x30c>


c000000000082768:	e8 81 01 60 	ld      r4,352(r1)
c00000000008276c:	39 24 ff ff 	addi    r9,r4,-1
c000000000082770:	2b a9 00 ff 	cmpldi  cr7,r9,255
c000000000082774:	40 9d 02 70 	ble-    cr7,c0000000000829e4 <.xmon_core+0x2534>
c000000000082778:	39 5f 3e 10 	addi    r10,r31,15888
c00000000008277c:	3b 8a 00 08 	addi    r28,r10,8
c000000000082780:	39 4a 20 08 	addi    r10,r10,8200
c000000000082784:	48 00 00 18 	b       c00000000008279c <.xmon_core+0x22ec>
c000000000082788:	60 00 00 00 	nop
c00000000008278c:	60 00 00 00 	nop


c000000000082790:	3b 9c 00 20 	addi    r28,r28,32
c000000000082794:	7f bc 50 00 	cmpd    cr7,r28,r10
c000000000082798:	41 9e 00 24 	beq-    cr7,c0000000000827bc <.xmon_core+0x230c>
c00000000008279c:	81 3c 00 14 	lwz     r9,20(r28)
c0000000000827a0:	2f 89 00 00 	cmpwi   cr7,r9,0
c0000000000827a4:	41 9e ff ec 	beq+    cr7,c000000000082790 <.xmon_core+0x22e0>
c0000000000827a8:	e9 3c 00 00 	ld      r9,0(r28)
c0000000000827ac:	7f a4 48 00 	cmpd    cr7,r4,r9
c0000000000827b0:	40 9e ff e0 	bne+    cr7,c000000000082790 <.xmon_core+0x22e0>
c0000000000827b4:	2f bc 00 00 	cmpdi   cr7,r28,0
c0000000000827b8:	40 be 02 3c 	bne+    cr7,c0000000000829f4 <.xmon_core+0x2544>
c0000000000827bc:	3c 62 ff d4 	addis   r3,r2,-44
c0000000000827c0:	38 63 97 38 	addi    r3,r3,-26824
c0000000000827c4:	48 00 10 7d 	bl      c000000000083840 <.xmon_printf>
c0000000000827c8:	60 00 00 00 	nop
c0000000000827cc:	4b ff e2 44 	b       c000000000080a10 <.xmon_core+0x560>


c0000000000827d0:	3c 62 ff d4 	addis   r3,r2,-44
c0000000000827d4:	38 63 9a 50 	addi    r3,r3,-26032
c0000000000827d8:	48 00 10 69 	bl      c000000000083840 <.xmon_printf>
c0000000000827dc:	60 00 00 00 	nop
c0000000000827e0:	4b ff e2 30 	b       c000000000080a10 <.xmon_core+0x560>


c0000000000827e4:	3f 82 ff ed 	addis   r28,r2,-19
c0000000000827e8:	3b 9c 44 e8 	addi    r28,r28,17640
c0000000000827ec:	38 7c 00 48 	addi    r3,r28,72
c0000000000827f0:	4b ff cb d1 	bl      c00000000007f3c0 <.scanhex>
c0000000000827f4:	e9 3c 00 48 	ld      r9,72(r28)
c0000000000827f8:	2f a9 00 00 	cmpdi   cr7,r9,0
c0000000000827fc:	41 9e 01 d8 	beq-    cr7,c0000000000829d4 <.xmon_core+0x2524>
c000000000082800:	3d 40 00 02 	lis     r10,2
c000000000082804:	7d 24 4b 78 	mr      r4,r9
c000000000082808:	7f a9 50 40 	cmpld   cr7,r9,r10
c00000000008280c:	40 9d 00 0c 	ble-    cr7,c000000000082818 <.xmon_core+0x2368>
c000000000082810:	f9 5c 00 48 	std     r10,72(r28)
c000000000082814:	3c 80 00 02 	lis     r4,2
c000000000082818:	3b 9f 3e 10 	addi    r28,r31,15888
c00000000008281c:	3d 22 ff f7 	addis   r9,r2,-9
c000000000082820:	38 c9 b4 68 	addi    r6,r9,-19352
c000000000082824:	e8 7c 25 f0 	ld      r3,9712(r28)
c000000000082828:	38 a0 00 01 	li      r5,1
c00000000008282c:	4b ff 9d 35 	bl      c00000000007c560 <.generic_inst_dump>
c000000000082830:	e9 5c 25 f0 	ld      r10,9712(r28)
c000000000082834:	3d 22 ff d4 	addis   r9,r2,-44
c000000000082838:	39 29 91 18 	addi    r9,r9,-28392
c00000000008283c:	7c 63 52 14 	add     r3,r3,r10
c000000000082840:	f9 3c 26 38 	std     r9,9784(r28)
c000000000082844:	f8 7c 25 f0 	std     r3,9712(r28)
c000000000082848:	4b ff e1 c8 	b       c000000000080a10 <.xmon_core+0x560>


c00000000008284c:	2f 83 00 72 	cmpwi   cr7,r3,114
c000000000082850:	7f c9 f3 78 	mr      r9,r30
c000000000082854:	41 9e fd e4 	beq+    cr7,c000000000082638 <.xmon_core+0x2188>
c000000000082858:	2f 83 00 74 	cmpwi   cr7,r3,116
c00000000008285c:	7e 09 83 78 	mr      r9,r16
c000000000082860:	41 9e fd d8 	beq+    cr7,c000000000082638 <.xmon_core+0x2188>
c000000000082864:	7c 69 1b 78 	mr      r9,r3
c000000000082868:	4b ff fd d0 	b       c000000000082638 <.xmon_core+0x2188>


c00000000008286c:	e9 3f 00 00 	ld      r9,0(r31)
c000000000082870:	7c 00 48 6c 	dcbst   0,r9
c000000000082874:	7c 00 04 ac 	sync    
c000000000082878:	7c 00 4f ac 	icbi    0,r9
c00000000008287c:	4c 00 01 2c 	isync
c000000000082880:	4b ff e5 70 	b       c000000000080df0 <.xmon_core+0x940>


/*
3232                         dump_spu_fields(spu_info[num].spu);
3233                         break;
*/
c000000000082884:	4b ff aa ed 	bl      c00000000007d370 <.dump_spu_fields>
c000000000082888:	4b ff e1 88 	b       c000000000080a10 <.xmon_core+0x560>


c00000000008288c:	e8 61 01 60 	ld      r3,352(r1)
c000000000082890:	4b ff a2 61 	bl      c00000000007caf0 <.check_bp_loc>
c000000000082894:	2f a3 00 00 	cmpdi   cr7,r3,0
c000000000082898:	41 9e e1 78 	beq+    cr7,c000000000080a10 <.xmon_core+0x560>
c00000000008289c:	e8 61 01 60 	ld      r3,352(r1)
c0000000000828a0:	4b ff 92 31 	bl      c00000000007bad0 <.new_breakpoint>
c0000000000828a4:	2c 23 00 00 	cmpdi   r3,0
c0000000000828a8:	41 82 e1 68 	beq+    c000000000080a10 <.xmon_core+0x560>
c0000000000828ac:	81 43 00 14 	lwz     r10,20(r3)
c0000000000828b0:	61 4a 00 08 	ori     r10,r10,8
c0000000000828b4:	91 43 00 14 	stw     r10,20(r3)
c0000000000828b8:	4b ff e1 58 	b       c000000000080a10 <.xmon_core+0x560>


/*
 395                 secondary = !(xmon_taken && cpu == xmon_owner);
 396                 goto cmdloop;
*/
c0000000000828bc:	3d 02 ff ed 	addis   r8,r2,-19
c0000000000828c0:	39 08 44 e8 	addi    r8,r8,17640
c0000000000828c4:	e9 08 00 28 	ld      r8,40(r8)
c0000000000828c8:	2f a8 00 00 	cmpdi   cr7,r8,0
c0000000000828cc:	40 9e 05 c0 	bne-    cr7,c000000000082e8c <.xmon_core+0x29dc>
c0000000000828d0:	80 e1 01 90 	lwz     r7,400(r1)
c0000000000828d4:	39 40 00 01 	li      r10,1
c0000000000828d8:	3b 80 00 01 	li      r28,1
c0000000000828dc:	7d 4a 38 36 	sld     r10,r10,r7
c0000000000828e0:	f9 41 01 80 	std     r10,384(r1)
c0000000000828e4:	4b ff dd e8 	b       c0000000000806cc <.xmon_core+0x21c>


/*
 659 static struct bpt *at_breakpoint(unsigned long pc)
 660 {
 661         int i;
 662         struct bpt *bp;
 663 
 664         bp = bpts;
 665         for (i = 0; i < NBPTS; ++i, ++bp)
 666                 if (bp->enabled && pc == bp->address)
 667                         return bp;
 668         return NULL;
 669 }
*/
c0000000000828e8:	e9 21 02 a0 	ld      r9,672(r1)
c0000000000828ec:	38 ca 00 08 	addi    r6,r10,8
c0000000000828f0:	39 4a 20 08 	addi    r10,r10,8200
c0000000000828f4:	f8 c1 01 70 	std     r6,368(r1)
c0000000000828f8:	e9 09 01 00 	ld      r8,256(r9)
c0000000000828fc:	7c c9 33 78 	mr      r9,r6
c000000000082900:	48 00 00 1c 	b       c00000000008291c <.xmon_core+0x246c>
c000000000082904:	60 00 00 00 	nop
c000000000082908:	60 00 00 00 	nop
c00000000008290c:	60 00 00 00 	nop
c000000000082910:	39 29 00 20 	addi    r9,r9,32
c000000000082914:	7f a9 50 00 	cmpd    cr7,r9,r10
c000000000082918:	41 9e 05 f8 	beq-    cr7,c000000000082f10 <.xmon_core+0x2a60>
c00000000008291c:	80 c9 00 14 	lwz     r6,20(r9)
c000000000082920:	2f 86 00 00 	cmpwi   cr7,r6,0
c000000000082924:	41 9e ff ec 	beq+    cr7,c000000000082910 <.xmon_core+0x2460>
c000000000082928:	e8 c9 00 00 	ld      r6,0(r9)
c00000000008292c:	7f a8 30 00 	cmpd    cr7,r8,r6
c000000000082930:	40 9e ff e0 	bne+    cr7,c000000000082910 <.xmon_core+0x2460>
c000000000082934:	2f a9 00 00 	cmpdi   cr7,r9,0
c000000000082938:	f9 21 01 70 	std     r9,368(r1)		; 368(r1) = bp
c00000000008293c:	41 be df e4 	beq-    cr7,c000000000080920 <.xmon_core+0x470>
/*
 409                 get_output_lock();
 410                 excprint(regs);
 411                 if (bp) {
 412                         printf("cpu 0x%x stopped at breakpoint 0x%x (",
 413                                cpu, BP_NUM(bp));
 414                         xmon_print_symbol(regs->nip, " ", ")\n");
 415                 }
 416                 if (unrecoverable_excp(regs))
 417                         printf("WARNING: exception is not recoverable, "
 418                                "can't continue\n");
*/
c000000000082940:	4b ff 8f 21 	bl      c00000000007b860 <.get_output_lock>
c000000000082944:	e8 61 02 a0 	ld      r3,672(r1)		; 672(r1) = regs
c000000000082948:	4b ff c7 19 	bl      c00000000007f060 <.excprint>
c00000000008294c:	e8 c1 01 70 	ld      r6,368(r1)
c000000000082950:	2f a6 00 00 	cmpdi   cr7,r6,0		; check bp
c000000000082954:	41 9e 00 4c 	beq-    cr7,c0000000000829a0 <.xmon_core+0x24f0>
c000000000082958:	3c a2 00 0f 	addis   r5,r2,15
c00000000008295c:	e8 81 01 78 	ld      r4,376(r1)
c000000000082960:	3c 62 ff d4 	addis   r3,r2,-44
c000000000082964:	38 a5 3e 10 	addi    r5,r5,15888
c000000000082968:	38 63 8b 18 	addi    r3,r3,-29928
c00000000008296c:	38 a5 00 08 	addi    r5,r5,8
c000000000082970:	7c a5 30 50 	subf    r5,r5,r6
c000000000082974:	7c a5 2e 74 	sradi   r5,r5,5
c000000000082978:	38 a5 00 01 	addi    r5,r5,1
c00000000008297c:	48 00 0e c5 	bl      c000000000083840 <.xmon_printf>
c000000000082980:	60 00 00 00 	nop
c000000000082984:	e8 e1 02 a0 	ld      r7,672(r1)
c000000000082988:	3c 82 ff d8 	addis   r4,r2,-40
c00000000008298c:	3c a2 ff da 	addis   r5,r2,-38
c000000000082990:	38 84 a6 70 	addi    r4,r4,-22928
c000000000082994:	38 a5 96 70 	addi    r5,r5,-27024
c000000000082998:	e8 67 01 00 	ld      r3,256(r7)
c00000000008299c:	4b ff 98 c5 	bl      c00000000007c260 <.xmon_print_symbol>
c0000000000829a0:	e9 01 02 a0 	ld      r8,672(r1)
c0000000000829a4:	e9 28 01 08 	ld      r9,264(r8)
c0000000000829a8:	79 2a ff e3 	rldicl. r10,r9,63,63		; check unrecoverable_excp(regs)
c0000000000829ac:	41 82 05 50 	beq-    c000000000082efc <.xmon_core+0x2a4c>
									; == "if (bp || unrecoverable_excp(regs))"
c0000000000829b0:	3d 22 00 0f 	addis   r9,r2,15
c0000000000829b4:	39 40 00 00 	li      r10,0
c0000000000829b8:	38 c0 00 00 	li      r6,0
c0000000000829bc:	91 49 3e 10 	stw     r10,15888(r9)		; release_output_lock();
c0000000000829c0:	f8 c1 02 a8 	std     r6,680(r1)		/* fromipi = 0; */
c0000000000829c4:	4b ff dc 80 	b       c000000000080644 <.xmon_core+0x194>


c0000000000829c8:	39 20 00 08 	li      r9,8
c0000000000829cc:	91 2a 00 40 	stw     r9,64(r10)
c0000000000829d0:	4b ff e7 50 	b       c000000000081120 <.xmon_core+0xc70>


c0000000000829d4:	39 20 00 10 	li      r9,16
c0000000000829d8:	38 80 00 10 	li      r4,16
c0000000000829dc:	f9 3c 00 48 	std     r9,72(r28)
c0000000000829e0:	4b ff fe 38 	b       c000000000082818 <.xmon_core+0x2368>


c0000000000829e4:	3b 9f 3e 10 	addi    r28,r31,15888
c0000000000829e8:	79 29 2e a4 	rldicr  r9,r9,5,58
c0000000000829ec:	3b 9c 00 08 	addi    r28,r28,8
c0000000000829f0:	7f 9c 4a 14 	add     r28,r28,r9
c0000000000829f4:	38 9f 3e 10 	addi    r4,r31,15888
c0000000000829f8:	3c 62 ff d4 	addis   r3,r2,-44
c0000000000829fc:	38 84 00 08 	addi    r4,r4,8
c000000000082a00:	38 63 97 50 	addi    r3,r3,-26800
c000000000082a04:	7c 84 e0 50 	subf    r4,r4,r28
c000000000082a08:	7c 84 2e 74 	sradi   r4,r4,5
c000000000082a0c:	38 84 00 01 	addi    r4,r4,1
c000000000082a10:	48 00 0e 31 	bl      c000000000083840 <.xmon_printf>
c000000000082a14:	60 00 00 00 	nop
c000000000082a18:	3c 82 ff d8 	addis   r4,r2,-40
c000000000082a1c:	3c a2 ff da 	addis   r5,r2,-38
c000000000082a20:	e8 7c 00 00 	ld      r3,0(r28)
c000000000082a24:	38 84 a6 70 	addi    r4,r4,-22928
c000000000082a28:	38 a5 96 70 	addi    r5,r5,-27024
c000000000082a2c:	4b ff 98 35 	bl      c00000000007c260 <.xmon_print_symbol>
c000000000082a30:	39 20 00 00 	li      r9,0
c000000000082a34:	91 3c 00 14 	stw     r9,20(r28)
c000000000082a38:	4b ff df d8 	b       c000000000080a10 <.xmon_core+0x560>


c000000000082a3c:	39 3a 44 e8 	addi    r9,r26,17640
c000000000082a40:	38 61 01 28 	addi    r3,r1,296
c000000000082a44:	e8 89 00 42 	lwa     r4,64(r9)
c000000000082a48:	4b ff c3 89 	bl      c00000000007edd0 <.byterev>
c000000000082a4c:	4b ff e7 6c 	b       c0000000000811b8 <.xmon_core+0xd08>


c000000000082a50:	3c 62 ff d4 	addis   r3,r2,-44
c000000000082a54:	e8 9c 66 e8 	ld      r4,26344(r28)
c000000000082a58:	38 63 98 c8 	addi    r3,r3,-26424
c000000000082a5c:	48 00 0d e5 	bl      c000000000083840 <.xmon_printf>
c000000000082a60:	60 00 00 00 	nop
c000000000082a64:	81 3c 66 fc 	lwz     r9,26364(r28)
c000000000082a68:	79 28 07 e1 	clrldi. r8,r9,63
c000000000082a6c:	7d 29 07 b4 	extsw   r9,r9
c000000000082a70:	40 82 05 58 	bne-    c000000000082fc8 <.xmon_core+0x2b18>
c000000000082a74:	79 2a ff e3 	rldicl. r10,r9,63,63
c000000000082a78:	40 82 05 3c 	bne-    c000000000082fb4 <.xmon_core+0x2b04>
c000000000082a7c:	3c 62 ff d9 	addis   r3,r2,-39
c000000000082a80:	38 63 80 a0 	addi    r3,r3,-32608
c000000000082a84:	48 00 0d bd 	bl      c000000000083840 <.xmon_printf>
c000000000082a88:	60 00 00 00 	nop
c000000000082a8c:	4b ff ec f0 	b       c00000000008177c <.xmon_core+0x12cc>


c000000000082a90:	39 29 00 28 	addi    r9,r9,40
c000000000082a94:	39 40 00 01 	li      r10,1
c000000000082a98:	7c 20 04 ac 	lwsync
c000000000082a9c:	7d 00 48 a8 	ldarx   r8,0,r9
c000000000082aa0:	7d 07 53 78 	or      r7,r8,r10
c000000000082aa4:	7c e0 49 ad 	stdcx.  r7,0,r9
c000000000082aa8:	40 a2 ff f4 	bne-    c000000000082a9c <.xmon_core+0x25ec>
c000000000082aac:	7c 00 04 ac 	sync    
c000000000082ab0:	79 09 07 e1 	clrldi. r9,r8,63
c000000000082ab4:	40 82 ec 10 	bne+    c0000000000816c4 <.xmon_core+0x1214>
c000000000082ab8:	7c 00 04 ac 	sync    
c000000000082abc:	a1 4d 00 0a 	lhz     r10,10(r13)
c000000000082ac0:	e8 81 01 60 	ld      r4,352(r1)
c000000000082ac4:	39 3f 3e 10 	addi    r9,r31,15888
c000000000082ac8:	e8 61 01 b0 	ld      r3,432(r1)
c000000000082acc:	91 49 66 54 	stw     r10,26196(r9)
c000000000082ad0:	48 00 0d 71 	bl      c000000000083840 <.xmon_printf>
c000000000082ad4:	60 00 00 00 	nop
c000000000082ad8:	4b ff df 38 	b       c000000000080a10 <.xmon_core+0x560>


c000000000082adc:	3d 22 00 0b 	addis   r9,r2,11
c000000000082ae0:	38 60 00 00 	li      r3,0
c000000000082ae4:	39 29 6a 30 	addi    r9,r9,27184
c000000000082ae8:	e9 29 01 28 	ld      r9,296(r9)
c000000000082aec:	e9 49 00 00 	ld      r10,0(r9)
c000000000082af0:	f8 41 00 28 	std     r2,40(r1)
c000000000082af4:	7d 49 03 a6 	mtctr   r10
c000000000082af8:	e8 49 00 08 	ld      r2,8(r9)
c000000000082afc:	4e 80 04 21 	bctrl
c000000000082b00:	e8 41 00 28 	ld      r2,40(r1)
c000000000082b04:	4b ff df 0c 	b       c000000000080a10 <.xmon_core+0x560>


/*
2081 static void dump_pacas(void)
2082 {
2083         unsigned long num;
2084         int c;
2085 
2086         c = inchar();
2087         if (c == 'a') {
2088                 dump_all_pacas();
2089                 return;
2090         }
2091 
2092         termch = c;     \* Put c back, it wasn't 'a' *\
2093 
2094         if (scanhex(&num))
2095                 dump_one_paca(num);
*/
c000000000082b08:	4b ff c1 e9 	bl      c00000000007ecf0 <.inchar>
c000000000082b0c:	2f 83 00 61 	cmpwi   cr7,r3,97
c000000000082b10:	7c 69 1b 78 	mr      r9,r3
c000000000082b14:	41 9e 04 08 	beq-    cr7,c000000000082f1c <.xmon_core+0x2a6c>
c000000000082b18:	3b 9f 3e 10 	addi    r28,r31,15888
c000000000082b1c:	38 61 01 60 	addi    r3,r1,352		; r3 = &num
c000000000082b20:	91 3c 24 d8 	stw     r9,9432(r28)
c000000000082b24:	4b ff c8 9d 	bl      c00000000007f3c0 <.scanhex>
c000000000082b28:	2f a3 00 00 	cmpdi   cr7,r3,0
c000000000082b2c:	41 9e 03 c4 	beq-    cr7,c000000000082ef0 <.xmon_core+0x2a40>
c000000000082b30:	e8 61 01 66 	lwa     r3,356(r1)		; r3 = (int) num
c000000000082b34:	4b ff 90 7d 	bl      c00000000007bbb0 <.dump_one_paca>
c000000000082b38:	4b ff de d8 	b       c000000000080a10 <.xmon_core+0x560>


c000000000082b3c:	3d 22 00 0b 	addis   r9,r2,11
c000000000082b40:	39 29 6a 30 	addi    r9,r9,27184
c000000000082b44:	e9 29 01 38 	ld      r9,312(r9)
c000000000082b48:	e9 49 00 00 	ld      r10,0(r9)
c000000000082b4c:	f8 41 00 28 	std     r2,40(r1)
c000000000082b50:	7d 49 03 a6 	mtctr   r10
c000000000082b54:	e8 49 00 08 	ld      r2,8(r9)
c000000000082b58:	4e 80 04 21 	bctrl
c000000000082b5c:	e8 41 00 28 	ld      r2,40(r1)
c000000000082b60:	4b ff de b0 	b       c000000000080a10 <.xmon_core+0x560>


c000000000082b64:	ea 69 25 f0 	ld      r19,9712(r9)
c000000000082b68:	41 9d f6 34 	bgt+    cr7,c00000000008219c <.xmon_core+0x1cec>
c000000000082b6c:	4b ff f6 f4 	b       c000000000082260 <.xmon_core+0x1db0>


c000000000082b70:	39 3a 44 e8 	addi    r9,r26,17640
c000000000082b74:	7c 83 23 78 	mr      r3,r4
c000000000082b78:	e8 a9 00 42 	lwa     r5,64(r9)
c000000000082b7c:	38 81 01 28 	addi    r4,r1,296
c000000000082b80:	4b ff 98 41 	bl      c00000000007c3c0 <.mread>
c000000000082b84:	e8 9c 25 f0 	ld      r4,9712(r28)
c000000000082b88:	f8 61 01 60 	std     r3,352(r1)
c000000000082b8c:	4b ff e5 e8 	b       c000000000081174 <.xmon_core+0xcc4>


c000000000082b90:	4b ff c0 11 	bl      c00000000007eba0 <.dump_log_buf>
c000000000082b94:	4b ff de 7c 	b       c000000000080a10 <.xmon_core+0x560>


c000000000082b98:	e8 9c 25 f0 	ld      r4,9712(r28)
c000000000082b9c:	7c 94 22 14 	add     r4,r20,r4
c000000000082ba0:	f8 9c 25 f0 	std     r4,9712(r28)
c000000000082ba4:	4b ff e5 c4 	b       c000000000081168 <.xmon_core+0xcb8>


c000000000082ba8:	7f 44 07 b4 	extsw   r4,r26
c000000000082bac:	4b ff e4 28 	b       c000000000080fd4 <.xmon_core+0xb24>


c000000000082bb0:	38 63 26 40 	addi    r3,r3,9792
c000000000082bb4:	4b ff f1 5c 	b       c000000000081d10 <.xmon_core+0x1860>


c000000000082bb8:	e9 5c 25 f0 	ld      r10,9712(r28)
c000000000082bbc:	39 20 00 10 	li      r9,16
c000000000082bc0:	3b 20 00 04 	li      r25,4
c000000000082bc4:	4b ff f9 74 	b       c000000000082538 <.xmon_core+0x2088>


c000000000082bc8:	3c 62 ff d4 	addis   r3,r2,-44
c000000000082bcc:	38 63 97 68 	addi    r3,r3,-26776
c000000000082bd0:	48 00 0c 71 	bl      c000000000083840 <.xmon_printf>
c000000000082bd4:	60 00 00 00 	nop
c000000000082bd8:	4b ff de 38 	b       c000000000080a10 <.xmon_core+0x560>


c000000000082bdc:	7d 19 00 d0 	neg     r8,r25
c000000000082be0:	39 20 00 01 	li      r9,1
c000000000082be4:	e9 5c 25 f0 	ld      r10,9712(r28)
c000000000082be8:	3b 39 ff fc 	addi    r25,r25,-4
c000000000082bec:	7d 28 40 30 	slw     r8,r9,r8
c000000000082bf0:	7c f9 00 d0 	neg     r7,r25
c000000000082bf4:	7d 08 07 b4 	extsw   r8,r8
c000000000082bf8:	7d 29 38 30 	slw     r9,r9,r7
c000000000082bfc:	7d 48 52 14 	add     r10,r8,r10
c000000000082c00:	7f 39 07 b4 	extsw   r25,r25
c000000000082c04:	7d 29 07 b4 	extsw   r9,r9
c000000000082c08:	4b ff f8 74 	b       c00000000008247c <.xmon_core+0x1fcc>


c000000000082c0c:	e8 9a 26 46 	lwa     r4,9796(r26)
c000000000082c10:	e8 7a 66 b0 	ld      r3,26288(r26)
c000000000082c14:	e8 ba 66 b8 	ld      r5,26296(r26)
c000000000082c18:	4b fc c7 dd 	bl      c00000000004f3f4 <.memset>
c000000000082c1c:	60 00 00 00 	nop
c000000000082c20:	4b ff dd f0 	b       c000000000080a10 <.xmon_core+0x560>


c000000000082c24:	e8 7a 66 b0 	ld      r3,26288(r26)
c000000000082c28:	e8 9a 26 48 	ld      r4,9800(r26)
c000000000082c2c:	e8 ba 66 b8 	ld      r5,26296(r26)
c000000000082c30:	4b fc c8 c1 	bl      c00000000004f4f0 <.memmove>
c000000000082c34:	60 00 00 00 	nop
c000000000082c38:	4b ff dd d8 	b       c000000000080a10 <.xmon_core+0x560>


c000000000082c3c:	39 20 00 01 	li      r9,1
c000000000082c40:	91 2a 00 40 	stw     r9,64(r10)
c000000000082c44:	4b ff e4 dc 	b       c000000000081120 <.xmon_core+0xc70>


c000000000082c48:	2f 83 00 00 	cmpwi   cr7,r3,0
c000000000082c4c:	40 9c db 70 	bge+    cr7,c0000000000807bc <.xmon_core+0x30c>
c000000000082c50:	81 5f 00 08 	lwz     r10,8(r31)
c000000000082c54:	3d 20 fc 00 	lis     r9,-1024
c000000000082c58:	61 29 07 fe 	ori     r9,r9,2046
c000000000082c5c:	7d 4a 48 38 	and     r10,r10,r9
c000000000082c60:	6d 49 4c 00 	xoris   r9,r10,19456
c000000000082c64:	2f 89 00 24 	cmpwi   cr7,r9,36
c000000000082c68:	41 9e 03 8c 	beq-    cr7,c000000000082ff4 <.xmon_core+0x2b44>
c000000000082c6c:	3c 82 ff d4 	addis   r4,r2,-44
c000000000082c70:	38 84 8a 98 	addi    r4,r4,-30056
c000000000082c74:	3c 62 ff d4 	addis   r3,r2,-44
c000000000082c78:	38 63 91 f8 	addi    r3,r3,-28168
c000000000082c7c:	48 00 0b c5 	bl      c000000000083840 <.xmon_printf>
c000000000082c80:	60 00 00 00 	nop
c000000000082c84:	4b ff db 38 	b       c0000000000807bc <.xmon_core+0x30c>


c000000000082c88:	3d 22 ff b3 	addis   r9,r2,-77
c000000000082c8c:	38 80 08 00 	li      r4,2048
c000000000082c90:	39 29 19 60 	addi    r9,r9,6496
c000000000082c94:	e8 69 00 00 	ld      r3,0(r9)
c000000000082c98:	48 39 26 59 	bl      c0000000004152f0 <.__bitmap_weight>
c000000000082c9c:	60 00 00 00 	nop
c000000000082ca0:	e9 41 01 78 	ld      r10,376(r1)
c000000000082ca4:	7c 7e 1b 78 	mr      r30,r3
c000000000082ca8:	91 5d 66 54 	stw     r10,26196(r29)
c000000000082cac:	7c 00 04 ac 	sync    
c000000000082cb0:	2f 83 00 01 	cmpwi   cr7,r3,1
c000000000082cb4:	40 9d 00 3c 	ble-    cr7,c000000000082cf0 <.xmon_core+0x2840>
c000000000082cb8:	3f e0 05 f5 	lis     r31,1525
c000000000082cbc:	4b fb 55 b5 	bl      c000000000038270 <.smp_send_debugger_break>
c000000000082cc0:	60 00 00 00 	nop
c000000000082cc4:	63 ff e1 00 	ori     r31,r31,57600
c000000000082cc8:	3b bd 24 e8 	addi    r29,r29,9448
c000000000082ccc:	48 00 00 0c 	b       c000000000082cd8 <.xmon_core+0x2828>


c000000000082cd0:	37 ff ff ff 	addic.  r31,r31,-1
c000000000082cd4:	41 82 00 1c 	beq-    c000000000082cf0 <.xmon_core+0x2840>
c000000000082cd8:	7f a3 eb 78 	mr      r3,r29
c000000000082cdc:	38 80 08 00 	li      r4,2048
c000000000082ce0:	48 39 26 11 	bl      c0000000004152f0 <.__bitmap_weight>
c000000000082ce4:	60 00 00 00 	nop
c000000000082ce8:	7f 83 f0 40 	cmplw   cr7,r3,r30
c000000000082cec:	41 9c ff e4 	blt+    cr7,c000000000082cd0 <.xmon_core+0x2820>
c000000000082cf0:	3f e2 00 0f 	addis   r31,r2,15
c000000000082cf4:	3f 42 ff d4 	addis   r26,r2,-44
c000000000082cf8:	3b ff 3e 10 	addi    r31,r31,15888
c000000000082cfc:	3f 62 ff ed 	addis   r27,r2,-19
c000000000082d00:	7f fd fb 78 	mr      r29,r31
c000000000082d04:	3b 5a 8b 78 	addi    r26,r26,-29832
c000000000082d08:	3b ff 00 08 	addi    r31,r31,8
c000000000082d0c:	3b dd 20 08 	addi    r30,r29,8200
c000000000082d10:	48 00 00 1c 	b       c000000000082d2c <.xmon_core+0x287c>
c000000000082d14:	60 00 00 00 	nop
c000000000082d18:	60 00 00 00 	nop
c000000000082d1c:	60 00 00 00 	nop


c000000000082d20:	3b ff 00 20 	addi    r31,r31,32
c000000000082d24:	7f bf f0 00 	cmpd    cr7,r31,r30
c000000000082d28:	41 9e 00 4c 	beq-    cr7,c000000000082d74 <.xmon_core+0x28c4>
c000000000082d2c:	81 3f 00 14 	lwz     r9,20(r31)
c000000000082d30:	71 29 00 0a 	andi.   r9,r9,10
c000000000082d34:	2f 89 00 08 	cmpwi   cr7,r9,8
c000000000082d38:	40 9e ff e8 	bne+    cr7,c000000000082d20 <.xmon_core+0x2870>
c000000000082d3c:	e8 7f 00 00 	ld      r3,0(r31)
c000000000082d40:	38 81 01 60 	addi    r4,r1,352
c000000000082d44:	38 a0 00 04 	li      r5,4
c000000000082d48:	4b ff 96 79 	bl      c00000000007c3c0 <.mread>
c000000000082d4c:	2f 83 00 04 	cmpwi   cr7,r3,4
c000000000082d50:	41 9e 00 e0 	beq-    cr7,c000000000082e30 <.xmon_core+0x2980>
c000000000082d54:	e9 3f 00 00 	ld      r9,0(r31)
c000000000082d58:	7c 00 48 6c 	dcbst   0,r9
c000000000082d5c:	7c 00 04 ac 	sync    
c000000000082d60:	7c 00 4f ac 	icbi    0,r9
c000000000082d64:	4c 00 01 2c 	isync
c000000000082d68:	3b ff 00 20 	addi    r31,r31,32
c000000000082d6c:	7f bf f0 00 	cmpd    cr7,r31,r30
c000000000082d70:	40 9e ff bc 	bne+    cr7,c000000000082d2c <.xmon_core+0x287c>
c000000000082d74:	3c 62 ff d3 	addis   r3,r2,-45
c000000000082d78:	38 63 c5 c8 	addi    r3,r3,-14904
c000000000082d7c:	4b fa 38 85 	bl      c000000000026600 <.rtas_token>
c000000000082d80:	60 00 00 00 	nop
c000000000082d84:	78 63 00 20 	clrldi  r3,r3,32
c000000000082d88:	2f 83 ff ff 	cmpwi   cr7,r3,-1
c000000000082d8c:	90 7d 66 58 	stw     r3,26200(r29)
c000000000082d90:	41 9e 00 48 	beq-    cr7,c000000000082dd8 <.xmon_core+0x2928>
c000000000082d94:	3c 60 40 00 	lis     r3,16384
c000000000082d98:	39 5d 66 70 	addi    r10,r29,26224
c000000000082d9c:	78 63 07 c6 	rldicr  r3,r3,32,31
c000000000082da0:	39 00 00 03 	li      r8,3
c000000000082da4:	60 63 66 58 	ori     r3,r3,26200
c000000000082da8:	39 20 00 00 	li      r9,0
c000000000082dac:	91 1d 66 5c 	stw     r8,26204(r29)
c000000000082db0:	f9 5d 66 a8 	std     r10,26280(r29)
c000000000082db4:	39 00 00 01 	li      r8,1
c000000000082db8:	39 40 23 28 	li      r10,9000
c000000000082dbc:	7c 7d 1a 14 	add     r3,r29,r3
c000000000082dc0:	91 1d 66 60 	stw     r8,26208(r29)
c000000000082dc4:	91 5d 66 64 	stw     r10,26212(r29)
c000000000082dc8:	91 3d 66 68 	stw     r9,26216(r29)
c000000000082dcc:	91 3d 66 6c 	stw     r9,26220(r29)
c000000000082dd0:	4b f8 77 2d 	bl      c00000000000a4fc <.enter_rtas>
c000000000082dd4:	60 00 00 00 	nop
c000000000082dd8:	e8 c1 01 70 	ld      r6,368(r1)
c000000000082ddc:	2f a6 00 00 	cmpdi   cr7,r6,0
c000000000082de0:	41 9e 01 bc 	beq-    cr7,c000000000082f9c <.xmon_core+0x2aec>
c000000000082de4:	e9 01 02 a0 	ld      r8,672(r1)
c000000000082de8:	3d 22 ff f7 	addis   r9,r2,-9
c000000000082dec:	38 80 00 01 	li      r4,1
c000000000082df0:	38 c9 b4 68 	addi    r6,r9,-19352
c000000000082df4:	38 a0 00 00 	li      r5,0
c000000000082df8:	e8 68 01 00 	ld      r3,256(r8)
c000000000082dfc:	4b ff 97 65 	bl      c00000000007c560 <.generic_inst_dump>
c000000000082e00:	3c 62 ff d4 	addis   r3,r2,-44
c000000000082e04:	38 63 8b a0 	addi    r3,r3,-29792
c000000000082e08:	48 00 0a 39 	bl      c000000000083840 <.xmon_printf>
c000000000082e0c:	60 00 00 00 	nop
c000000000082e10:	7c 00 04 ac 	sync    
c000000000082e14:	3d 22 00 0f 	addis   r9,r2,15
c000000000082e18:	39 40 00 01 	li      r10,1
c000000000082e1c:	39 29 3e 10 	addi    r9,r9,15888
c000000000082e20:	91 49 66 50 	stw     r10,26192(r9)
c000000000082e24:	3d 22 00 09 	addis   r9,r2,9
c000000000082e28:	e9 29 2f 00 	ld      r9,12032(r9)
c000000000082e2c:	4b ff d8 a0 	b       c0000000000806cc <.xmon_core+0x21c>


c000000000082e30:	81 3b 44 e8 	lwz     r9,17640(r27)
c000000000082e34:	81 41 01 60 	lwz     r10,352(r1)
c000000000082e38:	7f 8a 48 00 	cmpw    cr7,r10,r9
c000000000082e3c:	40 9e ff 18 	bne+    cr7,c000000000082d54 <.xmon_core+0x28a4>
c000000000082e40:	e8 7f 00 00 	ld      r3,0(r31)
c000000000082e44:	38 9f 00 08 	addi    r4,r31,8
c000000000082e48:	38 a0 00 04 	li      r5,4
c000000000082e4c:	4b ff 9d d5 	bl      c00000000007cc20 <.mwrite>
c000000000082e50:	2f 83 00 04 	cmpwi   cr7,r3,4
c000000000082e54:	41 9e ff 00 	beq+    cr7,c000000000082d54 <.xmon_core+0x28a4>
c000000000082e58:	e8 9f 00 00 	ld      r4,0(r31)
c000000000082e5c:	7f 43 d3 78 	mr      r3,r26
c000000000082e60:	48 00 09 e1 	bl      c000000000083840 <.xmon_printf>
c000000000082e64:	60 00 00 00 	nop
c000000000082e68:	4b ff fe b8 	b       c000000000082d20 <.xmon_core+0x2870>


c000000000082e6c:	7f 96 c8 40 	cmplw   cr7,r22,r25
c000000000082e70:	40 9c db a0 	bge+    cr7,c000000000080a10 <.xmon_core+0x560>
c000000000082e74:	3c 62 ff d4 	addis   r3,r2,-44
c000000000082e78:	7f 24 cb 78 	mr      r4,r25
c000000000082e7c:	38 63 8b e8 	addi    r3,r3,-29720
c000000000082e80:	48 00 09 c1 	bl      c000000000083840 <.xmon_printf>
c000000000082e84:	60 00 00 00 	nop
c000000000082e88:	4b ff db 88 	b       c000000000080a10 <.xmon_core+0x560>


c000000000082e8c:	e9 01 01 78 	ld      r8,376(r1)
c000000000082e90:	81 4a 66 54 	lwz     r10,26196(r10)
c000000000082e94:	80 c1 01 90 	lwz     r6,400(r1)
c000000000082e98:	7d 4a 42 78 	xor     r10,r10,r8
c000000000082e9c:	39 00 00 01 	li      r8,1
c000000000082ea0:	7d 4a 00 34 	cntlzw  r10,r10
c000000000082ea4:	7d 08 30 36 	sld     r8,r8,r6
c000000000082ea8:	f9 01 01 80 	std     r8,384(r1)
c000000000082eac:	55 4a d9 7e 	rlwinm  r10,r10,27,5,31
c000000000082eb0:	69 4a 00 01 	xori    r10,r10,1
c000000000082eb4:	7d 5c 07 b4 	extsw   r28,r10
c000000000082eb8:	4b ff d8 14 	b       c0000000000806cc <.xmon_core+0x21c>


c000000000082ebc:	38 61 01 28 	addi    r3,r1,296
c000000000082ec0:	48 00 09 81 	bl      c000000000083840 <.xmon_printf>
c000000000082ec4:	60 00 00 00 	nop
c000000000082ec8:	4b ff db 48 	b       c000000000080a10 <.xmon_core+0x560>


/*
 859                 case 's':
 860                         if (do_spu_cmd() == 0)
 861                                 break;
 862                         if (do_step(excp))
 863                                 return cmd;
 864                         break;
*/
c000000000082ecc:	e8 6f 01 00 	ld      r3,256(r15)
c000000000082ed0:	38 81 01 60 	addi    r4,r1,352
c000000000082ed4:	38 a0 00 04 	li      r5,4
c000000000082ed8:	4b ff 94 e9 	bl      c00000000007c3c0 <.mread>
c000000000082edc:	2f 83 00 04 	cmpwi   cr7,r3,4
c000000000082ee0:	41 9e 01 20 	beq-    cr7,c000000000083000 <.xmon_core+0x2b50>
c000000000082ee4:	e9 21 02 a0 	ld      r9,672(r1)
c000000000082ee8:	e9 09 01 08 	ld      r8,264(r9)
c000000000082eec:	4b ff de 98 	b       c000000000080d84 <.xmon_core+0x8d4>


/*
2096         else
2097                 dump_one_paca(xmon_owner);
2098 }
*/
c000000000082ef0:	e8 7c 66 56 	lwa     r3,26196(r28)
c000000000082ef4:	4b ff 8c bd 	bl      c00000000007bbb0 <.dump_one_paca>
c000000000082ef8:	4b ff db 18 	b       c000000000080a10 <.xmon_core+0x560>


/*
 417                         printf("WARNING: exception is not recoverable, "
 418                                "can't continue\n");
*/
c000000000082efc:	3c 62 ff d4 	addis   r3,r2,-44
c000000000082f00:	38 63 8b 40 	addi    r3,r3,-29888
c000000000082f04:	48 00 09 3d 	bl      c000000000083840 <.xmon_printf>
c000000000082f08:	60 00 00 00 	nop
c000000000082f0c:	4b ff fa a4 	b       c0000000000829b0 <.xmon_core+0x2500>


/*
 668         return NULL;
 669 }
*/
c000000000082f10:	39 00 00 00 	li      r8,0
c000000000082f14:	f9 01 01 70 	std     r8,368(r1)
c000000000082f18:	4b ff da 08 	b       c000000000080920 <.xmon_core+0x470>


/*
2068 static void dump_all_pacas(void)
2069 {
2070         int cpu;
2071 
2072         if (num_possible_cpus() == 0) {
2073                 printf("No possible cpus, use 'dp #' to dump individual cpus\n");
2074                 return;
2075         }
2077         for_each_possible_cpu(cpu)
2078                 dump_one_paca(cpu);
2079 }
*/
c000000000082f1c:	3d 22 ff b3 	addis   r9,r2,-77
c000000000082f20:	38 80 08 00 	li      r4,2048
c000000000082f24:	39 29 19 68 	addi    r9,r9,6504
c000000000082f28:	3b 80 ff ff 	li      r28,-1
c000000000082f2c:	3f 22 00 09 	addis   r25,r2,9
c000000000082f30:	eb 49 00 00 	ld      r26,0(r9)
c000000000082f34:	7f 43 d3 78 	mr      r3,r26
c000000000082f38:	48 39 23 b9 	bl      c0000000004152f0 <.__bitmap_weight>
c000000000082f3c:	60 00 00 00 	nop
c000000000082f40:	2f a3 00 00 	cmpdi   cr7,r3,0
c000000000082f44:	40 9e 00 14 	bne-    cr7,c000000000082f58 <.xmon_core+0x2aa8>
c000000000082f48:	48 00 00 e4 	b       c00000000008302c <.xmon_core+0x2b7c>
c000000000082f4c:	60 00 00 00 	nop
c000000000082f50:	7f 83 e3 78 	mr      r3,r28
c000000000082f54:	4b ff 8c 5d 	bl      c00000000007bbb0 <.dump_one_paca>
c000000000082f58:	38 bc 00 01 	addi    r5,r28,1
c000000000082f5c:	7f 43 d3 78 	mr      r3,r26
c000000000082f60:	38 80 08 00 	li      r4,2048
c000000000082f64:	7c a5 07 b4 	extsw   r5,r5
c000000000082f68:	48 39 51 d9 	bl      c000000000418140 <.find_next_bit>
c000000000082f6c:	60 00 00 00 	nop
c000000000082f70:	39 39 33 b8 	addi    r9,r25,13240
c000000000082f74:	81 29 00 00 	lwz     r9,0(r9)
c000000000082f78:	7c 7c 07 b4 	extsw   r28,r3
c000000000082f7c:	7f 89 e0 00 	cmpw    cr7,r9,r28
c000000000082f80:	41 9d ff d0 	bgt+    cr7,c000000000082f50 <.xmon_core+0x2aa0>
c000000000082f84:	4b ff da 8c 	b       c000000000080a10 <.xmon_core+0x560>


c000000000082f88:	3c 62 ff d4 	addis   r3,r2,-44
c000000000082f8c:	38 63 8c 38 	addi    r3,r3,-29640
c000000000082f90:	48 00 08 b1 	bl      c000000000083840 <.xmon_printf>
c000000000082f94:	60 00 00 00 	nop
c000000000082f98:	4b ff da 78 	b       c000000000080a10 <.xmon_core+0x560>


c000000000082f9c:	e8 e1 02 a0 	ld      r7,672(r1)
c000000000082fa0:	e9 27 01 40 	ld      r9,320(r7)
c000000000082fa4:	79 29 06 e4 	rldicr  r9,r9,0,59
c000000000082fa8:	2f a9 0d 00 	cmpdi   cr7,r9,3328
c000000000082fac:	40 9e fe 54 	bne+    cr7,c000000000082e00 <.xmon_core+0x2950>
c000000000082fb0:	4b ff fe 34 	b       c000000000082de4 <.xmon_core+0x2934>


c000000000082fb4:	3c 62 ff d9 	addis   r3,r2,-39
c000000000082fb8:	38 63 ae e8 	addi    r3,r3,-20760
c000000000082fbc:	48 00 08 85 	bl      c000000000083840 <.xmon_printf>
c000000000082fc0:	60 00 00 00 	nop
c000000000082fc4:	4b ff fa b8 	b       c000000000082a7c <.xmon_core+0x25cc>


c000000000082fc8:	3c 62 ff da 	addis   r3,r2,-38
c000000000082fcc:	38 63 35 20 	addi    r3,r3,13600
c000000000082fd0:	48 00 08 71 	bl      c000000000083840 <.xmon_printf>
c000000000082fd4:	60 00 00 00 	nop
c000000000082fd8:	e9 3c 66 fe 	lwa     r9,26364(r28)
c000000000082fdc:	4b ff fa 98 	b       c000000000082a74 <.xmon_core+0x25c4>


c000000000082fe0:	38 80 ff ff 	li      r4,-1
c000000000082fe4:	78 84 04 20 	clrldi  r4,r4,48
c000000000082fe8:	4b ff df ec 	b       c000000000080fd4 <.xmon_core+0xb24>


c000000000082fec:	3b 20 00 00 	li      r25,0
c000000000082ff0:	4b ff e2 14 	b       c000000000081204 <.xmon_core+0xd54>


c000000000082ff4:	3c 82 ff d4 	addis   r4,r2,-44
c000000000082ff8:	38 84 8a 90 	addi    r4,r4,-30064
c000000000082ffc:	4b ff fc 78 	b       c000000000082c74 <.xmon_core+0x27c4>


/* static int do_step(struct pt_regs *regs) */
/* { */
c000000000083000:	80 81 01 60 	lwz     r4,352(r1)
c000000000083004:	7d e3 7b 78 	mr      r3,r15
c000000000083008:	48 79 a8 19 	bl      c00000000081d820 <.emulate_step>
c00000000008300c:	60 00 00 00 	nop
c000000000083010:	2f 83 00 00 	cmpwi   cr7,r3,0
c000000000083014:	41 9c 00 dc 	blt-    cr7,c0000000000830f0 <.xmon_core+0x2c40>
c000000000083018:	2f a3 00 00 	cmpdi   cr7,r3,0
c00000000008301c:	40 9e 00 80 	bne-    cr7,c00000000008309c <.xmon_core+0x2bec>
c000000000083020:	e8 e1 02 a0 	ld      r7,672(r1)
c000000000083024:	e9 07 01 08 	ld      r8,264(r7)
c000000000083028:	4b ff dd 5c 	b       c000000000080d84 <.xmon_core+0x8d4>
/* } */


/*
3269 2073                 printf("No possible cpus, use 'dp #' to dump individual cpus\n");
3270 2074                 return;
*/
c00000000008302c:	3c 62 ff d4 	addis   r3,r2,-44
c000000000083030:	38 63 90 e0 	addi    r3,r3,-28448
c000000000083034:	48 00 08 0d 	bl      c000000000083840 <.xmon_printf>
c000000000083038:	60 00 00 00 	nop
c00000000008303c:	4b ff d9 d4 	b       c000000000080a10 <.xmon_core+0x560>


/*
 377         if (cpumask_test_cpu(cpu, &cpus_in_xmon)) {
 378                 get_output_lock();
 379                 excprint(regs);
 380                 printf("cpu 0x%x: Exception %lx %s in xmon, "
 381                        "returning to main loop\n",
 382                        cpu, regs->trap, getvecname(TRAP(regs)));
 383                 release_output_lock();
 384                 longjmp(xmon_fault_jmp[cpu], 1);
 385         }
*/
c000000000083040:	4b ff 88 21 	bl      c00000000007b860 <.get_output_lock>
c000000000083044:	e8 61 02 a0 	ld      r3,672(r1)
c000000000083048:	4b ff c0 19 	bl      c00000000007f060 <.excprint>
c00000000008304c:	e9 21 02 a0 	ld      r9,672(r1)
c000000000083050:	eb a9 01 40 	ld      r29,320(r9)
c000000000083054:	7b a3 06 e4 	rldicr  r3,r29,0,59
c000000000083058:	4b ff 88 a9 	bl      c00000000007b900 <.getvecname>
c00000000008305c:	e8 81 01 78 	ld      r4,376(r1)
c000000000083060:	7f a5 eb 78 	mr      r5,r29
c000000000083064:	7c 66 1b 78 	mr      r6,r3
c000000000083068:	3c 62 ff d4 	addis   r3,r2,-44
c00000000008306c:	38 63 8a a8 	addi    r3,r3,-30040
c000000000083070:	48 00 07 d1 	bl      c000000000083840 <.xmon_printf>
c000000000083074:	60 00 00 00 	nop
c000000000083078:	e9 41 01 78 	ld      r10,376(r1)
c00000000008307c:	38 80 00 01 	li      r4,1
c000000000083080:	79 49 1f 24 	rldicr  r9,r10,3,60
c000000000083084:	7f de 4a 14 	add     r30,r30,r9
c000000000083088:	39 20 00 00 	li      r9,0
c00000000008308c:	e8 7e 26 50 	ld      r3,9808(r30)
c000000000083090:	91 3f 3e 10 	stw     r9,15888(r31)
c000000000083094:	4b f9 e5 c9 	bl      c00000000002165c <.longjmp>
c000000000083098:	60 00 00 00 	nop


/*
 946                                 regs->trap = 0xd00 | (regs->trap & 1);
 947                                 printf("stepped to ");
 948                                 xmon_print_symbol(regs->nip, " ", "\n");
 949                                 ppc_inst_dump(regs->nip, 1, 0);
 950                                 return 0;
*/
c00000000008309c:	e9 2f 01 40 	ld      r9,320(r15)
c0000000000830a0:	3c 62 ff d4 	addis   r3,r2,-44
c0000000000830a4:	38 63 92 20 	addi    r3,r3,-28128
c0000000000830a8:	79 29 07 e0 	clrldi  r9,r9,63
c0000000000830ac:	61 29 0d 00 	ori     r9,r9,3328
c0000000000830b0:	f9 2f 01 40 	std     r9,320(r15)
c0000000000830b4:	48 00 07 8d 	bl      c000000000083840 <.xmon_printf>
c0000000000830b8:	60 00 00 00 	nop
c0000000000830bc:	e8 6f 01 00 	ld      r3,256(r15)
c0000000000830c0:	3c 82 ff d8 	addis   r4,r2,-40
c0000000000830c4:	3c a2 ff d5 	addis   r5,r2,-43
c0000000000830c8:	38 84 a6 70 	addi    r4,r4,-22928
c0000000000830cc:	38 a5 0e 68 	addi    r5,r5,3688
c0000000000830d0:	4b ff 91 91 	bl      c00000000007c260 <.xmon_print_symbol>
c0000000000830d4:	3d 22 ff f7 	addis   r9,r2,-9
c0000000000830d8:	e8 6f 01 00 	ld      r3,256(r15)
c0000000000830dc:	38 80 00 01 	li      r4,1
c0000000000830e0:	38 c9 b4 68 	addi    r6,r9,-19352
c0000000000830e4:	38 a0 00 00 	li      r5,0
c0000000000830e8:	4b ff 94 79 	bl      c00000000007c560 <.generic_inst_dump>
c0000000000830ec:	4b ff d9 24 	b       c000000000080a10 <.xmon_core+0x560>


/*
 941                                 printf("Couldn't single-step %s instruction\n",
 942                                        (IS_RFID(instr)? "rfid": "mtmsrd"));
 943                                 return 0;
*/
c0000000000830f0:	3d 20 fc 00 	lis     r9,-1024
c0000000000830f4:	81 41 01 60 	lwz     r10,352(r1)
c0000000000830f8:	61 29 07 fe 	ori     r9,r9,2046
c0000000000830fc:	7d 4a 48 38 	and     r10,r10,r9
c000000000083100:	6d 49 4c 00 	xoris   r9,r10,19456
c000000000083104:	2f 89 00 24 	cmpwi   cr7,r9,36
c000000000083108:	41 9e 00 20 	beq-    cr7,c000000000083128 <.xmon_core+0x2c78>
c00000000008310c:	3c 82 ff d4 	addis   r4,r2,-44
c000000000083110:	38 84 8a 98 	addi    r4,r4,-30056
c000000000083114:	3c 62 ff d4 	addis   r3,r2,-44
c000000000083118:	38 63 91 f8 	addi    r3,r3,-28168
c00000000008311c:	48 00 07 25 	bl      c000000000083840 <.xmon_printf>
c000000000083120:	60 00 00 00 	nop
c000000000083124:	4b ff d8 ec 	b       c000000000080a10 <.xmon_core+0x560>
c000000000083128:	3c 82 ff d4 	addis   r4,r2,-44
c00000000008312c:	38 84 8a 90 	addi    r4,r4,-30064
c000000000083130:	4b ff ff e4 	b       c000000000083114 <.xmon_core+0x2c64>
c000000000083134:	60 00 00 00 	nop
c000000000083138:	60 00 00 00 	nop
c00000000008313c:	60 00 00 00 	nop



On 07/26/2013 12:11 PM, Chen Gang wrote:
> On 07/24/2013 08:38 AM, Chen Gang wrote:
>> On 07/23/2013 09:58 PM, Michael Ellerman wrote:
>>> On Mon, Jul 22, 2013 at 03:02:53PM +0800, Chen Gang wrote:
>>>> Hello Maintainers:
>>>>
>>>> With allmodconfig and EXTRA_CFLAGS=-W", it reports warnings below:
>>>
>>>>
>>>> arch/powerpc/xmon/xmon.c:3027:6: warning: variable ‘i’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
>>>> arch/powerpc/xmon/xmon.c:3068:6: warning: variable ‘i’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
>>>
>>> In both these cases we are inside the body of a for loop and we do a
>>> if (setjmp) / else block. Although looking at the source the value of i
>>> is not modified by the setjmp, I guess it's possible that the compiler
>>> might reorder the increment of i inside the setjmp and loose the value
>>> when we longjmp.
>>>
>>
>> I should continue to confirm the details based on your valuable
>> information, thanks.
>>
>>
> 
> 
> For stop_spus() and restart_spus(), at least now, the related warnings
> are not issue: the variable 'i' is stored in stack "120(r1)".
> 
> The related warning:
> 
>   arch/powerpc/xmon/xmon.c:3027:6: warning: variable ‘i’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
>   arch/powerpc/xmon/xmon.c:3068:6: warning: variable ‘i’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
> 
> The related source code:
> 
> 3024 static void stop_spus(void)
> 3025 {
> 3026         struct spu *spu;
> 3027         int i;
> 3028         u64 tmp;
> 3029 
> 3030         for (i = 0; i < XMON_NUM_SPUS; i++) { /* XMON_NUM_SPUS == 16 */
> 3031                 if (!spu_info[i].spu)
> 3032                         continue;
> 3033 
> 3034                 if (setjmp(bus_error_jmp) == 0) {
> 3035                         catch_memory_errors = 1;
> 3036                         sync();
> 3037 
> 3038                         spu = spu_info[i].spu;
> 3039 
> 3040                         spu_info[i].saved_spu_runcntl_RW =
> 3041                                 in_be32(&spu->problem->spu_runcntl_RW);
> 3042 
> 3043                         tmp = spu_mfc_sr1_get(spu);
> 3044                         spu_info[i].saved_mfc_sr1_RW = tmp;
> 3045 
> 3046                         tmp &= ~MFC_STATE1_MASTER_RUN_CONTROL_MASK;
> 3047                         spu_mfc_sr1_set(spu, tmp);
> 3048 
> 3049                         sync();
> 3050                         __delay(200);
> 3051 
> 3052                         spu_info[i].stopped_ok = 1;
> 3053 
> 3054                         printf("Stopped spu %.2d (was %s)\n", i,
> 3055                                         spu_info[i].saved_spu_runcntl_RW ?
> 3056                                         "running" : "stopped");
> 3057                 } else {
> 3058                         catch_memory_errors = 0;
> 3059                         printf("*** Error stopping spu %.2d\n", i);
> 3060                 }
> 3061                 catch_memory_errors = 0;
> 3062         }
> 3063 }
> 3064 
> 
> 
> 
> The related disassembly code:
> 
>   "make ARCH=powerpc EXTRA_CFLAGS=-W"
>   "powerpc64-linux-gnu-objdump -d vmlinux.o > vmlinux.S"
>   "gcc version 4.7.1 20120606 (Red Hat 4.7.1-0.1.20120606) (GCC)"
>   "GNU objdump version 2.23.51.0.3-1.fc16 20120918"
> 
> c00000000007cfd0 <.stop_spus>:
> /* { */
> c00000000007cfd0:	7c 08 02 a6 	mflr    r0
> c00000000007cfd4:	fb c1 ff f0 	std     r30,-16(r1)
> c00000000007cfd8:	fb e1 ff f8 	std     r31,-8(r1)
> c00000000007cfdc:	3d 22 00 0f 	addis   r9,r2,15
> c00000000007cfe0:	39 29 3e 10 	addi    r9,r9,15888
> c00000000007cfe4:	3d 02 ff d4 	addis   r8,r2,-44
> c00000000007cfe8:	39 29 21 50 	addi    r9,r9,8528
> c00000000007cfec:	3d 42 ff d4 	addis   r10,r2,-44
> c00000000007cff0:	39 08 83 f8 	addi    r8,r8,-31752
> c00000000007cff4:	39 4a 83 d8 	addi    r10,r10,-31784
> c00000000007cff8:	f8 01 00 10 	std     r0,16(r1)
> c00000000007cffc:	f8 21 ff 51 	stdu    r1,-176(r1)
> c00000000007d000:	f9 21 00 70 	std     r9,112(r1)
> c00000000007d004:	39 20 00 00 	li      r9,0
> c00000000007d008:	f9 21 00 78 	std     r9,120(r1)	; i = 0;
> c00000000007d00c:	f9 01 00 88 	std     r8,136(r1)
> c00000000007d010:	f9 41 00 90 	std     r10,144(r1)
> c00000000007d014:	48 00 01 28 	b       c00000000007d13c <.stop_spus+0x16c>
> c00000000007d018:	60 00 00 00 	nop
> c00000000007d01c:	60 00 00 00 	nop
> 
> 
> /*	 	if (setjmp(bus_error_jmp) == 0) { */
> c00000000007d020:	3d 22 00 0f 	addis   r9,r2,15
> c00000000007d024:	39 40 00 01 	li      r10,1
> c00000000007d028:	39 29 3e 10 	addi    r9,r9,15888
> c00000000007d02c:	91 49 20 c0 	stw     r10,8384(r9)
> c00000000007d030:	7c 00 04 ac 	sync    
> c00000000007d034:	4c 00 01 2c 	isync
> c00000000007d038:	e9 01 00 80 	ld      r8,128(r1)
> c00000000007d03c:	eb e8 00 00 	ld      r31,0(r8)
> c00000000007d040:	e9 3f 00 20 	ld      r9,32(r31)
> c00000000007d044:	7c 00 04 ac 	sync    
> c00000000007d048:	81 29 40 1c 	lwz     r9,16412(r9)
> c00000000007d04c:	0c 09 00 00 	twi     0,r9,0
> c00000000007d050:	4c 00 01 2c 	isync
> c00000000007d054:	91 28 00 10 	stw     r9,16(r8)
> c00000000007d058:	3d 22 00 0f 	addis   r9,r2,15
> c00000000007d05c:	3b c9 f5 e8 	addi    r30,r9,-2584
> c00000000007d060:	7f e3 fb 78 	mr      r3,r31
> c00000000007d064:	e9 3e 00 00 	ld      r9,0(r30)
> c00000000007d068:	e9 29 00 60 	ld      r9,96(r9)
> c00000000007d06c:	e9 49 00 00 	ld      r10,0(r9)
> c00000000007d070:	f8 41 00 28 	std     r2,40(r1)
> c00000000007d074:	7d 49 03 a6 	mtctr   r10
> c00000000007d078:	e8 49 00 08 	ld      r2,8(r9)
> c00000000007d07c:	4e 80 04 21 	bctrl
> c00000000007d080:	e8 41 00 28 	ld      r2,40(r1)
> c00000000007d084:	e9 01 00 80 	ld      r8,128(r1)
> c00000000007d088:	e9 3e 00 00 	ld      r9,0(r30)
> c00000000007d08c:	f8 68 00 08 	std     r3,8(r8)
> c00000000007d090:	7c 64 1b 78 	mr      r4,r3
> c00000000007d094:	78 84 d0 42 	rldicl  r4,r4,58,1
> c00000000007d098:	7f e3 fb 78 	mr      r3,r31
> c00000000007d09c:	78 84 30 00 	rotldi  r4,r4,6
> c00000000007d0a0:	e9 29 00 58 	ld      r9,88(r9)
> c00000000007d0a4:	e9 49 00 00 	ld      r10,0(r9)
> c00000000007d0a8:	f8 41 00 28 	std     r2,40(r1)
> c00000000007d0ac:	7d 49 03 a6 	mtctr   r10
> c00000000007d0b0:	e8 49 00 08 	ld      r2,8(r9)
> c00000000007d0b4:	4e 80 04 21 	bctrl
> c00000000007d0b8:	e8 41 00 28 	ld      r2,40(r1)
> c00000000007d0bc:	7c 00 04 ac 	sync    
> c00000000007d0c0:	4c 00 01 2c 	isync
> c00000000007d0c4:	38 60 00 c8 	li      r3,200
> c00000000007d0c8:	4b fa 01 e9 	bl      c00000000001d2b0 <.__delay>	; __delay(200)
> c00000000007d0cc:	60 00 00 00 	nop
> c00000000007d0d0:	e9 01 00 80 	ld      r8,128(r1)
> c00000000007d0d4:	39 40 00 01 	li      r10,1
> c00000000007d0d8:	81 28 00 10 	lwz     r9,16(r8)
> c00000000007d0dc:	99 48 00 20 	stb     r10,32(r8)
> c00000000007d0e0:	3d 02 ff d4 	addis   r8,r2,-44
> c00000000007d0e4:	38 a8 83 c8 	addi    r5,r8,-31800
> c00000000007d0e8:	2f 89 00 00 	cmpwi   cr7,r9,0
> c00000000007d0ec:	40 9e 00 0c 	bne-    cr7,c00000000007d0f8 <.stop_spus+0x128>
> c00000000007d0f0:	3d 22 ff d4 	addis   r9,r2,-44
> c00000000007d0f4:	38 a9 83 d0 	addi    r5,r9,-31792
> c00000000007d0f8:	e8 61 00 90 	ld      r3,144(r1)
> c00000000007d0fc:	e8 81 00 78 	ld      r4,120(r1)		; 120(r1) = i
> c00000000007d100:	48 00 67 41 	bl      c000000000083840 <.xmon_printf>
> c00000000007d104:	60 00 00 00 	nop
> 
> 
> /* 		catch_memory_errors = 0; */
> c00000000007d108:	3d 22 00 0f 	addis   r9,r2,15
> c00000000007d10c:	39 40 00 00 	li      r10,0
> c00000000007d110:	39 29 3e 10 	addi    r9,r9,15888
> c00000000007d114:	91 49 20 c0 	stw     r10,8384(r9)
> 
> 
> /* 	for (i = 0; i < XMON_NUM_SPUS; i++) { */
> c00000000007d118:	e9 01 00 78 	ld      r8,120(r1)		; 120(r1) = i;
> c00000000007d11c:	39 28 00 01 	addi    r9,r8,1			; i++
> c00000000007d120:	2f 89 00 10 	cmpwi   cr7,r9,16		; i < XMON_NUM_SPUS
> c00000000007d124:	7d 29 07 b4 	extsw   r9,r9
> c00000000007d128:	f9 21 00 78 	std     r9,120(r1)		; 120(r1) = i;
> c00000000007d12c:	e9 21 00 70 	ld      r9,112(r1)		;
> c00000000007d130:	39 29 00 28 	addi    r9,r9,40		; 112(r1) =  [i] for spu_info;
> c00000000007d134:	f9 21 00 70 	std     r9,112(r1)		;
> c00000000007d138:	41 9e 00 58 	beq-    cr7,c00000000007d190 <.stop_spus+0x1c0>
> 
> /* 		if (!spu_info[i].spu) */
> /*			continue; */
> c00000000007d13c:	e9 01 00 70 	ld      r8,112(r1)
> c00000000007d140:	3d 42 00 0f 	addis   r10,r2,15
> c00000000007d144:	38 6a 5e 18 	addi    r3,r10,24088
> c00000000007d148:	e9 28 00 00 	ld      r9,0(r8)
> c00000000007d14c:	f9 01 00 80 	std     r8,128(r1)
> c00000000007d150:	2f a9 00 00 	cmpdi   cr7,r9,0				
> c00000000007d154:	41 9e ff c4 	beq+    cr7,c00000000007d118 <.stop_spus+0x148>
> 
> /* 		if (setjmp(bus_error_jmp) == 0) { */
> c00000000007d158:	4b fa 44 99 	bl      c0000000000215f0 <.setjmp>
> c00000000007d15c:	60 00 00 00 	nop
> c00000000007d160:	2f a3 00 00 	cmpdi   cr7,r3,0
> c00000000007d164:	e8 81 00 78 	ld      r4,120(r1)	; 120(r1) = i for 2nd param of printf in exception processing after setjmp.
> c00000000007d168:	e8 61 00 88 	ld      r3,136(r1)
> c00000000007d16c:	41 9e fe b4 	beq+    cr7,c00000000007d020 <.stop_spus+0x50>
> 
> /* 		} else { */
> c00000000007d170:	3d 42 00 0f 	addis   r10,r2,15
> c00000000007d174:	39 00 00 00 	li      r8,0
> c00000000007d178:	39 4a 3e 10 	addi    r10,r10,15888
> c00000000007d17c:	91 0a 20 c0 	stw     r8,8384(r10)				/* catch_memory_errors = 0; */
> c00000000007d180:	48 00 66 c1 	bl      c000000000083840 <.xmon_printf>		/* called with correct i */
> c00000000007d184:	60 00 00 00 	nop
> c00000000007d188:	4b ff ff 80 	b       c00000000007d108 <.stop_spus+0x138>
> c00000000007d18c:	60 00 00 00 	nop
> /*	 } */
> 
> c00000000007d190:	38 21 00 b0 	addi    r1,r1,176
> c00000000007d194:	e8 01 00 10 	ld      r0,16(r1)
> c00000000007d198:	eb c1 ff f0 	ld      r30,-16(r1)
> c00000000007d19c:	eb e1 ff f8 	ld      r31,-8(r1)
> c00000000007d1a0:	7c 08 03 a6 	mtlr    r0
> c00000000007d1a4:	4e 80 00 20 	blr
> c00000000007d1a8:	60 00 00 00 	nop
> c00000000007d1ac:	60 00 00 00 	nop
> /* } */
> 
> 
> The related assembly code (they really save and restore 'r1'):
> 
> _GLOBAL(setjmp)
>         mflr    r0
>         PPC_STL r0,0(r3)
>         PPC_STL r1,SZL(r3)
>         PPC_STL r2,2*SZL(r3)
>         mfcr    r0
>         PPC_STL r0,3*SZL(r3)
>         PPC_STL r13,4*SZL(r3)
>         PPC_STL r14,5*SZL(r3)
>         PPC_STL r15,6*SZL(r3)
>         PPC_STL r16,7*SZL(r3)
>         PPC_STL r17,8*SZL(r3)
>         PPC_STL r18,9*SZL(r3)
>         PPC_STL r19,10*SZL(r3)
>         PPC_STL r20,11*SZL(r3)
>         PPC_STL r21,12*SZL(r3)
>         PPC_STL r22,13*SZL(r3)
>         PPC_STL r23,14*SZL(r3)
>         PPC_STL r24,15*SZL(r3)
>         PPC_STL r25,16*SZL(r3)
>         PPC_STL r26,17*SZL(r3)
>         PPC_STL r27,18*SZL(r3)
>         PPC_STL r28,19*SZL(r3)
>         PPC_STL r29,20*SZL(r3)
>         PPC_STL r30,21*SZL(r3)
>         PPC_STL r31,22*SZL(r3)
>         li      r3,0
>         blr
> 
> _GLOBAL(longjmp)
>         PPC_LCMPI r4,0
>         bne     1f
>         li      r4,1
> 1:      PPC_LL  r13,4*SZL(r3)
>         PPC_LL  r14,5*SZL(r3)
>         PPC_LL  r15,6*SZL(r3)
>         PPC_LL  r16,7*SZL(r3)
>         PPC_LL  r17,8*SZL(r3)
>         PPC_LL  r18,9*SZL(r3)
>         PPC_LL  r19,10*SZL(r3)
>         PPC_LL  r20,11*SZL(r3)
>         PPC_LL  r21,12*SZL(r3)
>         PPC_LL  r22,13*SZL(r3)
>         PPC_LL  r23,14*SZL(r3)
>         PPC_LL  r24,15*SZL(r3)
>         PPC_LL  r25,16*SZL(r3)
>         PPC_LL  r26,17*SZL(r3)
>         PPC_LL  r27,18*SZL(r3)
>         PPC_LL  r28,19*SZL(r3)
>         PPC_LL  r29,20*SZL(r3)
>         PPC_LL  r30,21*SZL(r3)
>         PPC_LL  r31,22*SZL(r3)
>         PPC_LL  r0,3*SZL(r3)
>         mtcrf   0x38,r0
>         PPC_LL  r0,0(r3)
>         PPC_LL  r1,SZL(r3)
>         PPC_LL  r2,2*SZL(r3)
>         mtlr    r0
>         mr      r3,r4
>         blr
> 
> 
> 
> 
> The same to resetart_spus()
> 
> 
> 3065 static void restart_spus(void)
> 3066 {
> 3067         struct spu *spu;
> 3068         int i;
> 3069 
> 3070         for (i = 0; i < XMON_NUM_SPUS; i++) {
> 3071                 if (!spu_info[i].spu)
> 3072                         continue;
> 3073 
> 3074                 if (!spu_info[i].stopped_ok) {
> 3075                         printf("*** Error, spu %d was not successfully stopped"
> 3076                                         ", not restarting\n", i);
> 3077                         continue;
> 3078                 }
> 3079 
> 3080                 if (setjmp(bus_error_jmp) == 0) {
> 3081                         catch_memory_errors = 1;
> 3082                         sync();
> 3083 
> 3084                         spu = spu_info[i].spu;
> 3085                         spu_mfc_sr1_set(spu, spu_info[i].saved_mfc_sr1_RW);
> 3086                         out_be32(&spu->problem->spu_runcntl_RW,
> 3087                                         spu_info[i].saved_spu_runcntl_RW);
> 3088 
> 3089                         sync();
> 3090                         __delay(200);
> 3091 
> 3092                         printf("Restarted spu %.2d\n", i);
> 3093                 } else {
> 3094                         catch_memory_errors = 0;
> 3095                         printf("*** Error restarting spu %.2d\n", i);
> 3096                 }
> 3097                 catch_memory_errors = 0;
> 3098         }
> 3099 }
> 3100 
> 
> c00000000007d1b0 <.restart_spus>:
> /* { */
> c00000000007d1b0:	7c 08 02 a6 	mflr    r0
> c00000000007d1b4:	fb e1 ff f8 	std     r31,-8(r1)
> c00000000007d1b8:	3d 22 00 0f 	addis   r9,r2,15
> c00000000007d1bc:	3c e2 ff d4 	addis   r7,r2,-44
> c00000000007d1c0:	39 29 3e 10 	addi    r9,r9,15888
> c00000000007d1c4:	3d 02 ff d4 	addis   r8,r2,-44
> c00000000007d1c8:	39 29 21 50 	addi    r9,r9,8528
> c00000000007d1cc:	3d 42 ff d4 	addis   r10,r2,-44
> c00000000007d1d0:	38 e7 84 70 	addi    r7,r7,-31632
> c00000000007d1d4:	39 08 84 58 	addi    r8,r8,-31656
> c00000000007d1d8:	f8 01 00 10 	std     r0,16(r1)
> c00000000007d1dc:	39 4a 84 18 	addi    r10,r10,-31720
> c00000000007d1e0:	f8 21 ff 51 	stdu    r1,-176(r1)
> c00000000007d1e4:	f9 21 00 70 	std     r9,112(r1)
> c00000000007d1e8:	39 20 00 00 	li      r9,0
> c00000000007d1ec:	f9 21 00 78 	std     r9,120(r1)		; i = 0;
> c00000000007d1f0:	f8 e1 00 88 	std     r7,136(r1)
> c00000000007d1f4:	f9 01 00 98 	std     r8,152(r1)
> c00000000007d1f8:	f9 41 00 90 	std     r10,144(r1)
> c00000000007d1fc:	48 00 00 34 	b       c00000000007d230 <.restart_spus+0x80>
> 
> /*		if (!spu_info[i].stopped_ok) { */
> /*			printf(....); */
> /*			continue; */
> c00000000007d200:	e8 61 00 90 	ld      r3,144(r1)
> c00000000007d204:	48 00 66 3d 	bl      c000000000083840 <.xmon_printf>
> c00000000007d208:	60 00 00 00 	nop
> 
> /*	for (i = 0; i < XMON_NUM_SPUS; i++) { */
> c00000000007d20c:	e9 01 00 78 	ld      r8,120(r1)
> c00000000007d210:	39 28 00 01 	addi    r9,r8,1		; i++
> c00000000007d214:	2f 89 00 10 	cmpwi   cr7,r9,16	; i < XMON_NUM_SPUS
> c00000000007d218:	7d 29 07 b4 	extsw   r9,r9
> c00000000007d21c:	f9 21 00 78 	std     r9,120(r1)
> c00000000007d220:	e9 21 00 70 	ld      r9,112(r1)
> c00000000007d224:	39 29 00 28 	addi    r9,r9,40
> c00000000007d228:	f9 21 00 70 	std     r9,112(r1)
> c00000000007d22c:	41 9e 01 0c 	beq-    cr7,c00000000007d338 <.restart_spus+0x188>
> 
> /*		if (!spu_info[i].spu) */
> /*			continue; */
> c00000000007d230:	e9 01 00 70 	ld      r8,112(r1)
> c00000000007d234:	3d 42 00 0f 	addis   r10,r2,15
> c00000000007d238:	e8 81 00 78 	ld      r4,120(r1) 	; i as 2nd parameter for xmon_printf().
> c00000000007d23c:	38 6a 5e 18 	addi    r3,r10,24088
> c00000000007d240:	e9 28 00 00 	ld      r9,0(r8)
> c00000000007d244:	f9 01 00 80 	std     r8,128(r1)
> c00000000007d248:	2f a9 00 00 	cmpdi   cr7,r9,0
> c00000000007d24c:	41 9e ff c0 	beq+    cr7,c00000000007d20c <.restart_spus+0x5c>
> 
> /*		if (!spu_info[i].stopped_ok) { */
> c00000000007d250:	89 28 00 20 	lbz     r9,32(r8)
> c00000000007d254:	2f 89 00 00 	cmpwi   cr7,r9,0
> c00000000007d258:	41 9e ff a8 	beq+    cr7,c00000000007d200 <.restart_spus+0x50>
> /*		} */
> 
> /*		if (setjmp(bus_error_jmp) == 0) { */
> c00000000007d25c:	4b fa 43 95 	bl      c0000000000215f0 <.setjmp>
> c00000000007d260:	60 00 00 00 	nop
> c00000000007d264:	2f a3 00 00 	cmpdi   cr7,r3,0
> c00000000007d268:	e8 81 00 78 	ld      r4,120(r1)	; i as 2nd parameter for xmon_printf() after setjmp().
> c00000000007d26c:	e8 61 00 88 	ld      r3,136(r1)
> c00000000007d270:	40 9e 00 e0 	bne-    cr7,c00000000007d350 <.restart_spus+0x1a0>
> 
> c00000000007d274:	3d 22 00 0f 	addis   r9,r2,15
> c00000000007d278:	39 40 00 01 	li      r10,1
> c00000000007d27c:	39 29 3e 10 	addi    r9,r9,15888
> c00000000007d280:	91 49 20 c0 	stw     r10,8384(r9)
> c00000000007d284:	7c 00 04 ac 	sync    
> c00000000007d288:	4c 00 01 2c 	isync
> c00000000007d28c:	3d 02 00 0f 	addis   r8,r2,15
> c00000000007d290:	e9 41 00 80 	ld      r10,128(r1)
> c00000000007d294:	39 28 f5 e8 	addi    r9,r8,-2584
> c00000000007d298:	eb ea 00 00 	ld      r31,0(r10)
> c00000000007d29c:	e8 8a 00 08 	ld      r4,8(r10)
> c00000000007d2a0:	e9 29 00 00 	ld      r9,0(r9)
> c00000000007d2a4:	7f e3 fb 78 	mr      r3,r31
> c00000000007d2a8:	e9 29 00 58 	ld      r9,88(r9)
> c00000000007d2ac:	e9 49 00 00 	ld      r10,0(r9)
> c00000000007d2b0:	f8 41 00 28 	std     r2,40(r1)
> c00000000007d2b4:	7d 49 03 a6 	mtctr   r10
> c00000000007d2b8:	e8 49 00 08 	ld      r2,8(r9)
> c00000000007d2bc:	4e 80 04 21 	bctrl
> c00000000007d2c0:	e8 41 00 28 	ld      r2,40(r1)
> c00000000007d2c4:	e9 01 00 80 	ld      r8,128(r1)
> c00000000007d2c8:	e9 3f 00 20 	ld      r9,32(r31)
> c00000000007d2cc:	81 48 00 10 	lwz     r10,16(r8)
> c00000000007d2d0:	7c 00 04 ac 	sync    
> c00000000007d2d4:	91 49 40 1c 	stw     r10,16412(r9)
> c00000000007d2d8:	39 20 00 01 	li      r9,1
> c00000000007d2dc:	99 2d 02 74 	stb     r9,628(r13)
> c00000000007d2e0:	7c 00 04 ac 	sync    
> c00000000007d2e4:	4c 00 01 2c 	isync
> c00000000007d2e8:	38 60 00 c8 	li      r3,200
> c00000000007d2ec:	4b f9 ff c5 	bl      c00000000001d2b0 <.__delay>
> c00000000007d2f0:	60 00 00 00 	nop
> c00000000007d2f4:	e8 61 00 98 	ld      r3,152(r1)
> c00000000007d2f8:	e8 81 00 78 	ld      r4,120(r1)
> c00000000007d2fc:	48 00 65 45 	bl      c000000000083840 <.xmon_printf>
> c00000000007d300:	60 00 00 00 	nop
> /*		} */
> 
> /*	for (i = 0; i < XMON_NUM_SPUS; i++) { */
> c00000000007d304:	e9 01 00 78 	ld      r8,120(r1)
> c00000000007d308:	3d 22 00 0f 	addis   r9,r2,15
> c00000000007d30c:	39 40 00 00 	li      r10,0
> c00000000007d310:	39 29 3e 10 	addi    r9,r9,15888
> c00000000007d314:	91 49 20 c0 	stw     r10,8384(r9)		; catch_memory_errors = 0;
> c00000000007d318:	39 28 00 01 	addi    r9,r8,1
> c00000000007d31c:	2f 89 00 10 	cmpwi   cr7,r9,16		; i < XMON_NUM_SPUS
> c00000000007d320:	7d 29 07 b4 	extsw   r9,r9
> c00000000007d324:	f9 21 00 78 	std     r9,120(r1)		; i++;
> c00000000007d328:	e9 21 00 70 	ld      r9,112(r1)
> c00000000007d32c:	39 29 00 28 	addi    r9,r9,40		; [i] for spu_info
> c00000000007d330:	f9 21 00 70 	std     r9,112(r1)
> c00000000007d334:	40 9e fe fc 	bne+    cr7,c00000000007d230 <.restart_spus+0x80>
> 
> /* 	} */
> c00000000007d338:	38 21 00 b0 	addi    r1,r1,176
> c00000000007d33c:	e8 01 00 10 	ld      r0,16(r1)
> c00000000007d340:	eb e1 ff f8 	ld      r31,-8(r1)
> c00000000007d344:	7c 08 03 a6 	mtlr    r0
> c00000000007d348:	4e 80 00 20 	blr
> c00000000007d34c:	60 00 00 00 	nop
> /* } */
> 
> /*		} else { */
> c00000000007d350:	3d 42 00 0f 	addis   r10,r2,15
> c00000000007d354:	39 00 00 00 	li      r8,0
> c00000000007d358:	39 4a 3e 10 	addi    r10,r10,15888
> c00000000007d35c:	91 0a 20 c0 	stw     r8,8384(r10)		; catch_memory_errors = 0;
> c00000000007d360:	48 00 64 e1 	bl      c000000000083840 <.xmon_printf>
> c00000000007d364:	60 00 00 00 	nop
> c00000000007d368:	4b ff ff 9c 	b       c00000000007d304 <.restart_spus+0x154>
> c00000000007d36c:	60 00 00 00 	nop
> 
> 
> 
>>>> arch/powerpc/xmon/xmon.c:352:48: warning: argument ‘fromipi’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
>>>
>>> This one I can't see, but I assume it's a similar case.
>>>
>>
>> OK, I should continue for it.
>>
>>
>>>> Excuse me, I am not quite sure about it whether can cause issue or not.
>>>
>>> I've never seen it get stuck in those loops or anything, but I guess
>>> it's possible.
>>>
>>
>> OK, I should make the confirmation.
>>
>>> The first thing to do would be to analyse the generated assembler code
>>> to determine if there really is any possiblity of the value being
>>> clobbered, or if it's just a theoretical bug.
>>>
>>
>> Thank you for your valuable information again.
>>
>> Excuse me, I have to do another things within this month, so I should
>> provide the confirmation within next month (2013-08-31), is it OK (no
>> reply means OK).
>>
>> Welcome any suggestions or completions.
>>
>>
>> Thanks.
>>
> 
> 


-- 
Chen Gang

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox