mirror of
https://github.com/Fishwaldo/build.git
synced 2025-03-27 01:02:19 +00:00
1216 lines
39 KiB
Diff
1216 lines
39 KiB
Diff
diff --git a/Makefile b/Makefile
|
|
index 7f54ac081cf3..d9cc21df444d 100644
|
|
--- a/Makefile
|
|
+++ b/Makefile
|
|
@@ -1,6 +1,6 @@
|
|
VERSION = 4
|
|
PATCHLEVEL = 4
|
|
-SUBLEVEL = 54
|
|
+SUBLEVEL = 55
|
|
EXTRAVERSION =
|
|
NAME = Blurry Fish Butt
|
|
|
|
diff --git a/arch/mips/configs/ip22_defconfig b/arch/mips/configs/ip22_defconfig
|
|
index 57ed466e00db..2f140d75d01c 100644
|
|
--- a/arch/mips/configs/ip22_defconfig
|
|
+++ b/arch/mips/configs/ip22_defconfig
|
|
@@ -68,8 +68,8 @@ CONFIG_NETFILTER_NETLINK_QUEUE=m
|
|
CONFIG_NF_CONNTRACK=m
|
|
CONFIG_NF_CONNTRACK_SECMARK=y
|
|
CONFIG_NF_CONNTRACK_EVENTS=y
|
|
-CONFIG_NF_CT_PROTO_DCCP=m
|
|
-CONFIG_NF_CT_PROTO_UDPLITE=m
|
|
+CONFIG_NF_CT_PROTO_DCCP=y
|
|
+CONFIG_NF_CT_PROTO_UDPLITE=y
|
|
CONFIG_NF_CONNTRACK_AMANDA=m
|
|
CONFIG_NF_CONNTRACK_FTP=m
|
|
CONFIG_NF_CONNTRACK_H323=m
|
|
diff --git a/arch/mips/configs/ip27_defconfig b/arch/mips/configs/ip27_defconfig
|
|
index 48e16d98b2cc..b15508447366 100644
|
|
--- a/arch/mips/configs/ip27_defconfig
|
|
+++ b/arch/mips/configs/ip27_defconfig
|
|
@@ -134,7 +134,7 @@ CONFIG_LIBFC=m
|
|
CONFIG_SCSI_QLOGIC_1280=y
|
|
CONFIG_SCSI_PMCRAID=m
|
|
CONFIG_SCSI_BFA_FC=m
|
|
-CONFIG_SCSI_DH=m
|
|
+CONFIG_SCSI_DH=y
|
|
CONFIG_SCSI_DH_RDAC=m
|
|
CONFIG_SCSI_DH_HP_SW=m
|
|
CONFIG_SCSI_DH_EMC=m
|
|
@@ -206,7 +206,6 @@ CONFIG_MLX4_EN=m
|
|
# CONFIG_MLX4_DEBUG is not set
|
|
CONFIG_TEHUTI=m
|
|
CONFIG_BNX2X=m
|
|
-CONFIG_QLGE=m
|
|
CONFIG_SFC=m
|
|
CONFIG_BE2NET=m
|
|
CONFIG_LIBERTAS_THINFIRM=m
|
|
diff --git a/arch/mips/configs/lemote2f_defconfig b/arch/mips/configs/lemote2f_defconfig
|
|
index 004cf52d1b7d..c24b87819ccb 100644
|
|
--- a/arch/mips/configs/lemote2f_defconfig
|
|
+++ b/arch/mips/configs/lemote2f_defconfig
|
|
@@ -39,7 +39,7 @@ CONFIG_HIBERNATION=y
|
|
CONFIG_PM_STD_PARTITION="/dev/hda3"
|
|
CONFIG_CPU_FREQ=y
|
|
CONFIG_CPU_FREQ_DEBUG=y
|
|
-CONFIG_CPU_FREQ_STAT=m
|
|
+CONFIG_CPU_FREQ_STAT=y
|
|
CONFIG_CPU_FREQ_STAT_DETAILS=y
|
|
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
|
|
CONFIG_CPU_FREQ_GOV_POWERSAVE=m
|
|
diff --git a/arch/mips/configs/malta_defconfig b/arch/mips/configs/malta_defconfig
|
|
index 5afb4840aec7..739ccd0dca64 100644
|
|
--- a/arch/mips/configs/malta_defconfig
|
|
+++ b/arch/mips/configs/malta_defconfig
|
|
@@ -59,8 +59,8 @@ CONFIG_NETFILTER=y
|
|
CONFIG_NF_CONNTRACK=m
|
|
CONFIG_NF_CONNTRACK_SECMARK=y
|
|
CONFIG_NF_CONNTRACK_EVENTS=y
|
|
-CONFIG_NF_CT_PROTO_DCCP=m
|
|
-CONFIG_NF_CT_PROTO_UDPLITE=m
|
|
+CONFIG_NF_CT_PROTO_DCCP=y
|
|
+CONFIG_NF_CT_PROTO_UDPLITE=y
|
|
CONFIG_NF_CONNTRACK_AMANDA=m
|
|
CONFIG_NF_CONNTRACK_FTP=m
|
|
CONFIG_NF_CONNTRACK_H323=m
|
|
diff --git a/arch/mips/configs/malta_kvm_defconfig b/arch/mips/configs/malta_kvm_defconfig
|
|
index 98f13879bb8f..47f4ecf125ba 100644
|
|
--- a/arch/mips/configs/malta_kvm_defconfig
|
|
+++ b/arch/mips/configs/malta_kvm_defconfig
|
|
@@ -60,8 +60,8 @@ CONFIG_NETFILTER=y
|
|
CONFIG_NF_CONNTRACK=m
|
|
CONFIG_NF_CONNTRACK_SECMARK=y
|
|
CONFIG_NF_CONNTRACK_EVENTS=y
|
|
-CONFIG_NF_CT_PROTO_DCCP=m
|
|
-CONFIG_NF_CT_PROTO_UDPLITE=m
|
|
+CONFIG_NF_CT_PROTO_DCCP=y
|
|
+CONFIG_NF_CT_PROTO_UDPLITE=y
|
|
CONFIG_NF_CONNTRACK_AMANDA=m
|
|
CONFIG_NF_CONNTRACK_FTP=m
|
|
CONFIG_NF_CONNTRACK_H323=m
|
|
diff --git a/arch/mips/configs/malta_kvm_guest_defconfig b/arch/mips/configs/malta_kvm_guest_defconfig
|
|
index 3b5d5913f548..e79d325aa085 100644
|
|
--- a/arch/mips/configs/malta_kvm_guest_defconfig
|
|
+++ b/arch/mips/configs/malta_kvm_guest_defconfig
|
|
@@ -59,8 +59,8 @@ CONFIG_NETFILTER=y
|
|
CONFIG_NF_CONNTRACK=m
|
|
CONFIG_NF_CONNTRACK_SECMARK=y
|
|
CONFIG_NF_CONNTRACK_EVENTS=y
|
|
-CONFIG_NF_CT_PROTO_DCCP=m
|
|
-CONFIG_NF_CT_PROTO_UDPLITE=m
|
|
+CONFIG_NF_CT_PROTO_DCCP=y
|
|
+CONFIG_NF_CT_PROTO_UDPLITE=y
|
|
CONFIG_NF_CONNTRACK_AMANDA=m
|
|
CONFIG_NF_CONNTRACK_FTP=m
|
|
CONFIG_NF_CONNTRACK_H323=m
|
|
diff --git a/arch/mips/configs/maltaup_xpa_defconfig b/arch/mips/configs/maltaup_xpa_defconfig
|
|
index 732215732751..ae87ad86243b 100644
|
|
--- a/arch/mips/configs/maltaup_xpa_defconfig
|
|
+++ b/arch/mips/configs/maltaup_xpa_defconfig
|
|
@@ -61,8 +61,8 @@ CONFIG_NETFILTER=y
|
|
CONFIG_NF_CONNTRACK=m
|
|
CONFIG_NF_CONNTRACK_SECMARK=y
|
|
CONFIG_NF_CONNTRACK_EVENTS=y
|
|
-CONFIG_NF_CT_PROTO_DCCP=m
|
|
-CONFIG_NF_CT_PROTO_UDPLITE=m
|
|
+CONFIG_NF_CT_PROTO_DCCP=y
|
|
+CONFIG_NF_CT_PROTO_UDPLITE=y
|
|
CONFIG_NF_CONNTRACK_AMANDA=m
|
|
CONFIG_NF_CONNTRACK_FTP=m
|
|
CONFIG_NF_CONNTRACK_H323=m
|
|
diff --git a/arch/mips/configs/nlm_xlp_defconfig b/arch/mips/configs/nlm_xlp_defconfig
|
|
index b3d1d37f85ea..47492fee2952 100644
|
|
--- a/arch/mips/configs/nlm_xlp_defconfig
|
|
+++ b/arch/mips/configs/nlm_xlp_defconfig
|
|
@@ -111,7 +111,7 @@ CONFIG_NETFILTER=y
|
|
CONFIG_NF_CONNTRACK=m
|
|
CONFIG_NF_CONNTRACK_SECMARK=y
|
|
CONFIG_NF_CONNTRACK_EVENTS=y
|
|
-CONFIG_NF_CT_PROTO_UDPLITE=m
|
|
+CONFIG_NF_CT_PROTO_UDPLITE=y
|
|
CONFIG_NF_CONNTRACK_AMANDA=m
|
|
CONFIG_NF_CONNTRACK_FTP=m
|
|
CONFIG_NF_CONNTRACK_H323=m
|
|
diff --git a/arch/mips/configs/nlm_xlr_defconfig b/arch/mips/configs/nlm_xlr_defconfig
|
|
index 3d8016d6cf3e..472a818f1eb8 100644
|
|
--- a/arch/mips/configs/nlm_xlr_defconfig
|
|
+++ b/arch/mips/configs/nlm_xlr_defconfig
|
|
@@ -91,7 +91,7 @@ CONFIG_NETFILTER=y
|
|
CONFIG_NF_CONNTRACK=m
|
|
CONFIG_NF_CONNTRACK_SECMARK=y
|
|
CONFIG_NF_CONNTRACK_EVENTS=y
|
|
-CONFIG_NF_CT_PROTO_UDPLITE=m
|
|
+CONFIG_NF_CT_PROTO_UDPLITE=y
|
|
CONFIG_NF_CONNTRACK_AMANDA=m
|
|
CONFIG_NF_CONNTRACK_FTP=m
|
|
CONFIG_NF_CONNTRACK_H323=m
|
|
diff --git a/arch/mips/dec/int-handler.S b/arch/mips/dec/int-handler.S
|
|
index 8c6f508e59de..554d1da97743 100644
|
|
--- a/arch/mips/dec/int-handler.S
|
|
+++ b/arch/mips/dec/int-handler.S
|
|
@@ -146,7 +146,25 @@
|
|
/*
|
|
* Find irq with highest priority
|
|
*/
|
|
- PTR_LA t1,cpu_mask_nr_tbl
|
|
+ # open coded PTR_LA t1, cpu_mask_nr_tbl
|
|
+#if (_MIPS_SZPTR == 32)
|
|
+ # open coded la t1, cpu_mask_nr_tbl
|
|
+ lui t1, %hi(cpu_mask_nr_tbl)
|
|
+ addiu t1, %lo(cpu_mask_nr_tbl)
|
|
+
|
|
+#endif
|
|
+#if (_MIPS_SZPTR == 64)
|
|
+ # open coded dla t1, cpu_mask_nr_tbl
|
|
+ .set push
|
|
+ .set noat
|
|
+ lui t1, %highest(cpu_mask_nr_tbl)
|
|
+ lui AT, %hi(cpu_mask_nr_tbl)
|
|
+ daddiu t1, t1, %higher(cpu_mask_nr_tbl)
|
|
+ daddiu AT, AT, %lo(cpu_mask_nr_tbl)
|
|
+ dsll t1, 32
|
|
+ daddu t1, t1, AT
|
|
+ .set pop
|
|
+#endif
|
|
1: lw t2,(t1)
|
|
nop
|
|
and t2,t0
|
|
@@ -195,7 +213,25 @@
|
|
/*
|
|
* Find irq with highest priority
|
|
*/
|
|
- PTR_LA t1,asic_mask_nr_tbl
|
|
+ # open coded PTR_LA t1,asic_mask_nr_tbl
|
|
+#if (_MIPS_SZPTR == 32)
|
|
+ # open coded la t1, asic_mask_nr_tbl
|
|
+ lui t1, %hi(asic_mask_nr_tbl)
|
|
+ addiu t1, %lo(asic_mask_nr_tbl)
|
|
+
|
|
+#endif
|
|
+#if (_MIPS_SZPTR == 64)
|
|
+ # open coded dla t1, asic_mask_nr_tbl
|
|
+ .set push
|
|
+ .set noat
|
|
+ lui t1, %highest(asic_mask_nr_tbl)
|
|
+ lui AT, %hi(asic_mask_nr_tbl)
|
|
+ daddiu t1, t1, %higher(asic_mask_nr_tbl)
|
|
+ daddiu AT, AT, %lo(asic_mask_nr_tbl)
|
|
+ dsll t1, 32
|
|
+ daddu t1, t1, AT
|
|
+ .set pop
|
|
+#endif
|
|
2: lw t2,(t1)
|
|
nop
|
|
and t2,t0
|
|
diff --git a/arch/mips/netlogic/common/reset.S b/arch/mips/netlogic/common/reset.S
|
|
index edbab9b8691f..c474981a6c0d 100644
|
|
--- a/arch/mips/netlogic/common/reset.S
|
|
+++ b/arch/mips/netlogic/common/reset.S
|
|
@@ -50,7 +50,6 @@
|
|
#include <asm/netlogic/xlp-hal/sys.h>
|
|
#include <asm/netlogic/xlp-hal/cpucontrol.h>
|
|
|
|
-#define CP0_EBASE $15
|
|
#define SYS_CPU_COHERENT_BASE CKSEG1ADDR(XLP_DEFAULT_IO_BASE) + \
|
|
XLP_IO_SYS_OFFSET(0) + XLP_IO_PCI_HDRSZ + \
|
|
SYS_CPU_NONCOHERENT_MODE * 4
|
|
@@ -92,7 +91,7 @@
|
|
* registers. On XLPII CPUs, usual cache instructions work.
|
|
*/
|
|
.macro xlp_flush_l1_dcache
|
|
- mfc0 t0, CP0_EBASE, 0
|
|
+ mfc0 t0, CP0_PRID
|
|
andi t0, t0, PRID_IMP_MASK
|
|
slt t1, t0, 0x1200
|
|
beqz t1, 15f
|
|
@@ -171,7 +170,7 @@ FEXPORT(nlm_reset_entry)
|
|
nop
|
|
|
|
1: /* Entry point on core wakeup */
|
|
- mfc0 t0, CP0_EBASE, 0 /* processor ID */
|
|
+ mfc0 t0, CP0_PRID /* processor ID */
|
|
andi t0, PRID_IMP_MASK
|
|
li t1, 0x1500 /* XLP 9xx */
|
|
beq t0, t1, 2f /* does not need to set coherent */
|
|
@@ -182,8 +181,8 @@ FEXPORT(nlm_reset_entry)
|
|
nop
|
|
|
|
/* set bit in SYS coherent register for the core */
|
|
- mfc0 t0, CP0_EBASE, 1
|
|
- mfc0 t1, CP0_EBASE, 1
|
|
+ mfc0 t0, CP0_EBASE
|
|
+ mfc0 t1, CP0_EBASE
|
|
srl t1, 5
|
|
andi t1, 0x3 /* t1 <- node */
|
|
li t2, 0x40000
|
|
@@ -232,7 +231,7 @@ EXPORT(nlm_boot_siblings)
|
|
|
|
* NOTE: All GPR contents are lost after the mtcr above!
|
|
*/
|
|
- mfc0 v0, CP0_EBASE, 1
|
|
+ mfc0 v0, CP0_EBASE
|
|
andi v0, 0x3ff /* v0 <- node/core */
|
|
|
|
/*
|
|
diff --git a/arch/mips/netlogic/common/smpboot.S b/arch/mips/netlogic/common/smpboot.S
|
|
index 805355b0bd05..f0cc4c9de2bb 100644
|
|
--- a/arch/mips/netlogic/common/smpboot.S
|
|
+++ b/arch/mips/netlogic/common/smpboot.S
|
|
@@ -48,8 +48,6 @@
|
|
#include <asm/netlogic/xlp-hal/sys.h>
|
|
#include <asm/netlogic/xlp-hal/cpucontrol.h>
|
|
|
|
-#define CP0_EBASE $15
|
|
-
|
|
.set noreorder
|
|
.set noat
|
|
.set arch=xlr /* for mfcr/mtcr, XLR is sufficient */
|
|
@@ -86,7 +84,7 @@ NESTED(nlm_boot_secondary_cpus, 16, sp)
|
|
PTR_L gp, 0(t1)
|
|
|
|
/* a0 has the processor id */
|
|
- mfc0 a0, CP0_EBASE, 1
|
|
+ mfc0 a0, CP0_EBASE
|
|
andi a0, 0x3ff /* a0 <- node/core */
|
|
PTR_LA t0, nlm_early_init_secondary
|
|
jalr t0
|
|
diff --git a/arch/mips/ralink/prom.c b/arch/mips/ralink/prom.c
|
|
index 39a9142f71be..7ecb4af79b7b 100644
|
|
--- a/arch/mips/ralink/prom.c
|
|
+++ b/arch/mips/ralink/prom.c
|
|
@@ -30,8 +30,10 @@ const char *get_system_type(void)
|
|
return soc_info.sys_type;
|
|
}
|
|
|
|
-static __init void prom_init_cmdline(int argc, char **argv)
|
|
+static __init void prom_init_cmdline(void)
|
|
{
|
|
+ int argc;
|
|
+ char **argv;
|
|
int i;
|
|
|
|
pr_debug("prom: fw_arg0=%08x fw_arg1=%08x fw_arg2=%08x fw_arg3=%08x\n",
|
|
@@ -60,14 +62,11 @@ static __init void prom_init_cmdline(int argc, char **argv)
|
|
|
|
void __init prom_init(void)
|
|
{
|
|
- int argc;
|
|
- char **argv;
|
|
-
|
|
prom_soc_init(&soc_info);
|
|
|
|
pr_info("SoC Type: %s\n", get_system_type());
|
|
|
|
- prom_init_cmdline(argc, argv);
|
|
+ prom_init_cmdline();
|
|
}
|
|
|
|
void __init prom_free_prom_memory(void)
|
|
diff --git a/arch/mips/ralink/rt288x.c b/arch/mips/ralink/rt288x.c
|
|
index 844f5cd55c8f..15506a1ff22a 100644
|
|
--- a/arch/mips/ralink/rt288x.c
|
|
+++ b/arch/mips/ralink/rt288x.c
|
|
@@ -40,16 +40,6 @@ static struct rt2880_pmx_group rt2880_pinmux_data_act[] = {
|
|
{ 0 }
|
|
};
|
|
|
|
-static void rt288x_wdt_reset(void)
|
|
-{
|
|
- u32 t;
|
|
-
|
|
- /* enable WDT reset output on pin SRAM_CS_N */
|
|
- t = rt_sysc_r32(SYSC_REG_CLKCFG);
|
|
- t |= CLKCFG_SRAM_CS_N_WDT;
|
|
- rt_sysc_w32(t, SYSC_REG_CLKCFG);
|
|
-}
|
|
-
|
|
void __init ralink_clk_init(void)
|
|
{
|
|
unsigned long cpu_rate, wmac_rate = 40000000;
|
|
diff --git a/arch/mips/ralink/rt305x.c b/arch/mips/ralink/rt305x.c
|
|
index 9e4572592065..15b32cd01906 100644
|
|
--- a/arch/mips/ralink/rt305x.c
|
|
+++ b/arch/mips/ralink/rt305x.c
|
|
@@ -89,17 +89,6 @@ static struct rt2880_pmx_group rt5350_pinmux_data[] = {
|
|
{ 0 }
|
|
};
|
|
|
|
-static void rt305x_wdt_reset(void)
|
|
-{
|
|
- u32 t;
|
|
-
|
|
- /* enable WDT reset output on pin SRAM_CS_N */
|
|
- t = rt_sysc_r32(SYSC_REG_SYSTEM_CONFIG);
|
|
- t |= RT305X_SYSCFG_SRAM_CS0_MODE_WDT <<
|
|
- RT305X_SYSCFG_SRAM_CS0_MODE_SHIFT;
|
|
- rt_sysc_w32(t, SYSC_REG_SYSTEM_CONFIG);
|
|
-}
|
|
-
|
|
static unsigned long rt5350_get_mem_size(void)
|
|
{
|
|
void __iomem *sysc = (void __iomem *) KSEG1ADDR(RT305X_SYSC_BASE);
|
|
diff --git a/arch/mips/ralink/rt3883.c b/arch/mips/ralink/rt3883.c
|
|
index 582995aaaf4e..f42834c7f007 100644
|
|
--- a/arch/mips/ralink/rt3883.c
|
|
+++ b/arch/mips/ralink/rt3883.c
|
|
@@ -63,16 +63,6 @@ static struct rt2880_pmx_group rt3883_pinmux_data[] = {
|
|
{ 0 }
|
|
};
|
|
|
|
-static void rt3883_wdt_reset(void)
|
|
-{
|
|
- u32 t;
|
|
-
|
|
- /* enable WDT reset output on GPIO 2 */
|
|
- t = rt_sysc_r32(RT3883_SYSC_REG_SYSCFG1);
|
|
- t |= RT3883_SYSCFG1_GPIO2_AS_WDT_OUT;
|
|
- rt_sysc_w32(t, RT3883_SYSC_REG_SYSCFG1);
|
|
-}
|
|
-
|
|
void __init ralink_clk_init(void)
|
|
{
|
|
unsigned long cpu_rate, sys_rate;
|
|
diff --git a/arch/mips/sgi-ip22/Platform b/arch/mips/sgi-ip22/Platform
|
|
index b7a4b7e04c38..e8f6b3a42a48 100644
|
|
--- a/arch/mips/sgi-ip22/Platform
|
|
+++ b/arch/mips/sgi-ip22/Platform
|
|
@@ -25,7 +25,7 @@ endif
|
|
# Simplified: what IP22 does at 128MB+ in ksegN, IP28 does at 512MB+ in xkphys
|
|
#
|
|
ifdef CONFIG_SGI_IP28
|
|
- ifeq ($(call cc-option-yn,-mr10k-cache-barrier=store), n)
|
|
+ ifeq ($(call cc-option-yn,-march=r10000 -mr10k-cache-barrier=store), n)
|
|
$(error gcc doesn't support needed option -mr10k-cache-barrier=store)
|
|
endif
|
|
endif
|
|
diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c
|
|
index dc885b30f7a6..4014881e9843 100644
|
|
--- a/arch/powerpc/lib/sstep.c
|
|
+++ b/arch/powerpc/lib/sstep.c
|
|
@@ -1806,8 +1806,6 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr)
|
|
goto instr_done;
|
|
|
|
case LARX:
|
|
- if (regs->msr & MSR_LE)
|
|
- return 0;
|
|
if (op.ea & (size - 1))
|
|
break; /* can't handle misaligned */
|
|
err = -EFAULT;
|
|
@@ -1829,8 +1827,6 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr)
|
|
goto ldst_done;
|
|
|
|
case STCX:
|
|
- if (regs->msr & MSR_LE)
|
|
- return 0;
|
|
if (op.ea & (size - 1))
|
|
break; /* can't handle misaligned */
|
|
err = -EFAULT;
|
|
@@ -1854,8 +1850,6 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr)
|
|
goto ldst_done;
|
|
|
|
case LOAD:
|
|
- if (regs->msr & MSR_LE)
|
|
- return 0;
|
|
err = read_mem(®s->gpr[op.reg], op.ea, size, regs);
|
|
if (!err) {
|
|
if (op.type & SIGNEXT)
|
|
@@ -1867,8 +1861,6 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr)
|
|
|
|
#ifdef CONFIG_PPC_FPU
|
|
case LOAD_FP:
|
|
- if (regs->msr & MSR_LE)
|
|
- return 0;
|
|
if (size == 4)
|
|
err = do_fp_load(op.reg, do_lfs, op.ea, size, regs);
|
|
else
|
|
@@ -1877,15 +1869,11 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr)
|
|
#endif
|
|
#ifdef CONFIG_ALTIVEC
|
|
case LOAD_VMX:
|
|
- if (regs->msr & MSR_LE)
|
|
- return 0;
|
|
err = do_vec_load(op.reg, do_lvx, op.ea & ~0xfUL, regs);
|
|
goto ldst_done;
|
|
#endif
|
|
#ifdef CONFIG_VSX
|
|
case LOAD_VSX:
|
|
- if (regs->msr & MSR_LE)
|
|
- return 0;
|
|
err = do_vsx_load(op.reg, do_lxvd2x, op.ea, regs);
|
|
goto ldst_done;
|
|
#endif
|
|
@@ -1908,8 +1896,6 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr)
|
|
goto instr_done;
|
|
|
|
case STORE:
|
|
- if (regs->msr & MSR_LE)
|
|
- return 0;
|
|
if ((op.type & UPDATE) && size == sizeof(long) &&
|
|
op.reg == 1 && op.update_reg == 1 &&
|
|
!(regs->msr & MSR_PR) &&
|
|
@@ -1922,8 +1908,6 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr)
|
|
|
|
#ifdef CONFIG_PPC_FPU
|
|
case STORE_FP:
|
|
- if (regs->msr & MSR_LE)
|
|
- return 0;
|
|
if (size == 4)
|
|
err = do_fp_store(op.reg, do_stfs, op.ea, size, regs);
|
|
else
|
|
@@ -1932,15 +1916,11 @@ int __kprobes emulate_step(struct pt_regs *regs, unsigned int instr)
|
|
#endif
|
|
#ifdef CONFIG_ALTIVEC
|
|
case STORE_VMX:
|
|
- if (regs->msr & MSR_LE)
|
|
- return 0;
|
|
err = do_vec_store(op.reg, do_stvx, op.ea & ~0xfUL, regs);
|
|
goto ldst_done;
|
|
#endif
|
|
#ifdef CONFIG_VSX
|
|
case STORE_VSX:
|
|
- if (regs->msr & MSR_LE)
|
|
- return 0;
|
|
err = do_vsx_store(op.reg, do_stxvd2x, op.ea, regs);
|
|
goto ldst_done;
|
|
#endif
|
|
diff --git a/arch/s390/kernel/crash_dump.c b/arch/s390/kernel/crash_dump.c
|
|
index 171e09bb8ea2..f7c3a61040bd 100644
|
|
--- a/arch/s390/kernel/crash_dump.c
|
|
+++ b/arch/s390/kernel/crash_dump.c
|
|
@@ -23,6 +23,8 @@
|
|
#define PTR_SUB(x, y) (((char *) (x)) - ((unsigned long) (y)))
|
|
#define PTR_DIFF(x, y) ((unsigned long)(((char *) (x)) - ((unsigned long) (y))))
|
|
|
|
+#define LINUX_NOTE_NAME "LINUX"
|
|
+
|
|
static struct memblock_region oldmem_region;
|
|
|
|
static struct memblock_type oldmem_type = {
|
|
@@ -312,7 +314,7 @@ static void *nt_fpregset(void *ptr, struct save_area *sa)
|
|
static void *nt_s390_timer(void *ptr, struct save_area *sa)
|
|
{
|
|
return nt_init(ptr, NT_S390_TIMER, &sa->timer, sizeof(sa->timer),
|
|
- KEXEC_CORE_NOTE_NAME);
|
|
+ LINUX_NOTE_NAME);
|
|
}
|
|
|
|
/*
|
|
@@ -321,7 +323,7 @@ static void *nt_s390_timer(void *ptr, struct save_area *sa)
|
|
static void *nt_s390_tod_cmp(void *ptr, struct save_area *sa)
|
|
{
|
|
return nt_init(ptr, NT_S390_TODCMP, &sa->clk_cmp,
|
|
- sizeof(sa->clk_cmp), KEXEC_CORE_NOTE_NAME);
|
|
+ sizeof(sa->clk_cmp), LINUX_NOTE_NAME);
|
|
}
|
|
|
|
/*
|
|
@@ -330,7 +332,7 @@ static void *nt_s390_tod_cmp(void *ptr, struct save_area *sa)
|
|
static void *nt_s390_tod_preg(void *ptr, struct save_area *sa)
|
|
{
|
|
return nt_init(ptr, NT_S390_TODPREG, &sa->tod_reg,
|
|
- sizeof(sa->tod_reg), KEXEC_CORE_NOTE_NAME);
|
|
+ sizeof(sa->tod_reg), LINUX_NOTE_NAME);
|
|
}
|
|
|
|
/*
|
|
@@ -339,7 +341,7 @@ static void *nt_s390_tod_preg(void *ptr, struct save_area *sa)
|
|
static void *nt_s390_ctrs(void *ptr, struct save_area *sa)
|
|
{
|
|
return nt_init(ptr, NT_S390_CTRS, &sa->ctrl_regs,
|
|
- sizeof(sa->ctrl_regs), KEXEC_CORE_NOTE_NAME);
|
|
+ sizeof(sa->ctrl_regs), LINUX_NOTE_NAME);
|
|
}
|
|
|
|
/*
|
|
@@ -348,7 +350,7 @@ static void *nt_s390_ctrs(void *ptr, struct save_area *sa)
|
|
static void *nt_s390_prefix(void *ptr, struct save_area *sa)
|
|
{
|
|
return nt_init(ptr, NT_S390_PREFIX, &sa->pref_reg,
|
|
- sizeof(sa->pref_reg), KEXEC_CORE_NOTE_NAME);
|
|
+ sizeof(sa->pref_reg), LINUX_NOTE_NAME);
|
|
}
|
|
|
|
/*
|
|
@@ -357,7 +359,7 @@ static void *nt_s390_prefix(void *ptr, struct save_area *sa)
|
|
static void *nt_s390_vx_high(void *ptr, __vector128 *vx_regs)
|
|
{
|
|
return nt_init(ptr, NT_S390_VXRS_HIGH, &vx_regs[16],
|
|
- 16 * sizeof(__vector128), KEXEC_CORE_NOTE_NAME);
|
|
+ 16 * sizeof(__vector128), LINUX_NOTE_NAME);
|
|
}
|
|
|
|
/*
|
|
@@ -370,12 +372,12 @@ static void *nt_s390_vx_low(void *ptr, __vector128 *vx_regs)
|
|
int i;
|
|
|
|
note = (Elf64_Nhdr *)ptr;
|
|
- note->n_namesz = strlen(KEXEC_CORE_NOTE_NAME) + 1;
|
|
+ note->n_namesz = strlen(LINUX_NOTE_NAME) + 1;
|
|
note->n_descsz = 16 * 8;
|
|
note->n_type = NT_S390_VXRS_LOW;
|
|
len = sizeof(Elf64_Nhdr);
|
|
|
|
- memcpy(ptr + len, KEXEC_CORE_NOTE_NAME, note->n_namesz);
|
|
+ memcpy(ptr + len, LINUX_NOTE_NAME, note->n_namesz);
|
|
len = roundup(len + note->n_namesz, 4);
|
|
|
|
ptr += len;
|
|
diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c
|
|
index 8345ae1f117d..05ae254f84cf 100644
|
|
--- a/arch/s390/mm/pgtable.c
|
|
+++ b/arch/s390/mm/pgtable.c
|
|
@@ -1237,11 +1237,28 @@ EXPORT_SYMBOL_GPL(s390_reset_cmma);
|
|
*/
|
|
bool gmap_test_and_clear_dirty(unsigned long address, struct gmap *gmap)
|
|
{
|
|
+ pgd_t *pgd;
|
|
+ pud_t *pud;
|
|
+ pmd_t *pmd;
|
|
pte_t *pte;
|
|
spinlock_t *ptl;
|
|
bool dirty = false;
|
|
|
|
- pte = get_locked_pte(gmap->mm, address, &ptl);
|
|
+ pgd = pgd_offset(gmap->mm, address);
|
|
+ pud = pud_alloc(gmap->mm, pgd, address);
|
|
+ if (!pud)
|
|
+ return false;
|
|
+ pmd = pmd_alloc(gmap->mm, pud, address);
|
|
+ if (!pmd)
|
|
+ return false;
|
|
+ /* We can't run guests backed by huge pages, but userspace can
|
|
+ * still set them up and then try to migrate them without any
|
|
+ * migration support.
|
|
+ */
|
|
+ if (pmd_large(*pmd))
|
|
+ return true;
|
|
+
|
|
+ pte = pte_alloc_map_lock(gmap->mm, pmd, address, &ptl);
|
|
if (unlikely(!pte))
|
|
return false;
|
|
|
|
diff --git a/crypto/Makefile b/crypto/Makefile
|
|
index 82fbff180ad3..03e66097eb0c 100644
|
|
--- a/crypto/Makefile
|
|
+++ b/crypto/Makefile
|
|
@@ -62,6 +62,7 @@ obj-$(CONFIG_CRYPTO_SHA1) += sha1_generic.o
|
|
obj-$(CONFIG_CRYPTO_SHA256) += sha256_generic.o
|
|
obj-$(CONFIG_CRYPTO_SHA512) += sha512_generic.o
|
|
obj-$(CONFIG_CRYPTO_WP512) += wp512.o
|
|
+CFLAGS_wp512.o := $(call cc-option,-fno-schedule-insns) # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79149
|
|
obj-$(CONFIG_CRYPTO_TGR192) += tgr192.o
|
|
obj-$(CONFIG_CRYPTO_GF128MUL) += gf128mul.o
|
|
obj-$(CONFIG_CRYPTO_ECB) += ecb.o
|
|
@@ -85,6 +86,7 @@ obj-$(CONFIG_CRYPTO_BLOWFISH_COMMON) += blowfish_common.o
|
|
obj-$(CONFIG_CRYPTO_TWOFISH) += twofish_generic.o
|
|
obj-$(CONFIG_CRYPTO_TWOFISH_COMMON) += twofish_common.o
|
|
obj-$(CONFIG_CRYPTO_SERPENT) += serpent_generic.o
|
|
+CFLAGS_serpent_generic.o := $(call cc-option,-fsched-pressure) # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79149
|
|
obj-$(CONFIG_CRYPTO_AES) += aes_generic.o
|
|
obj-$(CONFIG_CRYPTO_CAMELLIA) += camellia_generic.o
|
|
obj-$(CONFIG_CRYPTO_CAST_COMMON) += cast_common.o
|
|
diff --git a/drivers/acpi/nfit.c b/drivers/acpi/nfit.c
|
|
index c097f477c74c..14c2a07c9f3f 100644
|
|
--- a/drivers/acpi/nfit.c
|
|
+++ b/drivers/acpi/nfit.c
|
|
@@ -965,7 +965,7 @@ static size_t sizeof_nfit_set_info(int num_mappings)
|
|
+ num_mappings * sizeof(struct nfit_set_info_map);
|
|
}
|
|
|
|
-static int cmp_map(const void *m0, const void *m1)
|
|
+static int cmp_map_compat(const void *m0, const void *m1)
|
|
{
|
|
const struct nfit_set_info_map *map0 = m0;
|
|
const struct nfit_set_info_map *map1 = m1;
|
|
@@ -974,6 +974,14 @@ static int cmp_map(const void *m0, const void *m1)
|
|
sizeof(u64));
|
|
}
|
|
|
|
+static int cmp_map(const void *m0, const void *m1)
|
|
+{
|
|
+ const struct nfit_set_info_map *map0 = m0;
|
|
+ const struct nfit_set_info_map *map1 = m1;
|
|
+
|
|
+ return map0->region_offset - map1->region_offset;
|
|
+}
|
|
+
|
|
/* Retrieve the nth entry referencing this spa */
|
|
static struct acpi_nfit_memory_map *memdev_from_spa(
|
|
struct acpi_nfit_desc *acpi_desc, u16 range_index, int n)
|
|
@@ -1029,6 +1037,12 @@ static int acpi_nfit_init_interleave_set(struct acpi_nfit_desc *acpi_desc,
|
|
sort(&info->mapping[0], nr, sizeof(struct nfit_set_info_map),
|
|
cmp_map, NULL);
|
|
nd_set->cookie = nd_fletcher64(info, sizeof_nfit_set_info(nr), 0);
|
|
+
|
|
+ /* support namespaces created with the wrong sort order */
|
|
+ sort(&info->mapping[0], nr, sizeof(struct nfit_set_info_map),
|
|
+ cmp_map_compat, NULL);
|
|
+ nd_set->altcookie = nd_fletcher64(info, sizeof_nfit_set_info(nr), 0);
|
|
+
|
|
ndr_desc->nd_set = nd_set;
|
|
devm_kfree(dev, info);
|
|
|
|
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
|
|
index 3384a3eef917..397f0454100b 100644
|
|
--- a/drivers/md/dm.c
|
|
+++ b/drivers/md/dm.c
|
|
@@ -1467,11 +1467,62 @@ void dm_accept_partial_bio(struct bio *bio, unsigned n_sectors)
|
|
}
|
|
EXPORT_SYMBOL_GPL(dm_accept_partial_bio);
|
|
|
|
+/*
|
|
+ * Flush current->bio_list when the target map method blocks.
|
|
+ * This fixes deadlocks in snapshot and possibly in other targets.
|
|
+ */
|
|
+struct dm_offload {
|
|
+ struct blk_plug plug;
|
|
+ struct blk_plug_cb cb;
|
|
+};
|
|
+
|
|
+static void flush_current_bio_list(struct blk_plug_cb *cb, bool from_schedule)
|
|
+{
|
|
+ struct dm_offload *o = container_of(cb, struct dm_offload, cb);
|
|
+ struct bio_list list;
|
|
+ struct bio *bio;
|
|
+
|
|
+ INIT_LIST_HEAD(&o->cb.list);
|
|
+
|
|
+ if (unlikely(!current->bio_list))
|
|
+ return;
|
|
+
|
|
+ list = *current->bio_list;
|
|
+ bio_list_init(current->bio_list);
|
|
+
|
|
+ while ((bio = bio_list_pop(&list))) {
|
|
+ struct bio_set *bs = bio->bi_pool;
|
|
+ if (unlikely(!bs) || bs == fs_bio_set) {
|
|
+ bio_list_add(current->bio_list, bio);
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ spin_lock(&bs->rescue_lock);
|
|
+ bio_list_add(&bs->rescue_list, bio);
|
|
+ queue_work(bs->rescue_workqueue, &bs->rescue_work);
|
|
+ spin_unlock(&bs->rescue_lock);
|
|
+ }
|
|
+}
|
|
+
|
|
+static void dm_offload_start(struct dm_offload *o)
|
|
+{
|
|
+ blk_start_plug(&o->plug);
|
|
+ o->cb.callback = flush_current_bio_list;
|
|
+ list_add(&o->cb.list, ¤t->plug->cb_list);
|
|
+}
|
|
+
|
|
+static void dm_offload_end(struct dm_offload *o)
|
|
+{
|
|
+ list_del(&o->cb.list);
|
|
+ blk_finish_plug(&o->plug);
|
|
+}
|
|
+
|
|
static void __map_bio(struct dm_target_io *tio)
|
|
{
|
|
int r;
|
|
sector_t sector;
|
|
struct mapped_device *md;
|
|
+ struct dm_offload o;
|
|
struct bio *clone = &tio->clone;
|
|
struct dm_target *ti = tio->ti;
|
|
|
|
@@ -1484,7 +1535,11 @@ static void __map_bio(struct dm_target_io *tio)
|
|
*/
|
|
atomic_inc(&tio->io->io_count);
|
|
sector = clone->bi_iter.bi_sector;
|
|
+
|
|
+ dm_offload_start(&o);
|
|
r = ti->type->map(ti, clone);
|
|
+ dm_offload_end(&o);
|
|
+
|
|
if (r == DM_MAPIO_REMAPPED) {
|
|
/* the bio has been remapped so dispatch it */
|
|
|
|
diff --git a/drivers/mtd/maps/pmcmsp-flash.c b/drivers/mtd/maps/pmcmsp-flash.c
|
|
index f9fa3fad728e..2051f28ddac6 100644
|
|
--- a/drivers/mtd/maps/pmcmsp-flash.c
|
|
+++ b/drivers/mtd/maps/pmcmsp-flash.c
|
|
@@ -139,15 +139,13 @@ static int __init init_msp_flash(void)
|
|
}
|
|
|
|
msp_maps[i].bankwidth = 1;
|
|
- msp_maps[i].name = kmalloc(7, GFP_KERNEL);
|
|
+ msp_maps[i].name = kstrndup(flash_name, 7, GFP_KERNEL);
|
|
if (!msp_maps[i].name) {
|
|
iounmap(msp_maps[i].virt);
|
|
kfree(msp_parts[i]);
|
|
goto cleanup_loop;
|
|
}
|
|
|
|
- msp_maps[i].name = strncpy(msp_maps[i].name, flash_name, 7);
|
|
-
|
|
for (j = 0; j < pcnt; j++) {
|
|
part_name[5] = '0' + i;
|
|
part_name[7] = '0' + j;
|
|
diff --git a/drivers/net/ethernet/ti/cpmac.c b/drivers/net/ethernet/ti/cpmac.c
|
|
index d52ea3008946..7e8bce46e6b4 100644
|
|
--- a/drivers/net/ethernet/ti/cpmac.c
|
|
+++ b/drivers/net/ethernet/ti/cpmac.c
|
|
@@ -1237,7 +1237,7 @@ int cpmac_init(void)
|
|
goto fail_alloc;
|
|
}
|
|
|
|
-#warning FIXME: unhardcode gpio&reset bits
|
|
+ /* FIXME: unhardcode gpio&reset bits */
|
|
ar7_gpio_disable(26);
|
|
ar7_gpio_disable(27);
|
|
ar7_device_reset(AR7_RESET_BIT_CPMAC_LO);
|
|
diff --git a/drivers/nvdimm/namespace_devs.c b/drivers/nvdimm/namespace_devs.c
|
|
index 62120c38d56b..aae7379af4e4 100644
|
|
--- a/drivers/nvdimm/namespace_devs.c
|
|
+++ b/drivers/nvdimm/namespace_devs.c
|
|
@@ -1534,6 +1534,7 @@ static int select_pmem_id(struct nd_region *nd_region, u8 *pmem_id)
|
|
static int find_pmem_label_set(struct nd_region *nd_region,
|
|
struct nd_namespace_pmem *nspm)
|
|
{
|
|
+ u64 altcookie = nd_region_interleave_set_altcookie(nd_region);
|
|
u64 cookie = nd_region_interleave_set_cookie(nd_region);
|
|
struct nd_namespace_label *nd_label;
|
|
u8 select_id[NSLABEL_UUID_LEN];
|
|
@@ -1542,8 +1543,10 @@ static int find_pmem_label_set(struct nd_region *nd_region,
|
|
int rc = -ENODEV, l;
|
|
u16 i;
|
|
|
|
- if (cookie == 0)
|
|
+ if (cookie == 0) {
|
|
+ dev_dbg(&nd_region->dev, "invalid interleave-set-cookie\n");
|
|
return -ENXIO;
|
|
+ }
|
|
|
|
/*
|
|
* Find a complete set of labels by uuid. By definition we can start
|
|
@@ -1552,13 +1555,24 @@ static int find_pmem_label_set(struct nd_region *nd_region,
|
|
for_each_label(l, nd_label, nd_region->mapping[0].labels) {
|
|
u64 isetcookie = __le64_to_cpu(nd_label->isetcookie);
|
|
|
|
- if (isetcookie != cookie)
|
|
- continue;
|
|
+ if (isetcookie != cookie) {
|
|
+ dev_dbg(&nd_region->dev, "invalid cookie in label: %pUb\n",
|
|
+ nd_label->uuid);
|
|
+ if (isetcookie != altcookie)
|
|
+ continue;
|
|
+
|
|
+ dev_dbg(&nd_region->dev, "valid altcookie in label: %pUb\n",
|
|
+ nd_label->uuid);
|
|
+ }
|
|
+
|
|
+ for (i = 0; nd_region->ndr_mappings; i++) {
|
|
+ if (has_uuid_at_pos(nd_region, nd_label->uuid, cookie, i))
|
|
+ continue;
|
|
+ if (has_uuid_at_pos(nd_region, nd_label->uuid, altcookie, i))
|
|
+ continue;
|
|
+ break;
|
|
+ }
|
|
|
|
- for (i = 0; nd_region->ndr_mappings; i++)
|
|
- if (!has_uuid_at_pos(nd_region, nd_label->uuid,
|
|
- cookie, i))
|
|
- break;
|
|
if (i < nd_region->ndr_mappings) {
|
|
/*
|
|
* Give up if we don't find an instance of a
|
|
diff --git a/drivers/nvdimm/nd.h b/drivers/nvdimm/nd.h
|
|
index 417e521d299c..fc870e55bb66 100644
|
|
--- a/drivers/nvdimm/nd.h
|
|
+++ b/drivers/nvdimm/nd.h
|
|
@@ -245,6 +245,7 @@ struct nd_region *to_nd_region(struct device *dev);
|
|
int nd_region_to_nstype(struct nd_region *nd_region);
|
|
int nd_region_register_namespaces(struct nd_region *nd_region, int *err);
|
|
u64 nd_region_interleave_set_cookie(struct nd_region *nd_region);
|
|
+u64 nd_region_interleave_set_altcookie(struct nd_region *nd_region);
|
|
void nvdimm_bus_lock(struct device *dev);
|
|
void nvdimm_bus_unlock(struct device *dev);
|
|
bool is_nvdimm_bus_locked(struct device *dev);
|
|
diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c
|
|
index 9521696c9385..dc2e919daa39 100644
|
|
--- a/drivers/nvdimm/region_devs.c
|
|
+++ b/drivers/nvdimm/region_devs.c
|
|
@@ -379,6 +379,15 @@ u64 nd_region_interleave_set_cookie(struct nd_region *nd_region)
|
|
return 0;
|
|
}
|
|
|
|
+u64 nd_region_interleave_set_altcookie(struct nd_region *nd_region)
|
|
+{
|
|
+ struct nd_interleave_set *nd_set = nd_region->nd_set;
|
|
+
|
|
+ if (nd_set)
|
|
+ return nd_set->altcookie;
|
|
+ return 0;
|
|
+}
|
|
+
|
|
/*
|
|
* Upon successful probe/remove, take/release a reference on the
|
|
* associated interleave set (if present), and plant new btt + namespace
|
|
diff --git a/drivers/scsi/mvsas/mv_sas.c b/drivers/scsi/mvsas/mv_sas.c
|
|
index 9c780740fb82..e712fe745955 100644
|
|
--- a/drivers/scsi/mvsas/mv_sas.c
|
|
+++ b/drivers/scsi/mvsas/mv_sas.c
|
|
@@ -737,8 +737,8 @@ static int mvs_task_prep(struct sas_task *task, struct mvs_info *mvi, int is_tmf
|
|
mv_dprintk("device %016llx not ready.\n",
|
|
SAS_ADDR(dev->sas_addr));
|
|
|
|
- rc = SAS_PHY_DOWN;
|
|
- return rc;
|
|
+ rc = SAS_PHY_DOWN;
|
|
+ return rc;
|
|
}
|
|
tei.port = dev->port->lldd_port;
|
|
if (tei.port && !tei.port->port_attached && !tmf) {
|
|
diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
|
|
index 237ef5573c18..6deb06147202 100644
|
|
--- a/drivers/tty/serial/samsung.c
|
|
+++ b/drivers/tty/serial/samsung.c
|
|
@@ -1030,8 +1030,10 @@ static int s3c64xx_serial_startup(struct uart_port *port)
|
|
if (ourport->dma) {
|
|
ret = s3c24xx_serial_request_dma(ourport);
|
|
if (ret < 0) {
|
|
- dev_warn(port->dev, "DMA request failed\n");
|
|
- return ret;
|
|
+ dev_warn(port->dev,
|
|
+ "DMA request failed, DMA will not be used\n");
|
|
+ devm_kfree(port->dev, ourport->dma);
|
|
+ ourport->dma = NULL;
|
|
}
|
|
}
|
|
|
|
diff --git a/drivers/usb/dwc3/gadget.h b/drivers/usb/dwc3/gadget.h
|
|
index 18ae3eaa8b6f..ccd9694f8e36 100644
|
|
--- a/drivers/usb/dwc3/gadget.h
|
|
+++ b/drivers/usb/dwc3/gadget.h
|
|
@@ -28,23 +28,23 @@ struct dwc3;
|
|
#define gadget_to_dwc(g) (container_of(g, struct dwc3, gadget))
|
|
|
|
/* DEPCFG parameter 1 */
|
|
-#define DWC3_DEPCFG_INT_NUM(n) ((n) << 0)
|
|
+#define DWC3_DEPCFG_INT_NUM(n) (((n) & 0x1f) << 0)
|
|
#define DWC3_DEPCFG_XFER_COMPLETE_EN (1 << 8)
|
|
#define DWC3_DEPCFG_XFER_IN_PROGRESS_EN (1 << 9)
|
|
#define DWC3_DEPCFG_XFER_NOT_READY_EN (1 << 10)
|
|
#define DWC3_DEPCFG_FIFO_ERROR_EN (1 << 11)
|
|
#define DWC3_DEPCFG_STREAM_EVENT_EN (1 << 13)
|
|
-#define DWC3_DEPCFG_BINTERVAL_M1(n) ((n) << 16)
|
|
+#define DWC3_DEPCFG_BINTERVAL_M1(n) (((n) & 0xff) << 16)
|
|
#define DWC3_DEPCFG_STREAM_CAPABLE (1 << 24)
|
|
-#define DWC3_DEPCFG_EP_NUMBER(n) ((n) << 25)
|
|
+#define DWC3_DEPCFG_EP_NUMBER(n) (((n) & 0x1f) << 25)
|
|
#define DWC3_DEPCFG_BULK_BASED (1 << 30)
|
|
#define DWC3_DEPCFG_FIFO_BASED (1 << 31)
|
|
|
|
/* DEPCFG parameter 0 */
|
|
-#define DWC3_DEPCFG_EP_TYPE(n) ((n) << 1)
|
|
-#define DWC3_DEPCFG_MAX_PACKET_SIZE(n) ((n) << 3)
|
|
-#define DWC3_DEPCFG_FIFO_NUMBER(n) ((n) << 17)
|
|
-#define DWC3_DEPCFG_BURST_SIZE(n) ((n) << 22)
|
|
+#define DWC3_DEPCFG_EP_TYPE(n) (((n) & 0x3) << 1)
|
|
+#define DWC3_DEPCFG_MAX_PACKET_SIZE(n) (((n) & 0x7ff) << 3)
|
|
+#define DWC3_DEPCFG_FIFO_NUMBER(n) (((n) & 0x1f) << 17)
|
|
+#define DWC3_DEPCFG_BURST_SIZE(n) (((n) & 0xf) << 22)
|
|
#define DWC3_DEPCFG_DATA_SEQ_NUM(n) ((n) << 26)
|
|
/* This applies for core versions earlier than 1.94a */
|
|
#define DWC3_DEPCFG_IGN_SEQ_NUM (1 << 31)
|
|
diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
|
|
index cfda1a1c0ab6..9ad5145d3103 100644
|
|
--- a/drivers/usb/gadget/function/f_fs.c
|
|
+++ b/drivers/usb/gadget/function/f_fs.c
|
|
@@ -1643,11 +1643,14 @@ static int ffs_func_eps_enable(struct ffs_function *func)
|
|
spin_lock_irqsave(&func->ffs->eps_lock, flags);
|
|
do {
|
|
struct usb_endpoint_descriptor *ds;
|
|
+ struct usb_ss_ep_comp_descriptor *comp_desc = NULL;
|
|
+ int needs_comp_desc = false;
|
|
int desc_idx;
|
|
|
|
- if (ffs->gadget->speed == USB_SPEED_SUPER)
|
|
+ if (ffs->gadget->speed == USB_SPEED_SUPER) {
|
|
desc_idx = 2;
|
|
- else if (ffs->gadget->speed == USB_SPEED_HIGH)
|
|
+ needs_comp_desc = true;
|
|
+ } else if (ffs->gadget->speed == USB_SPEED_HIGH)
|
|
desc_idx = 1;
|
|
else
|
|
desc_idx = 0;
|
|
@@ -1664,6 +1667,14 @@ static int ffs_func_eps_enable(struct ffs_function *func)
|
|
|
|
ep->ep->driver_data = ep;
|
|
ep->ep->desc = ds;
|
|
+
|
|
+ comp_desc = (struct usb_ss_ep_comp_descriptor *)(ds +
|
|
+ USB_DT_ENDPOINT_SIZE);
|
|
+ ep->ep->maxburst = comp_desc->bMaxBurst + 1;
|
|
+
|
|
+ if (needs_comp_desc)
|
|
+ ep->ep->comp_desc = comp_desc;
|
|
+
|
|
ret = usb_ep_enable(ep->ep);
|
|
if (likely(!ret)) {
|
|
epfile->ep = ep;
|
|
diff --git a/drivers/usb/gadget/udc/dummy_hcd.c b/drivers/usb/gadget/udc/dummy_hcd.c
|
|
index 22d067cd5aa3..6610f7a023d3 100644
|
|
--- a/drivers/usb/gadget/udc/dummy_hcd.c
|
|
+++ b/drivers/usb/gadget/udc/dummy_hcd.c
|
|
@@ -1033,6 +1033,8 @@ static int dummy_udc_probe(struct platform_device *pdev)
|
|
int rc;
|
|
|
|
dum = *((void **)dev_get_platdata(&pdev->dev));
|
|
+ /* Clear usb_gadget region for new registration to udc-core */
|
|
+ memzero_explicit(&dum->gadget, sizeof(struct usb_gadget));
|
|
dum->gadget.name = gadget_name;
|
|
dum->gadget.ops = &dummy_ops;
|
|
dum->gadget.max_speed = USB_SPEED_SUPER;
|
|
diff --git a/drivers/usb/host/xhci-dbg.c b/drivers/usb/host/xhci-dbg.c
|
|
index 74c42f722678..3425154baf8b 100644
|
|
--- a/drivers/usb/host/xhci-dbg.c
|
|
+++ b/drivers/usb/host/xhci-dbg.c
|
|
@@ -111,7 +111,7 @@ static void xhci_print_cap_regs(struct xhci_hcd *xhci)
|
|
xhci_dbg(xhci, "RTSOFF 0x%x:\n", temp & RTSOFF_MASK);
|
|
|
|
/* xhci 1.1 controllers have the HCCPARAMS2 register */
|
|
- if (hci_version > 100) {
|
|
+ if (hci_version > 0x100) {
|
|
temp = readl(&xhci->cap_regs->hcc_params2);
|
|
xhci_dbg(xhci, "HCC PARAMS2 0x%x:\n", (unsigned int) temp);
|
|
xhci_dbg(xhci, " HC %s Force save context capability",
|
|
diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
|
|
index 19cb32a65161..268829db9e88 100644
|
|
--- a/drivers/usb/host/xhci-plat.c
|
|
+++ b/drivers/usb/host/xhci-plat.c
|
|
@@ -213,6 +213,8 @@ static int xhci_plat_remove(struct platform_device *dev)
|
|
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
|
|
struct clk *clk = xhci->clk;
|
|
|
|
+ xhci->xhc_state |= XHCI_STATE_REMOVING;
|
|
+
|
|
usb_remove_hcd(xhci->shared_hcd);
|
|
usb_phy_shutdown(hcd->usb_phy);
|
|
|
|
diff --git a/drivers/usb/misc/iowarrior.c b/drivers/usb/misc/iowarrior.c
|
|
index 1950e87b4219..775690bed4c0 100644
|
|
--- a/drivers/usb/misc/iowarrior.c
|
|
+++ b/drivers/usb/misc/iowarrior.c
|
|
@@ -787,12 +787,6 @@ static int iowarrior_probe(struct usb_interface *interface,
|
|
iface_desc = interface->cur_altsetting;
|
|
dev->product_id = le16_to_cpu(udev->descriptor.idProduct);
|
|
|
|
- if (iface_desc->desc.bNumEndpoints < 1) {
|
|
- dev_err(&interface->dev, "Invalid number of endpoints\n");
|
|
- retval = -EINVAL;
|
|
- goto error;
|
|
- }
|
|
-
|
|
/* set up the endpoint information */
|
|
for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
|
|
endpoint = &iface_desc->endpoint[i].desc;
|
|
@@ -803,6 +797,21 @@ static int iowarrior_probe(struct usb_interface *interface,
|
|
/* this one will match for the IOWarrior56 only */
|
|
dev->int_out_endpoint = endpoint;
|
|
}
|
|
+
|
|
+ if (!dev->int_in_endpoint) {
|
|
+ dev_err(&interface->dev, "no interrupt-in endpoint found\n");
|
|
+ retval = -ENODEV;
|
|
+ goto error;
|
|
+ }
|
|
+
|
|
+ if (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56) {
|
|
+ if (!dev->int_out_endpoint) {
|
|
+ dev_err(&interface->dev, "no interrupt-out endpoint found\n");
|
|
+ retval = -ENODEV;
|
|
+ goto error;
|
|
+ }
|
|
+ }
|
|
+
|
|
/* we have to check the report_size often, so remember it in the endianness suitable for our machine */
|
|
dev->report_size = usb_endpoint_maxp(dev->int_in_endpoint);
|
|
if ((dev->interface->cur_altsetting->desc.bInterfaceNumber == 0) &&
|
|
diff --git a/drivers/usb/serial/digi_acceleport.c b/drivers/usb/serial/digi_acceleport.c
|
|
index 3df7b7ec178e..e0b1fe2f60e1 100644
|
|
--- a/drivers/usb/serial/digi_acceleport.c
|
|
+++ b/drivers/usb/serial/digi_acceleport.c
|
|
@@ -1483,16 +1483,20 @@ static int digi_read_oob_callback(struct urb *urb)
|
|
struct usb_serial *serial = port->serial;
|
|
struct tty_struct *tty;
|
|
struct digi_port *priv = usb_get_serial_port_data(port);
|
|
+ unsigned char *buf = urb->transfer_buffer;
|
|
int opcode, line, status, val;
|
|
int i;
|
|
unsigned int rts;
|
|
|
|
+ if (urb->actual_length < 4)
|
|
+ return -1;
|
|
+
|
|
/* handle each oob command */
|
|
- for (i = 0; i < urb->actual_length - 3;) {
|
|
- opcode = ((unsigned char *)urb->transfer_buffer)[i++];
|
|
- line = ((unsigned char *)urb->transfer_buffer)[i++];
|
|
- status = ((unsigned char *)urb->transfer_buffer)[i++];
|
|
- val = ((unsigned char *)urb->transfer_buffer)[i++];
|
|
+ for (i = 0; i < urb->actual_length - 3; i += 4) {
|
|
+ opcode = buf[i];
|
|
+ line = buf[i + 1];
|
|
+ status = buf[i + 2];
|
|
+ val = buf[i + 3];
|
|
|
|
dev_dbg(&port->dev, "digi_read_oob_callback: opcode=%d, line=%d, status=%d, val=%d\n",
|
|
opcode, line, status, val);
|
|
diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c
|
|
index c02808a30436..f1a8fdcd8674 100644
|
|
--- a/drivers/usb/serial/io_ti.c
|
|
+++ b/drivers/usb/serial/io_ti.c
|
|
@@ -1674,6 +1674,12 @@ static void edge_interrupt_callback(struct urb *urb)
|
|
function = TIUMP_GET_FUNC_FROM_CODE(data[0]);
|
|
dev_dbg(dev, "%s - port_number %d, function %d, info 0x%x\n", __func__,
|
|
port_number, function, data[1]);
|
|
+
|
|
+ if (port_number >= edge_serial->serial->num_ports) {
|
|
+ dev_err(dev, "bad port number %d\n", port_number);
|
|
+ goto exit;
|
|
+ }
|
|
+
|
|
port = edge_serial->serial->port[port_number];
|
|
edge_port = usb_get_serial_port_data(port);
|
|
if (!edge_port) {
|
|
@@ -1755,7 +1761,7 @@ static void edge_bulk_in_callback(struct urb *urb)
|
|
|
|
port_number = edge_port->port->port_number;
|
|
|
|
- if (edge_port->lsr_event) {
|
|
+ if (urb->actual_length > 0 && edge_port->lsr_event) {
|
|
edge_port->lsr_event = 0;
|
|
dev_dbg(dev, "%s ===== Port %u LSR Status = %02x, Data = %02x ======\n",
|
|
__func__, port_number, edge_port->lsr_mask, *data);
|
|
diff --git a/drivers/usb/serial/omninet.c b/drivers/usb/serial/omninet.c
|
|
index a180b17d2432..76564b3bebb9 100644
|
|
--- a/drivers/usb/serial/omninet.c
|
|
+++ b/drivers/usb/serial/omninet.c
|
|
@@ -142,12 +142,6 @@ static int omninet_port_remove(struct usb_serial_port *port)
|
|
|
|
static int omninet_open(struct tty_struct *tty, struct usb_serial_port *port)
|
|
{
|
|
- struct usb_serial *serial = port->serial;
|
|
- struct usb_serial_port *wport;
|
|
-
|
|
- wport = serial->port[1];
|
|
- tty_port_tty_set(&wport->port, tty);
|
|
-
|
|
return usb_serial_generic_open(tty, port);
|
|
}
|
|
|
|
diff --git a/drivers/usb/serial/safe_serial.c b/drivers/usb/serial/safe_serial.c
|
|
index b2dff0f14743..236ea43f7815 100644
|
|
--- a/drivers/usb/serial/safe_serial.c
|
|
+++ b/drivers/usb/serial/safe_serial.c
|
|
@@ -205,6 +205,11 @@ static void safe_process_read_urb(struct urb *urb)
|
|
if (!safe)
|
|
goto out;
|
|
|
|
+ if (length < 2) {
|
|
+ dev_err(&port->dev, "malformed packet\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
fcs = fcs_compute10(data, length, CRC10_INITFCS);
|
|
if (fcs) {
|
|
dev_err(&port->dev, "%s - bad CRC %x\n", __func__, fcs);
|
|
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
|
|
index e0f862146793..7dcc97eadb12 100644
|
|
--- a/fs/ext4/inode.c
|
|
+++ b/fs/ext4/inode.c
|
|
@@ -3573,6 +3573,10 @@ static int ext4_block_truncate_page(handle_t *handle,
|
|
unsigned blocksize;
|
|
struct inode *inode = mapping->host;
|
|
|
|
+ /* If we are processing an encrypted inode during orphan list handling */
|
|
+ if (ext4_encrypted_inode(inode) && !ext4_has_encryption_key(inode))
|
|
+ return 0;
|
|
+
|
|
blocksize = inode->i_sb->s_blocksize;
|
|
length = blocksize - (offset & (blocksize - 1));
|
|
|
|
diff --git a/include/linux/libnvdimm.h b/include/linux/libnvdimm.h
|
|
index 3f021dc5da8c..30201b9be7bc 100644
|
|
--- a/include/linux/libnvdimm.h
|
|
+++ b/include/linux/libnvdimm.h
|
|
@@ -83,6 +83,8 @@ struct nd_cmd_desc {
|
|
|
|
struct nd_interleave_set {
|
|
u64 cookie;
|
|
+ /* compatibility with initial buggy Linux implementation */
|
|
+ u64 altcookie;
|
|
};
|
|
|
|
struct nd_region_desc {
|
|
diff --git a/include/trace/events/syscalls.h b/include/trace/events/syscalls.h
|
|
index 14e49c798135..b35533b94277 100644
|
|
--- a/include/trace/events/syscalls.h
|
|
+++ b/include/trace/events/syscalls.h
|
|
@@ -1,5 +1,6 @@
|
|
#undef TRACE_SYSTEM
|
|
#define TRACE_SYSTEM raw_syscalls
|
|
+#undef TRACE_INCLUDE_FILE
|
|
#define TRACE_INCLUDE_FILE syscalls
|
|
|
|
#if !defined(_TRACE_EVENTS_SYSCALLS_H) || defined(TRACE_HEADER_MULTI_READ)
|
|
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
|
|
index 43eefe9d834c..e25b93a4267d 100644
|
|
--- a/mm/memcontrol.c
|
|
+++ b/mm/memcontrol.c
|
|
@@ -4150,24 +4150,6 @@ static void mem_cgroup_id_get_many(struct mem_cgroup *memcg, unsigned int n)
|
|
atomic_add(n, &memcg->id.ref);
|
|
}
|
|
|
|
-static struct mem_cgroup *mem_cgroup_id_get_online(struct mem_cgroup *memcg)
|
|
-{
|
|
- while (!atomic_inc_not_zero(&memcg->id.ref)) {
|
|
- /*
|
|
- * The root cgroup cannot be destroyed, so it's refcount must
|
|
- * always be >= 1.
|
|
- */
|
|
- if (WARN_ON_ONCE(memcg == root_mem_cgroup)) {
|
|
- VM_BUG_ON(1);
|
|
- break;
|
|
- }
|
|
- memcg = parent_mem_cgroup(memcg);
|
|
- if (!memcg)
|
|
- memcg = root_mem_cgroup;
|
|
- }
|
|
- return memcg;
|
|
-}
|
|
-
|
|
static void mem_cgroup_id_put_many(struct mem_cgroup *memcg, unsigned int n)
|
|
{
|
|
if (atomic_sub_and_test(n, &memcg->id.ref)) {
|
|
@@ -5751,6 +5733,24 @@ static int __init mem_cgroup_init(void)
|
|
subsys_initcall(mem_cgroup_init);
|
|
|
|
#ifdef CONFIG_MEMCG_SWAP
|
|
+static struct mem_cgroup *mem_cgroup_id_get_online(struct mem_cgroup *memcg)
|
|
+{
|
|
+ while (!atomic_inc_not_zero(&memcg->id.ref)) {
|
|
+ /*
|
|
+ * The root cgroup cannot be destroyed, so it's refcount must
|
|
+ * always be >= 1.
|
|
+ */
|
|
+ if (WARN_ON_ONCE(memcg == root_mem_cgroup)) {
|
|
+ VM_BUG_ON(1);
|
|
+ break;
|
|
+ }
|
|
+ memcg = parent_mem_cgroup(memcg);
|
|
+ if (!memcg)
|
|
+ memcg = root_mem_cgroup;
|
|
+ }
|
|
+ return memcg;
|
|
+}
|
|
+
|
|
/**
|
|
* mem_cgroup_swapout - transfer a memsw charge to swap
|
|
* @page: page whose memsw charge to transfer
|