mirror of
https://github.com/Fishwaldo/build.git
synced 2025-03-18 12:51:40 +00:00
Disable excessive debugging on Tinkerboard WiFi, added RTL8188EU driver, upstream patches and kernel config updates
This commit is contained in:
parent
c027d84627
commit
d40ee81f9d
9 changed files with 332363 additions and 5 deletions
|
@ -1,6 +1,6 @@
|
|||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm 4.4.115 Kernel Configuration
|
||||
# Linux/arm 4.4.119 Kernel Configuration
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_ARM_HAS_SG_CHAIN=y
|
||||
|
@ -1316,6 +1316,7 @@ CONFIG_RFKILL_LEDS=y
|
|||
# CONFIG_CEPH_LIB is not set
|
||||
# CONFIG_NFC is not set
|
||||
# CONFIG_LWTUNNEL is not set
|
||||
CONFIG_DST_CACHE=y
|
||||
CONFIG_HAVE_BPF_JIT=y
|
||||
|
||||
#
|
||||
|
@ -1798,6 +1799,7 @@ CONFIG_ATH10K=m
|
|||
# CONFIG_ATH10K_TRACING is not set
|
||||
CONFIG_WCN36XX=m
|
||||
# CONFIG_WCN36XX_DEBUGFS is not set
|
||||
CONFIG_RTL8188EU=m
|
||||
# CONFIG_B43 is not set
|
||||
# CONFIG_B43LEGACY is not set
|
||||
# CONFIG_BRCMSMAC is not set
|
||||
|
@ -1842,7 +1844,6 @@ CONFIG_WIFI_BUILD_MODULE=y
|
|||
# CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP is not set
|
||||
# CONFIG_AP6XXX is not set
|
||||
CONFIG_RTL_WIRELESS_SOLUTION=y
|
||||
# CONFIG_RTL8188EU is not set
|
||||
# CONFIG_RTL8188FU is not set
|
||||
# CONFIG_RTL8189ES is not set
|
||||
# CONFIG_RTL8189FS is not set
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/arm 4.14.15 Kernel Configuration
|
||||
# Linux/arm 4.14.23 Kernel Configuration
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_ARM_HAS_SG_CHAIN=y
|
||||
|
@ -1902,6 +1902,8 @@ CONFIG_LIBERTAS_THINFIRM_USB=m
|
|||
CONFIG_MWIFIEX=y
|
||||
CONFIG_MWIFIEX_SDIO=y
|
||||
CONFIG_MWIFIEX_USB=m
|
||||
CONFIG_RTL8812AU=m
|
||||
CONFIG_RTL8814AU=m
|
||||
CONFIG_WLAN_VENDOR_MEDIATEK=y
|
||||
CONFIG_MT7601U=m
|
||||
CONFIG_WLAN_VENDOR_RALINK=y
|
||||
|
@ -1948,8 +1950,6 @@ CONFIG_USB_ZD1201=m
|
|||
CONFIG_ZD1211RW=m
|
||||
# CONFIG_ZD1211RW_DEBUG is not set
|
||||
CONFIG_WLAN_VENDOR_QUANTENNA=y
|
||||
CONFIG_RTL8812AU=m
|
||||
CONFIG_RTL8814AU=m
|
||||
# CONFIG_MAC80211_HWSIM is not set
|
||||
CONFIG_USB_NET_RNDIS_WLAN=y
|
||||
|
||||
|
@ -5324,6 +5324,7 @@ CONFIG_CRYPTO_RNG_DEFAULT=y
|
|||
CONFIG_CRYPTO_AKCIPHER2=y
|
||||
CONFIG_CRYPTO_AKCIPHER=y
|
||||
CONFIG_CRYPTO_KPP2=y
|
||||
CONFIG_CRYPTO_KPP=y
|
||||
CONFIG_CRYPTO_ACOMP2=y
|
||||
# CONFIG_CRYPTO_RSA is not set
|
||||
# CONFIG_CRYPTO_DH is not set
|
||||
|
|
5309
patch/kernel/rockchip-default/04-patch-4.4.115-116.patch
Normal file
5309
patch/kernel/rockchip-default/04-patch-4.4.115-116.patch
Normal file
File diff suppressed because it is too large
Load diff
929
patch/kernel/rockchip-default/04-patch-4.4.116-117.patch
Normal file
929
patch/kernel/rockchip-default/04-patch-4.4.116-117.patch
Normal file
|
@ -0,0 +1,929 @@
|
|||
diff --git a/Documentation/devicetree/bindings/dma/snps-dma.txt b/Documentation/devicetree/bindings/dma/snps-dma.txt
|
||||
index c261598164a7..17d43ca27f41 100644
|
||||
--- a/Documentation/devicetree/bindings/dma/snps-dma.txt
|
||||
+++ b/Documentation/devicetree/bindings/dma/snps-dma.txt
|
||||
@@ -58,6 +58,6 @@ Example:
|
||||
interrupts = <0 35 0x4>;
|
||||
status = "disabled";
|
||||
dmas = <&dmahost 12 0 1>,
|
||||
- <&dmahost 13 0 1 0>;
|
||||
+ <&dmahost 13 1 0>;
|
||||
dma-names = "rx", "rx";
|
||||
};
|
||||
diff --git a/Documentation/filesystems/ext4.txt b/Documentation/filesystems/ext4.txt
|
||||
index 6c0108eb0137..2139ea253142 100644
|
||||
--- a/Documentation/filesystems/ext4.txt
|
||||
+++ b/Documentation/filesystems/ext4.txt
|
||||
@@ -233,7 +233,7 @@ data_err=ignore(*) Just print an error message if an error occurs
|
||||
data_err=abort Abort the journal if an error occurs in a file
|
||||
data buffer in ordered mode.
|
||||
|
||||
-grpid Give objects the same group ID as their creator.
|
||||
+grpid New objects have the group ID of their parent.
|
||||
bsdgroups
|
||||
|
||||
nogrpid (*) New objects have the group ID of their creator.
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 71acaecd7899..9f53ba1835ad 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,6 +1,6 @@
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 4
|
||||
-SUBLEVEL = 116
|
||||
+SUBLEVEL = 117
|
||||
EXTRAVERSION =
|
||||
NAME = Blurry Fish Butt
|
||||
|
||||
diff --git a/arch/arm/boot/dts/s5pv210.dtsi b/arch/arm/boot/dts/s5pv210.dtsi
|
||||
index 8344a0ee2b86..b03fe747b98c 100644
|
||||
--- a/arch/arm/boot/dts/s5pv210.dtsi
|
||||
+++ b/arch/arm/boot/dts/s5pv210.dtsi
|
||||
@@ -461,6 +461,7 @@
|
||||
compatible = "samsung,exynos4210-ohci";
|
||||
reg = <0xec300000 0x100>;
|
||||
interrupts = <23>;
|
||||
+ interrupt-parent = <&vic1>;
|
||||
clocks = <&clocks CLK_USB_HOST>;
|
||||
clock-names = "usbhost";
|
||||
#address-cells = <1>;
|
||||
diff --git a/arch/arm/boot/dts/spear1310-evb.dts b/arch/arm/boot/dts/spear1310-evb.dts
|
||||
index e48857249ce7..3d83992efd90 100644
|
||||
--- a/arch/arm/boot/dts/spear1310-evb.dts
|
||||
+++ b/arch/arm/boot/dts/spear1310-evb.dts
|
||||
@@ -349,7 +349,7 @@
|
||||
spi0: spi@e0100000 {
|
||||
status = "okay";
|
||||
num-cs = <3>;
|
||||
- cs-gpios = <&gpio1 7 0>, <&spics 0>, <&spics 1>;
|
||||
+ cs-gpios = <&gpio1 7 0>, <&spics 0 0>, <&spics 1 0>;
|
||||
|
||||
stmpe610@0 {
|
||||
compatible = "st,stmpe610";
|
||||
diff --git a/arch/arm/boot/dts/spear1340.dtsi b/arch/arm/boot/dts/spear1340.dtsi
|
||||
index df2232d767ed..6361cbfcbe5e 100644
|
||||
--- a/arch/arm/boot/dts/spear1340.dtsi
|
||||
+++ b/arch/arm/boot/dts/spear1340.dtsi
|
||||
@@ -141,8 +141,8 @@
|
||||
reg = <0xb4100000 0x1000>;
|
||||
interrupts = <0 105 0x4>;
|
||||
status = "disabled";
|
||||
- dmas = <&dwdma0 0x600 0 0 1>, /* 0xC << 11 */
|
||||
- <&dwdma0 0x680 0 1 0>; /* 0xD << 7 */
|
||||
+ dmas = <&dwdma0 12 0 1>,
|
||||
+ <&dwdma0 13 1 0>;
|
||||
dma-names = "tx", "rx";
|
||||
};
|
||||
|
||||
diff --git a/arch/arm/boot/dts/spear13xx.dtsi b/arch/arm/boot/dts/spear13xx.dtsi
|
||||
index 14594ce8c18a..8fd8a3328acb 100644
|
||||
--- a/arch/arm/boot/dts/spear13xx.dtsi
|
||||
+++ b/arch/arm/boot/dts/spear13xx.dtsi
|
||||
@@ -100,7 +100,7 @@
|
||||
reg = <0xb2800000 0x1000>;
|
||||
interrupts = <0 29 0x4>;
|
||||
status = "disabled";
|
||||
- dmas = <&dwdma0 0 0 0 0>;
|
||||
+ dmas = <&dwdma0 0 0 0>;
|
||||
dma-names = "data";
|
||||
};
|
||||
|
||||
@@ -288,8 +288,8 @@
|
||||
#size-cells = <0>;
|
||||
interrupts = <0 31 0x4>;
|
||||
status = "disabled";
|
||||
- dmas = <&dwdma0 0x2000 0 0 0>, /* 0x4 << 11 */
|
||||
- <&dwdma0 0x0280 0 0 0>; /* 0x5 << 7 */
|
||||
+ dmas = <&dwdma0 4 0 0>,
|
||||
+ <&dwdma0 5 0 0>;
|
||||
dma-names = "tx", "rx";
|
||||
};
|
||||
|
||||
diff --git a/arch/arm/boot/dts/spear600.dtsi b/arch/arm/boot/dts/spear600.dtsi
|
||||
index 9f60a7b6a42b..bd379034993c 100644
|
||||
--- a/arch/arm/boot/dts/spear600.dtsi
|
||||
+++ b/arch/arm/boot/dts/spear600.dtsi
|
||||
@@ -194,6 +194,7 @@
|
||||
rtc@fc900000 {
|
||||
compatible = "st,spear600-rtc";
|
||||
reg = <0xfc900000 0x1000>;
|
||||
+ interrupt-parent = <&vic0>;
|
||||
interrupts = <10>;
|
||||
status = "disabled";
|
||||
};
|
||||
diff --git a/arch/arm/boot/dts/stih407.dtsi b/arch/arm/boot/dts/stih407.dtsi
|
||||
index d60f0d8add26..e4b508ce38a2 100644
|
||||
--- a/arch/arm/boot/dts/stih407.dtsi
|
||||
+++ b/arch/arm/boot/dts/stih407.dtsi
|
||||
@@ -8,6 +8,7 @@
|
||||
*/
|
||||
#include "stih407-clock.dtsi"
|
||||
#include "stih407-family.dtsi"
|
||||
+#include <dt-bindings/gpio/gpio.h>
|
||||
/ {
|
||||
soc {
|
||||
sti-display-subsystem {
|
||||
@@ -112,7 +113,7 @@
|
||||
<&clk_s_d2_quadfs 0>,
|
||||
<&clk_s_d2_quadfs 1>;
|
||||
|
||||
- hdmi,hpd-gpio = <&pio5 3>;
|
||||
+ hdmi,hpd-gpio = <&pio5 3 GPIO_ACTIVE_LOW>;
|
||||
reset-names = "hdmi";
|
||||
resets = <&softreset STIH407_HDMI_TX_PHY_SOFTRESET>;
|
||||
ddc = <&hdmiddc>;
|
||||
diff --git a/arch/arm/boot/dts/stih410.dtsi b/arch/arm/boot/dts/stih410.dtsi
|
||||
index 40318869c733..3c32fb8cdcac 100644
|
||||
--- a/arch/arm/boot/dts/stih410.dtsi
|
||||
+++ b/arch/arm/boot/dts/stih410.dtsi
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "stih410-clock.dtsi"
|
||||
#include "stih407-family.dtsi"
|
||||
#include "stih410-pinctrl.dtsi"
|
||||
+#include <dt-bindings/gpio/gpio.h>
|
||||
/ {
|
||||
aliases {
|
||||
bdisp0 = &bdisp0;
|
||||
@@ -203,7 +204,7 @@
|
||||
<&clk_s_d2_quadfs 0>,
|
||||
<&clk_s_d2_quadfs 1>;
|
||||
|
||||
- hdmi,hpd-gpio = <&pio5 3>;
|
||||
+ hdmi,hpd-gpio = <&pio5 3 GPIO_ACTIVE_LOW>;
|
||||
reset-names = "hdmi";
|
||||
resets = <&softreset STIH407_HDMI_TX_PHY_SOFTRESET>;
|
||||
ddc = <&hdmiddc>;
|
||||
diff --git a/arch/arm/mach-pxa/tosa-bt.c b/arch/arm/mach-pxa/tosa-bt.c
|
||||
index e0a53208880a..b59a7a2df4e3 100644
|
||||
--- a/arch/arm/mach-pxa/tosa-bt.c
|
||||
+++ b/arch/arm/mach-pxa/tosa-bt.c
|
||||
@@ -132,3 +132,7 @@ static struct platform_driver tosa_bt_driver = {
|
||||
},
|
||||
};
|
||||
module_platform_driver(tosa_bt_driver);
|
||||
+
|
||||
+MODULE_LICENSE("GPL");
|
||||
+MODULE_AUTHOR("Dmitry Baryshkov");
|
||||
+MODULE_DESCRIPTION("Bluetooth built-in chip control");
|
||||
diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c
|
||||
index 0176ebc97bfd..86f934255eb6 100644
|
||||
--- a/arch/s390/kernel/compat_linux.c
|
||||
+++ b/arch/s390/kernel/compat_linux.c
|
||||
@@ -110,7 +110,7 @@ COMPAT_SYSCALL_DEFINE2(s390_setregid16, u16, rgid, u16, egid)
|
||||
|
||||
COMPAT_SYSCALL_DEFINE1(s390_setgid16, u16, gid)
|
||||
{
|
||||
- return sys_setgid((gid_t)gid);
|
||||
+ return sys_setgid(low2highgid(gid));
|
||||
}
|
||||
|
||||
COMPAT_SYSCALL_DEFINE2(s390_setreuid16, u16, ruid, u16, euid)
|
||||
@@ -120,7 +120,7 @@ COMPAT_SYSCALL_DEFINE2(s390_setreuid16, u16, ruid, u16, euid)
|
||||
|
||||
COMPAT_SYSCALL_DEFINE1(s390_setuid16, u16, uid)
|
||||
{
|
||||
- return sys_setuid((uid_t)uid);
|
||||
+ return sys_setuid(low2highuid(uid));
|
||||
}
|
||||
|
||||
COMPAT_SYSCALL_DEFINE3(s390_setresuid16, u16, ruid, u16, euid, u16, suid)
|
||||
@@ -173,12 +173,12 @@ COMPAT_SYSCALL_DEFINE3(s390_getresgid16, u16 __user *, rgidp,
|
||||
|
||||
COMPAT_SYSCALL_DEFINE1(s390_setfsuid16, u16, uid)
|
||||
{
|
||||
- return sys_setfsuid((uid_t)uid);
|
||||
+ return sys_setfsuid(low2highuid(uid));
|
||||
}
|
||||
|
||||
COMPAT_SYSCALL_DEFINE1(s390_setfsgid16, u16, gid)
|
||||
{
|
||||
- return sys_setfsgid((gid_t)gid);
|
||||
+ return sys_setfsgid(low2highgid(gid));
|
||||
}
|
||||
|
||||
static int groups16_to_user(u16 __user *grouplist, struct group_info *group_info)
|
||||
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
|
||||
index 86bccb4bd4dc..9e77cea2a8ef 100644
|
||||
--- a/arch/x86/include/asm/processor.h
|
||||
+++ b/arch/x86/include/asm/processor.h
|
||||
@@ -113,7 +113,7 @@ struct cpuinfo_x86 {
|
||||
char x86_vendor_id[16];
|
||||
char x86_model_id[64];
|
||||
/* in KB - valid for CPUS which support this call: */
|
||||
- int x86_cache_size;
|
||||
+ unsigned int x86_cache_size;
|
||||
int x86_cache_alignment; /* In bytes */
|
||||
/* Cache QoS architectural values: */
|
||||
int x86_cache_max_rmid; /* max index */
|
||||
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
|
||||
index f7f2ad3687ee..8eabbafff213 100644
|
||||
--- a/arch/x86/kernel/cpu/common.c
|
||||
+++ b/arch/x86/kernel/cpu/common.c
|
||||
@@ -955,7 +955,7 @@ static void identify_cpu(struct cpuinfo_x86 *c)
|
||||
int i;
|
||||
|
||||
c->loops_per_jiffy = loops_per_jiffy;
|
||||
- c->x86_cache_size = -1;
|
||||
+ c->x86_cache_size = 0;
|
||||
c->x86_vendor = X86_VENDOR_UNKNOWN;
|
||||
c->x86_model = c->x86_mask = 0; /* So far unknown... */
|
||||
c->x86_vendor_id[0] = '\0'; /* Unset */
|
||||
diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
|
||||
index 2c76a1801393..2f38a99cdb98 100644
|
||||
--- a/arch/x86/kernel/cpu/microcode/intel.c
|
||||
+++ b/arch/x86/kernel/cpu/microcode/intel.c
|
||||
@@ -1075,7 +1075,7 @@ static struct microcode_ops microcode_intel_ops = {
|
||||
|
||||
static int __init calc_llc_size_per_core(struct cpuinfo_x86 *c)
|
||||
{
|
||||
- u64 llc_size = c->x86_cache_size * 1024;
|
||||
+ u64 llc_size = c->x86_cache_size * 1024ULL;
|
||||
|
||||
do_div(llc_size, c->x86_max_cores);
|
||||
|
||||
diff --git a/arch/x86/kernel/cpu/proc.c b/arch/x86/kernel/cpu/proc.c
|
||||
index 18ca99f2798b..935225c0375f 100644
|
||||
--- a/arch/x86/kernel/cpu/proc.c
|
||||
+++ b/arch/x86/kernel/cpu/proc.c
|
||||
@@ -87,8 +87,8 @@ static int show_cpuinfo(struct seq_file *m, void *v)
|
||||
}
|
||||
|
||||
/* Cache size */
|
||||
- if (c->x86_cache_size >= 0)
|
||||
- seq_printf(m, "cache size\t: %d KB\n", c->x86_cache_size);
|
||||
+ if (c->x86_cache_size)
|
||||
+ seq_printf(m, "cache size\t: %u KB\n", c->x86_cache_size);
|
||||
|
||||
show_cpuinfo_core(m, c, cpu);
|
||||
show_cpuinfo_misc(m, c);
|
||||
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
|
||||
index 1049c3c9b877..2b71f2c03b9e 100644
|
||||
--- a/arch/x86/kvm/mmu.c
|
||||
+++ b/arch/x86/kvm/mmu.c
|
||||
@@ -4503,7 +4503,7 @@ void kvm_mmu_setup(struct kvm_vcpu *vcpu)
|
||||
typedef bool (*slot_level_handler) (struct kvm *kvm, unsigned long *rmap);
|
||||
|
||||
/* The caller should hold mmu-lock before calling this function. */
|
||||
-static bool
|
||||
+static __always_inline bool
|
||||
slot_handle_level_range(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
||||
slot_level_handler fn, int start_level, int end_level,
|
||||
gfn_t start_gfn, gfn_t end_gfn, bool lock_flush_tlb)
|
||||
@@ -4533,7 +4533,7 @@ slot_handle_level_range(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
||||
return flush;
|
||||
}
|
||||
|
||||
-static bool
|
||||
+static __always_inline bool
|
||||
slot_handle_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
||||
slot_level_handler fn, int start_level, int end_level,
|
||||
bool lock_flush_tlb)
|
||||
@@ -4544,7 +4544,7 @@ slot_handle_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
||||
lock_flush_tlb);
|
||||
}
|
||||
|
||||
-static bool
|
||||
+static __always_inline bool
|
||||
slot_handle_all_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
||||
slot_level_handler fn, bool lock_flush_tlb)
|
||||
{
|
||||
@@ -4552,7 +4552,7 @@ slot_handle_all_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
||||
PT_MAX_HUGEPAGE_LEVEL, lock_flush_tlb);
|
||||
}
|
||||
|
||||
-static bool
|
||||
+static __always_inline bool
|
||||
slot_handle_large_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
||||
slot_level_handler fn, bool lock_flush_tlb)
|
||||
{
|
||||
@@ -4560,7 +4560,7 @@ slot_handle_large_level(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
||||
PT_MAX_HUGEPAGE_LEVEL, lock_flush_tlb);
|
||||
}
|
||||
|
||||
-static bool
|
||||
+static __always_inline bool
|
||||
slot_handle_leaf(struct kvm *kvm, struct kvm_memory_slot *memslot,
|
||||
slot_level_handler fn, bool lock_flush_tlb)
|
||||
{
|
||||
diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
|
||||
index ca848cc6a8fd..4f6fc1cfd7da 100644
|
||||
--- a/drivers/devfreq/devfreq.c
|
||||
+++ b/drivers/devfreq/devfreq.c
|
||||
@@ -583,7 +583,7 @@ struct devfreq *devm_devfreq_add_device(struct device *dev,
|
||||
devfreq = devfreq_add_device(dev, profile, governor_name, data);
|
||||
if (IS_ERR(devfreq)) {
|
||||
devres_free(ptr);
|
||||
- return ERR_PTR(-ENOMEM);
|
||||
+ return devfreq;
|
||||
}
|
||||
|
||||
*ptr = devfreq;
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c
|
||||
index 6edcb5485092..b35ebabd6a9f 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_uvd.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_uvd.c
|
||||
@@ -946,7 +946,7 @@ int radeon_uvd_calc_upll_dividers(struct radeon_device *rdev,
|
||||
/* calc dclk divider with current vco freq */
|
||||
dclk_div = radeon_uvd_calc_upll_post_div(vco_freq, dclk,
|
||||
pd_min, pd_even);
|
||||
- if (vclk_div > pd_max)
|
||||
+ if (dclk_div > pd_max)
|
||||
break; /* vco is too big, it has to stop */
|
||||
|
||||
/* calc score with current vco freq */
|
||||
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c
|
||||
index 8763fb832b01..5a2a0b5db938 100644
|
||||
--- a/drivers/infiniband/hw/mlx4/main.c
|
||||
+++ b/drivers/infiniband/hw/mlx4/main.c
|
||||
@@ -2483,9 +2483,8 @@ err_steer_free_bitmap:
|
||||
kfree(ibdev->ib_uc_qpns_bitmap);
|
||||
|
||||
err_steer_qp_release:
|
||||
- if (ibdev->steering_support == MLX4_STEERING_MODE_DEVICE_MANAGED)
|
||||
- mlx4_qp_release_range(dev, ibdev->steer_qpn_base,
|
||||
- ibdev->steer_qpn_count);
|
||||
+ mlx4_qp_release_range(dev, ibdev->steer_qpn_base,
|
||||
+ ibdev->steer_qpn_count);
|
||||
err_counter:
|
||||
for (i = 0; i < ibdev->num_ports; ++i)
|
||||
mlx4_ib_delete_counters_table(ibdev, &ibdev->counters_table[i]);
|
||||
@@ -2586,11 +2585,9 @@ static void mlx4_ib_remove(struct mlx4_dev *dev, void *ibdev_ptr)
|
||||
ibdev->iboe.nb.notifier_call = NULL;
|
||||
}
|
||||
|
||||
- if (ibdev->steering_support == MLX4_STEERING_MODE_DEVICE_MANAGED) {
|
||||
- mlx4_qp_release_range(dev, ibdev->steer_qpn_base,
|
||||
- ibdev->steer_qpn_count);
|
||||
- kfree(ibdev->ib_uc_qpns_bitmap);
|
||||
- }
|
||||
+ mlx4_qp_release_range(dev, ibdev->steer_qpn_base,
|
||||
+ ibdev->steer_qpn_count);
|
||||
+ kfree(ibdev->ib_uc_qpns_bitmap);
|
||||
|
||||
iounmap(ibdev->uar_map);
|
||||
for (p = 0; p < ibdev->num_ports; ++p)
|
||||
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
|
||||
index 9ec6948e3b8b..3d9a80759d95 100644
|
||||
--- a/drivers/md/dm.c
|
||||
+++ b/drivers/md/dm.c
|
||||
@@ -974,7 +974,8 @@ static void dec_pending(struct dm_io *io, int error)
|
||||
} else {
|
||||
/* done with normal IO or empty flush */
|
||||
trace_block_bio_complete(md->queue, bio, io_error);
|
||||
- bio->bi_error = io_error;
|
||||
+ if (io_error)
|
||||
+ bio->bi_error = io_error;
|
||||
bio_endio(bio);
|
||||
}
|
||||
}
|
||||
diff --git a/drivers/media/tuners/r820t.c b/drivers/media/tuners/r820t.c
|
||||
index a7a8452e99d2..c1ce8d3ce877 100644
|
||||
--- a/drivers/media/tuners/r820t.c
|
||||
+++ b/drivers/media/tuners/r820t.c
|
||||
@@ -410,9 +410,11 @@ static int r820t_write(struct r820t_priv *priv, u8 reg, const u8 *val,
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int r820t_write_reg(struct r820t_priv *priv, u8 reg, u8 val)
|
||||
+static inline int r820t_write_reg(struct r820t_priv *priv, u8 reg, u8 val)
|
||||
{
|
||||
- return r820t_write(priv, reg, &val, 1);
|
||||
+ u8 tmp = val; /* work around GCC PR81715 with asan-stack=1 */
|
||||
+
|
||||
+ return r820t_write(priv, reg, &tmp, 1);
|
||||
}
|
||||
|
||||
static int r820t_read_cache_reg(struct r820t_priv *priv, int reg)
|
||||
@@ -425,17 +427,18 @@ static int r820t_read_cache_reg(struct r820t_priv *priv, int reg)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
-static int r820t_write_reg_mask(struct r820t_priv *priv, u8 reg, u8 val,
|
||||
+static inline int r820t_write_reg_mask(struct r820t_priv *priv, u8 reg, u8 val,
|
||||
u8 bit_mask)
|
||||
{
|
||||
+ u8 tmp = val;
|
||||
int rc = r820t_read_cache_reg(priv, reg);
|
||||
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
- val = (rc & ~bit_mask) | (val & bit_mask);
|
||||
+ tmp = (rc & ~bit_mask) | (tmp & bit_mask);
|
||||
|
||||
- return r820t_write(priv, reg, &val, 1);
|
||||
+ return r820t_write(priv, reg, &tmp, 1);
|
||||
}
|
||||
|
||||
static int r820t_read(struct r820t_priv *priv, u8 reg, u8 *val, int len)
|
||||
diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c
|
||||
index 4f34e1b79705..ac92685dd4e5 100644
|
||||
--- a/drivers/net/ethernet/marvell/mvpp2.c
|
||||
+++ b/drivers/net/ethernet/marvell/mvpp2.c
|
||||
@@ -5666,6 +5666,7 @@ static void mvpp2_set_rx_mode(struct net_device *dev)
|
||||
int id = port->id;
|
||||
bool allmulti = dev->flags & IFF_ALLMULTI;
|
||||
|
||||
+retry:
|
||||
mvpp2_prs_mac_promisc_set(priv, id, dev->flags & IFF_PROMISC);
|
||||
mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_ALL, allmulti);
|
||||
mvpp2_prs_mac_multi_set(priv, id, MVPP2_PE_MAC_MC_IP6, allmulti);
|
||||
@@ -5673,9 +5674,13 @@ static void mvpp2_set_rx_mode(struct net_device *dev)
|
||||
/* Remove all port->id's mcast enries */
|
||||
mvpp2_prs_mcast_del_all(priv, id);
|
||||
|
||||
- if (allmulti && !netdev_mc_empty(dev)) {
|
||||
- netdev_for_each_mc_addr(ha, dev)
|
||||
- mvpp2_prs_mac_da_accept(priv, id, ha->addr, true);
|
||||
+ if (!allmulti) {
|
||||
+ netdev_for_each_mc_addr(ha, dev) {
|
||||
+ if (mvpp2_prs_mac_da_accept(priv, id, ha->addr, true)) {
|
||||
+ allmulti = true;
|
||||
+ goto retry;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/drivers/net/ethernet/mellanox/mlx4/qp.c b/drivers/net/ethernet/mellanox/mlx4/qp.c
|
||||
index 168823dde79f..d8359ffba026 100644
|
||||
--- a/drivers/net/ethernet/mellanox/mlx4/qp.c
|
||||
+++ b/drivers/net/ethernet/mellanox/mlx4/qp.c
|
||||
@@ -280,6 +280,9 @@ void mlx4_qp_release_range(struct mlx4_dev *dev, int base_qpn, int cnt)
|
||||
u64 in_param = 0;
|
||||
int err;
|
||||
|
||||
+ if (!cnt)
|
||||
+ return;
|
||||
+
|
||||
if (mlx4_is_mfunc(dev)) {
|
||||
set_param_l(&in_param, base_qpn);
|
||||
set_param_h(&in_param, cnt);
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c
|
||||
index 738d541a2255..348ed1b0e58b 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c
|
||||
@@ -1127,7 +1127,7 @@ static u8 _rtl8821ae_dbi_read(struct rtl_priv *rtlpriv, u16 addr)
|
||||
}
|
||||
if (0 == tmp) {
|
||||
read_addr = REG_DBI_RDATA + addr % 4;
|
||||
- ret = rtl_read_word(rtlpriv, read_addr);
|
||||
+ ret = rtl_read_byte(rtlpriv, read_addr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -1169,7 +1169,8 @@ static void _rtl8821ae_enable_aspm_back_door(struct ieee80211_hw *hw)
|
||||
}
|
||||
|
||||
tmp = _rtl8821ae_dbi_read(rtlpriv, 0x70f);
|
||||
- _rtl8821ae_dbi_write(rtlpriv, 0x70f, tmp | BIT(7));
|
||||
+ _rtl8821ae_dbi_write(rtlpriv, 0x70f, tmp | BIT(7) |
|
||||
+ ASPM_L1_LATENCY << 3);
|
||||
|
||||
tmp = _rtl8821ae_dbi_read(rtlpriv, 0x719);
|
||||
_rtl8821ae_dbi_write(rtlpriv, 0x719, tmp | BIT(3) | BIT(4));
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/wifi.h b/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
index b6faf624480e..d676d055feda 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
@@ -99,6 +99,7 @@
|
||||
#define RTL_USB_MAX_RX_COUNT 100
|
||||
#define QBSS_LOAD_SIZE 5
|
||||
#define MAX_WMMELE_LENGTH 64
|
||||
+#define ASPM_L1_LATENCY 7
|
||||
|
||||
#define TOTAL_CAM_ENTRY 32
|
||||
|
||||
diff --git a/drivers/rtc/rtc-opal.c b/drivers/rtc/rtc-opal.c
|
||||
index df39ce02a99d..229dd2fe8f45 100644
|
||||
--- a/drivers/rtc/rtc-opal.c
|
||||
+++ b/drivers/rtc/rtc-opal.c
|
||||
@@ -58,6 +58,7 @@ static void tm_to_opal(struct rtc_time *tm, u32 *y_m_d, u64 *h_m_s_ms)
|
||||
static int opal_get_rtc_time(struct device *dev, struct rtc_time *tm)
|
||||
{
|
||||
long rc = OPAL_BUSY;
|
||||
+ int retries = 10;
|
||||
u32 y_m_d;
|
||||
u64 h_m_s_ms;
|
||||
__be32 __y_m_d;
|
||||
@@ -67,8 +68,11 @@ static int opal_get_rtc_time(struct device *dev, struct rtc_time *tm)
|
||||
rc = opal_rtc_read(&__y_m_d, &__h_m_s_ms);
|
||||
if (rc == OPAL_BUSY_EVENT)
|
||||
opal_poll_events(NULL);
|
||||
- else
|
||||
+ else if (retries-- && (rc == OPAL_HARDWARE
|
||||
+ || rc == OPAL_INTERNAL_ERROR))
|
||||
msleep(10);
|
||||
+ else if (rc != OPAL_BUSY && rc != OPAL_BUSY_EVENT)
|
||||
+ break;
|
||||
}
|
||||
|
||||
if (rc != OPAL_SUCCESS)
|
||||
@@ -84,6 +88,7 @@ static int opal_get_rtc_time(struct device *dev, struct rtc_time *tm)
|
||||
static int opal_set_rtc_time(struct device *dev, struct rtc_time *tm)
|
||||
{
|
||||
long rc = OPAL_BUSY;
|
||||
+ int retries = 10;
|
||||
u32 y_m_d = 0;
|
||||
u64 h_m_s_ms = 0;
|
||||
|
||||
@@ -92,8 +97,11 @@ static int opal_set_rtc_time(struct device *dev, struct rtc_time *tm)
|
||||
rc = opal_rtc_write(y_m_d, h_m_s_ms);
|
||||
if (rc == OPAL_BUSY_EVENT)
|
||||
opal_poll_events(NULL);
|
||||
- else
|
||||
+ else if (retries-- && (rc == OPAL_HARDWARE
|
||||
+ || rc == OPAL_INTERNAL_ERROR))
|
||||
msleep(10);
|
||||
+ else if (rc != OPAL_BUSY && rc != OPAL_BUSY_EVENT)
|
||||
+ break;
|
||||
}
|
||||
|
||||
return rc == OPAL_SUCCESS ? 0 : -EIO;
|
||||
diff --git a/drivers/video/console/dummycon.c b/drivers/video/console/dummycon.c
|
||||
index 0efc52f11ad0..b30e7d87804b 100644
|
||||
--- a/drivers/video/console/dummycon.c
|
||||
+++ b/drivers/video/console/dummycon.c
|
||||
@@ -68,7 +68,6 @@ const struct consw dummy_con = {
|
||||
.con_switch = DUMMY,
|
||||
.con_blank = DUMMY,
|
||||
.con_font_set = DUMMY,
|
||||
- .con_font_get = DUMMY,
|
||||
.con_font_default = DUMMY,
|
||||
.con_font_copy = DUMMY,
|
||||
.con_set_palette = DUMMY,
|
||||
diff --git a/drivers/video/fbdev/atmel_lcdfb.c b/drivers/video/fbdev/atmel_lcdfb.c
|
||||
index 19eb42b57d87..a6da82648c92 100644
|
||||
--- a/drivers/video/fbdev/atmel_lcdfb.c
|
||||
+++ b/drivers/video/fbdev/atmel_lcdfb.c
|
||||
@@ -1120,7 +1120,7 @@ static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo)
|
||||
goto put_display_node;
|
||||
}
|
||||
|
||||
- timings_np = of_find_node_by_name(display_np, "display-timings");
|
||||
+ timings_np = of_get_child_by_name(display_np, "display-timings");
|
||||
if (!timings_np) {
|
||||
dev_err(dev, "failed to find display-timings node\n");
|
||||
ret = -ENODEV;
|
||||
@@ -1141,6 +1141,12 @@ static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo)
|
||||
fb_add_videomode(&fb_vm, &info->modelist);
|
||||
}
|
||||
|
||||
+ /*
|
||||
+ * FIXME: Make sure we are not referencing any fields in display_np
|
||||
+ * and timings_np and drop our references to them before returning to
|
||||
+ * avoid leaking the nodes on probe deferral and driver unbind.
|
||||
+ */
|
||||
+
|
||||
return 0;
|
||||
|
||||
put_timings_node:
|
||||
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
|
||||
index 86d209fc4992..81b5a461d94e 100644
|
||||
--- a/fs/btrfs/inode.c
|
||||
+++ b/fs/btrfs/inode.c
|
||||
@@ -1292,8 +1292,11 @@ next_slot:
|
||||
leaf = path->nodes[0];
|
||||
if (path->slots[0] >= btrfs_header_nritems(leaf)) {
|
||||
ret = btrfs_next_leaf(root, path);
|
||||
- if (ret < 0)
|
||||
+ if (ret < 0) {
|
||||
+ if (cow_start != (u64)-1)
|
||||
+ cur_offset = cow_start;
|
||||
goto error;
|
||||
+ }
|
||||
if (ret > 0)
|
||||
break;
|
||||
leaf = path->nodes[0];
|
||||
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
|
||||
index ee7832e2d39d..d6359af9789d 100644
|
||||
--- a/fs/btrfs/tree-log.c
|
||||
+++ b/fs/btrfs/tree-log.c
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "print-tree.h"
|
||||
#include "backref.h"
|
||||
#include "hash.h"
|
||||
+#include "inode-map.h"
|
||||
|
||||
/* magic values for the inode_only field in btrfs_log_inode:
|
||||
*
|
||||
@@ -2445,6 +2446,9 @@ static noinline int walk_down_log_tree(struct btrfs_trans_handle *trans,
|
||||
next);
|
||||
btrfs_wait_tree_block_writeback(next);
|
||||
btrfs_tree_unlock(next);
|
||||
+ } else {
|
||||
+ if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
|
||||
+ clear_extent_buffer_dirty(next);
|
||||
}
|
||||
|
||||
WARN_ON(root_owner !=
|
||||
@@ -2524,6 +2528,9 @@ static noinline int walk_up_log_tree(struct btrfs_trans_handle *trans,
|
||||
next);
|
||||
btrfs_wait_tree_block_writeback(next);
|
||||
btrfs_tree_unlock(next);
|
||||
+ } else {
|
||||
+ if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
|
||||
+ clear_extent_buffer_dirty(next);
|
||||
}
|
||||
|
||||
WARN_ON(root_owner != BTRFS_TREE_LOG_OBJECTID);
|
||||
@@ -2600,6 +2607,9 @@ static int walk_log_tree(struct btrfs_trans_handle *trans,
|
||||
clean_tree_block(trans, log->fs_info, next);
|
||||
btrfs_wait_tree_block_writeback(next);
|
||||
btrfs_tree_unlock(next);
|
||||
+ } else {
|
||||
+ if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &next->bflags))
|
||||
+ clear_extent_buffer_dirty(next);
|
||||
}
|
||||
|
||||
WARN_ON(log->root_key.objectid !=
|
||||
@@ -5514,6 +5524,23 @@ again:
|
||||
path);
|
||||
}
|
||||
|
||||
+ if (!ret && wc.stage == LOG_WALK_REPLAY_ALL) {
|
||||
+ struct btrfs_root *root = wc.replay_dest;
|
||||
+
|
||||
+ btrfs_release_path(path);
|
||||
+
|
||||
+ /*
|
||||
+ * We have just replayed everything, and the highest
|
||||
+ * objectid of fs roots probably has changed in case
|
||||
+ * some inode_item's got replayed.
|
||||
+ *
|
||||
+ * root->objectid_mutex is not acquired as log replay
|
||||
+ * could only happen during mount.
|
||||
+ */
|
||||
+ ret = btrfs_find_highest_objectid(root,
|
||||
+ &root->highest_objectid);
|
||||
+ }
|
||||
+
|
||||
key.offset = found_key.offset - 1;
|
||||
wc.replay_dest->log_root = NULL;
|
||||
free_extent_buffer(log->node);
|
||||
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
|
||||
index 8bdb0cc2722f..742455292dfe 100644
|
||||
--- a/fs/ext4/super.c
|
||||
+++ b/fs/ext4/super.c
|
||||
@@ -688,6 +688,7 @@ __acquires(bitlock)
|
||||
}
|
||||
|
||||
ext4_unlock_group(sb, grp);
|
||||
+ ext4_commit_super(sb, 1);
|
||||
ext4_handle_error(sb);
|
||||
/*
|
||||
* We only get here in the ERRORS_RO case; relocking the group
|
||||
diff --git a/fs/namei.c b/fs/namei.c
|
||||
index 3f96ae087488..844da20232b9 100644
|
||||
--- a/fs/namei.c
|
||||
+++ b/fs/namei.c
|
||||
@@ -2000,6 +2000,9 @@ static const char *path_init(struct nameidata *nd, unsigned flags)
|
||||
int retval = 0;
|
||||
const char *s = nd->name->name;
|
||||
|
||||
+ if (!*s)
|
||||
+ flags &= ~LOOKUP_RCU;
|
||||
+
|
||||
nd->last_type = LAST_ROOT; /* if there are only slashes... */
|
||||
nd->flags = flags | LOOKUP_JUMPED | LOOKUP_PARENT;
|
||||
nd->depth = 0;
|
||||
diff --git a/include/linux/kaiser.h b/include/linux/kaiser.h
|
||||
index 58c55b1589d0..b56c19010480 100644
|
||||
--- a/include/linux/kaiser.h
|
||||
+++ b/include/linux/kaiser.h
|
||||
@@ -32,7 +32,7 @@ static inline void kaiser_init(void)
|
||||
{
|
||||
}
|
||||
static inline int kaiser_add_mapping(unsigned long addr,
|
||||
- unsigned long size, unsigned long flags)
|
||||
+ unsigned long size, u64 flags)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
diff --git a/mm/memory.c b/mm/memory.c
|
||||
index 9ac55172aa7b..31ca97f7ebbc 100644
|
||||
--- a/mm/memory.c
|
||||
+++ b/mm/memory.c
|
||||
@@ -72,7 +72,7 @@
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
-#ifdef LAST_CPUPID_NOT_IN_PAGE_FLAGS
|
||||
+#if defined(LAST_CPUPID_NOT_IN_PAGE_FLAGS) && !defined(CONFIG_COMPILE_TEST)
|
||||
#warning Unfortunate NUMA and NUMA Balancing config, growing page-frame for last_cpupid.
|
||||
#endif
|
||||
|
||||
diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
|
||||
index 7bb9fe7a2c8e..167b943469ab 100644
|
||||
--- a/sound/core/seq/seq_clientmgr.c
|
||||
+++ b/sound/core/seq/seq_clientmgr.c
|
||||
@@ -1012,7 +1012,7 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf,
|
||||
{
|
||||
struct snd_seq_client *client = file->private_data;
|
||||
int written = 0, len;
|
||||
- int err = -EINVAL;
|
||||
+ int err;
|
||||
struct snd_seq_event event;
|
||||
|
||||
if (!(snd_seq_file_flags(file) & SNDRV_SEQ_LFLG_OUTPUT))
|
||||
@@ -1027,11 +1027,15 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf,
|
||||
|
||||
/* allocate the pool now if the pool is not allocated yet */
|
||||
if (client->pool->size > 0 && !snd_seq_write_pool_allocated(client)) {
|
||||
- if (snd_seq_pool_init(client->pool) < 0)
|
||||
+ mutex_lock(&client->ioctl_mutex);
|
||||
+ err = snd_seq_pool_init(client->pool);
|
||||
+ mutex_unlock(&client->ioctl_mutex);
|
||||
+ if (err < 0)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/* only process whole events */
|
||||
+ err = -EINVAL;
|
||||
while (count >= sizeof(struct snd_seq_event)) {
|
||||
/* Read in the event header from the user */
|
||||
len = sizeof(event);
|
||||
@@ -2196,7 +2200,6 @@ static int snd_seq_do_ioctl(struct snd_seq_client *client, unsigned int cmd,
|
||||
void __user *arg)
|
||||
{
|
||||
struct seq_ioctl_table *p;
|
||||
- int ret;
|
||||
|
||||
switch (cmd) {
|
||||
case SNDRV_SEQ_IOCTL_PVERSION:
|
||||
@@ -2210,12 +2213,8 @@ static int snd_seq_do_ioctl(struct snd_seq_client *client, unsigned int cmd,
|
||||
if (! arg)
|
||||
return -EFAULT;
|
||||
for (p = ioctl_tables; p->cmd; p++) {
|
||||
- if (p->cmd == cmd) {
|
||||
- mutex_lock(&client->ioctl_mutex);
|
||||
- ret = p->func(client, arg);
|
||||
- mutex_unlock(&client->ioctl_mutex);
|
||||
- return ret;
|
||||
- }
|
||||
+ if (p->cmd == cmd)
|
||||
+ return p->func(client, arg);
|
||||
}
|
||||
pr_debug("ALSA: seq unknown ioctl() 0x%x (type='%c', number=0x%02x)\n",
|
||||
cmd, _IOC_TYPE(cmd), _IOC_NR(cmd));
|
||||
@@ -2226,11 +2225,15 @@ static int snd_seq_do_ioctl(struct snd_seq_client *client, unsigned int cmd,
|
||||
static long snd_seq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct snd_seq_client *client = file->private_data;
|
||||
+ long ret;
|
||||
|
||||
if (snd_BUG_ON(!client))
|
||||
return -ENXIO;
|
||||
|
||||
- return snd_seq_do_ioctl(client, cmd, (void __user *) arg);
|
||||
+ mutex_lock(&client->ioctl_mutex);
|
||||
+ ret = snd_seq_do_ioctl(client, cmd, (void __user *) arg);
|
||||
+ mutex_unlock(&client->ioctl_mutex);
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
|
||||
index f14c1f288443..b302d056e5d3 100644
|
||||
--- a/sound/pci/hda/patch_realtek.c
|
||||
+++ b/sound/pci/hda/patch_realtek.c
|
||||
@@ -3130,6 +3130,19 @@ static void alc269_fixup_pincfg_no_hp_to_lineout(struct hda_codec *codec,
|
||||
spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
|
||||
}
|
||||
|
||||
+static void alc269_fixup_pincfg_U7x7_headset_mic(struct hda_codec *codec,
|
||||
+ const struct hda_fixup *fix,
|
||||
+ int action)
|
||||
+{
|
||||
+ unsigned int cfg_headphone = snd_hda_codec_get_pincfg(codec, 0x21);
|
||||
+ unsigned int cfg_headset_mic = snd_hda_codec_get_pincfg(codec, 0x19);
|
||||
+
|
||||
+ if (cfg_headphone && cfg_headset_mic == 0x411111f0)
|
||||
+ snd_hda_codec_set_pincfg(codec, 0x19,
|
||||
+ (cfg_headphone & ~AC_DEFCFG_DEVICE) |
|
||||
+ (AC_JACK_MIC_IN << AC_DEFCFG_DEVICE_SHIFT));
|
||||
+}
|
||||
+
|
||||
static void alc269_fixup_hweq(struct hda_codec *codec,
|
||||
const struct hda_fixup *fix, int action)
|
||||
{
|
||||
@@ -4782,6 +4795,7 @@ enum {
|
||||
ALC269_FIXUP_LIFEBOOK_EXTMIC,
|
||||
ALC269_FIXUP_LIFEBOOK_HP_PIN,
|
||||
ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT,
|
||||
+ ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC,
|
||||
ALC269_FIXUP_AMIC,
|
||||
ALC269_FIXUP_DMIC,
|
||||
ALC269VB_FIXUP_AMIC,
|
||||
@@ -4972,6 +4986,10 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc269_fixup_pincfg_no_hp_to_lineout,
|
||||
},
|
||||
+ [ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC] = {
|
||||
+ .type = HDA_FIXUP_FUNC,
|
||||
+ .v.func = alc269_fixup_pincfg_U7x7_headset_mic,
|
||||
+ },
|
||||
[ALC269_FIXUP_AMIC] = {
|
||||
.type = HDA_FIXUP_PINS,
|
||||
.v.pins = (const struct hda_pintbl[]) {
|
||||
@@ -5687,6 +5705,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x10cf, 0x159f, "Lifebook E780", ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT),
|
||||
SND_PCI_QUIRK(0x10cf, 0x15dc, "Lifebook T731", ALC269_FIXUP_LIFEBOOK_HP_PIN),
|
||||
SND_PCI_QUIRK(0x10cf, 0x1757, "Lifebook E752", ALC269_FIXUP_LIFEBOOK_HP_PIN),
|
||||
+ SND_PCI_QUIRK(0x10cf, 0x1629, "Lifebook U7x7", ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC),
|
||||
SND_PCI_QUIRK(0x144d, 0xc109, "Samsung Ativ book 9 (NP900X3G)", ALC269_FIXUP_INV_DMIC),
|
||||
SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_BXBT2807_MIC),
|
||||
@@ -5975,6 +5994,11 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
|
||||
{0x12, 0xb7a60130},
|
||||
{0x14, 0x90170110},
|
||||
{0x21, 0x02211020}),
|
||||
+ SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
+ {0x12, 0x90a60130},
|
||||
+ {0x14, 0x90170110},
|
||||
+ {0x14, 0x01011020},
|
||||
+ {0x21, 0x0221101f}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
ALC256_STANDARD_PINS),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0280, 0x103c, "HP", ALC280_FIXUP_HP_GPIO4,
|
||||
@@ -6031,6 +6055,10 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
|
||||
{0x12, 0x90a60120},
|
||||
{0x14, 0x90170110},
|
||||
{0x21, 0x0321101f}),
|
||||
+ SND_HDA_PIN_QUIRK(0x10ec0289, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
+ {0x12, 0xb7a60130},
|
||||
+ {0x14, 0x90170110},
|
||||
+ {0x21, 0x04211020}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
|
||||
ALC290_STANDARD_PINS,
|
||||
{0x15, 0x04211040},
|
||||
diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
|
||||
index c9ae29068c7c..c5447ff078b3 100644
|
||||
--- a/sound/usb/mixer.c
|
||||
+++ b/sound/usb/mixer.c
|
||||
@@ -343,17 +343,20 @@ static int get_ctl_value_v2(struct usb_mixer_elem_info *cval, int request,
|
||||
int validx, int *value_ret)
|
||||
{
|
||||
struct snd_usb_audio *chip = cval->head.mixer->chip;
|
||||
- unsigned char buf[4 + 3 * sizeof(__u32)]; /* enough space for one range */
|
||||
+ /* enough space for one range */
|
||||
+ unsigned char buf[sizeof(__u16) + 3 * sizeof(__u32)];
|
||||
unsigned char *val;
|
||||
- int idx = 0, ret, size;
|
||||
+ int idx = 0, ret, val_size, size;
|
||||
__u8 bRequest;
|
||||
|
||||
+ val_size = uac2_ctl_value_size(cval->val_type);
|
||||
+
|
||||
if (request == UAC_GET_CUR) {
|
||||
bRequest = UAC2_CS_CUR;
|
||||
- size = uac2_ctl_value_size(cval->val_type);
|
||||
+ size = val_size;
|
||||
} else {
|
||||
bRequest = UAC2_CS_RANGE;
|
||||
- size = sizeof(buf);
|
||||
+ size = sizeof(__u16) + 3 * val_size;
|
||||
}
|
||||
|
||||
memset(buf, 0, sizeof(buf));
|
||||
@@ -386,16 +389,17 @@ error:
|
||||
val = buf + sizeof(__u16);
|
||||
break;
|
||||
case UAC_GET_MAX:
|
||||
- val = buf + sizeof(__u16) * 2;
|
||||
+ val = buf + sizeof(__u16) + val_size;
|
||||
break;
|
||||
case UAC_GET_RES:
|
||||
- val = buf + sizeof(__u16) * 3;
|
||||
+ val = buf + sizeof(__u16) + val_size * 2;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
- *value_ret = convert_signed_value(cval, snd_usb_combine_bytes(val, sizeof(__u16)));
|
||||
+ *value_ret = convert_signed_value(cval,
|
||||
+ snd_usb_combine_bytes(val, val_size));
|
||||
|
||||
return 0;
|
||||
}
|
||||
diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
|
||||
index 48afae053c56..8e8db4ddf365 100644
|
||||
--- a/sound/usb/pcm.c
|
||||
+++ b/sound/usb/pcm.c
|
||||
@@ -343,6 +343,15 @@ static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs,
|
||||
ep = 0x81;
|
||||
iface = usb_ifnum_to_if(dev, 2);
|
||||
|
||||
+ if (!iface || iface->num_altsetting == 0)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ alts = &iface->altsetting[1];
|
||||
+ goto add_sync_ep;
|
||||
+ case USB_ID(0x1397, 0x0002):
|
||||
+ ep = 0x81;
|
||||
+ iface = usb_ifnum_to_if(dev, 1);
|
||||
+
|
||||
if (!iface || iface->num_altsetting == 0)
|
||||
return -EINVAL;
|
||||
|
9558
patch/kernel/rockchip-default/04-patch-4.4.117-118.patch
Normal file
9558
patch/kernel/rockchip-default/04-patch-4.4.117-118.patch
Normal file
File diff suppressed because it is too large
Load diff
694
patch/kernel/rockchip-default/04-patch-4.4.118-119.patch
Normal file
694
patch/kernel/rockchip-default/04-patch-4.4.118-119.patch
Normal file
|
@ -0,0 +1,694 @@
|
|||
diff --git a/Makefile b/Makefile
|
||||
index 1e01148744f3..87f925192c77 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,6 +1,6 @@
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 4
|
||||
-SUBLEVEL = 118
|
||||
+SUBLEVEL = 119
|
||||
EXTRAVERSION =
|
||||
NAME = Blurry Fish Butt
|
||||
|
||||
diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c
|
||||
index 9119722eb347..5d270ca76aec 100644
|
||||
--- a/arch/arm64/kernel/traps.c
|
||||
+++ b/arch/arm64/kernel/traps.c
|
||||
@@ -49,7 +49,7 @@ static const char *handler[]= {
|
||||
"Error"
|
||||
};
|
||||
|
||||
-int show_unhandled_signals = 1;
|
||||
+int show_unhandled_signals = 0;
|
||||
|
||||
/*
|
||||
* Dump out the contents of some memory nicely...
|
||||
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
|
||||
index df4a87eb8da4..9eb469bed22b 100644
|
||||
--- a/arch/powerpc/kernel/setup_64.c
|
||||
+++ b/arch/powerpc/kernel/setup_64.c
|
||||
@@ -835,6 +835,7 @@ static int __init disable_hardlockup_detector(void)
|
||||
return 0;
|
||||
}
|
||||
early_initcall(disable_hardlockup_detector);
|
||||
+#endif
|
||||
|
||||
#ifdef CONFIG_PPC_BOOK3S_64
|
||||
static enum l1d_flush_type enabled_flush_types;
|
||||
@@ -973,4 +974,3 @@ ssize_t cpu_show_meltdown(struct device *dev, struct device_attribute *attr, cha
|
||||
return sprintf(buf, "Vulnerable\n");
|
||||
}
|
||||
#endif /* CONFIG_PPC_BOOK3S_64 */
|
||||
-#endif
|
||||
diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c
|
||||
index 1d2e6392f5fa..f24bd7249536 100644
|
||||
--- a/arch/x86/oprofile/nmi_int.c
|
||||
+++ b/arch/x86/oprofile/nmi_int.c
|
||||
@@ -471,7 +471,7 @@ static int nmi_setup(void)
|
||||
goto fail;
|
||||
|
||||
for_each_possible_cpu(cpu) {
|
||||
- if (!cpu)
|
||||
+ if (!IS_ENABLED(CONFIG_SMP) || !cpu)
|
||||
continue;
|
||||
|
||||
memcpy(per_cpu(cpu_msrs, cpu).counters,
|
||||
diff --git a/drivers/android/binder.c b/drivers/android/binder.c
|
||||
index 55613f6f7c0e..260ce0e60187 100644
|
||||
--- a/drivers/android/binder.c
|
||||
+++ b/drivers/android/binder.c
|
||||
@@ -2622,8 +2622,10 @@ static unsigned int binder_poll(struct file *filp,
|
||||
binder_lock(__func__);
|
||||
|
||||
thread = binder_get_thread(proc);
|
||||
- if (!thread)
|
||||
+ if (!thread) {
|
||||
+ binder_unlock(__func__);
|
||||
return POLLERR;
|
||||
+ }
|
||||
|
||||
wait_for_proc_work = thread->transaction_stack == NULL &&
|
||||
list_empty(&thread->todo) && thread->return_error == BR_OK;
|
||||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
||||
index fc9f14747f70..a36230d1331c 100644
|
||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
||||
@@ -1467,8 +1467,6 @@ int amdgpu_device_init(struct amdgpu_device *adev,
|
||||
* ignore it */
|
||||
vga_client_register(adev->pdev, adev, NULL, amdgpu_vga_set_decode);
|
||||
|
||||
- if (amdgpu_runtime_pm == 1)
|
||||
- runtime = true;
|
||||
if (amdgpu_device_is_px(ddev))
|
||||
runtime = true;
|
||||
vga_switcheroo_register_client(adev->pdev, &amdgpu_switcheroo_ops, runtime);
|
||||
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
|
||||
index c0106fd9fae9..c641ed9470e1 100644
|
||||
--- a/drivers/gpu/drm/drm_edid.c
|
||||
+++ b/drivers/gpu/drm/drm_edid.c
|
||||
@@ -106,6 +106,9 @@ static struct edid_quirk {
|
||||
/* AEO model 0 reports 8 bpc, but is a 6 bpc panel */
|
||||
{ "AEO", 0, EDID_QUIRK_FORCE_6BPC },
|
||||
|
||||
+ /* CPT panel of Asus UX303LA reports 8 bpc, but is a 6 bpc panel */
|
||||
+ { "CPT", 0x17df, EDID_QUIRK_FORCE_6BPC },
|
||||
+
|
||||
/* Belinea 10 15 55 */
|
||||
{ "MAX", 1516, EDID_QUIRK_PREFER_LARGE_60 },
|
||||
{ "MAX", 0x77e, EDID_QUIRK_PREFER_LARGE_60 },
|
||||
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
|
||||
index 6861b74e2b61..d07fb967f92b 100644
|
||||
--- a/drivers/hid/hid-core.c
|
||||
+++ b/drivers/hid/hid-core.c
|
||||
@@ -2386,6 +2386,9 @@ static const struct hid_device_id hid_ignore_list[] = {
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYTIME) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYTEMPERATURE) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYPH) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POWERANALYSERCASSY) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_CONVERTERCONTROLLERCASSY) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MACHINETESTCASSY) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_JWM) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_DMMP) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_UMIP) },
|
||||
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
|
||||
index b554d17c9156..b316ab7e8996 100644
|
||||
--- a/drivers/hid/hid-ids.h
|
||||
+++ b/drivers/hid/hid-ids.h
|
||||
@@ -570,6 +570,9 @@
|
||||
#define USB_DEVICE_ID_LD_MICROCASSYTIME 0x1033
|
||||
#define USB_DEVICE_ID_LD_MICROCASSYTEMPERATURE 0x1035
|
||||
#define USB_DEVICE_ID_LD_MICROCASSYPH 0x1038
|
||||
+#define USB_DEVICE_ID_LD_POWERANALYSERCASSY 0x1040
|
||||
+#define USB_DEVICE_ID_LD_CONVERTERCONTROLLERCASSY 0x1042
|
||||
+#define USB_DEVICE_ID_LD_MACHINETESTCASSY 0x1043
|
||||
#define USB_DEVICE_ID_LD_JWM 0x1080
|
||||
#define USB_DEVICE_ID_LD_DMMP 0x1081
|
||||
#define USB_DEVICE_ID_LD_UMIP 0x1090
|
||||
diff --git a/drivers/iio/imu/adis_trigger.c b/drivers/iio/imu/adis_trigger.c
|
||||
index f53e9a803a0e..93b99bd93738 100644
|
||||
--- a/drivers/iio/imu/adis_trigger.c
|
||||
+++ b/drivers/iio/imu/adis_trigger.c
|
||||
@@ -47,6 +47,10 @@ int adis_probe_trigger(struct adis *adis, struct iio_dev *indio_dev)
|
||||
if (adis->trig == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
+ adis->trig->dev.parent = &adis->spi->dev;
|
||||
+ adis->trig->ops = &adis_trigger_ops;
|
||||
+ iio_trigger_set_drvdata(adis->trig, adis);
|
||||
+
|
||||
ret = request_irq(adis->spi->irq,
|
||||
&iio_trigger_generic_data_rdy_poll,
|
||||
IRQF_TRIGGER_RISING,
|
||||
@@ -55,9 +59,6 @@ int adis_probe_trigger(struct adis *adis, struct iio_dev *indio_dev)
|
||||
if (ret)
|
||||
goto error_free_trig;
|
||||
|
||||
- adis->trig->dev.parent = &adis->spi->dev;
|
||||
- adis->trig->ops = &adis_trigger_ops;
|
||||
- iio_trigger_set_drvdata(adis->trig, adis);
|
||||
ret = iio_trigger_register(adis->trig);
|
||||
|
||||
indio_dev->trig = iio_trigger_get(adis->trig);
|
||||
diff --git a/drivers/iio/industrialio-buffer.c b/drivers/iio/industrialio-buffer.c
|
||||
index 32bb036069eb..961afb5588be 100644
|
||||
--- a/drivers/iio/industrialio-buffer.c
|
||||
+++ b/drivers/iio/industrialio-buffer.c
|
||||
@@ -174,7 +174,7 @@ unsigned int iio_buffer_poll(struct file *filp,
|
||||
struct iio_dev *indio_dev = filp->private_data;
|
||||
struct iio_buffer *rb = indio_dev->buffer;
|
||||
|
||||
- if (!indio_dev->info)
|
||||
+ if (!indio_dev->info || rb == NULL)
|
||||
return 0;
|
||||
|
||||
poll_wait(filp, &rb->pollq, wait);
|
||||
diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
|
||||
index 5a1490b046ac..3f1c4dea8866 100644
|
||||
--- a/drivers/irqchip/irq-gic-v3.c
|
||||
+++ b/drivers/irqchip/irq-gic-v3.c
|
||||
@@ -604,7 +604,7 @@ static void gic_raise_softirq(const struct cpumask *mask, unsigned int irq)
|
||||
* Ensure that stores to Normal memory are visible to the
|
||||
* other CPUs before issuing the IPI.
|
||||
*/
|
||||
- smp_wmb();
|
||||
+ wmb();
|
||||
|
||||
for_each_cpu(cpu, mask) {
|
||||
unsigned long cluster_id = cpu_logical_map(cpu) & ~0xffUL;
|
||||
diff --git a/drivers/pci/host/pci-keystone.c b/drivers/pci/host/pci-keystone.c
|
||||
index 0aa81bd3de12..fb682e8af74d 100644
|
||||
--- a/drivers/pci/host/pci-keystone.c
|
||||
+++ b/drivers/pci/host/pci-keystone.c
|
||||
@@ -179,14 +179,16 @@ static int ks_pcie_get_irq_controller_info(struct keystone_pcie *ks_pcie,
|
||||
}
|
||||
|
||||
/* interrupt controller is in a child node */
|
||||
- *np_temp = of_find_node_by_name(np_pcie, controller);
|
||||
+ *np_temp = of_get_child_by_name(np_pcie, controller);
|
||||
if (!(*np_temp)) {
|
||||
dev_err(dev, "Node for %s is absent\n", controller);
|
||||
goto out;
|
||||
}
|
||||
temp = of_irq_count(*np_temp);
|
||||
- if (!temp)
|
||||
+ if (!temp) {
|
||||
+ of_node_put(*np_temp);
|
||||
goto out;
|
||||
+ }
|
||||
if (temp > max_host_irqs)
|
||||
dev_warn(dev, "Too many %s interrupts defined %u\n",
|
||||
(legacy ? "legacy" : "MSI"), temp);
|
||||
@@ -200,6 +202,9 @@ static int ks_pcie_get_irq_controller_info(struct keystone_pcie *ks_pcie,
|
||||
if (!host_irqs[temp])
|
||||
break;
|
||||
}
|
||||
+
|
||||
+ of_node_put(*np_temp);
|
||||
+
|
||||
if (temp) {
|
||||
*num_irqs = temp;
|
||||
ret = 0;
|
||||
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.h b/drivers/scsi/ibmvscsi/ibmvfc.h
|
||||
index 8fae03215a85..543c10266984 100644
|
||||
--- a/drivers/scsi/ibmvscsi/ibmvfc.h
|
||||
+++ b/drivers/scsi/ibmvscsi/ibmvfc.h
|
||||
@@ -366,7 +366,7 @@ enum ibmvfc_fcp_rsp_info_codes {
|
||||
};
|
||||
|
||||
struct ibmvfc_fcp_rsp_info {
|
||||
- __be16 reserved;
|
||||
+ u8 reserved[3];
|
||||
u8 rsp_code;
|
||||
u8 reserved2[4];
|
||||
}__attribute__((packed, aligned (2)));
|
||||
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
|
||||
index c05c4f877750..774c97bb1c08 100644
|
||||
--- a/drivers/usb/core/quirks.c
|
||||
+++ b/drivers/usb/core/quirks.c
|
||||
@@ -225,6 +225,9 @@ static const struct usb_device_id usb_quirk_list[] = {
|
||||
{ USB_DEVICE(0x1a0a, 0x0200), .driver_info =
|
||||
USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL },
|
||||
|
||||
+ /* Corsair K70 RGB */
|
||||
+ { USB_DEVICE(0x1b1c, 0x1b13), .driver_info = USB_QUIRK_DELAY_INIT },
|
||||
+
|
||||
/* Corsair Strafe RGB */
|
||||
{ USB_DEVICE(0x1b1c, 0x1b20), .driver_info = USB_QUIRK_DELAY_INIT },
|
||||
|
||||
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
|
||||
index d3bd1afd6302..b6037a0ae829 100644
|
||||
--- a/drivers/usb/dwc3/gadget.c
|
||||
+++ b/drivers/usb/dwc3/gadget.c
|
||||
@@ -2393,6 +2393,8 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
|
||||
break;
|
||||
}
|
||||
|
||||
+ dwc->eps[1]->endpoint.maxpacket = dwc->gadget.ep0->maxpacket;
|
||||
+
|
||||
/* Enable USB2 LPM Capability */
|
||||
|
||||
if ((dwc->revision > DWC3_REVISION_194A)
|
||||
diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
|
||||
index eb298daf49c7..51c2b05b5dd9 100644
|
||||
--- a/drivers/usb/gadget/function/f_fs.c
|
||||
+++ b/drivers/usb/gadget/function/f_fs.c
|
||||
@@ -2741,8 +2741,8 @@ static int _ffs_func_bind(struct usb_configuration *c,
|
||||
struct ffs_data *ffs = func->ffs;
|
||||
|
||||
const int full = !!func->ffs->fs_descs_count;
|
||||
- const int high = func->ffs->hs_descs_count;
|
||||
- const int super = func->ffs->ss_descs_count;
|
||||
+ const int high = !!func->ffs->hs_descs_count;
|
||||
+ const int super = !!func->ffs->ss_descs_count;
|
||||
|
||||
int fs_len, hs_len, ss_len, ret, i;
|
||||
struct ffs_ep *eps_ptr;
|
||||
diff --git a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c
|
||||
index 641fed609911..24edb7674710 100644
|
||||
--- a/drivers/usb/host/ohci-q.c
|
||||
+++ b/drivers/usb/host/ohci-q.c
|
||||
@@ -1018,6 +1018,8 @@ skip_ed:
|
||||
* have modified this list. normally it's just prepending
|
||||
* entries (which we'd ignore), but paranoia won't hurt.
|
||||
*/
|
||||
+ *last = ed->ed_next;
|
||||
+ ed->ed_next = NULL;
|
||||
modified = 0;
|
||||
|
||||
/* unlink urbs as requested, but rescan the list after
|
||||
@@ -1076,21 +1078,22 @@ rescan_this:
|
||||
goto rescan_this;
|
||||
|
||||
/*
|
||||
- * If no TDs are queued, take ED off the ed_rm_list.
|
||||
+ * If no TDs are queued, ED is now idle.
|
||||
* Otherwise, if the HC is running, reschedule.
|
||||
- * If not, leave it on the list for further dequeues.
|
||||
+ * If the HC isn't running, add ED back to the
|
||||
+ * start of the list for later processing.
|
||||
*/
|
||||
if (list_empty(&ed->td_list)) {
|
||||
- *last = ed->ed_next;
|
||||
- ed->ed_next = NULL;
|
||||
ed->state = ED_IDLE;
|
||||
list_del(&ed->in_use_list);
|
||||
} else if (ohci->rh_state == OHCI_RH_RUNNING) {
|
||||
- *last = ed->ed_next;
|
||||
- ed->ed_next = NULL;
|
||||
ed_schedule(ohci, ed);
|
||||
} else {
|
||||
- last = &ed->ed_next;
|
||||
+ ed->ed_next = ohci->ed_rm_list;
|
||||
+ ohci->ed_rm_list = ed;
|
||||
+ /* Don't loop on the same ED */
|
||||
+ if (last == &ohci->ed_rm_list)
|
||||
+ last = &ed->ed_next;
|
||||
}
|
||||
|
||||
if (modified)
|
||||
diff --git a/drivers/usb/misc/ldusb.c b/drivers/usb/misc/ldusb.c
|
||||
index cce22ff1c2eb..e9113238d9e3 100644
|
||||
--- a/drivers/usb/misc/ldusb.c
|
||||
+++ b/drivers/usb/misc/ldusb.c
|
||||
@@ -46,6 +46,9 @@
|
||||
#define USB_DEVICE_ID_LD_MICROCASSYTIME 0x1033 /* USB Product ID of Micro-CASSY Time (reserved) */
|
||||
#define USB_DEVICE_ID_LD_MICROCASSYTEMPERATURE 0x1035 /* USB Product ID of Micro-CASSY Temperature */
|
||||
#define USB_DEVICE_ID_LD_MICROCASSYPH 0x1038 /* USB Product ID of Micro-CASSY pH */
|
||||
+#define USB_DEVICE_ID_LD_POWERANALYSERCASSY 0x1040 /* USB Product ID of Power Analyser CASSY */
|
||||
+#define USB_DEVICE_ID_LD_CONVERTERCONTROLLERCASSY 0x1042 /* USB Product ID of Converter Controller CASSY */
|
||||
+#define USB_DEVICE_ID_LD_MACHINETESTCASSY 0x1043 /* USB Product ID of Machine Test CASSY */
|
||||
#define USB_DEVICE_ID_LD_JWM 0x1080 /* USB Product ID of Joule and Wattmeter */
|
||||
#define USB_DEVICE_ID_LD_DMMP 0x1081 /* USB Product ID of Digital Multimeter P (reserved) */
|
||||
#define USB_DEVICE_ID_LD_UMIP 0x1090 /* USB Product ID of UMI P */
|
||||
@@ -88,6 +91,9 @@ static const struct usb_device_id ld_usb_table[] = {
|
||||
{ USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYTIME) },
|
||||
{ USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYTEMPERATURE) },
|
||||
{ USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYPH) },
|
||||
+ { USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POWERANALYSERCASSY) },
|
||||
+ { USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_CONVERTERCONTROLLERCASSY) },
|
||||
+ { USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MACHINETESTCASSY) },
|
||||
{ USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_JWM) },
|
||||
{ USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_DMMP) },
|
||||
{ USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_UMIP) },
|
||||
diff --git a/drivers/usb/renesas_usbhs/fifo.c b/drivers/usb/renesas_usbhs/fifo.c
|
||||
index 8bb9367ada45..6f37966ea54b 100644
|
||||
--- a/drivers/usb/renesas_usbhs/fifo.c
|
||||
+++ b/drivers/usb/renesas_usbhs/fifo.c
|
||||
@@ -999,6 +999,10 @@ static int usbhsf_dma_prepare_pop_with_usb_dmac(struct usbhs_pkt *pkt,
|
||||
if ((uintptr_t)pkt->buf & (USBHS_USB_DMAC_XFER_SIZE - 1))
|
||||
goto usbhsf_pio_prepare_pop;
|
||||
|
||||
+ /* return at this time if the pipe is running */
|
||||
+ if (usbhs_pipe_is_running(pipe))
|
||||
+ return 0;
|
||||
+
|
||||
usbhs_pipe_config_change_bfre(pipe, 1);
|
||||
|
||||
ret = usbhsf_fifo_select(pipe, fifo, 0);
|
||||
@@ -1189,6 +1193,7 @@ static int usbhsf_dma_pop_done_with_usb_dmac(struct usbhs_pkt *pkt,
|
||||
usbhsf_fifo_clear(pipe, fifo);
|
||||
pkt->actual = usbhs_dma_calc_received_size(pkt, chan, rcv_len);
|
||||
|
||||
+ usbhs_pipe_running(pipe, 0);
|
||||
usbhsf_dma_stop(pipe, fifo);
|
||||
usbhsf_dma_unmap(pkt);
|
||||
usbhsf_fifo_unselect(pipe, pipe->fifo);
|
||||
diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h
|
||||
index 86a7bdd61d1a..74bc08d82e14 100644
|
||||
--- a/include/net/ip_tunnels.h
|
||||
+++ b/include/net/ip_tunnels.h
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <net/netns/generic.h>
|
||||
#include <net/rtnetlink.h>
|
||||
#include <net/lwtunnel.h>
|
||||
+#include <net/dst_cache.h>
|
||||
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
#include <net/ipv6.h>
|
||||
@@ -85,11 +86,6 @@ struct ip_tunnel_prl_entry {
|
||||
struct rcu_head rcu_head;
|
||||
};
|
||||
|
||||
-struct ip_tunnel_dst {
|
||||
- struct dst_entry __rcu *dst;
|
||||
- __be32 saddr;
|
||||
-};
|
||||
-
|
||||
struct metadata_dst;
|
||||
|
||||
struct ip_tunnel {
|
||||
@@ -108,7 +104,7 @@ struct ip_tunnel {
|
||||
int tun_hlen; /* Precalculated header length */
|
||||
int mlink;
|
||||
|
||||
- struct ip_tunnel_dst __percpu *dst_cache;
|
||||
+ struct dst_cache dst_cache;
|
||||
|
||||
struct ip_tunnel_parm parms;
|
||||
|
||||
@@ -248,7 +244,6 @@ int ip_tunnel_changelink(struct net_device *dev, struct nlattr *tb[],
|
||||
int ip_tunnel_newlink(struct net_device *dev, struct nlattr *tb[],
|
||||
struct ip_tunnel_parm *p);
|
||||
void ip_tunnel_setup(struct net_device *dev, int net_id);
|
||||
-void ip_tunnel_dst_reset_all(struct ip_tunnel *t);
|
||||
int ip_tunnel_encap_setup(struct ip_tunnel *t,
|
||||
struct ip_tunnel_encap *ipencap);
|
||||
|
||||
diff --git a/net/ipv4/Kconfig b/net/ipv4/Kconfig
|
||||
index 416dfa004cfb..93581bba8643 100644
|
||||
--- a/net/ipv4/Kconfig
|
||||
+++ b/net/ipv4/Kconfig
|
||||
@@ -186,6 +186,7 @@ config NET_IPGRE_DEMUX
|
||||
|
||||
config NET_IP_TUNNEL
|
||||
tristate
|
||||
+ select DST_CACHE
|
||||
default n
|
||||
|
||||
config NET_IPGRE
|
||||
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
|
||||
index 3a819d2cc04b..d35509212013 100644
|
||||
--- a/net/ipv4/ip_sockglue.c
|
||||
+++ b/net/ipv4/ip_sockglue.c
|
||||
@@ -1527,10 +1527,7 @@ int ip_getsockopt(struct sock *sk, int level,
|
||||
if (get_user(len, optlen))
|
||||
return -EFAULT;
|
||||
|
||||
- lock_sock(sk);
|
||||
- err = nf_getsockopt(sk, PF_INET, optname, optval,
|
||||
- &len);
|
||||
- release_sock(sk);
|
||||
+ err = nf_getsockopt(sk, PF_INET, optname, optval, &len);
|
||||
if (err >= 0)
|
||||
err = put_user(len, optlen);
|
||||
return err;
|
||||
@@ -1562,9 +1559,7 @@ int compat_ip_getsockopt(struct sock *sk, int level, int optname,
|
||||
if (get_user(len, optlen))
|
||||
return -EFAULT;
|
||||
|
||||
- lock_sock(sk);
|
||||
err = compat_nf_getsockopt(sk, PF_INET, optname, optval, &len);
|
||||
- release_sock(sk);
|
||||
if (err >= 0)
|
||||
err = put_user(len, optlen);
|
||||
return err;
|
||||
diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
|
||||
index c18245e05d26..80e2d1b0c08c 100644
|
||||
--- a/net/ipv4/ip_tunnel.c
|
||||
+++ b/net/ipv4/ip_tunnel.c
|
||||
@@ -69,61 +69,6 @@ static unsigned int ip_tunnel_hash(__be32 key, __be32 remote)
|
||||
IP_TNL_HASH_BITS);
|
||||
}
|
||||
|
||||
-static void __tunnel_dst_set(struct ip_tunnel_dst *idst,
|
||||
- struct dst_entry *dst, __be32 saddr)
|
||||
-{
|
||||
- struct dst_entry *old_dst;
|
||||
-
|
||||
- dst_clone(dst);
|
||||
- old_dst = xchg((__force struct dst_entry **)&idst->dst, dst);
|
||||
- dst_release(old_dst);
|
||||
- idst->saddr = saddr;
|
||||
-}
|
||||
-
|
||||
-static noinline void tunnel_dst_set(struct ip_tunnel *t,
|
||||
- struct dst_entry *dst, __be32 saddr)
|
||||
-{
|
||||
- __tunnel_dst_set(raw_cpu_ptr(t->dst_cache), dst, saddr);
|
||||
-}
|
||||
-
|
||||
-static void tunnel_dst_reset(struct ip_tunnel *t)
|
||||
-{
|
||||
- tunnel_dst_set(t, NULL, 0);
|
||||
-}
|
||||
-
|
||||
-void ip_tunnel_dst_reset_all(struct ip_tunnel *t)
|
||||
-{
|
||||
- int i;
|
||||
-
|
||||
- for_each_possible_cpu(i)
|
||||
- __tunnel_dst_set(per_cpu_ptr(t->dst_cache, i), NULL, 0);
|
||||
-}
|
||||
-EXPORT_SYMBOL(ip_tunnel_dst_reset_all);
|
||||
-
|
||||
-static struct rtable *tunnel_rtable_get(struct ip_tunnel *t,
|
||||
- u32 cookie, __be32 *saddr)
|
||||
-{
|
||||
- struct ip_tunnel_dst *idst;
|
||||
- struct dst_entry *dst;
|
||||
-
|
||||
- rcu_read_lock();
|
||||
- idst = raw_cpu_ptr(t->dst_cache);
|
||||
- dst = rcu_dereference(idst->dst);
|
||||
- if (dst && !atomic_inc_not_zero(&dst->__refcnt))
|
||||
- dst = NULL;
|
||||
- if (dst) {
|
||||
- if (!dst->obsolete || dst->ops->check(dst, cookie)) {
|
||||
- *saddr = idst->saddr;
|
||||
- } else {
|
||||
- tunnel_dst_reset(t);
|
||||
- dst_release(dst);
|
||||
- dst = NULL;
|
||||
- }
|
||||
- }
|
||||
- rcu_read_unlock();
|
||||
- return (struct rtable *)dst;
|
||||
-}
|
||||
-
|
||||
static bool ip_tunnel_key_match(const struct ip_tunnel_parm *p,
|
||||
__be16 flags, __be32 key)
|
||||
{
|
||||
@@ -382,11 +327,12 @@ static int ip_tunnel_bind_dev(struct net_device *dev)
|
||||
|
||||
if (!IS_ERR(rt)) {
|
||||
tdev = rt->dst.dev;
|
||||
- tunnel_dst_set(tunnel, &rt->dst, fl4.saddr);
|
||||
ip_rt_put(rt);
|
||||
}
|
||||
if (dev->type != ARPHRD_ETHER)
|
||||
dev->flags |= IFF_POINTOPOINT;
|
||||
+
|
||||
+ dst_cache_reset(&tunnel->dst_cache);
|
||||
}
|
||||
|
||||
if (!tdev && tunnel->parms.link)
|
||||
@@ -733,7 +679,8 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
|
||||
if (ip_tunnel_encap(skb, tunnel, &protocol, &fl4) < 0)
|
||||
goto tx_error;
|
||||
|
||||
- rt = connected ? tunnel_rtable_get(tunnel, 0, &fl4.saddr) : NULL;
|
||||
+ rt = connected ? dst_cache_get_ip4(&tunnel->dst_cache, &fl4.saddr) :
|
||||
+ NULL;
|
||||
|
||||
if (!rt) {
|
||||
rt = ip_route_output_key(tunnel->net, &fl4);
|
||||
@@ -743,7 +690,8 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
|
||||
goto tx_error;
|
||||
}
|
||||
if (connected)
|
||||
- tunnel_dst_set(tunnel, &rt->dst, fl4.saddr);
|
||||
+ dst_cache_set_ip4(&tunnel->dst_cache, &rt->dst,
|
||||
+ fl4.saddr);
|
||||
}
|
||||
|
||||
if (rt->dst.dev == dev) {
|
||||
@@ -841,7 +789,7 @@ static void ip_tunnel_update(struct ip_tunnel_net *itn,
|
||||
if (set_mtu)
|
||||
dev->mtu = mtu;
|
||||
}
|
||||
- ip_tunnel_dst_reset_all(t);
|
||||
+ dst_cache_reset(&t->dst_cache);
|
||||
netdev_state_change(dev);
|
||||
}
|
||||
|
||||
@@ -980,7 +928,7 @@ static void ip_tunnel_dev_free(struct net_device *dev)
|
||||
struct ip_tunnel *tunnel = netdev_priv(dev);
|
||||
|
||||
gro_cells_destroy(&tunnel->gro_cells);
|
||||
- free_percpu(tunnel->dst_cache);
|
||||
+ dst_cache_destroy(&tunnel->dst_cache);
|
||||
free_percpu(dev->tstats);
|
||||
free_netdev(dev);
|
||||
}
|
||||
@@ -1174,15 +1122,15 @@ int ip_tunnel_init(struct net_device *dev)
|
||||
if (!dev->tstats)
|
||||
return -ENOMEM;
|
||||
|
||||
- tunnel->dst_cache = alloc_percpu(struct ip_tunnel_dst);
|
||||
- if (!tunnel->dst_cache) {
|
||||
+ err = dst_cache_init(&tunnel->dst_cache, GFP_KERNEL);
|
||||
+ if (err) {
|
||||
free_percpu(dev->tstats);
|
||||
- return -ENOMEM;
|
||||
+ return err;
|
||||
}
|
||||
|
||||
err = gro_cells_init(&tunnel->gro_cells, dev);
|
||||
if (err) {
|
||||
- free_percpu(tunnel->dst_cache);
|
||||
+ dst_cache_destroy(&tunnel->dst_cache);
|
||||
free_percpu(dev->tstats);
|
||||
return err;
|
||||
}
|
||||
@@ -1212,7 +1160,7 @@ void ip_tunnel_uninit(struct net_device *dev)
|
||||
if (itn->fb_tunnel_dev != dev)
|
||||
ip_tunnel_del(itn, netdev_priv(dev));
|
||||
|
||||
- ip_tunnel_dst_reset_all(tunnel);
|
||||
+ dst_cache_reset(&tunnel->dst_cache);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ip_tunnel_uninit);
|
||||
|
||||
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c
|
||||
index ede9d0e20538..8d11a034ca3f 100644
|
||||
--- a/net/ipv6/ipv6_sockglue.c
|
||||
+++ b/net/ipv6/ipv6_sockglue.c
|
||||
@@ -1340,10 +1340,7 @@ int ipv6_getsockopt(struct sock *sk, int level, int optname,
|
||||
if (get_user(len, optlen))
|
||||
return -EFAULT;
|
||||
|
||||
- lock_sock(sk);
|
||||
- err = nf_getsockopt(sk, PF_INET6, optname, optval,
|
||||
- &len);
|
||||
- release_sock(sk);
|
||||
+ err = nf_getsockopt(sk, PF_INET6, optname, optval, &len);
|
||||
if (err >= 0)
|
||||
err = put_user(len, optlen);
|
||||
}
|
||||
@@ -1382,10 +1379,7 @@ int compat_ipv6_getsockopt(struct sock *sk, int level, int optname,
|
||||
if (get_user(len, optlen))
|
||||
return -EFAULT;
|
||||
|
||||
- lock_sock(sk);
|
||||
- err = compat_nf_getsockopt(sk, PF_INET6,
|
||||
- optname, optval, &len);
|
||||
- release_sock(sk);
|
||||
+ err = compat_nf_getsockopt(sk, PF_INET6, optname, optval, &len);
|
||||
if (err >= 0)
|
||||
err = put_user(len, optlen);
|
||||
}
|
||||
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
|
||||
index b7ea5eaa4fd1..d17d64edb718 100644
|
||||
--- a/net/ipv6/sit.c
|
||||
+++ b/net/ipv6/sit.c
|
||||
@@ -475,7 +475,7 @@ static void ipip6_tunnel_uninit(struct net_device *dev)
|
||||
ipip6_tunnel_unlink(sitn, tunnel);
|
||||
ipip6_tunnel_del_prl(tunnel, NULL);
|
||||
}
|
||||
- ip_tunnel_dst_reset_all(tunnel);
|
||||
+ dst_cache_reset(&tunnel->dst_cache);
|
||||
dev_put(dev);
|
||||
}
|
||||
|
||||
@@ -1098,7 +1098,7 @@ static void ipip6_tunnel_update(struct ip_tunnel *t, struct ip_tunnel_parm *p)
|
||||
t->parms.link = p->link;
|
||||
ipip6_tunnel_bind_dev(t->dev);
|
||||
}
|
||||
- ip_tunnel_dst_reset_all(t);
|
||||
+ dst_cache_reset(&t->dst_cache);
|
||||
netdev_state_change(t->dev);
|
||||
}
|
||||
|
||||
@@ -1129,7 +1129,7 @@ static int ipip6_tunnel_update_6rd(struct ip_tunnel *t,
|
||||
t->ip6rd.relay_prefix = relay_prefix;
|
||||
t->ip6rd.prefixlen = ip6rd->prefixlen;
|
||||
t->ip6rd.relay_prefixlen = ip6rd->relay_prefixlen;
|
||||
- ip_tunnel_dst_reset_all(t);
|
||||
+ dst_cache_reset(&t->dst_cache);
|
||||
netdev_state_change(t->dev);
|
||||
return 0;
|
||||
}
|
||||
@@ -1283,7 +1283,7 @@ ipip6_tunnel_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
||||
err = ipip6_tunnel_add_prl(t, &prl, cmd == SIOCCHGPRL);
|
||||
break;
|
||||
}
|
||||
- ip_tunnel_dst_reset_all(t);
|
||||
+ dst_cache_reset(&t->dst_cache);
|
||||
netdev_state_change(dev);
|
||||
break;
|
||||
|
||||
@@ -1344,7 +1344,7 @@ static void ipip6_dev_free(struct net_device *dev)
|
||||
{
|
||||
struct ip_tunnel *tunnel = netdev_priv(dev);
|
||||
|
||||
- free_percpu(tunnel->dst_cache);
|
||||
+ dst_cache_destroy(&tunnel->dst_cache);
|
||||
free_percpu(dev->tstats);
|
||||
free_netdev(dev);
|
||||
}
|
||||
@@ -1377,6 +1377,7 @@ static void ipip6_tunnel_setup(struct net_device *dev)
|
||||
static int ipip6_tunnel_init(struct net_device *dev)
|
||||
{
|
||||
struct ip_tunnel *tunnel = netdev_priv(dev);
|
||||
+ int err;
|
||||
|
||||
tunnel->dev = dev;
|
||||
tunnel->net = dev_net(dev);
|
||||
@@ -1387,11 +1388,11 @@ static int ipip6_tunnel_init(struct net_device *dev)
|
||||
if (!dev->tstats)
|
||||
return -ENOMEM;
|
||||
|
||||
- tunnel->dst_cache = alloc_percpu(struct ip_tunnel_dst);
|
||||
- if (!tunnel->dst_cache) {
|
||||
+ err = dst_cache_init(&tunnel->dst_cache, GFP_KERNEL);
|
||||
+ if (err) {
|
||||
free_percpu(dev->tstats);
|
||||
dev->tstats = NULL;
|
||||
- return -ENOMEM;
|
||||
+ return err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
|
||||
index 19322c047386..00a8cc572a22 100644
|
||||
--- a/net/mac80211/cfg.c
|
||||
+++ b/net/mac80211/cfg.c
|
||||
@@ -2877,7 +2877,7 @@ cfg80211_beacon_dup(struct cfg80211_beacon_data *beacon)
|
||||
}
|
||||
if (beacon->probe_resp_len) {
|
||||
new_beacon->probe_resp_len = beacon->probe_resp_len;
|
||||
- beacon->probe_resp = pos;
|
||||
+ new_beacon->probe_resp = pos;
|
||||
memcpy(pos, beacon->probe_resp, beacon->probe_resp_len);
|
||||
pos += beacon->probe_resp_len;
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
diff --git a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig
|
||||
index 95cdb48fad061..db9ee74578012 100644
|
||||
--- a/drivers/net/wireless/Kconfig
|
||||
+++ b/drivers/net/wireless/Kconfig
|
||||
@@ -266,6 +266,7 @@ config MWL8K
|
||||
will be called mwl8k. If unsure, say N.
|
||||
|
||||
source "drivers/net/wireless/ath/Kconfig"
|
||||
+source "drivers/net/wireless/rtl8188eu/Kconfig"
|
||||
source "drivers/net/wireless/b43/Kconfig"
|
||||
source "drivers/net/wireless/b43legacy/Kconfig"
|
||||
source "drivers/net/wireless/brcm80211/Kconfig"
|
||||
diff --git a/drivers/net/wireless/Makefile b/drivers/net/wireless/Makefile
|
||||
index edeb51f6fa551..2c4d8522929bf 100644
|
||||
--- a/drivers/net/wireless/Makefile
|
||||
+++ b/drivers/net/wireless/Makefile
|
||||
@@ -20,6 +20,7 @@ obj-$(CONFIG_PRISM54) += prism54/
|
||||
|
||||
obj-$(CONFIG_HOSTAP) += hostap/
|
||||
obj-$(CONFIG_B43) += b43/
|
||||
+obj-$(CONFIG_RTL8188EU) += rtl8188eu/
|
||||
obj-$(CONFIG_B43LEGACY) += b43legacy/
|
||||
obj-$(CONFIG_ZD1211RW) += zd1211rw/
|
||||
obj-$(CONFIG_WLAN) += realtek/
|
315820
patch/kernel/rockchip-default/90-02-rtl8188eu.patch
Normal file
315820
patch/kernel/rockchip-default/90-02-rtl8188eu.patch
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,22 @@
|
|||
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bs/core/rtw_pwrctrl.c b/drivers/net/wireless/rockchip_wlan/rtl8723bs/core/rtw_pwrctrl.c
|
||||
index 2f0b700..909db3f
|
||||
--- a/drivers/net/wireless/rockchip_wlan/rtl8723bs/core/rtw_pwrctrl.c
|
||||
+++ b/drivers/net/wireless/rockchip_wlan/rtl8723bs/core/rtw_pwrctrl.c
|
||||
@@ -87,7 +87,7 @@ void _ips_enter(_adapter * padapter)
|
||||
if(rf_off == pwrpriv->change_rfpwrstate )
|
||||
{
|
||||
pwrpriv->bpower_saving = _TRUE;
|
||||
- DBG_871X_LEVEL(_drv_always_, "nolinked power save enter\n");
|
||||
+ DBG_871X_LEVEL(_drv_debug_, "nolinked power save enter\n");
|
||||
|
||||
if(pwrpriv->ips_mode == IPS_LEVEL_2)
|
||||
pwrpriv->bkeepfwalive = _TRUE;
|
||||
@@ -128,7 +128,7 @@ int _ips_leave(_adapter * padapter)
|
||||
if ((result = rtw_ips_pwr_up(padapter)) == _SUCCESS) {
|
||||
pwrpriv->rf_pwrstate = rf_on;
|
||||
}
|
||||
- DBG_871X_LEVEL(_drv_always_, "nolinked power save leave\n");
|
||||
+ DBG_871X_LEVEL(_drv_debug_, "nolinked power save leave\n");
|
||||
|
||||
DBG_871X("==> ips_leave.....LED(0x%08x)...\n",rtw_read32(padapter,0x4c));
|
||||
pwrpriv->bips_processing = _FALSE;
|
Loading…
Add table
Reference in a new issue