diff mbox series

[kvm-unit-tests,v3,7/9] s390x: Add sthyi cc==0 r2+1 verification

Message ID 20211007085027.13050-8-frankja@linux.ibm.com (mailing list archive)
State New, archived
Headers show
Series s390x: Cleanup and maintenance 2 | expand

Commit Message

Janosch Frank Oct. 7, 2021, 8:50 a.m. UTC
On success r2 + 1 should be 0, let's also check for that.

Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
---
 s390x/sthyi.c | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

Comments

Thomas Huth Oct. 7, 2021, 9:11 a.m. UTC | #1
On 07/10/2021 10.50, Janosch Frank wrote:
> On success r2 + 1 should be 0, let's also check for that.
> 
> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
> Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
> ---
>   s390x/sthyi.c | 20 +++++++++++---------
>   1 file changed, 11 insertions(+), 9 deletions(-)
> 
> diff --git a/s390x/sthyi.c b/s390x/sthyi.c
> index db90b56f..4b153bf4 100644
> --- a/s390x/sthyi.c
> +++ b/s390x/sthyi.c
> @@ -24,16 +24,16 @@ static inline int sthyi(uint64_t vaddr, uint64_t fcode, uint64_t *rc,
>   {
>   	register uint64_t code asm("0") = fcode;
>   	register uint64_t addr asm("2") = vaddr;
> -	register uint64_t rc3 asm("3") = 0;
> +	register uint64_t rc3 asm("3") = 42;
>   	int cc = 0;
>   
> -	asm volatile(".insn rre,0xB2560000,%[r1],%[r2]\n"
> -		     "ipm	 %[cc]\n"
> -		     "srl	 %[cc],28\n"
> -		     : [cc] "=d" (cc)
> -		     : [code] "d" (code), [addr] "a" (addr), [r1] "i" (r1),
> -		       [r2] "i" (r2)
> -		     : "memory", "cc", "r3");
> +	asm volatile(
> +		".insn   rre,0xB2560000,%[r1],%[r2]\n"
> +		"ipm     %[cc]\n"
> +		"srl     %[cc],28\n"
> +		: [cc] "=d" (cc), "+d" (rc3)
> +		: [code] "d" (code), [addr] "a" (addr), [r1] "i" (r1), [r2] "i" (r2)
> +		: "memory", "cc");
>   	if (rc)
>   		*rc = rc3;
>   	return cc;
> @@ -139,16 +139,18 @@ static void test_fcode0(void)
>   	struct sthyi_hdr_sctn *hdr;
>   	struct sthyi_mach_sctn *mach;
>   	struct sthyi_par_sctn *par;
> +	uint64_t rc = 42;
>   
>   	/* Zero destination memory. */
>   	memset(pagebuf, 0, PAGE_SIZE);
>   
>   	report_prefix_push("fcode 0");
> -	sthyi((uint64_t)pagebuf, 0, NULL, 0, 2);
> +	sthyi((uint64_t)pagebuf, 0, &rc, 0, 2);
>   	hdr = (void *)pagebuf;
>   	mach = (void *)pagebuf + hdr->INFMOFF;
>   	par = (void *)pagebuf + hdr->INFPOFF;
>   
> +	report(!rc, "r2 + 1 == 0");

Could you please check for "rc == CODE_SUCCES" (since we've got that for 
this purpose)?

With that change:
Reviewed-by: Thomas Huth <thuth@redhat.com>
Janosch Frank Oct. 7, 2021, 10:51 a.m. UTC | #2
On 10/7/21 11:11, Thomas Huth wrote:
> On 07/10/2021 10.50, Janosch Frank wrote:
>> On success r2 + 1 should be 0, let's also check for that.
>>
>> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
>> Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
>> ---
>>    s390x/sthyi.c | 20 +++++++++++---------
>>    1 file changed, 11 insertions(+), 9 deletions(-)
>>
>> diff --git a/s390x/sthyi.c b/s390x/sthyi.c
>> index db90b56f..4b153bf4 100644
>> --- a/s390x/sthyi.c
>> +++ b/s390x/sthyi.c
>> @@ -24,16 +24,16 @@ static inline int sthyi(uint64_t vaddr, uint64_t fcode, uint64_t *rc,
>>    {
>>    	register uint64_t code asm("0") = fcode;
>>    	register uint64_t addr asm("2") = vaddr;
>> -	register uint64_t rc3 asm("3") = 0;
>> +	register uint64_t rc3 asm("3") = 42;
>>    	int cc = 0;
>>    
>> -	asm volatile(".insn rre,0xB2560000,%[r1],%[r2]\n"
>> -		     "ipm	 %[cc]\n"
>> -		     "srl	 %[cc],28\n"
>> -		     : [cc] "=d" (cc)
>> -		     : [code] "d" (code), [addr] "a" (addr), [r1] "i" (r1),
>> -		       [r2] "i" (r2)
>> -		     : "memory", "cc", "r3");
>> +	asm volatile(
>> +		".insn   rre,0xB2560000,%[r1],%[r2]\n"
>> +		"ipm     %[cc]\n"
>> +		"srl     %[cc],28\n"
>> +		: [cc] "=d" (cc), "+d" (rc3)
>> +		: [code] "d" (code), [addr] "a" (addr), [r1] "i" (r1), [r2] "i" (r2)
>> +		: "memory", "cc");
>>    	if (rc)
>>    		*rc = rc3;
>>    	return cc;
>> @@ -139,16 +139,18 @@ static void test_fcode0(void)
>>    	struct sthyi_hdr_sctn *hdr;
>>    	struct sthyi_mach_sctn *mach;
>>    	struct sthyi_par_sctn *par;
>> +	uint64_t rc = 42;
>>    
>>    	/* Zero destination memory. */
>>    	memset(pagebuf, 0, PAGE_SIZE);
>>    
>>    	report_prefix_push("fcode 0");
>> -	sthyi((uint64_t)pagebuf, 0, NULL, 0, 2);
>> +	sthyi((uint64_t)pagebuf, 0, &rc, 0, 2);
>>    	hdr = (void *)pagebuf;
>>    	mach = (void *)pagebuf + hdr->INFMOFF;
>>    	par = (void *)pagebuf + hdr->INFPOFF;
>>    
>> +	report(!rc, "r2 + 1 == 0");
> 
> Could you please check for "rc == CODE_SUCCES" (since we've got that for
> this purpose)?

I'll do one better and also check for !cc

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

Thanks!
diff mbox series

Patch

diff --git a/s390x/sthyi.c b/s390x/sthyi.c
index db90b56f..4b153bf4 100644
--- a/s390x/sthyi.c
+++ b/s390x/sthyi.c
@@ -24,16 +24,16 @@  static inline int sthyi(uint64_t vaddr, uint64_t fcode, uint64_t *rc,
 {
 	register uint64_t code asm("0") = fcode;
 	register uint64_t addr asm("2") = vaddr;
-	register uint64_t rc3 asm("3") = 0;
+	register uint64_t rc3 asm("3") = 42;
 	int cc = 0;
 
-	asm volatile(".insn rre,0xB2560000,%[r1],%[r2]\n"
-		     "ipm	 %[cc]\n"
-		     "srl	 %[cc],28\n"
-		     : [cc] "=d" (cc)
-		     : [code] "d" (code), [addr] "a" (addr), [r1] "i" (r1),
-		       [r2] "i" (r2)
-		     : "memory", "cc", "r3");
+	asm volatile(
+		".insn   rre,0xB2560000,%[r1],%[r2]\n"
+		"ipm     %[cc]\n"
+		"srl     %[cc],28\n"
+		: [cc] "=d" (cc), "+d" (rc3)
+		: [code] "d" (code), [addr] "a" (addr), [r1] "i" (r1), [r2] "i" (r2)
+		: "memory", "cc");
 	if (rc)
 		*rc = rc3;
 	return cc;
@@ -139,16 +139,18 @@  static void test_fcode0(void)
 	struct sthyi_hdr_sctn *hdr;
 	struct sthyi_mach_sctn *mach;
 	struct sthyi_par_sctn *par;
+	uint64_t rc = 42;
 
 	/* Zero destination memory. */
 	memset(pagebuf, 0, PAGE_SIZE);
 
 	report_prefix_push("fcode 0");
-	sthyi((uint64_t)pagebuf, 0, NULL, 0, 2);
+	sthyi((uint64_t)pagebuf, 0, &rc, 0, 2);
 	hdr = (void *)pagebuf;
 	mach = (void *)pagebuf + hdr->INFMOFF;
 	par = (void *)pagebuf + hdr->INFPOFF;
 
+	report(!rc, "r2 + 1 == 0");
 	test_fcode0_hdr(hdr);
 	test_fcode0_mach(mach);
 	test_fcode0_par(par);