linux/arch/x86/platform
Matthew Garrett f8b8404337 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>
2013-06-10 21:59:37 +01:00
..
ce4100 TTY/Serial merge for 3.8-rc1 2012-12-11 14:08:47 -08:00
efi Modify UEFI anti-bricking code 2013-06-10 21:59:37 +01:00
geode arch/x86/platform/geode/net5501.c: change active_low to 0 for LED driver 2012-05-04 14:40:07 -07:00
goldfish goldfish: platform device for x86 2013-01-21 12:09:19 -08:00
iris arch/x86/platform/iris/iris.c: register a platform device and a platform driver 2012-12-18 15:02:11 -08:00
mrst Merge branch 'x86-platform-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2013-04-30 08:42:11 -07:00
olpc x86/olpc/xo1/sci: Don't call input_free_device() after input_unregister_device() 2013-04-24 08:44:47 +02:00
scx200 X86: drivers: remove __dev* attributes. 2013-01-03 15:57:04 -08:00
sfi x86: Convert a few mistaken __cpuinit annotations to __init 2013-01-24 17:12:19 +01:00
ts5500 x86: Add TS-5500 platform support 2013-01-25 19:40:23 +01:00
uv x86/platform/uv: Replace kmalloc() & memset with kzalloc() 2013-03-11 08:33:01 +01:00
visws x86/apic: Fix typo EIO_ACK -> EOI_ACK and document it 2012-05-18 09:46:07 +02:00
Makefile x86: Add TS-5500 platform support 2013-01-25 19:40:23 +01:00