ARC fixes for 4.4-rc3
- 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() -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJWWEhjAAoJEGnX8d3iisJewN8P/3emX7r8RBE/W095FwrzXXRP QpQf48YKGx8PJIXLCMyj3oiD0ALtmtekSYDPs9E5IOpnli1tBMCIB5ZBGrcfQDYp nsowUBEf4Fsaq3cgtOCQFoqcAtdHXGnxQoy6zN1ItfRxdvLDqNjWa9M+h7uDjsPE klw7eP/kTiJC+OKRNylOo4w0rRkf/EQntteNIBQ5gznmtN/whNTDaD6t6AbwRrY7 8Yki1tmN/sKjfpUz7TZH2Tf/qQ/M4sBW4SWIifBk2lxZe1dHduYx6tJPP/PLhAhO e2mI96CzeH691erqGbE6weYK5qEm2RTtf3uvv0jycPLg8jcF62C0H6lxB/+u87rD ZYIXd51Z6jS1vyG/v2pddj/8MQC7JFJBv7pKmGLtHzihbIZBLHLUcQKYma1p2Jro 9oxFFtCAWcF+/CwyHNBYhzrIXI7KpZFLvErFkzHf2lQAQy/9kV1zdsaAkCSPzNOq 3MXHxajUg3er1zl7prduIp1OVil6+WoN6iZm3HAczrZjmqb70zZNodmYHQ32GHlU P7k+/j+u3nfORyVZnLVtv4WCrd1IT9gSLLzrdf6CU9Ek7zmgO+spwbTtEslaBWyp sn7rinIfXvd7gGDtUgXansr/xMVL0VXt8ZpEjyqgi1a6O/BuC2WDMPtSlWYkU6dd fs47GLW868wveV5rakBV =iOv3 -----END PGP SIGNATURE----- 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
This commit is contained in:
commit
03018ac2bb
|
@ -1,4 +1,4 @@
|
||||||
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
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
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
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
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
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
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
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
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
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
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
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
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
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
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
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
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 @@
|
||||||
#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 @@
|
||||||
|
|
||||||
#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)
|
||||||
"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:
|
||||||
* 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)
|
||||||
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)
|
||||||
(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 == ¬_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,
|
||||||
|
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue