On Fri, 7 Feb 2020 06:39:26 -0500 Christian Borntraeger <borntraeger@xxxxxxxxxx> wrote: > From: Vasily Gorbik <gor@xxxxxxxxxxxxx> > > Add "prot_virt" command line option which controls if the kernel > protected VMs support is enabled at early boot time. This has to be > done early, because it needs large amounts of memory and will disable > some features like STP time sync for the lpar. > > Extend ultravisor info definitions and expose it via uv_info struct > filled in during startup. > > Signed-off-by: Vasily Gorbik <gor@xxxxxxxxxxxxx> > [borntraeger@xxxxxxxxxx: patch merging, splitting, fixing] > Signed-off-by: Christian Borntraeger <borntraeger@xxxxxxxxxx> > --- > .../admin-guide/kernel-parameters.txt | 5 ++ > arch/s390/boot/Makefile | 2 +- > arch/s390/boot/uv.c | 21 +++++++- > arch/s390/include/asm/uv.h | 46 +++++++++++++++-- > arch/s390/kernel/Makefile | 1 + > arch/s390/kernel/setup.c | 4 -- > arch/s390/kernel/uv.c | 49 +++++++++++++++++++ > 7 files changed, 119 insertions(+), 9 deletions(-) > create mode 100644 arch/s390/kernel/uv.c (...) > diff --git a/arch/s390/boot/Makefile b/arch/s390/boot/Makefile > index e2c47d3a1c89..30f1811540c5 100644 > --- a/arch/s390/boot/Makefile > +++ b/arch/s390/boot/Makefile > @@ -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 I'm wondering why you're checking CONFIG_PGSTE here... > 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) > diff --git a/arch/s390/boot/uv.c b/arch/s390/boot/uv.c > index ed007f4a6444..af9e1cc93c68 100644 > --- a/arch/s390/boot/uv.c > +++ b/arch/s390/boot/uv.c > @@ -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) ...and CONFIG_KVM here and below? > +struct uv_info __bootdata_preserved(uv_info); > +#endif > > void uv_query_info(void) > { (...) > +static int __init prot_virt_setup(char *val) > +{ > + bool enabled; > + int rc; > + > + rc = kstrtobool(val, &enabled); > + if (!rc && enabled) > + prot_virt_host = 1; > + > + if (is_prot_virt_guest() && prot_virt_host) { > + prot_virt_host = 0; > + pr_info("Running as protected virtualization guest."); > + } > + > + if (prot_virt_host && !test_facility(158)) { > + prot_virt_host = 0; > + pr_info("The ultravisor call facility is not available."); > + } What about prefixing these two with 'prot_virt:'? It seems the name is settled now? > + > + return rc; > +} > +early_param("prot_virt", prot_virt_setup); > +#endif