Commit 6d85dac2 authored by Vasily Gorbik's avatar Vasily Gorbik Committed by Martin Schwidefsky

s390: warn about clearing als implied facilities

Add a warning about removing required architecture level set facilities
via "facilities=" command line option.
Reviewed-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent b5e80459
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <asm/facility.h> #include <asm/facility.h>
#include <asm/lowcore.h> #include <asm/lowcore.h>
#include <asm/sclp.h> #include <asm/sclp.h>
#include "boot.h"
/* /*
* The code within this file will be called very early. It may _not_ * The code within this file will be called very early. It may _not_
...@@ -58,7 +59,7 @@ static void u16_to_decimal(char *str, u16 val) ...@@ -58,7 +59,7 @@ static void u16_to_decimal(char *str, u16 val)
*str = '\0'; *str = '\0';
} }
static void print_missing_facilities(void) void print_missing_facilities(void)
{ {
static char als_str[80] = "Missing facilities: "; static char als_str[80] = "Missing facilities: ";
unsigned long val; unsigned long val;
...@@ -90,7 +91,6 @@ static void print_missing_facilities(void) ...@@ -90,7 +91,6 @@ static void print_missing_facilities(void)
} }
strcat(als_str, "\n"); strcat(als_str, "\n");
sclp_early_printk(als_str); sclp_early_printk(als_str);
sclp_early_printk("See Principles of Operations for facility bits\n");
} }
static void facility_mismatch(void) static void facility_mismatch(void)
...@@ -98,6 +98,7 @@ static void facility_mismatch(void) ...@@ -98,6 +98,7 @@ static void facility_mismatch(void)
sclp_early_printk("The Linux kernel requires more recent processor hardware\n"); sclp_early_printk("The Linux kernel requires more recent processor hardware\n");
print_machine_type(); print_machine_type();
print_missing_facilities(); print_missing_facilities();
sclp_early_printk("See Principles of Operations for facility bits\n");
disabled_wait(0x8badcccc); disabled_wait(0x8badcccc);
} }
......
...@@ -8,5 +8,6 @@ void store_ipl_parmblock(void); ...@@ -8,5 +8,6 @@ void store_ipl_parmblock(void);
void setup_boot_command_line(void); void setup_boot_command_line(void);
void parse_boot_command_line(void); void parse_boot_command_line(void);
void setup_memory_end(void); void setup_memory_end(void);
void print_missing_facilities(void);
#endif /* BOOT_BOOT_H */ #endif /* BOOT_BOOT_H */
// SPDX-License-Identifier: GPL-2.0 // SPDX-License-Identifier: GPL-2.0
#include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/ctype.h> #include <linux/ctype.h>
#include <asm/ebcdic.h> #include <asm/ebcdic.h>
...@@ -152,6 +153,20 @@ static void modify_facility(unsigned long nr, bool clear) ...@@ -152,6 +153,20 @@ static void modify_facility(unsigned long nr, bool clear)
__set_facility(nr, S390_lowcore.stfle_fac_list); __set_facility(nr, S390_lowcore.stfle_fac_list);
} }
static void check_cleared_facilities(void)
{
unsigned long als[] = { FACILITIES_ALS };
int i;
for (i = 0; i < ARRAY_SIZE(als); i++) {
if ((S390_lowcore.stfle_fac_list[i] & als[i]) != als[i]) {
sclp_early_printk("Warning: The Linux kernel requires facilities cleared via command line option\n");
print_missing_facilities();
break;
}
}
}
static void modify_fac_list(char *str) static void modify_fac_list(char *str)
{ {
unsigned long val, endval; unsigned long val, endval;
...@@ -185,6 +200,7 @@ static void modify_fac_list(char *str) ...@@ -185,6 +200,7 @@ static void modify_fac_list(char *str)
break; break;
str++; str++;
} }
check_cleared_facilities();
} }
static char command_line_buf[COMMAND_LINE_SIZE] __section(.data); static char command_line_buf[COMMAND_LINE_SIZE] __section(.data);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment