Skip to content

Commit ffc4aa8

Browse files
author
Alex Shi
committed
Merge tag 'v4.4.14' into linux-linaro-lsk-v4.4
This is the 4.4.14 stable release
2 parents 46b4dd0 + 9ca1d50 commit ffc4aa8

87 files changed

Lines changed: 1434 additions & 1080 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
VERSION = 4
22
PATCHLEVEL = 4
3-
SUBLEVEL = 13
3+
SUBLEVEL = 14
44
EXTRAVERSION =
55
NAME = Blurry Fish Butt
66

arch/arm/kernel/ptrace.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -733,8 +733,8 @@ static int vfp_set(struct task_struct *target,
733733
if (ret)
734734
return ret;
735735

736-
vfp_flush_hwstate(thread);
737736
thread->vfpstate.hard = new_vfp;
737+
vfp_flush_hwstate(thread);
738738

739739
return 0;
740740
}

arch/arm64/include/asm/elf.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,14 +160,14 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm,
160160
#define STACK_RND_MASK (0x3ffff >> (PAGE_SHIFT - 12))
161161
#endif
162162

163-
#ifdef CONFIG_COMPAT
164-
165163
#ifdef __AARCH64EB__
166164
#define COMPAT_ELF_PLATFORM ("v8b")
167165
#else
168166
#define COMPAT_ELF_PLATFORM ("v8l")
169167
#endif
170168

169+
#ifdef CONFIG_COMPAT
170+
171171
#define COMPAT_ELF_ET_DYN_BASE (2 * TASK_SIZE_32 / 3)
172172

173173
/* AArch32 registers. */

arch/arm64/kernel/cpuinfo.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222

2323
#include <linux/bitops.h>
2424
#include <linux/bug.h>
25+
#include <linux/compat.h>
26+
#include <linux/elf.h>
2527
#include <linux/init.h>
2628
#include <linux/kernel.h>
2729
#include <linux/personality.h>
@@ -102,6 +104,7 @@ static const char *const compat_hwcap2_str[] = {
102104
static int c_show(struct seq_file *m, void *v)
103105
{
104106
int i, j;
107+
bool compat = personality(current->personality) == PER_LINUX32;
105108

106109
for_each_online_cpu(i) {
107110
struct cpuinfo_arm64 *cpuinfo = &per_cpu(cpu_data, i);
@@ -113,6 +116,9 @@ static int c_show(struct seq_file *m, void *v)
113116
* "processor". Give glibc what it expects.
114117
*/
115118
seq_printf(m, "processor\t: %d\n", i);
119+
if (compat)
120+
seq_printf(m, "model name\t: ARMv8 Processor rev %d (%s)\n",
121+
MIDR_REVISION(midr), COMPAT_ELF_PLATFORM);
116122

117123
seq_printf(m, "BogoMIPS\t: %lu.%02lu\n",
118124
loops_per_jiffy / (500000UL/HZ),
@@ -125,7 +131,7 @@ static int c_show(struct seq_file *m, void *v)
125131
* software which does already (at least for 32-bit).
126132
*/
127133
seq_puts(m, "Features\t:");
128-
if (personality(current->personality) == PER_LINUX32) {
134+
if (compat) {
129135
#ifdef CONFIG_COMPAT
130136
for (j = 0; compat_hwcap_str[j]; j++)
131137
if (compat_elf_hwcap & (1 << j))

arch/arm64/mm/fault.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ int ptep_set_access_flags(struct vm_area_struct *vma,
109109
* PTE_RDONLY is cleared by default in the asm below, so set it in
110110
* back if necessary (read-only or clean PTE).
111111
*/
112-
if (!pte_write(entry) || !dirty)
112+
if (!pte_write(entry) || !pte_sw_dirty(entry))
113113
pte_val(entry) |= PTE_RDONLY;
114114

115115
/*

arch/mips/include/asm/processor.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ extern unsigned int vced_count, vcei_count;
4545
* User space process size: 2GB. This is hardcoded into a few places,
4646
* so don't change it unless you know what you are doing.
4747
*/
48-
#define TASK_SIZE 0x7fff8000UL
48+
#define TASK_SIZE 0x80000000UL
4949
#endif
5050

5151
#define STACK_TOP_MAX TASK_SIZE

arch/parisc/kernel/unaligned.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,7 @@ void handle_unaligned(struct pt_regs *regs)
666666
break;
667667
}
668668

669-
if (modify && R1(regs->iir))
669+
if (ret == 0 && modify && R1(regs->iir))
670670
regs->gr[R1(regs->iir)] = newbase;
671671

672672

@@ -677,6 +677,14 @@ void handle_unaligned(struct pt_regs *regs)
677677

678678
if (ret)
679679
{
680+
/*
681+
* The unaligned handler failed.
682+
* If we were called by __get_user() or __put_user() jump
683+
* to it's exception fixup handler instead of crashing.
684+
*/
685+
if (!user_mode(regs) && fixup_exception(regs))
686+
return;
687+
680688
printk(KERN_CRIT "Unaligned handler failed, ret = %d\n", ret);
681689
die_if_kernel("Unaligned data reference", regs, 28);
682690

arch/powerpc/include/asm/reg.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -707,7 +707,7 @@
707707
#define MMCR0_FCWAIT 0x00000002UL /* freeze counter in WAIT state */
708708
#define MMCR0_FCHV 0x00000001UL /* freeze conditions in hypervisor mode */
709709
#define SPRN_MMCR1 798
710-
#define SPRN_MMCR2 769
710+
#define SPRN_MMCR2 785
711711
#define SPRN_MMCRA 0x312
712712
#define MMCRA_SDSYNC 0x80000000UL /* SDAR synced with SIAR */
713713
#define MMCRA_SDAR_DCACHE_MISS 0x40000000UL
@@ -744,13 +744,13 @@
744744
#define SPRN_PMC6 792
745745
#define SPRN_PMC7 793
746746
#define SPRN_PMC8 794
747-
#define SPRN_SIAR 780
748-
#define SPRN_SDAR 781
749747
#define SPRN_SIER 784
750748
#define SIER_SIPR 0x2000000 /* Sampled MSR_PR */
751749
#define SIER_SIHV 0x1000000 /* Sampled MSR_HV */
752750
#define SIER_SIAR_VALID 0x0400000 /* SIAR contents valid */
753751
#define SIER_SDAR_VALID 0x0200000 /* SDAR contents valid */
752+
#define SPRN_SIAR 796
753+
#define SPRN_SDAR 797
754754
#define SPRN_TACR 888
755755
#define SPRN_TCSCR 889
756756
#define SPRN_CSIGR 890

arch/powerpc/kernel/prom_init.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -655,6 +655,7 @@ unsigned char ibm_architecture_vec[] = {
655655
W(0xffff0000), W(0x003e0000), /* POWER6 */
656656
W(0xffff0000), W(0x003f0000), /* POWER7 */
657657
W(0xffff0000), W(0x004b0000), /* POWER8E */
658+
W(0xffff0000), W(0x004c0000), /* POWER8NVL */
658659
W(0xffff0000), W(0x004d0000), /* POWER8 */
659660
W(0xffffffff), W(0x0f000004), /* all 2.07-compliant */
660661
W(0xffffffff), W(0x0f000003), /* all 2.06-compliant */

arch/powerpc/platforms/pseries/eeh_pseries.c

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -615,29 +615,50 @@ static int pseries_eeh_configure_bridge(struct eeh_pe *pe)
615615
{
616616
int config_addr;
617617
int ret;
618+
/* Waiting 0.2s maximum before skipping configuration */
619+
int max_wait = 200;
618620

619621
/* Figure out the PE address */
620622
config_addr = pe->config_addr;
621623
if (pe->addr)
622624
config_addr = pe->addr;
623625

624-
/* Use new configure-pe function, if supported */
625-
if (ibm_configure_pe != RTAS_UNKNOWN_SERVICE) {
626-
ret = rtas_call(ibm_configure_pe, 3, 1, NULL,
627-
config_addr, BUID_HI(pe->phb->buid),
628-
BUID_LO(pe->phb->buid));
629-
} else if (ibm_configure_bridge != RTAS_UNKNOWN_SERVICE) {
630-
ret = rtas_call(ibm_configure_bridge, 3, 1, NULL,
631-
config_addr, BUID_HI(pe->phb->buid),
632-
BUID_LO(pe->phb->buid));
633-
} else {
634-
return -EFAULT;
635-
}
626+
while (max_wait > 0) {
627+
/* Use new configure-pe function, if supported */
628+
if (ibm_configure_pe != RTAS_UNKNOWN_SERVICE) {
629+
ret = rtas_call(ibm_configure_pe, 3, 1, NULL,
630+
config_addr, BUID_HI(pe->phb->buid),
631+
BUID_LO(pe->phb->buid));
632+
} else if (ibm_configure_bridge != RTAS_UNKNOWN_SERVICE) {
633+
ret = rtas_call(ibm_configure_bridge, 3, 1, NULL,
634+
config_addr, BUID_HI(pe->phb->buid),
635+
BUID_LO(pe->phb->buid));
636+
} else {
637+
return -EFAULT;
638+
}
636639

637-
if (ret)
638-
pr_warn("%s: Unable to configure bridge PHB#%d-PE#%x (%d)\n",
639-
__func__, pe->phb->global_number, pe->addr, ret);
640+
if (!ret)
641+
return ret;
642+
643+
/*
644+
* If RTAS returns a delay value that's above 100ms, cut it
645+
* down to 100ms in case firmware made a mistake. For more
646+
* on how these delay values work see rtas_busy_delay_time
647+
*/
648+
if (ret > RTAS_EXTENDED_DELAY_MIN+2 &&
649+
ret <= RTAS_EXTENDED_DELAY_MAX)
650+
ret = RTAS_EXTENDED_DELAY_MIN+2;
651+
652+
max_wait -= rtas_busy_delay_time(ret);
653+
654+
if (max_wait < 0)
655+
break;
656+
657+
rtas_busy_delay(ret);
658+
}
640659

660+
pr_warn("%s: Unable to configure bridge PHB#%d-PE#%x (%d)\n",
661+
__func__, pe->phb->global_number, pe->addr, ret);
641662
return ret;
642663
}
643664

0 commit comments

Comments
 (0)