From: Kan Liang <[email protected]>

When a platform device is probed, the corresponding PMU has to be
registered.

Factor out the codes to find the corresponding PMU by comparing the
pci_device_id table. The function will be used later.

There is no functional change.

Signed-off-by: Kan Liang <[email protected]>
---
 arch/x86/events/intel/uncore.c | 43 +++++++++++++++++++++++++++---------------
 1 file changed, 28 insertions(+), 15 deletions(-)

diff --git a/arch/x86/events/intel/uncore.c b/arch/x86/events/intel/uncore.c
index 0651ab7..6a87c1a 100644
--- a/arch/x86/events/intel/uncore.c
+++ b/arch/x86/events/intel/uncore.c
@@ -1002,6 +1002,32 @@ static int uncore_pci_get_die_info(struct pci_dev *pdev,
 
        return 0;
 }
+
+static struct intel_uncore_pmu *
+uncore_find_pmu_by_pci_dev(struct pci_dev *pdev, const struct pci_device_id 
*ids)
+{
+       struct intel_uncore_pmu *pmu = NULL;
+       struct intel_uncore_type *type;
+       kernel_ulong_t data;
+       unsigned int devfn;
+
+       while (ids && ids->vendor) {
+               if ((ids->vendor == pdev->vendor) &&
+                   (ids->device == pdev->device)) {
+                       data = ids->driver_data;
+                       devfn = PCI_DEVFN(UNCORE_PCI_DEV_DEV(data),
+                                         UNCORE_PCI_DEV_FUNC(data));
+                       if (devfn == pdev->devfn) {
+                               type = 
uncore_pci_uncores[UNCORE_PCI_DEV_TYPE(data)];
+                               pmu = &type->pmus[UNCORE_PCI_DEV_IDX(data)];
+                               break;
+                       }
+               }
+               ids++;
+       }
+       return pmu;
+}
+
 /*
  * add a pci uncore device
  */
@@ -1033,21 +1059,8 @@ static int uncore_pci_probe(struct pci_dev *pdev, const 
struct pci_device_id *id
         */
        if (id->driver_data & ~0xffff) {
                struct pci_driver *pci_drv = pdev->driver;
-               const struct pci_device_id *ids = pci_drv->id_table;
-               unsigned int devfn;
-
-               while (ids && ids->vendor) {
-                       if ((ids->vendor == pdev->vendor) &&
-                           (ids->device == pdev->device)) {
-                               devfn = 
PCI_DEVFN(UNCORE_PCI_DEV_DEV(ids->driver_data),
-                                                 
UNCORE_PCI_DEV_FUNC(ids->driver_data));
-                               if (devfn == pdev->devfn) {
-                                       pmu = 
&type->pmus[UNCORE_PCI_DEV_IDX(ids->driver_data)];
-                                       break;
-                               }
-                       }
-                       ids++;
-               }
+
+               pmu = uncore_find_pmu_by_pci_dev(pdev, pci_drv->id_table);
                if (pmu == NULL)
                        return -ENODEV;
        } else {
-- 
2.7.4

Reply via email to