Sheng, 

Thanks for the comments, I sent an updated version of the patches.
Please see reply below.

Thanks,
Ben

On Thu, 2008-07-17 at 10:00 +0800, Yang, Sheng wrote:
> Some comments below. :)
> 
> On Wednesday 16 July 2008 23:56:50 Ben-Ami Yassour wrote:
> > +                  __func__);
> > +           goto out_put;
> 
> pci_disable_device()?
fixed in the new version.
> 
> > +   }
> > +   match->pt_dev.guest.busnr = pci_pt_dev->guest.busnr;
> > +   match->pt_dev.guest.devfn = pci_pt_dev->guest.devfn;
> > +   match->pt_dev.host.busnr = pci_pt_dev->host.busnr;
> > +   match->pt_dev.host.devfn = pci_pt_dev->host.devfn;
> > +   match->pt_dev.dev = dev;
> > +
> > +   write_lock(&kvm_pci_pt_lock);
> > +
> > +   INIT_WORK(&match->pt_dev.int_work.work, kvm_pci_pt_int_work_fn);
> > +   INIT_WORK(&match->pt_dev.ack_work.work, kvm_pci_pt_ack_work_fn);
> > +
> > +   match->pt_dev.kvm = kvm;
> > +   match->pt_dev.int_work.pt_dev = &match->pt_dev;
> > +   match->pt_dev.ack_work.pt_dev = &match->pt_dev;
> > +
> > +   list_add(&match->list, &kvm->arch.pci_pt_dev_head);
> > +
> > +   write_unlock(&kvm_pci_pt_lock);
> > +
> > +   if (irqchip_in_kernel(kvm)) {
> > +           match->pt_dev.guest.irq = pci_pt_dev->guest.irq;
> > +           match->pt_dev.host.irq = dev->irq;
> > +           if (kvm->arch.vioapic)
> > +                   kvm->arch.vioapic->ack_notifier = kvm_pci_pt_ack_irq;
> > +           if (kvm->arch.vpic)
> > +                   kvm->arch.vpic->ack_notifier = kvm_pci_pt_ack_irq;
> > +
> > +           /* Even though this is PCI, we don't want to use shared
> > +            * interrupts. Sharing host devices with guest-assigned devices
> > +            * on the same interrupt line is not a happy situation: there
> > +            * are going to be long delays in accepting, acking, etc.
> > +            */
> > +           if (request_irq(dev->irq, kvm_pci_pt_dev_intr, 0,
> > +                           "kvm_pt_device", (void *)&match->pt_dev)) {
> > +                   printk(KERN_INFO "%s: couldn't allocate irq for pv "
> > +                          "device\n", __func__);
> > +                   r = -EIO;
> > +                   goto out_list_del;
> > +           }
> 
> PCI memory region has not been freed if request_irq() fail.
> 
fixed in the new version.


> > +   struct list_head *ptr, *ptr2;
> > +   struct kvm_pci_pt_dev_list *pci_pt_dev;
> > +
> > +   write_lock(&kvm_pci_pt_lock);
> > +   list_for_each_safe(ptr, ptr2, &kvm->arch.pci_pt_dev_head) {
> > +           pci_pt_dev = list_entry(ptr, struct kvm_pci_pt_dev_list, list);
> > +
> > +           if (irqchip_in_kernel(kvm) && pci_pt_dev->pt_dev.host.irq)
> > +                   free_irq(pci_pt_dev->pt_dev.host.irq,
> > +                            (void *)&pci_pt_dev->pt_dev);
> > +
> > +           if (cancel_work_sync(&pci_pt_dev->pt_dev.int_work.work))
> > +                   /* We had pending work. That means we will have to take
> > +                    * care of kvm_put_kvm.
> > +                    */
> > +                   kvm_put_kvm(kvm);
> 
> Cancel_work_sync() is might_sleep() within spinlock...

Due to other changes the lock was no longer needed here and removed.

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to