Commit 074fcab5 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'avr32-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/hskinnemoen/avr32-2.6

* 'avr32-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/hskinnemoen/avr32-2.6:
  avr32: Fix bug in early resource allocation code
  avr32: Build fix for CONFIG_BUG=n
  avr32: Work around byteswap bug in gcc < 4.2
parents c94b4321 a2a39525
...@@ -163,6 +163,7 @@ add_reserved_region(resource_size_t start, resource_size_t end, ...@@ -163,6 +163,7 @@ add_reserved_region(resource_size_t start, resource_size_t end,
new->start = start; new->start = start;
new->end = end; new->end = end;
new->name = name; new->name = name;
new->sibling = next;
new->flags = IORESOURCE_MEM; new->flags = IORESOURCE_MEM;
*pprev = new; *pprev = new;
......
...@@ -178,6 +178,7 @@ static int do_cop_absent(u32 insn) ...@@ -178,6 +178,7 @@ static int do_cop_absent(u32 insn)
return 0; return 0;
} }
#ifdef CONFIG_BUG
int is_valid_bugaddr(unsigned long pc) int is_valid_bugaddr(unsigned long pc)
{ {
unsigned short opcode; unsigned short opcode;
...@@ -189,6 +190,7 @@ int is_valid_bugaddr(unsigned long pc) ...@@ -189,6 +190,7 @@ int is_valid_bugaddr(unsigned long pc)
return opcode == AVR32_BUG_OPCODE; return opcode == AVR32_BUG_OPCODE;
} }
#endif
asmlinkage void do_illegal_opcode(unsigned long ecr, struct pt_regs *regs) asmlinkage void do_illegal_opcode(unsigned long ecr, struct pt_regs *regs)
{ {
...@@ -197,6 +199,7 @@ asmlinkage void do_illegal_opcode(unsigned long ecr, struct pt_regs *regs) ...@@ -197,6 +199,7 @@ asmlinkage void do_illegal_opcode(unsigned long ecr, struct pt_regs *regs)
void __user *pc; void __user *pc;
long code; long code;
#ifdef CONFIG_BUG
if (!user_mode(regs) && (ecr == ECR_ILLEGAL_OPCODE)) { if (!user_mode(regs) && (ecr == ECR_ILLEGAL_OPCODE)) {
enum bug_trap_type type; enum bug_trap_type type;
...@@ -211,6 +214,7 @@ asmlinkage void do_illegal_opcode(unsigned long ecr, struct pt_regs *regs) ...@@ -211,6 +214,7 @@ asmlinkage void do_illegal_opcode(unsigned long ecr, struct pt_regs *regs)
die("Kernel BUG", regs, SIGKILL); die("Kernel BUG", regs, SIGKILL);
} }
} }
#endif
local_irq_enable(); local_irq_enable();
......
...@@ -12,8 +12,14 @@ extern unsigned long __builtin_bswap_32(unsigned long x); ...@@ -12,8 +12,14 @@ extern unsigned long __builtin_bswap_32(unsigned long x);
extern unsigned short __builtin_bswap_16(unsigned short x); extern unsigned short __builtin_bswap_16(unsigned short x);
#endif #endif
/*
* avr32-linux-gcc versions earlier than 4.2 improperly sign-extends
* the result.
*/
#if !(__GNUC__ == 4 && __GNUC_MINOR__ < 2)
#define __arch__swab32(x) __builtin_bswap_32(x) #define __arch__swab32(x) __builtin_bswap_32(x)
#define __arch__swab16(x) __builtin_bswap_16(x) #define __arch__swab16(x) __builtin_bswap_16(x)
#endif
#if !defined(__STRICT_ANSI__) || defined(__KERNEL__) #if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
# define __BYTEORDER_HAS_U64__ # define __BYTEORDER_HAS_U64__
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment