diff options
Diffstat (limited to 'arch/blackfin/kernel')
-rw-r--r-- | arch/blackfin/kernel/ipipe.c | 44 |
1 files changed, 20 insertions, 24 deletions
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 | } | ||