Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
packages
kernel
linux
Commits
34cfdd4d
Commit
34cfdd4d
authored
Oct 07, 2018
by
Lorenzo "Palinuro" Faletra
Browse files
Import Upstream version 4.18.10
parent
441d7f18
Changes
705
Hide whitespace changes
Inline
Side-by-side
arch/arm64/crypto/sm4-ce-glue.c
View file @
34cfdd4d
...
...
@@ -69,5 +69,5 @@ static void __exit sm4_ce_mod_fini(void)
crypto_unregister_alg
(
&
sm4_ce_alg
);
}
module_cpu_feature_match
(
SM
3
,
sm4_ce_mod_init
);
module_cpu_feature_match
(
SM
4
,
sm4_ce_mod_init
);
module_exit
(
sm4_ce_mod_fini
);
arch/arm64/kernel/perf_event.c
View file @
34cfdd4d
...
...
@@ -670,6 +670,28 @@ static void armv8pmu_disable_event(struct perf_event *event)
raw_spin_unlock_irqrestore
(
&
events
->
pmu_lock
,
flags
);
}
static
void
armv8pmu_start
(
struct
arm_pmu
*
cpu_pmu
)
{
unsigned
long
flags
;
struct
pmu_hw_events
*
events
=
this_cpu_ptr
(
cpu_pmu
->
hw_events
);
raw_spin_lock_irqsave
(
&
events
->
pmu_lock
,
flags
);
/* Enable all counters */
armv8pmu_pmcr_write
(
armv8pmu_pmcr_read
()
|
ARMV8_PMU_PMCR_E
);
raw_spin_unlock_irqrestore
(
&
events
->
pmu_lock
,
flags
);
}
static
void
armv8pmu_stop
(
struct
arm_pmu
*
cpu_pmu
)
{
unsigned
long
flags
;
struct
pmu_hw_events
*
events
=
this_cpu_ptr
(
cpu_pmu
->
hw_events
);
raw_spin_lock_irqsave
(
&
events
->
pmu_lock
,
flags
);
/* Disable all counters */
armv8pmu_pmcr_write
(
armv8pmu_pmcr_read
()
&
~
ARMV8_PMU_PMCR_E
);
raw_spin_unlock_irqrestore
(
&
events
->
pmu_lock
,
flags
);
}
static
irqreturn_t
armv8pmu_handle_irq
(
struct
arm_pmu
*
cpu_pmu
)
{
u32
pmovsr
;
...
...
@@ -694,6 +716,11 @@ static irqreturn_t armv8pmu_handle_irq(struct arm_pmu *cpu_pmu)
*/
regs
=
get_irq_regs
();
/*
* Stop the PMU while processing the counter overflows
* to prevent skews in group events.
*/
armv8pmu_stop
(
cpu_pmu
);
for
(
idx
=
0
;
idx
<
cpu_pmu
->
num_events
;
++
idx
)
{
struct
perf_event
*
event
=
cpuc
->
events
[
idx
];
struct
hw_perf_event
*
hwc
;
...
...
@@ -718,6 +745,7 @@ static irqreturn_t armv8pmu_handle_irq(struct arm_pmu *cpu_pmu)
if
(
perf_event_overflow
(
event
,
&
data
,
regs
))
cpu_pmu
->
disable
(
event
);
}
armv8pmu_start
(
cpu_pmu
);
/*
* Handle the pending perf events.
...
...
@@ -731,28 +759,6 @@ static irqreturn_t armv8pmu_handle_irq(struct arm_pmu *cpu_pmu)
return
IRQ_HANDLED
;
}
static
void
armv8pmu_start
(
struct
arm_pmu
*
cpu_pmu
)
{
unsigned
long
flags
;
struct
pmu_hw_events
*
events
=
this_cpu_ptr
(
cpu_pmu
->
hw_events
);
raw_spin_lock_irqsave
(
&
events
->
pmu_lock
,
flags
);
/* Enable all counters */
armv8pmu_pmcr_write
(
armv8pmu_pmcr_read
()
|
ARMV8_PMU_PMCR_E
);
raw_spin_unlock_irqrestore
(
&
events
->
pmu_lock
,
flags
);
}
static
void
armv8pmu_stop
(
struct
arm_pmu
*
cpu_pmu
)
{
unsigned
long
flags
;
struct
pmu_hw_events
*
events
=
this_cpu_ptr
(
cpu_pmu
->
hw_events
);
raw_spin_lock_irqsave
(
&
events
->
pmu_lock
,
flags
);
/* Disable all counters */
armv8pmu_pmcr_write
(
armv8pmu_pmcr_read
()
&
~
ARMV8_PMU_PMCR_E
);
raw_spin_unlock_irqrestore
(
&
events
->
pmu_lock
,
flags
);
}
static
int
armv8pmu_get_event_idx
(
struct
pmu_hw_events
*
cpuc
,
struct
perf_event
*
event
)
{
...
...
arch/arm64/kernel/ptrace.c
View file @
34cfdd4d
...
...
@@ -277,19 +277,22 @@ static int ptrace_hbp_set_event(unsigned int note_type,
switch
(
note_type
)
{
case
NT_ARM_HW_BREAK
:
if
(
idx
<
ARM_MAX_BRP
)
{
tsk
->
thread
.
debug
.
hbp_break
[
idx
]
=
bp
;
err
=
0
;
}
if
(
idx
>=
ARM_MAX_BRP
)
goto
out
;
idx
=
array_index_nospec
(
idx
,
ARM_MAX_BRP
);
tsk
->
thread
.
debug
.
hbp_break
[
idx
]
=
bp
;
err
=
0
;
break
;
case
NT_ARM_HW_WATCH
:
if
(
idx
<
ARM_MAX_WRP
)
{
tsk
->
thread
.
debug
.
hbp_watch
[
idx
]
=
bp
;
err
=
0
;
}
if
(
idx
>=
ARM_MAX_WRP
)
goto
out
;
idx
=
array_index_nospec
(
idx
,
ARM_MAX_WRP
);
tsk
->
thread
.
debug
.
hbp_watch
[
idx
]
=
bp
;
err
=
0
;
break
;
}
out:
return
err
;
}
...
...
arch/arm64/kvm/hyp/switch.c
View file @
34cfdd4d
...
...
@@ -98,8 +98,10 @@ static void activate_traps_vhe(struct kvm_vcpu *vcpu)
val
=
read_sysreg
(
cpacr_el1
);
val
|=
CPACR_EL1_TTA
;
val
&=
~
CPACR_EL1_ZEN
;
if
(
!
update_fp_enabled
(
vcpu
))
if
(
!
update_fp_enabled
(
vcpu
))
{
val
&=
~
CPACR_EL1_FPEN
;
__activate_traps_fpsimd32
(
vcpu
);
}
write_sysreg
(
val
,
cpacr_el1
);
...
...
@@ -114,8 +116,10 @@ static void __hyp_text __activate_traps_nvhe(struct kvm_vcpu *vcpu)
val
=
CPTR_EL2_DEFAULT
;
val
|=
CPTR_EL2_TTA
|
CPTR_EL2_TZ
;
if
(
!
update_fp_enabled
(
vcpu
))
if
(
!
update_fp_enabled
(
vcpu
))
{
val
|=
CPTR_EL2_TFP
;
__activate_traps_fpsimd32
(
vcpu
);
}
write_sysreg
(
val
,
cptr_el2
);
}
...
...
@@ -129,7 +133,6 @@ static void __hyp_text __activate_traps(struct kvm_vcpu *vcpu)
if
(
cpus_have_const_cap
(
ARM64_HAS_RAS_EXTN
)
&&
(
hcr
&
HCR_VSE
))
write_sysreg_s
(
vcpu
->
arch
.
vsesr_el2
,
SYS_VSESR_EL2
);
__activate_traps_fpsimd32
(
vcpu
);
if
(
has_vhe
())
activate_traps_vhe
(
vcpu
);
else
...
...
arch/mips/ath79/setup.c
View file @
34cfdd4d
...
...
@@ -40,6 +40,7 @@ static char ath79_sys_type[ATH79_SYS_TYPE_LEN];
static
void
ath79_restart
(
char
*
command
)
{
local_irq_disable
();
ath79_device_reset_set
(
AR71XX_RESET_FULL_CHIP
);
for
(;;)
if
(
cpu_wait
)
...
...
arch/mips/boot/dts/mscc/ocelot.dtsi
View file @
34cfdd4d
...
...
@@ -184,7 +184,7 @@ mdio0: mdio@107009c {
#address-cells = <1>;
#size-cells = <0>;
compatible = "mscc,ocelot-miim";
reg = <0x107009c 0x
36
>, <0x10700f0 0x8>;
reg = <0x107009c 0x
24
>, <0x10700f0 0x8>;
interrupts = <14>;
status = "disabled";
...
...
arch/mips/cavium-octeon/octeon-platform.c
View file @
34cfdd4d
...
...
@@ -322,6 +322,7 @@ static int __init octeon_ehci_device_init(void)
return
0
;
pd
=
of_find_device_by_node
(
ehci_node
);
of_node_put
(
ehci_node
);
if
(
!
pd
)
return
0
;
...
...
@@ -384,6 +385,7 @@ static int __init octeon_ohci_device_init(void)
return
0
;
pd
=
of_find_device_by_node
(
ohci_node
);
of_node_put
(
ohci_node
);
if
(
!
pd
)
return
0
;
...
...
arch/mips/generic/init.c
View file @
34cfdd4d
...
...
@@ -204,6 +204,7 @@ void __init arch_init_irq(void)
"mti,cpu-interrupt-controller"
);
if
(
!
cpu_has_veic
&&
!
intc_node
)
mips_cpu_irq_init
();
of_node_put
(
intc_node
);
irqchip_init
();
}
...
...
arch/mips/include/asm/io.h
View file @
34cfdd4d
...
...
@@ -141,14 +141,14 @@ static inline void * phys_to_virt(unsigned long address)
/*
* ISA I/O bus memory addresses are 1:1 with the physical address.
*/
static
inline
unsigned
long
isa_virt_to_bus
(
volatile
void
*
address
)
static
inline
unsigned
long
isa_virt_to_bus
(
volatile
void
*
address
)
{
return
(
unsigned
long
)
address
-
PAGE_OFFSET
;
return
virt_to_phys
(
address
)
;
}
static
inline
void
*
isa_bus_to_virt
(
unsigned
long
address
)
static
inline
void
*
isa_bus_to_virt
(
unsigned
long
address
)
{
return
(
void
*
)(
address
+
PAGE_OFFSET
);
return
phys_to_virt
(
address
);
}
#define isa_page_to_bus page_to_phys
...
...
arch/mips/include/asm/mach-ath79/ath79.h
View file @
34cfdd4d
...
...
@@ -134,6 +134,7 @@ static inline u32 ath79_pll_rr(unsigned reg)
static
inline
void
ath79_reset_wr
(
unsigned
reg
,
u32
val
)
{
__raw_writel
(
val
,
ath79_reset_base
+
reg
);
(
void
)
__raw_readl
(
ath79_reset_base
+
reg
);
/* flush */
}
static
inline
u32
ath79_reset_rr
(
unsigned
reg
)
...
...
arch/mips/jz4740/Platform
View file @
34cfdd4d
platform-$(CONFIG_MACH_INGENIC) += jz4740/
cflags-$(CONFIG_MACH_INGENIC) += -I$(srctree)/arch/mips/include/asm/mach-jz4740
load-$(CONFIG_MACH_INGENIC) += 0xffffffff80010000
zload-$(CONFIG_MACH_INGENIC) += 0xffffffff80
6
00000
zload-$(CONFIG_MACH_INGENIC) += 0xffffffff8
1
000000
arch/mips/kernel/vdso.c
View file @
34cfdd4d
...
...
@@ -13,6 +13,7 @@
#include
<linux/err.h>
#include
<linux/init.h>
#include
<linux/ioport.h>
#include
<linux/kernel.h>
#include
<linux/mm.h>
#include
<linux/sched.h>
#include
<linux/slab.h>
...
...
@@ -20,6 +21,7 @@
#include
<asm/abi.h>
#include
<asm/mips-cps.h>
#include
<asm/page.h>
#include
<asm/vdso.h>
/* Kernel-provided data used by the VDSO. */
...
...
@@ -128,12 +130,30 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
vvar_size
=
gic_size
+
PAGE_SIZE
;
size
=
vvar_size
+
image
->
size
;
/*
* Find a region that's large enough for us to perform the
* colour-matching alignment below.
*/
if
(
cpu_has_dc_aliases
)
size
+=
shm_align_mask
+
1
;
base
=
get_unmapped_area
(
NULL
,
0
,
size
,
0
,
0
);
if
(
IS_ERR_VALUE
(
base
))
{
ret
=
base
;
goto
out
;
}
/*
* If we suffer from dcache aliasing, ensure that the VDSO data page
* mapping is coloured the same as the kernel's mapping of that memory.
* This ensures that when the kernel updates the VDSO data userland
* will observe it without requiring cache invalidations.
*/
if
(
cpu_has_dc_aliases
)
{
base
=
__ALIGN_MASK
(
base
,
shm_align_mask
);
base
+=
((
unsigned
long
)
&
vdso_data
-
gic_size
)
&
shm_align_mask
;
}
data_addr
=
base
+
gic_size
;
vdso_addr
=
data_addr
+
PAGE_SIZE
;
...
...
arch/mips/loongson64/common/cs5536/cs5536_ohci.c
View file @
34cfdd4d
...
...
@@ -138,7 +138,7 @@ u32 pci_ohci_read_reg(int reg)
break
;
case
PCI_OHCI_INT_REG
:
_rdmsr
(
DIVIL_MSR_REG
(
PIC_YSEL_LOW
),
&
hi
,
&
lo
);
if
((
lo
&
0x00000f00
)
==
CS5536_USB_INTR
)
if
((
(
lo
>>
PIC_YSEL_LOW_USB_SHIFT
)
&
0xf
)
==
CS5536_USB_INTR
)
conf_data
=
1
;
break
;
default:
...
...
arch/mips/mm/c-r4k.c
View file @
34cfdd4d
...
...
@@ -835,7 +835,8 @@ static void r4k_flush_icache_user_range(unsigned long start, unsigned long end)
static
void
r4k_dma_cache_wback_inv
(
unsigned
long
addr
,
unsigned
long
size
)
{
/* Catch bad driver code */
BUG_ON
(
size
==
0
);
if
(
WARN_ON
(
size
==
0
))
return
;
preempt_disable
();
if
(
cpu_has_inclusive_pcaches
)
{
...
...
@@ -871,7 +872,8 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
static
void
r4k_dma_cache_inv
(
unsigned
long
addr
,
unsigned
long
size
)
{
/* Catch bad driver code */
BUG_ON
(
size
==
0
);
if
(
WARN_ON
(
size
==
0
))
return
;
preempt_disable
();
if
(
cpu_has_inclusive_pcaches
)
{
...
...
arch/powerpc/include/asm/book3s/64/pgalloc.h
View file @
34cfdd4d
...
...
@@ -9,6 +9,7 @@
#include
<linux/slab.h>
#include
<linux/cpumask.h>
#include
<linux/kmemleak.h>
#include
<linux/percpu.h>
struct
vmemmap_backing
{
...
...
@@ -82,6 +83,13 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm)
pgd
=
kmem_cache_alloc
(
PGT_CACHE
(
PGD_INDEX_SIZE
),
pgtable_gfp_flags
(
mm
,
GFP_KERNEL
));
/*
* Don't scan the PGD for pointers, it contains references to PUDs but
* those references are not full pointers and so can't be recognised by
* kmemleak.
*/
kmemleak_no_scan
(
pgd
);
/*
* With hugetlb, we don't clear the second half of the page table.
* If we share the same slab cache with the pmd or pud level table,
...
...
@@ -110,8 +118,19 @@ static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pud_t *pud)
static
inline
pud_t
*
pud_alloc_one
(
struct
mm_struct
*
mm
,
unsigned
long
addr
)
{
return
kmem_cache_alloc
(
PGT_CACHE
(
PUD_CACHE_INDEX
),
pgtable_gfp_flags
(
mm
,
GFP_KERNEL
));
pud_t
*
pud
;
pud
=
kmem_cache_alloc
(
PGT_CACHE
(
PUD_CACHE_INDEX
),
pgtable_gfp_flags
(
mm
,
GFP_KERNEL
));
/*
* Tell kmemleak to ignore the PUD, that means don't scan it for
* pointers and don't consider it a leak. PUDs are typically only
* referred to by their PGD, but kmemleak is not able to recognise those
* as pointers, leading to false leak reports.
*/
kmemleak_ignore
(
pud
);
return
pud
;
}
static
inline
void
pud_free
(
struct
mm_struct
*
mm
,
pud_t
*
pud
)
...
...
arch/powerpc/include/asm/fadump.h
View file @
34cfdd4d
...
...
@@ -195,9 +195,6 @@ struct fadump_crash_info_header {
struct
cpumask
online_mask
;
};
/* Crash memory ranges */
#define INIT_CRASHMEM_RANGES (INIT_MEMBLOCK_REGIONS + 2)
struct
fad_crash_memory_ranges
{
unsigned
long
long
base
;
unsigned
long
long
size
;
...
...
arch/powerpc/include/asm/nohash/pgtable.h
View file @
34cfdd4d
...
...
@@ -51,17 +51,14 @@ static inline int pte_present(pte_t pte)
#define pte_access_permitted pte_access_permitted
static
inline
bool
pte_access_permitted
(
pte_t
pte
,
bool
write
)
{
unsigned
long
pteval
=
pte_val
(
pte
);
/*
* A read-only access is controlled by _PAGE_USER bit.
* We have _PAGE_READ set for WRITE and EXECUTE
*/
unsigned
long
need_pte_bits
=
_PAGE_PRESENT
|
_PAGE_USER
;
if
(
write
)
need_pte_bits
|=
_PAGE_WRITE
;
if
(
!
pte_present
(
pte
)
||
!
pte_user
(
pte
)
||
!
pte_read
(
pte
))
return
false
;
if
(
(
pteval
&
need_pte_bits
)
!=
need_pte_bits
)
if
(
write
&&
!
pte_write
(
pte
)
)
return
false
;
return
true
;
...
...
arch/powerpc/include/asm/pkeys.h
View file @
34cfdd4d
...
...
@@ -94,8 +94,6 @@ static inline bool mm_pkey_is_allocated(struct mm_struct *mm, int pkey)
__mm_pkey_is_allocated
(
mm
,
pkey
));
}
extern
void
__arch_activate_pkey
(
int
pkey
);
extern
void
__arch_deactivate_pkey
(
int
pkey
);
/*
* Returns a positive, 5-bit key on success, or -1 on failure.
* Relies on the mmap_sem to protect against concurrency in mm_pkey_alloc() and
...
...
@@ -124,11 +122,6 @@ static inline int mm_pkey_alloc(struct mm_struct *mm)
ret
=
ffz
((
u32
)
mm_pkey_allocation_map
(
mm
));
__mm_pkey_allocated
(
mm
,
ret
);
/*
* Enable the key in the hardware
*/
if
(
ret
>
0
)
__arch_activate_pkey
(
ret
);
return
ret
;
}
...
...
@@ -140,10 +133,6 @@ static inline int mm_pkey_free(struct mm_struct *mm, int pkey)
if
(
!
mm_pkey_is_allocated
(
mm
,
pkey
))
return
-
EINVAL
;
/*
* Disable the key in the hardware
*/
__arch_deactivate_pkey
(
pkey
);
__mm_pkey_free
(
mm
,
pkey
);
return
0
;
...
...
arch/powerpc/include/asm/topology.h
View file @
34cfdd4d
...
...
@@ -92,6 +92,7 @@ extern int stop_topology_update(void);
extern
int
prrn_is_enabled
(
void
);
extern
int
find_and_online_cpu_nid
(
int
cpu
);
extern
int
timed_topology_update
(
int
nsecs
);
extern
void
__init
shared_proc_topology_init
(
void
);
#else
static
inline
int
start_topology_update
(
void
)
{
...
...
@@ -113,6 +114,10 @@ static inline int timed_topology_update(int nsecs)
{
return
0
;
}
#ifdef CONFIG_SMP
static
inline
void
shared_proc_topology_init
(
void
)
{}
#endif
#endif
/* CONFIG_NUMA && CONFIG_PPC_SPLPAR */
#include
<asm-generic/topology.h>
...
...
arch/powerpc/include/asm/uaccess.h
View file @
34cfdd4d
...
...
@@ -250,10 +250,17 @@ do { \
} \
} while (0)
/*
* This is a type: either unsigned long, if the argument fits into
* that type, or otherwise unsigned long long.
*/
#define __long_type(x) \
__typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
#define __get_user_nocheck(x, ptr, size) \
({ \
long __gu_err; \
unsigned long
__gu_val;
\
__long_type(*(ptr))
__gu_val; \
const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
__chk_user_ptr(ptr); \
if (!is_kernel_addr((unsigned long)__gu_addr)) \
...
...
@@ -267,7 +274,7 @@ do { \
#define __get_user_check(x, ptr, size) \
({ \
long __gu_err = -EFAULT; \
unsigned long
__gu_val = 0;
\
__long_type(*(ptr))
__gu_val = 0; \
const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
might_fault(); \
if (access_ok(VERIFY_READ, __gu_addr, (size))) { \
...
...
@@ -281,7 +288,7 @@ do { \
#define __get_user_nosleep(x, ptr, size) \
({ \
long __gu_err; \
unsigned long
__gu_val;
\
__long_type(*(ptr))
__gu_val; \
const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
__chk_user_ptr(ptr); \
barrier_nospec(); \
...
...
Prev
1
2
3
4
5
6
…
36
Next
Write
Preview
Supports
Markdown
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