From: Eduardo Habkost <ehabkost@redhat.com>
To: "Radim Krčmář" <rkrcmar@redhat.com>
Cc: qemu-devel@nongnu.org, Peter Xu <peterx@redhat.com>,
Igor Mammedov <imammedo@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Richard Henderson <rth@twiddle.net>,
"Michael S. Tsirkin" <mst@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v3 1/8] apic: add global apic_get_class()
Date: Mon, 3 Oct 2016 13:03:33 -0300 [thread overview]
Message-ID: <20161003160333.GD3877@thinpad.lan.raisama.net> (raw)
In-Reply-To: <20160930161013.9832-2-rkrcmar@redhat.com>
On Fri, Sep 30, 2016 at 06:10:06PM +0200, Radim Krčmář wrote:
> Every configuration has only up to one APIC class and we'll be extending
> the class with a function that can be called without an instanced
> object, so a direct access to the class is convenient.
>
> This patch will break compilation if some code uses apic_get_class()
> with CONFIG_USER_ONLY.
>
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
> ---
> v2: assert() instead of error_report() and exit() [Peter]
> v3: completely rewrite the mechanism [Eduardo]
>
> It still looks horrible, so I'll be glad for any advice.
> And what is CONFIG_USER_ONLY?
> ---
> hw/intc/apic_common.c | 1 +
> include/hw/i386/apic_internal.h | 2 ++
> target-i386/cpu.c | 14 +++++++++++---
> 3 files changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c
> index 14ac43c18666..8d01c9c8750e 100644
> --- a/hw/intc/apic_common.c
> +++ b/hw/intc/apic_common.c
> @@ -18,6 +18,7 @@
> * License along with this library; if not, see <http://www.gnu.org/licenses/>
> */
> #include "qemu/osdep.h"
> +#include "qemu/error-report.h"
> #include "qapi/error.h"
> #include "qemu-common.h"
> #include "cpu.h"
> diff --git a/include/hw/i386/apic_internal.h b/include/hw/i386/apic_internal.h
> index 06c4e9f6f95b..286684857e9f 100644
> --- a/include/hw/i386/apic_internal.h
> +++ b/include/hw/i386/apic_internal.h
> @@ -222,4 +222,6 @@ static inline int apic_get_bit(uint32_t *tab, int index)
> return !!(tab[i] & mask);
> }
>
> +APICCommonClass *apic_get_class(void);
> +
> #endif /* QEMU_APIC_INTERNAL_H */
> diff --git a/target-i386/cpu.c b/target-i386/cpu.c
> index 333309b9a70e..6acf9c3c2372 100644
> --- a/target-i386/cpu.c
> +++ b/target-i386/cpu.c
> @@ -2845,9 +2845,8 @@ static void mce_init(X86CPU *cpu)
> }
>
> #ifndef CONFIG_USER_ONLY
> -static void x86_cpu_apic_create(X86CPU *cpu, Error **errp)
> +APICCommonClass *apic_get_class(void)
> {
> - APICCommonState *apic;
> const char *apic_type = "apic";
>
> if (kvm_apic_in_kernel()) {
> @@ -2856,7 +2855,16 @@ static void x86_cpu_apic_create(X86CPU *cpu, Error **errp)
> apic_type = "xen-apic";
> }
>
> - cpu->apic_state = DEVICE(object_new(apic_type));
> + return APIC_COMMON_CLASS(object_class_by_name(apic_type));
> +}
> +
> +static void x86_cpu_apic_create(X86CPU *cpu, Error **errp)
> +{
> + APICCommonState *apic;
> + ObjectClass *apic_object_class = OBJECT_CLASS(apic_get_class());
> +
> + assert(apic_object_class);
> + cpu->apic_state = DEVICE(object_new_with_type(apic_object_class->type));
ObjectClass::type is private. I believe the common idiom is
object_new(object_class_get_name(c)).
Except for that, I believe the interface is OK and matches the
existing logic. We can always make it better later, if
appropriate.
(e.g. I wonder if we could have a container object for all APICs
(icc-bus?), and move the send_msi() method and the
apic_get_class() logic to it).
>
> object_property_add_child(OBJECT(cpu), "lapic",
> OBJECT(cpu->apic_state), &error_abort);
> --
> 2.10.0
>
--
Eduardo
next prev parent reply other threads:[~2016-10-03 16:03 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-30 16:10 [Qemu-devel] [PATCH v3 0/8] intel_iommu: fix EIM Radim Krčmář
2016-09-30 16:10 ` [Qemu-devel] [PATCH v3 1/8] apic: add global apic_get_class() Radim Krčmář
2016-10-03 16:03 ` Eduardo Habkost [this message]
2016-10-04 10:59 ` Igor Mammedov
2016-10-04 13:38 ` Radim Krčmář
2016-10-04 16:14 ` Eduardo Habkost
2016-09-30 16:10 ` [Qemu-devel] [PATCH v3 2/8] apic: add send_msi() to APICCommonClass Radim Krčmář
2016-10-04 11:06 ` Igor Mammedov
2016-09-30 16:10 ` [Qemu-devel] [PATCH v3 3/8] intel_iommu: pass whole remapped addresses to apic Radim Krčmář
2016-10-04 11:17 ` Igor Mammedov
2016-10-08 5:24 ` Peter Xu
2016-10-09 20:47 ` Michael S. Tsirkin
2016-10-09 22:46 ` Peter Xu
2016-09-30 16:10 ` [Qemu-devel] [PATCH v3 4/8] intel_iommu: redo configuraton check in realize Radim Krčmář
2016-10-04 11:40 ` Igor Mammedov
2016-09-30 16:10 ` [Qemu-devel] [PATCH v3 5/8] intel_iommu: add OnOffAuto intr_eim as "eim" property Radim Krčmář
2016-10-04 12:34 ` Igor Mammedov
2016-09-30 16:10 ` [Qemu-devel] [PATCH v3 6/8] intel_iommu: reject broken EIM Radim Krčmář
2016-10-04 13:43 ` Igor Mammedov
2016-09-30 16:10 ` [Qemu-devel] [PATCH v3 7/8] intel_iommu: keep buggy EIM enabled in 2.7 machine type Radim Krčmář
2016-10-04 12:18 ` Igor Mammedov
2016-10-04 13:48 ` Radim Krčmář
2016-09-30 16:10 ` [Qemu-devel] [PATCH v3 8/8] target-i386/kvm: cache the return value of kvm_enable_x2apic() Radim Krčmář
2016-10-04 11:33 ` Igor Mammedov
2016-10-04 13:45 ` Radim Krčmář
2016-09-30 17:22 ` [Qemu-devel] [PATCH v3 0/8] intel_iommu: fix EIM no-reply
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=20161003160333.GD3877@thinpad.lan.raisama.net \
--to=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rkrcmar@redhat.com \
--cc=rth@twiddle.net \
/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.