|
@@ -91,7 +91,8 @@ static __always_inline struct devres * alloc_dr(dr_release_t release,
|
|
|
if (unlikely(!dr))
|
|
|
return NULL;
|
|
|
|
|
|
- memset(dr, 0, tot_size);
|
|
|
+ memset(dr, 0, offsetof(struct devres, data));
|
|
|
+
|
|
|
INIT_LIST_HEAD(&dr->node.entry);
|
|
|
dr->node.release = release;
|
|
|
return dr;
|
|
@@ -745,58 +746,62 @@ void devm_remove_action(struct device *dev, void (*action)(void *), void *data)
|
|
|
EXPORT_SYMBOL_GPL(devm_remove_action);
|
|
|
|
|
|
/*
|
|
|
- * Managed kzalloc/kfree
|
|
|
+ * Managed kmalloc/kfree
|
|
|
*/
|
|
|
-static void devm_kzalloc_release(struct device *dev, void *res)
|
|
|
+static void devm_kmalloc_release(struct device *dev, void *res)
|
|
|
{
|
|
|
/* noop */
|
|
|
}
|
|
|
|
|
|
-static int devm_kzalloc_match(struct device *dev, void *res, void *data)
|
|
|
+static int devm_kmalloc_match(struct device *dev, void *res, void *data)
|
|
|
{
|
|
|
return res == data;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * devm_kzalloc - Resource-managed kzalloc
|
|
|
+ * devm_kmalloc - Resource-managed kmalloc
|
|
|
* @dev: Device to allocate memory for
|
|
|
* @size: Allocation size
|
|
|
* @gfp: Allocation gfp flags
|
|
|
*
|
|
|
- * Managed kzalloc. Memory allocated with this function is
|
|
|
+ * Managed kmalloc. Memory allocated with this function is
|
|
|
* automatically freed on driver detach. Like all other devres
|
|
|
* resources, guaranteed alignment is unsigned long long.
|
|
|
*
|
|
|
* RETURNS:
|
|
|
* Pointer to allocated memory on success, NULL on failure.
|
|
|
*/
|
|
|
-void * devm_kzalloc(struct device *dev, size_t size, gfp_t gfp)
|
|
|
+void * devm_kmalloc(struct device *dev, size_t size, gfp_t gfp)
|
|
|
{
|
|
|
struct devres *dr;
|
|
|
|
|
|
/* use raw alloc_dr for kmalloc caller tracing */
|
|
|
- dr = alloc_dr(devm_kzalloc_release, size, gfp);
|
|
|
+ dr = alloc_dr(devm_kmalloc_release, size, gfp);
|
|
|
if (unlikely(!dr))
|
|
|
return NULL;
|
|
|
|
|
|
+ /*
|
|
|
+ * This is named devm_kzalloc_release for historical reasons
|
|
|
+ * The initial implementation did not support kmalloc, only kzalloc
|
|
|
+ */
|
|
|
set_node_dbginfo(&dr->node, "devm_kzalloc_release", size);
|
|
|
devres_add(dev, dr->data);
|
|
|
return dr->data;
|
|
|
}
|
|
|
-EXPORT_SYMBOL_GPL(devm_kzalloc);
|
|
|
+EXPORT_SYMBOL_GPL(devm_kmalloc);
|
|
|
|
|
|
/**
|
|
|
* devm_kfree - Resource-managed kfree
|
|
|
* @dev: Device this memory belongs to
|
|
|
* @p: Memory to free
|
|
|
*
|
|
|
- * Free memory allocated with devm_kzalloc().
|
|
|
+ * Free memory allocated with devm_kmalloc().
|
|
|
*/
|
|
|
void devm_kfree(struct device *dev, void *p)
|
|
|
{
|
|
|
int rc;
|
|
|
|
|
|
- rc = devres_destroy(dev, devm_kzalloc_release, devm_kzalloc_match, p);
|
|
|
+ rc = devres_destroy(dev, devm_kmalloc_release, devm_kmalloc_match, p);
|
|
|
WARN_ON(rc);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(devm_kfree);
|