aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/firmware')
-rw-r--r--drivers/firmware/efivars.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
index fbe9202c2678..3803621c0d45 100644
--- a/drivers/firmware/efivars.c
+++ b/drivers/firmware/efivars.c
@@ -747,24 +747,25 @@ static int efi_pstore_write(enum pstore_type_id type,
747}; 747};
748 748
749static int efi_pstore_erase(enum pstore_type_id type, u64 id, 749static int efi_pstore_erase(enum pstore_type_id type, u64 id,
750 struct pstore_info *psi) 750 struct timespec time, struct pstore_info *psi)
751{ 751{
752 char stub_name[DUMP_NAME_LEN]; 752 char name[DUMP_NAME_LEN];
753 efi_char16_t efi_name[DUMP_NAME_LEN]; 753 efi_char16_t efi_name[DUMP_NAME_LEN];
754 efi_guid_t vendor = LINUX_EFI_CRASH_GUID; 754 efi_guid_t vendor = LINUX_EFI_CRASH_GUID;
755 struct efivars *efivars = psi->data; 755 struct efivars *efivars = psi->data;
756 struct efivar_entry *entry, *found = NULL; 756 struct efivar_entry *entry, *found = NULL;
757 int i; 757 int i;
758 758
759 sprintf(stub_name, "dump-type%u-%u-", type, (unsigned int)id); 759 sprintf(name, "dump-type%u-%u-%lu", type, (unsigned int)id,
760 time.tv_sec);
760 761
761 spin_lock(&efivars->lock); 762 spin_lock(&efivars->lock);
762 763
763 for (i = 0; i < DUMP_NAME_LEN; i++) 764 for (i = 0; i < DUMP_NAME_LEN; i++)
764 efi_name[i] = stub_name[i]; 765 efi_name[i] = name[i];
765 766
766 /* 767 /*
767 * Clean up any entries with the same name 768 * Clean up an entry with the same name
768 */ 769 */
769 770
770 list_for_each_entry(entry, &efivars->list, list) { 771 list_for_each_entry(entry, &efivars->list, list) {
@@ -775,9 +776,6 @@ static int efi_pstore_erase(enum pstore_type_id type, u64 id,
775 if (utf16_strncmp(entry->var.VariableName, efi_name, 776 if (utf16_strncmp(entry->var.VariableName, efi_name,
776 utf16_strlen(efi_name))) 777 utf16_strlen(efi_name)))
777 continue; 778 continue;
778 /* Needs to be a prefix */
779 if (entry->var.VariableName[utf16_strlen(efi_name)] == 0)
780 continue;
781 779
782 /* found */ 780 /* found */
783 found = entry; 781 found = entry;
@@ -785,6 +783,7 @@ static int efi_pstore_erase(enum pstore_type_id type, u64 id,
785 &entry->var.VendorGuid, 783 &entry->var.VendorGuid,
786 PSTORE_EFI_ATTRIBUTES, 784 PSTORE_EFI_ATTRIBUTES,
787 0, NULL); 785 0, NULL);
786 break;
788 } 787 }
789 788
790 if (found) 789 if (found)
@@ -823,7 +822,7 @@ static int efi_pstore_write(enum pstore_type_id type,
823} 822}
824 823
825static int efi_pstore_erase(enum pstore_type_id type, u64 id, 824static int efi_pstore_erase(enum pstore_type_id type, u64 id,
826 struct pstore_info *psi) 825 struct timespec time, struct pstore_info *psi)
827{ 826{
828 return 0; 827 return 0;
829} 828}