Message ID | 1235710735-16400-1-git-send-email-sheng@linux.intel.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
On Fri, Feb 27, 2009 at 12:58:55PM +0800, Sheng Yang wrote: > 1. deliver_bitmask is a bitmap rather than a unsigned long intereger. > 2. Lowest priority target bitmap wrong calculated by mistake. > 3. Prevent potential NULL reference. > > Signed-off-by: Sheng Yang <sheng@linux.intel.com> > --- > virt/kvm/irq_comm.c | 6 +++++- > 1 files changed, 5 insertions(+), 1 deletions(-) > > diff --git a/virt/kvm/irq_comm.c b/virt/kvm/irq_comm.c > index d165e05..8e1869d 100644 > --- a/virt/kvm/irq_comm.c > +++ b/virt/kvm/irq_comm.c > @@ -54,8 +54,12 @@ void kvm_get_intr_delivery_bitmask(struct kvm_ioapic *ioapic, > deliver_bitmask); > switch (entry->fields.delivery_mode) { > case IOAPIC_LOWEST_PRIORITY: > + /* Select one in deliver_bitmask */ > vcpu = kvm_get_lowest_prio_vcpu(ioapic->kvm, > entry->fields.vector, deliver_bitmask); > + bitmap_zero(deliver_bitmask, KVM_MAX_VCPUS); > + if (!vcpu) > + return; > __set_bit(vcpu->vcpu_id, deliver_bitmask); > break; The only caller of kvm_ioapic_get_delivery_bitmask() is kvm_get_intr_delivery_bitmask() why not add delivery_mode parameter to kvm_ioapic_get_delivery_bitmask() and get rid of kvm_get_intr_delivery_bitmask()? > case IOAPIC_FIXED: > @@ -65,7 +69,7 @@ void kvm_get_intr_delivery_bitmask(struct kvm_ioapic *ioapic, > if (printk_ratelimit()) > printk(KERN_INFO "kvm: unsupported delivery mode %d\n", > entry->fields.delivery_mode); > - *deliver_bitmask = 0; > + bitmap_zero(deliver_bitmask, KVM_MAX_VCPUS); > } > } > > -- > 1.5.4.5 -- 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
On Monday 02 March 2009 15:12:52 Gleb Natapov wrote: > On Fri, Feb 27, 2009 at 12:58:55PM +0800, Sheng Yang wrote: > > 1. deliver_bitmask is a bitmap rather than a unsigned long intereger. > > 2. Lowest priority target bitmap wrong calculated by mistake. > > 3. Prevent potential NULL reference. > > > > Signed-off-by: Sheng Yang <sheng@linux.intel.com> > > --- > > virt/kvm/irq_comm.c | 6 +++++- > > 1 files changed, 5 insertions(+), 1 deletions(-) > > > > diff --git a/virt/kvm/irq_comm.c b/virt/kvm/irq_comm.c > > index d165e05..8e1869d 100644 > > --- a/virt/kvm/irq_comm.c > > +++ b/virt/kvm/irq_comm.c > > @@ -54,8 +54,12 @@ void kvm_get_intr_delivery_bitmask(struct kvm_ioapic > > *ioapic, deliver_bitmask); > > switch (entry->fields.delivery_mode) { > > case IOAPIC_LOWEST_PRIORITY: > > + /* Select one in deliver_bitmask */ > > vcpu = kvm_get_lowest_prio_vcpu(ioapic->kvm, > > entry->fields.vector, deliver_bitmask); > > + bitmap_zero(deliver_bitmask, KVM_MAX_VCPUS); > > + if (!vcpu) > > + return; > > __set_bit(vcpu->vcpu_id, deliver_bitmask); > > break; > > The only caller of kvm_ioapic_get_delivery_bitmask() is > kvm_get_intr_delivery_bitmask() why not add delivery_mode parameter to > kvm_ioapic_get_delivery_bitmask() and get rid of > kvm_get_intr_delivery_bitmask()? Oh yeah, that's right. I think it's OK to merge kvm_ioapic_get_delivery_bitmask() into kvm_get_intr_delivery_bitmask(). If no objection, I would send a patch to merge them. Thanks.
diff --git a/virt/kvm/irq_comm.c b/virt/kvm/irq_comm.c index d165e05..8e1869d 100644 --- a/virt/kvm/irq_comm.c +++ b/virt/kvm/irq_comm.c @@ -54,8 +54,12 @@ void kvm_get_intr_delivery_bitmask(struct kvm_ioapic *ioapic, deliver_bitmask); switch (entry->fields.delivery_mode) { case IOAPIC_LOWEST_PRIORITY: + /* Select one in deliver_bitmask */ vcpu = kvm_get_lowest_prio_vcpu(ioapic->kvm, entry->fields.vector, deliver_bitmask); + bitmap_zero(deliver_bitmask, KVM_MAX_VCPUS); + if (!vcpu) + return; __set_bit(vcpu->vcpu_id, deliver_bitmask); break; case IOAPIC_FIXED: @@ -65,7 +69,7 @@ void kvm_get_intr_delivery_bitmask(struct kvm_ioapic *ioapic, if (printk_ratelimit()) printk(KERN_INFO "kvm: unsupported delivery mode %d\n", entry->fields.delivery_mode); - *deliver_bitmask = 0; + bitmap_zero(deliver_bitmask, KVM_MAX_VCPUS); } }
1. deliver_bitmask is a bitmap rather than a unsigned long intereger. 2. Lowest priority target bitmap wrong calculated by mistake. 3. Prevent potential NULL reference. Signed-off-by: Sheng Yang <sheng@linux.intel.com> --- virt/kvm/irq_comm.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-)