[PATCH] uml: TT mode softint fixes
Some fixes to make softints work in tt mode. Signed-off-by: Jeff Dike <jdike@addtoit.com> Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
c83d4635ee
commit
097fdf06c6
@@ -187,8 +187,9 @@ void timer_handler(int sig, union uml_pt_regs *regs)
|
|||||||
{
|
{
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
irq_enter();
|
irq_enter();
|
||||||
update_process_times(CHOOSE_MODE(user_context(UPT_SP(regs)),
|
update_process_times(CHOOSE_MODE(
|
||||||
(regs)->skas.is_user));
|
(UPT_SC(regs) && user_context(UPT_SP(regs))),
|
||||||
|
(regs)->skas.is_user));
|
||||||
irq_exit();
|
irq_exit();
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
if(current_thread->cpu == 0)
|
if(current_thread->cpu == 0)
|
||||||
|
@@ -18,7 +18,7 @@ void sig_handler_common_tt(int sig, void *sc_ptr)
|
|||||||
{
|
{
|
||||||
struct sigcontext *sc = sc_ptr;
|
struct sigcontext *sc = sc_ptr;
|
||||||
struct tt_regs save_regs, *r;
|
struct tt_regs save_regs, *r;
|
||||||
int save_errno = errno, is_user;
|
int save_errno = errno, is_user = 0;
|
||||||
void (*handler)(int, union uml_pt_regs *);
|
void (*handler)(int, union uml_pt_regs *);
|
||||||
|
|
||||||
/* This is done because to allow SIGSEGV to be delivered inside a SEGV
|
/* This is done because to allow SIGSEGV to be delivered inside a SEGV
|
||||||
@@ -35,7 +35,8 @@ void sig_handler_common_tt(int sig, void *sc_ptr)
|
|||||||
GET_FAULTINFO_FROM_SC(r->faultinfo, sc);
|
GET_FAULTINFO_FROM_SC(r->faultinfo, sc);
|
||||||
}
|
}
|
||||||
save_regs = *r;
|
save_regs = *r;
|
||||||
is_user = user_context(SC_SP(sc));
|
if (sc)
|
||||||
|
is_user = user_context(SC_SP(sc));
|
||||||
r->sc = sc;
|
r->sc = sc;
|
||||||
if(sig != SIGUSR2)
|
if(sig != SIGUSR2)
|
||||||
r->syscall = -1;
|
r->syscall = -1;
|
||||||
|
Reference in New Issue
Block a user