diff options
-rw-r--r-- | arch/blackfin/include/asm/ipipe.h | 7 | ||||
-rw-r--r-- | arch/blackfin/kernel/ipipe.c | 44 | ||||
-rw-r--r-- | arch/blackfin/lib/ins.S | 4 |
3 files changed, 22 insertions, 33 deletions
diff --git a/arch/blackfin/include/asm/ipipe.h b/arch/blackfin/include/asm/ipipe.h index 87ba9ad399cb..4617ba66278f 100644 --- a/arch/blackfin/include/asm/ipipe.h +++ b/arch/blackfin/include/asm/ipipe.h | |||
@@ -145,10 +145,6 @@ void __ipipe_handle_irq(unsigned irq, struct pt_regs *regs); | |||
145 | 145 | ||
146 | int __ipipe_get_irq_priority(unsigned irq); | 146 | int __ipipe_get_irq_priority(unsigned irq); |
147 | 147 | ||
148 | void __ipipe_stall_root_raw(void); | ||
149 | |||
150 | void __ipipe_unstall_root_raw(void); | ||
151 | |||
152 | void __ipipe_serial_debug(const char *fmt, ...); | 148 | void __ipipe_serial_debug(const char *fmt, ...); |
153 | 149 | ||
154 | asmlinkage void __ipipe_call_irqtail(unsigned long addr); | 150 | asmlinkage void __ipipe_call_irqtail(unsigned long addr); |
@@ -234,9 +230,6 @@ int ipipe_start_irq_thread(unsigned irq, struct irq_desc *desc); | |||
234 | #define task_hijacked(p) 0 | 230 | #define task_hijacked(p) 0 |
235 | #define ipipe_trap_notify(t, r) 0 | 231 | #define ipipe_trap_notify(t, r) 0 |
236 | 232 | ||
237 | #define __ipipe_stall_root_raw() do { } while (0) | ||
238 | #define __ipipe_unstall_root_raw() do { } while (0) | ||
239 | |||
240 | #define ipipe_init_irq_threads() do { } while (0) | 233 | #define ipipe_init_irq_threads() do { } while (0) |
241 | #define ipipe_start_irq_thread(irq, desc) 0 | 234 | #define ipipe_start_irq_thread(irq, desc) 0 |
242 | 235 | ||
diff --git a/arch/blackfin/kernel/ipipe.c b/arch/blackfin/kernel/ipipe.c index a7256775fb98..be4f24ebd40c 100644 --- a/arch/blackfin/kernel/ipipe.c +++ b/arch/blackfin/kernel/ipipe.c | |||
@@ -191,30 +191,6 @@ void __ipipe_disable_irqdesc(struct ipipe_domain *ipd, unsigned irq) | |||
191 | } | 191 | } |
192 | EXPORT_SYMBOL(__ipipe_disable_irqdesc); | 192 | EXPORT_SYMBOL(__ipipe_disable_irqdesc); |
193 | 193 | ||
194 | void __ipipe_stall_root_raw(void) | ||
195 | { | ||
196 | /* | ||
197 | * This code is called by the ins{bwl} routines (see | ||
198 | * arch/blackfin/lib/ins.S), which are heavily used by the | ||
199 | * network stack. It masks all interrupts but those handled by | ||
200 | * non-root domains, so that we keep decent network transfer | ||
201 | * rates for Linux without inducing pathological jitter for | ||
202 | * the real-time domain. | ||
203 | */ | ||
204 | __asm__ __volatile__ ("sti %0;" : : "d"(__ipipe_irq_lvmask)); | ||
205 | |||
206 | __set_bit(IPIPE_STALL_FLAG, | ||
207 | &ipipe_root_cpudom_var(status)); | ||
208 | } | ||
209 | |||
210 | void __ipipe_unstall_root_raw(void) | ||
211 | { | ||
212 | __clear_bit(IPIPE_STALL_FLAG, | ||
213 | &ipipe_root_cpudom_var(status)); | ||
214 | |||
215 | __asm__ __volatile__ ("sti %0;" : : "d"(bfin_irq_flags)); | ||
216 | } | ||
217 | |||
218 | int __ipipe_syscall_root(struct pt_regs *regs) | 194 | int __ipipe_syscall_root(struct pt_regs *regs) |
219 | { | 195 | { |
220 | struct ipipe_percpu_domain_data *p; | 196 | struct ipipe_percpu_domain_data *p; |
@@ -344,3 +320,23 @@ void ___ipipe_sync_pipeline(unsigned long syncmask) | |||
344 | 320 | ||
345 | __ipipe_sync_stage(syncmask); | 321 | __ipipe_sync_stage(syncmask); |
346 | } | 322 | } |
323 | |||
324 | void __ipipe_disable_root_irqs_hw(void) | ||
325 | { | ||
326 | /* | ||
327 | * This code is called by the ins{bwl} routines (see | ||
328 | * arch/blackfin/lib/ins.S), which are heavily used by the | ||
329 | * network stack. It masks all interrupts but those handled by | ||
330 | * non-root domains, so that we keep decent network transfer | ||
331 | * rates for Linux without inducing pathological jitter for | ||
332 | * the real-time domain. | ||
333 | */ | ||
334 | bfin_sti(__ipipe_irq_lvmask); | ||
335 | __set_bit(IPIPE_STALL_FLAG, &ipipe_root_cpudom_var(status)); | ||
336 | } | ||
337 | |||
338 | void __ipipe_enable_root_irqs_hw(void) | ||
339 | { | ||
340 | __clear_bit(IPIPE_STALL_FLAG, &ipipe_root_cpudom_var(status)); | ||
341 | bfin_sti(bfin_irq_flags); | ||
342 | } | ||
diff --git a/arch/blackfin/lib/ins.S b/arch/blackfin/lib/ins.S index 1863a6ba507c..3edbd8db6598 100644 --- a/arch/blackfin/lib/ins.S +++ b/arch/blackfin/lib/ins.S | |||
@@ -16,7 +16,7 @@ | |||
16 | [--sp] = rets; \ | 16 | [--sp] = rets; \ |
17 | [--sp] = (P5:0); \ | 17 | [--sp] = (P5:0); \ |
18 | sp += -12; \ | 18 | sp += -12; \ |
19 | call ___ipipe_stall_root_raw; \ | 19 | call ___ipipe_disable_root_irqs_hw; \ |
20 | sp += 12; \ | 20 | sp += 12; \ |
21 | (P5:0) = [sp++]; | 21 | (P5:0) = [sp++]; |
22 | # define CLI_INNER_NOP | 22 | # define CLI_INNER_NOP |
@@ -28,7 +28,7 @@ | |||
28 | #ifdef CONFIG_IPIPE | 28 | #ifdef CONFIG_IPIPE |
29 | # define DO_STI \ | 29 | # define DO_STI \ |
30 | sp += -12; \ | 30 | sp += -12; \ |
31 | call ___ipipe_unstall_root_raw; \ | 31 | call ___ipipe_enable_root_irqs_hw; \ |
32 | sp += 12; \ | 32 | sp += 12; \ |
33 | 2: rets = [sp++]; | 33 | 2: rets = [sp++]; |
34 | #else | 34 | #else |