From f8333de27933b201b73a6c9830afbf1b48ac5dbe Mon Sep 17 00:00:00 2001 From: Janis Schoetterl-Glausch Date: Thu, 30 Jun 2022 11:43:40 +0200 Subject: [PATCH 01/18] target/s390x/tcg: SPX: check validity of new prefix According to the architecture, SET PREFIX must try to access the new prefix area and recognize an addressing exception if the area is not accessible. For qemu this check prevents a crash in cpu_map_lowcore after an inaccessible prefix area has been set. Signed-off-by: Janis Schoetterl-Glausch Reviewed-by: David Hildenbrand Message-Id: <20220630094340.3646279-1-scgl@linux.ibm.com> Signed-off-by: Thomas Huth --- target/s390x/tcg/misc_helper.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/target/s390x/tcg/misc_helper.c b/target/s390x/tcg/misc_helper.c index aab9c47747..10dadb002a 100644 --- a/target/s390x/tcg/misc_helper.c +++ b/target/s390x/tcg/misc_helper.c @@ -158,6 +158,13 @@ void HELPER(spx)(CPUS390XState *env, uint64_t a1) if (prefix == old_prefix) { return; } + /* + * Since prefix got aligned to 8k and memory increments are a multiple of + * 8k checking the first page is sufficient + */ + if (!mmu_absolute_addr_valid(prefix, true)) { + tcg_s390_program_interrupt(env, PGM_ADDRESSING, GETPC()); + } env->psa = prefix; HELPER_LOG("prefix: %#x\n", prefix); From 2ba3cc47672a67a09ef64c5af2eca07fbf4cd21f Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Mon, 4 Jul 2022 13:18:52 +0200 Subject: [PATCH 02/18] pc-bios/s390-ccw: Add a proper prototype for main() Older versions of Clang complain if there is no prototype for main(). Add one, and while we're at it, make sure that we use the same type for main.c and netmain.c - since the return value does not matter, declare the return type of main() as "void". Message-Id: <20220704111903.62400-2-thuth@redhat.com> Reviewed-by: Cornelia Huck Reviewed-by: Eric Farman Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/main.c | 3 +-- pc-bios/s390-ccw/s390-ccw.h | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index 5d2b7ba94d..835341457d 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -281,7 +281,7 @@ static void probe_boot_device(void) sclp_print("Could not find a suitable boot device (none specified)\n"); } -int main(void) +void main(void) { sclp_setup(); css_setup(); @@ -294,5 +294,4 @@ int main(void) } panic("Failed to load OS from hard disk\n"); - return 0; /* make compiler happy */ } diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h index 79db69ff54..b88e0550ab 100644 --- a/pc-bios/s390-ccw/s390-ccw.h +++ b/pc-bios/s390-ccw/s390-ccw.h @@ -57,6 +57,7 @@ void write_subsystem_identification(void); void write_iplb_location(void); extern char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE))); unsigned int get_loadparm_index(void); +void main(void); /* sclp.c */ void sclp_print(const char *string); From 1f2c2ee48e87ea743f8e23cc7569dd26c4cf9623 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Mon, 4 Jul 2022 13:18:53 +0200 Subject: [PATCH 03/18] pc-bios/s390-ccw/virtio: Introduce a macro for the DASD block size Use VIRTIO_DASD_DEFAULT_BLOCK_SIZE instead of the magic value 4096. Message-Id: <20220704111903.62400-3-thuth@redhat.com> Reviewed-by: Eric Farman Reviewed-by: Cornelia Huck Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/virtio-blkdev.c | 2 +- pc-bios/s390-ccw/virtio.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pc-bios/s390-ccw/virtio-blkdev.c b/pc-bios/s390-ccw/virtio-blkdev.c index 7d35050292..6483307630 100644 --- a/pc-bios/s390-ccw/virtio-blkdev.c +++ b/pc-bios/s390-ccw/virtio-blkdev.c @@ -155,7 +155,7 @@ void virtio_assume_eckd(void) vdev->config.blk.physical_block_exp = 0; switch (vdev->senseid.cu_model) { case VIRTIO_ID_BLOCK: - vdev->config.blk.blk_size = 4096; + vdev->config.blk.blk_size = VIRTIO_DASD_DEFAULT_BLOCK_SIZE; break; case VIRTIO_ID_SCSI: vdev->config.blk.blk_size = vdev->scsi_block_size; diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h index 19fceb6495..9e410bde6f 100644 --- a/pc-bios/s390-ccw/virtio.h +++ b/pc-bios/s390-ccw/virtio.h @@ -198,6 +198,7 @@ extern int virtio_read_many(ulong sector, void *load_addr, int sec_num); #define VIRTIO_SECTOR_SIZE 512 #define VIRTIO_ISO_BLOCK_SIZE 2048 #define VIRTIO_SCSI_BLOCK_SIZE 512 +#define VIRTIO_DASD_DEFAULT_BLOCK_SIZE 4096 static inline ulong virtio_sector_adjust(ulong sector) { From 422865f6672ee1482b98d18321b55c1ecfb06c82 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Mon, 4 Jul 2022 13:18:54 +0200 Subject: [PATCH 04/18] pc-bios/s390-ccw/bootmap: Improve the guessing logic in zipl_load_vblk() The logic of trying an final ISO or ECKD boot on virtio-block devices is very weird: Since the geometry hardly ever matches in virtio_disk_is_scsi(), virtio_blk_setup_device() always sets a "guessed" disk geometry via virtio_assume_scsi() (which is certainly also wrong in a lot of cases). zipl_load_vblk() then sees that there's been a "virtio_guessed_disk_nature" and tries to fix up the geometry again via virtio_assume_iso9660() before always trying to do ipl_iso_el_torito(). That's a very brain-twisting way of attempting to boot from ISO images, which won't work anymore after the following patches that will clean up the virtio_assume_scsi() mess (and thus get rid of the "virtio_guessed_disk_nature" here). Let's try a better approach instead: ISO files always have a magic string "CD001" at offset 0x8001 (see e.g. the ECMA-119 specification) which we can use to decide whether we should try to boot in ISO 9660 mode (which we should also try if we see a sector size of 2048). And if we were not able to boot in ISO mode here, the final boot attempt before panicking is to boot in ECKD mode. Since this is our last boot attempt anyway, simply always assume the ECKD geometry here (if the sector size was not 4096 yet), so that we also do not depend on the guessed disk geometry from virtio_blk_setup_device() here anymore. Message-Id: <20220704111903.62400-4-thuth@redhat.com> Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/bootmap.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c index 56411ab3b6..994e59c0b0 100644 --- a/pc-bios/s390-ccw/bootmap.c +++ b/pc-bios/s390-ccw/bootmap.c @@ -780,18 +780,37 @@ static void ipl_iso_el_torito(void) } } +/** + * Detect whether we're trying to boot from an .ISO image. + * These always have a signature string "CD001" at offset 0x8001. + */ +static bool has_iso_signature(void) +{ + int blksize = virtio_get_block_size(); + + if (!blksize || virtio_read(0x8000 / blksize, sec)) { + return false; + } + + return !memcmp("CD001", &sec[1], 5); +} + /*********************************************************************** * Bus specific IPL sequences */ static void zipl_load_vblk(void) { - if (virtio_guessed_disk_nature()) { - virtio_assume_iso9660(); - } - ipl_iso_el_torito(); + int blksize = virtio_get_block_size(); - if (virtio_guessed_disk_nature()) { + if (blksize == VIRTIO_ISO_BLOCK_SIZE || has_iso_signature()) { + if (blksize != VIRTIO_ISO_BLOCK_SIZE) { + virtio_assume_iso9660(); + } + ipl_iso_el_torito(); + } + + if (blksize != VIRTIO_DASD_DEFAULT_BLOCK_SIZE) { sclp_print("Using guessed DASD geometry.\n"); virtio_assume_eckd(); } From bbf615f7b707f009ef8e757d170902ad33b90644 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Mon, 4 Jul 2022 13:18:55 +0200 Subject: [PATCH 05/18] pc-bios/s390-ccw/virtio-blkdev: Simplify/fix virtio_ipl_disk_is_valid() The s390-ccw bios fails to boot if the boot disk is a virtio-blk disk with a sector size of 4096. For example: dasdfmt -b 4096 -d cdl -y -p -M quick /dev/dasdX fdasd -a /dev/dasdX install a guest onto /dev/dasdX1 using virtio-blk qemu-system-s390x -nographic -hda /dev/dasdX1 The bios then bails out with: ! Cannot read block 0 ! Looking at virtio_ipl_disk_is_valid() and especially the function virtio_disk_is_scsi(), it does not really make sense that we expect only such a limited disk geometry (like a block size of 512) for our boot disks. Let's relax the check and allow everything that remotely looks like a sane disk. Message-Id: <20220704111903.62400-5-thuth@redhat.com> Reviewed-by: Eric Farman Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/virtio-blkdev.c | 49 +++++++------------------------- pc-bios/s390-ccw/virtio.h | 2 -- 2 files changed, 11 insertions(+), 40 deletions(-) diff --git a/pc-bios/s390-ccw/virtio-blkdev.c b/pc-bios/s390-ccw/virtio-blkdev.c index 6483307630..7e13155589 100644 --- a/pc-bios/s390-ccw/virtio-blkdev.c +++ b/pc-bios/s390-ccw/virtio-blkdev.c @@ -166,46 +166,19 @@ void virtio_assume_eckd(void) virtio_eckd_sectors_for_block_size(vdev->config.blk.blk_size); } -bool virtio_disk_is_scsi(void) -{ - VDev *vdev = virtio_get_device(); - - if (vdev->guessed_disk_nature == VIRTIO_GDN_SCSI) { - return true; - } - switch (vdev->senseid.cu_model) { - case VIRTIO_ID_BLOCK: - return (vdev->config.blk.geometry.heads == 255) - && (vdev->config.blk.geometry.sectors == 63) - && (virtio_get_block_size() == VIRTIO_SCSI_BLOCK_SIZE); - case VIRTIO_ID_SCSI: - return true; - } - return false; -} - -bool virtio_disk_is_eckd(void) -{ - VDev *vdev = virtio_get_device(); - const int block_size = virtio_get_block_size(); - - if (vdev->guessed_disk_nature == VIRTIO_GDN_DASD) { - return true; - } - switch (vdev->senseid.cu_model) { - case VIRTIO_ID_BLOCK: - return (vdev->config.blk.geometry.heads == 15) - && (vdev->config.blk.geometry.sectors == - virtio_eckd_sectors_for_block_size(block_size)); - case VIRTIO_ID_SCSI: - return false; - } - return false; -} - bool virtio_ipl_disk_is_valid(void) { - return virtio_disk_is_scsi() || virtio_disk_is_eckd(); + int blksize = virtio_get_block_size(); + VDev *vdev = virtio_get_device(); + + if (vdev->guessed_disk_nature == VIRTIO_GDN_SCSI || + vdev->guessed_disk_nature == VIRTIO_GDN_DASD) { + return true; + } + + return (vdev->senseid.cu_model == VIRTIO_ID_BLOCK || + vdev->senseid.cu_model == VIRTIO_ID_SCSI) && + blksize >= 512 && blksize <= 4096; } int virtio_get_block_size(void) diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h index 9e410bde6f..241730effe 100644 --- a/pc-bios/s390-ccw/virtio.h +++ b/pc-bios/s390-ccw/virtio.h @@ -186,8 +186,6 @@ void virtio_assume_scsi(void); void virtio_assume_eckd(void); void virtio_assume_iso9660(void); -extern bool virtio_disk_is_scsi(void); -extern bool virtio_disk_is_eckd(void); extern bool virtio_ipl_disk_is_valid(void); extern int virtio_get_block_size(void); extern uint8_t virtio_get_heads(void); From 5447de2619050a0a4dd480b97f88a9b58da360d1 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Mon, 4 Jul 2022 13:18:56 +0200 Subject: [PATCH 06/18] pc-bios/s390-ccw/virtio-blkdev: Remove virtio_assume_scsi() The virtio_assume_scsi() function is very questionable: First, it is only called for virtio-blk, and not for virtio-scsi, so the naming is already quite confusing. Second, it is called if we detected a "invalid" IPL disk, trying to fix it by blindly setting a sector size of 512. This of course won't work in most cases since disks might have a different sector size for a reason. Thus let's remove this strange function now. The calling code can also be removed completely, since there is another spot in main.c that does "IPL_assert(virtio_ipl_disk_is_valid(), ...)" to make sure that we do not try to IPL from an invalid device. Message-Id: <20220704111903.62400-6-thuth@redhat.com> Reviewed-by: Eric Farman Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/virtio-blkdev.c | 24 ------------------------ pc-bios/s390-ccw/virtio.h | 1 - 2 files changed, 25 deletions(-) diff --git a/pc-bios/s390-ccw/virtio-blkdev.c b/pc-bios/s390-ccw/virtio-blkdev.c index 7e13155589..db1f7f44aa 100644 --- a/pc-bios/s390-ccw/virtio-blkdev.c +++ b/pc-bios/s390-ccw/virtio-blkdev.c @@ -112,23 +112,6 @@ VirtioGDN virtio_guessed_disk_nature(void) return virtio_get_device()->guessed_disk_nature; } -void virtio_assume_scsi(void) -{ - VDev *vdev = virtio_get_device(); - - switch (vdev->senseid.cu_model) { - case VIRTIO_ID_BLOCK: - vdev->guessed_disk_nature = VIRTIO_GDN_SCSI; - vdev->config.blk.blk_size = VIRTIO_SCSI_BLOCK_SIZE; - vdev->config.blk.physical_block_exp = 0; - vdev->blk_factor = 1; - break; - case VIRTIO_ID_SCSI: - vdev->scsi_block_size = VIRTIO_SCSI_BLOCK_SIZE; - break; - } -} - void virtio_assume_iso9660(void) { VDev *vdev = virtio_get_device(); @@ -247,13 +230,6 @@ int virtio_blk_setup_device(SubChannelId schid) switch (vdev->senseid.cu_model) { case VIRTIO_ID_BLOCK: sclp_print("Using virtio-blk.\n"); - if (!virtio_ipl_disk_is_valid()) { - /* make sure all getters but blocksize return 0 for - * invalid IPL disk - */ - memset(&vdev->config.blk, 0, sizeof(vdev->config.blk)); - virtio_assume_scsi(); - } break; case VIRTIO_ID_SCSI: IPL_assert(vdev->config.scsi.sense_size == VIRTIO_SCSI_SENSE_SIZE, diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h index 241730effe..600ba5052b 100644 --- a/pc-bios/s390-ccw/virtio.h +++ b/pc-bios/s390-ccw/virtio.h @@ -182,7 +182,6 @@ enum guessed_disk_nature_type { typedef enum guessed_disk_nature_type VirtioGDN; VirtioGDN virtio_guessed_disk_nature(void); -void virtio_assume_scsi(void); void virtio_assume_eckd(void); void virtio_assume_iso9660(void); From 175aa06a152ef6b58ba9b2e47a1296b024dea70c Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Mon, 4 Jul 2022 13:18:57 +0200 Subject: [PATCH 07/18] pc-bios/s390-ccw/virtio: Set missing status bits while initializing According chapter "3.1.1 Driver Requirements: Device Initialization" of the Virtio specification (v1.1), a driver for a device has to set the ACKNOWLEDGE and DRIVER bits in the status field after resetting the device. The s390-ccw bios skipped these steps so far and seems like QEMU never cared. Anyway, it's better to follow the spec, so let's set these bits now in the right spots, too. Message-Id: <20220704111903.62400-7-thuth@redhat.com> Acked-by: Christian Borntraeger Reviewed-by: Cornelia Huck Reviewed-by: Eric Farman Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/virtio.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c index 5d2c6e3381..4e85a2eb82 100644 --- a/pc-bios/s390-ccw/virtio.c +++ b/pc-bios/s390-ccw/virtio.c @@ -220,7 +220,7 @@ int virtio_run(VDev *vdev, int vqid, VirtioCmd *cmd) void virtio_setup_ccw(VDev *vdev) { int i, rc, cfg_size = 0; - unsigned char status = VIRTIO_CONFIG_S_DRIVER_OK; + uint8_t status; struct VirtioFeatureDesc { uint32_t features; uint8_t index; @@ -234,6 +234,10 @@ void virtio_setup_ccw(VDev *vdev) run_ccw(vdev, CCW_CMD_VDEV_RESET, NULL, 0, false); + status = VIRTIO_CONFIG_S_ACKNOWLEDGE; + rc = run_ccw(vdev, CCW_CMD_WRITE_STATUS, &status, sizeof(status), false); + IPL_assert(rc == 0, "Could not write ACKNOWLEDGE status to host"); + switch (vdev->senseid.cu_model) { case VIRTIO_ID_NET: vdev->nr_vqs = 2; @@ -253,6 +257,11 @@ void virtio_setup_ccw(VDev *vdev) default: panic("Unsupported virtio device\n"); } + + status |= VIRTIO_CONFIG_S_DRIVER; + rc = run_ccw(vdev, CCW_CMD_WRITE_STATUS, &status, sizeof(status), false); + IPL_assert(rc == 0, "Could not write DRIVER status to host"); + IPL_assert( run_ccw(vdev, CCW_CMD_READ_CONF, &vdev->config, cfg_size, false) == 0, "Could not get block device configuration"); @@ -291,9 +300,10 @@ void virtio_setup_ccw(VDev *vdev) run_ccw(vdev, CCW_CMD_SET_VQ, &info, sizeof(info), false) == 0, "Cannot set VQ info"); } - IPL_assert( - run_ccw(vdev, CCW_CMD_WRITE_STATUS, &status, sizeof(status), false) == 0, - "Could not write status to host"); + + status |= VIRTIO_CONFIG_S_DRIVER_OK; + rc = run_ccw(vdev, CCW_CMD_WRITE_STATUS, &status, sizeof(status), false); + IPL_assert(rc == 0, "Could not write DRIVER_OK status to host"); } bool virtio_is_supported(SubChannelId schid) From aa5c69ce99411c4886bcd051f288afc02b6d968d Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Mon, 4 Jul 2022 13:18:58 +0200 Subject: [PATCH 08/18] pc-bios/s390-ccw/virtio: Read device config after feature negotiation Feature negotiation should be done first, since some fields in the config area can depend on the negotiated features and thus should rather be read afterwards. While we're at it, also adjust the error message here a little bit (the code is nowadays used for non-block virtio devices, too). Message-Id: <20220704111903.62400-8-thuth@redhat.com> Reviewed-by: Eric Farman Reviewed-by: Cornelia Huck Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/virtio.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c index 4e85a2eb82..d8c2b52710 100644 --- a/pc-bios/s390-ccw/virtio.c +++ b/pc-bios/s390-ccw/virtio.c @@ -262,10 +262,6 @@ void virtio_setup_ccw(VDev *vdev) rc = run_ccw(vdev, CCW_CMD_WRITE_STATUS, &status, sizeof(status), false); IPL_assert(rc == 0, "Could not write DRIVER status to host"); - IPL_assert( - run_ccw(vdev, CCW_CMD_READ_CONF, &vdev->config, cfg_size, false) == 0, - "Could not get block device configuration"); - /* Feature negotiation */ for (i = 0; i < ARRAY_SIZE(vdev->guest_features); i++) { feats.features = 0; @@ -278,6 +274,9 @@ void virtio_setup_ccw(VDev *vdev) IPL_assert(rc == 0, "Could not set features bits"); } + rc = run_ccw(vdev, CCW_CMD_READ_CONF, &vdev->config, cfg_size, false); + IPL_assert(rc == 0, "Could not get virtio device configuration"); + for (i = 0; i < vdev->nr_vqs; i++) { VqInfo info = { .queue = (unsigned long long) ring_area + (i * VIRTIO_RING_SIZE), From 070824885741f5d2a66626d3c4ecb2773c8e0552 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Mon, 4 Jul 2022 13:18:59 +0200 Subject: [PATCH 09/18] pc-bios/s390-ccw/virtio: Beautify the code for reading virtqueue configuration It looks nicer if we separate the run_ccw() from the IPL_assert() statement, and the error message should talk about "virtio device" instead of "block device", since this code is nowadays used for non-block (i.e. network) devices, too. Message-Id: <20220704111903.62400-9-thuth@redhat.com> Reviewed-by: Cornelia Huck Reviewed-by: Eric Farman Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/virtio.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c index d8c2b52710..f37510f312 100644 --- a/pc-bios/s390-ccw/virtio.c +++ b/pc-bios/s390-ccw/virtio.c @@ -289,9 +289,8 @@ void virtio_setup_ccw(VDev *vdev) .num = 0, }; - IPL_assert( - run_ccw(vdev, CCW_CMD_READ_VQ_CONF, &config, sizeof(config), false) == 0, - "Could not get block device VQ configuration"); + rc = run_ccw(vdev, CCW_CMD_READ_VQ_CONF, &config, sizeof(config), false); + IPL_assert(rc == 0, "Could not get virtio device VQ configuration"); info.num = config.num; vring_init(&vdev->vrings[i], &info); vdev->vrings[i].schid = vdev->schid; From cf30b7c4a9b2c64518be8037c2e6670aacdb00b9 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Mon, 4 Jul 2022 13:19:00 +0200 Subject: [PATCH 10/18] pc-bios/s390-ccw: Split virtio-scsi code from virtio_blk_setup_device() The next patch is going to add more virtio-block specific code to virtio_blk_setup_device(), and if the virtio-scsi code is also in there, this is more cumbersome. And the calling function virtio_setup() in main.c looks at the device type already anyway, so it's more logical to separate the virtio-scsi stuff into a new function in virtio-scsi.c instead. Message-Id: <20220704111903.62400-10-thuth@redhat.com> Reviewed-by: Eric Farman Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/main.c | 24 +++++++++++++++++------- pc-bios/s390-ccw/virtio-blkdev.c | 20 ++------------------ pc-bios/s390-ccw/virtio-scsi.c | 19 ++++++++++++++++++- pc-bios/s390-ccw/virtio-scsi.h | 2 +- 4 files changed, 38 insertions(+), 27 deletions(-) diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index 835341457d..a2def83e82 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -14,6 +14,7 @@ #include "s390-ccw.h" #include "cio.h" #include "virtio.h" +#include "virtio-scsi.h" #include "dasd-ipl.h" char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE))); @@ -218,6 +219,7 @@ static int virtio_setup(void) { VDev *vdev = virtio_get_device(); QemuIplParameters *early_qipl = (QemuIplParameters *)QIPL_ADDRESS; + int ret; memcpy(&qipl, early_qipl, sizeof(QemuIplParameters)); @@ -225,18 +227,26 @@ static int virtio_setup(void) menu_setup(); } - if (virtio_get_device_type() == VIRTIO_ID_NET) { + switch (vdev->senseid.cu_model) { + case VIRTIO_ID_NET: sclp_print("Network boot device detected\n"); vdev->netboot_start_addr = qipl.netboot_start_addr; - } else { - int ret = virtio_blk_setup_device(blk_schid); - if (ret) { - return ret; - } + return 0; + case VIRTIO_ID_BLOCK: + ret = virtio_blk_setup_device(blk_schid); + break; + case VIRTIO_ID_SCSI: + ret = virtio_scsi_setup_device(blk_schid); + break; + default: + panic("\n! No IPL device available !\n"); + } + + if (!ret) { IPL_assert(virtio_ipl_disk_is_valid(), "No valid IPL device detected"); } - return 0; + return ret; } static void ipl_boot_device(void) diff --git a/pc-bios/s390-ccw/virtio-blkdev.c b/pc-bios/s390-ccw/virtio-blkdev.c index db1f7f44aa..c175b66a47 100644 --- a/pc-bios/s390-ccw/virtio-blkdev.c +++ b/pc-bios/s390-ccw/virtio-blkdev.c @@ -222,27 +222,11 @@ uint64_t virtio_get_blocks(void) int virtio_blk_setup_device(SubChannelId schid) { VDev *vdev = virtio_get_device(); - int ret = 0; vdev->schid = schid; virtio_setup_ccw(vdev); - switch (vdev->senseid.cu_model) { - case VIRTIO_ID_BLOCK: - sclp_print("Using virtio-blk.\n"); - break; - case VIRTIO_ID_SCSI: - IPL_assert(vdev->config.scsi.sense_size == VIRTIO_SCSI_SENSE_SIZE, - "Config: sense size mismatch"); - IPL_assert(vdev->config.scsi.cdb_size == VIRTIO_SCSI_CDB_SIZE, - "Config: CDB size mismatch"); + sclp_print("Using virtio-blk.\n"); - sclp_print("Using virtio-scsi.\n"); - ret = virtio_scsi_setup(vdev); - break; - default: - panic("\n! No IPL device available !\n"); - } - - return ret; + return 0; } diff --git a/pc-bios/s390-ccw/virtio-scsi.c b/pc-bios/s390-ccw/virtio-scsi.c index 2c8d0f3097..3b7069270c 100644 --- a/pc-bios/s390-ccw/virtio-scsi.c +++ b/pc-bios/s390-ccw/virtio-scsi.c @@ -329,7 +329,7 @@ static void scsi_parse_capacity_report(void *data, } } -int virtio_scsi_setup(VDev *vdev) +static int virtio_scsi_setup(VDev *vdev) { int retry_test_unit_ready = 3; uint8_t data[256]; @@ -430,3 +430,20 @@ int virtio_scsi_setup(VDev *vdev) return 0; } + +int virtio_scsi_setup_device(SubChannelId schid) +{ + VDev *vdev = virtio_get_device(); + + vdev->schid = schid; + virtio_setup_ccw(vdev); + + IPL_assert(vdev->config.scsi.sense_size == VIRTIO_SCSI_SENSE_SIZE, + "Config: sense size mismatch"); + IPL_assert(vdev->config.scsi.cdb_size == VIRTIO_SCSI_CDB_SIZE, + "Config: CDB size mismatch"); + + sclp_print("Using virtio-scsi.\n"); + + return virtio_scsi_setup(vdev); +} diff --git a/pc-bios/s390-ccw/virtio-scsi.h b/pc-bios/s390-ccw/virtio-scsi.h index 4b14c2c2f9..e6b6cd4815 100644 --- a/pc-bios/s390-ccw/virtio-scsi.h +++ b/pc-bios/s390-ccw/virtio-scsi.h @@ -67,8 +67,8 @@ static inline bool virtio_scsi_response_ok(const VirtioScsiCmdResp *r) return r->response == VIRTIO_SCSI_S_OK && r->status == CDB_STATUS_GOOD; } -int virtio_scsi_setup(VDev *vdev); int virtio_scsi_read_many(VDev *vdev, ulong sector, void *load_addr, int sec_num); +int virtio_scsi_setup_device(SubChannelId schid); #endif /* VIRTIO_SCSI_H */ From 9125a314cca4a1838b09305a87d8efb98f80ab67 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Mon, 4 Jul 2022 13:19:01 +0200 Subject: [PATCH 11/18] pc-bios/s390-ccw/virtio-blkdev: Request the right feature bits The virtio-blk code uses the block size and geometry fields in the config area. According to the virtio-spec, these have to be negotiated with the right feature bits during initialization, otherwise they might not be available. QEMU is so far very forgiving and always provides them, but we should not rely on this behavior, so let's better request them properly via the VIRTIO_BLK_F_GEOMETRY and VIRTIO_BLK_F_BLK_SIZE feature bits. Message-Id: <20220704111903.62400-11-thuth@redhat.com> Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/virtio-blkdev.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pc-bios/s390-ccw/virtio-blkdev.c b/pc-bios/s390-ccw/virtio-blkdev.c index c175b66a47..8271c47296 100644 --- a/pc-bios/s390-ccw/virtio-blkdev.c +++ b/pc-bios/s390-ccw/virtio-blkdev.c @@ -13,6 +13,9 @@ #include "virtio.h" #include "virtio-scsi.h" +#define VIRTIO_BLK_F_GEOMETRY (1 << 4) +#define VIRTIO_BLK_F_BLK_SIZE (1 << 6) + static int virtio_blk_read_many(VDev *vdev, ulong sector, void *load_addr, int sec_num) { @@ -223,6 +226,7 @@ int virtio_blk_setup_device(SubChannelId schid) { VDev *vdev = virtio_get_device(); + vdev->guest_features[0] = VIRTIO_BLK_F_GEOMETRY | VIRTIO_BLK_F_BLK_SIZE; vdev->schid = schid; virtio_setup_ccw(vdev); From 3953ae186880473df802a7bdf8e855807cc7d59e Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Mon, 4 Jul 2022 13:19:02 +0200 Subject: [PATCH 12/18] pc-bios/s390-ccw/virtio: Remove "extern" keyword from prototypes All the other protytpes in the headers here do not use the "extern" keyword, so let's unify this by removing the "extern" from the misfits, too. Message-Id: <20220704111903.62400-12-thuth@redhat.com> Reviewed-by: Cornelia Huck Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/virtio.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h index 600ba5052b..e657d381ec 100644 --- a/pc-bios/s390-ccw/virtio.h +++ b/pc-bios/s390-ccw/virtio.h @@ -185,12 +185,12 @@ VirtioGDN virtio_guessed_disk_nature(void); void virtio_assume_eckd(void); void virtio_assume_iso9660(void); -extern bool virtio_ipl_disk_is_valid(void); -extern int virtio_get_block_size(void); -extern uint8_t virtio_get_heads(void); -extern uint8_t virtio_get_sectors(void); -extern uint64_t virtio_get_blocks(void); -extern int virtio_read_many(ulong sector, void *load_addr, int sec_num); +bool virtio_ipl_disk_is_valid(void); +int virtio_get_block_size(void); +uint8_t virtio_get_heads(void); +uint8_t virtio_get_sectors(void); +uint64_t virtio_get_blocks(void); +int virtio_read_many(ulong sector, void *load_addr, int sec_num); #define VIRTIO_SECTOR_SIZE 512 #define VIRTIO_ISO_BLOCK_SIZE 2048 From e2269220acb03e6c6a460c3090d804835e202239 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Mon, 4 Jul 2022 13:19:03 +0200 Subject: [PATCH 13/18] pc-bios/s390-ccw/netboot.mak: Ignore Clang's warnings about GNU extensions When compiling the s390-ccw bios with Clang (v14.0), there is currently an unuseful warning like this: CC pc-bios/s390-ccw/ipv6.o ../../roms/SLOF/lib/libnet/ipv6.c:447:18: warning: variable length array folded to constant array as an extension [-Wgnu-folding-constant] unsigned short raw[ip6size]; ^ SLOF is currently GCC-only and cannot be compiled with Clang yet, so it is expected that such extensions sneak in there - and as long as we don't want to compile the code with a compiler that is neither GCC or Clang, it is also not necessary to avoid such extensions. Thus these GNU-extension related warnings are completely useless in the s390-ccw bios, especially in the code that is coming from SLOF, so we should simply disable the related warnings here now. Message-Id: <20220704111903.62400-13-thuth@redhat.com> Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/netboot.mak | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pc-bios/s390-ccw/netboot.mak b/pc-bios/s390-ccw/netboot.mak index 1a06befa4b..057f13bdb4 100644 --- a/pc-bios/s390-ccw/netboot.mak +++ b/pc-bios/s390-ccw/netboot.mak @@ -16,9 +16,12 @@ s390-netboot.elf: $(NETOBJS) libnet.a libc.a s390-netboot.img: s390-netboot.elf $(call quiet-command,$(STRIP) --strip-unneeded $< -o $@,"STRIP","$(TARGET_DIR)$@") +# SLOF is GCC-only, so ignore warnings about GNU extensions with Clang here +NO_GNU_WARN := $(call cc-option,-Werror $(QEMU_CFLAGS),-Wno-gnu) + # libc files: -LIBC_CFLAGS = $(QEMU_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \ +LIBC_CFLAGS = $(QEMU_CFLAGS) $(CFLAGS) $(NO_GNU_WARN) $(LIBC_INC) $(LIBNET_INC) \ -MMD -MP -MT $@ -MF $(@:%.o=%.d) CTYPE_OBJS = isdigit.o isxdigit.o toupper.o @@ -52,7 +55,7 @@ libc.a: $(LIBCOBJS) LIBNETOBJS := args.o dhcp.o dns.o icmpv6.o ipv6.o tcp.o udp.o bootp.o \ dhcpv6.o ethernet.o ipv4.o ndp.o tftp.o pxelinux.o -LIBNETCFLAGS = $(QEMU_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \ +LIBNETCFLAGS = $(QEMU_CFLAGS) $(CFLAGS) $(NO_GNU_WARN) $(LIBC_INC) $(LIBNET_INC) \ -DDHCPARCH=0x1F -MMD -MP -MT $@ -MF $(@:%.o=%.d) %.o : $(SLOF_DIR)/lib/libnet/%.c From 4c4156db1cc828dc2d7d22cbf3982815d6d8564a Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Wed, 6 Jul 2022 18:30:46 +0200 Subject: [PATCH 14/18] pc-bios/s390-ccw: Update the s390-ccw bios binaries with the virtio-blk fixes The binaries have been recompiled with the fixes from the previous patches. Signed-off-by: Thomas Huth --- pc-bios/s390-ccw.img | Bin 50936 -> 42608 bytes pc-bios/s390-netboot.img | Bin 79688 -> 67232 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/pc-bios/s390-ccw.img b/pc-bios/s390-ccw.img index a560c1272f6c135f4fa14f4e10c97b0ce3a66e42..39f9680a0ef1c57f8a0bac9e12ff77ce15150d37 100644 GIT binary patch literal 42608 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

qO6)HiAg%T+7q7g9cpZHFjGv92Gzn??bb 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 NjDl;rRhaO^{{!#4+l>GK literal 50936 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 Hl_&lWsQ8x_ literal 79688 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 Date: Sat, 2 Jul 2022 11:32:25 +0530 Subject: [PATCH 15/18] target/s390x: Remove DISAS_GOTO_TB There is nothing to distinguish this from DISAS_NORETURN. Signed-off-by: Richard Henderson Message-Id: <20220702060228.420454-2-richard.henderson@linaro.org> Signed-off-by: Thomas Huth --- target/s390x/tcg/translate.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c index fd2433d625..e38ae9ce09 100644 --- a/target/s390x/tcg/translate.c +++ b/target/s390x/tcg/translate.c @@ -1123,9 +1123,6 @@ typedef struct { exiting the TB. */ #define DISAS_PC_UPDATED DISAS_TARGET_0 -/* We have emitted one or more goto_tb. No fixup required. */ -#define DISAS_GOTO_TB DISAS_TARGET_1 - /* We have updated the PC and CC values. */ #define DISAS_PC_CC_UPDATED DISAS_TARGET_2 @@ -1189,7 +1186,7 @@ static DisasJumpType help_goto_direct(DisasContext *s, uint64_t dest) tcg_gen_goto_tb(0); tcg_gen_movi_i64(psw_addr, dest); tcg_gen_exit_tb(s->base.tb, 0); - return DISAS_GOTO_TB; + return DISAS_NORETURN; } else { tcg_gen_movi_i64(psw_addr, dest); per_branch(s, false); @@ -1258,7 +1255,7 @@ static DisasJumpType help_branch(DisasContext *s, DisasCompare *c, tcg_gen_movi_i64(psw_addr, dest); tcg_gen_exit_tb(s->base.tb, 1); - ret = DISAS_GOTO_TB; + ret = DISAS_NORETURN; } else { /* Fallthru can use goto_tb, but taken branch cannot. */ /* Store taken branch destination before the brcond. This @@ -6634,7 +6631,6 @@ static void s390x_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs) DisasContext *dc = container_of(dcbase, DisasContext, base); switch (dc->base.is_jmp) { - case DISAS_GOTO_TB: case DISAS_NORETURN: break; case DISAS_TOO_MANY: From 8ec2edac5f32117b523620a216638704d80bbed9 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Sat, 2 Jul 2022 11:32:26 +0530 Subject: [PATCH 16/18] target/s390x: Remove DISAS_PC_STALE There is nothing to distinguish this from DISAS_TOO_MANY. Signed-off-by: Richard Henderson Message-Id: <20220702060228.420454-3-richard.henderson@linaro.org> Signed-off-by: Thomas Huth --- target/s390x/tcg/translate.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c index e38ae9ce09..a3422c0eb0 100644 --- a/target/s390x/tcg/translate.c +++ b/target/s390x/tcg/translate.c @@ -1126,10 +1126,6 @@ typedef struct { /* We have updated the PC and CC values. */ #define DISAS_PC_CC_UPDATED DISAS_TARGET_2 -/* We are exiting the TB, but have neither emitted a goto_tb, nor - updated the PC for the next instruction to be executed. */ -#define DISAS_PC_STALE DISAS_TARGET_3 - /* We are exiting the TB to the main loop. */ #define DISAS_PC_STALE_NOCHAIN DISAS_TARGET_4 @@ -3993,7 +3989,7 @@ static DisasJumpType op_sacf(DisasContext *s, DisasOps *o) { gen_helper_sacf(cpu_env, o->in2); /* Addressing mode has changed, so end the block. */ - return DISAS_PC_STALE; + return DISAS_TOO_MANY; } #endif @@ -4029,7 +4025,7 @@ static DisasJumpType op_sam(DisasContext *s, DisasOps *o) tcg_temp_free_i64(tsam); /* Always exit the TB, since we (may have) changed execution mode. */ - return DISAS_PC_STALE; + return DISAS_TOO_MANY; } static DisasJumpType op_sar(DisasContext *s, DisasOps *o) @@ -6562,13 +6558,13 @@ static DisasJumpType translate_one(CPUS390XState *env, DisasContext *s) /* io should be the last instruction in tb when icount is enabled */ if (unlikely(icount && ret == DISAS_NEXT)) { - ret = DISAS_PC_STALE; + ret = DISAS_TOO_MANY; } #ifndef CONFIG_USER_ONLY if (s->base.tb->flags & FLAG_MASK_PER) { /* An exception might be triggered, save PSW if not already done. */ - if (ret == DISAS_NEXT || ret == DISAS_PC_STALE) { + if (ret == DISAS_NEXT || ret == DISAS_TOO_MANY) { tcg_gen_movi_i64(psw_addr, s->pc_tmp); } @@ -6634,7 +6630,6 @@ static void s390x_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs) case DISAS_NORETURN: break; case DISAS_TOO_MANY: - case DISAS_PC_STALE: case DISAS_PC_STALE_NOCHAIN: update_psw_addr(dc); /* FALLTHRU */ From 872e13796f732cfd65c4dc62bd2e4bbdbb4fa848 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Sat, 2 Jul 2022 11:32:27 +0530 Subject: [PATCH 17/18] target/s390x: Remove DISAS_PC_STALE_NOCHAIN Replace this with a flag: exit_to_mainloop. We can now control the exit for each of DISAS_TOO_MANY, DISAS_PC_UPDATED, and DISAS_PC_CC_UPDATED, and fold in the check for PER. Signed-off-by: Richard Henderson Message-Id: <20220702060228.420454-4-richard.henderson@linaro.org> Signed-off-by: Thomas Huth --- target/s390x/tcg/translate.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c index a3422c0eb0..eac59c3dd1 100644 --- a/target/s390x/tcg/translate.c +++ b/target/s390x/tcg/translate.c @@ -149,6 +149,7 @@ struct DisasContext { uint64_t pc_tmp; uint32_t ilen; enum cc_op cc_op; + bool exit_to_mainloop; }; /* Information carried about a condition to be evaluated. */ @@ -1126,9 +1127,6 @@ typedef struct { /* We have updated the PC and CC values. */ #define DISAS_PC_CC_UPDATED DISAS_TARGET_2 -/* We are exiting the TB to the main loop. */ -#define DISAS_PC_STALE_NOCHAIN DISAS_TARGET_4 - /* Instruction flags */ #define IF_AFP1 0x0001 /* r1 is a fp reg for HFP/FPS instructions */ @@ -3022,7 +3020,8 @@ static DisasJumpType op_lctl(DisasContext *s, DisasOps *o) tcg_temp_free_i32(r1); tcg_temp_free_i32(r3); /* Exit to main loop to reevaluate s390_cpu_exec_interrupt. */ - return DISAS_PC_STALE_NOCHAIN; + s->exit_to_mainloop = true; + return DISAS_TOO_MANY; } static DisasJumpType op_lctlg(DisasContext *s, DisasOps *o) @@ -3033,7 +3032,8 @@ static DisasJumpType op_lctlg(DisasContext *s, DisasOps *o) tcg_temp_free_i32(r1); tcg_temp_free_i32(r3); /* Exit to main loop to reevaluate s390_cpu_exec_interrupt. */ - return DISAS_PC_STALE_NOCHAIN; + s->exit_to_mainloop = true; + return DISAS_TOO_MANY; } static DisasJumpType op_lra(DisasContext *s, DisasOps *o) @@ -4283,7 +4283,8 @@ static DisasJumpType op_ssm(DisasContext *s, DisasOps *o) { tcg_gen_deposit_i64(psw_mask, psw_mask, o->in2, 56, 8); /* Exit to main loop to reevaluate s390_cpu_exec_interrupt. */ - return DISAS_PC_STALE_NOCHAIN; + s->exit_to_mainloop = true; + return DISAS_TOO_MANY; } static DisasJumpType op_stap(DisasContext *s, DisasOps *o) @@ -4548,7 +4549,8 @@ static DisasJumpType op_stnosm(DisasContext *s, DisasOps *o) } /* Exit to main loop to reevaluate s390_cpu_exec_interrupt. */ - return DISAS_PC_STALE_NOCHAIN; + s->exit_to_mainloop = true; + return DISAS_TOO_MANY; } static DisasJumpType op_stura(DisasContext *s, DisasOps *o) @@ -6591,6 +6593,7 @@ static void s390x_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs) dc->cc_op = CC_OP_DYNAMIC; dc->ex_value = dc->base.tb->cs_base; + dc->exit_to_mainloop = (dc->base.tb->flags & FLAG_MASK_PER); } static void s390x_tr_tb_start(DisasContextBase *db, CPUState *cs) @@ -6630,7 +6633,6 @@ static void s390x_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs) case DISAS_NORETURN: break; case DISAS_TOO_MANY: - case DISAS_PC_STALE_NOCHAIN: update_psw_addr(dc); /* FALLTHRU */ case DISAS_PC_UPDATED: @@ -6640,8 +6642,7 @@ static void s390x_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs) /* FALLTHRU */ case DISAS_PC_CC_UPDATED: /* Exit the TB, either by raising a debug exception or by return. */ - if ((dc->base.tb->flags & FLAG_MASK_PER) || - dc->base.is_jmp == DISAS_PC_STALE_NOCHAIN) { + if (dc->exit_to_mainloop) { tcg_gen_exit_tb(NULL, 0); } else { tcg_gen_lookup_and_goto_ptr(); From 3d8111fd3bf7298486bcf1a72013b44c9044104e Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Sat, 2 Jul 2022 11:32:28 +0530 Subject: [PATCH 18/18] target/s390x: Exit tb after executing ex_value When EXECUTE sets ex_value to interrupt the constructed instruction, we implicitly disable interrupts so that the value is not corrupted. Exit to the main loop after execution, so that we re-evaluate any pending interrupts. Reported-by: Sven Schnelle Signed-off-by: Richard Henderson Message-Id: <20220702060228.420454-5-richard.henderson@linaro.org> Signed-off-by: Thomas Huth --- target/s390x/tcg/translate.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c index eac59c3dd1..e2ee005671 100644 --- a/target/s390x/tcg/translate.c +++ b/target/s390x/tcg/translate.c @@ -6593,7 +6593,7 @@ static void s390x_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs) dc->cc_op = CC_OP_DYNAMIC; dc->ex_value = dc->base.tb->cs_base; - dc->exit_to_mainloop = (dc->base.tb->flags & FLAG_MASK_PER); + dc->exit_to_mainloop = (dc->base.tb->flags & FLAG_MASK_PER) || dc->ex_value; } static void s390x_tr_tb_start(DisasContextBase *db, CPUState *cs)