lguest: remove obsolete LHREQ_BREAK call
authorRusty Russell <rusty@rustcorp.com.au>
Sat, 13 Jun 2009 04:27:10 +0000 (22:27 -0600)
committerRusty Russell <rusty@rustcorp.com.au>
Fri, 12 Jun 2009 12:57:11 +0000 (22:27 +0930)
We no longer need an efficient mechanism to force the Guest back into
host userspace, as each device is serviced without bothering the main
Guest process (aka. the Launcher).

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
drivers/lguest/core.c
drivers/lguest/lg.h
drivers/lguest/lguest_user.c
include/linux/lguest_launcher.h

index 508569c..a6974e9 100644 (file)
@@ -209,10 +209,6 @@ int run_guest(struct lg_cpu *cpu, unsigned long __user *user)
                if (signal_pending(current))
                        return -ERESTARTSYS;
 
-               /* If Waker set break_out, return to Launcher. */
-               if (cpu->break_out)
-                       return -EAGAIN;
-
                /* Check if there are any interrupts which can be delivered now:
                 * if so, this sets up the hander to be executed when we next
                 * run the Guest. */
@@ -231,13 +227,12 @@ int run_guest(struct lg_cpu *cpu, unsigned long __user *user)
                        break;
 
                /* If the Guest asked to be stopped, we sleep.  The Guest's
-                * clock timer or LHREQ_BREAK from the Waker will wake us. */
+                * clock timer will wake us. */
                if (cpu->halted) {
                        set_current_state(TASK_INTERRUPTIBLE);
-                       /* Just before we sleep, make sure nothing snuck in
+                       /* Just before we sleep, make sure no interrupt snuck in
                         * which we should be doing. */
-                       if (interrupt_pending(cpu, &more) < LGUEST_IRQS
-                           || cpu->break_out)
+                       if (interrupt_pending(cpu, &more) < LGUEST_IRQS)
                                set_current_state(TASK_RUNNING);
                        else
                                schedule();
index 32fefdc..d4e8979 100644 (file)
@@ -71,9 +71,7 @@ struct lg_cpu {
        /* Virtual clock device */
        struct hrtimer hrt;
 
-       /* Do we need to stop what we're doing and return to userspace? */
-       int break_out;
-       wait_queue_head_t break_wq;
+       /* Did the Guest tell us to halt? */
        int halted;
 
        /* Pending virtual interrupts */
index f6bf255..32e2971 100644 (file)
 #include <linux/file.h>
 #include "lg.h"
 
-/*L:055 When something happens, the Waker process needs a way to stop the
- * kernel running the Guest and return to the Launcher.  So the Waker writes
- * LHREQ_BREAK and the value "1" to /dev/lguest to do this.  Once the Launcher
- * has done whatever needs attention, it writes LHREQ_BREAK and "0" to release
- * the Waker. */
-static int break_guest_out(struct lg_cpu *cpu, const unsigned long __user*input)
-{
-       unsigned long on;
-
-       /* Fetch whether they're turning break on or off. */
-       if (get_user(on, input) != 0)
-               return -EFAULT;
-
-       if (on) {
-               cpu->break_out = 1;
-               if (!wake_up_process(cpu->tsk))
-                       kick_process(cpu->tsk);
-               /* Wait for them to reset it */
-               return wait_event_interruptible(cpu->break_wq, !cpu->break_out);
-       } else {
-               cpu->break_out = 0;
-               wake_up(&cpu->break_wq);
-               return 0;
-       }
-}
-
 bool send_notify_to_eventfd(struct lg_cpu *cpu)
 {
        unsigned int i;
@@ -202,9 +176,6 @@ static int lg_cpu_start(struct lg_cpu *cpu, unsigned id, unsigned long start_ip)
         * address. */
        lguest_arch_setup_regs(cpu, start_ip);
 
-       /* Initialize the queue for the Waker to wait on */
-       init_waitqueue_head(&cpu->break_wq);
-
        /* We keep a pointer to the Launcher task (ie. current task) for when
         * other Guests want to wake this one (eg. console input). */
        cpu->tsk = current;
@@ -344,8 +315,6 @@ static ssize_t write(struct file *file, const char __user *in,
                return initialize(file, input);
        case LHREQ_IRQ:
                return user_send_irq(cpu, input);
-       case LHREQ_BREAK:
-               return break_guest_out(cpu, input);
        case LHREQ_EVENTFD:
                return attach_eventfd(lg, input);
        default:
index 9de964b..bfefbdf 100644 (file)
@@ -57,7 +57,7 @@ enum lguest_req
        LHREQ_INITIALIZE, /* + base, pfnlimit, start */
        LHREQ_GETDMA, /* No longer used */
        LHREQ_IRQ, /* + irq */
-       LHREQ_BREAK, /* + on/off flag (on blocks until someone does off) */
+       LHREQ_BREAK, /* No longer used */
        LHREQ_EVENTFD, /* + address, fd. */
 };