aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/lguest/lg.h
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/lg.h
parent5718607bb670c721f45f0dbb1cc7d6c64969aab1 (diff)
downloadkernel_samsung_espresso10-df60aeef4f4fe0645d9a195a7689005520422de5.zip
kernel_samsung_espresso10-df60aeef4f4fe0645d9a195a7689005520422de5.tar.gz
kernel_samsung_espresso10-df60aeef4f4fe0645d9a195a7689005520422de5.tar.bz2
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/lg.h')
-rw-r--r--drivers/lguest/lg.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/lguest/lg.h b/drivers/lguest/lg.h
index 040cb70..32fefdc 100644
--- a/drivers/lguest/lg.h
+++ b/drivers/lguest/lg.h
@@ -82,6 +82,16 @@ struct lg_cpu {
struct lg_cpu_arch arch;
};
+struct lg_eventfd {
+ unsigned long addr;
+ struct file *event;
+};
+
+struct lg_eventfd_map {
+ unsigned int num;
+ struct lg_eventfd map[];
+};
+
/* The private info the thread maintains about the guest. */
struct lguest
{
@@ -102,6 +112,8 @@ struct lguest
unsigned int stack_pages;
u32 tsc_khz;
+ struct lg_eventfd_map *eventfds;
+
/* Dead? */
const char *dead;
};
@@ -154,6 +166,7 @@ void setup_default_idt_entries(struct lguest_ro_state *state,
void copy_traps(const struct lg_cpu *cpu, struct desc_struct *idt,
const unsigned long *def);
void guest_set_clockevent(struct lg_cpu *cpu, unsigned long delta);
+bool send_notify_to_eventfd(struct lg_cpu *cpu);
void init_clockdev(struct lg_cpu *cpu);
bool check_syscall_vector(struct lguest *lg);
int init_interrupts(void);