aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/blackfin/include/asm/ipipe.h7
-rw-r--r--arch/blackfin/kernel/ipipe.c44
-rw-r--r--arch/blackfin/lib/ins.S4
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
146int __ipipe_get_irq_priority(unsigned irq); 146int __ipipe_get_irq_priority(unsigned irq);
147 147
148void __ipipe_stall_root_raw(void);
149
150void __ipipe_unstall_root_raw(void);
151
152void __ipipe_serial_debug(const char *fmt, ...); 148void __ipipe_serial_debug(const char *fmt, ...);
153 149
154asmlinkage void __ipipe_call_irqtail(unsigned long addr); 150asmlinkage 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}
192EXPORT_SYMBOL(__ipipe_disable_irqdesc); 192EXPORT_SYMBOL(__ipipe_disable_irqdesc);
193 193
194void __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
210void __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
218int __ipipe_syscall_root(struct pt_regs *regs) 194int __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
324void __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
338void __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; \
332: rets = [sp++]; 332: rets = [sp++];
34#else 34#else