* 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(®no);
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
* 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
* [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
* [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 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 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
* 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
* 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: [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: 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: 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
* [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
* [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 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 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
* [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
* 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 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
* [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 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 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 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
* 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
* 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: [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
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox