diff options
| author | Heiko Carstens <hca@linux.ibm.com> | 2026-10-01 12:32:21 +0200 |
|---|---|---|
| committer | Heiko Carstens <hca@linux.ibm.com> | 2026-10-13 17:04:54 +0200 |
| commit | 319ccf083b9942abdb69ec6749a3cce08ebc62bf (patch) | |
| tree | d4da4a7d8fa775786fb2090b2006dee00260c809 /arch | |
| parent | f9ef2f6c877a9faef8528058eb62fcefde83ed9a (diff) | |
s390/tools: Generate bitmap of nullified program checks
Add PGM_CHECKS_NULLIFIED bitmap to gen_bitmaps and add a --pgmcheck
command line option to generate the pgmcheck-defs.h header file. The
bitmap specifies which program checks are nullified, and will be used
with future changes.
Change gen_bitmaps.c so it can create bitmaps with different bit
numbering: MSB0 bit numbering like before (most significant bit is
bit 0), and LSB0 bit numbering (least significant bit is bit 0),
which is used for the new bitmap.
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/s390/include/asm/Kbuild | 1 | ||||
| -rw-r--r-- | arch/s390/tools/Makefile | 8 | ||||
| -rw-r--r-- | arch/s390/tools/gen_bitmaps.c | 54 |
3 files changed, 59 insertions, 4 deletions
diff --git a/arch/s390/include/asm/Kbuild b/arch/s390/include/asm/Kbuild index 0c1fc47c3ba0..d13dd7e3dc01 100644 --- a/arch/s390/include/asm/Kbuild +++ b/arch/s390/include/asm/Kbuild @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 generated-y += dis-defs.h generated-y += facility-defs.h +generated-y += pgmcheck-defs.h generated-y += syscall_table.h generated-y += unistd_nr.h diff --git a/arch/s390/tools/Makefile b/arch/s390/tools/Makefile index ac267bb46550..ba1e42d005e7 100644 --- a/arch/s390/tools/Makefile +++ b/arch/s390/tools/Makefile @@ -4,7 +4,9 @@ # kapi := arch/$(ARCH)/include/generated/asm -kapi-hdrs-y := $(kapi)/facility-defs.h $(kapi)/dis-defs.h +kapi-hdrs-y := $(kapi)/dis-defs.h +kapi-hdrs-y += $(kapi)/facility-defs.h +kapi-hdrs-y += $(kapi)/pgmcheck-defs.h PHONY += kapi @@ -16,6 +18,7 @@ hostprogs += gen_opcode_table HOSTCFLAGS_gen_bitmaps.o += $(LINUXINCLUDE) filechk_facility-defs.h = $(obj)/gen_bitmaps --facility +filechk_pgmcheck-defs.h = $(obj)/gen_bitmaps --pgmcheck filechk_dis-defs.h = \ $(obj)/gen_opcode_table < $(srctree)/arch/$(ARCH)/tools/opcodes.txt @@ -23,6 +26,9 @@ filechk_dis-defs.h = \ $(kapi)/facility-defs.h: $(obj)/gen_bitmaps FORCE $(call filechk,facility-defs.h) +$(kapi)/pgmcheck-defs.h: $(obj)/gen_bitmaps FORCE + $(call filechk,pgmcheck-defs.h) + $(kapi)/dis-defs.h: $(obj)/gen_opcode_table FORCE $(call filechk,dis-defs.h) diff --git a/arch/s390/tools/gen_bitmaps.c b/arch/s390/tools/gen_bitmaps.c index 4bc5f19dd405..2e5dc491b19e 100644 --- a/arch/s390/tools/gen_bitmaps.c +++ b/arch/s390/tools/gen_bitmaps.c @@ -17,6 +17,8 @@ struct bitmap_def { char *name; int *bits; + int inverted; + int maxbit; }; static struct bitmap_def facility_defs[] = { @@ -27,6 +29,7 @@ static struct bitmap_def facility_defs[] = { * -march=<machine>. */ .name = "FACILITIES_ALS", + .inverted = 1, .bits = (int[]){ 0, /* N3 instructions */ 1, /* z/Arch mode installed */ @@ -71,6 +74,7 @@ static struct bitmap_def facility_defs[] = { * guest facilities supported by KVM. */ .name = "FACILITIES_KVM", + .inverted = 1, .bits = (int[]){ 0, /* N3 instructions */ 1, /* z/Arch mode installed */ @@ -116,6 +120,7 @@ static struct bitmap_def facility_defs[] = { */ .name = "FACILITIES_KVM_CPUMODEL", + .inverted = 1, .bits = (int[]){ 12, /* AP Query Configuration Information */ 15, /* AP Facilities Test */ @@ -125,17 +130,56 @@ static struct bitmap_def facility_defs[] = { }, }; +static struct bitmap_def pgm_check_defs[] = { + { + .name = "PGM_CHECKS_NULLIFIED", + .inverted = 0, + .maxbit = 127, + .bits = (int[]){ + 0x10, /* Segment Translation */ + 0x11, /* Page Translation */ + 0x16, /* Trace Table */ + 0x20, /* AFX Translation */ + 0x21, /* ASX Translation */ + 0x22, /* LX Translation */ + 0x23, /* EX Translation */ + 0x24, /* Primary Authority */ + 0x25, /* Secondary Authority */ + 0x26, /* LFX Translation */ + 0x27, /* LSX Translation */ + 0x29, /* ALEN Translation */ + 0x2a, /* ALE Sequence */ + 0x2b, /* ASTE Validity */ + 0x2c, /* ASTE Sequence */ + 0x2d, /* Extended Authority */ + 0x2e, /* LSTE Sequence */ + 0x2f, /* ASTE Instance */ + 0x30, /* Stack Full */ + 0x31, /* Stack Empty */ + 0x32, /* Stack Specification */ + 0x33, /* Stack Type */ + 0x34, /* Stack Operation */ + 0x38, /* ASCE Type */ + 0x39, /* Region First Translation */ + 0x3a, /* Region Second Translation */ + 0x3b, /* Region Third Translation */ + 0x3d, /* Secure Storage Access */ + -1 /* END */ + } + }, +}; + static void print_bitmap(struct bitmap_def *def) { unsigned int high, bit, dword, i; unsigned long long *array; - array = calloc(1, 8); + high = def->maxbit ? def->maxbit / 64 : 0; + array = calloc(high + 1, 8); if (!array) exit(EXIT_FAILURE); - high = 0; for (i = 0; def->bits[i] != -1; i++) { - bit = 63 - (def->bits[i] & 63); + bit = def->inverted ? 63 - (def->bits[i] & 63) : (def->bits[i] & 63); dword = def->bits[i] / 64; if (dword > high) { array = realloc(array, (dword + 1) * 8); @@ -171,6 +215,7 @@ static void print_header(const char *guard, struct bitmap_def *defs, size_t num) static const struct option long_options[] = { { "facility", no_argument, NULL, 'f' }, + { "pgmcheck", no_argument, NULL, 'p' }, { NULL, 0, NULL, 0 } }; @@ -185,6 +230,9 @@ int main(int argc, char **argv) case 'f': print_header("FACILITY", facility_defs, ARRAY_SIZE(facility_defs)); break; + case 'p': + print_header("PGMCHECK", pgm_check_defs, ARRAY_SIZE(pgm_check_defs)); + break; default: return 1; } |
