Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
OpenBMC Firmware
talos-obmc-linux
Commits
bce6824c
Commit
bce6824c
authored
6 years ago
by
Ingo Molnar
Browse files
Options
Download
Plain Diff
Merge branch 'x86/core' into x86/build, to avoid conflicts
Signed-off-by:
Ingo Molnar
<
mingo@kernel.org
>
parents
494b5168
c0554d2d
Changes
42
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
209 additions
and
131 deletions
+209
-131
Documentation/fb/uvesafb.txt
Documentation/fb/uvesafb.txt
+3
-2
MAINTAINERS
MAINTAINERS
+2
-2
arch/arm/boot/dts/at91-sama5d2_ptc_ek.dts
arch/arm/boot/dts/at91-sama5d2_ptc_ek.dts
+2
-0
arch/arm/boot/dts/bcm63138.dtsi
arch/arm/boot/dts/bcm63138.dtsi
+8
-6
arch/arm/boot/dts/stm32mp157c.dtsi
arch/arm/boot/dts/stm32mp157c.dtsi
+2
-2
arch/arm/boot/dts/sun8i-r40.dtsi
arch/arm/boot/dts/sun8i-r40.dtsi
+1
-2
arch/arm64/kvm/guest.c
arch/arm64/kvm/guest.c
+54
-1
arch/arm64/mm/hugetlbpage.c
arch/arm64/mm/hugetlbpage.c
+43
-7
arch/x86/include/asm/asm.h
arch/x86/include/asm/asm.h
+8
-2
arch/x86/include/asm/extable.h
arch/x86/include/asm/extable.h
+2
-1
arch/x86/include/asm/fpu/internal.h
arch/x86/include/asm/fpu/internal.h
+1
-1
arch/x86/include/asm/futex.h
arch/x86/include/asm/futex.h
+3
-3
arch/x86/include/asm/ptrace.h
arch/x86/include/asm/ptrace.h
+2
-0
arch/x86/include/asm/uaccess.h
arch/x86/include/asm/uaccess.h
+11
-11
arch/x86/kernel/cpu/mcheck/mce.c
arch/x86/kernel/cpu/mcheck/mce.c
+1
-1
arch/x86/kernel/kprobes/core.c
arch/x86/kernel/kprobes/core.c
+0
-38
arch/x86/kernel/traps.c
arch/x86/kernel/traps.c
+13
-3
arch/x86/lib/checksum_32.S
arch/x86/lib/checksum_32.S
+2
-2
arch/x86/lib/copy_user_64.S
arch/x86/lib/copy_user_64.S
+45
-45
arch/x86/lib/csum-copy_64.S
arch/x86/lib/csum-copy_64.S
+6
-2
No files found.
Documentation/fb/uvesafb.txt
View file @
bce6824c
...
...
@@ -15,7 +15,8 @@ than x86. Check the v86d documentation for a list of currently supported
arches.
v86d source code can be downloaded from the following website:
http://dev.gentoo.org/~spock/projects/uvesafb
https://github.com/mjanusz/v86d
Please refer to the v86d documentation for detailed configuration and
installation instructions.
...
...
@@ -177,7 +178,7 @@ from the Video BIOS if you set pixclock to 0 in fb_var_screeninfo.
--
Michal Januszewski <spock@gentoo.org>
Last updated: 20
09-03-3
0
Last updated: 20
17-10-1
0
Documentation of the uvesafb options is loosely based on vesafb.txt.
This diff is collapsed.
Click to expand it.
MAINTAINERS
View file @
bce6824c
...
...
@@ -1251,7 +1251,7 @@ N: meson
ARM/Annapurna Labs ALPINE ARCHITECTURE
M: Tsahee Zidenberg <tsahee@annapurnalabs.com>
M: Antoine Tenart <antoine.tenart@
free-electrons
.com>
M: Antoine Tenart <antoine.tenart@
bootlin
.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Maintained
F: arch/arm/mach-alpine/
...
...
@@ -15395,7 +15395,7 @@ S: Maintained
UVESAFB DRIVER
M: Michal Januszewski <spock@gentoo.org>
L: linux-fbdev@vger.kernel.org
W: http://
dev.gentoo.org/~spock/projects/uvesafb/
W: http
s
://
github.com/mjanusz/v86d
S: Maintained
F: Documentation/fb/uvesafb.txt
F: drivers/video/fbdev/uvesafb.*
...
...
This diff is collapsed.
Click to expand it.
arch/arm/boot/dts/at91-sama5d2_ptc_ek.dts
View file @
bce6824c
...
...
@@ -11,6 +11,7 @@
#
include
"sama5d2-pinfunc.h"
#
include
<
dt
-
bindings
/
mfd
/
atmel
-
flexcom
.
h
>
#
include
<
dt
-
bindings
/
gpio
/
gpio
.
h
>
#
include
<
dt
-
bindings
/
pinctrl
/
at91
.
h
>
/
{
model
=
"Atmel SAMA5D2 PTC EK"
;
...
...
@@ -299,6 +300,7 @@
<
PIN_PA30__NWE_NANDWE
>,
<
PIN_PB2__NRD_NANDOE
>;
bias
-
pull
-
up
;
atmel
,
drive
-
strength
=
<
ATMEL_PIO_DRVSTR_ME
>;
};
ale_cle_rdy_cs
{
...
...
This diff is collapsed.
Click to expand it.
arch/arm/boot/dts/bcm63138.dtsi
View file @
bce6824c
...
...
@@ -106,21 +106,23 @@
global_timer
:
timer
@
1e200
{
compatible
=
"arm,cortex-a9-global-timer"
;
reg
=
<
0x1e200
0x20
>;
interrupts
=
<
GIC_PPI
11
IRQ_TYPE_
LEVEL_HIGH
>;
interrupts
=
<
GIC_PPI
11
IRQ_TYPE_
EDGE_RISING
>;
clocks
=
<&
axi_clk
>;
};
local_timer
:
local
-
timer
@
1e600
{
compatible
=
"arm,cortex-a9-twd-timer"
;
reg
=
<
0x1e600
0x20
>;
interrupts
=
<
GIC_PPI
13
IRQ_TYPE_LEVEL_HIGH
>;
interrupts
=
<
GIC_PPI
13
(
GIC_CPU_MASK_SIMPLE
(
2
)
|
IRQ_TYPE_EDGE_RISING
)>;
clocks
=
<&
axi_clk
>;
};
twd_watchdog
:
watchdog
@
1e620
{
compatible
=
"arm,cortex-a9-twd-wdt"
;
reg
=
<
0x1e620
0x20
>;
interrupts
=
<
GIC_PPI
14
IRQ_TYPE_LEVEL_HIGH
>;
interrupts
=
<
GIC_PPI
14
(
GIC_CPU_MASK_SIMPLE
(
2
)
|
IRQ_TYPE_LEVEL_HIGH
)>;
};
armpll
:
armpll
{
...
...
@@ -158,7 +160,7 @@
serial0
:
serial
@
600
{
compatible
=
"brcm,bcm6345-uart"
;
reg
=
<
0x600
0x1b
>;
interrupts
=
<
GIC_SPI
32
0
>;
interrupts
=
<
GIC_SPI
32
IRQ_TYPE_LEVEL_HIGH
>;
clocks
=
<&
periph_clk
>;
clock
-
names
=
"periph"
;
status
=
"disabled"
;
...
...
@@ -167,7 +169,7 @@
serial1
:
serial
@
620
{
compatible
=
"brcm,bcm6345-uart"
;
reg
=
<
0x620
0x1b
>;
interrupts
=
<
GIC_SPI
33
0
>;
interrupts
=
<
GIC_SPI
33
IRQ_TYPE_LEVEL_HIGH
>;
clocks
=
<&
periph_clk
>;
clock
-
names
=
"periph"
;
status
=
"disabled"
;
...
...
@@ -180,7 +182,7 @@
reg
=
<
0x2000
0x600
>,
<
0xf0
0x10
>;
reg
-
names
=
"nand"
,
"nand-int-base"
;
status
=
"disabled"
;
interrupts
=
<
GIC_SPI
38
0
>;
interrupts
=
<
GIC_SPI
38
IRQ_TYPE_LEVEL_HIGH
>;
interrupt
-
names
=
"nand"
;
};
...
...
This diff is collapsed.
Click to expand it.
arch/arm/boot/dts/stm32mp157c.dtsi
View file @
bce6824c
...
...
@@ -1078,8 +1078,8 @@
interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&rcc SPI6_K>;
resets = <&rcc SPI6_R>;
dmas = <&mdma1 34 0x0 0x40008 0x0 0x0
0
>,
<&mdma1 35 0x0 0x40002 0x0 0x0
0
>;
dmas = <&mdma1 34 0x0 0x40008 0x0 0x0>,
<&mdma1 35 0x0 0x40002 0x0 0x0>;
dma-names = "rx", "tx";
status = "disabled";
};
...
...
This diff is collapsed.
Click to expand it.
arch/arm/boot/dts/sun8i-r40.dtsi
View file @
bce6824c
...
...
@@ -800,8 +800,7 @@
};
hdmi_phy: hdmi-phy@1ef0000 {
compatible = "allwinner,sun8i-r40-hdmi-phy",
"allwinner,sun50i-a64-hdmi-phy";
compatible = "allwinner,sun8i-r40-hdmi-phy";
reg = <0x01ef0000 0x10000>;
clocks = <&ccu CLK_BUS_HDMI1>, <&ccu CLK_HDMI_SLOW>,
<&ccu 7>, <&ccu 16>;
...
...
This diff is collapsed.
Click to expand it.
arch/arm64/kvm/guest.c
View file @
bce6824c
...
...
@@ -57,6 +57,45 @@ static u64 core_reg_offset_from_id(u64 id)
return
id
&
~
(
KVM_REG_ARCH_MASK
|
KVM_REG_SIZE_MASK
|
KVM_REG_ARM_CORE
);
}
static
int
validate_core_offset
(
const
struct
kvm_one_reg
*
reg
)
{
u64
off
=
core_reg_offset_from_id
(
reg
->
id
);
int
size
;
switch
(
off
)
{
case
KVM_REG_ARM_CORE_REG
(
regs
.
regs
[
0
])
...
KVM_REG_ARM_CORE_REG
(
regs
.
regs
[
30
]):
case
KVM_REG_ARM_CORE_REG
(
regs
.
sp
):
case
KVM_REG_ARM_CORE_REG
(
regs
.
pc
):
case
KVM_REG_ARM_CORE_REG
(
regs
.
pstate
):
case
KVM_REG_ARM_CORE_REG
(
sp_el1
):
case
KVM_REG_ARM_CORE_REG
(
elr_el1
):
case
KVM_REG_ARM_CORE_REG
(
spsr
[
0
])
...
KVM_REG_ARM_CORE_REG
(
spsr
[
KVM_NR_SPSR
-
1
]):
size
=
sizeof
(
__u64
);
break
;
case
KVM_REG_ARM_CORE_REG
(
fp_regs
.
vregs
[
0
])
...
KVM_REG_ARM_CORE_REG
(
fp_regs
.
vregs
[
31
]):
size
=
sizeof
(
__uint128_t
);
break
;
case
KVM_REG_ARM_CORE_REG
(
fp_regs
.
fpsr
):
case
KVM_REG_ARM_CORE_REG
(
fp_regs
.
fpcr
):
size
=
sizeof
(
__u32
);
break
;
default:
return
-
EINVAL
;
}
if
(
KVM_REG_SIZE
(
reg
->
id
)
==
size
&&
IS_ALIGNED
(
off
,
size
/
sizeof
(
__u32
)))
return
0
;
return
-
EINVAL
;
}
static
int
get_core_reg
(
struct
kvm_vcpu
*
vcpu
,
const
struct
kvm_one_reg
*
reg
)
{
/*
...
...
@@ -76,6 +115,9 @@ static int get_core_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
(
off
+
(
KVM_REG_SIZE
(
reg
->
id
)
/
sizeof
(
__u32
)))
>=
nr_regs
)
return
-
ENOENT
;
if
(
validate_core_offset
(
reg
))
return
-
EINVAL
;
if
(
copy_to_user
(
uaddr
,
((
u32
*
)
regs
)
+
off
,
KVM_REG_SIZE
(
reg
->
id
)))
return
-
EFAULT
;
...
...
@@ -98,6 +140,9 @@ static int set_core_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
(
off
+
(
KVM_REG_SIZE
(
reg
->
id
)
/
sizeof
(
__u32
)))
>=
nr_regs
)
return
-
ENOENT
;
if
(
validate_core_offset
(
reg
))
return
-
EINVAL
;
if
(
KVM_REG_SIZE
(
reg
->
id
)
>
sizeof
(
tmp
))
return
-
EINVAL
;
...
...
@@ -107,17 +152,25 @@ static int set_core_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
}
if
(
off
==
KVM_REG_ARM_CORE_REG
(
regs
.
pstate
))
{
u
32
mode
=
(
*
(
u
32
*
)
valp
)
&
PSR_AA32_MODE_MASK
;
u
64
mode
=
(
*
(
u
64
*
)
valp
)
&
PSR_AA32_MODE_MASK
;
switch
(
mode
)
{
case
PSR_AA32_MODE_USR
:
if
(
!
system_supports_32bit_el0
())
return
-
EINVAL
;
break
;
case
PSR_AA32_MODE_FIQ
:
case
PSR_AA32_MODE_IRQ
:
case
PSR_AA32_MODE_SVC
:
case
PSR_AA32_MODE_ABT
:
case
PSR_AA32_MODE_UND
:
if
(
!
vcpu_el1_is_32bit
(
vcpu
))
return
-
EINVAL
;
break
;
case
PSR_MODE_EL0t
:
case
PSR_MODE_EL1t
:
case
PSR_MODE_EL1h
:
if
(
vcpu_el1_is_32bit
(
vcpu
))
return
-
EINVAL
;
break
;
default:
err
=
-
EINVAL
;
...
...
This diff is collapsed.
Click to expand it.
arch/arm64/mm/hugetlbpage.c
View file @
bce6824c
...
...
@@ -117,11 +117,14 @@ static pte_t get_clear_flush(struct mm_struct *mm,
/*
* If HW_AFDBM is enabled, then the HW could turn on
* the dirty bit for any page in the set,
so check
*
them all. All hugetlb entries are already young
.
* the dirty
or accessed
bit for any page in the set,
*
so check them all
.
*/
if
(
pte_dirty
(
pte
))
orig_pte
=
pte_mkdirty
(
orig_pte
);
if
(
pte_young
(
pte
))
orig_pte
=
pte_mkyoung
(
orig_pte
);
}
if
(
valid
)
{
...
...
@@ -320,11 +323,40 @@ pte_t huge_ptep_get_and_clear(struct mm_struct *mm,
return
get_clear_flush
(
mm
,
addr
,
ptep
,
pgsize
,
ncontig
);
}
/*
* huge_ptep_set_access_flags will update access flags (dirty, accesssed)
* and write permission.
*
* For a contiguous huge pte range we need to check whether or not write
* permission has to change only on the first pte in the set. Then for
* all the contiguous ptes we need to check whether or not there is a
* discrepancy between dirty or young.
*/
static
int
__cont_access_flags_changed
(
pte_t
*
ptep
,
pte_t
pte
,
int
ncontig
)
{
int
i
;
if
(
pte_write
(
pte
)
!=
pte_write
(
huge_ptep_get
(
ptep
)))
return
1
;
for
(
i
=
0
;
i
<
ncontig
;
i
++
)
{
pte_t
orig_pte
=
huge_ptep_get
(
ptep
+
i
);
if
(
pte_dirty
(
pte
)
!=
pte_dirty
(
orig_pte
))
return
1
;
if
(
pte_young
(
pte
)
!=
pte_young
(
orig_pte
))
return
1
;
}
return
0
;
}
int
huge_ptep_set_access_flags
(
struct
vm_area_struct
*
vma
,
unsigned
long
addr
,
pte_t
*
ptep
,
pte_t
pte
,
int
dirty
)
{
int
ncontig
,
i
,
changed
=
0
;
int
ncontig
,
i
;
size_t
pgsize
=
0
;
unsigned
long
pfn
=
pte_pfn
(
pte
),
dpfn
;
pgprot_t
hugeprot
;
...
...
@@ -336,19 +368,23 @@ int huge_ptep_set_access_flags(struct vm_area_struct *vma,
ncontig
=
find_num_contig
(
vma
->
vm_mm
,
addr
,
ptep
,
&
pgsize
);
dpfn
=
pgsize
>>
PAGE_SHIFT
;
if
(
!
__cont_access_flags_changed
(
ptep
,
pte
,
ncontig
))
return
0
;
orig_pte
=
get_clear_flush
(
vma
->
vm_mm
,
addr
,
ptep
,
pgsize
,
ncontig
);
if
(
!
pte_same
(
orig_pte
,
pte
))
changed
=
1
;
/* Make sure we don't lose the dirty state */
/* Make sure we don't lose the dirty
or young
state */
if
(
pte_dirty
(
orig_pte
))
pte
=
pte_mkdirty
(
pte
);
if
(
pte_young
(
orig_pte
))
pte
=
pte_mkyoung
(
pte
);
hugeprot
=
pte_pgprot
(
pte
);
for
(
i
=
0
;
i
<
ncontig
;
i
++
,
ptep
++
,
addr
+=
pgsize
,
pfn
+=
dpfn
)
set_pte_at
(
vma
->
vm_mm
,
addr
,
ptep
,
pfn_pte
(
pfn
,
hugeprot
));
return
changed
;
return
1
;
}
void
huge_ptep_set_wrprotect
(
struct
mm_struct
*
mm
,
...
...
This diff is collapsed.
Click to expand it.
arch/x86/include/asm/asm.h
View file @
bce6824c
...
...
@@ -130,6 +130,9 @@
# define _ASM_EXTABLE(from, to) \
_ASM_EXTABLE_HANDLE(from, to, ex_handler_default)
# define _ASM_EXTABLE_UA(from, to) \
_ASM_EXTABLE_HANDLE(from, to, ex_handler_uaccess)
# define _ASM_EXTABLE_FAULT(from, to) \
_ASM_EXTABLE_HANDLE(from, to, ex_handler_fault)
...
...
@@ -165,8 +168,8 @@
jmp
copy_user_handle_tail
.
previous
_ASM_EXTABLE
(
100
b
,
103
b
)
_ASM_EXTABLE
(
101
b
,
103
b
)
_ASM_EXTABLE
_UA
(
100
b
,
103
b
)
_ASM_EXTABLE
_UA
(
101
b
,
103
b
)
.
endm
#else
...
...
@@ -182,6 +185,9 @@
# define _ASM_EXTABLE(from, to) \
_ASM_EXTABLE_HANDLE(from, to, ex_handler_default)
# define _ASM_EXTABLE_UA(from, to) \
_ASM_EXTABLE_HANDLE(from, to, ex_handler_uaccess)
# define _ASM_EXTABLE_FAULT(from, to) \
_ASM_EXTABLE_HANDLE(from, to, ex_handler_fault)
...
...
This diff is collapsed.
Click to expand it.
arch/x86/include/asm/extable.h
View file @
bce6824c
...
...
@@ -29,7 +29,8 @@ struct pt_regs;
(b)->handler = (tmp).handler - (delta); \
} while (0)
extern
int
fixup_exception
(
struct
pt_regs
*
regs
,
int
trapnr
);
extern
int
fixup_exception
(
struct
pt_regs
*
regs
,
int
trapnr
,
unsigned
long
error_code
,
unsigned
long
fault_addr
);
extern
int
fixup_bug
(
struct
pt_regs
*
regs
,
int
trapnr
);
extern
bool
ex_has_fault_handler
(
unsigned
long
ip
);
extern
void
early_fixup_exception
(
struct
pt_regs
*
regs
,
int
trapnr
);
...
...
This diff is collapsed.
Click to expand it.
arch/x86/include/asm/fpu/internal.h
View file @
bce6824c
...
...
@@ -226,7 +226,7 @@ static inline void copy_fxregs_to_kernel(struct fpu *fpu)
"3: movl $-2,%[err]\n\t" \
"jmp 2b\n\t" \
".popsection\n\t" \
_ASM_EXTABLE(1b, 3b) \
_ASM_EXTABLE
_UA
(1b, 3b) \
: [err] "=r" (err) \
: "D" (st), "m" (*st), "a" (lmask), "d" (hmask) \
: "memory")
...
...
This diff is collapsed.
Click to expand it.
arch/x86/include/asm/futex.h
View file @
bce6824c
...
...
@@ -20,7 +20,7 @@
"3:\tmov\t%3, %1\n" \
"\tjmp\t2b\n" \
"\t.previous\n" \
_ASM_EXTABLE(1b, 3b) \
_ASM_EXTABLE
_UA
(1b, 3b) \
: "=r" (oldval), "=r" (ret), "+m" (*uaddr) \
: "i" (-EFAULT), "0" (oparg), "1" (0))
...
...
@@ -36,8 +36,8 @@
"4:\tmov\t%5, %1\n" \
"\tjmp\t3b\n" \
"\t.previous\n" \
_ASM_EXTABLE(1b, 4b) \
_ASM_EXTABLE(2b, 4b) \
_ASM_EXTABLE
_UA
(1b, 4b) \
_ASM_EXTABLE
_UA
(2b, 4b) \
: "=&a" (oldval), "=&r" (ret), \
"+m" (*uaddr), "=&r" (tem) \
: "r" (oparg), "i" (-EFAULT), "1" (0))
...
...
This diff is collapsed.
Click to expand it.
arch/x86/include/asm/ptrace.h
View file @
bce6824c
...
...
@@ -37,8 +37,10 @@ struct pt_regs {
unsigned
short
__esh
;
unsigned
short
fs
;
unsigned
short
__fsh
;
/* On interrupt, gs and __gsh store the vector number. */
unsigned
short
gs
;
unsigned
short
__gsh
;
/* On interrupt, this is the error code. */
unsigned
long
orig_ax
;
unsigned
long
ip
;
unsigned
short
cs
;
...
...
This diff is collapsed.
Click to expand it.
arch/x86/include/asm/uaccess.h
View file @
bce6824c
...
...
@@ -198,8 +198,8 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
"4: movl %3,%0\n" \
" jmp 3b\n" \
".previous\n" \
_ASM_EXTABLE(1b, 4b) \
_ASM_EXTABLE(2b, 4b) \
_ASM_EXTABLE
_UA
(1b, 4b) \
_ASM_EXTABLE
_UA
(2b, 4b) \
: "=r" (err) \
: "A" (x), "r" (addr), "i" (errret), "0" (err))
...
...
@@ -340,8 +340,8 @@ do { \
" xorl %%edx,%%edx\n" \
" jmp 3b\n" \
".previous\n" \
_ASM_EXTABLE(1b, 4b) \
_ASM_EXTABLE(2b, 4b) \
_ASM_EXTABLE
_UA
(1b, 4b) \
_ASM_EXTABLE
_UA
(2b, 4b) \
: "=r" (retval), "=&A"(x) \
: "m" (__m(__ptr)), "m" __m(((u32 __user *)(__ptr)) + 1), \
"i" (errret), "0" (retval)); \
...
...
@@ -386,7 +386,7 @@ do { \
" xor"itype" %"rtype"1,%"rtype"1\n" \
" jmp 2b\n" \
".previous\n" \
_ASM_EXTABLE(1b, 3b) \
_ASM_EXTABLE
_UA
(1b, 3b) \
: "=r" (err), ltype(x) \
: "m" (__m(addr)), "i" (errret), "0" (err))
...
...
@@ -398,7 +398,7 @@ do { \
"3: mov %3,%0\n" \
" jmp 2b\n" \
".previous\n" \
_ASM_EXTABLE(1b, 3b) \
_ASM_EXTABLE
_UA
(1b, 3b) \
: "=r" (err), ltype(x) \
: "m" (__m(addr)), "i" (errret), "0" (err))
...
...
@@ -474,7 +474,7 @@ struct __large_struct { unsigned long buf[100]; };
"3: mov %3,%0\n" \
" jmp 2b\n" \
".previous\n" \
_ASM_EXTABLE(1b, 3b) \
_ASM_EXTABLE
_UA
(1b, 3b) \
: "=r"(err) \
: ltype(x), "m" (__m(addr)), "i" (errret), "0" (err))
...
...
@@ -602,7 +602,7 @@ extern void __cmpxchg_wrong_size(void)
"3:\tmov %3, %0\n" \
"\tjmp 2b\n" \
"\t.previous\n" \
_ASM_EXTABLE(1b, 3b) \
_ASM_EXTABLE
_UA
(1b, 3b) \
: "+r" (__ret), "=a" (__old), "+m" (*(ptr)) \
: "i" (-EFAULT), "q" (__new), "1" (__old) \
: "memory" \
...
...
@@ -618,7 +618,7 @@ extern void __cmpxchg_wrong_size(void)
"3:\tmov %3, %0\n" \
"\tjmp 2b\n" \
"\t.previous\n" \
_ASM_EXTABLE(1b, 3b) \
_ASM_EXTABLE
_UA
(1b, 3b) \
: "+r" (__ret), "=a" (__old), "+m" (*(ptr)) \
: "i" (-EFAULT), "r" (__new), "1" (__old) \
: "memory" \
...
...
@@ -634,7 +634,7 @@ extern void __cmpxchg_wrong_size(void)
"3:\tmov %3, %0\n" \
"\tjmp 2b\n" \
"\t.previous\n" \
_ASM_EXTABLE(1b, 3b) \
_ASM_EXTABLE
_UA
(1b, 3b) \
: "+r" (__ret), "=a" (__old), "+m" (*(ptr)) \
: "i" (-EFAULT), "r" (__new), "1" (__old) \
: "memory" \
...
...
@@ -653,7 +653,7 @@ extern void __cmpxchg_wrong_size(void)
"3:\tmov %3, %0\n" \
"\tjmp 2b\n" \
"\t.previous\n" \
_ASM_EXTABLE(1b, 3b) \
_ASM_EXTABLE
_UA
(1b, 3b) \
: "+r" (__ret), "=a" (__old), "+m" (*(ptr)) \
: "i" (-EFAULT), "r" (__new), "1" (__old) \
: "memory" \
...
...
This diff is collapsed.
Click to expand it.
arch/x86/kernel/cpu/mcheck/mce.c
View file @
bce6824c
...
...
@@ -1315,7 +1315,7 @@ void do_machine_check(struct pt_regs *regs, long error_code)
local_irq_disable
();
ist_end_non_atomic
();
}
else
{
if
(
!
fixup_exception
(
regs
,
X86_TRAP_MC
))
if
(
!
fixup_exception
(
regs
,
X86_TRAP_MC
,
error_code
,
0
))
mce_panic
(
"Failed kernel mode recovery"
,
&
m
,
NULL
);
}
...
...
This diff is collapsed.
Click to expand it.
arch/x86/kernel/kprobes/core.c
View file @
bce6824c
...
...
@@ -1020,50 +1020,12 @@ int kprobe_fault_handler(struct pt_regs *regs, int trapnr)
*/
if
(
cur
->
fault_handler
&&
cur
->
fault_handler
(
cur
,
regs
,
trapnr
))
return
1
;
/*
* In case the user-specified fault handler returned
* zero, try to fix up.
*/
if
(
fixup_exception
(
regs
,
trapnr
))
return
1
;
/*
* fixup routine could not handle it,
* Let do_page_fault() fix it.
*/
}
return
0
;
}
NOKPROBE_SYMBOL
(
kprobe_fault_handler
);
/*
* Wrapper routine for handling exceptions.
*/
int
kprobe_exceptions_notify
(
struct
notifier_block
*
self
,
unsigned
long
val
,
void
*
data
)
{
struct
die_args
*
args
=
data
;
int
ret
=
NOTIFY_DONE
;
if
(
args
->
regs
&&
user_mode
(
args
->
regs
))
return
ret
;
if
(
val
==
DIE_GPF
)
{
/*
* To be potentially processing a kprobe fault and to
* trust the result from kprobe_running(), we have
* be non-preemptible.
*/
if
(
!
preemptible
()
&&
kprobe_running
()
&&
kprobe_fault_handler
(
args
->
regs
,
args
->
trapnr
))
ret
=
NOTIFY_STOP
;
}
return
ret
;
}
NOKPROBE_SYMBOL
(
kprobe_exceptions_notify
);
bool
arch_within_kprobe_blacklist
(
unsigned
long
addr
)
{
bool
is_in_entry_trampoline_section
=
false
;
...
...
This diff is collapsed.
Click to expand it.
arch/x86/kernel/traps.c
View file @
bce6824c
...
...
@@ -206,7 +206,7 @@ do_trap_no_signal(struct task_struct *tsk, int trapnr, char *str,
}
if
(
!
user_mode
(
regs
))
{
if
(
fixup_exception
(
regs
,
trapnr
))
if
(
fixup_exception
(
regs
,
trapnr
,
error_code
,
0
))
return
0
;
tsk
->
thread
.
error_code
=
error_code
;
...
...
@@ -551,11 +551,21 @@ do_general_protection(struct pt_regs *regs, long error_code)
tsk
=
current
;
if
(
!
user_mode
(
regs
))
{
if
(
fixup_exception
(
regs
,
X86_TRAP_GP
))
if
(
fixup_exception
(
regs
,
X86_TRAP_GP
,
error_code
,
0
))
return
;
tsk
->
thread
.
error_code
=
error_code
;
tsk
->
thread
.
trap_nr
=
X86_TRAP_GP
;
/*
* To be potentially processing a kprobe fault and to
* trust the result from kprobe_running(), we have to
* be non-preemptible.
*/
if
(
!
preemptible
()
&&
kprobe_running
()
&&
kprobe_fault_handler
(
regs
,
X86_TRAP_GP
))
return
;
if
(
notify_die
(
DIE_GPF
,
"general protection fault"
,
regs
,
error_code
,
X86_TRAP_GP
,
SIGSEGV
)
!=
NOTIFY_STOP
)
die
(
"general protection fault"
,
regs
,
error_code
);
...
...
@@ -838,7 +848,7 @@ static void math_error(struct pt_regs *regs, int error_code, int trapnr)
cond_local_irq_enable
(
regs
);
if
(
!
user_mode
(
regs
))
{
if
(
fixup_exception
(
regs
,
trapnr
))
if
(
fixup_exception
(
regs
,
trapnr
,
error_code
,
0
))
return
;
task
->
thread
.
error_code
=
error_code
;
...
...
This diff is collapsed.
Click to expand it.
arch/x86/lib/checksum_32.S
View file @
bce6824c
...
...
@@ -273,11 +273,11 @@ unsigned int csum_partial_copy_generic (const char *src, char *dst,
#define SRC(y...) \
9999:
y
; \
_ASM_EXTABLE
(9999
b
,
6001
f
)
_ASM_EXTABLE
_UA
(9999
b
,
6001
f
)
#define DST(y...) \
9999:
y
; \
_ASM_EXTABLE
(9999
b
,
6002
f
)
_ASM_EXTABLE
_UA
(9999
b
,
6002
f
)
#ifndef CONFIG_X86_USE_PPRO_CHECKSUM
...
...
This diff is collapsed.
Click to expand it.
arch/x86/lib/copy_user_64.S
View file @
bce6824c
...
...
@@ -92,26 +92,26 @@ ENTRY(copy_user_generic_unrolled)
60
:
jmp
copy_user_handle_tail
/*
ecx
is
zerorest
also
*/
.
previous
_ASM_EXTABLE
(1
b
,30
b
)
_ASM_EXTABLE
(2
b
,30
b
)
_ASM_EXTABLE
(3
b
,30
b
)
_ASM_EXTABLE
(4
b
,30
b
)
_ASM_EXTABLE
(5
b
,30
b
)
_ASM_EXTABLE
(6
b
,30
b
)
_ASM_EXTABLE
(7
b
,30
b
)
_ASM_EXTABLE
(8
b
,30
b
)
_ASM_EXTABLE
(9
b
,30
b
)
_ASM_EXTABLE
(10
b
,30
b
)
_ASM_EXTABLE
(11
b
,30
b
)
_ASM_EXTABLE
(12
b
,30
b
)
_ASM_EXTABLE
(13
b
,30
b
)
_ASM_EXTABLE
(14
b
,30
b
)
_ASM_EXTABLE
(15
b
,30
b
)
_ASM_EXTABLE
(16
b
,30
b
)
_ASM_EXTABLE
(18
b
,40
b
)
_ASM_EXTABLE
(19
b
,40
b
)
_ASM_EXTABLE
(21
b
,50
b
)
_ASM_EXTABLE
(22
b
,50
b
)
_ASM_EXTABLE
_UA
(1
b
,
30
b
)
_ASM_EXTABLE
_UA
(2
b
,
30
b
)
_ASM_EXTABLE
_UA
(3
b
,
30
b
)
_ASM_EXTABLE
_UA
(4
b
,
30
b
)
_ASM_EXTABLE
_UA
(5
b
,
30
b
)
_ASM_EXTABLE
_UA
(6
b
,
30
b
)
_ASM_EXTABLE
_UA
(7
b
,
30
b
)
_ASM_EXTABLE
_UA
(8
b
,
30
b
)
_ASM_EXTABLE
_UA
(9
b
,
30
b
)
_ASM_EXTABLE
_UA
(10
b
,
30
b
)
_ASM_EXTABLE
_UA
(11
b
,
30
b
)
_ASM_EXTABLE
_UA
(12
b
,
30
b
)
_ASM_EXTABLE
_UA
(13
b
,
30
b
)
_ASM_EXTABLE
_UA
(14
b
,
30
b
)
_ASM_EXTABLE
_UA
(15
b
,
30
b
)
_ASM_EXTABLE
_UA
(16
b
,
30
b
)
_ASM_EXTABLE
_UA
(18
b
,
40
b
)
_ASM_EXTABLE
_UA
(19
b
,
40
b
)
_ASM_EXTABLE
_UA
(21
b
,
50
b
)
_ASM_EXTABLE
_UA
(22
b
,
50
b
)
ENDPROC
(
copy_user_generic_unrolled
)
EXPORT_SYMBOL
(
copy_user_generic_unrolled
)
...
...
@@ -156,8 +156,8 @@ ENTRY(copy_user_generic_string)
jmp
copy_user_handle_tail
.
previous
_ASM_EXTABLE
(1
b
,11
b
)
_ASM_EXTABLE
(3
b
,12
b
)
_ASM_EXTABLE
_UA
(1
b
,
11
b
)
_ASM_EXTABLE
_UA
(3
b
,
12
b
)
ENDPROC
(
copy_user_generic_string
)
EXPORT_SYMBOL
(
copy_user_generic_string
)
...
...
@@ -189,7 +189,7 @@ ENTRY(copy_user_enhanced_fast_string)
jmp
copy_user_handle_tail
.
previous
_ASM_EXTABLE
(1
b
,12
b
)
_ASM_EXTABLE
_UA
(1
b
,
12
b
)
ENDPROC
(
copy_user_enhanced_fast_string
)
EXPORT_SYMBOL
(
copy_user_enhanced_fast_string
)
...
...
@@ -319,27 +319,27 @@ ENTRY(__copy_user_nocache)
jmp
copy_user_handle_tail
.
previous
_ASM_EXTABLE
(1
b
,.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
(2
b
,.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
(3
b
,.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
(4
b
,.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
(5
b
,.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
(6
b
,.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
(7
b
,.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
(8
b
,.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
(9
b
,.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
(10
b
,.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
(11
b
,.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
(12
b
,.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
(13
b
,.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
(14
b
,.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
(15
b
,.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
(16
b
,.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
(20
b
,.
L_fixup_8b_copy
)
_ASM_EXTABLE
(21
b
,.
L_fixup_8b_copy
)
_ASM_EXTABLE
(30
b
,.
L_fixup_4b_copy
)
_ASM_EXTABLE
(31
b
,.
L_fixup_4b_copy
)
_ASM_EXTABLE
(40
b
,.
L_fixup_1b_copy
)
_ASM_EXTABLE
(41
b
,.
L_fixup_1b_copy
)
_ASM_EXTABLE
_UA
(1
b
,
.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
_UA
(2
b
,
.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
_UA
(3
b
,
.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
_UA
(4
b
,
.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
_UA
(5
b
,
.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
_UA
(6
b
,
.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
_UA
(7
b
,
.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
_UA
(8
b
,
.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
_UA
(9
b
,
.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
_UA
(10
b
,
.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
_UA
(11
b
,
.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
_UA
(12
b
,
.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
_UA
(13
b
,
.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
_UA
(14
b
,
.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
_UA
(15
b
,
.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
_UA
(16
b
,
.
L_fixup_4x8b_copy
)
_ASM_EXTABLE
_UA
(20
b
,
.
L_fixup_8b_copy
)
_ASM_EXTABLE
_UA
(21
b
,
.
L_fixup_8b_copy
)
_ASM_EXTABLE
_UA
(30
b
,
.
L_fixup_4b_copy
)
_ASM_EXTABLE
_UA
(31
b
,
.
L_fixup_4b_copy
)
_ASM_EXTABLE
_UA
(40
b
,
.
L_fixup_1b_copy
)
_ASM_EXTABLE
_UA
(41
b
,
.
L_fixup_1b_copy
)
ENDPROC
(
__copy_user_nocache
)
EXPORT_SYMBOL
(
__copy_user_nocache
)
This diff is collapsed.
Click to expand it.
arch/x86/lib/csum-copy_64.S
View file @
bce6824c
...
...
@@ -31,14 +31,18 @@
.
macro
source
10
:
_ASM_EXTABLE
(10
b
,
.
Lbad_source
)
_ASM_EXTABLE
_UA
(10
b
,
.
Lbad_source
)
.
endm
.
macro
dest
20
:
_ASM_EXTABLE
(20
b
,
.
Lbad_dest
)
_ASM_EXTABLE
_UA
(20
b
,
.
Lbad_dest
)
.
endm
/
*
*
No
_ASM_EXTABLE_UA
; this is used for intentional prefetch on a
*
potentially
unmapped
kernel
address
.
*/
.
macro
ignore
L
=
.
Lignore
30
:
_ASM_EXTABLE
(30
b
,
\
L
)
...
...
This diff is collapsed.
Click to expand it.
Prev
1
2
3
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment