From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50377) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bkQ91-0004CS-3o for qemu-devel@nongnu.org; Thu, 15 Sep 2016 02:27:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bkQ8w-0004mS-MW for qemu-devel@nongnu.org; Thu, 15 Sep 2016 02:27:33 -0400 Received: from mx1.redhat.com ([209.132.183.28]:41290) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bkQ8w-0004mC-CS for qemu-devel@nongnu.org; Thu, 15 Sep 2016 02:27:30 -0400 References: <1473900213-8765-1-git-send-email-wanpeng.li@hotmail.com> From: Paolo Bonzini Message-ID: Date: Thu, 15 Sep 2016 08:27:24 +0200 MIME-Version: 1.0 In-Reply-To: <1473900213-8765-1-git-send-email-wanpeng.li@hotmail.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH] pc: apic: introduce APIC macro List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Wanpeng Li , kvm@vger.kernel.org, qemu-devel@nongnu.org Cc: Wanpeng Li , =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , "Michael S. Tsirkin" , Eduardo Habkost On 15/09/2016 02:43, Wanpeng Li wrote: > From: Wanpeng Li >=20 > Introduce a new APIC macro to replace APIC_COMMON macro in=20 > hw/intc/apic.c in order to capture access LAPIC in qemu=20 > even if LAPIC is emulated in kvm. >=20 > Suggested-by: Paolo Bonzini > Cc: Paolo Bonzini > Cc: Radim Kr=C4=8Dm=C3=A1=C5=99 > Cc: Michael S. Tsirkin > Cc: Eduardo Habkost > Signed-off-by: Wanpeng Li > --- > hw/intc/apic.c | 20 ++++++++++---------- > include/hw/i386/apic_internal.h | 4 ++++ > 2 files changed, 14 insertions(+), 10 deletions(-) >=20 > diff --git a/hw/intc/apic.c b/hw/intc/apic.c > index 45887d9..577f095 100644 > --- a/hw/intc/apic.c > +++ b/hw/intc/apic.c > @@ -163,7 +163,7 @@ static void apic_local_deliver(APICCommonState *s, = int vector) > =20 > void apic_deliver_pic_intr(DeviceState *dev, int level) > { > - APICCommonState *s =3D APIC_COMMON(dev); > + APICCommonState *s =3D APIC(dev); > =20 > if (level) { > apic_local_deliver(s, APIC_LVT_LINT0); > @@ -373,7 +373,7 @@ static void apic_update_irq(APICCommonState *s) > =20 > void apic_poll_irq(DeviceState *dev) > { > - APICCommonState *s =3D APIC_COMMON(dev); > + APICCommonState *s =3D APIC(dev); > =20 > apic_sync_vapic(s, SYNC_FROM_VAPIC); > apic_update_irq(s); > @@ -479,7 +479,7 @@ static void apic_startup(APICCommonState *s, int ve= ctor_num) > =20 > void apic_sipi(DeviceState *dev) > { > - APICCommonState *s =3D APIC_COMMON(dev); > + APICCommonState *s =3D APIC(dev); > =20 > cpu_reset_interrupt(CPU(s->cpu), CPU_INTERRUPT_SIPI); > =20 > @@ -493,7 +493,7 @@ static void apic_deliver(DeviceState *dev, uint8_t = dest, uint8_t dest_mode, > uint8_t delivery_mode, uint8_t vector_num, > uint8_t trigger_mode) > { > - APICCommonState *s =3D APIC_COMMON(dev); > + APICCommonState *s =3D APIC(dev); > uint32_t deliver_bitmask[MAX_APIC_WORDS]; > int dest_shorthand =3D (s->icr[0] >> 18) & 3; > APICCommonState *apic_iter; > @@ -550,7 +550,7 @@ static bool apic_check_pic(APICCommonState *s) > =20 > int apic_get_interrupt(DeviceState *dev) > { > - APICCommonState *s =3D APIC_COMMON(dev); > + APICCommonState *s =3D APIC(dev); > int intno; > =20 > /* if the APIC is installed or enabled, we let the 8259 handle the > @@ -584,7 +584,7 @@ int apic_get_interrupt(DeviceState *dev) > =20 > int apic_accept_pic_intr(DeviceState *dev) > { > - APICCommonState *s =3D APIC_COMMON(dev); > + APICCommonState *s =3D APIC(dev); > uint32_t lvt0; > =20 > if (!s) > @@ -663,7 +663,7 @@ static uint32_t apic_mem_readl(void *opaque, hwaddr= addr) > if (!dev) { > return 0; > } > - s =3D APIC_COMMON(dev); > + s =3D APIC(dev); > =20 > index =3D (addr >> 4) & 0xff; > switch(index) { > @@ -766,7 +766,7 @@ static void apic_mem_writel(void *opaque, hwaddr ad= dr, uint32_t val) > if (!dev) { > return; > } > - s =3D APIC_COMMON(dev); > + s =3D APIC(dev); > =20 > trace_apic_mem_writel(addr, val); > =20 > @@ -870,7 +870,7 @@ static const MemoryRegionOps apic_io_ops =3D { > =20 > static void apic_realize(DeviceState *dev, Error **errp) > { > - APICCommonState *s =3D APIC_COMMON(dev); > + APICCommonState *s =3D APIC(dev); > =20 > if (s->id >=3D MAX_APICS) { > error_setg(errp, "%s initialization failed. APIC ID %d is inva= lid", > @@ -889,7 +889,7 @@ static void apic_realize(DeviceState *dev, Error **= errp) > =20 > static void apic_unrealize(DeviceState *dev, Error **errp) > { > - APICCommonState *s =3D APIC_COMMON(dev); > + APICCommonState *s =3D APIC(dev); > =20 > timer_del(s->timer); > timer_free(s->timer); > diff --git a/include/hw/i386/apic_internal.h b/include/hw/i386/apic_int= ernal.h > index 06c4e9f..5e36016 100644 > --- a/include/hw/i386/apic_internal.h > +++ b/include/hw/i386/apic_internal.h > @@ -131,6 +131,10 @@ typedef struct APICCommonState APICCommonState; > #define APIC_COMMON_GET_CLASS(obj) \ > OBJECT_GET_CLASS(APICCommonClass, (obj), TYPE_APIC_COMMON) > =20 > +#define TYPE_APIC "apic" > +#define APIC(obj) \ > + OBJECT_CHECK(APICCommonState, (obj), TYPE_APIC) This should be in apic.c. Also please replace the other occurrence of "apic" in apic.c by TYPE_APIC. Thanks, Paolo > typedef struct APICCommonClass > { > DeviceClass parent_class; >=20