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>
This commit is contained in:
parent
37aa48368f
commit
3046365bb4
|
@ -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)
|
||||||
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,
|
||||||
}
|
}
|
||||||
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,
|
||||||
|
|
Loading…
Reference in New Issue