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.
Unified · Split
| @@ -223,9 +223,10 @@ bool dma_release_from_contiguous(struct device *dev, struct page *pages, · 222 unmodified lines | ||
| 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, |
| @@ -243,23 +243,27 @@ static inline struct reserved_mem *__find_rmem(struct device_node *node) · 242 unmodified lines | ||
| 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; | |
| 261 | + | |
| 262 | + ret = rmem->ops->device_init(rmem, dev); | |
| 263 | + if (ret == 0) | |
| 264 | + dev_info(dev, "assigned reserved memory node %s\n", rmem->name); | |
| 260 | 265 | |
| 261 | − rmem->ops->device_init(rmem, dev); | |
| 262 | − dev_info(dev, "assigned reserved memory node %s\n", rmem->name); | |
| 266 | + return ret; | |
| 263 | 267 | } |
| 264 | 268 | |
| 265 | 269 | /** |
| @@ -16,7 +16,7 @@ struct reserved_mem { · 15 unmodified lines | ||
| 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,14 +28,17 @@ typedef int (*reservedmem_of_init_fn)(struct reserved_mem *rmem); · 5 unmodified lines | ||
| 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) { } |