projects
/
linux-2.6-microblaze.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge tag 'defconfig-5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
[linux-2.6-microblaze.git]
/
arch
/
s390
/
boot
/
uv.c
diff --git
a/arch/s390/boot/uv.c
b/arch/s390/boot/uv.c
index
f6b0c4f
..
e6be155
100644
(file)
--- a/
arch/s390/boot/uv.c
+++ b/
arch/s390/boot/uv.c
@@
-1,8
+1,12
@@
// SPDX-License-Identifier: GPL-2.0
#include <asm/uv.h>
// SPDX-License-Identifier: GPL-2.0
#include <asm/uv.h>
+#include <asm/boot_data.h>
#include <asm/facility.h>
#include <asm/sections.h>
#include <asm/facility.h>
#include <asm/sections.h>
+#include "boot.h"
+#include "uv.h"
+
/* will be used in arch/s390/kernel/uv.c */
#ifdef CONFIG_PROTECTED_VIRTUALIZATION_GUEST
int __bootdata_preserved(prot_virt_guest);
/* will be used in arch/s390/kernel/uv.c */
#ifdef CONFIG_PROTECTED_VIRTUALIZATION_GUEST
int __bootdata_preserved(prot_virt_guest);
@@
-47,26
+51,34
@@
void uv_query_info(void)
}
#if IS_ENABLED(CONFIG_KVM)
}
#if IS_ENABLED(CONFIG_KVM)
-
static bool has_uv_sec_stor_limit(void
)
+
void adjust_to_uv_max(unsigned long *vmax
)
{
{
- /*
- * keep these conditions in line with setup_uv()
- */
- if (!is_prot_virt_host())
- return false;
+ if (is_prot_virt_host() && uv_info.max_sec_stor_addr)
+ *vmax = min_t(unsigned long, *vmax, uv_info.max_sec_stor_addr);
+}
+static int is_prot_virt_host_capable(void)
+{
+ /* disable if no prot_virt=1 given on command-line */
+ if (!is_prot_virt_host())
+ return 0;
+ /* disable if protected guest virtualization is enabled */
if (is_prot_virt_guest())
if (is_prot_virt_guest())
- return
false
;
-
+ return
0
;
+ /* disable if no hardware support */
if (!test_facility(158))
if (!test_facility(158))
- return false;
-
- return !!uv_info.max_sec_stor_addr;
+ return 0;
+ /* disable if kdump */
+ if (oldmem_data.start)
+ return 0;
+ /* disable if stand-alone dump */
+ if (ipl_block_valid && is_ipl_block_dump())
+ return 0;
+ return 1;
}
}
-void
adjust_to_uv_max(unsigned long *vmax
)
+void
sanitize_prot_virt_host(void
)
{
{
- if (has_uv_sec_stor_limit())
- *vmax = min_t(unsigned long, *vmax, uv_info.max_sec_stor_addr);
+ prot_virt_host = is_prot_virt_host_capable();
}
#endif
}
#endif