Message ID | 20101105220128.26044.11658.stgit@s20.home |
---|---|
State | New |
Headers | show |
On 11/05/2010 05:01 PM, Alex Williamson wrote: > local_apics are allocated sequentially and never removed, so > we can stop any iterations that go to MAX_APICS as soon as we > hit the first NULL. Looking at a small guest running a virtio-net > workload with oprofile, this drops apic_get_delivery_bitmask() > from #3 in the profile to down in the noise. > > Signed-off-by: Alex Williamson<alex.williamson@redhat.com> > Applied. Thanks. Regards, Anthony LIguori > --- > > hw/apic.c | 4 ++++ > 1 files changed, 4 insertions(+), 0 deletions(-) > > diff --git a/hw/apic.c b/hw/apic.c > index 63d62c7..5f4a87c 100644 > --- a/hw/apic.c > +++ b/hw/apic.c > @@ -437,6 +437,8 @@ static int apic_find_dest(uint8_t dest) > apic = local_apics[i]; > if (apic&& apic->id == dest) > return i; > + if (!apic) > + break; > } > > return -1; > @@ -472,6 +474,8 @@ static void apic_get_delivery_bitmask(uint32_t *deliver_bitmask, > set_bit(deliver_bitmask, i); > } > } > + } else { > + break; > } > } > } > > > >
diff --git a/hw/apic.c b/hw/apic.c index 63d62c7..5f4a87c 100644 --- a/hw/apic.c +++ b/hw/apic.c @@ -437,6 +437,8 @@ static int apic_find_dest(uint8_t dest) apic = local_apics[i]; if (apic && apic->id == dest) return i; + if (!apic) + break; } return -1; @@ -472,6 +474,8 @@ static void apic_get_delivery_bitmask(uint32_t *deliver_bitmask, set_bit(deliver_bitmask, i); } } + } else { + break; } } }
local_apics are allocated sequentially and never removed, so we can stop any iterations that go to MAX_APICS as soon as we hit the first NULL. Looking at a small guest running a virtio-net workload with oprofile, this drops apic_get_delivery_bitmask() from #3 in the profile to down in the noise. Signed-off-by: Alex Williamson <alex.williamson@redhat.com> --- hw/apic.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-)