Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:GA
qemu.820
0192-s390x-ipl-drop-reipl-parameters-on-.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0192-s390x-ipl-drop-reipl-parameters-on-.patch of Package qemu.820
From 39da0b74e600ec6fae4f749a1d2e3552b28fe1cf Mon Sep 17 00:00:00 2001 From: Fan Zhang <zhangfan@linux.vnet.ibm.com> Date: Thu, 12 Feb 2015 18:02:15 +0100 Subject: [PATCH] s390x/ipl: drop reipl parameters on resets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Whenever a reboot initiated by the guest is done, the reipl parameters should remain valid. The disk configured by the guest is to be used for ipl'ing. External reboot/reset request (e.g. via virsh reset guest) should completely reset the guest to the initial state, and therefore also reset the reipl parameters, resulting in an ipl behaviour of the initially configured guest. This could be an external kernel or a disk. Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com> Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com> Acked-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com> Signed-off-by: Fan Zhang <zhangfan@linux.vnet.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> (cherry picked from commit e91e972ccfbaeba1d1416202ad1b667810a33e1f) [AF: Rebased] Signed-off-by: Andreas Färber <afaerber@suse.de> --- hw/s390x/ipl.c | 15 +++++++++++++++ hw/s390x/ipl.h | 1 + target-s390x/kvm.c | 3 ++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index 6bfedfa..2fb8b99 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -55,6 +55,7 @@ typedef struct S390IPLState { bool enforce_bios; IplParameterBlock iplb; bool iplb_valid; + bool reipl_requested; /*< public >*/ char *kernel; @@ -233,6 +234,15 @@ IplParameterBlock *s390_ipl_get_iplb(void) return &ipl->iplb; } +void s390_reipl_request(void) +{ + S390IPLState *ipl; + + ipl = S390_IPL(object_resolve_path(TYPE_S390_IPL, NULL)); + ipl->reipl_requested = true; + qemu_system_reset_request(); +} + static void s390_ipl_reset(DeviceState *dev) { S390IPLState *ipl = S390_IPL(dev); @@ -242,6 +252,11 @@ static void s390_ipl_reset(DeviceState *dev) env->psw.addr = ipl->start_addr; env->psw.mask = IPL_PSW_MASK; + if (!ipl->reipl_requested) { + ipl->iplb_valid = false; + } + ipl->reipl_requested = false; + if (!ipl->kernel || ipl->iplb_valid) { env->psw.addr = ipl->bios_start_addr; env->regs[7] = s390_update_iplstate(env, ipl); diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h index f1d082f..70497bc 100644 --- a/hw/s390x/ipl.h +++ b/hw/s390x/ipl.h @@ -20,5 +20,6 @@ typedef struct IplParameterBlock { int s390_ipl_update_diag308(IplParameterBlock *iplb); IplParameterBlock *s390_ipl_get_iplb(void); +void s390_reipl_request(void); #endif diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c index 74ff92b..483da57 100644 --- a/target-s390x/kvm.c +++ b/target-s390x/kvm.c @@ -37,6 +37,7 @@ #include "qapi/qmp/qjson.h" #include "monitor/monitor.h" #include "trace.h" +#include "hw/s390x/ipl.h" /* #define DEBUG_KVM */ @@ -860,7 +861,7 @@ int kvm_arch_handle_exit(CPUState *cs, struct kvm_run *run) ret = handle_intercept(cpu); break; case KVM_EXIT_S390_RESET: - qemu_system_reset_request(); + s390_reipl_request(); break; case KVM_EXIT_S390_TSCH: ret = handle_tsch(cpu);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor