summary refs log tree commit diff
path: root/drivers/lguest/core.c
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2009-06-12 22:27:09 -0600
committerRusty Russell <rusty@rustcorp.com.au>2009-06-12 22:27:10 +0930
commitdf60aeef4f4fe0645d9a195a7689005520422de5 (patch)
tree3cfa3c4a986436c8accd5f0a57d5a6f70f1b7965 /drivers/lguest/core.c
parent5718607bb670c721f45f0dbb1cc7d6c64969aab1 (diff)
downloadlinux-df60aeef4f4fe0645d9a195a7689005520422de5.tar.gz
lguest: use eventfds for device notification
Currently, when a Guest wants to perform I/O it calls LHCALL_NOTIFY with
an address: the main Launcher process returns with this address, and figures
out what device to run.

A far nicer model is to let processes bind an eventfd to an address: if we
find one, we simply signal the eventfd.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Cc: Davide Libenzi <davidel@xmailserver.org>
Diffstat (limited to 'drivers/lguest/core.c')
-rw-r--r--drivers/lguest/core.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/lguest/core.c b/drivers/lguest/core.c
index d0298dc45d97..508569c9571a 100644
--- a/drivers/lguest/core.c
+++ b/drivers/lguest/core.c
@@ -198,9 +198,11 @@ int run_guest(struct lg_cpu *cpu, unsigned long __user *user)
 		/* It's possible the Guest did a NOTIFY hypercall to the
 		 * Launcher, in which case we return from the read() now. */
 		if (cpu->pending_notify) {
-			if (put_user(cpu->pending_notify, user))
-				return -EFAULT;
-			return sizeof(cpu->pending_notify);
+			if (!send_notify_to_eventfd(cpu)) {
+				if (put_user(cpu->pending_notify, user))
+					return -EFAULT;
+				return sizeof(cpu->pending_notify);
+			}
 		}
 
 		/* Check for signals */