diff mbox series

[kvm-unit-tests] s390x/intercept: Test invalid prefix argument to SET PREFIX

Message ID 20220627124356.2033539-1-scgl@linux.ibm.com (mailing list archive)
State New, archived
Headers show
Series [kvm-unit-tests] s390x/intercept: Test invalid prefix argument to SET PREFIX | expand

Commit Message

Janis Schoetterl-Glausch June 27, 2022, 12:43 p.m. UTC
According to the architecture, SET PREFIX must try to access the new
prefix area and recognize an addressing exception if the area is not
accessible.
Test that the exception occurs when we try to set a prefix higher
than the available memory.

Signed-off-by: Janis Schoetterl-Glausch <scgl@linux.ibm.com>
---
 s390x/intercept.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)


base-commit: 110c69492b53f0070e1bbce986fb635e72a423b4

Comments

Claudio Imbrenda June 27, 2022, 12:52 p.m. UTC | #1
On Mon, 27 Jun 2022 14:43:56 +0200
Janis Schoetterl-Glausch <scgl@linux.ibm.com> wrote:

> According to the architecture, SET PREFIX must try to access the new
> prefix area and recognize an addressing exception if the area is not
> accessible.
> Test that the exception occurs when we try to set a prefix higher
> than the available memory.
> 
> Signed-off-by: Janis Schoetterl-Glausch <scgl@linux.ibm.com>
> ---
>  s390x/intercept.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/s390x/intercept.c b/s390x/intercept.c
> index 86e57e11..0b90e588 100644
> --- a/s390x/intercept.c
> +++ b/s390x/intercept.c
> @@ -74,6 +74,20 @@ static void test_spx(void)
>  	expect_pgm_int();
>  	asm volatile(" spx 0(%0) " : : "r"(-8L));
>  	check_pgm_int_code(PGM_INT_CODE_ADDRESSING);
> +
> +	new_prefix = get_ram_size() & 0x7fffe000;
> +	if (get_ram_size() - new_prefix < 2 * PAGE_SIZE) {
> +		expect_pgm_int();
> +		asm volatile("spx	%0 " : : "Q"(new_prefix));
> +		check_pgm_int_code(PGM_INT_CODE_ADDRESSING);
> +
> +		/*
> +		 * Cannot test inaccessibility of the second page the same way.
> +		 * If we try to use the last page as first half of the prefix
> +		 * area and our ram size is a multiple of 8k, after SPX aligns
> +		 * the address to 8k we have a completely accessible area.
> +		 */
> +	}

please add something like:

else {
	report_skip("Inaccessible prefix");
}

>  }
>  
>  /* Test the STORE CPU ADDRESS instruction */
> 
> base-commit: 110c69492b53f0070e1bbce986fb635e72a423b4
Janis Schoetterl-Glausch June 27, 2022, 12:58 p.m. UTC | #2
On 6/27/22 14:52, Claudio Imbrenda wrote:
> On Mon, 27 Jun 2022 14:43:56 +0200
> Janis Schoetterl-Glausch <scgl@linux.ibm.com> wrote:
> 
>> According to the architecture, SET PREFIX must try to access the new
>> prefix area and recognize an addressing exception if the area is not
>> accessible.
>> Test that the exception occurs when we try to set a prefix higher
>> than the available memory.
>>
>> Signed-off-by: Janis Schoetterl-Glausch <scgl@linux.ibm.com>
>> ---
>>  s390x/intercept.c | 14 ++++++++++++++
>>  1 file changed, 14 insertions(+)
>>
>> diff --git a/s390x/intercept.c b/s390x/intercept.c
>> index 86e57e11..0b90e588 100644
>> --- a/s390x/intercept.c
>> +++ b/s390x/intercept.c
>> @@ -74,6 +74,20 @@ static void test_spx(void)
>>  	expect_pgm_int();
>>  	asm volatile(" spx 0(%0) " : : "r"(-8L));
>>  	check_pgm_int_code(PGM_INT_CODE_ADDRESSING);
>> +
>> +	new_prefix = get_ram_size() & 0x7fffe000;
>> +	if (get_ram_size() - new_prefix < 2 * PAGE_SIZE) {
>> +		expect_pgm_int();
>> +		asm volatile("spx	%0 " : : "Q"(new_prefix));
>> +		check_pgm_int_code(PGM_INT_CODE_ADDRESSING);
>> +
>> +		/*
>> +		 * Cannot test inaccessibility of the second page the same way.
>> +		 * If we try to use the last page as first half of the prefix
>> +		 * area and our ram size is a multiple of 8k, after SPX aligns
>> +		 * the address to 8k we have a completely accessible area.
>> +		 */
>> +	}
> 
> please add something like:
> 
> else {
> 	report_skip("Inaccessible prefix");
> }
> 

Yeah, good idea.

Is there any low effort way of generating an invalid prefix other than > ram_size ?
That might then allow for testing the second page also.

>>  }
>>  
>>  /* Test the STORE CPU ADDRESS instruction */
>>
>> base-commit: 110c69492b53f0070e1bbce986fb635e72a423b4
>
diff mbox series

Patch

diff --git a/s390x/intercept.c b/s390x/intercept.c
index 86e57e11..0b90e588 100644
--- a/s390x/intercept.c
+++ b/s390x/intercept.c
@@ -74,6 +74,20 @@  static void test_spx(void)
 	expect_pgm_int();
 	asm volatile(" spx 0(%0) " : : "r"(-8L));
 	check_pgm_int_code(PGM_INT_CODE_ADDRESSING);
+
+	new_prefix = get_ram_size() & 0x7fffe000;
+	if (get_ram_size() - new_prefix < 2 * PAGE_SIZE) {
+		expect_pgm_int();
+		asm volatile("spx	%0 " : : "Q"(new_prefix));
+		check_pgm_int_code(PGM_INT_CODE_ADDRESSING);
+
+		/*
+		 * Cannot test inaccessibility of the second page the same way.
+		 * If we try to use the last page as first half of the prefix
+		 * area and our ram size is a multiple of 8k, after SPX aligns
+		 * the address to 8k we have a completely accessible area.
+		 */
+	}
 }
 
 /* Test the STORE CPU ADDRESS instruction */