ARM: 6975/1: pmu: reject duplicate PMU registrations
Currently, the PMU reservation framework allows for multiple PMUs of the same type to register themselves. This can lead to a bug with the sequence: register_pmu(pmu1); reserve_pmu(pmu_type); register_pmu(pmu2); release_pmu(pmu1); Here, pmu1 cannot be released, and pmu2 cannot be reserved. This patch modifies register_pmu to reject registrations where a PMU is already present, preventing this problem. PMUs which can have multiple instances should not use the PMU reservation framework. Signed-off-by: Mark Rutland <mark.rutland@arm.com> Acked-by: Jamie Iles <jamie@jamieiles.com> Acked-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
f12482c939
commit
ae0c3751ab
1 changed files with 6 additions and 6 deletions
|
@ -34,13 +34,13 @@ static int __devinit pmu_register(struct platform_device *pdev,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (pmu_devices[type])
|
||||
pr_warning("registering new PMU device type %d overwrites "
|
||||
"previous registration!\n", type);
|
||||
else
|
||||
pr_info("registered new PMU device of type %d\n",
|
||||
type);
|
||||
if (pmu_devices[type]) {
|
||||
pr_warning("rejecting duplicate registration of PMU device "
|
||||
"type %d.", type);
|
||||
return -ENOSPC;
|
||||
}
|
||||
|
||||
pr_info("registered new PMU device of type %d\n", type);
|
||||
pmu_devices[type] = pdev;
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue