Commit 24dd064d authored by Ingo Molnar's avatar Ingo Molnar

Merge branches 'x86/dma', 'x86/microcode', 'x86/mm' and 'x86/vdso' into x86/urgent

Merge these small and simple 1-2 commit branches into the urgent branch.
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
......@@ -301,5 +301,6 @@ extern struct x86_apic_ops x86_apic_ops;
extern void x86_early_init_platform_quirks(void);
extern void x86_init_noop(void);
extern void x86_init_uint_noop(unsigned int unused);
extern bool x86_pnpbios_disabled(void);
#endif
......@@ -70,7 +70,7 @@ static DEFINE_MUTEX(microcode_mutex);
/*
* Serialize late loading so that CPUs get updated one-by-one.
*/
static DEFINE_SPINLOCK(update_lock);
static DEFINE_RAW_SPINLOCK(update_lock);
struct ucode_cpu_info ucode_cpu_info[NR_CPUS];
......@@ -560,9 +560,9 @@ static int __reload_late(void *info)
if (__wait_for_cpus(&late_cpus_in, NSEC_PER_SEC))
return -1;
spin_lock(&update_lock);
raw_spin_lock(&update_lock);
apply_microcode_local(&err);
spin_unlock(&update_lock);
raw_spin_unlock(&update_lock);
/* siblings return UCODE_OK because their engine got updated already */
if (err > UCODE_NFOUND) {
......
......@@ -106,17 +106,9 @@ mtrr_write(struct file *file, const char __user *buf, size_t len, loff_t * ppos)
memset(line, 0, LINE_SIZE);
length = len;
length--;
if (length > LINE_SIZE - 1)
length = LINE_SIZE - 1;
length = strncpy_from_user(line, buf, LINE_SIZE - 1);
if (length < 0)
return -EINVAL;
if (copy_from_user(line, buf, length))
return -EFAULT;
return length;
linelen = strlen(line);
ptr = line + linelen - 1;
......@@ -149,17 +141,16 @@ mtrr_write(struct file *file, const char __user *buf, size_t len, loff_t * ppos)
return -EINVAL;
ptr = skip_spaces(ptr + 5);
for (i = 0; i < MTRR_NUM_TYPES; ++i) {
if (strcmp(ptr, mtrr_strings[i]))
continue;
base >>= PAGE_SHIFT;
size >>= PAGE_SHIFT;
err = mtrr_add_page((unsigned long)base, (unsigned long)size, i, true);
if (err < 0)
return err;
return len;
}
return -EINVAL;
i = match_string(mtrr_strings, MTRR_NUM_TYPES, ptr);
if (i < 0)
return i;
base >>= PAGE_SHIFT;
size >>= PAGE_SHIFT;
err = mtrr_add_page((unsigned long)base, (unsigned long)size, i, true);
if (err < 0)
return err;
return len;
}
static long
......
......@@ -9,10 +9,12 @@
* your option) any later version.
*/
#include <linux/dmi.h>
#include <linux/init.h>
#include <linux/syscore_ops.h>
#include <asm/dma.h>
#include <asm/x86_init.h>
/*
* This module just handles suspend/resume issues with the
......@@ -49,6 +51,29 @@ static struct syscore_ops i8237_syscore_ops = {
static int __init i8237A_init_ops(void)
{
/*
* From SKL PCH onwards, the legacy DMA device is removed in which the
* I/O ports (81h-83h, 87h, 89h-8Bh, 8Fh) related to it are removed
* as well. All removed ports must return 0xff for a inb() request.
*
* Note: DMA_PAGE_2 (port 0x81) should not be checked for detecting
* the presence of DMA device since it may be used by BIOS to decode
* LPC traffic for POST codes. Original LPC only decodes one byte of
* port 0x80 but some BIOS may choose to enhance PCH LPC port 0x8x
* decoding.
*/
if (dma_inb(DMA_PAGE_0) == 0xFF)
return -ENODEV;
/*
* It is not required to load this driver as newer SoC may not
* support 8237 DMA or bus mastering from LPC. Platform firmware
* must announce the support for such legacy devices via
* ACPI_FADT_LEGACY_DEVICES field in FADT table.
*/
if (x86_pnpbios_disabled() && dmi_get_bios_year() >= 2017)
return -ENODEV;
register_syscore_ops(&i8237_syscore_ops);
return 0;
}
......
......@@ -33,9 +33,14 @@ void __init x86_early_init_platform_quirks(void)
x86_platform.set_legacy_features();
}
bool __init x86_pnpbios_disabled(void)
{
return x86_platform.legacy.devices.pnpbios == 0;
}
#if defined(CONFIG_PNPBIOS)
bool __init arch_pnpbios_disabled(void)
{
return x86_platform.legacy.devices.pnpbios == 0;
return x86_pnpbios_disabled();
}
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment