summaryrefslogtreecommitdiffstats
path: root/arch/x86/lib
diff options
context:
space:
mode:
authorMatthew Garrett <matthew.garrett@nebula.com>2013-06-01 22:06:20 +0200
committerMatt Fleming <matt.fleming@intel.com>2013-06-10 22:59:37 +0200
commitf8b8404337de4e2466e2e1139ea68b1f8295974f (patch)
tree6dc89e9602b7c25ea9998e47da3d4d31e2ac40c4 /arch/x86/lib
parentx86, efi: initial the local variable of DataSize to zero (diff)
downloadlinux-f8b8404337de4e2466e2e1139ea68b1f8295974f.tar.xz
linux-f8b8404337de4e2466e2e1139ea68b1f8295974f.zip
Modify UEFI anti-bricking code
This patch reworks the UEFI anti-bricking code, including an effective reversion of cc5a080c and 31ff2f20. It turns out that calling QueryVariableInfo() from boot services results in some firmware implementations jumping to physical addresses even after entering virtual mode, so until we have 1:1 mappings for UEFI runtime space this isn't going to work so well. Reverting these gets us back to the situation where we'd refuse to create variables on some systems because they classify deleted variables as "used" until the firmware triggers a garbage collection run, which they won't do until they reach a lower threshold. This results in it being impossible to install a bootloader, which is unhelpful. Feedback from Samsung indicates that the firmware doesn't need more than 5KB of storage space for its own purposes, so that seems like a reasonable threshold. However, there's still no guarantee that a platform will attempt garbage collection merely because it drops below this threshold. It seems that this is often only triggered if an attempt to write generates a genuine EFI_OUT_OF_RESOURCES error. We can force that by attempting to create a variable larger than the remaining space. This should fail, but if it somehow succeeds we can then immediately delete it. I've tested this on the UEFI machines I have available, but I don't have a Samsung and so can't verify that it avoids the bricking problem. Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com> Signed-off-by: Lee, Chun-Y <jlee@suse.com> [ dummy variable cleanup ] Cc: <stable@vger.kernel.org> Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Diffstat (limited to 'arch/x86/lib')
0 files changed, 0 insertions, 0 deletions