All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christian Borntraeger <borntraeger@de.ibm.com>
To: Jens Freimann <jfrei@linux.vnet.ibm.com>
Cc: Cornelia Huck <cornelia.huck@de.ibm.com>,
	Alexander Graf <agraf@suse.de>,
	kvm@vger.kernel.org, qemu-devel@nongnu.org,
	Andreas Faerber <afaerber@suse.de>,
	Thomas Huth <thuth@linux.vnet.ibm.com>
Subject: Re: [PATCH 2/2] s390x/kvm: implement floating-interrupt controller device
Date: Fri, 06 Sep 2013 15:24:23 +0200	[thread overview]
Message-ID: <5229D787.7040102@de.ibm.com> (raw)
In-Reply-To: <1378469970-62769-3-git-send-email-jfrei@linux.vnet.ibm.com>

On 06/09/13 14:19, Jens Freimann wrote:
> This patch implements a floating-interrupt controller device (flic)
> which interacts with the s390 flic kvm_device.
> 
> It provides functionality to:
>     * clear all pending floating interrupts in the kernel at device reset
>     * inject/retrieve interrupts into the kernel (used for migration)
> 
> Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
> Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>


> 
> ---
>  default-configs/s390x-softmmu.mak |   1 +
>  hw/intc/Makefile.objs             |   1 +
>  hw/intc/s390_flic.c               | 164 ++++++++++++++++++++++++++++++++++++++
>  hw/s390x/s390-virtio-ccw.c        |   8 +-
>  hw/s390x/s390-virtio.c            |   2 +
>  include/hw/s390x/s390_flic.h      |  31 +++++++
>  6 files changed, 206 insertions(+), 1 deletion(-)
> 
> diff --git a/default-configs/s390x-softmmu.mak b/default-configs/s390x-softmmu.mak
> index 81fbc68..d843dc0 100644
> --- a/default-configs/s390x-softmmu.mak
> +++ b/default-configs/s390x-softmmu.mak
> @@ -1,2 +1,3 @@
>  CONFIG_VIRTIO=y
>  CONFIG_SCLPCONSOLE=y
> +CONFIG_S390_FLIC=$(CONFIG_KVM)
> diff --git a/hw/intc/Makefile.objs b/hw/intc/Makefile.objs
> index 2851eed..b2305aa 100644
> --- a/hw/intc/Makefile.objs
> +++ b/hw/intc/Makefile.objs
> @@ -23,3 +23,4 @@ obj-$(CONFIG_OMAP) += omap_intc.o
>  obj-$(CONFIG_OPENPIC_KVM) += openpic_kvm.o
>  obj-$(CONFIG_SH4) += sh_intc.o
>  obj-$(CONFIG_XICS) += xics.o
> +obj-$(CONFIG_S390_FLIC) += s390_flic.o
> diff --git a/hw/intc/s390_flic.c b/hw/intc/s390_flic.c
> new file mode 100644
> index 0000000..9dfaafa
> --- /dev/null
> +++ b/hw/intc/s390_flic.c
> @@ -0,0 +1,164 @@
> +/*
> + * QEMU S390x KVM floating interrupt controller (flic)
> + *
> + * Copyright 2013 IBM Corp.
> + * Author(s): Jens Freimann <jfrei@linux.vnet.ibm.com>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2 or (at
> + * your option) any later version. See the COPYING file in the top-level
> + * directory.
> + */
> +
> +#include <sys/ioctl.h>
> +#include "hw/sysbus.h"
> +#include "sysemu/kvm.h"
> +#include "migration/qemu-file.h"
> +#include "hw/s390x/s390_flic.h"
> +
> +void s390_flic_init(void)
> +{
> +    DeviceState *dev;
> +
> +    if (kvm_enabled()) {
> +        dev = qdev_create(NULL, "s390-flic");
> +        object_property_add_child(qdev_get_machine(), "s390-flic",
> +                                  OBJECT(dev), NULL);
> +        qdev_init_nofail(dev);
> +    }
> +}
> +
> +static int flic_dequeue_irq(QEMUFile *f, struct kvm_s390_irq *s390irq,
> +                            KVMS390FLICState *flic)
> +{
> +    struct kvm_device_attr attr;
> +    int rc;
> +
> +    attr.group = KVM_DEV_FLIC_DEQUEUE;
> +    attr.addr = (uint64_t) s390irq;
> +
> +    rc = ioctl(flic->fd, KVM_GET_DEVICE_ATTR, &attr);
> +
> +    return rc ? -errno : 0;
> +}
> +
> +static int flic_enqueue_irq(QEMUFile *f, struct kvm_s390_irq *s390irq,
> +                            KVMS390FLICState *flic)
> +{
> +    int rc;
> +    struct kvm_device_attr attr;
> +
> +    attr.group = KVM_DEV_FLIC_ENQUEUE;
> +    attr.addr = (uint64_t) s390irq;
> +
> +    rc = ioctl(flic->fd, KVM_SET_DEVICE_ATTR, &attr);
> +
> +    return rc ? -errno : 0;
> +}
> +
> +/* Save pending floating interrupts. */
> +static void kvm_floating_interrupt_save(QEMUFile *f, void *opaque)
> +{
> +    struct kvm_s390_irq s390irq = {0};
> +    int r = 0;
> +
> +    while (!r) {
> +        r = flic_dequeue_irq(f, &s390irq, opaque);
> +        if (r == -ENODATA) {
> +            /* At end of list: write special marker */
> +            memset(&s390irq, 0, sizeof(s390irq));
> +            s390irq.type = 0xffffffff;
> +        }
> +        qemu_put_buffer(f, (uint8_t *) &s390irq, sizeof(s390irq));
> +    }
> +}
> +
> +/* Load pending floating interrupts. */
> +static int kvm_floating_interrupt_load(QEMUFile *f, void *opaque, int version_id)
> +{
> +    int r = 0;
> +    struct kvm_s390_irq s390irq = {0};
> +
> +    while (!r) {
> +        qemu_get_buffer(f, (uint8_t *) &s390irq, sizeof(s390irq));
> +        /* Watch for marker indicating end of list */
> +        if (s390irq.type == 0xffffffff) {
> +            return 0;
> +        }
> +        r = flic_enqueue_irq(f, &s390irq, (struct KVMS390FLICState *) opaque);
> +    }
> +
> +    return r;
> +}
> +
> +static void kvm_s390_flic_realize(DeviceState *dev, Error **errp)
> +{
> +    KVMS390FLICState *flic_state = KVM_S390_FLIC(dev);
> +    struct kvm_create_device cd = {0};
> +    int ret;
> +
> +    flic_state->fd = -1;
> +    if (!kvm_check_extension(kvm_state, KVM_CAP_DEVICE_CTRL)) {
> +        return;
> +    }
> +
> +    cd.type = KVM_DEV_TYPE_FLIC;
> +    ret = kvm_vm_ioctl(kvm_state, KVM_CREATE_DEVICE, &cd);
> +    if (ret < 0) {
> +        perror("flic: couldn't create kvm_device");
> +        return;
> +    }
> +    flic_state->fd = cd.fd;
> +
> +    /* Register savevm handler for floating interrupts */
> +    register_savevm(NULL, "floatingint", 0, 1, kvm_floating_interrupt_save,
> +                    kvm_floating_interrupt_load, (void *) flic_state);
> +}
> +
> +static void kvm_s390_flic_unrealize(DeviceState *dev, Error **errp)
> +{
> +    KVMS390FLICState *flic_state = KVM_S390_FLIC(dev);
> +
> +    unregister_savevm(DEVICE(flic_state), "floatingint", flic_state);
> +}
> +
> +static void kvm_s390_flic_reset(DeviceState *dev)
> +{
> +    KVMS390FLICState *flic = KVM_S390_FLIC(dev);
> +    struct kvm_device_attr attr;
> +    int rc = 0;
> +
> +    if (flic->fd == -1) {
> +        return;
> +    }
> +
> +    attr.group = KVM_DEV_FLIC_CLEAR_IRQS;
> +
> +    rc = ioctl(flic->fd, KVM_SET_DEVICE_ATTR, &attr);
> +    if (rc) {
> +        perror("flic: reset failed");
> +    }
> +}
> +
> +static void kvm_s390_flic_class_init(ObjectClass *oc, void *data)
> +{
> +    DeviceClass *dc = DEVICE_CLASS(oc);
> +
> +    dc->realize = kvm_s390_flic_realize;
> +    dc->unrealize = kvm_s390_flic_unrealize;
> +    dc->reset = kvm_s390_flic_reset;
> +    dc->no_user = 1;
> +}
> +
> +static const TypeInfo kvm_s390_flic_info = {
> +    .name          = TYPE_KVM_S390_FLIC,
> +    .parent        = TYPE_SYS_BUS_DEVICE,
> +    .instance_size = sizeof(KVMS390FLICState),
> +    .class_init    = kvm_s390_flic_class_init,
> +};
> +
> +static void kvm_s390_flic_register_types(void)
> +{
> +    type_register_static(&kvm_s390_flic_info);
> +}
> +
> +type_init(kvm_s390_flic_register_types)
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index 733d988..0d4f6ae 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -13,13 +13,14 @@
>  #include "exec/address-spaces.h"
>  #include "s390-virtio.h"
>  #include "hw/s390x/sclp.h"
> +#include "hw/s390x/s390_flic.h"
>  #include "ioinst.h"
>  #include "css.h"
>  #include "virtio-ccw.h"
> 
>  void io_subsystem_reset(void)
>  {
> -    DeviceState *css, *sclp;
> +    DeviceState *css, *sclp, *flic;
> 
>      css = DEVICE(object_resolve_path_type("", "virtual-css-bridge", NULL));
>      if (css) {
> @@ -30,6 +31,10 @@ void io_subsystem_reset(void)
>      if (sclp) {
>          qdev_reset_all(sclp);
>      }
> +    flic = DEVICE(object_resolve_path_type("", "s390-flic", NULL));
> +    if (flic) {
> +        qdev_reset_all(flic);
> +    }
>  }
> 
>  static int virtio_ccw_hcall_notify(const uint64_t *args)
> @@ -99,6 +104,7 @@ static void ccw_init(QEMUMachineInitArgs *args)
>      s390_sclp_init();
>      s390_init_ipl_dev(args->kernel_filename, args->kernel_cmdline,
>                        args->initrd_filename, "s390-ccw.img");
> +    s390_flic_init();
> 
>      /* register hypercalls */
>      virtio_ccw_register_hcalls();
> diff --git a/hw/s390x/s390-virtio.c b/hw/s390x/s390-virtio.c
> index 7adf92a..5b54af7 100644
> --- a/hw/s390x/s390-virtio.c
> +++ b/hw/s390x/s390-virtio.c
> @@ -36,6 +36,7 @@
> 
>  #include "hw/s390x/s390-virtio-bus.h"
>  #include "hw/s390x/sclp.h"
> +#include "hw/s390x/s390_flic.h"
>  #include "hw/s390x/s390-virtio.h"
> 
>  //#define DEBUG_S390
> @@ -251,6 +252,7 @@ static void s390_init(QEMUMachineInitArgs *args)
>      s390_sclp_init();
>      s390_init_ipl_dev(args->kernel_filename, args->kernel_cmdline,
>                        args->initrd_filename, ZIPL_FILENAME);
> +    s390_flic_init();
> 
>      /* register hypercalls */
>      s390_virtio_register_hcalls();
> diff --git a/include/hw/s390x/s390_flic.h b/include/hw/s390x/s390_flic.h
> new file mode 100644
> index 0000000..2b83f35
> --- /dev/null
> +++ b/include/hw/s390x/s390_flic.h
> @@ -0,0 +1,31 @@
> +/*
> + * QEMU S390x KVM floating interrupt controller (flic)
> + *
> + * Copyright 2013 IBM Corp.
> + * Author(s): Jens Freimann <jfrei@linux.vnet.ibm.com>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2 or (at
> + * your option) any later version. See the COPYING file in the top-level
> + * directory.
> + */
> +
> +#ifndef __KVM_S390_FLIC_H
> +#define __KVM_S390_FLIC_H
> +
> +#define TYPE_KVM_S390_FLIC "s390-flic"
> +#define KVM_S390_FLIC(obj) \
> +    OBJECT_CHECK(KVMS390FLICState, (obj), TYPE_KVM_S390_FLIC)
> +
> +typedef struct KVMS390FLICState {
> +    DeviceState parent_obj;
> +
> +    uint32_t fd;
> +} KVMS390FLICState;
> +
> +#ifdef CONFIG_KVM
> +void s390_flic_init(void);
> +#else
> +static inline void s390_flic_init(void) { }
> +#endif
> +
> +#endif /* __KVM_S390_FLIC_H */
> 


WARNING: multiple messages have this Message-ID (diff)
From: Christian Borntraeger <borntraeger@de.ibm.com>
To: Jens Freimann <jfrei@linux.vnet.ibm.com>
Cc: Thomas Huth <thuth@linux.vnet.ibm.com>,
	kvm@vger.kernel.org, Alexander Graf <agraf@suse.de>,
	qemu-devel@nongnu.org, Cornelia Huck <cornelia.huck@de.ibm.com>,
	Andreas Faerber <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH 2/2] s390x/kvm: implement floating-interrupt controller device
Date: Fri, 06 Sep 2013 15:24:23 +0200	[thread overview]
Message-ID: <5229D787.7040102@de.ibm.com> (raw)
In-Reply-To: <1378469970-62769-3-git-send-email-jfrei@linux.vnet.ibm.com>

On 06/09/13 14:19, Jens Freimann wrote:
> This patch implements a floating-interrupt controller device (flic)
> which interacts with the s390 flic kvm_device.
> 
> It provides functionality to:
>     * clear all pending floating interrupts in the kernel at device reset
>     * inject/retrieve interrupts into the kernel (used for migration)
> 
> Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
> Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>


> 
> ---
>  default-configs/s390x-softmmu.mak |   1 +
>  hw/intc/Makefile.objs             |   1 +
>  hw/intc/s390_flic.c               | 164 ++++++++++++++++++++++++++++++++++++++
>  hw/s390x/s390-virtio-ccw.c        |   8 +-
>  hw/s390x/s390-virtio.c            |   2 +
>  include/hw/s390x/s390_flic.h      |  31 +++++++
>  6 files changed, 206 insertions(+), 1 deletion(-)
> 
> diff --git a/default-configs/s390x-softmmu.mak b/default-configs/s390x-softmmu.mak
> index 81fbc68..d843dc0 100644
> --- a/default-configs/s390x-softmmu.mak
> +++ b/default-configs/s390x-softmmu.mak
> @@ -1,2 +1,3 @@
>  CONFIG_VIRTIO=y
>  CONFIG_SCLPCONSOLE=y
> +CONFIG_S390_FLIC=$(CONFIG_KVM)
> diff --git a/hw/intc/Makefile.objs b/hw/intc/Makefile.objs
> index 2851eed..b2305aa 100644
> --- a/hw/intc/Makefile.objs
> +++ b/hw/intc/Makefile.objs
> @@ -23,3 +23,4 @@ obj-$(CONFIG_OMAP) += omap_intc.o
>  obj-$(CONFIG_OPENPIC_KVM) += openpic_kvm.o
>  obj-$(CONFIG_SH4) += sh_intc.o
>  obj-$(CONFIG_XICS) += xics.o
> +obj-$(CONFIG_S390_FLIC) += s390_flic.o
> diff --git a/hw/intc/s390_flic.c b/hw/intc/s390_flic.c
> new file mode 100644
> index 0000000..9dfaafa
> --- /dev/null
> +++ b/hw/intc/s390_flic.c
> @@ -0,0 +1,164 @@
> +/*
> + * QEMU S390x KVM floating interrupt controller (flic)
> + *
> + * Copyright 2013 IBM Corp.
> + * Author(s): Jens Freimann <jfrei@linux.vnet.ibm.com>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2 or (at
> + * your option) any later version. See the COPYING file in the top-level
> + * directory.
> + */
> +
> +#include <sys/ioctl.h>
> +#include "hw/sysbus.h"
> +#include "sysemu/kvm.h"
> +#include "migration/qemu-file.h"
> +#include "hw/s390x/s390_flic.h"
> +
> +void s390_flic_init(void)
> +{
> +    DeviceState *dev;
> +
> +    if (kvm_enabled()) {
> +        dev = qdev_create(NULL, "s390-flic");
> +        object_property_add_child(qdev_get_machine(), "s390-flic",
> +                                  OBJECT(dev), NULL);
> +        qdev_init_nofail(dev);
> +    }
> +}
> +
> +static int flic_dequeue_irq(QEMUFile *f, struct kvm_s390_irq *s390irq,
> +                            KVMS390FLICState *flic)
> +{
> +    struct kvm_device_attr attr;
> +    int rc;
> +
> +    attr.group = KVM_DEV_FLIC_DEQUEUE;
> +    attr.addr = (uint64_t) s390irq;
> +
> +    rc = ioctl(flic->fd, KVM_GET_DEVICE_ATTR, &attr);
> +
> +    return rc ? -errno : 0;
> +}
> +
> +static int flic_enqueue_irq(QEMUFile *f, struct kvm_s390_irq *s390irq,
> +                            KVMS390FLICState *flic)
> +{
> +    int rc;
> +    struct kvm_device_attr attr;
> +
> +    attr.group = KVM_DEV_FLIC_ENQUEUE;
> +    attr.addr = (uint64_t) s390irq;
> +
> +    rc = ioctl(flic->fd, KVM_SET_DEVICE_ATTR, &attr);
> +
> +    return rc ? -errno : 0;
> +}
> +
> +/* Save pending floating interrupts. */
> +static void kvm_floating_interrupt_save(QEMUFile *f, void *opaque)
> +{
> +    struct kvm_s390_irq s390irq = {0};
> +    int r = 0;
> +
> +    while (!r) {
> +        r = flic_dequeue_irq(f, &s390irq, opaque);
> +        if (r == -ENODATA) {
> +            /* At end of list: write special marker */
> +            memset(&s390irq, 0, sizeof(s390irq));
> +            s390irq.type = 0xffffffff;
> +        }
> +        qemu_put_buffer(f, (uint8_t *) &s390irq, sizeof(s390irq));
> +    }
> +}
> +
> +/* Load pending floating interrupts. */
> +static int kvm_floating_interrupt_load(QEMUFile *f, void *opaque, int version_id)
> +{
> +    int r = 0;
> +    struct kvm_s390_irq s390irq = {0};
> +
> +    while (!r) {
> +        qemu_get_buffer(f, (uint8_t *) &s390irq, sizeof(s390irq));
> +        /* Watch for marker indicating end of list */
> +        if (s390irq.type == 0xffffffff) {
> +            return 0;
> +        }
> +        r = flic_enqueue_irq(f, &s390irq, (struct KVMS390FLICState *) opaque);
> +    }
> +
> +    return r;
> +}
> +
> +static void kvm_s390_flic_realize(DeviceState *dev, Error **errp)
> +{
> +    KVMS390FLICState *flic_state = KVM_S390_FLIC(dev);
> +    struct kvm_create_device cd = {0};
> +    int ret;
> +
> +    flic_state->fd = -1;
> +    if (!kvm_check_extension(kvm_state, KVM_CAP_DEVICE_CTRL)) {
> +        return;
> +    }
> +
> +    cd.type = KVM_DEV_TYPE_FLIC;
> +    ret = kvm_vm_ioctl(kvm_state, KVM_CREATE_DEVICE, &cd);
> +    if (ret < 0) {
> +        perror("flic: couldn't create kvm_device");
> +        return;
> +    }
> +    flic_state->fd = cd.fd;
> +
> +    /* Register savevm handler for floating interrupts */
> +    register_savevm(NULL, "floatingint", 0, 1, kvm_floating_interrupt_save,
> +                    kvm_floating_interrupt_load, (void *) flic_state);
> +}
> +
> +static void kvm_s390_flic_unrealize(DeviceState *dev, Error **errp)
> +{
> +    KVMS390FLICState *flic_state = KVM_S390_FLIC(dev);
> +
> +    unregister_savevm(DEVICE(flic_state), "floatingint", flic_state);
> +}
> +
> +static void kvm_s390_flic_reset(DeviceState *dev)
> +{
> +    KVMS390FLICState *flic = KVM_S390_FLIC(dev);
> +    struct kvm_device_attr attr;
> +    int rc = 0;
> +
> +    if (flic->fd == -1) {
> +        return;
> +    }
> +
> +    attr.group = KVM_DEV_FLIC_CLEAR_IRQS;
> +
> +    rc = ioctl(flic->fd, KVM_SET_DEVICE_ATTR, &attr);
> +    if (rc) {
> +        perror("flic: reset failed");
> +    }
> +}
> +
> +static void kvm_s390_flic_class_init(ObjectClass *oc, void *data)
> +{
> +    DeviceClass *dc = DEVICE_CLASS(oc);
> +
> +    dc->realize = kvm_s390_flic_realize;
> +    dc->unrealize = kvm_s390_flic_unrealize;
> +    dc->reset = kvm_s390_flic_reset;
> +    dc->no_user = 1;
> +}
> +
> +static const TypeInfo kvm_s390_flic_info = {
> +    .name          = TYPE_KVM_S390_FLIC,
> +    .parent        = TYPE_SYS_BUS_DEVICE,
> +    .instance_size = sizeof(KVMS390FLICState),
> +    .class_init    = kvm_s390_flic_class_init,
> +};
> +
> +static void kvm_s390_flic_register_types(void)
> +{
> +    type_register_static(&kvm_s390_flic_info);
> +}
> +
> +type_init(kvm_s390_flic_register_types)
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index 733d988..0d4f6ae 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -13,13 +13,14 @@
>  #include "exec/address-spaces.h"
>  #include "s390-virtio.h"
>  #include "hw/s390x/sclp.h"
> +#include "hw/s390x/s390_flic.h"
>  #include "ioinst.h"
>  #include "css.h"
>  #include "virtio-ccw.h"
> 
>  void io_subsystem_reset(void)
>  {
> -    DeviceState *css, *sclp;
> +    DeviceState *css, *sclp, *flic;
> 
>      css = DEVICE(object_resolve_path_type("", "virtual-css-bridge", NULL));
>      if (css) {
> @@ -30,6 +31,10 @@ void io_subsystem_reset(void)
>      if (sclp) {
>          qdev_reset_all(sclp);
>      }
> +    flic = DEVICE(object_resolve_path_type("", "s390-flic", NULL));
> +    if (flic) {
> +        qdev_reset_all(flic);
> +    }
>  }
> 
>  static int virtio_ccw_hcall_notify(const uint64_t *args)
> @@ -99,6 +104,7 @@ static void ccw_init(QEMUMachineInitArgs *args)
>      s390_sclp_init();
>      s390_init_ipl_dev(args->kernel_filename, args->kernel_cmdline,
>                        args->initrd_filename, "s390-ccw.img");
> +    s390_flic_init();
> 
>      /* register hypercalls */
>      virtio_ccw_register_hcalls();
> diff --git a/hw/s390x/s390-virtio.c b/hw/s390x/s390-virtio.c
> index 7adf92a..5b54af7 100644
> --- a/hw/s390x/s390-virtio.c
> +++ b/hw/s390x/s390-virtio.c
> @@ -36,6 +36,7 @@
> 
>  #include "hw/s390x/s390-virtio-bus.h"
>  #include "hw/s390x/sclp.h"
> +#include "hw/s390x/s390_flic.h"
>  #include "hw/s390x/s390-virtio.h"
> 
>  //#define DEBUG_S390
> @@ -251,6 +252,7 @@ static void s390_init(QEMUMachineInitArgs *args)
>      s390_sclp_init();
>      s390_init_ipl_dev(args->kernel_filename, args->kernel_cmdline,
>                        args->initrd_filename, ZIPL_FILENAME);
> +    s390_flic_init();
> 
>      /* register hypercalls */
>      s390_virtio_register_hcalls();
> diff --git a/include/hw/s390x/s390_flic.h b/include/hw/s390x/s390_flic.h
> new file mode 100644
> index 0000000..2b83f35
> --- /dev/null
> +++ b/include/hw/s390x/s390_flic.h
> @@ -0,0 +1,31 @@
> +/*
> + * QEMU S390x KVM floating interrupt controller (flic)
> + *
> + * Copyright 2013 IBM Corp.
> + * Author(s): Jens Freimann <jfrei@linux.vnet.ibm.com>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2 or (at
> + * your option) any later version. See the COPYING file in the top-level
> + * directory.
> + */
> +
> +#ifndef __KVM_S390_FLIC_H
> +#define __KVM_S390_FLIC_H
> +
> +#define TYPE_KVM_S390_FLIC "s390-flic"
> +#define KVM_S390_FLIC(obj) \
> +    OBJECT_CHECK(KVMS390FLICState, (obj), TYPE_KVM_S390_FLIC)
> +
> +typedef struct KVMS390FLICState {
> +    DeviceState parent_obj;
> +
> +    uint32_t fd;
> +} KVMS390FLICState;
> +
> +#ifdef CONFIG_KVM
> +void s390_flic_init(void);
> +#else
> +static inline void s390_flic_init(void) { }
> +#endif
> +
> +#endif /* __KVM_S390_FLIC_H */
> 

  reply	other threads:[~2013-09-06 13:24 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-06 12:19 [PATCH 0/2] s390x/kvm: implement floating interrupt controller Jens Freimann
2013-09-06 12:19 ` [Qemu-devel] " Jens Freimann
2013-09-06 12:19 ` [PATCH 1/2] linux-headers: update for s390 " Jens Freimann
2013-09-06 12:19   ` [Qemu-devel] " Jens Freimann
2013-09-06 12:23   ` Peter Maydell
2013-09-06 12:23     ` Peter Maydell
2013-09-06 12:34     ` Jens Freimann
2013-09-06 12:34       ` Jens Freimann
2013-09-06 12:32   ` Peter Maydell
2013-09-06 12:32     ` Peter Maydell
2013-09-06 12:41     ` Jens Freimann
2013-09-06 12:41       ` Jens Freimann
2013-09-06 13:18   ` Christian Borntraeger
2013-09-06 13:18     ` [Qemu-devel] " Christian Borntraeger
2013-09-06 12:19 ` [PATCH 2/2] s390x/kvm: implement floating-interrupt controller device Jens Freimann
2013-09-06 12:19   ` [Qemu-devel] " Jens Freimann
2013-09-06 13:24   ` Christian Borntraeger [this message]
2013-09-06 13:24     ` Christian Borntraeger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5229D787.7040102@de.ibm.com \
    --to=borntraeger@de.ibm.com \
    --cc=afaerber@suse.de \
    --cc=agraf@suse.de \
    --cc=cornelia.huck@de.ibm.com \
    --cc=jfrei@linux.vnet.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=qemu-devel@nongnu.org \
    --cc=thuth@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.