Merge branch 'misc' into for-linus
Conflicts: arch/arm/kernel/ptrace.c
This commit is contained in:
@@ -277,10 +277,6 @@ __create_page_tables:
|
||||
mov r3, r3, lsl #PMD_ORDER
|
||||
|
||||
add r0, r4, r3
|
||||
rsb r3, r3, #0x4000 @ PTRS_PER_PGD*sizeof(long)
|
||||
cmp r3, #0x0800 @ limit to 512MB
|
||||
movhi r3, #0x0800
|
||||
add r6, r0, r3
|
||||
mov r3, r7, lsr #SECTION_SHIFT
|
||||
ldr r7, [r10, #PROCINFO_IO_MMUFLAGS] @ io_mmuflags
|
||||
orr r3, r7, r3, lsl #SECTION_SHIFT
|
||||
@@ -289,13 +285,10 @@ __create_page_tables:
|
||||
#else
|
||||
orr r3, r3, #PMD_SECT_XN
|
||||
#endif
|
||||
1: str r3, [r0], #4
|
||||
str r3, [r0], #4
|
||||
#ifdef CONFIG_ARM_LPAE
|
||||
str r7, [r0], #4
|
||||
#endif
|
||||
add r3, r3, #1 << SECTION_SHIFT
|
||||
cmp r0, r6
|
||||
blo 1b
|
||||
|
||||
#else /* CONFIG_DEBUG_ICEDCC || CONFIG_DEBUG_SEMIHOSTING */
|
||||
/* we don't need any serial debugging mappings */
|
||||
|
@@ -24,6 +24,7 @@
|
||||
#include <linux/hw_breakpoint.h>
|
||||
#include <linux/regset.h>
|
||||
#include <linux/audit.h>
|
||||
#include <linux/tracehook.h>
|
||||
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/traps.h>
|
||||
@@ -918,8 +919,6 @@ asmlinkage int syscall_trace(int why, struct pt_regs *regs, int scno)
|
||||
|
||||
if (!test_thread_flag(TIF_SYSCALL_TRACE))
|
||||
return scno;
|
||||
if (!(current->ptrace & PT_PTRACED))
|
||||
return scno;
|
||||
|
||||
current_thread_info()->syscall = scno;
|
||||
|
||||
@@ -930,19 +929,11 @@ asmlinkage int syscall_trace(int why, struct pt_regs *regs, int scno)
|
||||
ip = regs->ARM_ip;
|
||||
regs->ARM_ip = why;
|
||||
|
||||
/* the 0x80 provides a way for the tracing parent to distinguish
|
||||
between a syscall stop and SIGTRAP delivery */
|
||||
ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
|
||||
? 0x80 : 0));
|
||||
/*
|
||||
* this isn't the same as continuing with a signal, but it will do
|
||||
* for normal use. strace only continues with a signal if the
|
||||
* stopping signal is not SIGTRAP. -brl
|
||||
*/
|
||||
if (current->exit_code) {
|
||||
send_sig(current->exit_code, current, 1);
|
||||
current->exit_code = 0;
|
||||
}
|
||||
if (why)
|
||||
tracehook_report_syscall_exit(regs, 0);
|
||||
else if (tracehook_report_syscall_entry(regs))
|
||||
current_thread_info()->syscall = -1;
|
||||
|
||||
regs->ARM_ip = ip;
|
||||
|
||||
return current_thread_info()->syscall;
|
||||
|
@@ -589,6 +589,8 @@ handle_signal(unsigned long sig, struct k_sigaction *ka,
|
||||
*/
|
||||
block_sigmask(ka, sig);
|
||||
|
||||
tracehook_signal_handler(sig, info, ka, regs, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@@ -11,6 +11,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <asm/smp_plat.h>
|
||||
#include <asm/smp_scu.h>
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/cputype.h>
|
||||
@@ -74,7 +75,7 @@ void scu_enable(void __iomem *scu_base)
|
||||
int scu_power_mode(void __iomem *scu_base, unsigned int mode)
|
||||
{
|
||||
unsigned int val;
|
||||
int cpu = smp_processor_id();
|
||||
int cpu = cpu_logical_map(smp_processor_id());
|
||||
|
||||
if (mode > 3 || mode == 1 || cpu > 3)
|
||||
return -EINVAL;
|
||||
|
@@ -20,6 +20,7 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/cputype.h>
|
||||
#include <asm/system_info.h>
|
||||
#include <asm/thread_notify.h>
|
||||
|
||||
@@ -67,8 +68,7 @@ static int __init thumbee_init(void)
|
||||
if (cpu_arch < CPU_ARCH_ARMv7)
|
||||
return 0;
|
||||
|
||||
/* processor feature register 0 */
|
||||
asm("mrc p15, 0, %0, c0, c1, 0\n" : "=r" (pfr0));
|
||||
pfr0 = read_cpuid_ext(CPUID_EXT_PFR0);
|
||||
if ((pfr0 & 0x0000f000) != 0x00001000)
|
||||
return 0;
|
||||
|
||||
|
@@ -110,6 +110,42 @@ void timer_tick(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
static void dummy_clock_access(struct timespec *ts)
|
||||
{
|
||||
ts->tv_sec = 0;
|
||||
ts->tv_nsec = 0;
|
||||
}
|
||||
|
||||
static clock_access_fn __read_persistent_clock = dummy_clock_access;
|
||||
static clock_access_fn __read_boot_clock = dummy_clock_access;;
|
||||
|
||||
void read_persistent_clock(struct timespec *ts)
|
||||
{
|
||||
__read_persistent_clock(ts);
|
||||
}
|
||||
|
||||
void read_boot_clock(struct timespec *ts)
|
||||
{
|
||||
__read_boot_clock(ts);
|
||||
}
|
||||
|
||||
int __init register_persistent_clock(clock_access_fn read_boot,
|
||||
clock_access_fn read_persistent)
|
||||
{
|
||||
/* Only allow the clockaccess functions to be registered once */
|
||||
if (__read_persistent_clock == dummy_clock_access &&
|
||||
__read_boot_clock == dummy_clock_access) {
|
||||
if (read_boot)
|
||||
__read_boot_clock = read_boot;
|
||||
if (read_persistent)
|
||||
__read_persistent_clock = read_persistent;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_PM) && !defined(CONFIG_GENERIC_CLOCKEVENTS)
|
||||
static int timer_suspend(void)
|
||||
{
|
||||
|
@@ -479,14 +479,14 @@ static int bad_syscall(int n, struct pt_regs *regs)
|
||||
return regs->ARM_r0;
|
||||
}
|
||||
|
||||
static inline void
|
||||
static inline int
|
||||
do_cache_op(unsigned long start, unsigned long end, int flags)
|
||||
{
|
||||
struct mm_struct *mm = current->active_mm;
|
||||
struct vm_area_struct *vma;
|
||||
|
||||
if (end < start || flags)
|
||||
return;
|
||||
return -EINVAL;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
vma = find_vma(mm, start);
|
||||
@@ -496,9 +496,11 @@ do_cache_op(unsigned long start, unsigned long end, int flags)
|
||||
if (end > vma->vm_end)
|
||||
end = vma->vm_end;
|
||||
|
||||
flush_cache_user_range(vma, start, end);
|
||||
up_read(&mm->mmap_sem);
|
||||
return flush_cache_user_range(start, end);
|
||||
}
|
||||
up_read(&mm->mmap_sem);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -544,8 +546,7 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs)
|
||||
* the specified region).
|
||||
*/
|
||||
case NR(cacheflush):
|
||||
do_cache_op(regs->ARM_r0, regs->ARM_r1, regs->ARM_r2);
|
||||
return 0;
|
||||
return do_cache_op(regs->ARM_r0, regs->ARM_r1, regs->ARM_r2);
|
||||
|
||||
case NR(usr26):
|
||||
if (!(elf_hwcap & HWCAP_26BIT))
|
||||
|
Reference in New Issue
Block a user