diff -r -u libvirt-0.4.2.orig/src/qemu_conf.c libvirt-0.4.2/src/qemu_conf.c
--- libvirt-0.4.2.orig/src/qemu_conf.c	2008-05-29 21:25:01.000000000 +0200
+++ libvirt-0.4.2/src/qemu_conf.c	2008-06-03 01:01:19.000000000 +0200
@@ -293,6 +293,11 @@
     int nflags;
 };
 
+struct hypervisor_capabilities {
+    const char *hostarch;
+    const char *guestarch;
+};
+
 /* Feature flags for the architecture info */
 static const struct qemu_feature_flags const arch_info_i686_flags [] = {
     { "pae",  1, 0 },
@@ -329,6 +334,17 @@
        "/usr/bin/xenner", arch_info_x86_64_flags, 2 },
 };
 
+static const struct hypervisor_capabilities const kvm_capa[] = {
+    {  "i686", "i686" },
+    {  "x86_64", "i686" },
+    {  "x86_64", "x86_64" },
+};
+
+static const struct hypervisor_capabilities const kqemu_capa[] = {
+    {  "i686", "i686" },
+    {  "x86_64", "x86_64" },
+};
+
 static int
 qemudCapsInitGuest(virCapsPtr caps,
                    const char *hostmachine,
@@ -358,25 +374,33 @@
                                           NULL) == NULL)
             return -1;
 
-        /* If guest & host match, then we can accelerate */
-        if (STREQ(info->arch, hostmachine)) {
-            if (access("/dev/kqemu", F_OK) == 0 &&
-                virCapabilitiesAddGuestDomain(guest,
-                                              "kqemu",
-                                              NULL,
-                                              NULL,
-                                              0,
-                                              NULL) == NULL)
-                return -1;
+        /* If guest / host combo is listed as supported, we can accelerate */
+        for (i = 0; i < sizeof(kqemu_capa)/sizeof(kqemu_capa[0]); i++) {
+            if (STREQ(hostmachine, kqemu_capa[i].hostarch) &&
+                STREQ(info->arch, kqemu_capa[i].guestarch)) {
+                if (access("/dev/kqemu", F_OK) == 0 &&
+                    virCapabilitiesAddGuestDomain(guest,
+                                                  "kqemu",
+                                                  NULL,
+                                                  NULL,
+                                                  0,
+                                                  NULL) == NULL)
+                    return -1;
+            }
+        }
 
-            if (access("/dev/kvm", F_OK) == 0 &&
-                virCapabilitiesAddGuestDomain(guest,
-                                              "kvm",
-                                              "/usr/bin/qemu-kvm",
-                                              NULL,
-                                              0,
-                                              NULL) == NULL)
-                return -1;
+        for (i = 0; i < sizeof(kvm_capa)/sizeof(kvm_capa[0]); i++) {
+            if (STREQ(hostmachine, kvm_capa[i].hostarch) &&
+                STREQ(info->arch, kvm_capa[i].guestarch)) {
+                if (access("/dev/kvm", F_OK) == 0 &&
+                    virCapabilitiesAddGuestDomain(guest,
+                                                  "kvm",
+                                                  "/usr/bin/qemu-kvm",
+                                                  NULL,
+                                                  0,
+                                                  NULL) == NULL)
+                    return -1;
+            }
         }
     } else {
         if (virCapabilitiesAddGuestDomain(guest,
Only in libvirt-0.4.2/src: qemu_conf.c~
