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
3 files changed
+7
-4
No files matched your search
+2
-3
@@ -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)) {
|
||||
|
||||
+2
-1
@@ -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 @@ impl OPP {
|
||||
}
|
||||
|
||||
/// Returns the frequency of an [`OPP`].
|
||||
#[inline]
|
||||
pub fn freq(&self, index: Option<u32>) -> Hertz {
|
||||
let index = index.unwrap_or(0);
|
||||
|
||||
|
||||
Reference in new issue
Block a user