diff mbox

[kvm-unit-tests,v2] powerpc: don't fail if QEMU does not support alignment exception

Message ID 1461152447-11381-1-git-send-email-lvivier@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Laurent Vivier April 20, 2016, 11:40 a.m. UTC
As for lswi, lswx is supposed to cause an alignment exception in
little endian mode, but QEMU does not support it. So in case we do
not get an exception, this is an expected failure and we run the other
tests.

Signed-off-by: Laurent Vivier <lvivier@redhat.com>
---
v2: move report("partial",...) out of #if..#endif block

 powerpc/emulator.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

Comments

Thomas Huth April 20, 2016, 11:45 a.m. UTC | #1
On 20.04.2016 13:40, Laurent Vivier wrote:
> As for lswi, lswx is supposed to cause an alignment exception in
> little endian mode, but QEMU does not support it. So in case we do
> not get an exception, this is an expected failure and we run the other
> tests.
> 
> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
> ---
> v2: move report("partial",...) out of #if..#endif block
> 
>  powerpc/emulator.c | 15 +++++++++++----
>  1 file changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/powerpc/emulator.c b/powerpc/emulator.c
> index 4dc341f..0e5f7a3 100644
> --- a/powerpc/emulator.c
> +++ b/powerpc/emulator.c
> @@ -245,11 +245,18 @@ static void test_lswx(void)
>  		      "xer", "r11", "r12", "memory");
>  
>  #if  __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
> -	report("alignment", alignment);
> -	return;
> -#else
> -	report("partial", regs[0] == 0x01020300 && regs[1] == (uint64_t)-1);
> +	/*
> +	 * lswx is supposed to cause an alignment exception in little endian
> +	 * mode, but QEMU does not support it. So in case we do not get an
> +	 * exception, this is an expected failure and we run the other tests
> +	 */
> +	report_xfail("alignment", !alignment, alignment);
> +	if (alignment) {
> +		report_prefix_pop();
> +		return;
> +	}
>  #endif
> +	report("partial", regs[0] == 0x01020300 && regs[1] == (uint64_t)-1);
>  
>  	/* check an old know bug: the number of bytes is used as
>  	 * the number of registers, so try 32 bytes.
> 

Looks fine!

Reviewed-by: Thomas Huth <thuth@redhat.com>

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Gibson April 20, 2016, 11:22 p.m. UTC | #2
On Wed, 20 Apr 2016 13:40:47 +0200
Laurent Vivier <lvivier@redhat.com> wrote:

> As for lswi, lswx is supposed to cause an alignment exception in
> little endian mode, but QEMU does not support it. So in case we do
> not get an exception, this is an expected failure and we run the other
> tests.
> 
> Signed-off-by: Laurent Vivier <lvivier@redhat.com>

Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
> ---
> v2: move report("partial",...) out of #if..#endif block
> 
>  powerpc/emulator.c | 15 +++++++++++----
>  1 file changed, 11 insertions(+), 4 deletions(-)
> 
> diff --git a/powerpc/emulator.c b/powerpc/emulator.c
> index 4dc341f..0e5f7a3 100644
> --- a/powerpc/emulator.c
> +++ b/powerpc/emulator.c
> @@ -245,11 +245,18 @@ static void test_lswx(void)
>  		      "xer", "r11", "r12", "memory");
>  
>  #if  __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
> -	report("alignment", alignment);
> -	return;
> -#else
> -	report("partial", regs[0] == 0x01020300 && regs[1] == (uint64_t)-1);
> +	/*
> +	 * lswx is supposed to cause an alignment exception in little endian
> +	 * mode, but QEMU does not support it. So in case we do not get an
> +	 * exception, this is an expected failure and we run the other tests
> +	 */
> +	report_xfail("alignment", !alignment, alignment);
> +	if (alignment) {
> +		report_prefix_pop();
> +		return;
> +	}
>  #endif
> +	report("partial", regs[0] == 0x01020300 && regs[1] == (uint64_t)-1);
>  
>  	/* check an old know bug: the number of bytes is used as
>  	 * the number of registers, so try 32 bytes.
> -- 
> 2.5.5
>
diff mbox

Patch

diff --git a/powerpc/emulator.c b/powerpc/emulator.c
index 4dc341f..0e5f7a3 100644
--- a/powerpc/emulator.c
+++ b/powerpc/emulator.c
@@ -245,11 +245,18 @@  static void test_lswx(void)
 		      "xer", "r11", "r12", "memory");
 
 #if  __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
-	report("alignment", alignment);
-	return;
-#else
-	report("partial", regs[0] == 0x01020300 && regs[1] == (uint64_t)-1);
+	/*
+	 * lswx is supposed to cause an alignment exception in little endian
+	 * mode, but QEMU does not support it. So in case we do not get an
+	 * exception, this is an expected failure and we run the other tests
+	 */
+	report_xfail("alignment", !alignment, alignment);
+	if (alignment) {
+		report_prefix_pop();
+		return;
+	}
 #endif
+	report("partial", regs[0] == 0x01020300 && regs[1] == (uint64_t)-1);
 
 	/* check an old know bug: the number of bytes is used as
 	 * the number of registers, so try 32 bytes.