mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 04:10:18 +09:00
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:
@@ -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 = {
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user