...
 
Commits (2)
......@@ -182,10 +182,12 @@ extern int vfp_restore_user_hwstate(struct user_vfp *,
#define TIP_MAYDAY 0 /* MAYDAY call is pending */
#define TIP_NOTIFY 1 /* Notify head domain about kernel events */
#define TIP_HEAD 2 /* Runs in head domain */
#define TIP_USERINTRET 3 /* Notify on IRQ/trap return to root userspace */
#define _TIP_MAYDAY (1 << TIP_MAYDAY)
#define _TIP_NOTIFY (1 << TIP_NOTIFY)
#define _TIP_HEAD (1 << TIP_HEAD)
#define _TIP_USERINTRET (1 << TIP_USERINTRET)
#endif /* __KERNEL__ */
#endif /* __ASM_ARM_THREAD_INFO_H */
......@@ -152,8 +152,25 @@ ENTRY(ret_to_user_from_irq)
tst r1, #_TIF_WORK_MASK
bne slow_work_pending
no_work_pending:
#ifdef CONFIG_IPIPE
get_thread_info tsk
ldr r1, [tsk, #TI_IPIPE]
tst r1, #_TIP_USERINTRET
bne call_user_intret_notifier
goto_user:
#endif
asm_trace_hardirqs_on save = 0
slow_restore_user_regs
#ifdef CONFIG_IPIPE
call_user_intret_notifier:
enable_irq_notrace
bl __ipipe_notify_user_intreturn
cmp r0, #0
beq ret_slow_syscall
disable_irq_notrace
b goto_user
#endif
ENDPROC(ret_to_user_from_irq)
ENDPROC(ret_to_user)
......
......@@ -49,7 +49,7 @@ static void __ipipe_tsc_update_fn(unsigned long cookie)
add_timer(&ipipe_tsc_update_timer);
}
void __init __ipipe_tsc_register(struct __ipipe_tscinfo *info)
void __ipipe_tsc_register(struct __ipipe_tscinfo *info)
{
struct ipipe_tsc_value_t *vector_tsc_value;
unsigned long long wrap_ms;
......