Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 53c6de50 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull x86 and EFI fixes from Peter Anvin:
 "Half of these are EFI-related:

  The by far biggest change is the change to hold off the deletion of a
  sysfs entry while a backend scan is in progress.  This is to avoid
  calling kmemdup() while under a spinlock.

  The other major change is for each entry in the EFI pstore backend to
  get a unique identifier, as required by the pstore filesystem proper.

  The other changes are:

  A fix to the recent consolidation and optimization of using "asm goto"
  with read-modify-write operation, which broke the bitops; specifically
  in such a way that we could end up generating invalid code.

  A build hack to make sure we compile with -mno-sse.  icc, and most
  likely future versions of gcc, can generate SSE instructions unless we
  tell it not to.

  A comment-only patch to a change the was due in part to an unpublished
  erratum; now when the erratum is published we want to add a comment
  explaining why"

* 'x86/urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/apic, doc: Justification for disabling IO APIC before Local APIC
  x86, bitops: Correct the assembly constraints to testing bitops
  x86-64, build: Always pass in -mno-sse
  efi-pstore: Make efi-pstore return a unique id
  x86/efi: Fix earlyprintk off-by-one bug
  efivars, efi-pstore: Hold off deletion of sysfs entry until the scan is completed
parents 8ecffd79 2885432a
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -31,6 +31,9 @@ ifeq ($(CONFIG_X86_32),y)

        KBUILD_CFLAGS += -msoft-float -mregparm=3 -freg-struct-return

        # Don't autogenerate SSE instructions
	KBUILD_CFLAGS += -mno-sse

        # Never want PIC in a 32-bit kernel, prevent breakage with GCC built
        # with nonstandard options
        KBUILD_CFLAGS += -fno-pic
@@ -57,8 +60,11 @@ else
        KBUILD_AFLAGS += -m64
        KBUILD_CFLAGS += -m64

        # Don't autogenerate SSE instructions
	KBUILD_CFLAGS += -mno-sse

	# Use -mpreferred-stack-boundary=3 if supported.
	KBUILD_CFLAGS += $(call cc-option,-mno-sse -mpreferred-stack-boundary=3)
	KBUILD_CFLAGS += $(call cc-option,-mpreferred-stack-boundary=3)

        # FIXME - should be integrated in Makefile.cpu (Makefile_32.cpu)
        cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8)
+2 −2
Original line number Diff line number Diff line
@@ -77,7 +77,7 @@ static inline void atomic_sub(int i, atomic_t *v)
 */
static inline int atomic_sub_and_test(int i, atomic_t *v)
{
	GEN_BINARY_RMWcc(LOCK_PREFIX "subl", v->counter, i, "%0", "e");
	GEN_BINARY_RMWcc(LOCK_PREFIX "subl", v->counter, "er", i, "%0", "e");
}

/**
@@ -141,7 +141,7 @@ static inline int atomic_inc_and_test(atomic_t *v)
 */
static inline int atomic_add_negative(int i, atomic_t *v)
{
	GEN_BINARY_RMWcc(LOCK_PREFIX "addl", v->counter, i, "%0", "s");
	GEN_BINARY_RMWcc(LOCK_PREFIX "addl", v->counter, "er", i, "%0", "s");
}

/**
+2 −2
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ static inline void atomic64_sub(long i, atomic64_t *v)
 */
static inline int atomic64_sub_and_test(long i, atomic64_t *v)
{
	GEN_BINARY_RMWcc(LOCK_PREFIX "subq", v->counter, i, "%0", "e");
	GEN_BINARY_RMWcc(LOCK_PREFIX "subq", v->counter, "er", i, "%0", "e");
}

/**
@@ -138,7 +138,7 @@ static inline int atomic64_inc_and_test(atomic64_t *v)
 */
static inline int atomic64_add_negative(long i, atomic64_t *v)
{
	GEN_BINARY_RMWcc(LOCK_PREFIX "addq", v->counter, i, "%0", "s");
	GEN_BINARY_RMWcc(LOCK_PREFIX "addq", v->counter, "er", i, "%0", "s");
}

/**
+3 −3
Original line number Diff line number Diff line
@@ -205,7 +205,7 @@ static inline void change_bit(long nr, volatile unsigned long *addr)
 */
static inline int test_and_set_bit(long nr, volatile unsigned long *addr)
{
	GEN_BINARY_RMWcc(LOCK_PREFIX "bts", *addr, nr, "%0", "c");
	GEN_BINARY_RMWcc(LOCK_PREFIX "bts", *addr, "Ir", nr, "%0", "c");
}

/**
@@ -251,7 +251,7 @@ static inline int __test_and_set_bit(long nr, volatile unsigned long *addr)
 */
static inline int test_and_clear_bit(long nr, volatile unsigned long *addr)
{
	GEN_BINARY_RMWcc(LOCK_PREFIX "btr", *addr, nr, "%0", "c");
	GEN_BINARY_RMWcc(LOCK_PREFIX "btr", *addr, "Ir", nr, "%0", "c");
}

/**
@@ -304,7 +304,7 @@ static inline int __test_and_change_bit(long nr, volatile unsigned long *addr)
 */
static inline int test_and_change_bit(long nr, volatile unsigned long *addr)
{
	GEN_BINARY_RMWcc(LOCK_PREFIX "btc", *addr, nr, "%0", "c");
	GEN_BINARY_RMWcc(LOCK_PREFIX "btc", *addr, "Ir", nr, "%0", "c");
}

static __always_inline int constant_test_bit(long nr, const volatile unsigned long *addr)
+2 −2
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ static inline void local_sub(long i, local_t *l)
 */
static inline int local_sub_and_test(long i, local_t *l)
{
	GEN_BINARY_RMWcc(_ASM_SUB, l->a.counter, i, "%0", "e");
	GEN_BINARY_RMWcc(_ASM_SUB, l->a.counter, "er", i, "%0", "e");
}

/**
@@ -92,7 +92,7 @@ static inline int local_inc_and_test(local_t *l)
 */
static inline int local_add_negative(long i, local_t *l)
{
	GEN_BINARY_RMWcc(_ASM_ADD, l->a.counter, i, "%0", "s");
	GEN_BINARY_RMWcc(_ASM_ADD, l->a.counter, "er", i, "%0", "s");
}

/**
Loading