mirror of
https://github.com/torvalds/linux.git
synced 2026-09-26 18:12:03 +02:00
perf/x86/intel/uncore: Factor out box setup code
The PCI uncore PMU path already implements a lazy registration model: the PMU is registered when the first active box appears and unregistered when the last active box is removed. Factor this registration management into a shared helper, so the same code can be reused by the MSR and MMIO paths in later changes. No functional change intended. Signed-off-by: Zide Chen <zide.chen@intel.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Ian Rogers <irogers@google.com> Reviewed-by: Dapeng Mi <dapeng1.mi@linux.intel.com> Link: https://patch.msgid.link/20260611160033.66760-6-zide.chen@intel.com
This commit is contained in:
parent
3012af7df3
commit
ae7ca8796d
|
|
@ -1148,6 +1148,29 @@ uncore_pci_find_dev_pmu(struct pci_dev *pdev, const struct pci_device_id *ids)
|
|||
return pmu;
|
||||
}
|
||||
|
||||
static int uncore_box_setup(struct intel_uncore_pmu *pmu,
|
||||
struct intel_uncore_box *box)
|
||||
{
|
||||
int ret;
|
||||
|
||||
uncore_box_init(box);
|
||||
|
||||
/* First active box registers the pmu. */
|
||||
if (atomic_inc_return(&pmu->activeboxes) > 1)
|
||||
return 0;
|
||||
|
||||
ret = uncore_pmu_register(pmu);
|
||||
if (ret) {
|
||||
atomic_dec(&pmu->activeboxes);
|
||||
goto err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
err:
|
||||
uncore_box_exit(box);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Register the PMU for a PCI device
|
||||
* @pdev: The PCI device.
|
||||
|
|
@ -1174,20 +1197,13 @@ static int uncore_pci_pmu_register(struct pci_dev *pdev,
|
|||
box->dieid = die;
|
||||
box->pci_dev = pdev;
|
||||
box->pmu = pmu;
|
||||
uncore_box_init(box);
|
||||
|
||||
pmu->boxes[die] = box;
|
||||
if (atomic_inc_return(&pmu->activeboxes) > 1)
|
||||
return 0;
|
||||
|
||||
/* First active box registers the pmu */
|
||||
ret = uncore_pmu_register(pmu);
|
||||
if (ret) {
|
||||
atomic_dec(&pmu->activeboxes);
|
||||
pmu->boxes[die] = NULL;
|
||||
uncore_box_exit(box);
|
||||
ret = uncore_box_setup(pmu, box);
|
||||
if (!ret)
|
||||
pmu->boxes[die] = box;
|
||||
else
|
||||
kfree(box);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user