On Thu, Apr 28, 2011 at 5:24 PM, Ulrich Obergfell <uober...@redhat.com> wrote: > 'target_get_irq_delivered' and 'target_reset_irq_delivered' contain > entry addresses of functions that are utilized by update_irq() to > detect coalesced interrupts. apic code loads these pointers during > initialization.
I'm not so happy with this approach, but probably then the i386 dependencies can be removed from RTC and it can be compiled only once for all targets. > This change can be replaced if a generic feedback infrastructure to > track coalesced IRQs for periodic, clock providing devices becomes > available. > > Signed-off-by: Ulrich Obergfell <uober...@redhat.com> > --- > hw/apic.c | 4 ++++ > sysemu.h | 3 +++ > vl.c | 3 +++ > 3 files changed, 10 insertions(+), 0 deletions(-) > > diff --git a/hw/apic.c b/hw/apic.c > index a45b57f..eb0f6d9 100644 > --- a/hw/apic.c > +++ b/hw/apic.c > @@ -24,6 +24,7 @@ > #include "sysbus.h" > #include "trace.h" > #include "kvm.h" > +#include "sysemu.h" > > /* APIC Local Vector Table */ > #define APIC_LVT_TIMER 0 > @@ -1143,6 +1144,9 @@ static SysBusDeviceInfo apic_info = { > > static void apic_register_devices(void) > { > + target_get_irq_delivered = apic_get_irq_delivered; > + target_reset_irq_delivered = apic_reset_irq_delivered; > + > sysbus_register_withprop(&apic_info); > } > > diff --git a/sysemu.h b/sysemu.h > index 07d85cd..75b0139 100644 > --- a/sysemu.h > +++ b/sysemu.h > @@ -98,6 +98,9 @@ int qemu_savevm_state_complete(Monitor *mon, QEMUFile *f); > void qemu_savevm_state_cancel(Monitor *mon, QEMUFile *f); > int qemu_loadvm_state(QEMUFile *f); > > +extern int (*target_get_irq_delivered)(void); > +extern void (*target_reset_irq_delivered)(void); > + > /* SLIRP */ > void do_info_slirp(Monitor *mon); > > diff --git a/vl.c b/vl.c > index 0c24e07..7bab315 100644 > --- a/vl.c > +++ b/vl.c > @@ -233,6 +233,9 @@ const char *prom_envs[MAX_PROM_ENVS]; > const char *nvram = NULL; > int boot_menu; > > +int (*target_get_irq_delivered)(void) = 0; > +void (*target_reset_irq_delivered)(void) = 0; Instead of initializing with 0 (should be actually NULL in C), please define stub functions, which are used by default. Then the users don't need to check for NULL pointers.