Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 45592145 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'for-linus' of git://www.atmel.no/~hskinnemoen/linux/kernel/avr32:
  avr32: dma-mapping.h
  [AVR32] Don't use kmap() in flush_icache_page()
  [AVR32] Fix bogus ti->flags manipulation in debug handler
  [AVR32] Fix typo in include/asm-avr32/Kbuild
  [AVR32] show_trace: Only walk valid stack addresses
  [AVR32] at32_spi_setup_slaves should be __init
parents 0782588b a9e28d9b
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -313,7 +313,7 @@ asmlinkage void do_debug_priv(struct pt_regs *regs)
		__mtdr(DBGREG_DC, dc);
		__mtdr(DBGREG_DC, dc);


		ti = current_thread_info();
		ti = current_thread_info();
		ti->flags |= _TIF_BREAKPOINT;
		set_ti_thread_flag(ti, TIF_BREAKPOINT);


		/* The TLB miss handlers don't check thread flags */
		/* The TLB miss handlers don't check thread flags */
		if ((regs->pc >= (unsigned long)&itlb_miss)
		if ((regs->pc >= (unsigned long)&itlb_miss)
@@ -328,7 +328,7 @@ asmlinkage void do_debug_priv(struct pt_regs *regs)
		 * single step.
		 * single step.
		 */
		 */
		if ((regs->sr & MODE_MASK) != MODE_SUPERVISOR)
		if ((regs->sr & MODE_MASK) != MODE_SUPERVISOR)
			ti->flags |= TIF_SINGLE_STEP;
			set_ti_thread_flag(ti, TIF_SINGLE_STEP);
	} else {
	} else {
		panic("Unable to handle debug trap at pc = %08lx\n",
		panic("Unable to handle debug trap at pc = %08lx\n",
		      regs->pc);
		      regs->pc);
+29 −23
Original line number Original line Diff line number Diff line
@@ -49,39 +49,45 @@ out:
	return;
	return;
}
}


static inline int valid_stack_ptr(struct thread_info *tinfo, unsigned long p)
{
	return (p > (unsigned long)tinfo)
		&& (p < (unsigned long)tinfo + THREAD_SIZE - 3);
}

#ifdef CONFIG_FRAME_POINTER
#ifdef CONFIG_FRAME_POINTER
static inline void __show_trace(struct task_struct *tsk, unsigned long *sp,
static inline void __show_trace(struct task_struct *tsk, unsigned long *sp,
				struct pt_regs *regs)
				struct pt_regs *regs)
{
{
	unsigned long __user *fp;
	unsigned long lr, fp;
	unsigned long __user *last_fp = NULL;
	struct thread_info *tinfo;


	if (regs) {
	tinfo = (struct thread_info *)
		fp = (unsigned long __user *)regs->r7;
		((unsigned long)sp & ~(THREAD_SIZE - 1));
	} else if (tsk == current) {

		register unsigned long __user *real_fp __asm__("r7");
	if (regs)
		fp = real_fp;
		fp = regs->r7;
	} else {
	else if (tsk == current)
		fp = (unsigned long __user *)tsk->thread.cpu_context.r7;
		asm("mov %0, r7" : "=r"(fp));
	}
	else
		fp = tsk->thread.cpu_context.r7;


	/*
	/*
	 * Walk the stack until (a) we get an exception, (b) the frame
	 * Walk the stack as long as the frame pointer (a) is within
	 * pointer becomes zero, or (c) the frame pointer gets stuck
	 * the kernel stack of the task, and (b) it doesn't move
	 * at the same value.
	 * downwards.
	 */
	 */
	while (fp && fp != last_fp) {
	while (valid_stack_ptr(tinfo, fp)) {
		unsigned long lr, new_fp = 0;
		unsigned long new_fp;

		last_fp = fp;
		if (__get_user(lr, fp))
			break;
		if (fp && __get_user(new_fp, fp + 1))
			break;
		fp = (unsigned long __user *)new_fp;


		lr = *(unsigned long *)fp;
		printk(" [<%08lx>] ", lr);
		printk(" [<%08lx>] ", lr);
		print_symbol("%s\n", lr);
		print_symbol("%s\n", lr);

		new_fp = *(unsigned long *)(fp + 4);
		if (new_fp <= fp)
			break;
		fp = new_fp;
	}
	}
	printk("\n");
	printk("\n");
}
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -752,7 +752,7 @@ static struct resource atmel_spi1_resource[] = {
DEFINE_DEV(atmel_spi, 1);
DEFINE_DEV(atmel_spi, 1);
DEV_CLK(spi_clk, atmel_spi1, pba, 1);
DEV_CLK(spi_clk, atmel_spi1, pba, 1);


static void
static void __init
at32_spi_setup_slaves(unsigned int bus_num, struct spi_board_info *b,
at32_spi_setup_slaves(unsigned int bus_num, struct spi_board_info *b,
		      unsigned int n, const u8 *pins)
		      unsigned int n, const u8 *pins)
{
{
+1 −2
Original line number Original line Diff line number Diff line
@@ -121,9 +121,8 @@ void flush_icache_range(unsigned long start, unsigned long end)
void flush_icache_page(struct vm_area_struct *vma, struct page *page)
void flush_icache_page(struct vm_area_struct *vma, struct page *page)
{
{
	if (vma->vm_flags & VM_EXEC) {
	if (vma->vm_flags & VM_EXEC) {
		void *v = kmap(page);
		void *v = page_address(page);
		__flush_icache_range((unsigned long)v, (unsigned long)v + PAGE_SIZE);
		__flush_icache_range((unsigned long)v, (unsigned long)v + PAGE_SIZE);
		kunmap(v);
	}
	}
}
}


+1 −1
Original line number Original line Diff line number Diff line
include include/asm-generic/Kbuild.asm
include include/asm-generic/Kbuild.asm


headers-y	+= cachectl.h
header-y	+= cachectl.h
Loading