qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 2/3] s390x/ais: enable ais when migration is


From: Christian Borntraeger
Subject: Re: [Qemu-devel] [PATCH v3 2/3] s390x/ais: enable ais when migration is available
Date: Fri, 29 Sep 2017 10:12:43 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.0

Conny can you maybe defer this patch?

Turns out that this patch will enable the ais feature, so you can do -cpu 
z13,ais=on,
but it will not enable ais for the none machine
That means that libvirt will not enable ais for host-model or host-passthrough.

Reason seems to be that the flic interrupt controller is not created when the
none machine is used.

On 09/27/2017 09:20 AM, Christian Borntraeger wrote:
> Instead of unconditionally enabling the KVM AIS capability
> in the kvm arch init function, do this in the flic realize function
> when we know if migration is available. This requires to initialize
> flic before the CPUs (and cpu models).
> 
> Signed-off-by: Christian Borntraeger <address@hidden>
> Reviewed-by: David Hildenbrand <address@hidden>
> ---
>  hw/intc/s390_flic.c          |  8 ++------
>  hw/intc/s390_flic_kvm.c      | 16 +++++++++++-----
>  hw/s390x/css.c               |  4 ++--
>  hw/s390x/s390-virtio-ccw.c   | 10 +++++++---
>  include/hw/s390x/s390_flic.h |  1 -
>  target/s390x/kvm.c           | 10 ++--------
>  6 files changed, 24 insertions(+), 25 deletions(-)
> 
> diff --git a/hw/intc/s390_flic.c b/hw/intc/s390_flic.c
> index 6eaf178..9858f0e 100644
> --- a/hw/intc/s390_flic.c
> +++ b/hw/intc/s390_flic.c
> @@ -1,7 +1,7 @@
>  /*
>   * QEMU S390x floating interrupt controller (flic)
>   *
> - * Copyright 2014 IBM Corp.
> + * Copyright IBM Corp. 2014, 2017
>   * Author(s): Jens Freimann <address@hidden>
>   *            Cornelia Huck <address@hidden>
>   *
> @@ -136,9 +136,7 @@ static void qemu_s390_flic_reset(DeviceState *dev)
> 
>  bool ais_needed(void *opaque)
>  {
> -    S390FLICState *s = opaque;
> -
> -    return s->ais_supported;
> +    return s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION);
>  }
> 
>  static const VMStateDescription qemu_s390_flic_vmstate = {
> @@ -185,8 +183,6 @@ static void s390_flic_common_realize(DeviceState *dev, 
> Error **errp)
>                     " (%d > %d)", max_batch, ADAPTER_ROUTES_MAX_GSI);
>          return;
>      }
> -
> -    fs->ais_supported = s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION);
>  }
> 
>  static void s390_flic_class_init(ObjectClass *oc, void *data)
> diff --git a/hw/intc/s390_flic_kvm.c b/hw/intc/s390_flic_kvm.c
> index 7ead17a..0a370a9 100644
> --- a/hw/intc/s390_flic_kvm.c
> +++ b/hw/intc/s390_flic_kvm.c
> @@ -1,7 +1,7 @@
>  /*
>   * QEMU S390x KVM floating interrupt controller (flic)
>   *
> - * Copyright 2014 IBM Corp.
> + * Copyright IBM Corp. 2014, 2017
>   * Author(s): Jens Freimann <address@hidden>
>   *            Cornelia Huck <address@hidden>
>   *
> @@ -164,7 +164,7 @@ static int kvm_s390_modify_ais_mode(S390FLICState *fs, 
> uint8_t isc,
>          .addr = (uint64_t)&req,
>      };
> 
> -    if (!fs->ais_supported) {
> +    if (!s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {
>          return -ENOSYS;
>      }
> 
> @@ -181,7 +181,7 @@ static int kvm_s390_inject_airq(S390FLICState *fs, 
> uint8_t type,
>          .attr = id,
>      };
> 
> -    if (!fs->ais_supported) {
> +    if (!s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {
>          return -ENOSYS;
>      }
> 
> @@ -459,7 +459,7 @@ static int kvm_flic_ais_post_load(void *opaque, int 
> version_id)
>       * migration from a host that has AIS to a host that has no AIS.
>       * In that case the target system will reject the migration here.
>       */
> -    if (!ais_needed(flic)) {
> +    if (!s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {
>          return -ENOSYS;
>      }
> 
> @@ -557,6 +557,12 @@ static void kvm_s390_flic_realize(DeviceState *dev, 
> Error **errp)
>      test_attr.group = KVM_DEV_FLIC_CLEAR_IO_IRQ;
>      flic_state->clear_io_supported = !ioctl(flic_state->fd,
>                                              KVM_HAS_DEVICE_ATTR, test_attr);
> +    /* try enable the AIS facility */
> +    test_attr.group = KVM_DEV_FLIC_AISM_ALL;
> +    if (!ioctl(flic_state->fd, KVM_HAS_DEVICE_ATTR, test_attr)) {
> +        kvm_vm_enable_cap(kvm_state, KVM_CAP_S390_AIS, 0);
> +    }
> +
>      return;
>  fail:
>      error_propagate(errp, errp_local);
> @@ -578,7 +584,7 @@ static void kvm_s390_flic_reset(DeviceState *dev)
> 
>      flic_disable_wait_pfault(flic);
> 
> -    if (fs->ais_supported) {
> +    if (s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {
>          for (isc = 0; isc <= MAX_ISC; isc++) {
>              rc = kvm_s390_modify_ais_mode(fs, isc, SIC_IRQ_MODE_ALL);
>              if (rc) {
> diff --git a/hw/s390x/css.c b/hw/s390x/css.c
> index 75d4f30..1d4bb73 100644
> --- a/hw/s390x/css.c
> +++ b/hw/s390x/css.c
> @@ -1,7 +1,7 @@
>  /*
>   * Channel subsystem base support.
>   *
> - * Copyright 2012 IBM Corp.
> + * Copyright IBM Corp. 2012, 2017
>   * Author(s): Cornelia Huck <address@hidden>
>   *
>   * This work is licensed under the terms of the GNU GPL, version 2 or (at
> @@ -672,7 +672,7 @@ void css_adapter_interrupt(CssIoAdapterType type, uint8_t 
> isc)
>      }
> 
>      trace_css_adapter_interrupt(isc);
> -    if (fs->ais_supported) {
> +    if (s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {
>          if (fsc->inject_airq(fs, type, isc, adapter->flags)) {
>              error_report("Failed to inject airq with AIS supported");
>              exit(1);
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index fafbc6d..98c82c2 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -1,7 +1,7 @@
>  /*
>   * virtio ccw machine
>   *
> - * Copyright 2012 IBM Corp.
> + * Copyright IBM Corp. 2012, 2017
>   * Copyright (c) 2009 Alexander Graf <address@hidden>
>   * Author(s): Cornelia Huck <address@hidden>
>   *
> @@ -279,11 +279,15 @@ static void ccw_init(MachineState *machine)
>      s390_sclp_init();
>      s390_memory_init(machine->ram_size);
> 
> +    /*
> +     * This might also enable some KVM features like AIS, so it must
> +     * be called before the CPU model
> +     */
> +    s390_flic_init();
> +
>      /* init CPUs (incl. CPU model) early so s390_has_feature() works */
>      s390_init_cpus(machine);
> 
> -    s390_flic_init();
> -
>      /* get a BUS */
>      css_bus = virtual_css_bus_init();
>      s390_init_ipl_dev(machine->kernel_filename, machine->kernel_cmdline,
> diff --git a/include/hw/s390x/s390_flic.h b/include/hw/s390x/s390_flic.h
> index 7aab6ef..75fd83c 100644
> --- a/include/hw/s390x/s390_flic.h
> +++ b/include/hw/s390x/s390_flic.h
> @@ -44,7 +44,6 @@ typedef struct S390FLICState {
>      SysBusDevice parent_obj;
>      /* to limit AdapterRoutes.num_routes for compat */
>      uint32_t adapter_routes_max_batch;
> -    bool ais_supported;
>  } S390FLICState;
> 
>  #define S390_FLIC_COMMON_CLASS(klass) \
> diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
> index ebb75ca..9ee2ada 100644
> --- a/target/s390x/kvm.c
> +++ b/target/s390x/kvm.c
> @@ -2,7 +2,7 @@
>   * QEMU S390x KVM implementation
>   *
>   * Copyright (c) 2009 Alexander Graf <address@hidden>
> - * Copyright IBM Corp. 2012
> + * Copyright IBM Corp. 2012, 2017
>   *
>   * This library is free software; you can redistribute it and/or
>   * modify it under the terms of the GNU Lesser General Public
> @@ -311,13 +311,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
>          }
>      }
> 
> -    /*
> -     * The migration interface for ais was introduced with kernel 4.13
> -     * but the capability itself had been active since 4.12. As migration
> -     * support is considered necessary let's disable ais in the 2.10
> -     * machine.
> -     */
> -    /* kvm_vm_enable_cap(s, KVM_CAP_S390_AIS, 0); */
> +    /* The AIS enablement happens in the flic realize */
> 
>      qemu_mutex_init(&qemu_sigp_mutex);
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]