]> git.baikalelectronics.ru Git - kernel.git/commit
Modify UEFI anti-bricking code
authorMatthew Garrett <matthew.garrett@nebula.com>
Sat, 1 Jun 2013 20:06:20 +0000 (16:06 -0400)
committerMatt Fleming <matt.fleming@intel.com>
Mon, 10 Jun 2013 20:59:37 +0000 (21:59 +0100)
commit5b40b0f65f16807ff56c27d76212036df5ffb3e0
tree6dc89e9602b7c25ea9998e47da3d4d31e2ac40c4
parent0b7537172aa3d42024d88c67fc51ed8cd99e59d3
Modify UEFI anti-bricking code

This patch reworks the UEFI anti-bricking code, including an effective
reversion of 2d474e5d and 15bbfc29. 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>
arch/x86/boot/compressed/eboot.c
arch/x86/include/asm/efi.h
arch/x86/include/uapi/asm/bootparam.h
arch/x86/platform/efi/efi.c