Re: [PATCH 1/1] KVM: Correct deliver_bitmask in kvm_get_intr_delivery_bitmask

Gleb Natapov
2009-03-02T07:16:11Z

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.