All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Andreas Färber" <afaerber@suse.de>
To: Jan Kiszka <jan.kiszka@web.de>
Cc: imammedo@redhat.com, gleb@redhat.com, qemu-devel@nongnu.org,
	anthony@codemonkey.ws, ehabkost@redhat.com
Subject: Re: [Qemu-devel] [PATCH RFC qom-cpu-next] apic: QOM'ify APICCommonState casts
Date: Sun, 28 Apr 2013 15:53:44 +0200	[thread overview]
Message-ID: <517D29E8.40507@suse.de> (raw)
In-Reply-To: <517D1E19.1030905@web.de>

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Am 28.04.2013 15:03, schrieb Jan Kiszka:
> On 2013-04-28 13:22, Andreas Färber wrote:
>> Necessary to change the name of ICCDevice's parent object field.
>> 
>> Signed-off-by: Andreas Färber <afaerber@suse.de> --- Could any of
>> the APIC experts please review whether I'm touching any hot
>> path? Not sure if this was a mix of pre- and post-QOM code or
>> intentional... Thanks.
> 
> How "hot" does it have to be before we notice the type check
> overhead? Did anyone already measure this, given that they are
> getting very common now?

Heh, if I had a conclusive benchmark I wouldn't ask. ;)

In general init, reset and MMIO were considered cold paths in this
regard. Timer and interrupt code paths by contrast I've usually tried
to spare.

> But none of the touched functions are used during normal operation
> when the KVM APIC is active. With emulated APIC, they are
> frequently used, of course.

Where in doubt, we could just use (APICCommonState *) or a macro
hiding that.

Andreas

>> hw/i386/kvm/apic.c       |  4 ++-- hw/intc/apic.c           | 20
>> +++++++++++--------- hw/intc/apic_common.c    | 10 +++++----- 
>> include/hw/cpu/icc_bus.h |  2 +- 4 files changed, 19
>> insertions(+), 17 deletions(-)
>> 
>> diff --git a/hw/i386/kvm/apic.c b/hw/i386/kvm/apic.c index
>> 8f80425..0fe31ae 100644 --- a/hw/i386/kvm/apic.c +++
>> b/hw/i386/kvm/apic.c @@ -27,7 +27,7 @@ static inline uint32_t
>> kvm_apic_get_reg(struct kvm_lapic_state *kapic,
>> 
>> void kvm_put_apic_state(DeviceState *d, struct kvm_lapic_state
>> *kapic) { -    APICCommonState *s = DO_UPCAST(APICCommonState,
>> busdev.qdev, d); +    APICCommonState *s = APIC_COMMON(d); int
>> i;
>> 
>> memset(kapic, 0, sizeof(*kapic)); @@ -53,7 +53,7 @@ void
>> kvm_put_apic_state(DeviceState *d, struct kvm_lapic_state
>> *kapic)
>> 
>> void kvm_get_apic_state(DeviceState *d, struct kvm_lapic_state
>> *kapic) { -    APICCommonState *s = DO_UPCAST(APICCommonState,
>> busdev.qdev, d); +    APICCommonState *s = APIC_COMMON(d); int i,
>> v;
>> 
>> s->id = kvm_apic_get_reg(kapic, 0x2) >> 24; diff --git
>> a/hw/intc/apic.c b/hw/intc/apic.c index 756dff0..f171620 100644 
>> --- a/hw/intc/apic.c +++ b/hw/intc/apic.c @@ -173,7 +173,7 @@
>> static void apic_local_deliver(APICCommonState *s, int vector)
>> 
>> void apic_deliver_pic_intr(DeviceState *d, int level) { -
>> APICCommonState *s = DO_UPCAST(APICCommonState, busdev.qdev, d); 
>> +    APICCommonState *s = APIC_COMMON(d);
>> 
>> if (level) { apic_local_deliver(s, APIC_LVT_LINT0); @@ -484,7
>> +484,7 @@ static void apic_startup(APICCommonState *s, int
>> vector_num)
>> 
>> void apic_sipi(DeviceState *d) { -    APICCommonState *s =
>> DO_UPCAST(APICCommonState, busdev.qdev, d); +    APICCommonState
>> *s = APIC_COMMON(d);
>> 
>> cpu_reset_interrupt(CPU(s->cpu), CPU_INTERRUPT_SIPI);
>> 
>> @@ -498,7 +498,7 @@ static void apic_deliver(DeviceState *d,
>> uint8_t dest, uint8_t dest_mode, uint8_t delivery_mode, uint8_t
>> vector_num, uint8_t trigger_mode) { -    APICCommonState *s =
>> DO_UPCAST(APICCommonState, busdev.qdev, d); +    APICCommonState
>> *s = APIC_COMMON(d); uint32_t deliver_bitmask[MAX_APIC_WORDS]; 
>> int dest_shorthand = (s->icr[0] >> 18) & 3; APICCommonState
>> *apic_iter; @@ -544,16 +544,18 @@ static void
>> apic_deliver(DeviceState *d, uint8_t dest, uint8_t dest_mode,
>> 
>> static bool apic_check_pic(APICCommonState *s) { -    if
>> (!apic_accept_pic_intr(&s->busdev.qdev) ||
>> !pic_get_output(isa_pic)) { +    DeviceState *dev = DEVICE(s); + 
>> +    if (!apic_accept_pic_intr(dev) || !pic_get_output(isa_pic))
>> { return false; } -    apic_deliver_pic_intr(&s->busdev.qdev,
>> 1); +    apic_deliver_pic_intr(dev, 1); return true; }
>> 
>> int apic_get_interrupt(DeviceState *d) { -    APICCommonState *s
>> = DO_UPCAST(APICCommonState, busdev.qdev, d); +
>> APICCommonState *s = APIC_COMMON(d); int intno;
>> 
>> /* if the APIC is installed or enabled, we let the 8259 handle
>> the @@ -587,7 +589,7 @@ int apic_get_interrupt(DeviceState *d)
>> 
>> int apic_accept_pic_intr(DeviceState *d) { -    APICCommonState
>> *s = DO_UPCAST(APICCommonState, busdev.qdev, d); +
>> APICCommonState *s = APIC_COMMON(d); uint32_t lvt0;
>> 
>> if (!s) @@ -666,7 +668,7 @@ static uint32_t apic_mem_readl(void
>> *opaque, hwaddr addr) if (!d) { return 0; } -    s =
>> DO_UPCAST(APICCommonState, busdev.qdev, d); +    s =
>> APIC_COMMON(d);
>> 
>> index = (addr >> 4) & 0xff; switch(index) { @@ -769,7 +771,7 @@
>> static void apic_mem_writel(void *opaque, hwaddr addr, uint32_t
>> val) if (!d) { return; } -    s = DO_UPCAST(APICCommonState,
>> busdev.qdev, d); +    s = APIC_COMMON(d);
>> 
>> trace_apic_mem_writel(addr, val);
>> 
>> diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c index
>> b03e904..0087a14 100644 --- a/hw/intc/apic_common.c +++
>> b/hw/intc/apic_common.c @@ -82,7 +82,7 @@ uint8_t
>> cpu_get_apic_tpr(DeviceState *d)
>> 
>> void apic_enable_tpr_access_reporting(DeviceState *d, bool
>> enable) { -    APICCommonState *s = DO_UPCAST(APICCommonState,
>> busdev.qdev, d); +    APICCommonState *s = APIC_COMMON(d); 
>> APICCommonClass *info = APIC_COMMON_GET_CLASS(s);
>> 
>> apic_report_tpr_access = enable; @@ -93,7 +93,7 @@ void
>> apic_enable_tpr_access_reporting(DeviceState *d, bool enable)
>> 
>> void apic_enable_vapic(DeviceState *d, hwaddr paddr) { -
>> APICCommonState *s = DO_UPCAST(APICCommonState, busdev.qdev, d); 
>> +    APICCommonState *s = APIC_COMMON(d); APICCommonClass *info =
>> APIC_COMMON_GET_CLASS(s);
>> 
>> s->vapic_paddr = paddr; @@ -103,7 +103,7 @@ void
>> apic_enable_vapic(DeviceState *d, hwaddr paddr) void
>> apic_handle_tpr_access_report(DeviceState *d, target_ulong ip, 
>> TPRAccess access) { -    APICCommonState *s =
>> DO_UPCAST(APICCommonState, busdev.qdev, d); +    APICCommonState
>> *s = APIC_COMMON(d);
>> 
>> vapic_report_tpr_access(s->vapic, CPU(s->cpu), ip, access); } @@
>> -172,7 +172,7 @@ bool apic_next_timer(APICCommonState *s, int64_t
>> current_time)
>> 
>> void apic_init_reset(DeviceState *d) { -    APICCommonState *s =
>> DO_UPCAST(APICCommonState, busdev.qdev, d); +    APICCommonState
>> *s = APIC_COMMON(d); int i;
>> 
>> if (!s) { @@ -215,7 +215,7 @@ void apic_designate_bsp(DeviceState
>> *d)
>> 
>> static void apic_reset_common(DeviceState *d) { -
>> APICCommonState *s = DO_UPCAST(APICCommonState, busdev.qdev, d); 
>> +    APICCommonState *s = APIC_COMMON(d); APICCommonClass *info =
>> APIC_COMMON_GET_CLASS(s); bool bsp;
>> 
>> diff --git a/include/hw/cpu/icc_bus.h b/include/hw/cpu/icc_bus.h 
>> index b550070..f2c8a50 100644 --- a/include/hw/cpu/icc_bus.h +++
>> b/include/hw/cpu/icc_bus.h @@ -51,7 +51,7 @@ typedef struct
>> ICCBus { */ typedef struct ICCDevice { /*< private >*/ -
>> DeviceState qdev; +    DeviceState parent_obj; /*< public >*/ }
>> ICCDevice;
>> 
>> 
> 
> 


- -- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.19 (GNU/Linux)

iQIcBAEBAgAGBQJRfSnoAAoJEPou0S0+fgE/NcgP/iJ99zuWVy+OG13Zr+gpGUu7
gL+GjPjKAo1QYTGBEtpB1g8veyXaVbDWCHzkGsitQRtIRqCJnwQcORcWes395J9N
ffy/fWUSwdzOdv4DP+hPoy8RaFdxKWr4JqUsoSLERM7vefQ86xieWvE7RW6Xcy+r
SDE4Qm67WWyGN5c875deF1/9LlT08vv0KCXzaqMLdm5y17c5td7h82JNNlYfYF9S
QeyPYOtWvEFR4uUaLqgoMbWpMjvobjt5G/tbSss1wfds9fiBM4nU+Blk51eF2N0v
VeNCO5NyNnQyiNR7znwYYnljNvg7Web9ITenCQGPj0eUDdAyb1kBwqCDZo5giqp4
ifvTVi4LAq0vCmBArKDeHpi0xZXPXDLm2QREdO80Qwnt9y2fieV3mMMTXl1X6vSp
R0dmGSbomgEoigQMXSHOdiz4M6CHphpUicG8/05op9Sjf5DVkfaDt7isvvzKifNL
K+vFogG3DLRyL6iw10H2B9A7e4mY/b6VCw+XvzhZa5iiZ7qa/ZVEt84uJQJNXxnv
Wd0rR5nlCdUJBq8IbDyJm80P+bnzgKU+Wfa4wOzxeDEWLJj4bRPdZd+I9mbFEgkf
rtseRM+vjooQhyTE6l/uphX94kzoOAVtwJefo9GXhhduZ26fwVepVsqH4q1Bie+G
xu50SmEmd2N4aw9VaRF9
=qCIU
-----END PGP SIGNATURE-----

  reply	other threads:[~2013-04-28 13:53 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-28 11:22 [Qemu-devel] [PATCH RFC qom-cpu-next] apic: QOM'ify APICCommonState casts Andreas Färber
2013-04-28 13:03 ` Jan Kiszka
2013-04-28 13:53   ` Andreas Färber [this message]
2013-04-28 14:13     ` Jan Kiszka
2013-04-29 10:29 ` Igor Mammedov
2013-04-29 11:30   ` 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=517D29E8.40507@suse.de \
    --to=afaerber@suse.de \
    --cc=anthony@codemonkey.ws \
    --cc=ehabkost@redhat.com \
    --cc=gleb@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=jan.kiszka@web.de \
    --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.