diff options
author | Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> | 2014-04-28 19:51:00 -0400 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2014-04-29 16:58:15 -0400 |
commit | 3046365bb470f0ec2f7cf5cb07a8ee7e4b490103 (patch) | |
tree | 66fbbb9b115c71814ff5a6e36566a47c492f0a6a | |
parent | 37aa48368f2508defb1976be62e1ed6ca4dde683 (diff) |
devres: introduce API "devm_kmemdup
Introduce devm_kmemdup, which uses resource managed kmalloc.
There are several request from maintainers to add this instead
of using kmemdup.
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
-rw-r--r-- | Documentation/driver-model/devres.txt | 1 | ||||
-rw-r--r-- | drivers/base/devres.c | 21 | ||||
-rw-r--r-- | include/linux/device.h | 2 |
3 files changed, 24 insertions, 0 deletions
diff --git a/Documentation/driver-model/devres.txt b/Documentation/driver-model/devres.txt index 4f7897e99cba..499951873997 100644 --- a/Documentation/driver-model/devres.txt +++ b/Documentation/driver-model/devres.txt | |||
@@ -236,6 +236,7 @@ certainly invest a bit more effort into libata core layer). | |||
236 | MEM | 236 | MEM |
237 | devm_kzalloc() | 237 | devm_kzalloc() |
238 | devm_kfree() | 238 | devm_kfree() |
239 | devm_kmemdup() | ||
239 | 240 | ||
240 | IIO | 241 | IIO |
241 | devm_iio_device_alloc() | 242 | devm_iio_device_alloc() |
diff --git a/drivers/base/devres.c b/drivers/base/devres.c index db4e264eecb6..d0914cba2413 100644 --- a/drivers/base/devres.c +++ b/drivers/base/devres.c | |||
@@ -831,3 +831,24 @@ void devm_kfree(struct device *dev, void *p) | |||
831 | WARN_ON(rc); | 831 | WARN_ON(rc); |
832 | } | 832 | } |
833 | EXPORT_SYMBOL_GPL(devm_kfree); | 833 | EXPORT_SYMBOL_GPL(devm_kfree); |
834 | |||
835 | /** | ||
836 | * devm_kmemdup - Resource-managed kmemdup | ||
837 | * @dev: Device this memory belongs to | ||
838 | * @src: Memory region to duplicate | ||
839 | * @len: Memory region length | ||
840 | * @gfp: GFP mask to use | ||
841 | * | ||
842 | * Duplicate region of a memory using resource managed kmalloc | ||
843 | */ | ||
844 | void *devm_kmemdup(struct device *dev, const void *src, size_t len, gfp_t gfp) | ||
845 | { | ||
846 | void *p; | ||
847 | |||
848 | p = devm_kmalloc(dev, len, gfp); | ||
849 | if (p) | ||
850 | memcpy(p, src, len); | ||
851 | |||
852 | return p; | ||
853 | } | ||
854 | EXPORT_SYMBOL_GPL(devm_kmemdup); | ||
diff --git a/include/linux/device.h b/include/linux/device.h index d1d1c055b48e..ab871588da89 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -623,6 +623,8 @@ static inline void *devm_kcalloc(struct device *dev, | |||
623 | } | 623 | } |
624 | extern void devm_kfree(struct device *dev, void *p); | 624 | extern void devm_kfree(struct device *dev, void *p); |
625 | extern char *devm_kstrdup(struct device *dev, const char *s, gfp_t gfp); | 625 | extern char *devm_kstrdup(struct device *dev, const char *s, gfp_t gfp); |
626 | extern void *devm_kmemdup(struct device *dev, const void *src, size_t len, | ||
627 | gfp_t gfp); | ||
626 | 628 | ||
627 | void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res); | 629 | void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res); |
628 | void __iomem *devm_request_and_ioremap(struct device *dev, | 630 | void __iomem *devm_request_and_ioremap(struct device *dev, |