From: Gleb Natapov <gleb@redhat.com>
To: Yang Zhang <yang.z.zhang@intel.com>
Cc: kvm@vger.kernel.org
Subject: Re: [PATCH v2] KVM: Call kvm_apic_match_dest() to check destination vcpu
Date: Thu, 4 Apr 2013 22:58:51 +0300 [thread overview]
Message-ID: <20130404195851.GA540@redhat.com> (raw)
In-Reply-To: <20130403093437.GH3889@redhat.com>
On Wed, Apr 03, 2013 at 12:34:37PM +0300, Gleb Natapov wrote:
> On Wed, Apr 03, 2013 at 08:47:58AM +0800, Yang Zhang wrote:
> > From: Yang Zhang <yang.z.zhang@Intel.com>
> >
> > For a given vcpu, kvm_apic_match_dest() will tell you whether
> > the vcpu in the destination list quickly. Drop kvm_calculate_eoi_exitmap()
> > and use kvm_apic_match_dest() instead.
> >
> > Signed-off-by: Yang Zhang <yang.z.zhang@Intel.com>
> Applied, thanks.
>
The patch does not compile, dropped.
> > ---
> > arch/x86/kvm/lapic.c | 47 -----------------------------------------------
> > arch/x86/kvm/lapic.h | 4 ----
> > virt/kvm/ioapic.c | 9 +++------
> > 3 files changed, 3 insertions(+), 57 deletions(-)
> >
> > diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
> > index a8e9369..e227474 100644
> > --- a/arch/x86/kvm/lapic.c
> > +++ b/arch/x86/kvm/lapic.c
> > @@ -145,53 +145,6 @@ static inline int kvm_apic_id(struct kvm_lapic *apic)
> > return (kvm_apic_get_reg(apic, APIC_ID) >> 24) & 0xff;
> > }
> >
> > -void kvm_calculate_eoi_exitmap(struct kvm_vcpu *vcpu,
> > - struct kvm_lapic_irq *irq,
> > - u64 *eoi_exit_bitmap)
> > -{
> > - struct kvm_lapic **dst;
> > - struct kvm_apic_map *map;
> > - unsigned long bitmap = 1;
> > - int i;
> > -
> > - rcu_read_lock();
> > - map = rcu_dereference(vcpu->kvm->arch.apic_map);
> > -
> > - if (unlikely(!map)) {
> > - __set_bit(irq->vector, (unsigned long *)eoi_exit_bitmap);
> > - goto out;
> > - }
> > -
> > - if (irq->dest_mode == 0) { /* physical mode */
> > - if (irq->delivery_mode == APIC_DM_LOWEST ||
> > - irq->dest_id == 0xff) {
> > - __set_bit(irq->vector,
> > - (unsigned long *)eoi_exit_bitmap);
> > - goto out;
> > - }
> > - dst = &map->phys_map[irq->dest_id & 0xff];
> > - } else {
> > - u32 mda = irq->dest_id << (32 - map->ldr_bits);
> > -
> > - dst = map->logical_map[apic_cluster_id(map, mda)];
> > -
> > - bitmap = apic_logical_id(map, mda);
> > - }
> > -
> > - for_each_set_bit(i, &bitmap, 16) {
> > - if (!dst[i])
> > - continue;
> > - if (dst[i]->vcpu == vcpu) {
> > - __set_bit(irq->vector,
> > - (unsigned long *)eoi_exit_bitmap);
> > - break;
> > - }
> > - }
> > -
> > -out:
> > - rcu_read_unlock();
> > -}
> > -
> > static void recalculate_apic_map(struct kvm *kvm)
> > {
> > struct kvm_apic_map *new, *old = NULL;
> > diff --git a/arch/x86/kvm/lapic.h b/arch/x86/kvm/lapic.h
> > index 2c721b9..baa20cf 100644
> > --- a/arch/x86/kvm/lapic.h
> > +++ b/arch/x86/kvm/lapic.h
> > @@ -160,10 +160,6 @@ static inline u16 apic_logical_id(struct kvm_apic_map *map, u32 ldr)
> > return ldr & map->lid_mask;
> > }
> >
> > -void kvm_calculate_eoi_exitmap(struct kvm_vcpu *vcpu,
> > - struct kvm_lapic_irq *irq,
> > - u64 *eoi_bitmap);
> > -
> > static inline bool kvm_apic_has_events(struct kvm_vcpu *vcpu)
> > {
> > return vcpu->arch.apic->pending_events;
> > diff --git a/virt/kvm/ioapic.c b/virt/kvm/ioapic.c
> > index 5ba005c..bb3906d 100644
> > --- a/virt/kvm/ioapic.c
> > +++ b/virt/kvm/ioapic.c
> > @@ -124,7 +124,6 @@ void kvm_ioapic_calculate_eoi_exitmap(struct kvm_vcpu *vcpu,
> > {
> > struct kvm_ioapic *ioapic = vcpu->kvm->arch.vioapic;
> > union kvm_ioapic_redirect_entry *e;
> > - struct kvm_lapic_irq irqe;
> > int index;
> >
> > spin_lock(&ioapic->lock);
> > @@ -135,11 +134,9 @@ void kvm_ioapic_calculate_eoi_exitmap(struct kvm_vcpu *vcpu,
> > (e->fields.trig_mode == IOAPIC_LEVEL_TRIG ||
> > kvm_irq_has_notifier(ioapic->kvm, KVM_IRQCHIP_IOAPIC,
> > index))) {
> > - irqe.dest_id = e->fields.dest_id;
> > - irqe.vector = e->fields.vector;
> > - irqe.dest_mode = e->fields.dest_mode;
> > - irqe.delivery_mode = e->fields.delivery_mode << 8;
> > - kvm_calculate_eoi_exitmap(vcpu, &irqe, eoi_exit_bitmap);
> > + if (kvm_apic_match_dest(vcpu, NULL, 0,
> > + e->fields.dest_id, e->fields.dest_mode))
> > + __set_bit(e->fileds.vector, (unsigned long *)eoi_exit_bitmap);
> > }
> > }
> > spin_unlock(&ioapic->lock);
> > --
> > 1.7.1
>
> --
> Gleb.
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Gleb.
prev parent reply other threads:[~2013-04-04 19:58 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-03 0:47 [PATCH v2] KVM: Call kvm_apic_match_dest() to check destination vcpu Yang Zhang
2013-04-03 9:34 ` Gleb Natapov
2013-04-04 19:58 ` Gleb Natapov [this message]
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=20130404195851.GA540@redhat.com \
--to=gleb@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=yang.z.zhang@intel.com \
/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.