Message ID | 1377810649-47484-1-git-send-email-borntraeger@de.ibm.com |
---|---|
State | New |
Headers | show |
On 29.08.2013, at 23:10, Christian Borntraeger wrote: > From: "Eugene (jno) Dvurechenski" <jno@linux.vnet.ibm.com> > > Linux uses a check for subcode 6 to decide if other subcodes are > available. Provide a minimal implementation. > > Signed-off-by: Eugene (jno) Dvurechenski <jno@linux.vnet.ibm.com> > Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com> > Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> > --- > target-s390x/kvm.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 46 insertions(+) > > diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c > index 26d18e3..9d3d201 100644 > --- a/target-s390x/kvm.c > +++ b/target-s390x/kvm.c > @@ -72,9 +72,12 @@ > #define PRIV_XSCH 0x76 > #define PRIV_SQBS 0x8a > #define PRIV_EQBS 0x9c > +#define DIAG_IPL 0x308 > #define DIAG_KVM_HYPERCALL 0x500 > #define DIAG_KVM_BREAKPOINT 0x501 > > +#define DIAG_IPL_RC_OK_NOT4CONF 0x0102 > + > #define ICPT_INSTRUCTION 0x04 > #define ICPT_WAITPSW 0x1c > #define ICPT_SOFT_INTERCEPT 0x24 > @@ -578,11 +581,54 @@ static int handle_hypercall(S390CPU *cpu, struct kvm_run *run) > return 0; > } > > +static int handle_diag308(S390CPU *cpu, struct kvm_run *run) Most of this code shouldn't live in kvm.c, but in a more universal helper. Alex > +{ > + uint64_t r1, r3, addr, subcode; > + > + cpu_synchronize_state(CPU(cpu)); > + > + if (cpu->env.psw.mask & PSW_MASK_PSTATE) { > + enter_pgmcheck(cpu, PGM_PRIVILEGED); > + return 0; > + } > + > + r1 = (run->s390_sieic.ipa & 0x00f0) >> 8; > + r3 = run->s390_sieic.ipa & 0x000f; > + addr = cpu->env.regs[r1]; > + subcode = cpu->env.regs[r3]; > + > + if ((subcode & ~0x0ffffULL) || (subcode > 6)) { > + enter_pgmcheck(cpu, PGM_SPECIFICATION); > + return 0; > + } > + > + switch (subcode) { > + case 5: > + if ((r1 & 1) || (addr & 0x0fffULL)) { > + enter_pgmcheck(cpu, PGM_SPECIFICATION); > + return 0; > + } > + return -1; > + case 6: > + if ((r1 & 1) || (addr & 0x0fffULL)) { > + enter_pgmcheck(cpu, PGM_SPECIFICATION); > + return 0; > + } > + cpu->env.regs[r1+1] = DIAG_IPL_RC_OK_NOT4CONF; > + return 0; > + default: > + return -1; > + } > +} > + > static int handle_diag(S390CPU *cpu, struct kvm_run *run, int ipb_code) > { > int r = 0; > > switch (ipb_code) { > + case DIAG_IPL: > + r = handle_diag308(cpu, run); > + break; > case DIAG_KVM_HYPERCALL: > r = handle_hypercall(cpu, run); > break; > -- > 1.8.3.1 >
On 29.08.2013, at 23:10, Christian Borntraeger wrote: > Alex, can you either Ack or Pull the following patches: Patch 1 needs some rework. Patches 2-6 are: Acked-by: Alexander Graf <agraf@suse.de> Alex > > The following changes since commit 951fab990db05d47ab9da5e72521e406c73a3eb9: > > target-mips: fix get_physical_address() #if 0 build error (2013-08-28 19:28:02 +0200) > > are available in the git repository at: > > git://github.com/borntraeger/qemu.git tags/kdump > > for you to fetch changes up to 8f288cfca867ac708cc371192e80947a83663833: > > s390: wire up nmi command to raise a RESTART interrupt on S390 (2013-08-29 14:09:58 +0200) > > ---------------------------------------------------------------- > This is a set of patches dealing with kdump support for s390x/kvm. > kdump on s390x uses subcode 1 of diagnose 0x308 to put the hardware > in a defined state. This is different from a full reset, since it > does not touch all CPU registers. > These patches define the cpu resets, the subsystem reset a load > function and also wires up the "nmi" command to issue a RESTART > interrupt as defined in the z/Architecture principles of operation. > > This allows recent guest kernels with properly setup userspace > to trigger kdump: > - via guest crash > - via nmi from the host > > ---------------------------------------------------------------- > Christian Borntraeger (4): > s390: provide I/O subsystem reset > s390: provide a cpu load normal function > s390/cpu: split CPU reset into architectured functions > s390: Implement load normal reset > > Eugene (jno) Dvurechenski (2): > s390/kvm: basic implementation of diagnose 308 subcode 6 > s390: wire up nmi command to raise a RESTART interrupt on S390 > > cpus.c | 14 ++++++++ > hmp-commands.hx | 4 +-- > hw/s390x/s390-virtio-ccw.c | 15 +++++++++ > qmp-commands.hx | 2 +- > target-s390x/cpu-qom.h | 6 ++++ > target-s390x/cpu.c | 55 ++++++++++++++++++++++++++----- > target-s390x/cpu.h | 17 ++++++++++ > target-s390x/kvm.c | 81 ++++++++++++++++++++++++++++++++++++++++++++-- > 8 files changed, 180 insertions(+), 14 deletions(-) >