diff options
author | Michal Simek <monstr@monstr.eu> | 2009-10-30 07:26:53 -0400 |
---|---|---|
committer | Michal Simek <monstr@monstr.eu> | 2009-12-14 02:40:09 -0500 |
commit | a3cd613b2e775eb59816c2c7c49c038d54917208 (patch) | |
tree | b09d3a2db09096b9bcc860f7639851db87ae3ef7 /arch/microblaze | |
parent | fb5a32dc1ad7d6378363ad2eb7262edb5fba10f8 (diff) |
microblaze: Add TRACE_IRQFLAGS_SUPPORT
There are just two major changes
Renamed local_irq functions to raw_local_irq in irq.c.
Added TRACE_IRQFLAGS_SUPPORT to Kconfig.debug.
Look at Documentation/irqflags-tracing.txt
Signed-off-by: Michal Simek <monstr@monstr.eu>
Diffstat (limited to 'arch/microblaze')
-rw-r--r-- | arch/microblaze/Kconfig.debug | 3 | ||||
-rw-r--r-- | arch/microblaze/include/asm/irqflags.h | 112 | ||||
-rw-r--r-- | arch/microblaze/kernel/cpu/pvr.c | 2 |
3 files changed, 54 insertions, 63 deletions
diff --git a/arch/microblaze/Kconfig.debug b/arch/microblaze/Kconfig.debug index 242cd35bdb4b..9dc708a7f700 100644 --- a/arch/microblaze/Kconfig.debug +++ b/arch/microblaze/Kconfig.debug | |||
@@ -3,6 +3,9 @@ | |||
3 | 3 | ||
4 | menu "Kernel hacking" | 4 | menu "Kernel hacking" |
5 | 5 | ||
6 | config TRACE_IRQFLAGS_SUPPORT | ||
7 | def_bool y | ||
8 | |||
6 | source "lib/Kconfig.debug" | 9 | source "lib/Kconfig.debug" |
7 | 10 | ||
8 | config EARLY_PRINTK | 11 | config EARLY_PRINTK |
diff --git a/arch/microblaze/include/asm/irqflags.h b/arch/microblaze/include/asm/irqflags.h index dea65645a4f8..2c38c6d80176 100644 --- a/arch/microblaze/include/asm/irqflags.h +++ b/arch/microblaze/include/asm/irqflags.h | |||
@@ -10,78 +10,73 @@ | |||
10 | #define _ASM_MICROBLAZE_IRQFLAGS_H | 10 | #define _ASM_MICROBLAZE_IRQFLAGS_H |
11 | 11 | ||
12 | #include <linux/irqflags.h> | 12 | #include <linux/irqflags.h> |
13 | #include <asm/registers.h> | ||
13 | 14 | ||
14 | # if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR | 15 | # if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR |
15 | 16 | ||
16 | # define local_irq_save(flags) \ | 17 | # define raw_local_irq_save(flags) \ |
17 | do { \ | 18 | do { \ |
18 | asm volatile ("# local_irq_save \n\t" \ | 19 | asm volatile (" msrclr %0, %1; \ |
19 | "msrclr %0, %1 \n\t" \ | 20 | nop;" \ |
20 | "nop \n\t" \ | ||
21 | : "=r"(flags) \ | 21 | : "=r"(flags) \ |
22 | : "i"(MSR_IE) \ | 22 | : "i"(MSR_IE) \ |
23 | : "memory"); \ | 23 | : "memory"); \ |
24 | } while (0) | 24 | } while (0) |
25 | 25 | ||
26 | # define local_irq_disable() \ | 26 | # define raw_local_irq_disable() \ |
27 | do { \ | 27 | do { \ |
28 | asm volatile ("# local_irq_disable \n\t" \ | 28 | asm volatile (" msrclr r0, %0; \ |
29 | "msrclr r0, %0 \n\t" \ | 29 | nop;" \ |
30 | "nop \n\t" \ | 30 | : \ |
31 | : \ | 31 | : "i"(MSR_IE) \ |
32 | : "i"(MSR_IE) \ | 32 | : "memory"); \ |
33 | : "memory"); \ | ||
34 | } while (0) | 33 | } while (0) |
35 | 34 | ||
36 | # define local_irq_enable() \ | 35 | # define raw_local_irq_enable() \ |
37 | do { \ | 36 | do { \ |
38 | asm volatile ("# local_irq_enable \n\t" \ | 37 | asm volatile (" msrset r0, %0; \ |
39 | "msrset r0, %0 \n\t" \ | 38 | nop;" \ |
40 | "nop \n\t" \ | 39 | : \ |
41 | : \ | 40 | : "i"(MSR_IE) \ |
42 | : "i"(MSR_IE) \ | 41 | : "memory"); \ |
43 | : "memory"); \ | ||
44 | } while (0) | 42 | } while (0) |
45 | 43 | ||
46 | # else /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR == 0 */ | 44 | # else /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR == 0 */ |
47 | 45 | ||
48 | # define local_irq_save(flags) \ | 46 | # define raw_local_irq_save(flags) \ |
49 | do { \ | 47 | do { \ |
50 | register unsigned tmp; \ | 48 | register unsigned tmp; \ |
51 | asm volatile ("# local_irq_save \n\t" \ | 49 | asm volatile (" mfs %0, rmsr; \ |
52 | "mfs %0, rmsr \n\t" \ | 50 | nop; \ |
53 | "nop \n\t" \ | 51 | andi %1, %0, %2; \ |
54 | "andi %1, %0, %2 \n\t" \ | 52 | mts rmsr, %1; \ |
55 | "mts rmsr, %1 \n\t" \ | 53 | nop;" \ |
56 | "nop \n\t" \ | ||
57 | : "=r"(flags), "=r" (tmp) \ | 54 | : "=r"(flags), "=r" (tmp) \ |
58 | : "i"(~MSR_IE) \ | 55 | : "i"(~MSR_IE) \ |
59 | : "memory"); \ | 56 | : "memory"); \ |
60 | } while (0) | 57 | } while (0) |
61 | 58 | ||
62 | # define local_irq_disable() \ | 59 | # define raw_local_irq_disable() \ |
63 | do { \ | 60 | do { \ |
64 | register unsigned tmp; \ | 61 | register unsigned tmp; \ |
65 | asm volatile ("# local_irq_disable \n\t" \ | 62 | asm volatile (" mfs %0, rmsr; \ |
66 | "mfs %0, rmsr \n\t" \ | 63 | nop; \ |
67 | "nop \n\t" \ | 64 | andi %0, %0, %1; \ |
68 | "andi %0, %0, %1 \n\t" \ | 65 | mts rmsr, %0; \ |
69 | "mts rmsr, %0 \n\t" \ | 66 | nop;" \ |
70 | "nop \n\t" \ | ||
71 | : "=r"(tmp) \ | 67 | : "=r"(tmp) \ |
72 | : "i"(~MSR_IE) \ | 68 | : "i"(~MSR_IE) \ |
73 | : "memory"); \ | 69 | : "memory"); \ |
74 | } while (0) | 70 | } while (0) |
75 | 71 | ||
76 | # define local_irq_enable() \ | 72 | # define raw_local_irq_enable() \ |
77 | do { \ | 73 | do { \ |
78 | register unsigned tmp; \ | 74 | register unsigned tmp; \ |
79 | asm volatile ("# local_irq_enable \n\t" \ | 75 | asm volatile (" mfs %0, rmsr; \ |
80 | "mfs %0, rmsr \n\t" \ | 76 | nop; \ |
81 | "nop \n\t" \ | 77 | ori %0, %0, %1; \ |
82 | "ori %0, %0, %1 \n\t" \ | 78 | mts rmsr, %0; \ |
83 | "mts rmsr, %0 \n\t" \ | 79 | nop;" \ |
84 | "nop \n\t" \ | ||
85 | : "=r"(tmp) \ | 80 | : "=r"(tmp) \ |
86 | : "i"(MSR_IE) \ | 81 | : "i"(MSR_IE) \ |
87 | : "memory"); \ | 82 | : "memory"); \ |
@@ -89,35 +84,28 @@ | |||
89 | 84 | ||
90 | # endif /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */ | 85 | # endif /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */ |
91 | 86 | ||
92 | #define local_save_flags(flags) \ | 87 | #define raw_local_irq_restore(flags) \ |
93 | do { \ | 88 | do { \ |
94 | asm volatile ("# local_save_flags \n\t" \ | 89 | asm volatile (" mts rmsr, %0; \ |
95 | "mfs %0, rmsr \n\t" \ | 90 | nop;" \ |
96 | "nop \n\t" \ | ||
97 | : "=r"(flags) \ | ||
98 | : \ | 91 | : \ |
92 | : "r"(flags) \ | ||
99 | : "memory"); \ | 93 | : "memory"); \ |
100 | } while (0) | 94 | } while (0) |
101 | 95 | ||
102 | #define local_irq_restore(flags) \ | 96 | static inline unsigned long get_msr(void) |
103 | do { \ | ||
104 | asm volatile ("# local_irq_restore \n\t"\ | ||
105 | "mts rmsr, %0 \n\t" \ | ||
106 | "nop \n\t" \ | ||
107 | : \ | ||
108 | : "r"(flags) \ | ||
109 | : "memory"); \ | ||
110 | } while (0) | ||
111 | |||
112 | static inline int irqs_disabled(void) | ||
113 | { | 97 | { |
114 | unsigned long flags; | 98 | unsigned long flags; |
115 | 99 | asm volatile (" mfs %0, rmsr; \ | |
116 | local_save_flags(flags); | 100 | nop;" \ |
117 | return ((flags & MSR_IE) == 0); | 101 | : "=r"(flags) \ |
102 | : \ | ||
103 | : "memory"); \ | ||
104 | return flags; | ||
118 | } | 105 | } |
119 | 106 | ||
120 | #define raw_irqs_disabled irqs_disabled | 107 | #define raw_local_save_flags(flags) ((flags) = get_msr()) |
121 | #define raw_irqs_disabled_flags(flags) ((flags) == 0) | 108 | #define raw_irqs_disabled() ((get_msr() & MSR_IE) == 0) |
109 | #define raw_irqs_disabled_flags(flags) ((flags & MSR_IE) == 0) | ||
122 | 110 | ||
123 | #endif /* _ASM_MICROBLAZE_IRQFLAGS_H */ | 111 | #endif /* _ASM_MICROBLAZE_IRQFLAGS_H */ |
diff --git a/arch/microblaze/kernel/cpu/pvr.c b/arch/microblaze/kernel/cpu/pvr.c index c9a4340ddd53..9bee9382bf74 100644 --- a/arch/microblaze/kernel/cpu/pvr.c +++ b/arch/microblaze/kernel/cpu/pvr.c | |||
@@ -45,7 +45,7 @@ | |||
45 | 45 | ||
46 | int cpu_has_pvr(void) | 46 | int cpu_has_pvr(void) |
47 | { | 47 | { |
48 | unsigned flags; | 48 | unsigned long flags; |
49 | unsigned pvr0; | 49 | unsigned pvr0; |
50 | 50 | ||
51 | local_save_flags(flags); | 51 | local_save_flags(flags); |