Subversion Repositories HelenOS-historic

Rev

Rev 615 | Rev 635 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 615 Rev 631
Line 32... Line 32...
32
#include <arch/asm.h>
32
#include <arch/asm.h>
33
#include <arch.h>
33
#include <arch.h>
34
#include <typedefs.h>
34
#include <typedefs.h>
35
#include <console/kconsole.h>
35
#include <console/kconsole.h>
36
 
36
 
37
__u32 volatile haltstate = 0; /**< Halt flag */
37
atomic_t haltstate = {0}; /**< Halt flag */
38
 
38
 
39
 
39
 
40
/** Halt wrapper
40
/** Halt wrapper
41
 *
41
 *
42
 * Set halt flag and halt the cpu.
42
 * Set halt flag and halt the cpu.
43
 *
43
 *
44
 */
44
 */
45
void halt(void)
45
void halt()
46
{
46
{
-
 
47
#ifdef CONFIG_DEBUG
-
 
48
    bool rundebugger;
-
 
49
 
-
 
50
//      TODO test_and_set not defined on all arches
-
 
51
//  if (!test_and_set(&haltstate))
-
 
52
    if (!atomic_get(&haltstate)) {
-
 
53
        atomic_set(&haltstate, 1);
-
 
54
        rundebugger = true;
-
 
55
    }
-
 
56
#else
47
    haltstate = 1;
57
    atomic_set(haltstate, 1);
-
 
58
#endif
-
 
59
 
48
    interrupts_disable();
60
    interrupts_disable();
49
#ifdef CONFIG_DEBUG
61
#ifdef CONFIG_DEBUG
-
 
62
    if (rundebugger) {
50
    printf("\n");
63
        printf("\n");
51
    kconsole("panic"); /* Run kconsole as a last resort to user */
64
        kconsole("panic"); /* Run kconsole as a last resort to user */
-
 
65
    }
52
#endif      
66
#endif      
53
 
-
 
54
    if (CPU)
67
    if (CPU)
55
        printf("cpu%d: halted\n", CPU->id);
68
        printf("cpu%d: halted\n", CPU->id);
56
    else
69
    else
57
        printf("cpu: halted\n");
70
        printf("cpu: halted\n");
58
    cpu_halt();
71
    cpu_halt();