devm_drm_dev_alloc() has integrated the device initialization and
allocated device structure, using the function devm_drm_dev_alloc()
will be simple and to avoid below call trace:

Unable to handle kernel paging request at virtual address fffffc080776f285
Mem abort info:
  ESR = 0x96000021
  EC = 0x25: DABT (current EL), IL = 32 bits
  SET = 0, FnV = 0
  EA = 0, S1PTW = 0
Data abort info:
  ISV = 0, ISS = 0x00000021
  CM = 0, WnR = 0
swapper pgtable: 64k pages, 42-bit VAs, pgdp=0000000083640000
[fffffc080776f285] pgd=00000008fffa0003, p4d=00000008fffa0003, 
pud=00000008fffa0003, pmd=00000008fffa0003, pte=0068000887760707
Internal error: Oops: 96000021 [#1] PREEMPT SMP
Modules linked in: cdns3_ti(+) snd_soc_pcm3168a_i2c snd_soc_pcm3168a 
sch_fq_codel openvswitch nsh nf_conncount nf_nat nf_conntrack nf_defrag_ipv6 
nf_defrag_ipv4 fuse configfs
CPU: 0 PID: 26 Comm: kworker/0:1 Not tainted 5.10.27-yocto-standard #1
Hardware name: Texas Instruments K3 J721E SoC (DT)
Workqueue: events deferred_probe_work_func
pstate: 80000085 (Nzcv daIf -PAN -UAO -TCO BTYPE=--)
pc : do_raw_spin_trylock+0x24/0x74
lr : _raw_spin_lock_irqsave+0x94/0x150
sp : fffffe001494f9f0
x29: fffffe001494f9f0 x28: 0000000000000000
x27: fffffe0011dabcc8 x26: fffffe0012d6e500
x25: fffffe0012cf2120 x24: 0000000000000000
x23: fffffe0012db6000 x22: 0000000000000000
x21: fffffc080776f29d x20: fffffc080776f285
x19: fffffe0010aa6930 x18: 0000000000000000
x17: 0000000000000001 x16: 0000352cea7bc416
x15: 00d4ca0b7927dfe6 x14: fffffe00110e1e80
x13: 00000000000000e7 x12: fffffe0012ff10b0
x11: 00000000000c0286 x10: 00000000b31216b5
x9 : fffffe0011084734 x8 : fffffe0012de6bf8
x7 : 0000000000000000 x6 : fffffc08010ce130
x5 : 00000000ad79931f x4 : 00000000d363a9ed
x3 : 0000000000000001 x2 : 0000000000000000
x1 : fffffc080776f285 x0 : 0000000000000000
Call trace:
 do_raw_spin_trylock+0x24/0x74
 add_dr+0x30/0x80
 __drmm_add_action+0xc4/0x130
 drm_dev_init+0x134/0x2f0
 devm_drm_dev_init+0x38/0xe0
 tidss_probe+0x5c/0x220
 platform_drv_probe+0x60/0xb4
 really_probe+0xf0/0x4c0
 driver_probe_device+0x64/0xcc
 __device_attach_driver+0xb8/0x114
 bus_for_each_drv+0x88/0xe0
 __device_attach+0xe8/0x190
 device_initial_probe+0x20/0x2c
 bus_probe_device+0xac/0xb4
 deferred_probe_work_func+0x84/0xc0
 process_one_work+0x2bc/0x72c
 worker_thread+0x80/0x474
 kthread+0x158/0x164
 ret_from_fork+0x10/0x3c

Signed-off-by: Xulin Sun <xulin....@windriver.com>
---
 drivers/gpu/drm/tidss/tidss_drv.c | 18 ++++--------------
 1 file changed, 4 insertions(+), 14 deletions(-)
 mode change 100644 => 100755 drivers/gpu/drm/tidss/tidss_drv.c

diff --git a/drivers/gpu/drm/tidss/tidss_drv.c 
b/drivers/gpu/drm/tidss/tidss_drv.c
old mode 100644
new mode 100755
index 1ff57e5c9fce..550627fdd324
--- a/drivers/gpu/drm/tidss/tidss_drv.c
+++ b/drivers/gpu/drm/tidss/tidss_drv.c
@@ -103,11 +103,7 @@ static const struct dev_pm_ops tidss_pm_ops = {
 
 static void tidss_release(struct drm_device *ddev)
 {
-       struct tidss_device *tidss = ddev->dev_private;
-
        drm_kms_helper_poll_fini(ddev);
-
-       kfree(tidss);
 }
 
 DEFINE_DRM_GEM_CMA_FOPS(tidss_fops);
@@ -139,19 +135,13 @@ static int tidss_probe(struct platform_device *pdev)
 
        dev_dbg(dev, "%s\n", __func__);
 
-       /* Can't use devm_* since drm_device's lifetime may exceed dev's */
-       tidss = kzalloc(sizeof(*tidss), GFP_KERNEL);
-       if (!tidss)
-               return -ENOMEM;
+       tidss = devm_drm_dev_alloc(&pdev->dev, &tidss_driver,
+                                  struct tidss_device, ddev);
+       if (IS_ERR(tidss))
+               return PTR_ERR(tidss);
 
        ddev = &tidss->ddev;
 
-       ret = devm_drm_dev_init(&pdev->dev, ddev, &tidss_driver);
-       if (ret) {
-               kfree(ddev);
-               return ret;
-       }
-
        tidss->dev = dev;
        tidss->feat = of_device_get_match_data(dev);
 
-- 
2.17.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#9739): 
https://lists.yoctoproject.org/g/linux-yocto/message/9739
Mute This Topic: https://lists.yoctoproject.org/mt/82057452/21656
Group Owner: linux-yocto+ow...@lists.yoctoproject.org
Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to