diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2015-01-12 04:51:13 -0500 |
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2015-01-12 04:51:13 -0500 |
| commit | 2f5eaf66e580f64032b365a00157b6b58c266b37 (patch) | |
| tree | 7852017c864f0eb3833782e2a017952bd8531458 /kernel/stacktrace.c | |
| parent | c291ee622165cb2c8d4e7af63fffd499354a23be (diff) | |
| parent | 91d1179212161f220938198b742c328ad38fd0a3 (diff) | |
Merge tag 'irqchip-urgent-3.19' of git://git.infradead.org/users/jcooper/linux into irq/urgent
irqchip urgent fixes for v3.19 from Jason Cooper
- mtk-sysirq: Fix error handling
- hip04: Fix cpu map for 16bit value
- gic-v3-its: Clear a warning regarding decimal constants
- omap-intc: Fix legacy DMA regression
- atmel-aic-common: Retain priority when changing type
Diffstat (limited to 'kernel/stacktrace.c')
| -rw-r--r-- | kernel/stacktrace.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/kernel/stacktrace.c b/kernel/stacktrace.c index 00fe55cc5a82..b6e4c16377c7 100644 --- a/kernel/stacktrace.c +++ b/kernel/stacktrace.c | |||
| @@ -25,6 +25,38 @@ void print_stack_trace(struct stack_trace *trace, int spaces) | |||
| 25 | } | 25 | } |
| 26 | EXPORT_SYMBOL_GPL(print_stack_trace); | 26 | EXPORT_SYMBOL_GPL(print_stack_trace); |
| 27 | 27 | ||
| 28 | int snprint_stack_trace(char *buf, size_t size, | ||
| 29 | struct stack_trace *trace, int spaces) | ||
| 30 | { | ||
| 31 | int i; | ||
| 32 | unsigned long ip; | ||
| 33 | int generated; | ||
| 34 | int total = 0; | ||
| 35 | |||
| 36 | if (WARN_ON(!trace->entries)) | ||
| 37 | return 0; | ||
| 38 | |||
| 39 | for (i = 0; i < trace->nr_entries; i++) { | ||
| 40 | ip = trace->entries[i]; | ||
| 41 | generated = snprintf(buf, size, "%*c[<%p>] %pS\n", | ||
| 42 | 1 + spaces, ' ', (void *) ip, (void *) ip); | ||
| 43 | |||
| 44 | total += generated; | ||
| 45 | |||
| 46 | /* Assume that generated isn't a negative number */ | ||
| 47 | if (generated >= size) { | ||
| 48 | buf += size; | ||
| 49 | size = 0; | ||
| 50 | } else { | ||
| 51 | buf += generated; | ||
| 52 | size -= generated; | ||
| 53 | } | ||
| 54 | } | ||
| 55 | |||
| 56 | return total; | ||
| 57 | } | ||
| 58 | EXPORT_SYMBOL_GPL(snprint_stack_trace); | ||
| 59 | |||
| 28 | /* | 60 | /* |
| 29 | * Architectures that do not implement save_stack_trace_tsk or | 61 | * Architectures that do not implement save_stack_trace_tsk or |
| 30 | * save_stack_trace_regs get this weak alias and a once-per-bootup warning | 62 | * save_stack_trace_regs get this weak alias and a once-per-bootup warning |
