Gregory Haskins wrote: > Signed-off-by: Gregory Haskins <[EMAIL PROTECTED]> >
Please include patch descriptions. > --- > > drivers/kvm/kvm.h | 2 + > drivers/kvm/kvm_main.c | 82 > ++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 84 insertions(+), 0 deletions(-) > > diff --git a/drivers/kvm/kvm.h b/drivers/kvm/kvm.h > index 7b5d5e6..1c46830 100644 > --- a/drivers/kvm/kvm.h > +++ b/drivers/kvm/kvm.h > @@ -333,6 +333,8 @@ struct kvm_vcpu_irq { > int deferred; > struct task_struct *task; > int guest_mode; > + wait_queue_head_t wq; > + int usignal; > }; > > struct kvm_vcpu { > diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c > index 3304cce..9a6d2c5 100644 > --- a/drivers/kvm/kvm_main.c > +++ b/drivers/kvm/kvm_main.c > @@ -40,6 +40,7 @@ > #include <linux/file.h> > #include <linux/fs.h> > #include <linux/mount.h> > +#include <linux/poll.h> > > #include "x86_emulate.h" > #include "segment_descriptor.h" > @@ -326,6 +327,7 @@ static struct kvm *kvm_create_vm(void) > memset(&vcpu->irq, 0, sizeof(vcpu->irq)); > spin_lock_init(&vcpu->irq.lock); > vcpu->irq.deferred = -1; > + init_waitqueue_head(&vcpu->irq.wq); > > vcpu->cpu = -1; > vcpu->kvm = kvm; > @@ -2288,11 +2290,78 @@ static int kvm_vcpu_release(struct inode *inode, > struct file *filp) > return 0; > } > > +static unsigned int kvm_vcpu_poll(struct file *filp, poll_table *wait) > +{ > + struct kvm_vcpu *vcpu = filp->private_data; > + unsigned int events = 0; > + unsigned long flags; > + > + poll_wait(filp, &vcpu->irq.wq, wait); > + > + spin_lock_irqsave(&vcpu->irq.lock, flags); > + if (vcpu->irq.usignal) > + events |= POLLIN; > + spin_unlock_irqrestore(&vcpu->irq.lock, flags); > + > + return events; > +} > + > +static ssize_t kvm_vcpu_read(struct file *filp, char __user *buf, size_t > count, > + loff_t *ppos) > +{ > Is having a read() (or a write()) actually necessary? > + > + if (indirect_sig && waitqueue_active(&vcpu->irq.wq)) > + wake_up(&vcpu->irq.wq); > } > > Did you check that we can actually deliver signals with this? I think a fasync_struct or something like that is necessary, but not sure. Another implementation option (which I've only thought of now, sorry) is to have an ioctl which returns a real eventfd, reducing some code duplication. -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel