All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07
@ 2014-02-12 21:22 Tom Musta
  2014-02-12 21:22 ` [Qemu-devel] [PATCH 01/28] target-ppc: Altivec 2.07: Add Instruction Flag Tom Musta
                   ` (29 more replies)
  0 siblings, 30 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch series implements the changes to Altivec introduced by Power ISA
Version 2.07.

Tom Musta (28):
  target-ppc: Altivec 2.07: Add Instruction Flag
  target-ppc: Altivec 2.07: Update AVR Structure
  target-ppc: Altivec 2.07: Add GEN_VXFORM3
  target-ppc: Altivec 2.07: Add Support for Dual Altivec Instructions
  target-ppc: Altivec 2.07: Add Opcode Macro for VX Form Instructions
  target-ppc: Altivec 2.07: Add Support for R-Form Dual Instructions
  target-ppc: Altivec 2.07: Vector Logical Instructions
  target-ppc: Altivec 2.07: Add/Subtract Unsigned Doubleword Modulo
  target-ppc: Altivec 2.07: Change VMUL_DO to Support 64-bit Integers
  target-ppc: Altivec 2.07: Multiply Even/Odd Word Instructions
  target-ppc: Altivec 2.07: vmuluw Instruction
  target-ppc: Altivec 2.07: Add Vector Count Leading Zeroes
  target-ppc: Altivec 2.07: Vector Population Count Instructions
  target-ppc: Altivec 2.07: Vector Min/Max Doubleword Instructions
  target-ppc: Altivec 2.07: Pack Doubleword Instructions
  target-ppc: Altivec 2.07: Unpack Signed Word Instructions
  target-ppc: Altivec 2.07: Vector Merge Instructions
  target-ppc: Altivec 2.07: Change Bit Masks to Support 64-bit Rotates
    and Shifts
  target-ppc: Altivec 2.07: Vector Doubleword Rotate and Shift
    Instructions
  target-ppc: Altivec 2.07: Quadword Addition and Subtracation
  target-ppc: Altivec 2.07: vbpermq Instruction
  target-ppc: Altivec 2.07: Doubleword Compares
  target-ppc: Altivec 2.07: Vector Gather Bits by Bytes
  target-ppc: Altivec 2.07: Vector Polynomial Multiply Sum
  target-ppc: Altivec 2.07: Binary Coded Decimal Instructions
  target-ppc: Altivec 2.07: AES Instructions
  target-ppc: Altivec 2.07: Vector SHA Sigma Instructions
  target-ppc: Altivec 2.07: Vector Permute and Exclusive OR

 target-ppc/cpu.h            |    9 +-
 target-ppc/helper.h         |   62 +++
 target-ppc/int_helper.c     | 1278 +++++++++++++++++++++++++++++++++++++++++--
 target-ppc/translate.c      |  348 ++++++++++++-
 target-ppc/translate_init.c |    2 +-
 5 files changed, 1648 insertions(+), 51 deletions(-)

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

* [Qemu-devel] [PATCH 01/28] target-ppc: Altivec 2.07: Add Instruction Flag
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
@ 2014-02-12 21:22 ` Tom Musta
  2014-02-12 21:22 ` [Qemu-devel] [PATCH 02/28] target-ppc: Altivec 2.07: Update AVR Structure Tom Musta
                   ` (28 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds a flag that will be used to tag the Altivec instructions
introduced in Power ISA Version 2.07.

The flag is added to Power8 model since P8 supports these instructions.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/cpu.h            |    5 ++++-
 target-ppc/translate_init.c |    2 +-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h
index 214afd9..f25caf1 100644
--- a/target-ppc/cpu.h
+++ b/target-ppc/cpu.h
@@ -1893,12 +1893,15 @@ enum {
     PPC2_BCTAR_ISA207  = 0x0000000000001000ULL,
     /* ISA 2.07 load/store quadword                                          */
     PPC2_LSQ_ISA207    = 0x0000000000002000ULL,
+    /* ISA 2.07 Altivec                                                      */
+    PPC2_ALTIVEC_207   = 0x0000000000004000ULL,
 
 #define PPC_TCG_INSNS2 (PPC2_BOOKE206 | PPC2_VSX | PPC2_PRCNTL | PPC2_DBRX | \
                         PPC2_ISA205 | PPC2_VSX207 | PPC2_PERM_ISA206 | \
                         PPC2_DIVE_ISA206 | PPC2_ATOMIC_ISA206 | \
                         PPC2_FP_CVT_ISA206 | PPC2_FP_TST_ISA206 | \
-                        PPC2_BCTAR_ISA207 | PPC2_LSQ_ISA207)
+                        PPC2_BCTAR_ISA207 | PPC2_LSQ_ISA207 | \
+                        PPC2_ALTIVEC_207)
 };
 
 /*****************************************************************************/
diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
index d7bcbba..ea805db 100644
--- a/target-ppc/translate_init.c
+++ b/target-ppc/translate_init.c
@@ -7340,7 +7340,7 @@ POWERPC_FAMILY(POWER8)(ObjectClass *oc, void *data)
                         PPC2_PERM_ISA206 | PPC2_DIVE_ISA206 |
                         PPC2_ATOMIC_ISA206 | PPC2_FP_CVT_ISA206 |
                         PPC2_FP_TST_ISA206 | PPC2_BCTAR_ISA207 |
-                        PPC2_LSQ_ISA207;
+                        PPC2_LSQ_ISA207 | PPC2_ALTIVEC_207;
     pcc->msr_mask = 0x800000000284FF36ULL;
     pcc->mmu_model = POWERPC_MMU_2_06;
 #if defined(CONFIG_SOFTMMU)
-- 
1.7.1

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

* [Qemu-devel] [PATCH 02/28] target-ppc: Altivec 2.07: Update AVR Structure
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
  2014-02-12 21:22 ` [Qemu-devel] [PATCH 01/28] target-ppc: Altivec 2.07: Add Instruction Flag Tom Musta
@ 2014-02-12 21:22 ` Tom Musta
  2014-02-12 21:22 ` [Qemu-devel] [PATCH 03/28] target-ppc: Altivec 2.07: Add GEN_VXFORM3 Tom Musta
                   ` (27 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch updates the ppc_avr_t data structure to include elements for
signed 64-bit integers and (conditionally) unsigned 128 bit integers.
These elements will be in instructions models later on in this patch series.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/cpu.h |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h
index f25caf1..b72f610 100644
--- a/target-ppc/cpu.h
+++ b/target-ppc/cpu.h
@@ -352,6 +352,10 @@ union ppc_avr_t {
     int16_t s16[8];
     int32_t s32[4];
     uint64_t u64[2];
+    int64_t s64[2];
+#ifdef CONFIG_INT128
+    __uint128_t u128;
+#endif
 };
 
 #if !defined(CONFIG_USER_ONLY)
-- 
1.7.1

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

* [Qemu-devel] [PATCH 03/28] target-ppc: Altivec 2.07: Add GEN_VXFORM3
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
  2014-02-12 21:22 ` [Qemu-devel] [PATCH 01/28] target-ppc: Altivec 2.07: Add Instruction Flag Tom Musta
  2014-02-12 21:22 ` [Qemu-devel] [PATCH 02/28] target-ppc: Altivec 2.07: Update AVR Structure Tom Musta
@ 2014-02-12 21:22 ` Tom Musta
  2014-02-12 21:22 ` [Qemu-devel] [PATCH 04/28] target-ppc: Altivec 2.07: Add Support for Dual Altivec Instructions Tom Musta
                   ` (26 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds generator macro for Altivec instructions that have 3
source AVR operands.  The macro is similar to the 2 operand form.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/translate.c |   19 +++++++++++++++++++
 1 files changed, 19 insertions(+), 0 deletions(-)

diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index c883680..6ba0171 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -6883,6 +6883,25 @@ static void glue(gen_, name)(DisasContext *ctx)                         \
     tcg_temp_free_ptr(rd);                                              \
 }
 
+#define GEN_VXFORM3(name, opc2, opc3)                                   \
+static void glue(gen_, name)(DisasContext *ctx)                         \
+{                                                                       \
+    TCGv_ptr ra, rb, rc, rd;                                            \
+    if (unlikely(!ctx->altivec_enabled)) {                              \
+        gen_exception(ctx, POWERPC_EXCP_VPU);                           \
+        return;                                                         \
+    }                                                                   \
+    ra = gen_avr_ptr(rA(ctx->opcode));                                  \
+    rb = gen_avr_ptr(rB(ctx->opcode));                                  \
+    rc = gen_avr_ptr(rC(ctx->opcode));                                  \
+    rd = gen_avr_ptr(rD(ctx->opcode));                                  \
+    gen_helper_##name(rd, ra, rb, rc);                                  \
+    tcg_temp_free_ptr(ra);                                              \
+    tcg_temp_free_ptr(rb);                                              \
+    tcg_temp_free_ptr(rc);                                              \
+    tcg_temp_free_ptr(rd);                                              \
+}
+
 GEN_VXFORM(vaddubm, 0, 0);
 GEN_VXFORM(vadduhm, 0, 1);
 GEN_VXFORM(vadduwm, 0, 2);
-- 
1.7.1

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

* [Qemu-devel] [PATCH 04/28] target-ppc: Altivec 2.07: Add Support for Dual Altivec Instructions
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (2 preceding siblings ...)
  2014-02-12 21:22 ` [Qemu-devel] [PATCH 03/28] target-ppc: Altivec 2.07: Add GEN_VXFORM3 Tom Musta
@ 2014-02-12 21:22 ` Tom Musta
  2014-02-12 21:22 ` [Qemu-devel] [PATCH 05/28] target-ppc: Altivec 2.07: Add Opcode Macro for VX Form Instructions Tom Musta
                   ` (25 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

Some Alitvec instructions introduced in Power ISA Version 2.07 use bit 31
(aka the "Rc" bit) as an opcode bit.  However, QEMU for PowerPC uses
bits 0-5 and 21-30 for opcodes and not bit 31.

This patch introduces macros that will handle this situation by injecting
an auxiliary handler which decodes bit 31 in invokes one of two standard
handlers.  Since the instructions are not, in general, from the same version
of the ISA, two sets of PPC_*/PPC2_* instruction tags are supported.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/translate.c |   24 ++++++++++++++++++++++++
 1 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index 6ba0171..2ad7348 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -6902,6 +6902,26 @@ static void glue(gen_, name)(DisasContext *ctx)                         \
     tcg_temp_free_ptr(rd);                                              \
 }
 
+/*
+ * Support for Altivec instruction pairs that use bit 31 (Rc) as
+ * an opcode bit.  In general, these pairs come from different
+ * versions of the ISA, so we must also support a pair of flags for
+ * each instruction.
+ */
+#define GEN_VXFORM_DUAL(name0, flg0, flg2_0, name1, flg1, flg2_1)          \
+static void glue(gen_, name0##_##name1)(DisasContext *ctx)             \
+{                                                                      \
+    if ((Rc(ctx->opcode) == 0) &&                                      \
+        ((ctx->insns_flags & flg0) || (ctx->insns_flags2 & flg2_0))) { \
+        gen_##name0(ctx);                                              \
+    } else if ((Rc(ctx->opcode) == 1) &&                               \
+        ((ctx->insns_flags & flg1) || (ctx->insns_flags2 & flg2_1))) { \
+        gen_##name1(ctx);                                              \
+    } else {                                                           \
+        gen_inval_exception(ctx, POWERPC_EXCP_INVAL_INVAL);            \
+    }                                                                  \
+}
+
 GEN_VXFORM(vaddubm, 0, 0);
 GEN_VXFORM(vadduhm, 0, 1);
 GEN_VXFORM(vadduwm, 0, 2);
@@ -10233,6 +10253,10 @@ GEN_VX_LOGICAL(vnor, tcg_gen_nor_i64, 2, 20),
 #undef GEN_VXFORM
 #define GEN_VXFORM(name, opc2, opc3)                                    \
 GEN_HANDLER(name, 0x04, opc2, opc3, 0x00000000, PPC_ALTIVEC)
+#undef GEN_VXFORM_DUAL
+#define GEN_VXFORM_DUAL(name0, name1, opc2, opc3, type0, type1) \
+GEN_HANDLER_E(name0##_##name1, 0x4, opc2, opc3, 0x00000000, type0, type1)
+
 GEN_VXFORM(vaddubm, 0, 0),
 GEN_VXFORM(vadduhm, 0, 1),
 GEN_VXFORM(vadduwm, 0, 2),
-- 
1.7.1

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

* [Qemu-devel] [PATCH 05/28] target-ppc: Altivec 2.07: Add Opcode Macro for VX Form Instructions
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (3 preceding siblings ...)
  2014-02-12 21:22 ` [Qemu-devel] [PATCH 04/28] target-ppc: Altivec 2.07: Add Support for Dual Altivec Instructions Tom Musta
@ 2014-02-12 21:22 ` Tom Musta
  2014-02-12 21:22 ` [Qemu-devel] [PATCH 06/28] target-ppc: Altivec 2.07: Add Support for R-Form Dual Instructions Tom Musta
                   ` (24 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds a macro to insert an entry into the opcode table for Altivec
Power ISA Version 2.07 instructions.  The macro is similar to the GEN_VXFORM macro
except that it tags the entry with the PPC2_ALTIVEC_207 flag rather than
PPC_ALTIVEC.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/translate.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index 2ad7348..fe75bd8 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -10253,6 +10253,11 @@ GEN_VX_LOGICAL(vnor, tcg_gen_nor_i64, 2, 20),
 #undef GEN_VXFORM
 #define GEN_VXFORM(name, opc2, opc3)                                    \
 GEN_HANDLER(name, 0x04, opc2, opc3, 0x00000000, PPC_ALTIVEC)
+
+#undef GEN_VXFORM_207
+#define GEN_VXFORM_207(name, opc2, opc3) \
+GEN_HANDLER_E(name, 0x04, opc2, opc3, 0x00000000, PPC_NONE, PPC2_ALTIVEC_207)
+
 #undef GEN_VXFORM_DUAL
 #define GEN_VXFORM_DUAL(name0, name1, opc2, opc3, type0, type1) \
 GEN_HANDLER_E(name0##_##name1, 0x4, opc2, opc3, 0x00000000, type0, type1)
-- 
1.7.1

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

* [Qemu-devel] [PATCH 06/28] target-ppc: Altivec 2.07: Add Support for R-Form Dual Instructions
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (4 preceding siblings ...)
  2014-02-12 21:22 ` [Qemu-devel] [PATCH 05/28] target-ppc: Altivec 2.07: Add Opcode Macro for VX Form Instructions Tom Musta
@ 2014-02-12 21:22 ` Tom Musta
  2014-02-12 21:22 ` [Qemu-devel] [PATCH 07/28] target-ppc: Altivec 2.07: Vector Logical Instructions Tom Musta
                   ` (23 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

Some Alitvec instructions introduced in Power ISA Version 2.07 use bit 31
(aka the "Rc" bit) as an opcode but also use bit 21 as an actual Rc
bit.  QEMU for PowerPC typically uses bits 0-5 and 21-30 for opcodes.

This patch introduces a generator macro that injects an auxiliary handler
which decodes both bits 21 and 31 and invokes one of four standard
handlers.  Since the instructions are not, in general, from the same version
of the ISA, two sets of PPC_*/PPC2_* flags are supported.

This patch also introduces a macro to insert two entries into the opcode
table -- one for bit 21 equal to 0 and one for bit 21 equal to 1.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/translate.c |   35 +++++++++++++++++++++++++++++++++++
 1 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index fe75bd8..6ac0486 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -387,6 +387,8 @@ EXTRACT_HELPER(opc2, 1, 5);
 EXTRACT_HELPER(opc3, 6, 5);
 /* Update Cr0 flags */
 EXTRACT_HELPER(Rc, 0, 1);
+/* Update Cr6 flags (Altivec) */
+EXTRACT_HELPER(Rc21, 10, 1);
 /* Destination */
 EXTRACT_HELPER(rD, 21, 5);
 /* Source */
@@ -7030,6 +7032,34 @@ static void glue(gen_, name)(DisasContext *ctx)                         \
     GEN_VXRFORM1(name, name, #name, opc2, opc3)                      \
     GEN_VXRFORM1(name##_dot, name##_, #name ".", opc2, (opc3 | (0x1 << 4)))
 
+/*
+ * Support for Altivec instructions that use bit 31 (Rc) as an opcode
+ * bit but also use bit 21 as an actual Rc bit.  In general, thse pairs
+ * come from different versions of the ISA, so we must also support a
+ * pair of flags for each instruction.
+ */
+#define GEN_VXRFORM_DUAL(name0, flg0, flg2_0, name1, flg1, flg2_1)     \
+static void glue(gen_, name0##_##name1)(DisasContext *ctx)             \
+{                                                                      \
+    if ((Rc(ctx->opcode) == 0) &&                                      \
+        ((ctx->insns_flags & flg0) || (ctx->insns_flags2 & flg2_0))) { \
+        if (Rc21(ctx->opcode) == 0) {                                  \
+            gen_##name0(ctx);                                          \
+        } else {                                                       \
+            gen_##name0##_(ctx);                                       \
+        }                                                              \
+    } else if ((Rc(ctx->opcode) == 1) &&                               \
+        ((ctx->insns_flags & flg1) || (ctx->insns_flags2 & flg2_1))) { \
+        if (Rc21(ctx->opcode) == 0) {                                  \
+            gen_##name1(ctx);                                          \
+        } else {                                                       \
+            gen_##name1##_(ctx);                                       \
+        }                                                              \
+    } else {                                                           \
+        gen_inval_exception(ctx, POWERPC_EXCP_INVAL_INVAL);            \
+    }                                                                  \
+}
+
 GEN_VXRFORM(vcmpequb, 3, 0)
 GEN_VXRFORM(vcmpequh, 3, 1)
 GEN_VXRFORM(vcmpequw, 3, 2)
@@ -10262,6 +10292,11 @@ GEN_HANDLER_E(name, 0x04, opc2, opc3, 0x00000000, PPC_NONE, PPC2_ALTIVEC_207)
 #define GEN_VXFORM_DUAL(name0, name1, opc2, opc3, type0, type1) \
 GEN_HANDLER_E(name0##_##name1, 0x4, opc2, opc3, 0x00000000, type0, type1)
 
+#undef GEN_VXRFORM_DUAL
+#define GEN_VXRFORM_DUAL(name0, name1, opc2, opc3, tp0, tp1) \
+GEN_HANDLER_E(name0##_##name1, 0x4, opc2, opc3, 0x00000000, tp0, tp1), \
+GEN_HANDLER_E(name0##_##name1, 0x4, opc2, (opc3 | 0x10), 0x00000000, tp0, tp1),
+
 GEN_VXFORM(vaddubm, 0, 0),
 GEN_VXFORM(vadduhm, 0, 1),
 GEN_VXFORM(vadduwm, 0, 2),
-- 
1.7.1

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

* [Qemu-devel] [PATCH 07/28] target-ppc: Altivec 2.07: Vector Logical Instructions
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (5 preceding siblings ...)
  2014-02-12 21:22 ` [Qemu-devel] [PATCH 06/28] target-ppc: Altivec 2.07: Add Support for R-Form Dual Instructions Tom Musta
@ 2014-02-12 21:22 ` Tom Musta
  2014-02-12 21:22 ` [Qemu-devel] [PATCH 08/28] target-ppc: Altivec 2.07: Add/Subtract Unsigned Doubleword Modulo Tom Musta
                   ` (22 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds the Vector Logical Instructions that are introduced
in Power ISA Version 2.07: veqv, vnand and vorc.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/translate.c |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index 6ac0486..e2dce90 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -6850,6 +6850,9 @@ GEN_VX_LOGICAL(vandc, tcg_gen_andc_i64, 2, 17);
 GEN_VX_LOGICAL(vor, tcg_gen_or_i64, 2, 18);
 GEN_VX_LOGICAL(vxor, tcg_gen_xor_i64, 2, 19);
 GEN_VX_LOGICAL(vnor, tcg_gen_nor_i64, 2, 20);
+GEN_VX_LOGICAL(veqv, tcg_gen_eqv_i64, 2, 26);
+GEN_VX_LOGICAL(vnand, tcg_gen_nand_i64, 2, 22);
+GEN_VX_LOGICAL(vorc, tcg_gen_orc_i64, 2, 21);
 
 #define GEN_VXFORM(name, opc2, opc3)                                    \
 static void glue(gen_, name)(DisasContext *ctx)                                 \
@@ -10274,11 +10277,19 @@ GEN_VR_STVE(wx, 0x07, 0x06),
 #undef GEN_VX_LOGICAL
 #define GEN_VX_LOGICAL(name, tcg_op, opc2, opc3)                        \
 GEN_HANDLER(name, 0x04, opc2, opc3, 0x00000000, PPC_ALTIVEC)
+
+#undef GEN_VX_LOGICAL_207
+#define GEN_VX_LOGICAL_207(name, tcg_op, opc2, opc3) \
+GEN_HANDLER_E(name, 0x04, opc2, opc3, 0x00000000, PPC_NONE, PPC2_ALTIVEC_207)
+
 GEN_VX_LOGICAL(vand, tcg_gen_and_i64, 2, 16),
 GEN_VX_LOGICAL(vandc, tcg_gen_andc_i64, 2, 17),
 GEN_VX_LOGICAL(vor, tcg_gen_or_i64, 2, 18),
 GEN_VX_LOGICAL(vxor, tcg_gen_xor_i64, 2, 19),
 GEN_VX_LOGICAL(vnor, tcg_gen_nor_i64, 2, 20),
+GEN_VX_LOGICAL_207(veqv, tcg_gen_eqv_i64, 2, 26),
+GEN_VX_LOGICAL_207(vnand, tcg_gen_nand_i64, 2, 22),
+GEN_VX_LOGICAL_207(vorc, tcg_gen_orc_i64, 2, 21),
 
 #undef GEN_VXFORM
 #define GEN_VXFORM(name, opc2, opc3)                                    \
-- 
1.7.1

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

* [Qemu-devel] [PATCH 08/28] target-ppc: Altivec 2.07: Add/Subtract Unsigned Doubleword Modulo
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (6 preceding siblings ...)
  2014-02-12 21:22 ` [Qemu-devel] [PATCH 07/28] target-ppc: Altivec 2.07: Vector Logical Instructions Tom Musta
@ 2014-02-12 21:22 ` Tom Musta
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 09/28] target-ppc: Altivec 2.07: Change VMUL_DO to Support 64-bit Integers Tom Musta
                   ` (21 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:22 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds two Altivec unsigned doublword modulo instructions that
are introduced in Power ISA Version V2.07:

  - vaddudm : Vector Add Unsigned Doubleword Modulo
  - vsubudm : Vector Subtrace Unsigned Doubleword Modulo

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/helper.h     |    2 ++
 target-ppc/int_helper.c |    1 +
 target-ppc/translate.c  |    4 ++++
 3 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index a4480e8..1106e29 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -109,9 +109,11 @@ DEF_HELPER_FLAGS_1(ftsqrt, TCG_CALL_NO_RWG_SE, i32, i64)
 DEF_HELPER_3(vaddubm, void, avr, avr, avr)
 DEF_HELPER_3(vadduhm, void, avr, avr, avr)
 DEF_HELPER_3(vadduwm, void, avr, avr, avr)
+DEF_HELPER_3(vaddudm, void, avr, avr, avr)
 DEF_HELPER_3(vsububm, void, avr, avr, avr)
 DEF_HELPER_3(vsubuhm, void, avr, avr, avr)
 DEF_HELPER_3(vsubuwm, void, avr, avr, avr)
+DEF_HELPER_3(vsubudm, void, avr, avr, avr)
 DEF_HELPER_3(vavgub, void, avr, avr, avr)
 DEF_HELPER_3(vavguh, void, avr, avr, avr)
 DEF_HELPER_3(vavguw, void, avr, avr, avr)
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index 71db3fb..3e36c0a 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -504,6 +504,7 @@ void helper_vaddcuw(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
 VARITH(ubm, u8)
 VARITH(uhm, u16)
 VARITH(uwm, u32)
+VARITH(udm, u64)
 #undef VARITH_DO
 #undef VARITH
 
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index e2dce90..bb1c64e 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -6930,9 +6930,11 @@ static void glue(gen_, name0##_##name1)(DisasContext *ctx)             \
 GEN_VXFORM(vaddubm, 0, 0);
 GEN_VXFORM(vadduhm, 0, 1);
 GEN_VXFORM(vadduwm, 0, 2);
+GEN_VXFORM(vaddudm, 0, 3);
 GEN_VXFORM(vsububm, 0, 16);
 GEN_VXFORM(vsubuhm, 0, 17);
 GEN_VXFORM(vsubuwm, 0, 18);
+GEN_VXFORM(vsubudm, 0, 19);
 GEN_VXFORM(vmaxub, 1, 0);
 GEN_VXFORM(vmaxuh, 1, 1);
 GEN_VXFORM(vmaxuw, 1, 2);
@@ -10311,9 +10313,11 @@ GEN_HANDLER_E(name0##_##name1, 0x4, opc2, (opc3 | 0x10), 0x00000000, tp0, tp1),
 GEN_VXFORM(vaddubm, 0, 0),
 GEN_VXFORM(vadduhm, 0, 1),
 GEN_VXFORM(vadduwm, 0, 2),
+GEN_VXFORM_207(vaddudm, 0, 3),
 GEN_VXFORM(vsububm, 0, 16),
 GEN_VXFORM(vsubuhm, 0, 17),
 GEN_VXFORM(vsubuwm, 0, 18),
+GEN_VXFORM_207(vsubudm, 0, 19),
 GEN_VXFORM(vmaxub, 1, 0),
 GEN_VXFORM(vmaxuh, 1, 1),
 GEN_VXFORM(vmaxuw, 1, 2),
-- 
1.7.1

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

* [Qemu-devel] [PATCH 09/28] target-ppc: Altivec 2.07: Change VMUL_DO to Support 64-bit Integers
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (7 preceding siblings ...)
  2014-02-12 21:22 ` [Qemu-devel] [PATCH 08/28] target-ppc: Altivec 2.07: Add/Subtract Unsigned Doubleword Modulo Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 10/28] target-ppc: Altivec 2.07: Multiply Even/Odd Word Instructions Tom Musta
                   ` (20 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This VMUL_DO macro provides support for the various vmule* and vmulo*
instructions.  These instructions multiply vector elements, producing
products that are one size larger; e.g. vmuleub multiplies unsigned 8-bit
elements and produces a 16 bit unsigned element.

The existing macro works correctly for the existing instructions (8-bit,
and 16-bit source elements) but does not work correctly for 32-bit
source elements.

This patch adds an explicit cast to the multiplicands, forcing them to be
of the target element type.  This is required for the forthcoming patches
that add the vmul[eo][us]w instructions.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/int_helper.c |   26 ++++++++++++++------------
 1 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index 3e36c0a..20d34e6 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -983,28 +983,30 @@ void helper_vmsumuhs(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a,
     }
 }
 
-#define VMUL_DO(name, mul_element, prod_element, evenp)                 \
+#define VMUL_DO(name, mul_element, prod_element, cast, evenp)           \
     void helper_v##name(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)       \
     {                                                                   \
         int i;                                                          \
                                                                         \
         VECTOR_FOR_INORDER_I(i, prod_element) {                         \
             if (evenp) {                                                \
-                r->prod_element[i] = a->mul_element[i * 2 + HI_IDX] *   \
-                    b->mul_element[i * 2 + HI_IDX];                     \
+                r->prod_element[i] =                                    \
+                    (cast)a->mul_element[i * 2 + HI_IDX] *              \
+                    (cast)b->mul_element[i * 2 + HI_IDX];               \
             } else {                                                    \
-                r->prod_element[i] = a->mul_element[i * 2 + LO_IDX] *   \
-                    b->mul_element[i * 2 + LO_IDX];                     \
+                r->prod_element[i] =                                    \
+                    (cast)a->mul_element[i * 2 + LO_IDX] *              \
+                    (cast)b->mul_element[i * 2 + LO_IDX];               \
             }                                                           \
         }                                                               \
     }
-#define VMUL(suffix, mul_element, prod_element)         \
-    VMUL_DO(mule##suffix, mul_element, prod_element, 1) \
-    VMUL_DO(mulo##suffix, mul_element, prod_element, 0)
-VMUL(sb, s8, s16)
-VMUL(sh, s16, s32)
-VMUL(ub, u8, u16)
-VMUL(uh, u16, u32)
+#define VMUL(suffix, mul_element, prod_element, cast)            \
+    VMUL_DO(mule##suffix, mul_element, prod_element, cast, 1)    \
+    VMUL_DO(mulo##suffix, mul_element, prod_element, cast, 0)
+VMUL(sb, s8, s16, int16_t)
+VMUL(sh, s16, s32, int32_t)
+VMUL(ub, u8, u16, uint16_t)
+VMUL(uh, u16, u32, uint32_t)
 #undef VMUL_DO
 #undef VMUL
 
-- 
1.7.1

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

* [Qemu-devel] [PATCH 10/28] target-ppc: Altivec 2.07: Multiply Even/Odd Word Instructions
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (8 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 09/28] target-ppc: Altivec 2.07: Change VMUL_DO to Support 64-bit Integers Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 11/28] target-ppc: Altivec 2.07: vmuluw Instruction Tom Musta
                   ` (19 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds the Multilpy Even/Odd Word instructions that are introduced
in Power ISA Version 2.07:

  - Vector Multiply Even Unsigned Word (vmuleuw)
  - Vector Multiply Even Signed Word (vmulesw)
  - Vector Multiply Odd Unsigned Word (vmulouw)
  - Vector Multiply Odd Signed Word (vmulosw)

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/helper.h     |    4 ++++
 target-ppc/int_helper.c |    2 ++
 target-ppc/translate.c  |    8 ++++++++
 3 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index 1106e29..ca18447 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -166,12 +166,16 @@ DEF_HELPER_3(vmrghh, void, avr, avr, avr)
 DEF_HELPER_3(vmrghw, void, avr, avr, avr)
 DEF_HELPER_3(vmulesb, void, avr, avr, avr)
 DEF_HELPER_3(vmulesh, void, avr, avr, avr)
+DEF_HELPER_3(vmulesw, void, avr, avr, avr)
 DEF_HELPER_3(vmuleub, void, avr, avr, avr)
 DEF_HELPER_3(vmuleuh, void, avr, avr, avr)
+DEF_HELPER_3(vmuleuw, void, avr, avr, avr)
 DEF_HELPER_3(vmulosb, void, avr, avr, avr)
 DEF_HELPER_3(vmulosh, void, avr, avr, avr)
+DEF_HELPER_3(vmulosw, void, avr, avr, avr)
 DEF_HELPER_3(vmuloub, void, avr, avr, avr)
 DEF_HELPER_3(vmulouh, void, avr, avr, avr)
+DEF_HELPER_3(vmulouw, void, avr, avr, avr)
 DEF_HELPER_3(vsrab, void, avr, avr, avr)
 DEF_HELPER_3(vsrah, void, avr, avr, avr)
 DEF_HELPER_3(vsraw, void, avr, avr, avr)
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index 20d34e6..09590c7 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -1005,8 +1005,10 @@ void helper_vmsumuhs(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a,
     VMUL_DO(mulo##suffix, mul_element, prod_element, cast, 0)
 VMUL(sb, s8, s16, int16_t)
 VMUL(sh, s16, s32, int32_t)
+VMUL(sw, s32, s64, int64_t)
 VMUL(ub, u8, u16, uint16_t)
 VMUL(uh, u16, u32, uint32_t)
+VMUL(uw, u32, u64, uint64_t)
 #undef VMUL_DO
 #undef VMUL
 
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index bb1c64e..faee4c3 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -6961,12 +6961,16 @@ GEN_VXFORM(vmrglh, 6, 5);
 GEN_VXFORM(vmrglw, 6, 6);
 GEN_VXFORM(vmuloub, 4, 0);
 GEN_VXFORM(vmulouh, 4, 1);
+GEN_VXFORM(vmulouw, 4, 2);
 GEN_VXFORM(vmulosb, 4, 4);
 GEN_VXFORM(vmulosh, 4, 5);
+GEN_VXFORM(vmulosw, 4, 6);
 GEN_VXFORM(vmuleub, 4, 8);
 GEN_VXFORM(vmuleuh, 4, 9);
+GEN_VXFORM(vmuleuw, 4, 10);
 GEN_VXFORM(vmulesb, 4, 12);
 GEN_VXFORM(vmulesh, 4, 13);
+GEN_VXFORM(vmulesw, 4, 14);
 GEN_VXFORM(vslb, 2, 4);
 GEN_VXFORM(vslh, 2, 5);
 GEN_VXFORM(vslw, 2, 6);
@@ -10344,12 +10348,16 @@ GEN_VXFORM(vmrglh, 6, 5),
 GEN_VXFORM(vmrglw, 6, 6),
 GEN_VXFORM(vmuloub, 4, 0),
 GEN_VXFORM(vmulouh, 4, 1),
+GEN_VXFORM_207(vmulouw, 4, 2),
 GEN_VXFORM(vmulosb, 4, 4),
 GEN_VXFORM(vmulosh, 4, 5),
+GEN_VXFORM_207(vmulosw, 4, 6),
 GEN_VXFORM(vmuleub, 4, 8),
 GEN_VXFORM(vmuleuh, 4, 9),
+GEN_VXFORM_207(vmuleuw, 4, 10),
 GEN_VXFORM(vmulesb, 4, 12),
 GEN_VXFORM(vmulesh, 4, 13),
+GEN_VXFORM_207(vmulesw, 4, 14),
 GEN_VXFORM(vslb, 2, 4),
 GEN_VXFORM(vslh, 2, 5),
 GEN_VXFORM(vslw, 2, 6),
-- 
1.7.1

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

* [Qemu-devel] [PATCH 11/28] target-ppc: Altivec 2.07: vmuluw Instruction
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (9 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 10/28] target-ppc: Altivec 2.07: Multiply Even/Odd Word Instructions Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 12/28] target-ppc: Altivec 2.07: Add Vector Count Leading Zeroes Tom Musta
                   ` (18 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds the Vector Multiply Unsigned Word Modulo (vmuluwm)
instruction.

The existing VARITH_DO macro is re-used to (trivially) instantiate
the helper code.

Since bits 21-31 of any vmuluwm instruction is 137, the instruction
is coded as a dual to vmulouw (bits 21-31 = 136).

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/helper.h     |    1 +
 target-ppc/int_helper.c |    1 +
 target-ppc/translate.c  |    5 ++++-
 3 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index ca18447..c20d50e 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -176,6 +176,7 @@ DEF_HELPER_3(vmulosw, void, avr, avr, avr)
 DEF_HELPER_3(vmuloub, void, avr, avr, avr)
 DEF_HELPER_3(vmulouh, void, avr, avr, avr)
 DEF_HELPER_3(vmulouw, void, avr, avr, avr)
+DEF_HELPER_3(vmuluwm, void, avr, avr, avr)
 DEF_HELPER_3(vsrab, void, avr, avr, avr)
 DEF_HELPER_3(vsrah, void, avr, avr, avr)
 DEF_HELPER_3(vsraw, void, avr, avr, avr)
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index 09590c7..7a50f4a 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -505,6 +505,7 @@ VARITH(ubm, u8)
 VARITH(uhm, u16)
 VARITH(uwm, u32)
 VARITH(udm, u64)
+VARITH_DO(muluwm, *, u32)
 #undef VARITH_DO
 #undef VARITH
 
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index faee4c3..bbaaf6e 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -6962,6 +6962,9 @@ GEN_VXFORM(vmrglw, 6, 6);
 GEN_VXFORM(vmuloub, 4, 0);
 GEN_VXFORM(vmulouh, 4, 1);
 GEN_VXFORM(vmulouw, 4, 2);
+GEN_VXFORM(vmuluwm, 4, 2);
+GEN_VXFORM_DUAL(vmulouw, PPC_ALTIVEC, PPC_NONE,
+                vmuluwm, PPC_NONE, PPC2_ALTIVEC_207)
 GEN_VXFORM(vmulosb, 4, 4);
 GEN_VXFORM(vmulosh, 4, 5);
 GEN_VXFORM(vmulosw, 4, 6);
@@ -10348,7 +10351,7 @@ GEN_VXFORM(vmrglh, 6, 5),
 GEN_VXFORM(vmrglw, 6, 6),
 GEN_VXFORM(vmuloub, 4, 0),
 GEN_VXFORM(vmulouh, 4, 1),
-GEN_VXFORM_207(vmulouw, 4, 2),
+GEN_VXFORM_DUAL(vmulouw, vmuluwm, 4, 2, PPC_ALTIVEC, PPC_NONE),
 GEN_VXFORM(vmulosb, 4, 4),
 GEN_VXFORM(vmulosh, 4, 5),
 GEN_VXFORM_207(vmulosw, 4, 6),
-- 
1.7.1

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

* [Qemu-devel] [PATCH 12/28] target-ppc: Altivec 2.07: Add Vector Count Leading Zeroes
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (10 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 11/28] target-ppc: Altivec 2.07: vmuluw Instruction Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 13/28] target-ppc: Altivec 2.07: Vector Population Count Instructions Tom Musta
                   ` (17 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds the Vector Count Leading Zeroes instructions introduced
in Power ISA Version 2.07 - vclzb, vclzh, vclzw and vclzd.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/helper.h     |    5 +++++
 target-ppc/int_helper.c |   29 +++++++++++++++++++++++++++++
 target-ppc/translate.c  |    9 +++++++++
 3 files changed, 43 insertions(+), 0 deletions(-)

diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index c20d50e..7ca219f 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -273,6 +273,11 @@ DEF_HELPER_4(vcfsx, void, env, avr, avr, i32)
 DEF_HELPER_4(vctuxs, void, env, avr, avr, i32)
 DEF_HELPER_4(vctsxs, void, env, avr, avr, i32)
 
+DEF_HELPER_2(vclzb, void, avr, avr)
+DEF_HELPER_2(vclzh, void, avr, avr)
+DEF_HELPER_2(vclzw, void, avr, avr)
+DEF_HELPER_2(vclzd, void, avr, avr)
+
 DEF_HELPER_2(xsadddp, void, env, i32)
 DEF_HELPER_2(xssubdp, void, env, i32)
 DEF_HELPER_2(xsmuldp, void, env, i32)
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index 7a50f4a..7fca9f0 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -1524,6 +1524,35 @@ VUPK(lsh, s32, s16, UPKLO)
 #undef UPKHI
 #undef UPKLO
 
+#define VGENERIC_DO(name, element)                                      \
+    void helper_v##name(ppc_avr_t *r, ppc_avr_t *b)                     \
+    {                                                                   \
+        int i;                                                          \
+                                                                        \
+        VECTOR_FOR_INORDER_I(i, element) {                              \
+            r->element[i] = name(b->element[i]);                        \
+        }                                                               \
+    }
+
+#define clzb(v) ((v) ? clz32((uint32_t)(v) << 24) : 8)
+#define clzh(v) ((v) ? clz32((uint32_t)(v) << 16) : 16)
+#define clzw(v) clz32((v))
+#define clzd(v) clz64((v))
+
+VGENERIC_DO(clzb, u8)
+VGENERIC_DO(clzh, u16)
+VGENERIC_DO(clzw, u32)
+VGENERIC_DO(clzd, u64)
+
+#undef clzb
+#undef clzh
+#undef clzw
+#undef clzd
+
+
+#undef VGENERIC_DO
+
+
 #undef VECTOR_FOR_INORDER_I
 #undef HI_IDX
 #undef LO_IDX
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index bbaaf6e..ff6ddfc 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -7281,6 +7281,10 @@ GEN_VAFORM_PAIRED(vmsumshm, vmsumshs, 20)
 GEN_VAFORM_PAIRED(vsel, vperm, 21)
 GEN_VAFORM_PAIRED(vmaddfp, vnmsubfp, 23)
 
+GEN_VXFORM_NOA(vclzb, 1, 28)
+GEN_VXFORM_NOA(vclzh, 1, 29)
+GEN_VXFORM_NOA(vclzw, 1, 30)
+GEN_VXFORM_NOA(vclzd, 1, 31)
 /***                           VSX extension                               ***/
 
 static inline TCGv_i64 cpu_vsrh(int n)
@@ -10477,6 +10481,11 @@ GEN_VAFORM_PAIRED(vmsumshm, vmsumshs, 20),
 GEN_VAFORM_PAIRED(vsel, vperm, 21),
 GEN_VAFORM_PAIRED(vmaddfp, vnmsubfp, 23),
 
+GEN_VXFORM_207(vclzb, 1, 28),
+GEN_VXFORM_207(vclzh, 1, 29),
+GEN_VXFORM_207(vclzw, 1, 30),
+GEN_VXFORM_207(vclzd, 1, 31),
+
 GEN_HANDLER_E(lxsdx, 0x1F, 0x0C, 0x12, 0, PPC_NONE, PPC2_VSX),
 GEN_HANDLER_E(lxsiwax, 0x1F, 0x0C, 0x02, 0, PPC_NONE, PPC2_VSX207),
 GEN_HANDLER_E(lxsiwzx, 0x1F, 0x0C, 0x00, 0, PPC_NONE, PPC2_VSX207),
-- 
1.7.1

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

* [Qemu-devel] [PATCH 13/28] target-ppc: Altivec 2.07: Vector Population Count Instructions
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (11 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 12/28] target-ppc: Altivec 2.07: Add Vector Count Leading Zeroes Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 14/28] target-ppc: Altivec 2.07: Vector Min/Max Doubleword Instructions Tom Musta
                   ` (16 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds the Vector Population Count instructions introduced in Power
ISA Version 2.07: vpopcntb, vpopcnth, vpopcntw and vpopcntd.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/helper.h     |    4 ++++
 target-ppc/int_helper.c |   14 ++++++++++++++
 target-ppc/translate.c  |   22 ++++++++++++++++++----
 3 files changed, 36 insertions(+), 4 deletions(-)

diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index 7ca219f..793877d 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -277,6 +277,10 @@ DEF_HELPER_2(vclzb, void, avr, avr)
 DEF_HELPER_2(vclzh, void, avr, avr)
 DEF_HELPER_2(vclzw, void, avr, avr)
 DEF_HELPER_2(vclzd, void, avr, avr)
+DEF_HELPER_2(vpopcntb, void, avr, avr)
+DEF_HELPER_2(vpopcnth, void, avr, avr)
+DEF_HELPER_2(vpopcntw, void, avr, avr)
+DEF_HELPER_2(vpopcntd, void, avr, avr)
 
 DEF_HELPER_2(xsadddp, void, env, i32)
 DEF_HELPER_2(xssubdp, void, env, i32)
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index 7fca9f0..3b67ae3 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -1549,6 +1549,20 @@ VGENERIC_DO(clzd, u64)
 #undef clzw
 #undef clzd
 
+#define popcntb(v) ctpop8(v)
+#define popcnth(v) ctpop16(v)
+#define popcntw(v) ctpop32(v)
+#define popcntd(v) ctpop64(v)
+
+VGENERIC_DO(popcntb, u8)
+VGENERIC_DO(popcnth, u16)
+VGENERIC_DO(popcntw, u32)
+VGENERIC_DO(popcntd, u64)
+
+#undef popcntb
+#undef popcnth
+#undef popcntw
+#undef popcntd
 
 #undef VGENERIC_DO
 
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index ff6ddfc..e2036bb 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -7285,6 +7285,19 @@ GEN_VXFORM_NOA(vclzb, 1, 28)
 GEN_VXFORM_NOA(vclzh, 1, 29)
 GEN_VXFORM_NOA(vclzw, 1, 30)
 GEN_VXFORM_NOA(vclzd, 1, 31)
+GEN_VXFORM_NOA(vpopcntb, 1, 28)
+GEN_VXFORM_NOA(vpopcnth, 1, 29)
+GEN_VXFORM_NOA(vpopcntw, 1, 30)
+GEN_VXFORM_NOA(vpopcntd, 1, 31)
+GEN_VXFORM_DUAL(vclzb, PPC_NONE, PPC2_ALTIVEC_207, \
+                vpopcntb, PPC_NONE, PPC2_ALTIVEC_207)
+GEN_VXFORM_DUAL(vclzh, PPC_NONE, PPC2_ALTIVEC_207, \
+                vpopcnth, PPC_NONE, PPC2_ALTIVEC_207)
+GEN_VXFORM_DUAL(vclzw, PPC_NONE, PPC2_ALTIVEC_207, \
+                vpopcntw, PPC_NONE, PPC2_ALTIVEC_207)
+GEN_VXFORM_DUAL(vclzd, PPC_NONE, PPC2_ALTIVEC_207, \
+                vpopcntd, PPC_NONE, PPC2_ALTIVEC_207)
+
 /***                           VSX extension                               ***/
 
 static inline TCGv_i64 cpu_vsrh(int n)
@@ -10481,10 +10494,11 @@ GEN_VAFORM_PAIRED(vmsumshm, vmsumshs, 20),
 GEN_VAFORM_PAIRED(vsel, vperm, 21),
 GEN_VAFORM_PAIRED(vmaddfp, vnmsubfp, 23),
 
-GEN_VXFORM_207(vclzb, 1, 28),
-GEN_VXFORM_207(vclzh, 1, 29),
-GEN_VXFORM_207(vclzw, 1, 30),
-GEN_VXFORM_207(vclzd, 1, 31),
+GEN_VXFORM_DUAL(vclzb, vpopcntb, 1, 28, PPC_NONE, PPC2_ALTIVEC_207),
+GEN_VXFORM_DUAL(vclzh, vpopcnth, 1, 29, PPC_NONE, PPC2_ALTIVEC_207),
+GEN_VXFORM_DUAL(vclzw, vpopcntw, 1, 30, PPC_NONE, PPC2_ALTIVEC_207),
+GEN_VXFORM_DUAL(vclzd, vpopcntd, 1, 31, PPC_NONE, PPC2_ALTIVEC_207),
+
 
 GEN_HANDLER_E(lxsdx, 0x1F, 0x0C, 0x12, 0, PPC_NONE, PPC2_VSX),
 GEN_HANDLER_E(lxsiwax, 0x1F, 0x0C, 0x02, 0, PPC_NONE, PPC2_VSX207),
-- 
1.7.1

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

* [Qemu-devel] [PATCH 14/28] target-ppc: Altivec 2.07: Vector Min/Max Doubleword Instructions
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (12 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 13/28] target-ppc: Altivec 2.07: Vector Population Count Instructions Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 15/28] target-ppc: Altivec 2.07: Pack " Tom Musta
                   ` (15 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds the Vector Minimum and Maximum Doubleword instructions
that are introduced in Power ISA Version 2.07.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/helper.h     |    4 ++++
 target-ppc/int_helper.c |    2 ++
 target-ppc/translate.c  |    8 ++++++++
 3 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index 793877d..38bebea 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -123,15 +123,19 @@ DEF_HELPER_3(vavgsw, void, avr, avr, avr)
 DEF_HELPER_3(vminsb, void, avr, avr, avr)
 DEF_HELPER_3(vminsh, void, avr, avr, avr)
 DEF_HELPER_3(vminsw, void, avr, avr, avr)
+DEF_HELPER_3(vminsd, void, avr, avr, avr)
 DEF_HELPER_3(vmaxsb, void, avr, avr, avr)
 DEF_HELPER_3(vmaxsh, void, avr, avr, avr)
 DEF_HELPER_3(vmaxsw, void, avr, avr, avr)
+DEF_HELPER_3(vmaxsd, void, avr, avr, avr)
 DEF_HELPER_3(vminub, void, avr, avr, avr)
 DEF_HELPER_3(vminuh, void, avr, avr, avr)
 DEF_HELPER_3(vminuw, void, avr, avr, avr)
+DEF_HELPER_3(vminud, void, avr, avr, avr)
 DEF_HELPER_3(vmaxub, void, avr, avr, avr)
 DEF_HELPER_3(vmaxuh, void, avr, avr, avr)
 DEF_HELPER_3(vmaxuw, void, avr, avr, avr)
+DEF_HELPER_3(vmaxud, void, avr, avr, avr)
 DEF_HELPER_4(vcmpequb, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpequh, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpequw, void, env, avr, avr, avr)
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index 3b67ae3..fc2bff1 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -824,9 +824,11 @@ void helper_vmhraddshs(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a,
 VMINMAX(sb, s8)
 VMINMAX(sh, s16)
 VMINMAX(sw, s32)
+VMINMAX(sd, s64)
 VMINMAX(ub, u8)
 VMINMAX(uh, u16)
 VMINMAX(uw, u32)
+VMINMAX(ud, u64)
 #undef VMINMAX_DO
 #undef VMINMAX
 
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index e2036bb..4042717 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -6938,15 +6938,19 @@ GEN_VXFORM(vsubudm, 0, 19);
 GEN_VXFORM(vmaxub, 1, 0);
 GEN_VXFORM(vmaxuh, 1, 1);
 GEN_VXFORM(vmaxuw, 1, 2);
+GEN_VXFORM(vmaxud, 1, 3);
 GEN_VXFORM(vmaxsb, 1, 4);
 GEN_VXFORM(vmaxsh, 1, 5);
 GEN_VXFORM(vmaxsw, 1, 6);
+GEN_VXFORM(vmaxsd, 1, 7);
 GEN_VXFORM(vminub, 1, 8);
 GEN_VXFORM(vminuh, 1, 9);
 GEN_VXFORM(vminuw, 1, 10);
+GEN_VXFORM(vminud, 1, 11);
 GEN_VXFORM(vminsb, 1, 12);
 GEN_VXFORM(vminsh, 1, 13);
 GEN_VXFORM(vminsw, 1, 14);
+GEN_VXFORM(vminsd, 1, 15);
 GEN_VXFORM(vavgub, 1, 16);
 GEN_VXFORM(vavguh, 1, 17);
 GEN_VXFORM(vavguw, 1, 18);
@@ -10345,15 +10349,19 @@ GEN_VXFORM_207(vsubudm, 0, 19),
 GEN_VXFORM(vmaxub, 1, 0),
 GEN_VXFORM(vmaxuh, 1, 1),
 GEN_VXFORM(vmaxuw, 1, 2),
+GEN_VXFORM_207(vmaxud, 1, 3),
 GEN_VXFORM(vmaxsb, 1, 4),
 GEN_VXFORM(vmaxsh, 1, 5),
 GEN_VXFORM(vmaxsw, 1, 6),
+GEN_VXFORM_207(vmaxsd, 1, 7),
 GEN_VXFORM(vminub, 1, 8),
 GEN_VXFORM(vminuh, 1, 9),
 GEN_VXFORM(vminuw, 1, 10),
+GEN_VXFORM_207(vminud, 1, 11),
 GEN_VXFORM(vminsb, 1, 12),
 GEN_VXFORM(vminsh, 1, 13),
 GEN_VXFORM(vminsw, 1, 14),
+GEN_VXFORM_207(vminsd, 1, 15),
 GEN_VXFORM(vavgub, 1, 16),
 GEN_VXFORM(vavguh, 1, 17),
 GEN_VXFORM(vavguw, 1, 18),
-- 
1.7.1

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

* [Qemu-devel] [PATCH 15/28] target-ppc: Altivec 2.07: Pack Doubleword Instructions
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (13 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 14/28] target-ppc: Altivec 2.07: Vector Min/Max Doubleword Instructions Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 16/28] target-ppc: Altivec 2.07: Unpack Signed Word Instructions Tom Musta
                   ` (14 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds the Vector Pack Doubleword instructions introduced in
Power ISA Version 2.07:

 - Vector Pack Signed Doubleword Signed Saturate (vpksdss)
 - Vector Pack Signed Doubleword Unsigned Saturate (vpksdus)
 - Vector Pack Unsigned Doubleword Unsigned Modulo (vpkudum)
 - Vector Pack Unsigned Doubleword Unsigned Saturate (vpkudus)

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/helper.h     |    4 ++++
 target-ppc/int_helper.c |    4 ++++
 target-ppc/translate.c  |    8 ++++++++
 3 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index 38bebea..080142c 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -234,10 +234,14 @@ DEF_HELPER_4(vpkshss, void, env, avr, avr, avr)
 DEF_HELPER_4(vpkshus, void, env, avr, avr, avr)
 DEF_HELPER_4(vpkswss, void, env, avr, avr, avr)
 DEF_HELPER_4(vpkswus, void, env, avr, avr, avr)
+DEF_HELPER_4(vpksdss, void, env, avr, avr, avr)
+DEF_HELPER_4(vpksdus, void, env, avr, avr, avr)
 DEF_HELPER_4(vpkuhus, void, env, avr, avr, avr)
 DEF_HELPER_4(vpkuwus, void, env, avr, avr, avr)
+DEF_HELPER_4(vpkudus, void, env, avr, avr, avr)
 DEF_HELPER_4(vpkuhum, void, env, avr, avr, avr)
 DEF_HELPER_4(vpkuwum, void, env, avr, avr, avr)
+DEF_HELPER_4(vpkudum, void, env, avr, avr, avr)
 DEF_HELPER_3(vpkpx, void, avr, avr, avr)
 DEF_HELPER_5(vmhaddshs, void, env, avr, avr, avr, avr)
 DEF_HELPER_5(vmhraddshs, void, env, avr, avr, avr, avr)
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index fc2bff1..534efb5 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -1089,10 +1089,14 @@ VPK(shss, s16, s8, cvtshsb, 1)
 VPK(shus, s16, u8, cvtshub, 1)
 VPK(swss, s32, s16, cvtswsh, 1)
 VPK(swus, s32, u16, cvtswuh, 1)
+VPK(sdss, s64, s32, cvtsdsw, 1)
+VPK(sdus, s64, u32, cvtsduw, 1)
 VPK(uhus, u16, u8, cvtuhub, 1)
 VPK(uwus, u32, u16, cvtuwuh, 1)
+VPK(udus, u64, u32, cvtuduw, 1)
 VPK(uhum, u16, u8, I, 0)
 VPK(uwum, u32, u16, I, 0)
+VPK(udum, u64, u32, I, 0)
 #undef I
 #undef VPK
 #undef PKBIG
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index 4042717..6d80ffc 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -7010,12 +7010,16 @@ GEN_VXFORM(vsl, 2, 7);
 GEN_VXFORM(vsr, 2, 11);
 GEN_VXFORM_ENV(vpkuhum, 7, 0);
 GEN_VXFORM_ENV(vpkuwum, 7, 1);
+GEN_VXFORM_ENV(vpkudum, 7, 17);
 GEN_VXFORM_ENV(vpkuhus, 7, 2);
 GEN_VXFORM_ENV(vpkuwus, 7, 3);
+GEN_VXFORM_ENV(vpkudus, 7, 19);
 GEN_VXFORM_ENV(vpkshus, 7, 4);
 GEN_VXFORM_ENV(vpkswus, 7, 5);
+GEN_VXFORM_ENV(vpksdus, 7, 21);
 GEN_VXFORM_ENV(vpkshss, 7, 6);
 GEN_VXFORM_ENV(vpkswss, 7, 7);
+GEN_VXFORM_ENV(vpksdss, 7, 23);
 GEN_VXFORM(vpkpx, 7, 12);
 GEN_VXFORM_ENV(vsum4ubs, 4, 24);
 GEN_VXFORM_ENV(vsum4sbs, 4, 28);
@@ -10418,12 +10422,16 @@ GEN_VXFORM(vsl, 2, 7),
 GEN_VXFORM(vsr, 2, 11),
 GEN_VXFORM(vpkuhum, 7, 0),
 GEN_VXFORM(vpkuwum, 7, 1),
+GEN_VXFORM_207(vpkudum, 7, 17),
 GEN_VXFORM(vpkuhus, 7, 2),
 GEN_VXFORM(vpkuwus, 7, 3),
+GEN_VXFORM_207(vpkudus, 7, 19),
 GEN_VXFORM(vpkshus, 7, 4),
 GEN_VXFORM(vpkswus, 7, 5),
+GEN_VXFORM_207(vpksdus, 7, 21),
 GEN_VXFORM(vpkshss, 7, 6),
 GEN_VXFORM(vpkswss, 7, 7),
+GEN_VXFORM_207(vpksdss, 7, 23),
 GEN_VXFORM(vpkpx, 7, 12),
 GEN_VXFORM(vsum4ubs, 4, 24),
 GEN_VXFORM(vsum4sbs, 4, 28),
-- 
1.7.1

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

* [Qemu-devel] [PATCH 16/28] target-ppc: Altivec 2.07: Unpack Signed Word Instructions
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (14 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 15/28] target-ppc: Altivec 2.07: Pack " Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 17/28] target-ppc: Altivec 2.07: Vector Merge Instructions Tom Musta
                   ` (13 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds the Unpack Signed Word instructions introduced in
Power ISA Version 2.07:

  - Vector Unpack High Signed Word (vupkusw)
  - Vector Unpack Low Signed Word (vupklsw)

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/helper.h     |    2 ++
 target-ppc/int_helper.c |    2 ++
 target-ppc/translate.c  |    4 ++++
 3 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index 080142c..6a7e99f 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -224,8 +224,10 @@ DEF_HELPER_2(vupkhpx, void, avr, avr)
 DEF_HELPER_2(vupklpx, void, avr, avr)
 DEF_HELPER_2(vupkhsb, void, avr, avr)
 DEF_HELPER_2(vupkhsh, void, avr, avr)
+DEF_HELPER_2(vupkhsw, void, avr, avr)
 DEF_HELPER_2(vupklsb, void, avr, avr)
 DEF_HELPER_2(vupklsh, void, avr, avr)
+DEF_HELPER_2(vupklsw, void, avr, avr)
 DEF_HELPER_5(vmsumubm, void, env, avr, avr, avr, avr)
 DEF_HELPER_5(vmsummbm, void, env, avr, avr, avr, avr)
 DEF_HELPER_5(vsel, void, env, avr, avr, avr, avr)
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index 534efb5..56e8d9a 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -1524,8 +1524,10 @@ VUPKPX(hpx, UPKHI)
     }
 VUPK(hsb, s16, s8, UPKHI)
 VUPK(hsh, s32, s16, UPKHI)
+VUPK(hsw, s64, s32, UPKHI)
 VUPK(lsb, s16, s8, UPKLO)
 VUPK(lsh, s32, s16, UPKLO)
+VUPK(lsw, s64, s32, UPKLO)
 #undef VUPK
 #undef UPKHI
 #undef UPKLO
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index 6d80ffc..61f74f7 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -7147,8 +7147,10 @@ static void glue(gen_, name)(DisasContext *ctx)                         \
 
 GEN_VXFORM_NOA(vupkhsb, 7, 8);
 GEN_VXFORM_NOA(vupkhsh, 7, 9);
+GEN_VXFORM_NOA(vupkhsw, 7, 25);
 GEN_VXFORM_NOA(vupklsb, 7, 10);
 GEN_VXFORM_NOA(vupklsh, 7, 11);
+GEN_VXFORM_NOA(vupklsw, 7, 27);
 GEN_VXFORM_NOA(vupkhpx, 7, 13);
 GEN_VXFORM_NOA(vupklpx, 7, 15);
 GEN_VXFORM_NOA_ENV(vrefp, 5, 4);
@@ -10476,8 +10478,10 @@ GEN_VXFORM_SIMM(vspltisw, 6, 14),
     GEN_HANDLER(name, 0x04, opc2, opc3, 0x001f0000, PPC_ALTIVEC)
 GEN_VXFORM_NOA(vupkhsb, 7, 8),
 GEN_VXFORM_NOA(vupkhsh, 7, 9),
+GEN_VXFORM_207(vupkhsw, 7, 25),
 GEN_VXFORM_NOA(vupklsb, 7, 10),
 GEN_VXFORM_NOA(vupklsh, 7, 11),
+GEN_VXFORM_207(vupklsw, 7, 27),
 GEN_VXFORM_NOA(vupkhpx, 7, 13),
 GEN_VXFORM_NOA(vupklpx, 7, 15),
 GEN_VXFORM_NOA(vrefp, 5, 4),
-- 
1.7.1

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

* [Qemu-devel] [PATCH 17/28] target-ppc: Altivec 2.07: Vector Merge Instructions
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (15 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 16/28] target-ppc: Altivec 2.07: Unpack Signed Word Instructions Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 18/28] target-ppc: Altivec 2.07: Change Bit Masks to Support 64-bit Rotates and Shifts Tom Musta
                   ` (12 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds the Vector Merge Even Word (vmrgew) and Vector
Merge Odd Word (vmrgow) instructions introduced in Power ISA
Version 2.07.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/translate.c |   37 +++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index 61f74f7..4d3c73d 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -6963,6 +6963,41 @@ GEN_VXFORM(vmrghw, 6, 2);
 GEN_VXFORM(vmrglb, 6, 4);
 GEN_VXFORM(vmrglh, 6, 5);
 GEN_VXFORM(vmrglw, 6, 6);
+
+static void gen_vmrgew(DisasContext *ctx)
+{
+    TCGv_i64 tmp;
+    int VT, VA, VB;
+    if (unlikely(!ctx->altivec_enabled)) {
+        gen_exception(ctx, POWERPC_EXCP_VPU);
+        return;
+    }
+    VT = rD(ctx->opcode);
+    VA = rA(ctx->opcode);
+    VB = rB(ctx->opcode);
+    tmp = tcg_temp_new_i64();
+    tcg_gen_shri_i64(tmp, cpu_avrh[VB], 32);
+    tcg_gen_deposit_i64(cpu_avrh[VT], cpu_avrh[VA], tmp, 0, 32);
+    tcg_gen_shri_i64(tmp, cpu_avrl[VB], 32);
+    tcg_gen_deposit_i64(cpu_avrl[VT], cpu_avrl[VA], tmp, 0, 32);
+    tcg_temp_free_i64(tmp);
+}
+
+static void gen_vmrgow(DisasContext *ctx)
+{
+    int VT, VA, VB;
+    if (unlikely(!ctx->altivec_enabled)) {
+        gen_exception(ctx, POWERPC_EXCP_VPU);
+        return;
+    }
+    VT = rD(ctx->opcode);
+    VA = rA(ctx->opcode);
+    VB = rB(ctx->opcode);
+
+    tcg_gen_deposit_i64(cpu_avrh[VT], cpu_avrh[VB], cpu_avrh[VA], 32, 32);
+    tcg_gen_deposit_i64(cpu_avrl[VT], cpu_avrl[VB], cpu_avrl[VA], 32, 32);
+}
+
 GEN_VXFORM(vmuloub, 4, 0);
 GEN_VXFORM(vmulouh, 4, 1);
 GEN_VXFORM(vmulouw, 4, 2);
@@ -10380,6 +10415,8 @@ GEN_VXFORM(vmrghw, 6, 2),
 GEN_VXFORM(vmrglb, 6, 4),
 GEN_VXFORM(vmrglh, 6, 5),
 GEN_VXFORM(vmrglw, 6, 6),
+GEN_VXFORM_207(vmrgew, 6, 30),
+GEN_VXFORM_207(vmrgow, 6, 26),
 GEN_VXFORM(vmuloub, 4, 0),
 GEN_VXFORM(vmulouh, 4, 1),
 GEN_VXFORM_DUAL(vmulouw, vmuluwm, 4, 2, PPC_ALTIVEC, PPC_NONE),
-- 
1.7.1

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

* [Qemu-devel] [PATCH 18/28] target-ppc: Altivec 2.07: Change Bit Masks to Support 64-bit Rotates and Shifts
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (16 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 17/28] target-ppc: Altivec 2.07: Vector Merge Instructions Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 19/28] target-ppc: Altivec 2.07: Vector Doubleword Rotate and Shift Instructions Tom Musta
                   ` (11 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

Existing code in the VROTATE, VSL and VSR macros for the Altivec rotate and shift
helpers uses a formula to compute a bit mask used to extract the rotate/shift
amount from the VRB register.  What is desired is:

    mask = (1 << (3 + log2(sizeof(element)))) - 1

but what is implemented is:

    mask = (1 << (3 + (sizeof(element)/2))) - 1

This produces correct answers when "element" is uint8_t, uint16_t or uint_32t.  But
it breaks down when element is uint64_t.

This patch corrects the situation.  Since the mask is known at compile time, the
macros are changed to simply accept the mask as an argument.

Subsequent patches in this series will add double-word variants of rotates and
shifts and thus take advantage of this fix.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/int_helper.c |   40 +++++++++++++++-------------------------
 1 files changed, 15 insertions(+), 25 deletions(-)

diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index 56e8d9a..59b5a1f 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -1128,23 +1128,20 @@ VRFI(p, float_round_up)
 VRFI(z, float_round_to_zero)
 #undef VRFI
 
-#define VROTATE(suffix, element)                                        \
+#define VROTATE(suffix, element, mask)                                  \
     void helper_vrl##suffix(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)   \
     {                                                                   \
         int i;                                                          \
                                                                         \
         for (i = 0; i < ARRAY_SIZE(r->element); i++) {                  \
-            unsigned int mask = ((1 <<                                  \
-                                  (3 + (sizeof(a->element[0]) >> 1)))   \
-                                 - 1);                                  \
             unsigned int shift = b->element[i] & mask;                  \
             r->element[i] = (a->element[i] << shift) |                  \
                 (a->element[i] >> (sizeof(a->element[0]) * 8 - shift)); \
         }                                                               \
     }
-VROTATE(b, u8)
-VROTATE(h, u16)
-VROTATE(w, u32)
+VROTATE(b, u8, 0x7)
+VROTATE(h, u16, 0xF)
+VROTATE(w, u32, 0x1F)
 #undef VROTATE
 
 void helper_vrsqrtefp(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *b)
@@ -1225,23 +1222,20 @@ VSHIFT(r, RIGHT)
 #undef LEFT
 #undef RIGHT
 
-#define VSL(suffix, element)                                            \
+#define VSL(suffix, element, mask)                                      \
     void helper_vsl##suffix(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)   \
     {                                                                   \
         int i;                                                          \
                                                                         \
         for (i = 0; i < ARRAY_SIZE(r->element); i++) {                  \
-            unsigned int mask = ((1 <<                                  \
-                                  (3 + (sizeof(a->element[0]) >> 1)))   \
-                                 - 1);                                  \
             unsigned int shift = b->element[i] & mask;                  \
                                                                         \
             r->element[i] = a->element[i] << shift;                     \
         }                                                               \
     }
-VSL(b, u8)
-VSL(h, u16)
-VSL(w, u32)
+VSL(b, u8, 0x7)
+VSL(h, u16, 0x0F)
+VSL(w, u32, 0x1F)
 #undef VSL
 
 void helper_vsldoi(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, uint32_t shift)
@@ -1325,26 +1319,22 @@ VSPLTI(h, s16, int16_t)
 VSPLTI(w, s32, int32_t)
 #undef VSPLTI
 
-#define VSR(suffix, element)                                            \
+#define VSR(suffix, element, mask)                                      \
     void helper_vsr##suffix(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)   \
     {                                                                   \
         int i;                                                          \
                                                                         \
         for (i = 0; i < ARRAY_SIZE(r->element); i++) {                  \
-            unsigned int mask = ((1 <<                                  \
-                                  (3 + (sizeof(a->element[0]) >> 1)))   \
-                                 - 1);                                  \
             unsigned int shift = b->element[i] & mask;                  \
-                                                                        \
             r->element[i] = a->element[i] >> shift;                     \
         }                                                               \
     }
-VSR(ab, s8)
-VSR(ah, s16)
-VSR(aw, s32)
-VSR(b, u8)
-VSR(h, u16)
-VSR(w, u32)
+VSR(ab, s8, 0x7)
+VSR(ah, s16, 0xF)
+VSR(aw, s32, 0x1F)
+VSR(b, u8, 0x7)
+VSR(h, u16, 0xF)
+VSR(w, u32, 0x1F)
 #undef VSR
 
 void helper_vsro(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
-- 
1.7.1

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

* [Qemu-devel] [PATCH 19/28] target-ppc: Altivec 2.07: Vector Doubleword Rotate and Shift Instructions
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (17 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 18/28] target-ppc: Altivec 2.07: Change Bit Masks to Support 64-bit Rotates and Shifts Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 20/28] target-ppc: Altivec 2.07: Quadword Addition and Subtracation Tom Musta
                   ` (10 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds the vector doublword rotate and shift instructions
introduced in Power ISA Version 2.07:

  - Vector Rotate Left Doubleword instruction (vrld)
  - Vector Shift Left Doubleword (vsld)
  - Vector Shift Right Doubleword (vsrd)
  - Vector Shift Right Algegbraic Doubleword (vsrad)

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/helper.h     |    4 ++++
 target-ppc/int_helper.c |    4 ++++
 target-ppc/translate.c  |    8 ++++++++
 3 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index 6a7e99f..3201268 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -184,12 +184,15 @@ DEF_HELPER_3(vmuluwm, void, avr, avr, avr)
 DEF_HELPER_3(vsrab, void, avr, avr, avr)
 DEF_HELPER_3(vsrah, void, avr, avr, avr)
 DEF_HELPER_3(vsraw, void, avr, avr, avr)
+DEF_HELPER_3(vsrad, void, avr, avr, avr)
 DEF_HELPER_3(vsrb, void, avr, avr, avr)
 DEF_HELPER_3(vsrh, void, avr, avr, avr)
 DEF_HELPER_3(vsrw, void, avr, avr, avr)
+DEF_HELPER_3(vsrd, void, avr, avr, avr)
 DEF_HELPER_3(vslb, void, avr, avr, avr)
 DEF_HELPER_3(vslh, void, avr, avr, avr)
 DEF_HELPER_3(vslw, void, avr, avr, avr)
+DEF_HELPER_3(vsld, void, avr, avr, avr)
 DEF_HELPER_3(vslo, void, avr, avr, avr)
 DEF_HELPER_3(vsro, void, avr, avr, avr)
 DEF_HELPER_3(vaddcuw, void, avr, avr, avr)
@@ -211,6 +214,7 @@ DEF_HELPER_4(vsubuws, void, env, avr, avr, avr)
 DEF_HELPER_3(vrlb, void, avr, avr, avr)
 DEF_HELPER_3(vrlh, void, avr, avr, avr)
 DEF_HELPER_3(vrlw, void, avr, avr, avr)
+DEF_HELPER_3(vrld, void, avr, avr, avr)
 DEF_HELPER_3(vsl, void, avr, avr, avr)
 DEF_HELPER_3(vsr, void, avr, avr, avr)
 DEF_HELPER_4(vsldoi, void, avr, avr, avr, i32)
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index 59b5a1f..b4a7298 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -1142,6 +1142,7 @@ VRFI(z, float_round_to_zero)
 VROTATE(b, u8, 0x7)
 VROTATE(h, u16, 0xF)
 VROTATE(w, u32, 0x1F)
+VROTATE(d, u64, 0x3F)
 #undef VROTATE
 
 void helper_vrsqrtefp(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *b)
@@ -1236,6 +1237,7 @@ VSHIFT(r, RIGHT)
 VSL(b, u8, 0x7)
 VSL(h, u16, 0x0F)
 VSL(w, u32, 0x1F)
+VSL(d, u64, 0x3F)
 #undef VSL
 
 void helper_vsldoi(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, uint32_t shift)
@@ -1332,9 +1334,11 @@ VSPLTI(w, s32, int32_t)
 VSR(ab, s8, 0x7)
 VSR(ah, s16, 0xF)
 VSR(aw, s32, 0x1F)
+VSR(ad, s64, 0x3F)
 VSR(b, u8, 0x7)
 VSR(h, u16, 0xF)
 VSR(w, u32, 0x1F)
+VSR(d, u64, 0x3F)
 #undef VSR
 
 void helper_vsro(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index 4d3c73d..561d22d 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -7016,12 +7016,15 @@ GEN_VXFORM(vmulesw, 4, 14);
 GEN_VXFORM(vslb, 2, 4);
 GEN_VXFORM(vslh, 2, 5);
 GEN_VXFORM(vslw, 2, 6);
+GEN_VXFORM(vsld, 2, 23);
 GEN_VXFORM(vsrb, 2, 8);
 GEN_VXFORM(vsrh, 2, 9);
 GEN_VXFORM(vsrw, 2, 10);
+GEN_VXFORM(vsrd, 2, 27);
 GEN_VXFORM(vsrab, 2, 12);
 GEN_VXFORM(vsrah, 2, 13);
 GEN_VXFORM(vsraw, 2, 14);
+GEN_VXFORM(vsrad, 2, 15);
 GEN_VXFORM(vslo, 6, 16);
 GEN_VXFORM(vsro, 6, 17);
 GEN_VXFORM(vaddcuw, 0, 6);
@@ -7041,6 +7044,7 @@ GEN_VXFORM_ENV(vsubsws, 0, 30);
 GEN_VXFORM(vrlb, 2, 0);
 GEN_VXFORM(vrlh, 2, 1);
 GEN_VXFORM(vrlw, 2, 2);
+GEN_VXFORM(vrld, 2, 3);
 GEN_VXFORM(vsl, 2, 7);
 GEN_VXFORM(vsr, 2, 11);
 GEN_VXFORM_ENV(vpkuhum, 7, 0);
@@ -10432,12 +10436,15 @@ GEN_VXFORM_207(vmulesw, 4, 14),
 GEN_VXFORM(vslb, 2, 4),
 GEN_VXFORM(vslh, 2, 5),
 GEN_VXFORM(vslw, 2, 6),
+GEN_VXFORM_207(vsld, 2, 23),
 GEN_VXFORM(vsrb, 2, 8),
 GEN_VXFORM(vsrh, 2, 9),
 GEN_VXFORM(vsrw, 2, 10),
+GEN_VXFORM_207(vsrd, 2, 27),
 GEN_VXFORM(vsrab, 2, 12),
 GEN_VXFORM(vsrah, 2, 13),
 GEN_VXFORM(vsraw, 2, 14),
+GEN_VXFORM_207(vsrad, 2, 15),
 GEN_VXFORM(vslo, 6, 16),
 GEN_VXFORM(vsro, 6, 17),
 GEN_VXFORM(vaddcuw, 0, 6),
@@ -10457,6 +10464,7 @@ GEN_VXFORM(vsubsws, 0, 30),
 GEN_VXFORM(vrlb, 2, 0),
 GEN_VXFORM(vrlh, 2, 1),
 GEN_VXFORM(vrlw, 2, 2),
+GEN_VXFORM_207(vrld, 2, 3),
 GEN_VXFORM(vsl, 2, 7),
 GEN_VXFORM(vsr, 2, 11),
 GEN_VXFORM(vpkuhum, 7, 0),
-- 
1.7.1

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

* [Qemu-devel] [PATCH 20/28] target-ppc: Altivec 2.07: Quadword Addition and Subtracation
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (18 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 19/28] target-ppc: Altivec 2.07: Vector Doubleword Rotate and Shift Instructions Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 21/28] target-ppc: Altivec 2.07: vbpermq Instruction Tom Musta
                   ` (9 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds the Vector Quadword Addition and Subtraction instructions
introduced in Power ISA Version 2.07:

  - Vector Add Unsigned Quadword Modulo (vadduqm)
  - Vector Add & Write Carry Unsigned Quadword (vaddcuq)
  - Vector Add Extended Unsigned Quadword (vaddeuqm)
  - Vector Add Extended & Write Carry Unsigned Quadword (vaddecuq)
  - Vector Subtract Unsigned Quadword Modulo (vsubuqm)
  - Vector Subtract & Write Carry Unsigned Quadword (vsubcuq)
  - Vector Subtract Extended Unsigned Quadword (vsubeuqm)
  - Vector Subtract Extended & Write Carry Unsigned Quadword (vsubecuq)

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/helper.h     |    8 ++
 target-ppc/int_helper.c |  185 +++++++++++++++++++++++++++++++++++++++++++++++
 target-ppc/translate.c  |   18 +++++
 3 files changed, 211 insertions(+), 0 deletions(-)

diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index 3201268..1483930 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -211,6 +211,14 @@ DEF_HELPER_4(vadduws, void, env, avr, avr, avr)
 DEF_HELPER_4(vsububs, void, env, avr, avr, avr)
 DEF_HELPER_4(vsubuhs, void, env, avr, avr, avr)
 DEF_HELPER_4(vsubuws, void, env, avr, avr, avr)
+DEF_HELPER_3(vadduqm, void, avr, avr, avr)
+DEF_HELPER_4(vaddecuq, void, avr, avr, avr, avr)
+DEF_HELPER_4(vaddeuqm, void, avr, avr, avr, avr)
+DEF_HELPER_3(vaddcuq, void, avr, avr, avr)
+DEF_HELPER_3(vsubuqm, void, avr, avr, avr)
+DEF_HELPER_4(vsubecuq, void, avr, avr, avr, avr)
+DEF_HELPER_4(vsubeuqm, void, avr, avr, avr, avr)
+DEF_HELPER_3(vsubcuq, void, avr, avr, avr)
 DEF_HELPER_3(vrlb, void, avr, avr, avr)
 DEF_HELPER_3(vrlh, void, avr, avr, avr)
 DEF_HELPER_3(vrlw, void, avr, avr, avr)
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index b4a7298..72fb13c 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -1568,6 +1568,191 @@ VGENERIC_DO(popcntd, u64)
 
 #undef VGENERIC_DO
 
+#if defined(HOST_WORDS_BIGENDIAN)
+#define QW_ONE { .u64 = { 0, 1 } }
+#else
+#define QW_ONE { .u64 = { 1, 0 } }
+#endif
+
+#ifndef CONFIG_INT128
+
+static inline void avr_qw_not(ppc_avr_t *t, ppc_avr_t a)
+{
+    t->u64[0] = ~a.u64[0];
+    t->u64[1] = ~a.u64[1];
+}
+
+static int avr_qw_cmpu(ppc_avr_t a, ppc_avr_t b)
+{
+    if (a.u64[HI_IDX] < b.u64[HI_IDX]) {
+        return -1;
+    } else if (a.u64[HI_IDX] > b.u64[HI_IDX]) {
+        return 1;
+    } else if (a.u64[LO_IDX] < b.u64[LO_IDX]) {
+        return -1;
+    } else if (a.u64[LO_IDX] > b.u64[LO_IDX]) {
+        return 1;
+    } else {
+        return 0;
+    }
+}
+
+static void avr_qw_add(ppc_avr_t *t, ppc_avr_t a, ppc_avr_t b)
+{
+    t->u64[LO_IDX] = a.u64[LO_IDX] + b.u64[LO_IDX];
+    t->u64[HI_IDX] = a.u64[HI_IDX] + b.u64[HI_IDX] +
+                     (~a.u64[LO_IDX] < b.u64[LO_IDX]);
+}
+
+static int avr_qw_addc(ppc_avr_t *t, ppc_avr_t a, ppc_avr_t b)
+{
+    ppc_avr_t not_a;
+    t->u64[LO_IDX] = a.u64[LO_IDX] + b.u64[LO_IDX];
+    t->u64[HI_IDX] = a.u64[HI_IDX] + b.u64[HI_IDX] +
+                     (~a.u64[LO_IDX] < b.u64[LO_IDX]);
+    avr_qw_not(&not_a, a);
+    return avr_qw_cmpu(not_a, b) < 0;
+}
+
+#endif
+
+void helper_vadduqm(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
+{
+#ifdef CONFIG_INT128
+    r->u128 = a->u128 + b->u128;
+#else
+    avr_qw_add(r, *a, *b);
+#endif
+}
+
+void helper_vaddeuqm(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c)
+{
+#ifdef CONFIG_INT128
+    r->u128 = a->u128 + b->u128 + (c->u128 & 1);
+#else
+
+    if (c->u64[LO_IDX] & 1) {
+        ppc_avr_t tmp;
+
+        tmp.u64[HI_IDX] = 0;
+        tmp.u64[LO_IDX] = c->u64[LO_IDX] & 1;
+        avr_qw_add(&tmp, *a, tmp);
+        avr_qw_add(r, tmp, *b);
+    } else {
+        avr_qw_add(r, *a, *b);
+    }
+#endif
+}
+
+void helper_vaddcuq(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
+{
+#ifdef CONFIG_INT128
+    r->u128 = (~a->u128 < b->u128);
+#else
+    ppc_avr_t not_a;
+
+    avr_qw_not(&not_a, *a);
+
+    r->u64[HI_IDX] = 0;
+    r->u64[LO_IDX] = (avr_qw_cmpu(not_a, *b) < 0);
+#endif
+}
+
+void helper_vaddecuq(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c)
+{
+#ifdef CONFIG_INT128
+    int carry_out = (~a->u128 < b->u128);
+    if (!carry_out && (c->u128 & 1)) {
+        carry_out = ((a->u128 + b->u128 + 1) == 0) &&
+                    ((a->u128 != 0) || (b->u128 != 0));
+    }
+    r->u128 = carry_out;
+#else
+
+    int carry_in = c->u64[LO_IDX] & 1;
+    int carry_out = 0;
+    ppc_avr_t tmp;
+
+    carry_out = avr_qw_addc(&tmp, *a, *b);
+
+    if (!carry_out && carry_in) {
+        ppc_avr_t one = QW_ONE;
+        carry_out = avr_qw_addc(&tmp, tmp, one);
+    }
+    r->u64[HI_IDX] = 0;
+    r->u64[LO_IDX] = carry_out;
+#endif
+}
+
+void helper_vsubuqm(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
+{
+#ifdef CONFIG_INT128
+    r->u128 = a->u128 - b->u128;
+#else
+    ppc_avr_t tmp;
+    ppc_avr_t one = QW_ONE;
+
+    avr_qw_not(&tmp, *b);
+    avr_qw_add(&tmp, *a, tmp);
+    avr_qw_add(r, tmp, one);
+#endif
+}
+
+void helper_vsubeuqm(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c)
+{
+#ifdef CONFIG_INT128
+    r->u128 = a->u128 + ~b->u128 + (c->u128 & 1);
+#else
+    ppc_avr_t tmp, sum;
+
+    avr_qw_not(&tmp, *b);
+    avr_qw_add(&sum, *a, tmp);
+
+    tmp.u64[HI_IDX] = 0;
+    tmp.u64[LO_IDX] = c->u64[LO_IDX] & 1;
+    avr_qw_add(r, sum, tmp);
+#endif
+}
+
+void helper_vsubcuq(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
+{
+#ifdef CONFIG_INT128
+    r->u128 = (~a->u128 < ~b->u128) ||
+                 (a->u128 + ~b->u128 == (__uint128_t)-1);
+#else
+    int carry = (avr_qw_cmpu(*a, *b) > 0);
+    if (!carry) {
+        ppc_avr_t tmp;
+        avr_qw_not(&tmp, *b);
+        avr_qw_add(&tmp, *a, tmp);
+        carry = ((tmp.s64[HI_IDX] == -1ull) && (tmp.s64[LO_IDX] == -1ull));
+    }
+    r->u64[HI_IDX] = 0;
+    r->u64[LO_IDX] = carry;
+#endif
+}
+
+void helper_vsubecuq(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c)
+{
+#ifdef CONFIG_INT128
+    r->u128 =
+        (~a->u128 < ~b->u128) ||
+        ((c->u128 & 1) && (a->u128 + ~b->u128 == (__uint128_t)-1));
+#else
+    int carry_in = c->u64[LO_IDX] & 1;
+    int carry_out = (avr_qw_cmpu(*a, *b) > 0);
+    if (!carry_out && carry_in) {
+        ppc_avr_t tmp;
+        avr_qw_not(&tmp, *b);
+        avr_qw_add(&tmp, *a, tmp);
+        carry_out = ((tmp.u64[HI_IDX] == -1ull) && (tmp.u64[LO_IDX] == -1ull));
+    }
+
+    r->u64[HI_IDX] = 0;
+    r->u64[LO_IDX] = carry_out;
+#endif
+}
+
 
 #undef VECTOR_FOR_INORDER_I
 #undef HI_IDX
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index 561d22d..ce2f915 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -7041,6 +7041,18 @@ GEN_VXFORM_ENV(vsubuws, 0, 26);
 GEN_VXFORM_ENV(vsubsbs, 0, 28);
 GEN_VXFORM_ENV(vsubshs, 0, 29);
 GEN_VXFORM_ENV(vsubsws, 0, 30);
+GEN_VXFORM(vadduqm, 0, 4);
+GEN_VXFORM(vaddcuq, 0, 5);
+GEN_VXFORM3(vaddeuqm, 30, 0);
+GEN_VXFORM3(vaddecuq, 30, 0);
+GEN_VXFORM_DUAL(vaddeuqm, PPC_NONE, PPC2_ALTIVEC_207, \
+            vaddecuq, PPC_NONE, PPC2_ALTIVEC_207)
+GEN_VXFORM(vsubuqm, 0, 20);
+GEN_VXFORM(vsubcuq, 0, 21);
+GEN_VXFORM3(vsubeuqm, 31, 0);
+GEN_VXFORM3(vsubecuq, 31, 0);
+GEN_VXFORM_DUAL(vsubeuqm, PPC_NONE, PPC2_ALTIVEC_207, \
+            vsubecuq, PPC_NONE, PPC2_ALTIVEC_207)
 GEN_VXFORM(vrlb, 2, 0);
 GEN_VXFORM(vrlh, 2, 1);
 GEN_VXFORM(vrlw, 2, 2);
@@ -10461,6 +10473,12 @@ GEN_VXFORM(vsubuws, 0, 26),
 GEN_VXFORM(vsubsbs, 0, 28),
 GEN_VXFORM(vsubshs, 0, 29),
 GEN_VXFORM(vsubsws, 0, 30),
+GEN_VXFORM_207(vadduqm, 0, 4),
+GEN_VXFORM_207(vaddcuq, 0, 5),
+GEN_VXFORM_DUAL(vaddeuqm, vaddecuq, 30, 0xFF, PPC_NONE, PPC2_ALTIVEC_207),
+GEN_VXFORM_207(vsubuqm, 0, 20),
+GEN_VXFORM_207(vsubcuq, 0, 21),
+GEN_VXFORM_DUAL(vsubeuqm, vsubecuq, 31, 0xFF, PPC_NONE, PPC2_ALTIVEC_207),
 GEN_VXFORM(vrlb, 2, 0),
 GEN_VXFORM(vrlh, 2, 1),
 GEN_VXFORM(vrlw, 2, 2),
-- 
1.7.1

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

* [Qemu-devel] [PATCH 21/28] target-ppc: Altivec 2.07: vbpermq Instruction
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (19 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 20/28] target-ppc: Altivec 2.07: Quadword Addition and Subtracation Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 22/28] target-ppc: Altivec 2.07: Doubleword Compares Tom Musta
                   ` (8 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds the Vector Bit Permute Quadword (vbpermq) instruction
introduced in Power ISA Version 2.07.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/helper.h     |    1 +
 target-ppc/int_helper.c |   31 +++++++++++++++++++++++++++++++
 target-ppc/translate.c  |    2 ++
 3 files changed, 34 insertions(+), 0 deletions(-)

diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index 1483930..ca1dc83 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -303,6 +303,7 @@ DEF_HELPER_2(vpopcntb, void, avr, avr)
 DEF_HELPER_2(vpopcnth, void, avr, avr)
 DEF_HELPER_2(vpopcntw, void, avr, avr)
 DEF_HELPER_2(vpopcntd, void, avr, avr)
+DEF_HELPER_3(vbpermq, void, avr, avr, avr)
 
 DEF_HELPER_2(xsadddp, void, env, i32)
 DEF_HELPER_2(xssubdp, void, env, i32)
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index 72fb13c..5885b7e 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -1039,6 +1039,37 @@ void helper_vperm(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b,
 }
 
 #if defined(HOST_WORDS_BIGENDIAN)
+#define VBPERMQ_INDEX(avr, i) ((avr)->u8[(i)])
+#define VBPERMQ_DW(index) (((index) & 0x40) != 0)
+#else
+#define VBPERMQ_INDEX(avr, i) ((avr)->u8[15-(i)])
+#define VBPERMQ_DW(index) (((index) & 0x40) == 0)
+#endif
+
+void helper_vbpermq(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
+{
+    int i;
+    uint64_t perm = 0;
+
+    VECTOR_FOR_INORDER_I(i, u8) {
+        int index = VBPERMQ_INDEX(b, i);
+
+        if (index < 128) {
+            uint64_t mask = (1ull << (63-(index & 0x3F)));
+            if (a->u64[VBPERMQ_DW(index)] & mask) {
+                perm |= (0x8000 >> i);
+            }
+        }
+    }
+
+    r->u64[HI_IDX] = perm;
+    r->u64[LO_IDX] = 0;
+}
+
+#undef VBPERMQ_INDEX
+#undef VBPERMQ_DW
+
+#if defined(HOST_WORDS_BIGENDIAN)
 #define PKBIG 1
 #else
 #define PKBIG 0
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index ce2f915..1be5c5f 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -7358,6 +7358,7 @@ GEN_VXFORM_DUAL(vclzw, PPC_NONE, PPC2_ALTIVEC_207, \
                 vpopcntw, PPC_NONE, PPC2_ALTIVEC_207)
 GEN_VXFORM_DUAL(vclzd, PPC_NONE, PPC2_ALTIVEC_207, \
                 vpopcntd, PPC_NONE, PPC2_ALTIVEC_207)
+GEN_VXFORM(vbpermq, 6, 21);
 
 /***                           VSX extension                               ***/
 
@@ -10582,6 +10583,7 @@ GEN_VXFORM_DUAL(vclzh, vpopcnth, 1, 29, PPC_NONE, PPC2_ALTIVEC_207),
 GEN_VXFORM_DUAL(vclzw, vpopcntw, 1, 30, PPC_NONE, PPC2_ALTIVEC_207),
 GEN_VXFORM_DUAL(vclzd, vpopcntd, 1, 31, PPC_NONE, PPC2_ALTIVEC_207),
 
+GEN_VXFORM_207(vbpermq, 6, 21),
 
 GEN_HANDLER_E(lxsdx, 0x1F, 0x0C, 0x12, 0, PPC_NONE, PPC2_VSX),
 GEN_HANDLER_E(lxsiwax, 0x1F, 0x0C, 0x02, 0, PPC_NONE, PPC2_VSX207),
-- 
1.7.1

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

* [Qemu-devel] [PATCH 22/28] target-ppc: Altivec 2.07: Doubleword Compares
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (20 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 21/28] target-ppc: Altivec 2.07: vbpermq Instruction Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 23/28] target-ppc: Altivec 2.07: Vector Gather Bits by Bytes Tom Musta
                   ` (7 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds the Vector Compare Doubleword instructions introduced
by Power ISA Version 2.07:

  - Vector Compare Equal to Unsigned Doubleword (vcmpequd)
  - Vector Compare Greater Than Signed Doubleword (vcmpgtsd)
  - Vector Compare Greater Than Unsigned Doubleword (vcmpgtud)

These instructions are encoded with bit 31 set to 1 and so are duals with
vcmpeqfp, vcmpgtfp and vcmpbfp respectively.

The helper macro for integer compares is enhanced to account for 64-bit
operands.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/helper.h     |    6 ++++++
 target-ppc/int_helper.c |   14 ++++++++++----
 target-ppc/translate.c  |   16 +++++++++++++---
 3 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index ca1dc83..9613654 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -139,12 +139,15 @@ DEF_HELPER_3(vmaxud, void, avr, avr, avr)
 DEF_HELPER_4(vcmpequb, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpequh, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpequw, void, env, avr, avr, avr)
+DEF_HELPER_4(vcmpequd, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpgtub, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpgtuh, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpgtuw, void, env, avr, avr, avr)
+DEF_HELPER_4(vcmpgtud, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpgtsb, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpgtsh, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpgtsw, void, env, avr, avr, avr)
+DEF_HELPER_4(vcmpgtsd, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpeqfp, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpgefp, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpgtfp, void, env, avr, avr, avr)
@@ -152,12 +155,15 @@ DEF_HELPER_4(vcmpbfp, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpequb_dot, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpequh_dot, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpequw_dot, void, env, avr, avr, avr)
+DEF_HELPER_4(vcmpequd_dot, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpgtub_dot, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpgtuh_dot, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpgtuw_dot, void, env, avr, avr, avr)
+DEF_HELPER_4(vcmpgtud_dot, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpgtsb_dot, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpgtsh_dot, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpgtsw_dot, void, env, avr, avr, avr)
+DEF_HELPER_4(vcmpgtsd_dot, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpeqfp_dot, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpgefp_dot, void, env, avr, avr, avr)
 DEF_HELPER_4(vcmpgtfp_dot, void, env, avr, avr, avr)
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index 5885b7e..27a34c0 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -626,15 +626,18 @@ VCF(sx, int32_to_float32, s32)
     void helper_vcmp##suffix(CPUPPCState *env, ppc_avr_t *r,            \
                              ppc_avr_t *a, ppc_avr_t *b)                \
     {                                                                   \
-        uint32_t ones = (uint32_t)-1;                                   \
-        uint32_t all = ones;                                            \
-        uint32_t none = 0;                                              \
+        uint64_t ones = (uint64_t)-1;                                   \
+        uint64_t all = ones;                                            \
+        uint64_t none = 0;                                              \
         int i;                                                          \
                                                                         \
         for (i = 0; i < ARRAY_SIZE(r->element); i++) {                  \
-            uint32_t result = (a->element[i] compare b->element[i] ?    \
+            uint64_t result = (a->element[i] compare b->element[i] ?    \
                                ones : 0x0);                             \
             switch (sizeof(a->element[0])) {                            \
+            case 8:                                                     \
+                r->u64[i] = result;                                     \
+                break;                                                  \
             case 4:                                                     \
                 r->u32[i] = result;                                     \
                 break;                                                  \
@@ -658,12 +661,15 @@ VCF(sx, int32_to_float32, s32)
 VCMP(equb, ==, u8)
 VCMP(equh, ==, u16)
 VCMP(equw, ==, u32)
+VCMP(equd, ==, u64)
 VCMP(gtub, >, u8)
 VCMP(gtuh, >, u16)
 VCMP(gtuw, >, u32)
+VCMP(gtud, >, u64)
 VCMP(gtsb, >, s8)
 VCMP(gtsh, >, s16)
 VCMP(gtsw, >, s32)
+VCMP(gtsd, >, s64)
 #undef VCMP_DO
 #undef VCMP
 
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index 1be5c5f..f15c21e 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -7134,17 +7134,27 @@ static void glue(gen_, name0##_##name1)(DisasContext *ctx)             \
 GEN_VXRFORM(vcmpequb, 3, 0)
 GEN_VXRFORM(vcmpequh, 3, 1)
 GEN_VXRFORM(vcmpequw, 3, 2)
+GEN_VXRFORM(vcmpequd, 3, 3)
 GEN_VXRFORM(vcmpgtsb, 3, 12)
 GEN_VXRFORM(vcmpgtsh, 3, 13)
 GEN_VXRFORM(vcmpgtsw, 3, 14)
+GEN_VXRFORM(vcmpgtsd, 3, 15)
 GEN_VXRFORM(vcmpgtub, 3, 8)
 GEN_VXRFORM(vcmpgtuh, 3, 9)
 GEN_VXRFORM(vcmpgtuw, 3, 10)
+GEN_VXRFORM(vcmpgtud, 3, 11)
 GEN_VXRFORM(vcmpeqfp, 3, 3)
 GEN_VXRFORM(vcmpgefp, 3, 7)
 GEN_VXRFORM(vcmpgtfp, 3, 11)
 GEN_VXRFORM(vcmpbfp, 3, 15)
 
+GEN_VXRFORM_DUAL(vcmpeqfp, PPC_ALTIVEC, PPC_NONE, \
+                 vcmpequd, PPC_NONE, PPC2_ALTIVEC_207)
+GEN_VXRFORM_DUAL(vcmpbfp, PPC_ALTIVEC, PPC_NONE, \
+                 vcmpgtsd, PPC_NONE, PPC2_ALTIVEC_207)
+GEN_VXRFORM_DUAL(vcmpgtfp, PPC_ALTIVEC, PPC_NONE, \
+                 vcmpgtud, PPC_NONE, PPC2_ALTIVEC_207)
+
 #define GEN_VXFORM_SIMM(name, opc2, opc3)                               \
 static void glue(gen_, name)(DisasContext *ctx)                         \
     {                                                                   \
@@ -10525,10 +10535,10 @@ GEN_VXRFORM(vcmpgtsw, 3, 14)
 GEN_VXRFORM(vcmpgtub, 3, 8)
 GEN_VXRFORM(vcmpgtuh, 3, 9)
 GEN_VXRFORM(vcmpgtuw, 3, 10)
-GEN_VXRFORM(vcmpeqfp, 3, 3)
+GEN_VXRFORM_DUAL(vcmpeqfp, vcmpequd, 3, 3, PPC_ALTIVEC, PPC_NONE)
 GEN_VXRFORM(vcmpgefp, 3, 7)
-GEN_VXRFORM(vcmpgtfp, 3, 11)
-GEN_VXRFORM(vcmpbfp, 3, 15)
+GEN_VXRFORM_DUAL(vcmpgtfp, vcmpgtud, 3, 11, PPC_ALTIVEC, PPC_NONE)
+GEN_VXRFORM_DUAL(vcmpbfp, vcmpgtsd, 3, 15, PPC_ALTIVEC, PPC_NONE)
 
 #undef GEN_VXFORM_SIMM
 #define GEN_VXFORM_SIMM(name, opc2, opc3)                               \
-- 
1.7.1

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

* [Qemu-devel] [PATCH 23/28] target-ppc: Altivec 2.07: Vector Gather Bits by Bytes
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (21 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 22/28] target-ppc: Altivec 2.07: Doubleword Compares Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-24 17:16   ` Richard Henderson
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 24/28] target-ppc: Altivec 2.07: Vector Polynomial Multiply Sum Tom Musta
                   ` (6 subsequent siblings)
  29 siblings, 1 reply; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds the Vector Gather Bits by Bytes Doubleword (vgbbd)
instruction which is introduced in Power ISA Version 2.07.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/helper.h     |    1 +
 target-ppc/int_helper.c |  276 +++++++++++++++++++++++++++++++++++++++++++++++
 target-ppc/translate.c  |    2 +
 3 files changed, 279 insertions(+), 0 deletions(-)

diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index 9613654..aca712f 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -310,6 +310,7 @@ DEF_HELPER_2(vpopcnth, void, avr, avr)
 DEF_HELPER_2(vpopcntw, void, avr, avr)
 DEF_HELPER_2(vpopcntd, void, avr, avr)
 DEF_HELPER_3(vbpermq, void, avr, avr, avr)
+DEF_HELPER_2(vgbbd, void, avr, avr)
 
 DEF_HELPER_2(xsadddp, void, env, i32)
 DEF_HELPER_2(xssubdp, void, env, i32)
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index 27a34c0..cd0b88a 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -1075,6 +1075,282 @@ void helper_vbpermq(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
 #undef VBPERMQ_INDEX
 #undef VBPERMQ_DW
 
+uint64_t VGBBD_MASKS[256] = {
+    0x0000000000000000ull, /* 00 */
+    0x0000000000000080ull, /* 01 */
+    0x0000000000008000ull, /* 02 */
+    0x0000000000008080ull, /* 03 */
+    0x0000000000800000ull, /* 04 */
+    0x0000000000800080ull, /* 05 */
+    0x0000000000808000ull, /* 06 */
+    0x0000000000808080ull, /* 07 */
+    0x0000000080000000ull, /* 08 */
+    0x0000000080000080ull, /* 09 */
+    0x0000000080008000ull, /* 0A */
+    0x0000000080008080ull, /* 0B */
+    0x0000000080800000ull, /* 0C */
+    0x0000000080800080ull, /* 0D */
+    0x0000000080808000ull, /* 0E */
+    0x0000000080808080ull, /* 0F */
+    0x0000008000000000ull, /* 10 */
+    0x0000008000000080ull, /* 11 */
+    0x0000008000008000ull, /* 12 */
+    0x0000008000008080ull, /* 13 */
+    0x0000008000800000ull, /* 14 */
+    0x0000008000800080ull, /* 15 */
+    0x0000008000808000ull, /* 16 */
+    0x0000008000808080ull, /* 17 */
+    0x0000008080000000ull, /* 18 */
+    0x0000008080000080ull, /* 19 */
+    0x0000008080008000ull, /* 1A */
+    0x0000008080008080ull, /* 1B */
+    0x0000008080800000ull, /* 1C */
+    0x0000008080800080ull, /* 1D */
+    0x0000008080808000ull, /* 1E */
+    0x0000008080808080ull, /* 1F */
+    0x0000800000000000ull, /* 20 */
+    0x0000800000000080ull, /* 21 */
+    0x0000800000008000ull, /* 22 */
+    0x0000800000008080ull, /* 23 */
+    0x0000800000800000ull, /* 24 */
+    0x0000800000800080ull, /* 25 */
+    0x0000800000808000ull, /* 26 */
+    0x0000800000808080ull, /* 27 */
+    0x0000800080000000ull, /* 28 */
+    0x0000800080000080ull, /* 29 */
+    0x0000800080008000ull, /* 2A */
+    0x0000800080008080ull, /* 2B */
+    0x0000800080800000ull, /* 2C */
+    0x0000800080800080ull, /* 2D */
+    0x0000800080808000ull, /* 2E */
+    0x0000800080808080ull, /* 2F */
+    0x0000808000000000ull, /* 30 */
+    0x0000808000000080ull, /* 31 */
+    0x0000808000008000ull, /* 32 */
+    0x0000808000008080ull, /* 33 */
+    0x0000808000800000ull, /* 34 */
+    0x0000808000800080ull, /* 35 */
+    0x0000808000808000ull, /* 36 */
+    0x0000808000808080ull, /* 37 */
+    0x0000808080000000ull, /* 38 */
+    0x0000808080000080ull, /* 39 */
+    0x0000808080008000ull, /* 3A */
+    0x0000808080008080ull, /* 3B */
+    0x0000808080800000ull, /* 3C */
+    0x0000808080800080ull, /* 3D */
+    0x0000808080808000ull, /* 3E */
+    0x0000808080808080ull, /* 3F */
+    0x0080000000000000ull, /* 40 */
+    0x0080000000000080ull, /* 41 */
+    0x0080000000008000ull, /* 42 */
+    0x0080000000008080ull, /* 43 */
+    0x0080000000800000ull, /* 44 */
+    0x0080000000800080ull, /* 45 */
+    0x0080000000808000ull, /* 46 */
+    0x0080000000808080ull, /* 47 */
+    0x0080000080000000ull, /* 48 */
+    0x0080000080000080ull, /* 49 */
+    0x0080000080008000ull, /* 4A */
+    0x0080000080008080ull, /* 4B */
+    0x0080000080800000ull, /* 4C */
+    0x0080000080800080ull, /* 4D */
+    0x0080000080808000ull, /* 4E */
+    0x0080000080808080ull, /* 4F */
+    0x0080008000000000ull, /* 50 */
+    0x0080008000000080ull, /* 51 */
+    0x0080008000008000ull, /* 52 */
+    0x0080008000008080ull, /* 53 */
+    0x0080008000800000ull, /* 54 */
+    0x0080008000800080ull, /* 55 */
+    0x0080008000808000ull, /* 56 */
+    0x0080008000808080ull, /* 57 */
+    0x0080008080000000ull, /* 58 */
+    0x0080008080000080ull, /* 59 */
+    0x0080008080008000ull, /* 5A */
+    0x0080008080008080ull, /* 5B */
+    0x0080008080800000ull, /* 5C */
+    0x0080008080800080ull, /* 5D */
+    0x0080008080808000ull, /* 5E */
+    0x0080008080808080ull, /* 5F */
+    0x0080800000000000ull, /* 60 */
+    0x0080800000000080ull, /* 61 */
+    0x0080800000008000ull, /* 62 */
+    0x0080800000008080ull, /* 63 */
+    0x0080800000800000ull, /* 64 */
+    0x0080800000800080ull, /* 65 */
+    0x0080800000808000ull, /* 66 */
+    0x0080800000808080ull, /* 67 */
+    0x0080800080000000ull, /* 68 */
+    0x0080800080000080ull, /* 69 */
+    0x0080800080008000ull, /* 6A */
+    0x0080800080008080ull, /* 6B */
+    0x0080800080800000ull, /* 6C */
+    0x0080800080800080ull, /* 6D */
+    0x0080800080808000ull, /* 6E */
+    0x0080800080808080ull, /* 6F */
+    0x0080808000000000ull, /* 70 */
+    0x0080808000000080ull, /* 71 */
+    0x0080808000008000ull, /* 72 */
+    0x0080808000008080ull, /* 73 */
+    0x0080808000800000ull, /* 74 */
+    0x0080808000800080ull, /* 75 */
+    0x0080808000808000ull, /* 76 */
+    0x0080808000808080ull, /* 77 */
+    0x0080808080000000ull, /* 78 */
+    0x0080808080000080ull, /* 79 */
+    0x0080808080008000ull, /* 7A */
+    0x0080808080008080ull, /* 7B */
+    0x0080808080800000ull, /* 7C */
+    0x0080808080800080ull, /* 7D */
+    0x0080808080808000ull, /* 7E */
+    0x0080808080808080ull, /* 7F */
+    0x8000000000000000ull, /* 80 */
+    0x8000000000000080ull, /* 81 */
+    0x8000000000008000ull, /* 82 */
+    0x8000000000008080ull, /* 83 */
+    0x8000000000800000ull, /* 84 */
+    0x8000000000800080ull, /* 85 */
+    0x8000000000808000ull, /* 86 */
+    0x8000000000808080ull, /* 87 */
+    0x8000000080000000ull, /* 88 */
+    0x8000000080000080ull, /* 89 */
+    0x8000000080008000ull, /* 8A */
+    0x8000000080008080ull, /* 8B */
+    0x8000000080800000ull, /* 8C */
+    0x8000000080800080ull, /* 8D */
+    0x8000000080808000ull, /* 8E */
+    0x8000000080808080ull, /* 8F */
+    0x8000008000000000ull, /* 90 */
+    0x8000008000000080ull, /* 91 */
+    0x8000008000008000ull, /* 92 */
+    0x8000008000008080ull, /* 93 */
+    0x8000008000800000ull, /* 94 */
+    0x8000008000800080ull, /* 95 */
+    0x8000008000808000ull, /* 96 */
+    0x8000008000808080ull, /* 97 */
+    0x8000008080000000ull, /* 98 */
+    0x8000008080000080ull, /* 99 */
+    0x8000008080008000ull, /* 9A */
+    0x8000008080008080ull, /* 9B */
+    0x8000008080800000ull, /* 9C */
+    0x8000008080800080ull, /* 9D */
+    0x8000008080808000ull, /* 9E */
+    0x8000008080808080ull, /* 9F */
+    0x8000800000000000ull, /* A0 */
+    0x8000800000000080ull, /* A1 */
+    0x8000800000008000ull, /* A2 */
+    0x8000800000008080ull, /* A3 */
+    0x8000800000800000ull, /* A4 */
+    0x8000800000800080ull, /* A5 */
+    0x8000800000808000ull, /* A6 */
+    0x8000800000808080ull, /* A7 */
+    0x8000800080000000ull, /* A8 */
+    0x8000800080000080ull, /* A9 */
+    0x8000800080008000ull, /* AA */
+    0x8000800080008080ull, /* AB */
+    0x8000800080800000ull, /* AC */
+    0x8000800080800080ull, /* AD */
+    0x8000800080808000ull, /* AE */
+    0x8000800080808080ull, /* AF */
+    0x8000808000000000ull, /* B0 */
+    0x8000808000000080ull, /* B1 */
+    0x8000808000008000ull, /* B2 */
+    0x8000808000008080ull, /* B3 */
+    0x8000808000800000ull, /* B4 */
+    0x8000808000800080ull, /* B5 */
+    0x8000808000808000ull, /* B6 */
+    0x8000808000808080ull, /* B7 */
+    0x8000808080000000ull, /* B8 */
+    0x8000808080000080ull, /* B9 */
+    0x8000808080008000ull, /* BA */
+    0x8000808080008080ull, /* BB */
+    0x8000808080800000ull, /* BC */
+    0x8000808080800080ull, /* BD */
+    0x8000808080808000ull, /* BE */
+    0x8000808080808080ull, /* BF */
+    0x8080000000000000ull, /* C0 */
+    0x8080000000000080ull, /* C1 */
+    0x8080000000008000ull, /* C2 */
+    0x8080000000008080ull, /* C3 */
+    0x8080000000800000ull, /* C4 */
+    0x8080000000800080ull, /* C5 */
+    0x8080000000808000ull, /* C6 */
+    0x8080000000808080ull, /* C7 */
+    0x8080000080000000ull, /* C8 */
+    0x8080000080000080ull, /* C9 */
+    0x8080000080008000ull, /* CA */
+    0x8080000080008080ull, /* CB */
+    0x8080000080800000ull, /* CC */
+    0x8080000080800080ull, /* CD */
+    0x8080000080808000ull, /* CE */
+    0x8080000080808080ull, /* CF */
+    0x8080008000000000ull, /* D0 */
+    0x8080008000000080ull, /* D1 */
+    0x8080008000008000ull, /* D2 */
+    0x8080008000008080ull, /* D3 */
+    0x8080008000800000ull, /* D4 */
+    0x8080008000800080ull, /* D5 */
+    0x8080008000808000ull, /* D6 */
+    0x8080008000808080ull, /* D7 */
+    0x8080008080000000ull, /* D8 */
+    0x8080008080000080ull, /* D9 */
+    0x8080008080008000ull, /* DA */
+    0x8080008080008080ull, /* DB */
+    0x8080008080800000ull, /* DC */
+    0x8080008080800080ull, /* DD */
+    0x8080008080808000ull, /* DE */
+    0x8080008080808080ull, /* DF */
+    0x8080800000000000ull, /* E0 */
+    0x8080800000000080ull, /* E1 */
+    0x8080800000008000ull, /* E2 */
+    0x8080800000008080ull, /* E3 */
+    0x8080800000800000ull, /* E4 */
+    0x8080800000800080ull, /* E5 */
+    0x8080800000808000ull, /* E6 */
+    0x8080800000808080ull, /* E7 */
+    0x8080800080000000ull, /* E8 */
+    0x8080800080000080ull, /* E9 */
+    0x8080800080008000ull, /* EA */
+    0x8080800080008080ull, /* EB */
+    0x8080800080800000ull, /* EC */
+    0x8080800080800080ull, /* ED */
+    0x8080800080808000ull, /* EE */
+    0x8080800080808080ull, /* EF */
+    0x8080808000000000ull, /* F0 */
+    0x8080808000000080ull, /* F1 */
+    0x8080808000008000ull, /* F2 */
+    0x8080808000008080ull, /* F3 */
+    0x8080808000800000ull, /* F4 */
+    0x8080808000800080ull, /* F5 */
+    0x8080808000808000ull, /* F6 */
+    0x8080808000808080ull, /* F7 */
+    0x8080808080000000ull, /* F8 */
+    0x8080808080000080ull, /* F9 */
+    0x8080808080008000ull, /* FA */
+    0x8080808080008080ull, /* FB */
+    0x8080808080800000ull, /* FC */
+    0x8080808080800080ull, /* FD */
+    0x8080808080808000ull, /* FE */
+    0x8080808080808080ull, /* FF */
+};
+
+void helper_vgbbd(ppc_avr_t *r, ppc_avr_t *b)
+{
+    int i;
+    uint64_t t[2] = { 0, 0 };
+
+    VECTOR_FOR_INORDER_I(i, u8) {
+#if defined(HOST_WORDS_BIGENDIAN)
+        t[i>>3] |= VGBBD_MASKS[b->u8[i]] >> (i & 7);
+#else
+        t[i>>3] |= VGBBD_MASKS[b->u8[i]] >> (7-(i & 7));
+#endif
+    }
+
+    r->u64[0] = t[0];
+    r->u64[1] = t[1];
+}
+
 #if defined(HOST_WORDS_BIGENDIAN)
 #define PKBIG 1
 #else
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index f15c21e..86cdfbe 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -7369,6 +7369,7 @@ GEN_VXFORM_DUAL(vclzw, PPC_NONE, PPC2_ALTIVEC_207, \
 GEN_VXFORM_DUAL(vclzd, PPC_NONE, PPC2_ALTIVEC_207, \
                 vpopcntd, PPC_NONE, PPC2_ALTIVEC_207)
 GEN_VXFORM(vbpermq, 6, 21);
+GEN_VXFORM_NOA(vgbbd, 6, 20);
 
 /***                           VSX extension                               ***/
 
@@ -10594,6 +10595,7 @@ GEN_VXFORM_DUAL(vclzw, vpopcntw, 1, 30, PPC_NONE, PPC2_ALTIVEC_207),
 GEN_VXFORM_DUAL(vclzd, vpopcntd, 1, 31, PPC_NONE, PPC2_ALTIVEC_207),
 
 GEN_VXFORM_207(vbpermq, 6, 21),
+GEN_VXFORM_207(vgbbd, 6, 20),
 
 GEN_HANDLER_E(lxsdx, 0x1F, 0x0C, 0x12, 0, PPC_NONE, PPC2_VSX),
 GEN_HANDLER_E(lxsiwax, 0x1F, 0x0C, 0x02, 0, PPC_NONE, PPC2_VSX207),
-- 
1.7.1

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

* [Qemu-devel] [PATCH 24/28] target-ppc: Altivec 2.07: Vector Polynomial Multiply Sum
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (22 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 23/28] target-ppc: Altivec 2.07: Vector Gather Bits by Bytes Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-24 18:11   ` Richard Henderson
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 25/28] target-ppc: Altivec 2.07: Binary Coded Decimal Instructions Tom Musta
                   ` (5 subsequent siblings)
  29 siblings, 1 reply; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds the Vectory Polynomial Multiply Sum instructions
introduced in Power ISA Version 2.07:

  - Vectory Polynomial Multiply Sum Byte (vpmsumb)
  - Vectory Polynomial Multiply Sum Halfword (vpmsumh)
  - Vectory Polynomial Multiply Sum Word (vpmsumw)
  - Vectory Polynomial Multiply Sum Doubleword (vpmsumd)

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/helper.h     |    4 +++
 target-ppc/int_helper.c |   70 +++++++++++++++++++++++++++++++++++++++++++++++
 target-ppc/translate.c  |    8 +++++
 3 files changed, 82 insertions(+), 0 deletions(-)

diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index aca712f..ca9eba5 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -311,6 +311,10 @@ DEF_HELPER_2(vpopcntw, void, avr, avr)
 DEF_HELPER_2(vpopcntd, void, avr, avr)
 DEF_HELPER_3(vbpermq, void, avr, avr, avr)
 DEF_HELPER_2(vgbbd, void, avr, avr)
+DEF_HELPER_3(vpmsumb, void, avr, avr, avr)
+DEF_HELPER_3(vpmsumh, void, avr, avr, avr)
+DEF_HELPER_3(vpmsumw, void, avr, avr, avr)
+DEF_HELPER_3(vpmsumd, void, avr, avr, avr)
 
 DEF_HELPER_2(xsadddp, void, env, i32)
 DEF_HELPER_2(xssubdp, void, env, i32)
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index cd0b88a..4e8e507 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -1351,6 +1351,76 @@ void helper_vgbbd(ppc_avr_t *r, ppc_avr_t *b)
     r->u64[1] = t[1];
 }
 
+#define PMSUM(name, srcfld, trgfld, trgtyp)                   \
+void helper_##name(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)  \
+{                                                             \
+    int i, j;                                                 \
+    trgtyp prod[sizeof(ppc_avr_t)/sizeof(a->srcfld[0])];      \
+                                                              \
+    VECTOR_FOR_INORDER_I(i, srcfld) {                         \
+        prod[i] = 0;                                          \
+        for (j = 0; j < sizeof(a->srcfld[0]) * 8; j++) {      \
+            if (a->srcfld[i] & (1ull<<j)) {                   \
+                prod[i] ^= ((trgtyp)b->srcfld[i] << j);       \
+            }                                                 \
+        }                                                     \
+    }                                                         \
+                                                              \
+    VECTOR_FOR_INORDER_I(i, trgfld) {                         \
+        r->trgfld[i] = prod[2*i] ^ prod[2*i+1];               \
+    }                                                         \
+}
+
+PMSUM(vpmsumb, u8, u16, uint16_t)
+PMSUM(vpmsumh, u16, u32, uint32_t)
+PMSUM(vpmsumw, u32, u64, uint64_t)
+
+void helper_vpmsumd(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
+{
+
+#ifdef CONFIG_INT128
+    int i, j;
+    __uint128_t prod[2];
+
+    VECTOR_FOR_INORDER_I(i, u64) {
+        prod[i] = 0;
+        for (j = 0; j < 64; j++) {
+            if (a->u64[i] & (1ull<<j)) {
+                prod[i] ^= (((__uint128_t)b->u64[i]) << j);
+            }
+        }
+    }
+
+    r->u128 = prod[0] ^ prod[1];
+
+#else
+    int i, j;
+    ppc_avr_t prod[2];
+
+    VECTOR_FOR_INORDER_I(i, u64) {
+        prod[i].u64[LO_IDX] = prod[i].u64[HI_IDX] = 0;
+        for (j = 0; j < 64; j++) {
+            if (a->u64[i] & (1ull<<j)) {
+                ppc_avr_t bshift;
+                if (j == 0) {
+                    bshift.u64[HI_IDX] = 0;
+                    bshift.u64[LO_IDX] = b->u64[i];
+                } else {
+                    bshift.u64[HI_IDX] = b->u64[i] >> (64-j);
+                    bshift.u64[LO_IDX] = b->u64[i] << j;
+                }
+                prod[i].u64[LO_IDX] ^= bshift.u64[LO_IDX];
+                prod[i].u64[HI_IDX] ^= bshift.u64[HI_IDX];
+            }
+        }
+    }
+
+    r->u64[LO_IDX] = prod[0].u64[LO_IDX] ^ prod[1].u64[LO_IDX];
+    r->u64[HI_IDX] = prod[0].u64[HI_IDX] ^ prod[1].u64[HI_IDX];
+#endif
+}
+
+
 #if defined(HOST_WORDS_BIGENDIAN)
 #define PKBIG 1
 #else
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index 86cdfbe..c53a4ad 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -7370,6 +7370,10 @@ GEN_VXFORM_DUAL(vclzd, PPC_NONE, PPC2_ALTIVEC_207, \
                 vpopcntd, PPC_NONE, PPC2_ALTIVEC_207)
 GEN_VXFORM(vbpermq, 6, 21);
 GEN_VXFORM_NOA(vgbbd, 6, 20);
+GEN_VXFORM(vpmsumb, 4, 16)
+GEN_VXFORM(vpmsumh, 4, 17)
+GEN_VXFORM(vpmsumw, 4, 18)
+GEN_VXFORM(vpmsumd, 4, 19)
 
 /***                           VSX extension                               ***/
 
@@ -10596,6 +10600,10 @@ GEN_VXFORM_DUAL(vclzd, vpopcntd, 1, 31, PPC_NONE, PPC2_ALTIVEC_207),
 
 GEN_VXFORM_207(vbpermq, 6, 21),
 GEN_VXFORM_207(vgbbd, 6, 20),
+GEN_VXFORM_207(vpmsumb, 4, 16),
+GEN_VXFORM_207(vpmsumh, 4, 17),
+GEN_VXFORM_207(vpmsumw, 4, 18),
+GEN_VXFORM_207(vpmsumd, 4, 19),
 
 GEN_HANDLER_E(lxsdx, 0x1F, 0x0C, 0x12, 0, PPC_NONE, PPC2_VSX),
 GEN_HANDLER_E(lxsiwax, 0x1F, 0x0C, 0x02, 0, PPC_NONE, PPC2_VSX207),
-- 
1.7.1

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

* [Qemu-devel] [PATCH 25/28] target-ppc: Altivec 2.07: Binary Coded Decimal Instructions
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (23 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 24/28] target-ppc: Altivec 2.07: Vector Polynomial Multiply Sum Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 26/28] target-ppc: Altivec 2.07: AES Instructions Tom Musta
                   ` (4 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch add the Binary Coded Decimal instructions bcdadd. and
bcdsub.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/helper.h     |    3 +
 target-ppc/int_helper.c |  201 +++++++++++++++++++++++++++++++++++++++++++++++
 target-ppc/translate.c  |   45 ++++++++++-
 3 files changed, 245 insertions(+), 4 deletions(-)

diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index ca9eba5..ef6aa58 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -316,6 +316,9 @@ DEF_HELPER_3(vpmsumh, void, avr, avr, avr)
 DEF_HELPER_3(vpmsumw, void, avr, avr, avr)
 DEF_HELPER_3(vpmsumd, void, avr, avr, avr)
 
+DEF_HELPER_4(bcdadd, i32, avr, avr, avr, i32)
+DEF_HELPER_4(bcdsub, i32, avr, avr, avr, i32)
+
 DEF_HELPER_2(xsadddp, void, env, i32)
 DEF_HELPER_2(xssubdp, void, env, i32)
 DEF_HELPER_2(xsmuldp, void, env, i32)
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index 4e8e507..ce7c6a0 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -2136,6 +2136,207 @@ void helper_vsubecuq(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c)
 #endif
 }
 
+#define BCD_PLUS_PREF_1 0xC
+#define BCD_PLUS_PREF_2 0xF
+#define BCD_PLUS_ALT_1  0xA
+#define BCD_NEG_PREF    0xD
+#define BCD_NEG_ALT     0xB
+#define BCD_PLUS_ALT_2  0xE
+
+#if defined(HOST_WORDS_BIGENDIAN)
+#define BCD_DIG_BYTE(n) (15 - (n/2))
+#else
+#define BCD_DIG_BYTE(n) (n/2)
+#endif
+
+static int bcd_get_sgn(ppc_avr_t *bcd)
+{
+    switch (bcd->u8[BCD_DIG_BYTE(0)] & 0xF) {
+    case BCD_PLUS_PREF_1:
+    case BCD_PLUS_PREF_2:
+    case BCD_PLUS_ALT_1:
+    case BCD_PLUS_ALT_2:
+    {
+        return 1;
+    }
+
+    case BCD_NEG_PREF:
+    case BCD_NEG_ALT:
+    {
+        return -1;
+    }
+
+    default:
+    {
+        return 0;
+    }
+    }
+}
+
+static int bcd_preferred_sgn(int sgn, int ps)
+{
+    if (sgn >= 0) {
+        return (ps == 0) ? BCD_PLUS_PREF_1 : BCD_PLUS_PREF_2;
+    } else {
+        return BCD_NEG_PREF;
+    }
+}
+
+static uint8_t bcd_get_digit(ppc_avr_t *bcd, int n, int *invalid)
+{
+    uint8_t result;
+    if (n & 1) {
+        result = bcd->u8[BCD_DIG_BYTE(n)] >> 4;
+    } else {
+       result = bcd->u8[BCD_DIG_BYTE(n)] & 0xF;
+    }
+
+    if (unlikely(result > 9)) {
+        *invalid = true;
+    }
+    return result;
+}
+
+static void bcd_put_digit(ppc_avr_t *bcd, uint8_t digit, int n)
+{
+    if (n & 1) {
+        bcd->u8[BCD_DIG_BYTE(n)] &= 0x0F;
+        bcd->u8[BCD_DIG_BYTE(n)] |= (digit<<4);
+    } else {
+        bcd->u8[BCD_DIG_BYTE(n)] &= 0xF0;
+        bcd->u8[BCD_DIG_BYTE(n)] |= digit;
+    }
+}
+
+static int bcd_cmp_mag(ppc_avr_t *a, ppc_avr_t *b)
+{
+    int i;
+    int invalid = 0;
+    for (i = 31; i > 0; i--) {
+        uint8_t dig_a = bcd_get_digit(a, i, &invalid);
+        uint8_t dig_b = bcd_get_digit(b, i, &invalid);
+        if (unlikely(invalid)) {
+            return 0; /* doesnt matter */
+        } else if (dig_a > dig_b) {
+            return 1;
+        } else if (dig_a < dig_b) {
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
+static int bcd_add_mag(ppc_avr_t *t, ppc_avr_t *a, ppc_avr_t *b, int *invalid,
+                       int *overflow)
+{
+    int carry = 0;
+    int i;
+    int is_zero = 1;
+    for (i = 1; i <= 31; i++) {
+        uint8_t digit = bcd_get_digit(a, i, invalid) +
+                        bcd_get_digit(b, i, invalid) + carry;
+        is_zero &= (digit == 0);
+        if (digit > 9) {
+            carry = 1;
+            digit -= 10;
+        } else {
+            carry = 0;
+        }
+
+        bcd_put_digit(t, digit, i);
+
+        if (unlikely(*invalid)) {
+            return -1;
+        }
+    }
+
+    *overflow = carry;
+    return is_zero;
+}
+
+static int bcd_sub_mag(ppc_avr_t *t, ppc_avr_t *a, ppc_avr_t *b, int *invalid,
+                       int *overflow)
+{
+    int carry = 0;
+    int i;
+    int is_zero = 1;
+    for (i = 1; i <= 31; i++) {
+        uint8_t digit = bcd_get_digit(a, i, invalid) -
+                        bcd_get_digit(b, i, invalid) + carry;
+        is_zero &= (digit == 0);
+        if (digit & 0x80) {
+            carry = -1;
+            digit += 10;
+        } else {
+            carry = 0;
+        }
+
+        bcd_put_digit(t, digit, i);
+
+        if (unlikely(*invalid)) {
+            return -1;
+        }
+    }
+
+    *overflow = carry;
+    return is_zero;
+}
+
+uint32_t helper_bcdadd(ppc_avr_t *r,  ppc_avr_t *a, ppc_avr_t *b, uint32_t ps)
+{
+
+    int sgna = bcd_get_sgn(a);
+    int sgnb = bcd_get_sgn(b);
+    int invalid = (sgna == 0) || (sgnb == 0);
+    int overflow = 0;
+    int zero = 0;
+    uint32_t cr = 0;
+    ppc_avr_t result = { .u64 = { 0, 0 } };
+
+    if (!invalid) {
+        if (sgna == sgnb) {
+            result.u8[BCD_DIG_BYTE(0)] = bcd_preferred_sgn(sgna, ps);
+            zero = bcd_add_mag(&result, a, b, &invalid, &overflow);
+            cr = (sgna > 0) ? 4 : 8;
+        } else if (bcd_cmp_mag(a, b) > 0) {
+            result.u8[BCD_DIG_BYTE(0)] = bcd_preferred_sgn(sgna, ps);
+            zero = bcd_sub_mag(&result, a, b, &invalid, &overflow);
+            cr = (sgna > 0) ? 4 : 8;
+        } else {
+            result.u8[BCD_DIG_BYTE(0)] = bcd_preferred_sgn(sgnb, ps);
+            zero = bcd_sub_mag(&result, b, a, &invalid, &overflow);
+            cr = (sgnb > 0) ? 4 : 8;
+        }
+    }
+
+    if (unlikely(invalid)) {
+        result.u64[HI_IDX] = result.u64[LO_IDX] = -1;
+        cr = 1;
+    } else if (overflow) {
+        cr |= 1;
+    } else if (zero) {
+        cr = 2;
+    }
+
+    *r = result;
+
+    return cr;
+}
+
+uint32_t helper_bcdsub(ppc_avr_t *r,  ppc_avr_t *a, ppc_avr_t *b, uint32_t ps)
+{
+    ppc_avr_t bcopy = *b;
+    int sgnb = bcd_get_sgn(b);
+    if (sgnb < 0) {
+        bcd_put_digit(&bcopy, BCD_PLUS_PREF_1, 0);
+    } else if (sgnb > 0) {
+        bcd_put_digit(&bcopy, BCD_NEG_PREF, 0);
+    }
+    /* else invalid ... defer to bcdadd code for proper handling */
+
+    return helper_bcdadd(r, a, &bcopy, ps);
+}
 
 #undef VECTOR_FOR_INORDER_I
 #undef HI_IDX
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index c53a4ad..9186bb6 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -7375,6 +7375,43 @@ GEN_VXFORM(vpmsumh, 4, 17)
 GEN_VXFORM(vpmsumw, 4, 18)
 GEN_VXFORM(vpmsumd, 4, 19)
 
+#define GEN_BCD(op)                                 \
+static void gen_##op(DisasContext *ctx)             \
+{                                                   \
+    TCGv_ptr ra, rb, rd;                            \
+    TCGv_i32 ps;                                    \
+                                                    \
+    if (unlikely(!ctx->altivec_enabled)) {          \
+        gen_exception(ctx, POWERPC_EXCP_VPU);       \
+        return;                                     \
+    }                                               \
+                                                    \
+    ra = gen_avr_ptr(rA(ctx->opcode));              \
+    rb = gen_avr_ptr(rB(ctx->opcode));              \
+    rd = gen_avr_ptr(rD(ctx->opcode));              \
+                                                    \
+    ps = tcg_const_i32((ctx->opcode & 0x200) != 0); \
+                                                    \
+    gen_helper_##op(cpu_crf[6], rd, ra, rb, ps);    \
+                                                    \
+    tcg_temp_free_ptr(ra);                          \
+    tcg_temp_free_ptr(rb);                          \
+    tcg_temp_free_ptr(rd);                          \
+    tcg_temp_free_i32(ps);                          \
+}
+
+GEN_BCD(bcdadd)
+GEN_BCD(bcdsub)
+
+GEN_VXFORM_DUAL(vsububm, PPC_ALTIVEC, PPC_NONE, \
+                bcdadd, PPC_NONE, PPC2_ALTIVEC_207)
+GEN_VXFORM_DUAL(vsububs, PPC_ALTIVEC, PPC_NONE, \
+                bcdadd, PPC_NONE, PPC2_ALTIVEC_207)
+GEN_VXFORM_DUAL(vsubuhm, PPC_ALTIVEC, PPC_NONE, \
+                bcdsub, PPC_NONE, PPC2_ALTIVEC_207)
+GEN_VXFORM_DUAL(vsubuhs, PPC_ALTIVEC, PPC_NONE, \
+                bcdsub, PPC_NONE, PPC2_ALTIVEC_207)
+
 /***                           VSX extension                               ***/
 
 static inline TCGv_i64 cpu_vsrh(int n)
@@ -10415,8 +10452,8 @@ GEN_VXFORM(vaddubm, 0, 0),
 GEN_VXFORM(vadduhm, 0, 1),
 GEN_VXFORM(vadduwm, 0, 2),
 GEN_VXFORM_207(vaddudm, 0, 3),
-GEN_VXFORM(vsububm, 0, 16),
-GEN_VXFORM(vsubuhm, 0, 17),
+GEN_VXFORM_DUAL(vsububm, bcdadd, 0, 16, PPC_ALTIVEC, PPC_NONE),
+GEN_VXFORM_DUAL(vsubuhm, bcdsub, 0, 17, PPC_ALTIVEC, PPC_NONE),
 GEN_VXFORM(vsubuwm, 0, 18),
 GEN_VXFORM_207(vsubudm, 0, 19),
 GEN_VXFORM(vmaxub, 1, 0),
@@ -10483,8 +10520,8 @@ GEN_VXFORM(vadduws, 0, 10),
 GEN_VXFORM(vaddsbs, 0, 12),
 GEN_VXFORM(vaddshs, 0, 13),
 GEN_VXFORM(vaddsws, 0, 14),
-GEN_VXFORM(vsububs, 0, 24),
-GEN_VXFORM(vsubuhs, 0, 25),
+GEN_VXFORM_DUAL(vsububs, bcdadd, 0, 24, PPC_ALTIVEC, PPC_NONE),
+GEN_VXFORM_DUAL(vsubuhs, bcdsub, 0, 25, PPC_ALTIVEC, PPC_NONE),
 GEN_VXFORM(vsubuws, 0, 26),
 GEN_VXFORM(vsubsbs, 0, 28),
 GEN_VXFORM(vsubshs, 0, 29),
-- 
1.7.1

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

* [Qemu-devel] [PATCH 26/28] target-ppc: Altivec 2.07: AES Instructions
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (24 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 25/28] target-ppc: Altivec 2.07: Binary Coded Decimal Instructions Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-24 17:59   ` Richard Henderson
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 27/28] target-ppc: Altivec 2.07: Vector SHA Sigma Instructions Tom Musta
                   ` (3 subsequent siblings)
  29 siblings, 1 reply; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds the Vector AES instructions introduced in Power ISA
Version 2.07:

   - Vector AES Cipher (vcipher)
   - Vector AES Cipher Last (vcipherlast)
   - Vector AES Inverse Cipher (vncipher)
   - Vector AES Inverse Cipher Last (vncipherlast)
   - Vector AES SubBytes (vsbox)

Note that the implementation of vncipher deviates from the RTL in
ISA V2.07.  However it does match the verbal description in the
third paragraph.  The RTL will be fixed in ISA V2.07B.  The
implementation here has been tested against actual P8 hardware.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/helper.h     |    6 +
 target-ppc/int_helper.c |  280 +++++++++++++++++++++++++++++++++++++++++++++++
 target-ppc/translate.c  |   29 +++++
 3 files changed, 315 insertions(+), 0 deletions(-)

diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index ef6aa58..93e549e 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -316,6 +316,12 @@ DEF_HELPER_3(vpmsumh, void, avr, avr, avr)
 DEF_HELPER_3(vpmsumw, void, avr, avr, avr)
 DEF_HELPER_3(vpmsumd, void, avr, avr, avr)
 
+DEF_HELPER_2(vsbox, void, avr, avr)
+DEF_HELPER_3(vcipher, void, avr, avr, avr)
+DEF_HELPER_3(vcipherlast, void, avr, avr, avr)
+DEF_HELPER_3(vncipher, void, avr, avr, avr)
+DEF_HELPER_3(vncipherlast, void, avr, avr, avr)
+
 DEF_HELPER_4(bcdadd, i32, avr, avr, avr, i32)
 DEF_HELPER_4(bcdsub, i32, avr, avr, avr, i32)
 
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index ce7c6a0..cd04e8a 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -2338,6 +2338,286 @@ uint32_t helper_bcdsub(ppc_avr_t *r,  ppc_avr_t *a, ppc_avr_t *b, uint32_t ps)
     return helper_bcdadd(r, a, &bcopy, ps);
 }
 
+static uint8_t SBOX[256] = {
+0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5,
+0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
+0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0,
+0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
+0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC,
+0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
+0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A,
+0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
+0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0,
+0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
+0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B,
+0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
+0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85,
+0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
+0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5,
+0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
+0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17,
+0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
+0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88,
+0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
+0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C,
+0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
+0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9,
+0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
+0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6,
+0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
+0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E,
+0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
+0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94,
+0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
+0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68,
+0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16,
+};
+
+static void SubBytes(ppc_avr_t *r, ppc_avr_t *a)
+{
+    int i;
+    VECTOR_FOR_INORDER_I(i, u8) {
+        r->u8[i] = SBOX[a->u8[i]];
+    }
+}
+
+static uint8_t InvSBOX[256] = {
+0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38,
+0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
+0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87,
+0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
+0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D,
+0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
+0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2,
+0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
+0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16,
+0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
+0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA,
+0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
+0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A,
+0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
+0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02,
+0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
+0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA,
+0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
+0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85,
+0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
+0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89,
+0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
+0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20,
+0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
+0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31,
+0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
+0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D,
+0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
+0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0,
+0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
+0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26,
+0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D,
+};
+
+static void InvSubBytes(ppc_avr_t *r, ppc_avr_t *a)
+{
+    int i;
+    VECTOR_FOR_INORDER_I(i, u8) {
+        r->u8[i] = InvSBOX[a->u8[i]];
+    }
+}
+
+static uint8_t ROTL8(uint8_t x, int n)
+{
+    return (x << n) | (x >> (8-n));
+}
+
+static inline int BIT8(uint8_t x, int n)
+{
+    return (x & (0x80 >> n)) != 0;
+}
+
+static uint8_t GFx02(uint8_t x)
+{
+    return ROTL8(x, 1) ^ (BIT8(x, 0) ? 0x1A : 0);
+}
+
+static uint8_t GFx03(uint8_t x)
+{
+    return x ^ ROTL8(x, 1) ^ (BIT8(x, 0) ? 0x1A : 0);
+}
+
+static uint8_t GFx09(uint8_t x)
+{
+    uint8_t term2 = ROTL8(x, 3);
+    uint8_t term3 = (BIT8(x, 0) ? 0x68 : 0) | (BIT8(x, 1) ? 0x14 : 0) |
+                    (BIT8(x, 2) ? 0x02 : 0);
+    uint8_t term4 = (BIT8(x, 1) ? 0x20 : 0) | (BIT8(x, 2) ? 0x18 : 0);
+    return x ^ term2 ^ term3 ^ term4;
+}
+
+static uint8_t GFx0B(uint8_t x)
+{
+    uint8_t term2 = ROTL8(x, 1);
+    uint8_t term3 = (x << 3) | (BIT8(x, 0) ? 0x06 : 0) |
+                    (BIT8(x, 2) ? 0x01 : 0);
+    uint8_t term4 = (BIT8(x, 0) ? 0x70 : 0) | (BIT8(x, 1) ? 0x06 : 0) |
+                    (BIT8(x, 2) ? 0x08 : 0);
+    uint8_t term5 = (BIT8(x, 1) ? 0x30 : 0) | (BIT8(x, 2) ? 0x02 : 0);
+    uint8_t term6 = BIT8(x, 2) ? 0x10 : 0;
+    return x ^ term2 ^ term3 ^ term4 ^ term5 ^ term6;
+}
+
+static uint8_t GFx0D(uint8_t x)
+{
+    uint8_t term2 = ROTL8(x, 2);
+    uint8_t term3 = (x << 3) | (BIT8(x, 1) ? 0x04 : 0) |
+                    (BIT8(x, 2) ? 0x03 : 0);
+    uint8_t term4 = (BIT8(x, 0) ? 0x58 : 0) | (BIT8(x, 1) ? 0x20 : 0);
+    uint8_t term5 = (BIT8(x, 1) ? 0x08 : 0) | (BIT8(x, 2) ? 0x10 : 0);
+    uint8_t term6 = BIT8(x, 2) ? 0x08 : 0;
+    return x ^ term2 ^ term3 ^ term4 ^ term5 ^ term6;
+}
+
+static uint8_t GFx0E(uint8_t x)
+{
+    uint8_t term1 = ROTL8(x, 1);
+    uint8_t term2 = (x << 2) | (BIT8(x, 2) ? 0x02 : 0) |
+                    (BIT8(x, 1) ? 0x01 : 0);
+    uint8_t term3 = (x << 3) | (BIT8(x, 1) ? 0x04 : 0) |
+                    (BIT8(x, 2) ? 0x01 : 0);
+    uint8_t term4 = (BIT8(x, 0) ? 0x40 : 0) | (BIT8(x, 1) ? 0x28 : 0) |
+                    (BIT8(x, 2) ? 0x10 : 0);
+    uint8_t term5 = (BIT8(x, 2) ? 0x08 : 0);
+    return term1 ^ term2 ^ term3 ^ term4 ^ term5;
+}
+
+#if defined(HOST_WORDS_BIGENDIAN)
+#define MCB(x, i, b) ((x)->u8[(i)*4 + (b)])
+#else
+#define MCB(x, i, b) ((x)->u8[15 - ((i)*4 + (b))])
+#endif
+
+static void MixColumns(ppc_avr_t *r, ppc_avr_t *x)
+{
+    int i;
+    for (i = 0; i < 4; i++) {
+        MCB(r, i, 0) = GFx02(MCB(x, i, 0)) ^ GFx03(MCB(x, i, 1)) ^
+                       MCB(x, i, 2) ^ MCB(x, i, 3);
+        MCB(r, i, 1) = MCB(x, i, 0) ^ GFx02(MCB(x, i, 1)) ^
+                       GFx03(MCB(x, i, 2)) ^ MCB(x, i, 3);
+        MCB(r, i, 2) = MCB(x, i, 0) ^ MCB(x, i, 1) ^
+                       GFx02(MCB(x, i, 2)) ^ GFx03(MCB(x, i, 3));
+        MCB(r, i, 3) = GFx03(MCB(x, i, 0)) ^ MCB(x, i, 1) ^
+                       MCB(x, i, 2) ^ GFx02(MCB(x, i, 3));
+    }
+}
+
+static void InvMixColumns(ppc_avr_t *r, ppc_avr_t *x)
+{
+    int i;
+    for (i = 0; i < 4; i++) {
+        MCB(r, i, 0) = GFx0E(MCB(x, i, 0)) ^ GFx0B(MCB(x, i, 1)) ^
+                       GFx0D(MCB(x, i, 2)) ^ GFx09(MCB(x, i, 3));
+        MCB(r, i, 1) = GFx09(MCB(x, i, 0)) ^ GFx0E(MCB(x, i, 1)) ^
+                       GFx0B(MCB(x, i, 2)) ^ GFx0D(MCB(x, i, 3));
+        MCB(r, i, 2) = GFx0D(MCB(x, i, 0)) ^ GFx09(MCB(x, i, 1)) ^
+                       GFx0E(MCB(x, i, 2)) ^ GFx0B(MCB(x, i, 3));
+        MCB(r, i, 3) = GFx0B(MCB(x, i, 0)) ^ GFx0D(MCB(x, i, 1)) ^
+                       GFx09(MCB(x, i, 2)) ^ GFx0E(MCB(x, i, 3));
+    }
+}
+
+static void ShiftRows(ppc_avr_t *r, ppc_avr_t *x)
+{
+    MCB(r, 0, 0) = MCB(x, 0, 0);
+    MCB(r, 1, 0) = MCB(x, 1, 0);
+    MCB(r, 2, 0) = MCB(x, 2, 0);
+    MCB(r, 3, 0) = MCB(x, 3, 0);
+
+    MCB(r, 0, 1) = MCB(x, 1, 1);
+    MCB(r, 1, 1) = MCB(x, 2, 1);
+    MCB(r, 2, 1) = MCB(x, 3, 1);
+    MCB(r, 3, 1) = MCB(x, 0, 1);
+
+    MCB(r, 0, 2) = MCB(x, 2, 2);
+    MCB(r, 1, 2) = MCB(x, 3, 2);
+    MCB(r, 2, 2) = MCB(x, 0, 2);
+    MCB(r, 3, 2) = MCB(x, 1, 2);
+
+    MCB(r, 0, 3) = MCB(x, 3, 3);
+    MCB(r, 1, 3) = MCB(x, 0, 3);
+    MCB(r, 2, 3) = MCB(x, 1, 3);
+    MCB(r, 3, 3) = MCB(x, 2, 3);
+}
+
+static void InvShiftRows(ppc_avr_t *r, ppc_avr_t *x)
+{
+    MCB(r, 0, 0) = MCB(x, 0, 0);
+    MCB(r, 1, 0) = MCB(x, 1, 0);
+    MCB(r, 2, 0) = MCB(x, 2, 0);
+    MCB(r, 3, 0) = MCB(x, 3, 0);
+
+    MCB(r, 0, 1) = MCB(x, 3, 1);
+    MCB(r, 1, 1) = MCB(x, 0, 1);
+    MCB(r, 2, 1) = MCB(x, 1, 1);
+    MCB(r, 3, 1) = MCB(x, 2, 1);
+
+    MCB(r, 0, 2) = MCB(x, 2, 2);
+    MCB(r, 1, 2) = MCB(x, 3, 2);
+    MCB(r, 2, 2) = MCB(x, 0, 2);
+    MCB(r, 3, 2) = MCB(x, 1, 2);
+
+    MCB(r, 0, 3) = MCB(x, 1, 3);
+    MCB(r, 1, 3) = MCB(x, 2, 3);
+    MCB(r, 2, 3) = MCB(x, 3, 3);
+    MCB(r, 3, 3) = MCB(x, 0, 3);
+}
+
+#undef MCB
+
+void helper_vsbox(ppc_avr_t *r, ppc_avr_t *a)
+{
+    SubBytes(r, a);
+}
+
+void helper_vcipher(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
+{
+    ppc_avr_t vtemp1, vtemp2, vtemp3;
+    SubBytes(&vtemp1, a);
+    ShiftRows(&vtemp2, &vtemp1);
+    MixColumns(&vtemp3, &vtemp2);
+    r->u64[0] = vtemp3.u64[0] ^ b->u64[0];
+    r->u64[1] = vtemp3.u64[1] ^ b->u64[1];
+}
+
+void helper_vcipherlast(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
+{
+    ppc_avr_t vtemp1, vtemp2;
+    SubBytes(&vtemp1, a);
+    ShiftRows(&vtemp2, &vtemp1);
+    r->u64[0] = vtemp2.u64[0] ^ b->u64[0];
+    r->u64[1] = vtemp2.u64[1] ^ b->u64[1];
+}
+
+void helper_vncipher(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
+{
+    /* This differs from what is written in ISA V2.07.  The RTL is */
+    /* incorrect and will be fixed in V2.07B.                      */
+    ppc_avr_t vtemp1, vtemp2, vtemp3;
+    InvShiftRows(&vtemp1, a);
+    InvSubBytes(&vtemp2, &vtemp1);
+    vtemp3.u64[0] = vtemp2.u64[0] ^ b->u64[0];
+    vtemp3.u64[1] = vtemp2.u64[1] ^ b->u64[1];
+    InvMixColumns(r, &vtemp3);
+}
+
+void helper_vncipherlast(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
+{
+    ppc_avr_t vtemp1, vtemp2;
+    InvShiftRows(&vtemp1, a);
+    InvSubBytes(&vtemp2, &vtemp1);
+    r->u64[0] = vtemp2.u64[0] ^ b->u64[0];
+    r->u64[1] = vtemp2.u64[1] ^ b->u64[1];
+}
+
 #undef VECTOR_FOR_INORDER_I
 #undef HI_IDX
 #undef LO_IDX
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index 9186bb6..fe98367 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -7412,6 +7412,30 @@ GEN_VXFORM_DUAL(vsubuhm, PPC_ALTIVEC, PPC_NONE, \
 GEN_VXFORM_DUAL(vsubuhs, PPC_ALTIVEC, PPC_NONE, \
                 bcdsub, PPC_NONE, PPC2_ALTIVEC_207)
 
+static void gen_vsbox(DisasContext *ctx)
+{
+    TCGv_ptr ra, rd;
+    if (unlikely(!ctx->altivec_enabled)) {
+        gen_exception(ctx, POWERPC_EXCP_VPU);
+        return;
+    }
+    ra = gen_avr_ptr(rA(ctx->opcode));
+    rd = gen_avr_ptr(rD(ctx->opcode));
+    gen_helper_vsbox(rd, ra);
+    tcg_temp_free_ptr(ra);
+    tcg_temp_free_ptr(rd);
+}
+
+GEN_VXFORM(vcipher, 4, 20)
+GEN_VXFORM(vcipherlast, 4, 20)
+GEN_VXFORM(vncipher, 4, 21)
+GEN_VXFORM(vncipherlast, 4, 21)
+
+GEN_VXFORM_DUAL(vcipher, PPC_NONE, PPC2_ALTIVEC_207,
+                vcipherlast, PPC_NONE, PPC2_ALTIVEC_207)
+GEN_VXFORM_DUAL(vncipher, PPC_NONE, PPC2_ALTIVEC_207,
+                vncipherlast, PPC_NONE, PPC2_ALTIVEC_207)
+
 /***                           VSX extension                               ***/
 
 static inline TCGv_i64 cpu_vsrh(int n)
@@ -10642,6 +10666,11 @@ GEN_VXFORM_207(vpmsumh, 4, 17),
 GEN_VXFORM_207(vpmsumw, 4, 18),
 GEN_VXFORM_207(vpmsumd, 4, 19),
 
+GEN_VXFORM_207(vsbox, 4, 23),
+
+GEN_VXFORM_DUAL(vcipher, vcipherlast, 4, 20, PPC_NONE, PPC2_ALTIVEC_207),
+GEN_VXFORM_DUAL(vncipher, vncipherlast, 4, 21, PPC_NONE, PPC2_ALTIVEC_207),
+
 GEN_HANDLER_E(lxsdx, 0x1F, 0x0C, 0x12, 0, PPC_NONE, PPC2_VSX),
 GEN_HANDLER_E(lxsiwax, 0x1F, 0x0C, 0x02, 0, PPC_NONE, PPC2_VSX207),
 GEN_HANDLER_E(lxsiwzx, 0x1F, 0x0C, 0x00, 0, PPC_NONE, PPC2_VSX207),
-- 
1.7.1

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

* [Qemu-devel] [PATCH 27/28] target-ppc: Altivec 2.07: Vector SHA Sigma Instructions
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (25 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 26/28] target-ppc: Altivec 2.07: AES Instructions Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 28/28] target-ppc: Altivec 2.07: Vector Permute and Exclusive OR Tom Musta
                   ` (2 subsequent siblings)
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds the Vector SHA Sigma instructions introduced in Power
ISA Version 2.07:

  - Vector SHA-512 Sigma Doubleword (vshasigmad)
  - Vector SHA-256 Sigma Word (vshasigmaw)

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/helper.h     |    2 +
 target-ppc/int_helper.c |   82 +++++++++++++++++++++++++++++++++++++++++++++++
 target-ppc/translate.c  |   24 ++++++++++++++
 3 files changed, 108 insertions(+), 0 deletions(-)

diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index 93e549e..dc0527b 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -321,6 +321,8 @@ DEF_HELPER_3(vcipher, void, avr, avr, avr)
 DEF_HELPER_3(vcipherlast, void, avr, avr, avr)
 DEF_HELPER_3(vncipher, void, avr, avr, avr)
 DEF_HELPER_3(vncipherlast, void, avr, avr, avr)
+DEF_HELPER_3(vshasigmaw, void, avr, avr, i32)
+DEF_HELPER_3(vshasigmad, void, avr, avr, i32)
 
 DEF_HELPER_4(bcdadd, i32, avr, avr, avr, i32)
 DEF_HELPER_4(bcdsub, i32, avr, avr, avr, i32)
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index cd04e8a..e6a7ad0 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -2618,6 +2618,88 @@ void helper_vncipherlast(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
     r->u64[1] = vtemp2.u64[1] ^ b->u64[1];
 }
 
+#define ROTRu32(v, n) (((v) >> (n)) | ((v) << (32-n)))
+#if defined(HOST_WORDS_BIGENDIAN)
+#define EL_IDX(i) (i)
+#else
+#define EL_IDX(i) (3 - (i))
+#endif
+
+void helper_vshasigmaw(ppc_avr_t *r,  ppc_avr_t *a, uint32_t st_six)
+{
+    int st = (st_six & 0x10) != 0;
+    int six = st_six & 0xF;
+    int i;
+
+    VECTOR_FOR_INORDER_I(i, u32) {
+        if (st == 0) {
+            if ((six & (0x8 >> i)) == 0) {
+                r->u32[EL_IDX(i)] = ROTRu32(a->u32[EL_IDX(i)], 7) ^
+                                    ROTRu32(a->u32[EL_IDX(i)], 18) ^
+                                    (a->u32[EL_IDX(i)] >> 3);
+            } else { /* six.bit[i] == 1 */
+                r->u32[EL_IDX(i)] = ROTRu32(a->u32[EL_IDX(i)], 17) ^
+                                    ROTRu32(a->u32[EL_IDX(i)], 19) ^
+                                    (a->u32[EL_IDX(i)] >> 10);
+            }
+        } else { /* st == 1 */
+            if ((six & (0x8 >> i)) == 0) {
+                r->u32[EL_IDX(i)] = ROTRu32(a->u32[EL_IDX(i)], 2) ^
+                                    ROTRu32(a->u32[EL_IDX(i)], 13) ^
+                                    ROTRu32(a->u32[EL_IDX(i)], 22);
+            } else { /* six.bit[i] == 1 */
+                r->u32[EL_IDX(i)] = ROTRu32(a->u32[EL_IDX(i)], 6) ^
+                                    ROTRu32(a->u32[EL_IDX(i)], 11) ^
+                                    ROTRu32(a->u32[EL_IDX(i)], 25);
+            }
+        }
+    }
+}
+
+#undef ROTRu32
+#undef EL_IDX
+
+#define ROTRu64(v, n) (((v) >> (n)) | ((v) << (64-n)))
+#if defined(HOST_WORDS_BIGENDIAN)
+#define EL_IDX(i) (i)
+#else
+#define EL_IDX(i) (1 - (i))
+#endif
+
+void helper_vshasigmad(ppc_avr_t *r,  ppc_avr_t *a, uint32_t st_six)
+{
+    int st = (st_six & 0x10) != 0;
+    int six = st_six & 0xF;
+    int i;
+
+    VECTOR_FOR_INORDER_I(i, u64) {
+        if (st == 0) {
+            if ((six & (0x8 >> (2*i))) == 0) {
+                r->u64[EL_IDX(i)] = ROTRu64(a->u64[EL_IDX(i)], 1) ^
+                                    ROTRu64(a->u64[EL_IDX(i)], 8) ^
+                                    (a->u64[EL_IDX(i)] >> 7);
+            } else { /* six.bit[2*i] == 1 */
+                r->u64[EL_IDX(i)] = ROTRu64(a->u64[EL_IDX(i)], 19) ^
+                                    ROTRu64(a->u64[EL_IDX(i)], 61) ^
+                                    (a->u64[EL_IDX(i)] >> 6);
+            }
+        } else { /* st == 1 */
+            if ((six & (0x8 >> (2*i))) == 0) {
+                r->u64[EL_IDX(i)] = ROTRu64(a->u64[EL_IDX(i)], 28) ^
+                                    ROTRu64(a->u64[EL_IDX(i)], 34) ^
+                                    ROTRu64(a->u64[EL_IDX(i)], 39);
+            } else { /* six.bit[2*i] == 1 */
+                r->u64[EL_IDX(i)] = ROTRu64(a->u64[EL_IDX(i)], 14) ^
+                                    ROTRu64(a->u64[EL_IDX(i)], 18) ^
+                                    ROTRu64(a->u64[EL_IDX(i)], 41);
+            }
+        }
+    }
+}
+
+#undef ROTRu64
+#undef EL_IDX
+
 #undef VECTOR_FOR_INORDER_I
 #undef HI_IDX
 #undef LO_IDX
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index fe98367..e48d756 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -7436,6 +7436,27 @@ GEN_VXFORM_DUAL(vcipher, PPC_NONE, PPC2_ALTIVEC_207,
 GEN_VXFORM_DUAL(vncipher, PPC_NONE, PPC2_ALTIVEC_207,
                 vncipherlast, PPC_NONE, PPC2_ALTIVEC_207)
 
+#define VSHASIGMA(op)                         \
+static void gen_##op(DisasContext *ctx)       \
+{                                             \
+    TCGv_ptr ra, rd;                          \
+    TCGv_i32 st_six;                          \
+    if (unlikely(!ctx->altivec_enabled)) {    \
+        gen_exception(ctx, POWERPC_EXCP_VPU); \
+        return;                               \
+    }                                         \
+    ra = gen_avr_ptr(rA(ctx->opcode));        \
+    rd = gen_avr_ptr(rD(ctx->opcode));        \
+    st_six = tcg_const_i32(rB(ctx->opcode));  \
+    gen_helper_##op(rd, ra, st_six);          \
+    tcg_temp_free_ptr(ra);                    \
+    tcg_temp_free_ptr(rd);                    \
+    tcg_temp_free_i32(st_six);                \
+}
+
+VSHASIGMA(vshasigmaw)
+VSHASIGMA(vshasigmad)
+
 /***                           VSX extension                               ***/
 
 static inline TCGv_i64 cpu_vsrh(int n)
@@ -10671,6 +10692,9 @@ GEN_VXFORM_207(vsbox, 4, 23),
 GEN_VXFORM_DUAL(vcipher, vcipherlast, 4, 20, PPC_NONE, PPC2_ALTIVEC_207),
 GEN_VXFORM_DUAL(vncipher, vncipherlast, 4, 21, PPC_NONE, PPC2_ALTIVEC_207),
 
+GEN_VXFORM_207(vshasigmaw, 1, 26),
+GEN_VXFORM_207(vshasigmad, 1, 27),
+
 GEN_HANDLER_E(lxsdx, 0x1F, 0x0C, 0x12, 0, PPC_NONE, PPC2_VSX),
 GEN_HANDLER_E(lxsiwax, 0x1F, 0x0C, 0x02, 0, PPC_NONE, PPC2_VSX207),
 GEN_HANDLER_E(lxsiwzx, 0x1F, 0x0C, 0x00, 0, PPC_NONE, PPC2_VSX207),
-- 
1.7.1

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

* [Qemu-devel] [PATCH 28/28] target-ppc: Altivec 2.07: Vector Permute and Exclusive OR
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (26 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 27/28] target-ppc: Altivec 2.07: Vector SHA Sigma Instructions Tom Musta
@ 2014-02-12 21:23 ` Tom Musta
  2014-02-18 18:52 ` [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Richard W.M. Jones
  2014-02-20 15:00 ` Alexander Graf
  29 siblings, 0 replies; 55+ messages in thread
From: Tom Musta @ 2014-02-12 21:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Tom Musta, qemu-ppc

This patch adds the Vector Permuate and Exclusive OR (vpermxor)
instruction introduced in Power ISA Version 2.07.

Signed-off-by: Tom Musta <tommusta@gmail.com>
---
 target-ppc/helper.h     |    1 +
 target-ppc/int_helper.c |   14 ++++++++++++++
 target-ppc/translate.c  |    7 ++++++-
 3 files changed, 21 insertions(+), 1 deletions(-)

diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index dc0527b..99f10de 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -323,6 +323,7 @@ DEF_HELPER_3(vncipher, void, avr, avr, avr)
 DEF_HELPER_3(vncipherlast, void, avr, avr, avr)
 DEF_HELPER_3(vshasigmaw, void, avr, avr, i32)
 DEF_HELPER_3(vshasigmad, void, avr, avr, i32)
+DEF_HELPER_4(vpermxor, void, avr, avr, avr, avr)
 
 DEF_HELPER_4(bcdadd, i32, avr, avr, avr, i32)
 DEF_HELPER_4(bcdsub, i32, avr, avr, avr, i32)
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index e6a7ad0..63dde94 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -2700,6 +2700,20 @@ void helper_vshasigmad(ppc_avr_t *r,  ppc_avr_t *a, uint32_t st_six)
 #undef ROTRu64
 #undef EL_IDX
 
+void helper_vpermxor(ppc_avr_t *r,  ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c)
+{
+    int i;
+    VECTOR_FOR_INORDER_I(i, u8) {
+        int indexA = c->u8[i] >> 4;
+        int indexB = c->u8[i] & 0xF;
+#if defined(HOST_WORDS_BIGENDIAN)
+        r->u8[i] = a->u8[indexA] ^ b->u8[indexB];
+#else
+        r->u8[i] = a->u8[15-indexA] ^ b->u8[15-indexB];
+#endif
+    }
+}
+
 #undef VECTOR_FOR_INORDER_I
 #undef HI_IDX
 #undef LO_IDX
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index e48d756..3e2b434 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -7457,6 +7457,10 @@ static void gen_##op(DisasContext *ctx)       \
 VSHASIGMA(vshasigmaw)
 VSHASIGMA(vshasigmad)
 
+GEN_VXFORM3(vpermxor, 22, 0xFF)
+GEN_VXFORM_DUAL(vsldoi, PPC_ALTIVEC, PPC_NONE,
+                vpermxor, PPC_NONE, PPC2_ALTIVEC_207)
+
 /***                           VSX extension                               ***/
 
 static inline TCGv_i64 cpu_vsrh(int n)
@@ -10084,7 +10088,6 @@ GEN_HANDLER(lvsl, 0x1f, 0x06, 0x00, 0x00000001, PPC_ALTIVEC),
 GEN_HANDLER(lvsr, 0x1f, 0x06, 0x01, 0x00000001, PPC_ALTIVEC),
 GEN_HANDLER(mfvscr, 0x04, 0x2, 0x18, 0x001ff800, PPC_ALTIVEC),
 GEN_HANDLER(mtvscr, 0x04, 0x2, 0x19, 0x03ff0000, PPC_ALTIVEC),
-GEN_HANDLER(vsldoi, 0x04, 0x16, 0xFF, 0x00000400, PPC_ALTIVEC),
 GEN_HANDLER(vmladduhm, 0x04, 0x11, 0xFF, 0x00000000, PPC_ALTIVEC),
 GEN_HANDLER2(evsel0, "evsel", 0x04, 0x1c, 0x09, 0x00000000, PPC_SPE),
 GEN_HANDLER2(evsel1, "evsel", 0x04, 0x1d, 0x09, 0x00000000, PPC_SPE),
@@ -10695,6 +10698,8 @@ GEN_VXFORM_DUAL(vncipher, vncipherlast, 4, 21, PPC_NONE, PPC2_ALTIVEC_207),
 GEN_VXFORM_207(vshasigmaw, 1, 26),
 GEN_VXFORM_207(vshasigmad, 1, 27),
 
+GEN_VXFORM_DUAL(vsldoi, vpermxor, 22, 0xFF, PPC_ALTIVEC, PPC_NONE),
+
 GEN_HANDLER_E(lxsdx, 0x1F, 0x0C, 0x12, 0, PPC_NONE, PPC2_VSX),
 GEN_HANDLER_E(lxsiwax, 0x1F, 0x0C, 0x02, 0, PPC_NONE, PPC2_VSX207),
 GEN_HANDLER_E(lxsiwzx, 0x1F, 0x0C, 0x00, 0, PPC_NONE, PPC2_VSX207),
-- 
1.7.1

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

* Re: [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (27 preceding siblings ...)
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 28/28] target-ppc: Altivec 2.07: Vector Permute and Exclusive OR Tom Musta
@ 2014-02-18 18:52 ` Richard W.M. Jones
  2014-02-18 23:27   ` Tom Musta
  2014-02-20 15:00 ` Alexander Graf
  29 siblings, 1 reply; 55+ messages in thread
From: Richard W.M. Jones @ 2014-02-18 18:52 UTC (permalink / raw)
  To: Tom Musta; +Cc: qemu-ppc, qemu-devel

Hi Tom,

I would love to test your latest non-upstream qemu patches, because
the better emulation of VSX may enable me to get libguestfs working on
ppc64p7.

Do you have a public git tree anywhere which contains something
testable?  The published patches no longer cleanly apply to qemu.git.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
libguestfs lets you edit virtual machines.  Supports shell scripting,
bindings from many languages.  http://libguestfs.org

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

* Re: [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07
  2014-02-18 18:52 ` [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Richard W.M. Jones
@ 2014-02-18 23:27   ` Tom Musta
  2014-02-20 10:23     ` Richard W.M. Jones
  0 siblings, 1 reply; 55+ messages in thread
From: Tom Musta @ 2014-02-18 23:27 UTC (permalink / raw)
  To: Richard W.M. Jones; +Cc: qemu-ppc, qemu-devel

On 2/18/2014 12:52 PM, Richard W.M. Jones wrote:
> Hi Tom,
> 
> I would love to test your latest non-upstream qemu patches, because
> the better emulation of VSX may enable me to get libguestfs working on
> ppc64p7.
> 
> Do you have a public git tree anywhere which contains something
> testable?  The published patches no longer cleanly apply to qemu.git.
> 
> Rich.
> 

Rich:

I think they still apply .... well mostly.

There were some patches to softfloat that Peter had pulled in independently and they are
now in qemu.git master.  And I think there may be some conflicts now with those.  So,
specifically, you can ignore these from the VSX Stage 3 series (http://lists.nongnu.org/archive/html/qemu-devel/2014-01/msg00095.html):

  Subject: [V5 PATCH 04/22] softfloat: Fix float64_to_uint32
  Subject: [V5 PATCH 01/22] softfloat: Fix float64_to_uint64
  Subject: [V5 PATCH 03/22] softfloat: Fix float64_to_uint64_round_to_zero
  Subject: [V5 PATCH 02/22] softfloat: Add float32_to_uint64()
  Subject: [V5 PATCH 05/22] softfloat: Fix float64_to_uint32_round_to_zero

and these from the ISA 2.06 series (http://lists.nongnu.org/archive/html/qemu-devel/2014-01/msg00596.html)

  Subject: [V4 PATCH 15/22] softfloat: Refactor code handling various rounding modes
  Subject: [V4 PATCH 14/22] softfloat: Factor out RoundAndPackFloat16 and NormalizeFloat16Subnormal
  Subject: [V4 PATCH 13/22] softfloat: Fix exception flag handling for float32_to_float16()
  Subject: [V4 PATCH 16/22] softfloat: Add support for ties-away rounding

I will send you directly a tarball of patches that you may find convenient.

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

* Re: [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07
  2014-02-18 23:27   ` Tom Musta
@ 2014-02-20 10:23     ` Richard W.M. Jones
  2014-02-20 12:34       ` Richard W.M. Jones
  0 siblings, 1 reply; 55+ messages in thread
From: Richard W.M. Jones @ 2014-02-20 10:23 UTC (permalink / raw)
  To: Tom Musta; +Cc: qemu-ppc, qemu-devel

Tom,

I tested your patches [see below] and I found they work very well.
They solve all the immediate problems that libguestfs was hitting with
qemu not emulating certain POWER7 instructions.

I am now running a full libguestfs test which will take several hours,
but it looks as if -- even if this test fails -- it won't be because
of lack of emulation / missing instructions in qemu.

Thanks,
Rich.


1258017 (HEAD, master) target-ppc: Fix xxpermdi When T==A or T==B
a5a770e target-ppc: Altivec 2.07: Vector Permute and Exclusive OR
d2235b6 target-ppc: Altivec 2.07: Vector SHA Sigma Instructions
823d8bc target-ppc: Altivec 2.07: AES Instructions
de692f8 target-ppc: Altivec 2.07: Binary Coded Decimal Instructions
e57670e target-ppc: Altivec 2.07: Vector Polynomial Multiply Sum
7aa4e18 target-ppc: Altivec 2.07: Vector Gather Bits by Bytes
0407211 target-ppc: Altivec 2.07: Doubleword Compares
fa643cd target-ppc: Altivec 2.07: vbpermq Instruction
3eefbc5 target-ppc: Altivec 2.07: Quadword Addition and Subtracation
679b19f target-ppc: Altivec 2.07: Vector Doubleword Rotate and Shift Instructions
c33fb5a target-ppc: Altivec 2.07: Change Bit Masks to Support 64-bit Rotates and Shifts
0d0e6fc target-ppc: Altivec 2.07: Vector Merge Instructions
535ddb7 target-ppc: Altivec 2.07: Unpack Signed Word Instructions
7c25020 target-ppc: Altivec 2.07: Pack Doubleword Instructions
1bfa3da target-ppc: Altivec 2.07: Vector Min/Max Doubleword Instructions
46b62bf target-ppc: Altivec 2.07: Vector Population Count Instructions
1208e47 target-ppc: Altivec 2.07: Add Vector Count Leading Zeroes
7560038 target-ppc: Altivec 2.07: vmuluw Instruction
5219437 target-ppc: Altivec 2.07: Multiply Even/Odd Word Instructions
e6d9b50 target-ppc: Altivec 2.07: Change VMUL_DO to Support 64-bit Integers
b00c954 target-ppc: Altivec 2.07: Add/Subtract Unsigned Doubleword Modulo
59bae01 target-ppc: Altivec 2.07: Vector Logical Instructions
652fb6b target-ppc: Altivec 2.07: Add Support for R-Form Dual Instructions
1278f7d target-ppc: Altivec 2.07: Add Opcode Macro for VX Form Instructions
96645c6 target-ppc: Altivec 2.07: Add Support for Dual Altivec Instructions
c7dc903 target-ppc: Altivec 2.07: Add GEN_VXFORM3
cc356ef target-ppc: Altivec 2.07: Update AVR Structure
236fce3 target-ppc: Altivec 2.07: Add Instruction Flag
1963af7 target-ppc: Add Store Quadword Conditional
f74301d target-ppc: Add Load Quadword and Reserve
755065e target-ppc: Store Quadword
b278fa5 target-ppc: Load Quadword
aae0775 target-ppc: Add is_user_mode Utility Routine
702c075 target-ppc: Add Flag for ISA 2.07 Load/Store Quadword Instructions
c103fc8 target-ppc: Add bctar Instruction
cab1f12 target-ppc: Add Target Address SPR (TAR) to Power8
b904000 target-ppc: Add Flag for bctar
e1adfb7 target-ppc: Add ISA2.06 lfiwzx Instruction
ef84f63 target-ppc: Enable frsqrtes on Power7 and Power8
cfc3d6c target-ppc: Add ISA 2.06 ftsqrt
003634e target-ppc: Add ISA 2.06 ftdiv Instruction
8e28300 target-ppc: Add Flag for Power ISA V2.06 Floating Point Test Instructions
795d567 target-ppc: Fix and enable fri[mnpz]
7d69a6f target-ppc: Add ISA 2.06 fcfid[u][s] Instructions
18f088a target-ppc: Add ISA2.06 Float to Integer Instructions
6211a33 target-ppc: Add Flag for ISA V2.06 Floating Point Conversion
bb961d5 target-ppc: Add ISA 2.06 stbcx. and sthcx. Instructions
42cb1ee target-ppc: Add ISA2.06 lbarx, lharx Instructions
3ee50eb target-ppc: Add Flag for ISA2.06 Atomic Instructions
a38a0de target-ppc: Add ISA 2.06 divwe[o] Instructions
0964b12 target-ppc: Add ISA 2.06 divweu[o] Instructions
57c8cb1 target-ppc: Add ISA2.06 divde[o] Instructions
e711f0f target-ppc: Add ISA2.06 divdeu[o] Instructions
4360fcf target-ppc: Add Flag for ISA2.06 Divide Extended Instructions
3813bf9 target-ppc: Add ISA2.06 bpermd Instruction
07cafd8 target-ppc: Scalar Non-Signalling Conversions
e3b40b5 target-ppc: Scalar Round to Single Precision
622d9fc target-ppc: Floating Merge Word Instructions
aab0146 target-ppc: Move To/From VSR Instructions
f716b79 target-ppc: VSX Stage 4: Add xxleqv, xxlnand and xxlorc
613656c target-ppc: VSX Stage 4: Add xscvsxdsp and xscvuxdsp
a80fde4 target-ppc: VSX Stage 4: Add Scalar SP Fused Multiply-Adds
0ce9239 target-ppc: VSX Stage 4: add xsrsqrtesp
32dc58c target-ppc: VSX Stage 4: Add xssqrtsp
71b162a target-ppc: VSX Stage 4: Add xsresp
78a46d8 target-ppc: VSX Stage 4: Add xsdivsp
1c71eda target-ppc: VSX Stage 4: Add xsmulsp
c4ddfce target-ppc: VSX Stage 4: Add xsaddsp and xssubsp
76bec27 target-ppc: VSX Stage 4: Add stxsiwx and stxsspx
68de7cb target-ppc: VSX Stage 4: Refactor stxsdx
151f526 target-ppc: VSX Stage 4: Add lxsiwax, lxsiwzx and lxsspx
bdfbd58 target-ppc: VSX Stage 4: Refactor lxsdx
a918cda target-ppc: VSX Stage 4: Add VSX 2.07 Flag
18bf3f4 target-ppc: Add VSX Rounding Instructions
586ceee target-ppc: Add VSX ISA2.06 Integer Conversion Instructions
88d8f61 target-ppc: Add VSX Floating Point to Floating Point Conversion Instructions
3cd430d target-ppc: Add VSX Vector Compare Instructions
cb31645 target-ppc: Add VSX xmax/xmin Instructions
db495f4 target-ppc: Add VSX xscmp*dp Instructions
82f6825 target-ppc: Add VSX ISA2.06 Multiply Add Instructions
62cb1d9 target-ppc: Add VSX ISA2.06 xtsqrt Instructions
c5a492b target-ppc: Add VSX ISA2.06 xtdiv Instructions
8b06bc2 target-ppc: Add VSX ISA2.06 xrsqrte Instructions
a11ab0a target-ppc: Add VSX ISA2.06 xsqrt Instructions
41e6d0f target-ppc: Add VSX ISA2.06 xre Instructions
a8cead9 target-ppc: Add VSX ISA2.06 xdiv Instructions
6c6b83b target-ppc: Add VSX ISA2.06 xmul Instructions
7b2c1ef target-ppc: Add VSX ISA2.06 xadd/xsub Instructions
c69e231 target-ppc: General Support for VSX Helpers
a0d8089 target-ppc: Add set_fprf Argument to fload_invalid_op_excp()
46eef33 (origin/master, origin/HEAD) Fix QEMU build on OpenBSD on x86 archs


-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
libguestfs lets you edit virtual machines.  Supports shell scripting,
bindings from many languages.  http://libguestfs.org

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

* Re: [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07
  2014-02-20 10:23     ` Richard W.M. Jones
@ 2014-02-20 12:34       ` Richard W.M. Jones
  2014-02-20 12:36         ` [Qemu-devel] [Qemu-ppc] " Alexander Graf
  2014-02-20 14:44         ` [Qemu-devel] " Thomas Huth
  0 siblings, 2 replies; 55+ messages in thread
From: Richard W.M. Jones @ 2014-02-20 12:34 UTC (permalink / raw)
  To: Tom Musta; +Cc: qemu-ppc, qemu-devel

On Thu, Feb 20, 2014 at 10:23:42AM +0000, Richard W.M. Jones wrote:
> I am now running a full libguestfs test which will take several hours,
> but it looks as if -- even if this test fails -- it won't be because
> of lack of emulation / missing instructions in qemu.

The tests ran.  I hit two bugs, but neither seems to be related to
qemu emulation.  Please push these patches into upstream qemu :-)

One bug is in btrfs and is related to page size being different (and
much larger) on ppc64.

The second bug is kind of interesting.  If you add ~ 256 disks (using
virtio-scsi), then it looks as if the firmware crashes.  The total
console output is below.  It looks as if "c >" is some kind of prompt.
qemu spins using 100% of CPU after this.

----------------------------------------------------------------------
Populating /vdevice methods
Populating /vdevice/vty@30000000
Populating /vdevice/nvram@71000000
C0580\b\b\b\b\bC05A0\b\b\b\b\bPopulating /pci@800000020000000
^M Adapters on 0800000020000000
                     00 0000 (D) : 106b 003f    serial bus [ usb-ohci ]
                     00 0800 (D) : 1af4 1004    virtio [ scsi ]
Populating /pci@800000020000000/scsi@1
       SCSI: Looking for devices
          100000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
          101000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
          102000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
          103000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
          104000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
          105000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
          106000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
          107000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
          108000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
C0600\b\b\b\b\bC0640\b\b\b\b\bC0690\b\b\b\b\bC06A0\b\b\b\b\bC06A8\b\b\b\b\bC06B0\b\b\b\b\bC06B8\b\b\b\b\bC06C0\b\b\b\b\b 

( 700 ) Program Exception [ 2e51cb00 ]


    R0 .. R7           R8 .. R15         R16 .. R23         R24 .. R31
000000002dca41ec   000000002dcfe058   0000000000000000   0000000000000006   
000000002e5198e0   000000002e5a91c0   0000000000000000   000000002dcb3900   
000000002dcbcb00   000000002dcb7b38   000000002dca0d10   000000002e51a050   
000000002e51cb00   000000002dd121f0   000000002dcbabd8   000000002dcb5e48   
000000002dcfe050   00000000000003d0   0000000000000056   0000000000000003   
000000002e51cb00   0000000000000000   000000002dcf2e4e   ffffffffffffffff   
0000000000000007   0000000000000000   000000002e5b0751   000000002e516010   
0000000000000003   0000000000000000   000000002dca0c30   000000002e50fae0   

    CR / XER           LR / CTR          SRR0 / SRR1        DAR / DSISR
        84000088   000000002dca1d40   000000002dcb7b38   0000000000000000   
0000000000000000   000000002dcb7b38   8000000000080000           00000000   


c > \x1b7
----------------------------------------------------------------------

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming blog: http://rwmj.wordpress.com
Fedora now supports 80 OCaml packages (the OPEN alternative to F#)

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

* Re: [Qemu-devel] [Qemu-ppc] [PATCH 00/28] target-ppc: Altivec 2.07
  2014-02-20 12:34       ` Richard W.M. Jones
@ 2014-02-20 12:36         ` Alexander Graf
  2014-02-20 12:47           ` Richard W.M. Jones
  2014-02-21 10:55           ` Aneesh Kumar K.V
  2014-02-20 14:44         ` [Qemu-devel] " Thomas Huth
  1 sibling, 2 replies; 55+ messages in thread
From: Alexander Graf @ 2014-02-20 12:36 UTC (permalink / raw)
  To: Richard W.M. Jones
  Cc: Tom Musta, list@suse.de:PowerPC, QEMU Developers, Aneesh Kumar K.V


On 20.02.2014, at 13:34, Richard W.M. Jones <rjones@redhat.com> wrote:

> On Thu, Feb 20, 2014 at 10:23:42AM +0000, Richard W.M. Jones wrote:
>> I am now running a full libguestfs test which will take several hours,
>> but it looks as if -- even if this test fails -- it won't be because
>> of lack of emulation / missing instructions in qemu.
> 
> The tests ran.  I hit two bugs, but neither seems to be related to
> qemu emulation.  Please push these patches into upstream qemu :-)

They will get into 2.0, no worries :).

> One bug is in btrfs and is related to page size being different (and
> much larger) on ppc64.

I remember bugs (oopses) with btrfs when you use a 4k page size created fs and use it on a 64k page size kernel and vice versa. They still haven't fixed that?

> The second bug is kind of interesting.  If you add ~ 256 disks (using
> virtio-scsi), then it looks as if the firmware crashes.  The total
> console output is below.  It looks as if "c >" is some kind of prompt.
> qemu spins using 100% of CPU after this.

How much RAM do you pass into the guest? Could you please try to increase that size to see whether it makes a difference? If it doesn't, Aneesh is your man :)


Alex

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

* Re: [Qemu-devel] [Qemu-ppc] [PATCH 00/28] target-ppc: Altivec 2.07
  2014-02-20 12:36         ` [Qemu-devel] [Qemu-ppc] " Alexander Graf
@ 2014-02-20 12:47           ` Richard W.M. Jones
  2014-02-21 10:55           ` Aneesh Kumar K.V
  1 sibling, 0 replies; 55+ messages in thread
From: Richard W.M. Jones @ 2014-02-20 12:47 UTC (permalink / raw)
  To: Alexander Graf
  Cc: Tom Musta, list@suse.de:PowerPC, QEMU Developers, Aneesh Kumar K.V

On Thu, Feb 20, 2014 at 01:36:57PM +0100, Alexander Graf wrote:
> 
> On 20.02.2014, at 13:34, Richard W.M. Jones <rjones@redhat.com> wrote:
> 
> > On Thu, Feb 20, 2014 at 10:23:42AM +0000, Richard W.M. Jones wrote:
> >> I am now running a full libguestfs test which will take several hours,
> >> but it looks as if -- even if this test fails -- it won't be because
> >> of lack of emulation / missing instructions in qemu.
> > 
> > The tests ran.  I hit two bugs, but neither seems to be related to
> > qemu emulation.  Please push these patches into upstream qemu :-)
> 
> They will get into 2.0, no worries :).
> 
> > One bug is in btrfs and is related to page size being different (and
> > much larger) on ppc64.
> 
> I remember bugs (oopses) with btrfs when you use a 4k page size created fs and use it on a 64k page size kernel and vice versa. They still haven't fixed that?

The failure from the log is:

  wipefs -a --force /dev/sda1
  mkfs.btrfs --alloc-start 0 --byte-count 268435456 --data single --leafsize 4096 --label test --metadata single --nodesize 4096 --sectorsize 512 /dev/sda1
  Illegal leafsize (or nodesize) 4096 (smaller than 65536)

I have not analysed this beyond simply looking at the command line
now, but it seems that this is NOT a bug in btrfs, but a bug in the
test suite, selecting a too small --leafsize parameter.  Or perhaps a
limitation in btrfs.  Anyway, doesn't look serious.

> > The second bug is kind of interesting.  If you add ~ 256 disks (using
> > virtio-scsi), then it looks as if the firmware crashes.  The total
> > console output is below.  It looks as if "c >" is some kind of prompt.
> > qemu spins using 100% of CPU after this.
>
> How much RAM do you pass into the guest? Could you please try to
> increase that size to see whether it makes a difference? If it
> doesn't, Aneesh is your man :)

In the test case we used -m 768.

I reran the test with -m 2048 -- it crashed the same way.

I reran the test with -m 20480 -- it crashed the same way.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine.  Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/

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

* Re: [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07
  2014-02-20 12:34       ` Richard W.M. Jones
  2014-02-20 12:36         ` [Qemu-devel] [Qemu-ppc] " Alexander Graf
@ 2014-02-20 14:44         ` Thomas Huth
  2014-02-20 14:52           ` Richard W.M. Jones
  1 sibling, 1 reply; 55+ messages in thread
From: Thomas Huth @ 2014-02-20 14:44 UTC (permalink / raw)
  To: Richard W.M. Jones; +Cc: Tom Musta, qemu-ppc, qemu-devel

On Thu, 20 Feb 2014 12:34:00 +0000
"Richard W.M. Jones" <rjones@redhat.com> wrote:

[...]
> 
> The second bug is kind of interesting.  If you add ~ 256 disks (using
> virtio-scsi), then it looks as if the firmware crashes.  The total
> console output is below.  It looks as if "c >" is some kind of prompt.

Yes, that's the Open Firmware prompt of the SLOF firmware here. If you
know how to program in Forth, you can use it to debug the system.

> Populating /vdevice methods
> Populating /vdevice/vty@30000000
> Populating /vdevice/nvram@71000000
> C0580\b\b\b\b\bC05A0\b\b\b\b\bPopulating /pci@800000020000000
> ^M Adapters on 0800000020000000
>                      00 0000 (D) : 106b 003f    serial bus [ usb-ohci ]
>                      00 0800 (D) : 1af4 1004    virtio [ scsi ]
> Populating /pci@800000020000000/scsi@1
>        SCSI: Looking for devices
>           100000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
>           101000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
>           102000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
>           103000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
>           104000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
>           105000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
>           106000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
>           107000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
>           108000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
> C0600\b\b\b\b\bC0640\b\b\b\b\bC0690\b\b\b\b\bC06A0\b\b\b\b\bC06A8\b\b\b\b\bC06B0\b\b\b\b\bC06B8\b\b\b\b\bC06C0\b\b\b\b\b 

So the last successful checkpoint seems to be C06C0 ? Looking at
https://github.com/aik/SLOF/blob/master/board-qemu/slof/tree.fs
there is not much critical stuff going on between that checkpoint and
the next one, so I guess the firmware just ran out of internal memory.

When you run into this crash again, could you try to enter the
following commands? They might help to confirm my suspicion:

 .free
 .available
 here .

Please also say how much memory you were using for the guest.

 Thomas

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

* Re: [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07
  2014-02-20 14:44         ` [Qemu-devel] " Thomas Huth
@ 2014-02-20 14:52           ` Richard W.M. Jones
  2014-02-24  6:32             ` [Qemu-devel] [Qemu-ppc] " Nikunj A Dadhania
  0 siblings, 1 reply; 55+ messages in thread
From: Richard W.M. Jones @ 2014-02-20 14:52 UTC (permalink / raw)
  To: Thomas Huth; +Cc: Tom Musta, qemu-ppc, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 2845 bytes --]

On Thu, Feb 20, 2014 at 03:44:33PM +0100, Thomas Huth wrote:
> On Thu, 20 Feb 2014 12:34:00 +0000
> "Richard W.M. Jones" <rjones@redhat.com> wrote:
> 
> [...]
> > 
> > The second bug is kind of interesting.  If you add ~ 256 disks (using
> > virtio-scsi), then it looks as if the firmware crashes.  The total
> > console output is below.  It looks as if "c >" is some kind of prompt.
> 
> Yes, that's the Open Firmware prompt of the SLOF firmware here. If you
> know how to program in Forth, you can use it to debug the system.
> 
> > Populating /vdevice methods
> > Populating /vdevice/vty@30000000
> > Populating /vdevice/nvram@71000000
> > C0580\b\b\b\b\bC05A0\b\b\b\b\bPopulating /pci@800000020000000
> > ^M Adapters on 0800000020000000
> >                      00 0000 (D) : 106b 003f    serial bus [ usb-ohci ]
> >                      00 0800 (D) : 1af4 1004    virtio [ scsi ]
> > Populating /pci@800000020000000/scsi@1
> >        SCSI: Looking for devices
> >           100000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
> >           101000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
> >           102000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
> >           103000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
> >           104000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
> >           105000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
> >           106000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
> >           107000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
> >           108000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
> > C0600\b\b\b\b\bC0640\b\b\b\b\bC0690\b\b\b\b\bC06A0\b\b\b\b\bC06A8\b\b\b\b\bC06B0\b\b\b\b\bC06B8\b\b\b\b\bC06C0\b\b\b\b\b 
> 
> So the last successful checkpoint seems to be C06C0 ? Looking at
> https://github.com/aik/SLOF/blob/master/board-qemu/slof/tree.fs
> there is not much critical stuff going on between that checkpoint and
> the next one, so I guess the firmware just ran out of internal memory.
> 
> When you run into this crash again, could you try to enter the
> following commands? They might help to confirm my suspicion:
> 
>  .free
>  .available
>  here .

I don't have a way to send commands here, since the appliance runs
completely captive.

However attached are:

 - the libvirt XML
 - the qemu command line

which may help to reproduce the bug.  I'm using upstream qemu + 91
patches provided by Tom, as detailed earlier in this thread.

> Please also say how much memory you were using for the guest.

I tried it with: 768 MB, 2048 MB and 20480 MB.  All failed in the same
way.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
libguestfs lets you edit virtual machines.  Supports shell scripting,
bindings from many languages.  http://libguestfs.org

[-- Attachment #2: libvirt.log --]
[-- Type: text/plain, Size: 210310 bytes --]

Making check in tests/disks
make[1]: Entering directory `/home/rjones/d/libguestfs/tests/disks'
make  check-TESTS
make[2]: Entering directory `/home/rjones/d/libguestfs/tests/disks'
/home/rjones/d/libguestfs/run --test ./test-max-disks.pl
libguestfs: trace: set_verbose true
libguestfs: trace: set_verbose = 0
libguestfs: trace: set_tmpdir "/home/rjones/d/libguestfs/tmp"
libguestfs: trace: set_tmpdir = 0
libguestfs: trace: set_cachedir "/home/rjones/d/libguestfs/tmp"
libguestfs: trace: set_cachedir = 0
libguestfs: trace: set_path "/home/rjones/d/libguestfs/appliance"
libguestfs: trace: set_path = 0
libguestfs: trace: set_hv "/home/rjones/d/qemu/qemu.wrapper"
libguestfs: trace: set_hv = 0
libguestfs: create: flags = 0, handle = 0x1002153fc20, program = perl
libguestfs: trace: max_disks
libguestfs: trace: max_disks = 255
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: get_tmpdir
libguestfs: trace: get_tmpdir = "/home/rjones/d/libguestfs/tmp"
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.1" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.1" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.2" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.2" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.3" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.3" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.4" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.4" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.5" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.5" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.6" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.6" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.7" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.7" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.8" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.8" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.9" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.9" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.10" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.10" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.11" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.11" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.12" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.12" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.13" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.13" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.14" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.14" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.15" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.15" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.16" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.16" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.17" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.17" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.18" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.18" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.19" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.19" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.20" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.20" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.21" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.21" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.22" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.22" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.23" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.23" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.24" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.24" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.25" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.25" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.26" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.26" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.27" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.27" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.28" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.28" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.29" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.29" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.30" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.30" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.31" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.31" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.32" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.32" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.33" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.33" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.34" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.34" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.35" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.35" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.36" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.36" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.37" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.37" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.38" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.38" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.39" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.39" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.40" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.40" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.41" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.41" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.42" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.42" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.43" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.43" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.44" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.44" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.45" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.45" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.46" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.46" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.47" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.47" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.48" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.48" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.49" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.49" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.50" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.50" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.51" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.51" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.52" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.52" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.53" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.53" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.54" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.54" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.55" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.55" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.56" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.56" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.57" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.57" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.58" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.58" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.59" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.59" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.60" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.60" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.61" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.61" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.62" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.62" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.63" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.63" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.64" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.64" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.65" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.65" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.66" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.66" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.67" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.67" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.68" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.68" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.69" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.69" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.70" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.70" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.71" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.71" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.72" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.72" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.73" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.73" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.74" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.74" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.75" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.75" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.76" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.76" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.77" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.77" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.78" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.78" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.79" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.79" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.80" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.80" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.81" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.81" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.82" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.82" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.83" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.83" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.84" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.84" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.85" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.85" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.86" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.86" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.87" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.87" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.88" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.88" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.89" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.89" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.90" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.90" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.91" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.91" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.92" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.92" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.93" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.93" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.94" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.94" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.95" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.95" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.96" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.96" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.97" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.97" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.98" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.98" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.99" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.99" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.100" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.100" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.101" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.101" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.102" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.102" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.103" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.103" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.104" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.104" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.105" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.105" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.106" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.106" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.107" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.107" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.108" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.108" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.109" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.109" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.110" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.110" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.111" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.111" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.112" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.112" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.113" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.113" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.114" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.114" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.115" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.115" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.116" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.116" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.117" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.117" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.118" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.118" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.119" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.119" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.120" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.120" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.121" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.121" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.122" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.122" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.123" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.123" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.124" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.124" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.125" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.125" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.126" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.126" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.127" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.127" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.128" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.128" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.129" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.129" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.130" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.130" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.131" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.131" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.132" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.132" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.133" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.133" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.134" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.134" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.135" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.135" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.136" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.136" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.137" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.137" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.138" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.138" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.139" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.139" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.140" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.140" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.141" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.141" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.142" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.142" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.143" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.143" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.144" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.144" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.145" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.145" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.146" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.146" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.147" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.147" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.148" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.148" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.149" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.149" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.150" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.150" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.151" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.151" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.152" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.152" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.153" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.153" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.154" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.154" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.155" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.155" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.156" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.156" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.157" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.157" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.158" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.158" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.159" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.159" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.160" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.160" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.161" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.161" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.162" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.162" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.163" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.163" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.164" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.164" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.165" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.165" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.166" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.166" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.167" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.167" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.168" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.168" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.169" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.169" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.170" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.170" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.171" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.171" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.172" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.172" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.173" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.173" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.174" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.174" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.175" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.175" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.176" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.176" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.177" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.177" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.178" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.178" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.179" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.179" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.180" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.180" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.181" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.181" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.182" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.182" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.183" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.183" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.184" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.184" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.185" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.185" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.186" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.186" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.187" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.187" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.188" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.188" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.189" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.189" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.190" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.190" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.191" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.191" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.192" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.192" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.193" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.193" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.194" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.194" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.195" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.195" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.196" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.196" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.197" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.197" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.198" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.198" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.199" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.199" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.200" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.200" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.201" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.201" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.202" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.202" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.203" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.203" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.204" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.204" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.205" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.205" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.206" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.206" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.207" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.207" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.208" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.208" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.209" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.209" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.210" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.210" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.211" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.211" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.212" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.212" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.213" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.213" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.214" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.214" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.215" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.215" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.216" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.216" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.217" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.217" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.218" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.218" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.219" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.219" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.220" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.220" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.221" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.221" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.222" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.222" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.223" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.223" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.224" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.224" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.225" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.225" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.226" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.226" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.227" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.227" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.228" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.228" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.229" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.229" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.230" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.230" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.231" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.231" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.232" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.232" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.233" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.233" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.234" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.234" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.235" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.235" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.236" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.236" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.237" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.237" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.238" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.238" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.239" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.239" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.240" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.240" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.241" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.241" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.242" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.242" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.243" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.243" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.244" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.244" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.245" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.245" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.246" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.246" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.247" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.247" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.248" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.248" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.249" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.249" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.250" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.250" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.251" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.251" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.252" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.252" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.253" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.253" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.254" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.254" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: add_drive_scratch 1048576
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.255" "raw" 1048576
libguestfs: trace: disk_create = 0
libguestfs: trace: add_drive "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.255" "format:raw" "cachemode:unsafe"
libguestfs: trace: add_drive = 0
libguestfs: trace: add_drive_scratch = 0
libguestfs: trace: launch
libguestfs: trace: version
libguestfs: trace: version = <struct guestfs_version *>
libguestfs: trace: get_backend
libguestfs: trace: get_backend = "libvirt"
libguestfs: launch: program=perl
libguestfs: launch: version=1.25.36
libguestfs: launch: backend registered: unix
libguestfs: launch: backend registered: uml
libguestfs: launch: backend registered: libvirt
libguestfs: launch: backend registered: direct
libguestfs: launch: backend=libvirt
libguestfs: launch: tmpdir=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs
libguestfs: launch: umask=0002
libguestfs: launch: euid=1005
libguestfs: libvirt version = 1002000 (1.2.0)
libguestfs: guest random name = guestfs-4xhp0yowac5zxg2u
libguestfs: [00000ms] connect to libvirt
libguestfs: opening libvirt handle: URI = qemu:///session, auth = default+wrapper, flags = 0
libguestfs: successfully opened libvirt handle: conn = 0x10021506630
libguestfs: [00002ms] get libvirt capabilities
libguestfs: [00025ms] parsing capabilities XML
libguestfs: [00026ms] build appliance
libguestfs: command: run: /usr/bin/supermin-helper
libguestfs: command: run: \ --verbose
libguestfs: command: run: \ -f checksum
libguestfs: command: run: \ --host-cpu powerpc64
libguestfs: command: run: \ /home/rjones/d/libguestfs/appliance/supermin.d
supermin helper [00000ms] whitelist = (not specified)
supermin helper [00000ms] host_cpu = powerpc64
supermin helper [00000ms] dtb_wildcard = (not specified)
supermin helper [00000ms] inputs:
supermin helper [00000ms] inputs[0] = /home/rjones/d/libguestfs/appliance/supermin.d
supermin helper [00000ms] outputs:
supermin helper [00000ms] kernel = (none)
supermin helper [00000ms] dtb = (none)
supermin helper [00000ms] initrd = (none)
supermin helper [00000ms] appliance = (none)
checking modpath /lib/modules/3.11.6-301.fc20.ppc64p7 is a directory
checking modpath /lib/modules/3.12.6-300.fc20.ppc64p7 is a directory
checking modpath /lib/modules/3.12.5-301.fc20.ppc64p7 is a directory
checking modpath /lib/modules/0-rescue-8488253d7c5341f49f4aea17b67cd7eb is a directory
ignoring vmlinuz-0-rescue-8488253d7c5341f49f4aea17b67cd7eb (no modpath /lib/modules/0-rescue-8488253d7c5341f49f4aea17b67cd7eb)
picked kernel vmlinuz-3.12.6-300.fc20.ppc64p7
supermin helper [00000ms] finished creating kernel
supermin helper [00000ms] visiting /home/rjones/d/libguestfs/appliance/supermin.d
supermin helper [00000ms] visiting /home/rjones/d/libguestfs/appliance/supermin.d/base.img.gz
supermin helper [00000ms] visiting /home/rjones/d/libguestfs/appliance/supermin.d/daemon.img.gz
supermin helper [00000ms] visiting /home/rjones/d/libguestfs/appliance/supermin.d/hostfiles
supermin helper [00045ms] visiting /home/rjones/d/libguestfs/appliance/supermin.d/init.img
supermin helper [00045ms] visiting /home/rjones/d/libguestfs/appliance/supermin.d/udev-rules.img
supermin helper [00045ms] adding kernel modules
supermin helper [00076ms] finished creating appliance
libguestfs: checksum of existing appliance: 305d2e072c19e6962d9cae1beb4b471ff98d9f5116c5e7fbb5218a3c467514c2
libguestfs: trace: get_cachedir
libguestfs: trace: get_cachedir = "/home/rjones/d/libguestfs/tmp"
libguestfs: trace: disk_create "/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/overlay256" "qcow2" -1 "backingfile:/home/rjones/d/libguestfs/tmp/.guestfs-1005/root.40404" "backingformat:raw"
libguestfs: command: run: qemu-img
libguestfs: command: run: \ create
libguestfs: command: run: \ -f qcow2
libguestfs: command: run: \ -o backing_file=/home/rjones/d/libguestfs/tmp/.guestfs-1005/root.40404,backing_fmt=raw
libguestfs: command: run: \ /home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/overlay256
Formatting '/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/overlay256', fmt=qcow2 size=4294967296 backing_file='/home/rjones/d/libguestfs/tmp/.guestfs-1005/root.40404' backing_fmt='raw' encryption=off cluster_size=65536 lazy_refcounts=off 
libguestfs: trace: disk_create = 0
libguestfs: [00177ms] create libvirt XML
libguestfs: command: run: dmesg | grep -Eoh 'lpj=[[:digit:]]+'
libguestfs: read_lpj_from_dmesg: external command exited with error status 1
libguestfs: read_lpj_from_files: no boot messages files are readable
libguestfs: trace: get_cachedir
libguestfs: trace: get_cachedir = "/home/rjones/d/libguestfs/tmp"
libguestfs: libvirt XML:\n<?xml version="1.0"?>\n<domain type="qemu" xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0">\n  <name>guestfs-4xhp0yowac5zxg2u</name>\n  <memory unit="MiB">768</memory>\n  <currentMemory unit="MiB">768</currentMemory>\n  <vcpu>1</vcpu>\n  <clock offset="utc">\n    <timer name="rtc" tickpolicy="catchup"/>\n    <timer name="pit" tickpolicy="delay"/>\n  </clock>\n  <os>\n    <type machine="pseries">hvm</type>\n    <kernel>/home/rjones/d/libguestfs/tmp/.guestfs-1005/kernel.40404</kernel>\n    <initrd>/home/rjones/d/libguestfs/tmp/.guestfs-1005/initrd.40404</initrd>\n    <cmdline>panic=1 console=ttyS0 udevtimeout=600 no_timer_check acpi=off printk.time=1 cgroup_disable=memory root=/dev/sdiv selinux=0 guestfs_verbose=1 TERM=xterm-256color</cmdline>\n  </os>\n  <seclabel type="none"/>\n  <on_reboot>destroy</on_reboot>\n  <devices>\n    <emulator>/home/rjones/d/qemu/qemu.wrapper</emulator>\n    <controller type="scsi" index="0" model="virtio-scsi"/>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.1"/>\n      <target dev="sda" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="0" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.2"/>\n      <target dev="sdb" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="1" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.3"/>\n      <target dev="sdc" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="2" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.4"/>\n      <target dev="sdd" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="3" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.5"/>\n      <target dev="sde" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="4" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.6"/>\n      <target dev="sdf" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="5" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.7"/>\n      <target dev="sdg" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="6" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.8"/>\n      <target dev="sdh" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="7" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.9"/>\n      <target dev="sdi" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="8" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.10"/>\n      <target dev="sdj" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="9" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.11"/>\n      <target dev="sdk" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="10" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.12"/>\n      <target dev="sdl" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="11" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.13"/>\n      <target dev="sdm" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="12" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.14"/>\n      <target dev="sdn" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="13" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.15"/>\n      <target dev="sdo" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="14" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.16"/>\n      <target dev="sdp" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="15" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.17"/>\n      <target dev="sdq" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="16" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.18"/>\n      <target dev="sdr" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="17" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.19"/>\n      <target dev="sds" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="18" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.20"/>\n      <target dev="sdt" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="19" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.21"/>\n      <target dev="sdu" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="20" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.22"/>\n      <target dev="sdv" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="21" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.23"/>\n      <target dev="sdw" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="22" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.24"/>\n      <target dev="sdx" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="23" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.25"/>\n      <target dev="sdy" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="24" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.26"/>\n      <target dev="sdz" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="25" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.27"/>\n      <target dev="sdaa" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="26" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.28"/>\n      <target dev="sdab" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="27" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.29"/>\n      <target dev="sdac" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="28" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.30"/>\n      <target dev="sdad" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="29" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.31"/>\n      <target dev="sdae" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="30" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.32"/>\n      <target dev="sdaf" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="31" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.33"/>\n      <target dev="sdag" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="32" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.34"/>\n      <target dev="sdah" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="33" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.35"/>\n      <target dev="sdai" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="34" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.36"/>\n      <target dev="sdaj" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="35" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.37"/>\n      <target dev="sdak" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="36" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.38"/>\n      <target dev="sdal" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="37" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.39"/>\n      <target dev="sdam" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="38" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.40"/>\n      <target dev="sdan" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="39" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.41"/>\n      <target dev="sdao" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="40" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.42"/>\n      <target dev="sdap" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="41" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.43"/>\n      <target dev="sdaq" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="42" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.44"/>\n      <target dev="sdar" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="43" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.45"/>\n      <target dev="sdas" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="44" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.46"/>\n      <target dev="sdat" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="45" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.47"/>\n      <target dev="sdau" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="46" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.48"/>\n      <target dev="sdav" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="47" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.49"/>\n      <target dev="sdaw" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="48" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.50"/>\n      <target dev="sdax" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="49" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.51"/>\n      <target dev="sday" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="50" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.52"/>\n      <target dev="sdaz" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="51" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.53"/>\n      <target dev="sdba" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="52" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.54"/>\n      <target dev="sdbb" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="53" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.55"/>\n      <target dev="sdbc" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="54" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.56"/>\n      <target dev="sdbd" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="55" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.57"/>\n      <target dev="sdbe" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="56" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.58"/>\n      <target dev="sdbf" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="57" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.59"/>\n      <target dev="sdbg" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="58" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.60"/>\n      <target dev="sdbh" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="59" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.61"/>\n      <target dev="sdbi" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="60" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.62"/>\n      <target dev="sdbj" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="61" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.63"/>\n      <target dev="sdbk" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="62" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.64"/>\n      <target dev="sdbl" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="63" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.65"/>\n      <target dev="sdbm" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="64" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.66"/>\n      <target dev="sdbn" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="65" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.67"/>\n      <target dev="sdbo" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="66" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.68"/>\n      <target dev="sdbp" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="67" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.69"/>\n      <target dev="sdbq" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="68" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.70"/>\n      <target dev="sdbr" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="69" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.71"/>\n      <target dev="sdbs" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="70" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.72"/>\n      <target dev="sdbt" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="71" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.73"/>\n      <target dev="sdbu" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="72" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.74"/>\n      <target dev="sdbv" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="73" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.75"/>\n      <target dev="sdbw" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="74" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.76"/>\n      <target dev="sdbx" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="75" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.77"/>\n      <target dev="sdby" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="76" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.78"/>\n      <target dev="sdbz" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="77" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.79"/>\n      <target dev="sdca" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="78" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.80"/>\n      <target dev="sdcb" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="79" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.81"/>\n      <target dev="sdcc" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="80" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.82"/>\n      <target dev="sdcd" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="81" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.83"/>\n      <target dev="sdce" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="82" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.84"/>\n      <target dev="sdcf" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="83" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.85"/>\n      <target dev="sdcg" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="84" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.86"/>\n      <target dev="sdch" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="85" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.87"/>\n      <target dev="sdci" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="86" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.88"/>\n      <target dev="sdcj" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="87" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.89"/>\n      <target dev="sdck" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="88" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.90"/>\n      <target dev="sdcl" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="89" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.91"/>\n      <target dev="sdcm" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="90" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.92"/>\n      <target dev="sdcn" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="91" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.93"/>\n      <target dev="sdco" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="92" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.94"/>\n      <target dev="sdcp" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="93" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.95"/>\n      <target dev="sdcq" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="94" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.96"/>\n      <target dev="sdcr" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="95" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.97"/>\n      <target dev="sdcs" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="96" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.98"/>\n      <target dev="sdct" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="97" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.99"/>\n      <target dev="sdcu" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="98" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.100"/>\n      <target dev="sdcv" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="99" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.101"/>\n      <target dev="sdcw" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="100" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.102"/>\n      <target dev="sdcx" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="101" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.103"/>\n      <target dev="sdcy" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="102" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.104"/>\n      <target dev="sdcz" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="103" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.105"/>\n      <target dev="sdda" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="104" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.106"/>\n      <target dev="sddb" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="105" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.107"/>\n      <target dev="sddc" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="106" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.108"/>\n      <target dev="sddd" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="107" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.109"/>\n      <target dev="sdde" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="108" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.110"/>\n      <target dev="sddf" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="109" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.111"/>\n      <target dev="sddg" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="110" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.112"/>\n      <target dev="sddh" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="111" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.113"/>\n      <target dev="sddi" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="112" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.114"/>\n      <target dev="sddj" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="113" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.115"/>\n      <target dev="sddk" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="114" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.116"/>\n      <target dev="sddl" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="115" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.117"/>\n      <target dev="sddm" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="116" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.118"/>\n      <target dev="sddn" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="117" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.119"/>\n      <target dev="sddo" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="118" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.120"/>\n      <target dev="sddp" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="119" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.121"/>\n      <target dev="sddq" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="120" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.122"/>\n      <target dev="sddr" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="121" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.123"/>\n      <target dev="sdds" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="122" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.124"/>\n      <target dev="sddt" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="123" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.125"/>\n      <target dev="sddu" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="124" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.126"/>\n      <target dev="sddv" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="125" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.127"/>\n      <target dev="sddw" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="126" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.128"/>\n      <target dev="sddx" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="127" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.129"/>\n      <target dev="sddy" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="128" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.130"/>\n      <target dev="sddz" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="129" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.131"/>\n      <target dev="sdea" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="130" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.132"/>\n      <target dev="sdeb" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="131" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.133"/>\n      <target dev="sdec" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="132" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.134"/>\n      <target dev="sded" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="133" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.135"/>\n      <target dev="sdee" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="134" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.136"/>\n      <target dev="sdef" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="135" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.137"/>\n      <target dev="sdeg" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="136" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.138"/>\n      <target dev="sdeh" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="137" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.139"/>\n      <target dev="sdei" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="138" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.140"/>\n      <target dev="sdej" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="139" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.141"/>\n      <target dev="sdek" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="140" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.142"/>\n      <target dev="sdel" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="141" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.143"/>\n      <target dev="sdem" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="142" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.144"/>\n      <target dev="sden" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="143" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.145"/>\n      <target dev="sdeo" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="144" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.146"/>\n      <target dev="sdep" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="145" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.147"/>\n      <target dev="sdeq" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="146" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.148"/>\n      <target dev="sder" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="147" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.149"/>\n      <target dev="sdes" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="148" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.150"/>\n      <target dev="sdet" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="149" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.151"/>\n      <target dev="sdeu" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="150" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.152"/>\n      <target dev="sdev" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="151" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.153"/>\n      <target dev="sdew" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="152" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.154"/>\n      <target dev="sdex" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="153" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.155"/>\n      <target dev="sdey" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="154" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.156"/>\n      <target dev="sdez" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="155" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.157"/>\n      <target dev="sdfa" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="156" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.158"/>\n      <target dev="sdfb" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="157" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.159"/>\n      <target dev="sdfc" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="158" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.160"/>\n      <target dev="sdfd" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="159" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.161"/>\n      <target dev="sdfe" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="160" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.162"/>\n      <target dev="sdff" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="161" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.163"/>\n      <target dev="sdfg" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="162" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.164"/>\n      <target dev="sdfh" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="163" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.165"/>\n      <target dev="sdfi" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="164" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.166"/>\n      <target dev="sdfj" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="165" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.167"/>\n      <target dev="sdfk" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="166" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.168"/>\n      <target dev="sdfl" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="167" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.169"/>\n      <target dev="sdfm" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="168" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.170"/>\n      <target dev="sdfn" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="169" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.171"/>\n      <target dev="sdfo" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="170" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.172"/>\n      <target dev="sdfp" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="171" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.173"/>\n      <target dev="sdfq" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="172" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.174"/>\n      <target dev="sdfr" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="173" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.175"/>\n      <target dev="sdfs" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="174" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.176"/>\n      <target dev="sdft" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="175" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.177"/>\n      <target dev="sdfu" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="176" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.178"/>\n      <target dev="sdfv" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="177" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.179"/>\n      <target dev="sdfw" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="178" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.180"/>\n      <target dev="sdfx" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="179" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.181"/>\n      <target dev="sdfy" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="180" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.182"/>\n      <target dev="sdfz" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="181" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.183"/>\n      <target dev="sdga" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="182" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.184"/>\n      <target dev="sdgb" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="183" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.185"/>\n      <target dev="sdgc" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="184" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.186"/>\n      <target dev="sdgd" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="185" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.187"/>\n      <target dev="sdge" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="186" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.188"/>\n      <target dev="sdgf" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="187" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.189"/>\n      <target dev="sdgg" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="188" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.190"/>\n      <target dev="sdgh" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="189" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.191"/>\n      <target dev="sdgi" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="190" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.192"/>\n      <target dev="sdgj" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="191" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.193"/>\n      <target dev="sdgk" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="192" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.194"/>\n      <target dev="sdgl" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="193" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.195"/>\n      <target dev="sdgm" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="194" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.196"/>\n      <target dev="sdgn" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="195" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.197"/>\n      <target dev="sdgo" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="196" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.198"/>\n      <target dev="sdgp" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="197" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.199"/>\n      <target dev="sdgq" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="198" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.200"/>\n      <target dev="sdgr" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="199" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.201"/>\n      <target dev="sdgs" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="200" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.202"/>\n      <target dev="sdgt" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="201" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.203"/>\n      <target dev="sdgu" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="202" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.204"/>\n      <target dev="sdgv" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="203" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.205"/>\n      <target dev="sdgw" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="204" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.206"/>\n      <target dev="sdgx" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="205" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.207"/>\n      <target dev="sdgy" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="206" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.208"/>\n      <target dev="sdgz" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="207" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.209"/>\n      <target dev="sdha" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="208" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.210"/>\n      <target dev="sdhb" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="209" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.211"/>\n      <target dev="sdhc" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="210" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.212"/>\n      <target dev="sdhd" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="211" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.213"/>\n      <target dev="sdhe" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="212" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.214"/>\n      <target dev="sdhf" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="213" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.215"/>\n      <target dev="sdhg" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="214" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.216"/>\n      <target dev="sdhh" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="215" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.217"/>\n      <target dev="sdhi" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="216" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.218"/>\n      <target dev="sdhj" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="217" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.219"/>\n      <target dev="sdhk" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="218" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.220"/>\n      <target dev="sdhl" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="219" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.221"/>\n      <target dev="sdhm" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="220" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.222"/>\n      <target dev="sdhn" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="221" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.223"/>\n      <target dev="sdho" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="222" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.224"/>\n      <target dev="sdhp" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="223" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.225"/>\n      <target dev="sdhq" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="224" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.226"/>\n      <target dev="sdhr" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="225" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.227"/>\n      <target dev="sdhs" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="226" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.228"/>\n      <target dev="sdht" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="227" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.229"/>\n      <target dev="sdhu" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="228" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.230"/>\n      <target dev="sdhv" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="229" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.231"/>\n      <target dev="sdhw" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="230" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.232"/>\n      <target dev="sdhx" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="231" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.233"/>\n      <target dev="sdhy" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="232" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.234"/>\n      <target dev="sdhz" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="233" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.235"/>\n      <target dev="sdia" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="234" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.236"/>\n      <target dev="sdib" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="235" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.237"/>\n      <target dev="sdic" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="236" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.238"/>\n      <target dev="sdid" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="237" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.239"/>\n      <target dev="sdie" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="238" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.240"/>\n      <target dev="sdif" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="239" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.241"/>\n      <target dev="sdig" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="240" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.242"/>\n      <target dev="sdih" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="241" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.243"/>\n      <target dev="sdii" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="242" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.244"/>\n      <target dev="sdij" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="243" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.245"/>\n      <target dev="sdik" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="244" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.246"/>\n      <target dev="sdil" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="245" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.247"/>\n      <target dev="sdim" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="246" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.248"/>\n      <target dev="sdin" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="247" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.249"/>\n      <target dev="sdio" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="248" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.250"/>\n      <target dev="sdip" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="249" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.251"/>\n      <target dev="sdiq" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="250" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.252"/>\n      <target dev="sdir" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="251" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.253"/>\n      <target dev="sdis" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="252" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.254"/>\n      <target dev="sdit" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="253" unit="0"/>\n    </disk>\n    <disk device="disk" type="file">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.255"/>\n      <target dev="sdiu" bus="scsi"/>\n      <driver name="qemu" type="raw" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="254" unit="0"/>\n    </disk>\n    <disk type="file" device="disk">\n      <source file="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/overlay256"/>\n      <target dev="sdiv" bus="scsi"/>\n      <driver name="qemu" type="qcow2" cache="unsafe"/>\n      <address type="drive" controller="0" bus="0" target="255" unit="0"/>\n      <shareable/>\n    </disk>\n    <serial type="unix">\n      <source mode="connect" path="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/console.sock"/>\n      <target port="0"/>\n    </serial>\n    <channel type="unix">\n      <source mode="connect" path="/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/guestfsd.sock"/>\n      <target type="virtio" name="org.libguestfs.channel.0"/>\n    </channel>\n  </devices>\n  <qemu:commandline>\n    <qemu:env name="TMPDIR" value="/home/rjones/d/libguestfs/tmp"/>\n  </qemu:commandline>\n</domain>\n
libguestfs: trace: get_cachedir
libguestfs: trace: get_cachedir = "/home/rjones/d/libguestfs/tmp"
libguestfs: command: run: ls
libguestfs: command: run: \ -a
libguestfs: command: run: \ -l
libguestfs: command: run: \ -Z /home/rjones/d/libguestfs/tmp/.guestfs-1005
libguestfs: drwxr-xr-x. rjones rjones unconfined_u:object_r:user_tmp_t:s0 .
libguestfs: drwxrwxr-x. rjones rjones system_u:object_r:tmp_t:s0       ..
libguestfs: -rw-r--r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 checksum
libguestfs: -rw-r--r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 initrd
libguestfs: -rw-r--r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 initrd.40404
libguestfs: -rw-r--r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 kernel
libguestfs: -rw-r--r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 kernel.40404
libguestfs: -rw-r--r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 root
libguestfs: -rw-r--r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 root.40404
libguestfs: command: run: ls
libguestfs: command: run: \ -a
libguestfs: command: run: \ -l
libguestfs: command: run: \ -Z /home/rjones/d/libguestfs/tmp/libguestfsHgpVHs
libguestfs: drwxr-xr-x. rjones rjones unconfined_u:object_r:user_tmp_t:s0 .
libguestfs: drwxrwxr-x. rjones rjones system_u:object_r:tmp_t:s0       ..
libguestfs: srwxrwxr-x. rjones rjones unconfined_u:object_r:user_tmp_t:s0 console.sock
libguestfs: srwxrwxr-x. rjones rjones unconfined_u:object_r:user_tmp_t:s0 guestfsd.sock
libguestfs: -rw-r--r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 overlay256
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.1
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.10
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.100
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.101
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.102
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.103
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.104
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.105
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.106
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.107
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.108
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.109
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.11
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.110
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.111
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.112
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.113
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.114
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.115
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.116
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.117
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.118
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.119
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.12
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.120
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.121
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.122
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.123
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.124
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.125
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.126
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.127
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.128
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.129
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.13
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.130
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.131
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.132
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.133
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.134
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.135
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.136
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.137
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.138
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.139
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.14
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.140
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.141
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.142
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.143
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.144
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.145
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.146
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.147
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.148
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.149
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.15
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.150
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.151
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.152
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.153
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.154
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.155
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.156
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.157
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.158
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.159
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.16
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.160
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.161
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.162
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.163
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.164
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.165
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.166
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.167
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.168
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.169
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.17
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.170
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.171
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.172
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.173
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.174
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.175
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.176
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.177
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.178
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.179
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.18
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.180
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.181
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.182
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.183
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.184
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.185
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.186
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.187
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.188
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.189
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.19
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.190
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.191
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.192
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.193
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.194
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.195
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.196
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.197
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.198
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.199
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.2
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.20
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.200
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.201
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.202
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.203
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.204
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.205
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.206
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.207
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.208
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.209
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.21
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.210
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.211
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.212
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.213
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.214
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.215
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.216
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.217
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.218
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.219
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.22
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.220
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.221
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.222
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.223
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.224
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.225
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.226
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.227
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.228
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.229
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.23
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.230
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.231
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.232
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.233
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.234
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.235
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.236
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.237
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.238
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.239
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.24
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.240
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.241
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.242
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.243
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.244
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.245
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.246
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.247
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.248
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.249
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.25
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.250
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.251
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.252
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.253
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.254
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.255
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.26
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.27
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.28
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.29
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.3
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.30
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.31
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.32
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.33
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.34
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.35
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.36
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.37
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.38
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.39
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.4
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.40
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.41
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.42
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.43
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.44
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.45
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.46
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.47
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.48
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.49
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.5
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.50
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.51
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.52
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.53
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.54
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.55
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.56
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.57
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.58
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.59
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.6
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.60
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.61
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.62
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.63
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.64
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.65
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.66
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.67
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.68
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.69
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.7
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.70
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.71
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.72
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.73
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.74
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.75
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.76
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.77
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.78
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.79
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.8
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.80
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.81
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.82
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.83
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.84
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.85
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.86
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.87
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.88
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.89
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.9
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.90
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.91
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.92
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.93
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.94
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.95
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.96
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.97
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.98
libguestfs: -rw-rw-r--. rjones rjones unconfined_u:object_r:user_tmp_t:s0 scratch.99
libguestfs: -rwxrwxr-x. rjones rjones unconfined_u:object_r:user_tmp_t:s0 umask-check
libguestfs: [00212ms] launch libvirt guest


SLOF\x1b[0m\x1b[?25l **********************************************************************
\x1b[1mQEMU Starting
\x1b[0m Build Date = Oct 15 2013 15:47:32
 FW Version = git-e2e8ac901e617573
 Press "s" to enter Open Firmware.

\x1b[0m\x1b[?25hC0000\b\b\b\b\bC0100\b\b\b\b\bC0120\b\b\b\b\bC0140\b\b\b\b\bC0200\b\b\b\b\bC0201\b\b\b\b\bC0220\b\b\b\b\bC0240\b\b\b\b\bC0260\b\b\b\b\bC0270\b\b\b\b\bC02E0\b\b\b\b\bC0300\b\b\b\b\bC0320\b\b\b\b\bC0340\b\b\b\b\bC0360\b\b\b\b\bC0370\b\b\b\b\bC0371\b\b\b\b\bC0372\b\b\b\b\bC0373\b\b\b\b\bC0374\b\b\b\b\bC0390\b\b\b\b\bC03F0\b\b\b\b\bC0400\b\b\b\b\bC0480\b\b\b\b\bC04C0\b\b\b\b\bC04D0\b\b\b\b\bC0500\b\b\b\b\bPopulating /vdevice methods
Populating /vdevice/vty@30000000
Populating /vdevice/nvram@71000000
C0580\b\b\b\b\bC05A0\b\b\b\b\bPopulating /pci@800000020000000
\r Adapters on 0800000020000000
                     00 0000 (D) : 106b 003f    serial bus [ usb-ohci ]
                     00 0800 (D) : 1af4 1004    virtio [ scsi ]
Populating /pci@800000020000000/scsi@1
       SCSI: Looking for devices
          100000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
          101000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
          102000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
          103000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
          104000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
          105000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
          106000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
          107000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
          108000000000000 DISK     : "QEMU     QEMU HARDDISK    1.7."
C0600\b\b\b\b\bC0640\b\b\b\b\bC0690\b\b\b\b\bC06A0\b\b\b\b\bC06A8\b\b\b\b\bC06B0\b\b\b\b\bC06B8\b\b\b\b\bC06C0\b\b\b\b\b 

( 700 ) Program Exception [ 2e51cb00 ]


    R0 .. R7           R8 .. R15         R16 .. R23         R24 .. R31
000000002dca41ec   000000002dcfe058   0000000000000000   0000000000000006   
000000002e5198e0   000000002e5a91c0   0000000000000000   000000002dcb3900   
000000002dcbcb00   000000002dcb7b38   000000002dca0d10   000000002e51a050   
000000002e51cb00   000000002dd121f0   000000002dcbabd8   000000002dcb5e48   
000000002dcfe050   00000000000003d0   0000000000000056   0000000000000003   
000000002e51cb00   0000000000000000   000000002dcf2e4e   ffffffffffffffff   
0000000000000007   0000000000000000   000000002e5b0751   000000002e516010   
0000000000000003   0000000000000000   000000002dca0c30   000000002e50fae0   

    CR / XER           LR / CTR          SRR0 / SRR1        DAR / DSISR
        84000088   000000002dca1d40   000000002dcb7b38   0000000000000000   
0000000000000000   000000002dcb7b38   8000000000080000           00000000   


c > \x1b7libguestfs: child_cleanup: 0x1002153fc20: child process died
libguestfs: trace: launch = -1 (error)
guestfs_launch failed, see earlier error messages at /home/rjones/d/libguestfs/tests/disks/test-max-disks.pl line 38.
libguestfs: trace: close
libguestfs: closing guestfs handle 0x1002153fc20 (state 0)
libguestfs: command: run: rm
libguestfs: command: run: \ -rf /home/rjones/d/libguestfs/tmp/libguestfsHgpVHs
max_disks is 255
/home/rjones/d/libguestfs/run: command failed with exit code 2
FAIL: test-max-disks.pl

[-- Attachment #3: guestfs-4xhp0yowac5zxg2u.log --]
[-- Type: text/plain, Size: 59497 bytes --]

2014-02-20 11:32:30.882+0000: starting up
LC_ALL=C LD_LIBRARY_PATH=/home/rjones/d/libguestfs/ruby/ext/guestfs:/home/rjones/d/libguestfs/src/.libs:/home/rjones/d/libguestfs/gobject/.libs PATH=/home/rjones/d/libguestfs/align:/home/rjones/d/libguestfs/builder:/home/rjones/d/libguestfs/cat:/home/rjones/d/libguestfs/df:/home/rjones/d/libguestfs/diff:/home/rjones/d/libguestfs/edit:/home/rjones/d/libguestfs/erlang:/home/rjones/d/libguestfs/fish:/home/rjones/d/libguestfs/format:/home/rjones/d/libguestfs/fuse:/home/rjones/d/libguestfs/make-fs:/home/rjones/d/libguestfs/rescue:/home/rjones/d/libguestfs/resize:/home/rjones/d/libguestfs/sparsify:/home/rjones/d/libguestfs/sysprep:/home/rjones/d/libguestfs/test-tool:/home/rjones/d/libguestfs/tools:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/rjones/.local/bin:/home/rjones/bin HOME=/home/rjones USER=rjones LOGNAME=rjones QEMU_AUDIO_DRV=none TMPDIR=/home/rjones/d/libguestfs/tmp /home/rjones/d/qemu/qemu.wrapper -name guestfs-4xhp0yowac5zxg2u -S -machine pseries,accel=tcg,usb=off -m 768 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid ada7183f-b051-48be-8a9e-da409137d713 -nographic -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/home/rjones/.config/libvirt/qemu/lib/guestfs-4xhp0yowac5zxg2u.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -no-reboot -kernel /home/rjones/d/libguestfs/tmp/.guestfs-1005/kernel.40404 -initrd /home/rjones/d/libguestfs/tmp/.guestfs-1005/initrd.40404 -append panic=1 console=ttyS0 udevtimeout=600 no_timer_check acpi=off printk.time=1 cgroup_disable=memory root=/dev/sdiv selinux=0 guestfs_verbose=1 TERM=xterm-256color -device virtio-scsi-pci,id=scsi0,bus=pci,addr=0x1 -device virtio-serial-pci,id=virtio-serial0,bus=pci,addr=0x3 -usb -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.1,if=none,id=drive-scsi0-0-0-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0-0-0-0,id=scsi0-0-0-0,bootindex=1 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.2,if=none,id=drive-scsi0-0-1-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=1,lun=0,drive=drive-scsi0-0-1-0,id=scsi0-0-1-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.3,if=none,id=drive-scsi0-0-2-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=2,lun=0,drive=drive-scsi0-0-2-0,id=scsi0-0-2-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.4,if=none,id=drive-scsi0-0-3-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=3,lun=0,drive=drive-scsi0-0-3-0,id=scsi0-0-3-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.5,if=none,id=drive-scsi0-0-4-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=4,lun=0,drive=drive-scsi0-0-4-0,id=scsi0-0-4-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.6,if=none,id=drive-scsi0-0-5-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=5,lun=0,drive=drive-scsi0-0-5-0,id=scsi0-0-5-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.7,if=none,id=drive-scsi0-0-6-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=6,lun=0,drive=drive-scsi0-0-6-0,id=scsi0-0-6-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.8,if=none,id=drive-scsi0-0-7-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=7,lun=0,drive=drive-scsi0-0-7-0,id=scsi0-0-7-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.9,if=none,id=drive-scsi0-0-8-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=8,lun=0,drive=drive-scsi0-0-8-0,id=scsi0-0-8-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.10,if=none,id=drive-scsi0-0-9-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=9,lun=0,drive=drive-scsi0-0-9-0,id=scsi0-0-9-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.11,if=none,id=drive-scsi0-0-10-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=10,lun=0,drive=drive-scsi0-0-10-0,id=scsi0-0-10-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.12,if=none,id=drive-scsi0-0-11-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=11,lun=0,drive=drive-scsi0-0-11-0,id=scsi0-0-11-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.13,if=none,id=drive-scsi0-0-12-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=12,lun=0,drive=drive-scsi0-0-12-0,id=scsi0-0-12-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.14,if=none,id=drive-scsi0-0-13-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=13,lun=0,drive=drive-scsi0-0-13-0,id=scsi0-0-13-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.15,if=none,id=drive-scsi0-0-14-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=14,lun=0,drive=drive-scsi0-0-14-0,id=scsi0-0-14-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.16,if=none,id=drive-scsi0-0-15-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=15,lun=0,drive=drive-scsi0-0-15-0,id=scsi0-0-15-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.17,if=none,id=drive-scsi0-0-16-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=16,lun=0,drive=drive-scsi0-0-16-0,id=scsi0-0-16-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.18,if=none,id=drive-scsi0-0-17-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=17,lun=0,drive=drive-scsi0-0-17-0,id=scsi0-0-17-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.19,if=none,id=drive-scsi0-0-18-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=18,lun=0,drive=drive-scsi0-0-18-0,id=scsi0-0-18-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.20,if=none,id=drive-scsi0-0-19-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=19,lun=0,drive=drive-scsi0-0-19-0,id=scsi0-0-19-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.21,if=none,id=drive-scsi0-0-20-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=20,lun=0,drive=drive-scsi0-0-20-0,id=scsi0-0-20-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.22,if=none,id=drive-scsi0-0-21-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=21,lun=0,drive=drive-scsi0-0-21-0,id=scsi0-0-21-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.23,if=none,id=drive-scsi0-0-22-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=22,lun=0,drive=drive-scsi0-0-22-0,id=scsi0-0-22-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.24,if=none,id=drive-scsi0-0-23-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=23,lun=0,drive=drive-scsi0-0-23-0,id=scsi0-0-23-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.25,if=none,id=drive-scsi0-0-24-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=24,lun=0,drive=drive-scsi0-0-24-0,id=scsi0-0-24-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.26,if=none,id=drive-scsi0-0-25-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=25,lun=0,drive=drive-scsi0-0-25-0,id=scsi0-0-25-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.27,if=none,id=drive-scsi0-0-26-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=26,lun=0,drive=drive-scsi0-0-26-0,id=scsi0-0-26-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.28,if=none,id=drive-scsi0-0-27-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=27,lun=0,drive=drive-scsi0-0-27-0,id=scsi0-0-27-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.29,if=none,id=drive-scsi0-0-28-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=28,lun=0,drive=drive-scsi0-0-28-0,id=scsi0-0-28-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.30,if=none,id=drive-scsi0-0-29-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=29,lun=0,drive=drive-scsi0-0-29-0,id=scsi0-0-29-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.31,if=none,id=drive-scsi0-0-30-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=30,lun=0,drive=drive-scsi0-0-30-0,id=scsi0-0-30-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.32,if=none,id=drive-scsi0-0-31-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=31,lun=0,drive=drive-scsi0-0-31-0,id=scsi0-0-31-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.33,if=none,id=drive-scsi0-0-32-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=32,lun=0,drive=drive-scsi0-0-32-0,id=scsi0-0-32-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.34,if=none,id=drive-scsi0-0-33-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=33,lun=0,drive=drive-scsi0-0-33-0,id=scsi0-0-33-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.35,if=none,id=drive-scsi0-0-34-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=34,lun=0,drive=drive-scsi0-0-34-0,id=scsi0-0-34-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.36,if=none,id=drive-scsi0-0-35-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=35,lun=0,drive=drive-scsi0-0-35-0,id=scsi0-0-35-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.37,if=none,id=drive-scsi0-0-36-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=36,lun=0,drive=drive-scsi0-0-36-0,id=scsi0-0-36-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.38,if=none,id=drive-scsi0-0-37-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=37,lun=0,drive=drive-scsi0-0-37-0,id=scsi0-0-37-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.39,if=none,id=drive-scsi0-0-38-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=38,lun=0,drive=drive-scsi0-0-38-0,id=scsi0-0-38-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.40,if=none,id=drive-scsi0-0-39-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=39,lun=0,drive=drive-scsi0-0-39-0,id=scsi0-0-39-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.41,if=none,id=drive-scsi0-0-40-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=40,lun=0,drive=drive-scsi0-0-40-0,id=scsi0-0-40-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.42,if=none,id=drive-scsi0-0-41-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=41,lun=0,drive=drive-scsi0-0-41-0,id=scsi0-0-41-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.43,if=none,id=drive-scsi0-0-42-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=42,lun=0,drive=drive-scsi0-0-42-0,id=scsi0-0-42-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.44,if=none,id=drive-scsi0-0-43-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=43,lun=0,drive=drive-scsi0-0-43-0,id=scsi0-0-43-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.45,if=none,id=drive-scsi0-0-44-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=44,lun=0,drive=drive-scsi0-0-44-0,id=scsi0-0-44-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.46,if=none,id=drive-scsi0-0-45-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=45,lun=0,drive=drive-scsi0-0-45-0,id=scsi0-0-45-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.47,if=none,id=drive-scsi0-0-46-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=46,lun=0,drive=drive-scsi0-0-46-0,id=scsi0-0-46-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.48,if=none,id=drive-scsi0-0-47-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=47,lun=0,drive=drive-scsi0-0-47-0,id=scsi0-0-47-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.49,if=none,id=drive-scsi0-0-48-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=48,lun=0,drive=drive-scsi0-0-48-0,id=scsi0-0-48-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.50,if=none,id=drive-scsi0-0-49-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=49,lun=0,drive=drive-scsi0-0-49-0,id=scsi0-0-49-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.51,if=none,id=drive-scsi0-0-50-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=50,lun=0,drive=drive-scsi0-0-50-0,id=scsi0-0-50-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.52,if=none,id=drive-scsi0-0-51-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=51,lun=0,drive=drive-scsi0-0-51-0,id=scsi0-0-51-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.53,if=none,id=drive-scsi0-0-52-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=52,lun=0,drive=drive-scsi0-0-52-0,id=scsi0-0-52-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.54,if=none,id=drive-scsi0-0-53-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=53,lun=0,drive=drive-scsi0-0-53-0,id=scsi0-0-53-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.55,if=none,id=drive-scsi0-0-54-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=54,lun=0,drive=drive-scsi0-0-54-0,id=scsi0-0-54-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.56,if=none,id=drive-scsi0-0-55-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=55,lun=0,drive=drive-scsi0-0-55-0,id=scsi0-0-55-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.57,if=none,id=drive-scsi0-0-56-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=56,lun=0,drive=drive-scsi0-0-56-0,id=scsi0-0-56-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.58,if=none,id=drive-scsi0-0-57-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=57,lun=0,drive=drive-scsi0-0-57-0,id=scsi0-0-57-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.59,if=none,id=drive-scsi0-0-58-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=58,lun=0,drive=drive-scsi0-0-58-0,id=scsi0-0-58-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.60,if=none,id=drive-scsi0-0-59-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=59,lun=0,drive=drive-scsi0-0-59-0,id=scsi0-0-59-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.61,if=none,id=drive-scsi0-0-60-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=60,lun=0,drive=drive-scsi0-0-60-0,id=scsi0-0-60-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.62,if=none,id=drive-scsi0-0-61-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=61,lun=0,drive=drive-scsi0-0-61-0,id=scsi0-0-61-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.63,if=none,id=drive-scsi0-0-62-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=62,lun=0,drive=drive-scsi0-0-62-0,id=scsi0-0-62-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.64,if=none,id=drive-scsi0-0-63-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=63,lun=0,drive=drive-scsi0-0-63-0,id=scsi0-0-63-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.65,if=none,id=drive-scsi0-0-64-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=64,lun=0,drive=drive-scsi0-0-64-0,id=scsi0-0-64-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.66,if=none,id=drive-scsi0-0-65-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=65,lun=0,drive=drive-scsi0-0-65-0,id=scsi0-0-65-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.67,if=none,id=drive-scsi0-0-66-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=66,lun=0,drive=drive-scsi0-0-66-0,id=scsi0-0-66-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.68,if=none,id=drive-scsi0-0-67-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=67,lun=0,drive=drive-scsi0-0-67-0,id=scsi0-0-67-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.69,if=none,id=drive-scsi0-0-68-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=68,lun=0,drive=drive-scsi0-0-68-0,id=scsi0-0-68-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.70,if=none,id=drive-scsi0-0-69-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=69,lun=0,drive=drive-scsi0-0-69-0,id=scsi0-0-69-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.71,if=none,id=drive-scsi0-0-70-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=70,lun=0,drive=drive-scsi0-0-70-0,id=scsi0-0-70-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.72,if=none,id=drive-scsi0-0-71-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=71,lun=0,drive=drive-scsi0-0-71-0,id=scsi0-0-71-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.73,if=none,id=drive-scsi0-0-72-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=72,lun=0,drive=drive-scsi0-0-72-0,id=scsi0-0-72-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.74,if=none,id=drive-scsi0-0-73-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=73,lun=0,drive=drive-scsi0-0-73-0,id=scsi0-0-73-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.75,if=none,id=drive-scsi0-0-74-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=74,lun=0,drive=drive-scsi0-0-74-0,id=scsi0-0-74-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.76,if=none,id=drive-scsi0-0-75-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=75,lun=0,drive=drive-scsi0-0-75-0,id=scsi0-0-75-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.77,if=none,id=drive-scsi0-0-76-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=76,lun=0,drive=drive-scsi0-0-76-0,id=scsi0-0-76-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.78,if=none,id=drive-scsi0-0-77-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=77,lun=0,drive=drive-scsi0-0-77-0,id=scsi0-0-77-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.79,if=none,id=drive-scsi0-0-78-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=78,lun=0,drive=drive-scsi0-0-78-0,id=scsi0-0-78-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.80,if=none,id=drive-scsi0-0-79-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=79,lun=0,drive=drive-scsi0-0-79-0,id=scsi0-0-79-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.81,if=none,id=drive-scsi0-0-80-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=80,lun=0,drive=drive-scsi0-0-80-0,id=scsi0-0-80-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.82,if=none,id=drive-scsi0-0-81-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=81,lun=0,drive=drive-scsi0-0-81-0,id=scsi0-0-81-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.83,if=none,id=drive-scsi0-0-82-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=82,lun=0,drive=drive-scsi0-0-82-0,id=scsi0-0-82-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.84,if=none,id=drive-scsi0-0-83-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=83,lun=0,drive=drive-scsi0-0-83-0,id=scsi0-0-83-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.85,if=none,id=drive-scsi0-0-84-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=84,lun=0,drive=drive-scsi0-0-84-0,id=scsi0-0-84-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.86,if=none,id=drive-scsi0-0-85-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=85,lun=0,drive=drive-scsi0-0-85-0,id=scsi0-0-85-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.87,if=none,id=drive-scsi0-0-86-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=86,lun=0,drive=drive-scsi0-0-86-0,id=scsi0-0-86-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.88,if=none,id=drive-scsi0-0-87-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=87,lun=0,drive=drive-scsi0-0-87-0,id=scsi0-0-87-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.89,if=none,id=drive-scsi0-0-88-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=88,lun=0,drive=drive-scsi0-0-88-0,id=scsi0-0-88-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.90,if=none,id=drive-scsi0-0-89-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=89,lun=0,drive=drive-scsi0-0-89-0,id=scsi0-0-89-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.91,if=none,id=drive-scsi0-0-90-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=90,lun=0,drive=drive-scsi0-0-90-0,id=scsi0-0-90-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.92,if=none,id=drive-scsi0-0-91-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=91,lun=0,drive=drive-scsi0-0-91-0,id=scsi0-0-91-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.93,if=none,id=drive-scsi0-0-92-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=92,lun=0,drive=drive-scsi0-0-92-0,id=scsi0-0-92-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.94,if=none,id=drive-scsi0-0-93-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=93,lun=0,drive=drive-scsi0-0-93-0,id=scsi0-0-93-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.95,if=none,id=drive-scsi0-0-94-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=94,lun=0,drive=drive-scsi0-0-94-0,id=scsi0-0-94-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.96,if=none,id=drive-scsi0-0-95-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=95,lun=0,drive=drive-scsi0-0-95-0,id=scsi0-0-95-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.97,if=none,id=drive-scsi0-0-96-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=96,lun=0,drive=drive-scsi0-0-96-0,id=scsi0-0-96-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.98,if=none,id=drive-scsi0-0-97-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=97,lun=0,drive=drive-scsi0-0-97-0,id=scsi0-0-97-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.99,if=none,id=drive-scsi0-0-98-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=98,lun=0,drive=drive-scsi0-0-98-0,id=scsi0-0-98-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.100,if=none,id=drive-scsi0-0-99-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=99,lun=0,drive=drive-scsi0-0-99-0,id=scsi0-0-99-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.101,if=none,id=drive-scsi0-0-100-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=100,lun=0,drive=drive-scsi0-0-100-0,id=scsi0-0-100-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.102,if=none,id=drive-scsi0-0-101-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=101,lun=0,drive=drive-scsi0-0-101-0,id=scsi0-0-101-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.103,if=none,id=drive-scsi0-0-102-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=102,lun=0,drive=drive-scsi0-0-102-0,id=scsi0-0-102-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.104,if=none,id=drive-scsi0-0-103-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=103,lun=0,drive=drive-scsi0-0-103-0,id=scsi0-0-103-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.105,if=none,id=drive-scsi0-0-104-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=104,lun=0,drive=drive-scsi0-0-104-0,id=scsi0-0-104-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.106,if=none,id=drive-scsi0-0-105-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=105,lun=0,drive=drive-scsi0-0-105-0,id=scsi0-0-105-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.107,if=none,id=drive-scsi0-0-106-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=106,lun=0,drive=drive-scsi0-0-106-0,id=scsi0-0-106-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.108,if=none,id=drive-scsi0-0-107-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=107,lun=0,drive=drive-scsi0-0-107-0,id=scsi0-0-107-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.109,if=none,id=drive-scsi0-0-108-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=108,lun=0,drive=drive-scsi0-0-108-0,id=scsi0-0-108-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.110,if=none,id=drive-scsi0-0-109-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=109,lun=0,drive=drive-scsi0-0-109-0,id=scsi0-0-109-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.111,if=none,id=drive-scsi0-0-110-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=110,lun=0,drive=drive-scsi0-0-110-0,id=scsi0-0-110-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.112,if=none,id=drive-scsi0-0-111-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=111,lun=0,drive=drive-scsi0-0-111-0,id=scsi0-0-111-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.113,if=none,id=drive-scsi0-0-112-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=112,lun=0,drive=drive-scsi0-0-112-0,id=scsi0-0-112-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.114,if=none,id=drive-scsi0-0-113-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=113,lun=0,drive=drive-scsi0-0-113-0,id=scsi0-0-113-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.115,if=none,id=drive-scsi0-0-114-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=114,lun=0,drive=drive-scsi0-0-114-0,id=scsi0-0-114-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.116,if=none,id=drive-scsi0-0-115-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=115,lun=0,drive=drive-scsi0-0-115-0,id=scsi0-0-115-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.117,if=none,id=drive-scsi0-0-116-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=116,lun=0,drive=drive-scsi0-0-116-0,id=scsi0-0-116-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.118,if=none,id=drive-scsi0-0-117-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=117,lun=0,drive=drive-scsi0-0-117-0,id=scsi0-0-117-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.119,if=none,id=drive-scsi0-0-118-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=118,lun=0,drive=drive-scsi0-0-118-0,id=scsi0-0-118-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.120,if=none,id=drive-scsi0-0-119-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=119,lun=0,drive=drive-scsi0-0-119-0,id=scsi0-0-119-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.121,if=none,id=drive-scsi0-0-120-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=120,lun=0,drive=drive-scsi0-0-120-0,id=scsi0-0-120-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.122,if=none,id=drive-scsi0-0-121-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=121,lun=0,drive=drive-scsi0-0-121-0,id=scsi0-0-121-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.123,if=none,id=drive-scsi0-0-122-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=122,lun=0,drive=drive-scsi0-0-122-0,id=scsi0-0-122-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.124,if=none,id=drive-scsi0-0-123-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=123,lun=0,drive=drive-scsi0-0-123-0,id=scsi0-0-123-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.125,if=none,id=drive-scsi0-0-124-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=124,lun=0,drive=drive-scsi0-0-124-0,id=scsi0-0-124-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.126,if=none,id=drive-scsi0-0-125-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=125,lun=0,drive=drive-scsi0-0-125-0,id=scsi0-0-125-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.127,if=none,id=drive-scsi0-0-126-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=126,lun=0,drive=drive-scsi0-0-126-0,id=scsi0-0-126-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.128,if=none,id=drive-scsi0-0-127-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=127,lun=0,drive=drive-scsi0-0-127-0,id=scsi0-0-127-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.129,if=none,id=drive-scsi0-0-128-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=128,lun=0,drive=drive-scsi0-0-128-0,id=scsi0-0-128-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.130,if=none,id=drive-scsi0-0-129-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=129,lun=0,drive=drive-scsi0-0-129-0,id=scsi0-0-129-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.131,if=none,id=drive-scsi0-0-130-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=130,lun=0,drive=drive-scsi0-0-130-0,id=scsi0-0-130-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.132,if=none,id=drive-scsi0-0-131-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=131,lun=0,drive=drive-scsi0-0-131-0,id=scsi0-0-131-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.133,if=none,id=drive-scsi0-0-132-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=132,lun=0,drive=drive-scsi0-0-132-0,id=scsi0-0-132-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.134,if=none,id=drive-scsi0-0-133-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=133,lun=0,drive=drive-scsi0-0-133-0,id=scsi0-0-133-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.135,if=none,id=drive-scsi0-0-134-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=134,lun=0,drive=drive-scsi0-0-134-0,id=scsi0-0-134-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.136,if=none,id=drive-scsi0-0-135-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=135,lun=0,drive=drive-scsi0-0-135-0,id=scsi0-0-135-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.137,if=none,id=drive-scsi0-0-136-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=136,lun=0,drive=drive-scsi0-0-136-0,id=scsi0-0-136-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.138,if=none,id=drive-scsi0-0-137-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=137,lun=0,drive=drive-scsi0-0-137-0,id=scsi0-0-137-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.139,if=none,id=drive-scsi0-0-138-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=138,lun=0,drive=drive-scsi0-0-138-0,id=scsi0-0-138-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.140,if=none,id=drive-scsi0-0-139-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=139,lun=0,drive=drive-scsi0-0-139-0,id=scsi0-0-139-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.141,if=none,id=drive-scsi0-0-140-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=140,lun=0,drive=drive-scsi0-0-140-0,id=scsi0-0-140-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.142,if=none,id=drive-scsi0-0-141-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=141,lun=0,drive=drive-scsi0-0-141-0,id=scsi0-0-141-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.143,if=none,id=drive-scsi0-0-142-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=142,lun=0,drive=drive-scsi0-0-142-0,id=scsi0-0-142-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.144,if=none,id=drive-scsi0-0-143-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=143,lun=0,drive=drive-scsi0-0-143-0,id=scsi0-0-143-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.145,if=none,id=drive-scsi0-0-144-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=144,lun=0,drive=drive-scsi0-0-144-0,id=scsi0-0-144-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.146,if=none,id=drive-scsi0-0-145-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=145,lun=0,drive=drive-scsi0-0-145-0,id=scsi0-0-145-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.147,if=none,id=drive-scsi0-0-146-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=146,lun=0,drive=drive-scsi0-0-146-0,id=scsi0-0-146-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.148,if=none,id=drive-scsi0-0-147-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=147,lun=0,drive=drive-scsi0-0-147-0,id=scsi0-0-147-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.149,if=none,id=drive-scsi0-0-148-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=148,lun=0,drive=drive-scsi0-0-148-0,id=scsi0-0-148-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.150,if=none,id=drive-scsi0-0-149-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=149,lun=0,drive=drive-scsi0-0-149-0,id=scsi0-0-149-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.151,if=none,id=drive-scsi0-0-150-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=150,lun=0,drive=drive-scsi0-0-150-0,id=scsi0-0-150-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.152,if=none,id=drive-scsi0-0-151-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=151,lun=0,drive=drive-scsi0-0-151-0,id=scsi0-0-151-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.153,if=none,id=drive-scsi0-0-152-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=152,lun=0,drive=drive-scsi0-0-152-0,id=scsi0-0-152-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.154,if=none,id=drive-scsi0-0-153-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=153,lun=0,drive=drive-scsi0-0-153-0,id=scsi0-0-153-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.155,if=none,id=drive-scsi0-0-154-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=154,lun=0,drive=drive-scsi0-0-154-0,id=scsi0-0-154-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.156,if=none,id=drive-scsi0-0-155-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=155,lun=0,drive=drive-scsi0-0-155-0,id=scsi0-0-155-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.157,if=none,id=drive-scsi0-0-156-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=156,lun=0,drive=drive-scsi0-0-156-0,id=scsi0-0-156-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.158,if=none,id=drive-scsi0-0-157-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=157,lun=0,drive=drive-scsi0-0-157-0,id=scsi0-0-157-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.159,if=none,id=drive-scsi0-0-158-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=158,lun=0,drive=drive-scsi0-0-158-0,id=scsi0-0-158-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.160,if=none,id=drive-scsi0-0-159-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=159,lun=0,drive=drive-scsi0-0-159-0,id=scsi0-0-159-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.161,if=none,id=drive-scsi0-0-160-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=160,lun=0,drive=drive-scsi0-0-160-0,id=scsi0-0-160-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.162,if=none,id=drive-scsi0-0-161-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=161,lun=0,drive=drive-scsi0-0-161-0,id=scsi0-0-161-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.163,if=none,id=drive-scsi0-0-162-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=162,lun=0,drive=drive-scsi0-0-162-0,id=scsi0-0-162-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.164,if=none,id=drive-scsi0-0-163-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=163,lun=0,drive=drive-scsi0-0-163-0,id=scsi0-0-163-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.165,if=none,id=drive-scsi0-0-164-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=164,lun=0,drive=drive-scsi0-0-164-0,id=scsi0-0-164-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.166,if=none,id=drive-scsi0-0-165-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=165,lun=0,drive=drive-scsi0-0-165-0,id=scsi0-0-165-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.167,if=none,id=drive-scsi0-0-166-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=166,lun=0,drive=drive-scsi0-0-166-0,id=scsi0-0-166-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.168,if=none,id=drive-scsi0-0-167-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=167,lun=0,drive=drive-scsi0-0-167-0,id=scsi0-0-167-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.169,if=none,id=drive-scsi0-0-168-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=168,lun=0,drive=drive-scsi0-0-168-0,id=scsi0-0-168-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.170,if=none,id=drive-scsi0-0-169-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=169,lun=0,drive=drive-scsi0-0-169-0,id=scsi0-0-169-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.171,if=none,id=drive-scsi0-0-170-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=170,lun=0,drive=drive-scsi0-0-170-0,id=scsi0-0-170-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.172,if=none,id=drive-scsi0-0-171-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=171,lun=0,drive=drive-scsi0-0-171-0,id=scsi0-0-171-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.173,if=none,id=drive-scsi0-0-172-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=172,lun=0,drive=drive-scsi0-0-172-0,id=scsi0-0-172-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.174,if=none,id=drive-scsi0-0-173-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=173,lun=0,drive=drive-scsi0-0-173-0,id=scsi0-0-173-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.175,if=none,id=drive-scsi0-0-174-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=174,lun=0,drive=drive-scsi0-0-174-0,id=scsi0-0-174-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.176,if=none,id=drive-scsi0-0-175-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=175,lun=0,drive=drive-scsi0-0-175-0,id=scsi0-0-175-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.177,if=none,id=drive-scsi0-0-176-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=176,lun=0,drive=drive-scsi0-0-176-0,id=scsi0-0-176-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.178,if=none,id=drive-scsi0-0-177-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=177,lun=0,drive=drive-scsi0-0-177-0,id=scsi0-0-177-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.179,if=none,id=drive-scsi0-0-178-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=178,lun=0,drive=drive-scsi0-0-178-0,id=scsi0-0-178-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.180,if=none,id=drive-scsi0-0-179-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=179,lun=0,drive=drive-scsi0-0-179-0,id=scsi0-0-179-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.181,if=none,id=drive-scsi0-0-180-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=180,lun=0,drive=drive-scsi0-0-180-0,id=scsi0-0-180-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.182,if=none,id=drive-scsi0-0-181-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=181,lun=0,drive=drive-scsi0-0-181-0,id=scsi0-0-181-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.183,if=none,id=drive-scsi0-0-182-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=182,lun=0,drive=drive-scsi0-0-182-0,id=scsi0-0-182-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.184,if=none,id=drive-scsi0-0-183-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=183,lun=0,drive=drive-scsi0-0-183-0,id=scsi0-0-183-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.185,if=none,id=drive-scsi0-0-184-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=184,lun=0,drive=drive-scsi0-0-184-0,id=scsi0-0-184-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.186,if=none,id=drive-scsi0-0-185-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=185,lun=0,drive=drive-scsi0-0-185-0,id=scsi0-0-185-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.187,if=none,id=drive-scsi0-0-186-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=186,lun=0,drive=drive-scsi0-0-186-0,id=scsi0-0-186-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.188,if=none,id=drive-scsi0-0-187-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=187,lun=0,drive=drive-scsi0-0-187-0,id=scsi0-0-187-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.189,if=none,id=drive-scsi0-0-188-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=188,lun=0,drive=drive-scsi0-0-188-0,id=scsi0-0-188-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.190,if=none,id=drive-scsi0-0-189-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=189,lun=0,drive=drive-scsi0-0-189-0,id=scsi0-0-189-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.191,if=none,id=drive-scsi0-0-190-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=190,lun=0,drive=drive-scsi0-0-190-0,id=scsi0-0-190-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.192,if=none,id=drive-scsi0-0-191-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=191,lun=0,drive=drive-scsi0-0-191-0,id=scsi0-0-191-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.193,if=none,id=drive-scsi0-0-192-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=192,lun=0,drive=drive-scsi0-0-192-0,id=scsi0-0-192-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.194,if=none,id=drive-scsi0-0-193-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=193,lun=0,drive=drive-scsi0-0-193-0,id=scsi0-0-193-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.195,if=none,id=drive-scsi0-0-194-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=194,lun=0,drive=drive-scsi0-0-194-0,id=scsi0-0-194-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.196,if=none,id=drive-scsi0-0-195-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=195,lun=0,drive=drive-scsi0-0-195-0,id=scsi0-0-195-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.197,if=none,id=drive-scsi0-0-196-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=196,lun=0,drive=drive-scsi0-0-196-0,id=scsi0-0-196-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.198,if=none,id=drive-scsi0-0-197-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=197,lun=0,drive=drive-scsi0-0-197-0,id=scsi0-0-197-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.199,if=none,id=drive-scsi0-0-198-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=198,lun=0,drive=drive-scsi0-0-198-0,id=scsi0-0-198-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.200,if=none,id=drive-scsi0-0-199-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=199,lun=0,drive=drive-scsi0-0-199-0,id=scsi0-0-199-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.201,if=none,id=drive-scsi0-0-200-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=200,lun=0,drive=drive-scsi0-0-200-0,id=scsi0-0-200-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.202,if=none,id=drive-scsi0-0-201-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=201,lun=0,drive=drive-scsi0-0-201-0,id=scsi0-0-201-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.203,if=none,id=drive-scsi0-0-202-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=202,lun=0,drive=drive-scsi0-0-202-0,id=scsi0-0-202-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.204,if=none,id=drive-scsi0-0-203-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=203,lun=0,drive=drive-scsi0-0-203-0,id=scsi0-0-203-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.205,if=none,id=drive-scsi0-0-204-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=204,lun=0,drive=drive-scsi0-0-204-0,id=scsi0-0-204-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.206,if=none,id=drive-scsi0-0-205-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=205,lun=0,drive=drive-scsi0-0-205-0,id=scsi0-0-205-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.207,if=none,id=drive-scsi0-0-206-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=206,lun=0,drive=drive-scsi0-0-206-0,id=scsi0-0-206-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.208,if=none,id=drive-scsi0-0-207-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=207,lun=0,drive=drive-scsi0-0-207-0,id=scsi0-0-207-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.209,if=none,id=drive-scsi0-0-208-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=208,lun=0,drive=drive-scsi0-0-208-0,id=scsi0-0-208-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.210,if=none,id=drive-scsi0-0-209-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=209,lun=0,drive=drive-scsi0-0-209-0,id=scsi0-0-209-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.211,if=none,id=drive-scsi0-0-210-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=210,lun=0,drive=drive-scsi0-0-210-0,id=scsi0-0-210-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.212,if=none,id=drive-scsi0-0-211-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=211,lun=0,drive=drive-scsi0-0-211-0,id=scsi0-0-211-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.213,if=none,id=drive-scsi0-0-212-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=212,lun=0,drive=drive-scsi0-0-212-0,id=scsi0-0-212-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.214,if=none,id=drive-scsi0-0-213-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=213,lun=0,drive=drive-scsi0-0-213-0,id=scsi0-0-213-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.215,if=none,id=drive-scsi0-0-214-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=214,lun=0,drive=drive-scsi0-0-214-0,id=scsi0-0-214-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.216,if=none,id=drive-scsi0-0-215-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=215,lun=0,drive=drive-scsi0-0-215-0,id=scsi0-0-215-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.217,if=none,id=drive-scsi0-0-216-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=216,lun=0,drive=drive-scsi0-0-216-0,id=scsi0-0-216-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.218,if=none,id=drive-scsi0-0-217-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=217,lun=0,drive=drive-scsi0-0-217-0,id=scsi0-0-217-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.219,if=none,id=drive-scsi0-0-218-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=218,lun=0,drive=drive-scsi0-0-218-0,id=scsi0-0-218-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.220,if=none,id=drive-scsi0-0-219-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=219,lun=0,drive=drive-scsi0-0-219-0,id=scsi0-0-219-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.221,if=none,id=drive-scsi0-0-220-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=220,lun=0,drive=drive-scsi0-0-220-0,id=scsi0-0-220-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.222,if=none,id=drive-scsi0-0-221-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=221,lun=0,drive=drive-scsi0-0-221-0,id=scsi0-0-221-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.223,if=none,id=drive-scsi0-0-222-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=222,lun=0,drive=drive-scsi0-0-222-0,id=scsi0-0-222-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.224,if=none,id=drive-scsi0-0-223-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=223,lun=0,drive=drive-scsi0-0-223-0,id=scsi0-0-223-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.225,if=none,id=drive-scsi0-0-224-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=224,lun=0,drive=drive-scsi0-0-224-0,id=scsi0-0-224-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.226,if=none,id=drive-scsi0-0-225-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=225,lun=0,drive=drive-scsi0-0-225-0,id=scsi0-0-225-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.227,if=none,id=drive-scsi0-0-226-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=226,lun=0,drive=drive-scsi0-0-226-0,id=scsi0-0-226-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.228,if=none,id=drive-scsi0-0-227-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=227,lun=0,drive=drive-scsi0-0-227-0,id=scsi0-0-227-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.229,if=none,id=drive-scsi0-0-228-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=228,lun=0,drive=drive-scsi0-0-228-0,id=scsi0-0-228-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.230,if=none,id=drive-scsi0-0-229-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=229,lun=0,drive=drive-scsi0-0-229-0,id=scsi0-0-229-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.231,if=none,id=drive-scsi0-0-230-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=230,lun=0,drive=drive-scsi0-0-230-0,id=scsi0-0-230-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.232,if=none,id=drive-scsi0-0-231-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=231,lun=0,drive=drive-scsi0-0-231-0,id=scsi0-0-231-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.233,if=none,id=drive-scsi0-0-232-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=232,lun=0,drive=drive-scsi0-0-232-0,id=scsi0-0-232-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.234,if=none,id=drive-scsi0-0-233-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=233,lun=0,drive=drive-scsi0-0-233-0,id=scsi0-0-233-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.235,if=none,id=drive-scsi0-0-234-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=234,lun=0,drive=drive-scsi0-0-234-0,id=scsi0-0-234-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.236,if=none,id=drive-scsi0-0-235-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=235,lun=0,drive=drive-scsi0-0-235-0,id=scsi0-0-235-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.237,if=none,id=drive-scsi0-0-236-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=236,lun=0,drive=drive-scsi0-0-236-0,id=scsi0-0-236-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.238,if=none,id=drive-scsi0-0-237-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=237,lun=0,drive=drive-scsi0-0-237-0,id=scsi0-0-237-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.239,if=none,id=drive-scsi0-0-238-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=238,lun=0,drive=drive-scsi0-0-238-0,id=scsi0-0-238-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.240,if=none,id=drive-scsi0-0-239-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=239,lun=0,drive=drive-scsi0-0-239-0,id=scsi0-0-239-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.241,if=none,id=drive-scsi0-0-240-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=240,lun=0,drive=drive-scsi0-0-240-0,id=scsi0-0-240-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.242,if=none,id=drive-scsi0-0-241-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=241,lun=0,drive=drive-scsi0-0-241-0,id=scsi0-0-241-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.243,if=none,id=drive-scsi0-0-242-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=242,lun=0,drive=drive-scsi0-0-242-0,id=scsi0-0-242-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.244,if=none,id=drive-scsi0-0-243-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=243,lun=0,drive=drive-scsi0-0-243-0,id=scsi0-0-243-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.245,if=none,id=drive-scsi0-0-244-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=244,lun=0,drive=drive-scsi0-0-244-0,id=scsi0-0-244-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.246,if=none,id=drive-scsi0-0-245-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=245,lun=0,drive=drive-scsi0-0-245-0,id=scsi0-0-245-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.247,if=none,id=drive-scsi0-0-246-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=246,lun=0,drive=drive-scsi0-0-246-0,id=scsi0-0-246-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.248,if=none,id=drive-scsi0-0-247-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=247,lun=0,drive=drive-scsi0-0-247-0,id=scsi0-0-247-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.249,if=none,id=drive-scsi0-0-248-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=248,lun=0,drive=drive-scsi0-0-248-0,id=scsi0-0-248-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.250,if=none,id=drive-scsi0-0-249-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=249,lun=0,drive=drive-scsi0-0-249-0,id=scsi0-0-249-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.251,if=none,id=drive-scsi0-0-250-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=250,lun=0,drive=drive-scsi0-0-250-0,id=scsi0-0-250-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.252,if=none,id=drive-scsi0-0-251-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=251,lun=0,drive=drive-scsi0-0-251-0,id=scsi0-0-251-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.253,if=none,id=drive-scsi0-0-252-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=252,lun=0,drive=drive-scsi0-0-252-0,id=scsi0-0-252-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.254,if=none,id=drive-scsi0-0-253-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=253,lun=0,drive=drive-scsi0-0-253-0,id=scsi0-0-253-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/scratch.255,if=none,id=drive-scsi0-0-254-0,format=raw,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=254,lun=0,drive=drive-scsi0-0-254-0,id=scsi0-0-254-0 -drive file=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/overlay256,if=none,id=drive-scsi0-0-255-0,format=qcow2,cache=unsafe -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=255,lun=0,drive=drive-scsi0-0-255-0,id=scsi0-0-255-0 -chardev socket,id=charserial0,path=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/console.sock -device spapr-vty,chardev=charserial0,reg=0x30000000 -chardev socket,id=charchannel0,path=/home/rjones/d/libguestfs/tmp/libguestfsHgpVHs/guestfsd.sock -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=org.libguestfs.channel.0 -device virtio-balloon-pci,id=balloon0,bus=pci,addr=0x4
Domain id=17 is tainted: custom-argv
Warning: Disabling some instructions which are not emulated by TCG (0x0, 0x4)
qemu: terminating on signal 15 from pid 40449
2014-02-20 12:31:58.314+0000: shutting down

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

* Re: [Qemu-devel] [Qemu-ppc] [PATCH 00/28] target-ppc: Altivec 2.07
  2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
                   ` (28 preceding siblings ...)
  2014-02-18 18:52 ` [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Richard W.M. Jones
@ 2014-02-20 15:00 ` Alexander Graf
  29 siblings, 0 replies; 55+ messages in thread
From: Alexander Graf @ 2014-02-20 15:00 UTC (permalink / raw)
  To: Tom Musta; +Cc: Peter Maydell, list@suse.de:PowerPC, QEMU Developers


On 12.02.2014, at 22:22, Tom Musta <tommusta@gmail.com> wrote:

> This patch series implements the changes to Altivec introduced by Power ISA
> Version 2.07.

Thanks, applied to ppc-next. You might want to work with Peter and friends on Risu for PPC to verify that everything you're implementing here actually matches what real hardware does :).


Alex

> 
> Tom Musta (28):
>  target-ppc: Altivec 2.07: Add Instruction Flag
>  target-ppc: Altivec 2.07: Update AVR Structure
>  target-ppc: Altivec 2.07: Add GEN_VXFORM3
>  target-ppc: Altivec 2.07: Add Support for Dual Altivec Instructions
>  target-ppc: Altivec 2.07: Add Opcode Macro for VX Form Instructions
>  target-ppc: Altivec 2.07: Add Support for R-Form Dual Instructions
>  target-ppc: Altivec 2.07: Vector Logical Instructions
>  target-ppc: Altivec 2.07: Add/Subtract Unsigned Doubleword Modulo
>  target-ppc: Altivec 2.07: Change VMUL_DO to Support 64-bit Integers
>  target-ppc: Altivec 2.07: Multiply Even/Odd Word Instructions
>  target-ppc: Altivec 2.07: vmuluw Instruction
>  target-ppc: Altivec 2.07: Add Vector Count Leading Zeroes
>  target-ppc: Altivec 2.07: Vector Population Count Instructions
>  target-ppc: Altivec 2.07: Vector Min/Max Doubleword Instructions
>  target-ppc: Altivec 2.07: Pack Doubleword Instructions
>  target-ppc: Altivec 2.07: Unpack Signed Word Instructions
>  target-ppc: Altivec 2.07: Vector Merge Instructions
>  target-ppc: Altivec 2.07: Change Bit Masks to Support 64-bit Rotates
>    and Shifts
>  target-ppc: Altivec 2.07: Vector Doubleword Rotate and Shift
>    Instructions
>  target-ppc: Altivec 2.07: Quadword Addition and Subtracation
>  target-ppc: Altivec 2.07: vbpermq Instruction
>  target-ppc: Altivec 2.07: Doubleword Compares
>  target-ppc: Altivec 2.07: Vector Gather Bits by Bytes
>  target-ppc: Altivec 2.07: Vector Polynomial Multiply Sum
>  target-ppc: Altivec 2.07: Binary Coded Decimal Instructions
>  target-ppc: Altivec 2.07: AES Instructions
>  target-ppc: Altivec 2.07: Vector SHA Sigma Instructions
>  target-ppc: Altivec 2.07: Vector Permute and Exclusive OR
> 
> target-ppc/cpu.h            |    9 +-
> target-ppc/helper.h         |   62 +++
> target-ppc/int_helper.c     | 1278 +++++++++++++++++++++++++++++++++++++++++--
> target-ppc/translate.c      |  348 ++++++++++++-
> target-ppc/translate_init.c |    2 +-
> 5 files changed, 1648 insertions(+), 51 deletions(-)
> 
> 

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

* Re: [Qemu-devel] [Qemu-ppc] [PATCH 00/28] target-ppc: Altivec 2.07
  2014-02-20 12:36         ` [Qemu-devel] [Qemu-ppc] " Alexander Graf
  2014-02-20 12:47           ` Richard W.M. Jones
@ 2014-02-21 10:55           ` Aneesh Kumar K.V
  2014-02-21 11:21             ` Avik Sil
  1 sibling, 1 reply; 55+ messages in thread
From: Aneesh Kumar K.V @ 2014-02-21 10:55 UTC (permalink / raw)
  To: Alexander Graf, Richard W.M. Jones, Avik Sil
  Cc: Tom Musta, list@suse.de:PowerPC, QEMU Developers

Alexander Graf <agraf@suse.de> writes:

>
>> The second bug is kind of interesting.  If you add ~ 256 disks (using
>> virtio-scsi), then it looks as if the firmware crashes.  The total
>> console output is below.  It looks as if "c >" is some kind of prompt.
>> qemu spins using 100% of CPU after this.
>
> How much RAM do you pass into the guest? Could you please try to
> increase that size to see whether it makes a difference? If it
> doesn't, Aneesh is your man :)

Avik tells me that this is fixed in latest slof.

-aneesh

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

* Re: [Qemu-devel] [Qemu-ppc] [PATCH 00/28] target-ppc: Altivec 2.07
  2014-02-21 10:55           ` Aneesh Kumar K.V
@ 2014-02-21 11:21             ` Avik Sil
  2014-02-21 11:48               ` Alexander Graf
  0 siblings, 1 reply; 55+ messages in thread
From: Avik Sil @ 2014-02-21 11:21 UTC (permalink / raw)
  To: Aneesh Kumar K.V
  Cc: QEMU Developers, Tom Musta, list@suse.de:PowerPC, Alexander Graf,
	Richard W.M. Jones

On 02/21/2014 04:25 PM, Aneesh Kumar K.V wrote:
> Alexander Graf <agraf@suse.de> writes:
> 
>>
>>> The second bug is kind of interesting.  If you add ~ 256 disks (using
>>> virtio-scsi), then it looks as if the firmware crashes.  The total
>>> console output is below.  It looks as if "c >" is some kind of prompt.
>>> qemu spins using 100% of CPU after this.
>>
>> How much RAM do you pass into the guest? Could you please try to
>> increase that size to see whether it makes a difference? If it
>> doesn't, Aneesh is your man :)
> 
> Avik tells me that this is fixed in latest slof.

Yes, the slof in upstream qemu is too old (Oct 15, 2013). With the
latest slof in https://github.com/aik/SLOF.git this issue is fixed.
AFAIR, Alexey was planning to send the latest slof to upstream qemu.

Regards,
Avik

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

* Re: [Qemu-devel] [Qemu-ppc] [PATCH 00/28] target-ppc: Altivec 2.07
  2014-02-21 11:21             ` Avik Sil
@ 2014-02-21 11:48               ` Alexander Graf
  2014-02-21 11:53                 ` Peter Maydell
  0 siblings, 1 reply; 55+ messages in thread
From: Alexander Graf @ 2014-02-21 11:48 UTC (permalink / raw)
  To: Avik Sil
  Cc: Tom Musta, Anthony Liguori, QEMU Developers, Richard W.M. Jones,
	list@suse.de:PowerPC, Aneesh Kumar K.V, Stefan Hajnoczi


On 21.02.2014, at 12:21, Avik Sil <aviksil@linux.vnet.ibm.com> wrote:

> On 02/21/2014 04:25 PM, Aneesh Kumar K.V wrote:
>> Alexander Graf <agraf@suse.de> writes:
>> 
>>> 
>>>> The second bug is kind of interesting.  If you add ~ 256 disks (using
>>>> virtio-scsi), then it looks as if the firmware crashes.  The total
>>>> console output is below.  It looks as if "c >" is some kind of prompt.
>>>> qemu spins using 100% of CPU after this.
>>> 
>>> How much RAM do you pass into the guest? Could you please try to
>>> increase that size to see whether it makes a difference? If it
>>> doesn't, Aneesh is your man :)
>> 
>> Avik tells me that this is fixed in latest slof.
> 
> Yes, the slof in upstream qemu is too old (Oct 15, 2013). With the
> latest slof in https://github.com/aik/SLOF.git this issue is fixed.
> AFAIR, Alexey was planning to send the latest slof to upstream qemu.

Yes, he did. But to apply the update we first need the SLOF copy on git.qemu.org updated.


Alex

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

* Re: [Qemu-devel] [Qemu-ppc] [PATCH 00/28] target-ppc: Altivec 2.07
  2014-02-21 11:48               ` Alexander Graf
@ 2014-02-21 11:53                 ` Peter Maydell
  2014-02-21 12:04                   ` Alexander Graf
  0 siblings, 1 reply; 55+ messages in thread
From: Peter Maydell @ 2014-02-21 11:53 UTC (permalink / raw)
  To: Alexander Graf
  Cc: Tom Musta, Stefan Hajnoczi, Richard W.M. Jones, QEMU Developers,
	list@suse.de:PowerPC, Avik Sil, Anthony Liguori,
	Aneesh Kumar K.V

On 21 February 2014 11:48, Alexander Graf <agraf@suse.de> wrote:
> Yes, he did. But to apply the update we first need the SLOF
> copy on git.qemu.org updated.

I can do that if you tell me what the upstream git repo
it should be mirroring is.

thanks
-- PMM

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

* Re: [Qemu-devel] [Qemu-ppc] [PATCH 00/28] target-ppc: Altivec 2.07
  2014-02-21 11:53                 ` Peter Maydell
@ 2014-02-21 12:04                   ` Alexander Graf
  2014-02-21 12:20                     ` Peter Maydell
  0 siblings, 1 reply; 55+ messages in thread
From: Alexander Graf @ 2014-02-21 12:04 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Tom Musta, Stefan Hajnoczi, Richard W.M. Jones, QEMU Developers,
	list@suse.de:PowerPC, Avik Sil, Anthony Liguori,
	Aneesh Kumar K.V


On 21.02.2014, at 12:53, Peter Maydell <peter.maydell@linaro.org> wrote:

> On 21 February 2014 11:48, Alexander Graf <agraf@suse.de> wrote:
>> Yes, he did. But to apply the update we first need the SLOF
>> copy on git.qemu.org updated.
> 
> I can do that if you tell me what the upstream git repo
> it should be mirroring is.

That'd be awesome! FWIW "upstream" SLOF is at the following git URL:

  git://github.com/aik/SLOF.git


Alex

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

* Re: [Qemu-devel] [Qemu-ppc] [PATCH 00/28] target-ppc: Altivec 2.07
  2014-02-21 12:04                   ` Alexander Graf
@ 2014-02-21 12:20                     ` Peter Maydell
  2014-02-26 11:50                       ` Nikunj A Dadhania
  0 siblings, 1 reply; 55+ messages in thread
From: Peter Maydell @ 2014-02-21 12:20 UTC (permalink / raw)
  To: Alexander Graf
  Cc: Tom Musta, Stefan Hajnoczi, Richard W.M. Jones, QEMU Developers,
	list@suse.de:PowerPC, Avik Sil, Anthony Liguori,
	Aneesh Kumar K.V

On 21 February 2014 12:04, Alexander Graf <agraf@suse.de> wrote:
>
> On 21.02.2014, at 12:53, Peter Maydell <peter.maydell@linaro.org> wrote:
>
>> On 21 February 2014 11:48, Alexander Graf <agraf@suse.de> wrote:
>>> Yes, he did. But to apply the update we first need the SLOF
>>> copy on git.qemu.org updated.
>>
>> I can do that if you tell me what the upstream git repo
>> it should be mirroring is.
>
> That'd be awesome! FWIW "upstream" SLOF is at the following git URL:
>
>   git://github.com/aik/SLOF.git

That would result in the following updates to our mirror:

 - [deleted]         benh
 - [deleted]         debug_mem_alloc
   e2e8ac9..10306b5  master -> master
 + 09a3976...cc418be refs/pull/1/merge -> refs/pull/1/merge (forced update)
 * [new tag]         qemu-slof-20131118 -> qemu-slof-20131118
 * [new tag]         qemu-slof-20131122 -> qemu-slof-20131122
 * [new tag]         qemu-slof-20131126 -> qemu-slof-20131126
 * [new tag]         qemu-slof-20131209 -> qemu-slof-20131209
 * [new tag]         qemu-slof-20140121 -> qemu-slof-20140121
 * [new tag]         qemu-slof-20140204 -> qemu-slof-20140204

Since in particular that includes deleting some references
and a forced update on another I thought I would check it
first.

thanks
-- PMM

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

* Re: [Qemu-devel] [Qemu-ppc] [PATCH 00/28] target-ppc: Altivec 2.07
  2014-02-20 14:52           ` Richard W.M. Jones
@ 2014-02-24  6:32             ` Nikunj A Dadhania
  0 siblings, 0 replies; 55+ messages in thread
From: Nikunj A Dadhania @ 2014-02-24  6:32 UTC (permalink / raw)
  To: Richard W.M. Jones, Thomas Huth
  Cc: Alexey Kardashevskiy, Tom Musta, qemu-ppc, qemu-devel, Alexander Graf

"Richard W.M. Jones" <rjones@redhat.com> writes:
> However attached are:
>
>  - the libvirt XML
>  - the qemu command line
>
> which may help to reproduce the bug.  I'm using upstream qemu + 91
> patches provided by Tom, as detailed earlier in this thread.

I have verified this, resolved in current SLOF tree, Alexey has
submitted a latest slof.bin for upstreaming.

Regards
Nikunj

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

* Re: [Qemu-devel] [PATCH 23/28] target-ppc: Altivec 2.07: Vector Gather Bits by Bytes
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 23/28] target-ppc: Altivec 2.07: Vector Gather Bits by Bytes Tom Musta
@ 2014-02-24 17:16   ` Richard Henderson
  0 siblings, 0 replies; 55+ messages in thread
From: Richard Henderson @ 2014-02-24 17:16 UTC (permalink / raw)
  To: Tom Musta, qemu-devel; +Cc: qemu-ppc

On 02/12/2014 01:23 PM, Tom Musta wrote:
> +uint64_t VGBBD_MASKS[256] = {

static const


r~

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

* Re: [Qemu-devel] [PATCH 26/28] target-ppc: Altivec 2.07: AES Instructions
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 26/28] target-ppc: Altivec 2.07: AES Instructions Tom Musta
@ 2014-02-24 17:59   ` Richard Henderson
  2014-02-24 18:11     ` Peter Maydell
  2014-02-26 19:22     ` Tom Musta
  0 siblings, 2 replies; 55+ messages in thread
From: Richard Henderson @ 2014-02-24 17:59 UTC (permalink / raw)
  To: Tom Musta, qemu-devel; +Cc: Peter Maydell, qemu-ppc

On 02/12/2014 01:23 PM, Tom Musta wrote:
> +static uint8_t SBOX[256] = {

I'm not keen on yet another copy of AES data.

Please reuse "qemu/aes.h" as much as possible.  Please see how we use those in
target-i386; from a quick reading, these insns should match up:

  aesenc	vcipher
  aesenclast	vcipherlast
  aesdec	vncipher
  aesdeclast	vncipherlast

It does look like the aes_shifts/aes_ishifts arrays should be moved from i386
specific code.  Which would also be good since ops_sse.h is included multiple
times and thus we have unnecessary multiple copies of this data.

There's more data that should be moved out to common code in
target-arm/crypto_helper.c.  The most pertinent of which is a copy of your SBOX
and InvSBOX arrays, which you'll still need for the vsbox insn.

I'll also note that arm contains a second copy of the aes_{i,}shifts arrays.
So after those are moved to common code, we avoid that duplication too.


r~

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

* Re: [Qemu-devel] [PATCH 26/28] target-ppc: Altivec 2.07: AES Instructions
  2014-02-24 17:59   ` Richard Henderson
@ 2014-02-24 18:11     ` Peter Maydell
  2014-02-24 18:22       ` Richard Henderson
  2014-02-26 19:22     ` Tom Musta
  1 sibling, 1 reply; 55+ messages in thread
From: Peter Maydell @ 2014-02-24 18:11 UTC (permalink / raw)
  To: Richard Henderson; +Cc: Tom Musta, qemu-ppc, QEMU Developers

On 24 February 2014 17:59, Richard Henderson <rth@twiddle.net> wrote:
> I'll also note that arm contains a second copy of the aes_{i,}shifts arrays.
> So after those are moved to common code, we avoid that duplication too.

AIUI this duplication was because the utils/ code wasn't suitable
for ARM; Ard's rationale is here:
http://lists.gnu.org/archive/html/qemu-devel/2013-12/msg01789.html

thanks
-- PMM

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

* Re: [Qemu-devel] [PATCH 24/28] target-ppc: Altivec 2.07: Vector Polynomial Multiply Sum
  2014-02-12 21:23 ` [Qemu-devel] [PATCH 24/28] target-ppc: Altivec 2.07: Vector Polynomial Multiply Sum Tom Musta
@ 2014-02-24 18:11   ` Richard Henderson
  0 siblings, 0 replies; 55+ messages in thread
From: Richard Henderson @ 2014-02-24 18:11 UTC (permalink / raw)
  To: Tom Musta, qemu-devel; +Cc: Peter Maydell, qemu-ppc

On 02/12/2014 01:23 PM, Tom Musta wrote:
> +#define PMSUM(name, srcfld, trgfld, trgtyp)                   \
> +void helper_##name(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)  \
> +{                                                             \
> +    int i, j;                                                 \
> +    trgtyp prod[sizeof(ppc_avr_t)/sizeof(a->srcfld[0])];      \
> +                                                              \
> +    VECTOR_FOR_INORDER_I(i, srcfld) {                         \
> +        prod[i] = 0;                                          \
> +        for (j = 0; j < sizeof(a->srcfld[0]) * 8; j++) {      \
> +            if (a->srcfld[i] & (1ull<<j)) {                   \
> +                prod[i] ^= ((trgtyp)b->srcfld[i] << j);       \
> +            }                                                 \
> +        }                                                     \
> +    }                                                         \
> +                                                              \
> +    VECTOR_FOR_INORDER_I(i, trgfld) {                         \
> +        r->trgfld[i] = prod[2*i] ^ prod[2*i+1];               \
> +    }                                                         \
> +}
> +
> +PMSUM(vpmsumb, u8, u16, uint16_t)
> +PMSUM(vpmsumh, u16, u32, uint32_t)
> +PMSUM(vpmsumw, u32, u64, uint64_t)

Given that we've now got three targets actually implementing poly multiply
(four if anyone ever gets around to implementing the sparc64-2011 insn),
perhaps it's time to implement this generically?

Perhaps declared in host-utils.c and implemented in util/?

Cleanup for another patchset, of course.


r~

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

* Re: [Qemu-devel] [PATCH 26/28] target-ppc: Altivec 2.07: AES Instructions
  2014-02-24 18:11     ` Peter Maydell
@ 2014-02-24 18:22       ` Richard Henderson
  0 siblings, 0 replies; 55+ messages in thread
From: Richard Henderson @ 2014-02-24 18:22 UTC (permalink / raw)
  To: Peter Maydell; +Cc: Tom Musta, qemu-ppc, QEMU Developers

On 02/24/2014 10:11 AM, Peter Maydell wrote:
> On 24 February 2014 17:59, Richard Henderson <rth@twiddle.net> wrote:
>> I'll also note that arm contains a second copy of the aes_{i,}shifts arrays.
>> So after those are moved to common code, we avoid that duplication too.
> 
> AIUI this duplication was because the utils/ code wasn't suitable
> for ARM; Ard's rationale is here:
> http://lists.gnu.org/archive/html/qemu-devel/2013-12/msg01789.html

That's about sbox vs AES_Te*.

In the bit you quote, I'm talking about aes_shift[] vs shift[0][] and
aes_ishift[] vs shift[1][], in the i386 and arm backends respectively.  And
arguing that data should be moved to utils/ so that it can be shared between
i386, arm, and ppc.

In a bit you don't quote, I argue that arm's sbox array should be moved to
utils/ so that it can be shared with ppc, which will need it for its "vsbox"
instruction.

I don't really have an opinion on arm's MixColumns lookup table.


r~

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

* Re: [Qemu-devel] [Qemu-ppc] [PATCH 00/28] target-ppc: Altivec 2.07
  2014-02-21 12:20                     ` Peter Maydell
@ 2014-02-26 11:50                       ` Nikunj A Dadhania
  2014-02-26 11:58                         ` Nikunj A Dadhania
  0 siblings, 1 reply; 55+ messages in thread
From: Nikunj A Dadhania @ 2014-02-26 11:50 UTC (permalink / raw)
  To: Peter Maydell, Alexander Graf
  Cc: Tom Musta, Stefan Hajnoczi, Richard W.M. Jones, QEMU Developers,
	list@suse.de:PowerPC, Aneesh Kumar K.V, Anthony Liguori


Hi Peter,

Peter Maydell <peter.maydell@linaro.org> writes:
>>
>> That'd be awesome! FWIW "upstream" SLOF is at the following git URL:
>>
>>   git://github.com/aik/SLOF.git
>
> That would result in the following updates to our mirror:
>
>  - [deleted]         benh
>  - [deleted]         debug_mem_alloc

This is fine, there was some cleanup done to the repo.

>    e2e8ac9..10306b5  master -> master

This is the current tree

>  + 09a3976...cc418be refs/pull/1/merge -> refs/pull/1/merge (forced update)

I do not understand the above, these commits are not there.

>  * [new tag]         qemu-slof-20131118 -> qemu-slof-20131118
>  * [new tag]         qemu-slof-20131122 -> qemu-slof-20131122
>  * [new tag]         qemu-slof-20131126 -> qemu-slof-20131126
>  * [new tag]         qemu-slof-20131209 -> qemu-slof-20131209
>  * [new tag]         qemu-slof-20140121 -> qemu-slof-20140121
>  * [new tag]         qemu-slof-20140204 -> qemu-slof-20140204
>
> Since in particular that includes deleting some references
> and a forced update on another I thought I would check it
> first.

Regards,
Nikunj

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

* Re: [Qemu-devel] [Qemu-ppc] [PATCH 00/28] target-ppc: Altivec 2.07
  2014-02-26 11:50                       ` Nikunj A Dadhania
@ 2014-02-26 11:58                         ` Nikunj A Dadhania
  0 siblings, 0 replies; 55+ messages in thread
From: Nikunj A Dadhania @ 2014-02-26 11:58 UTC (permalink / raw)
  To: Peter Maydell, Alexander Graf
  Cc: Tom Musta, Stefan Hajnoczi, Richard W.M. Jones, QEMU Developers,
	list@suse.de:PowerPC, Aneesh Kumar K.V, Anthony Liguori

Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> writes:

> Hi Peter,
>
> Peter Maydell <peter.maydell@linaro.org> writes:
>>>
>>> That'd be awesome! FWIW "upstream" SLOF is at the following git URL:
>>>
>>>   git://github.com/aik/SLOF.git
>>
>> That would result in the following updates to our mirror:
>>
>>  - [deleted]         benh
>>  - [deleted]         debug_mem_alloc
>
> This is fine, there was some cleanup done to the repo.
>
>>    e2e8ac9..10306b5  master -> master
>
> This is the current tree
>
>>  + 09a3976...cc418be refs/pull/1/merge -> refs/pull/1/merge (forced update)
>
> I do not understand the above, these commits are not there.

Neither at git://github.com/aik/SLOF.git nor at
git://git.qemu.org/SLOF.git

Regards,
Nikunj

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

* Re: [Qemu-devel] [PATCH 26/28] target-ppc: Altivec 2.07: AES Instructions
  2014-02-24 17:59   ` Richard Henderson
  2014-02-24 18:11     ` Peter Maydell
@ 2014-02-26 19:22     ` Tom Musta
  2014-02-26 22:06       ` Tom Musta
  1 sibling, 1 reply; 55+ messages in thread
From: Tom Musta @ 2014-02-26 19:22 UTC (permalink / raw)
  To: Richard Henderson, qemu-devel; +Cc: Peter Maydell, qemu-ppc

On 2/24/2014 11:59 AM, Richard Henderson wrote:
> On 02/12/2014 01:23 PM, Tom Musta wrote:
>> +static uint8_t SBOX[256] = {
> 
> I'm not keen on yet another copy of AES data.
> 
> Please reuse "qemu/aes.h" as much as possible.  Please see how we use those in
> target-i386; from a quick reading, these insns should match up:
> 
>   aesenc	vcipher
>   aesenclast	vcipherlast
>   aesdec	vncipher
>   aesdeclast	vncipherlast
> 
> It does look like the aes_shifts/aes_ishifts arrays should be moved from i386
> specific code.  Which would also be good since ops_sse.h is included multiple
> times and thus we have unnecessary multiple copies of this data.
> 
> There's more data that should be moved out to common code in
> target-arm/crypto_helper.c.  The most pertinent of which is a copy of your SBOX
> and InvSBOX arrays, which you'll still need for the vsbox insn.
> 
> I'll also note that arm contains a second copy of the aes_{i,}shifts arrays.
> So after those are moved to common code, we avoid that duplication too.
> 
> 
> r~
> 

Richard,

Thanks for the feedback ... this is a good suggestion.

I see one problem with the PowerPC vncipher instruction.  This instruction is
not equivalent the aesdec.  Moreover, the AddRoundKey (XOR) is performed *before*
applying the InvMixColumns operation.  So the AES_Te4 mapping is not correct
for PPC.

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

* Re: [Qemu-devel] [PATCH 26/28] target-ppc: Altivec 2.07: AES Instructions
  2014-02-26 19:22     ` Tom Musta
@ 2014-02-26 22:06       ` Tom Musta
  2014-02-26 22:26         ` Richard Henderson
  0 siblings, 1 reply; 55+ messages in thread
From: Tom Musta @ 2014-02-26 22:06 UTC (permalink / raw)
  To: Richard Henderson, qemu-devel; +Cc: Peter Maydell, qemu-ppc

On 2/26/2014 1:22 PM, Tom Musta wrote:
> I see one problem with the PowerPC vncipher instruction.  This instruction is
> not equivalent the aesdec.  Moreover, the AddRoundKey (XOR) is performed *before*
> applying the InvMixColumns operation.  So the AES_Te4 mapping is not correct
> for PPC.

s/AES_Te4/AES_Te*/

And I should have added ...

Even though I cannot use AES_Te4, I certainly can construct a flattened table
for InvMixColumns (a la AES_T*).  This will result in a faster implementation.

Does it make sense to put this InvMixColumns table in common utilities even
if PowerPC is the only user?  It seems to be mainly an issue of space (about 4K).

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

* Re: [Qemu-devel] [PATCH 26/28] target-ppc: Altivec 2.07: AES Instructions
  2014-02-26 22:06       ` Tom Musta
@ 2014-02-26 22:26         ` Richard Henderson
  0 siblings, 0 replies; 55+ messages in thread
From: Richard Henderson @ 2014-02-26 22:26 UTC (permalink / raw)
  To: Tom Musta, qemu-devel; +Cc: Peter Maydell, qemu-ppc

On 02/26/2014 02:06 PM, Tom Musta wrote:
> s/AES_Te4/AES_Te*/
> 
> And I should have added ...
> 
> Even though I cannot use AES_Te4, I certainly can construct a flattened table
> for InvMixColumns (a la AES_T*).  This will result in a faster implementation.
> 
> Does it make sense to put this InvMixColumns table in common utilities even
> if PowerPC is the only user?  It seems to be mainly an issue of space (about 4K).
> 

Probably.

I think that ideally we'd generate the tables from the sboxes at build time,
rather than merely commenting them and pasting in the result.  Ideally, we'd
generate these tables into different source files, and thus into different
object files, and thus the object file would only get pulled in when used.

So ideally the issue of size would be a non-issue.


r~

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

end of thread, other threads:[~2014-02-26 22:27 UTC | newest]

Thread overview: 55+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-02-12 21:22 [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Tom Musta
2014-02-12 21:22 ` [Qemu-devel] [PATCH 01/28] target-ppc: Altivec 2.07: Add Instruction Flag Tom Musta
2014-02-12 21:22 ` [Qemu-devel] [PATCH 02/28] target-ppc: Altivec 2.07: Update AVR Structure Tom Musta
2014-02-12 21:22 ` [Qemu-devel] [PATCH 03/28] target-ppc: Altivec 2.07: Add GEN_VXFORM3 Tom Musta
2014-02-12 21:22 ` [Qemu-devel] [PATCH 04/28] target-ppc: Altivec 2.07: Add Support for Dual Altivec Instructions Tom Musta
2014-02-12 21:22 ` [Qemu-devel] [PATCH 05/28] target-ppc: Altivec 2.07: Add Opcode Macro for VX Form Instructions Tom Musta
2014-02-12 21:22 ` [Qemu-devel] [PATCH 06/28] target-ppc: Altivec 2.07: Add Support for R-Form Dual Instructions Tom Musta
2014-02-12 21:22 ` [Qemu-devel] [PATCH 07/28] target-ppc: Altivec 2.07: Vector Logical Instructions Tom Musta
2014-02-12 21:22 ` [Qemu-devel] [PATCH 08/28] target-ppc: Altivec 2.07: Add/Subtract Unsigned Doubleword Modulo Tom Musta
2014-02-12 21:23 ` [Qemu-devel] [PATCH 09/28] target-ppc: Altivec 2.07: Change VMUL_DO to Support 64-bit Integers Tom Musta
2014-02-12 21:23 ` [Qemu-devel] [PATCH 10/28] target-ppc: Altivec 2.07: Multiply Even/Odd Word Instructions Tom Musta
2014-02-12 21:23 ` [Qemu-devel] [PATCH 11/28] target-ppc: Altivec 2.07: vmuluw Instruction Tom Musta
2014-02-12 21:23 ` [Qemu-devel] [PATCH 12/28] target-ppc: Altivec 2.07: Add Vector Count Leading Zeroes Tom Musta
2014-02-12 21:23 ` [Qemu-devel] [PATCH 13/28] target-ppc: Altivec 2.07: Vector Population Count Instructions Tom Musta
2014-02-12 21:23 ` [Qemu-devel] [PATCH 14/28] target-ppc: Altivec 2.07: Vector Min/Max Doubleword Instructions Tom Musta
2014-02-12 21:23 ` [Qemu-devel] [PATCH 15/28] target-ppc: Altivec 2.07: Pack " Tom Musta
2014-02-12 21:23 ` [Qemu-devel] [PATCH 16/28] target-ppc: Altivec 2.07: Unpack Signed Word Instructions Tom Musta
2014-02-12 21:23 ` [Qemu-devel] [PATCH 17/28] target-ppc: Altivec 2.07: Vector Merge Instructions Tom Musta
2014-02-12 21:23 ` [Qemu-devel] [PATCH 18/28] target-ppc: Altivec 2.07: Change Bit Masks to Support 64-bit Rotates and Shifts Tom Musta
2014-02-12 21:23 ` [Qemu-devel] [PATCH 19/28] target-ppc: Altivec 2.07: Vector Doubleword Rotate and Shift Instructions Tom Musta
2014-02-12 21:23 ` [Qemu-devel] [PATCH 20/28] target-ppc: Altivec 2.07: Quadword Addition and Subtracation Tom Musta
2014-02-12 21:23 ` [Qemu-devel] [PATCH 21/28] target-ppc: Altivec 2.07: vbpermq Instruction Tom Musta
2014-02-12 21:23 ` [Qemu-devel] [PATCH 22/28] target-ppc: Altivec 2.07: Doubleword Compares Tom Musta
2014-02-12 21:23 ` [Qemu-devel] [PATCH 23/28] target-ppc: Altivec 2.07: Vector Gather Bits by Bytes Tom Musta
2014-02-24 17:16   ` Richard Henderson
2014-02-12 21:23 ` [Qemu-devel] [PATCH 24/28] target-ppc: Altivec 2.07: Vector Polynomial Multiply Sum Tom Musta
2014-02-24 18:11   ` Richard Henderson
2014-02-12 21:23 ` [Qemu-devel] [PATCH 25/28] target-ppc: Altivec 2.07: Binary Coded Decimal Instructions Tom Musta
2014-02-12 21:23 ` [Qemu-devel] [PATCH 26/28] target-ppc: Altivec 2.07: AES Instructions Tom Musta
2014-02-24 17:59   ` Richard Henderson
2014-02-24 18:11     ` Peter Maydell
2014-02-24 18:22       ` Richard Henderson
2014-02-26 19:22     ` Tom Musta
2014-02-26 22:06       ` Tom Musta
2014-02-26 22:26         ` Richard Henderson
2014-02-12 21:23 ` [Qemu-devel] [PATCH 27/28] target-ppc: Altivec 2.07: Vector SHA Sigma Instructions Tom Musta
2014-02-12 21:23 ` [Qemu-devel] [PATCH 28/28] target-ppc: Altivec 2.07: Vector Permute and Exclusive OR Tom Musta
2014-02-18 18:52 ` [Qemu-devel] [PATCH 00/28] target-ppc: Altivec 2.07 Richard W.M. Jones
2014-02-18 23:27   ` Tom Musta
2014-02-20 10:23     ` Richard W.M. Jones
2014-02-20 12:34       ` Richard W.M. Jones
2014-02-20 12:36         ` [Qemu-devel] [Qemu-ppc] " Alexander Graf
2014-02-20 12:47           ` Richard W.M. Jones
2014-02-21 10:55           ` Aneesh Kumar K.V
2014-02-21 11:21             ` Avik Sil
2014-02-21 11:48               ` Alexander Graf
2014-02-21 11:53                 ` Peter Maydell
2014-02-21 12:04                   ` Alexander Graf
2014-02-21 12:20                     ` Peter Maydell
2014-02-26 11:50                       ` Nikunj A Dadhania
2014-02-26 11:58                         ` Nikunj A Dadhania
2014-02-20 14:44         ` [Qemu-devel] " Thomas Huth
2014-02-20 14:52           ` Richard W.M. Jones
2014-02-24  6:32             ` [Qemu-devel] [Qemu-ppc] " Nikunj A Dadhania
2014-02-20 15:00 ` Alexander Graf

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.