Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drivers: of: add return value to of_reserved_mem_device_init()

Driver calling of_reserved_mem_device_init() might be interested if the
initialization has been successful or not, so add support for returning
error code.

This fixes a build warining caused by commit 7bfa5ab6fa1b ("drivers:
dma-coherent: add initialization from device tree"), which has been
merged without this change and without fixing function return value.

Fixes: 7bfa5ab6fa1b1 ("drivers: dma-coherent: add initialization from device tree")
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Cc: Michal Nazarewicz <mina86@mina86.com>
Cc: Grant Likely <grant.likely@linaro.org>
Cc: Laura Abbott <lauraa@codeaurora.org>
Cc: Josh Cartwright <joshc@codeaurora.org>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Russell King <rmk+kernel@arm.linux.org.uk>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Marek Szyprowski and committed by
Linus Torvalds
47f29df7 5ddacbe9

+17 -9
+2 -1
drivers/base/dma-contiguous.c
··· 223 223 #undef pr_fmt 224 224 #define pr_fmt(fmt) fmt 225 225 226 - static void rmem_cma_device_init(struct reserved_mem *rmem, struct device *dev) 226 + static int rmem_cma_device_init(struct reserved_mem *rmem, struct device *dev) 227 227 { 228 228 dev_set_cma_area(dev, rmem->priv); 229 + return 0; 229 230 } 230 231 231 232 static void rmem_cma_device_release(struct reserved_mem *rmem,
+9 -5
drivers/of/of_reserved_mem.c
··· 243 243 * This function assign memory region pointed by "memory-region" device tree 244 244 * property to the given device. 245 245 */ 246 - void of_reserved_mem_device_init(struct device *dev) 246 + int of_reserved_mem_device_init(struct device *dev) 247 247 { 248 248 struct reserved_mem *rmem; 249 249 struct device_node *np; 250 + int ret; 250 251 251 252 np = of_parse_phandle(dev->of_node, "memory-region", 0); 252 253 if (!np) 253 - return; 254 + return -ENODEV; 254 255 255 256 rmem = __find_rmem(np); 256 257 of_node_put(np); 257 258 258 259 if (!rmem || !rmem->ops || !rmem->ops->device_init) 259 - return; 260 + return -EINVAL; 260 261 261 - rmem->ops->device_init(rmem, dev); 262 - dev_info(dev, "assigned reserved memory node %s\n", rmem->name); 262 + ret = rmem->ops->device_init(rmem, dev); 263 + if (ret == 0) 264 + dev_info(dev, "assigned reserved memory node %s\n", rmem->name); 265 + 266 + return ret; 263 267 } 264 268 265 269 /**
+6 -3
include/linux/of_reserved_mem.h
··· 16 16 }; 17 17 18 18 struct reserved_mem_ops { 19 - void (*device_init)(struct reserved_mem *rmem, 19 + int (*device_init)(struct reserved_mem *rmem, 20 20 struct device *dev); 21 21 void (*device_release)(struct reserved_mem *rmem, 22 22 struct device *dev); ··· 28 28 _OF_DECLARE(reservedmem, name, compat, init, reservedmem_of_init_fn) 29 29 30 30 #ifdef CONFIG_OF_RESERVED_MEM 31 - void of_reserved_mem_device_init(struct device *dev); 31 + int of_reserved_mem_device_init(struct device *dev); 32 32 void of_reserved_mem_device_release(struct device *dev); 33 33 34 34 void fdt_init_reserved_mem(void); 35 35 void fdt_reserved_mem_save_node(unsigned long node, const char *uname, 36 36 phys_addr_t base, phys_addr_t size); 37 37 #else 38 - static inline void of_reserved_mem_device_init(struct device *dev) { } 38 + static inline int of_reserved_mem_device_init(struct device *dev) 39 + { 40 + return -ENOSYS; 41 + } 39 42 static inline void of_reserved_mem_device_release(struct device *pdev) { } 40 43 41 44 static inline void fdt_init_reserved_mem(void) { }