Commit 03018ac2 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'arc-4.4-rc3-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc

Pull ARC fixes from Vineet Gupta:
 - Fix for perf callgraph unwinding causing RCU stalls
 - Fix to enable Linux to run on non-default Interrupt priority 0
 - Removal of pointless SYNC from __switch_to()

* tag 'arc-4.4-rc3-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc:
  ARC: dw2 unwind: Remove falllback linear search thru FDE entries
  ARC: remove SYNC from __switch_to()
  ARCv2: Use the default irq priority for idle sleep
  ARC: Abstract out ISA specific SLEEP args
  ARC: comments update
  ARC: switch to arc-linux- CROSS_COMPILE prefix across all configs
parents 4fe5e199 2e22502c
CONFIG_CROSS_COMPILE="arc-linux-uclibc-" CONFIG_CROSS_COMPILE="arc-linux-"
CONFIG_DEFAULT_HOSTNAME="ARCLinux" CONFIG_DEFAULT_HOSTNAME="ARCLinux"
# CONFIG_SWAP is not set # CONFIG_SWAP is not set
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
......
CONFIG_CROSS_COMPILE="arc-linux-uclibc-" CONFIG_CROSS_COMPILE="arc-linux-"
CONFIG_DEFAULT_HOSTNAME="ARCLinux" CONFIG_DEFAULT_HOSTNAME="ARCLinux"
# CONFIG_SWAP is not set # CONFIG_SWAP is not set
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
......
CONFIG_CROSS_COMPILE="arc-linux-uclibc-" CONFIG_CROSS_COMPILE="arc-linux-"
CONFIG_DEFAULT_HOSTNAME="ARCLinux" CONFIG_DEFAULT_HOSTNAME="ARCLinux"
# CONFIG_SWAP is not set # CONFIG_SWAP is not set
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
......
CONFIG_CROSS_COMPILE="arc-linux-uclibc-" CONFIG_CROSS_COMPILE="arc-linux-"
# CONFIG_LOCALVERSION_AUTO is not set # CONFIG_LOCALVERSION_AUTO is not set
CONFIG_DEFAULT_HOSTNAME="ARCLinux" CONFIG_DEFAULT_HOSTNAME="ARCLinux"
# CONFIG_SWAP is not set # CONFIG_SWAP is not set
......
CONFIG_CROSS_COMPILE="arc-linux-uclibc-" CONFIG_CROSS_COMPILE="arc-linux-"
# CONFIG_LOCALVERSION_AUTO is not set # CONFIG_LOCALVERSION_AUTO is not set
CONFIG_DEFAULT_HOSTNAME="ARCLinux" CONFIG_DEFAULT_HOSTNAME="ARCLinux"
# CONFIG_SWAP is not set # CONFIG_SWAP is not set
......
CONFIG_CROSS_COMPILE="arc-linux-uclibc-" CONFIG_CROSS_COMPILE="arc-linux-"
# CONFIG_LOCALVERSION_AUTO is not set # CONFIG_LOCALVERSION_AUTO is not set
CONFIG_DEFAULT_HOSTNAME="ARCLinux" CONFIG_DEFAULT_HOSTNAME="ARCLinux"
# CONFIG_SWAP is not set # CONFIG_SWAP is not set
......
CONFIG_CROSS_COMPILE="arc-linux-uclibc-" CONFIG_CROSS_COMPILE="arc-linux-"
CONFIG_DEFAULT_HOSTNAME="ARCLinux" CONFIG_DEFAULT_HOSTNAME="ARCLinux"
# CONFIG_SWAP is not set # CONFIG_SWAP is not set
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
......
CONFIG_CROSS_COMPILE="arc-linux-uclibc-" CONFIG_CROSS_COMPILE="arc-linux-"
# CONFIG_LOCALVERSION_AUTO is not set # CONFIG_LOCALVERSION_AUTO is not set
CONFIG_DEFAULT_HOSTNAME="ARCLinux" CONFIG_DEFAULT_HOSTNAME="ARCLinux"
# CONFIG_CROSS_MEMORY_ATTACH is not set # CONFIG_CROSS_MEMORY_ATTACH is not set
......
CONFIG_CROSS_COMPILE="arc-linux-uclibc-" CONFIG_CROSS_COMPILE="arc-linux-"
# CONFIG_LOCALVERSION_AUTO is not set # CONFIG_LOCALVERSION_AUTO is not set
CONFIG_DEFAULT_HOSTNAME="ARCLinux" CONFIG_DEFAULT_HOSTNAME="ARCLinux"
# CONFIG_CROSS_MEMORY_ATTACH is not set # CONFIG_CROSS_MEMORY_ATTACH is not set
......
...@@ -37,6 +37,9 @@ ...@@ -37,6 +37,9 @@
#define ISA_INIT_STATUS_BITS (STATUS_IE_MASK | STATUS_AD_MASK | \ #define ISA_INIT_STATUS_BITS (STATUS_IE_MASK | STATUS_AD_MASK | \
(ARCV2_IRQ_DEF_PRIO << 1)) (ARCV2_IRQ_DEF_PRIO << 1))
/* SLEEP needs default irq priority (<=) which can interrupt the doze */
#define ISA_SLEEP_ARG (0x10 | ARCV2_IRQ_DEF_PRIO)
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
/* /*
......
...@@ -43,6 +43,8 @@ ...@@ -43,6 +43,8 @@
#define ISA_INIT_STATUS_BITS STATUS_IE_MASK #define ISA_INIT_STATUS_BITS STATUS_IE_MASK
#define ISA_SLEEP_ARG 0x3
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
/****************************************************************** /******************************************************************
......
...@@ -58,8 +58,6 @@ __switch_to(struct task_struct *prev_task, struct task_struct *next_task) ...@@ -58,8 +58,6 @@ __switch_to(struct task_struct *prev_task, struct task_struct *next_task)
"st sp, [r24] \n\t" "st sp, [r24] \n\t"
#endif #endif
"sync \n\t"
/* /*
* setup _current_task with incoming tsk. * setup _current_task with incoming tsk.
* optionally, set r25 to that as well * optionally, set r25 to that as well
......
...@@ -44,9 +44,6 @@ __switch_to: ...@@ -44,9 +44,6 @@ __switch_to:
* don't need to do anything special to return it * don't need to do anything special to return it
*/ */
/* hardware memory barrier */
sync
/* /*
* switch to new task, contained in r1 * switch to new task, contained in r1
* Temp reg r3 is required to get the ptr to store val * Temp reg r3 is required to get the ptr to store val
......
...@@ -44,11 +44,10 @@ SYSCALL_DEFINE0(arc_gettls) ...@@ -44,11 +44,10 @@ SYSCALL_DEFINE0(arc_gettls)
void arch_cpu_idle(void) void arch_cpu_idle(void)
{ {
/* sleep, but enable all interrupts before committing */ /* sleep, but enable all interrupts before committing */
if (is_isa_arcompact()) { __asm__ __volatile__(
__asm__("sleep 0x3"); "sleep %0 \n"
} else { :
__asm__("sleep 0x10"); :"I"(ISA_SLEEP_ARG)); /* can't be "r" has to be embedded const */
}
} }
asmlinkage void ret_from_fork(void); asmlinkage void ret_from_fork(void);
......
...@@ -986,42 +986,13 @@ int arc_unwind(struct unwind_frame_info *frame) ...@@ -986,42 +986,13 @@ int arc_unwind(struct unwind_frame_info *frame)
(const u8 *)(fde + (const u8 *)(fde +
1) + 1) +
*fde, ptrType); *fde, ptrType);
if (pc >= endLoc) if (pc >= endLoc) {
fde = NULL; fde = NULL;
} else
fde = NULL;
}
if (fde == NULL) {
for (fde = table->address, tableSize = table->size;
cie = NULL, tableSize > sizeof(*fde)
&& tableSize - sizeof(*fde) >= *fde;
tableSize -= sizeof(*fde) + *fde,
fde += 1 + *fde / sizeof(*fde)) {
cie = cie_for_fde(fde, table);
if (cie == &bad_cie) {
cie = NULL; cie = NULL;
break;
} }
if (cie == NULL } else {
|| cie == &not_fde fde = NULL;
|| (ptrType = fde_pointer_type(cie)) < 0) cie = NULL;
continue;
ptr = (const u8 *)(fde + 2);
startLoc = read_pointer(&ptr,
(const u8 *)(fde + 1) +
*fde, ptrType);
if (!startLoc)
continue;
if (!(ptrType & DW_EH_PE_indirect))
ptrType &=
DW_EH_PE_FORM | DW_EH_PE_signed;
endLoc =
startLoc + read_pointer(&ptr,
(const u8 *)(fde +
1) +
*fde, ptrType);
if (pc >= startLoc && pc < endLoc)
break;
} }
} }
} }
......
...@@ -619,10 +619,10 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long vaddr_unaligned, ...@@ -619,10 +619,10 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long vaddr_unaligned,
int dirty = !test_and_set_bit(PG_dc_clean, &page->flags); int dirty = !test_and_set_bit(PG_dc_clean, &page->flags);
if (dirty) { if (dirty) {
/* wback + inv dcache lines */ /* wback + inv dcache lines (K-mapping) */
__flush_dcache_page(paddr, paddr); __flush_dcache_page(paddr, paddr);
/* invalidate any existing icache lines */ /* invalidate any existing icache lines (U-mapping) */
if (vma->vm_flags & VM_EXEC) if (vma->vm_flags & VM_EXEC)
__inv_icache_page(paddr, vaddr); __inv_icache_page(paddr, vaddr);
} }
......
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