Linux 4.19.102
Greg KH
maintainerI'm announcing the release of the 4.19.102 kernel.
All users of the 4.19 kernel series must upgrade.
The updated 4.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.19.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/ABI/testing/sysfs-class-devfreq | 7 Makefile | 2 arch/arm/boot/dts/am335x-boneblack-common.dtsi | 5 arch/arm/boot/dts/am43x-epos-evm.dts | 2 arch/arm/boot/dts/am571x-idk.dts | 4 arch/arm/boot/dts/am572x-idk-common.dtsi | 4 arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi | 25 + arch/arm/boot/dts/sun8i-a83t-cubietruck-plus.dts | 2 arch/arm/kernel/hyp-stub.S | 7 arch/arm64/boot/Makefile | 2 arch/parisc/kernel/drivers.c | 4 arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0-best-effort.dtsi | 1 arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0.dtsi | 1 arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1-best-effort.dtsi | 1 arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1.dtsi | 1 arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-0.dtsi | 1 arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-1.dtsi | 1 arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-2.dtsi | 1 arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-3.dtsi | 1 arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-4.dtsi | 1 arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-5.dtsi | 1 arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-0.dtsi | 1 arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-1.dtsi | 1 arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-0.dtsi | 1 arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-1.dtsi | 1 arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-2.dtsi | 1 arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-3.dtsi | 1 arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-4.dtsi | 1 arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-5.dtsi | 1 arch/riscv/kernel/vdso/Makefile | 3 arch/x86/kernel/cpu/intel_rdt_rdtgroup.c | 32 +- crypto/pcrypt.c | 3 drivers/char/ttyprintk.c | 15 - drivers/clk/mmp/clk-of-mmp2.c | 2 drivers/clk/sunxi-ng/ccu-sun50i-h6-r.c | 4 drivers/devfreq/devfreq.c | 9 drivers/media/radio/si470x/radio-si470x-i2c.c | 2 drivers/media/usb/dvb-usb/af9005.c | 2 drivers/media/usb/dvb-usb/digitv.c | 10 drivers/media/usb/dvb-usb/dvb-usb-urb.c | 2 drivers/media/usb/dvb-usb/vp7045.c | 21 + drivers/media/usb/gspca/gspca.c | 2 drivers/net/dsa/bcm_sf2.c | 2 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 22 + drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c | 3 drivers/net/ethernet/chelsio/cxgb4/l2t.c | 3 drivers/net/ethernet/freescale/fman/fman_memac.c | 4 drivers/net/ethernet/freescale/xgmac_mdio.c | 7 drivers/net/ethernet/intel/igb/e1000_82575.c | 8 drivers/net/ethernet/intel/igb/igb_ethtool.c | 2 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 37 ++ drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 5 drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 1 drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c | 2 drivers/net/usb/qmi_wwan.c | 1 drivers/net/usb/r8152.c | 9 drivers/net/wireless/cisco/airo.c | 20 - drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c | 48 +++ drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.h | 6 drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 3 drivers/net/wireless/rsi/rsi_91x_sdio.c | 18 + drivers/net/wireless/rsi/rsi_91x_usb.c | 25 + drivers/platform/x86/gpd-pocket-fan.c | 2 drivers/scsi/fnic/fnic_scsi.c | 3 drivers/soc/ti/wkup_m3_ipc.c | 4 drivers/tee/optee/Kconfig | 1 fs/btrfs/super.c | 10 fs/ext4/super.c | 127 +++++----- fs/namei.c | 4 fs/reiserfs/super.c | 2 include/linux/sched.h | 4 include/net/cfg80211.h | 5 kernel/cgroup/cgroup.c | 11 mm/mempolicy.c | 6 mm/migrate.c | 2 net/bluetooth/hci_sock.c | 3 net/core/utils.c | 20 + net/ipv4/ip_vti.c | 13 - net/ipv6/ip6_vti.c | 13 - net/mac80211/cfg.c | 23 + net/mac80211/mesh_hwmp.c | 3 net/mac80211/tkip.c | 18 + net/netfilter/nft_tunnel.c | 3 net/wireless/rdev-ops.h | 10 net/wireless/reg.c | 36 ++ net/wireless/trace.h | 5 net/wireless/wext-core.c | 3 net/xfrm/xfrm_interface.c | 34 ++ security/tomoyo/common.c | 11 sound/soc/codecs/rt5640.c | 7 sound/soc/sti/uniperif_player.c | 7 tools/include/linux/string.h | 8 tools/lib/string.c | 7 tools/lib/traceevent/parse-filter.c | 4 tools/perf/builtin-c2c.c | 10 tools/perf/builtin-report.c | 6 96 files changed, 606 insertions(+), 234 deletions(-)
Al Viro (1):
vfs: fix do_last() regression
Andres Freund (1):
perf c2c: Fix return type for histogram sorting comparision functions
Arnaud Pouliquen (1):
ASoC: sti: fix possible sleep-in-atomic
Arnd Bergmann (1):
wireless: wext: avoid gcc -O3 warning
Cambda Zhu (1):
ixgbe: Fix calculation of queue with VFs and flow director on interface flap
Chanwoo Choi (1):
PM / devfreq: Add new name attribute for sysfs
Dan Carpenter (2):
mm/mempolicy.c: fix out of bounds write in mpol_parse_str()
Bluetooth: Fix race condition in hci_release_sock()
Dave Gerlach (1):
soc: ti: wkup_m3_ipc: Fix race condition with rproc_boot
Dirk Behme (1):
arm64: kbuild: remove compressed images on 'make ARCH=arm64 (dist)clean'
Dmitry Osipenko (1):
ASoC: rt5640: Fix NULL dereference on module unload
Florian Fainelli (1):
net: dsa: bcm_sf2: Configure IMP port for 2Gb/sec
Florian Westphal (1):
netfilter: nft_tunnel: ERSPAN_VERSION must not be null
Ganapathi Bhat (1):
wireless: fix enabling channel 12 for custom regulatory domain
Greg Kroah-Hartman (1):
Linux 4.19.102
Haim Dreyfuss (1):
iwlwifi: Don't ignore the cap field upon mcc update
Hannes Reinecke (1):
scsi: fnic: do not queue commands during fwreset
Hans Verkuil (2):
media: gspca: zero usb_buf
media: dvb-usb/dvb-usb-urb.c: initialize actlen to 0
Hans de Goede (1):
platform/x86: GPD pocket fan: Allow somewhat lower/higher temperature limits
Hayes Wang (1):
r8152: get default setting of WOL before initializing
Herbert Xu (1):
crypto: pcrypt - Fix user-after-free on module unload
Hewenliang (1):
tools lib traceevent: Fix memory leakage in filter_event
Ilie Halip (1):
riscv: delete temporary files
Jan Kara (1):
reiserfs: Fix memory leak of journal device string
Jin Yao (1):
perf report: Fix no libunwind compiled warning break s390 issue
Johan Hovold (1):
rsi: fix use-after-free on failed probe and unbind
Josef Bacik (1):
btrfs: do not zero f_bavail if we have available space
Jouni Malinen (1):
mac80211: Fix TKIP replay protection immediately after key setup
Kishon Vijay Abraham I (2):
ARM: dts: am57xx-beagle-x15/am57xx-idk: Remove "gpios" for endpoint dt nodes
ARM: dts: beagle-x15-common: Model 5V0 regulator
Kristian Evensen (1):
qmi_wwan: Add support for Quectel RM500Q
Krzysztof Kozlowski (1):
parisc: Use proper printk format for resource_size_t
Lee Jones (1):
media: si470x-i2c: Move free() past last use of 'radio'
Lubomir Rintel (1):
clk: mmp2: Fix the order of timer mux parents
Madalin Bucur (3):
powerpc/fsl/dts: add fsl,erratum-a011043
net/fsl: treat fsl,erratum-a011043
net: fsl/fman: rename IF_MODE_XGMII to IF_MODE_10GManfred Rudigier (1):
igb: Fix SGMII SFP module discovery for 100FX/LX.
Manish Chopra (1):
qlcnic: Fix CPU soft lockup while collecting firmware dump
Marek Szyprowski (1):
ARM: dts: sun8i: a83t: Correct USB3503 GPIOs polarity
Markus Theil (1):
mac80211: mesh: restrict airtime metric to peered established plinks
Mathieu Desnoyers (1):
rseq: Unregister rseq for clone CLONE_VM
Matwey V. Kornilov (1):
ARM: dts: am335x-boneblack-common: fix memory size
Michael Chan (1):
bnxt_en: Fix ipv6 RFS filter matching logic.
Michael Ellerman (2):
airo: Fix possible info leak in AIROOLDIOCTL/SIOCDEVPRIVATE
airo: Add missing CAP_NET_ADMIN check in AIROOLDIOCTL/SIOCDEVPRIVATE
Michal Koutný (1):
cgroup: Prevent double killing of css when enabling threaded cgroup
Nicolas Dichtel (2):
vti[6]: fix packet tx through bpf_redirect() xfrm interface: fix packet tx through bpf_redirect()
Orr Mazor (1):
cfg80211: Fix radar event during another phy CAC
Praveen Chaudhary (1):
net: Fix skb->csum update in inet_proto_csum_replace16().
Raag Jadav (1):
ARM: dts: am43x-epos-evm: set data pin directions for spi0 and spi1
Radoslaw Tyl (1):
ixgbevf: Remove limit of 10 entries for unicast filter list
Samuel Holland (1):
clk: sunxi-ng: h6-r: Fix AR100/R_APB2 parent order
Sean Young (3):
media: digitv: don't continue if remote control state can't be read
media: af9005: uninitialized variable printked
media: vp7045: do not read uninitialized values if usb transfer fails
Siva Rebbagondla (1):
rsi: add hci detach for hibernation and poweroff
Tetsuo Handa (1):
tomoyo: Use atomic_t for statistics counter
Theodore Ts'o (1):
ext4: validate the debug_want_extra_isize mount option at parse time
Vasily Averin (2):
seq_tab_next() should increase position index l2t_seq_next should increase position index
Vincenzo Frascino (1):
tee: optee: Fix compilation issue with nommu
Vitaly Chikunov (1):
tools lib: Fix builds when glibc contains strlcpy()
Vladimir Murzin (1):
ARM: 8955/1: virt: Relax arch timer version check during early boot
Wei Yang (1):
mm/migrate.c: also overwrite error when it is bigger than zero
Xiaochen Shen (3):
x86/resctrl: Fix use-after-free when deleting resource groups x86/resctrl: Fix use-after-free due to inaccurate refcount of rdtgroup x86/resctrl: Fix a deadlock due to inaccurate reference
Xu Wang (1):
xfrm: interface: do not confirm neighbor when do pmtu update
Zhenzhong Duan (1):
ttyprintk: fix a potential deadlock in interrupt context issue
Greg KH
maintainerDocumentation/ABI/testing/sysfs-class-devfreq +7 -0
@@ -7,6 +7,13 @@ Description: The name of devfreq object denoted as ... is same as the name of device using devfreq. +What: /sys/class/devfreq/.../name +Date: November 2019 +Contact: Chanwoo Choi <[email protected]> +Description: + The /sys/class/devfreq/.../name shows the name of device + of the corresponding devfreq object. + What: /sys/class/devfreq/.../governor Date: September 2011 Contact: MyungJoo Ham <[email protected]>
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 101 +SUBLEVEL = 102 EXTRAVERSION = NAME = "People's Front"
arch/arm/boot/dts/am335x-boneblack-common.dtsi +5 -0
@@ -131,6 +131,11 @@ }; / { + memory@80000000 { + device_type = "memory"; + reg = <0x80000000 0x20000000>; /* 512 MB */ + }; + clk_mcasp0_fixed: clk_mcasp0_fixed { #clock-cells = <0>; compatible = "fixed-clock";
arch/arm/boot/dts/am43x-epos-evm.dts +2 -0
@@ -839,6 +839,7 @@ pinctrl-names = "default", "sleep"; pinctrl-0 = <&spi0_pins_default>; pinctrl-1 = <&spi0_pins_sleep>; + ti,pindir-d0-out-d1-in = <1>; }; &spi1 {
@@ -846,6 +847,7 @@ pinctrl-names = "default", "sleep"; pinctrl-0 = <&spi1_pins_default>; pinctrl-1 = <&spi1_pins_sleep>; + ti,pindir-d0-out-d1-in = <1>; }; &usb2_phy1 {
arch/arm/boot/dts/am571x-idk.dts +0 -4
@@ -93,10 +93,6 @@ gpios = <&gpio5 18 GPIO_ACTIVE_HIGH>; }; -&pcie1_ep { - gpios = <&gpio3 23 GPIO_ACTIVE_HIGH>; -}; - &mmc1 { pinctrl-names = "default", "hs"; pinctrl-0 = <&mmc1_pins_default_no_clk_pu>;
arch/arm/boot/dts/am572x-idk-common.dtsi +0 -4
@@ -71,10 +71,6 @@ gpios = <&gpio3 23 GPIO_ACTIVE_HIGH>; }; -&pcie1_ep { - gpios = <&gpio3 23 GPIO_ACTIVE_HIGH>; -}; - &mailbox5 { status = "okay"; mbox_ipu1_ipc3x: mbox_ipu1_ipc3x {
arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi +21 -4
@@ -32,6 +32,27 @@ reg = <0x0 0x80000000 0x0 0x80000000>; }; + main_12v0: fixedregulator-main_12v0 { + /* main supply */ + compatible = "regulator-fixed"; + regulator-name = "main_12v0"; + regulator-min-microvolt = <12000000>; + regulator-max-microvolt = <12000000>; + regulator-always-on; + regulator-boot-on; + }; + + evm_5v0: fixedregulator-evm_5v0 { + /* Output of TPS54531D */ + compatible = "regulator-fixed"; + regulator-name = "evm_5v0"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + vin-supply = <&main_12v0>; + regulator-always-on; + regulator-boot-on; + }; + vdd_3v3: fixedregulator-vdd_3v3 { compatible = "regulator-fixed"; regulator-name = "vdd_3v3";
@@ -550,10 +571,6 @@ gpios = <&gpio2 8 GPIO_ACTIVE_LOW>; }; -&pcie1_ep { - gpios = <&gpio2 8 GPIO_ACTIVE_LOW>; -}; - &mcasp3 { #sound-dai-cells = <0>; assigned-clocks = <&l4per_clkctrl DRA7_MCASP3_CLKCTRL 24>;
arch/arm/boot/dts/sun8i-a83t-cubietruck-plus.dts +1 -1
@@ -90,7 +90,7 @@ initial-mode = <1>; /* initialize in HUB mode */ disabled-ports = <1>; intn-gpios = <&pio 7 5 GPIO_ACTIVE_HIGH>; /* PH5 */ - reset-gpios = <&pio 4 16 GPIO_ACTIVE_HIGH>; /* PE16 */ + reset-gpios = <&pio 4 16 GPIO_ACTIVE_LOW>; /* PE16 */ connect-gpios = <&pio 4 17 GPIO_ACTIVE_HIGH>; /* PE17 */ refclk-frequency = <19200000>; };
arch/arm/kernel/hyp-stub.S +3 -4
@@ -159,10 +159,9 @@ ARM_BE8(orr r7, r7, #(1 << 25)) @ HSCTLR.EE #if !defined(ZIMAGE) && defined(CONFIG_ARM_ARCH_TIMER) @ make CNTP_* and CNTPCT accessible from PL1 mrc p15, 0, r7, c0, c1, 1 @ ID_PFR1 - lsr r7, #16 - and r7, #0xf - cmp r7, #1 - bne 1f + ubfx r7, r7, #16, #4 + teq r7, #0 + beq 1f mrc p15, 4, r7, c14, c1, 0 @ CNTHCTL orr r7, r7, #3 @ PL1PCEN | PL1PCTEN mcr p15, 4, r7, c14, c1, 0 @ CNTHCTL
arch/arm64/boot/Makefile +1 -1
@@ -16,7 +16,7 @@ OBJCOPYFLAGS_Image :=-O binary -R .note -R .note.gnu.build-id -R .comment -S -targets := Image Image.gz +targets := Image Image.bz2 Image.gz Image.lz4 Image.lzma Image.lzo $(obj)/Image: vmlinux FORCE $(call if_changed,objcopy)
arch/parisc/kernel/drivers.c +2 -2
@@ -868,8 +868,8 @@ static void print_parisc_device(struct parisc_device *dev)static int count;print_pa_hwpath (dev, hw_path); -pr_info ("%d. %s at 0x%px [%s] { %d, 0x%x, 0x%.3x, 0x%.5x }" , - ++count, dev->name, (void *) dev->hpa.start, hw_path, dev->id.hw_type, +pr_info ("%d. %s at %pap [%s] { %d, 0x%x, 0x%.3x, 0x%.5x }" , + ++count, dev->name, &(dev->hpa.start), hw_path, dev->id.hw_type, dev->id.hversion_rev, dev->id.hversion, dev->id.sversion);if (dev->num_addrs) {
arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0-best-effort.dtsi +1 -0
@@ -63,6 +63,7 @@ fman@400000 { #size-cells = <0>; compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; reg = <0xe1000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ pcsphy0: ethernet-phy@0 { reg = <0x0>;
arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0.dtsi +1 -0
@@ -60,6 +60,7 @@ fman@400000 { #size-cells = <0>; compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; reg = <0xf1000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ pcsphy6: ethernet-phy@0 { reg = <0x0>;
arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1-best-effort.dtsi +1 -0
@@ -63,6 +63,7 @@ fman@400000 { #size-cells = <0>; compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; reg = <0xe3000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ pcsphy1: ethernet-phy@0 { reg = <0x0>;
arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1.dtsi +1 -0
@@ -60,6 +60,7 @@ fman@400000 { #size-cells = <0>; compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; reg = <0xf3000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ pcsphy7: ethernet-phy@0 { reg = <0x0>;
arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-0.dtsi +1 -0
@@ -59,6 +59,7 @@ fman@400000 { #size-cells = <0>; compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; reg = <0xe1000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ pcsphy0: ethernet-phy@0 { reg = <0x0>;
arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-1.dtsi +1 -0
@@ -59,6 +59,7 @@ fman@400000 { #size-cells = <0>; compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; reg = <0xe3000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ pcsphy1: ethernet-phy@0 { reg = <0x0>;
arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-2.dtsi +1 -0
@@ -59,6 +59,7 @@ fman@400000 { #size-cells = <0>; compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; reg = <0xe5000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ pcsphy2: ethernet-phy@0 { reg = <0x0>;
arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-3.dtsi +1 -0
@@ -59,6 +59,7 @@ fman@400000 { #size-cells = <0>; compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; reg = <0xe7000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ pcsphy3: ethernet-phy@0 { reg = <0x0>;
arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-4.dtsi +1 -0
@@ -59,6 +59,7 @@ fman@400000 { #size-cells = <0>; compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; reg = <0xe9000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ pcsphy4: ethernet-phy@0 { reg = <0x0>;
arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-5.dtsi +1 -0
@@ -59,6 +59,7 @@ fman@400000 { #size-cells = <0>; compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; reg = <0xeb000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ pcsphy5: ethernet-phy@0 { reg = <0x0>;
arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-0.dtsi +1 -0
@@ -60,6 +60,7 @@ fman@500000 { #size-cells = <0>; compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; reg = <0xf1000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ pcsphy14: ethernet-phy@0 { reg = <0x0>;
arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-1.dtsi +1 -0
@@ -60,6 +60,7 @@ fman@500000 { #size-cells = <0>; compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; reg = <0xf3000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ pcsphy15: ethernet-phy@0 { reg = <0x0>;
arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-0.dtsi +1 -0
@@ -59,6 +59,7 @@ fman@500000 { #size-cells = <0>; compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; reg = <0xe1000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ pcsphy8: ethernet-phy@0 { reg = <0x0>;
arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-1.dtsi +1 -0
@@ -59,6 +59,7 @@ fman@500000 { #size-cells = <0>; compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; reg = <0xe3000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ pcsphy9: ethernet-phy@0 { reg = <0x0>;
arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-2.dtsi +1 -0
@@ -59,6 +59,7 @@ fman@500000 { #size-cells = <0>; compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; reg = <0xe5000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ pcsphy10: ethernet-phy@0 { reg = <0x0>;
arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-3.dtsi +1 -0
@@ -59,6 +59,7 @@ fman@500000 { #size-cells = <0>; compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; reg = <0xe7000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ pcsphy11: ethernet-phy@0 { reg = <0x0>;
arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-4.dtsi +1 -0
@@ -59,6 +59,7 @@ fman@500000 { #size-cells = <0>; compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; reg = <0xe9000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ pcsphy12: ethernet-phy@0 { reg = <0x0>;
arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-5.dtsi +1 -0
@@ -59,6 +59,7 @@ fman@500000 { #size-cells = <0>; compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; reg = <0xeb000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ pcsphy13: ethernet-phy@0 { reg = <0x0>;
arch/riscv/kernel/vdso/Makefile +2 -1
@@ -55,7 +55,8 @@ quiet_cmd_vdsold = VDSOLD $@ cmd_vdsold = $(CC) $(KBUILD_CFLAGS) $(call cc-option, -no-pie) -nostdlib -nostartfiles $(SYSCFLAGS_$(@F)) \ -Wl,-T,$(filter-out FORCE,$^) -o [email protected] && \ $(CROSS_COMPILE)objcopy \ - $(patsubst %, -G __vdso_%, $(vdso-syms)) [email protected] $@ + $(patsubst %, -G __vdso_%, $(vdso-syms)) [email protected] $@ && \ + rm [email protected] # install commands for the unstripped file quiet_cmd_vdso_install = INSTALL $@
arch/x86/kernel/cpu/intel_rdt_rdtgroup.c +20 -12
@@ -2005,7 +2005,7 @@ static struct dentry *rdt_mount(struct file_system_type *fs_type,if (rdt_mon_capable) { ret =mongroup_create_dir (rdtgroup_default.kn, -NULL ,"mon_groups" , + &rdtgroup_default,"mon_groups" , &kn_mongrp);if (ret) { dentry =ERR_PTR (ret);
@@ -2167,7 +2167,11 @@ static void free_all_child_rdtgrp(struct rdtgroup *rdtgrp)list_for_each_entry_safe (sentry, stmp, head, mon.crdtgrp_list) {free_rmid (sentry->mon.rmid);list_del (&sentry->mon.crdtgrp_list); -kfree (sentry); + +if (atomic_read (&sentry->waitcount) !=0 ) + sentry->flags =RDT_DELETED ; +else +kfree (sentry); } }
@@ -2205,7 +2209,11 @@ static void rmdir_all_sub(void)kernfs_remove (rdtgrp->kn);list_del (&rdtgrp->rdtgroup_list); -kfree (rdtgrp); + +if (atomic_read (&rdtgrp->waitcount) !=0 ) + rdtgrp->flags =RDT_DELETED ; +else +kfree (rdtgrp); }/* Notify online CPUs to update per cpu storage and PQR_ASSOC MSR */ update_closid_rmid (cpu_online_mask, &rdtgroup_default);
@@ -2407,7 +2415,7 @@ static int mkdir_mondata_all(struct kernfs_node *parent_kn,/* * Create the mon_data directory first. */ - ret =mongroup_create_dir (parent_kn,NULL ,"mon_data" , &kn); + ret =mongroup_create_dir (parent_kn, prgrp,"mon_data" , &kn);if (ret)return ret;
@@ -2560,7 +2568,7 @@ static int mkdir_rdt_prepare(struct kernfs_node *parent_kn,uint files =0 ;int ret; - prdtgrp =rdtgroup_kn_lock_live (prgrp_kn); + prdtgrp =rdtgroup_kn_lock_live (parent_kn);rdt_last_cmd_clear ();if (!prdtgrp) { ret = -ENODEV ;
@@ -2635,7 +2643,7 @@ static int mkdir_rdt_prepare(struct kernfs_node *parent_kn,kernfs_activate (kn);/* -* The caller unlocks the prgrp_kn upon success. +* The caller unlocks the parent_kn upon success. */ return 0 ;
@@ -2646,7 +2654,7 @@ static int mkdir_rdt_prepare(struct kernfs_node *parent_kn, out_free_rgrp:kfree (rdtgrp); out_unlock: -rdtgroup_kn_unlock (prgrp_kn); +rdtgroup_kn_unlock (parent_kn);return ret; }
@@ -2684,7 +2692,7 @@ static int rdtgroup_mkdir_mon(struct kernfs_node *parent_kn,*/ list_add_tail (&rdtgrp->mon.crdtgrp_list, &prgrp->mon.crdtgrp_list); -rdtgroup_kn_unlock (prgrp_kn); +rdtgroup_kn_unlock (parent_kn);return ret; }
@@ -2727,7 +2735,7 @@ static int rdtgroup_mkdir_ctrl_mon(struct kernfs_node *parent_kn,* Create an empty mon_groups directory to hold the subset * of tasks and cpus to monitor. */ - ret =mongroup_create_dir (kn,NULL ,"mon_groups" ,NULL ); + ret =mongroup_create_dir (kn, rdtgrp,"mon_groups" ,NULL );if (ret) {rdt_last_cmd_puts ("kernfs subdir error\n" ); goto out_del_list;
@@ -2743,7 +2751,7 @@ static int rdtgroup_mkdir_ctrl_mon(struct kernfs_node *parent_kn, out_common_fail:mkdir_rdt_prepare_clean (rdtgrp); out_unlock: -rdtgroup_kn_unlock (prgrp_kn); +rdtgroup_kn_unlock (parent_kn);return ret; }
@@ -2869,13 +2877,13 @@ static int rdtgroup_rmdir_ctrl(struct kernfs_node *kn, struct rdtgroup *rdtgrp,closid_free (rdtgrp->closid);free_rmid (rdtgrp->mon.rmid); +rdtgroup_ctrl_remove (kn, rdtgrp); +/* * Free all the child monitor group rmids. */ free_all_child_rdtgrp (rdtgrp); -rdtgroup_ctrl_remove (kn, rdtgrp); -return 0 ; }
crypto/pcrypt.c +2 -1
@@ -505,11 +505,12 @@ static int __init pcrypt_init(void) static void __exit pcrypt_exit(void) { +crypto_unregister_template (&pcrypt_tmpl); +pcrypt_fini_padata (&pencrypt);pcrypt_fini_padata (&pdecrypt);kset_unregister (pcrypt_kset); -crypto_unregister_template (&pcrypt_tmpl); }module_init (pcrypt_init);
drivers/char/ttyprintk.c +9 -6
@@ -18,10 +18,11 @@#include <linux/serial.h> #include <linux/tty.h> #include <linux/module.h> +#include <linux/spinlock.h> struct ttyprintk_port {struct tty_port port; -struct mutex port_write_mutex; +spinlock_t spinlock; };static struct ttyprintk_port tpk_port;
@@ -100,11 +101,12 @@ static int tpk_open(struct tty_struct *tty, struct file *filp)static void tpk_close (struct tty_struct *tty,struct file *filp) {struct ttyprintk_port *tpkp = tty->driver_data; +unsigned long flags; -mutex_lock (&tpkp->port_write_mutex); +spin_lock_irqsave (&tpkp->spinlock, flags);/* flush tpk_printk buffer */ tpk_printk (NULL ,0 ); -mutex_unlock (&tpkp->port_write_mutex); +spin_unlock_irqrestore (&tpkp->spinlock, flags);tty_port_close (&tpkp->port, tty, filp); }
@@ -116,13 +118,14 @@ static int tpk_write(struct tty_struct *tty, const unsigned char *buf, int count) {struct ttyprintk_port *tpkp = tty->driver_data; +unsigned long flags;int ret;/* exclusive use of tpk_printk within this tty */ -mutex_lock (&tpkp->port_write_mutex); +spin_lock_irqsave (&tpkp->spinlock, flags); ret =tpk_printk (buf, count); -mutex_unlock (&tpkp->port_write_mutex); +spin_unlock_irqrestore (&tpkp->spinlock, flags);return ret; }
@@ -172,7 +175,7 @@ static int __init ttyprintk_init(void) {int ret = -ENOMEM ; -mutex_init (&tpk_port.port_write_mutex); +spin_lock_init (&tpk_port.spinlock); ttyprintk_driver = tty_alloc_driver(1, TTY_DRIVER_RESET_TERMIOS |
drivers/clk/mmp/clk-of-mmp2.c +1 -1
@@ -134,7 +134,7 @@ static DEFINE_SPINLOCK(ssp3_lock);static const char *ssp_parent_names[] = {"vctcxo_4" ,"vctcxo_2" ,"vctcxo" ,"pll1_16" };static DEFINE_SPINLOCK (timer_lock); -static const char *timer_parent_names[] = {"clk32" ,"vctcxo_2" ,"vctcxo_4" ,"vctcxo" }; +static const char *timer_parent_names[] = {"clk32" ,"vctcxo_4" ,"vctcxo_2" ,"vctcxo" };static DEFINE_SPINLOCK (reset_lock);
drivers/clk/sunxi-ng/ccu-sun50i-h6-r.c +2 -2
@@ -23,9 +23,9 @@*/ static const char *const ar100_r_apb2_parents[] = {"osc24M" ,"osc32k" , -"pll-periph0" ,"iosc" }; +"iosc" ,"pll-periph0" };static const struct ccu_mux_var_prediv ar100_r_apb2_predivs[] = { - { .index =2 , .shift =0 , .width =5 }, + { .index =3 , .shift =0 , .width =5 }, };static struct ccu_div ar100_clk = {
drivers/devfreq/devfreq.c +9 -0
@@ -1014,6 +1014,14 @@ int devfreq_remove_governor(struct devfreq_governor *governor) }EXPORT_SYMBOL (devfreq_remove_governor); +static ssize_t name_show (struct device *dev, +struct device_attribute *attr,char *buf) +{ +struct devfreq *devfreq =to_devfreq (dev); +return sprintf (buf,"%s\n" ,dev_name (devfreq->dev.parent)); +} +static DEVICE_ATTR_RO (name); +static ssize_t governor_show (struct device *dev,struct device_attribute *attr,char *buf) {
@@ -1330,6 +1338,7 @@ static ssize_t trans_stat_show(struct device *dev,static DEVICE_ATTR_RO (trans_stat);static struct attribute *devfreq_attrs[] = { + &dev_attr_name.attr, &dev_attr_governor.attr, &dev_attr_available_governors.attr, &dev_attr_cur_freq.attr,
drivers/media/radio/si470x/radio-si470x-i2c.c +1 -1
@@ -483,10 +483,10 @@ static int si470x_i2c_remove(struct i2c_client *client)free_irq (client->irq, radio);video_unregister_device (&radio->videodev); -kfree (radio);v4l2_ctrl_handler_free (&radio->hdl);v4l2_device_unregister (&radio->v4l2_dev); +kfree (radio);return 0 ; }
drivers/media/usb/dvb-usb/af9005.c +1 -1
@@ -563,7 +563,7 @@ static int af9005_boot_packet(struct usb_device *udev, int type, u8 *reply, u8 *buf, int size) {u16 checksum; -int act_len, i, ret; +int act_len =0 , i, ret;memset (buf,0 , size); buf[0 ] = (u8) (FW_BULKOUT_SIZE &0xff );
drivers/media/usb/dvb-usb/digitv.c +7 -3
@@ -233,18 +233,22 @@ static struct rc_map_table rc_map_digitv_table[] = {static int digitv_rc_query (struct dvb_usb_device *d,u32 *event,int *state) { -int i; +int ret, i;u8 key[5 ];u8 b[4 ] = {0 }; *event =0 ; *state =REMOTE_NO_KEY_PRESSED ; -digitv_ctrl_msg (d,USB_READ_REMOTE ,0 ,NULL ,0 ,&key[1 ],4 ); + ret =digitv_ctrl_msg (d,USB_READ_REMOTE ,0 ,NULL ,0 , &key[1 ],4 ); +if (ret) +return ret;/* Tell the device we've read the remote. Not sure how necessary this is, but the Nebula SDK does it. */ -digitv_ctrl_msg (d,USB_WRITE_REMOTE ,0 ,b,4 ,NULL ,0 ); + ret =digitv_ctrl_msg (d,USB_WRITE_REMOTE ,0 , b,4 ,NULL ,0 ); +if (ret) +return ret;/* if something is inside the buffer, simulate key press */ if (key[1 ] !=0 )
drivers/media/usb/dvb-usb/dvb-usb-urb.c +1 -1
@@ -12,7 +12,7 @@int dvb_usb_generic_rw (struct dvb_usb_device *d,u8 *wbuf,u16 wlen,u8 *rbuf,u16 rlen,int delay_ms) { -int actlen,ret = -ENOMEM ; +int actlen =0 , ret = -ENOMEM ;if (!d || wbuf ==NULL || wlen ==0 )return -EINVAL ;
drivers/media/usb/dvb-usb/vp7045.c +14 -7
@@ -99,10 +99,14 @@ static int vp7045_power_ctrl(struct dvb_usb_device *d, int onoff)static int vp7045_rc_query (struct dvb_usb_device *d) { +int ret;u8 key; -vp7045_usb_op (d,RC_VAL_READ ,NULL ,0 ,&key,1 ,20 ); -deb_rc ("remote query key: %x %d\n" ,key,key); + ret =vp7045_usb_op (d,RC_VAL_READ ,NULL ,0 , &key,1 ,20 ); +if (ret) +return ret; + +deb_rc ("remote query key: %x\n" , key);if (key !=0x44 ) {/*
@@ -118,15 +122,18 @@ static int vp7045_rc_query(struct dvb_usb_device *d)static int vp7045_read_eeprom (struct dvb_usb_device *d,u8 *buf,int len,int offset) { -int i =0 ; -u8 v,br[2 ]; +int i, ret; +u8 v, br[2 ];for (i=0 ; i < len; i++) { v = offset + i; -vp7045_usb_op (d,GET_EE_VALUE ,&v,1 ,br,2 ,5 ); + ret =vp7045_usb_op (d,GET_EE_VALUE , &v,1 , br,2 ,5 ); +if (ret) +return ret; + buf[i] = br[1 ]; } -deb_info ("VP7045 EEPROM read (offs: %d, len: %d) : " ,offset, i); -debug_dump (buf,i,deb_info); +deb_info ("VP7045 EEPROM read (offs: %d, len: %d) : " , offset, i); +debug_dump (buf, i, deb_info);return 0 ; }
drivers/media/usb/gspca/gspca.c +1 -1
@@ -1473,7 +1473,7 @@ int gspca_dev_probe2(struct usb_interface *intf,pr_err ("couldn't kzalloc gspca struct\n" );return -ENOMEM ; } - gspca_dev->usb_buf =kmalloc (USB_BUF_SZ ,GFP_KERNEL ); + gspca_dev->usb_buf =kzalloc (USB_BUF_SZ ,GFP_KERNEL );if (!gspca_dev->usb_buf) {pr_err ("out of memory\n" ); ret = -ENOMEM ;
drivers/net/dsa/bcm_sf2.c +1 -1
@@ -72,7 +72,7 @@ static void bcm_sf2_imp_setup(struct dsa_switch *ds, int port)/* Force link status for IMP port */ reg =core_readl (priv, offset); - reg |= (MII_SW_OR |LINK_STS ); + reg |= (MII_SW_OR |LINK_STS |GMII_SPEED_UP_2G );core_writel (priv, reg, offset);/* Enable Broadcast, Multicast, Unicast forwarding to IMP port */
drivers/net/ethernet/broadcom/bnxt/bnxt.c +17 -5
@@ -8215,11 +8215,23 @@ static bool bnxt_fltr_match(struct bnxt_ntuple_filter *f1,struct flow_keys *keys1 = &f1->fkeys;struct flow_keys *keys2 = &f2->fkeys; -if (keys1->addrs.v4addrs.src == keys2->addrs.v4addrs.src && - keys1->addrs.v4addrs.dst == keys2->addrs.v4addrs.dst && - keys1->ports.ports == keys2->ports.ports && - keys1->basic.ip_proto == keys2->basic.ip_proto && - keys1->basic.n_proto == keys2->basic.n_proto && +if (keys1->basic.n_proto != keys2->basic.n_proto || + keys1->basic.ip_proto != keys2->basic.ip_proto) +return false; + +if (keys1->basic.n_proto ==htons (ETH_P_IP )) { +if (keys1->addrs.v4addrs.src != keys2->addrs.v4addrs.src || + keys1->addrs.v4addrs.dst != keys2->addrs.v4addrs.dst) +return false; + }else { +if (memcmp (&keys1->addrs.v6addrs.src, &keys2->addrs.v6addrs.src, +sizeof (keys1->addrs.v6addrs.src)) || +memcmp (&keys1->addrs.v6addrs.dst, &keys2->addrs.v6addrs.dst, +sizeof (keys1->addrs.v6addrs.dst))) +return false; + } + +if (keys1->ports.ports == keys2->ports.ports && keys1->control.flags == keys2->control.flags &ðer_addr_equal (f1->src_mac_addr, f2->src_mac_addr) &ðer_addr_equal (f1->dst_mac_addr, f2->dst_mac_addr))
drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c +1 -2
@@ -70,8 +70,7 @@ static void *seq_tab_start(struct seq_file *seq, loff_t *pos)static void *seq_tab_next (struct seq_file *seq,void *v,loff_t *pos) { v =seq_tab_get_idx (seq->private, *pos +1 ); -if (v) - ++*pos; + ++(*pos);return v; }
drivers/net/ethernet/chelsio/cxgb4/l2t.c +1 -2
@@ -683,8 +683,7 @@ static void *l2t_seq_start(struct seq_file *seq, loff_t *pos)static void *l2t_seq_next (struct seq_file *seq,void *v,loff_t *pos) { v =l2t_get_idx (seq, *pos); -if (v) - ++*pos; + ++(*pos);return v; }
drivers/net/ethernet/freescale/fman/fman_memac.c +2 -2
@@ -110,7 +110,7 @@ do { \/* Interface Mode Register (IF_MODE) */ #define IF_MODE_MASK 0x00000003/* 30-31 Mask on i/f mode bits */ -#define IF_MODE_XGMII 0x00000000/* 30-31 XGMII (10G) interface */ +#define IF_MODE_10G 0x00000000/* 30-31 10G interface */ #define IF_MODE_GMII 0x00000002/* 30-31 GMII (1G) interface */ #define IF_MODE_RGMII 0x00000004#define IF_MODE_RGMII_AUTO 0x00008000
@@ -440,7 +440,7 @@ static int init(struct memac_regs __iomem *regs, struct memac_cfg *cfg, tmp =0 ;switch (phy_if) {case PHY_INTERFACE_MODE_XGMII : - tmp |=IF_MODE_XGMII ; + tmp |=IF_MODE_10G ;break ;default : tmp |=IF_MODE_GMII ;
drivers/net/ethernet/freescale/xgmac_mdio.c +6 -1
@@ -49,6 +49,7 @@ struct tgec_mdio_controller {struct mdio_fsl_priv {struct tgec_mdio_controller __iomem *mdio_base;bool is_little_endian; +bool has_a011043; }; static u32 xgmac_read32(void __iomem *regs,
@@ -226,7 +227,8 @@ static int xgmac_mdio_read(struct mii_bus *bus, int phy_id, int regnum)return ret;/* Return all Fs if nothing was there */ -if (xgmac_read32 (®s->mdio_stat, endian) &MDIO_STAT_RD_ER ) { +if ((xgmac_read32 (®s->mdio_stat, endian) &MDIO_STAT_RD_ER ) && + !priv->has_a011043) {dev_err (&bus->dev,"Error while reading PHY%d reg at %d.%hhu\n" , phy_id, dev_addr, regnum);
@@ -274,6 +276,9 @@ static int xgmac_mdio_probe(struct platform_device *pdev) priv->is_little_endian =of_property_read_bool (pdev->dev.of_node,"little-endian" ); + priv->has_a011043 =of_property_read_bool (pdev->dev.of_node, +"fsl,erratum-a011043" ); + ret =of_mdiobus_register (bus, np);if (ret) {dev_err (&pdev->dev,"cannot register MDIO bus\n" );
drivers/net/ethernet/intel/igb/e1000_82575.c +2 -6
@@ -530,7 +530,7 @@ static s32 igb_set_sfp_media_type_82575(struct e1000_hw *hw) dev_spec->module_plugged = true;if (eth_flags->e1000_base_lx || eth_flags->e1000_base_sx) { hw->phy.media_type = e1000_media_type_internal_serdes; - }else if (eth_flags->e100_base_fx) { + }else if (eth_flags->e100_base_fx || eth_flags->e100_base_lx) { dev_spec->sgmii_active = true; hw->phy.media_type = e1000_media_type_internal_serdes; }else if (eth_flags->e1000_base_t) {
@@ -657,14 +657,10 @@ static s32 igb_get_invariants_82575(struct e1000_hw *hw)break ; } -/* do not change link mode for 100BaseFX */ -if (dev_spec->eth_flags.e100_base_fx) -break ; -/* change current link mode setting */ ctrl_ext &= ~E1000_CTRL_EXT_LINK_MODE_MASK ; -if (hw->phy.media_type == e1000_media_type_copper) +if (dev_spec->sgmii_active) ctrl_ext |=E1000_CTRL_EXT_LINK_MODE_SGMII ;else ctrl_ext |=E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES ;
drivers/net/ethernet/intel/igb/igb_ethtool.c +1 -1
@@ -181,7 +181,7 @@ static int igb_get_link_ksettings(struct net_device *netdev, advertising &= ~ADVERTISED_1000baseKX_Full; } } -if (eth_flags->e100_base_fx) { +if (eth_flags->e100_base_fx || eth_flags->e100_base_lx) { supported |= SUPPORTED_100baseT_Full; advertising |= ADVERTISED_100baseT_Full; }
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +27 -10
@@ -5189,7 +5189,7 @@ static void ixgbe_fdir_filter_restore(struct ixgbe_adapter *adapter)struct ixgbe_hw *hw = &adapter->hw;struct hlist_node *node2;struct ixgbe_fdir_filter *filter; -u64 action; +u8 queue;spin_lock (&adapter->fdir_perfect_lock);
@@ -5198,17 +5198,34 @@ static void ixgbe_fdir_filter_restore(struct ixgbe_adapter *adapter)hlist_for_each_entry_safe (filter, node2, &adapter->fdir_filter_list, fdir_node) { - action = filter->action; -if (action !=IXGBE_FDIR_DROP_QUEUE && action !=0 ) - action = - (action >>ETHTOOL_RX_FLOW_SPEC_RING_VF_OFF ) -1 ; +if (filter->action ==IXGBE_FDIR_DROP_QUEUE ) { + queue =IXGBE_FDIR_DROP_QUEUE ; + }else { +u32 ring =ethtool_get_flow_spec_ring (filter->action); +u8 vf =ethtool_get_flow_spec_ring_vf (filter->action); + +if (!vf && (ring >= adapter->num_rx_queues)) { +e_err (drv,"FDIR restore failed without VF, ring: %u\n" , + ring); +continue ; + }else if (vf && + ((vf > adapter->num_vfs) || + ring >= adapter->num_rx_queues_per_pool)) { +e_err (drv,"FDIR restore failed with VF, vf: %hhu, ring: %u\n" , + vf, ring); +continue ; + } + +/* Map the ring onto the absolute queue index */ +if (!vf) + queue = adapter->rx_ring[ring]->reg_idx; +else + queue = ((vf -1 ) * + adapter->num_rx_queues_per_pool) + ring; + }ixgbe_fdir_write_perfect_filter_82599 (hw, - &filter->filter, - filter->sw_idx, - (action ==IXGBE_FDIR_DROP_QUEUE ) ? -IXGBE_FDIR_DROP_QUEUE : - adapter->rx_ring[action]->reg_idx); + &filter->filter, filter->sw_idx, queue); }spin_unlock (&adapter->fdir_perfect_lock);
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +0 -5
@@ -2066,11 +2066,6 @@ static int ixgbevf_write_uc_addr_list(struct net_device *netdev)struct ixgbe_hw *hw = &adapter->hw;int count =0 ; -if ((netdev_uc_count (netdev)) >10 ) { -pr_err ("Too many unicast filters - No Space\n" ); -return -ENOSPC ; - } -if (!netdev_uc_empty (netdev)) {struct netdev_hw_addr *ha;
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c +1 -0
@@ -2043,6 +2043,7 @@ static void qlcnic_83xx_exec_template_cmd(struct qlcnic_adapter *p_dev,break ; } entry += p_hdr->size; +cond_resched (); } p_dev->ahw->reset.seq_index = index; }
drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c +2 -0
@@ -703,6 +703,7 @@ static u32 qlcnic_read_memory_test_agent(struct qlcnic_adapter *adapter, addr +=16 ; reg_read -=16 ; ret +=16 ; +cond_resched (); } out:mutex_unlock (&adapter->ahw->mem_lock);
@@ -1383,6 +1384,7 @@ int qlcnic_dump_fw(struct qlcnic_adapter *adapter) buf_offset += entry->hdr.cap_size; entry_offset += entry->hdr.offset; buffer = fw_dump->data + buf_offset; +cond_resched (); } fw_dump->clr =1 ;
drivers/net/usb/qmi_wwan.c +1 -0
@@ -999,6 +999,7 @@ static const struct usb_device_id products[] = { {QMI_QUIRK_QUECTEL_DYNCFG(0x2c7c, 0x0125)}, /* Quectel EC25, EC20 R2.0 Mini PCIe */ {QMI_QUIRK_QUECTEL_DYNCFG(0x2c7c, 0x0306)}, /* Quectel EP06/EG06/EM06 */ {QMI_QUIRK_QUECTEL_DYNCFG(0x2c7c, 0x0512)}, /* Quectel EG12/EM12 */ + {QMI_QUIRK_QUECTEL_DYNCFG(0x2c7c, 0x0800)}, /* Quectel RM500Q-GL *//* 3. Combined interface devices matching on interface number */ {QMI_FIXED_INTF(0x0408, 0xea42, 4)}, /* Yota / Megafon M100-1 */
drivers/net/usb/r8152.c +5 -4
@@ -5259,6 +5259,11 @@ static int rtl8152_probe(struct usb_interface *intf, intf->needs_remote_wakeup =1 ; +if (!rtl_can_wakeup (tp)) +__rtl_set_wol (tp,0 ); +else + tp->saved_wolopts =__rtl_get_wol (tp); + tp->rtl_ops.init (tp);queue_delayed_work (system_long_wq, &tp->hw_phy_work,0 );set_ethernet_addr (tp);
@@ -5272,10 +5277,6 @@ static int rtl8152_probe(struct usb_interface *intf, goto out1; } -if (!rtl_can_wakeup (tp)) -__rtl_set_wol (tp,0 ); - - tp->saved_wolopts =__rtl_get_wol (tp);if (tp->saved_wolopts)device_set_wakeup_enable (&udev->dev, true);else
drivers/net/wireless/cisco/airo.c +9 -11
@@ -7786,16 +7786,8 @@ static int readrids(struct net_device *dev, aironet_ioctl *comp) {case AIROGVLIST : ridcode =RID_APLIST ;break ;case AIROGDRVNAM : ridcode =RID_DRVNAME ;break ;case AIROGEHTENC : ridcode =RID_ETHERENCAP ;break ; -case AIROGWEPKTMP : ridcode =RID_WEP_TEMP ; -/* Only super-user can read WEP keys */ -if (!capable (CAP_NET_ADMIN )) -return -EPERM ; -break ; -case AIROGWEPKNV : ridcode =RID_WEP_PERM ; -/* Only super-user can read WEP keys */ -if (!capable (CAP_NET_ADMIN )) -return -EPERM ; -break ; +case AIROGWEPKTMP : ridcode =RID_WEP_TEMP ;break ; +case AIROGWEPKNV : ridcode =RID_WEP_PERM ;break ;case AIROGSTAT : ridcode =RID_STATUS ;break ;case AIROGSTATSD32 : ridcode =RID_STATSDELTA ;break ;case AIROGSTATSC32 : ridcode =RID_STATS ;break ;
@@ -7809,7 +7801,13 @@ static int readrids(struct net_device *dev, aironet_ioctl *comp) {return -EINVAL ; } -if ((iobuf =kmalloc (RIDSIZE ,GFP_KERNEL )) ==NULL ) +if (ridcode ==RID_WEP_TEMP || ridcode ==RID_WEP_PERM ) { +/* Only super-user can read WEP keys */ +if (!capable (CAP_NET_ADMIN )) +return -EPERM ; + } + +if ((iobuf =kzalloc (RIDSIZE ,GFP_KERNEL )) ==NULL )return -ENOMEM ;PC4500_readrid (ai,ridcode,iobuf,RIDSIZE ,1 );
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c +46 -2
78 lines not on this page · raw message
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.h +3 -3
@@ -7,7 +7,7 @@* * Copyright(c) 2008 - 2015 Intel Corporation. All rights reserved. * Copyright(c) 2016 - 2017 Intel Deutschland GmbH -* Copyright(c) 2018 Intel Corporation +* Copyright(c) 2018 - 2019 Intel Corporation * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as
@@ -34,7 +34,7 @@* * Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * Copyright(c) 2016 - 2017 Intel Deutschland GmbH -* Copyright(c) 2018 Intel Corporation +* Copyright(c) 2018 - 2019 Intel Corporation * All rights reserved. * * Redistribution and use in source and binary forms, with or without
@@ -108,7 +108,7 @@ iwl_parse_nvm_data(struct iwl_trans *trans, const struct iwl_cfg *cfg,struct ieee80211_regdomain *iwl_parse_nvm_mcc_info (struct device *dev,const struct iwl_cfg *cfg,int num_of_ch,__le32 *channels,u16 fw_mcc, -u16 geo_info); +u16 geo_info,u16 cap);/** * struct iwl_nvm_section - describes an NVM section in memory.
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +2 -1
@@ -317,7 +317,8 @@ struct ieee80211_regdomain *iwl_mvm_get_regdomain(struct wiphy *wiphy,__le32_to_cpu (resp->n_channels), resp->channels,__le16_to_cpu (resp->mcc), - __le16_to_cpu(resp->geo_info)); +__le16_to_cpu (resp->geo_info), + __le16_to_cpu(resp->cap));/* Store the return source id */ src_id = resp->source_id;kfree (resp);
drivers/net/wireless/rsi/rsi_91x_sdio.c +18 -0
@@ -1129,6 +1129,12 @@ static void rsi_disconnect(struct sdio_func *pfunction)rsi_mac80211_detach (adapter);mdelay (10 ); +if (IS_ENABLED (CONFIG_RSI_COEX ) && adapter->priv->coex_mode >1 && + adapter->priv->bt_adapter) { + rsi_bt_ops.detach (adapter->priv->bt_adapter); + adapter->priv->bt_adapter =NULL ; + } +/* Reset Chip */ rsi_reset_chip (adapter);
@@ -1305,6 +1311,12 @@ static int rsi_freeze(struct device *dev)rsi_dbg (ERR_ZONE ,"##### Device can not wake up through WLAN\n" ); +if (IS_ENABLED (CONFIG_RSI_COEX ) && common->coex_mode >1 && + common->bt_adapter) { + rsi_bt_ops.detach (common->bt_adapter); + common->bt_adapter =NULL ; + } + ret =rsi_sdio_disable_interrupts (pfunction);if (sdev->write_fail)
@@ -1352,6 +1364,12 @@ static void rsi_shutdown(struct device *dev)if (rsi_config_wowlan (adapter, wowlan))rsi_dbg (ERR_ZONE ,"Failed to configure WoWLAN\n" ); +if (IS_ENABLED (CONFIG_RSI_COEX ) && adapter->priv->coex_mode >1 && + adapter->priv->bt_adapter) { + rsi_bt_ops.detach (adapter->priv->bt_adapter); + adapter->priv->bt_adapter =NULL ; + } +rsi_sdio_disable_interrupts (sdev->pfunction);if (sdev->write_fail)
drivers/net/wireless/rsi/rsi_91x_usb.c +24 -1
@@ -291,6 +291,15 @@ static void rsi_rx_done_handler(struct urb *urb)dev_kfree_skb (rx_cb->rx_skb); } +static void rsi_rx_urb_kill (struct rsi_hw *adapter,u8 ep_num) +{ +struct rsi_91x_usbdev *dev = (struct rsi_91x_usbdev *)adapter->rsi_dev; +struct rx_usb_ctrl_block *rx_cb = &dev->rx_cb[ep_num -1 ]; +struct urb *urb = rx_cb->rx_urb; + +usb_kill_urb (urb); +} +/** * rsi_rx_urb_submit() - This function submits the given URB to the USB stack. * @adapter: Pointer to the adapter structure.
@@ -791,10 +800,13 @@ static int rsi_probe(struct usb_interface *pfunction,if (adapter->priv->coex_mode >1 ) { status =rsi_rx_urb_submit (adapter,BT_EP ,GFP_KERNEL );if (status) - goto err1; + goto err_kill_wlan_urb; }return 0 ; + +err_kill_wlan_urb: +rsi_rx_urb_kill (adapter,WLAN_EP ); err1:rsi_deinit_usb_interface (adapter); err:
@@ -818,6 +830,17 @@ static void rsi_disconnect(struct usb_interface *pfunction)return ;rsi_mac80211_detach (adapter); + +if (IS_ENABLED (CONFIG_RSI_COEX ) && adapter->priv->coex_mode >1 && + adapter->priv->bt_adapter) { + rsi_bt_ops.detach (adapter->priv->bt_adapter); + adapter->priv->bt_adapter =NULL ; + } + +if (adapter->priv->coex_mode >1 ) +rsi_rx_urb_kill (adapter,BT_EP ); +rsi_rx_urb_kill (adapter,WLAN_EP ); +rsi_reset_card (adapter);rsi_deinit_usb_interface (adapter);rsi_91x_deinit (adapter);
drivers/platform/x86/gpd-pocket-fan.c +1 -1
@@ -127,7 +127,7 @@ static int gpd_pocket_fan_probe(struct platform_device *pdev)int i;for (i =0 ; i <ARRAY_SIZE (temp_limits); i++) { -if (temp_limits[i] <40000 || temp_limits[i] >70000 ) { +if (temp_limits[i] <20000 || temp_limits[i] >90000 ) {dev_err (&pdev->dev,"Invalid temp-limit %d (must be between 40000 and 70000)\n" , temp_limits[i]); temp_limits[0 ] =TEMP_LIMIT0_DEFAULT ;
drivers/scsi/fnic/fnic_scsi.c +3 -0
@@ -446,6 +446,9 @@ static int fnic_queuecommand_lck(struct scsi_cmnd *sc, void (*done)(struct scsi_if (unlikely (fnic_chk_state_flags_locked (fnic,FNIC_FLAGS_IO_BLOCKED )))return SCSI_MLQUEUE_HOST_BUSY ; +if (unlikely (fnic_chk_state_flags_locked (fnic,FNIC_FLAGS_FWRESET ))) +return SCSI_MLQUEUE_HOST_BUSY ; + rport =starget_to_rport (scsi_target (sc->device));if (!rport) { FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
drivers/soc/ti/wkup_m3_ipc.c +2 -2
@@ -426,6 +426,8 @@ static void wkup_m3_rproc_boot_thread(struct wkup_m3_ipc *m3_ipc) ret =rproc_boot (m3_ipc->rproc);if (ret)dev_err (dev,"rproc_boot failed\n" ); +else + m3_ipc_state = m3_ipc;do_exit (0 ); }
@@ -512,8 +514,6 @@ static int wkup_m3_ipc_probe(struct platform_device *pdev) goto err_put_rproc; } - m3_ipc_state = m3_ipc; -return 0 ; err_put_rproc:
drivers/tee/optee/Kconfig +1 -0
@@ -2,6 +2,7 @@ config OPTEE tristate "OP-TEE" depends on HAVE_ARM_SMCCC + depends on MMU help This implements the OP-TEE Trusted Execution Environment (TEE) driver.
fs/btrfs/super.c +9 -1
@@ -2167,7 +2167,15 @@ static int btrfs_statfs(struct dentry *dentry, struct kstatfs *buf)*/ thresh =SZ_4M ; -if (!mixed && total_free_meta - thresh < block_rsv->size) +/* +* We only want to claim there's no available space if we can no longer +* allocate chunks for our metadata profile and our global reserve will +* not fit in the free metadata space. If we aren't ->full then we +* still can allocate chunks and thus are fine using the currently +* calculated f_bavail. +*/ +if (!mixed && block_rsv->space_info->full && + total_free_meta - thresh < block_rsv->size) buf->f_bavail =0 ; buf->f_type =BTRFS_SUPER_MAGIC ;
fs/ext4/super.c +66 -61
163 lines not on this page · raw message
fs/namei.c +2 -2
@@ -3259,8 +3259,8 @@ static int do_last(struct nameidata *nd, struct file *file, const struct open_flags *op) { struct dentry *dir = nd->path.dentry; -kuid_t dir_uid = dir->d_inode->i_uid; -umode_t dir_mode = dir->d_inode->i_mode; +kuid_t dir_uid = nd->inode->i_uid; +umode_t dir_mode = nd->inode->i_mode;int open_flag = op->open_flag;bool will_truncate = (open_flag &O_TRUNC ) !=0 ;bool got_write = false;
fs/reiserfs/super.c +2 -0
@@ -629,6 +629,7 @@ static void reiserfs_put_super(struct super_block *s)reiserfs_write_unlock (s);mutex_destroy (&REISERFS_SB (s)->lock);destroy_workqueue (REISERFS_SB (s)->commit_wq); +kfree (REISERFS_SB (s)->s_jdev);kfree (s->s_fs_info); s->s_fs_info =NULL ; }
@@ -2243,6 +2244,7 @@ static int reiserfs_fill_super(struct super_block *s, void *data, int silent) kfree(qf_names[j]); }#endif +kfree (sbi->s_jdev);kfree (sbi); s->s_fs_info =NULL ;
include/linux/sched.h +2 -2
@@ -1843,11 +1843,11 @@ static inline void rseq_migrate(struct task_struct *t)/* * If parent process has a registered restartable sequences area, the -* child inherits. Only applies when forking a process, not a thread. +* child inherits. Unregister rseq for a clone with CLONE_VM set. */ static inline void rseq_fork (struct task_struct *t,unsigned long clone_flags) { -if (clone_flags &CLONE_THREAD ) { +if (clone_flags &CLONE_VM ) { t->rseq =NULL ; t->rseq_len =0 ; t->rseq_sig =0 ;
include/net/cfg80211.h +5 -0
@@ -3050,6 +3050,9 @@ struct cfg80211_external_auth_params {* * @start_radar_detection: Start radar detection in the driver. * +* @end_cac: End running CAC, probably because a related CAC +* was finished on another phy. +* * @update_ft_ies: Provide updated Fast BSS Transition information to the * driver. If the SME is in the driver/firmware, this information can be * used in building Authentication and Reassociation Request frames.
@@ -3364,6 +3367,8 @@ struct cfg80211_ops {struct net_device *dev, struct cfg80211_chan_def *chandef, u32 cac_time_ms); +void (*end_cac)(struct wiphy *wiphy, +struct net_device *dev);int (*update_ft_ies)(struct wiphy *wiphy,struct net_device *dev,struct cfg80211_update_ft_ies_params *ftie); int (*crit_proto_start)(struct wiphy *wiphy,
kernel/cgroup/cgroup.c +6 -5
@@ -2940,8 +2940,6 @@ static int cgroup_apply_control_enable(struct cgroup *cgrp)for_each_subsys (ss, ssid) {struct cgroup_subsys_state *css =cgroup_css (dsct, ss); -WARN_ON_ONCE (css &&percpu_ref_is_dying (&css->refcnt)); -if (!(cgroup_ss_mask (dsct) & (1 << ss->id)))continue ;
@@ -2951,6 +2949,8 @@ static int cgroup_apply_control_enable(struct cgroup *cgrp)return PTR_ERR (css); } +WARN_ON_ONCE (percpu_ref_is_dying (&css->refcnt)); +if (css_visible (css)) { ret =css_populate_dir (css);if (ret)
@@ -2986,11 +2986,11 @@ static void cgroup_apply_control_disable(struct cgroup *cgrp)for_each_subsys (ss, ssid) {struct cgroup_subsys_state *css =cgroup_css (dsct, ss); -WARN_ON_ONCE (css &&percpu_ref_is_dying (&css->refcnt)); -if (!css)continue ; +WARN_ON_ONCE (percpu_ref_is_dying (&css->refcnt)); +if (css->parent && !(cgroup_ss_mask (dsct) & (1 << ss->id))) {kill_css (css);
@@ -3277,7 +3277,8 @@ static ssize_t cgroup_type_write(struct kernfs_open_file *of, char *buf,if (strcmp (strstrip (buf),"threaded" ))return -EINVAL ; - cgrp =cgroup_kn_lock_live (of->kn, false); +/* drain dying csses before we re-apply (threaded) subtree control */ + cgrp =cgroup_kn_lock_live (of->kn, true);if (!cgrp)return -ENOENT ;
mm/mempolicy.c +3 -3
@@ -2808,6 +2808,9 @@ int mpol_parse_str(char *str, struct mempolicy **mpol)char *flags =strchr (str,'=' );int err =1 ; +if (flags) + *flags++ ='\0' ;/* terminate mode string */ +if (nodelist) {/* NUL-terminate mode or flags string */ *nodelist++ ='\0' ;
@@ -2818,9 +2821,6 @@ int mpol_parse_str(char *str, struct mempolicy **mpol) }else nodes_clear (nodes); -if (flags) - *flags++ ='\0' ;/* terminate mode string */ -for (mode =0 ; mode <MPOL_MAX ; mode++) {if (!strcmp (str, policy_modes[mode])) {break ;
mm/migrate.c +1 -1
@@ -1672,7 +1672,7 @@ static int do_pages_move(struct mm_struct *mm, nodemask_t task_nodes, err1 =do_move_pages_to_node (mm, &pagelist, current_node);if (!err1) err1 =store_status (status, start, current_node, i - start); -if (!err) +if (err >=0 ) err = err1; out:return err;
net/bluetooth/hci_sock.c +3 -0
@@ -831,6 +831,8 @@ static int hci_sock_release(struct socket *sock)if (!sk)return 0 ; +lock_sock (sk); +switch (hci_pi (sk)->channel) {case HCI_CHANNEL_MONITOR :atomic_dec (&monitor_promisc);
@@ -878,6 +880,7 @@ static int hci_sock_release(struct socket *sock)skb_queue_purge (&sk->sk_receive_queue);skb_queue_purge (&sk->sk_write_queue); +release_sock (sk);sock_put (sk);return 0 ; }
net/core/utils.c +17 -3
@@ -442,6 +442,23 @@ void inet_proto_csum_replace4(__sum16 *sum, struct sk_buff *skb, }EXPORT_SYMBOL (inet_proto_csum_replace4); +/** +* inet_proto_csum_replace16 - update layer 4 header checksum field +* @sum: Layer 4 header checksum field +* @skb: sk_buff for the packet +* @from: old IPv6 address +* @to: new IPv6 address +* @pseudohdr: True if layer 4 header checksum includes pseudoheader +* +* Update layer 4 header as per the update in IPv6 src/dst address. +* +* There is no need to update skb->csum in this function, because update in two +* fields a.) IPv6 src/dst address and b.) L4 header checksum cancels each other +* for skb->csum calculation. Whereas inet_proto_csum_replace4 function needs to +* update skb->csum, because update in 3 fields a.) IPv4 src/dst address, +* b.) IPv4 Header checksum and c.) L4 header checksum results in same diff as +* L4 Header checksum for skb->csum calculation. +*/ void inet_proto_csum_replace16 (__sum16 *sum,struct sk_buff *skb,const __be32 *from,const __be32 *to,bool pseudohdr)
@@ -453,9 +470,6 @@ void inet_proto_csum_replace16(__sum16 *sum, struct sk_buff *skb,if (skb->ip_summed !=CHECKSUM_PARTIAL ) { *sum =csum_fold (csum_partial (diff,sizeof (diff), ~csum_unfold (*sum))); -if (skb->ip_summed ==CHECKSUM_COMPLETE && pseudohdr) - skb->csum = ~csum_partial (diff,sizeof (diff), - ~skb->csum); }else if (pseudohdr) *sum = ~csum_fold (csum_partial (diff,sizeof (diff),csum_unfold (*sum)));
net/ipv4/ip_vti.c +11 -2
@@ -208,8 +208,17 @@ static netdev_tx_t vti_xmit(struct sk_buff *skb, struct net_device *dev,int mtu;if (!dst) { - dev->stats.tx_carrier_errors++; - goto tx_error_icmp; +struct rtable *rt; + + fl->u.ip4.flowi4_oif = dev->ifindex; + fl->u.ip4.flowi4_flags |=FLOWI_FLAG_ANYSRC ; + rt =__ip_route_output_key (dev_net (dev), &fl->u.ip4); +if (IS_ERR (rt)) { + dev->stats.tx_carrier_errors++; + goto tx_error_icmp; + } + dst = &rt->dst; +skb_dst_set (skb, dst); }dst_hold (dst);
net/ipv6/ip6_vti.c +11 -2
@@ -453,8 +453,17 @@ vti6_xmit(struct sk_buff *skb, struct net_device *dev, struct flowi *fl)int err =-1 ;int mtu; -if (!dst) - goto tx_err_link_failure; +if (!dst) { + fl->u.ip6.flowi6_oif = dev->ifindex; + fl->u.ip6.flowi6_flags |=FLOWI_FLAG_ANYSRC ; + dst =ip6_route_output (dev_net (dev),NULL , &fl->u.ip6); +if (dst->error) { +dst_release (dst); + dst =NULL ; + goto tx_err_link_failure; + } +skb_dst_set (skb, dst); + }dst_hold (dst); dst =xfrm_lookup (t->net, dst, fl,NULL ,0 );
net/mac80211/cfg.c +23 -0
@@ -2825,6 +2825,28 @@ static int ieee80211_start_radar_detection(struct wiphy *wiphy,return err; } +static void ieee80211_end_cac (struct wiphy *wiphy, +struct net_device *dev) +{ +struct ieee80211_sub_if_data *sdata =IEEE80211_DEV_TO_SUB_IF (dev); +struct ieee80211_local *local = sdata->local; + +mutex_lock (&local->mtx); +list_for_each_entry (sdata, &local->interfaces, list) { +/* it might be waiting for the local->mtx, but then +* by the time it gets it, sdata->wdev.cac_started +* will no longer be true +*/ +cancel_delayed_work (&sdata->dfs_cac_timer_work); + +if (sdata->wdev.cac_started) { +ieee80211_vif_release_channel (sdata); + sdata->wdev.cac_started = false; + } + } +mutex_unlock (&local->mtx); +} +static struct cfg80211_beacon_data *cfg80211_beacon_dup (struct cfg80211_beacon_data *beacon) {
@@ -3848,6 +3870,7 @@ const struct cfg80211_ops mac80211_config_ops = {#endif .get_channel = ieee80211_cfg_get_channel, .start_radar_detection = ieee80211_start_radar_detection, + .end_cac = ieee80211_end_cac, .channel_switch = ieee80211_channel_switch, .set_qos_map = ieee80211_set_qos_map, .set_ap_chanwidth = ieee80211_set_ap_chanwidth,
net/mac80211/mesh_hwmp.c +3 -0
@@ -326,6 +326,9 @@ static u32 airtime_link_metric_get(struct ieee80211_local *local,unsigned long fail_avg =ewma_mesh_fail_avg_read (&sta->mesh->fail_avg); +if (sta->mesh->plink_state !=NL80211_PLINK_ESTAB ) +return MAX_METRIC ; +/* Try to get rate based on HW/SW RC algorithm. * Rate is returned in units of Kbps, correct this * to comply with airtime calculation units
net/mac80211/tkip.c +15 -3
@@ -266,9 +266,21 @@ int ieee80211_tkip_decrypt_data(struct crypto_cipher *tfm,if ((keyid >>6 ) != key->conf.keyidx)return TKIP_DECRYPT_INVALID_KEYIDX ; -if (rx_ctx->ctx.state !=TKIP_STATE_NOT_INIT && - (iv32 < rx_ctx->iv32 || - (iv32 == rx_ctx->iv32 && iv16 <= rx_ctx->iv16))) +/* Reject replays if the received TSC is smaller than or equal to the +* last received value in a valid message, but with an exception for +* the case where a new key has been set and no valid frame using that +* key has yet received and the local RSC was initialized to 0. This +* exception allows the very first frame sent by the transmitter to be +* accepted even if that transmitter were to use TSC 0 (IEEE 802.11 +* described TSC to be initialized to 1 whenever a new key is taken into +* use). +*/ +if (iv32 < rx_ctx->iv32 || + (iv32 == rx_ctx->iv32 && + (iv16 < rx_ctx->iv16 || + (iv16 == rx_ctx->iv16 && + (rx_ctx->iv32 || rx_ctx->iv16 || + rx_ctx->ctx.state !=TKIP_STATE_NOT_INIT )))))return TKIP_DECRYPT_REPLAY ;if (only_iv) {
net/netfilter/nft_tunnel.c +3 -0
@@ -235,6 +235,9 @@ static int nft_tunnel_obj_erspan_init(const struct nlattr *attr,if (err <0 )return err; +if (!tb[NFTA_TUNNEL_KEY_ERSPAN_VERSION ]) +return -EINVAL ; + version =ntohl (nla_get_be32 (tb[NFTA_TUNNEL_KEY_ERSPAN_VERSION ]));switch (version) {case ERSPAN_VERSION :
net/wireless/rdev-ops.h +10 -0
@@ -1170,6 +1170,16 @@ rdev_start_radar_detection(struct cfg80211_registered_device *rdev,return ret; } +static inline void +rdev_end_cac (struct cfg80211_registered_device *rdev, +struct net_device *dev) +{ +trace_rdev_end_cac (&rdev->wiphy, dev); +if (rdev->ops->end_cac) + rdev->ops->end_cac (&rdev->wiphy, dev); +trace_rdev_return_void (&rdev->wiphy); +} + static inline int rdev_set_mcast_rate(struct cfg80211_registered_device *rdev, struct net_device *dev,
net/wireless/reg.c +32 -4
@@ -2254,14 +2254,15 @@ static void update_all_wiphy_regulatory(enum nl80211_reg_initiator initiator)static void handle_channel_custom (struct wiphy *wiphy,struct ieee80211_channel *chan, -const struct ieee80211_regdomain *regd) +const struct ieee80211_regdomain *regd, +u32 min_bw) {u32 bw_flags =0 ;const struct ieee80211_reg_rule *reg_rule =NULL ;const struct ieee80211_power_rule *power_rule =NULL ;u32 bw; -for (bw =MHZ_TO_KHZ (20 ); bw >=MHZ_TO_KHZ (5 ); bw = bw /2 ) { +for (bw =MHZ_TO_KHZ (20 ); bw >= min_bw; bw = bw /2 ) { reg_rule =freq_reg_info_regd (MHZ_TO_KHZ (chan->center_freq), regd, bw);if (!IS_ERR (reg_rule))
@@ -2317,8 +2318,14 @@ static void handle_band_custom(struct wiphy *wiphy,if (!sband)return ; +/* +* We currently assume that you always want at least 20 MHz, +* otherwise channel 12 might get enabled if this rule is +* compatible to US, which permits 2402 - 2472 MHz. +*/ for (i =0 ; i < sband->n_channels; i++) -handle_channel_custom (wiphy, &sband->channels[i], regd); +handle_channel_custom (wiphy, &sband->channels[i], regd, +MHZ_TO_KHZ (20 )); }/* Used by drivers prior to wiphy registration */
@@ -3833,6 +3840,25 @@ bool regulatory_pre_cac_allowed(struct wiphy *wiphy)return pre_cac_allowed; } +static void cfg80211_check_and_end_cac (struct cfg80211_registered_device *rdev) +{ +struct wireless_dev *wdev; +/* If we finished CAC or received radar, we should end any +* CAC running on the same channels. +* the check !cfg80211_chandef_dfs_usable contain 2 options: +* either all channels are available - those the CAC_FINISHED +* event has effected another wdev state, or there is a channel +* in unavailable state in wdev chandef - those the RADAR_DETECTED +* event has effected another wdev state. +* In both cases we should end the CAC on the wdev. +*/ +list_for_each_entry (wdev, &rdev->wiphy.wdev_list, list) { +if (wdev->cac_started && + !cfg80211_chandef_dfs_usable (&rdev->wiphy, &wdev->chandef)) +rdev_end_cac (rdev, wdev->netdev); + } +} + void regulatory_propagate_dfs_state(struct wiphy *wiphy, struct cfg80211_chan_def *chandef, enum nl80211_dfs_state dfs_state,
@@ -3859,8 +3885,10 @@ void regulatory_propagate_dfs_state(struct wiphy *wiphy,cfg80211_set_dfs_state (&rdev->wiphy, chandef, dfs_state);if (event ==NL80211_RADAR_DETECTED || - event ==NL80211_RADAR_CAC_FINISHED ) + event ==NL80211_RADAR_CAC_FINISHED ) {cfg80211_sched_dfs_chan_update (rdev); +cfg80211_check_and_end_cac (rdev); + }nl80211_radar_notify (rdev, chandef, event,NULL ,GFP_KERNEL ); }
net/wireless/trace.h +5 -0
@@ -607,6 +607,11 @@ DEFINE_EVENT(wiphy_netdev_evt, rdev_flush_pmksa,TP_ARGS (wiphy, netdev) ); +DEFINE_EVENT (wiphy_netdev_evt, rdev_end_cac, + TP_PROTO(struct wiphy *wiphy, struct net_device *netdev), +TP_ARGS (wiphy, netdev) +); + DECLARE_EVENT_CLASS(station_add_change, TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u8 *mac, struct station_parameters *params),
net/wireless/wext-core.c +2 -1
@@ -657,7 +657,8 @@ struct iw_statistics *get_wireless_stats(struct net_device *dev)return NULL ; } -static int iw_handler_get_iwstats (struct net_device * dev, +/* noinline to avoid a bogus warning with -O3 */ +static noinline int iw_handler_get_iwstats(struct net_device * dev,struct iw_request_info * info,union iwreq_data * wrqu,char * extra)
net/xfrm/xfrm_interface.c +26 -8
@@ -268,9 +268,6 @@ xfrmi_xmit2(struct sk_buff *skb, struct net_device *dev, struct flowi *fl)int err =-1 ;int mtu; -if (!dst) - goto tx_err_link_failure; -dst_hold (dst); dst =xfrm_lookup_with_ifid (xi->net, dst, fl,NULL ,0 , xi->p.if_id);if (IS_ERR (dst)) {
@@ -297,7 +294,7 @@ xfrmi_xmit2(struct sk_buff *skb, struct net_device *dev, struct flowi *fl) mtu =dst_mtu (dst);if (!skb->ignore_df && skb->len > mtu) { -skb_dst_update_pmtu (skb, mtu); +skb_dst_update_pmtu_no_confirm (skb, mtu);if (skb->protocol ==htons (ETH_P_IPV6 )) {if (mtu <IPV6_MIN_MTU )
@@ -343,6 +340,7 @@ static netdev_tx_t xfrmi_xmit(struct sk_buff *skb, struct net_device *dev) {struct xfrm_if *xi =netdev_priv (dev);struct net_device_stats *stats = &xi->dev->stats; +struct dst_entry *dst =skb_dst (skb);struct flowi fl;int ret;
@@ -352,10 +350,33 @@ static netdev_tx_t xfrmi_xmit(struct sk_buff *skb, struct net_device *dev)case htons (ETH_P_IPV6 ):xfrm_decode_session (skb, &fl,AF_INET6 );memset (IP6CB (skb),0 ,sizeof (*IP6CB (skb))); +if (!dst) { + fl.u.ip6.flowi6_oif = dev->ifindex; + fl.u.ip6.flowi6_flags |=FLOWI_FLAG_ANYSRC ; + dst =ip6_route_output (dev_net (dev),NULL , &fl.u.ip6); +if (dst->error) { +dst_release (dst); + stats->tx_carrier_errors++; + goto tx_err; + } +skb_dst_set (skb, dst); + }break ;case htons (ETH_P_IP ):xfrm_decode_session (skb, &fl,AF_INET );memset (IPCB (skb),0 ,sizeof (*IPCB (skb))); +if (!dst) { +struct rtable *rt; + + fl.u.ip4.flowi4_oif = dev->ifindex; + fl.u.ip4.flowi4_flags |=FLOWI_FLAG_ANYSRC ; + rt =__ip_route_output_key (dev_net (dev), &fl.u.ip4); +if (IS_ERR (rt)) { + stats->tx_carrier_errors++; + goto tx_err; + } +skb_dst_set (skb, &rt->dst); + }break ;default : goto tx_err;
@@ -566,12 +587,9 @@ static void xfrmi_dev_setup(struct net_device *dev) { dev->netdev_ops = &xfrmi_netdev_ops; dev->type =ARPHRD_NONE ; - dev->hard_header_len =ETH_HLEN ; - dev->min_header_len =ETH_HLEN ; dev->mtu =ETH_DATA_LEN ; dev->min_mtu =ETH_MIN_MTU ; - dev->max_mtu =ETH_DATA_LEN ; - dev->addr_len =ETH_ALEN ; + dev->max_mtu =IP_MAX_MTU ; dev->flags =IFF_NOARP ; dev->needs_free_netdev = true; dev->priv_destructor = xfrmi_dev_free;
security/tomoyo/common.c +4 -7
@@ -2254,9 +2254,9 @@ static const char * const tomoyo_memory_headers[TOMOYO_MAX_MEMORY_STAT] = { [TOMOYO_MEMORY_QUERY] = "query message:", }; -/* Timestamp counter for last updated. */ -static unsigned int tomoyo_stat_updated[TOMOYO_MAX_POLICY_STAT ];/* Counter for number of updates. */ +static atomic_t tomoyo_stat_updated[TOMOYO_MAX_POLICY_STAT ]; +/* Timestamp counter for last updated. */ static time64_t tomoyo_stat_modified[TOMOYO_MAX_POLICY_STAT ];/**
@@ -2268,10 +2268,7 @@ static time64_t tomoyo_stat_modified[TOMOYO_MAX_POLICY_STAT];*/ void tomoyo_update_stat (const u8 index) { -/* -* I don't use atomic operations because race condition is not fatal. -*/ - tomoyo_stat_updated[index]++; +atomic_inc (&tomoyo_stat_updated[index]); tomoyo_stat_modified[index] =ktime_get_real_seconds (); }
@@ -2291,7 +2288,7 @@ static void tomoyo_read_stat(struct tomoyo_io_buffer *head)for (i =0 ; i <TOMOYO_MAX_POLICY_STAT ; i++) {tomoyo_io_printf (head,"Policy %-30s %10u" , tomoyo_policy_headers[i], - tomoyo_stat_updated[i]); +atomic_read (&tomoyo_stat_updated[i]));if (tomoyo_stat_modified[i]) {struct tomoyo_time stamp;tomoyo_convert_time (tomoyo_stat_modified[i], &stamp);
sound/soc/codecs/rt5640.c +7 -0
@@ -2435,6 +2435,13 @@ static void rt5640_disable_jack_detect(struct snd_soc_component *component) {struct rt5640_priv *rt5640 =snd_soc_component_get_drvdata (component); +/* +* soc_remove_component() force-disables jack and thus rt5640->jack +* could be NULL at the time of driver's module unloading. +*/ +if (!rt5640->jack) +return ; +disable_irq (rt5640->irq);rt5640_cancel_work (rt5640);
sound/soc/sti/uniperif_player.c +4 -3
@@ -226,7 +226,6 @@ static void uni_player_set_channel_status(struct uniperif *player,* sampling frequency. If no sample rate is already specified, then * set one. */ -mutex_lock (&player->ctrl_lock);if (runtime) {switch (runtime->rate) {case 22050 :
@@ -303,7 +302,6 @@ static void uni_player_set_channel_status(struct uniperif *player, player->stream_settings.iec958.status[3 + (n *4 )] <<24 ;SET_UNIPERIF_CHANNEL_STA_REGN (player, n, status); } -mutex_unlock (&player->ctrl_lock);/* Update the channel status */ if (player->ver <SND_ST_UNIPERIF_VERSION_UNI_PLR_TOP_1_0 )
@@ -365,8 +363,10 @@ static int uni_player_prepare_iec958(struct uniperif *player,SET_UNIPERIF_CTRL_ZERO_STUFF_HW (player); +mutex_lock (&player->ctrl_lock);/* Update the channel status */ uni_player_set_channel_status (player, runtime); +mutex_unlock (&player->ctrl_lock);/* Clear the user validity user bits */ SET_UNIPERIF_USER_VALIDITY_VALIDITY_LR (player,0 );
@@ -598,7 +598,6 @@ static int uni_player_ctl_iec958_put(struct snd_kcontrol *kcontrol, iec958->status[1 ] = ucontrol->value.iec958.status[1 ]; iec958->status[2 ] = ucontrol->value.iec958.status[2 ]; iec958->status[3 ] = ucontrol->value.iec958.status[3 ]; -mutex_unlock (&player->ctrl_lock);spin_lock_irqsave (&player->irq_lock, flags);if (player->substream && player->substream->runtime)
@@ -608,6 +607,8 @@ static int uni_player_ctl_iec958_put(struct snd_kcontrol *kcontrol,uni_player_set_channel_status (player,NULL );spin_unlock_irqrestore (&player->irq_lock, flags); +mutex_unlock (&player->ctrl_lock); +return 0 ; }
tools/include/linux/string.h +8 -0
@@ -14,7 +14,15 @@ int strtobool(const char *s, bool *res);* However uClibc headers also define __GLIBC__ hence the hack below */ #if defined(__GLIBC__) && !defined(__UCLIBC__) +// pragma diagnostic was introduced in gcc 4.6 +#if __GNUC__ >4 || (__GNUC__ ==4 && __GNUC_MINOR__ >=6 ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wredundant-decls" +#endif extern size_t strlcpy (char *dest,const char *src,size_t size); +#if __GNUC__ >4 || (__GNUC__ ==4 && __GNUC_MINOR__ >=6 ) +#pragma GCC diagnostic pop +#endif #endif char *str_error_r (int errnum,char *buf,size_t buflen);
tools/lib/string.c +7 -0
@@ -95,6 +95,10 @@ int strtobool(const char *s, bool *res)* If libc has strlcpy() then that version will override this * implementation: */ +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wignored-attributes" +#endif size_t __weak strlcpy (char *dest,const char *src,size_t size) {size_t ret =strlen (src);
@@ -106,3 +110,6 @@ size_t __weak strlcpy(char *dest, const char *src, size_t size) }return ret; } +#ifdef __clang__ +#pragma clang diagnostic pop +#endif
tools/lib/traceevent/parse-filter.c +3 -1
@@ -1227,8 +1227,10 @@ filter_event(struct event_filter *filter, struct event_format *event, } filter_type =add_filter_type (filter, event->id); -if (filter_type ==NULL ) +if (filter_type ==NULL ) { +free_arg (arg);return TEP_ERRNO__MEM_ALLOC_FAILED ; + }if (filter_type->filter)free_arg (filter_type->filter);
tools/perf/builtin-c2c.c +6 -4
@@ -586,8 +586,8 @@ tot_hitm_cmp(struct perf_hpp_fmt *fmt __maybe_unused, {struct c2c_hist_entry *c2c_left;struct c2c_hist_entry *c2c_right; -unsigned int tot_hitm_left; -unsigned int tot_hitm_right; +uint64_t tot_hitm_left; +uint64_t tot_hitm_right; c2c_left = container_of(left, struct c2c_hist_entry, he); c2c_right = container_of(right, struct c2c_hist_entry, he);
@@ -620,7 +620,8 @@ __f ## _cmp(struct perf_hpp_fmt *fmt __maybe_unused, \ \ c2c_left = container_of(left, struct c2c_hist_entry, he); \ c2c_right = container_of(right, struct c2c_hist_entry, he); \ -return c2c_left->stats.__f - c2c_right->stats.__f; \ +return (uint64_t ) c2c_left->stats.__f - \ + (uint64_t ) c2c_right->stats.__f; \ }#define STAT_FN (__f) \
@@ -673,7 +674,8 @@ ld_llcmiss_cmp(struct perf_hpp_fmt *fmt __maybe_unused, c2c_left = container_of(left, struct c2c_hist_entry, he); c2c_right = container_of(right, struct c2c_hist_entry, he); -return llc_miss (&c2c_left->stats) -llc_miss (&c2c_right->stats); +return (uint64_t )llc_miss (&c2c_left->stats) - + (uint64_t )llc_miss (&c2c_right->stats); }static uint64_t total_records (struct c2c_stats *stats)
tools/perf/builtin-report.c +3 -3
@@ -383,10 +383,10 @@ static int report__setup_sample_type(struct report *rep) PERF_SAMPLE_BRANCH_ANY)) rep->nonany_branch_mode = true; -#ifndef HAVE_LIBUNWIND_SUPPORT +#if !defined(HAVE_LIBUNWIND_SUPPORT ) && !defined(HAVE_DWARF_SUPPORT )if (dwarf_callchain_users) { -ui__warning ("Please install libunwind development packages " -"during the perf build.\n" ); +ui__warning ("Please install libunwind or libdw " +"development packages during the perf build.\n" ); }#endif