From: Heiko Carstens <hca@linux.ibm.com>
To: Alexander Gordeev <agordeev@linux.ibm.com>,
Sven Schnelle <svens@linux.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>,
Christian Borntraeger <borntraeger@linux.ibm.com>,
Niklas Schnelle <schnelle@linux.ibm.com>,
Matthew Rosato <mjrosato@linux.ibm.com>,
Gerald Schaefer <gerald.schaefer@linux.ibm.com>,
Vineeth Vijayan <vneethv@linux.ibm.com>,
Peter Oberparleiter <oberpar@linux.ibm.com>,
Harald Freudenberger <freude@linux.ibm.com>,
Holger Dengler <dengler@linux.ibm.com>,
Stefan Haberland <sth@linux.ibm.com>,
Jan Hoeppner <hoeppner@linux.ibm.com>,
Ilya Leoshkevich <iii@linux.ibm.com>,
Janosch Frank <frankja@linux.ibm.com>,
Claudio Imbrenda <imbrenda@linux.ibm.com>
Cc: linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org
Subject: [PATCH 06/32] s390/tools: Generate bitmap of nullified program checks
Date: Thu, 1 Oct 2026 12:32:21 +0200 [thread overview]
Message-ID: <20261001103247.1989111-7-hca@linux.ibm.com> (raw)
In-Reply-To: <20261001103247.1989111-1-hca@linux.ibm.com>
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.
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
---
arch/s390/include/asm/Kbuild | 1 +
arch/s390/tools/Makefile | 8 +++++-
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;
}
--
2.53.0
next prev parent reply other threads:[~2026-10-01 10:32 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-01 10:32 [PATCH 00/32] s390: Improve exception table handling and disassembler Heiko Carstens
2026-10-01 10:32 ` [PATCH 01/32] s390/kprobes: Prevent kprobes on instructions with exception table entry Heiko Carstens
2026-10-01 10:32 ` [PATCH 02/32] s390/early: Fix early warning handling Heiko Carstens
2026-10-01 10:32 ` [PATCH 03/32] s390: Clear pt_regs flags field Heiko Carstens
2026-10-01 10:32 ` [PATCH 04/32] s390/bug: Indicate modified PSW in disassembly Heiko Carstens
2026-10-01 10:32 ` [PATCH 05/32] s390/tools: Rename gen_facilities to gen_bitmaps Heiko Carstens
2026-10-01 10:32 ` Heiko Carstens [this message]
2026-10-01 10:32 ` [PATCH 07/32] s390/traps: Handle nullifying program checks in get_trap_ip() Heiko Carstens
2026-10-01 10:32 ` [PATCH 08/32] s390/dis: Improve show_code() output Heiko Carstens
2026-10-01 10:32 ` [PATCH 09/32] s390/extable: Rework exception handling logic Heiko Carstens
2026-10-01 10:32 ` [PATCH 10/32] s390/diag: Convert amode31 exception tables to EX_TABLE_INSN Heiko Carstens
2026-10-01 10:32 ` [PATCH 11/32] s390/uaccess: Convert inline assembly " Heiko Carstens
2026-10-01 10:32 ` [PATCH 12/32] s390/lib/uaccess: " Heiko Carstens
2026-10-01 10:32 ` [PATCH 13/32] s390/futex: " Heiko Carstens
2026-10-01 10:32 ` [PATCH 14/32] s390/diag: " Heiko Carstens
2026-10-01 10:32 ` [PATCH 15/32] s390/mm/pfault: " Heiko Carstens
2026-10-01 10:32 ` [PATCH 16/32] s390/cpu_mf: " Heiko Carstens
2026-10-01 10:32 ` [PATCH 17/32] s390/cert_store: " Heiko Carstens
2026-10-01 10:32 ` [PATCH 18/32] s390/ipl: " Heiko Carstens
2026-10-01 10:32 ` [PATCH 19/32] s390/hypfs: " Heiko Carstens
2026-10-01 10:32 ` [PATCH 20/32] s390/ap: " Heiko Carstens
2026-10-01 10:32 ` [PATCH 21/32] s390/fpu: " Heiko Carstens
2026-10-01 10:32 ` [PATCH 22/32] s390/traps: " Heiko Carstens
2026-10-01 10:32 ` [PATCH 23/32] s390/word-at-a-time: " Heiko Carstens
2026-10-01 10:32 ` [PATCH 24/32] s390/kvm: " Heiko Carstens
2026-10-01 10:32 ` [PATCH 25/32] s390/pci: " Heiko Carstens
2026-10-01 10:32 ` [PATCH 26/32] s390/boot: " Heiko Carstens
2026-10-01 10:32 ` [PATCH 27/32] s390/cio: " Heiko Carstens
2026-10-01 10:32 ` [PATCH 28/32] s390/dasd: " Heiko Carstens
2026-10-01 10:32 ` [PATCH 29/32] s390/diag_ftp: " Heiko Carstens
2026-10-01 10:32 ` [PATCH 30/32] s390/sclp: " Heiko Carstens
2026-10-01 10:32 ` [PATCH 31/32] s390/bpf: Simplify exception table entry handling Heiko Carstens
2026-10-01 10:32 ` [PATCH 32/32] s390/extable: Remove EX_TABLE macros and fallback extable search Heiko Carstens
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261001103247.1989111-7-hca@linux.ibm.com \
--to=hca@linux.ibm.com \
--cc=agordeev@linux.ibm.com \
--cc=borntraeger@linux.ibm.com \
--cc=dengler@linux.ibm.com \
--cc=frankja@linux.ibm.com \
--cc=freude@linux.ibm.com \
--cc=gerald.schaefer@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=hoeppner@linux.ibm.com \
--cc=iii@linux.ibm.com \
--cc=imbrenda@linux.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=mjrosato@linux.ibm.com \
--cc=oberpar@linux.ibm.com \
--cc=schnelle@linux.ibm.com \
--cc=sth@linux.ibm.com \
--cc=svens@linux.ibm.com \
--cc=vneethv@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®