Re: [kvm-unit-tests PATCH] s390x: Add specification exception interception test

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

 



On 7/22/21 11:28 AM, Thomas Huth wrote:
> On 06/07/2021 13.57, Janis Schoetterl-Glausch wrote:
>> Check that specification exceptions cause intercepts when
>> specification exception interpretation is off.
>> Check that specification exceptions caused by program new PSWs
>> cause interceptions.
>> We cannot assert that non program new PSW specification exceptions
>> are interpreted because whether interpretation occurs or not is
>> configuration dependent.
>>
>> Signed-off-by: Janis Schoetterl-Glausch <scgl@xxxxxxxxxxxxx>
>> ---
>> The patch is based on the following patch sets by Janosch:
>> [kvm-unit-tests PATCH 0/5] s390x: sie and uv cleanups
>> [kvm-unit-tests PATCH v2 0/3] s390x: Add snippet support
>>
>>   s390x/Makefile             |  2 +
>>   lib/s390x/sie.h            |  1 +
>>   s390x/snippets/c/spec_ex.c | 13 ++++++
>>   s390x/spec_ex-sie.c        | 91 ++++++++++++++++++++++++++++++++++++++
>>   s390x/unittests.cfg        |  3 ++
>>   5 files changed, 110 insertions(+)
>>   create mode 100644 s390x/snippets/c/spec_ex.c
>>   create mode 100644 s390x/spec_ex-sie.c
>>
>> diff --git a/s390x/Makefile b/s390x/Makefile
>> index 07af26d..b1b6536 100644
>> --- a/s390x/Makefile
>> +++ b/s390x/Makefile
>> @@ -24,6 +24,7 @@ tests += $(TEST_DIR)/mvpg.elf
>>   tests += $(TEST_DIR)/uv-host.elf
>>   tests += $(TEST_DIR)/edat.elf
>>   tests += $(TEST_DIR)/mvpg-sie.elf
>> +tests += $(TEST_DIR)/spec_ex-sie.elf
>>   
>>   tests_binary = $(patsubst %.elf,%.bin,$(tests))
>>   ifneq ($(HOST_KEY_DOCUMENT),)
>> @@ -84,6 +85,7 @@ snippet_asmlib = $(SNIPPET_DIR)/c/cstart.o
>>   # perquisites (=guests) for the snippet hosts.
>>   # $(TEST_DIR)/<snippet-host>.elf: snippets = $(SNIPPET_DIR)/<c/asm>/<snippet>.gbin
>>   $(TEST_DIR)/mvpg-sie.elf: snippets = $(SNIPPET_DIR)/c/mvpg-snippet.gbin
>> +$(TEST_DIR)/spec_ex-sie.elf: snippets = $(SNIPPET_DIR)/c/spec_ex.gbin
>>   
>>   $(SNIPPET_DIR)/asm/%.gbin: $(SNIPPET_DIR)/asm/%.o $(FLATLIBS)
>>   	$(OBJCOPY) -O binary $(patsubst %.gbin,%.o,$@) $@
>> diff --git a/lib/s390x/sie.h b/lib/s390x/sie.h
>> index 6ba858a..a3b8623 100644
>> --- a/lib/s390x/sie.h
>> +++ b/lib/s390x/sie.h
>> @@ -98,6 +98,7 @@ struct kvm_s390_sie_block {
>>   	uint8_t		fpf;			/* 0x0060 */
>>   #define ECB_GS		0x40
>>   #define ECB_TE		0x10
>> +#define ECB_SPECI	0x08
>>   #define ECB_SRSI	0x04
>>   #define ECB_HOSTPROTINT	0x02
>>   	uint8_t		ecb;			/* 0x0061 */
>> diff --git a/s390x/snippets/c/spec_ex.c b/s390x/snippets/c/spec_ex.c
>> new file mode 100644
>> index 0000000..f2daab5
>> --- /dev/null
>> +++ b/s390x/snippets/c/spec_ex.c
> 
> Please add a short header comment with the basic idea here + license 
> information (e.g. SPDX identifier). Also in the other new file that you 
> introduce in this patch.
> 
>> @@ -0,0 +1,13 @@
>> +#include <stdint.h>
>> +#include <asm/arch_def.h>
>> +
>> +__attribute__((section(".text"))) int main(void)
>> +{
>> +	uint64_t bad_psw = 0;
>> +	struct psw *pgm_new = (struct psw *)464;
> 
> Is it possible to use the lib/s390x/asm/arch_def.h in snippets? If so, I'd 
> vote for using &lowcore->pgm_new_psw instead of the magic number 464.

I think it should be, we don't print in arch_def.h and that's usually
the biggest problem for snippets.

But even if it doesn't work we can still use GEN_LC_PGM_NEW_PSW from
asm-offsets.h

> 
>> +	pgm_new->mask = 1UL << (63 - 12); //invalid program new PSW
> 
> Please add a space after the //
> (also in the other spots in this patch)
> 
>> +	pgm_new->addr = 0xdeadbeef;
> 
> Are we testing the mask or the addr here? If we're testing the mask, I'd 
> rather use an even addr here to make sure that we do not trap because of the 
> uneven address. Or do we just don't care?

If I remember correctly then the odd address would be a late exception
and an invalid mask is an early exception. The whole topic of PSW
exceptions is rather complex especially if you add the instructions that
change the PSW into the consideration.

> 
>> +	asm volatile ("lpsw %0" :: "Q"(bad_psw));
>> +	return 0;
>> +}
> 
>   Thomas
> 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Kernel Development]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Info]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Linux Media]     [Device Mapper]

  Powered by Linux