On 07/11/2014 06:00 PM, Ethan Zhao wrote:
Current implementation of helper function pci_vfs_assigned() is a
little complex, to get sum of VFs that assigned to VM, access low
level configuration space register and then loop in traversing
device tree.

(...)

@@ -650,6 +630,11 @@ EXPORT_SYMBOL_GPL(pci_vfs_assigned);
  void pci_iov_assign_device(struct pci_dev *pdev)
  {
        pdev->dev_flags |= PCI_DEV_FLAGS_ASSIGNED;
+       if (pdev->is_virtfn && !pdev->is_physfn)
+               if (pdev->physfn)
+                       if (pdev->physfn->sriov)

Why don't we make last two 'if' conditions into single 'if'

if (pdev->physfn && pdev->physfn->sriov)

+                               atomic_inc(&pdev->physfn->sriov->
+                                       VFs_assigned_cnt);
  }
  EXPORT_SYMBOL_GPL(pci_iov_assign_device);
@@ -660,6 +645,11 @@ EXPORT_SYMBOL_GPL(pci_iov_assign_device);
  void pci_iov_deassign_device(struct pci_dev *pdev)
  {
        pdev->dev_flags &= ~PCI_DEV_FLAGS_ASSIGNED;
+       if (pdev->is_virtfn && !pdev->is_physfn)
+               if (pdev->physfn)
+                       if (pdev->physfn->sriov)

same...

+                               atomic_dec(&pdev->physfn->sriov->
+                                       VFs_assigned_cnt);
  }
  EXPORT_SYMBOL_GPL(pci_iov_deassign_device);
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 6bd0822..d17bda2 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -235,6 +235,7 @@ struct pci_sriov {
        u32 pgsz;               /* page size for BAR alignment */
        u8 link;                /* Function Dependency Link */
        u16 driver_max_VFs;     /* max num VFs driver supports */
+       atomic_t VFs_assigned_cnt; /* counter of VFs assigned to VM */
        struct pci_dev *dev;    /* lowest numbered PF */
        struct pci_dev *self;   /* this PF */
        struct mutex lock;      /* lock for VF bus */

--
Regards,
Varka Bhadram.

--
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