All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Maydell <peter.maydell@linaro.org>
To: "Andreas Färber" <afaerber@suse.de>
Cc: qemu-devel@nongnu.org, kvmarm@lists.cs.columbia.edu,
	kvm@vger.kernel.org, patches@linaro.org
Subject: Re: [Qemu-devel] [RFC v2 4/6] hw/kvm/arm_gic: Implement support for KVM in-kernel ARM GIC
Date: Wed, 10 Oct 2012 18:35:19 +0100	[thread overview]
Message-ID: <CAFEAcA96Sjm3Nmy6HyA3j9Er+MzPB75DBoSmZhqWp87NKTbA3g@mail.gmail.com> (raw)
In-Reply-To: <5075AF29.30509@suse.de>

On 10 October 2012 18:23, Andreas Färber <afaerber@suse.de> wrote:
> Am 10.10.2012 17:07, schrieb Peter Maydell:
>> Implement support for using the KVM in-kernel GIC for ARM.
>>
>> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
>> ---
>>  hw/a15mpcore.c       |    8 ++-
>>  hw/arm/Makefile.objs |    1 +
>>  hw/kvm/arm_gic.c     |  162 ++++++++++++++++++++++++++++++++++++++++++++++++++
>>  3 files changed, 170 insertions(+), 1 deletion(-)
>>  create mode 100644 hw/kvm/arm_gic.c
>>
>> diff --git a/hw/a15mpcore.c b/hw/a15mpcore.c
>> index fc0a02a..a37fc61 100644
>> --- a/hw/a15mpcore.c
>> +++ b/hw/a15mpcore.c
>> @@ -19,6 +19,7 @@
>>   */
>>
>>  #include "sysbus.h"
>> +#include "kvm.h"
>>
>>  /* A15MP private memory region.  */
>>
>> @@ -41,7 +42,12 @@ static int a15mp_priv_init(SysBusDevice *dev)
>>      A15MPPrivState *s = FROM_SYSBUS(A15MPPrivState, dev);
>>      SysBusDevice *busdev;
>>
>> -    s->gic = qdev_create(NULL, "arm_gic");
>> +    if (kvm_irqchip_in_kernel()) {
>> +        s->gic = qdev_create(NULL, "kvm-arm_gic");
>> +    } else {
>> +        s->gic = qdev_create(NULL, "arm_gic");
>> +    }
>
> You could follow x86 more closely by just selecting apic_type. (Then if
> we drop/change qdev_create() at some point it's one change less.)

Good idea.

>
>> +
>>      qdev_prop_set_uint32(s->gic, "num-cpu", s->num_cpu);
>>      qdev_prop_set_uint32(s->gic, "num-irq", s->num_irq);
>>      qdev_prop_set_uint32(s->gic, "revision", 2);
> [...]
>> diff --git a/hw/kvm/arm_gic.c b/hw/kvm/arm_gic.c
>> new file mode 100644
>> index 0000000..3ec538d
>> --- /dev/null
>> +++ b/hw/kvm/arm_gic.c
>> @@ -0,0 +1,162 @@
>> +/*
>> + * ARM Generic Interrupt Controller using KVM in-kernel support
>> + *
>> + * Copyright (c) 2012 Linaro Limited
>> + * Written by Peter Maydell
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License as published by
>> + * the Free Software Foundation, either version 2 of the License, or
>> + * (at your option) any later version.
>> + *
>> + * This program is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> + * GNU General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU General Public License along
>> + * with this program; if not, see <http://www.gnu.org/licenses/>.
>> + */
>> +
>> +#include "hw/sysbus.h"
>> +#include "kvm.h"
>> +#include "hw/arm_gic_internal.h"
>> +
>> +#define TYPE_KVM_ARM_GIC "kvm-arm_gic"
>
> "kvm-arm-gic"?

I was trying to follow arm_gic but yes, I guess it's better
to go with the recommended style (which is all-hyphens, right?)

>> +#define KVM_ARM_GIC(obj) \
>> +     OBJECT_CHECK(gic_state, (obj), TYPE_KVM_ARM_GIC)
>> +#define KVM_ARM_GIC_CLASS(klass) \
>> +     OBJECT_CLASS_CHECK(KVMARMGICClass, (klass), TYPE_KVM_ARM_GIC)
>> +#define KVM_ARM_GIC_GET_CLASS(obj) \
>> +     OBJECT_GET_CLASS(KVMARMGICClass, (obj), TYPE_KVM_ARM_GIC)
>> +
>> +typedef struct KVMARMGICClass {
>> +    ARMGICCommonClass parent_class;
>> +    int (*parent_init)(SysBusDevice *dev);
>> +    void (*parent_reset)(DeviceState *dev);
>> +} KVMARMGICClass;
>> +
>> +static void kvm_arm_gic_set_irq(void *opaque, int irq, int level)
>> +{
>> +    /* Meaning of the 'irq' parameter:
>> +     *  [0..N-1] : external interrupts
>> +     *  [N..N+31] : PPI (internal) interrupts for CPU 0
>> +     *  [N+32..N+63] : PPI (internal interrupts for CPU 1
>> +     *  ...
>> +     * Convert this to the kernel's desired encoding, which
>> +     * has separate fields in the irq number for type,
>> +     * CPU number and interrupt number.
>> +     */
>> +    gic_state *s = (gic_state *)opaque;
>
> You don't happen to have time to clean up gic_state -> GICState before
> spreading its use? ;)

I can submit a patch if you like...

> [...]
>> +static TypeInfo arm_gic_info = {
>
> static const

Yep.

>> +    .name = TYPE_KVM_ARM_GIC,
>> +    .parent = TYPE_ARM_GIC_COMMON,
>> +    .instance_size = sizeof(gic_state),
>> +    .class_init = kvm_arm_gic_class_init,
>> +    .class_size = sizeof(KVMARMGICClass),
>> +};
>> +
>> +static void arm_gic_register_types(void)
>
> kvm_arm_gic_register_types?

Oops, yes, cut-n-pasto.

-- PMM

WARNING: multiple messages have this Message-ID (diff)
From: Peter Maydell <peter.maydell@linaro.org>
To: "Andreas Färber" <afaerber@suse.de>
Cc: patches@linaro.org, qemu-devel@nongnu.org, kvm@vger.kernel.org,
	kvmarm@lists.cs.columbia.edu
Subject: Re: [Qemu-devel] [RFC v2 4/6] hw/kvm/arm_gic: Implement support for KVM in-kernel ARM GIC
Date: Wed, 10 Oct 2012 18:35:19 +0100	[thread overview]
Message-ID: <CAFEAcA96Sjm3Nmy6HyA3j9Er+MzPB75DBoSmZhqWp87NKTbA3g@mail.gmail.com> (raw)
In-Reply-To: <5075AF29.30509@suse.de>

On 10 October 2012 18:23, Andreas Färber <afaerber@suse.de> wrote:
> Am 10.10.2012 17:07, schrieb Peter Maydell:
>> Implement support for using the KVM in-kernel GIC for ARM.
>>
>> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
>> ---
>>  hw/a15mpcore.c       |    8 ++-
>>  hw/arm/Makefile.objs |    1 +
>>  hw/kvm/arm_gic.c     |  162 ++++++++++++++++++++++++++++++++++++++++++++++++++
>>  3 files changed, 170 insertions(+), 1 deletion(-)
>>  create mode 100644 hw/kvm/arm_gic.c
>>
>> diff --git a/hw/a15mpcore.c b/hw/a15mpcore.c
>> index fc0a02a..a37fc61 100644
>> --- a/hw/a15mpcore.c
>> +++ b/hw/a15mpcore.c
>> @@ -19,6 +19,7 @@
>>   */
>>
>>  #include "sysbus.h"
>> +#include "kvm.h"
>>
>>  /* A15MP private memory region.  */
>>
>> @@ -41,7 +42,12 @@ static int a15mp_priv_init(SysBusDevice *dev)
>>      A15MPPrivState *s = FROM_SYSBUS(A15MPPrivState, dev);
>>      SysBusDevice *busdev;
>>
>> -    s->gic = qdev_create(NULL, "arm_gic");
>> +    if (kvm_irqchip_in_kernel()) {
>> +        s->gic = qdev_create(NULL, "kvm-arm_gic");
>> +    } else {
>> +        s->gic = qdev_create(NULL, "arm_gic");
>> +    }
>
> You could follow x86 more closely by just selecting apic_type. (Then if
> we drop/change qdev_create() at some point it's one change less.)

Good idea.

>
>> +
>>      qdev_prop_set_uint32(s->gic, "num-cpu", s->num_cpu);
>>      qdev_prop_set_uint32(s->gic, "num-irq", s->num_irq);
>>      qdev_prop_set_uint32(s->gic, "revision", 2);
> [...]
>> diff --git a/hw/kvm/arm_gic.c b/hw/kvm/arm_gic.c
>> new file mode 100644
>> index 0000000..3ec538d
>> --- /dev/null
>> +++ b/hw/kvm/arm_gic.c
>> @@ -0,0 +1,162 @@
>> +/*
>> + * ARM Generic Interrupt Controller using KVM in-kernel support
>> + *
>> + * Copyright (c) 2012 Linaro Limited
>> + * Written by Peter Maydell
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License as published by
>> + * the Free Software Foundation, either version 2 of the License, or
>> + * (at your option) any later version.
>> + *
>> + * This program is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> + * GNU General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU General Public License along
>> + * with this program; if not, see <http://www.gnu.org/licenses/>.
>> + */
>> +
>> +#include "hw/sysbus.h"
>> +#include "kvm.h"
>> +#include "hw/arm_gic_internal.h"
>> +
>> +#define TYPE_KVM_ARM_GIC "kvm-arm_gic"
>
> "kvm-arm-gic"?

I was trying to follow arm_gic but yes, I guess it's better
to go with the recommended style (which is all-hyphens, right?)

>> +#define KVM_ARM_GIC(obj) \
>> +     OBJECT_CHECK(gic_state, (obj), TYPE_KVM_ARM_GIC)
>> +#define KVM_ARM_GIC_CLASS(klass) \
>> +     OBJECT_CLASS_CHECK(KVMARMGICClass, (klass), TYPE_KVM_ARM_GIC)
>> +#define KVM_ARM_GIC_GET_CLASS(obj) \
>> +     OBJECT_GET_CLASS(KVMARMGICClass, (obj), TYPE_KVM_ARM_GIC)
>> +
>> +typedef struct KVMARMGICClass {
>> +    ARMGICCommonClass parent_class;
>> +    int (*parent_init)(SysBusDevice *dev);
>> +    void (*parent_reset)(DeviceState *dev);
>> +} KVMARMGICClass;
>> +
>> +static void kvm_arm_gic_set_irq(void *opaque, int irq, int level)
>> +{
>> +    /* Meaning of the 'irq' parameter:
>> +     *  [0..N-1] : external interrupts
>> +     *  [N..N+31] : PPI (internal) interrupts for CPU 0
>> +     *  [N+32..N+63] : PPI (internal interrupts for CPU 1
>> +     *  ...
>> +     * Convert this to the kernel's desired encoding, which
>> +     * has separate fields in the irq number for type,
>> +     * CPU number and interrupt number.
>> +     */
>> +    gic_state *s = (gic_state *)opaque;
>
> You don't happen to have time to clean up gic_state -> GICState before
> spreading its use? ;)

I can submit a patch if you like...

> [...]
>> +static TypeInfo arm_gic_info = {
>
> static const

Yep.

>> +    .name = TYPE_KVM_ARM_GIC,
>> +    .parent = TYPE_ARM_GIC_COMMON,
>> +    .instance_size = sizeof(gic_state),
>> +    .class_init = kvm_arm_gic_class_init,
>> +    .class_size = sizeof(KVMARMGICClass),
>> +};
>> +
>> +static void arm_gic_register_types(void)
>
> kvm_arm_gic_register_types?

Oops, yes, cut-n-pasto.

-- PMM

  reply	other threads:[~2012-10-10 17:35 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-10 15:07 [RFC v2 0/6] QEMU: Support KVM on ARM Peter Maydell
2012-10-10 15:07 ` [Qemu-devel] " Peter Maydell
2012-10-10 15:07 ` [RFC v2 1/6] linux-headers: Add ARM KVM headers (not for upstream) Peter Maydell
2012-10-10 15:07   ` [Qemu-devel] " Peter Maydell
2012-10-10 15:07 ` [RFC v2 2/6] ARM: KVM: Add support for KVM on ARM architecture Peter Maydell
2012-10-10 15:07   ` [Qemu-devel] " Peter Maydell
2012-10-13  9:09   ` Blue Swirl
2012-10-13  9:09     ` Blue Swirl
2012-10-13 19:19     ` Peter Maydell
2012-10-13 19:19       ` Peter Maydell
2012-10-18 12:37     ` Peter Maydell
2012-10-18 12:37       ` Peter Maydell
2012-10-18 17:41   ` Jan Kiszka
2012-10-18 17:41     ` [Qemu-devel] " Jan Kiszka
2012-10-18 17:53     ` Peter Maydell
2012-10-18 17:53       ` [Qemu-devel] " Peter Maydell
2012-10-10 15:07 ` [RFC v2 3/6] hw/arm_gic: Add presave/postload hooks Peter Maydell
2012-10-10 15:07   ` [Qemu-devel] " Peter Maydell
2012-10-10 17:29   ` Andreas Färber
2012-10-10 17:29     ` Andreas Färber
2012-10-10 15:07 ` [RFC v2 4/6] hw/kvm/arm_gic: Implement support for KVM in-kernel ARM GIC Peter Maydell
2012-10-10 15:07   ` [Qemu-devel] " Peter Maydell
2012-10-10 17:23   ` Andreas Färber
2012-10-10 17:23     ` Andreas Färber
2012-10-10 17:35     ` Peter Maydell [this message]
2012-10-10 17:35       ` Peter Maydell
2012-10-10 15:07 ` [RFC v2 5/6] ARM KVM: save and load VFP registers from kernel Peter Maydell
2012-10-10 15:07   ` [Qemu-devel] " Peter Maydell
2012-10-10 15:07 ` [RFC v2 6/6] configure: Enable KVM on ARM Peter Maydell
2012-10-10 15:07   ` [Qemu-devel] " Peter Maydell

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=CAFEAcA96Sjm3Nmy6HyA3j9Er+MzPB75DBoSmZhqWp87NKTbA3g@mail.gmail.com \
    --to=peter.maydell@linaro.org \
    --cc=afaerber@suse.de \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=patches@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /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.