From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934056AbbBDOSO (ORCPT ); Wed, 4 Feb 2015 09:18:14 -0500 Received: from cantor2.suse.de ([195.135.220.15]:46470 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932587AbbBDOSN (ORCPT ); Wed, 4 Feb 2015 09:18:13 -0500 From: Takashi Iwai To: Ming Lei Cc: Greg Kroah-Hartman , linux-kernel@vger.kernel.org Subject: [PATCH] firmware: Avoid manual device_create_file() calls Date: Wed, 4 Feb 2015 15:18:07 +0100 Message-Id: <1423059487-16578-1-git-send-email-tiwai@suse.de> X-Mailer: git-send-email 2.2.2 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- 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