mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 21:21:41 +00:00
[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:
parent
e24bb60e11
commit
7bea96fd22
@ -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;
|
||||
|
@ -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, ¤t->thread.regs, NULL);
|
||||
struct pt_regs *old_regs = set_irq_regs(¤t->thread.regs);
|
||||
handle_sysrq(*op, NULL);
|
||||
set_irq_regs(old_regs);
|
||||
}
|
||||
|
||||
void mconsole_sysrq(struct mc_request *req)
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user