Re: [kvm-unit-tests PATCH v2] s390x: Add prefixes to pgm interrupt checks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 19/09/2018 15:14, Janosch Frank wrote:
> We need the information about which of the checks failed if there are
> more than one and the prefixes provide that.
> 
> Signed-off-by: Janosch Frank <frankja@xxxxxxxxxxxxx>
> Reviewed-by: Thomas Huth <thuth@xxxxxxxxxx>
> ---
> 
> Moved prefix_push to expect_pgm_int() in iep.c
> 
> ---
>  s390x/cmm.c    |  4 ++++
>  s390x/diag10.c | 23 +++++++++++++++++++++++
>  s390x/gs.c     |  8 ++++++++
>  s390x/iep.c    |  2 ++
>  s390x/pfmf.c   |  2 ++
>  s390x/skey.c   |  7 +++++++
>  6 files changed, 46 insertions(+)
> 
> diff --git a/s390x/cmm.c b/s390x/cmm.c
> index 42dfda2..fe4d9df 100644
> --- a/s390x/cmm.c
> +++ b/s390x/cmm.c
> @@ -29,17 +29,21 @@ static unsigned long essa(uint8_t state, unsigned long paddr)
>  
>  static void test_params(void)
>  {
> +	report_prefix_push("invalid ORC 8");
>  	expect_pgm_int();
>  	essa(8, (unsigned long)pagebuf);
>  	check_pgm_int_code(PGM_INT_CODE_SPECIFICATION);
> +	report_prefix_pop();
>  }
>  
>  static void test_priv(void)
>  {
> +	report_prefix_push("privileged");
>  	expect_pgm_int();
>  	enter_pstate();
>  	essa(0, (unsigned long)pagebuf);
>  	check_pgm_int_code(PGM_INT_CODE_PRIVILEGED_OPERATION);
> +	report_prefix_pop();
>  }
>  
>  /* Unfortunately the availability is not indicated by stfl bits, but
> diff --git a/s390x/diag10.c b/s390x/diag10.c
> index 806ebc6..7ee8945 100644
> --- a/s390x/diag10.c
> +++ b/s390x/diag10.c
> @@ -32,43 +32,66 @@ static inline void diag10(unsigned long start, unsigned long end)
>  /* Try freeing the prefix */
>  static void test_prefix(void)
>  {
> +	report_prefix_push("lowcore freeing");
> +
> +	report_prefix_push("0x0000/0x0000");
>  	expect_pgm_int();
>  	diag10(0, 0);
>  	check_pgm_int_code(PGM_INT_CODE_SPECIFICATION);
> +	report_prefix_pop();
>  
> +
> +	report_prefix_push("0x1000/0x1000");
>  	expect_pgm_int();
>  	diag10(0x1000, 0x1000);
>  	check_pgm_int_code(PGM_INT_CODE_SPECIFICATION);
> +	report_prefix_pop();
>  
> +	report_prefix_push("0x0000/0x1000");
>  	expect_pgm_int();
>  	diag10(0, 0x1000);
>  	check_pgm_int_code(PGM_INT_CODE_SPECIFICATION);
> +	report_prefix_pop();
> +
> +	report_prefix_pop();
>  }
>  
>  static void test_params(void)
>  {
> +	report_prefix_push("start/end");
> +
>  	/* end < start */
> +	report_prefix_push("end < start");
>  	expect_pgm_int();
>  	diag10(page1, page0);
>  	check_pgm_int_code(PGM_INT_CODE_SPECIFICATION);
> +	report_prefix_pop();
>  
>  	/* Unaligned start */
> +	report_prefix_push("unaligned start");
>  	expect_pgm_int();
>  	diag10((unsigned long) pagebuf + 42, page1);
>  	check_pgm_int_code(PGM_INT_CODE_SPECIFICATION);
> +	report_prefix_pop();
>  
>  	/* Unaligned end */
> +	report_prefix_push("unaligned end");
>  	expect_pgm_int();
>  	diag10(page0, (unsigned long) pagebuf + PAGE_SIZE + 42);
>  	check_pgm_int_code(PGM_INT_CODE_SPECIFICATION);
> +	report_prefix_pop();
> +
> +	report_prefix_pop();
>  }
>  
>  static void test_priv(void)
>  {
> +	report_prefix_push("privileged");
>  	expect_pgm_int();
>  	enter_pstate();
>  	diag10(page0, page0);
>  	check_pgm_int_code(PGM_INT_CODE_PRIVILEGED_OPERATION);
> +	report_prefix_pop();
>  }
>  
>  int main(void)
> diff --git a/s390x/gs.c b/s390x/gs.c
> index bddc2b4..26f22e8 100644
> --- a/s390x/gs.c
> +++ b/s390x/gs.c
> @@ -128,12 +128,20 @@ static void test_load(void)
>  /* Test gs instructions without enablement resulting in an exception */
>  static void test_special(void)
>  {
> +	report_prefix_push("disabled gs");
> +	report_prefix_push("load gs");
>  	expect_pgm_int();
>  	load_gs_cb(&gs_cb);
>  	check_pgm_int_code(PGM_INT_CODE_SPECIAL_OPERATION);
> +	report_prefix_pop();
> +
> +	report_prefix_push("store gs");
>  	expect_pgm_int();
>  	store_gs_cb(&gs_cb);
>  	check_pgm_int_code(PGM_INT_CODE_SPECIAL_OPERATION);
> +	report_prefix_pop();
> +
> +	report_prefix_pop();
>  }
>  
>  static void init(void)
> diff --git a/s390x/iep.c b/s390x/iep.c
> index 8c1ea8f..7da78a3 100644
> --- a/s390x/iep.c
> +++ b/s390x/iep.c
> @@ -35,10 +35,12 @@ static void test_iep(void)
>  	*code = 0x07fe;
>  	fn = (void *)code;
>  
> +	report_prefix_push("iep protection");
>  	expect_pgm_int();
>  	/* Jump into protected page */
>  	fn();
>  	check_pgm_int_code(PGM_INT_CODE_PROTECTION);
> +	report_prefix_pop();
>  	unprotect_page(iepbuf, PAGE_ENTRY_IEP);
>  	ctl_clear_bit(0, 20);
>  }
> diff --git a/s390x/pfmf.c b/s390x/pfmf.c
> index 2268fd0..5e61267 100644
> --- a/s390x/pfmf.c
> +++ b/s390x/pfmf.c
> @@ -51,10 +51,12 @@ static inline unsigned long pfmf(unsigned long r1, unsigned long paddr)
>  
>  static void test_priv(void)
>  {
> +	report_prefix_push("privileged");
>  	expect_pgm_int();
>  	enter_pstate();
>  	pfmf(0, (unsigned long) pagebuf);
>  	check_pgm_int_code(PGM_INT_CODE_PRIVILEGED_OPERATION);
> +	report_prefix_pop();
>  }
>  
>  static void test_4k_key(void)
> diff --git a/s390x/skey.c b/s390x/skey.c
> index e4c2a43..1949533 100644
> --- a/s390x/skey.c
> +++ b/s390x/skey.c
> @@ -68,18 +68,25 @@ static void test_priv(void)
>  	union skey skey;
>  
>  	memset(pagebuf, 0, PAGE_SIZE * 2);
> +	report_prefix_push("privileged");
> +	report_prefix_push("sske");
>  	expect_pgm_int();
>  	enter_pstate();
>  	set_storage_key(page0, 0x30, 0);
>  	check_pgm_int_code(PGM_INT_CODE_PRIVILEGED_OPERATION);
> +	report_prefix_pop();
>  
>  	skey.val = get_storage_key(page0);
>  	report("skey did not change on exception", skey.str.acc != 3);
>  
> +	report_prefix_push("iske");
>  	expect_pgm_int();
>  	enter_pstate();
>  	get_storage_key(page0);
>  	check_pgm_int_code(PGM_INT_CODE_PRIVILEGED_OPERATION);
> +	report_prefix_pop();
> +
> +	report_prefix_pop();
>  }
>  
>  int main(void)
> 

Reviewed-by: David Hildenbrand <david@xxxxxxxxxx>

-- 

Thanks,

David / dhildenb



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux