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

Commit 5fa0eb0b authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 updates from Thomas Gleixner:
 "A pile of regression fixes and updates:

   - address the fallout of the patches which made the cpuid - nodeid
     relation permanent: Handling of invalid APIC ids and preventing
     pointless warning messages.

   - force eager FPU when protection keys are enabled. Protection keys
     are not generating FPU exceptions so they cannot work with the lazy
     FPU mechanism.

   - prevent force migration of interrupts which are not part of the CPU
     vector domain.

   - handle the fact that APIC ids are not updated in the ACPI/MADT
     tables on physical CPU hotplug

   - remove bash-isms from syscall table generator script

   - use the hypervisor supplied APIC frequency when running on VMware"

* 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/pkeys: Make protection keys an "eager" feature
  x86/apic: Prevent pointless warning messages
  x86/acpi: Prevent LAPIC id 0xff from being accounted
  arch/x86: Handle non enumerated CPU after physical hotplug
  x86/unwind: Fix oprofile module link error
  x86/vmware: Skip lapic calibration on VMware
  x86/syscalls: Remove bash-isms in syscall table generator
  x86/irq: Prevent force migration of irqs which are not in the vector domain
parents c48ce9f1 d4b05923
Loading
Loading
Loading
Loading
+9 −6
Original line number Diff line number Diff line
@@ -10,8 +10,11 @@ syscall_macro() {

    # Entry can be either just a function name or "function/qualifier"
    real_entry="${entry%%/*}"
    qualifier="${entry:${#real_entry}}"		# Strip the function name
    qualifier="${qualifier:1}"			# Strip the slash, if any
    if [ "$entry" = "$real_entry" ]; then
        qualifier=
    else
        qualifier=${entry#*/}
    fi

    echo "__SYSCALL_${abi}($nr, $real_entry, $qualifier)"
}
@@ -22,7 +25,7 @@ emit() {
    entry="$3"
    compat="$4"

    if [ "$abi" == "64" -a -n "$compat" ]; then
    if [ "$abi" = "64" -a -n "$compat" ]; then
	echo "a compat entry for a 64-bit syscall makes no sense" >&2
	exit 1
    fi
@@ -45,17 +48,17 @@ emit() {
grep '^[0-9]' "$in" | sort -n | (
    while read nr abi name entry compat; do
	abi=`echo "$abi" | tr '[a-z]' '[A-Z]'`
	if [ "$abi" == "COMMON" -o "$abi" == "64" ]; then
	if [ "$abi" = "COMMON" -o "$abi" = "64" ]; then
	    # COMMON is the same as 64, except that we don't expect X32
	    # programs to use it.  Our expectation has nothing to do with
	    # any generated code, so treat them the same.
	    emit 64 "$nr" "$entry" "$compat"
	elif [ "$abi" == "X32" ]; then
	elif [ "$abi" = "X32" ]; then
	    # X32 is equivalent to 64 on an X32-compatible kernel.
	    echo "#ifdef CONFIG_X86_X32_ABI"
	    emit 64 "$nr" "$entry" "$compat"
	    echo "#endif"
	elif [ "$abi" == "I386" ]; then
	elif [ "$abi" = "I386" ]; then
	    emit "$abi" "$nr" "$entry" "$compat"
	else
	    echo "Unknown abi $abi" >&2
+4 −3
Original line number Diff line number Diff line
@@ -27,11 +27,12 @@
				 XFEATURE_MASK_YMM | \
				 XFEATURE_MASK_OPMASK | \
				 XFEATURE_MASK_ZMM_Hi256 | \
				 XFEATURE_MASK_Hi16_ZMM	 | \
				 XFEATURE_MASK_PKRU)
				 XFEATURE_MASK_Hi16_ZMM)

/* Supported features which require eager state saving */
#define XFEATURE_MASK_EAGER	(XFEATURE_MASK_BNDREGS | XFEATURE_MASK_BNDCSR)
#define XFEATURE_MASK_EAGER	(XFEATURE_MASK_BNDREGS | \
				 XFEATURE_MASK_BNDCSR | \
				 XFEATURE_MASK_PKRU)

/* All currently supported features */
#define XCNTXT_MASK	(XFEATURE_MASK_LAZY | XFEATURE_MASK_EAGER)
+2 −12
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ void __unwind_start(struct unwind_state *state, struct task_struct *task,

bool unwind_next_frame(struct unwind_state *state);

unsigned long unwind_get_return_address(struct unwind_state *state);

static inline bool unwind_done(struct unwind_state *state)
{
	return state->stack_info.type == STACK_TYPE_UNKNOWN;
@@ -48,8 +50,6 @@ unsigned long *unwind_get_return_address_ptr(struct unwind_state *state)
	return state->bp + 1;
}

unsigned long unwind_get_return_address(struct unwind_state *state);

#else /* !CONFIG_FRAME_POINTER */

static inline
@@ -58,16 +58,6 @@ unsigned long *unwind_get_return_address_ptr(struct unwind_state *state)
	return NULL;
}

static inline
unsigned long unwind_get_return_address(struct unwind_state *state)
{
	if (unwind_done(state))
		return 0;

	return ftrace_graph_ret_addr(state->task, &state->graph_idx,
				     *state->sp, state->sp);
}

#endif /* CONFIG_FRAME_POINTER */

#endif /* _ASM_X86_UNWIND_H */
+4 −0
Original line number Diff line number Diff line
@@ -233,6 +233,10 @@ acpi_parse_lapic(struct acpi_subtable_header * header, const unsigned long end)

	acpi_table_print_madt_entry(header);

	/* Ignore invalid ID */
	if (processor->id == 0xff)
		return 0;

	/*
	 * We need to register disabled CPU as well to permit
	 * counting disabled CPUs. This allows us to size
+5 −3
Original line number Diff line number Diff line
@@ -2128,9 +2128,11 @@ int __generic_processor_info(int apicid, int version, bool enabled)
	if (num_processors >= nr_cpu_ids) {
		int thiscpu = max + disabled_cpus;

		pr_warning(
			"APIC: NR_CPUS/possible_cpus limit of %i reached."
			"  Processor %d/0x%x ignored.\n", max, thiscpu, apicid);
		if (enabled) {
			pr_warning("APIC: NR_CPUS/possible_cpus limit of %i "
				   "reached. Processor %d/0x%x ignored.\n",
				   max, thiscpu, apicid);
		}

		disabled_cpus++;
		return -EINVAL;
Loading