public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: "Gregory Haskins" <ghaskins-Et1tbQHTxzrQT0dZR+AlfA@public.gmane.org>
To: "Avi Kivity" <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Subject: Re: [PATCH 05/10] KVM: Adds ability to signal	userspace using a	file-descriptor
Date: Mon, 14 May 2007 08:15:03 -0400	[thread overview]
Message-ID: <46481A61.BA47.005A.0@novell.com> (raw)
In-Reply-To: <46470BF7.5080108-atKUWr5tajBWk0Htik3J/w@public.gmane.org>

>>> On Sun, May 13, 2007 at  9:00 AM, in message <46470BF7.5080108-atKUWr5tajBWk0Htik3J/w@public.gmane.org>,
Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org> wrote: 
> Gregory Haskins wrote:
>> Signed- off- by: Gregory Haskins <ghaskins-Et1tbQHTxzrQT0dZR+AlfA@public.gmane.org>
>>   
> 
> Please include patch descriptions.

Ack.

On that topic: Does anyone know how to retroactively change the patch comment in StGIT?

> 
>> ---
>>
>>  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?

Based on what I know: yes.  It could be a case of ignorance, however ;)

Heres why I think its necessary:  You need poll to simply tell you when something is pending.  You can't clear the pending status in poll because you cannot predict the internal access pattern (e.g. I assume it could be polled multiple times by the kernel without returning immediately to userspace).  Therefore, you need a second method to actually clear the pending "signal", which I use the read() method for.  I can be convinced otherwise, but that was my original thinking.

> 
>> +
>> +	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.

Actually, my signals *didn't* seem to be working, but they werent working with "send_sig()" either so I just assumed I had a userspace coding problem.  Based on what I read, it seemed like what I did should work if you do a fcntl(F_SETSIG), etc.  But again, it could be ignorance.  I am not familiar with fasync_struct.  If you have any pointers, please forward.

> 
> 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.

So based on this, I assume eventfd must be in the kernel already?  Cool.  Even if its not, I like this idea much better than what I did.  There was still an unresolved problem regarding how I was going to expose the signaling mechanism to QEMU without giving away the vcpu_fd from the kvmctl library that this solves nicely.

With this methodology, I can simply provide a function like "kvm_vcpu_get_eventfd()" in the library, and return the eventfd directly to the QEMU process.  Then we dont have to worry about layering violations.  Nice!


-------------------------------------------------------------------------
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/

  parent reply	other threads:[~2007-05-14 12:15 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-05-10 12:46 [PATCH 00/10] in-kernel APIC v3 (kernel side) Gregory Haskins
     [not found] ` <20070510123831.10200.4769.stgit-sLgBBP33vUGnsjUZhwzVf9HuzzzSOjJt@public.gmane.org>
2007-05-10 12:46   ` [PATCH 01/10] KVM: Adds support for in-kernel mmio handlers Gregory Haskins
2007-05-10 12:46   ` [PATCH 02/10] KVM: VMX - fix interrupt checking on light-exit Gregory Haskins
2007-05-10 12:46   ` [PATCH 03/10] KVM: Add irqdevice object Gregory Haskins
2007-05-10 12:47   ` [PATCH 04/10] KVM: Adds ability to preempt an executing VCPU Gregory Haskins
2007-05-10 12:47   ` [PATCH 05/10] KVM: Adds ability to signal userspace using a file-descriptor Gregory Haskins
     [not found]     ` <20070510124706.10200.68571.stgit-sLgBBP33vUGnsjUZhwzVf9HuzzzSOjJt@public.gmane.org>
2007-05-13 13:00       ` Avi Kivity
     [not found]         ` <46470BF7.5080108-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-05-14 12:15           ` Gregory Haskins [this message]
     [not found]             ` <46481A61.BA47.005A.0-Et1tbQHTxzrQT0dZR+AlfA@public.gmane.org>
2007-05-14 12:22               ` Avi Kivity
     [not found]                 ` <46485488.2010608-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-05-14 14:00                   ` Gregory Haskins
     [not found]                     ` <46483320.BA47.005A.0-Et1tbQHTxzrQT0dZR+AlfA@public.gmane.org>
2007-05-14 14:42                       ` Avi Kivity
     [not found]                         ` <4648756D.5040001-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-05-14 17:18                           ` Gregory Haskins
2007-05-14 16:52                   ` Davide Libenzi
     [not found]                     ` <Pine.LNX.4.64.0705140948150.19682-GPJ85BhbkB8RepQJljzAVbITYcZ0+W3JAL8bYrjMMd8@public.gmane.org>
2007-05-14 17:12                       ` Avi Kivity
     [not found]                         ` <4648986B.9090403-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-05-14 17:15                           ` Davide Libenzi
     [not found]                             ` <Pine.LNX.4.64.0705141013310.19682-GPJ85BhbkB8RepQJljzAVbITYcZ0+W3JAL8bYrjMMd8@public.gmane.org>
2007-05-14 17:23                               ` Avi Kivity
     [not found]                                 ` <46489B12.8030807-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-05-14 19:01                                   ` Gregory Haskins
     [not found]                                     ` <464879A3.BA47.005A.0-Et1tbQHTxzrQT0dZR+AlfA@public.gmane.org>
2007-05-14 19:12                                       ` Davide Libenzi
     [not found]                                         ` <Pine.LNX.4.64.0705141207070.19682-GPJ85BhbkB8RepQJljzAVbITYcZ0+W3JAL8bYrjMMd8@public.gmane.org>
2007-05-14 20:18                                           ` Gregory Haskins
     [not found]                                             ` <46488BCD.BA47.005A.0-Et1tbQHTxzrQT0dZR+AlfA@public.gmane.org>
2007-05-14 21:32                                               ` Davide Libenzi
2007-05-10 12:47   ` [PATCH 06/10] KVM: Add support for in-kernel LAPIC model Gregory Haskins
2007-05-10 12:47   ` [PATCH 07/10] KVM: Adds support for real NMI injection on VMX processors Gregory Haskins
2007-05-10 12:47   ` [PATCH 08/10] KVM: Adds basic plumbing to support TPR shadow features Gregory Haskins
2007-05-10 12:47   ` [PATCH 09/10] KVM: Add statistics from interrupt subsystem Gregory Haskins
     [not found]     ` <20070510124726.10200.53053.stgit-sLgBBP33vUGnsjUZhwzVf9HuzzzSOjJt@public.gmane.org>
2007-05-14 11:17       ` Avi Kivity
2007-05-10 12:47   ` [PATCH 10/10] KVM: Adds support for TPR shadowing under VMX processors Gregory Haskins
2007-05-10 13:07   ` [PATCH 00/10] in-kernel APIC v3 (kernel side) Dor Laor
     [not found]     ` <64F9B87B6B770947A9F8391472E032160BBA66AF-yEcIvxbTEBqsx+V+t5oei8rau4O3wl8o3fe8/T/H7NteoWH0uzbU5w@public.gmane.org>
2007-05-10 13:20       ` Gregory Haskins
     [not found]         ` <4642E39D.BA47.005A.0-Et1tbQHTxzrQT0dZR+AlfA@public.gmane.org>
2007-05-13  8:00           ` Dor Laor
     [not found]             ` <64F9B87B6B770947A9F8391472E032160BC745D3-yEcIvxbTEBqsx+V+t5oei8rau4O3wl8o3fe8/T/H7NteoWH0uzbU5w@public.gmane.org>
2007-05-13 13:59               ` Gregory Haskins
     [not found]                 ` <4646E16D.BA47.005A.0-Et1tbQHTxzrQT0dZR+AlfA@public.gmane.org>
2007-05-13 14:06                   ` Dor Laor
     [not found]                     ` <64F9B87B6B770947A9F8391472E032160BC74642-yEcIvxbTEBqsx+V+t5oei8rau4O3wl8o3fe8/T/H7NteoWH0uzbU5w@public.gmane.org>
2007-05-14 12:37                       ` Gregory Haskins
     [not found]                         ` <46481FC0.BA47.005A.0-Et1tbQHTxzrQT0dZR+AlfA@public.gmane.org>
2007-05-14 13:04                           ` Dor Laor
2007-05-13 12:38           ` Avi Kivity
     [not found]             ` <464706BF.6000808-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-05-14 11:59               ` Gregory Haskins
     [not found]                 ` <464816AB.BA47.005A.0-Et1tbQHTxzrQT0dZR+AlfA@public.gmane.org>
2007-05-14 12:05                   ` Dor Laor
2007-05-14 12:14                   ` Avi Kivity
2007-05-10 13:32       ` Gregory Haskins
2007-05-13 13:10   ` Avi Kivity
     [not found]     ` <46470E58.2040208-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-05-14 12:23       ` Gregory Haskins
     [not found]         ` <46481C4B.BA47.005A.0-Et1tbQHTxzrQT0dZR+AlfA@public.gmane.org>
2007-05-14 12:24           ` Avi Kivity

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=46481A61.BA47.005A.0@novell.com \
    --to=ghaskins-et1tbqhtxzrqt0dzr+alfa@public.gmane.org \
    --cc=avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org \
    --cc=kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox