public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH qemu-kvm] device assignment: default requires IOMMU
@ 2009-12-23 22:40 Chris Wright
  2009-12-24  0:45 ` Alexander Graf
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Chris Wright @ 2009-12-23 22:40 UTC (permalink / raw)
  To: Avi Kivity, Marcelo Tosatti
  Cc: kvm, Alexander Graf, Dmitri Seletski, Sheng Yang

[ resend, fixing email header, sorry for duplicate ]

The default mode for device assignment is to rely on an IOMMU for
proper translations and a functioning device in the guest.  The current
logic makes this requirement advisory, and simply disables the request
for IOMMU if one is not found on the host.  This makes for a confused
user when the device assignment appears to work, but the device in the
guest is not functioning  (I've seen about a half-dozen reports with
this failure mode).

Change the logic such that the default requires the IOMMU.  Period.
If the host does not have an IOMMU, device assignment will fail.

This is a user visible change, however I think the current situation is
simply broken.

And, of course, disabling the IOMMU requirement using the old:

   -pcidevice host=[addr],dma=none

or the newer:

   -device pci-assign,host=[addr],iommu=0

will do what it always did (not require an IOMMU, and fail to work
properly).

Cc: Alexander Graf <agraf@suse.de>
Cc: Dmitri Seletski <drjoms@gmail.com>
Cc: Sheng Yang <sheng@linux.intel.com>
Signed-off-by: Chris Wright <chrisw@redhat.com>
---
 hw/device-assignment.c |   17 +++++++++--------
 1 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/hw/device-assignment.c b/hw/device-assignment.c
index 02d23d8..a314360 100644
--- a/hw/device-assignment.c
+++ b/hw/device-assignment.c
@@ -816,14 +816,15 @@ static int assign_device(AssignedDevice *dev)
     assigned_dev_data.devfn = dev->h_devfn;
 
 #ifdef KVM_CAP_IOMMU
-    /* We always enable the IOMMU if present
-     * (or when not disabled on the command line)
-     */
-    r = kvm_check_extension(kvm_state, KVM_CAP_IOMMU);
-    if (!r)
-        dev->use_iommu = 0;
-    if (dev->use_iommu)
-	assigned_dev_data.flags |= KVM_DEV_ASSIGN_ENABLE_IOMMU;
+    /* We always enable the IOMMU unless disabled on the command line */
+    if (dev->use_iommu) {
+        if (!kvm_check_extension(kvm_state, KVM_CAP_IOMMU)) {
+            fprintf(stderr, "No IOMMU found.  Unable to assign device \"%s\"\n",
+                    dev->dev.qdev.id);
+             return -ENODEV;
+        }
+        assigned_dev_data.flags |= KVM_DEV_ASSIGN_ENABLE_IOMMU;
+    }
 #else
     dev->use_iommu = 0;
 #endif

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2010-01-18 14:20 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-12-23 22:40 [PATCH qemu-kvm] device assignment: default requires IOMMU Chris Wright
2009-12-24  0:45 ` Alexander Graf
2009-12-24  6:51   ` Simon Horman
2009-12-24  6:56     ` Sheng Yang
2009-12-24  7:37       ` Muli Ben-Yehuda
2009-12-24  7:41       ` Simon Horman
2009-12-24 11:35 ` Marcelo Tosatti
2010-01-18 14:18 ` Alexander Graf
2010-01-18 14:20   ` Avi Kivity

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox