From a4160f76c75807d2d55ffc651e6bea3787d8e6be Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 3 Mar 2023 12:48:27 +0000 Subject: [PATCH] Revert "nvmem: core: fix cleanup after dev_set_name()" This reverts commit 23676ecd2eb377f7c24a6ff578b0f4c7135658b6 which is commit 560181d3ace61825f4ca9dd3481d6c0ee6709fa8 upstream. It breaks the Android kernel api, and isn't even really needed in the 5.10.y kernel tree yet, as there are no users of the new field. So revert it for now. If it is needed, it can be brought back in an abi-safe way in the future. Bug: 161946584 Change-Id: Ie5f1017d74bcf014b0ba5fe2f9e91eed8b735af4 Signed-off-by: Greg Kroah-Hartman --- drivers/nvmem/core.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index de356cdde4ce..38c05fce7d74 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -627,18 +627,14 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config) nvmem->id = rval; - nvmem->dev.type = &nvmem_provider_type; - nvmem->dev.bus = &nvmem_bus_type; - nvmem->dev.parent = config->dev; - - device_initialize(&nvmem->dev); - if (!config->ignore_wp) nvmem->wp_gpio = gpiod_get_optional(config->dev, "wp", GPIOD_OUT_HIGH); if (IS_ERR(nvmem->wp_gpio)) { + ida_free(&nvmem_ida, nvmem->id); rval = PTR_ERR(nvmem->wp_gpio); - goto err_put_device; + kfree(nvmem); + return ERR_PTR(rval); } kref_init(&nvmem->refcnt); @@ -650,6 +646,9 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config) nvmem->stride = config->stride ?: 1; nvmem->word_size = config->word_size ?: 1; nvmem->size = config->size; + nvmem->dev.type = &nvmem_provider_type; + nvmem->dev.bus = &nvmem_bus_type; + nvmem->dev.parent = config->dev; nvmem->root_only = config->root_only; nvmem->priv = config->priv; nvmem->type = config->type; @@ -672,8 +671,11 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config) break; } - if (rval) - goto err_put_device; + if (rval) { + ida_free(&nvmem_ida, nvmem->id); + kfree(nvmem); + return ERR_PTR(rval); + } nvmem->read_only = device_property_present(config->dev, "read-only") || config->read_only || !nvmem->reg_write; @@ -684,7 +686,7 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config) dev_dbg(&nvmem->dev, "Registering nvmem device %s\n", config->name); - rval = device_add(&nvmem->dev); + rval = device_register(&nvmem->dev); if (rval) goto err_put_device;