Skip to content

Commit

Permalink
[PATCH] uml pt_regs fixes
Browse files Browse the repository at this point in the history
Real fix for UML pt_regs stuff.  Note set_irq_regs() logics in there...

Signed-off-by: Al Viro <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Al Viro authored and Linus Torvalds committed Oct 8, 2006
1 parent e24bb60 commit 7bea96f
Show file tree
Hide file tree
Showing 10 changed files with 24 additions and 25 deletions.
7 changes: 3 additions & 4 deletions arch/um/drivers/line.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
8 changes: 4 additions & 4 deletions arch/um/drivers/mconsole_kern.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion arch/um/drivers/net_kern.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions arch/um/drivers/port_kern.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;

Expand Down
2 changes: 1 addition & 1 deletion arch/um/drivers/ubd_kern.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion arch/um/drivers/xterm_kern.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
5 changes: 2 additions & 3 deletions arch/um/include/irq_kern.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
15 changes: 8 additions & 7 deletions arch/um/kernel/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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;

Expand Down
2 changes: 1 addition & 1 deletion arch/um/kernel/sigio.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
2 changes: 1 addition & 1 deletion arch/um/kernel/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 7bea96f

Please sign in to comment.