mbox

[PULL,0/6] kdump patches for s390x/kvm

Message ID 1377810649-47484-1-git-send-email-borntraeger@de.ibm.com
State New
Headers show

Pull-request

git://github.com/borntraeger/qemu.git tags/kdump

Message

Christian Borntraeger Aug. 29, 2013, 9:10 p.m. UTC
Alex, can you either Ack or Pull the following patches:

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(-)

Comments

Alexander Graf Aug. 29, 2013, 10:14 p.m. UTC | #1
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
>
Alexander Graf Aug. 29, 2013, 10:33 p.m. UTC | #2
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(-)
>