From eac53ac598cc43e325658a6889d9951fd7244e11 Mon Sep 17 00:00:00 2001 From: David Hildenbrand Date: Fri, 6 Apr 2018 11:35:52 +0200 Subject: [PATCH 1/8] s390x/kvm: call cpu_synchronize_state() on every kvm_arch_handle_exit() Manually having to use cpu_synchronize_state() is error prone. And as Christian Borntraeger discovered, e.g. handle_diag() is currently missing a cpu_synchronize_state(), as decode_basedisp_s() uses a general purpose register value internally. So let's do an overall cpu_synchronize_state(), which fixes at least the one mentioned BUG. We will clean up the superfluous cpu_synchronize_state() calls later. We now also call it (although maybe not neded) for - KVM_EXIT_S390_RESET -> s390_reipl_request() - KVM_EXIT_DEBUG -> kvm_arch_handle_debug_exit() - unmanagable/unimplemented intercepts - ICPT_CPU_STOP -> do_stop_interrupt() -> cpu gets halted - Scenarios where we inject an operation exception - handle_stsi() I don't think any of these are performance critical. Especially as we have all information directly contained in kvm_run, there are no additional IOCTLs to issue on modern kernels. Signed-off-by: David Hildenbrand Message-Id: <20180406093552.13016-1-david@redhat.com> Acked-by: Christian Borntraeger Signed-off-by: Cornelia Huck --- target/s390x/kvm.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c index f570896dc1..fb59d92def 100644 --- a/target/s390x/kvm.c +++ b/target/s390x/kvm.c @@ -1778,6 +1778,8 @@ int kvm_arch_handle_exit(CPUState *cs, struct kvm_run *run) qemu_mutex_lock_iothread(); + cpu_synchronize_state(cs); + switch (run->exit_reason) { case KVM_EXIT_S390_SIEIC: ret = handle_intercept(cpu); From 11ef6d50fcfaa29e547c9755bdc56b093bb9ba67 Mon Sep 17 00:00:00 2001 From: Viktor Mihajlovski Date: Thu, 5 Apr 2018 17:07:22 +0200 Subject: [PATCH 2/8] s390: Refactor IPL parameter block generation Splitting out the the CCW device extraction allows reuse. Signed-off-by: Viktor Mihajlovski Message-Id: <1522940844-12336-2-git-send-email-mihajlov@linux.vnet.ibm.com> Reviewed-by: Farhan Ali Reviewed-by: Thomas Huth Signed-off-by: Cornelia Huck --- hw/s390x/ipl.c | 83 +++++++++++++++++++++++++++++++------------------- 1 file changed, 52 insertions(+), 31 deletions(-) diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index fdeaec3a58..58e33c5446 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -279,44 +279,52 @@ static void s390_ipl_set_boot_menu(S390IPLState *ipl) *timeout = cpu_to_be32(splash_time); } -static bool s390_gen_initial_iplb(S390IPLState *ipl) +static CcwDevice *s390_get_ccw_device(DeviceState *dev_st) { - DeviceState *dev_st; + CcwDevice *ccw_dev = NULL; - dev_st = get_boot_device(0); if (dev_st) { VirtioCcwDevice *virtio_ccw_dev = (VirtioCcwDevice *) object_dynamic_cast(OBJECT(qdev_get_parent_bus(dev_st)->parent), - TYPE_VIRTIO_CCW_DEVICE); + TYPE_VIRTIO_CCW_DEVICE); + if (virtio_ccw_dev) { + ccw_dev = CCW_DEVICE(virtio_ccw_dev); + } else { + SCSIDevice *sd = (SCSIDevice *) + object_dynamic_cast(OBJECT(dev_st), + TYPE_SCSI_DEVICE); + if (sd) { + SCSIBus *bus = scsi_bus_from_device(sd); + VirtIOSCSI *vdev = container_of(bus, VirtIOSCSI, bus); + VirtIOSCSICcw *scsi_ccw = container_of(vdev, VirtIOSCSICcw, + vdev); + + ccw_dev = (CcwDevice *)object_dynamic_cast(OBJECT(scsi_ccw), + TYPE_CCW_DEVICE); + } + } + } + return ccw_dev; +} + +static bool s390_gen_initial_iplb(S390IPLState *ipl) +{ + DeviceState *dev_st; + CcwDevice *ccw_dev = NULL; + + dev_st = get_boot_device(0); + if (dev_st) { + ccw_dev = s390_get_ccw_device(dev_st); + } + + /* + * Currently allow IPL only from CCW devices. + */ + if (ccw_dev) { SCSIDevice *sd = (SCSIDevice *) object_dynamic_cast(OBJECT(dev_st), TYPE_SCSI_DEVICE); - VirtIONet *vn = (VirtIONet *) object_dynamic_cast(OBJECT(dev_st), - TYPE_VIRTIO_NET); - - if (vn) { - ipl->netboot = true; - } - if (virtio_ccw_dev) { - CcwDevice *ccw_dev = CCW_DEVICE(virtio_ccw_dev); - - ipl->iplb.len = cpu_to_be32(S390_IPLB_MIN_CCW_LEN); - ipl->iplb.blk0_len = - cpu_to_be32(S390_IPLB_MIN_CCW_LEN - S390_IPLB_HEADER_LEN); - ipl->iplb.pbt = S390_IPL_TYPE_CCW; - ipl->iplb.ccw.devno = cpu_to_be16(ccw_dev->sch->devno); - ipl->iplb.ccw.ssid = ccw_dev->sch->ssid & 3; - } else if (sd) { - SCSIBus *bus = scsi_bus_from_device(sd); - VirtIOSCSI *vdev = container_of(bus, VirtIOSCSI, bus); - VirtIOSCSICcw *scsi_ccw = container_of(vdev, VirtIOSCSICcw, vdev); - CcwDevice *ccw_dev; - - ccw_dev = (CcwDevice *)object_dynamic_cast(OBJECT(scsi_ccw), - TYPE_CCW_DEVICE); - if (!ccw_dev) { /* It might be a PCI device instead */ - return false; - } + if (sd) { ipl->iplb.len = cpu_to_be32(S390_IPLB_MIN_QEMU_SCSI_LEN); ipl->iplb.blk0_len = cpu_to_be32(S390_IPLB_MIN_QEMU_SCSI_LEN - S390_IPLB_HEADER_LEN); @@ -327,12 +335,25 @@ static bool s390_gen_initial_iplb(S390IPLState *ipl) ipl->iplb.scsi.devno = cpu_to_be16(ccw_dev->sch->devno); ipl->iplb.scsi.ssid = ccw_dev->sch->ssid & 3; } else { - return false; /* unknown device */ + VirtIONet *vn = (VirtIONet *) object_dynamic_cast(OBJECT(dev_st), + TYPE_VIRTIO_NET); + + ipl->iplb.len = cpu_to_be32(S390_IPLB_MIN_CCW_LEN); + ipl->iplb.blk0_len = + cpu_to_be32(S390_IPLB_MIN_CCW_LEN - S390_IPLB_HEADER_LEN); + ipl->iplb.pbt = S390_IPL_TYPE_CCW; + ipl->iplb.ccw.devno = cpu_to_be16(ccw_dev->sch->devno); + ipl->iplb.ccw.ssid = ccw_dev->sch->ssid & 3; + + if (vn) { + ipl->netboot = true; + } } if (!s390_ipl_set_loadparm(ipl->iplb.loadparm)) { ipl->iplb.flags |= DIAG308_FLAGS_LP_VALID; } + return true; } From 789b5a401b330510da663b4d4ae1ef8a7410c353 Mon Sep 17 00:00:00 2001 From: Viktor Mihajlovski Date: Thu, 5 Apr 2018 17:07:23 +0200 Subject: [PATCH 3/8] s390: Ensure IPL from SCSI works as expected Operating systems may request an IPL from a virtio-scsi device by specifying an IPL parameter type of CCW. In this case QEMU won't set up the IPLB correctly. The BIOS will still detect it's a SCSI device to boot from, but it will now have to search for the first LUN and attempt to boot from there. However this may not be the original boot LUN if there's more than one SCSI disk attached to the HBA. With this change QEMU will detect that the request is for a SCSI device and will rebuild the initial IPL parameter info if it's the SCSI device used for the first boot. In consequence the BIOS can use the boot LUN from the IPL information block. In case a different SCSI device has been set, the BIOS will find and use the first available LUN. Signed-off-by: Viktor Mihajlovski Message-Id: <1522940844-12336-3-git-send-email-mihajlov@linux.vnet.ibm.com> Reviewed-by: Farhan Ali Reviewed-by: Thomas Huth Signed-off-by: Cornelia Huck --- hw/s390x/ipl.c | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index 58e33c5446..fb554ab156 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -427,7 +427,8 @@ unref_mr: return img_size; } -static bool is_virtio_net_device(IplParameterBlock *iplb) +static bool is_virtio_ccw_device_of_type(IplParameterBlock *iplb, + int virtio_id) { uint8_t cssid; uint8_t ssid; @@ -447,13 +448,23 @@ static bool is_virtio_net_device(IplParameterBlock *iplb) sch = css_find_subch(1, cssid, ssid, schid); if (sch && sch->devno == devno) { - return sch->id.cu_model == VIRTIO_ID_NET; + return sch->id.cu_model == virtio_id; } } } return false; } +static bool is_virtio_net_device(IplParameterBlock *iplb) +{ + return is_virtio_ccw_device_of_type(iplb, VIRTIO_ID_NET); +} + +static bool is_virtio_scsi_device(IplParameterBlock *iplb) +{ + return is_virtio_ccw_device_of_type(iplb, VIRTIO_ID_SCSI); +} + void s390_ipl_update_diag308(IplParameterBlock *iplb) { S390IPLState *ipl = get_ipl_device(); @@ -478,6 +489,22 @@ void s390_reipl_request(void) S390IPLState *ipl = get_ipl_device(); ipl->reipl_requested = true; + if (ipl->iplb_valid && + !ipl->netboot && + ipl->iplb.pbt == S390_IPL_TYPE_CCW && + is_virtio_scsi_device(&ipl->iplb)) { + CcwDevice *ccw_dev = s390_get_ccw_device(get_boot_device(0)); + + if (ccw_dev && + cpu_to_be16(ccw_dev->sch->devno) == ipl->iplb.ccw.devno && + (ccw_dev->sch->ssid & 3) == ipl->iplb.ccw.ssid) { + /* + * this is the original boot device's SCSI + * so restore IPL parameter info from it + */ + ipl->iplb_valid = s390_gen_initial_iplb(ipl); + } + } qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET); } From e8c7ef288abb05b741a95418ee2de85c1071e0db Mon Sep 17 00:00:00 2001 From: Viktor Mihajlovski Date: Thu, 5 Apr 2018 17:07:24 +0200 Subject: [PATCH 4/8] s390: Do not pass inofficial IPL type to the guest IPL over a virtio-scsi device requires special handling not available in the real architecture. For this purpose the IPL type 0xFF has been chosen as means of communication between QEMU and the pc-bios. However, a guest OS could be confused by seeing an unknown IPL type. This change sets the IPL parameter type to 0x02 (CCW) to prevent this. Pre-existing Linux has looked up the IPL parameters only in the case of FCP IPL. This means that the behavior should stay the same even if Linux checks for the IPL type unconditionally. Signed-off-by: Viktor Mihajlovski Message-Id: <1522940844-12336-4-git-send-email-mihajlov@linux.vnet.ibm.com> Reviewed-by: Christian Borntraeger Signed-off-by: Cornelia Huck --- pc-bios/s390-ccw/bootmap.c | 7 +++++++ pc-bios/s390-ccw/iplb.h | 15 +++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c index fc2a9fe33b..9287b7a70f 100644 --- a/pc-bios/s390-ccw/bootmap.c +++ b/pc-bios/s390-ccw/bootmap.c @@ -70,6 +70,13 @@ static void jump_to_IPL_code(uint64_t address) { /* store the subsystem information _after_ the bootmap was loaded */ write_subsystem_identification(); + + /* prevent unknown IPL types in the guest */ + if (iplb.pbt == S390_IPL_TYPE_QEMU_SCSI) { + iplb.pbt = S390_IPL_TYPE_CCW; + set_iplb(&iplb); + } + /* * The IPL PSW is at address 0. We also must not overwrite the * content of non-BIOS memory after we loaded the guest, so we diff --git a/pc-bios/s390-ccw/iplb.h b/pc-bios/s390-ccw/iplb.h index 7dfce4fbcf..5357a36d51 100644 --- a/pc-bios/s390-ccw/iplb.h +++ b/pc-bios/s390-ccw/iplb.h @@ -97,16 +97,27 @@ extern QemuIplParameters qipl; #define S390_IPL_TYPE_CCW 0x02 #define S390_IPL_TYPE_QEMU_SCSI 0xff -static inline bool store_iplb(IplParameterBlock *iplb) +static inline bool manage_iplb(IplParameterBlock *iplb, bool store) { register unsigned long addr asm("0") = (unsigned long) iplb; register unsigned long rc asm("1") = 0; asm volatile ("diag %0,%2,0x308\n" : "+d" (addr), "+d" (rc) - : "d" (6) + : "d" (store ? 6 : 5) : "memory", "cc"); return rc == 0x01; } + +static inline bool store_iplb(IplParameterBlock *iplb) +{ + return manage_iplb(iplb, true); +} + +static inline bool set_iplb(IplParameterBlock *iplb) +{ + return manage_iplb(iplb, false); +} + #endif /* IPLB_H */ From c607bb8f8a6287704fdf06c78ee24d7443a6a8af Mon Sep 17 00:00:00 2001 From: Cornelia Huck Date: Fri, 6 Apr 2018 08:03:28 -0400 Subject: [PATCH 5/8] pc-bios/s390: update images Contains the following commits: - s390: Do not pass inofficial IPL type to the guest For s390-netboot.img, this also contains the following commits (update was forgotten last time): - pc-bios/s390-ccw: Move string arrays from bootmap header to .c file - pc-bios/s390-ccw: Increase virtio timeout to 30 seconds Signed-off-by: Cornelia Huck --- pc-bios/s390-ccw.img | Bin 30568 -> 30520 bytes pc-bios/s390-netboot.img | Bin 83776 -> 83856 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/pc-bios/s390-ccw.img b/pc-bios/s390-ccw.img index d17e85995db582b871f937cf74338b2eaf65a2ef..fdd6809c707274be47b21fac102c41942f1379d7 100644 GIT binary patch delta 2564 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 U3!oPJUoHygq4B2+y&LrZ1(Yj)qyPW_ diff --git a/pc-bios/s390-netboot.img b/pc-bios/s390-netboot.img index 9f5926b534cefa598618746f64fc8bb4bb25c265..31f3d141cde6320d696e6945046c75d140488df3 100644 GIT binary patch literal 83856 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 literal 83776 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 From be4d026f645eb31078e08d431c93a898b895024e Mon Sep 17 00:00:00 2001 From: Greg Kurz Date: Sat, 7 Apr 2018 16:43:46 +0200 Subject: [PATCH 6/8] vfio-ccw: fix memory leaks in vfio_ccw_realize() If the subchannel is already attached or if vfio_get_device() fails, the code jumps to the 'out_device_err' label and doesn't free the string it has just allocated. The code should be reworked so that vcdev->vdev.name only gets set when the device has been attached, and freed when it is about to be detached. This could be achieved with the addition of a vfio_ccw_get_device() function that would be the counterpart of vfio_put_device(). But this is a more elaborate cleanup that should be done in a follow-up. For now, let's just add calls to g_free() on the buggy error paths. Signed-off-by: Greg Kurz Message-Id: <152311222681.203086.8874800175539040298.stgit@bahia> Signed-off-by: Cornelia Huck --- hw/vfio/ccw.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/vfio/ccw.c b/hw/vfio/ccw.c index 4e5855741a..fe34b50769 100644 --- a/hw/vfio/ccw.c +++ b/hw/vfio/ccw.c @@ -357,11 +357,13 @@ static void vfio_ccw_realize(DeviceState *dev, Error **errp) if (strcmp(vbasedev->name, vcdev->vdev.name) == 0) { error_setg(&err, "vfio: subchannel %s has already been attached", vcdev->vdev.name); + g_free(vcdev->vdev.name); goto out_device_err; } } if (vfio_get_device(group, cdev->mdevid, &vcdev->vdev, &err)) { + g_free(vcdev->vdev.name); goto out_device_err; } From 61a17fea6df45f0219537536b7af92a42df6ade6 Mon Sep 17 00:00:00 2001 From: David Hildenbrand Date: Mon, 9 Apr 2018 13:30:18 +0200 Subject: [PATCH 7/8] s390x/mmu: don't overwrite pending exception in mmu translate If we already triggered another exception, don't overwrite it with a protection exception. Only applies to old KVM instances without the virtual memory access IOCTL in KVM. Signed-off-by: David Hildenbrand Message-Id: <20180409113019.14568-2-david@redhat.com> Reviewed-by: Thomas Huth Acked-by: Christian Borntraeger Signed-off-by: Cornelia Huck --- target/s390x/mmu_helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/s390x/mmu_helper.c b/target/s390x/mmu_helper.c index 1deeb6e6e4..a25deef5dd 100644 --- a/target/s390x/mmu_helper.c +++ b/target/s390x/mmu_helper.c @@ -325,7 +325,7 @@ static int mmu_translate_asce(CPUS390XState *env, target_ulong vaddr, r = mmu_translate_region(env, vaddr, asc, asce, level, raddr, flags, rw, exc); - if (rw == MMU_DATA_STORE && !(*flags & PAGE_WRITE)) { + if (!r && rw == MMU_DATA_STORE && !(*flags & PAGE_WRITE)) { trigger_prot_fault(env, vaddr, asc, rw, exc); return -1; } From b3a184f51fbed3401694a9619e6842f882a64fee Mon Sep 17 00:00:00 2001 From: David Hildenbrand Date: Mon, 9 Apr 2018 13:30:19 +0200 Subject: [PATCH 8/8] s390x: load_psw() should only exchange the PSW for KVM Let's simplify it a bit. On some weird circumstances we would have tried to recompute watchpoints when running under KVM. load_psw() is called from do_restart_interrupt() during a SIGP RESTART if the target CPU is STOPPED. Let's touch watchpoints only in the TCG case - where they are used for PER emulation. Signed-off-by: David Hildenbrand Message-Id: <20180409113019.14568-3-david@redhat.com> Acked-by: Christian Borntraeger Reviewed-by: Thomas Huth Signed-off-by: Cornelia Huck --- target/s390x/helper.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/target/s390x/helper.c b/target/s390x/helper.c index 615fa24ab9..e8548f340a 100644 --- a/target/s390x/helper.c +++ b/target/s390x/helper.c @@ -103,16 +103,18 @@ void load_psw(CPUS390XState *env, uint64_t mask, uint64_t addr) env->psw.addr = addr; env->psw.mask = mask; - if (tcg_enabled()) { - env->cc_op = (mask >> 44) & 3; + + /* KVM will handle all WAITs and trigger a WAIT exit on disabled_wait */ + if (!tcg_enabled()) { + return; } + env->cc_op = (mask >> 44) & 3; if ((old_mask ^ mask) & PSW_MASK_PER) { s390_cpu_recompute_watchpoints(CPU(s390_env_get_cpu(env))); } - /* KVM will handle all WAITs and trigger a WAIT exit on disabled_wait */ - if (tcg_enabled() && (mask & PSW_MASK_WAIT)) { + if (mask & PSW_MASK_WAIT) { s390_handle_wait(s390_env_get_cpu(env)); } }