diff options
author | H. Peter Anvin <hpa@linux.intel.com> | 2013-04-20 20:16:44 +0400 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2013-04-20 20:16:44 +0400 |
commit | f53f292eeaa234615c31a1306babe703fc4263f2 (patch) | |
tree | 707b0933a20f7dc05495e974243a23b5c9f8c918 /drivers/firmware/google | |
parent | 15b9c359f288b09003cb70f7ed204affc0c6614d (diff) | |
parent | a9499fa7cd3fd4824a7202d00c766b269fa3bda6 (diff) | |
download | linux-f53f292eeaa234615c31a1306babe703fc4263f2.tar.xz |
Merge remote-tracking branch 'efi/chainsaw' into x86/efi
Resolved Conflicts:
drivers/firmware/efivars.c
fs/efivarsfs/file.c
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Diffstat (limited to 'drivers/firmware/google')
-rw-r--r-- | drivers/firmware/google/gsmi.c | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/drivers/firmware/google/gsmi.c b/drivers/firmware/google/gsmi.c index 91ddf0f7a1b9..757b2d92d5b0 100644 --- a/drivers/firmware/google/gsmi.c +++ b/drivers/firmware/google/gsmi.c @@ -288,17 +288,6 @@ static int gsmi_exec(u8 func, u8 sub) return rc; } -/* Return the number of unicode characters in data */ -static size_t -utf16_strlen(efi_char16_t *data, unsigned long maxlength) -{ - unsigned long length = 0; - - while (*data++ != 0 && length < maxlength) - length++; - return length; -} - static efi_status_t gsmi_get_variable(efi_char16_t *name, efi_guid_t *vendor, u32 *attr, unsigned long *data_size, @@ -311,7 +300,7 @@ static efi_status_t gsmi_get_variable(efi_char16_t *name, }; efi_status_t ret = EFI_SUCCESS; unsigned long flags; - size_t name_len = utf16_strlen(name, GSMI_BUF_SIZE / 2); + size_t name_len = utf16_strnlen(name, GSMI_BUF_SIZE / 2); int rc; if (name_len >= GSMI_BUF_SIZE / 2) @@ -380,7 +369,7 @@ static efi_status_t gsmi_get_next_variable(unsigned long *name_size, return EFI_BAD_BUFFER_SIZE; /* Let's make sure the thing is at least null-terminated */ - if (utf16_strlen(name, GSMI_BUF_SIZE / 2) == GSMI_BUF_SIZE / 2) + if (utf16_strnlen(name, GSMI_BUF_SIZE / 2) == GSMI_BUF_SIZE / 2) return EFI_INVALID_PARAMETER; spin_lock_irqsave(&gsmi_dev.lock, flags); @@ -408,7 +397,7 @@ static efi_status_t gsmi_get_next_variable(unsigned long *name_size, /* Copy the name back */ memcpy(name, gsmi_dev.name_buf->start, GSMI_BUF_SIZE); - *name_size = utf16_strlen(name, GSMI_BUF_SIZE / 2) * 2; + *name_size = utf16_strnlen(name, GSMI_BUF_SIZE / 2) * 2; /* copy guid to return buffer */ memcpy(vendor, ¶m.guid, sizeof(param.guid)); @@ -434,7 +423,7 @@ static efi_status_t gsmi_set_variable(efi_char16_t *name, EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS, }; - size_t name_len = utf16_strlen(name, GSMI_BUF_SIZE / 2); + size_t name_len = utf16_strnlen(name, GSMI_BUF_SIZE / 2); efi_status_t ret = EFI_SUCCESS; int rc; unsigned long flags; @@ -893,12 +882,19 @@ static __init int gsmi_init(void) goto out_remove_bin_file; } - ret = register_efivars(&efivars, &efivar_ops, gsmi_kobj); + ret = efivars_register(&efivars, &efivar_ops, gsmi_kobj); if (ret) { printk(KERN_INFO "gsmi: Failed to register efivars\n"); goto out_remove_sysfs_files; } + ret = efivars_sysfs_init(); + if (ret) { + printk(KERN_INFO "gsmi: Failed to create efivars files\n"); + efivars_unregister(&efivars); + goto out_remove_sysfs_files; + } + register_reboot_notifier(&gsmi_reboot_notifier); register_die_notifier(&gsmi_die_notifier); atomic_notifier_chain_register(&panic_notifier_list, @@ -930,7 +926,7 @@ static void __exit gsmi_exit(void) unregister_die_notifier(&gsmi_die_notifier); atomic_notifier_chain_unregister(&panic_notifier_list, &gsmi_panic_notifier); - unregister_efivars(&efivars); + efivars_unregister(&efivars); sysfs_remove_files(gsmi_kobj, gsmi_attrs); sysfs_remove_bin_file(gsmi_kobj, &eventlog_bin_attr); |