aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulia Lawall <Julia.Lawall@lip6.fr>2016-05-06 17:39:30 -0400
committerIngo Molnar <mingo@kernel.org>2016-05-07 01:06:13 -0400
commit1cfd63166c8e7494a1b457df9bb291a601091c26 (patch)
tree8ec3ebf76cd744f4f547d72e3aa1842d59ccf8cc
parentfb7a84cac03541f4da18dfa25b3f4767d4efc6fc (diff)
efi: Merge boolean flag arguments
The parameters atomic and duplicates of efivar_init always have opposite values. Drop the parameter atomic, replace the uses of !atomic with duplicates, and update the call sites accordingly. The code using duplicates is slightly reorganized with an 'else', to avoid duplicating the lock code. Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr> Signed-off-by: Matt Fleming <matt@codeblueprint.co.uk> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Brian Gerst <brgerst@gmail.com> Cc: Denys Vlasenko <dvlasenk@redhat.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Jeremy Kerr <jk@ozlabs.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Matthew Garrett <mjg59@srcf.ucam.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Saurabh Sengar <saurabh.truth@gmail.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Vaishali Thakkar <vaishali.thakkar@oracle.com> Cc: linux-efi@vger.kernel.org Link: http://lkml.kernel.org/r/1462570771-13324-5-git-send-email-matt@codeblueprint.co.uk Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--drivers/firmware/efi/efivars.c5
-rw-r--r--drivers/firmware/efi/vars.c23
-rw-r--r--fs/efivarfs/super.c3
-rw-r--r--include/linux/efi.h3
4 files changed, 14 insertions, 20 deletions
diff --git a/drivers/firmware/efi/efivars.c b/drivers/firmware/efi/efivars.c
index 096adcbcb5a9..116b244dee68 100644
--- a/drivers/firmware/efi/efivars.c
+++ b/drivers/firmware/efi/efivars.c
@@ -661,7 +661,7 @@ static void efivar_update_sysfs_entries(struct work_struct *work)
661 return; 661 return;
662 662
663 err = efivar_init(efivar_update_sysfs_entry, entry, 663 err = efivar_init(efivar_update_sysfs_entry, entry,
664 true, false, &efivar_sysfs_list); 664 false, &efivar_sysfs_list);
665 if (!err) 665 if (!err)
666 break; 666 break;
667 667
@@ -730,8 +730,7 @@ int efivars_sysfs_init(void)
730 return -ENOMEM; 730 return -ENOMEM;
731 } 731 }
732 732
733 efivar_init(efivars_sysfs_callback, NULL, false, 733 efivar_init(efivars_sysfs_callback, NULL, true, &efivar_sysfs_list);
734 true, &efivar_sysfs_list);
735 734
736 error = create_efivars_bin_attributes(); 735 error = create_efivars_bin_attributes();
737 if (error) { 736 if (error) {
diff --git a/drivers/firmware/efi/vars.c b/drivers/firmware/efi/vars.c
index 0012331d5a3d..d3b751383286 100644
--- a/drivers/firmware/efi/vars.c
+++ b/drivers/firmware/efi/vars.c
@@ -419,8 +419,7 @@ static void dup_variable_bug(efi_char16_t *str16, efi_guid_t *vendor_guid,
419 * Returns 0 on success, or a kernel error code on failure. 419 * Returns 0 on success, or a kernel error code on failure.
420 */ 420 */
421int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *), 421int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *),
422 void *data, bool atomic, bool duplicates, 422 void *data, bool duplicates, struct list_head *head)
423 struct list_head *head)
424{ 423{
425 const struct efivar_operations *ops = __efivars->ops; 424 const struct efivar_operations *ops = __efivars->ops;
426 unsigned long variable_name_size = 1024; 425 unsigned long variable_name_size = 1024;
@@ -450,7 +449,7 @@ int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *),
450 &vendor_guid); 449 &vendor_guid);
451 switch (status) { 450 switch (status) {
452 case EFI_SUCCESS: 451 case EFI_SUCCESS:
453 if (!atomic) 452 if (duplicates)
454 spin_unlock_irq(&__efivars->lock); 453 spin_unlock_irq(&__efivars->lock);
455 454
456 variable_name_size = var_name_strnsize(variable_name, 455 variable_name_size = var_name_strnsize(variable_name,
@@ -465,21 +464,19 @@ int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *),
465 * and may end up looping here forever. 464 * and may end up looping here forever.
466 */ 465 */
467 if (duplicates && 466 if (duplicates &&
468 variable_is_present(variable_name, &vendor_guid, head)) { 467 variable_is_present(variable_name, &vendor_guid,
468 head)) {
469 dup_variable_bug(variable_name, &vendor_guid, 469 dup_variable_bug(variable_name, &vendor_guid,
470 variable_name_size); 470 variable_name_size);
471 if (!atomic)
472 spin_lock_irq(&__efivars->lock);
473
474 status = EFI_NOT_FOUND; 471 status = EFI_NOT_FOUND;
475 break; 472 } else {
473 err = func(variable_name, vendor_guid,
474 variable_name_size, data);
475 if (err)
476 status = EFI_NOT_FOUND;
476 } 477 }
477 478
478 err = func(variable_name, vendor_guid, variable_name_size, data); 479 if (duplicates)
479 if (err)
480 status = EFI_NOT_FOUND;
481
482 if (!atomic)
483 spin_lock_irq(&__efivars->lock); 480 spin_lock_irq(&__efivars->lock);
484 481
485 break; 482 break;
diff --git a/fs/efivarfs/super.c b/fs/efivarfs/super.c
index 553c5d2db4a4..9cb54a38832d 100644
--- a/fs/efivarfs/super.c
+++ b/fs/efivarfs/super.c
@@ -216,8 +216,7 @@ static int efivarfs_fill_super(struct super_block *sb, void *data, int silent)
216 216
217 INIT_LIST_HEAD(&efivarfs_list); 217 INIT_LIST_HEAD(&efivarfs_list);
218 218
219 err = efivar_init(efivarfs_callback, (void *)sb, false, 219 err = efivar_init(efivarfs_callback, (void *)sb, true, &efivarfs_list);
220 true, &efivarfs_list);
221 if (err) 220 if (err)
222 __efivar_entry_iter(efivarfs_destroy, &efivarfs_list, NULL, NULL); 221 __efivar_entry_iter(efivarfs_destroy, &efivarfs_list, NULL, NULL);
223 222
diff --git a/include/linux/efi.h b/include/linux/efi.h
index aa36fb8bea4b..df7acb51f3cc 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
@@ -1336,8 +1336,7 @@ int efivars_unregister(struct efivars *efivars);
1336struct kobject *efivars_kobject(void); 1336struct kobject *efivars_kobject(void);
1337 1337
1338int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *), 1338int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *),
1339 void *data, bool atomic, bool duplicates, 1339 void *data, bool duplicates, struct list_head *head);
1340 struct list_head *head);
1341 1340
1342void efivar_entry_add(struct efivar_entry *entry, struct list_head *head); 1341void efivar_entry_add(struct efivar_entry *entry, struct list_head *head);
1343void efivar_entry_remove(struct efivar_entry *entry); 1342void efivar_entry_remove(struct efivar_entry *entry);