]> git.hungrycats.org Git - linux/commitdiff
s5p-mfc: Add release callback for memory region devs
authorJavier Martinez Canillas <javier@osg.samsung.com>
Tue, 3 May 2016 20:27:17 +0000 (16:27 -0400)
committerSasha Levin <alexander.levin@verizon.com>
Mon, 22 Aug 2016 16:22:57 +0000 (12:22 -0400)
[ Upstream commit 6311f1261f59ce5e51fbe5cc3b5e7737197316ac ]

When s5p_mfc_remove() calls put_device() for the reserved memory region
devs, the driver core warns that the dev doesn't have a release callback:

WARNING: CPU: 0 PID: 591 at drivers/base/core.c:251 device_release+0x8c/0x90
Device 's5p-mfc-l' does not have a release() function, it is broken and must be fixed.

Also, the declared DMA memory using dma_declare_coherent_memory() isn't
relased so add a dev .release that calls dma_release_declared_memory().

Cc: <stable@vger.kernel.org>
Fixes: 6e83e6e25eb4 ("[media] s5p-mfc: Fix kernel warning on memory init")
Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
drivers/media/platform/s5p-mfc/s5p_mfc.c

index dc8187068df3ff88591625cb0fbfceb25b09c9d8..ebef91c35fce71a3ff0f1d9061e9cffa1c1028da 100644 (file)
@@ -1008,6 +1008,11 @@ static int match_child(struct device *dev, void *data)
        return !strcmp(dev_name(dev), (char *)data);
 }
 
+static void s5p_mfc_memdev_release(struct device *dev)
+{
+       dma_release_declared_memory(dev);
+}
+
 static void *mfc_get_drv_data(struct platform_device *pdev);
 
 static int s5p_mfc_alloc_memdevs(struct s5p_mfc_dev *dev)
@@ -1022,6 +1027,7 @@ static int s5p_mfc_alloc_memdevs(struct s5p_mfc_dev *dev)
        }
 
        dev_set_name(dev->mem_dev_l, "%s", "s5p-mfc-l");
+       dev->mem_dev_l->release = s5p_mfc_memdev_release;
        device_initialize(dev->mem_dev_l);
        of_property_read_u32_array(dev->plat_dev->dev.of_node,
                        "samsung,mfc-l", mem_info, 2);
@@ -1041,6 +1047,7 @@ static int s5p_mfc_alloc_memdevs(struct s5p_mfc_dev *dev)
        }
 
        dev_set_name(dev->mem_dev_r, "%s", "s5p-mfc-r");
+       dev->mem_dev_r->release = s5p_mfc_memdev_release;
        device_initialize(dev->mem_dev_r);
        of_property_read_u32_array(dev->plat_dev->dev.of_node,
                        "samsung,mfc-r", mem_info, 2);