[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>
This commit is contained in:
Al Viro 2006-10-08 22:49:34 +01:00 committed by Linus Torvalds
parent e24bb60e11
commit 7bea96fd22
10 changed files with 24 additions and 25 deletions

View File

@ -20,7 +20,7 @@
#define LINE_BUFSIZE 4096
static irqreturn_t line_interrupt(int irq, void *data, struct pt_regs *unused)
static irqreturn_t line_interrupt(int irq, void *data)
{
struct chan *chan = data;
struct line *line = chan->line;
@ -364,8 +364,7 @@ void line_unthrottle(struct tty_struct *tty)
reactivate_chan(&line->chan_list, line->driver->read_irq);
}
static irqreturn_t line_write_interrupt(int irq, void *data,
struct pt_regs *unused)
static irqreturn_t line_write_interrupt(int irq, void *data)
{
struct chan *chan = data;
struct line *line = chan->line;
@ -712,7 +711,7 @@ struct winch {
struct tty_struct *tty;
};
static irqreturn_t winch_interrupt(int irq, void *data, struct pt_regs *unused)
static irqreturn_t winch_interrupt(int irq, void *data)
{
struct winch *winch = data;
struct tty_struct *tty;

View File

@ -74,8 +74,7 @@ static void mc_work_proc(void *unused)
static DECLARE_WORK(mconsole_work, mc_work_proc, NULL);
static irqreturn_t mconsole_interrupt(int irq, void *dev_id,
struct pt_regs *regs)
static irqreturn_t mconsole_interrupt(int irq, void *dev_id)
{
/* long to avoid size mismatch warnings from gcc */
long fd;
@ -674,8 +673,9 @@ static void with_console(struct mc_request *req, void (*proc)(void *),
static void sysrq_proc(void *arg)
{
char *op = arg;
handle_sysrq(*op, &current->thread.regs, NULL);
struct pt_regs *old_regs = set_irq_regs(&current->thread.regs);
handle_sysrq(*op, NULL);
set_irq_regs(old_regs);
}
void mconsole_sysrq(struct mc_request *req)

View File

@ -77,7 +77,7 @@ static void uml_dev_close(void* dev)
dev_close( (struct net_device *) dev);
}
irqreturn_t uml_net_interrupt(int irq, void *dev_id, struct pt_regs *regs)
irqreturn_t uml_net_interrupt(int irq, void *dev_id)
{
struct net_device *dev = dev_id;
struct uml_net_private *lp = dev->priv;

View File

@ -47,7 +47,7 @@ struct connection {
struct port_list *port;
};
static irqreturn_t pipe_interrupt(int irq, void *data, struct pt_regs *regs)
static irqreturn_t pipe_interrupt(int irq, void *data)
{
struct connection *conn = data;
int fd;
@ -152,7 +152,7 @@ void port_work_proc(void *unused)
DECLARE_WORK(port_work, port_work_proc, NULL);
static irqreturn_t port_interrupt(int irq, void *data, struct pt_regs *regs)
static irqreturn_t port_interrupt(int irq, void *data)
{
struct port_list *port = data;

View File

@ -524,7 +524,7 @@ static void ubd_handler(void)
do_ubd_request(ubd_queue);
}
static irqreturn_t ubd_intr(int irq, void *dev, struct pt_regs *unused)
static irqreturn_t ubd_intr(int irq, void *dev)
{
ubd_handler();
return(IRQ_HANDLED);

View File

@ -21,7 +21,7 @@ struct xterm_wait {
int new_fd;
};
static irqreturn_t xterm_interrupt(int irq, void *data, struct pt_regs *regs)
static irqreturn_t xterm_interrupt(int irq, void *data)
{
struct xterm_wait *xterm = data;
int fd;

View File

@ -10,12 +10,11 @@
#include "asm/ptrace.h"
extern int um_request_irq(unsigned int irq, int fd, int type,
irqreturn_t (*handler)(int, void *,
struct pt_regs *),
irqreturn_t (*handler)(int, void *),
unsigned long irqflags, const char * devname,
void *dev_id);
extern int init_aio_irq(int irq, char *name,
irqreturn_t (*handler)(int, void *, struct pt_regs *));
irqreturn_t (*handler)(int, void *));
#endif

View File

@ -355,14 +355,16 @@ void forward_interrupts(int pid)
*/
unsigned int do_IRQ(int irq, union uml_pt_regs *regs)
{
irq_enter();
__do_IRQ(irq);
irq_exit();
return 1;
struct pt_regs *old_regs = set_irq_regs((struct pt_regs *)regs);
irq_enter();
__do_IRQ(irq);
irq_exit();
set_irq_regs(old_regs);
return 1;
}
int um_request_irq(unsigned int irq, int fd, int type,
irqreturn_t (*handler)(int, void *, struct pt_regs *),
irqreturn_t (*handler)(int, void *),
unsigned long irqflags, const char * devname,
void *dev_id)
{
@ -423,8 +425,7 @@ void __init init_IRQ(void)
}
}
int init_aio_irq(int irq, char *name, irqreturn_t (*handler)(int, void *,
struct pt_regs *))
int init_aio_irq(int irq, char *name, irqreturn_t (*handler)(int, void *))
{
int fds[2], err;

View File

@ -17,7 +17,7 @@
/* Protected by sigio_lock() called from write_sigio_workaround */
static int sigio_irq_fd = -1;
static irqreturn_t sigio_interrupt(int irq, void *data, struct pt_regs *unused)
static irqreturn_t sigio_interrupt(int irq, void *data)
{
char c;

View File

@ -86,7 +86,7 @@ static inline unsigned long long get_time(void)
return nsecs;
}
irqreturn_t um_timer(int irq, void *dev, struct pt_regs *regs)
irqreturn_t um_timer(int irq, void *dev)
{
unsigned long long nsecs;
unsigned long flags;