mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 19:08:57 +09:00
video: rockchip: mpp: Iusse for insmod/rmmod rk_vcodec.ko
tips: 1.In mpp_dev_remove, it wrong to device put mpp->pdev, and the true is srv->pdev. 2. It is no used following, thus, put it directly. backtrace: [ 119.059922 ][ T2179 ] refcount_warn_saturate+0xe0/0x150 [ 119.059930 ][ T2179 ] klist_next+0x108/0x10c [ 119.059938 ][ T2179 ] bus_for_each_dev+0x6c/0xd0 [ 119.059945 ][ T2179 ] driver_attach+0x28/0x38 [ 119.059951 ][ T2179 ] bus_add_driver+0x108/0x1e8 [ 119.059956 ][ T2179 ] driver_register+0x7c/0x118 [ 119.059963 ][ T2179 ] __platform_driver_register+0x48/0x58 [ 119.060018 ][ T2179 ] mpp_add_driver+0xf8/0x140 [rk_vcodec] [ 119.060068 ][ T2179 ] mpp_service_probe+0x43c/0x550 [rk_vcodec] [ 119.060075 ][ T2179 ] platform_drv_probe+0x9c/0xc4 [ 119.060081 ][ T2179 ] really_probe+0x204/0x510 [ 119.060087 ][ T2179 ] driver_probe_device+0x80/0xc0 [ 119.060093 ][ T2179 ] device_driver_attach+0x70/0xb4 [ 119.060099 ][ T2179 ] __driver_attach+0xc8/0x150 [ 119.060104 ][ T2179 ] bus_for_each_dev+0x80/0xd0 [ 119.060109 ][ T2179 ] driver_attach+0x28/0x38 [ 119.060114 ][ T2179 ] bus_add_driver+0x108/0x1e8 [ 119.060120 ][ T2179 ] driver_register+0x7c/0x118 [ 119.060127 ][ T2179 ] __platform_driver_register+0x48/0x58 [ 119.060175 ][ T2179 ] init_module+0x24/0xfe8 [rk_vcodec] [ 119.060184 ][ T2179 ] do_one_initcall+0x98/0x2dc [ 119.060192 ][ T2179 ] do_init_module+0x60/0x21c [ 119.060197 ][ T2179 ] load_module+0x2cf0/0x34a8 [ 119.060203 ][ T2179 ] __arm64_sys_finit_module+0xbc/0xfc [ 119.060211 ][ T2179 ] el0_svc_common+0xc0/0x23c [ 119.060217 ][ T2179 ] do_el0_svc+0x28/0x88 [ 119.060225 ][ T2179 ] el0_svc+0x14/0x24 [ 119.060232 ][ T2179 ] el0_sync_handler+0x88/0xec [ 119.060238 ][ T2179 ] el0_sync+0x1a8/0x1c0 Change-Id: Ib6442228d27dde2ff07336edef02fe391ebeb135 Signed-off-by: Ding Wei <leo.ding@rock-chips.com>
This commit is contained in:
@@ -878,35 +878,32 @@ static int mpp_attach_service(struct mpp_dev *mpp, struct device *dev)
|
||||
of_node_put(np);
|
||||
if (!pdev) {
|
||||
dev_err(dev, "failed to get mpp service from node\n");
|
||||
ret = -ENODEV;
|
||||
goto err_put_pdev;
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
mpp->srv = platform_get_drvdata(pdev);
|
||||
platform_device_put(pdev);
|
||||
if (!mpp->srv) {
|
||||
dev_err(&pdev->dev, "failed attach service\n");
|
||||
ret = -EINVAL;
|
||||
goto err_put_pdev;
|
||||
dev_err(dev, "failed attach service\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = of_property_read_u32(dev->of_node,
|
||||
"rockchip,taskqueue-node", &taskqueue_node);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to get taskqueue-node\n");
|
||||
goto err_put_pdev;
|
||||
return ret;
|
||||
} else if (taskqueue_node >= mpp->srv->taskqueue_cnt) {
|
||||
dev_err(dev, "taskqueue-node %d must less than %d\n",
|
||||
taskqueue_node, mpp->srv->taskqueue_cnt);
|
||||
ret = -ENODEV;
|
||||
goto err_put_pdev;
|
||||
return -ENODEV;
|
||||
}
|
||||
/* set taskqueue according dtsi */
|
||||
queue = mpp->srv->task_queues[taskqueue_node];
|
||||
if (!queue) {
|
||||
dev_err(dev, "taskqueue attach to invalid node %d\n",
|
||||
taskqueue_node);
|
||||
ret = -ENODEV;
|
||||
goto err_put_pdev;
|
||||
return -ENODEV;
|
||||
}
|
||||
mpp_attach_workqueue(mpp, queue);
|
||||
|
||||
@@ -917,19 +914,13 @@ static int mpp_attach_service(struct mpp_dev *mpp, struct device *dev)
|
||||
if (reset_group_node >= mpp->srv->reset_group_cnt) {
|
||||
dev_err(dev, "resetgroup-node %d must less than %d\n",
|
||||
reset_group_node, mpp->srv->reset_group_cnt);
|
||||
ret = -ENODEV;
|
||||
goto err_put_pdev;
|
||||
return -ENODEV;
|
||||
} else {
|
||||
mpp->reset_group = mpp->srv->reset_groups[reset_group_node];
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_put_pdev:
|
||||
platform_device_put(pdev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct mpp_taskqueue *mpp_taskqueue_init(struct device *dev)
|
||||
@@ -2115,7 +2106,6 @@ int mpp_dev_remove(struct mpp_dev *mpp)
|
||||
mpp->hw_ops->exit(mpp);
|
||||
|
||||
mpp_iommu_remove(mpp->iommu_info);
|
||||
platform_device_put(to_platform_device(mpp->dev));
|
||||
mpp_detach_workqueue(mpp);
|
||||
device_init_wakeup(mpp->dev, false);
|
||||
pm_runtime_disable(mpp->dev);
|
||||
|
||||
Reference in New Issue
Block a user