video: rockchip: mpp: fix rockchip_ipa_get_static_power crash

When echo userspace > /sys/class/devfreq/ffbb0000.rkvenc/governor,the
devfreq->data will be reassign to userspace data.
So cannot get struct rkvenc_dev *enc by devfreq->data.

[<b040f41c>] (rockchip_ipa_get_static_power) from [<b078fbdc>] (devfreq_cooling_get_requested_power+0x140/0x150)
[<b078fbdc>] (devfreq_cooling_get_requested_power) from [<b078e578>] (power_allocator_throttle+0x224/0x8b0)
[<b078e578>] (power_allocator_throttle) from [<b078a5ac>] (handle_thermal_trip+0xb0/0x1c8)
[<b078a5ac>] (handle_thermal_trip) from [<b078a738>] (thermal_zone_device_update.part.3+0x70/0xc4)
[<b078a738>] (thermal_zone_device_update.part.3) from [<b013d2b4>] (process_one_work+0x1f0/0x408)
[<b013d2b4>] (process_one_work) from [<b013df8c>] (worker_thread+0x30/0x564)
[<b013df8c>] (worker_thread) from [<b0142f04>] (kthread+0x160/0x190)
[<b0142f04>] (kthread) from [<b01010d8>] (ret_from_fork+0x14/0x3c)

Change-Id: I46977c8dd23d2fc286afa0ae8b87aea1cb0be0d7
Signed-off-by: Yandong Lin <yandong.lin@rock-chips.com>
This commit is contained in:
Yandong Lin
2024-02-06 10:44:38 +08:00
committed by Tao Huang
parent 02685e262a
commit caeb85ae6f
2 changed files with 12 additions and 10 deletions

View File

@@ -816,13 +816,14 @@ static struct devfreq_governor devfreq_vdec2_ondemand = {
static unsigned long rkvdec2_get_static_power(struct devfreq *devfreq,
unsigned long voltage)
{
struct rkvdec2_dev *dec = devfreq->data;
struct device *dev = devfreq->dev.parent;
struct mpp_dev *mpp = dev_get_drvdata(dev);
struct rkvdec2_dev *dec = to_rkvdec2_dev(mpp);
if (!dec->model_data)
if (!dec || !dec->model_data)
return 0;
else
return rockchip_ipa_get_static_power(dec->model_data,
voltage);
return rockchip_ipa_get_static_power(dec->model_data, voltage);
}
static struct devfreq_cooling_power vdec2_cooling_power_data = {

View File

@@ -955,13 +955,14 @@ static struct devfreq_governor devfreq_venc_ondemand = {
static unsigned long rkvenc_get_static_power(struct devfreq *devfreq,
unsigned long voltage)
{
struct rkvenc_dev *enc = devfreq->data;
struct device *dev = devfreq->dev.parent;
struct mpp_dev *mpp = dev_get_drvdata(dev);
struct rkvenc_dev *enc = to_rkvenc_dev(mpp);
if (!enc->model_data)
if (!enc || !enc->model_data)
return 0;
else
return rockchip_ipa_get_static_power(enc->model_data,
voltage);
return rockchip_ipa_get_static_power(enc->model_data, voltage);
}
static struct devfreq_cooling_power venc_cooling_power_data = {