Loading Documentation/admin-guide/kernel-parameters.txt +5 −0 Original line number Diff line number Diff line Loading @@ -3795,6 +3795,11 @@ before loading. See Documentation/admin-guide/blockdev/ramdisk.rst. prot_virt= [S390] enable hosting protected virtual machines isolated from the hypervisor (if hardware supports that). Format: <bool> psi= [KNL] Enable or disable pressure stall information tracking. Format: <bool> Loading arch/s390/boot/Makefile +1 −1 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ CFLAGS_sclp_early_core.o += -I$(srctree)/drivers/s390/char obj-y := head.o als.o startup.o mem_detect.o ipl_parm.o ipl_report.o obj-y += string.o ebcdic.o sclp_early_core.o mem.o ipl_vmparm.o cmdline.o obj-y += version.o pgm_check_info.o ctype.o text_dma.o obj-$(CONFIG_PROTECTED_VIRTUALIZATION_GUEST) += uv.o obj-$(findstring y, $(CONFIG_PROTECTED_VIRTUALIZATION_GUEST) $(CONFIG_PGSTE)) += uv.o obj-$(CONFIG_RELOCATABLE) += machine_kexec_reloc.o obj-$(CONFIG_RANDOMIZE_BASE) += kaslr.o targets := bzImage startup.a section_cmp.boot.data section_cmp.boot.preserved.data $(obj-y) Loading arch/s390/boot/uv.c +20 −0 Original line number Diff line number Diff line Loading @@ -3,7 +3,13 @@ #include <asm/facility.h> #include <asm/sections.h> /* will be used in arch/s390/kernel/uv.c */ #ifdef CONFIG_PROTECTED_VIRTUALIZATION_GUEST int __bootdata_preserved(prot_virt_guest); #endif #if IS_ENABLED(CONFIG_KVM) struct uv_info __bootdata_preserved(uv_info); #endif void uv_query_info(void) { Loading @@ -19,7 +25,21 @@ void uv_query_info(void) if (uv_call(0, (uint64_t)&uvcb) && uvcb.header.rc != 0x100) return; if (IS_ENABLED(CONFIG_KVM)) { memcpy(uv_info.inst_calls_list, uvcb.inst_calls_list, sizeof(uv_info.inst_calls_list)); uv_info.uv_base_stor_len = uvcb.uv_base_stor_len; uv_info.guest_base_stor_len = uvcb.conf_base_phys_stor_len; uv_info.guest_virt_base_stor_len = uvcb.conf_base_virt_stor_len; uv_info.guest_virt_var_stor_len = uvcb.conf_virt_var_stor_len; uv_info.guest_cpu_stor_len = uvcb.cpu_stor_len; uv_info.max_sec_stor_addr = ALIGN(uvcb.max_guest_stor_addr, PAGE_SIZE); uv_info.max_num_sec_conf = uvcb.max_num_sec_conf; uv_info.max_guest_cpus = uvcb.max_guest_cpus; } #ifdef CONFIG_PROTECTED_VIRTUALIZATION_GUEST if (test_bit_inv(BIT_UVC_CMD_SET_SHARED_ACCESS, (unsigned long *)uvcb.inst_calls_list) && test_bit_inv(BIT_UVC_CMD_REMOVE_SHARED_ACCESS, (unsigned long *)uvcb.inst_calls_list)) prot_virt_guest = 1; #endif } arch/s390/include/asm/gmap.h +4 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ #ifndef _ASM_S390_GMAP_H #define _ASM_S390_GMAP_H #include <linux/radix-tree.h> #include <linux/refcount.h> /* Generic bits for GMAP notification on DAT table entry changes. */ Loading @@ -31,6 +32,7 @@ * @table: pointer to the page directory * @asce: address space control element for gmap page table * @pfault_enabled: defines if pfaults are applicable for the guest * @guest_handle: protected virtual machine handle for the ultravisor * @host_to_rmap: radix tree with gmap_rmap lists * @children: list of shadow gmap structures * @pt_list: list of all page tables used in the shadow guest address space Loading @@ -54,6 +56,8 @@ struct gmap { unsigned long asce_end; void *private; bool pfault_enabled; /* only set for protected virtual machines */ unsigned long guest_handle; /* Additional data for shadow guest address spaces */ struct radix_tree_root host_to_rmap; struct list_head children; Loading arch/s390/include/asm/mmu.h +2 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ typedef struct { unsigned long asce; unsigned long asce_limit; unsigned long vdso_base; /* The mmu context belongs to a secure guest. */ atomic_t is_protected; /* * The following bitfields need a down_write on the mm * semaphore when they are written to. As they are only Loading Loading
Documentation/admin-guide/kernel-parameters.txt +5 −0 Original line number Diff line number Diff line Loading @@ -3795,6 +3795,11 @@ before loading. See Documentation/admin-guide/blockdev/ramdisk.rst. prot_virt= [S390] enable hosting protected virtual machines isolated from the hypervisor (if hardware supports that). Format: <bool> psi= [KNL] Enable or disable pressure stall information tracking. Format: <bool> Loading
arch/s390/boot/Makefile +1 −1 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ CFLAGS_sclp_early_core.o += -I$(srctree)/drivers/s390/char obj-y := head.o als.o startup.o mem_detect.o ipl_parm.o ipl_report.o obj-y += string.o ebcdic.o sclp_early_core.o mem.o ipl_vmparm.o cmdline.o obj-y += version.o pgm_check_info.o ctype.o text_dma.o obj-$(CONFIG_PROTECTED_VIRTUALIZATION_GUEST) += uv.o obj-$(findstring y, $(CONFIG_PROTECTED_VIRTUALIZATION_GUEST) $(CONFIG_PGSTE)) += uv.o obj-$(CONFIG_RELOCATABLE) += machine_kexec_reloc.o obj-$(CONFIG_RANDOMIZE_BASE) += kaslr.o targets := bzImage startup.a section_cmp.boot.data section_cmp.boot.preserved.data $(obj-y) Loading
arch/s390/boot/uv.c +20 −0 Original line number Diff line number Diff line Loading @@ -3,7 +3,13 @@ #include <asm/facility.h> #include <asm/sections.h> /* will be used in arch/s390/kernel/uv.c */ #ifdef CONFIG_PROTECTED_VIRTUALIZATION_GUEST int __bootdata_preserved(prot_virt_guest); #endif #if IS_ENABLED(CONFIG_KVM) struct uv_info __bootdata_preserved(uv_info); #endif void uv_query_info(void) { Loading @@ -19,7 +25,21 @@ void uv_query_info(void) if (uv_call(0, (uint64_t)&uvcb) && uvcb.header.rc != 0x100) return; if (IS_ENABLED(CONFIG_KVM)) { memcpy(uv_info.inst_calls_list, uvcb.inst_calls_list, sizeof(uv_info.inst_calls_list)); uv_info.uv_base_stor_len = uvcb.uv_base_stor_len; uv_info.guest_base_stor_len = uvcb.conf_base_phys_stor_len; uv_info.guest_virt_base_stor_len = uvcb.conf_base_virt_stor_len; uv_info.guest_virt_var_stor_len = uvcb.conf_virt_var_stor_len; uv_info.guest_cpu_stor_len = uvcb.cpu_stor_len; uv_info.max_sec_stor_addr = ALIGN(uvcb.max_guest_stor_addr, PAGE_SIZE); uv_info.max_num_sec_conf = uvcb.max_num_sec_conf; uv_info.max_guest_cpus = uvcb.max_guest_cpus; } #ifdef CONFIG_PROTECTED_VIRTUALIZATION_GUEST if (test_bit_inv(BIT_UVC_CMD_SET_SHARED_ACCESS, (unsigned long *)uvcb.inst_calls_list) && test_bit_inv(BIT_UVC_CMD_REMOVE_SHARED_ACCESS, (unsigned long *)uvcb.inst_calls_list)) prot_virt_guest = 1; #endif }
arch/s390/include/asm/gmap.h +4 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ #ifndef _ASM_S390_GMAP_H #define _ASM_S390_GMAP_H #include <linux/radix-tree.h> #include <linux/refcount.h> /* Generic bits for GMAP notification on DAT table entry changes. */ Loading @@ -31,6 +32,7 @@ * @table: pointer to the page directory * @asce: address space control element for gmap page table * @pfault_enabled: defines if pfaults are applicable for the guest * @guest_handle: protected virtual machine handle for the ultravisor * @host_to_rmap: radix tree with gmap_rmap lists * @children: list of shadow gmap structures * @pt_list: list of all page tables used in the shadow guest address space Loading @@ -54,6 +56,8 @@ struct gmap { unsigned long asce_end; void *private; bool pfault_enabled; /* only set for protected virtual machines */ unsigned long guest_handle; /* Additional data for shadow guest address spaces */ struct radix_tree_root host_to_rmap; struct list_head children; Loading
arch/s390/include/asm/mmu.h +2 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ typedef struct { unsigned long asce; unsigned long asce_limit; unsigned long vdso_base; /* The mmu context belongs to a secure guest. */ atomic_t is_protected; /* * The following bitfields need a down_write on the mm * semaphore when they are written to. As they are only Loading