You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branches 'x86/xen', 'x86/build', 'x86/microcode', 'x86/mm-debug-v2', 'x86/memory-corruption-check', 'x86/early-printk', 'x86/xsave', 'x86/ptrace-v2', 'x86/quirks', 'x86/setup', 'x86/spinlocks' and 'x86/signal' into x86/core-v2
This commit is contained in:
@@ -658,11 +658,12 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
earlyprintk= [X86-32,X86-64,SH,BLACKFIN]
|
earlyprintk= [X86-32,X86-64,SH,BLACKFIN]
|
||||||
earlyprintk=vga
|
earlyprintk=vga
|
||||||
earlyprintk=serial[,ttySn[,baudrate]]
|
earlyprintk=serial[,ttySn[,baudrate]]
|
||||||
|
earlyprintk=dbgp
|
||||||
|
|
||||||
Append ",keep" to not disable it when the real console
|
Append ",keep" to not disable it when the real console
|
||||||
takes over.
|
takes over.
|
||||||
|
|
||||||
Only vga or serial at a time, not both.
|
Only vga or serial or usb debug port at a time.
|
||||||
|
|
||||||
Currently only ttyS0 and ttyS1 are supported.
|
Currently only ttyS0 and ttyS1 are supported.
|
||||||
|
|
||||||
@@ -1231,6 +1232,29 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
or
|
or
|
||||||
memmap=0x10000$0x18690000
|
memmap=0x10000$0x18690000
|
||||||
|
|
||||||
|
memory_corruption_check=0/1 [X86]
|
||||||
|
Some BIOSes seem to corrupt the first 64k of
|
||||||
|
memory when doing things like suspend/resume.
|
||||||
|
Setting this option will scan the memory
|
||||||
|
looking for corruption. Enabling this will
|
||||||
|
both detect corruption and prevent the kernel
|
||||||
|
from using the memory being corrupted.
|
||||||
|
However, its intended as a diagnostic tool; if
|
||||||
|
repeatable BIOS-originated corruption always
|
||||||
|
affects the same memory, you can use memmap=
|
||||||
|
to prevent the kernel from using that memory.
|
||||||
|
|
||||||
|
memory_corruption_check_size=size [X86]
|
||||||
|
By default it checks for corruption in the low
|
||||||
|
64k, making this memory unavailable for normal
|
||||||
|
use. Use this parameter to scan for
|
||||||
|
corruption in more or less memory.
|
||||||
|
|
||||||
|
memory_corruption_check_period=seconds [X86]
|
||||||
|
By default it checks for corruption every 60
|
||||||
|
seconds. Use this parameter to check at some
|
||||||
|
other rate. 0 disables periodic checking.
|
||||||
|
|
||||||
memtest= [KNL,X86] Enable memtest
|
memtest= [KNL,X86] Enable memtest
|
||||||
Format: <integer>
|
Format: <integer>
|
||||||
range: 0,4 : pattern number
|
range: 0,4 : pattern number
|
||||||
|
|||||||
@@ -390,6 +390,11 @@ L: iommu@lists.linux-foundation.org
|
|||||||
T: git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu.git
|
T: git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu.git
|
||||||
S: Supported
|
S: Supported
|
||||||
|
|
||||||
|
AMD MICROCODE UPDATE SUPPORT
|
||||||
|
P: Peter Oruba
|
||||||
|
M: peter.oruba@amd.com
|
||||||
|
S: Supported
|
||||||
|
|
||||||
AMS (Apple Motion Sensor) DRIVER
|
AMS (Apple Motion Sensor) DRIVER
|
||||||
P: Stelian Pop
|
P: Stelian Pop
|
||||||
M: stelian@popies.net
|
M: stelian@popies.net
|
||||||
|
|||||||
@@ -113,11 +113,6 @@ typedef struct siginfo {
|
|||||||
#undef NSIGSEGV
|
#undef NSIGSEGV
|
||||||
#define NSIGSEGV 3
|
#define NSIGSEGV 3
|
||||||
|
|
||||||
/*
|
|
||||||
* SIGTRAP si_codes
|
|
||||||
*/
|
|
||||||
#define TRAP_BRANCH (__SI_FAULT|3) /* process taken branch trap */
|
|
||||||
#define TRAP_HWBKPT (__SI_FAULT|4) /* hardware breakpoint or watchpoint */
|
|
||||||
#undef NSIGTRAP
|
#undef NSIGTRAP
|
||||||
#define NSIGTRAP 4
|
#define NSIGTRAP 4
|
||||||
|
|
||||||
|
|||||||
@@ -15,11 +15,6 @@
|
|||||||
|
|
||||||
#include <asm-generic/siginfo.h>
|
#include <asm-generic/siginfo.h>
|
||||||
|
|
||||||
/*
|
|
||||||
* SIGTRAP si_codes
|
|
||||||
*/
|
|
||||||
#define TRAP_BRANCH (__SI_FAULT|3) /* process taken branch trap */
|
|
||||||
#define TRAP_HWBKPT (__SI_FAULT|4) /* hardware breakpoint or watchpoint */
|
|
||||||
#undef NSIGTRAP
|
#undef NSIGTRAP
|
||||||
#define NSIGTRAP 4
|
#define NSIGTRAP 4
|
||||||
|
|
||||||
|
|||||||
+81
-9
@@ -778,23 +778,45 @@ config X86_REBOOTFIXUPS
|
|||||||
Say N otherwise.
|
Say N otherwise.
|
||||||
|
|
||||||
config MICROCODE
|
config MICROCODE
|
||||||
tristate "/dev/cpu/microcode - Intel IA32 CPU microcode support"
|
tristate "/dev/cpu/microcode - microcode support"
|
||||||
select FW_LOADER
|
select FW_LOADER
|
||||||
---help---
|
---help---
|
||||||
If you say Y here, you will be able to update the microcode on
|
If you say Y here, you will be able to update the microcode on
|
||||||
Intel processors in the IA32 family, e.g. Pentium Pro, Pentium II,
|
certain Intel and AMD processors. The Intel support is for the
|
||||||
Pentium III, Pentium 4, Xeon etc. You will obviously need the
|
IA32 family, e.g. Pentium Pro, Pentium II, Pentium III,
|
||||||
actual microcode binary data itself which is not shipped with the
|
Pentium 4, Xeon etc. The AMD support is for family 0x10 and
|
||||||
Linux kernel.
|
0x11 processors, e.g. Opteron, Phenom and Turion 64 Ultra.
|
||||||
|
You will obviously need the actual microcode binary data itself
|
||||||
|
which is not shipped with the Linux kernel.
|
||||||
|
|
||||||
For latest news and information on obtaining all the required
|
This option selects the general module only, you need to select
|
||||||
ingredients for this driver, check:
|
at least one vendor specific module as well.
|
||||||
<http://www.urbanmyth.org/microcode/>.
|
|
||||||
|
|
||||||
To compile this driver as a module, choose M here: the
|
To compile this driver as a module, choose M here: the
|
||||||
module will be called microcode.
|
module will be called microcode.
|
||||||
|
|
||||||
config MICROCODE_OLD_INTERFACE
|
config MICROCODE_INTEL
|
||||||
|
bool "Intel microcode patch loading support"
|
||||||
|
depends on MICROCODE
|
||||||
|
default MICROCODE
|
||||||
|
select FW_LOADER
|
||||||
|
--help---
|
||||||
|
This options enables microcode patch loading support for Intel
|
||||||
|
processors.
|
||||||
|
|
||||||
|
For latest news and information on obtaining all the required
|
||||||
|
Intel ingredients for this driver, check:
|
||||||
|
<http://www.urbanmyth.org/microcode/>.
|
||||||
|
|
||||||
|
config MICROCODE_AMD
|
||||||
|
bool "AMD microcode patch loading support"
|
||||||
|
depends on MICROCODE
|
||||||
|
select FW_LOADER
|
||||||
|
--help---
|
||||||
|
If you select this option, microcode patch loading support for AMD
|
||||||
|
processors will be enabled.
|
||||||
|
|
||||||
|
config MICROCODE_OLD_INTERFACE
|
||||||
def_bool y
|
def_bool y
|
||||||
depends on MICROCODE
|
depends on MICROCODE
|
||||||
|
|
||||||
@@ -1061,6 +1083,56 @@ config HIGHPTE
|
|||||||
low memory. Setting this option will put user-space page table
|
low memory. Setting this option will put user-space page table
|
||||||
entries in high memory.
|
entries in high memory.
|
||||||
|
|
||||||
|
config X86_CHECK_BIOS_CORRUPTION
|
||||||
|
bool "Check for low memory corruption"
|
||||||
|
help
|
||||||
|
Periodically check for memory corruption in low memory, which
|
||||||
|
is suspected to be caused by BIOS. Even when enabled in the
|
||||||
|
configuration, it is disabled at runtime. Enable it by
|
||||||
|
setting "memory_corruption_check=1" on the kernel command
|
||||||
|
line. By default it scans the low 64k of memory every 60
|
||||||
|
seconds; see the memory_corruption_check_size and
|
||||||
|
memory_corruption_check_period parameters in
|
||||||
|
Documentation/kernel-parameters.txt to adjust this.
|
||||||
|
|
||||||
|
When enabled with the default parameters, this option has
|
||||||
|
almost no overhead, as it reserves a relatively small amount
|
||||||
|
of memory and scans it infrequently. It both detects corruption
|
||||||
|
and prevents it from affecting the running system.
|
||||||
|
|
||||||
|
It is, however, intended as a diagnostic tool; if repeatable
|
||||||
|
BIOS-originated corruption always affects the same memory,
|
||||||
|
you can use memmap= to prevent the kernel from using that
|
||||||
|
memory.
|
||||||
|
|
||||||
|
config X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK
|
||||||
|
bool "Set the default setting of memory_corruption_check"
|
||||||
|
depends on X86_CHECK_BIOS_CORRUPTION
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
Set whether the default state of memory_corruption_check is
|
||||||
|
on or off.
|
||||||
|
|
||||||
|
config X86_RESERVE_LOW_64K
|
||||||
|
bool "Reserve low 64K of RAM on AMI/Phoenix BIOSen"
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
Reserve the first 64K of physical RAM on BIOSes that are known
|
||||||
|
to potentially corrupt that memory range. A numbers of BIOSes are
|
||||||
|
known to utilize this area during suspend/resume, so it must not
|
||||||
|
be used by the kernel.
|
||||||
|
|
||||||
|
Set this to N if you are absolutely sure that you trust the BIOS
|
||||||
|
to get all its memory reservations and usages right.
|
||||||
|
|
||||||
|
If you have doubts about the BIOS (e.g. suspend/resume does not
|
||||||
|
work or there's kernel crashes after certain hardware hotplug
|
||||||
|
events) and it's not AMI or Phoenix, then you might want to enable
|
||||||
|
X86_CHECK_BIOS_CORRUPTION=y to allow the kernel to check typical
|
||||||
|
corruption patterns.
|
||||||
|
|
||||||
|
Say Y if unsure.
|
||||||
|
|
||||||
config MATH_EMULATION
|
config MATH_EMULATION
|
||||||
bool
|
bool
|
||||||
prompt "Math emulation" if X86_32
|
prompt "Math emulation" if X86_32
|
||||||
|
|||||||
@@ -43,6 +43,19 @@ config EARLY_PRINTK
|
|||||||
with klogd/syslogd or the X server. You should normally N here,
|
with klogd/syslogd or the X server. You should normally N here,
|
||||||
unless you want to debug such a crash.
|
unless you want to debug such a crash.
|
||||||
|
|
||||||
|
config EARLY_PRINTK_DBGP
|
||||||
|
bool "Early printk via EHCI debug port"
|
||||||
|
default n
|
||||||
|
depends on EARLY_PRINTK && PCI
|
||||||
|
help
|
||||||
|
Write kernel log output directly into the EHCI debug port.
|
||||||
|
|
||||||
|
This is useful for kernel debugging when your machine crashes very
|
||||||
|
early before the console code is initialized. For normal operation
|
||||||
|
it is not recommended because it looks ugly and doesn't cooperate
|
||||||
|
with klogd/syslogd or the X server. You should normally N here,
|
||||||
|
unless you want to debug such a crash. You need usb debug device.
|
||||||
|
|
||||||
config DEBUG_STACKOVERFLOW
|
config DEBUG_STACKOVERFLOW
|
||||||
bool "Check for stack overflows"
|
bool "Check for stack overflows"
|
||||||
depends on DEBUG_KERNEL
|
depends on DEBUG_KERNEL
|
||||||
|
|||||||
@@ -45,3 +45,8 @@ cflags-$(CONFIG_MGEODEGX1) += -march=pentium-mmx
|
|||||||
# cpu entries
|
# cpu entries
|
||||||
cflags-$(CONFIG_X86_GENERIC) += $(call tune,generic,$(call tune,i686))
|
cflags-$(CONFIG_X86_GENERIC) += $(call tune,generic,$(call tune,i686))
|
||||||
|
|
||||||
|
# Bug fix for binutils: this option is required in order to keep
|
||||||
|
# binutils from generating NOPL instructions against our will.
|
||||||
|
ifneq ($(CONFIG_X86_P6_NOP),y)
|
||||||
|
cflags-y += $(call cc-option,-Wa$(comma)-mtune=generic32,)
|
||||||
|
endif
|
||||||
|
|||||||
@@ -72,9 +72,7 @@ KBUILD_CFLAGS := $(LINUXINCLUDE) -g -Os -D_SETUP -D__KERNEL__ \
|
|||||||
KBUILD_CFLAGS += $(call cc-option,-m32)
|
KBUILD_CFLAGS += $(call cc-option,-m32)
|
||||||
KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__
|
KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__
|
||||||
|
|
||||||
$(obj)/zImage: IMAGE_OFFSET := 0x1000
|
|
||||||
$(obj)/zImage: asflags-y := $(SVGA_MODE) $(RAMDISK)
|
$(obj)/zImage: asflags-y := $(SVGA_MODE) $(RAMDISK)
|
||||||
$(obj)/bzImage: IMAGE_OFFSET := 0x100000
|
|
||||||
$(obj)/bzImage: ccflags-y := -D__BIG_KERNEL__
|
$(obj)/bzImage: ccflags-y := -D__BIG_KERNEL__
|
||||||
$(obj)/bzImage: asflags-y := $(SVGA_MODE) $(RAMDISK) -D__BIG_KERNEL__
|
$(obj)/bzImage: asflags-y := $(SVGA_MODE) $(RAMDISK) -D__BIG_KERNEL__
|
||||||
$(obj)/bzImage: BUILDFLAGS := -b
|
$(obj)/bzImage: BUILDFLAGS := -b
|
||||||
@@ -117,7 +115,7 @@ $(obj)/setup.bin: $(obj)/setup.elf FORCE
|
|||||||
$(call if_changed,objcopy)
|
$(call if_changed,objcopy)
|
||||||
|
|
||||||
$(obj)/compressed/vmlinux: FORCE
|
$(obj)/compressed/vmlinux: FORCE
|
||||||
$(Q)$(MAKE) $(build)=$(obj)/compressed IMAGE_OFFSET=$(IMAGE_OFFSET) $@
|
$(Q)$(MAKE) $(build)=$(obj)/compressed $@
|
||||||
|
|
||||||
# Set this if you want to pass append arguments to the zdisk/fdimage/isoimage kernel
|
# Set this if you want to pass append arguments to the zdisk/fdimage/isoimage kernel
|
||||||
FDARGS =
|
FDARGS =
|
||||||
@@ -181,6 +179,7 @@ isoimage: $(BOOTIMAGE)
|
|||||||
mkisofs -J -r -o $(obj)/image.iso -b isolinux.bin -c boot.cat \
|
mkisofs -J -r -o $(obj)/image.iso -b isolinux.bin -c boot.cat \
|
||||||
-no-emul-boot -boot-load-size 4 -boot-info-table \
|
-no-emul-boot -boot-load-size 4 -boot-info-table \
|
||||||
$(obj)/isoimage
|
$(obj)/isoimage
|
||||||
|
isohybrid $(obj)/image.iso 2>/dev/null || true
|
||||||
rm -rf $(obj)/isoimage
|
rm -rf $(obj)/isoimage
|
||||||
|
|
||||||
zlilo: $(BOOTIMAGE)
|
zlilo: $(BOOTIMAGE)
|
||||||
|
|||||||
@@ -27,9 +27,8 @@ $(obj)/vmlinux.bin: vmlinux FORCE
|
|||||||
$(call if_changed,objcopy)
|
$(call if_changed,objcopy)
|
||||||
|
|
||||||
|
|
||||||
ifeq ($(CONFIG_X86_32),y)
|
targets += vmlinux.bin.all vmlinux.relocs relocs
|
||||||
targets += vmlinux.bin.all vmlinux.relocs
|
hostprogs-$(CONFIG_X86_32) += relocs
|
||||||
hostprogs-y := relocs
|
|
||||||
|
|
||||||
quiet_cmd_relocs = RELOCS $@
|
quiet_cmd_relocs = RELOCS $@
|
||||||
cmd_relocs = $(obj)/relocs $< > $@;$(obj)/relocs --abs-relocs $<
|
cmd_relocs = $(obj)/relocs $< > $@;$(obj)/relocs --abs-relocs $<
|
||||||
@@ -43,6 +42,8 @@ quiet_cmd_relocbin = BUILD $@
|
|||||||
$(obj)/vmlinux.bin.all: $(vmlinux.bin.all-y) FORCE
|
$(obj)/vmlinux.bin.all: $(vmlinux.bin.all-y) FORCE
|
||||||
$(call if_changed,relocbin)
|
$(call if_changed,relocbin)
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_X86_32),y)
|
||||||
|
|
||||||
ifdef CONFIG_RELOCATABLE
|
ifdef CONFIG_RELOCATABLE
|
||||||
$(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bin.all FORCE
|
$(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bin.all FORCE
|
||||||
$(call if_changed,gzip)
|
$(call if_changed,gzip)
|
||||||
@@ -59,6 +60,5 @@ $(obj)/vmlinux.bin.gz: $(obj)/vmlinux.bin FORCE
|
|||||||
LDFLAGS_piggy.o := -r --format binary --oformat elf64-x86-64 -T
|
LDFLAGS_piggy.o := -r --format binary --oformat elf64-x86-64 -T
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
$(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.gz FORCE
|
$(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.gz FORCE
|
||||||
$(call if_changed,ld)
|
$(call if_changed,ld)
|
||||||
|
|||||||
+6
-1
@@ -41,6 +41,7 @@ static u32 read_mbr_sig(u8 devno, struct edd_info *ei, u32 *mbrsig)
|
|||||||
char *mbrbuf_ptr, *mbrbuf_end;
|
char *mbrbuf_ptr, *mbrbuf_end;
|
||||||
u32 buf_base, mbr_base;
|
u32 buf_base, mbr_base;
|
||||||
extern char _end[];
|
extern char _end[];
|
||||||
|
u16 mbr_magic;
|
||||||
|
|
||||||
sector_size = ei->params.bytes_per_sector;
|
sector_size = ei->params.bytes_per_sector;
|
||||||
if (!sector_size)
|
if (!sector_size)
|
||||||
@@ -58,11 +59,15 @@ static u32 read_mbr_sig(u8 devno, struct edd_info *ei, u32 *mbrsig)
|
|||||||
if (mbrbuf_end > (char *)(size_t)boot_params.hdr.heap_end_ptr)
|
if (mbrbuf_end > (char *)(size_t)boot_params.hdr.heap_end_ptr)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
memset(mbrbuf_ptr, 0, sector_size);
|
||||||
if (read_mbr(devno, mbrbuf_ptr))
|
if (read_mbr(devno, mbrbuf_ptr))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
*mbrsig = *(u32 *)&mbrbuf_ptr[EDD_MBR_SIG_OFFSET];
|
*mbrsig = *(u32 *)&mbrbuf_ptr[EDD_MBR_SIG_OFFSET];
|
||||||
return 0;
|
mbr_magic = *(u16 *)&mbrbuf_ptr[510];
|
||||||
|
|
||||||
|
/* check for valid MBR magic */
|
||||||
|
return mbr_magic == 0xAA55 ? 0 : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_edd_info(u8 devno, struct edd_info *ei)
|
static int get_edd_info(u8 devno, struct edd_info *ei)
|
||||||
|
|||||||
@@ -224,7 +224,7 @@ static void vesa_store_pm_info(void)
|
|||||||
static void vesa_store_mode_params_graphics(void)
|
static void vesa_store_mode_params_graphics(void)
|
||||||
{
|
{
|
||||||
/* Tell the kernel we're in VESA graphics mode */
|
/* Tell the kernel we're in VESA graphics mode */
|
||||||
boot_params.screen_info.orig_video_isVGA = 0x23;
|
boot_params.screen_info.orig_video_isVGA = VIDEO_TYPE_VLFB;
|
||||||
|
|
||||||
/* Mode parameters */
|
/* Mode parameters */
|
||||||
boot_params.screen_info.vesa_attributes = vminfo.mode_attr;
|
boot_params.screen_info.vesa_attributes = vminfo.mode_attr;
|
||||||
|
|||||||
@@ -1535,7 +1535,6 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
|||||||
CONFIG_VGA_CONSOLE=y
|
CONFIG_VGA_CONSOLE=y
|
||||||
CONFIG_VGACON_SOFT_SCROLLBACK=y
|
CONFIG_VGACON_SOFT_SCROLLBACK=y
|
||||||
CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
|
CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
|
||||||
CONFIG_VIDEO_SELECT=y
|
|
||||||
CONFIG_DUMMY_CONSOLE=y
|
CONFIG_DUMMY_CONSOLE=y
|
||||||
# CONFIG_FRAMEBUFFER_CONSOLE is not set
|
# CONFIG_FRAMEBUFFER_CONSOLE is not set
|
||||||
CONFIG_LOGO=y
|
CONFIG_LOGO=y
|
||||||
|
|||||||
@@ -1505,7 +1505,6 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
|||||||
CONFIG_VGA_CONSOLE=y
|
CONFIG_VGA_CONSOLE=y
|
||||||
CONFIG_VGACON_SOFT_SCROLLBACK=y
|
CONFIG_VGACON_SOFT_SCROLLBACK=y
|
||||||
CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
|
CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
|
||||||
CONFIG_VIDEO_SELECT=y
|
|
||||||
CONFIG_DUMMY_CONSOLE=y
|
CONFIG_DUMMY_CONSOLE=y
|
||||||
# CONFIG_FRAMEBUFFER_CONSOLE is not set
|
# CONFIG_FRAMEBUFFER_CONSOLE is not set
|
||||||
CONFIG_LOGO=y
|
CONFIG_LOGO=y
|
||||||
|
|||||||
+27
-41
@@ -351,31 +351,28 @@ static int ia32_setup_sigcontext(struct sigcontext_ia32 __user *sc,
|
|||||||
savesegment(es, tmp);
|
savesegment(es, tmp);
|
||||||
err |= __put_user(tmp, (unsigned int __user *)&sc->es);
|
err |= __put_user(tmp, (unsigned int __user *)&sc->es);
|
||||||
|
|
||||||
err |= __put_user((u32)regs->di, &sc->di);
|
err |= __put_user(regs->di, &sc->di);
|
||||||
err |= __put_user((u32)regs->si, &sc->si);
|
err |= __put_user(regs->si, &sc->si);
|
||||||
err |= __put_user((u32)regs->bp, &sc->bp);
|
err |= __put_user(regs->bp, &sc->bp);
|
||||||
err |= __put_user((u32)regs->sp, &sc->sp);
|
err |= __put_user(regs->sp, &sc->sp);
|
||||||
err |= __put_user((u32)regs->bx, &sc->bx);
|
err |= __put_user(regs->bx, &sc->bx);
|
||||||
err |= __put_user((u32)regs->dx, &sc->dx);
|
err |= __put_user(regs->dx, &sc->dx);
|
||||||
err |= __put_user((u32)regs->cx, &sc->cx);
|
err |= __put_user(regs->cx, &sc->cx);
|
||||||
err |= __put_user((u32)regs->ax, &sc->ax);
|
err |= __put_user(regs->ax, &sc->ax);
|
||||||
err |= __put_user((u32)regs->cs, &sc->cs);
|
err |= __put_user(regs->cs, &sc->cs);
|
||||||
err |= __put_user((u32)regs->ss, &sc->ss);
|
err |= __put_user(regs->ss, &sc->ss);
|
||||||
err |= __put_user(current->thread.trap_no, &sc->trapno);
|
err |= __put_user(current->thread.trap_no, &sc->trapno);
|
||||||
err |= __put_user(current->thread.error_code, &sc->err);
|
err |= __put_user(current->thread.error_code, &sc->err);
|
||||||
err |= __put_user((u32)regs->ip, &sc->ip);
|
err |= __put_user(regs->ip, &sc->ip);
|
||||||
err |= __put_user((u32)regs->flags, &sc->flags);
|
err |= __put_user(regs->flags, &sc->flags);
|
||||||
err |= __put_user((u32)regs->sp, &sc->sp_at_signal);
|
err |= __put_user(regs->sp, &sc->sp_at_signal);
|
||||||
|
|
||||||
tmp = save_i387_xstate_ia32(fpstate);
|
tmp = save_i387_xstate_ia32(fpstate);
|
||||||
if (tmp < 0)
|
if (tmp < 0)
|
||||||
err = -EFAULT;
|
err = -EFAULT;
|
||||||
else {
|
else
|
||||||
clear_used_math();
|
|
||||||
stts();
|
|
||||||
err |= __put_user(ptr_to_compat(tmp ? fpstate : NULL),
|
err |= __put_user(ptr_to_compat(tmp ? fpstate : NULL),
|
||||||
&sc->fpstate);
|
&sc->fpstate);
|
||||||
}
|
|
||||||
|
|
||||||
/* non-iBCS2 extensions.. */
|
/* non-iBCS2 extensions.. */
|
||||||
err |= __put_user(mask, &sc->oldmask);
|
err |= __put_user(mask, &sc->oldmask);
|
||||||
@@ -444,21 +441,18 @@ int ia32_setup_frame(int sig, struct k_sigaction *ka,
|
|||||||
frame = get_sigframe(ka, regs, sizeof(*frame), &fpstate);
|
frame = get_sigframe(ka, regs, sizeof(*frame), &fpstate);
|
||||||
|
|
||||||
if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
|
if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
|
||||||
goto give_sigsegv;
|
return -EFAULT;
|
||||||
|
|
||||||
err |= __put_user(sig, &frame->sig);
|
if (__put_user(sig, &frame->sig))
|
||||||
if (err)
|
return -EFAULT;
|
||||||
goto give_sigsegv;
|
|
||||||
|
|
||||||
err |= ia32_setup_sigcontext(&frame->sc, fpstate, regs, set->sig[0]);
|
if (ia32_setup_sigcontext(&frame->sc, fpstate, regs, set->sig[0]))
|
||||||
if (err)
|
return -EFAULT;
|
||||||
goto give_sigsegv;
|
|
||||||
|
|
||||||
if (_COMPAT_NSIG_WORDS > 1) {
|
if (_COMPAT_NSIG_WORDS > 1) {
|
||||||
err |= __copy_to_user(frame->extramask, &set->sig[1],
|
if (__copy_to_user(frame->extramask, &set->sig[1],
|
||||||
sizeof(frame->extramask));
|
sizeof(frame->extramask)))
|
||||||
if (err)
|
return -EFAULT;
|
||||||
goto give_sigsegv;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ka->sa.sa_flags & SA_RESTORER) {
|
if (ka->sa.sa_flags & SA_RESTORER) {
|
||||||
@@ -479,7 +473,7 @@ int ia32_setup_frame(int sig, struct k_sigaction *ka,
|
|||||||
*/
|
*/
|
||||||
err |= __copy_to_user(frame->retcode, &code, 8);
|
err |= __copy_to_user(frame->retcode, &code, 8);
|
||||||
if (err)
|
if (err)
|
||||||
goto give_sigsegv;
|
return -EFAULT;
|
||||||
|
|
||||||
/* Set up registers for signal handler */
|
/* Set up registers for signal handler */
|
||||||
regs->sp = (unsigned long) frame;
|
regs->sp = (unsigned long) frame;
|
||||||
@@ -502,10 +496,6 @@ int ia32_setup_frame(int sig, struct k_sigaction *ka,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
give_sigsegv:
|
|
||||||
force_sigsegv(sig, current);
|
|
||||||
return -EFAULT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
|
int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
|
||||||
@@ -533,14 +523,14 @@ int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
|
|||||||
frame = get_sigframe(ka, regs, sizeof(*frame), &fpstate);
|
frame = get_sigframe(ka, regs, sizeof(*frame), &fpstate);
|
||||||
|
|
||||||
if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
|
if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
|
||||||
goto give_sigsegv;
|
return -EFAULT;
|
||||||
|
|
||||||
err |= __put_user(sig, &frame->sig);
|
err |= __put_user(sig, &frame->sig);
|
||||||
err |= __put_user(ptr_to_compat(&frame->info), &frame->pinfo);
|
err |= __put_user(ptr_to_compat(&frame->info), &frame->pinfo);
|
||||||
err |= __put_user(ptr_to_compat(&frame->uc), &frame->puc);
|
err |= __put_user(ptr_to_compat(&frame->uc), &frame->puc);
|
||||||
err |= copy_siginfo_to_user32(&frame->info, info);
|
err |= copy_siginfo_to_user32(&frame->info, info);
|
||||||
if (err)
|
if (err)
|
||||||
goto give_sigsegv;
|
return -EFAULT;
|
||||||
|
|
||||||
/* Create the ucontext. */
|
/* Create the ucontext. */
|
||||||
if (cpu_has_xsave)
|
if (cpu_has_xsave)
|
||||||
@@ -556,7 +546,7 @@ int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
|
|||||||
regs, set->sig[0]);
|
regs, set->sig[0]);
|
||||||
err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
|
err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
|
||||||
if (err)
|
if (err)
|
||||||
goto give_sigsegv;
|
return -EFAULT;
|
||||||
|
|
||||||
if (ka->sa.sa_flags & SA_RESTORER)
|
if (ka->sa.sa_flags & SA_RESTORER)
|
||||||
restorer = ka->sa.sa_restorer;
|
restorer = ka->sa.sa_restorer;
|
||||||
@@ -571,7 +561,7 @@ int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
|
|||||||
*/
|
*/
|
||||||
err |= __copy_to_user(frame->retcode, &code, 8);
|
err |= __copy_to_user(frame->retcode, &code, 8);
|
||||||
if (err)
|
if (err)
|
||||||
goto give_sigsegv;
|
return -EFAULT;
|
||||||
|
|
||||||
/* Set up registers for signal handler */
|
/* Set up registers for signal handler */
|
||||||
regs->sp = (unsigned long) frame;
|
regs->sp = (unsigned long) frame;
|
||||||
@@ -599,8 +589,4 @@ int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
give_sigsegv:
|
|
||||||
force_sigsegv(sig, current);
|
|
||||||
return -EFAULT;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ ifdef CONFIG_FTRACE
|
|||||||
# Do not profile debug and lowlevel utilities
|
# Do not profile debug and lowlevel utilities
|
||||||
CFLAGS_REMOVE_tsc.o = -pg
|
CFLAGS_REMOVE_tsc.o = -pg
|
||||||
CFLAGS_REMOVE_rtc.o = -pg
|
CFLAGS_REMOVE_rtc.o = -pg
|
||||||
CFLAGS_REMOVE_paravirt.o = -pg
|
CFLAGS_REMOVE_paravirt-spinlocks.o = -pg
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -51,7 +51,6 @@ obj-$(CONFIG_X86_BIOS_REBOOT) += reboot.o
|
|||||||
obj-$(CONFIG_MCA) += mca_32.o
|
obj-$(CONFIG_MCA) += mca_32.o
|
||||||
obj-$(CONFIG_X86_MSR) += msr.o
|
obj-$(CONFIG_X86_MSR) += msr.o
|
||||||
obj-$(CONFIG_X86_CPUID) += cpuid.o
|
obj-$(CONFIG_X86_CPUID) += cpuid.o
|
||||||
obj-$(CONFIG_MICROCODE) += microcode.o
|
|
||||||
obj-$(CONFIG_PCI) += early-quirks.o
|
obj-$(CONFIG_PCI) += early-quirks.o
|
||||||
apm-y := apm_32.o
|
apm-y := apm_32.o
|
||||||
obj-$(CONFIG_APM) += apm.o
|
obj-$(CONFIG_APM) += apm.o
|
||||||
@@ -90,7 +89,7 @@ obj-$(CONFIG_DEBUG_NX_TEST) += test_nx.o
|
|||||||
obj-$(CONFIG_VMI) += vmi_32.o vmiclock_32.o
|
obj-$(CONFIG_VMI) += vmi_32.o vmiclock_32.o
|
||||||
obj-$(CONFIG_KVM_GUEST) += kvm.o
|
obj-$(CONFIG_KVM_GUEST) += kvm.o
|
||||||
obj-$(CONFIG_KVM_CLOCK) += kvmclock.o
|
obj-$(CONFIG_KVM_CLOCK) += kvmclock.o
|
||||||
obj-$(CONFIG_PARAVIRT) += paravirt.o paravirt_patch_$(BITS).o
|
obj-$(CONFIG_PARAVIRT) += paravirt.o paravirt_patch_$(BITS).o paravirt-spinlocks.o
|
||||||
obj-$(CONFIG_PARAVIRT_CLOCK) += pvclock.o
|
obj-$(CONFIG_PARAVIRT_CLOCK) += pvclock.o
|
||||||
|
|
||||||
obj-$(CONFIG_PCSPKR_PLATFORM) += pcspeaker.o
|
obj-$(CONFIG_PCSPKR_PLATFORM) += pcspeaker.o
|
||||||
@@ -100,6 +99,11 @@ scx200-y += scx200_32.o
|
|||||||
|
|
||||||
obj-$(CONFIG_OLPC) += olpc.o
|
obj-$(CONFIG_OLPC) += olpc.o
|
||||||
|
|
||||||
|
microcode-y := microcode_core.o
|
||||||
|
microcode-$(CONFIG_MICROCODE_INTEL) += microcode_intel.o
|
||||||
|
microcode-$(CONFIG_MICROCODE_AMD) += microcode_amd.o
|
||||||
|
obj-$(CONFIG_MICROCODE) += microcode.o
|
||||||
|
|
||||||
###
|
###
|
||||||
# 64 bit specific files
|
# 64 bit specific files
|
||||||
ifeq ($(CONFIG_X86_64),y)
|
ifeq ($(CONFIG_X86_64),y)
|
||||||
|
|||||||
@@ -1418,8 +1418,16 @@ static int __init force_acpi_ht(const struct dmi_system_id *d)
|
|||||||
*/
|
*/
|
||||||
static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)
|
static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)
|
||||||
{
|
{
|
||||||
pr_notice("%s detected: Ignoring BIOS IRQ0 pin2 override\n", d->ident);
|
/*
|
||||||
acpi_skip_timer_override = 1;
|
* The ati_ixp4x0_rev() early PCI quirk should have set
|
||||||
|
* the acpi_skip_timer_override flag already:
|
||||||
|
*/
|
||||||
|
if (!acpi_skip_timer_override) {
|
||||||
|
WARN(1, KERN_ERR "ati_ixp4x0 quirk not complete.\n");
|
||||||
|
pr_notice("%s detected: Ignoring BIOS IRQ0 pin2 override\n",
|
||||||
|
d->ident);
|
||||||
|
acpi_skip_timer_override = 1;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1121,16 +1121,5 @@ void __cpuinit cpu_init(void)
|
|||||||
xsave_init();
|
xsave_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_HOTPLUG_CPU
|
|
||||||
void __cpuinit cpu_uninit(void)
|
|
||||||
{
|
|
||||||
int cpu = raw_smp_processor_id();
|
|
||||||
cpu_clear(cpu, cpu_initialized);
|
|
||||||
|
|
||||||
/* lazy TLB state */
|
|
||||||
per_cpu(cpu_tlbstate, cpu).state = 0;
|
|
||||||
per_cpu(cpu_tlbstate, cpu).active_mm = &init_mm;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -66,6 +66,6 @@ struct tss_struct doublefault_tss __cacheline_aligned = {
|
|||||||
.ds = __USER_DS,
|
.ds = __USER_DS,
|
||||||
.fs = __KERNEL_PERCPU,
|
.fs = __KERNEL_PERCPU,
|
||||||
|
|
||||||
.__cr3 = __pa(swapper_pg_dir)
|
.__cr3 = __phys_addr_const((unsigned long)swapper_pg_dir)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -95,6 +95,52 @@ static void __init nvidia_bugs(int num, int slot, int func)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u32 ati_ixp4x0_rev(int num, int slot, int func)
|
||||||
|
{
|
||||||
|
u32 d;
|
||||||
|
u8 b;
|
||||||
|
|
||||||
|
b = read_pci_config_byte(num, slot, func, 0xac);
|
||||||
|
b &= ~(1<<5);
|
||||||
|
write_pci_config_byte(num, slot, func, 0xac, b);
|
||||||
|
|
||||||
|
d = read_pci_config(num, slot, func, 0x70);
|
||||||
|
d |= 1<<8;
|
||||||
|
write_pci_config(num, slot, func, 0x70, d);
|
||||||
|
|
||||||
|
d = read_pci_config(num, slot, func, 0x8);
|
||||||
|
d &= 0xff;
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init ati_bugs(int num, int slot, int func)
|
||||||
|
{
|
||||||
|
#if defined(CONFIG_ACPI) && defined (CONFIG_X86_IO_APIC)
|
||||||
|
u32 d;
|
||||||
|
u8 b;
|
||||||
|
|
||||||
|
if (acpi_use_timer_override)
|
||||||
|
return;
|
||||||
|
|
||||||
|
d = ati_ixp4x0_rev(num, slot, func);
|
||||||
|
if (d < 0x82)
|
||||||
|
acpi_skip_timer_override = 1;
|
||||||
|
else {
|
||||||
|
/* check for IRQ0 interrupt swap */
|
||||||
|
outb(0x72, 0xcd6); b = inb(0xcd7);
|
||||||
|
if (!(b & 0x2))
|
||||||
|
acpi_skip_timer_override = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (acpi_skip_timer_override) {
|
||||||
|
printk(KERN_INFO "SB4X0 revision 0x%x\n", d);
|
||||||
|
printk(KERN_INFO "Ignoring ACPI timer override.\n");
|
||||||
|
printk(KERN_INFO "If you got timer trouble "
|
||||||
|
"try acpi_use_timer_override\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_DMAR
|
#ifdef CONFIG_DMAR
|
||||||
static void __init intel_g33_dmar(int num, int slot, int func)
|
static void __init intel_g33_dmar(int num, int slot, int func)
|
||||||
{
|
{
|
||||||
@@ -128,6 +174,8 @@ static struct chipset early_qrk[] __initdata = {
|
|||||||
PCI_CLASS_BRIDGE_PCI, PCI_ANY_ID, QFLAG_APPLY_ONCE, via_bugs },
|
PCI_CLASS_BRIDGE_PCI, PCI_ANY_ID, QFLAG_APPLY_ONCE, via_bugs },
|
||||||
{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_K8_NB,
|
{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_K8_NB,
|
||||||
PCI_CLASS_BRIDGE_HOST, PCI_ANY_ID, 0, fix_hypertransport_config },
|
PCI_CLASS_BRIDGE_HOST, PCI_ANY_ID, 0, fix_hypertransport_config },
|
||||||
|
{ PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_SMBUS,
|
||||||
|
PCI_CLASS_SERIAL_SMBUS, PCI_ANY_ID, 0, ati_bugs },
|
||||||
#ifdef CONFIG_DMAR
|
#ifdef CONFIG_DMAR
|
||||||
{ PCI_VENDOR_ID_INTEL, 0x29c0,
|
{ PCI_VENDOR_ID_INTEL, 0x29c0,
|
||||||
PCI_CLASS_BRIDGE_HOST, PCI_ANY_ID, 0, intel_g33_dmar },
|
PCI_CLASS_BRIDGE_HOST, PCI_ANY_ID, 0, intel_g33_dmar },
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user