mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-25 10:19:47 +00:00
Merge branch '4.11-fixes' into mips-for-linux-next
This commit is contained in:
commit
e469b23cde
9 changed files with 56 additions and 26 deletions
|
@ -489,7 +489,7 @@ $(generic_defconfigs):
|
|||
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh \
|
||||
-m -O $(objtree) $(srctree)/arch/$(ARCH)/configs/generic_defconfig $^ \
|
||||
$(foreach board,$(BOARDS),$(generic_config_dir)/board-$(board).config)
|
||||
$(Q)$(MAKE) olddefconfig
|
||||
$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig
|
||||
|
||||
#
|
||||
# Prevent generic merge_config rules attempting to merge single fragments
|
||||
|
@ -503,8 +503,8 @@ $(generic_config_dir)/%.config: ;
|
|||
#
|
||||
.PHONY: sead3_defconfig
|
||||
sead3_defconfig:
|
||||
$(Q)$(MAKE) 32r2el_defconfig BOARDS=sead-3
|
||||
$(Q)$(MAKE) -f $(srctree)/Makefile 32r2el_defconfig BOARDS=sead-3
|
||||
|
||||
.PHONY: sead3micro_defconfig
|
||||
sead3micro_defconfig:
|
||||
$(Q)$(MAKE) micro32r2el_defconfig BOARDS=sead-3
|
||||
$(Q)$(MAKE) -f $(srctree)/Makefile micro32r2el_defconfig BOARDS=sead-3
|
||||
|
|
|
@ -3,3 +3,4 @@
|
|||
#include <asm/fpu.h>
|
||||
#include <asm-generic/asm-prototypes.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/ftrace.h>
|
||||
|
|
|
@ -80,7 +80,7 @@ static unsigned int calculate_min_delta(void)
|
|||
}
|
||||
|
||||
/* Sorted insert of 75th percentile into buf2 */
|
||||
for (k = 0; k < i; ++k) {
|
||||
for (k = 0; k < i && k < ARRAY_SIZE(buf2); ++k) {
|
||||
if (buf1[ARRAY_SIZE(buf1) - 1] < buf2[k]) {
|
||||
l = min_t(unsigned int,
|
||||
i, ARRAY_SIZE(buf2) - 1);
|
||||
|
|
|
@ -257,7 +257,7 @@ int arch_check_elf(void *_ehdr, bool has_interpreter, void *_interp_ehdr,
|
|||
else if ((prog_req.fr1 && prog_req.frdefault) ||
|
||||
(prog_req.single && !prog_req.frdefault))
|
||||
/* Make sure 64-bit MIPS III/IV/64R1 will not pick FR1 */
|
||||
state->overall_fp_mode = ((current_cpu_data.fpu_id & MIPS_FPIR_F64) &&
|
||||
state->overall_fp_mode = ((raw_current_cpu_data.fpu_id & MIPS_FPIR_F64) &&
|
||||
cpu_has_mips_r2_r6) ?
|
||||
FP_FR1 : FP_FR0;
|
||||
else if (prog_req.fr1)
|
||||
|
|
|
@ -244,9 +244,6 @@ static int compute_signal(int tt)
|
|||
void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p)
|
||||
{
|
||||
int reg;
|
||||
struct thread_info *ti = task_thread_info(p);
|
||||
unsigned long ksp = (unsigned long)ti + THREAD_SIZE - 32;
|
||||
struct pt_regs *regs = (struct pt_regs *)ksp - 1;
|
||||
#if (KGDB_GDB_REG_SIZE == 32)
|
||||
u32 *ptr = (u32 *)gdb_regs;
|
||||
#else
|
||||
|
@ -254,25 +251,46 @@ void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p)
|
|||
#endif
|
||||
|
||||
for (reg = 0; reg < 16; reg++)
|
||||
*(ptr++) = regs->regs[reg];
|
||||
*(ptr++) = 0;
|
||||
|
||||
/* S0 - S7 */
|
||||
for (reg = 16; reg < 24; reg++)
|
||||
*(ptr++) = regs->regs[reg];
|
||||
*(ptr++) = p->thread.reg16;
|
||||
*(ptr++) = p->thread.reg17;
|
||||
*(ptr++) = p->thread.reg18;
|
||||
*(ptr++) = p->thread.reg19;
|
||||
*(ptr++) = p->thread.reg20;
|
||||
*(ptr++) = p->thread.reg21;
|
||||
*(ptr++) = p->thread.reg22;
|
||||
*(ptr++) = p->thread.reg23;
|
||||
|
||||
for (reg = 24; reg < 28; reg++)
|
||||
*(ptr++) = 0;
|
||||
|
||||
/* GP, SP, FP, RA */
|
||||
for (reg = 28; reg < 32; reg++)
|
||||
*(ptr++) = regs->regs[reg];
|
||||
*(ptr++) = (long)p;
|
||||
*(ptr++) = p->thread.reg29;
|
||||
*(ptr++) = p->thread.reg30;
|
||||
*(ptr++) = p->thread.reg31;
|
||||
|
||||
*(ptr++) = regs->cp0_status;
|
||||
*(ptr++) = regs->lo;
|
||||
*(ptr++) = regs->hi;
|
||||
*(ptr++) = regs->cp0_badvaddr;
|
||||
*(ptr++) = regs->cp0_cause;
|
||||
*(ptr++) = regs->cp0_epc;
|
||||
*(ptr++) = p->thread.cp0_status;
|
||||
|
||||
/* lo, hi */
|
||||
*(ptr++) = 0;
|
||||
*(ptr++) = 0;
|
||||
|
||||
/*
|
||||
* BadVAddr, Cause
|
||||
* Ideally these would come from the last exception frame up the stack
|
||||
* but that requires unwinding, otherwise we can't know much for sure.
|
||||
*/
|
||||
*(ptr++) = 0;
|
||||
*(ptr++) = 0;
|
||||
|
||||
/*
|
||||
* PC
|
||||
* use return address (RA), i.e. the moment after return from resume()
|
||||
*/
|
||||
*(ptr++) = p->thread.reg31;
|
||||
}
|
||||
|
||||
void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long pc)
|
||||
|
|
|
@ -1446,6 +1446,11 @@ static int mipsxx_pmu_handle_shared_irq(void)
|
|||
HANDLE_COUNTER(0)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MIPS_PERF_SHARED_TC_COUNTERS
|
||||
read_unlock(&pmuint_rwlock);
|
||||
#endif
|
||||
resume_local_counters();
|
||||
|
||||
/*
|
||||
* Do all the work for the pending perf events. We can do this
|
||||
* in here because the performance counter interrupt is a regular
|
||||
|
@ -1454,10 +1459,6 @@ static int mipsxx_pmu_handle_shared_irq(void)
|
|||
if (handled == IRQ_HANDLED)
|
||||
irq_work_run();
|
||||
|
||||
#ifdef CONFIG_MIPS_PERF_SHARED_TC_COUNTERS
|
||||
read_unlock(&pmuint_rwlock);
|
||||
#endif
|
||||
resume_local_counters();
|
||||
return handled;
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
#include <linux/kernel.h>
|
||||
#include <linux/libfdt.h>
|
||||
#include <linux/of_fdt.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/sched/task.h>
|
||||
#include <linux/start_kernel.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/printk.h>
|
||||
|
|
|
@ -422,13 +422,12 @@ void play_dead(void)
|
|||
local_irq_disable();
|
||||
idle_task_exit();
|
||||
cpu = smp_processor_id();
|
||||
core = cpu_data[cpu].core;
|
||||
cpu_death = CPU_DEATH_POWER;
|
||||
|
||||
pr_debug("CPU%d going offline\n", cpu);
|
||||
|
||||
if (cpu_has_mipsmt || cpu_has_vp) {
|
||||
core = cpu_data[cpu].core;
|
||||
|
||||
/* Look for another online VPE within the core */
|
||||
for_each_online_cpu(cpu_death_sibling) {
|
||||
if (cpu_data[cpu_death_sibling].core != core)
|
||||
|
|
|
@ -176,6 +176,17 @@ void __init arch_init_irq(void)
|
|||
{
|
||||
int corehi_irq;
|
||||
|
||||
/*
|
||||
* Preallocate the i8259's expected virq's here. Since irqchip_init()
|
||||
* will probe the irqchips in hierarchial order, i8259 is probed last.
|
||||
* If anything allocates a virq before the i8259 is probed, it will
|
||||
* be given one of the i8259's expected range and consequently setup
|
||||
* of the i8259 will fail.
|
||||
*/
|
||||
WARN(irq_alloc_descs(I8259A_IRQ_BASE, I8259A_IRQ_BASE,
|
||||
16, numa_node_id()) < 0,
|
||||
"Cannot reserve i8259 virqs at IRQ%d\n", I8259A_IRQ_BASE);
|
||||
|
||||
i8259_set_poll(mips_pcibios_iack);
|
||||
irqchip_init();
|
||||
|
||||
|
|
Loading…
Reference in a new issue