mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
OPP updates for 7.2
- Fix memory leak and a potential race in the OPP core (Abdun Nihaal, and Di Shen). - Mark Rust OPP methods as inline (Nicolás Antinori) -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEx73Crsp7f6M6scA70rkcPK6BEhwFAmomWtIACgkQ0rkcPK6B EhyfnQ/8D16I3iIJHkg/Pnz7nazV99essmCTpsp/+2Z+pECfkn5+WnnKrFE/LEn3 kE0Fy2lggV25pQkhTJjUjtmCg6OMHlnIFljHeiAAK4ug8kg5Ab5pPxk9uto9qlCy cvkxS09xOlmT/Pmo00sovJWOAcNVPy6FAebJ/roJVmI54wOnOf6MZeQmQKxvd6BN B17NlXUF0nYot05vF+iiJ4NvrhLmWQdDCG+lBhIBLAUm87pz5QB1YN69aa1J6QWv x8Rki0nGqQABQZvgvPJ+RTEqT8E898VGGK2+QE+XBtDQU2eDNlwJfCj2yuG/svWo E9ui62EhRmfQKt73KC+WBW7J/n/JSve0/55rFNq1lYE9JJPS60Zlcsbfhat5jndt RfvQutz/nP382dxYRHiPzfCVOS7HuH3BJL6IcysnteoPkCYoC9RkJeQJKU5Yp5zQ 9/syMd1zPpH+bKhvPrWidjQm2Xv9YorEQpCK3Oi0OqRnB2+mOdfCzwuHyhTT89I/ bbKs8GHJZsXhLnST/hMNEDumCR7Q9W7CcBZ0sHtsQE8Zjxx47o41v/n6zC2XI0u8 nBTihRWIlSBTTpVUR3+lmOVmiAU+MSCYjrnkWsAJ0ZzLEdmZDVblhHIsTyh9vU+K +s3nVWIMBwcq0hM3c0Az28YlIpfqJOlqGXs/Mw1qKqFF0SjMmj0= =9mEx -----END PGP SIGNATURE----- Merge tag 'opp-updates-7.2' of git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm Pull OPP updates for 7.2 from Viresh Kumar: "- Fix memory leak and a potential race in the OPP core (Abdun Nihaal, and Di Shen). - Mark Rust OPP methods as inline (Nicolás Antinori)" * tag 'opp-updates-7.2' of git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm: opp: rust: mark OPP methods as inline OPP: of: Fix potential memory leak in opp_parse_supplies() OPP: Fix race between OPP addition and lookup
This commit is contained in:
commit
63f27ddef0
|
|
@ -2088,11 +2088,10 @@ int _opp_add(struct device *dev, struct dev_pm_opp *new_opp,
|
|||
return ret;
|
||||
|
||||
list_add(&new_opp->node, head);
|
||||
new_opp->opp_table = opp_table;
|
||||
kref_init(&new_opp->kref);
|
||||
}
|
||||
|
||||
new_opp->opp_table = opp_table;
|
||||
kref_init(&new_opp->kref);
|
||||
|
||||
opp_debug_create_one(new_opp, opp_table);
|
||||
|
||||
if (!_opp_supported_by_regulators(new_opp, opp_table)) {
|
||||
|
|
|
|||
|
|
@ -673,7 +673,7 @@ static int opp_parse_supplies(struct dev_pm_opp *opp, struct device *dev,
|
|||
*/
|
||||
if (unlikely(opp_table->regulator_count == -1)) {
|
||||
opp_table->regulator_count = 0;
|
||||
return 0;
|
||||
goto free_microwatt;
|
||||
}
|
||||
|
||||
for (i = 0, j = 0; i < opp_table->regulator_count; i++) {
|
||||
|
|
@ -696,6 +696,7 @@ static int opp_parse_supplies(struct dev_pm_opp *opp, struct device *dev,
|
|||
opp->supplies[i].u_watt = microwatt[i];
|
||||
}
|
||||
|
||||
free_microwatt:
|
||||
kfree(microwatt);
|
||||
free_microamp:
|
||||
kfree(microamp);
|
||||
|
|
|
|||
|
|
@ -1042,11 +1042,13 @@ unsafe impl Sync for OPP {}
|
|||
|
||||
/// SAFETY: The type invariants guarantee that [`OPP`] is always refcounted.
|
||||
unsafe impl AlwaysRefCounted for OPP {
|
||||
#[inline]
|
||||
fn inc_ref(&self) {
|
||||
// SAFETY: The existence of a shared reference means that the refcount is nonzero.
|
||||
unsafe { bindings::dev_pm_opp_get(self.0.get()) };
|
||||
}
|
||||
|
||||
#[inline]
|
||||
unsafe fn dec_ref(obj: ptr::NonNull<Self>) {
|
||||
// SAFETY: The safety requirements guarantee that the refcount is nonzero.
|
||||
unsafe { bindings::dev_pm_opp_put(obj.cast().as_ptr()) }
|
||||
|
|
@ -1095,6 +1097,7 @@ fn as_raw(&self) -> *mut bindings::dev_pm_opp {
|
|||
}
|
||||
|
||||
/// Returns the frequency of an [`OPP`].
|
||||
#[inline]
|
||||
pub fn freq(&self, index: Option<u32>) -> Hertz {
|
||||
let index = index.unwrap_or(0);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user