Commit 3046365b authored by Srinivas Pandruvada's avatar Srinivas Pandruvada Committed by Jonathan Cameron

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: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent 37aa4836
...@@ -236,6 +236,7 @@ certainly invest a bit more effort into libata core layer). ...@@ -236,6 +236,7 @@ certainly invest a bit more effort into libata core layer).
MEM MEM
devm_kzalloc() devm_kzalloc()
devm_kfree() devm_kfree()
devm_kmemdup()
IIO IIO
devm_iio_device_alloc() devm_iio_device_alloc()
......
...@@ -831,3 +831,24 @@ void devm_kfree(struct device *dev, void *p) ...@@ -831,3 +831,24 @@ void devm_kfree(struct device *dev, void *p)
WARN_ON(rc); WARN_ON(rc);
} }
EXPORT_SYMBOL_GPL(devm_kfree); EXPORT_SYMBOL_GPL(devm_kfree);
/**
* devm_kmemdup - Resource-managed kmemdup
* @dev: Device this memory belongs to
* @src: Memory region to duplicate
* @len: Memory region length
* @gfp: GFP mask to use
*
* Duplicate region of a memory using resource managed kmalloc
*/
void *devm_kmemdup(struct device *dev, const void *src, size_t len, gfp_t gfp)
{
void *p;
p = devm_kmalloc(dev, len, gfp);
if (p)
memcpy(p, src, len);
return p;
}
EXPORT_SYMBOL_GPL(devm_kmemdup);
...@@ -623,6 +623,8 @@ static inline void *devm_kcalloc(struct device *dev, ...@@ -623,6 +623,8 @@ static inline void *devm_kcalloc(struct device *dev,
} }
extern void devm_kfree(struct device *dev, void *p); extern void devm_kfree(struct device *dev, void *p);
extern char *devm_kstrdup(struct device *dev, const char *s, gfp_t gfp); extern char *devm_kstrdup(struct device *dev, const char *s, gfp_t gfp);
extern void *devm_kmemdup(struct device *dev, const void *src, size_t len,
gfp_t gfp);
void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res); void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res);
void __iomem *devm_request_and_ioremap(struct device *dev, void __iomem *devm_request_and_ioremap(struct device *dev,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment