diff options
Diffstat (limited to 'arch/x86/kernel/dumpstack_64.c')
| -rw-r--r-- | arch/x86/kernel/dumpstack_64.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c index d35db5993fd6..54b0a3276766 100644 --- a/arch/x86/kernel/dumpstack_64.c +++ b/arch/x86/kernel/dumpstack_64.c | |||
| @@ -19,10 +19,8 @@ | |||
| 19 | 19 | ||
| 20 | #include "dumpstack.h" | 20 | #include "dumpstack.h" |
| 21 | 21 | ||
| 22 | static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack, | 22 | |
| 23 | unsigned *usedp, char **idp) | 23 | static char x86_stack_ids[][8] = { |
| 24 | { | ||
| 25 | static char ids[][8] = { | ||
| 26 | [DEBUG_STACK - 1] = "#DB", | 24 | [DEBUG_STACK - 1] = "#DB", |
| 27 | [NMI_STACK - 1] = "NMI", | 25 | [NMI_STACK - 1] = "NMI", |
| 28 | [DOUBLEFAULT_STACK - 1] = "#DF", | 26 | [DOUBLEFAULT_STACK - 1] = "#DF", |
| @@ -33,6 +31,15 @@ static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack, | |||
| 33 | N_EXCEPTION_STACKS + DEBUG_STKSZ / EXCEPTION_STKSZ - 2] = "#DB[?]" | 31 | N_EXCEPTION_STACKS + DEBUG_STKSZ / EXCEPTION_STKSZ - 2] = "#DB[?]" |
| 34 | #endif | 32 | #endif |
| 35 | }; | 33 | }; |
| 34 | |||
| 35 | int x86_is_stack_id(int id, char *name) | ||
| 36 | { | ||
| 37 | return x86_stack_ids[id - 1] == name; | ||
| 38 | } | ||
| 39 | |||
| 40 | static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack, | ||
| 41 | unsigned *usedp, char **idp) | ||
| 42 | { | ||
| 36 | unsigned k; | 43 | unsigned k; |
| 37 | 44 | ||
| 38 | /* | 45 | /* |
| @@ -61,7 +68,7 @@ static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack, | |||
| 61 | if (*usedp & (1U << k)) | 68 | if (*usedp & (1U << k)) |
| 62 | break; | 69 | break; |
| 63 | *usedp |= 1U << k; | 70 | *usedp |= 1U << k; |
| 64 | *idp = ids[k]; | 71 | *idp = x86_stack_ids[k]; |
| 65 | return (unsigned long *)end; | 72 | return (unsigned long *)end; |
| 66 | } | 73 | } |
| 67 | /* | 74 | /* |
| @@ -81,12 +88,13 @@ static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack, | |||
| 81 | do { | 88 | do { |
| 82 | ++j; | 89 | ++j; |
| 83 | end -= EXCEPTION_STKSZ; | 90 | end -= EXCEPTION_STKSZ; |
| 84 | ids[j][4] = '1' + (j - N_EXCEPTION_STACKS); | 91 | x86_stack_ids[j][4] = '1' + |
| 92 | (j - N_EXCEPTION_STACKS); | ||
| 85 | } while (stack < end - EXCEPTION_STKSZ); | 93 | } while (stack < end - EXCEPTION_STKSZ); |
| 86 | if (*usedp & (1U << j)) | 94 | if (*usedp & (1U << j)) |
| 87 | break; | 95 | break; |
| 88 | *usedp |= 1U << j; | 96 | *usedp |= 1U << j; |
| 89 | *idp = ids[j]; | 97 | *idp = x86_stack_ids[j]; |
| 90 | return (unsigned long *)end; | 98 | return (unsigned long *)end; |
| 91 | } | 99 | } |
| 92 | #endif | 100 | #endif |
