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 --]
next prev parent 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).