|
14 | 14 | static inline void arch_local_irq_enable(void) |
15 | 15 | { |
16 | 16 | u32 flags = CSR_CRMD_IE; |
| 17 | + register u32 mask asm("t0") = CSR_CRMD_IE; |
| 18 | + |
17 | 19 | __asm__ __volatile__( |
18 | 20 | "csrxchg %[val], %[mask], %[reg]\n\t" |
19 | 21 | : [val] "+r" (flags) |
20 | | - : [mask] "r" (CSR_CRMD_IE), [reg] "i" (LOONGARCH_CSR_CRMD) |
| 22 | + : [mask] "r" (mask), [reg] "i" (LOONGARCH_CSR_CRMD) |
21 | 23 | : "memory"); |
22 | 24 | } |
23 | 25 |
|
24 | 26 | static inline void arch_local_irq_disable(void) |
25 | 27 | { |
26 | 28 | u32 flags = 0; |
| 29 | + register u32 mask asm("t0") = CSR_CRMD_IE; |
| 30 | + |
27 | 31 | __asm__ __volatile__( |
28 | 32 | "csrxchg %[val], %[mask], %[reg]\n\t" |
29 | 33 | : [val] "+r" (flags) |
30 | | - : [mask] "r" (CSR_CRMD_IE), [reg] "i" (LOONGARCH_CSR_CRMD) |
| 34 | + : [mask] "r" (mask), [reg] "i" (LOONGARCH_CSR_CRMD) |
31 | 35 | : "memory"); |
32 | 36 | } |
33 | 37 |
|
34 | 38 | static inline unsigned long arch_local_irq_save(void) |
35 | 39 | { |
36 | 40 | u32 flags = 0; |
| 41 | + register u32 mask asm("t0") = CSR_CRMD_IE; |
| 42 | + |
37 | 43 | __asm__ __volatile__( |
38 | 44 | "csrxchg %[val], %[mask], %[reg]\n\t" |
39 | 45 | : [val] "+r" (flags) |
40 | | - : [mask] "r" (CSR_CRMD_IE), [reg] "i" (LOONGARCH_CSR_CRMD) |
| 46 | + : [mask] "r" (mask), [reg] "i" (LOONGARCH_CSR_CRMD) |
41 | 47 | : "memory"); |
42 | 48 | return flags; |
43 | 49 | } |
44 | 50 |
|
45 | 51 | static inline void arch_local_irq_restore(unsigned long flags) |
46 | 52 | { |
| 53 | + register u32 mask asm("t0") = CSR_CRMD_IE; |
| 54 | + |
47 | 55 | __asm__ __volatile__( |
48 | 56 | "csrxchg %[val], %[mask], %[reg]\n\t" |
49 | 57 | : [val] "+r" (flags) |
50 | | - : [mask] "r" (CSR_CRMD_IE), [reg] "i" (LOONGARCH_CSR_CRMD) |
| 58 | + : [mask] "r" (mask), [reg] "i" (LOONGARCH_CSR_CRMD) |
51 | 59 | : "memory"); |
52 | 60 | } |
53 | 61 |
|
|
0 commit comments