From: Mark Yao Date: Tue, 18 Apr 2017 07:40:58 +0000 (+0800) Subject: drm/rockchip: logo: fix logo memory end on free X-Git-Tag: release-20171130_firefly~4^2~804 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=52849e6d666c302bd9ad435700dacf87090197dc;p=firefly-linux-kernel-4.4.55.git drm/rockchip: logo: fix logo memory end on free It's mistake using logo size as logo memory end, and that would cause: [ 8.443899] BUG: Bad page state in process recovery pfn:7dcc3 [ 8.443903] page:effb3860 count:0 mapcount:3 mapping:eebdf784 index:0x15 [ 8.443907] flags: 0x4004007c(referenced|uptodate|dirty|lru|active|swapbacked) [ 8.443918] page dumped because: PAGE_FLAGS_CHECK_AT_FREE flag(s) set [ 8.443922] bad because of flags: [ 8.443924] flags: 0x60(lru|active) [ 8.443930] Modules linked in: [ 8.443935] CPU: 0 PID: 170 Comm: recovery Tainted: G B 4.4.55 #70 [ 8.443939] Hardware name: Rockchip (Device Tree) [ 8.443947] [] (unwind_backtrace) from [] (show_stack+0x10/0x14) [ 8.443955] [] (show_stack) from [] (dump_stack+0x7c/0x9c) [ 8.443963] [] (dump_stack) from [] (bad_page+0xe4/0x114) [ 8.443971] [] (bad_page) from [] (free_pages_prepare+0xf0/0x294) [ 8.443978] [] (free_pages_prepare) from [] (free_hot_cold_page+0x28/0x14c) [ 8.443987] [] (free_hot_cold_page) from [] (free_reserved_area+0x90/0xdc) [ 8.443996] [] (free_reserved_area) from [] (rockchip_free_loader_memory+0xf0/0x118) [ 8.444006] [] (rockchip_free_loader_memory) from [] (rockchip_drm_fb_destroy+0xbc/0xd0) [ 8.444015] [] (rockchip_drm_fb_destroy) from [] (drm_mode_set_config_internal+0xa8/0xc4) [ 8.444024] [] (drm_mode_set_config_internal) from [] (drm_mode_setcrtc+0x3a8/0x464) [ 8.444032] [] (drm_mode_setcrtc) from [] (drm_ioctl+0x278/0x43c) [ 8.444039] [] (drm_ioctl) from [] (do_vfs_ioctl+0x564/0x6a0) [ 8.444047] [] (do_vfs_ioctl) from [] (SyS_ioctl+0x4c/0x74) [ 8.444055] [] (SyS_ioctl) from [] (ret_fast_syscall+0x0/0x3c Change-Id: I833a27464d9d33f6864039faa61e7500a3b936b3 Signed-off-by: Mark Yao --- diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c index e7846ae7f9f6..c65d88919d73 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c @@ -115,7 +115,7 @@ void rockchip_free_loader_memory(struct drm_device *drm) logo = private->logo; start = phys_to_virt(logo->start); - end = phys_to_virt(logo->size); + end = phys_to_virt(logo->start + logo->size); if (private->domain) { iommu_unmap(private->domain, logo->dma_addr,