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
[email protected]
https://lists.sourceforge.net/lists/listinfo/kvm-devel