Use the static attribute groups assigned to the device instead of
manual device_create_file() & co calls.  It simplifies the code and
can avoid possible races, too.

Signed-off-by: Takashi Iwai <ti...@suse.de>
---
 drivers/base/firmware_class.c | 40 +++++++++++++++++++++-------------------
 1 file changed, 21 insertions(+), 19 deletions(-)

diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
index 58470c395301..0a5fa28c8268 100644
--- a/drivers/base/firmware_class.c
+++ b/drivers/base/firmware_class.c
@@ -836,6 +836,26 @@ static struct bin_attribute firmware_attr_data = {
        .write = firmware_data_write,
 };
 
+static struct attribute *fw_dev_attrs[] = {
+       &dev_attr_loading.attr,
+       NULL
+};
+
+static struct bin_attribute *fw_dev_bin_attrs[] = {
+       &firmware_attr_data,
+       NULL
+};
+
+static const struct attribute_group fw_dev_attr_group = {
+       .attrs = fw_dev_attrs,
+       .bin_attrs = fw_dev_bin_attrs,
+};
+
+static const struct attribute_group *fw_dev_attr_groups[] = {
+       &fw_dev_attr_group,
+       NULL
+};
+
 static void firmware_class_timeout_work(struct work_struct *work)
 {
        struct firmware_priv *fw_priv = container_of(work,
@@ -871,6 +891,7 @@ fw_create_instance(struct firmware *firmware, const char 
*fw_name,
        dev_set_name(f_dev, "%s", fw_name);
        f_dev->parent = device;
        f_dev->class = &firmware_class;
+       f_dev->groups = fw_dev_attr_groups;
 exit:
        return fw_priv;
 }
@@ -894,25 +915,10 @@ static int _request_firmware_load(struct firmware_priv 
*fw_priv,
                goto err_put_dev;
        }
 
-       retval = device_create_bin_file(f_dev, &firmware_attr_data);
-       if (retval) {
-               dev_err(f_dev, "%s: sysfs_create_bin_file failed\n", __func__);
-               goto err_del_dev;
-       }
-
        mutex_lock(&fw_lock);
        list_add(&buf->pending_list, &pending_fw_head);
        mutex_unlock(&fw_lock);
 
-       retval = device_create_file(f_dev, &dev_attr_loading);
-       if (retval) {
-               mutex_lock(&fw_lock);
-               list_del_init(&buf->pending_list);
-               mutex_unlock(&fw_lock);
-               dev_err(f_dev, "%s: device_create_file failed\n", __func__);
-               goto err_del_bin_attr;
-       }
-
        if (opt_flags & FW_OPT_UEVENT) {
                buf->need_uevent = true;
                dev_set_uevent_suppress(f_dev, false);
@@ -932,10 +938,6 @@ static int _request_firmware_load(struct firmware_priv 
*fw_priv,
        else if (!buf->data)
                retval = -ENOMEM;
 
-       device_remove_file(f_dev, &dev_attr_loading);
-err_del_bin_attr:
-       device_remove_bin_file(f_dev, &firmware_attr_data);
-err_del_dev:
        device_del(f_dev);
 err_put_dev:
        put_device(f_dev);
-- 
2.2.2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to