Providers:

- qcom: Fix enabled_corner aggregation for rpmhpd
  - arm: Fix NULL dereference on scmi_perf_domain removal
 -----BEGIN PGP SIGNATURE-----
 
 iQJLBAABCgA1FiEEugLDXPmKSktSkQsV/iaEJXNYjCkFAmXhpP8XHHVsZi5oYW5z
 c29uQGxpbmFyby5vcmcACgkQ/iaEJXNYjCnHZBAAynC53E42DsyteCF6uqhatamj
 06pNVGQe+7GqFQfpDgvwobM3mznAOIiEnh1omUqoA0eQH8ZM411fWDOflqpey+et
 sE2NLSPmTc7UJdCoAxXVspC+cVI0e+ZE8u2752FG1ARaEO7z+jlu/QPLkWQ5/kgh
 kuZVDtGQv6uQhG+ZsUqnaHfcrvZIB7Q+sD2YiGxTka3/c8HWbig0x2gQp/fwQO3G
 AAmS7HudBvctqWCDnjSTDv426d2rXdyDeUEDVWg/2NC8I64QRyIg4DZ/dI4oJvqa
 cJdHSfLZRhGFap0A4143cn7u054zZD430xWeMKheOwHjGrtmxhEcGHYGODCOjaVo
 R4vaeE35rnhqCLjiRHkOiuQQmysx/I/hlbu+DVkGJat9mKmwbrJvHKzO1AFD2kuX
 D9cRMTFn6T2vm44Av71l1Sm9fExYRsyHgdtatABPPd7ede+Y8rBs9AHtEU1Xd2Wb
 3moJsHinfZ//ffVsKsIe7EkUTp8Jk8OPZKkv+gbJczl4qvCt9Gu77U1cAygigBOF
 l4VyhWM7XAFU+aENZ9uob8S2NptXmYkZB1hv1ZKlnGt3+W88naY/BE533ifdGMXf
 DqYhjtWZG5LMVn0VkvJDxCJOM0MTE30yMCa8KeJSZfCgl+SbpsShwOFCzxuZlVHJ
 5lcuRv2v9ENh41khTi8=
 =e1Rr
 -----END PGP SIGNATURE-----

Merge tag 'pmdomain-v6.8-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/linux-pm

Pull pmdomain fixes from Ulf Hansson:

 - qcom: Fix enabled_corner aggregation for rpmhpd

 - arm: Fix NULL dereference on scmi_perf_domain removal

* tag 'pmdomain-v6.8-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/linux-pm:
  pmdomain: qcom: rpmhpd: Fix enabled_corner aggregation
  pmdomain: arm: Fix NULL dereference on scmi_perf_domain removal
This commit is contained in:
Linus Torvalds 2024-03-01 11:52:27 -08:00
commit fafbad4a20
2 changed files with 8 additions and 2 deletions

View File

@ -159,6 +159,9 @@ static void scmi_perf_domain_remove(struct scmi_device *sdev)
struct genpd_onecell_data *scmi_pd_data = dev_get_drvdata(dev);
int i;
if (!scmi_pd_data)
return;
of_genpd_del_provider(dev->of_node);
for (i = 0; i < scmi_pd_data->num_domains; i++)

View File

@ -692,6 +692,7 @@ static int rpmhpd_aggregate_corner(struct rpmhpd *pd, unsigned int corner)
unsigned int active_corner, sleep_corner;
unsigned int this_active_corner = 0, this_sleep_corner = 0;
unsigned int peer_active_corner = 0, peer_sleep_corner = 0;
unsigned int peer_enabled_corner;
if (pd->state_synced) {
to_active_sleep(pd, corner, &this_active_corner, &this_sleep_corner);
@ -701,9 +702,11 @@ static int rpmhpd_aggregate_corner(struct rpmhpd *pd, unsigned int corner)
this_sleep_corner = pd->level_count - 1;
}
if (peer && peer->enabled)
to_active_sleep(peer, peer->corner, &peer_active_corner,
if (peer && peer->enabled) {
peer_enabled_corner = max(peer->corner, peer->enable_corner);
to_active_sleep(peer, peer_enabled_corner, &peer_active_corner,
&peer_sleep_corner);
}
active_corner = max(this_active_corner, peer_active_corner);