Re: [Qemu-devel] [PATCH v2] test: port postcopy test to ppc64

2016-07-26 Thread David Gibson
On Thu, Jul 21, 2016 at 06:47:56PM +0200, Laurent Vivier wrote:
> As userfaultfd syscall is available on powerpc, migration
> postcopy can be used.
> 
> This patch adds the support needed to test this on powerpc,
> instead of using a bootsector to run code to modify memory,
> we use a FORTH script in "boot-command" property.
> 
> As spapr machine doesn't support "-prom-env" argument
> (the nvram is initialized by SLOF and not by QEMU),
> "boot-command" is provided to SLOF via a file mapped nvram
> (with "-drive file=...,if=pflash")
> 
> Signed-off-by: Laurent Vivier 

So, the warning message is a bit unfortunate, but the following
discussion seems to show that removing it isn't trivial.  If we can do
so in a follow up patch, that would be nice, but for the time being,
I've merged this patch to ppc-for-2.7 anyway.

> ---
> v2: move FORTH script directly in sprintf()
> use openbios_firmware_abi.h
> remove useless "default" case
> 
>  tests/Makefile.include |   1 +
>  tests/postcopy-test.c  | 116 
> +
>  2 files changed, 98 insertions(+), 19 deletions(-)
> 
> diff --git a/tests/Makefile.include b/tests/Makefile.include
> index e7e50d6..e2d1885 100644
> --- a/tests/Makefile.include
> +++ b/tests/Makefile.include
> @@ -268,6 +268,7 @@ check-qtest-sparc-y += tests/prom-env-test$(EXESUF)
>  #check-qtest-sparc64-y += tests/prom-env-test$(EXESUF)
>  check-qtest-microblazeel-y = $(check-qtest-microblaze-y)
>  check-qtest-xtensaeb-y = $(check-qtest-xtensa-y)
> +check-qtest-ppc64-y += tests/postcopy-test$(EXESUF)
>  
>  check-qtest-generic-y += tests/qom-test$(EXESUF)
>  
> diff --git a/tests/postcopy-test.c b/tests/postcopy-test.c
> index 16465ab..229e9e9 100644
> --- a/tests/postcopy-test.c
> +++ b/tests/postcopy-test.c
> @@ -18,6 +18,9 @@
>  #include "qemu/sockets.h"
>  #include "sysemu/char.h"
>  #include "sysemu/sysemu.h"
> +#include "hw/nvram/openbios_firmware_abi.h"
> +
> +#define MIN_NVRAM_SIZE 8192 /* from spapr_nvram.c */
>  
>  const unsigned start_address = 1024 * 1024;
>  const unsigned end_address = 100 * 1024 * 1024;
> @@ -122,6 +125,44 @@ unsigned char bootsect[] = {
>0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa
>  };
>  
> +static void init_bootfile_x86(const char *bootpath)
> +{
> +FILE *bootfile = fopen(bootpath, "wb");
> +
> +g_assert_cmpint(fwrite(bootsect, 512, 1, bootfile), ==, 1);
> +fclose(bootfile);
> +}
> +
> +static void init_bootfile_ppc(const char *bootpath)
> +{
> +FILE *bootfile;
> +char buf[MIN_NVRAM_SIZE];
> +struct OpenBIOS_nvpart_v1 *header = (struct OpenBIOS_nvpart_v1 *)buf;
> +
> +memset(buf, 0, MIN_NVRAM_SIZE);
> +
> +/* Create a "common" partition in nvram to store boot-command property */
> +
> +header->signature = OPENBIOS_PART_SYSTEM;
> +memcpy(header->name, "common", 6);
> +OpenBIOS_finish_partition(header, MIN_NVRAM_SIZE);
> +
> +/* FW_MAX_SIZE is 4MB, but slof.bin is only 900KB,
> + * so let's modify memory between 1MB and 100MB
> + * to do like PC bootsector
> + */
> +
> +sprintf(buf + 16,
> +"boot-command=hex .\" _\" begin %x %x do i c@ 1 + i c! 1000 
> +loop "
> +".\" B\" 0 until", end_address, start_address);
> +
> +/* Write partition to the NVRAM file */
> +
> +bootfile = fopen(bootpath, "wb");
> +g_assert_cmpint(fwrite(buf, MIN_NVRAM_SIZE, 1, bootfile), ==, 1);
> +fclose(bootfile);
> +}
> +
>  /*
>   * Wait for some output in the serial output file,
>   * we get an 'A' followed by an endless string of 'B's
> @@ -131,10 +172,29 @@ static void wait_for_serial(const char *side)
>  {
>  char *serialpath = g_strdup_printf("%s/%s", tmpfs, side);
>  FILE *serialfile = fopen(serialpath, "r");
> +const char *arch = qtest_get_arch();
> +int started = (strcmp(side, "src_serial") == 0 &&
> +   strcmp(arch, "ppc64") == 0) ? 0 : 1;
>  
>  do {
>  int readvalue = fgetc(serialfile);
>  
> +if (!started) {
> +/* SLOF prints its banner before starting test,
> + * to ignore it, mark the start of the test with '_',
> + * ignore all characters until this marker
> + */
> +switch (readvalue) {
> +case '_':
> +started = 1;
> +break;
> +case EOF:
> +fseek(serialfile, 0, SEEK_SET);
> +usleep(1000);
> +break;
> +}
> +continue;
> +}
>  switch (readvalue) {
>  case 'A':
>  /* Fine */
> @@ -147,6 +207,8 @@ static void wait_for_serial(const char *side)
>  return;
>  
>  case EOF:
> +started = (strcmp(side, "src_serial") == 0 &&
> +   strcmp(arch, "ppc64") == 0) ? 0 : 1;
>  fseek(serialfile, 0, SEEK_SET);
>  usleep(1000);
>  break;
> @@ -295,32 +357,48 @@ 

Re: [Qemu-devel] [PATCH v2] test: port postcopy test to ppc64

2016-07-26 Thread Laurent Vivier


On 26/07/2016 12:02, Thomas Huth wrote:
> On 26.07.2016 11:53, Laurent Vivier wrote:
>>
>>
>> On 26/07/2016 11:39, Laurent Vivier wrote:
>>>
>>>
>>> On 26/07/2016 11:28, Thomas Huth wrote:
 On 26.07.2016 11:23, Laurent Vivier wrote:
>
>
> On 23/07/2016 08:30, David Gibson wrote:
>> On Fri, Jul 22, 2016 at 09:28:58AM +0200, Laurent Vivier wrote:
>>>
>>>
>>> On 22/07/2016 08:43, David Gibson wrote:
 On Thu, Jul 21, 2016 at 06:47:56PM +0200, Laurent Vivier wrote:
> As userfaultfd syscall is available on powerpc, migration
> postcopy can be used.
>
> This patch adds the support needed to test this on powerpc,
> instead of using a bootsector to run code to modify memory,
> we use a FORTH script in "boot-command" property.
>
> As spapr machine doesn't support "-prom-env" argument
> (the nvram is initialized by SLOF and not by QEMU),
> "boot-command" is provided to SLOF via a file mapped nvram
> (with "-drive file=...,if=pflash")
>
> Signed-off-by: Laurent Vivier 
> ---
> v2: move FORTH script directly in sprintf()
> use openbios_firmware_abi.h
> remove useless "default" case
>
>  tests/Makefile.include |   1 +
>  tests/postcopy-test.c  | 116 
> +
>  2 files changed, 98 insertions(+), 19 deletions(-)

 There's a mostly cosmetic problem with this.  If you run make check
 for a ppc64 target on an x86 machine, you get:

 GTESTER check-qtest-ppc64
 "kvm" accelerator not found.
 "kvm" accelerator not found.
>>>
>>> I think this is because of "-machine accel=kvm:tcg", it tries to use kvm
>>> and fall back to tcg.
>>>
>>> accel.c:
>>>
>>>  80 void configure_accelerator(MachineState *ms)
>>>  81 {
>>> ...
>>> 100 acc = accel_find(buf);
>>> 101 if (!acc) {
>>> 102 fprintf(stderr, "\"%s\" accelerator not found.\n", 
>>> buf);
>>> 103 continue;
>>> 104 }
>>>
>>> We can remove the "-machine" argument to use the default instead (tcg or
>>> kvm).
>>
>> That sounds like a good option for a general test.
>
> In fact, we can't: we need to add a "-machine accel=" to our command
> line to override the "-machine accel=qtest" provided by the qtest
> framework. If we don't override it, the machine doesn't start.

 Would it work if you'd added some magic with "#ifdef CONFIG_KVM" here?
>>>
>>> I think it needs to be dynamic as the same binary test is used on x86 to
>>> test x86 and ppc64, and vice-versa. I'm going to check if we have
>>> something like "qtest_get_accel()"...
>>
>> Something like that should work:
>>
>> --- a/tests/postcopy-test.c
>> +++ b/tests/postcopy-test.c
>> @@ -380,12 +380,17 @@ static void test_migrate(void)
>>tmpfs, bootpath, uri);
>>  } else if (strcmp(arch, "ppc64") == 0) {
>>  init_bootfile_ppc(bootpath);
>> -cmd_src = g_strdup_printf("-machine accel=kvm:tcg -m 256M"
>> +#ifdef _ARCH_PPC64
> 
> I think you'd need to test CONFIG_KVM, too, since it could also have
> been disabled on on PPC, couldn't it?
> 
>> +#define QEMU_CMD_ACCEL"-machine accel=kvm:tcg"
>> +#else
>> +#define QEMU_CMD_ACCEL"-machine accel=tcg"
>> +#endif
> 
> Alternatively, what about shutting up the message in accel.c by changing
> it like that:
> 
> if (!qtest_enabled()) {
> error_report("\"%s\" accelerator not found.\n", buf);
> }
> 

We can't use this as we overwrite "-machine accel=qtest" with our
"-machine accel=kvm:tcg": qtest accelerator is not initialized and
qtest_enabled() is false.

Thanks,
Laurent



Re: [Qemu-devel] [PATCH v2] test: port postcopy test to ppc64

2016-07-26 Thread Laurent Vivier


On 26/07/2016 12:02, Thomas Huth wrote:
> On 26.07.2016 11:53, Laurent Vivier wrote:
>>
>>
>> On 26/07/2016 11:39, Laurent Vivier wrote:
>>>
>>>
>>> On 26/07/2016 11:28, Thomas Huth wrote:
 On 26.07.2016 11:23, Laurent Vivier wrote:
>
>
> On 23/07/2016 08:30, David Gibson wrote:
>> On Fri, Jul 22, 2016 at 09:28:58AM +0200, Laurent Vivier wrote:
>>>
>>>
>>> On 22/07/2016 08:43, David Gibson wrote:
 On Thu, Jul 21, 2016 at 06:47:56PM +0200, Laurent Vivier wrote:
> As userfaultfd syscall is available on powerpc, migration
> postcopy can be used.
>
> This patch adds the support needed to test this on powerpc,
> instead of using a bootsector to run code to modify memory,
> we use a FORTH script in "boot-command" property.
>
> As spapr machine doesn't support "-prom-env" argument
> (the nvram is initialized by SLOF and not by QEMU),
> "boot-command" is provided to SLOF via a file mapped nvram
> (with "-drive file=...,if=pflash")
>
> Signed-off-by: Laurent Vivier 
> ---
> v2: move FORTH script directly in sprintf()
> use openbios_firmware_abi.h
> remove useless "default" case
>
>  tests/Makefile.include |   1 +
>  tests/postcopy-test.c  | 116 
> +
>  2 files changed, 98 insertions(+), 19 deletions(-)

 There's a mostly cosmetic problem with this.  If you run make check
 for a ppc64 target on an x86 machine, you get:

 GTESTER check-qtest-ppc64
 "kvm" accelerator not found.
 "kvm" accelerator not found.
>>>
>>> I think this is because of "-machine accel=kvm:tcg", it tries to use kvm
>>> and fall back to tcg.
>>>
>>> accel.c:
>>>
>>>  80 void configure_accelerator(MachineState *ms)
>>>  81 {
>>> ...
>>> 100 acc = accel_find(buf);
>>> 101 if (!acc) {
>>> 102 fprintf(stderr, "\"%s\" accelerator not found.\n", 
>>> buf);
>>> 103 continue;
>>> 104 }
>>>
>>> We can remove the "-machine" argument to use the default instead (tcg or
>>> kvm).
>>
>> That sounds like a good option for a general test.
>
> In fact, we can't: we need to add a "-machine accel=" to our command
> line to override the "-machine accel=qtest" provided by the qtest
> framework. If we don't override it, the machine doesn't start.

 Would it work if you'd added some magic with "#ifdef CONFIG_KVM" here?
>>>
>>> I think it needs to be dynamic as the same binary test is used on x86 to
>>> test x86 and ppc64, and vice-versa. I'm going to check if we have
>>> something like "qtest_get_accel()"...
>>
>> Something like that should work:
>>
>> --- a/tests/postcopy-test.c
>> +++ b/tests/postcopy-test.c
>> @@ -380,12 +380,17 @@ static void test_migrate(void)
>>tmpfs, bootpath, uri);
>>  } else if (strcmp(arch, "ppc64") == 0) {
>>  init_bootfile_ppc(bootpath);
>> -cmd_src = g_strdup_printf("-machine accel=kvm:tcg -m 256M"
>> +#ifdef _ARCH_PPC64
> 
> I think you'd need to test CONFIG_KVM, too, since it could also have
> been disabled on on PPC, couldn't it?

I've tried to use CONFIG_KVM, but as it is defined per target in
config-target.h we can't use it in qtest sources. I think we can only
use CONFIGs defined in config-host.h (as the same binary is used for all
the targets).

Laurent



Re: [Qemu-devel] [PATCH v2] test: port postcopy test to ppc64

2016-07-26 Thread David Gibson
On Tue, Jul 26, 2016 at 11:58:17AM +0200, Laurent Vivier wrote:
> 
> 
> On 26/07/2016 11:54, Dr. David Alan Gilbert wrote:
> > * Laurent Vivier (lviv...@redhat.com) wrote:
> >>
> >>
> >> On 26/07/2016 11:39, Laurent Vivier wrote:
> >>>
> >>>
> >>> On 26/07/2016 11:28, Thomas Huth wrote:
>  On 26.07.2016 11:23, Laurent Vivier wrote:
> >
> >
> > On 23/07/2016 08:30, David Gibson wrote:
> >> On Fri, Jul 22, 2016 at 09:28:58AM +0200, Laurent Vivier wrote:
> >>>
> >>>
> >>> On 22/07/2016 08:43, David Gibson wrote:
>  On Thu, Jul 21, 2016 at 06:47:56PM +0200, Laurent Vivier wrote:
> > As userfaultfd syscall is available on powerpc, migration
> > postcopy can be used.
> >
> > This patch adds the support needed to test this on powerpc,
> > instead of using a bootsector to run code to modify memory,
> > we use a FORTH script in "boot-command" property.
> >
> > As spapr machine doesn't support "-prom-env" argument
> > (the nvram is initialized by SLOF and not by QEMU),
> > "boot-command" is provided to SLOF via a file mapped nvram
> > (with "-drive file=...,if=pflash")
> >
> > Signed-off-by: Laurent Vivier 
> > ---
> > v2: move FORTH script directly in sprintf()
> > use openbios_firmware_abi.h
> > remove useless "default" case
> >
> >  tests/Makefile.include |   1 +
> >  tests/postcopy-test.c  | 116 
> > +
> >  2 files changed, 98 insertions(+), 19 deletions(-)
> 
>  There's a mostly cosmetic problem with this.  If you run make check
>  for a ppc64 target on an x86 machine, you get:
> 
>  GTESTER check-qtest-ppc64
>  "kvm" accelerator not found.
>  "kvm" accelerator not found.
> >>>
> >>> I think this is because of "-machine accel=kvm:tcg", it tries to use 
> >>> kvm
> >>> and fall back to tcg.
> >>>
> >>> accel.c:
> >>>
> >>>  80 void configure_accelerator(MachineState *ms)
> >>>  81 {
> >>> ...
> >>> 100 acc = accel_find(buf);
> >>> 101 if (!acc) {
> >>> 102 fprintf(stderr, "\"%s\" accelerator not 
> >>> found.\n", buf);
> >>> 103 continue;
> >>> 104 }
> >>>
> >>> We can remove the "-machine" argument to use the default instead (tcg 
> >>> or
> >>> kvm).
> >>
> >> That sounds like a good option for a general test.
> >
> > In fact, we can't: we need to add a "-machine accel=" to our command
> > line to override the "-machine accel=qtest" provided by the qtest
> > framework. If we don't override it, the machine doesn't start.
> 
>  Would it work if you'd added some magic with "#ifdef CONFIG_KVM" here?
> >>>
> >>> I think it needs to be dynamic as the same binary test is used on x86 to
> >>> test x86 and ppc64, and vice-versa. I'm going to check if we have
> >>> something like "qtest_get_accel()"...
> >>
> >> Something like that should work:
> >>
> >> --- a/tests/postcopy-test.c
> >> +++ b/tests/postcopy-test.c
> >> @@ -380,12 +380,17 @@ static void test_migrate(void)
> >>tmpfs, bootpath, uri);
> >>  } else if (strcmp(arch, "ppc64") == 0) {
> >>  init_bootfile_ppc(bootpath);
> >> -cmd_src = g_strdup_printf("-machine accel=kvm:tcg -m 256M"
> >> +#ifdef _ARCH_PPC64
> >> +#define QEMU_CMD_ACCEL"-machine accel=kvm:tcg"
> >> +#else
> >> +#define QEMU_CMD_ACCEL"-machine accel=tcg"
> >> +#endif
> >> +cmd_src = g_strdup_printf(QEMU_CMD_ACCEL " -m 256M"
> >>" -name pcsource,debug-threads=on"
> >>" -serial file:%s/src_serial"
> >>" -drive file=%s,if=pflash,format=raw",
> >>tmpfs, bootpath);
> >> -cmd_dst = g_strdup_printf("-machine accel=kvm:tcg -m 256M"
> >> +cmd_dst = g_strdup_printf(QEMU_CMD_ACCEL " -m 256M"
> >>" -name pcdest,debug-threads=on"
> >>" -serial file:%s/dest_serial"
> >>" -incoming %s",
> >>
> >> Laurent
> > 
> > Is it worth the hastle to just get rid of the two warnings?
> 
> I don't know, it's why I'd like to have the opinion of David.

I'm not really sure either.  I do dislike leaving warnings as a rule,
because for someone not familiar with the details of the test it may
not be obvious whether a warning is harmless or not.

-- 
David Gibson| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
| _way_ _around_!

Re: [Qemu-devel] [PATCH v2] test: port postcopy test to ppc64

2016-07-26 Thread Laurent Vivier


On 26/07/2016 14:53, Laurent Vivier wrote:
> 
> 
> On 26/07/2016 12:02, Thomas Huth wrote:
>> On 26.07.2016 11:53, Laurent Vivier wrote:
>>>
>>>
>>> On 26/07/2016 11:39, Laurent Vivier wrote:


 On 26/07/2016 11:28, Thomas Huth wrote:
> On 26.07.2016 11:23, Laurent Vivier wrote:
>>
>>
>> On 23/07/2016 08:30, David Gibson wrote:
>>> On Fri, Jul 22, 2016 at 09:28:58AM +0200, Laurent Vivier wrote:


 On 22/07/2016 08:43, David Gibson wrote:
> On Thu, Jul 21, 2016 at 06:47:56PM +0200, Laurent Vivier wrote:
>> As userfaultfd syscall is available on powerpc, migration
>> postcopy can be used.
>>
>> This patch adds the support needed to test this on powerpc,
>> instead of using a bootsector to run code to modify memory,
>> we use a FORTH script in "boot-command" property.
>>
>> As spapr machine doesn't support "-prom-env" argument
>> (the nvram is initialized by SLOF and not by QEMU),
>> "boot-command" is provided to SLOF via a file mapped nvram
>> (with "-drive file=...,if=pflash")
>>
>> Signed-off-by: Laurent Vivier 
>> ---
>> v2: move FORTH script directly in sprintf()
>> use openbios_firmware_abi.h
>> remove useless "default" case
>>
>>  tests/Makefile.include |   1 +
>>  tests/postcopy-test.c  | 116 
>> +
>>  2 files changed, 98 insertions(+), 19 deletions(-)
>
> There's a mostly cosmetic problem with this.  If you run make check
> for a ppc64 target on an x86 machine, you get:
>
> GTESTER check-qtest-ppc64
> "kvm" accelerator not found.
> "kvm" accelerator not found.

 I think this is because of "-machine accel=kvm:tcg", it tries to use 
 kvm
 and fall back to tcg.

 accel.c:

  80 void configure_accelerator(MachineState *ms)
  81 {
 ...
 100 acc = accel_find(buf);
 101 if (!acc) {
 102 fprintf(stderr, "\"%s\" accelerator not found.\n", 
 buf);
 103 continue;
 104 }

 We can remove the "-machine" argument to use the default instead (tcg 
 or
 kvm).
>>>
>>> That sounds like a good option for a general test.
>>
>> In fact, we can't: we need to add a "-machine accel=" to our command
>> line to override the "-machine accel=qtest" provided by the qtest
>> framework. If we don't override it, the machine doesn't start.
>
> Would it work if you'd added some magic with "#ifdef CONFIG_KVM" here?

 I think it needs to be dynamic as the same binary test is used on x86 to
 test x86 and ppc64, and vice-versa. I'm going to check if we have
 something like "qtest_get_accel()"...
>>>
>>> Something like that should work:
>>>
>>> --- a/tests/postcopy-test.c
>>> +++ b/tests/postcopy-test.c
>>> @@ -380,12 +380,17 @@ static void test_migrate(void)
>>>tmpfs, bootpath, uri);
>>>  } else if (strcmp(arch, "ppc64") == 0) {
>>>  init_bootfile_ppc(bootpath);
>>> -cmd_src = g_strdup_printf("-machine accel=kvm:tcg -m 256M"
>>> +#ifdef _ARCH_PPC64
>>
>> I think you'd need to test CONFIG_KVM, too, since it could also have
>> been disabled on on PPC, couldn't it?
> 
> Sure.
> 
>>> +#define QEMU_CMD_ACCEL"-machine accel=kvm:tcg"
>>> +#else
>>> +#define QEMU_CMD_ACCEL"-machine accel=tcg"
>>> +#endif
>>
>> Alternatively, what about shutting up the message in accel.c by changing
>> it like that:
>>
>> if (!qtest_enabled()) {
>> error_report("\"%s\" accelerator not found.\n", buf);
>> }
>>
> 
> I've tried that, and we always get the messages in the "make check" output.

No, I'm wrong: I didn't add the "qtest_enabled()", only replace the
fprintf() by an "error_report()"... it should work.

Laurent



Re: [Qemu-devel] [PATCH v2] test: port postcopy test to ppc64

2016-07-26 Thread Laurent Vivier


On 26/07/2016 12:02, Thomas Huth wrote:
> On 26.07.2016 11:53, Laurent Vivier wrote:
>>
>>
>> On 26/07/2016 11:39, Laurent Vivier wrote:
>>>
>>>
>>> On 26/07/2016 11:28, Thomas Huth wrote:
 On 26.07.2016 11:23, Laurent Vivier wrote:
>
>
> On 23/07/2016 08:30, David Gibson wrote:
>> On Fri, Jul 22, 2016 at 09:28:58AM +0200, Laurent Vivier wrote:
>>>
>>>
>>> On 22/07/2016 08:43, David Gibson wrote:
 On Thu, Jul 21, 2016 at 06:47:56PM +0200, Laurent Vivier wrote:
> As userfaultfd syscall is available on powerpc, migration
> postcopy can be used.
>
> This patch adds the support needed to test this on powerpc,
> instead of using a bootsector to run code to modify memory,
> we use a FORTH script in "boot-command" property.
>
> As spapr machine doesn't support "-prom-env" argument
> (the nvram is initialized by SLOF and not by QEMU),
> "boot-command" is provided to SLOF via a file mapped nvram
> (with "-drive file=...,if=pflash")
>
> Signed-off-by: Laurent Vivier 
> ---
> v2: move FORTH script directly in sprintf()
> use openbios_firmware_abi.h
> remove useless "default" case
>
>  tests/Makefile.include |   1 +
>  tests/postcopy-test.c  | 116 
> +
>  2 files changed, 98 insertions(+), 19 deletions(-)

 There's a mostly cosmetic problem with this.  If you run make check
 for a ppc64 target on an x86 machine, you get:

 GTESTER check-qtest-ppc64
 "kvm" accelerator not found.
 "kvm" accelerator not found.
>>>
>>> I think this is because of "-machine accel=kvm:tcg", it tries to use kvm
>>> and fall back to tcg.
>>>
>>> accel.c:
>>>
>>>  80 void configure_accelerator(MachineState *ms)
>>>  81 {
>>> ...
>>> 100 acc = accel_find(buf);
>>> 101 if (!acc) {
>>> 102 fprintf(stderr, "\"%s\" accelerator not found.\n", 
>>> buf);
>>> 103 continue;
>>> 104 }
>>>
>>> We can remove the "-machine" argument to use the default instead (tcg or
>>> kvm).
>>
>> That sounds like a good option for a general test.
>
> In fact, we can't: we need to add a "-machine accel=" to our command
> line to override the "-machine accel=qtest" provided by the qtest
> framework. If we don't override it, the machine doesn't start.

 Would it work if you'd added some magic with "#ifdef CONFIG_KVM" here?
>>>
>>> I think it needs to be dynamic as the same binary test is used on x86 to
>>> test x86 and ppc64, and vice-versa. I'm going to check if we have
>>> something like "qtest_get_accel()"...
>>
>> Something like that should work:
>>
>> --- a/tests/postcopy-test.c
>> +++ b/tests/postcopy-test.c
>> @@ -380,12 +380,17 @@ static void test_migrate(void)
>>tmpfs, bootpath, uri);
>>  } else if (strcmp(arch, "ppc64") == 0) {
>>  init_bootfile_ppc(bootpath);
>> -cmd_src = g_strdup_printf("-machine accel=kvm:tcg -m 256M"
>> +#ifdef _ARCH_PPC64
> 
> I think you'd need to test CONFIG_KVM, too, since it could also have
> been disabled on on PPC, couldn't it?

Sure.

>> +#define QEMU_CMD_ACCEL"-machine accel=kvm:tcg"
>> +#else
>> +#define QEMU_CMD_ACCEL"-machine accel=tcg"
>> +#endif
> 
> Alternatively, what about shutting up the message in accel.c by changing
> it like that:
> 
> if (!qtest_enabled()) {
> error_report("\"%s\" accelerator not found.\n", buf);
> }
> 

I've tried that, and we always get the messages in the "make check" output.

Laurent



Re: [Qemu-devel] [PATCH v2] test: port postcopy test to ppc64

2016-07-26 Thread Thomas Huth
On 26.07.2016 11:53, Laurent Vivier wrote:
> 
> 
> On 26/07/2016 11:39, Laurent Vivier wrote:
>>
>>
>> On 26/07/2016 11:28, Thomas Huth wrote:
>>> On 26.07.2016 11:23, Laurent Vivier wrote:


 On 23/07/2016 08:30, David Gibson wrote:
> On Fri, Jul 22, 2016 at 09:28:58AM +0200, Laurent Vivier wrote:
>>
>>
>> On 22/07/2016 08:43, David Gibson wrote:
>>> On Thu, Jul 21, 2016 at 06:47:56PM +0200, Laurent Vivier wrote:
 As userfaultfd syscall is available on powerpc, migration
 postcopy can be used.

 This patch adds the support needed to test this on powerpc,
 instead of using a bootsector to run code to modify memory,
 we use a FORTH script in "boot-command" property.

 As spapr machine doesn't support "-prom-env" argument
 (the nvram is initialized by SLOF and not by QEMU),
 "boot-command" is provided to SLOF via a file mapped nvram
 (with "-drive file=...,if=pflash")

 Signed-off-by: Laurent Vivier 
 ---
 v2: move FORTH script directly in sprintf()
 use openbios_firmware_abi.h
 remove useless "default" case

  tests/Makefile.include |   1 +
  tests/postcopy-test.c  | 116 
 +
  2 files changed, 98 insertions(+), 19 deletions(-)
>>>
>>> There's a mostly cosmetic problem with this.  If you run make check
>>> for a ppc64 target on an x86 machine, you get:
>>>
>>> GTESTER check-qtest-ppc64
>>> "kvm" accelerator not found.
>>> "kvm" accelerator not found.
>>
>> I think this is because of "-machine accel=kvm:tcg", it tries to use kvm
>> and fall back to tcg.
>>
>> accel.c:
>>
>>  80 void configure_accelerator(MachineState *ms)
>>  81 {
>> ...
>> 100 acc = accel_find(buf);
>> 101 if (!acc) {
>> 102 fprintf(stderr, "\"%s\" accelerator not found.\n", 
>> buf);
>> 103 continue;
>> 104 }
>>
>> We can remove the "-machine" argument to use the default instead (tcg or
>> kvm).
>
> That sounds like a good option for a general test.

 In fact, we can't: we need to add a "-machine accel=" to our command
 line to override the "-machine accel=qtest" provided by the qtest
 framework. If we don't override it, the machine doesn't start.
>>>
>>> Would it work if you'd added some magic with "#ifdef CONFIG_KVM" here?
>>
>> I think it needs to be dynamic as the same binary test is used on x86 to
>> test x86 and ppc64, and vice-versa. I'm going to check if we have
>> something like "qtest_get_accel()"...
> 
> Something like that should work:
> 
> --- a/tests/postcopy-test.c
> +++ b/tests/postcopy-test.c
> @@ -380,12 +380,17 @@ static void test_migrate(void)
>tmpfs, bootpath, uri);
>  } else if (strcmp(arch, "ppc64") == 0) {
>  init_bootfile_ppc(bootpath);
> -cmd_src = g_strdup_printf("-machine accel=kvm:tcg -m 256M"
> +#ifdef _ARCH_PPC64

I think you'd need to test CONFIG_KVM, too, since it could also have
been disabled on on PPC, couldn't it?

> +#define QEMU_CMD_ACCEL"-machine accel=kvm:tcg"
> +#else
> +#define QEMU_CMD_ACCEL"-machine accel=tcg"
> +#endif

Alternatively, what about shutting up the message in accel.c by changing
it like that:

if (!qtest_enabled()) {
error_report("\"%s\" accelerator not found.\n", buf);
}

?

 Thomas




Re: [Qemu-devel] [PATCH v2] test: port postcopy test to ppc64

2016-07-26 Thread Laurent Vivier


On 26/07/2016 11:54, Dr. David Alan Gilbert wrote:
> * Laurent Vivier (lviv...@redhat.com) wrote:
>>
>>
>> On 26/07/2016 11:39, Laurent Vivier wrote:
>>>
>>>
>>> On 26/07/2016 11:28, Thomas Huth wrote:
 On 26.07.2016 11:23, Laurent Vivier wrote:
>
>
> On 23/07/2016 08:30, David Gibson wrote:
>> On Fri, Jul 22, 2016 at 09:28:58AM +0200, Laurent Vivier wrote:
>>>
>>>
>>> On 22/07/2016 08:43, David Gibson wrote:
 On Thu, Jul 21, 2016 at 06:47:56PM +0200, Laurent Vivier wrote:
> As userfaultfd syscall is available on powerpc, migration
> postcopy can be used.
>
> This patch adds the support needed to test this on powerpc,
> instead of using a bootsector to run code to modify memory,
> we use a FORTH script in "boot-command" property.
>
> As spapr machine doesn't support "-prom-env" argument
> (the nvram is initialized by SLOF and not by QEMU),
> "boot-command" is provided to SLOF via a file mapped nvram
> (with "-drive file=...,if=pflash")
>
> Signed-off-by: Laurent Vivier 
> ---
> v2: move FORTH script directly in sprintf()
> use openbios_firmware_abi.h
> remove useless "default" case
>
>  tests/Makefile.include |   1 +
>  tests/postcopy-test.c  | 116 
> +
>  2 files changed, 98 insertions(+), 19 deletions(-)

 There's a mostly cosmetic problem with this.  If you run make check
 for a ppc64 target on an x86 machine, you get:

 GTESTER check-qtest-ppc64
 "kvm" accelerator not found.
 "kvm" accelerator not found.
>>>
>>> I think this is because of "-machine accel=kvm:tcg", it tries to use kvm
>>> and fall back to tcg.
>>>
>>> accel.c:
>>>
>>>  80 void configure_accelerator(MachineState *ms)
>>>  81 {
>>> ...
>>> 100 acc = accel_find(buf);
>>> 101 if (!acc) {
>>> 102 fprintf(stderr, "\"%s\" accelerator not found.\n", 
>>> buf);
>>> 103 continue;
>>> 104 }
>>>
>>> We can remove the "-machine" argument to use the default instead (tcg or
>>> kvm).
>>
>> That sounds like a good option for a general test.
>
> In fact, we can't: we need to add a "-machine accel=" to our command
> line to override the "-machine accel=qtest" provided by the qtest
> framework. If we don't override it, the machine doesn't start.

 Would it work if you'd added some magic with "#ifdef CONFIG_KVM" here?
>>>
>>> I think it needs to be dynamic as the same binary test is used on x86 to
>>> test x86 and ppc64, and vice-versa. I'm going to check if we have
>>> something like "qtest_get_accel()"...
>>
>> Something like that should work:
>>
>> --- a/tests/postcopy-test.c
>> +++ b/tests/postcopy-test.c
>> @@ -380,12 +380,17 @@ static void test_migrate(void)
>>tmpfs, bootpath, uri);
>>  } else if (strcmp(arch, "ppc64") == 0) {
>>  init_bootfile_ppc(bootpath);
>> -cmd_src = g_strdup_printf("-machine accel=kvm:tcg -m 256M"
>> +#ifdef _ARCH_PPC64
>> +#define QEMU_CMD_ACCEL"-machine accel=kvm:tcg"
>> +#else
>> +#define QEMU_CMD_ACCEL"-machine accel=tcg"
>> +#endif
>> +cmd_src = g_strdup_printf(QEMU_CMD_ACCEL " -m 256M"
>>" -name pcsource,debug-threads=on"
>>" -serial file:%s/src_serial"
>>" -drive file=%s,if=pflash,format=raw",
>>tmpfs, bootpath);
>> -cmd_dst = g_strdup_printf("-machine accel=kvm:tcg -m 256M"
>> +cmd_dst = g_strdup_printf(QEMU_CMD_ACCEL " -m 256M"
>>" -name pcdest,debug-threads=on"
>>" -serial file:%s/dest_serial"
>>" -incoming %s",
>>
>> Laurent
> 
> Is it worth the hastle to just get rid of the two warnings?

I don't know, it's why I'd like to have the opinion of David.

Laurent



Re: [Qemu-devel] [PATCH v2] test: port postcopy test to ppc64

2016-07-26 Thread Dr. David Alan Gilbert
* Laurent Vivier (lviv...@redhat.com) wrote:
> 
> 
> On 26/07/2016 11:39, Laurent Vivier wrote:
> > 
> > 
> > On 26/07/2016 11:28, Thomas Huth wrote:
> >> On 26.07.2016 11:23, Laurent Vivier wrote:
> >>>
> >>>
> >>> On 23/07/2016 08:30, David Gibson wrote:
>  On Fri, Jul 22, 2016 at 09:28:58AM +0200, Laurent Vivier wrote:
> >
> >
> > On 22/07/2016 08:43, David Gibson wrote:
> >> On Thu, Jul 21, 2016 at 06:47:56PM +0200, Laurent Vivier wrote:
> >>> As userfaultfd syscall is available on powerpc, migration
> >>> postcopy can be used.
> >>>
> >>> This patch adds the support needed to test this on powerpc,
> >>> instead of using a bootsector to run code to modify memory,
> >>> we use a FORTH script in "boot-command" property.
> >>>
> >>> As spapr machine doesn't support "-prom-env" argument
> >>> (the nvram is initialized by SLOF and not by QEMU),
> >>> "boot-command" is provided to SLOF via a file mapped nvram
> >>> (with "-drive file=...,if=pflash")
> >>>
> >>> Signed-off-by: Laurent Vivier 
> >>> ---
> >>> v2: move FORTH script directly in sprintf()
> >>> use openbios_firmware_abi.h
> >>> remove useless "default" case
> >>>
> >>>  tests/Makefile.include |   1 +
> >>>  tests/postcopy-test.c  | 116 
> >>> +
> >>>  2 files changed, 98 insertions(+), 19 deletions(-)
> >>
> >> There's a mostly cosmetic problem with this.  If you run make check
> >> for a ppc64 target on an x86 machine, you get:
> >>
> >> GTESTER check-qtest-ppc64
> >> "kvm" accelerator not found.
> >> "kvm" accelerator not found.
> >
> > I think this is because of "-machine accel=kvm:tcg", it tries to use kvm
> > and fall back to tcg.
> >
> > accel.c:
> >
> >  80 void configure_accelerator(MachineState *ms)
> >  81 {
> > ...
> > 100 acc = accel_find(buf);
> > 101 if (!acc) {
> > 102 fprintf(stderr, "\"%s\" accelerator not found.\n", 
> > buf);
> > 103 continue;
> > 104 }
> >
> > We can remove the "-machine" argument to use the default instead (tcg or
> > kvm).
> 
>  That sounds like a good option for a general test.
> >>>
> >>> In fact, we can't: we need to add a "-machine accel=" to our command
> >>> line to override the "-machine accel=qtest" provided by the qtest
> >>> framework. If we don't override it, the machine doesn't start.
> >>
> >> Would it work if you'd added some magic with "#ifdef CONFIG_KVM" here?
> > 
> > I think it needs to be dynamic as the same binary test is used on x86 to
> > test x86 and ppc64, and vice-versa. I'm going to check if we have
> > something like "qtest_get_accel()"...
> 
> Something like that should work:
> 
> --- a/tests/postcopy-test.c
> +++ b/tests/postcopy-test.c
> @@ -380,12 +380,17 @@ static void test_migrate(void)
>tmpfs, bootpath, uri);
>  } else if (strcmp(arch, "ppc64") == 0) {
>  init_bootfile_ppc(bootpath);
> -cmd_src = g_strdup_printf("-machine accel=kvm:tcg -m 256M"
> +#ifdef _ARCH_PPC64
> +#define QEMU_CMD_ACCEL"-machine accel=kvm:tcg"
> +#else
> +#define QEMU_CMD_ACCEL"-machine accel=tcg"
> +#endif
> +cmd_src = g_strdup_printf(QEMU_CMD_ACCEL " -m 256M"
>" -name pcsource,debug-threads=on"
>" -serial file:%s/src_serial"
>" -drive file=%s,if=pflash,format=raw",
>tmpfs, bootpath);
> -cmd_dst = g_strdup_printf("-machine accel=kvm:tcg -m 256M"
> +cmd_dst = g_strdup_printf(QEMU_CMD_ACCEL " -m 256M"
>" -name pcdest,debug-threads=on"
>" -serial file:%s/dest_serial"
>" -incoming %s",
> 
> Laurent

Is it worth the hastle to just get rid of the two warnings?

Dave

--
Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK



Re: [Qemu-devel] [PATCH v2] test: port postcopy test to ppc64

2016-07-26 Thread Laurent Vivier


On 26/07/2016 11:39, Laurent Vivier wrote:
> 
> 
> On 26/07/2016 11:28, Thomas Huth wrote:
>> On 26.07.2016 11:23, Laurent Vivier wrote:
>>>
>>>
>>> On 23/07/2016 08:30, David Gibson wrote:
 On Fri, Jul 22, 2016 at 09:28:58AM +0200, Laurent Vivier wrote:
>
>
> On 22/07/2016 08:43, David Gibson wrote:
>> On Thu, Jul 21, 2016 at 06:47:56PM +0200, Laurent Vivier wrote:
>>> As userfaultfd syscall is available on powerpc, migration
>>> postcopy can be used.
>>>
>>> This patch adds the support needed to test this on powerpc,
>>> instead of using a bootsector to run code to modify memory,
>>> we use a FORTH script in "boot-command" property.
>>>
>>> As spapr machine doesn't support "-prom-env" argument
>>> (the nvram is initialized by SLOF and not by QEMU),
>>> "boot-command" is provided to SLOF via a file mapped nvram
>>> (with "-drive file=...,if=pflash")
>>>
>>> Signed-off-by: Laurent Vivier 
>>> ---
>>> v2: move FORTH script directly in sprintf()
>>> use openbios_firmware_abi.h
>>> remove useless "default" case
>>>
>>>  tests/Makefile.include |   1 +
>>>  tests/postcopy-test.c  | 116 
>>> +
>>>  2 files changed, 98 insertions(+), 19 deletions(-)
>>
>> There's a mostly cosmetic problem with this.  If you run make check
>> for a ppc64 target on an x86 machine, you get:
>>
>> GTESTER check-qtest-ppc64
>> "kvm" accelerator not found.
>> "kvm" accelerator not found.
>
> I think this is because of "-machine accel=kvm:tcg", it tries to use kvm
> and fall back to tcg.
>
> accel.c:
>
>  80 void configure_accelerator(MachineState *ms)
>  81 {
> ...
> 100 acc = accel_find(buf);
> 101 if (!acc) {
> 102 fprintf(stderr, "\"%s\" accelerator not found.\n", 
> buf);
> 103 continue;
> 104 }
>
> We can remove the "-machine" argument to use the default instead (tcg or
> kvm).

 That sounds like a good option for a general test.
>>>
>>> In fact, we can't: we need to add a "-machine accel=" to our command
>>> line to override the "-machine accel=qtest" provided by the qtest
>>> framework. If we don't override it, the machine doesn't start.
>>
>> Would it work if you'd added some magic with "#ifdef CONFIG_KVM" here?
> 
> I think it needs to be dynamic as the same binary test is used on x86 to
> test x86 and ppc64, and vice-versa. I'm going to check if we have
> something like "qtest_get_accel()"...

Something like that should work:

--- a/tests/postcopy-test.c
+++ b/tests/postcopy-test.c
@@ -380,12 +380,17 @@ static void test_migrate(void)
   tmpfs, bootpath, uri);
 } else if (strcmp(arch, "ppc64") == 0) {
 init_bootfile_ppc(bootpath);
-cmd_src = g_strdup_printf("-machine accel=kvm:tcg -m 256M"
+#ifdef _ARCH_PPC64
+#define QEMU_CMD_ACCEL"-machine accel=kvm:tcg"
+#else
+#define QEMU_CMD_ACCEL"-machine accel=tcg"
+#endif
+cmd_src = g_strdup_printf(QEMU_CMD_ACCEL " -m 256M"
   " -name pcsource,debug-threads=on"
   " -serial file:%s/src_serial"
   " -drive file=%s,if=pflash,format=raw",
   tmpfs, bootpath);
-cmd_dst = g_strdup_printf("-machine accel=kvm:tcg -m 256M"
+cmd_dst = g_strdup_printf(QEMU_CMD_ACCEL " -m 256M"
   " -name pcdest,debug-threads=on"
   " -serial file:%s/dest_serial"
   " -incoming %s",

Laurent



Re: [Qemu-devel] [PATCH v2] test: port postcopy test to ppc64

2016-07-26 Thread Laurent Vivier


On 26/07/2016 11:28, Thomas Huth wrote:
> On 26.07.2016 11:23, Laurent Vivier wrote:
>>
>>
>> On 23/07/2016 08:30, David Gibson wrote:
>>> On Fri, Jul 22, 2016 at 09:28:58AM +0200, Laurent Vivier wrote:


 On 22/07/2016 08:43, David Gibson wrote:
> On Thu, Jul 21, 2016 at 06:47:56PM +0200, Laurent Vivier wrote:
>> As userfaultfd syscall is available on powerpc, migration
>> postcopy can be used.
>>
>> This patch adds the support needed to test this on powerpc,
>> instead of using a bootsector to run code to modify memory,
>> we use a FORTH script in "boot-command" property.
>>
>> As spapr machine doesn't support "-prom-env" argument
>> (the nvram is initialized by SLOF and not by QEMU),
>> "boot-command" is provided to SLOF via a file mapped nvram
>> (with "-drive file=...,if=pflash")
>>
>> Signed-off-by: Laurent Vivier 
>> ---
>> v2: move FORTH script directly in sprintf()
>> use openbios_firmware_abi.h
>> remove useless "default" case
>>
>>  tests/Makefile.include |   1 +
>>  tests/postcopy-test.c  | 116 
>> +
>>  2 files changed, 98 insertions(+), 19 deletions(-)
>
> There's a mostly cosmetic problem with this.  If you run make check
> for a ppc64 target on an x86 machine, you get:
>
> GTESTER check-qtest-ppc64
> "kvm" accelerator not found.
> "kvm" accelerator not found.

 I think this is because of "-machine accel=kvm:tcg", it tries to use kvm
 and fall back to tcg.

 accel.c:

  80 void configure_accelerator(MachineState *ms)
  81 {
 ...
 100 acc = accel_find(buf);
 101 if (!acc) {
 102 fprintf(stderr, "\"%s\" accelerator not found.\n", 
 buf);
 103 continue;
 104 }

 We can remove the "-machine" argument to use the default instead (tcg or
 kvm).
>>>
>>> That sounds like a good option for a general test.
>>
>> In fact, we can't: we need to add a "-machine accel=" to our command
>> line to override the "-machine accel=qtest" provided by the qtest
>> framework. If we don't override it, the machine doesn't start.
> 
> Would it work if you'd added some magic with "#ifdef CONFIG_KVM" here?

I think it needs to be dynamic as the same binary test is used on x86 to
test x86 and ppc64, and vice-versa. I'm going to check if we have
something like "qtest_get_accel()"...

Thanks,
Laurent



Re: [Qemu-devel] [PATCH v2] test: port postcopy test to ppc64

2016-07-26 Thread Thomas Huth
On 26.07.2016 11:23, Laurent Vivier wrote:
> 
> 
> On 23/07/2016 08:30, David Gibson wrote:
>> On Fri, Jul 22, 2016 at 09:28:58AM +0200, Laurent Vivier wrote:
>>>
>>>
>>> On 22/07/2016 08:43, David Gibson wrote:
 On Thu, Jul 21, 2016 at 06:47:56PM +0200, Laurent Vivier wrote:
> As userfaultfd syscall is available on powerpc, migration
> postcopy can be used.
>
> This patch adds the support needed to test this on powerpc,
> instead of using a bootsector to run code to modify memory,
> we use a FORTH script in "boot-command" property.
>
> As spapr machine doesn't support "-prom-env" argument
> (the nvram is initialized by SLOF and not by QEMU),
> "boot-command" is provided to SLOF via a file mapped nvram
> (with "-drive file=...,if=pflash")
>
> Signed-off-by: Laurent Vivier 
> ---
> v2: move FORTH script directly in sprintf()
> use openbios_firmware_abi.h
> remove useless "default" case
>
>  tests/Makefile.include |   1 +
>  tests/postcopy-test.c  | 116 
> +
>  2 files changed, 98 insertions(+), 19 deletions(-)

 There's a mostly cosmetic problem with this.  If you run make check
 for a ppc64 target on an x86 machine, you get:

 GTESTER check-qtest-ppc64
 "kvm" accelerator not found.
 "kvm" accelerator not found.
>>>
>>> I think this is because of "-machine accel=kvm:tcg", it tries to use kvm
>>> and fall back to tcg.
>>>
>>> accel.c:
>>>
>>>  80 void configure_accelerator(MachineState *ms)
>>>  81 {
>>> ...
>>> 100 acc = accel_find(buf);
>>> 101 if (!acc) {
>>> 102 fprintf(stderr, "\"%s\" accelerator not found.\n", buf);
>>> 103 continue;
>>> 104 }
>>>
>>> We can remove the "-machine" argument to use the default instead (tcg or
>>> kvm).
>>
>> That sounds like a good option for a general test.
> 
> In fact, we can't: we need to add a "-machine accel=" to our command
> line to override the "-machine accel=qtest" provided by the qtest
> framework. If we don't override it, the machine doesn't start.

Would it work if you'd added some magic with "#ifdef CONFIG_KVM" here?

 Thomas




Re: [Qemu-devel] [PATCH v2] test: port postcopy test to ppc64

2016-07-26 Thread Laurent Vivier


On 23/07/2016 08:30, David Gibson wrote:
> On Fri, Jul 22, 2016 at 09:28:58AM +0200, Laurent Vivier wrote:
>>
>>
>> On 22/07/2016 08:43, David Gibson wrote:
>>> On Thu, Jul 21, 2016 at 06:47:56PM +0200, Laurent Vivier wrote:
 As userfaultfd syscall is available on powerpc, migration
 postcopy can be used.

 This patch adds the support needed to test this on powerpc,
 instead of using a bootsector to run code to modify memory,
 we use a FORTH script in "boot-command" property.

 As spapr machine doesn't support "-prom-env" argument
 (the nvram is initialized by SLOF and not by QEMU),
 "boot-command" is provided to SLOF via a file mapped nvram
 (with "-drive file=...,if=pflash")

 Signed-off-by: Laurent Vivier 
 ---
 v2: move FORTH script directly in sprintf()
 use openbios_firmware_abi.h
 remove useless "default" case

  tests/Makefile.include |   1 +
  tests/postcopy-test.c  | 116 
 +
  2 files changed, 98 insertions(+), 19 deletions(-)
>>>
>>> There's a mostly cosmetic problem with this.  If you run make check
>>> for a ppc64 target on an x86 machine, you get:
>>>
>>> GTESTER check-qtest-ppc64
>>> "kvm" accelerator not found.
>>> "kvm" accelerator not found.
>>
>> I think this is because of "-machine accel=kvm:tcg", it tries to use kvm
>> and fall back to tcg.
>>
>> accel.c:
>>
>>  80 void configure_accelerator(MachineState *ms)
>>  81 {
>> ...
>> 100 acc = accel_find(buf);
>> 101 if (!acc) {
>> 102 fprintf(stderr, "\"%s\" accelerator not found.\n", buf);
>> 103 continue;
>> 104 }
>>
>> We can remove the "-machine" argument to use the default instead (tcg or
>> kvm).
> 
> That sounds like a good option for a general test.
> 

In fact, we can't: we need to add a "-machine accel=" to our command
line to override the "-machine accel=qtest" provided by the qtest
framework. If we don't override it, the machine doesn't start.

Laurent



Re: [Qemu-devel] [PATCH v2] test: port postcopy test to ppc64

2016-07-23 Thread David Gibson
On Fri, Jul 22, 2016 at 09:28:58AM +0200, Laurent Vivier wrote:
> 
> 
> On 22/07/2016 08:43, David Gibson wrote:
> > On Thu, Jul 21, 2016 at 06:47:56PM +0200, Laurent Vivier wrote:
> >> As userfaultfd syscall is available on powerpc, migration
> >> postcopy can be used.
> >>
> >> This patch adds the support needed to test this on powerpc,
> >> instead of using a bootsector to run code to modify memory,
> >> we use a FORTH script in "boot-command" property.
> >>
> >> As spapr machine doesn't support "-prom-env" argument
> >> (the nvram is initialized by SLOF and not by QEMU),
> >> "boot-command" is provided to SLOF via a file mapped nvram
> >> (with "-drive file=...,if=pflash")
> >>
> >> Signed-off-by: Laurent Vivier 
> >> ---
> >> v2: move FORTH script directly in sprintf()
> >> use openbios_firmware_abi.h
> >> remove useless "default" case
> >>
> >>  tests/Makefile.include |   1 +
> >>  tests/postcopy-test.c  | 116 
> >> +
> >>  2 files changed, 98 insertions(+), 19 deletions(-)
> > 
> > There's a mostly cosmetic problem with this.  If you run make check
> > for a ppc64 target on an x86 machine, you get:
> > 
> > GTESTER check-qtest-ppc64
> > "kvm" accelerator not found.
> > "kvm" accelerator not found.
> 
> I think this is because of "-machine accel=kvm:tcg", it tries to use kvm
> and fall back to tcg.
> 
> accel.c:
> 
>  80 void configure_accelerator(MachineState *ms)
>  81 {
> ...
> 100 acc = accel_find(buf);
> 101 if (!acc) {
> 102 fprintf(stderr, "\"%s\" accelerator not found.\n", buf);
> 103 continue;
> 104 }
> 
> We can remove the "-machine" argument to use the default instead (tcg or
> kvm).

That sounds like a good option for a general test.

-- 
David Gibson| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson


signature.asc
Description: PGP signature


Re: [Qemu-devel] [PATCH v2] test: port postcopy test to ppc64

2016-07-22 Thread Laurent Vivier


On 22/07/2016 08:43, David Gibson wrote:
> On Thu, Jul 21, 2016 at 06:47:56PM +0200, Laurent Vivier wrote:
>> As userfaultfd syscall is available on powerpc, migration
>> postcopy can be used.
>>
>> This patch adds the support needed to test this on powerpc,
>> instead of using a bootsector to run code to modify memory,
>> we use a FORTH script in "boot-command" property.
>>
>> As spapr machine doesn't support "-prom-env" argument
>> (the nvram is initialized by SLOF and not by QEMU),
>> "boot-command" is provided to SLOF via a file mapped nvram
>> (with "-drive file=...,if=pflash")
>>
>> Signed-off-by: Laurent Vivier 
>> ---
>> v2: move FORTH script directly in sprintf()
>> use openbios_firmware_abi.h
>> remove useless "default" case
>>
>>  tests/Makefile.include |   1 +
>>  tests/postcopy-test.c  | 116 
>> +
>>  2 files changed, 98 insertions(+), 19 deletions(-)
> 
> There's a mostly cosmetic problem with this.  If you run make check
> for a ppc64 target on an x86 machine, you get:
> 
> GTESTER check-qtest-ppc64
> "kvm" accelerator not found.
> "kvm" accelerator not found.

I think this is because of "-machine accel=kvm:tcg", it tries to use kvm
and fall back to tcg.

accel.c:

 80 void configure_accelerator(MachineState *ms)
 81 {
...
100 acc = accel_find(buf);
101 if (!acc) {
102 fprintf(stderr, "\"%s\" accelerator not found.\n", buf);
103 continue;
104 }

We can remove the "-machine" argument to use the default instead (tcg or
kvm).

Laurent



Re: [Qemu-devel] [PATCH v2] test: port postcopy test to ppc64

2016-07-22 Thread David Gibson
On Thu, Jul 21, 2016 at 06:47:56PM +0200, Laurent Vivier wrote:
> As userfaultfd syscall is available on powerpc, migration
> postcopy can be used.
> 
> This patch adds the support needed to test this on powerpc,
> instead of using a bootsector to run code to modify memory,
> we use a FORTH script in "boot-command" property.
> 
> As spapr machine doesn't support "-prom-env" argument
> (the nvram is initialized by SLOF and not by QEMU),
> "boot-command" is provided to SLOF via a file mapped nvram
> (with "-drive file=...,if=pflash")
> 
> Signed-off-by: Laurent Vivier 
> ---
> v2: move FORTH script directly in sprintf()
> use openbios_firmware_abi.h
> remove useless "default" case
> 
>  tests/Makefile.include |   1 +
>  tests/postcopy-test.c  | 116 
> +
>  2 files changed, 98 insertions(+), 19 deletions(-)

There's a mostly cosmetic problem with this.  If you run make check
for a ppc64 target on an x86 machine, you get:

GTESTER check-qtest-ppc64
"kvm" accelerator not found.
"kvm" accelerator not found.

> 
> diff --git a/tests/Makefile.include b/tests/Makefile.include
> index e7e50d6..e2d1885 100644
> --- a/tests/Makefile.include
> +++ b/tests/Makefile.include
> @@ -268,6 +268,7 @@ check-qtest-sparc-y += tests/prom-env-test$(EXESUF)
>  #check-qtest-sparc64-y += tests/prom-env-test$(EXESUF)
>  check-qtest-microblazeel-y = $(check-qtest-microblaze-y)
>  check-qtest-xtensaeb-y = $(check-qtest-xtensa-y)
> +check-qtest-ppc64-y += tests/postcopy-test$(EXESUF)
>  
>  check-qtest-generic-y += tests/qom-test$(EXESUF)
>  
> diff --git a/tests/postcopy-test.c b/tests/postcopy-test.c
> index 16465ab..229e9e9 100644
> --- a/tests/postcopy-test.c
> +++ b/tests/postcopy-test.c
> @@ -18,6 +18,9 @@
>  #include "qemu/sockets.h"
>  #include "sysemu/char.h"
>  #include "sysemu/sysemu.h"
> +#include "hw/nvram/openbios_firmware_abi.h"
> +
> +#define MIN_NVRAM_SIZE 8192 /* from spapr_nvram.c */
>  
>  const unsigned start_address = 1024 * 1024;
>  const unsigned end_address = 100 * 1024 * 1024;
> @@ -122,6 +125,44 @@ unsigned char bootsect[] = {
>0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa
>  };
>  
> +static void init_bootfile_x86(const char *bootpath)
> +{
> +FILE *bootfile = fopen(bootpath, "wb");
> +
> +g_assert_cmpint(fwrite(bootsect, 512, 1, bootfile), ==, 1);
> +fclose(bootfile);
> +}
> +
> +static void init_bootfile_ppc(const char *bootpath)
> +{
> +FILE *bootfile;
> +char buf[MIN_NVRAM_SIZE];
> +struct OpenBIOS_nvpart_v1 *header = (struct OpenBIOS_nvpart_v1 *)buf;
> +
> +memset(buf, 0, MIN_NVRAM_SIZE);
> +
> +/* Create a "common" partition in nvram to store boot-command property */
> +
> +header->signature = OPENBIOS_PART_SYSTEM;
> +memcpy(header->name, "common", 6);
> +OpenBIOS_finish_partition(header, MIN_NVRAM_SIZE);
> +
> +/* FW_MAX_SIZE is 4MB, but slof.bin is only 900KB,
> + * so let's modify memory between 1MB and 100MB
> + * to do like PC bootsector
> + */
> +
> +sprintf(buf + 16,
> +"boot-command=hex .\" _\" begin %x %x do i c@ 1 + i c! 1000 
> +loop "
> +".\" B\" 0 until", end_address, start_address);
> +
> +/* Write partition to the NVRAM file */
> +
> +bootfile = fopen(bootpath, "wb");
> +g_assert_cmpint(fwrite(buf, MIN_NVRAM_SIZE, 1, bootfile), ==, 1);
> +fclose(bootfile);
> +}
> +
>  /*
>   * Wait for some output in the serial output file,
>   * we get an 'A' followed by an endless string of 'B's
> @@ -131,10 +172,29 @@ static void wait_for_serial(const char *side)
>  {
>  char *serialpath = g_strdup_printf("%s/%s", tmpfs, side);
>  FILE *serialfile = fopen(serialpath, "r");
> +const char *arch = qtest_get_arch();
> +int started = (strcmp(side, "src_serial") == 0 &&
> +   strcmp(arch, "ppc64") == 0) ? 0 : 1;
>  
>  do {
>  int readvalue = fgetc(serialfile);
>  
> +if (!started) {
> +/* SLOF prints its banner before starting test,
> + * to ignore it, mark the start of the test with '_',
> + * ignore all characters until this marker
> + */
> +switch (readvalue) {
> +case '_':
> +started = 1;
> +break;
> +case EOF:
> +fseek(serialfile, 0, SEEK_SET);
> +usleep(1000);
> +break;
> +}
> +continue;
> +}
>  switch (readvalue) {
>  case 'A':
>  /* Fine */
> @@ -147,6 +207,8 @@ static void wait_for_serial(const char *side)
>  return;
>  
>  case EOF:
> +started = (strcmp(side, "src_serial") == 0 &&
> +   strcmp(arch, "ppc64") == 0) ? 0 : 1;
>  fseek(serialfile, 0, SEEK_SET);
>  usleep(1000);
>  break;
> @@ -295,32 +357,48 @@ static void test_migrate(void)
>  char *uri = 

Re: [Qemu-devel] [PATCH v2] test: port postcopy test to ppc64

2016-07-21 Thread Thomas Huth
On 21.07.2016 18:47, Laurent Vivier wrote:
> As userfaultfd syscall is available on powerpc, migration
> postcopy can be used.
> 
> This patch adds the support needed to test this on powerpc,
> instead of using a bootsector to run code to modify memory,
> we use a FORTH script in "boot-command" property.
> 
> As spapr machine doesn't support "-prom-env" argument
> (the nvram is initialized by SLOF and not by QEMU),
> "boot-command" is provided to SLOF via a file mapped nvram
> (with "-drive file=...,if=pflash")
> 
> Signed-off-by: Laurent Vivier 
> ---
> v2: move FORTH script directly in sprintf()
> use openbios_firmware_abi.h
> remove useless "default" case
> 
>  tests/Makefile.include |   1 +
>  tests/postcopy-test.c  | 116 
> +
>  2 files changed, 98 insertions(+), 19 deletions(-)
> 
> diff --git a/tests/Makefile.include b/tests/Makefile.include
> index e7e50d6..e2d1885 100644
> --- a/tests/Makefile.include
> +++ b/tests/Makefile.include
> @@ -268,6 +268,7 @@ check-qtest-sparc-y += tests/prom-env-test$(EXESUF)
>  #check-qtest-sparc64-y += tests/prom-env-test$(EXESUF)
>  check-qtest-microblazeel-y = $(check-qtest-microblaze-y)
>  check-qtest-xtensaeb-y = $(check-qtest-xtensa-y)
> +check-qtest-ppc64-y += tests/postcopy-test$(EXESUF)
>  
>  check-qtest-generic-y += tests/qom-test$(EXESUF)
>  
> diff --git a/tests/postcopy-test.c b/tests/postcopy-test.c
> index 16465ab..229e9e9 100644
> --- a/tests/postcopy-test.c
> +++ b/tests/postcopy-test.c
> @@ -18,6 +18,9 @@
>  #include "qemu/sockets.h"
>  #include "sysemu/char.h"
>  #include "sysemu/sysemu.h"
> +#include "hw/nvram/openbios_firmware_abi.h"
> +
> +#define MIN_NVRAM_SIZE 8192 /* from spapr_nvram.c */
>  
>  const unsigned start_address = 1024 * 1024;
>  const unsigned end_address = 100 * 1024 * 1024;
> @@ -122,6 +125,44 @@ unsigned char bootsect[] = {
>0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa
>  };
>  
> +static void init_bootfile_x86(const char *bootpath)
> +{
> +FILE *bootfile = fopen(bootpath, "wb");
> +
> +g_assert_cmpint(fwrite(bootsect, 512, 1, bootfile), ==, 1);
> +fclose(bootfile);
> +}
> +
> +static void init_bootfile_ppc(const char *bootpath)
> +{
> +FILE *bootfile;
> +char buf[MIN_NVRAM_SIZE];
> +struct OpenBIOS_nvpart_v1 *header = (struct OpenBIOS_nvpart_v1 *)buf;
> +
> +memset(buf, 0, MIN_NVRAM_SIZE);
> +
> +/* Create a "common" partition in nvram to store boot-command property */
> +
> +header->signature = OPENBIOS_PART_SYSTEM;
> +memcpy(header->name, "common", 6);
> +OpenBIOS_finish_partition(header, MIN_NVRAM_SIZE);
> +
> +/* FW_MAX_SIZE is 4MB, but slof.bin is only 900KB,
> + * so let's modify memory between 1MB and 100MB
> + * to do like PC bootsector
> + */
> +
> +sprintf(buf + 16,
> +"boot-command=hex .\" _\" begin %x %x do i c@ 1 + i c! 1000 
> +loop "
> +".\" B\" 0 until", end_address, start_address);
> +
> +/* Write partition to the NVRAM file */
> +
> +bootfile = fopen(bootpath, "wb");
> +g_assert_cmpint(fwrite(buf, MIN_NVRAM_SIZE, 1, bootfile), ==, 1);
> +fclose(bootfile);
> +}
> +
>  /*
>   * Wait for some output in the serial output file,
>   * we get an 'A' followed by an endless string of 'B's
> @@ -131,10 +172,29 @@ static void wait_for_serial(const char *side)
>  {
>  char *serialpath = g_strdup_printf("%s/%s", tmpfs, side);
>  FILE *serialfile = fopen(serialpath, "r");
> +const char *arch = qtest_get_arch();
> +int started = (strcmp(side, "src_serial") == 0 &&
> +   strcmp(arch, "ppc64") == 0) ? 0 : 1;
>  
>  do {
>  int readvalue = fgetc(serialfile);
>  
> +if (!started) {
> +/* SLOF prints its banner before starting test,
> + * to ignore it, mark the start of the test with '_',
> + * ignore all characters until this marker
> + */
> +switch (readvalue) {
> +case '_':
> +started = 1;
> +break;
> +case EOF:
> +fseek(serialfile, 0, SEEK_SET);
> +usleep(1000);
> +break;
> +}
> +continue;
> +}
>  switch (readvalue) {
>  case 'A':
>  /* Fine */
> @@ -147,6 +207,8 @@ static void wait_for_serial(const char *side)
>  return;
>  
>  case EOF:
> +started = (strcmp(side, "src_serial") == 0 &&
> +   strcmp(arch, "ppc64") == 0) ? 0 : 1;
>  fseek(serialfile, 0, SEEK_SET);
>  usleep(1000);
>  break;
> @@ -295,32 +357,48 @@ static void test_migrate(void)
>  char *uri = g_strdup_printf("unix:%s/migsocket", tmpfs);
>  QTestState *global = global_qtest, *from, *to;
>  unsigned char dest_byte_a, dest_byte_b, dest_byte_c, dest_byte_d;
> -gchar *cmd;
> +gchar *cmd, *cmd_src, 

Re: [Qemu-devel] [PATCH v2] test: port postcopy test to ppc64

2016-07-21 Thread Dr. David Alan Gilbert
* Laurent Vivier (lviv...@redhat.com) wrote:
> As userfaultfd syscall is available on powerpc, migration
> postcopy can be used.
> 
> This patch adds the support needed to test this on powerpc,
> instead of using a bootsector to run code to modify memory,
> we use a FORTH script in "boot-command" property.
> 
> As spapr machine doesn't support "-prom-env" argument
> (the nvram is initialized by SLOF and not by QEMU),
> "boot-command" is provided to SLOF via a file mapped nvram
> (with "-drive file=...,if=pflash")
> 
> Signed-off-by: Laurent Vivier 

Thanks for doing this!

> ---
> v2: move FORTH script directly in sprintf()
> use openbios_firmware_abi.h
> remove useless "default" case
> 
>  tests/Makefile.include |   1 +
>  tests/postcopy-test.c  | 116 
> +
>  2 files changed, 98 insertions(+), 19 deletions(-)
> 
> diff --git a/tests/Makefile.include b/tests/Makefile.include
> index e7e50d6..e2d1885 100644
> --- a/tests/Makefile.include
> +++ b/tests/Makefile.include
> @@ -268,6 +268,7 @@ check-qtest-sparc-y += tests/prom-env-test$(EXESUF)
>  #check-qtest-sparc64-y += tests/prom-env-test$(EXESUF)
>  check-qtest-microblazeel-y = $(check-qtest-microblaze-y)
>  check-qtest-xtensaeb-y = $(check-qtest-xtensa-y)
> +check-qtest-ppc64-y += tests/postcopy-test$(EXESUF)
>  
>  check-qtest-generic-y += tests/qom-test$(EXESUF)
>  
> diff --git a/tests/postcopy-test.c b/tests/postcopy-test.c
> index 16465ab..229e9e9 100644
> --- a/tests/postcopy-test.c
> +++ b/tests/postcopy-test.c
> @@ -18,6 +18,9 @@
>  #include "qemu/sockets.h"
>  #include "sysemu/char.h"
>  #include "sysemu/sysemu.h"
> +#include "hw/nvram/openbios_firmware_abi.h"
> +
> +#define MIN_NVRAM_SIZE 8192 /* from spapr_nvram.c */
>  
>  const unsigned start_address = 1024 * 1024;
>  const unsigned end_address = 100 * 1024 * 1024;
> @@ -122,6 +125,44 @@ unsigned char bootsect[] = {
>0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa
>  };
>  
> +static void init_bootfile_x86(const char *bootpath)
> +{
> +FILE *bootfile = fopen(bootpath, "wb");
> +
> +g_assert_cmpint(fwrite(bootsect, 512, 1, bootfile), ==, 1);
> +fclose(bootfile);
> +}
> +
> +static void init_bootfile_ppc(const char *bootpath)
> +{
> +FILE *bootfile;
> +char buf[MIN_NVRAM_SIZE];
> +struct OpenBIOS_nvpart_v1 *header = (struct OpenBIOS_nvpart_v1 *)buf;
> +
> +memset(buf, 0, MIN_NVRAM_SIZE);
> +
> +/* Create a "common" partition in nvram to store boot-command property */
> +
> +header->signature = OPENBIOS_PART_SYSTEM;
> +memcpy(header->name, "common", 6);
> +OpenBIOS_finish_partition(header, MIN_NVRAM_SIZE);
> +
> +/* FW_MAX_SIZE is 4MB, but slof.bin is only 900KB,
> + * so let's modify memory between 1MB and 100MB
> + * to do like PC bootsector
> + */
> +
> +sprintf(buf + 16,
> +"boot-command=hex .\" _\" begin %x %x do i c@ 1 + i c! 1000 
> +loop "
> +".\" B\" 0 until", end_address, start_address);

Very nice; took me a while do decode but yes I think that's doing
the same as my x86.

Dave

> +/* Write partition to the NVRAM file */
> +
> +bootfile = fopen(bootpath, "wb");
> +g_assert_cmpint(fwrite(buf, MIN_NVRAM_SIZE, 1, bootfile), ==, 1);
> +fclose(bootfile);
> +}
> +
>  /*
>   * Wait for some output in the serial output file,
>   * we get an 'A' followed by an endless string of 'B's
> @@ -131,10 +172,29 @@ static void wait_for_serial(const char *side)
>  {
>  char *serialpath = g_strdup_printf("%s/%s", tmpfs, side);
>  FILE *serialfile = fopen(serialpath, "r");
> +const char *arch = qtest_get_arch();
> +int started = (strcmp(side, "src_serial") == 0 &&
> +   strcmp(arch, "ppc64") == 0) ? 0 : 1;
>  
>  do {
>  int readvalue = fgetc(serialfile);
>  
> +if (!started) {
> +/* SLOF prints its banner before starting test,
> + * to ignore it, mark the start of the test with '_',
> + * ignore all characters until this marker
> + */
> +switch (readvalue) {
> +case '_':
> +started = 1;
> +break;
> +case EOF:
> +fseek(serialfile, 0, SEEK_SET);
> +usleep(1000);
> +break;
> +}
> +continue;
> +}
>  switch (readvalue) {
>  case 'A':
>  /* Fine */
> @@ -147,6 +207,8 @@ static void wait_for_serial(const char *side)
>  return;
>  
>  case EOF:
> +started = (strcmp(side, "src_serial") == 0 &&
> +   strcmp(arch, "ppc64") == 0) ? 0 : 1;
>  fseek(serialfile, 0, SEEK_SET);
>  usleep(1000);
>  break;
> @@ -295,32 +357,48 @@ static void test_migrate(void)
>  char *uri = g_strdup_printf("unix:%s/migsocket", tmpfs);
>  QTestState *global = global_qtest, *from, *to;
>  

[Qemu-devel] [PATCH v2] test: port postcopy test to ppc64

2016-07-21 Thread Laurent Vivier
As userfaultfd syscall is available on powerpc, migration
postcopy can be used.

This patch adds the support needed to test this on powerpc,
instead of using a bootsector to run code to modify memory,
we use a FORTH script in "boot-command" property.

As spapr machine doesn't support "-prom-env" argument
(the nvram is initialized by SLOF and not by QEMU),
"boot-command" is provided to SLOF via a file mapped nvram
(with "-drive file=...,if=pflash")

Signed-off-by: Laurent Vivier 
---
v2: move FORTH script directly in sprintf()
use openbios_firmware_abi.h
remove useless "default" case

 tests/Makefile.include |   1 +
 tests/postcopy-test.c  | 116 +
 2 files changed, 98 insertions(+), 19 deletions(-)

diff --git a/tests/Makefile.include b/tests/Makefile.include
index e7e50d6..e2d1885 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -268,6 +268,7 @@ check-qtest-sparc-y += tests/prom-env-test$(EXESUF)
 #check-qtest-sparc64-y += tests/prom-env-test$(EXESUF)
 check-qtest-microblazeel-y = $(check-qtest-microblaze-y)
 check-qtest-xtensaeb-y = $(check-qtest-xtensa-y)
+check-qtest-ppc64-y += tests/postcopy-test$(EXESUF)
 
 check-qtest-generic-y += tests/qom-test$(EXESUF)
 
diff --git a/tests/postcopy-test.c b/tests/postcopy-test.c
index 16465ab..229e9e9 100644
--- a/tests/postcopy-test.c
+++ b/tests/postcopy-test.c
@@ -18,6 +18,9 @@
 #include "qemu/sockets.h"
 #include "sysemu/char.h"
 #include "sysemu/sysemu.h"
+#include "hw/nvram/openbios_firmware_abi.h"
+
+#define MIN_NVRAM_SIZE 8192 /* from spapr_nvram.c */
 
 const unsigned start_address = 1024 * 1024;
 const unsigned end_address = 100 * 1024 * 1024;
@@ -122,6 +125,44 @@ unsigned char bootsect[] = {
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa
 };
 
+static void init_bootfile_x86(const char *bootpath)
+{
+FILE *bootfile = fopen(bootpath, "wb");
+
+g_assert_cmpint(fwrite(bootsect, 512, 1, bootfile), ==, 1);
+fclose(bootfile);
+}
+
+static void init_bootfile_ppc(const char *bootpath)
+{
+FILE *bootfile;
+char buf[MIN_NVRAM_SIZE];
+struct OpenBIOS_nvpart_v1 *header = (struct OpenBIOS_nvpart_v1 *)buf;
+
+memset(buf, 0, MIN_NVRAM_SIZE);
+
+/* Create a "common" partition in nvram to store boot-command property */
+
+header->signature = OPENBIOS_PART_SYSTEM;
+memcpy(header->name, "common", 6);
+OpenBIOS_finish_partition(header, MIN_NVRAM_SIZE);
+
+/* FW_MAX_SIZE is 4MB, but slof.bin is only 900KB,
+ * so let's modify memory between 1MB and 100MB
+ * to do like PC bootsector
+ */
+
+sprintf(buf + 16,
+"boot-command=hex .\" _\" begin %x %x do i c@ 1 + i c! 1000 +loop "
+".\" B\" 0 until", end_address, start_address);
+
+/* Write partition to the NVRAM file */
+
+bootfile = fopen(bootpath, "wb");
+g_assert_cmpint(fwrite(buf, MIN_NVRAM_SIZE, 1, bootfile), ==, 1);
+fclose(bootfile);
+}
+
 /*
  * Wait for some output in the serial output file,
  * we get an 'A' followed by an endless string of 'B's
@@ -131,10 +172,29 @@ static void wait_for_serial(const char *side)
 {
 char *serialpath = g_strdup_printf("%s/%s", tmpfs, side);
 FILE *serialfile = fopen(serialpath, "r");
+const char *arch = qtest_get_arch();
+int started = (strcmp(side, "src_serial") == 0 &&
+   strcmp(arch, "ppc64") == 0) ? 0 : 1;
 
 do {
 int readvalue = fgetc(serialfile);
 
+if (!started) {
+/* SLOF prints its banner before starting test,
+ * to ignore it, mark the start of the test with '_',
+ * ignore all characters until this marker
+ */
+switch (readvalue) {
+case '_':
+started = 1;
+break;
+case EOF:
+fseek(serialfile, 0, SEEK_SET);
+usleep(1000);
+break;
+}
+continue;
+}
 switch (readvalue) {
 case 'A':
 /* Fine */
@@ -147,6 +207,8 @@ static void wait_for_serial(const char *side)
 return;
 
 case EOF:
+started = (strcmp(side, "src_serial") == 0 &&
+   strcmp(arch, "ppc64") == 0) ? 0 : 1;
 fseek(serialfile, 0, SEEK_SET);
 usleep(1000);
 break;
@@ -295,32 +357,48 @@ static void test_migrate(void)
 char *uri = g_strdup_printf("unix:%s/migsocket", tmpfs);
 QTestState *global = global_qtest, *from, *to;
 unsigned char dest_byte_a, dest_byte_b, dest_byte_c, dest_byte_d;
-gchar *cmd;
+gchar *cmd, *cmd_src, *cmd_dst;
 QDict *rsp;
 
 char *bootpath = g_strdup_printf("%s/bootsect", tmpfs);
-FILE *bootfile = fopen(bootpath, "wb");
+const char *arch = qtest_get_arch();
 
 got_stop = false;
-g_assert_cmpint(fwrite(bootsect, 512, 1, bootfile), ==, 1);
-fclose(bootfile);
 
-cmd = g_strdup_printf("-machine