diff options
| author | Jiri Kosina <jkosina@suse.cz> | 2010-10-30 16:16:56 -0400 |
|---|---|---|
| committer | Jiri Kosina <jkosina@suse.cz> | 2010-10-30 16:16:56 -0400 |
| commit | f1e095f1d206b81b44160f41278ce5c78641e9b7 (patch) | |
| tree | bd293d46d2d3e4cdf435a22ddb2877c6ba1b8acc /kernel/debug/kdb | |
| parent | b0438a1b71955c425c304a2a483765ef24841766 (diff) | |
| parent | 1792f17b7210280a3d7ff29da9614ba779cfcedb (diff) | |
Merge branch 'master' into for-next
Diffstat (limited to 'kernel/debug/kdb')
| -rw-r--r-- | kernel/debug/kdb/kdb_main.c | 48 |
1 files changed, 12 insertions, 36 deletions
diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c index d7bda21a106b..37755d621924 100644 --- a/kernel/debug/kdb/kdb_main.c +++ b/kernel/debug/kdb/kdb_main.c | |||
| @@ -1127,7 +1127,7 @@ static int kdb_local(kdb_reason_t reason, int error, struct pt_regs *regs, | |||
| 1127 | /* special case below */ | 1127 | /* special case below */ |
| 1128 | } else { | 1128 | } else { |
| 1129 | kdb_printf("\nEntering kdb (current=0x%p, pid %d) ", | 1129 | kdb_printf("\nEntering kdb (current=0x%p, pid %d) ", |
| 1130 | kdb_current, kdb_current->pid); | 1130 | kdb_current, kdb_current ? kdb_current->pid : 0); |
| 1131 | #if defined(CONFIG_SMP) | 1131 | #if defined(CONFIG_SMP) |
| 1132 | kdb_printf("on processor %d ", raw_smp_processor_id()); | 1132 | kdb_printf("on processor %d ", raw_smp_processor_id()); |
| 1133 | #endif | 1133 | #endif |
| @@ -2603,20 +2603,17 @@ static int kdb_summary(int argc, const char **argv) | |||
| 2603 | */ | 2603 | */ |
| 2604 | static int kdb_per_cpu(int argc, const char **argv) | 2604 | static int kdb_per_cpu(int argc, const char **argv) |
| 2605 | { | 2605 | { |
| 2606 | char buf[256], fmtstr[64]; | 2606 | char fmtstr[64]; |
| 2607 | kdb_symtab_t symtab; | 2607 | int cpu, diag, nextarg = 1; |
| 2608 | cpumask_t suppress = CPU_MASK_NONE; | 2608 | unsigned long addr, symaddr, val, bytesperword = 0, whichcpu = ~0UL; |
| 2609 | int cpu, diag; | ||
| 2610 | unsigned long addr, val, bytesperword = 0, whichcpu = ~0UL; | ||
| 2611 | 2609 | ||
| 2612 | if (argc < 1 || argc > 3) | 2610 | if (argc < 1 || argc > 3) |
| 2613 | return KDB_ARGCOUNT; | 2611 | return KDB_ARGCOUNT; |
| 2614 | 2612 | ||
| 2615 | snprintf(buf, sizeof(buf), "per_cpu__%s", argv[1]); | 2613 | diag = kdbgetaddrarg(argc, argv, &nextarg, &symaddr, NULL, NULL); |
| 2616 | if (!kdbgetsymval(buf, &symtab)) { | 2614 | if (diag) |
| 2617 | kdb_printf("%s is not a per_cpu variable\n", argv[1]); | 2615 | return diag; |
| 2618 | return KDB_BADADDR; | 2616 | |
| 2619 | } | ||
| 2620 | if (argc >= 2) { | 2617 | if (argc >= 2) { |
| 2621 | diag = kdbgetularg(argv[2], &bytesperword); | 2618 | diag = kdbgetularg(argv[2], &bytesperword); |
| 2622 | if (diag) | 2619 | if (diag) |
| @@ -2649,46 +2646,25 @@ static int kdb_per_cpu(int argc, const char **argv) | |||
| 2649 | #define KDB_PCU(cpu) 0 | 2646 | #define KDB_PCU(cpu) 0 |
| 2650 | #endif | 2647 | #endif |
| 2651 | #endif | 2648 | #endif |
| 2652 | |||
| 2653 | for_each_online_cpu(cpu) { | 2649 | for_each_online_cpu(cpu) { |
| 2650 | if (KDB_FLAG(CMD_INTERRUPT)) | ||
| 2651 | return 0; | ||
| 2652 | |||
| 2654 | if (whichcpu != ~0UL && whichcpu != cpu) | 2653 | if (whichcpu != ~0UL && whichcpu != cpu) |
| 2655 | continue; | 2654 | continue; |
| 2656 | addr = symtab.sym_start + KDB_PCU(cpu); | 2655 | addr = symaddr + KDB_PCU(cpu); |
| 2657 | diag = kdb_getword(&val, addr, bytesperword); | 2656 | diag = kdb_getword(&val, addr, bytesperword); |
| 2658 | if (diag) { | 2657 | if (diag) { |
| 2659 | kdb_printf("%5d " kdb_bfd_vma_fmt0 " - unable to " | 2658 | kdb_printf("%5d " kdb_bfd_vma_fmt0 " - unable to " |
| 2660 | "read, diag=%d\n", cpu, addr, diag); | 2659 | "read, diag=%d\n", cpu, addr, diag); |
| 2661 | continue; | 2660 | continue; |
| 2662 | } | 2661 | } |
| 2663 | #ifdef CONFIG_SMP | ||
| 2664 | if (!val) { | ||
| 2665 | cpu_set(cpu, suppress); | ||
| 2666 | continue; | ||
| 2667 | } | ||
| 2668 | #endif /* CONFIG_SMP */ | ||
| 2669 | kdb_printf("%5d ", cpu); | 2662 | kdb_printf("%5d ", cpu); |
| 2670 | kdb_md_line(fmtstr, addr, | 2663 | kdb_md_line(fmtstr, addr, |
| 2671 | bytesperword == KDB_WORD_SIZE, | 2664 | bytesperword == KDB_WORD_SIZE, |
| 2672 | 1, bytesperword, 1, 1, 0); | 2665 | 1, bytesperword, 1, 1, 0); |
| 2673 | } | 2666 | } |
| 2674 | if (cpus_weight(suppress) == 0) | ||
| 2675 | return 0; | ||
| 2676 | kdb_printf("Zero suppressed cpu(s):"); | ||
| 2677 | for (cpu = first_cpu(suppress); cpu < num_possible_cpus(); | ||
| 2678 | cpu = next_cpu(cpu, suppress)) { | ||
| 2679 | kdb_printf(" %d", cpu); | ||
| 2680 | if (cpu == num_possible_cpus() - 1 || | ||
| 2681 | next_cpu(cpu, suppress) != cpu + 1) | ||
| 2682 | continue; | ||
| 2683 | while (cpu < num_possible_cpus() && | ||
| 2684 | next_cpu(cpu, suppress) == cpu + 1) | ||
| 2685 | ++cpu; | ||
| 2686 | kdb_printf("-%d", cpu); | ||
| 2687 | } | ||
| 2688 | kdb_printf("\n"); | ||
| 2689 | |||
| 2690 | #undef KDB_PCU | 2667 | #undef KDB_PCU |
| 2691 | |||
| 2692 | return 0; | 2668 | return 0; |
| 2693 | } | 2669 | } |
| 2694 | 2670 | ||
