Re: [PATCHv3 RFC 0/2] kvm: direct msix injection

2012-07-09 Thread Jan Kiszka
On 2012-07-09 00:55, Michael S. Tsirkin wrote:
 On Mon, Jul 02, 2012 at 11:08:20AM -0600, Alex Williamson wrote:
 On Mon, 2012-06-25 at 11:32 +0200, Jan Kiszka wrote:
 On 2012-06-11 13:19, Michael S. Tsirkin wrote:
 We can deliver certain interrupts, notably MSIX,
 from atomic context.
 Here's an untested patch to do this (compiled only).

 Changes from v2:
 Don't inject broadcast interrupts directly
 Changes from v1:
 Tried to address comments from v1, except unifying
 with kvm_set_irq: passing flags to it looks too ugly.
 Added a comment.

 Jan, you said you can test this?


 Michael S. Tsirkin (2):
   kvm: implement kvm_set_msi_inatomic
   kvm: deliver msix interrupts from irq handler

  include/linux/kvm_host.h |  3 ++
  virt/kvm/assigned-dev.c  | 31 ++--
  virt/kvm/irq_comm.c  | 75 
 
  3 files changed, 102 insertions(+), 7 deletions(-)


 Finally-tested-by: Jan Kiszka jan.kis...@siemens.com

 Michael, we need either this or the simple oneshot patch to get device
 assignment working again for 3.5.  Are you planning to push this for
 3.5?  Thanks,

 Alex

 
 Avi wants this reworked using an injection cache. I agree with Jan
 though: oneshot looks too ugly. Just so you can make progress, can't we
 add a stub handler returning IRQ_WAKE_THREAD unconditionally for now?
 I.e. like the below (warning: completely untested).
 
 Signed-off-by: Michael S. Tsirkin m...@redhat.com
 
 --
 
 diff --git a/virt/kvm/assigned-dev.c b/virt/kvm/assigned-dev.c
 index b1e091a..18cc36e 100644
 --- a/virt/kvm/assigned-dev.c
 +++ b/virt/kvm/assigned-dev.c
 @@ -334,6 +334,11 @@ static int assigned_device_enable_host_intx(struct kvm 
 *kvm,
  }
  
  #ifdef __KVM_HAVE_MSI
 +static irqreturn_t kvm_assigned_dev_msi(int irq, void *dev_id)
 +{
 +   return IRQ_WAKE_THREAD;
 +}
 +
  static int assigned_device_enable_host_msi(struct kvm *kvm,
  struct kvm_assigned_dev_kernel *dev)
  {
 @@ -346,7 +351,7 @@ static int assigned_device_enable_host_msi(struct kvm 
 *kvm,
   }
  
   dev-host_irq = dev-dev-irq;
 - if (request_threaded_irq(dev-host_irq, NULL,
 + if (request_threaded_irq(dev-host_irq, kvm_assigned_dev_msi,
kvm_assigned_dev_thread_msi, 0,
dev-irq_name, dev)) {
   pci_disable_msi(dev-dev);
 @@ -358,6 +363,11 @@ static int assigned_device_enable_host_msi(struct kvm 
 *kvm,
  #endif
  
  #ifdef __KVM_HAVE_MSIX
 +static irqreturn_t kvm_assigned_dev_msix(int irq, void *dev_id)
 +{
 +   return IRQ_WAKE_THREAD;
 +}
 +
  static int assigned_device_enable_host_msix(struct kvm *kvm,
   struct kvm_assigned_dev_kernel *dev)
  {
 @@ -374,7 +384,8 @@ static int assigned_device_enable_host_msix(struct kvm 
 *kvm,
  
   for (i = 0; i  dev-entries_nr; i++) {
   r = request_threaded_irq(dev-host_msix_entries[i].vector,
 -  NULL, kvm_assigned_dev_thread_msix,
 +  kvm_assigned_dev_msix,
 +  kvm_assigned_dev_thread_msix,
0, dev-irq_name, dev);
   if (r)
   goto err;
 

Should restore the status quo before 3.5's IRQ layer changes. Looks ok
to me.

Jan

-- 
Siemens AG, Corporate Technology, CT RTC ITP SDP-DE
Corporate Competence Center Embedded Linux
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv3 RFC 0/2] kvm: direct msix injection

2012-07-09 Thread Alex Williamson
On Mon, 2012-07-09 at 17:32 +0200, Jan Kiszka wrote:
 On 2012-07-09 00:55, Michael S. Tsirkin wrote:
  On Mon, Jul 02, 2012 at 11:08:20AM -0600, Alex Williamson wrote:
  On Mon, 2012-06-25 at 11:32 +0200, Jan Kiszka wrote:
  On 2012-06-11 13:19, Michael S. Tsirkin wrote:
  We can deliver certain interrupts, notably MSIX,
  from atomic context.
  Here's an untested patch to do this (compiled only).
 
  Changes from v2:
  Don't inject broadcast interrupts directly
  Changes from v1:
  Tried to address comments from v1, except unifying
  with kvm_set_irq: passing flags to it looks too ugly.
  Added a comment.
 
  Jan, you said you can test this?
 
 
  Michael S. Tsirkin (2):
kvm: implement kvm_set_msi_inatomic
kvm: deliver msix interrupts from irq handler
 
   include/linux/kvm_host.h |  3 ++
   virt/kvm/assigned-dev.c  | 31 ++--
   virt/kvm/irq_comm.c  | 75 
  
   3 files changed, 102 insertions(+), 7 deletions(-)
 
 
  Finally-tested-by: Jan Kiszka jan.kis...@siemens.com
 
  Michael, we need either this or the simple oneshot patch to get device
  assignment working again for 3.5.  Are you planning to push this for
  3.5?  Thanks,
 
  Alex
 
  
  Avi wants this reworked using an injection cache. I agree with Jan
  though: oneshot looks too ugly. Just so you can make progress, can't we
  add a stub handler returning IRQ_WAKE_THREAD unconditionally for now?
  I.e. like the below (warning: completely untested).
  
  Signed-off-by: Michael S. Tsirkin m...@redhat.com
  
  --
  
  diff --git a/virt/kvm/assigned-dev.c b/virt/kvm/assigned-dev.c
  index b1e091a..18cc36e 100644
  --- a/virt/kvm/assigned-dev.c
  +++ b/virt/kvm/assigned-dev.c
  @@ -334,6 +334,11 @@ static int assigned_device_enable_host_intx(struct kvm 
  *kvm,
   }
   
   #ifdef __KVM_HAVE_MSI
  +static irqreturn_t kvm_assigned_dev_msi(int irq, void *dev_id)
  +{
  +   return IRQ_WAKE_THREAD;
  +}
  +
   static int assigned_device_enable_host_msi(struct kvm *kvm,
 struct kvm_assigned_dev_kernel *dev)
   {
  @@ -346,7 +351,7 @@ static int assigned_device_enable_host_msi(struct kvm 
  *kvm,
  }
   
  dev-host_irq = dev-dev-irq;
  -   if (request_threaded_irq(dev-host_irq, NULL,
  +   if (request_threaded_irq(dev-host_irq, kvm_assigned_dev_msi,
   kvm_assigned_dev_thread_msi, 0,
   dev-irq_name, dev)) {
  pci_disable_msi(dev-dev);
  @@ -358,6 +363,11 @@ static int assigned_device_enable_host_msi(struct kvm 
  *kvm,
   #endif
   
   #ifdef __KVM_HAVE_MSIX
  +static irqreturn_t kvm_assigned_dev_msix(int irq, void *dev_id)
  +{
  +   return IRQ_WAKE_THREAD;
  +}
  +
   static int assigned_device_enable_host_msix(struct kvm *kvm,
  struct kvm_assigned_dev_kernel *dev)
   {
  @@ -374,7 +384,8 @@ static int assigned_device_enable_host_msix(struct kvm 
  *kvm,
   
  for (i = 0; i  dev-entries_nr; i++) {
  r = request_threaded_irq(dev-host_msix_entries[i].vector,
  -NULL, kvm_assigned_dev_thread_msix,
  +kvm_assigned_dev_msix,
  +kvm_assigned_dev_thread_msix,
   0, dev-irq_name, dev);
  if (r)
  goto err;
  
 
 Should restore the status quo before 3.5's IRQ layer changes. Looks ok
 to me.

I'll test and post this, Michael is out this week.  Thanks,

Alex


--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv3 RFC 0/2] kvm: direct msix injection

2012-07-08 Thread Michael S. Tsirkin
On Mon, Jul 02, 2012 at 11:08:20AM -0600, Alex Williamson wrote:
 On Mon, 2012-06-25 at 11:32 +0200, Jan Kiszka wrote:
  On 2012-06-11 13:19, Michael S. Tsirkin wrote:
   We can deliver certain interrupts, notably MSIX,
   from atomic context.
   Here's an untested patch to do this (compiled only).
   
   Changes from v2:
   Don't inject broadcast interrupts directly
   Changes from v1:
   Tried to address comments from v1, except unifying
   with kvm_set_irq: passing flags to it looks too ugly.
   Added a comment.
   
   Jan, you said you can test this?
   
   
   Michael S. Tsirkin (2):
 kvm: implement kvm_set_msi_inatomic
 kvm: deliver msix interrupts from irq handler
   
include/linux/kvm_host.h |  3 ++
virt/kvm/assigned-dev.c  | 31 ++--
virt/kvm/irq_comm.c  | 75 
   
3 files changed, 102 insertions(+), 7 deletions(-)
   
  
  Finally-tested-by: Jan Kiszka jan.kis...@siemens.com
 
 Michael, we need either this or the simple oneshot patch to get device
 assignment working again for 3.5.  Are you planning to push this for
 3.5?  Thanks,
 
 Alex
 

Avi wants this reworked using an injection cache. I agree with Jan
though: oneshot looks too ugly. Just so you can make progress, can't we
add a stub handler returning IRQ_WAKE_THREAD unconditionally for now?
I.e. like the below (warning: completely untested).

Signed-off-by: Michael S. Tsirkin m...@redhat.com

--

diff --git a/virt/kvm/assigned-dev.c b/virt/kvm/assigned-dev.c
index b1e091a..18cc36e 100644
--- a/virt/kvm/assigned-dev.c
+++ b/virt/kvm/assigned-dev.c
@@ -334,6 +334,11 @@ static int assigned_device_enable_host_intx(struct kvm 
*kvm,
 }
 
 #ifdef __KVM_HAVE_MSI
+static irqreturn_t kvm_assigned_dev_msi(int irq, void *dev_id)
+{
+   return IRQ_WAKE_THREAD;
+}
+
 static int assigned_device_enable_host_msi(struct kvm *kvm,
   struct kvm_assigned_dev_kernel *dev)
 {
@@ -346,7 +351,7 @@ static int assigned_device_enable_host_msi(struct kvm *kvm,
}
 
dev-host_irq = dev-dev-irq;
-   if (request_threaded_irq(dev-host_irq, NULL,
+   if (request_threaded_irq(dev-host_irq, kvm_assigned_dev_msi,
 kvm_assigned_dev_thread_msi, 0,
 dev-irq_name, dev)) {
pci_disable_msi(dev-dev);
@@ -358,6 +363,11 @@ static int assigned_device_enable_host_msi(struct kvm *kvm,
 #endif
 
 #ifdef __KVM_HAVE_MSIX
+static irqreturn_t kvm_assigned_dev_msix(int irq, void *dev_id)
+{
+   return IRQ_WAKE_THREAD;
+}
+
 static int assigned_device_enable_host_msix(struct kvm *kvm,
struct kvm_assigned_dev_kernel *dev)
 {
@@ -374,7 +384,8 @@ static int assigned_device_enable_host_msix(struct kvm *kvm,
 
for (i = 0; i  dev-entries_nr; i++) {
r = request_threaded_irq(dev-host_msix_entries[i].vector,
-NULL, kvm_assigned_dev_thread_msix,
+kvm_assigned_dev_msix,
+kvm_assigned_dev_thread_msix,
 0, dev-irq_name, dev);
if (r)
goto err;
-- 
MST
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCHv3 RFC 0/2] kvm: direct msix injection

2012-07-05 Thread Hao, Xudong
Hi, Michael/Alex, do you have progress for device assignment issue fixing? 
https://bugzilla.kernel.org/show_bug.cgi?id=43328

Thanks,
-Xudong

 -Original Message-
 From: kvm-ow...@vger.kernel.org [mailto:kvm-ow...@vger.kernel.org] On
 Behalf Of Alex Williamson
 Sent: Tuesday, July 03, 2012 1:08 AM
 To: Jan Kiszka
 Cc: Michael S. Tsirkin; kvm@vger.kernel.org
 Subject: Re: [PATCHv3 RFC 0/2] kvm: direct msix injection
 
 On Mon, 2012-06-25 at 11:32 +0200, Jan Kiszka wrote:
  On 2012-06-11 13:19, Michael S. Tsirkin wrote:
   We can deliver certain interrupts, notably MSIX,
   from atomic context.
   Here's an untested patch to do this (compiled only).
  
   Changes from v2:
   Don't inject broadcast interrupts directly
   Changes from v1:
   Tried to address comments from v1, except unifying
   with kvm_set_irq: passing flags to it looks too ugly.
   Added a comment.
  
   Jan, you said you can test this?
  
  
   Michael S. Tsirkin (2):
 kvm: implement kvm_set_msi_inatomic
 kvm: deliver msix interrupts from irq handler
  
include/linux/kvm_host.h |  3 ++
virt/kvm/assigned-dev.c  | 31 ++--
virt/kvm/irq_comm.c  | 75
 
3 files changed, 102 insertions(+), 7 deletions(-)
  
 
  Finally-tested-by: Jan Kiszka jan.kis...@siemens.com
 
 Michael, we need either this or the simple oneshot patch to get device
 assignment working again for 3.5.  Are you planning to push this for
 3.5?  Thanks,
 
 Alex
 
 
 
 --
 To unsubscribe from this list: send the line unsubscribe kvm in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv3 RFC 0/2] kvm: direct msix injection

2012-07-02 Thread Alex Williamson
On Mon, 2012-06-25 at 11:32 +0200, Jan Kiszka wrote:
 On 2012-06-11 13:19, Michael S. Tsirkin wrote:
  We can deliver certain interrupts, notably MSIX,
  from atomic context.
  Here's an untested patch to do this (compiled only).
  
  Changes from v2:
  Don't inject broadcast interrupts directly
  Changes from v1:
  Tried to address comments from v1, except unifying
  with kvm_set_irq: passing flags to it looks too ugly.
  Added a comment.
  
  Jan, you said you can test this?
  
  
  Michael S. Tsirkin (2):
kvm: implement kvm_set_msi_inatomic
kvm: deliver msix interrupts from irq handler
  
   include/linux/kvm_host.h |  3 ++
   virt/kvm/assigned-dev.c  | 31 ++--
   virt/kvm/irq_comm.c  | 75 
  
   3 files changed, 102 insertions(+), 7 deletions(-)
  
 
 Finally-tested-by: Jan Kiszka jan.kis...@siemens.com

Michael, we need either this or the simple oneshot patch to get device
assignment working again for 3.5.  Are you planning to push this for
3.5?  Thanks,

Alex



--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv3 RFC 0/2] kvm: direct msix injection

2012-06-25 Thread Jan Kiszka
On 2012-06-11 13:19, Michael S. Tsirkin wrote:
 We can deliver certain interrupts, notably MSIX,
 from atomic context.
 Here's an untested patch to do this (compiled only).
 
 Changes from v2:
 Don't inject broadcast interrupts directly
 Changes from v1:
 Tried to address comments from v1, except unifying
 with kvm_set_irq: passing flags to it looks too ugly.
 Added a comment.
 
 Jan, you said you can test this?
 
 
 Michael S. Tsirkin (2):
   kvm: implement kvm_set_msi_inatomic
   kvm: deliver msix interrupts from irq handler
 
  include/linux/kvm_host.h |  3 ++
  virt/kvm/assigned-dev.c  | 31 ++--
  virt/kvm/irq_comm.c  | 75 
 
  3 files changed, 102 insertions(+), 7 deletions(-)
 

Finally-tested-by: Jan Kiszka jan.kis...@siemens.com

Thanks,
Jan

-- 
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux


--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv3 RFC 0/2] kvm: direct msix injection

2012-06-13 Thread Michael S. Tsirkin
On Tue, Jun 12, 2012 at 08:07:03PM -0300, Marcelo Tosatti wrote:
 On Mon, Jun 11, 2012 at 02:19:17PM +0300, Michael S. Tsirkin wrote:
  We can deliver certain interrupts, notably MSIX,
  from atomic context.
  Here's an untested patch to do this (compiled only).
  
  Changes from v2:
  Don't inject broadcast interrupts directly
  Changes from v1:
  Tried to address comments from v1, except unifying
  with kvm_set_irq: passing flags to it looks too ugly.
  Added a comment.
  
  Jan, you said you can test this?
 
 Looks fine to me (except the unlikely). Avi/Gleb?

Which of the unlikely do you mean?
Most of them cover the case where msix is a broadcast
or where level is 0 for msi. This never triggered
in my testing. So the unlikely seems justified.



-- 
MST
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv3 RFC 0/2] kvm: direct msix injection

2012-06-13 Thread Avi Kivity
On 06/13/2012 02:07 AM, Marcelo Tosatti wrote:
 On Mon, Jun 11, 2012 at 02:19:17PM +0300, Michael S. Tsirkin wrote:
 We can deliver certain interrupts, notably MSIX,
 from atomic context.
 Here's an untested patch to do this (compiled only).
 
 Changes from v2:
 Don't inject broadcast interrupts directly
 Changes from v1:
 Tried to address comments from v1, except unifying
 with kvm_set_irq: passing flags to it looks too ugly.
 Added a comment.
 
 Jan, you said you can test this?
 
 Looks fine to me (except the unlikely). Avi/Gleb?

I dislike the vcpu loop in atomic context.  Some crazies keep increasing
the maximum vcpu count.

-- 
error compiling committee.c: too many arguments to function


--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCHv3 RFC 0/2] kvm: direct msix injection

2012-06-12 Thread Marcelo Tosatti
On Mon, Jun 11, 2012 at 02:19:17PM +0300, Michael S. Tsirkin wrote:
 We can deliver certain interrupts, notably MSIX,
 from atomic context.
 Here's an untested patch to do this (compiled only).
 
 Changes from v2:
 Don't inject broadcast interrupts directly
 Changes from v1:
 Tried to address comments from v1, except unifying
 with kvm_set_irq: passing flags to it looks too ugly.
 Added a comment.
 
 Jan, you said you can test this?

Looks fine to me (except the unlikely). Avi/Gleb?

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCHv3 RFC 0/2] kvm: direct msix injection

2012-06-11 Thread Michael S. Tsirkin
We can deliver certain interrupts, notably MSIX,
from atomic context.
Here's an untested patch to do this (compiled only).

Changes from v2:
Don't inject broadcast interrupts directly
Changes from v1:
Tried to address comments from v1, except unifying
with kvm_set_irq: passing flags to it looks too ugly.
Added a comment.

Jan, you said you can test this?


Michael S. Tsirkin (2):
  kvm: implement kvm_set_msi_inatomic
  kvm: deliver msix interrupts from irq handler

 include/linux/kvm_host.h |  3 ++
 virt/kvm/assigned-dev.c  | 31 ++--
 virt/kvm/irq_comm.c  | 75 
 3 files changed, 102 insertions(+), 7 deletions(-)

-- 
MST
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html