qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@web.de>
To: Anthony Liguori <aliguori@us.ibm.com>
Cc: kvm@vger.kernel.org, "Michael S. Tsirkin" <mst@redhat.com>,
	Marcelo Tosatti <mtosatti@redhat.com>,
	qemu-devel <qemu-devel@nongnu.org>,
	Blue Swirl <blauwirbel@gmail.com>, Avi Kivity <avi@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v6 06/18] apic: Factor out base class for KVM reuse
Date: Fri, 13 Jan 2012 23:19:36 +0100	[thread overview]
Message-ID: <4F10ADF8.1030405@web.de> (raw)
In-Reply-To: <4F109FA2.3090507@us.ibm.com>

[-- Attachment #1: Type: text/plain, Size: 5470 bytes --]

On 2012-01-13 22:18, Anthony Liguori wrote:
> On 01/13/2012 11:35 AM, Jan Kiszka wrote:
>> The KVM in-kernel APIC model will reuse parts of the user space model
>> while providing the same frontend view to guest and most management
>> interfaces.
>>
>> Factor out an APIC base class to encapsulate those parts that will be
>> shared by user space and KVM model. This class offers callback hooks for
>> init, base/tpr setting, and the external NMI delivery that will be
>> set via APICCommonInfo super-structure and implemented specifically in
>> the subclasses.
>>
>> Furthermore, a common vmstate and a common list of qdev properties is
>> provided with the base clase. Also the reset handler will be shared.
>>
>> diff --git a/hw/apic_internal.h b/hw/apic_internal.h
>> new file mode 100644
>> index 0000000..2ca18d4
>> --- /dev/null
>> +++ b/hw/apic_internal.h
>> @@ -0,0 +1,121 @@
>> +/*
>> + *  APIC support - internal interfaces
>> + *
>> + *  Copyright (c) 2004-2005 Fabrice Bellard
>> + *  Copyright (c) 2011      Jan Kiszka, Siemens AG
>> + *
>> + * This library is free software; you can redistribute it and/or
>> + * modify it under the terms of the GNU Lesser General Public
>> + * License as published by the Free Software Foundation; either
>> + * version 2 of the License, or (at your option) any later version.
>> + *
>> + * This library 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
>> + * Lesser General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU Lesser General Public
>> + * License along with this library; if not,
>> see<http://www.gnu.org/licenses/>
>> + */
>> +#ifndef QEMU_APIC_INTERNAL_H
>> +#define QEMU_APIC_INTERNAL_H
>> +
>> +#include "memory.h"
>> +#include "sysbus.h"
>> +#include "qemu-timer.h"
>> +
>> +/* APIC Local Vector Table */
>> +#define APIC_LVT_TIMER                  0
>> +#define APIC_LVT_THERMAL                1
>> +#define APIC_LVT_PERFORM                2
>> +#define APIC_LVT_LINT0                  3
>> +#define APIC_LVT_LINT1                  4
>> +#define APIC_LVT_ERROR                  5
>> +#define APIC_LVT_NB                     6
>> +
>> +/* APIC delivery modes */
>> +#define APIC_DM_FIXED                   0
>> +#define APIC_DM_LOWPRI                  1
>> +#define APIC_DM_SMI                     2
>> +#define APIC_DM_NMI                     4
>> +#define APIC_DM_INIT                    5
>> +#define APIC_DM_SIPI                    6
>> +#define APIC_DM_EXTINT                  7
>> +
>> +/* APIC destination mode */
>> +#define APIC_DESTMODE_FLAT              0xf
>> +#define APIC_DESTMODE_CLUSTER           1
>> +
>> +#define APIC_TRIGGER_EDGE               0
>> +#define APIC_TRIGGER_LEVEL              1
>> +
>> +#define APIC_LVT_TIMER_PERIODIC         (1<<17)
>> +#define APIC_LVT_MASKED                 (1<<16)
>> +#define APIC_LVT_LEVEL_TRIGGER          (1<<15)
>> +#define APIC_LVT_REMOTE_IRR             (1<<14)
>> +#define APIC_INPUT_POLARITY             (1<<13)
>> +#define APIC_SEND_PENDING               (1<<12)
>> +
>> +#define ESR_ILLEGAL_ADDRESS (1<<  7)
>> +
>> +#define APIC_SV_DIRECTED_IO             (1<<12)
>> +#define APIC_SV_ENABLE                  (1<<8)
>> +
>> +#define MAX_APICS 255
>> +
>> +#define MSI_SPACE_SIZE                  0x100000
>> +
>> +typedef struct APICCommonState APICCommonState;
>> +
>> +struct APICCommonState {
>> +    SysBusDevice busdev;
>> +    MemoryRegion io_memory;
>> +    void *cpu_env;
>> +    uint32_t apicbase;
>> +    uint8_t id;
>> +    uint8_t arb_id;
>> +    uint8_t tpr;
>> +    uint32_t spurious_vec;
>> +    uint8_t log_dest;
>> +    uint8_t dest_mode;
>> +    uint32_t isr[8];  /* in service register */
>> +    uint32_t tmr[8];  /* trigger mode register */
>> +    uint32_t irr[8]; /* interrupt request register */
>> +    uint32_t lvt[APIC_LVT_NB];
>> +    uint32_t esr; /* error register */
>> +    uint32_t icr[2];
>> +
>> +    uint32_t divide_conf;
>> +    int count_shift;
>> +    uint32_t initial_count;
>> +    int64_t initial_count_load_time;
>> +    int64_t next_time;
>> +    int idx;
>> +    QEMUTimer *timer;
>> +    int sipi_vector;
>> +    int wait_for_sipi;
>> +};
>> +
>> +typedef struct APICCommonInfo APICCommonInfo;
>> +
>> +struct APICCommonInfo {
>> +    SysBusDeviceInfo busdev;
>> +    void (*init)(APICCommonState *s);
>> +    void (*set_base)(APICCommonState *s, uint64_t val);
>> +    void (*set_tpr)(APICCommonState *s, uint8_t val);
>> +    void (*external_nmi)(APICCommonState *s);
>> +};
>> +
>> +#define APIC_VMSTATE_VERSION 3
>> +
>> +extern const VMStateDescription vmstate_apic_common;
>> +
>> +#define APIC_PROPERTIES_COMMON(cont_type, cont_var)         \
>> +    DEFINE_PROP_UINT8("id", cont_type, cont_var.id, -1),    \
>> +    DEFINE_PROP_PTR("cpu_env", cont_type, cont_var.cpu_env)
>> +
>> +void apic_report_irq_delivered(int delivered);
>> +void apic_reset_common(DeviceState *d);
>> +int apic_init_common(SysBusDevice *d);
> 
> I think you want to introduce an apic_qdev_register(APICCommonInfo *). 
> Then you can set info->qdev.vmsd = &vmstate_apic_common and avoid having
> to make it extern.

Yep. Will also help with other common settings.

Jan


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 262 bytes --]

  reply	other threads:[~2012-01-13 22:19 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-13 17:34 [Qemu-devel] [PATCH v6 00/18] uq/master: Introduce basic irqchip support Jan Kiszka
2012-01-13 17:34 ` [Qemu-devel] [PATCH v6 01/18] msi: Generalize msix_supported to msi_supported Jan Kiszka
2012-01-13 17:34 ` [Qemu-devel] [PATCH v6 02/18] kvm: Move kvmclock into hw/kvm folder Jan Kiszka
2012-01-13 17:34 ` [Qemu-devel] [PATCH v6 03/18] apic: Stop timer on reset Jan Kiszka
2012-01-13 17:34 ` [Qemu-devel] [PATCH v6 04/18] apic: Inject external NMI events via LINT1 Jan Kiszka
2012-01-13 17:35 ` [Qemu-devel] [PATCH v6 05/18] apic: Introduce apic_report_irq_delivered Jan Kiszka
2012-01-13 17:35 ` [Qemu-devel] [PATCH v6 06/18] apic: Factor out base class for KVM reuse Jan Kiszka
2012-01-13 21:18   ` Anthony Liguori
2012-01-13 22:19     ` Jan Kiszka [this message]
2012-01-13 17:35 ` [Qemu-devel] [PATCH v6 07/18] apic: Open-code timer save/restore Jan Kiszka
2012-01-13 17:35 ` [Qemu-devel] [PATCH v6 08/18] i8259: Completely privatize PicState Jan Kiszka
2012-01-13 17:35 ` [Qemu-devel] [PATCH v6 09/18] i8259: Factor out base class for KVM reuse Jan Kiszka
2012-01-13 21:19   ` Anthony Liguori
2012-01-13 17:35 ` [Qemu-devel] [PATCH v6 10/18] ioapic: Drop post-load irr initialization Jan Kiszka
2012-01-13 17:35 ` [Qemu-devel] [PATCH v6 11/18] ioapic: Factor out base class for KVM reuse Jan Kiszka
2012-01-13 17:35 ` [Qemu-devel] [PATCH v6 12/18] memory: Introduce memory_region_init_reservation Jan Kiszka
2012-01-13 17:35 ` [Qemu-devel] [PATCH v6 13/18] kvm: Introduce core services for in-kernel irqchip support Jan Kiszka
2012-01-13 17:35 ` [Qemu-devel] [PATCH v6 14/18] kvm: x86: Establish IRQ0 override control Jan Kiszka
2012-01-13 17:35 ` [Qemu-devel] [PATCH v6 15/18] kvm: x86: Add user space part for in-kernel APIC Jan Kiszka
2012-01-13 17:35 ` [Qemu-devel] [PATCH v6 16/18] kvm: x86: Add user space part for in-kernel i8259 Jan Kiszka
2012-01-13 17:35 ` [Qemu-devel] [PATCH v6 17/18] kvm: x86: Add user space part for in-kernel IOAPIC Jan Kiszka
2012-01-13 17:35 ` [Qemu-devel] [PATCH v6 18/18] kvm: Arm in-kernel irqchip support Jan Kiszka
2012-01-13 18:49   ` Peter Maydell
2012-01-13 19:04     ` Jan Kiszka
2012-01-13 19:36       ` Andreas Färber

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=4F10ADF8.1030405@web.de \
    --to=jan.kiszka@web.de \
    --cc=aliguori@us.ibm.com \
    --cc=avi@redhat.com \
    --cc=blauwirbel@gmail.com \
    --cc=kvm@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=mtosatti@redhat.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).