[PATCH 4.4 117/230] Revert "x86/platform/UV: Use efi_runtime_lock to serialise BIOS calls"

From: Greg Kroah-Hartman
Date: Fri Mar 22 2019 - 07:33:55 EST


4.4-stable review patch. If anyone has any objections, please let me know.

------------------

This reverts commit 7212e37cbdf99f48e4a6c689a42f4bda1ae69001.

Hedi Berriche <hedi.berriche@xxxxxxx> notes:

> In 4.4-stable efi_runtime_lock as defined in drivers/firmware/efi/runtime-wrappers.c
> is a spinlock (given it predates commit dce48e351c0d) and commit
>
> f331e766c4be x86/platform/UV: Use efi_runtime_lock to serialise BIOS calls
>
> which 7212e37cbdf9 is a backport of, needs it to be a semaphore.

Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>
---
arch/x86/include/asm/uv/bios.h | 8 +-------
arch/x86/platform/uv/bios_uv.c | 23 ++---------------------
drivers/firmware/efi/runtime-wrappers.c | 7 -------
3 files changed, 3 insertions(+), 35 deletions(-)

--- a/arch/x86/include/asm/uv/bios.h
+++ b/arch/x86/include/asm/uv/bios.h
@@ -48,8 +48,7 @@ enum {
BIOS_STATUS_SUCCESS = 0,
BIOS_STATUS_UNIMPLEMENTED = -ENOSYS,
BIOS_STATUS_EINVAL = -EINVAL,
- BIOS_STATUS_UNAVAIL = -EBUSY,
- BIOS_STATUS_ABORT = -EINTR,
+ BIOS_STATUS_UNAVAIL = -EBUSY
};

/*
@@ -112,9 +111,4 @@ extern long system_serial_number;

extern struct kobject *sgi_uv_kobj; /* /sys/firmware/sgi_uv */

-/*
- * EFI runtime lock; cf. firmware/efi/runtime-wrappers.c for details
- */
-extern struct semaphore __efi_uv_runtime_lock;
-
#endif /* _ASM_X86_UV_BIOS_H */
--- a/arch/x86/platform/uv/bios_uv.c
+++ b/arch/x86/platform/uv/bios_uv.c
@@ -28,8 +28,7 @@

static struct uv_systab uv_systab;

-static s64 __uv_bios_call(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3,
- u64 a4, u64 a5)
+s64 uv_bios_call(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3, u64 a4, u64 a5)
{
struct uv_systab *tab = &uv_systab;
s64 ret;
@@ -44,19 +43,6 @@ static s64 __uv_bios_call(enum uv_bios_c
a1, a2, a3, a4, a5);
return ret;
}
-
-s64 uv_bios_call(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3, u64 a4, u64 a5)
-{
- s64 ret;
-
- if (down_interruptible(&__efi_uv_runtime_lock))
- return BIOS_STATUS_ABORT;
-
- ret = __uv_bios_call(which, a1, a2, a3, a4, a5);
- up(&__efi_uv_runtime_lock);
-
- return ret;
-}
EXPORT_SYMBOL_GPL(uv_bios_call);

s64 uv_bios_call_irqsave(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3,
@@ -65,15 +51,10 @@ s64 uv_bios_call_irqsave(enum uv_bios_cm
unsigned long bios_flags;
s64 ret;

- if (down_interruptible(&__efi_uv_runtime_lock))
- return BIOS_STATUS_ABORT;
-
local_irq_save(bios_flags);
- ret = __uv_bios_call(which, a1, a2, a3, a4, a5);
+ ret = uv_bios_call(which, a1, a2, a3, a4, a5);
local_irq_restore(bios_flags);

- up(&__efi_uv_runtime_lock);
-
return ret;
}

--- a/drivers/firmware/efi/runtime-wrappers.c
+++ b/drivers/firmware/efi/runtime-wrappers.c
@@ -88,13 +88,6 @@ static DEFINE_SPINLOCK(efi_runtime_lock)
*/

/*
- * Expose the EFI runtime lock to the UV platform
- */
-#ifdef CONFIG_X86_UV
-extern struct semaphore __efi_uv_runtime_lock __alias(efi_runtime_lock);
-#endif
-
-/*
* As per commit ef68c8f87ed1 ("x86: Serialize EFI time accesses on rtc_lock"),
* the EFI specification requires that callers of the time related runtime
* functions serialize with other CMOS accesses in the kernel, as the EFI time