git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
This commit was manufactured by cvs2svn to create tag
[linux-2.6.git]
/
arch
/
um
/
drivers
/
mconsole_kern.c
diff --git
a/arch/um/drivers/mconsole_kern.c
b/arch/um/drivers/mconsole_kern.c
index
3396ba4
..
d8af144
100644
(file)
--- a/
arch/um/drivers/mconsole_kern.c
+++ b/
arch/um/drivers/mconsole_kern.c
@@
-51,26
+51,27
@@
static struct notifier_block reboot_notifier = {
LIST_HEAD(mc_requests);
LIST_HEAD(mc_requests);
-
static
void mc_work_proc(void *unused)
+void mc_work_proc(void *unused)
{
struct mconsole_entry *req;
unsigned long flags;
{
struct mconsole_entry *req;
unsigned long flags;
+ int done;
-
while(!list_empty(&mc_requests))
{
+
do
{
local_save_flags(flags);
req = list_entry(mc_requests.next, struct mconsole_entry,
list);
list_del(&req->list);
local_save_flags(flags);
req = list_entry(mc_requests.next, struct mconsole_entry,
list);
list_del(&req->list);
+ done = list_empty(&mc_requests);
local_irq_restore(flags);
req->request.cmd->handler(&req->request);
kfree(req);
local_irq_restore(flags);
req->request.cmd->handler(&req->request);
kfree(req);
- }
+ }
while(!done);
}
DECLARE_WORK(mconsole_work, mc_work_proc, NULL);
}
DECLARE_WORK(mconsole_work, mc_work_proc, NULL);
-static irqreturn_t mconsole_interrupt(int irq, void *dev_id,
- struct pt_regs *regs)
+irqreturn_t mconsole_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
int fd;
struct mconsole_entry *new;
{
int fd;
struct mconsole_entry *new;
@@
-90,8
+91,7
@@
static irqreturn_t mconsole_interrupt(int irq, void *dev_id,
}
}
}
}
}
}
- if(!list_empty(&mc_requests))
- schedule_work(&mconsole_work);
+ if(!list_empty(&mc_requests)) schedule_work(&mconsole_work);
reactivate_fd(fd, MCONSOLE_IRQ);
return(IRQ_HANDLED);
}
reactivate_fd(fd, MCONSOLE_IRQ);
return(IRQ_HANDLED);
}
@@
-374,8
+374,8
@@
void mconsole_sysrq(struct mc_request *req)
ptr += strlen("sysrq");
while(isspace(*ptr)) ptr++;
ptr += strlen("sysrq");
while(isspace(*ptr)) ptr++;
- mconsole_reply(req, "", 0, 0);
handle_sysrq(*ptr, ¤t->thread.regs, NULL);
handle_sysrq(*ptr, ¤t->thread.regs, NULL);
+ mconsole_reply(req, "", 0, 0);
}
#else
void mconsole_sysrq(struct mc_request *req)
}
#else
void mconsole_sysrq(struct mc_request *req)