|
@@ -246,6 +246,7 @@ static int vpd_section_destroy(struct vpd_section *sec)
|
|
sysfs_remove_bin_file(vpd_kobj, &sec->bin_attr);
|
|
sysfs_remove_bin_file(vpd_kobj, &sec->bin_attr);
|
|
kfree(sec->raw_name);
|
|
kfree(sec->raw_name);
|
|
memunmap(sec->baseaddr);
|
|
memunmap(sec->baseaddr);
|
|
|
|
+ sec->enabled = false;
|
|
}
|
|
}
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
@@ -279,8 +280,10 @@ static int vpd_sections_init(phys_addr_t physaddr)
|
|
ret = vpd_section_init("rw", &rw_vpd,
|
|
ret = vpd_section_init("rw", &rw_vpd,
|
|
physaddr + sizeof(struct vpd_cbmem) +
|
|
physaddr + sizeof(struct vpd_cbmem) +
|
|
header.ro_size, header.rw_size);
|
|
header.ro_size, header.rw_size);
|
|
- if (ret)
|
|
|
|
|
|
+ if (ret) {
|
|
|
|
+ vpd_section_destroy(&ro_vpd);
|
|
return ret;
|
|
return ret;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
return 0;
|
|
return 0;
|