mirror of
https://github.com/Fishwaldo/build.git
synced 2025-06-05 22:01:35 +00:00
Adjust kernel configs, add upstream patches, bump mvebu64 dev to 5.9.y (#2440)
This commit is contained in:
parent
63114d1fc8
commit
9a73552d6a
32 changed files with 13736 additions and 1013 deletions
|
@ -1,6 +1,6 @@
|
|||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm 5.9.12 Kernel Configuration
|
||||
# Linux/arm 5.9.14 Kernel Configuration
|
||||
#
|
||||
CONFIG_CC_VERSION_TEXT="arm-linux-gnueabihf-gcc (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36)) 8.3.0"
|
||||
CONFIG_CC_IS_GCC=y
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm 5.9.12 Kernel Configuration
|
||||
# Linux/arm 5.9.14 Kernel Configuration
|
||||
#
|
||||
CONFIG_CC_VERSION_TEXT="arm-linux-gnueabihf-gcc (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36)) 8.3.0"
|
||||
CONFIG_CC_IS_GCC=y
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm 5.9.12 Kernel Configuration
|
||||
# Linux/arm 5.9.14 Kernel Configuration
|
||||
#
|
||||
CONFIG_CC_VERSION_TEXT="arm-linux-gnueabihf-gcc (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36)) 8.3.0"
|
||||
CONFIG_CC_IS_GCC=y
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm 4.19.161 Kernel Configuration
|
||||
# Linux/arm 4.19.163 Kernel Configuration
|
||||
#
|
||||
|
||||
#
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,6 +1,6 @@
|
|||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm 5.4.81 Kernel Configuration
|
||||
# Linux/arm 5.4.83 Kernel Configuration
|
||||
#
|
||||
|
||||
#
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm 5.9.6 Kernel Configuration
|
||||
# Linux/arm 5.9.14 Kernel Configuration
|
||||
#
|
||||
CONFIG_CC_VERSION_TEXT="arm-none-linux-gnueabihf-gcc (GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10)) 9.2.1 20191025"
|
||||
CONFIG_CC_VERSION_TEXT="arm-linux-gnueabihf-gcc (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36)) 8.3.0"
|
||||
CONFIG_CC_IS_GCC=y
|
||||
CONFIG_GCC_VERSION=90201
|
||||
CONFIG_LD_VERSION=233010000
|
||||
CONFIG_GCC_VERSION=80300
|
||||
CONFIG_LD_VERSION=232000000
|
||||
CONFIG_CLANG_VERSION=0
|
||||
CONFIG_CC_CAN_LINK=y
|
||||
CONFIG_CC_CAN_LINK_STATIC=y
|
||||
|
@ -1971,11 +1971,12 @@ CONFIG_DM_SWITCH=m
|
|||
CONFIG_DM_LOG_WRITES=m
|
||||
CONFIG_DM_INTEGRITY=m
|
||||
CONFIG_DM_ZONED=m
|
||||
# CONFIG_TCM_IBLOCK is not set
|
||||
# CONFIG_TCM_FILEIO is not set
|
||||
# CONFIG_TCM_PSCSI is not set
|
||||
CONFIG_TARGET_CORE=m
|
||||
CONFIG_TCM_IBLOCK=m
|
||||
CONFIG_TCM_FILEIO=m
|
||||
CONFIG_TCM_PSCSI=m
|
||||
# CONFIG_LOOPBACK_TARGET is not set
|
||||
# CONFIG_ISCSI_TARGET is not set
|
||||
CONFIG_ISCSI_TARGET=m
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_NET_CORE=y
|
||||
|
@ -7115,12 +7116,3 @@ CONFIG_TEST_FREE_PAGES=m
|
|||
# CONFIG_MEMTEST is not set
|
||||
# end of Kernel Testing and Coverage
|
||||
# end of Kernel hacking
|
||||
|
||||
## LinuxIO - iSCSI Target modules
|
||||
CONFIG_TARGET_CORE=m
|
||||
CONFIG_ISCSI_TARGET=m
|
||||
CONFIG_TCM_IBLOCK=m
|
||||
CONFIG_TCM_FILEIO=m
|
||||
CONFIG_TCM_PSCSI=m
|
||||
CONFIG_TCM_USER2=m
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm 4.14.210 Kernel Configuration
|
||||
# Linux/arm 4.14.212 Kernel Configuration
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_ARM_HAS_SG_CHAIN=y
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm64 4.4.243 Kernel Configuration
|
||||
# Linux/arm64 4.4.247 Kernel Configuration
|
||||
#
|
||||
CONFIG_ARM64=y
|
||||
CONFIG_64BIT=y
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm 5.9.12 Kernel Configuration
|
||||
# Linux/arm 5.9.14 Kernel Configuration
|
||||
#
|
||||
CONFIG_CC_VERSION_TEXT="arm-linux-gnueabihf-gcc (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36)) 8.3.0"
|
||||
CONFIG_CC_IS_GCC=y
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm 5.10.0-rc4 Kernel Configuration
|
||||
# Linux/arm 5.10.0-rc7 Kernel Configuration
|
||||
#
|
||||
CONFIG_CC_VERSION_TEXT="arm-none-linux-gnueabihf-gcc (GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10)) 9.2.1 20191025"
|
||||
CONFIG_CC_VERSION_TEXT="arm-linux-gnueabihf-gcc (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36)) 8.3.0"
|
||||
CONFIG_CC_IS_GCC=y
|
||||
CONFIG_GCC_VERSION=90201
|
||||
CONFIG_LD_VERSION=233010000
|
||||
CONFIG_GCC_VERSION=80300
|
||||
CONFIG_LD_VERSION=232000000
|
||||
CONFIG_CLANG_VERSION=0
|
||||
CONFIG_LLD_VERSION=0
|
||||
CONFIG_CC_CAN_LINK=y
|
||||
CONFIG_CC_CAN_LINK_STATIC=y
|
||||
CONFIG_CC_HAS_ASM_GOTO=y
|
||||
|
@ -179,6 +180,7 @@ CONFIG_RD_ZSTD=y
|
|||
# CONFIG_BOOT_CONFIG is not set
|
||||
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_LD_ORPHAN_WARN=y
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_HAVE_UID16=y
|
||||
CONFIG_BPF=y
|
||||
|
@ -676,6 +678,7 @@ CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
|
|||
CONFIG_STRICT_MODULE_RWX=y
|
||||
CONFIG_ARCH_HAS_PHYS_TO_DMA=y
|
||||
# CONFIG_LOCK_EVENT_COUNTS is not set
|
||||
CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y
|
||||
|
||||
#
|
||||
# GCOV-based kernel profiling
|
||||
|
@ -824,7 +827,6 @@ CONFIG_ZPOOL=y
|
|||
CONFIG_ZBUD=y
|
||||
CONFIG_Z3FOLD=y
|
||||
CONFIG_ZSMALLOC=y
|
||||
# CONFIG_ZSMALLOC_PGTABLE_MAPPING is not set
|
||||
# CONFIG_ZSMALLOC_STAT is not set
|
||||
CONFIG_GENERIC_EARLY_IOREMAP=y
|
||||
CONFIG_IDLE_PAGE_TRACKING=y
|
||||
|
@ -3161,6 +3163,8 @@ CONFIG_PINCTRL_SUN50I_A100_R=y
|
|||
CONFIG_PINCTRL_SUN50I_H5=y
|
||||
CONFIG_PINCTRL_SUN50I_H6=y
|
||||
CONFIG_PINCTRL_SUN50I_H6_R=y
|
||||
# CONFIG_PINCTRL_SUN50I_H616 is not set
|
||||
# CONFIG_PINCTRL_SUN50I_H616_R is not set
|
||||
CONFIG_PINCTRL_MADERA=m
|
||||
CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y
|
||||
CONFIG_GPIOLIB=y
|
||||
|
@ -6023,7 +6027,6 @@ CONFIG_HMS_ANYBUSS_BUS=m
|
|||
CONFIG_ARCX_ANYBUS_CONTROLLER=m
|
||||
CONFIG_HMS_PROFINET=m
|
||||
CONFIG_WFX=m
|
||||
CONFIG_RTL8723CS_NEW=m
|
||||
# CONFIG_GOLDFISH is not set
|
||||
# CONFIG_CHROME_PLATFORMS is not set
|
||||
# CONFIG_MELLANOX_PLATFORM is not set
|
||||
|
@ -7075,6 +7078,7 @@ CONFIG_NFS_FSCACHE=y
|
|||
CONFIG_NFS_USE_KERNEL_DNS=y
|
||||
CONFIG_NFS_DEBUG=y
|
||||
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
|
||||
# CONFIG_NFS_V4_2_READ_PLUS is not set
|
||||
CONFIG_NFSD=m
|
||||
CONFIG_NFSD_V2_ACL=y
|
||||
CONFIG_NFSD_V3=y
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm64 5.9.12 Kernel Configuration
|
||||
# Linux/arm64 5.9.14 Kernel Configuration
|
||||
#
|
||||
CONFIG_CC_VERSION_TEXT="aarch64-linux-gnu-gcc (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36)) 8.3.0"
|
||||
CONFIG_CC_IS_GCC=y
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm64 5.10.0-rc6 Kernel Configuration
|
||||
# Linux/arm64 5.10.0-rc7 Kernel Configuration
|
||||
#
|
||||
CONFIG_CC_VERSION_TEXT="aarch64-linux-gnu-gcc (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36)) 8.3.0"
|
||||
CONFIG_CC_IS_GCC=y
|
||||
CONFIG_GCC_VERSION=80300
|
||||
CONFIG_LD_VERSION=232000000
|
||||
CONFIG_CLANG_VERSION=0
|
||||
CONFIG_LLD_VERSION=0
|
||||
CONFIG_CC_CAN_LINK=y
|
||||
CONFIG_CC_CAN_LINK_STATIC=y
|
||||
CONFIG_CC_HAS_ASM_GOTO=y
|
||||
|
@ -178,6 +179,7 @@ CONFIG_RD_ZSTD=y
|
|||
# CONFIG_BOOT_CONFIG is not set
|
||||
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_LD_ORPHAN_WARN=y
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_HAVE_UID16=y
|
||||
CONFIG_SYSCTL_EXCEPTION_TRACE=y
|
||||
|
@ -662,6 +664,7 @@ CONFIG_HAVE_ARCH_COMPILER_H=y
|
|||
CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y
|
||||
# CONFIG_LOCK_EVENT_COUNTS is not set
|
||||
CONFIG_ARCH_HAS_RELR=y
|
||||
CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y
|
||||
|
||||
#
|
||||
# GCOV-based kernel profiling
|
||||
|
@ -869,7 +872,6 @@ CONFIG_ZPOOL=y
|
|||
CONFIG_ZBUD=y
|
||||
CONFIG_Z3FOLD=y
|
||||
CONFIG_ZSMALLOC=y
|
||||
# CONFIG_ZSMALLOC_PGTABLE_MAPPING is not set
|
||||
# CONFIG_ZSMALLOC_STAT is not set
|
||||
CONFIG_GENERIC_EARLY_IOREMAP=y
|
||||
# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set
|
||||
|
@ -6826,6 +6828,7 @@ CONFIG_NFS_FSCACHE=y
|
|||
CONFIG_NFS_USE_KERNEL_DNS=y
|
||||
CONFIG_NFS_DEBUG=y
|
||||
CONFIG_NFS_DISABLE_UDP_SUPPORT=y
|
||||
# CONFIG_NFS_V4_2_READ_PLUS is not set
|
||||
CONFIG_NFSD=y
|
||||
CONFIG_NFSD_V2_ACL=y
|
||||
CONFIG_NFSD_V3=y
|
||||
|
@ -7597,4 +7600,4 @@ CONFIG_TEST_STACKINIT=m
|
|||
# CONFIG_TEST_FREE_PAGES is not set
|
||||
# CONFIG_MEMTEST is not set
|
||||
# end of Kernel Testing and Coverage
|
||||
# end of Kernel hacking
|
||||
# end of Kernel hacking
|
||||
|
|
|
@ -41,7 +41,7 @@ case $BRANCH in
|
|||
;;
|
||||
|
||||
dev)
|
||||
KERNELBRANCH='branch:linux-5.7.y'
|
||||
KERNELBRANCH='branch:linux-5.9.y'
|
||||
;;
|
||||
|
||||
esac
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
diff --git linux-4.18.7/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
|
||||
index f028277fb..e4886c95c 100644
|
||||
--- linux-4.18.7/drivers/mtd/spi-nor/spi-nor.c
|
||||
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||
@@ -1085,6 +1085,7 @@ static const struct flash_info spi_nor_ids[] = {
|
||||
{ "mx25u2033e", INFO(0xc22532, 0, 64 * 1024, 4, SECT_4K) },
|
||||
{ "mx25u4035", INFO(0xc22533, 0, 64 * 1024, 8, SECT_4K) },
|
||||
{ "mx25u8035", INFO(0xc22534, 0, 64 * 1024, 16, SECT_4K) },
|
||||
+ { "mx25u3235f", INFO(0xc22536, 0, 64 * 1024, 64, SECT_4K) },
|
||||
{ "mx25u6435f", INFO(0xc22537, 0, 64 * 1024, 128, SECT_4K) },
|
||||
{ "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) },
|
||||
{ "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) },
|
|
@ -1,33 +0,0 @@
|
|||
From d71549275ca1e2bee8e7914501526b625e9f8a53 Mon Sep 17 00:00:00 2001
|
||||
From: Marc Zyngier <Marc.Zyngier@arm.com>
|
||||
Date: Sat, 1 Jul 2017 15:16:37 +0100
|
||||
Subject: [PATCH 04/11] ARM64: dts: marvell: armada37xx: Enable USB2 on
|
||||
espressobin
|
||||
|
||||
The Espressobin SBC has a USB2 interface available on J8. Let's
|
||||
enable it.
|
||||
|
||||
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
|
||||
---
|
||||
arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts b/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts
|
||||
index e3a136ed77b0..b1af3f988b29 100644
|
||||
--- a/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts
|
||||
+++ b/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts
|
||||
@@ -81,6 +81,11 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+/* J8 */
|
||||
+&usb2 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&mdio {
|
||||
switch0: switch0@1 {
|
||||
compatible = "marvell,mv88e6085";
|
||||
--
|
||||
2.13.3
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
diff --git a/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts b/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts
|
||||
index 2ce52ba..a759fd1 100644
|
||||
--- a/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts
|
||||
+++ b/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts
|
||||
@@ -96,6 +96,15 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&sdhci0 {
|
||||
+ non-removable;
|
||||
+ bus-width = <8>;
|
||||
+ mmc-ddr-1_8v;
|
||||
+ mmc-hs400-1_8v;
|
||||
+ marvell,pad-type = "fixed-1-8v";
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
/* Exported on the micro USB connector J5 through an FTDI */
|
||||
&uart0 {
|
||||
status = "okay";
|
|
@ -1,17 +0,0 @@
|
|||
diff --git a/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts b/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts
|
||||
index b3cf091a..ab2d8e2e 100644
|
||||
--- a/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts
|
||||
+++ b/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts
|
||||
@@ -86,6 +86,12 @@
|
||||
label = "ubootenv";
|
||||
reg = <0x180000 0x10000>;
|
||||
};
|
||||
+
|
||||
+ partition@190000 {
|
||||
+ label = "Linux";
|
||||
+ reg = <0x190000 0xDF0000>;
|
||||
+ };
|
||||
+
|
||||
};
|
||||
};
|
||||
};
|
|
@ -1,70 +0,0 @@
|
|||
From d9d95e78cff80c3fe43e757ba90644cd766302ac Mon Sep 17 00:00:00 2001
|
||||
From: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||
Date: Fri, 13 Jul 2018 15:44:45 +0200
|
||||
Subject: clk: mvebu: armada-37xx-periph: save the IP base address in the
|
||||
driver data
|
||||
|
||||
Prepare the introduction of suspend/resume hooks by having an easy way
|
||||
to access all the registers in one go just from a device: add the IP
|
||||
base address in the driver data.
|
||||
|
||||
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
|
||||
---
|
||||
drivers/clk/mvebu/armada-37xx-periph.c | 15 +++++++--------
|
||||
1 file changed, 7 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/clk/mvebu/armada-37xx-periph.c b/drivers/clk/mvebu/armada-37xx-periph.c
|
||||
index 499f5962c8b0..78048c2e3774 100644
|
||||
--- a/drivers/clk/mvebu/armada-37xx-periph.c
|
||||
+++ b/drivers/clk/mvebu/armada-37xx-periph.c
|
||||
@@ -56,6 +56,7 @@
|
||||
struct clk_periph_driver_data {
|
||||
struct clk_hw_onecell_data *hw_data;
|
||||
spinlock_t lock;
|
||||
+ void __iomem *reg;
|
||||
};
|
||||
|
||||
struct clk_double_div {
|
||||
@@ -680,7 +681,6 @@ static int armada_3700_periph_clock_probe(struct platform_device *pdev)
|
||||
struct device *dev = &pdev->dev;
|
||||
int num_periph = 0, i, ret;
|
||||
struct resource *res;
|
||||
- void __iomem *reg;
|
||||
|
||||
data = of_device_get_match_data(dev);
|
||||
if (!data)
|
||||
@@ -689,11 +689,6 @@ static int armada_3700_periph_clock_probe(struct platform_device *pdev)
|
||||
while (data[num_periph].name)
|
||||
num_periph++;
|
||||
|
||||
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
- reg = devm_ioremap_resource(dev, res);
|
||||
- if (IS_ERR(reg))
|
||||
- return PTR_ERR(reg);
|
||||
-
|
||||
driver_data = devm_kzalloc(dev, sizeof(*driver_data), GFP_KERNEL);
|
||||
if (!driver_data)
|
||||
return -ENOMEM;
|
||||
@@ -706,12 +701,16 @@ static int armada_3700_periph_clock_probe(struct platform_device *pdev)
|
||||
return -ENOMEM;
|
||||
driver_data->hw_data->num = num_periph;
|
||||
|
||||
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
+ driver_data->reg = devm_ioremap_resource(dev, res);
|
||||
+ if (IS_ERR(driver_data->reg))
|
||||
+ return PTR_ERR(driver_data->reg);
|
||||
+
|
||||
spin_lock_init(&driver_data->lock);
|
||||
|
||||
for (i = 0; i < num_periph; i++) {
|
||||
struct clk_hw **hw = &driver_data->hw_data->hws[i];
|
||||
-
|
||||
- if (armada_3700_add_composite_clk(&data[i], reg,
|
||||
+ if (armada_3700_add_composite_clk(&data[i], driver_data->reg,
|
||||
&driver_data->lock, dev, hw))
|
||||
dev_err(dev, "Can't register periph clock %s\n",
|
||||
data[i].name);
|
||||
--
|
||||
cgit 1.2-0.3.lf.el7
|
||||
|
|
@ -1,219 +0,0 @@
|
|||
diff --git a/arch/arm64/boot/dts/marvell/Makefile b/arch/arm64/boot/dts/marvell/Makefile
|
||||
index ea9d49f2a911..d80da8f5d82d 100644
|
||||
--- a/arch/arm64/boot/dts/marvell/Makefile
|
||||
+++ b/arch/arm64/boot/dts/marvell/Makefile
|
||||
@@ -2,6 +2,7 @@
|
||||
# Mvebu SoC Family
|
||||
dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-db.dtb
|
||||
dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-espressobin.dtb
|
||||
+dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-espressobinv7.dtb
|
||||
dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-turris-mox.dtb
|
||||
dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-uDPU.dtb
|
||||
dtb-$(CONFIG_ARCH_MVEBU) += armada-7040-db.dtb
|
||||
diff --git a/arch/arm64/boot/dts/marvell/armada-3720-espressobinv7.dts b/arch/arm64/boot/dts/marvell/armada-3720-espressobinv7.dts
|
||||
new file mode 100644
|
||||
index 000000000000..6385b2488e45
|
||||
--- /dev/null
|
||||
+++ b/arch/arm64/boot/dts/marvell/armada-3720-espressobinv7.dts
|
||||
@@ -0,0 +1,201 @@
|
||||
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
+/*
|
||||
+ * Device Tree file for Globalscale Marvell ESPRESSOBin Board
|
||||
+ * Copyright (C) 2016 Marvell
|
||||
+ *
|
||||
+ * Romain Perier <romain.perier@free-electrons.com>
|
||||
+ *
|
||||
+ */
|
||||
+/*
|
||||
+ * Schematic available at http://espressobin.net/wp-content/uploads/2017/08/ESPRESSObin_V5_Schematics.pdf
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include <dt-bindings/gpio/gpio.h>
|
||||
+#include "armada-372x.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ model = "Globalscale Marvell ESPRESSOBin Board";
|
||||
+ compatible = "globalscale,espressobin", "marvell,armada3720", "marvell,armada3710";
|
||||
+
|
||||
+ chosen {
|
||||
+ stdout-path = "serial0:115200n8";
|
||||
+ };
|
||||
+
|
||||
+ memory@0 {
|
||||
+ device_type = "memory";
|
||||
+ reg = <0x00000000 0x00000000 0x00000000 0x20000000>;
|
||||
+ };
|
||||
+
|
||||
+ vcc_sd_reg1: regulator {
|
||||
+ compatible = "regulator-gpio";
|
||||
+ regulator-name = "vcc_sd1";
|
||||
+ regulator-min-microvolt = <1800000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ regulator-boot-on;
|
||||
+
|
||||
+ gpios = <&gpionb 4 GPIO_ACTIVE_HIGH>;
|
||||
+ gpios-states = <0>;
|
||||
+ states = <1800000 0x1
|
||||
+ 3300000 0x0>;
|
||||
+ enable-active-high;
|
||||
+ };
|
||||
+
|
||||
+ leds {
|
||||
+ compatible = "gpio-leds";
|
||||
+
|
||||
+ red {
|
||||
+ label = "espressobin:red:usr";
|
||||
+ gpios = <&gpionb 2 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+/* J9 */
|
||||
+&pcie0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+/* J6 */
|
||||
+&sata {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+/* J1 */
|
||||
+&sdhci1 {
|
||||
+ wp-inverted;
|
||||
+ bus-width = <4>;
|
||||
+ cd-gpios = <&gpionb 3 GPIO_ACTIVE_LOW>;
|
||||
+ marvell,pad-type = "sd";
|
||||
+ vqmmc-supply = <&vcc_sd_reg1>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&spi0 {
|
||||
+ status = "okay";
|
||||
+
|
||||
+ flash@0 {
|
||||
+ reg = <0>;
|
||||
+ /*
|
||||
+ * Originally "winbond,w25q32dw", but since the manufacturer is known
|
||||
+ * to have replaced the part with "macronix,mx25u3235f" in some board
|
||||
+ * batches, just use the generic "jedec,spi-nor" and let the actual
|
||||
+ * chip type be probed. The partition table still depends on the chip
|
||||
+ * being 4 MiB in size.
|
||||
+ */
|
||||
+ compatible = "jedec,spi-nor";
|
||||
+ spi-max-frequency = <104000000>;
|
||||
+ m25p,fast-read;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ partitions {
|
||||
+ compatible = "fixed-partitions";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+
|
||||
+ partition@0 {
|
||||
+ label = "uboot";
|
||||
+ reg = <0 0x3f0000>;
|
||||
+ };
|
||||
+
|
||||
+ partition@3f0000 {
|
||||
+ label = "ubootenv";
|
||||
+ reg = <0x3f0000 0x10000>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+/* Exported on the micro USB connector J5 through an FTDI */
|
||||
+&uart0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&uart1_pins>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * Connector J17 and J18 expose a number of different features. Some pins are
|
||||
+ * multiplexed. This is the case for instance for the following features:
|
||||
+ * - UART1 (pin 24 = RX, pin 26 = TX). See armada-3720-db.dts for an example of
|
||||
+ * how to enable it. Beware that the signals are 1.8V TTL.
|
||||
+ * - I2C
|
||||
+ * - SPI
|
||||
+ * - MMC
|
||||
+ */
|
||||
+
|
||||
+/* J7 */
|
||||
+&usb3 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+/* J8 */
|
||||
+&usb2 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mdio {
|
||||
+ switch0: switch0@1 {
|
||||
+ compatible = "marvell,mv88e6085";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ reg = <1>;
|
||||
+
|
||||
+ dsa,member = <0 0>;
|
||||
+
|
||||
+ ports {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ port@0 {
|
||||
+ reg = <0>;
|
||||
+ label = "cpu";
|
||||
+ ethernet = <ð0>;
|
||||
+ };
|
||||
+
|
||||
+ port@1 {
|
||||
+ reg = <1>;
|
||||
+ label = "lan1";
|
||||
+ phy-handle = <&switch0phy0>;
|
||||
+ };
|
||||
+
|
||||
+ port@2 {
|
||||
+ reg = <2>;
|
||||
+ label = "lan0";
|
||||
+ phy-handle = <&switch0phy1>;
|
||||
+ };
|
||||
+
|
||||
+ port@3 {
|
||||
+ reg = <3>;
|
||||
+ label = "wan";
|
||||
+ phy-handle = <&switch0phy2>;
|
||||
+ };
|
||||
+
|
||||
+ };
|
||||
+
|
||||
+ mdio {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ switch0phy0: switch0phy0@11 {
|
||||
+ reg = <0x11>;
|
||||
+ };
|
||||
+ switch0phy1: switch0phy1@12 {
|
||||
+ reg = <0x12>;
|
||||
+ };
|
||||
+ switch0phy2: switch0phy2@13 {
|
||||
+ reg = <0x13>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+ð0 {
|
||||
+ phy-mode = "rgmii-id";
|
||||
+ status = "okay";
|
||||
+
|
||||
+ fixed-link {
|
||||
+ speed = <1000>;
|
||||
+ full-duplex;
|
||||
+ };
|
||||
+};
|
|
@ -1,91 +0,0 @@
|
|||
diff --git a/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts b/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts
|
||||
index cd5fbfa38..a81391164 100644
|
||||
--- a/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts
|
||||
+++ b/arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts
|
||||
@@ -41,6 +41,16 @@
|
||||
3300000 0x0>;
|
||||
enable-active-high;
|
||||
};
|
||||
+
|
||||
+ leds {
|
||||
+ compatible = "gpio-leds";
|
||||
+
|
||||
+ red {
|
||||
+ label = "espressobin:red:usr";
|
||||
+ gpios = <&gpionb 2 GPIO_ACTIVE_LOW>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
};
|
||||
|
||||
/* J9 */
|
||||
@@ -95,19 +105,35 @@
|
||||
|
||||
flash@0 {
|
||||
reg = <0>;
|
||||
+ /*
|
||||
+ * Originally "winbond,w25q32dw", but since the manufacturer is known
|
||||
+ * to have replaced the part with "macronix,mx25u3235f" in some board
|
||||
+ * batches, just use the generic "jedec,spi-nor" and let the actual
|
||||
+ * chip type be probed. The partition table still depends on the chip
|
||||
+ * being 4 MiB in size.
|
||||
+ */
|
||||
compatible = "jedec,spi-nor";
|
||||
spi-max-frequency = <104000000>;
|
||||
m25p,fast-read;
|
||||
- };
|
||||
-};
|
||||
+ status = "okay";
|
||||
+
|
||||
+ partitions {
|
||||
+ compatible = "fixed-partitions";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
|
||||
-&sdhci0 {
|
||||
- non-removable;
|
||||
- bus-width = <8>;
|
||||
- mmc-ddr-1_8v;
|
||||
- mmc-hs400-1_8v;
|
||||
- marvell,pad-type = "fixed-1-8v";
|
||||
- status = "okay";
|
||||
+ partition@0 {
|
||||
+ label = "uboot";
|
||||
+ reg = <0 0x3f0000>;
|
||||
+ };
|
||||
+
|
||||
+ partition@180000 {
|
||||
+ label = "ubootenv";
|
||||
+ reg = <0x3f0000 0x10000>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ };
|
||||
};
|
||||
|
||||
/* Exported on the micro USB connector J5 through an FTDI */
|
||||
@@ -137,11 +163,6 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
-/* J8 */
|
||||
-&usb2 {
|
||||
- status = "okay";
|
||||
-};
|
||||
-
|
||||
&mdio {
|
||||
switch0: switch0@1 {
|
||||
compatible = "marvell,mv88e6085";
|
||||
@@ -199,12 +220,6 @@
|
||||
switch0phy2: switch0phy2@13 {
|
||||
reg = <0x13>;
|
||||
};
|
||||
-
|
||||
- partition@190000 {
|
||||
- label = "Linux";
|
||||
- reg = <0x190000 0xDF0000>;
|
||||
- };
|
||||
-
|
||||
};
|
||||
};
|
||||
};
|
|
@ -1,16 +0,0 @@
|
|||
diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c
|
||||
index a42a040..1754456
|
||||
--- a/drivers/pci/controller/pci-aardvark.c
|
||||
+++ b/drivers/pci/controller/pci-aardvark.c
|
||||
@@ -312,9 +312,10 @@ static void advk_pcie_setup_hw(struct advk_pcie *pcie)
|
||||
advk_writel(pcie, reg, PCIE_CORE_CTRL2_REG);
|
||||
|
||||
/* Set GEN2 */
|
||||
+ /* Set GEN1 */
|
||||
reg = advk_readl(pcie, PCIE_CORE_CTRL0_REG);
|
||||
reg &= ~PCIE_GEN_SEL_MSK;
|
||||
- reg |= SPEED_GEN_2;
|
||||
+ reg |= SPEED_GEN_1;
|
||||
advk_writel(pcie, reg, PCIE_CORE_CTRL0_REG);
|
||||
|
||||
/* Set lane X1 */
|
|
@ -1,12 +0,0 @@
|
|||
diff --git linux-4.18.7/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
|
||||
index f028277fb..e4886c95c 100644
|
||||
--- linux-4.18.7/drivers/mtd/spi-nor/spi-nor.c
|
||||
+++ b/drivers/mtd/spi-nor/spi-nor.c
|
||||
@@ -1085,6 +1085,7 @@ static const struct flash_info spi_nor_ids[] = {
|
||||
{ "mx25u2033e", INFO(0xc22532, 0, 64 * 1024, 4, SECT_4K) },
|
||||
{ "mx25u4035", INFO(0xc22533, 0, 64 * 1024, 8, SECT_4K) },
|
||||
{ "mx25u8035", INFO(0xc22534, 0, 64 * 1024, 16, SECT_4K) },
|
||||
+ { "mx25u3235f", INFO(0xc22536, 0, 64 * 1024, 64, SECT_4K) },
|
||||
{ "mx25u6435f", INFO(0xc22537, 0, 64 * 1024, 128, SECT_4K) },
|
||||
{ "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) },
|
||||
{ "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) },
|
|
@ -1,72 +0,0 @@
|
|||
diff --git a/drivers/net/wireless/ath/regd.c b/drivers/net/wireless/ath/regd.c
|
||||
index ccc4c71..71a4d00 100644
|
||||
--- a/drivers/net/wireless/ath/regd.c
|
||||
+++ b/drivers/net/wireless/ath/regd.c
|
||||
@@ -49,12 +49,9 @@ static int __ath_regd_init(struct ath_regulatory *reg);
|
||||
#define ATH9K_5GHZ_5725_5850 REG_RULE(5725-10, 5850+10, 40, 0, 30,\
|
||||
NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_IBSS)
|
||||
|
||||
-#define ATH9K_2GHZ_ALL ATH9K_2GHZ_CH01_11, \
|
||||
- ATH9K_2GHZ_CH12_13, \
|
||||
- ATH9K_2GHZ_CH14
|
||||
+#define ATH9K_2GHZ_ALL REG_RULE(2400, 2483, 40, 0, 30, 0)
|
||||
|
||||
-#define ATH9K_5GHZ_ALL ATH9K_5GHZ_5150_5350, \
|
||||
- ATH9K_5GHZ_5470_5850
|
||||
+#define ATH9K_5GHZ_ALL REG_RULE(5140, 5860, 40, 0, 30, 0)
|
||||
|
||||
/* This one skips what we call "mid band" */
|
||||
#define ATH9K_5GHZ_NO_MIDBAND ATH9K_5GHZ_5150_5350, \
|
||||
@@ -76,9 +73,8 @@ static const struct ieee80211_regdomain ath_world_regdom_63_65 = {
|
||||
.n_reg_rules = 4,
|
||||
.alpha2 = "99",
|
||||
.reg_rules = {
|
||||
- ATH9K_2GHZ_CH01_11,
|
||||
- ATH9K_2GHZ_CH12_13,
|
||||
- ATH9K_5GHZ_NO_MIDBAND,
|
||||
+ ATH9K_2GHZ_ALL,
|
||||
+ ATH9K_5GHZ_ALL,
|
||||
}
|
||||
};
|
||||
|
||||
@@ -87,8 +83,8 @@ static const struct ieee80211_regdomain ath_world_regdom_64 = {
|
||||
.n_reg_rules = 3,
|
||||
.alpha2 = "99",
|
||||
.reg_rules = {
|
||||
- ATH9K_2GHZ_CH01_11,
|
||||
- ATH9K_5GHZ_NO_MIDBAND,
|
||||
+ ATH9K_2GHZ_ALL,
|
||||
+ ATH9K_5GHZ_ALL,
|
||||
}
|
||||
};
|
||||
|
||||
@@ -97,7 +93,7 @@ static const struct ieee80211_regdomain ath_world_regdom_66_69 = {
|
||||
.n_reg_rules = 3,
|
||||
.alpha2 = "99",
|
||||
.reg_rules = {
|
||||
- ATH9K_2GHZ_CH01_11,
|
||||
+ ATH9K_2GHZ_ALL,
|
||||
ATH9K_5GHZ_ALL,
|
||||
}
|
||||
};
|
||||
@@ -107,8 +103,7 @@ static const struct ieee80211_regdomain ath_world_regdom_67_68_6A_6C = {
|
||||
.n_reg_rules = 4,
|
||||
.alpha2 = "99",
|
||||
.reg_rules = {
|
||||
- ATH9K_2GHZ_CH01_11,
|
||||
- ATH9K_2GHZ_CH12_13,
|
||||
+ ATH9K_2GHZ_ALL,
|
||||
ATH9K_5GHZ_ALL,
|
||||
}
|
||||
};
|
||||
@@ -253,9 +253,7 @@ static bool ath_is_radar_freq(u16 center_freq,
|
||||
struct ath_regulatory *reg)
|
||||
|
||||
{
|
||||
- if (reg->country_code == CTRY_INDIA)
|
||||
- return (center_freq >= 5500 && center_freq <= 5700);
|
||||
- return (center_freq >= 5260 && center_freq <= 5700);
|
||||
+ return false;
|
||||
}
|
||||
|
||||
static void ath_force_clear_no_ir_chan(struct wiphy *wiphy,
|
1216
patch/kernel/odroidxu4-current/patch-5.4.81-82.patch
Normal file
1216
patch/kernel/odroidxu4-current/patch-5.4.81-82.patch
Normal file
File diff suppressed because it is too large
Load diff
1918
patch/kernel/odroidxu4-current/patch-5.4.82-83.patch
Normal file
1918
patch/kernel/odroidxu4-current/patch-5.4.82-83.patch
Normal file
File diff suppressed because it is too large
Load diff
685
patch/kernel/odroidxu4-legacy/patch-4.14.210-211.patch
Normal file
685
patch/kernel/odroidxu4-legacy/patch-4.14.210-211.patch
Normal file
|
@ -0,0 +1,685 @@
|
|||
diff --git a/Documentation/devicetree/bindings/net/nfc/nxp-nci.txt b/Documentation/devicetree/bindings/net/nfc/nxp-nci.txt
|
||||
index 92486733df714..8ebc5200032af 100644
|
||||
--- a/Documentation/devicetree/bindings/net/nfc/nxp-nci.txt
|
||||
+++ b/Documentation/devicetree/bindings/net/nfc/nxp-nci.txt
|
||||
@@ -26,7 +26,7 @@ Example (for ARM-based BeagleBone with NPC100 NFC controller on I2C2):
|
||||
clock-frequency = <100000>;
|
||||
|
||||
interrupt-parent = <&gpio1>;
|
||||
- interrupts = <29 GPIO_ACTIVE_HIGH>;
|
||||
+ interrupts = <29 IRQ_TYPE_LEVEL_HIGH>;
|
||||
|
||||
enable-gpios = <&gpio0 30 GPIO_ACTIVE_HIGH>;
|
||||
firmware-gpios = <&gpio0 31 GPIO_ACTIVE_HIGH>;
|
||||
diff --git a/Documentation/devicetree/bindings/net/nfc/pn544.txt b/Documentation/devicetree/bindings/net/nfc/pn544.txt
|
||||
index 538a86f7b2b0c..982d4dd4eba36 100644
|
||||
--- a/Documentation/devicetree/bindings/net/nfc/pn544.txt
|
||||
+++ b/Documentation/devicetree/bindings/net/nfc/pn544.txt
|
||||
@@ -26,7 +26,7 @@ Example (for ARM-based BeagleBone with PN544 on I2C2):
|
||||
clock-frequency = <400000>;
|
||||
|
||||
interrupt-parent = <&gpio1>;
|
||||
- interrupts = <17 GPIO_ACTIVE_HIGH>;
|
||||
+ interrupts = <17 IRQ_TYPE_LEVEL_HIGH>;
|
||||
|
||||
enable-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>;
|
||||
firmware-gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>;
|
||||
diff --git a/Makefile b/Makefile
|
||||
index fa6ea54e2604a..31c2f8973a5d3 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 14
|
||||
-SUBLEVEL = 210
|
||||
+SUBLEVEL = 211
|
||||
EXTRAVERSION =
|
||||
NAME = Petit Gorille
|
||||
|
||||
diff --git a/drivers/infiniband/hw/i40iw/i40iw_main.c b/drivers/infiniband/hw/i40iw/i40iw_main.c
|
||||
index 27590ae21881e..f41ac28757022 100644
|
||||
--- a/drivers/infiniband/hw/i40iw/i40iw_main.c
|
||||
+++ b/drivers/infiniband/hw/i40iw/i40iw_main.c
|
||||
@@ -54,10 +54,6 @@
|
||||
#define DRV_VERSION __stringify(DRV_VERSION_MAJOR) "." \
|
||||
__stringify(DRV_VERSION_MINOR) "." __stringify(DRV_VERSION_BUILD)
|
||||
|
||||
-static int push_mode;
|
||||
-module_param(push_mode, int, 0644);
|
||||
-MODULE_PARM_DESC(push_mode, "Low latency mode: 0=disabled (default), 1=enabled)");
|
||||
-
|
||||
static int debug;
|
||||
module_param(debug, int, 0644);
|
||||
MODULE_PARM_DESC(debug, "debug flags: 0=disabled (default), 0x7fffffff=all");
|
||||
@@ -1564,7 +1560,6 @@ static enum i40iw_status_code i40iw_setup_init_state(struct i40iw_handler *hdl,
|
||||
if (status)
|
||||
goto exit;
|
||||
iwdev->obj_next = iwdev->obj_mem;
|
||||
- iwdev->push_mode = push_mode;
|
||||
|
||||
init_waitqueue_head(&iwdev->vchnl_waitq);
|
||||
init_waitqueue_head(&dev->vf_reqs);
|
||||
diff --git a/drivers/infiniband/hw/i40iw/i40iw_verbs.c b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
|
||||
index 57bfe48082470..cc943b4b74745 100644
|
||||
--- a/drivers/infiniband/hw/i40iw/i40iw_verbs.c
|
||||
+++ b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
|
||||
@@ -199,38 +199,16 @@ static int i40iw_dealloc_ucontext(struct ib_ucontext *context)
|
||||
*/
|
||||
static int i40iw_mmap(struct ib_ucontext *context, struct vm_area_struct *vma)
|
||||
{
|
||||
- struct i40iw_ucontext *ucontext;
|
||||
- u64 db_addr_offset;
|
||||
- u64 push_offset;
|
||||
-
|
||||
- ucontext = to_ucontext(context);
|
||||
- if (ucontext->iwdev->sc_dev.is_pf) {
|
||||
- db_addr_offset = I40IW_DB_ADDR_OFFSET;
|
||||
- push_offset = I40IW_PUSH_OFFSET;
|
||||
- if (vma->vm_pgoff)
|
||||
- vma->vm_pgoff += I40IW_PF_FIRST_PUSH_PAGE_INDEX - 1;
|
||||
- } else {
|
||||
- db_addr_offset = I40IW_VF_DB_ADDR_OFFSET;
|
||||
- push_offset = I40IW_VF_PUSH_OFFSET;
|
||||
- if (vma->vm_pgoff)
|
||||
- vma->vm_pgoff += I40IW_VF_FIRST_PUSH_PAGE_INDEX - 1;
|
||||
- }
|
||||
+ struct i40iw_ucontext *ucontext = to_ucontext(context);
|
||||
+ u64 dbaddr;
|
||||
|
||||
- vma->vm_pgoff += db_addr_offset >> PAGE_SHIFT;
|
||||
+ if (vma->vm_pgoff || vma->vm_end - vma->vm_start != PAGE_SIZE)
|
||||
+ return -EINVAL;
|
||||
|
||||
- if (vma->vm_pgoff == (db_addr_offset >> PAGE_SHIFT)) {
|
||||
- vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|
||||
- vma->vm_private_data = ucontext;
|
||||
- } else {
|
||||
- if ((vma->vm_pgoff - (push_offset >> PAGE_SHIFT)) % 2)
|
||||
- vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|
||||
- else
|
||||
- vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
|
||||
- }
|
||||
+ dbaddr = I40IW_DB_ADDR_OFFSET + pci_resource_start(ucontext->iwdev->ldev->pcidev, 0);
|
||||
|
||||
- if (io_remap_pfn_range(vma, vma->vm_start,
|
||||
- vma->vm_pgoff + (pci_resource_start(ucontext->iwdev->ldev->pcidev, 0) >> PAGE_SHIFT),
|
||||
- PAGE_SIZE, vma->vm_page_prot))
|
||||
+ if (io_remap_pfn_range(vma, vma->vm_start, dbaddr >> PAGE_SHIFT, PAGE_SIZE,
|
||||
+ pgprot_noncached(vma->vm_page_prot)))
|
||||
return -EAGAIN;
|
||||
|
||||
return 0;
|
||||
diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
|
||||
index 54a6691d7d878..637f1347cd13d 100644
|
||||
--- a/drivers/input/joystick/xpad.c
|
||||
+++ b/drivers/input/joystick/xpad.c
|
||||
@@ -258,6 +258,7 @@ static const struct xpad_device {
|
||||
{ 0x1038, 0x1430, "SteelSeries Stratus Duo", 0, XTYPE_XBOX360 },
|
||||
{ 0x1038, 0x1431, "SteelSeries Stratus Duo", 0, XTYPE_XBOX360 },
|
||||
{ 0x11c9, 0x55f0, "Nacon GC-100XF", 0, XTYPE_XBOX360 },
|
||||
+ { 0x1209, 0x2882, "Ardwiino Controller", 0, XTYPE_XBOX360 },
|
||||
{ 0x12ab, 0x0004, "Honey Bee Xbox360 dancepad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
|
||||
{ 0x12ab, 0x0301, "PDP AFTERGLOW AX.1", 0, XTYPE_XBOX360 },
|
||||
{ 0x12ab, 0x0303, "Mortal Kombat Klassic FightStick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
|
||||
@@ -435,6 +436,7 @@ static const struct usb_device_id xpad_table[] = {
|
||||
XPAD_XBOXONE_VENDOR(0x0f0d), /* Hori Controllers */
|
||||
XPAD_XBOX360_VENDOR(0x1038), /* SteelSeries Controllers */
|
||||
XPAD_XBOX360_VENDOR(0x11c9), /* Nacon GC100XF */
|
||||
+ XPAD_XBOX360_VENDOR(0x1209), /* Ardwiino Controllers */
|
||||
XPAD_XBOX360_VENDOR(0x12ab), /* X-Box 360 dance pads */
|
||||
XPAD_XBOX360_VENDOR(0x1430), /* RedOctane X-Box 360 controllers */
|
||||
XPAD_XBOX360_VENDOR(0x146b), /* BigBen Interactive Controllers */
|
||||
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
|
||||
index 51bd2ebaa342c..adb8b23a63934 100644
|
||||
--- a/drivers/input/serio/i8042-x86ia64io.h
|
||||
+++ b/drivers/input/serio/i8042-x86ia64io.h
|
||||
@@ -223,6 +223,10 @@ static const struct dmi_system_id __initconst i8042_dmi_noloop_table[] = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "PEGATRON CORPORATION"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "C15B"),
|
||||
},
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "ByteSpeed LLC"),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "ByteSpeed Laptop C15B"),
|
||||
+ },
|
||||
},
|
||||
{ }
|
||||
};
|
||||
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
|
||||
index 6aaf1196d9a55..1250983616efd 100644
|
||||
--- a/drivers/net/bonding/bond_main.c
|
||||
+++ b/drivers/net/bonding/bond_main.c
|
||||
@@ -1253,7 +1253,39 @@ static void bond_upper_dev_unlink(struct bonding *bond, struct slave *slave)
|
||||
rtmsg_ifinfo(RTM_NEWLINK, slave->dev, IFF_SLAVE, GFP_KERNEL);
|
||||
}
|
||||
|
||||
-static struct slave *bond_alloc_slave(struct bonding *bond)
|
||||
+static void slave_kobj_release(struct kobject *kobj)
|
||||
+{
|
||||
+ struct slave *slave = to_slave(kobj);
|
||||
+ struct bonding *bond = bond_get_bond_by_slave(slave);
|
||||
+
|
||||
+ cancel_delayed_work_sync(&slave->notify_work);
|
||||
+ if (BOND_MODE(bond) == BOND_MODE_8023AD)
|
||||
+ kfree(SLAVE_AD_INFO(slave));
|
||||
+
|
||||
+ kfree(slave);
|
||||
+}
|
||||
+
|
||||
+static struct kobj_type slave_ktype = {
|
||||
+ .release = slave_kobj_release,
|
||||
+#ifdef CONFIG_SYSFS
|
||||
+ .sysfs_ops = &slave_sysfs_ops,
|
||||
+#endif
|
||||
+};
|
||||
+
|
||||
+static int bond_kobj_init(struct slave *slave)
|
||||
+{
|
||||
+ int err;
|
||||
+
|
||||
+ err = kobject_init_and_add(&slave->kobj, &slave_ktype,
|
||||
+ &(slave->dev->dev.kobj), "bonding_slave");
|
||||
+ if (err)
|
||||
+ kobject_put(&slave->kobj);
|
||||
+
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
+static struct slave *bond_alloc_slave(struct bonding *bond,
|
||||
+ struct net_device *slave_dev)
|
||||
{
|
||||
struct slave *slave = NULL;
|
||||
|
||||
@@ -1261,11 +1293,17 @@ static struct slave *bond_alloc_slave(struct bonding *bond)
|
||||
if (!slave)
|
||||
return NULL;
|
||||
|
||||
+ slave->bond = bond;
|
||||
+ slave->dev = slave_dev;
|
||||
+
|
||||
+ if (bond_kobj_init(slave))
|
||||
+ return NULL;
|
||||
+
|
||||
if (BOND_MODE(bond) == BOND_MODE_8023AD) {
|
||||
SLAVE_AD_INFO(slave) = kzalloc(sizeof(struct ad_slave_info),
|
||||
GFP_KERNEL);
|
||||
if (!SLAVE_AD_INFO(slave)) {
|
||||
- kfree(slave);
|
||||
+ kobject_put(&slave->kobj);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@@ -1274,17 +1312,6 @@ static struct slave *bond_alloc_slave(struct bonding *bond)
|
||||
return slave;
|
||||
}
|
||||
|
||||
-static void bond_free_slave(struct slave *slave)
|
||||
-{
|
||||
- struct bonding *bond = bond_get_bond_by_slave(slave);
|
||||
-
|
||||
- cancel_delayed_work_sync(&slave->notify_work);
|
||||
- if (BOND_MODE(bond) == BOND_MODE_8023AD)
|
||||
- kfree(SLAVE_AD_INFO(slave));
|
||||
-
|
||||
- kfree(slave);
|
||||
-}
|
||||
-
|
||||
static void bond_fill_ifbond(struct bonding *bond, struct ifbond *info)
|
||||
{
|
||||
info->bond_mode = BOND_MODE(bond);
|
||||
@@ -1464,14 +1491,12 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev)
|
||||
bond->dev->addr_assign_type == NET_ADDR_RANDOM)
|
||||
bond_set_dev_addr(bond->dev, slave_dev);
|
||||
|
||||
- new_slave = bond_alloc_slave(bond);
|
||||
+ new_slave = bond_alloc_slave(bond, slave_dev);
|
||||
if (!new_slave) {
|
||||
res = -ENOMEM;
|
||||
goto err_undo_flags;
|
||||
}
|
||||
|
||||
- new_slave->bond = bond;
|
||||
- new_slave->dev = slave_dev;
|
||||
/* Set the new_slave's queue_id to be zero. Queue ID mapping
|
||||
* is set via sysfs or module option if desired.
|
||||
*/
|
||||
@@ -1802,7 +1827,7 @@ err_restore_mtu:
|
||||
dev_set_mtu(slave_dev, new_slave->original_mtu);
|
||||
|
||||
err_free:
|
||||
- bond_free_slave(new_slave);
|
||||
+ kobject_put(&new_slave->kobj);
|
||||
|
||||
err_undo_flags:
|
||||
/* Enslave of first slave has failed and we need to fix master's mac */
|
||||
@@ -1990,7 +2015,7 @@ static int __bond_release_one(struct net_device *bond_dev,
|
||||
if (!netif_is_bond_master(slave_dev))
|
||||
slave_dev->priv_flags &= ~IFF_BONDING;
|
||||
|
||||
- bond_free_slave(slave);
|
||||
+ kobject_put(&slave->kobj);
|
||||
|
||||
return 0;
|
||||
}
|
||||
diff --git a/drivers/net/bonding/bond_sysfs_slave.c b/drivers/net/bonding/bond_sysfs_slave.c
|
||||
index 3f756fa2f603b..68bbac4715c35 100644
|
||||
--- a/drivers/net/bonding/bond_sysfs_slave.c
|
||||
+++ b/drivers/net/bonding/bond_sysfs_slave.c
|
||||
@@ -125,7 +125,6 @@ static const struct slave_attribute *slave_attrs[] = {
|
||||
};
|
||||
|
||||
#define to_slave_attr(_at) container_of(_at, struct slave_attribute, attr)
|
||||
-#define to_slave(obj) container_of(obj, struct slave, kobj)
|
||||
|
||||
static ssize_t slave_show(struct kobject *kobj,
|
||||
struct attribute *attr, char *buf)
|
||||
@@ -136,28 +135,15 @@ static ssize_t slave_show(struct kobject *kobj,
|
||||
return slave_attr->show(slave, buf);
|
||||
}
|
||||
|
||||
-static const struct sysfs_ops slave_sysfs_ops = {
|
||||
+const struct sysfs_ops slave_sysfs_ops = {
|
||||
.show = slave_show,
|
||||
};
|
||||
|
||||
-static struct kobj_type slave_ktype = {
|
||||
-#ifdef CONFIG_SYSFS
|
||||
- .sysfs_ops = &slave_sysfs_ops,
|
||||
-#endif
|
||||
-};
|
||||
-
|
||||
int bond_sysfs_slave_add(struct slave *slave)
|
||||
{
|
||||
const struct slave_attribute **a;
|
||||
int err;
|
||||
|
||||
- err = kobject_init_and_add(&slave->kobj, &slave_ktype,
|
||||
- &(slave->dev->dev.kobj), "bonding_slave");
|
||||
- if (err) {
|
||||
- kobject_put(&slave->kobj);
|
||||
- return err;
|
||||
- }
|
||||
-
|
||||
for (a = slave_attrs; *a; ++a) {
|
||||
err = sysfs_create_file(&slave->kobj, &((*a)->attr));
|
||||
if (err) {
|
||||
@@ -175,6 +161,4 @@ void bond_sysfs_slave_del(struct slave *slave)
|
||||
|
||||
for (a = slave_attrs; *a; ++a)
|
||||
sysfs_remove_file(&slave->kobj, &((*a)->attr));
|
||||
-
|
||||
- kobject_put(&slave->kobj);
|
||||
}
|
||||
diff --git a/drivers/net/ethernet/chelsio/cxgb3/sge.c b/drivers/net/ethernet/chelsio/cxgb3/sge.c
|
||||
index e2d342647b194..454fee4ea9e62 100644
|
||||
--- a/drivers/net/ethernet/chelsio/cxgb3/sge.c
|
||||
+++ b/drivers/net/ethernet/chelsio/cxgb3/sge.c
|
||||
@@ -3111,6 +3111,7 @@ int t3_sge_alloc_qset(struct adapter *adapter, unsigned int id, int nports,
|
||||
GFP_KERNEL | __GFP_COMP);
|
||||
if (!avail) {
|
||||
CH_ALERT(adapter, "free list queue 0 initialization failed\n");
|
||||
+ ret = -ENOMEM;
|
||||
goto err;
|
||||
}
|
||||
if (avail < q->fl[0].size)
|
||||
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
|
||||
index 9a524b0e3e7ba..058b4d0c5a710 100644
|
||||
--- a/drivers/net/ethernet/ibm/ibmvnic.c
|
||||
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
|
||||
@@ -1658,6 +1658,12 @@ restart_poll:
|
||||
|
||||
if (!pending_scrq(adapter, adapter->rx_scrq[scrq_num]))
|
||||
break;
|
||||
+ /* The queue entry at the current index is peeked at above
|
||||
+ * to determine that there is a valid descriptor awaiting
|
||||
+ * processing. We want to be sure that the current slot
|
||||
+ * holds a valid descriptor before reading its contents.
|
||||
+ */
|
||||
+ dma_rmb();
|
||||
next = ibmvnic_next_scrq(adapter, adapter->rx_scrq[scrq_num]);
|
||||
rx_buff =
|
||||
(struct ibmvnic_rx_buff *)be64_to_cpu(next->
|
||||
@@ -2177,13 +2183,18 @@ restart_loop:
|
||||
while (pending_scrq(adapter, scrq)) {
|
||||
unsigned int pool = scrq->pool_index;
|
||||
|
||||
+ /* The queue entry at the current index is peeked at above
|
||||
+ * to determine that there is a valid descriptor awaiting
|
||||
+ * processing. We want to be sure that the current slot
|
||||
+ * holds a valid descriptor before reading its contents.
|
||||
+ */
|
||||
+ dma_rmb();
|
||||
+
|
||||
next = ibmvnic_next_scrq(adapter, scrq);
|
||||
for (i = 0; i < next->tx_comp.num_comps; i++) {
|
||||
- if (next->tx_comp.rcs[i]) {
|
||||
+ if (next->tx_comp.rcs[i])
|
||||
dev_err(dev, "tx error %x\n",
|
||||
next->tx_comp.rcs[i]);
|
||||
- continue;
|
||||
- }
|
||||
index = be32_to_cpu(next->tx_comp.correlators[i]);
|
||||
txbuff = &adapter->tx_pool[pool].tx_buff[index];
|
||||
|
||||
@@ -2530,6 +2541,11 @@ static union sub_crq *ibmvnic_next_scrq(struct ibmvnic_adapter *adapter,
|
||||
}
|
||||
spin_unlock_irqrestore(&scrq->lock, flags);
|
||||
|
||||
+ /* Ensure that the entire buffer descriptor has been
|
||||
+ * loaded before reading its contents
|
||||
+ */
|
||||
+ dma_rmb();
|
||||
+
|
||||
return entry;
|
||||
}
|
||||
|
||||
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c b/drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c
|
||||
index e36d3e3675f96..9c3653e06886a 100644
|
||||
--- a/drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c
|
||||
+++ b/drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c
|
||||
@@ -331,6 +331,24 @@ out_free:
|
||||
return err;
|
||||
}
|
||||
|
||||
+static u32 fwp_fill_manage_pages_out(struct fw_page *fwp, u32 *out, u32 index,
|
||||
+ u32 npages)
|
||||
+{
|
||||
+ u32 pages_set = 0;
|
||||
+ unsigned int n;
|
||||
+
|
||||
+ for_each_clear_bit(n, &fwp->bitmask, MLX5_NUM_4K_IN_PAGE) {
|
||||
+ MLX5_ARRAY_SET64(manage_pages_out, out, pas, index + pages_set,
|
||||
+ fwp->addr + (n * MLX5_ADAPTER_PAGE_SIZE));
|
||||
+ pages_set++;
|
||||
+
|
||||
+ if (!--npages)
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ return pages_set;
|
||||
+}
|
||||
+
|
||||
static int reclaim_pages_cmd(struct mlx5_core_dev *dev,
|
||||
u32 *in, int in_size, u32 *out, int out_size)
|
||||
{
|
||||
@@ -354,8 +372,7 @@ static int reclaim_pages_cmd(struct mlx5_core_dev *dev,
|
||||
if (fwp->func_id != func_id)
|
||||
continue;
|
||||
|
||||
- MLX5_ARRAY_SET64(manage_pages_out, out, pas, i, fwp->addr);
|
||||
- i++;
|
||||
+ i += fwp_fill_manage_pages_out(fwp, out, i, npages - i);
|
||||
}
|
||||
|
||||
MLX5_SET(manage_pages_out, out, output_num_entries, i);
|
||||
diff --git a/drivers/net/ethernet/pasemi/pasemi_mac.c b/drivers/net/ethernet/pasemi/pasemi_mac.c
|
||||
index c9b4ac9d3330a..6ccdce21ca9b5 100644
|
||||
--- a/drivers/net/ethernet/pasemi/pasemi_mac.c
|
||||
+++ b/drivers/net/ethernet/pasemi/pasemi_mac.c
|
||||
@@ -1089,16 +1089,20 @@ static int pasemi_mac_open(struct net_device *dev)
|
||||
|
||||
mac->tx = pasemi_mac_setup_tx_resources(dev);
|
||||
|
||||
- if (!mac->tx)
|
||||
+ if (!mac->tx) {
|
||||
+ ret = -ENOMEM;
|
||||
goto out_tx_ring;
|
||||
+ }
|
||||
|
||||
/* We might already have allocated rings in case mtu was changed
|
||||
* before interface was brought up.
|
||||
*/
|
||||
if (dev->mtu > 1500 && !mac->num_cs) {
|
||||
pasemi_mac_setup_csrings(mac);
|
||||
- if (!mac->num_cs)
|
||||
+ if (!mac->num_cs) {
|
||||
+ ret = -ENOMEM;
|
||||
goto out_tx_ring;
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Zero out rmon counters */
|
||||
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
|
||||
index ba34f61d70ded..abf9c9952b799 100644
|
||||
--- a/drivers/net/tun.c
|
||||
+++ b/drivers/net/tun.c
|
||||
@@ -1601,12 +1601,15 @@ static ssize_t tun_chr_write_iter(struct kiocb *iocb, struct iov_iter *from)
|
||||
struct tun_struct *tun = tun_get(file);
|
||||
struct tun_file *tfile = file->private_data;
|
||||
ssize_t result;
|
||||
+ int noblock = 0;
|
||||
|
||||
if (!tun)
|
||||
return -EBADFD;
|
||||
|
||||
- result = tun_get_user(tun, tfile, NULL, from,
|
||||
- file->f_flags & O_NONBLOCK, false);
|
||||
+ if ((file->f_flags & O_NONBLOCK) || (iocb->ki_flags & IOCB_NOWAIT))
|
||||
+ noblock = 1;
|
||||
+
|
||||
+ result = tun_get_user(tun, tfile, NULL, from, noblock, false);
|
||||
|
||||
tun_put(tun);
|
||||
return result;
|
||||
@@ -1789,10 +1792,15 @@ static ssize_t tun_chr_read_iter(struct kiocb *iocb, struct iov_iter *to)
|
||||
struct tun_file *tfile = file->private_data;
|
||||
struct tun_struct *tun = __tun_get(tfile);
|
||||
ssize_t len = iov_iter_count(to), ret;
|
||||
+ int noblock = 0;
|
||||
|
||||
if (!tun)
|
||||
return -EBADFD;
|
||||
- ret = tun_do_read(tun, tfile, to, file->f_flags & O_NONBLOCK, NULL);
|
||||
+
|
||||
+ if ((file->f_flags & O_NONBLOCK) || (iocb->ki_flags & IOCB_NOWAIT))
|
||||
+ noblock = 1;
|
||||
+
|
||||
+ ret = tun_do_read(tun, tfile, to, noblock, NULL);
|
||||
ret = min_t(ssize_t, ret, len);
|
||||
if (ret > 0)
|
||||
iocb->ki_pos = ret;
|
||||
diff --git a/drivers/net/usb/ipheth.c b/drivers/net/usb/ipheth.c
|
||||
index 3d71f17163902..8e2eb20613548 100644
|
||||
--- a/drivers/net/usb/ipheth.c
|
||||
+++ b/drivers/net/usb/ipheth.c
|
||||
@@ -70,7 +70,7 @@
|
||||
#define IPHETH_USBINTF_SUBCLASS 253
|
||||
#define IPHETH_USBINTF_PROTO 1
|
||||
|
||||
-#define IPHETH_BUF_SIZE 1516
|
||||
+#define IPHETH_BUF_SIZE 1514
|
||||
#define IPHETH_IP_ALIGN 2 /* padding at front of URB */
|
||||
#define IPHETH_TX_TIMEOUT (5 * HZ)
|
||||
|
||||
diff --git a/include/net/bonding.h b/include/net/bonding.h
|
||||
index b0f20bc0fd4ab..59597e22aeffc 100644
|
||||
--- a/include/net/bonding.h
|
||||
+++ b/include/net/bonding.h
|
||||
@@ -170,6 +170,11 @@ struct slave {
|
||||
struct rtnl_link_stats64 slave_stats;
|
||||
};
|
||||
|
||||
+static inline struct slave *to_slave(struct kobject *kobj)
|
||||
+{
|
||||
+ return container_of(kobj, struct slave, kobj);
|
||||
+}
|
||||
+
|
||||
struct bond_up_slave {
|
||||
unsigned int count;
|
||||
struct rcu_head rcu;
|
||||
@@ -716,6 +721,9 @@ extern struct bond_parm_tbl ad_select_tbl[];
|
||||
/* exported from bond_netlink.c */
|
||||
extern struct rtnl_link_ops bond_link_ops;
|
||||
|
||||
+/* exported from bond_sysfs_slave.c */
|
||||
+extern const struct sysfs_ops slave_sysfs_ops;
|
||||
+
|
||||
static inline void bond_tx_drop(struct net_device *dev, struct sk_buff *skb)
|
||||
{
|
||||
atomic_long_inc(&dev->tx_dropped);
|
||||
diff --git a/net/bridge/br_netfilter_hooks.c b/net/bridge/br_netfilter_hooks.c
|
||||
index 6feab22791439..8155c3d811a14 100644
|
||||
--- a/net/bridge/br_netfilter_hooks.c
|
||||
+++ b/net/bridge/br_netfilter_hooks.c
|
||||
@@ -716,6 +716,11 @@ static int br_nf_dev_queue_xmit(struct net *net, struct sock *sk, struct sk_buff
|
||||
mtu_reserved = nf_bridge_mtu_reduction(skb);
|
||||
mtu = skb->dev->mtu;
|
||||
|
||||
+ if (nf_bridge->pkt_otherhost) {
|
||||
+ skb->pkt_type = PACKET_OTHERHOST;
|
||||
+ nf_bridge->pkt_otherhost = false;
|
||||
+ }
|
||||
+
|
||||
if (nf_bridge->frag_max_size && nf_bridge->frag_max_size < mtu)
|
||||
mtu = nf_bridge->frag_max_size;
|
||||
|
||||
@@ -809,8 +814,6 @@ static unsigned int br_nf_post_routing(void *priv,
|
||||
else
|
||||
return NF_ACCEPT;
|
||||
|
||||
- /* We assume any code from br_dev_queue_push_xmit onwards doesn't care
|
||||
- * about the value of skb->pkt_type. */
|
||||
if (skb->pkt_type == PACKET_OTHERHOST) {
|
||||
skb->pkt_type = PACKET_HOST;
|
||||
nf_bridge->pkt_otherhost = true;
|
||||
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
|
||||
index 807edf1dbaf8f..c4f412526dfeb 100644
|
||||
--- a/net/core/skbuff.c
|
||||
+++ b/net/core/skbuff.c
|
||||
@@ -4239,7 +4239,7 @@ struct sk_buff *sock_dequeue_err_skb(struct sock *sk)
|
||||
if (skb && (skb_next = skb_peek(q))) {
|
||||
icmp_next = is_icmp_err_skb(skb_next);
|
||||
if (icmp_next)
|
||||
- sk->sk_err = SKB_EXT_ERR(skb_next)->ee.ee_origin;
|
||||
+ sk->sk_err = SKB_EXT_ERR(skb_next)->ee.ee_errno;
|
||||
}
|
||||
spin_unlock_irqrestore(&q->lock, flags);
|
||||
|
||||
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
|
||||
index 87854642e0b6e..be7383d139c15 100644
|
||||
--- a/net/ipv4/route.c
|
||||
+++ b/net/ipv4/route.c
|
||||
@@ -2788,7 +2788,7 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,
|
||||
memset(&fl4, 0, sizeof(fl4));
|
||||
fl4.daddr = dst;
|
||||
fl4.saddr = src;
|
||||
- fl4.flowi4_tos = rtm->rtm_tos;
|
||||
+ fl4.flowi4_tos = rtm->rtm_tos & IPTOS_RT_MASK;
|
||||
fl4.flowi4_oif = tb[RTA_OIF] ? nla_get_u32(tb[RTA_OIF]) : 0;
|
||||
fl4.flowi4_mark = mark;
|
||||
fl4.flowi4_uid = uid;
|
||||
@@ -2807,8 +2807,9 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,
|
||||
skb->protocol = htons(ETH_P_IP);
|
||||
skb->dev = dev;
|
||||
skb->mark = mark;
|
||||
- err = ip_route_input_rcu(skb, dst, src, rtm->rtm_tos,
|
||||
- dev, &res);
|
||||
+ err = ip_route_input_rcu(skb, dst, src,
|
||||
+ rtm->rtm_tos & IPTOS_RT_MASK, dev,
|
||||
+ &res);
|
||||
|
||||
rt = skb_rtable(skb);
|
||||
if (err == 0 && rt->dst.error)
|
||||
diff --git a/net/ipv4/tcp_cong.c b/net/ipv4/tcp_cong.c
|
||||
index 755151e95f497..b193dcebbf7e2 100644
|
||||
--- a/net/ipv4/tcp_cong.c
|
||||
+++ b/net/ipv4/tcp_cong.c
|
||||
@@ -199,6 +199,11 @@ static void tcp_reinit_congestion_control(struct sock *sk,
|
||||
icsk->icsk_ca_setsockopt = 1;
|
||||
memset(icsk->icsk_ca_priv, 0, sizeof(icsk->icsk_ca_priv));
|
||||
|
||||
+ if (ca->flags & TCP_CONG_NEEDS_ECN)
|
||||
+ INET_ECN_xmit(sk);
|
||||
+ else
|
||||
+ INET_ECN_dontxmit(sk);
|
||||
+
|
||||
if (!((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_LISTEN)))
|
||||
tcp_init_congestion_control(sk);
|
||||
}
|
||||
diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c
|
||||
index 91235769c1b7f..07e397a5edc6d 100644
|
||||
--- a/net/iucv/af_iucv.c
|
||||
+++ b/net/iucv/af_iucv.c
|
||||
@@ -1763,7 +1763,7 @@ static int iucv_callback_connreq(struct iucv_path *path,
|
||||
}
|
||||
|
||||
/* Create the new socket */
|
||||
- nsk = iucv_sock_alloc(NULL, sk->sk_type, GFP_ATOMIC, 0);
|
||||
+ nsk = iucv_sock_alloc(NULL, sk->sk_protocol, GFP_ATOMIC, 0);
|
||||
if (!nsk) {
|
||||
err = pr_iucv->path_sever(path, user_data);
|
||||
iucv_path_free(path);
|
||||
@@ -1973,7 +1973,7 @@ static int afiucv_hs_callback_syn(struct sock *sk, struct sk_buff *skb)
|
||||
goto out;
|
||||
}
|
||||
|
||||
- nsk = iucv_sock_alloc(NULL, sk->sk_type, GFP_ATOMIC, 0);
|
||||
+ nsk = iucv_sock_alloc(NULL, sk->sk_protocol, GFP_ATOMIC, 0);
|
||||
bh_lock_sock(sk);
|
||||
if ((sk->sk_state != IUCV_LISTEN) ||
|
||||
sk_acceptq_is_full(sk) ||
|
||||
diff --git a/net/rose/rose_loopback.c b/net/rose/rose_loopback.c
|
||||
index 094a6621f8e80..c318e5c9f6df3 100644
|
||||
--- a/net/rose/rose_loopback.c
|
||||
+++ b/net/rose/rose_loopback.c
|
||||
@@ -99,10 +99,19 @@ static void rose_loopback_timer(struct timer_list *unused)
|
||||
}
|
||||
|
||||
if (frametype == ROSE_CALL_REQUEST) {
|
||||
- if ((dev = rose_dev_get(dest)) != NULL) {
|
||||
- if (rose_rx_call_request(skb, dev, rose_loopback_neigh, lci_o) == 0)
|
||||
- kfree_skb(skb);
|
||||
- } else {
|
||||
+ if (!rose_loopback_neigh->dev) {
|
||||
+ kfree_skb(skb);
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ dev = rose_dev_get(dest);
|
||||
+ if (!dev) {
|
||||
+ kfree_skb(skb);
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if (rose_rx_call_request(skb, dev, rose_loopback_neigh, lci_o) == 0) {
|
||||
+ dev_put(dev);
|
||||
kfree_skb(skb);
|
||||
}
|
||||
} else {
|
||||
diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c
|
||||
index c030d3599a79d..987e5f8cafbe3 100644
|
||||
--- a/net/x25/af_x25.c
|
||||
+++ b/net/x25/af_x25.c
|
||||
@@ -679,7 +679,8 @@ static int x25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
||||
int len, i, rc = 0;
|
||||
|
||||
if (addr_len != sizeof(struct sockaddr_x25) ||
|
||||
- addr->sx25_family != AF_X25) {
|
||||
+ addr->sx25_family != AF_X25 ||
|
||||
+ strnlen(addr->sx25_addr.x25_addr, X25_ADDR_LEN) == X25_ADDR_LEN) {
|
||||
rc = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
@@ -773,7 +774,8 @@ static int x25_connect(struct socket *sock, struct sockaddr *uaddr,
|
||||
|
||||
rc = -EINVAL;
|
||||
if (addr_len != sizeof(struct sockaddr_x25) ||
|
||||
- addr->sx25_family != AF_X25)
|
||||
+ addr->sx25_family != AF_X25 ||
|
||||
+ strnlen(addr->sx25_addr.x25_addr, X25_ADDR_LEN) == X25_ADDR_LEN)
|
||||
goto out;
|
||||
|
||||
rc = -ENETUNREACH;
|
||||
diff --git a/sound/usb/mixer_us16x08.c b/sound/usb/mixer_us16x08.c
|
||||
index 26ed23b18b777..7db3032e723a4 100644
|
||||
--- a/sound/usb/mixer_us16x08.c
|
||||
+++ b/sound/usb/mixer_us16x08.c
|
||||
@@ -617,7 +617,7 @@ static int snd_us16x08_eq_put(struct snd_kcontrol *kcontrol,
|
||||
static int snd_us16x08_meter_info(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_info *uinfo)
|
||||
{
|
||||
- uinfo->count = 1;
|
||||
+ uinfo->count = 34;
|
||||
uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
|
||||
uinfo->value.integer.max = 0x7FFF;
|
||||
uinfo->value.integer.min = 0;
|
1230
patch/kernel/odroidxu4-legacy/patch-4.14.211-212.patch
Normal file
1230
patch/kernel/odroidxu4-legacy/patch-4.14.211-212.patch
Normal file
File diff suppressed because it is too large
Load diff
3736
patch/kernel/rockpis-legacy/patch-4.4.243-244.patch
Normal file
3736
patch/kernel/rockpis-legacy/patch-4.4.243-244.patch
Normal file
File diff suppressed because it is too large
Load diff
1668
patch/kernel/rockpis-legacy/patch-4.4.244-245.patch
Normal file
1668
patch/kernel/rockpis-legacy/patch-4.4.244-245.patch
Normal file
File diff suppressed because it is too large
Load diff
1047
patch/kernel/rockpis-legacy/patch-4.4.245-246.patch
Normal file
1047
patch/kernel/rockpis-legacy/patch-4.4.245-246.patch
Normal file
File diff suppressed because it is too large
Load diff
814
patch/kernel/rockpis-legacy/patch-4.4.246-247.patch
Normal file
814
patch/kernel/rockpis-legacy/patch-4.4.246-247.patch
Normal file
|
@ -0,0 +1,814 @@
|
|||
diff --git a/Makefile b/Makefile
|
||||
index c42ada4e88466..c493d3ae046f6 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,6 +1,6 @@
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 4
|
||||
-SUBLEVEL = 246
|
||||
+SUBLEVEL = 247
|
||||
EXTRAVERSION =
|
||||
NAME = Blurry Fish Butt
|
||||
|
||||
diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
|
||||
index 2c9a2992863b0..ffc3bc8111b80 100644
|
||||
--- a/arch/x86/kernel/cpu/bugs.c
|
||||
+++ b/arch/x86/kernel/cpu/bugs.c
|
||||
@@ -707,11 +707,13 @@ spectre_v2_user_select_mitigation(enum spectre_v2_mitigation_cmd v2_cmd)
|
||||
if (boot_cpu_has(X86_FEATURE_IBPB)) {
|
||||
setup_force_cpu_cap(X86_FEATURE_USE_IBPB);
|
||||
|
||||
+ spectre_v2_user_ibpb = mode;
|
||||
switch (cmd) {
|
||||
case SPECTRE_V2_USER_CMD_FORCE:
|
||||
case SPECTRE_V2_USER_CMD_PRCTL_IBPB:
|
||||
case SPECTRE_V2_USER_CMD_SECCOMP_IBPB:
|
||||
static_branch_enable(&switch_mm_always_ibpb);
|
||||
+ spectre_v2_user_ibpb = SPECTRE_V2_USER_STRICT;
|
||||
break;
|
||||
case SPECTRE_V2_USER_CMD_PRCTL:
|
||||
case SPECTRE_V2_USER_CMD_AUTO:
|
||||
@@ -725,8 +727,6 @@ spectre_v2_user_select_mitigation(enum spectre_v2_mitigation_cmd v2_cmd)
|
||||
pr_info("mitigation: Enabling %s Indirect Branch Prediction Barrier\n",
|
||||
static_key_enabled(&switch_mm_always_ibpb) ?
|
||||
"always-on" : "conditional");
|
||||
-
|
||||
- spectre_v2_user_ibpb = mode;
|
||||
}
|
||||
|
||||
/*
|
||||
diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c
|
||||
index 85872a08994a1..e9fc0f7df0da8 100644
|
||||
--- a/arch/x86/xen/spinlock.c
|
||||
+++ b/arch/x86/xen/spinlock.c
|
||||
@@ -301,10 +301,20 @@ void xen_init_lock_cpu(int cpu)
|
||||
|
||||
void xen_uninit_lock_cpu(int cpu)
|
||||
{
|
||||
+ int irq;
|
||||
+
|
||||
if (!xen_pvspin)
|
||||
return;
|
||||
|
||||
- unbind_from_irqhandler(per_cpu(lock_kicker_irq, cpu), NULL);
|
||||
+ /*
|
||||
+ * When booting the kernel with 'mitigations=auto,nosmt', the secondary
|
||||
+ * CPUs are not activated, and lock_kicker_irq is not initialized.
|
||||
+ */
|
||||
+ irq = per_cpu(lock_kicker_irq, cpu);
|
||||
+ if (irq == -1)
|
||||
+ return;
|
||||
+
|
||||
+ unbind_from_irqhandler(irq, NULL);
|
||||
per_cpu(lock_kicker_irq, cpu) = -1;
|
||||
kfree(per_cpu(irq_name, cpu));
|
||||
per_cpu(irq_name, cpu) = NULL;
|
||||
diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
|
||||
index 9aa57b37381a9..7f66ae1945b24 100644
|
||||
--- a/drivers/dma/pl330.c
|
||||
+++ b/drivers/dma/pl330.c
|
||||
@@ -2634,7 +2634,7 @@ pl330_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dst,
|
||||
* If burst size is smaller than bus width then make sure we only
|
||||
* transfer one at a time to avoid a burst stradling an MFIFO entry.
|
||||
*/
|
||||
- if (desc->rqcfg.brst_size * 8 < pl330->pcfg.data_bus_width)
|
||||
+ if (burst * 8 < pl330->pcfg.data_bus_width)
|
||||
desc->rqcfg.brst_len = 1;
|
||||
|
||||
desc->bytes_requested = len;
|
||||
diff --git a/drivers/hid/hid-cypress.c b/drivers/hid/hid-cypress.c
|
||||
index 1689568b597d4..12c5d7c96527a 100644
|
||||
--- a/drivers/hid/hid-cypress.c
|
||||
+++ b/drivers/hid/hid-cypress.c
|
||||
@@ -26,19 +26,17 @@
|
||||
#define CP_2WHEEL_MOUSE_HACK 0x02
|
||||
#define CP_2WHEEL_MOUSE_HACK_ON 0x04
|
||||
|
||||
+#define VA_INVAL_LOGICAL_BOUNDARY 0x08
|
||||
+
|
||||
/*
|
||||
* Some USB barcode readers from cypress have usage min and usage max in
|
||||
* the wrong order
|
||||
*/
|
||||
-static __u8 *cp_report_fixup(struct hid_device *hdev, __u8 *rdesc,
|
||||
+static __u8 *cp_rdesc_fixup(struct hid_device *hdev, __u8 *rdesc,
|
||||
unsigned int *rsize)
|
||||
{
|
||||
- unsigned long quirks = (unsigned long)hid_get_drvdata(hdev);
|
||||
unsigned int i;
|
||||
|
||||
- if (!(quirks & CP_RDESC_SWAPPED_MIN_MAX))
|
||||
- return rdesc;
|
||||
-
|
||||
if (*rsize < 4)
|
||||
return rdesc;
|
||||
|
||||
@@ -51,6 +49,40 @@ static __u8 *cp_report_fixup(struct hid_device *hdev, __u8 *rdesc,
|
||||
return rdesc;
|
||||
}
|
||||
|
||||
+static __u8 *va_logical_boundary_fixup(struct hid_device *hdev, __u8 *rdesc,
|
||||
+ unsigned int *rsize)
|
||||
+{
|
||||
+ /*
|
||||
+ * Varmilo VA104M (with VID Cypress and device ID 07B1) incorrectly
|
||||
+ * reports Logical Minimum of its Consumer Control device as 572
|
||||
+ * (0x02 0x3c). Fix this by setting its Logical Minimum to zero.
|
||||
+ */
|
||||
+ if (*rsize == 25 &&
|
||||
+ rdesc[0] == 0x05 && rdesc[1] == 0x0c &&
|
||||
+ rdesc[2] == 0x09 && rdesc[3] == 0x01 &&
|
||||
+ rdesc[6] == 0x19 && rdesc[7] == 0x00 &&
|
||||
+ rdesc[11] == 0x16 && rdesc[12] == 0x3c && rdesc[13] == 0x02) {
|
||||
+ hid_info(hdev,
|
||||
+ "fixing up varmilo VA104M consumer control report descriptor\n");
|
||||
+ rdesc[12] = 0x00;
|
||||
+ rdesc[13] = 0x00;
|
||||
+ }
|
||||
+ return rdesc;
|
||||
+}
|
||||
+
|
||||
+static __u8 *cp_report_fixup(struct hid_device *hdev, __u8 *rdesc,
|
||||
+ unsigned int *rsize)
|
||||
+{
|
||||
+ unsigned long quirks = (unsigned long)hid_get_drvdata(hdev);
|
||||
+
|
||||
+ if (quirks & CP_RDESC_SWAPPED_MIN_MAX)
|
||||
+ rdesc = cp_rdesc_fixup(hdev, rdesc, rsize);
|
||||
+ if (quirks & VA_INVAL_LOGICAL_BOUNDARY)
|
||||
+ rdesc = va_logical_boundary_fixup(hdev, rdesc, rsize);
|
||||
+
|
||||
+ return rdesc;
|
||||
+}
|
||||
+
|
||||
static int cp_input_mapped(struct hid_device *hdev, struct hid_input *hi,
|
||||
struct hid_field *field, struct hid_usage *usage,
|
||||
unsigned long **bit, int *max)
|
||||
@@ -131,6 +163,8 @@ static const struct hid_device_id cp_devices[] = {
|
||||
.driver_data = CP_RDESC_SWAPPED_MIN_MAX },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE),
|
||||
.driver_data = CP_2WHEEL_MOUSE_HACK },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_VARMILO_VA104M_07B1),
|
||||
+ .driver_data = VA_INVAL_LOGICAL_BOUNDARY },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(hid, cp_devices);
|
||||
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
|
||||
index 33d2b5948d7fc..773452c6edfab 100644
|
||||
--- a/drivers/hid/hid-ids.h
|
||||
+++ b/drivers/hid/hid-ids.h
|
||||
@@ -279,6 +279,8 @@
|
||||
#define USB_DEVICE_ID_CYPRESS_BARCODE_4 0xed81
|
||||
#define USB_DEVICE_ID_CYPRESS_TRUETOUCH 0xc001
|
||||
|
||||
+#define USB_DEVICE_ID_CYPRESS_VARMILO_VA104M_07B1 0X07b1
|
||||
+
|
||||
#define USB_VENDOR_ID_DATA_MODUL 0x7374
|
||||
#define USB_VENDOR_ID_DATA_MODUL_EASYMAXTOUCH 0x1201
|
||||
|
||||
diff --git a/drivers/hid/hid-sensor-hub.c b/drivers/hid/hid-sensor-hub.c
|
||||
index 8efaa88329aa3..83e45d5801a98 100644
|
||||
--- a/drivers/hid/hid-sensor-hub.c
|
||||
+++ b/drivers/hid/hid-sensor-hub.c
|
||||
@@ -473,7 +473,8 @@ static int sensor_hub_raw_event(struct hid_device *hdev,
|
||||
return 1;
|
||||
|
||||
ptr = raw_data;
|
||||
- ptr++; /* Skip report id */
|
||||
+ if (report->id)
|
||||
+ ptr++; /* Skip report id */
|
||||
|
||||
spin_lock_irqsave(&pdata->lock, flags);
|
||||
|
||||
diff --git a/drivers/infiniband/hw/mthca/mthca_cq.c b/drivers/infiniband/hw/mthca/mthca_cq.c
|
||||
index 40ba833381557..59e1f6ea2ede9 100644
|
||||
--- a/drivers/infiniband/hw/mthca/mthca_cq.c
|
||||
+++ b/drivers/infiniband/hw/mthca/mthca_cq.c
|
||||
@@ -811,8 +811,10 @@ int mthca_init_cq(struct mthca_dev *dev, int nent,
|
||||
}
|
||||
|
||||
mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL);
|
||||
- if (IS_ERR(mailbox))
|
||||
+ if (IS_ERR(mailbox)) {
|
||||
+ err = PTR_ERR(mailbox);
|
||||
goto err_out_arm;
|
||||
+ }
|
||||
|
||||
cq_context = mailbox->buf;
|
||||
|
||||
@@ -854,9 +856,9 @@ int mthca_init_cq(struct mthca_dev *dev, int nent,
|
||||
}
|
||||
|
||||
spin_lock_irq(&dev->cq_table.lock);
|
||||
- if (mthca_array_set(&dev->cq_table.cq,
|
||||
- cq->cqn & (dev->limits.num_cqs - 1),
|
||||
- cq)) {
|
||||
+ err = mthca_array_set(&dev->cq_table.cq,
|
||||
+ cq->cqn & (dev->limits.num_cqs - 1), cq);
|
||||
+ if (err) {
|
||||
spin_unlock_irq(&dev->cq_table.lock);
|
||||
goto err_out_free_mr;
|
||||
}
|
||||
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
|
||||
index c84c685056b99..6b648339733fa 100644
|
||||
--- a/drivers/input/serio/i8042.c
|
||||
+++ b/drivers/input/serio/i8042.c
|
||||
@@ -125,6 +125,7 @@ module_param_named(unmask_kbd_data, i8042_unmask_kbd_data, bool, 0600);
|
||||
MODULE_PARM_DESC(unmask_kbd_data, "Unconditional enable (may reveal sensitive data) of normally sanitize-filtered kbd data traffic debug log [pre-condition: i8042.debug=1 enabled]");
|
||||
#endif
|
||||
|
||||
+static bool i8042_present;
|
||||
static bool i8042_bypass_aux_irq_test;
|
||||
static char i8042_kbd_firmware_id[128];
|
||||
static char i8042_aux_firmware_id[128];
|
||||
@@ -343,6 +344,9 @@ int i8042_command(unsigned char *param, int command)
|
||||
unsigned long flags;
|
||||
int retval;
|
||||
|
||||
+ if (!i8042_present)
|
||||
+ return -1;
|
||||
+
|
||||
spin_lock_irqsave(&i8042_lock, flags);
|
||||
retval = __i8042_command(param, command);
|
||||
spin_unlock_irqrestore(&i8042_lock, flags);
|
||||
@@ -1597,12 +1601,15 @@ static int __init i8042_init(void)
|
||||
|
||||
err = i8042_platform_init();
|
||||
if (err)
|
||||
- return err;
|
||||
+ return (err == -ENODEV) ? 0 : err;
|
||||
|
||||
err = i8042_controller_check();
|
||||
if (err)
|
||||
goto err_platform_exit;
|
||||
|
||||
+ /* Set this before creating the dev to allow i8042_command to work right away */
|
||||
+ i8042_present = true;
|
||||
+
|
||||
pdev = platform_create_bundle(&i8042_driver, i8042_probe, NULL, 0, NULL, 0);
|
||||
if (IS_ERR(pdev)) {
|
||||
err = PTR_ERR(pdev);
|
||||
@@ -1621,6 +1628,9 @@ static int __init i8042_init(void)
|
||||
|
||||
static void __exit i8042_exit(void)
|
||||
{
|
||||
+ if (!i8042_present)
|
||||
+ return;
|
||||
+
|
||||
platform_device_unregister(i8042_platform_device);
|
||||
platform_driver_unregister(&i8042_driver);
|
||||
i8042_platform_exit();
|
||||
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
index 2da1c22946450..250ecbcca019f 100644
|
||||
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
@@ -5198,7 +5198,8 @@ static int bnxt_init_board(struct pci_dev *pdev, struct net_device *dev)
|
||||
if (dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)) != 0 &&
|
||||
dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)) != 0) {
|
||||
dev_err(&pdev->dev, "System does not support DMA, aborting\n");
|
||||
- goto init_err_disable;
|
||||
+ rc = -EIO;
|
||||
+ goto init_err_release;
|
||||
}
|
||||
|
||||
pci_set_master(pdev);
|
||||
diff --git a/drivers/nfc/s3fwrn5/i2c.c b/drivers/nfc/s3fwrn5/i2c.c
|
||||
index c61d8a308da45..779f7a76ecd3d 100644
|
||||
--- a/drivers/nfc/s3fwrn5/i2c.c
|
||||
+++ b/drivers/nfc/s3fwrn5/i2c.c
|
||||
@@ -37,8 +37,8 @@ struct s3fwrn5_i2c_phy {
|
||||
struct i2c_client *i2c_dev;
|
||||
struct nci_dev *ndev;
|
||||
|
||||
- unsigned int gpio_en;
|
||||
- unsigned int gpio_fw_wake;
|
||||
+ int gpio_en;
|
||||
+ int gpio_fw_wake;
|
||||
|
||||
struct mutex mutex;
|
||||
|
||||
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
|
||||
index b4fbcf4cade8f..36e415487fe53 100644
|
||||
--- a/drivers/scsi/libiscsi.c
|
||||
+++ b/drivers/scsi/libiscsi.c
|
||||
@@ -570,8 +570,8 @@ static void iscsi_complete_task(struct iscsi_task *task, int state)
|
||||
if (conn->task == task)
|
||||
conn->task = NULL;
|
||||
|
||||
- if (conn->ping_task == task)
|
||||
- conn->ping_task = NULL;
|
||||
+ if (READ_ONCE(conn->ping_task) == task)
|
||||
+ WRITE_ONCE(conn->ping_task, NULL);
|
||||
|
||||
/* release get from queueing */
|
||||
__iscsi_put_task(task);
|
||||
@@ -780,6 +780,9 @@ __iscsi_conn_send_pdu(struct iscsi_conn *conn, struct iscsi_hdr *hdr,
|
||||
task->conn->session->age);
|
||||
}
|
||||
|
||||
+ if (unlikely(READ_ONCE(conn->ping_task) == INVALID_SCSI_TASK))
|
||||
+ WRITE_ONCE(conn->ping_task, task);
|
||||
+
|
||||
if (!ihost->workq) {
|
||||
if (iscsi_prep_mgmt_task(conn, task))
|
||||
goto free_task;
|
||||
@@ -987,8 +990,11 @@ static int iscsi_send_nopout(struct iscsi_conn *conn, struct iscsi_nopin *rhdr)
|
||||
struct iscsi_nopout hdr;
|
||||
struct iscsi_task *task;
|
||||
|
||||
- if (!rhdr && conn->ping_task)
|
||||
- return -EINVAL;
|
||||
+ if (!rhdr) {
|
||||
+ if (READ_ONCE(conn->ping_task))
|
||||
+ return -EINVAL;
|
||||
+ WRITE_ONCE(conn->ping_task, INVALID_SCSI_TASK);
|
||||
+ }
|
||||
|
||||
memset(&hdr, 0, sizeof(struct iscsi_nopout));
|
||||
hdr.opcode = ISCSI_OP_NOOP_OUT | ISCSI_OP_IMMEDIATE;
|
||||
@@ -1003,11 +1009,12 @@ static int iscsi_send_nopout(struct iscsi_conn *conn, struct iscsi_nopin *rhdr)
|
||||
|
||||
task = __iscsi_conn_send_pdu(conn, (struct iscsi_hdr *)&hdr, NULL, 0);
|
||||
if (!task) {
|
||||
+ if (!rhdr)
|
||||
+ WRITE_ONCE(conn->ping_task, NULL);
|
||||
iscsi_conn_printk(KERN_ERR, conn, "Could not send nopout\n");
|
||||
return -EIO;
|
||||
} else if (!rhdr) {
|
||||
/* only track our nops */
|
||||
- conn->ping_task = task;
|
||||
conn->last_ping = jiffies;
|
||||
}
|
||||
|
||||
@@ -1020,7 +1027,7 @@ static int iscsi_nop_out_rsp(struct iscsi_task *task,
|
||||
struct iscsi_conn *conn = task->conn;
|
||||
int rc = 0;
|
||||
|
||||
- if (conn->ping_task != task) {
|
||||
+ if (READ_ONCE(conn->ping_task) != task) {
|
||||
/*
|
||||
* If this is not in response to one of our
|
||||
* nops then it must be from userspace.
|
||||
@@ -1960,7 +1967,7 @@ static void iscsi_start_tx(struct iscsi_conn *conn)
|
||||
*/
|
||||
static int iscsi_has_ping_timed_out(struct iscsi_conn *conn)
|
||||
{
|
||||
- if (conn->ping_task &&
|
||||
+ if (READ_ONCE(conn->ping_task) &&
|
||||
time_before_eq(conn->last_recv + (conn->recv_timeout * HZ) +
|
||||
(conn->ping_timeout * HZ), jiffies))
|
||||
return 1;
|
||||
@@ -2095,7 +2102,7 @@ static enum blk_eh_timer_return iscsi_eh_cmd_timed_out(struct scsi_cmnd *sc)
|
||||
* Checking the transport already or nop from a cmd timeout still
|
||||
* running
|
||||
*/
|
||||
- if (conn->ping_task) {
|
||||
+ if (READ_ONCE(conn->ping_task)) {
|
||||
task->have_checked_conn = true;
|
||||
rc = BLK_EH_RESET_TIMER;
|
||||
goto done;
|
||||
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
|
||||
index d7a0a64f64536..e37f6db0dd156 100644
|
||||
--- a/drivers/scsi/ufs/ufshcd.c
|
||||
+++ b/drivers/scsi/ufs/ufshcd.c
|
||||
@@ -5387,11 +5387,7 @@ int ufshcd_shutdown(struct ufs_hba *hba)
|
||||
if (ufshcd_is_ufs_dev_poweroff(hba) && ufshcd_is_link_off(hba))
|
||||
goto out;
|
||||
|
||||
- if (pm_runtime_suspended(hba->dev)) {
|
||||
- ret = ufshcd_runtime_resume(hba);
|
||||
- if (ret)
|
||||
- goto out;
|
||||
- }
|
||||
+ pm_runtime_get_sync(hba->dev);
|
||||
|
||||
ret = ufshcd_suspend(hba, UFS_SHUTDOWN_PM);
|
||||
out:
|
||||
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
|
||||
index cbb4414edd71b..c48aca1360c89 100644
|
||||
--- a/drivers/target/iscsi/iscsi_target.c
|
||||
+++ b/drivers/target/iscsi/iscsi_target.c
|
||||
@@ -493,8 +493,7 @@ static void iscsit_aborted_task(struct iscsi_conn *conn, struct iscsi_cmd *cmd)
|
||||
bool scsi_cmd = (cmd->iscsi_opcode == ISCSI_OP_SCSI_CMD);
|
||||
|
||||
spin_lock_bh(&conn->cmd_lock);
|
||||
- if (!list_empty(&cmd->i_conn_node) &&
|
||||
- !(cmd->se_cmd.transport_state & CMD_T_FABRIC_STOP))
|
||||
+ if (!list_empty(&cmd->i_conn_node))
|
||||
list_del_init(&cmd->i_conn_node);
|
||||
spin_unlock_bh(&conn->cmd_lock);
|
||||
|
||||
@@ -4228,12 +4227,22 @@ static void iscsit_release_commands_from_conn(struct iscsi_conn *conn)
|
||||
spin_lock_bh(&conn->cmd_lock);
|
||||
list_splice_init(&conn->conn_cmd_list, &tmp_list);
|
||||
|
||||
- list_for_each_entry(cmd, &tmp_list, i_conn_node) {
|
||||
+ list_for_each_entry_safe(cmd, cmd_tmp, &tmp_list, i_conn_node) {
|
||||
struct se_cmd *se_cmd = &cmd->se_cmd;
|
||||
|
||||
if (se_cmd->se_tfo != NULL) {
|
||||
spin_lock_irq(&se_cmd->t_state_lock);
|
||||
- se_cmd->transport_state |= CMD_T_FABRIC_STOP;
|
||||
+ if (se_cmd->transport_state & CMD_T_ABORTED) {
|
||||
+ /*
|
||||
+ * LIO's abort path owns the cleanup for this,
|
||||
+ * so put it back on the list and let
|
||||
+ * aborted_task handle it.
|
||||
+ */
|
||||
+ list_move_tail(&cmd->i_conn_node,
|
||||
+ &conn->conn_cmd_list);
|
||||
+ } else {
|
||||
+ se_cmd->transport_state |= CMD_T_FABRIC_STOP;
|
||||
+ }
|
||||
spin_unlock_irq(&se_cmd->t_state_lock);
|
||||
}
|
||||
}
|
||||
diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c
|
||||
index 570a76d912503..eca8d04cfb3ec 100644
|
||||
--- a/drivers/usb/core/config.c
|
||||
+++ b/drivers/usb/core/config.c
|
||||
@@ -222,6 +222,7 @@ static int usb_parse_endpoint(struct device *ddev, int cfgno,
|
||||
struct usb_host_interface *ifp, int num_ep,
|
||||
unsigned char *buffer, int size)
|
||||
{
|
||||
+ struct usb_device *udev = to_usb_device(ddev);
|
||||
unsigned char *buffer0 = buffer;
|
||||
struct usb_endpoint_descriptor *d;
|
||||
struct usb_host_endpoint *endpoint;
|
||||
@@ -263,6 +264,16 @@ static int usb_parse_endpoint(struct device *ddev, int cfgno,
|
||||
goto skip_to_next_endpoint_or_interface_descriptor;
|
||||
}
|
||||
|
||||
+ /* Ignore blacklisted endpoints */
|
||||
+ if (udev->quirks & USB_QUIRK_ENDPOINT_BLACKLIST) {
|
||||
+ if (usb_endpoint_is_blacklisted(udev, ifp, d)) {
|
||||
+ dev_warn(ddev, "config %d interface %d altsetting %d has a blacklisted endpoint with address 0x%X, skipping\n",
|
||||
+ cfgno, inum, asnum,
|
||||
+ d->bEndpointAddress);
|
||||
+ goto skip_to_next_endpoint_or_interface_descriptor;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
endpoint = &ifp->endpoint[ifp->desc.bNumEndpoints];
|
||||
++ifp->desc.bNumEndpoints;
|
||||
|
||||
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
|
||||
index 7559d96695da6..4c1679cc57425 100644
|
||||
--- a/drivers/usb/core/devio.c
|
||||
+++ b/drivers/usb/core/devio.c
|
||||
@@ -369,11 +369,11 @@ static void snoop_urb(struct usb_device *udev,
|
||||
|
||||
if (userurb) { /* Async */
|
||||
if (when == SUBMIT)
|
||||
- dev_info(&udev->dev, "userurb %pK, ep%d %s-%s, "
|
||||
+ dev_info(&udev->dev, "userurb %px, ep%d %s-%s, "
|
||||
"length %u\n",
|
||||
userurb, ep, t, d, length);
|
||||
else
|
||||
- dev_info(&udev->dev, "userurb %pK, ep%d %s-%s, "
|
||||
+ dev_info(&udev->dev, "userurb %px, ep%d %s-%s, "
|
||||
"actual_length %u status %d\n",
|
||||
userurb, ep, t, d, length,
|
||||
timeout_or_status);
|
||||
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
|
||||
index ca74b67c4450d..34d8cece6dd3b 100644
|
||||
--- a/drivers/usb/core/quirks.c
|
||||
+++ b/drivers/usb/core/quirks.c
|
||||
@@ -195,6 +195,10 @@ static const struct usb_device_id usb_quirk_list[] = {
|
||||
/* Guillemot Webcam Hercules Dualpix Exchange*/
|
||||
{ USB_DEVICE(0x06f8, 0x3005), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||
|
||||
+ /* Guillemot Hercules DJ Console audio card (BZ 208357) */
|
||||
+ { USB_DEVICE(0x06f8, 0xb000), .driver_info =
|
||||
+ USB_QUIRK_ENDPOINT_BLACKLIST },
|
||||
+
|
||||
/* Midiman M-Audio Keystation 88es */
|
||||
{ USB_DEVICE(0x0763, 0x0192), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||
|
||||
@@ -344,6 +348,40 @@ static const struct usb_device_id usb_amd_resume_quirk_list[] = {
|
||||
{ } /* terminating entry must be last */
|
||||
};
|
||||
|
||||
+/*
|
||||
+ * Entries for blacklisted endpoints that should be ignored when parsing
|
||||
+ * configuration descriptors.
|
||||
+ *
|
||||
+ * Matched for devices with USB_QUIRK_ENDPOINT_BLACKLIST.
|
||||
+ */
|
||||
+static const struct usb_device_id usb_endpoint_blacklist[] = {
|
||||
+ { USB_DEVICE_INTERFACE_NUMBER(0x06f8, 0xb000, 5), .driver_info = 0x01 },
|
||||
+ { USB_DEVICE_INTERFACE_NUMBER(0x06f8, 0xb000, 5), .driver_info = 0x81 },
|
||||
+ { }
|
||||
+};
|
||||
+
|
||||
+bool usb_endpoint_is_blacklisted(struct usb_device *udev,
|
||||
+ struct usb_host_interface *intf,
|
||||
+ struct usb_endpoint_descriptor *epd)
|
||||
+{
|
||||
+ const struct usb_device_id *id;
|
||||
+ unsigned int address;
|
||||
+
|
||||
+ for (id = usb_endpoint_blacklist; id->match_flags; ++id) {
|
||||
+ if (!usb_match_device(udev, id))
|
||||
+ continue;
|
||||
+
|
||||
+ if (!usb_match_one_id_intf(udev, intf, id))
|
||||
+ continue;
|
||||
+
|
||||
+ address = id->driver_info;
|
||||
+ if (address == epd->bEndpointAddress)
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
static bool usb_match_any_interface(struct usb_device *udev,
|
||||
const struct usb_device_id *id)
|
||||
{
|
||||
diff --git a/drivers/usb/core/usb.h b/drivers/usb/core/usb.h
|
||||
index 6b2f115442838..462a00c749b87 100644
|
||||
--- a/drivers/usb/core/usb.h
|
||||
+++ b/drivers/usb/core/usb.h
|
||||
@@ -31,6 +31,9 @@ extern void usb_deauthorize_interface(struct usb_interface *);
|
||||
extern void usb_authorize_interface(struct usb_interface *);
|
||||
extern void usb_detect_quirks(struct usb_device *udev);
|
||||
extern void usb_detect_interface_quirks(struct usb_device *udev);
|
||||
+extern bool usb_endpoint_is_blacklisted(struct usb_device *udev,
|
||||
+ struct usb_host_interface *intf,
|
||||
+ struct usb_endpoint_descriptor *epd);
|
||||
extern int usb_remove_device(struct usb_device *udev);
|
||||
|
||||
extern int usb_get_device_descriptor(struct usb_device *dev,
|
||||
diff --git a/drivers/video/fbdev/hyperv_fb.c b/drivers/video/fbdev/hyperv_fb.c
|
||||
index e2451bdb4525d..299412abb1658 100644
|
||||
--- a/drivers/video/fbdev/hyperv_fb.c
|
||||
+++ b/drivers/video/fbdev/hyperv_fb.c
|
||||
@@ -712,7 +712,12 @@ static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info)
|
||||
goto err1;
|
||||
}
|
||||
|
||||
- fb_virt = ioremap(par->mem->start, screen_fb_size);
|
||||
+ /*
|
||||
+ * Map the VRAM cacheable for performance. This is also required for
|
||||
+ * VM Connect to display properly for ARM64 Linux VM, as the host also
|
||||
+ * maps the VRAM cacheable.
|
||||
+ */
|
||||
+ fb_virt = ioremap_cache(par->mem->start, screen_fb_size);
|
||||
if (!fb_virt)
|
||||
goto err2;
|
||||
|
||||
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
|
||||
index b1125778b9080..9e1f9910bdf2d 100644
|
||||
--- a/fs/btrfs/inode.c
|
||||
+++ b/fs/btrfs/inode.c
|
||||
@@ -5370,11 +5370,13 @@ no_delete:
|
||||
}
|
||||
|
||||
/*
|
||||
- * this returns the key found in the dir entry in the location pointer.
|
||||
+ * Return the key found in the dir entry in the location pointer, fill @type
|
||||
+ * with BTRFS_FT_*, and return 0.
|
||||
+ *
|
||||
* If no dir entries were found, location->objectid is 0.
|
||||
*/
|
||||
static int btrfs_inode_by_name(struct inode *dir, struct dentry *dentry,
|
||||
- struct btrfs_key *location)
|
||||
+ struct btrfs_key *location, u8 *type)
|
||||
{
|
||||
const char *name = dentry->d_name.name;
|
||||
int namelen = dentry->d_name.len;
|
||||
@@ -5396,6 +5398,8 @@ static int btrfs_inode_by_name(struct inode *dir, struct dentry *dentry,
|
||||
goto out_err;
|
||||
|
||||
btrfs_dir_item_key_to_cpu(path->nodes[0], di, location);
|
||||
+ if (!ret)
|
||||
+ *type = btrfs_dir_type(path->nodes[0], di);
|
||||
out:
|
||||
btrfs_free_path(path);
|
||||
return ret;
|
||||
@@ -5681,19 +5685,25 @@ static struct inode *new_simple_dir(struct super_block *s,
|
||||
return inode;
|
||||
}
|
||||
|
||||
+static inline u8 btrfs_inode_type(struct inode *inode)
|
||||
+{
|
||||
+ return btrfs_type_by_mode[(inode->i_mode & S_IFMT) >> S_SHIFT];
|
||||
+}
|
||||
+
|
||||
struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry)
|
||||
{
|
||||
struct inode *inode;
|
||||
struct btrfs_root *root = BTRFS_I(dir)->root;
|
||||
struct btrfs_root *sub_root = root;
|
||||
struct btrfs_key location;
|
||||
+ u8 di_type = 0;
|
||||
int index;
|
||||
int ret = 0;
|
||||
|
||||
if (dentry->d_name.len > BTRFS_NAME_LEN)
|
||||
return ERR_PTR(-ENAMETOOLONG);
|
||||
|
||||
- ret = btrfs_inode_by_name(dir, dentry, &location);
|
||||
+ ret = btrfs_inode_by_name(dir, dentry, &location, &di_type);
|
||||
if (ret < 0)
|
||||
return ERR_PTR(ret);
|
||||
|
||||
@@ -5702,6 +5712,18 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry)
|
||||
|
||||
if (location.type == BTRFS_INODE_ITEM_KEY) {
|
||||
inode = btrfs_iget(dir->i_sb, &location, root, NULL);
|
||||
+ if (IS_ERR(inode))
|
||||
+ return inode;
|
||||
+
|
||||
+ /* Do extra check against inode mode with di_type */
|
||||
+ if (btrfs_inode_type(inode) != di_type) {
|
||||
+ btrfs_crit(root->fs_info,
|
||||
+"inode mode mismatch with dir: inode mode=0%o btrfs type=%u dir type=%u",
|
||||
+ inode->i_mode, btrfs_inode_type(inode),
|
||||
+ di_type);
|
||||
+ iput(inode);
|
||||
+ return ERR_PTR(-EUCLEAN);
|
||||
+ }
|
||||
return inode;
|
||||
}
|
||||
|
||||
@@ -6315,11 +6337,6 @@ fail:
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
-static inline u8 btrfs_inode_type(struct inode *inode)
|
||||
-{
|
||||
- return btrfs_type_by_mode[(inode->i_mode & S_IFMT) >> S_SHIFT];
|
||||
-}
|
||||
-
|
||||
/*
|
||||
* utility function to add 'inode' into 'parent_inode' with
|
||||
* a give name and a given sequence number.
|
||||
@@ -6904,6 +6921,14 @@ again:
|
||||
extent_start = found_key.offset;
|
||||
if (found_type == BTRFS_FILE_EXTENT_REG ||
|
||||
found_type == BTRFS_FILE_EXTENT_PREALLOC) {
|
||||
+ /* Only regular file could have regular/prealloc extent */
|
||||
+ if (!S_ISREG(inode->i_mode)) {
|
||||
+ ret = -EUCLEAN;
|
||||
+ btrfs_crit(root->fs_info,
|
||||
+ "regular/prealloc extent found for non-regular inode %llu",
|
||||
+ btrfs_ino(inode));
|
||||
+ goto out;
|
||||
+ }
|
||||
extent_end = extent_start +
|
||||
btrfs_file_extent_num_bytes(leaf, item);
|
||||
} else if (found_type == BTRFS_FILE_EXTENT_INLINE) {
|
||||
diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
|
||||
index 734babb6626c4..18e667fbd054d 100644
|
||||
--- a/fs/btrfs/qgroup.c
|
||||
+++ b/fs/btrfs/qgroup.c
|
||||
@@ -462,6 +462,7 @@ next2:
|
||||
break;
|
||||
}
|
||||
out:
|
||||
+ btrfs_free_path(path);
|
||||
fs_info->qgroup_flags |= flags;
|
||||
if (!(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_ON)) {
|
||||
fs_info->quota_enabled = 0;
|
||||
@@ -470,7 +471,6 @@ out:
|
||||
ret >= 0) {
|
||||
ret = qgroup_rescan_init(fs_info, rescan_progress, 0);
|
||||
}
|
||||
- btrfs_free_path(path);
|
||||
|
||||
if (ret < 0) {
|
||||
ulist_free(fs_info->qgroup_ulist);
|
||||
diff --git a/fs/btrfs/tests/inode-tests.c b/fs/btrfs/tests/inode-tests.c
|
||||
index 054fc0d97131b..5ff676df698f0 100644
|
||||
--- a/fs/btrfs/tests/inode-tests.c
|
||||
+++ b/fs/btrfs/tests/inode-tests.c
|
||||
@@ -235,6 +235,7 @@ static noinline int test_btrfs_get_extent(void)
|
||||
return ret;
|
||||
}
|
||||
|
||||
+ inode->i_mode = S_IFREG;
|
||||
BTRFS_I(inode)->location.type = BTRFS_INODE_ITEM_KEY;
|
||||
BTRFS_I(inode)->location.objectid = BTRFS_FIRST_FREE_OBJECTID;
|
||||
BTRFS_I(inode)->location.offset = 0;
|
||||
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
|
||||
index 2d10b818399b1..cd1e9411f9269 100644
|
||||
--- a/fs/btrfs/volumes.c
|
||||
+++ b/fs/btrfs/volumes.c
|
||||
@@ -6262,6 +6262,13 @@ static int btrfs_check_chunk_valid(struct btrfs_root *root,
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
+ if (!is_power_of_2(type & BTRFS_BLOCK_GROUP_PROFILE_MASK) &&
|
||||
+ (type & BTRFS_BLOCK_GROUP_PROFILE_MASK) != 0) {
|
||||
+ btrfs_err(root->fs_info,
|
||||
+ "invalid chunk profile flag: 0x%llx, expect 0 or 1 bit set",
|
||||
+ type & BTRFS_BLOCK_GROUP_PROFILE_MASK);
|
||||
+ return -EUCLEAN;
|
||||
+ }
|
||||
if ((type & BTRFS_BLOCK_GROUP_TYPE_MASK) == 0) {
|
||||
btrfs_err(root->fs_info, "missing chunk type flag: 0x%llx", type);
|
||||
return -EIO;
|
||||
diff --git a/fs/efivarfs/inode.c b/fs/efivarfs/inode.c
|
||||
index e2ab6d0497f2b..151884b95ee2f 100644
|
||||
--- a/fs/efivarfs/inode.c
|
||||
+++ b/fs/efivarfs/inode.c
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <linux/efi.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/ctype.h>
|
||||
+#include <linux/kmemleak.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include "internal.h"
|
||||
@@ -138,6 +139,7 @@ static int efivarfs_create(struct inode *dir, struct dentry *dentry,
|
||||
var->var.VariableName[i] = '\0';
|
||||
|
||||
inode->i_private = var;
|
||||
+ kmemleak_ignore(var);
|
||||
|
||||
efivar_entry_add(var, &efivarfs_list);
|
||||
d_instantiate(dentry, inode);
|
||||
diff --git a/fs/efivarfs/super.c b/fs/efivarfs/super.c
|
||||
index 0e4f20377d196..fca235020312d 100644
|
||||
--- a/fs/efivarfs/super.c
|
||||
+++ b/fs/efivarfs/super.c
|
||||
@@ -23,7 +23,6 @@ LIST_HEAD(efivarfs_list);
|
||||
static void efivarfs_evict_inode(struct inode *inode)
|
||||
{
|
||||
clear_inode(inode);
|
||||
- kfree(inode->i_private);
|
||||
}
|
||||
|
||||
static const struct super_operations efivarfs_ops = {
|
||||
diff --git a/fs/proc/self.c b/fs/proc/self.c
|
||||
index 2dcc2558b3aa7..dffbe533d53fc 100644
|
||||
--- a/fs/proc/self.c
|
||||
+++ b/fs/proc/self.c
|
||||
@@ -24,6 +24,13 @@ static const char *proc_self_follow_link(struct dentry *dentry, void **cookie)
|
||||
pid_t tgid = task_tgid_nr_ns(current, ns);
|
||||
char *name;
|
||||
|
||||
+ /*
|
||||
+ * Not currently supported. Once we can inherit all of struct pid,
|
||||
+ * we can allow this.
|
||||
+ */
|
||||
+ if (current->flags & PF_KTHREAD)
|
||||
+ return ERR_PTR(-EOPNOTSUPP);
|
||||
+
|
||||
if (!tgid)
|
||||
return ERR_PTR(-ENOENT);
|
||||
/* 11 for max length of signed int in decimal + NULL term */
|
||||
diff --git a/include/linux/usb/quirks.h b/include/linux/usb/quirks.h
|
||||
index ea4f81c2a6d5e..602dff213bae1 100644
|
||||
--- a/include/linux/usb/quirks.h
|
||||
+++ b/include/linux/usb/quirks.h
|
||||
@@ -59,4 +59,7 @@
|
||||
/* Device needs a pause after every control message. */
|
||||
#define USB_QUIRK_DELAY_CTRL_MSG BIT(13)
|
||||
|
||||
+/* device has blacklisted endpoints */
|
||||
+#define USB_QUIRK_ENDPOINT_BLACKLIST BIT(15)
|
||||
+
|
||||
#endif /* __LINUX_USB_QUIRKS_H */
|
||||
diff --git a/include/scsi/libiscsi.h b/include/scsi/libiscsi.h
|
||||
index c7b1dc713cdd7..9c7f4aad6db66 100644
|
||||
--- a/include/scsi/libiscsi.h
|
||||
+++ b/include/scsi/libiscsi.h
|
||||
@@ -144,6 +144,9 @@ struct iscsi_task {
|
||||
void *dd_data; /* driver/transport data */
|
||||
};
|
||||
|
||||
+/* invalid scsi_task pointer */
|
||||
+#define INVALID_SCSI_TASK (struct iscsi_task *)-1l
|
||||
+
|
||||
static inline int iscsi_task_has_unsol_data(struct iscsi_task *task)
|
||||
{
|
||||
return task->unsol_r2t.data_length > task->unsol_r2t.sent;
|
||||
diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c
|
||||
index fd460aca36e55..40e4c933b3728 100644
|
||||
--- a/tools/perf/util/dwarf-aux.c
|
||||
+++ b/tools/perf/util/dwarf-aux.c
|
||||
@@ -305,6 +305,7 @@ bool die_is_func_def(Dwarf_Die *dw_die)
|
||||
int die_entrypc(Dwarf_Die *dw_die, Dwarf_Addr *addr)
|
||||
{
|
||||
Dwarf_Addr base, end;
|
||||
+ Dwarf_Attribute attr;
|
||||
|
||||
if (!addr)
|
||||
return -EINVAL;
|
||||
@@ -312,6 +313,13 @@ int die_entrypc(Dwarf_Die *dw_die, Dwarf_Addr *addr)
|
||||
if (dwarf_entrypc(dw_die, addr) == 0)
|
||||
return 0;
|
||||
|
||||
+ /*
|
||||
+ * Since the dwarf_ranges() will return 0 if there is no
|
||||
+ * DW_AT_ranges attribute, we should check it first.
|
||||
+ */
|
||||
+ if (!dwarf_attr(dw_die, DW_AT_ranges, &attr))
|
||||
+ return -ENOENT;
|
||||
+
|
||||
return dwarf_ranges(dw_die, 0, &base, addr, &end) < 0 ? -ENOENT : 0;
|
||||
}
|
||||
|
Loading…
Add table
Reference in a new issue