| From dhobsong@igel.co.jp Mon Oct 29 00:53:20 2012 |
| From: Damian Hobson-Garcia <dhobsong@igel.co.jp> |
| Date: Mon, 29 Oct 2012 16:50:54 +0900 |
| Subject: [PATCH v2 37/58] ARM: dma-mapping: modify condition check while freeing pages |
| To: greg@kroah.com, laurent.pinchart@ideasonboard.com, horms@verge.net.au |
| Cc: ltsi-dev@lists.linuxfoundation.org, dhobsong@igel.co.jp |
| Message-ID: <1351497075-32717-38-git-send-email-dhobsong@igel.co.jp> |
| |
| |
| From: Prathyush K <prathyush.k@samsung.com> |
| |
| WARNING: at mm/vmalloc.c:1471 __iommu_free_buffer+0xcc/0xd0() |
| Trying to vfree() nonexistent vm area (ef095000) |
| Modules linked in: |
| [<c0015a18>] (unwind_backtrace+0x0/0xfc) from [<c0025a94>] (warn_slowpath_common+0x54/0x64) |
| [<c0025a94>] (warn_slowpath_common+0x54/0x64) from [<c0025b38>] (warn_slowpath_fmt+0x30/0x40) |
| [<c0025b38>] (warn_slowpath_fmt+0x30/0x40) from [<c0016de0>] (__iommu_free_buffer+0xcc/0xd0) |
| [<c0016de0>] (__iommu_free_buffer+0xcc/0xd0) from [<c0229a5c>] (exynos_drm_free_buf+0xe4/0x138) |
| [<c0229a5c>] (exynos_drm_free_buf+0xe4/0x138) from [<c022b358>] (exynos_drm_gem_destroy+0x80/0xfc) |
| [<c022b358>] (exynos_drm_gem_destroy+0x80/0xfc) from [<c0211230>] (drm_gem_object_free+0x28/0x34) |
| [<c0211230>] (drm_gem_object_free+0x28/0x34) from [<c0211bd0>] (drm_gem_object_release_handle+0xcc/0xd8) |
| [<c0211bd0>] (drm_gem_object_release_handle+0xcc/0xd8) from [<c01abe10>] (idr_for_each+0x74/0xb8) |
| [<c01abe10>] (idr_for_each+0x74/0xb8) from [<c02114e4>] (drm_gem_release+0x1c/0x30) |
| [<c02114e4>] (drm_gem_release+0x1c/0x30) from [<c0210ae8>] (drm_release+0x608/0x694) |
| [<c0210ae8>] (drm_release+0x608/0x694) from [<c00b75a0>] (fput+0xb8/0x228) |
| [<c00b75a0>] (fput+0xb8/0x228) from [<c00b40c4>] (filp_close+0x64/0x84) |
| [<c00b40c4>] (filp_close+0x64/0x84) from [<c0029d54>] (put_files_struct+0xe8/0x104) |
| [<c0029d54>] (put_files_struct+0xe8/0x104) from [<c002b930>] (do_exit+0x608/0x774) |
| [<c002b930>] (do_exit+0x608/0x774) from [<c002bae4>] (do_group_exit+0x48/0xb4) |
| [<c002bae4>] (do_group_exit+0x48/0xb4) from [<c002bb60>] (sys_exit_group+0x10/0x18) |
| [<c002bb60>] (sys_exit_group+0x10/0x18) from [<c000ee80>] (ret_fast_syscall+0x0/0x30) |
| |
| This patch modifies the condition while freeing to match the condition |
| used while allocation. This fixes the above warning which arises when |
| array size is equal to PAGE_SIZE where allocation is done using kzalloc |
| but free is done using vfree. |
| |
| Signed-off-by: Prathyush K <prathyush.k@samsung.com> |
| Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> |
| (cherry picked from commit 46c87852e99cf8ce97e207b11cde19085837e39c) |
| |
| Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> |
| Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> |
| --- |
| arch/arm/mm/dma-mapping.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/arch/arm/mm/dma-mapping.c |
| +++ b/arch/arm/mm/dma-mapping.c |
| @@ -1093,7 +1093,7 @@ error: |
| while (--i) |
| if (pages[i]) |
| __free_pages(pages[i], 0); |
| - if (array_size < PAGE_SIZE) |
| + if (array_size <= PAGE_SIZE) |
| kfree(pages); |
| else |
| vfree(pages); |
| @@ -1108,7 +1108,7 @@ static int __iommu_free_buffer(struct de |
| for (i = 0; i < count; i++) |
| if (pages[i]) |
| __free_pages(pages[i], 0); |
| - if (array_size < PAGE_SIZE) |
| + if (array_size <= PAGE_SIZE) |
| kfree(pages); |
| else |
| vfree(pages); |