Skip to content

Commit c2a5f1f

Browse files
author
Alex Shi
committed
Merge tag 'v4.4.63' into linux-linaro-lsk-v4.4
This is the 4.4.63 stable release
2 parents 28a4573 + 81af21f commit c2a5f1f

48 files changed

Lines changed: 518 additions & 216 deletions

File tree

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 = 62
3+
SUBLEVEL = 63
44
EXTRAVERSION =
55
NAME = Blurry Fish Butt
66

arch/mips/Kconfig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1413,7 +1413,7 @@ config CPU_MIPS32_R6
14131413
select CPU_SUPPORTS_MSA
14141414
select GENERIC_CSUM
14151415
select HAVE_KVM
1416-
select MIPS_O32_FP64_SUPPORT if 32BIT
1416+
select MIPS_O32_FP64_SUPPORT
14171417
help
14181418
Choose this option to build a kernel for release 6 or later of the
14191419
MIPS32 architecture. New MIPS processors, starting with the Warrior
@@ -1464,7 +1464,7 @@ config CPU_MIPS64_R6
14641464
select CPU_SUPPORTS_HIGHMEM
14651465
select CPU_SUPPORTS_MSA
14661466
select GENERIC_CSUM
1467-
select MIPS_O32_FP64_SUPPORT if MIPS32_O32
1467+
select MIPS_O32_FP64_SUPPORT if 32BIT || MIPS32_O32
14681468
help
14691469
Choose this option to build a kernel for release 6 or later of the
14701470
MIPS64 architecture. New MIPS processors, starting with the Warrior

arch/mips/lantiq/irq.c

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -269,11 +269,6 @@ static void ltq_hw5_irqdispatch(void)
269269
DEFINE_HWx_IRQDISPATCH(5)
270270
#endif
271271

272-
static void ltq_hw_irq_handler(struct irq_desc *desc)
273-
{
274-
ltq_hw_irqdispatch(irq_desc_get_irq(desc) - 2);
275-
}
276-
277272
#ifdef CONFIG_MIPS_MT_SMP
278273
void __init arch_init_ipiirq(int irq, struct irqaction *action)
279274
{
@@ -318,19 +313,23 @@ static struct irqaction irq_call = {
318313
asmlinkage void plat_irq_dispatch(void)
319314
{
320315
unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM;
321-
int irq;
322-
323-
if (!pending) {
324-
spurious_interrupt();
325-
return;
316+
unsigned int i;
317+
318+
if ((MIPS_CPU_TIMER_IRQ == 7) && (pending & CAUSEF_IP7)) {
319+
do_IRQ(MIPS_CPU_TIMER_IRQ);
320+
goto out;
321+
} else {
322+
for (i = 0; i < MAX_IM; i++) {
323+
if (pending & (CAUSEF_IP2 << i)) {
324+
ltq_hw_irqdispatch(i);
325+
goto out;
326+
}
327+
}
326328
}
329+
pr_alert("Spurious IRQ: CAUSE=0x%08x\n", read_c0_status());
327330

328-
pending >>= CAUSEB_IP;
329-
while (pending) {
330-
irq = fls(pending) - 1;
331-
do_IRQ(MIPS_CPU_IRQ_BASE + irq);
332-
pending &= ~BIT(irq);
333-
}
331+
out:
332+
return;
334333
}
335334

336335
static int icu_map(struct irq_domain *d, unsigned int irq, irq_hw_number_t hw)
@@ -355,6 +354,11 @@ static const struct irq_domain_ops irq_domain_ops = {
355354
.map = icu_map,
356355
};
357356

357+
static struct irqaction cascade = {
358+
.handler = no_action,
359+
.name = "cascade",
360+
};
361+
358362
int __init icu_of_init(struct device_node *node, struct device_node *parent)
359363
{
360364
struct device_node *eiu_node;
@@ -386,7 +390,7 @@ int __init icu_of_init(struct device_node *node, struct device_node *parent)
386390
mips_cpu_irq_init();
387391

388392
for (i = 0; i < MAX_IM; i++)
389-
irq_set_chained_handler(i + 2, ltq_hw_irq_handler);
393+
setup_irq(i + 2, &cascade);
390394

391395
if (cpu_has_vint) {
392396
pr_info("Setting up vectored interrupts\n");

arch/powerpc/kernel/setup_64.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,15 @@ static void cpu_ready_for_interrupts(void)
220220
unsigned long lpcr = mfspr(SPRN_LPCR);
221221
mtspr(SPRN_LPCR, lpcr | LPCR_AIL_3);
222222
}
223+
224+
/*
225+
* Fixup HFSCR:TM based on CPU features. The bit is set by our
226+
* early asm init because at that point we haven't updated our
227+
* CPU features from firmware and device-tree. Here we have,
228+
* so let's do it.
229+
*/
230+
if (cpu_has_feature(CPU_FTR_HVMODE) && !cpu_has_feature(CPU_FTR_TM_COMP))
231+
mtspr(SPRN_HFSCR, mfspr(SPRN_HFSCR) & ~HFSCR_TM);
223232
}
224233

225234
/*

arch/x86/entry/vdso/vdso32-setup.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@ static int __init vdso32_setup(char *s)
3131
{
3232
vdso32_enabled = simple_strtoul(s, NULL, 0);
3333

34-
if (vdso32_enabled > 1)
34+
if (vdso32_enabled > 1) {
3535
pr_warn("vdso32 values other than 0 and 1 are no longer allowed; vdso disabled\n");
36+
vdso32_enabled = 0;
37+
}
3638

3739
return 1;
3840
}
@@ -63,13 +65,18 @@ subsys_initcall(sysenter_setup);
6365
/* Register vsyscall32 into the ABI table */
6466
#include <linux/sysctl.h>
6567

68+
static const int zero;
69+
static const int one = 1;
70+
6671
static struct ctl_table abi_table2[] = {
6772
{
6873
.procname = "vsyscall32",
6974
.data = &vdso32_enabled,
7075
.maxlen = sizeof(int),
7176
.mode = 0644,
72-
.proc_handler = proc_dointvec
77+
.proc_handler = proc_dointvec_minmax,
78+
.extra1 = (int *)&zero,
79+
.extra2 = (int *)&one,
7380
},
7481
{}
7582
};

arch/x86/include/asm/elf.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ struct task_struct;
278278

279279
#define ARCH_DLINFO_IA32 \
280280
do { \
281-
if (vdso32_enabled) { \
281+
if (VDSO_CURRENT_BASE) { \
282282
NEW_AUX_ENT(AT_SYSINFO, VDSO_ENTRY); \
283283
NEW_AUX_ENT(AT_SYSINFO_EHDR, VDSO_CURRENT_BASE); \
284284
} \

arch/x86/kernel/cpu/perf_event_intel_lbr.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,9 @@ static void intel_pmu_lbr_read_32(struct cpu_hw_events *cpuc)
410410
cpuc->lbr_entries[i].to = msr_lastbranch.to;
411411
cpuc->lbr_entries[i].mispred = 0;
412412
cpuc->lbr_entries[i].predicted = 0;
413+
cpuc->lbr_entries[i].in_tx = 0;
414+
cpuc->lbr_entries[i].abort = 0;
415+
cpuc->lbr_entries[i].cycles = 0;
413416
cpuc->lbr_entries[i].reserved = 0;
414417
}
415418
cpuc->lbr_stack.nr = i;

arch/x86/kvm/vmx.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6678,14 +6678,20 @@ static int nested_vmx_check_vmptr(struct kvm_vcpu *vcpu, int exit_reason,
66786678
}
66796679

66806680
page = nested_get_page(vcpu, vmptr);
6681-
if (page == NULL ||
6682-
*(u32 *)kmap(page) != VMCS12_REVISION) {
6681+
if (page == NULL) {
66836682
nested_vmx_failInvalid(vcpu);
6683+
skip_emulated_instruction(vcpu);
6684+
return 1;
6685+
}
6686+
if (*(u32 *)kmap(page) != VMCS12_REVISION) {
66846687
kunmap(page);
6688+
nested_release_page_clean(page);
6689+
nested_vmx_failInvalid(vcpu);
66856690
skip_emulated_instruction(vcpu);
66866691
return 1;
66876692
}
66886693
kunmap(page);
6694+
nested_release_page_clean(page);
66896695
vmx->nested.vmxon_ptr = vmptr;
66906696
break;
66916697
case EXIT_REASON_VMCLEAR:

arch/x86/mm/init.c

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -628,21 +628,40 @@ void __init init_mem_mapping(void)
628628
* devmem_is_allowed() checks to see if /dev/mem access to a certain address
629629
* is valid. The argument is a physical page number.
630630
*
631-
*
632-
* On x86, access has to be given to the first megabyte of ram because that area
633-
* contains BIOS code and data regions used by X and dosemu and similar apps.
634-
* Access has to be given to non-kernel-ram areas as well, these contain the PCI
635-
* mmio resources as well as potential bios/acpi data regions.
631+
* On x86, access has to be given to the first megabyte of RAM because that
632+
* area traditionally contains BIOS code and data regions used by X, dosemu,
633+
* and similar apps. Since they map the entire memory range, the whole range
634+
* must be allowed (for mapping), but any areas that would otherwise be
635+
* disallowed are flagged as being "zero filled" instead of rejected.
636+
* Access has to be given to non-kernel-ram areas as well, these contain the
637+
* PCI mmio resources as well as potential bios/acpi data regions.
636638
*/
637639
int devmem_is_allowed(unsigned long pagenr)
638640
{
639-
if (pagenr < 256)
640-
return 1;
641-
if (iomem_is_exclusive(pagenr << PAGE_SHIFT))
641+
if (page_is_ram(pagenr)) {
642+
/*
643+
* For disallowed memory regions in the low 1MB range,
644+
* request that the page be shown as all zeros.
645+
*/
646+
if (pagenr < 256)
647+
return 2;
648+
649+
return 0;
650+
}
651+
652+
/*
653+
* This must follow RAM test, since System RAM is considered a
654+
* restricted resource under CONFIG_STRICT_IOMEM.
655+
*/
656+
if (iomem_is_exclusive(pagenr << PAGE_SHIFT)) {
657+
/* Low 1MB bypasses iomem restrictions. */
658+
if (pagenr < 256)
659+
return 1;
660+
642661
return 0;
643-
if (!page_is_ram(pagenr))
644-
return 1;
645-
return 0;
662+
}
663+
664+
return 1;
646665
}
647666

648667
void free_init_pages(char *what, unsigned long begin, unsigned long end)

0 commit comments

Comments
 (0)