Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
Pull MIPS updates from Ralf Baechle: - Improvements to the tlb_dump code - KVM fixes - Add support for appended DTB - Minor improvements to the R12000 support - Minor improvements to the R12000 support - Various platform improvments for BCM47xx - The usual pile of minor cleanups - A number of BPF fixes and improvments - Some improvments to the support for R3000 and DECstations - Some improvments to the ATH79 platform support - A major patchset for the JZ4740 SOC adding support for the CI20 platform - Add support for the Pistachio SOC - Minor BMIPS/BCM63xx platform support improvments. - Avoid "SYNC 0" as memory barrier when unlocking spinlocks - Add support for the XWR-1750 board. - Paul's __cpuinit/__cpuinitdata cleanups. - New Malta CPU board support large memory so enable ZONE_DMA32. * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: (131 commits) MIPS: spinlock: Adjust arch_spin_lock back-off time MIPS: asmmacro: Ensure 64-bit FP registers are used with MSA MIPS: BCM47xx: Simplify handling SPROM revisions MIPS: Cobalt Don't use module_init in non-modular MTD registration. MIPS: BCM47xx: Move NVRAM driver to the drivers/firmware/ MIPS: use for_each_sg() MIPS: BCM47xx: Don't select BCMA_HOST_PCI MIPS: BCM47xx: Add helper variable for storing NVRAM length MIPS: IRQ/IP27: Move IRQ allocation API to platform code. MIPS: Replace smp_mb with release barrier function in unlocks. MIPS: i8259: DT support MIPS: Malta: Basic DT plumbing MIPS: include errno.h for ENODEV in mips-cm.h MIPS: Define GCR_GIC_STATUS register fields MIPS: BPF: Introduce BPF ASM helpers MIPS: BPF: Use BPF register names to describe the ABI MIPS: BPF: Move register definition to the BPF header MIPS: net: BPF: Replace RSIZE with SZREG MIPS: BPF: Free up some callee-saved registers MIPS: Xtalk: Update xwidget.h with known Xtalk device numbers ...
This commit is contained in:
@@ -78,6 +78,21 @@ extern u64 __ua_limit;
|
||||
|
||||
#define segment_eq(a, b) ((a).seg == (b).seg)
|
||||
|
||||
/*
|
||||
* eva_kernel_access() - determine whether kernel memory access on an EVA system
|
||||
*
|
||||
* Determines whether memory accesses should be performed to kernel memory
|
||||
* on a system using Extended Virtual Addressing (EVA).
|
||||
*
|
||||
* Return: true if a kernel memory access on an EVA system, else false.
|
||||
*/
|
||||
static inline bool eva_kernel_access(void)
|
||||
{
|
||||
if (!config_enabled(CONFIG_EVA))
|
||||
return false;
|
||||
|
||||
return segment_eq(get_fs(), get_ds());
|
||||
}
|
||||
|
||||
/*
|
||||
* Is a address valid? This does a straighforward calculation rather
|
||||
@@ -286,7 +301,7 @@ do { \
|
||||
({ \
|
||||
int __gu_err; \
|
||||
\
|
||||
if (segment_eq(get_fs(), get_ds())) { \
|
||||
if (eva_kernel_access()) { \
|
||||
__get_kernel_common((x), size, ptr); \
|
||||
} else { \
|
||||
__chk_user_ptr(ptr); \
|
||||
@@ -302,7 +317,7 @@ do { \
|
||||
\
|
||||
might_fault(); \
|
||||
if (likely(access_ok(VERIFY_READ, __gu_ptr, size))) { \
|
||||
if (segment_eq(get_fs(), get_ds())) \
|
||||
if (eva_kernel_access()) \
|
||||
__get_kernel_common((x), size, __gu_ptr); \
|
||||
else \
|
||||
__get_user_common((x), size, __gu_ptr); \
|
||||
@@ -427,7 +442,7 @@ do { \
|
||||
int __pu_err = 0; \
|
||||
\
|
||||
__pu_val = (x); \
|
||||
if (segment_eq(get_fs(), get_ds())) { \
|
||||
if (eva_kernel_access()) { \
|
||||
__put_kernel_common(ptr, size); \
|
||||
} else { \
|
||||
__chk_user_ptr(ptr); \
|
||||
@@ -444,7 +459,7 @@ do { \
|
||||
\
|
||||
might_fault(); \
|
||||
if (likely(access_ok(VERIFY_WRITE, __pu_addr, size))) { \
|
||||
if (segment_eq(get_fs(), get_ds())) \
|
||||
if (eva_kernel_access()) \
|
||||
__put_kernel_common(__pu_addr, size); \
|
||||
else \
|
||||
__put_user_common(__pu_addr, size); \
|
||||
@@ -843,7 +858,7 @@ extern size_t __copy_user(void *__to, const void *__from, size_t __n);
|
||||
__cu_from = (from); \
|
||||
__cu_len = (n); \
|
||||
might_fault(); \
|
||||
if (segment_eq(get_fs(), get_ds())) \
|
||||
if (eva_kernel_access()) \
|
||||
__cu_len = __invoke_copy_to_kernel(__cu_to, __cu_from, \
|
||||
__cu_len); \
|
||||
else \
|
||||
@@ -863,7 +878,7 @@ extern size_t __copy_user_inatomic(void *__to, const void *__from, size_t __n);
|
||||
__cu_to = (to); \
|
||||
__cu_from = (from); \
|
||||
__cu_len = (n); \
|
||||
if (segment_eq(get_fs(), get_ds())) \
|
||||
if (eva_kernel_access()) \
|
||||
__cu_len = __invoke_copy_to_kernel(__cu_to, __cu_from, \
|
||||
__cu_len); \
|
||||
else \
|
||||
@@ -881,7 +896,7 @@ extern size_t __copy_user_inatomic(void *__to, const void *__from, size_t __n);
|
||||
__cu_to = (to); \
|
||||
__cu_from = (from); \
|
||||
__cu_len = (n); \
|
||||
if (segment_eq(get_fs(), get_ds())) \
|
||||
if (eva_kernel_access()) \
|
||||
__cu_len = __invoke_copy_from_kernel_inatomic(__cu_to, \
|
||||
__cu_from,\
|
||||
__cu_len);\
|
||||
@@ -915,7 +930,7 @@ extern size_t __copy_user_inatomic(void *__to, const void *__from, size_t __n);
|
||||
__cu_to = (to); \
|
||||
__cu_from = (from); \
|
||||
__cu_len = (n); \
|
||||
if (segment_eq(get_fs(), get_ds())) { \
|
||||
if (eva_kernel_access()) { \
|
||||
__cu_len = __invoke_copy_to_kernel(__cu_to, \
|
||||
__cu_from, \
|
||||
__cu_len); \
|
||||
@@ -1139,7 +1154,7 @@ extern size_t __copy_in_user_eva(void *__to, const void *__from, size_t __n);
|
||||
__cu_to = (to); \
|
||||
__cu_from = (from); \
|
||||
__cu_len = (n); \
|
||||
if (segment_eq(get_fs(), get_ds())) { \
|
||||
if (eva_kernel_access()) { \
|
||||
__cu_len = __invoke_copy_from_kernel(__cu_to, \
|
||||
__cu_from, \
|
||||
__cu_len); \
|
||||
@@ -1163,7 +1178,7 @@ extern size_t __copy_in_user_eva(void *__to, const void *__from, size_t __n);
|
||||
__cu_to = (to); \
|
||||
__cu_from = (from); \
|
||||
__cu_len = (n); \
|
||||
if (segment_eq(get_fs(), get_ds())) { \
|
||||
if (eva_kernel_access()) { \
|
||||
__cu_len = ___invoke_copy_in_kernel(__cu_to, __cu_from, \
|
||||
__cu_len); \
|
||||
} else { \
|
||||
@@ -1183,7 +1198,7 @@ extern size_t __copy_in_user_eva(void *__to, const void *__from, size_t __n);
|
||||
__cu_to = (to); \
|
||||
__cu_from = (from); \
|
||||
__cu_len = (n); \
|
||||
if (segment_eq(get_fs(), get_ds())) { \
|
||||
if (eva_kernel_access()) { \
|
||||
__cu_len = ___invoke_copy_in_kernel(__cu_to,__cu_from, \
|
||||
__cu_len); \
|
||||
} else { \
|
||||
@@ -1263,7 +1278,7 @@ __strncpy_from_user(char *__to, const char __user *__from, long __len)
|
||||
{
|
||||
long res;
|
||||
|
||||
if (segment_eq(get_fs(), get_ds())) {
|
||||
if (eva_kernel_access()) {
|
||||
__asm__ __volatile__(
|
||||
"move\t$4, %1\n\t"
|
||||
"move\t$5, %2\n\t"
|
||||
@@ -1312,7 +1327,7 @@ strncpy_from_user(char *__to, const char __user *__from, long __len)
|
||||
{
|
||||
long res;
|
||||
|
||||
if (segment_eq(get_fs(), get_ds())) {
|
||||
if (eva_kernel_access()) {
|
||||
__asm__ __volatile__(
|
||||
"move\t$4, %1\n\t"
|
||||
"move\t$5, %2\n\t"
|
||||
@@ -1357,7 +1372,7 @@ static inline long strlen_user(const char __user *s)
|
||||
{
|
||||
long res;
|
||||
|
||||
if (segment_eq(get_fs(), get_ds())) {
|
||||
if (eva_kernel_access()) {
|
||||
__asm__ __volatile__(
|
||||
"move\t$4, %1\n\t"
|
||||
__MODULE_JAL(__strlen_kernel_asm)
|
||||
@@ -1384,7 +1399,7 @@ static inline long __strnlen_user(const char __user *s, long n)
|
||||
{
|
||||
long res;
|
||||
|
||||
if (segment_eq(get_fs(), get_ds())) {
|
||||
if (eva_kernel_access()) {
|
||||
__asm__ __volatile__(
|
||||
"move\t$4, %1\n\t"
|
||||
"move\t$5, %2\n\t"
|
||||
@@ -1426,7 +1441,7 @@ static inline long strnlen_user(const char __user *s, long n)
|
||||
long res;
|
||||
|
||||
might_fault();
|
||||
if (segment_eq(get_fs(), get_ds())) {
|
||||
if (eva_kernel_access()) {
|
||||
__asm__ __volatile__(
|
||||
"move\t$4, %1\n\t"
|
||||
"move\t$5, %2\n\t"
|
||||
|
Reference in New Issue
Block a user