Rev 3056 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3056 | Rev 3707 | ||
---|---|---|---|
Line 53... | Line 53... | ||
53 | void halt() |
53 | void halt() |
54 | { |
54 | { |
55 | #ifdef CONFIG_DEBUG |
55 | #ifdef CONFIG_DEBUG |
56 | bool rundebugger = false; |
56 | bool rundebugger = false; |
57 | 57 | ||
58 | // TODO test_and_set not defined on all arches |
- | |
59 | // if (!test_and_set(&haltstate)) |
- | |
60 | if (!atomic_get(&haltstate)) { |
58 | if (!atomic_get(&haltstate)) { |
61 | atomic_set(&haltstate, 1); |
59 | atomic_set(&haltstate, 1); |
62 | rundebugger = true; |
60 | rundebugger = true; |
63 | } |
61 | } |
64 | #else |
62 | #else |
65 | atomic_set(&haltstate, 1); |
63 | atomic_set(&haltstate, 1); |
66 | #endif |
64 | #endif |
67 | 65 | ||
68 | interrupts_disable(); |
66 | interrupts_disable(); |
- | 67 | ||
69 | #ifdef CONFIG_DEBUG |
68 | #if (defined(CONFIG_DEBUG)) && (defined(CONFIG_KCONSOLE)) |
70 | if (rundebugger) { |
69 | if (rundebugger) |
71 | printf("\n"); |
- | |
72 | kconsole("panic"); /* Run kconsole as a last resort to user */ |
70 | kconsole("panic", "\nLast resort kernel console ready\n", false); |
- | 71 | #endif |
|
73 | } |
72 | |
74 | #endif |
- | |
75 | if (CPU) |
73 | if (CPU) |
76 | printf("cpu%u: halted\n", CPU->id); |
74 | printf("cpu%u: halted\n", CPU->id); |
77 | else |
75 | else |
78 | printf("cpu: halted\n"); |
76 | printf("cpu: halted\n"); |
79 | cpu_halt(); |
77 | cpu_halt(); |