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

Reply via email to