diff options
author | Al Viro <viro@ftp.linux.org.uk> | 2006-10-08 17:49:34 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-08 19:34:08 -0400 |
commit | 7bea96fd22a8fd19f90817405b4abe032317a0e3 (patch) | |
tree | 518bbc228f61f8ff393e4f9a57eeaab8aa2ea2df /arch/um/kernel | |
parent | e24bb60e11e3fe9858b71874a4ac59333adbc4fc (diff) |
[PATCH] uml pt_regs fixes
Real fix for UML pt_regs stuff. Note set_irq_regs() logics in there...
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/um/kernel')
-rw-r--r-- | arch/um/kernel/irq.c | 15 | ||||
-rw-r--r-- | arch/um/kernel/sigio.c | 2 | ||||
-rw-r--r-- | arch/um/kernel/time.c | 2 |
3 files changed, 10 insertions, 9 deletions
diff --git a/arch/um/kernel/irq.c b/arch/um/kernel/irq.c index 7c41dabe7a2c..3c01c2bc979a 100644 --- a/arch/um/kernel/irq.c +++ b/arch/um/kernel/irq.c | |||
@@ -355,14 +355,16 @@ void forward_interrupts(int pid) | |||
355 | */ | 355 | */ |
356 | unsigned int do_IRQ(int irq, union uml_pt_regs *regs) | 356 | unsigned int do_IRQ(int irq, union uml_pt_regs *regs) |
357 | { | 357 | { |
358 | irq_enter(); | 358 | struct pt_regs *old_regs = set_irq_regs((struct pt_regs *)regs); |
359 | __do_IRQ(irq); | 359 | irq_enter(); |
360 | irq_exit(); | 360 | __do_IRQ(irq); |
361 | return 1; | 361 | irq_exit(); |
362 | set_irq_regs(old_regs); | ||
363 | return 1; | ||
362 | } | 364 | } |
363 | 365 | ||
364 | int um_request_irq(unsigned int irq, int fd, int type, | 366 | int um_request_irq(unsigned int irq, int fd, int type, |
365 | irqreturn_t (*handler)(int, void *, struct pt_regs *), | 367 | irqreturn_t (*handler)(int, void *), |
366 | unsigned long irqflags, const char * devname, | 368 | unsigned long irqflags, const char * devname, |
367 | void *dev_id) | 369 | void *dev_id) |
368 | { | 370 | { |
@@ -423,8 +425,7 @@ void __init init_IRQ(void) | |||
423 | } | 425 | } |
424 | } | 426 | } |
425 | 427 | ||
426 | int init_aio_irq(int irq, char *name, irqreturn_t (*handler)(int, void *, | 428 | int init_aio_irq(int irq, char *name, irqreturn_t (*handler)(int, void *)) |
427 | struct pt_regs *)) | ||
428 | { | 429 | { |
429 | int fds[2], err; | 430 | int fds[2], err; |
430 | 431 | ||
diff --git a/arch/um/kernel/sigio.c b/arch/um/kernel/sigio.c index 0ad755ceb212..2b0ab438301c 100644 --- a/arch/um/kernel/sigio.c +++ b/arch/um/kernel/sigio.c | |||
@@ -17,7 +17,7 @@ | |||
17 | /* Protected by sigio_lock() called from write_sigio_workaround */ | 17 | /* Protected by sigio_lock() called from write_sigio_workaround */ |
18 | static int sigio_irq_fd = -1; | 18 | static int sigio_irq_fd = -1; |
19 | 19 | ||
20 | static irqreturn_t sigio_interrupt(int irq, void *data, struct pt_regs *unused) | 20 | static irqreturn_t sigio_interrupt(int irq, void *data) |
21 | { | 21 | { |
22 | char c; | 22 | char c; |
23 | 23 | ||
diff --git a/arch/um/kernel/time.c b/arch/um/kernel/time.c index a92965f8f9cd..2e354b3ca060 100644 --- a/arch/um/kernel/time.c +++ b/arch/um/kernel/time.c | |||
@@ -86,7 +86,7 @@ static inline unsigned long long get_time(void) | |||
86 | return nsecs; | 86 | return nsecs; |
87 | } | 87 | } |
88 | 88 | ||
89 | irqreturn_t um_timer(int irq, void *dev, struct pt_regs *regs) | 89 | irqreturn_t um_timer(int irq, void *dev) |
90 | { | 90 | { |
91 | unsigned long long nsecs; | 91 | unsigned long long nsecs; |
92 | unsigned long flags; | 92 | unsigned long flags; |