• Xiaoming Wang's avatar
    drm/xe/display: Fix memleak in display initialization · 11572b3f
    Xiaoming Wang authored
    intel_power_domains_init is called twice in xe_device_probe:
    
    1) intel_power_domains_init()
       xe_display_init_nommio()
       xe_device_probe()
    
    2) intel_power_domains_init()
       intel_display_driver_probe_noirq()
       xe_display_init_noirq()
       xe_device_probe()
    
    It needs remove one to avoid power_domains->power_wells double malloc.
    
    unreferenced object 0xffff88811150ee00 (size 512):
      comm "systemd-udevd", pid 506, jiffies 4294674198 (age 3605.560s)
      hex dump (first 32 bytes):
        10 b4 9d a0 ff ff ff ff ff ff ff ff ff ff ff ff  ................
        ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00  ................
      backtrace:
        [<ffffffff8134b901>] __kmem_cache_alloc_node+0x1c1/0x2b0
        [<ffffffff812c98b2>] __kmalloc+0x52/0x150
        [<ffffffffa08b0033>] __set_power_wells+0xc3/0x360 [xe]
        [<ffffffffa08562fc>] xe_display_init_nommio+0x4c/0x70 [xe]
        [<ffffffffa07f0d1c>] xe_device_probe+0x3c/0x5a0 [xe]
        [<ffffffffa082e48f>] xe_pci_probe+0x33f/0x5a0 [xe]
        [<ffffffff817f2187>] local_pci_probe+0x47/0xa0
        [<ffffffff817f3db3>] pci_device_probe+0xc3/0x1f0
        [<ffffffff8192f2a2>] really_probe+0x1a2/0x410
        [<ffffffff8192f598>] __driver_probe_device+0x78/0x160
        [<ffffffff8192f6ae>] driver_probe_device+0x1e/0x90
        [<ffffffff8192f92a>] __driver_attach+0xda/0x1d0
        [<ffffffff8192c95c>] bus_for_each_dev+0x7c/0xd0
        [<ffffffff8192e159>] bus_add_driver+0x119/0x220
        [<ffffffff81930d00>] driver_register+0x60/0x120
        [<ffffffffa05e50a0>] 0xffffffffa05e50a0
    
    The call to intel_power_domains_cleanup() needs to stay where it is for
    now. The main issue is that while the init is called by the display
    side, shared by i915 and xe, the cleanup is called by a non-shared code
    path. Fixing that will be done as a separate commit.
    
    Fixes: 44e69495 ("drm/xe/display: Implement display support")
    Signed-off-by: default avatarXiaoming Wang <xiaoming.wang@intel.com>
    [ reword commit message and explain why the fini needs to stay
      where it is ]
    Reviewed-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
    Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240202215658.561298-1-lucas.demarchi@intel.com
    (cherry picked from commit 86c99abb)
    Signed-off-by: default avatarThomas Hellström <thomas.hellstrom@linux.intel.com>
    11572b3f
xe_display.c 8.54 KB