Linux 5.4.18
Greg KH
maintainerI'm announcing the release of the 5.4.18 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.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/arm64/boot/dts/amlogic/meson-sm1-sei610.dts | 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/events/intel/uncore_snb.c | 6 arch/x86/events/intel/uncore_snbep.c | 24 -- arch/x86/kernel/cpu/resctrl/rdtgroup.c | 32 ++- drivers/char/ttyprintk.c | 15 + drivers/clk/mmp/clk-of-mmp2.c | 2 drivers/clk/sunxi-ng/ccu-sun50i-h6-r.c | 4 drivers/clk/sunxi-ng/ccu-sun8i-r.c | 21 -- drivers/clk/sunxi-ng/ccu-sun8i-v3s.c | 4 drivers/clk/sunxi-ng/ccu-sun8i-v3s.h | 2 drivers/cpuidle/governors/teo.c | 21 ++ drivers/devfreq/devfreq.c | 9 + drivers/input/evdev.c | 5 drivers/input/misc/max77650-onkey.c | 7 drivers/leds/leds-max77650.c | 7 drivers/md/dm-thin.c | 7 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/misc/lkdtm/bugs.c | 2 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/e1000e/e1000.h | 5 drivers/net/ethernet/intel/e1000e/netdev.c | 61 +++---- drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 22 ++ drivers/net/ethernet/intel/iavf/iavf.h | 2 drivers/net/ethernet/intel/iavf/iavf_main.c | 17 +- drivers/net/ethernet/intel/iavf/iavf_virtchnl.c | 3 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 | 82 +++++++++- drivers/net/wireless/intel/iwlwifi/dvm/tx.c | 3 drivers/net/wireless/intel/iwlwifi/fw/dbg.c | 7 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/iwl-trans.c | 10 - drivers/net/wireless/intel/iwlwifi/iwl-trans.h | 26 ++- drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 3 drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 15 - drivers/net/wireless/intel/iwlwifi/pcie/internal.h | 6 drivers/net/wireless/intel/iwlwifi/pcie/trans.c | 32 ++- drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c | 21 +- drivers/net/wireless/intel/iwlwifi/pcie/tx.c | 20 +- drivers/net/wireless/rsi/rsi_91x_usb.c | 2 drivers/platform/x86/gpd-pocket-fan.c | 2 drivers/platform/x86/intel_pmc_core_pltdrv.c | 2 drivers/s390/crypto/ap_bus.c | 2 drivers/s390/crypto/ap_bus.h | 2 drivers/s390/crypto/ap_queue.c | 5 drivers/s390/crypto/zcrypt_cex2a.c | 1 drivers/s390/crypto/zcrypt_cex2c.c | 2 drivers/s390/crypto/zcrypt_cex4.c | 1 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/cifs/smb2pdu.c | 2 fs/gfs2/lops.c | 68 +++++--- fs/namei.c | 4 fs/reiserfs/super.c | 2 include/linux/sched.h | 4 include/net/cfg80211.h | 5 kernel/cgroup/cgroup.c | 11 - kernel/trace/trace_kprobe.c | 2 kernel/trace/trace_probe.c | 9 - kernel/trace/trace_probe.h | 10 - kernel/trace/trace_uprobe.c | 29 --- lib/test_xarray.c | 22 ++ lib/xarray.c | 8 mm/mempolicy.c | 6 mm/migrate.c | 2 net/bluetooth/hci_sock.c | 3 net/core/flow_dissector.c | 11 + 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/nf_conntrack_proto_sctp.c | 6 net/netfilter/nf_tables_offload.c | 2 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/hdac_hda.c | 4 sound/soc/codecs/rt5640.c | 7 sound/soc/soc-topology.c | 7 sound/soc/sof/intel/hda-codec.c | 19 +- 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 136 files changed, 869 insertions(+), 396 deletions(-)
Al Viro (1):
vfs: fix do_last() regression
Alexander Duyck (1):
e1000e: Drop unnecessary __E1000_DOWN bit twiddling
Andreas Gruenbacher (1):
gfs2: Another gfs2_find_jhead fix
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
Bartosz Golaszewski (2):
Input: max77650-onkey - add of_match table
led: max77650: add of_match table
Brendan Higgins (1):
lkdtm/bugs: fix build error in lkdtm_UNSET_SMEP
Brett Creeley (1):
i40e: Fix virtchnl_queue_select bitmap validation
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
Ganapathi Bhat (1):
wireless: fix enabling channel 12 for custom regulatory domain
Greg Kroah-Hartman (1):
Linux 5.4.18
Guillaume La Roque (1):
arm64: dts: meson-sm1-sei610: add gpio bluetooth interrupt
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
Harald Freudenberger (1):
s390/zcrypt: move ap device reset from bus to driver code
Harry Pan (1):
platform/x86: intel_pmc_core: update Comet Lake platform driver
Hayes Wang (6):
r8152: get default setting of WOL before initializing
r8152: disable U2P3 for RTL8153B
r8152: Disable PLA MCU clock speed down
r8152: disable test IO for RTL8153B
r8152: avoid the MCU to clear the lanwake
r8152: disable DelayPhyPwrChg
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
Jaroslav Kysela (1):
ASoC: topology: fix soc_tplg_fe_link_create() - link->dobj initialization order
Jeff Kirsher (1):
e1000e: Revert "e1000e: Make watchdog use delayed work"
Jin Yao (1):
perf report: Fix no libunwind compiled warning break s390 issue
Jiri Wiesner (1):
netfilter: conntrack: sctp: use distinct states for new SCTP connections
Johan Hovold (1):
Revert "rsi: fix potential null dereference in rsi_probe()"
Johannes Berg (1):
iwlwifi: pcie: allocate smaller dev_cmd for TX headers
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
Kai Vehmanen (2):
ASoC: SOF: Intel: fix HDA codec driver probe with multiple controllers
ASoC: hdac_hda: Fix error in driver removal after failed probe
Kan Liang (2):
perf/x86/intel/uncore: Add PCI ID of IMC for Xeon E3 V5 Family perf/x86/intel/uncore: Remove PCIe3 unit for SNR
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
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
Masami Hiramatsu (1):
tracing/uprobe: Fix to make trace_uprobe_filter alignment safe
Mathieu Desnoyers (1):
rseq: Unregister rseq for clone CLONE_VM
Matthew Wilcox (Oracle) (1):
XArray: Fix xas_pause at ULONG_MAX
Matwey V. Kornilov (1):
ARM: dts: am335x-boneblack-common: fix memory size
Michal Koutný (1):
cgroup: Prevent double killing of css when enabling threaded cgroup
Mike Snitzer (1):
dm thin: fix use-after-free in metadata_pre_commit_callback
Miles Chen (1):
Input: evdev - convert kzalloc()/vzalloc() to kvzalloc()
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
Rafael J. Wysocki (1):
cpuidle: teo: Avoid using "early hits" incorrectly
Ronnie Sahlberg (1):
cifs: fix soft mounts hanging in the reconnect code
Samuel Holland (2):
clk: sunxi-ng: sun8i-r: Fix divider on APB0 clock
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
Shahar S Matityahu (1):
iwlwifi: dbg: force stop the debug monitor HW
Stefan Assmann (1):
iavf: remove current MAC address filter on VF reset
Tetsuo Handa (1):
tomoyo: Use atomic_t for statistics counter
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 a deadlock due to inaccurate reference x86/resctrl: Fix use-after-free when deleting resource groups x86/resctrl: Fix use-after-free due to inaccurate refcount of rdtgroup
Xu Wang (1):
xfrm: interface: do not confirm neighbor when do pmtu update
Yoshiki Komachi (1):
flow_dissector: Fix to use new variables for port ranges in bpf hook
Yunhao Tian (1):
clk: sunxi-ng: v3s: Fix incorrect number of hw_clks.
Zhenzhong Duan (1):
ttyprintk: fix a potential deadlock in interrupt context issue
wenxu (1):
netfilter: nf_tables_offload: fix check the chain offload flag
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 = 5 PATCHLEVEL = 4 -SUBLEVEL = 17 +SUBLEVEL = 18 EXTRAVERSION = NAME = Kleptomaniac Octopus
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
@@ -848,6 +848,7 @@ pinctrl-names = "default", "sleep"; pinctrl-0 = <&spi0_pins_default>; pinctrl-1 = <&spi0_pins_sleep>; + ti,pindir-d0-out-d1-in = <1>; }; &spi1 {
@@ -855,6 +856,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
@@ -170,10 +170,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
@@ -147,10 +147,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
@@ -29,6 +29,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";
@@ -547,10 +568,6 @@ gpios = <&gpio2 8 GPIO_ACTIVE_LOW>; }; -&pcie1_ep { - gpios = <&gpio2 8 GPIO_ACTIVE_LOW>; -}; - &mcasp3 { #sound-dai-cells = <0>; assigned-clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP3_CLKCTRL 24>;
arch/arm/boot/dts/sun8i-a83t-cubietruck-plus.dts +1 -1
@@ -101,7 +101,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
@@ -146,10 +146,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/arm64/boot/dts/amlogic/meson-sm1-sei610.dts +2 -0
@@ -361,6 +361,8 @@ bluetooth { compatible = "brcm,bcm43438-bt"; + interrupt-parent = <&gpio_intc>; + interrupts = <95 IRQ_TYPE_LEVEL_HIGH>; shutdown-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>; max-speed = <2000000>; clocks = <&wifi32k>;
arch/parisc/kernel/drivers.c +2 -2
@@ -889,8 +889,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
@@ -58,7 +58,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/events/intel/uncore_snb.c +6 -0
@@ -15,6 +15,7 @@#define PCI_DEVICE_ID_INTEL_SKL_HQ_IMC 0x1910#define PCI_DEVICE_ID_INTEL_SKL_SD_IMC 0x190f#define PCI_DEVICE_ID_INTEL_SKL_SQ_IMC 0x191f +#define PCI_DEVICE_ID_INTEL_SKL_E3_IMC 0x1918#define PCI_DEVICE_ID_INTEL_KBL_Y_IMC 0x590c#define PCI_DEVICE_ID_INTEL_KBL_U_IMC 0x5904#define PCI_DEVICE_ID_INTEL_KBL_UQ_IMC 0x5914
@@ -657,6 +658,10 @@ static const struct pci_device_id skl_uncore_pci_ids[] = { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SKL_SQ_IMC), .driver_data =UNCORE_PCI_DEV_DATA (SNB_PCI_UNCORE_IMC ,0 ), }, + { /* IMC */ +PCI_DEVICE (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_SKL_E3_IMC ), + .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0), + }, { /* IMC */PCI_DEVICE (PCI_VENDOR_ID_INTEL ,PCI_DEVICE_ID_INTEL_KBL_Y_IMC ), .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
@@ -826,6 +831,7 @@ static const struct imc_uncore_pci_dev desktop_imc_pci_ids[] = {IMC_DEV (SKL_HQ_IMC , &skl_uncore_pci_driver),/* 6th Gen Core H Quad Core */ IMC_DEV (SKL_SD_IMC , &skl_uncore_pci_driver),/* 6th Gen Core S Dual Core */ IMC_DEV (SKL_SQ_IMC , &skl_uncore_pci_driver),/* 6th Gen Core S Quad Core */ +IMC_DEV (SKL_E3_IMC , &skl_uncore_pci_driver),/* Xeon E3 V5 Gen Core processor */ IMC_DEV (KBL_Y_IMC , &skl_uncore_pci_driver),/* 7th Gen Core Y */ IMC_DEV (KBL_U_IMC , &skl_uncore_pci_driver),/* 7th Gen Core U */ IMC_DEV(KBL_UQ_IMC, &skl_uncore_pci_driver), /* 7th Gen Core U Quad Core */
arch/x86/events/intel/uncore_snbep.c +0 -24
@@ -369,11 +369,6 @@#define SNR_M2M_PCI_PMON_BOX_CTL 0x438#define SNR_M2M_PCI_PMON_UMASK_EXT 0xff -/* SNR PCIE3 */ -#define SNR_PCIE3_PCI_PMON_CTL0 0x508 -#define SNR_PCIE3_PCI_PMON_CTR0 0x4e8 -#define SNR_PCIE3_PCI_PMON_BOX_CTL 0x4e4 -/* SNR IMC */ #define SNR_IMC_MMIO_PMON_FIXED_CTL 0x54#define SNR_IMC_MMIO_PMON_FIXED_CTR 0x38
@@ -4328,27 +4323,12 @@ static struct intel_uncore_type snr_uncore_m2m = { .format_group = &snr_m2m_uncore_format_group, }; -static struct intel_uncore_type snr_uncore_pcie3 = { - .name ="pcie3" , - .num_counters =4 , - .num_boxes =1 , - .perf_ctr_bits =48 , - .perf_ctr =SNR_PCIE3_PCI_PMON_CTR0 , - .event_ctl =SNR_PCIE3_PCI_PMON_CTL0 , - .event_mask =SNBEP_PMON_RAW_EVENT_MASK , - .box_ctl =SNR_PCIE3_PCI_PMON_BOX_CTL , - .ops = &ivbep_uncore_pci_ops, - .format_group = &ivbep_uncore_format_group, -}; -enum {SNR_PCI_UNCORE_M2M , -SNR_PCI_UNCORE_PCIE3 , };static struct intel_uncore_type *snr_pci_uncores[] = { [SNR_PCI_UNCORE_M2M ] = &snr_uncore_m2m, - [SNR_PCI_UNCORE_PCIE3 ] = &snr_uncore_pcie3,NULL , };
@@ -4357,10 +4337,6 @@ static const struct pci_device_id snr_uncore_pci_ids[] = { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x344a), .driver_data = UNCORE_PCI_DEV_FULL_DATA(12, 0, SNR_PCI_UNCORE_M2M, 0), }, - {/* PCIe3 */ - PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x334a), - .driver_data = UNCORE_PCI_DEV_FULL_DATA(4, 0, SNR_PCI_UNCORE_PCIE3, 0), - }, {/* end: all zeroes */ } };
arch/x86/kernel/cpu/resctrl/rdtgroup.c +20 -12
@@ -1970,7 +1970,7 @@ static int rdt_get_tree(struct fs_context *fc)if (rdt_mon_capable) { ret =mongroup_create_dir (rdtgroup_default.kn, -NULL ,"mon_groups" , + &rdtgroup_default,"mon_groups" , &kn_mongrp);if (ret <0 ) goto out_info;
@@ -2205,7 +2205,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); } }
@@ -2243,7 +2247,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);
@@ -2446,7 +2454,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;
@@ -2645,7 +2653,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);if (!prdtgrp) { ret = -ENODEV ; goto out_unlock;
@@ -2718,7 +2726,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 ;
@@ -2729,7 +2737,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; }
@@ -2767,7 +2775,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; }
@@ -2810,7 +2818,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;
@@ -2826,7 +2834,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; }
@@ -2952,13 +2960,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 ; }
drivers/char/ttyprintk.c +9 -6
@@ -15,10 +15,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;
@@ -99,11 +100,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); }
@@ -115,13 +117,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; }
@@ -171,7 +174,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/clk/sunxi-ng/ccu-sun8i-r.c +3 -18
@@ -51,19 +51,7 @@ static struct ccu_div ar100_clk = { static CLK_FIXED_FACTOR_HW(ahb0_clk, "ahb0", &ar100_clk.common.hw, 1, 1, 0); -static struct ccu_div apb0_clk = { - .div =_SUNXI_CCU_DIV_FLAGS (0 ,2 ,CLK_DIVIDER_POWER_OF_TWO ), - - .common = { - .reg =0x0c , - .hw.init =CLK_HW_INIT_HW ("apb0" , - &ahb0_clk.hw, - &ccu_div_ops, -0 ), - }, -}; - -static SUNXI_CCU_M(a83t_apb0_clk, "apb0", "ahb0", 0x0c, 0, 2, 0); +static SUNXI_CCU_M(apb0_clk, "apb0", "ahb0", 0x0c, 0, 2, 0);/* * Define the parent as an array that can be reused to save space
@@ -127,7 +115,7 @@ static struct ccu_mp a83t_ir_clk = {static struct ccu_common *sun8i_a83t_r_ccu_clks[] = { &ar100_clk.common, - &a83t_apb0_clk.common, + &apb0_clk.common, &apb0_pio_clk.common, &apb0_ir_clk.common, &apb0_timer_clk.common,
@@ -167,7 +155,7 @@ static struct clk_hw_onecell_data sun8i_a83t_r_hw_clks = { .hws = { [CLK_AR100] = &ar100_clk.common.hw, [CLK_AHB0] = &ahb0_clk.hw, - [CLK_APB0] = &a83t_apb0_clk.common.hw, + [CLK_APB0] = &apb0_clk.common.hw, [CLK_APB0_PIO] = &apb0_pio_clk.common.hw, [CLK_APB0_IR] = &apb0_ir_clk.common.hw, [CLK_APB0_TIMER] = &apb0_timer_clk.common.hw,
@@ -282,9 +270,6 @@ static void __init sunxi_r_ccu_init(struct device_node *node,static void __init sun8i_a83t_r_ccu_setup (struct device_node *node) { -/* Fix apb0 bus gate parents here */ - apb0_gate_parent[0 ] = &a83t_apb0_clk.common.hw; -sunxi_r_ccu_init (node, &sun8i_a83t_r_ccu_desc); } CLK_OF_DECLARE(sun8i_a83t_r_ccu, "allwinner,sun8i-a83t-r-ccu",
drivers/clk/sunxi-ng/ccu-sun8i-v3s.c +2 -2
@@ -618,7 +618,7 @@ static struct clk_hw_onecell_data sun8i_v3s_hw_clks = { [CLK_MBUS] = &mbus_clk.common.hw, [CLK_MIPI_CSI] = &mipi_csi_clk.common.hw, }, - .num = CLK_NUMBER, + .num = CLK_PLL_DDR1 + 1, };static struct clk_hw_onecell_data sun8i_v3_hw_clks = {
@@ -700,7 +700,7 @@ static struct clk_hw_onecell_data sun8i_v3_hw_clks = { [CLK_MBUS] = &mbus_clk.common.hw, [CLK_MIPI_CSI] = &mipi_csi_clk.common.hw, }, - .num = CLK_NUMBER, + .num = CLK_I2S0 + 1, };static struct ccu_reset_map sun8i_v3s_ccu_resets[] = {
drivers/clk/sunxi-ng/ccu-sun8i-v3s.h +0 -2
@@ -51,6 +51,4 @@#define CLK_PLL_DDR1 74 -#define CLK_NUMBER (CLK_I2S0 + 1) -#endif /* _CCU_SUN8I_H3_H_ */
drivers/cpuidle/governors/teo.c +17 -4
@@ -234,7 +234,7 @@ static int teo_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,struct teo_cpu *cpu_data =per_cpu_ptr (&teo_cpus, dev->cpu);int latency_req =cpuidle_governor_latency_req (dev->cpu);unsigned int duration_us, hits, misses, early_hits; -int max_early_idx, constraint_idx, idx, i; +int max_early_idx, prev_max_early_idx, constraint_idx, idx, i;ktime_t delta_tick;if (dev->last_state_idx >=0 ) {
@@ -251,6 +251,7 @@ static int teo_select(struct cpuidle_driver *drv, struct cpuidle_device *dev, misses =0 ; early_hits =0 ; max_early_idx =-1 ; + prev_max_early_idx =-1 ; constraint_idx = drv->state_count; idx =-1 ;
@@ -303,6 +304,7 @@ static int teo_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,*/ if (!(tick_nohz_tick_stopped () && drv->states[idx].target_residency <TICK_USEC )) { + prev_max_early_idx = max_early_idx; early_hits = cpu_data->states[i].early_hits; max_early_idx = idx; }
@@ -329,6 +331,7 @@ static int teo_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,if (early_hits < cpu_data->states[i].early_hits && !(tick_nohz_tick_stopped () && drv->states[i].target_residency <TICK_USEC )) { + prev_max_early_idx = max_early_idx; early_hits = cpu_data->states[i].early_hits; max_early_idx = i; }
@@ -342,9 +345,19 @@ static int teo_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,* "early hits" metric, but if that cannot be determined, just use the * state selected so far. */ -if (hits <= misses && max_early_idx >=0 ) { - idx = max_early_idx; - duration_us = drv->states[idx].target_residency; +if (hits <= misses) { +/* +* The current candidate state is not suitable, so take the one +* whose "early hits" metric is the maximum for the range of +* shallower states. +*/ +if (idx == max_early_idx) + max_early_idx = prev_max_early_idx; + +if (max_early_idx >=0 ) { + idx = max_early_idx; + duration_us = drv->states[idx].target_residency; + } }/*
drivers/devfreq/devfreq.c +9 -0
@@ -1112,6 +1112,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) {
@@ -1440,6 +1448,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/input/evdev.c +1 -4
@@ -484,10 +484,7 @@ static int evdev_open(struct inode *inode, struct file *file)struct evdev_client *client;int error; - client =kzalloc (struct_size (client, buffer, bufsize), -GFP_KERNEL | __GFP_NOWARN); -if (!client) - client =vzalloc (struct_size (client, buffer, bufsize)); + client =kvzalloc (struct_size (client, buffer, bufsize),GFP_KERNEL );if (!client)return -ENOMEM ;
drivers/input/misc/max77650-onkey.c +7 -0
@@ -108,9 +108,16 @@ static int max77650_onkey_probe(struct platform_device *pdev)return input_register_device (onkey->input); } +static const struct of_device_id max77650_onkey_of_match[] = { + { .compatible ="maxim,max77650-onkey" }, + { } +}; +MODULE_DEVICE_TABLE (of, max77650_onkey_of_match); +static struct platform_driver max77650_onkey_driver = { .driver = { .name ="max77650-onkey" , + .of_match_table = max77650_onkey_of_match, }, .probe = max77650_onkey_probe, };
drivers/leds/leds-max77650.c +7 -0
@@ -135,9 +135,16 @@ static int max77650_led_probe(struct platform_device *pdev)return rv; } +static const struct of_device_id max77650_led_of_match[] = { + { .compatible ="maxim,max77650-led" }, + { } +}; +MODULE_DEVICE_TABLE (of, max77650_led_of_match); +static struct platform_driver max77650_led_driver = { .driver = { .name ="max77650-led" , + .of_match_table = max77650_led_of_match, }, .probe = max77650_led_probe, };
drivers/md/dm-thin.c +3 -4
@@ -3420,10 +3420,6 @@ static int pool_ctr(struct dm_target *ti, unsigned argc, char **argv)if (r) goto out_flags_changed; -dm_pool_register_pre_commit_callback (pt->pool->pmd, - metadata_pre_commit_callback, - pt); - pt->callbacks.congested_fn = pool_is_congested;dm_table_add_target_callbacks (ti->table, &pt->callbacks);
@@ -3587,6 +3583,9 @@ static int pool_preresume(struct dm_target *ti)if (r)return r; +dm_pool_register_pre_commit_callback (pool->pmd, + metadata_pre_commit_callback, pt); + r =maybe_resize_data_dev (ti, &need_commit1);if (r)return r;
drivers/media/usb/dvb-usb/af9005.c +1 -1
@@ -554,7 +554,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
@@ -230,18 +230,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
@@ -96,10 +96,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 ) {/*
@@ -115,15 +119,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
@@ -1461,7 +1461,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/misc/lkdtm/bugs.c +1 -1
@@ -274,7 +274,7 @@ void lkdtm_STACK_GUARD_PAGE_TRAILING(void)void lkdtm_UNSET_SMEP (void ) { -#ifdef CONFIG_X86_64 +#if IS_ENABLED (CONFIG_X86_64 ) && !IS_ENABLED (CONFIG_UML )#define MOV_CR4_DEPTH 64void (*direct_write_cr4)(unsigned long val);unsigned char *insn;
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
@@ -682,8 +682,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/e1000e/e1000.h +2 -3
@@ -185,13 +185,12 @@ struct e1000_phy_regs {/* board specific private data structure */ struct e1000_adapter { +struct timer_list watchdog_timer;struct timer_list phy_info_timer;struct timer_list blink_timer;struct work_struct reset_task; -struct delayed_work watchdog_task; - -struct workqueue_struct *e1000_workqueue; +struct work_struct watchdog_task;const struct e1000_info *ei;
drivers/net/ethernet/intel/e1000e/netdev.c +26 -35
141 lines not on this page · raw message
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +18 -4
@@ -2322,6 +2322,22 @@ static int i40e_ctrl_vf_rx_rings(struct i40e_vsi *vsi, unsigned long q_map,return ret; } +/** +* i40e_vc_validate_vqs_bitmaps - validate Rx/Tx queue bitmaps from VIRTHCHNL +* @vqs: virtchnl_queue_select structure containing bitmaps to validate +* +* Returns true if validation was successful, else false. +*/ +static bool i40e_vc_validate_vqs_bitmaps (struct virtchnl_queue_select *vqs) +{ +if ((!vqs->rx_queues && !vqs->tx_queues) || + vqs->rx_queues >=BIT (I40E_MAX_VF_QUEUES ) || + vqs->tx_queues >=BIT (I40E_MAX_VF_QUEUES )) +return false; + +return true; +} +/** * i40e_vc_enable_queues_msg * @vf: pointer to the VF info
@@ -2347,7 +2363,7 @@ static int i40e_vc_enable_queues_msg(struct i40e_vf *vf, u8 *msg) goto error_param; } -if ((0 == vqs->rx_queues) && (0 == vqs->tx_queues)) { +if (i40e_vc_validate_vqs_bitmaps (vqs)) { aq_ret =I40E_ERR_PARAM ; goto error_param; }
@@ -2409,9 +2425,7 @@ static int i40e_vc_disable_queues_msg(struct i40e_vf *vf, u8 *msg) goto error_param; } -if ((vqs->rx_queues ==0 && vqs->tx_queues ==0 ) || - vqs->rx_queues >I40E_MAX_VF_QUEUES || - vqs->tx_queues >I40E_MAX_VF_QUEUES ) { +if (i40e_vc_validate_vqs_bitmaps (vqs)) { aq_ret =I40E_ERR_PARAM ; goto error_param; }
drivers/net/ethernet/intel/iavf/iavf.h +2 -0
@@ -415,4 +415,6 @@ void iavf_enable_channels(struct iavf_adapter *adapter);void iavf_disable_channels (struct iavf_adapter *adapter);void iavf_add_cloud_filter (struct iavf_adapter *adapter);void iavf_del_cloud_filter (struct iavf_adapter *adapter); +struct iavf_mac_filter *iavf_add_filter (struct iavf_adapter *adapter, +const u8 *macaddr);#endif /* _IAVF_H_ */
drivers/net/ethernet/intel/iavf/iavf_main.c +13 -4
@@ -743,9 +743,8 @@ iavf_mac_filter *iavf_find_filter(struct iavf_adapter *adapter,* * Returns ptr to the filter object or NULL when no memory available. **/ -static struct -iavf_mac_filter *iavf_add_filter (struct iavf_adapter *adapter, -const u8 *macaddr) +struct iavf_mac_filter *iavf_add_filter (struct iavf_adapter *adapter, +const u8 *macaddr) {struct iavf_mac_filter *f;
@@ -2065,9 +2064,9 @@ static void iavf_reset_task(struct work_struct *work)struct virtchnl_vf_resource *vfres = adapter->vf_res;struct net_device *netdev = adapter->netdev;struct iavf_hw *hw = &adapter->hw; +struct iavf_mac_filter *f, *ftmp;struct iavf_vlan_filter *vlf;struct iavf_cloud_filter *cf; -struct iavf_mac_filter *f;u32 reg_val;int i =0 , err;bool running;
@@ -2181,6 +2180,16 @@ static void iavf_reset_task(struct work_struct *work)spin_lock_bh (&adapter->mac_vlan_list_lock); +/* Delete filter for the current MAC address, it could have +* been changed by the PF via administratively set MAC. +* Will be re-added via VIRTCHNL_OP_GET_VF_RESOURCES. +*/ +list_for_each_entry_safe (f, ftmp, &adapter->mac_filter_list, list) { +if (ether_addr_equal (f->macaddr, adapter->hw.mac.addr)) { +list_del (&f->list); +kfree (f); + } + }/* re-add all MAC filters */ list_for_each_entry (f, &adapter->mac_filter_list, list) { f->add = true;
drivers/net/ethernet/intel/iavf/iavf_virtchnl.c +3 -0
@@ -1359,6 +1359,9 @@ void iavf_virtchnl_completion(struct iavf_adapter *adapter,ether_addr_copy (netdev->perm_addr, adapter->hw.mac.addr); } +spin_lock_bh (&adapter->mac_vlan_list_lock); +iavf_add_filter (adapter, adapter->hw.mac.addr); +spin_unlock_bh (&adapter->mac_vlan_list_lock);iavf_process_config (adapter); }break ;
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
@@ -5239,7 +5239,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);
@@ -5248,17 +5248,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
@@ -2081,11 +2081,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
@@ -1062,6 +1062,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 +74 -8
218 lines not on this page · raw message
drivers/net/wireless/intel/iwlwifi/dvm/tx.c +1 -2
@@ -267,7 +267,7 @@ int iwlagn_tx_skb(struct iwl_priv *priv,struct ieee80211_tx_info *info =IEEE80211_SKB_CB (skb);struct iwl_station_priv *sta_priv =NULL ;struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS ]; -struct iwl_device_cmd *dev_cmd; +struct iwl_device_tx_cmd *dev_cmd;struct iwl_tx_cmd *tx_cmd;__le16 fc;u8 hdr_len;
@@ -348,7 +348,6 @@ int iwlagn_tx_skb(struct iwl_priv *priv,if (unlikely (!dev_cmd)) goto drop_unlock_priv; -memset (dev_cmd,0 ,sizeof (*dev_cmd)); dev_cmd->hdr.cmd =REPLY_TX ; tx_cmd = (struct iwl_tx_cmd *) dev_cmd->payload;
drivers/net/wireless/intel/iwlwifi/fw/dbg.c +1 -6
@@ -2490,12 +2490,7 @@ int iwl_fw_dbg_stop_restart_recording(struct iwl_fw_runtime *fwrt, {int ret =0 ; -/* if the FW crashed or not debug monitor cfg was given, there is -* no point in changing the recording state -*/ -if (test_bit (STATUS_FW_ERROR , &fwrt->trans->status) || - (!fwrt->trans->dbg.dest_tlv && - fwrt->trans->dbg.ini_dest ==IWL_FW_INI_LOCATION_INVALID )) +if (test_bit (STATUS_FW_ERROR , &fwrt->trans->status))return 0 ; if (fw_has_capa(&fwrt->fw->ucode_capa,
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
@@ -29,7 +29,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
@@ -103,7 +103,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/iwl-trans.c +5 -5
@@ -66,7 +66,9 @@struct iwl_trans *iwl_trans_alloc (unsigned int priv_size,struct device *dev, -const struct iwl_trans_ops *ops) +const struct iwl_trans_ops *ops, +unsigned int cmd_pool_size, +unsigned int cmd_pool_align) {struct iwl_trans *trans;#ifdef CONFIG_LOCKDEP
@@ -90,10 +92,8 @@ struct iwl_trans *iwl_trans_alloc(unsigned int priv_size, "iwl_cmd_pool:%s", dev_name(trans->dev)); trans->dev_cmd_pool =kmem_cache_create (trans->dev_cmd_pool_name, -sizeof (struct iwl_device_cmd ), -sizeof (void *), -SLAB_HWCACHE_ALIGN , -NULL ); + cmd_pool_size, cmd_pool_align, +SLAB_HWCACHE_ALIGN ,NULL );if (!trans->dev_cmd_pool)return NULL ;
drivers/net/wireless/intel/iwlwifi/iwl-trans.h +20 -6
@@ -193,6 +193,18 @@ struct iwl_device_cmd { }; } __packed; +/** +* struct iwl_device_tx_cmd - buffer for TX command +* @hdr: the header +* @payload: the payload placeholder +* +* The actual structure is sized dynamically according to need. +*/ +struct iwl_device_tx_cmd { +struct iwl_cmd_header hdr; +u8 payload[]; +} __packed; +#define TFD_MAX_PAYLOAD_SIZE (sizeof(struct iwl_device_cmd))/*
@@ -544,7 +556,7 @@ struct iwl_trans_ops {int (*send_cmd)(struct iwl_trans *trans,struct iwl_host_cmd *cmd);int (*tx)(struct iwl_trans *trans,struct sk_buff *skb, -struct iwl_device_cmd *dev_cmd,int queue); +struct iwl_device_tx_cmd *dev_cmd,int queue);void (*reclaim)(struct iwl_trans *trans,int queue,int ssn,struct sk_buff_head *skbs);
@@ -921,22 +933,22 @@ iwl_trans_dump_data(struct iwl_trans *trans, u32 dump_mask)return trans->ops->dump_data (trans, dump_mask); } -static inline struct iwl_device_cmd * +static inline struct iwl_device_tx_cmd *iwl_trans_alloc_tx_cmd (struct iwl_trans *trans) { -return kmem_cache_alloc (trans->dev_cmd_pool,GFP_ATOMIC ); +return kmem_cache_zalloc (trans->dev_cmd_pool,GFP_ATOMIC ); }int iwl_trans_send_cmd (struct iwl_trans *trans,struct iwl_host_cmd *cmd);static inline void iwl_trans_free_tx_cmd (struct iwl_trans *trans, -struct iwl_device_cmd *dev_cmd) +struct iwl_device_tx_cmd *dev_cmd) {kmem_cache_free (trans->dev_cmd_pool, dev_cmd); }static inline int iwl_trans_tx (struct iwl_trans *trans,struct sk_buff *skb, -struct iwl_device_cmd *dev_cmd,int queue) +struct iwl_device_tx_cmd *dev_cmd,int queue) {if (unlikely (test_bit (STATUS_FW_ERROR , &trans->status)))return -EIO ;
@@ -1239,7 +1251,9 @@ static inline bool iwl_trans_dbg_ini_valid(struct iwl_trans *trans)*****************************************************/ struct iwl_trans *iwl_trans_alloc (unsigned int priv_size,struct device *dev, -const struct iwl_trans_ops *ops); +const struct iwl_trans_ops *ops, +unsigned int cmd_pool_size, +unsigned int cmd_pool_align);void iwl_trans_free (struct iwl_trans *trans);/*****************************************************
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +2 -1
@@ -256,7 +256,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/intel/iwlwifi/mvm/tx.c +5 -10
@@ -487,13 +487,13 @@ static void iwl_mvm_set_tx_cmd_crypto(struct iwl_mvm *mvm,/* * Allocates and sets the Tx cmd the driver data pointers in the skb */ -static struct iwl_device_cmd * +static struct iwl_device_tx_cmd *iwl_mvm_set_tx_params (struct iwl_mvm *mvm,struct sk_buff *skb,struct ieee80211_tx_info *info,int hdrlen,struct ieee80211_sta *sta,u8 sta_id) {struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; -struct iwl_device_cmd *dev_cmd; +struct iwl_device_tx_cmd *dev_cmd;struct iwl_tx_cmd *tx_cmd; dev_cmd =iwl_trans_alloc_tx_cmd (mvm->trans);
@@ -501,11 +501,6 @@ iwl_mvm_set_tx_params(struct iwl_mvm *mvm, struct sk_buff *skb,if (unlikely (!dev_cmd))return NULL ; -/* Make sure we zero enough of dev_cmd */ -BUILD_BUG_ON (sizeof (struct iwl_tx_cmd_gen2 ) >sizeof (*tx_cmd)); -BUILD_BUG_ON (sizeof (struct iwl_tx_cmd_gen3 ) >sizeof (*tx_cmd)); - -memset (dev_cmd,0 ,sizeof (dev_cmd->hdr) +sizeof (*tx_cmd)); dev_cmd->hdr.cmd =TX_CMD ;if (iwl_mvm_has_new_tx_api (mvm)) {
@@ -594,7 +589,7 @@ iwl_mvm_set_tx_params(struct iwl_mvm *mvm, struct sk_buff *skb, }static void iwl_mvm_skb_prepare_status (struct sk_buff *skb, -struct iwl_device_cmd *cmd) +struct iwl_device_tx_cmd *cmd) {struct ieee80211_tx_info *skb_info =IEEE80211_SKB_CB (skb);
@@ -713,7 +708,7 @@ int iwl_mvm_tx_skb_non_sta(struct iwl_mvm *mvm, struct sk_buff *skb) {struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;struct ieee80211_tx_info info; -struct iwl_device_cmd *dev_cmd; +struct iwl_device_tx_cmd *dev_cmd;u8 sta_id;int hdrlen =ieee80211_hdrlen (hdr->frame_control);__le16 fc = hdr->frame_control;
@@ -1075,7 +1070,7 @@ static int iwl_mvm_tx_mpdu(struct iwl_mvm *mvm, struct sk_buff *skb, {struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;struct iwl_mvm_sta *mvmsta; -struct iwl_device_cmd *dev_cmd; +struct iwl_device_tx_cmd *dev_cmd;__le16 fc;u16 seq_number =0 ;u8 tid =IWL_MAX_TID_COUNT ;
drivers/net/wireless/intel/iwlwifi/pcie/internal.h +3 -3
@@ -305,7 +305,7 @@ struct iwl_cmd_meta {#define IWL_FIRST_TB_SIZE_ALIGN ALIGN(IWL_FIRST_TB_SIZE, 64)struct iwl_pcie_txq_entry { -struct iwl_device_cmd *cmd; +void *cmd;struct sk_buff *skb;/* buffer to free after command completes */ const void *free_buf;
@@ -690,7 +690,7 @@ void iwl_trans_pcie_txq_set_shared_mode(struct iwl_trans *trans, u32 txq_id,void iwl_trans_pcie_log_scd_error (struct iwl_trans *trans,struct iwl_txq *txq);int iwl_trans_pcie_tx (struct iwl_trans *trans,struct sk_buff *skb, -struct iwl_device_cmd *dev_cmd,int txq_id); +struct iwl_device_tx_cmd *dev_cmd,int txq_id);void iwl_pcie_txq_check_wrptrs (struct iwl_trans *trans);int iwl_trans_pcie_send_hcmd (struct iwl_trans *trans,struct iwl_host_cmd *cmd);void iwl_pcie_cmdq_reclaim (struct iwl_trans *trans,int txq_id,int idx);
@@ -1111,7 +1111,7 @@ int iwl_trans_pcie_dyn_txq_alloc(struct iwl_trans *trans, unsigned int timeout);void iwl_trans_pcie_dyn_txq_free (struct iwl_trans *trans,int queue);int iwl_trans_pcie_gen2_tx (struct iwl_trans *trans,struct sk_buff *skb, -struct iwl_device_cmd *dev_cmd,int txq_id); +struct iwl_device_tx_cmd *dev_cmd,int txq_id);int iwl_trans_pcie_gen2_send_hcmd (struct iwl_trans *trans,struct iwl_host_cmd *cmd);void iwl_trans_pcie_gen2_stop_device (struct iwl_trans *trans);
drivers/net/wireless/intel/iwlwifi/pcie/trans.c +24 -8
@@ -79,6 +79,7 @@#include "iwl-agn-hw.h" #include "fw/error-dump.h" #include "fw/dbg.h" +#include "fw/api/tx.h" #include "internal.h" #include "iwl-fh.h"
@@ -3462,19 +3463,34 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, {struct iwl_trans_pcie *trans_pcie;struct iwl_trans *trans; -int ret, addr_size; +int ret, addr_size, txcmd_size, txcmd_align; +const struct iwl_trans_ops *ops = &trans_ops_pcie_gen2; + +if (!cfg_trans->gen2) { + ops = &trans_ops_pcie; + txcmd_size =sizeof (struct iwl_tx_cmd ); + txcmd_align =sizeof (void *); + }else if (cfg_trans->device_family <IWL_DEVICE_FAMILY_AX210 ) { + txcmd_size =sizeof (struct iwl_tx_cmd_gen2 ); + txcmd_align =64 ; + }else { + txcmd_size =sizeof (struct iwl_tx_cmd_gen3 ); + txcmd_align =128 ; + } + + txcmd_size +=sizeof (struct iwl_cmd_header ); + txcmd_size +=36 ;/* biggest possible 802.11 header */ + +/* Ensure device TX cmd cannot reach/cross a page boundary in gen2 */ +if (WARN_ON (cfg_trans->gen2 && txcmd_size >= txcmd_align)) +return ERR_PTR (-EINVAL ); ret =pcim_enable_device (pdev);if (ret)return ERR_PTR (ret); -if (cfg_trans->gen2) - trans =iwl_trans_alloc (sizeof (struct iwl_trans_pcie ), - &pdev->dev, &trans_ops_pcie_gen2); -else - trans =iwl_trans_alloc (sizeof (struct iwl_trans_pcie ), - &pdev->dev, &trans_ops_pcie); - + trans =iwl_trans_alloc (sizeof (struct iwl_trans_pcie ), &pdev->dev, ops, + txcmd_size, txcmd_align);if (!trans)return ERR_PTR (-ENOMEM );
drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c +15 -6
@@ -243,7 +243,8 @@ static int iwl_pcie_gen2_set_tb(struct iwl_trans *trans,static int iwl_pcie_gen2_build_amsdu (struct iwl_trans *trans,struct sk_buff *skb,struct iwl_tfh_tfd *tfd,int start_len, -u8 hdr_len,struct iwl_device_cmd *dev_cmd) +u8 hdr_len, +struct iwl_device_tx_cmd *dev_cmd) {#ifdef CONFIG_INET struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans);
@@ -371,7 +372,7 @@ static int iwl_pcie_gen2_build_amsdu(struct iwl_trans *trans,static struct iwl_tfh_tfd *iwl_pcie_gen2_build_tx_amsdu(struct iwl_trans *trans, struct iwl_txq *txq, - struct iwl_device_cmd *dev_cmd, + struct iwl_device_tx_cmd *dev_cmd, struct sk_buff *skb, struct iwl_cmd_meta *out_meta, int hdr_len,
@@ -403,6 +404,10 @@ iwl_tfh_tfd *iwl_pcie_gen2_build_tx_amsdu(struct iwl_trans *trans, tb_phys =dma_map_single (trans->dev, tb1_addr, len,DMA_TO_DEVICE );if (unlikely (dma_mapping_error (trans->dev, tb_phys))) goto out_err; +/* +* No need for _with_wa(), we ensure (via alignment) that the data +* here can never cross or end at a page boundary. +*/ iwl_pcie_gen2_set_tb (trans, tfd, tb_phys, len); if (iwl_pcie_gen2_build_amsdu(trans, skb, tfd,
@@ -456,7 +461,7 @@ static int iwl_pcie_gen2_tx_add_frags(struct iwl_trans *trans,static struct iwl_tfh_tfd *iwl_pcie_gen2_build_tx(struct iwl_trans *trans, struct iwl_txq *txq, - struct iwl_device_cmd *dev_cmd, + struct iwl_device_tx_cmd *dev_cmd, struct sk_buff *skb, struct iwl_cmd_meta *out_meta, int hdr_len,
@@ -496,6 +501,10 @@ iwl_tfh_tfd *iwl_pcie_gen2_build_tx(struct iwl_trans *trans, tb_phys =dma_map_single (trans->dev, tb1_addr, tb1_len,DMA_TO_DEVICE );if (unlikely (dma_mapping_error (trans->dev, tb_phys))) goto out_err; +/* +* No need for _with_wa(), we ensure (via alignment) that the data +* here can never cross or end at a page boundary. +*/ iwl_pcie_gen2_set_tb (trans, tfd, tb_phys, tb1_len);trace_iwlwifi_dev_tx (trans->dev, skb, tfd,sizeof (*tfd), &dev_cmd->hdr,IWL_FIRST_TB_SIZE + tb1_len, hdr_len);
@@ -540,7 +549,7 @@ iwl_tfh_tfd *iwl_pcie_gen2_build_tx(struct iwl_trans *trans,static struct iwl_tfh_tfd *iwl_pcie_gen2_build_tfd (struct iwl_trans *trans,struct iwl_txq *txq, -struct iwl_device_cmd *dev_cmd, +struct iwl_device_tx_cmd *dev_cmd,struct sk_buff *skb,struct iwl_cmd_meta *out_meta) {
@@ -580,7 +589,7 @@ struct iwl_tfh_tfd *iwl_pcie_gen2_build_tfd(struct iwl_trans *trans, }int iwl_trans_pcie_gen2_tx (struct iwl_trans *trans,struct sk_buff *skb, -struct iwl_device_cmd *dev_cmd,int txq_id) +struct iwl_device_tx_cmd *dev_cmd,int txq_id) {struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans);struct iwl_cmd_meta *out_meta;
@@ -605,7 +614,7 @@ int iwl_trans_pcie_gen2_tx(struct iwl_trans *trans, struct sk_buff *skb,/* don't put the packet on the ring, if there is no room */ if (unlikely (iwl_queue_space (trans, txq) <3 )) { -struct iwl_device_cmd **dev_cmd_ptr; +struct iwl_device_tx_cmd **dev_cmd_ptr; dev_cmd_ptr = (void *)((u8 *)skb->cb + trans_pcie->dev_cmd_offs);
drivers/net/wireless/intel/iwlwifi/pcie/tx.c +11 -9
@@ -213,8 +213,8 @@ static void iwl_pcie_txq_update_byte_cnt_tbl(struct iwl_trans *trans,u8 sec_ctl =0 ;u16 len = byte_cnt +IWL_TX_CRC_SIZE +IWL_TX_DELIMITER_SIZE ;__le16 bc_ent; -struct iwl_tx_cmd *tx_cmd = - (void *)txq->entries[txq->write_ptr].cmd->payload; +struct iwl_device_tx_cmd *dev_cmd = txq->entries[txq->write_ptr].cmd; +struct iwl_tx_cmd *tx_cmd = (void *)dev_cmd->payload;u8 sta_id = tx_cmd->sta_id; scd_bc_tbl = trans_pcie->scd_bc_tbls.addr;
@@ -257,8 +257,8 @@ static void iwl_pcie_txq_inval_byte_cnt_tbl(struct iwl_trans *trans,int read_ptr = txq->read_ptr;u8 sta_id =0 ;__le16 bc_ent; -struct iwl_tx_cmd *tx_cmd = - (void *)txq->entries[read_ptr].cmd->payload; +struct iwl_device_tx_cmd *dev_cmd = txq->entries[read_ptr].cmd; +struct iwl_tx_cmd *tx_cmd = (void *)dev_cmd->payload;WARN_ON (read_ptr >=TFD_QUEUE_SIZE_MAX );
@@ -1196,7 +1196,7 @@ void iwl_trans_pcie_reclaim(struct iwl_trans *trans, int txq_id, int ssn,while (!skb_queue_empty (&overflow_skbs)) {struct sk_buff *skb =__skb_dequeue (&overflow_skbs); -struct iwl_device_cmd *dev_cmd_ptr; +struct iwl_device_tx_cmd *dev_cmd_ptr; dev_cmd_ptr = *(void **)((u8 *)skb->cb + trans_pcie->dev_cmd_offs);
@@ -2099,7 +2099,8 @@ static void iwl_compute_pseudo_hdr_csum(void *iph, struct tcphdr *tcph,static int iwl_fill_data_tbs_amsdu (struct iwl_trans *trans,struct sk_buff *skb,struct iwl_txq *txq,u8 hdr_len,struct iwl_cmd_meta *out_meta, -struct iwl_device_cmd *dev_cmd,u16 tb1_len) +struct iwl_device_tx_cmd *dev_cmd, +u16 tb1_len) {struct iwl_tx_cmd *tx_cmd = (void *)dev_cmd->payload;struct iwl_trans_pcie *trans_pcie = txq->trans_pcie;
@@ -2281,7 +2282,8 @@ static int iwl_fill_data_tbs_amsdu(struct iwl_trans *trans, struct sk_buff *skb,static int iwl_fill_data_tbs_amsdu (struct iwl_trans *trans,struct sk_buff *skb,struct iwl_txq *txq,u8 hdr_len,struct iwl_cmd_meta *out_meta, -struct iwl_device_cmd *dev_cmd,u16 tb1_len) +struct iwl_device_tx_cmd *dev_cmd, +u16 tb1_len) {/* No A-MSDU without CONFIG_INET */ WARN_ON (1 );
@@ -2291,7 +2293,7 @@ static int iwl_fill_data_tbs_amsdu(struct iwl_trans *trans, struct sk_buff *skb,#endif /* CONFIG_INET */ int iwl_trans_pcie_tx (struct iwl_trans *trans,struct sk_buff *skb, -struct iwl_device_cmd *dev_cmd,int txq_id) +struct iwl_device_tx_cmd *dev_cmd,int txq_id) {struct iwl_trans_pcie *trans_pcie =IWL_TRANS_GET_PCIE_TRANS (trans);struct ieee80211_hdr *hdr;
@@ -2348,7 +2350,7 @@ int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,/* don't put the packet on the ring, if there is no room */ if (unlikely (iwl_queue_space (trans, txq) <3 )) { -struct iwl_device_cmd **dev_cmd_ptr; +struct iwl_device_tx_cmd **dev_cmd_ptr; dev_cmd_ptr = (void *)((u8 *)skb->cb + trans_pcie->dev_cmd_offs);
drivers/net/wireless/rsi/rsi_91x_usb.c +1 -1
@@ -805,7 +805,7 @@ static int rsi_probe(struct usb_interface *pfunction, adapter->device_model =RSI_DEV_9116 ; }else {rsi_dbg (ERR_ZONE ,"%s: Unsupported RSI device id 0x%x\n" , - __func__, id ? id->idProduct :0x0 ); + __func__, id->idProduct); goto err1; }
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/platform/x86/intel_pmc_core_pltdrv.c +2 -0
@@ -44,6 +44,8 @@ static const struct x86_cpu_id intel_pmc_core_platform_ids[] = {INTEL_CPU_FAM6 (KABYLAKE , pmc_core_device),INTEL_CPU_FAM6 (CANNONLAKE_L , pmc_core_device),INTEL_CPU_FAM6 (ICELAKE_L , pmc_core_device), +INTEL_CPU_FAM6 (COMETLAKE , pmc_core_device), +INTEL_CPU_FAM6 (COMETLAKE_L , pmc_core_device), {} };MODULE_DEVICE_TABLE (x86cpu, intel_pmc_core_platform_ids);
drivers/s390/crypto/ap_bus.c +0 -2
@@ -793,8 +793,6 @@ static int ap_device_probe(struct device *dev) drvres = ap_drv->flags &AP_DRIVER_FLAG_DEFAULT ;if (!!devres != !!drvres)return -ENODEV ; -/* (re-)init queue's state machine */ -ap_queue_reinit_state (to_ap_queue (dev)); }/* Add queue/card to list of active queues/cards */
drivers/s390/crypto/ap_bus.h +1 -1
@@ -261,7 +261,7 @@ void ap_queue_prepare_remove(struct ap_queue *aq);void ap_queue_remove (struct ap_queue *aq);void ap_queue_suspend (struct ap_device *ap_dev);void ap_queue_resume (struct ap_device *ap_dev); -void ap_queue_reinit_state (struct ap_queue *aq); +void ap_queue_init_state (struct ap_queue *aq);struct ap_card *ap_card_create (int id,int queue_depth,int raw_device_type,int comp_device_type,unsigned int functions);
drivers/s390/crypto/ap_queue.c +3 -2
@@ -638,7 +638,7 @@ struct ap_queue *ap_queue_create(ap_qid_t qid, int device_type) aq->ap_dev.device.type = &ap_queue_type; aq->ap_dev.device_type = device_type; aq->qid = qid; - aq->state =AP_STATE_RESET_START ; + aq->state =AP_STATE_UNBOUND ; aq->interrupt =AP_INTR_DISABLED ;spin_lock_init (&aq->lock);INIT_LIST_HEAD (&aq->list);
@@ -771,10 +771,11 @@ void ap_queue_remove(struct ap_queue *aq)spin_unlock_bh (&aq->lock); } -void ap_queue_reinit_state (struct ap_queue *aq) +void ap_queue_init_state (struct ap_queue *aq) {spin_lock_bh (&aq->lock); aq->state =AP_STATE_RESET_START ;ap_wait (ap_sm_event (aq,AP_EVENT_POLL ));spin_unlock_bh (&aq->lock); } +EXPORT_SYMBOL (ap_queue_init_state);
drivers/s390/crypto/zcrypt_cex2a.c +1 -0
@@ -175,6 +175,7 @@ static int zcrypt_cex2a_queue_probe(struct ap_device *ap_dev) zq->queue = aq; zq->online =1 ;atomic_set (&zq->load,0 ); +ap_queue_init_state (aq);ap_queue_init_reply (aq, &zq->reply); aq->request_timeout =CEX2A_CLEANUP_TIME , aq->private = zq;
drivers/s390/crypto/zcrypt_cex2c.c +2 -0
@@ -220,6 +220,7 @@ static int zcrypt_cex2c_queue_probe(struct ap_device *ap_dev) zq->queue = aq; zq->online =1 ;atomic_set (&zq->load,0 ); +ap_rapq (aq->qid); rc =zcrypt_cex2c_rng_supported (aq);if (rc <0 ) {zcrypt_queue_free (zq);
@@ -231,6 +232,7 @@ static int zcrypt_cex2c_queue_probe(struct ap_device *ap_dev)else zq->ops =zcrypt_msgtype (MSGTYPE06_NAME ,MSGTYPE06_VARIANT_NORNG ); +ap_queue_init_state (aq);ap_queue_init_reply (aq, &zq->reply); aq->request_timeout =CEX2C_CLEANUP_TIME ; aq->private = zq;
drivers/s390/crypto/zcrypt_cex4.c +1 -0
@@ -381,6 +381,7 @@ static int zcrypt_cex4_queue_probe(struct ap_device *ap_dev) zq->queue = aq; zq->online =1 ;atomic_set (&zq->load,0 ); +ap_queue_init_state (aq);ap_queue_init_reply (aq, &zq->reply); aq->request_timeout =CEX4_CLEANUP_TIME , aq->private = zq;
drivers/scsi/fnic/fnic_scsi.c +3 -0
@@ -439,6 +439,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
@@ -419,6 +419,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 ); }
@@ -505,8 +507,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
@@ -3,6 +3,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
@@ -2102,7 +2102,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/cifs/smb2pdu.c +1 -1
@@ -312,7 +312,7 @@ smb2_reconnect(__le16 smb2_command, struct cifs_tcon *tcon)if (server->tcpStatus != CifsNeedReconnect)break ; -if (--retries) +if (retries && --retries)continue ;/*
fs/gfs2/lops.c +44 -24
116 lines not on this page · raw message
fs/namei.c +2 -2
@@ -3249,8 +3249,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 ; }
@@ -2240,6 +2241,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
@@ -1915,11 +1915,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_sig =0 ; t->rseq_event_mask =0 ;
include/net/cfg80211.h +5 -0
@@ -3537,6 +3537,9 @@ struct cfg80211_update_owe_info {* * @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.
@@ -3863,6 +3866,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
@@ -3111,8 +3111,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 ;
@@ -3122,6 +3120,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)
@@ -3157,11 +3157,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);
@@ -3448,7 +3448,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 ;
kernel/trace/trace_kprobe.c +1 -1
@@ -290,7 +290,7 @@ static struct trace_kprobe *alloc_trace_kprobe(const char *group,INIT_HLIST_NODE (&tk->rp.kp.hlist);INIT_LIST_HEAD (&tk->rp.kp.list); - ret =trace_probe_init (&tk->tp, event, group,0 ); + ret =trace_probe_init (&tk->tp, event, group, false);if (ret <0 ) goto error;
kernel/trace/trace_probe.c +6 -3
@@ -984,16 +984,19 @@ void trace_probe_cleanup(struct trace_probe *tp) }int trace_probe_init (struct trace_probe *tp,const char *event, -const char *group,size_t event_data_size) +const char *group,bool alloc_filter) {struct trace_event_call *call; +size_t size =sizeof (struct trace_probe_event );int ret =0 ;if (!event || !group)return -EINVAL ; - tp->event =kzalloc (sizeof (struct trace_probe_event ) + event_data_size, -GFP_KERNEL ); +if (alloc_filter) + size +=sizeof (struct trace_uprobe_filter ); + + tp->event =kzalloc (size,GFP_KERNEL );if (!tp->event)return -ENOMEM ;
kernel/trace/trace_probe.h +8 -2
@@ -223,6 +223,12 @@ struct probe_arg {const struct fetch_type *type;/* Type of this argument */ }; +struct trace_uprobe_filter { +rwlock_t rwlock; +int nr_systemwide; +struct list_head perf_events; +}; +/* Event call and class holder */ struct trace_probe_event {unsigned int flags;/* For TP_FLAG_* */
@@ -230,7 +236,7 @@ struct trace_probe_event {struct trace_event_call call;struct list_head files;struct list_head probes; -char data[0 ]; +struct trace_uprobe_filter filter[0 ]; };struct trace_probe {
@@ -323,7 +329,7 @@ static inline bool trace_probe_has_single_file(struct trace_probe *tp) }int trace_probe_init (struct trace_probe *tp,const char *event, -const char *group,size_t event_data_size); +const char *group,bool alloc_filter);void trace_probe_cleanup (struct trace_probe *tp);int trace_probe_append (struct trace_probe *tp,struct trace_probe *to);void trace_probe_unlink (struct trace_probe *tp);
kernel/trace/trace_uprobe.c +7 -22
@@ -34,12 +34,6 @@ struct uprobe_trace_entry_head {#define DATAOF_TRACE_ENTRY (entry, is_return) \ ((void*)(entry) + SIZEOF_TRACE_ENTRY(is_return)) -struct trace_uprobe_filter { -rwlock_t rwlock; -int nr_systemwide; -struct list_head perf_events; -}; -static int trace_uprobe_create (int argc,const char **argv);static int trace_uprobe_show (struct seq_file *m,struct dyn_event *ev);static int trace_uprobe_release (struct dyn_event *ev);
@@ -263,14 +257,6 @@ process_fetch_insn(struct fetch_insn *code, struct pt_regs *regs, void *dest, }NOKPROBE_SYMBOL (process_fetch_insn) -static struct trace_uprobe_filter * -trace_uprobe_get_filter (struct trace_uprobe *tu) -{ -struct trace_probe_event *event = tu->tp.event; - -return (struct trace_uprobe_filter *)&event->data[0 ]; -} - static inline void init_trace_uprobe_filter(struct trace_uprobe_filter *filter) {rwlock_init (&filter->rwlock);
@@ -358,8 +344,7 @@ alloc_trace_uprobe(const char *group, const char *event, int nargs, bool is_ret)if (!tu)return ERR_PTR (-ENOMEM ); - ret =trace_probe_init (&tu->tp, event, group, -sizeof (struct trace_uprobe_filter )); + ret =trace_probe_init (&tu->tp, event, group, true);if (ret <0 ) goto error;
@@ -367,7 +352,7 @@ alloc_trace_uprobe(const char *group, const char *event, int nargs, bool is_ret) tu->consumer.handler = uprobe_dispatcher;if (is_ret) tu->consumer.ret_handler = uretprobe_dispatcher; -init_trace_uprobe_filter (trace_uprobe_get_filter (tu)); +init_trace_uprobe_filter (tu->tp.event->filter);return tu; error:
@@ -1076,7 +1061,7 @@ static void __probe_event_disable(struct trace_probe *tp)struct trace_uprobe *tu; tu = container_of(tp, struct trace_uprobe, tp); -WARN_ON (!uprobe_filter_is_empty (trace_uprobe_get_filter (tu))); +WARN_ON (!uprobe_filter_is_empty (tu->tp.event->filter));list_for_each_entry (pos,trace_probe_probe_list (tp), list) { tu = container_of(pos, struct trace_uprobe, tp);
@@ -1117,7 +1102,7 @@ static int probe_event_enable(struct trace_event_call *call, } tu = container_of(tp, struct trace_uprobe, tp); -WARN_ON (!uprobe_filter_is_empty (trace_uprobe_get_filter (tu))); +WARN_ON (!uprobe_filter_is_empty (tu->tp.event->filter));if (enabled)return 0 ;
@@ -1281,7 +1266,7 @@ static int uprobe_perf_close(struct trace_event_call *call,return -ENODEV ; tu = container_of(tp, struct trace_uprobe, tp); -if (trace_uprobe_filter_remove (trace_uprobe_get_filter (tu), event)) +if (trace_uprobe_filter_remove (tu->tp.event->filter, event))return 0 ;list_for_each_entry (pos,trace_probe_probe_list (tp), list) {
@@ -1306,7 +1291,7 @@ static int uprobe_perf_open(struct trace_event_call *call,return -ENODEV ; tu = container_of(tp, struct trace_uprobe, tp); -if (trace_uprobe_filter_add (trace_uprobe_get_filter (tu), event)) +if (trace_uprobe_filter_add (tu->tp.event->filter, event))return 0 ;list_for_each_entry (pos,trace_probe_probe_list (tp), list) {
@@ -1328,7 +1313,7 @@ static bool uprobe_perf_filter(struct uprobe_consumer *uc,int ret; tu = container_of(uc, struct trace_uprobe, consumer); - filter =trace_uprobe_get_filter (tu); + filter = tu->tp.event->filter;read_lock (&filter->rwlock); ret =__uprobe_perf_filter (filter, mm);
lib/test_xarray.c +22 -0
@@ -1160,6 +1160,27 @@ static noinline void check_move_tiny(struct xarray *xa)XA_BUG_ON (xa, !xa_empty (xa)); } +static noinline void check_move_max(struct xarray *xa) +{ +XA_STATE (xas, xa,0 ); + +xa_store_index (xa,ULONG_MAX ,GFP_KERNEL ); +rcu_read_lock (); +XA_BUG_ON (xa,xas_find (&xas,ULONG_MAX ) !=xa_mk_index (ULONG_MAX )); +XA_BUG_ON (xa,xas_find (&xas,ULONG_MAX ) !=NULL ); +rcu_read_unlock (); + +xas_set (&xas,0 ); +rcu_read_lock (); +XA_BUG_ON (xa,xas_find (&xas,ULONG_MAX ) !=xa_mk_index (ULONG_MAX )); +xas_pause (&xas); +XA_BUG_ON (xa,xas_find (&xas,ULONG_MAX ) !=NULL ); +rcu_read_unlock (); + +xa_erase_index (xa,ULONG_MAX ); +XA_BUG_ON (xa, !xa_empty (xa)); +} + static noinline void check_move_small(struct xarray *xa, unsigned long idx) {XA_STATE (xas, xa,0 );
@@ -1268,6 +1289,7 @@ static noinline void check_move(struct xarray *xa)xa_destroy (xa);check_move_tiny (xa); +check_move_max (xa);for (i =0 ; i <16 ; i++)check_move_small (xa,1UL << i);
lib/xarray.c +5 -3
@@ -968,6 +968,7 @@ void xas_pause(struct xa_state *xas)if (xas_invalid (xas))return ; + xas->xa_node =XAS_RESTART ;if (node) {unsigned int offset = xas->xa_offset;while (++offset <XA_CHUNK_SIZE ) {
@@ -975,10 +976,11 @@ void xas_pause(struct xa_state *xas)break ; } xas->xa_index += (offset - xas->xa_offset) << node->shift; +if (xas->xa_index ==0 ) + xas->xa_node =XAS_BOUNDS ; }else { xas->xa_index++; } - xas->xa_node =XAS_RESTART ; }EXPORT_SYMBOL_GPL (xas_pause);
@@ -1080,7 +1082,7 @@ void *xas_find(struct xa_state *xas, unsigned long max) {void *entry; -if (xas_error (xas)) +if (xas_error (xas) || xas->xa_node ==XAS_BOUNDS )return NULL ;if (xas->xa_index > max)return set_bounds (xas);
@@ -1088,7 +1090,7 @@ void *xas_find(struct xa_state *xas, unsigned long max)if (!xas->xa_node) { xas->xa_index =1 ;return set_bounds (xas); - }else if (xas_top (xas->xa_node)) { + }else if (xas->xa_node ==XAS_RESTART ) { entry =xas_load (xas);if (entry ||xas_not_node (xas->xa_node))return entry;
mm/mempolicy.c +3 -3
@@ -2802,6 +2802,9 @@ int mpol_parse_str(char *str, struct mempolicy **mpol)char *flags =strchr (str,'=' );int err =1 , mode; +if (flags) + *flags++ ='\0' ;/* terminate mode string */ +if (nodelist) {/* NUL-terminate mode or flags string */ *nodelist++ ='\0' ;
@@ -2812,9 +2815,6 @@ int mpol_parse_str(char *str, struct mempolicy **mpol) }else nodes_clear (nodes); -if (flags) - *flags++ ='\0' ;/* terminate mode string */ - mode =match_string (policy_modes,MPOL_MAX , str);if (mode <0 ) goto out;
mm/migrate.c +1 -1
@@ -1680,7 +1680,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/flow_dissector.c +9 -2
@@ -758,10 +758,10 @@ static void __skb_flow_bpf_to_target(const struct bpf_flow_keys *flow_keys,struct flow_dissector *flow_dissector, void *target_container) { + struct flow_dissector_key_ports *key_ports = NULL;struct flow_dissector_key_control *key_control;struct flow_dissector_key_basic *key_basic;struct flow_dissector_key_addrs *key_addrs; -struct flow_dissector_key_ports *key_ports;struct flow_dissector_key_tags *key_tags; key_control = skb_flow_dissector_target(flow_dissector,
@@ -800,10 +800,17 @@ static void __skb_flow_bpf_to_target(const struct bpf_flow_keys *flow_keys, key_control->addr_type =FLOW_DISSECTOR_KEY_IPV6_ADDRS ; } -if (dissector_uses_key (flow_dissector,FLOW_DISSECTOR_KEY_PORTS )) { +if (dissector_uses_key (flow_dissector,FLOW_DISSECTOR_KEY_PORTS )) key_ports =skb_flow_dissector_target (flow_dissector,FLOW_DISSECTOR_KEY_PORTS , target_container); +else if (dissector_uses_key (flow_dissector, +FLOW_DISSECTOR_KEY_PORTS_RANGE )) + key_ports =skb_flow_dissector_target (flow_dissector, +FLOW_DISSECTOR_KEY_PORTS_RANGE , + target_container); + +if (key_ports) { key_ports->src = flow_keys->sport; key_ports->dst = flow_keys->dport; }
net/core/utils.c +17 -3
@@ -438,6 +438,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)
@@ -449,9 +466,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
@@ -187,8 +187,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
@@ -449,8 +449,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
@@ -2954,6 +2954,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) {
@@ -4023,6 +4045,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
@@ -328,6 +328,9 @@ 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
@@ -263,9 +263,21 @@ int ieee80211_tkip_decrypt_data(struct arc4_ctx *ctx,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/nf_conntrack_proto_sctp.c +3 -3
@@ -114,7 +114,7 @@ static const u8 sctp_conntracks[2][11][SCTP_CONNTRACK_MAX] = { {/* ORIGINAL */ /* sNO, sCL, sCW, sCE, sES, sSS, sSR, sSA, sHS, sHA */ -/* init */ {sCW, sCW, sCW, sCE, sES, sSS, sSR, sSA, sCW, sHA}, +/* init */ {sCL, sCL, sCW, sCE, sES, sSS, sSR, sSA, sCW, sHA}, /* init_ack */ {sCL, sCL, sCW, sCE, sES, sSS, sSR, sSA, sCL, sHA}, /* abort */ {sCL, sCL, sCL, sCL, sCL, sCL, sCL, sCL, sCL, sCL}, /* shutdown */ {sCL, sCL, sCW, sCE, sSS, sSS, sSR, sSA, sCL, sSS},
@@ -130,7 +130,7 @@ static const u8 sctp_conntracks[2][11][SCTP_CONNTRACK_MAX] = {/* REPLY */ /* sNO, sCL, sCW, sCE, sES, sSS, sSR, sSA, sHS, sHA */ /* init */ {sIV, sCL, sCW, sCE, sES, sSS, sSR, sSA, sIV, sHA},/* INIT in sCL Big TODO */ -/* init_ack */ {sIV, sCL, sCW, sCE, sES, sSS, sSR, sSA, sIV, sHA}, +/* init_ack */ {sIV, sCW, sCW, sCE, sES, sSS, sSR, sSA, sIV, sHA}, /* abort */ {sIV, sCL, sCL, sCL, sCL, sCL, sCL, sCL, sIV, sCL}, /* shutdown */ {sIV, sCL, sCW, sCE, sSR, sSS, sSR, sSA, sIV, sSR}, /* shutdown_ack */ {sIV, sCL, sCW, sCE, sES, sSA, sSA, sSA, sIV, sHA},
@@ -316,7 +316,7 @@ sctp_new(struct nf_conn *ct, const struct sk_buff *skb, ct->proto.sctp.vtag[IP_CT_DIR_REPLY ] = sh->vtag; } - ct->proto.sctp.state = new_state; + ct->proto.sctp.state =SCTP_CONNTRACK_NONE ; }return true;
net/netfilter/nf_tables_offload.c +1 -1
@@ -437,7 +437,7 @@ static void nft_indr_block_cb(struct net_device *dev,mutex_lock (&net->nft.commit_mutex); chain =__nft_offload_get_chain (dev); -if (chain) { +if (chain && chain->flags &NFT_CHAIN_HW_OFFLOAD ) {struct nft_base_chain *basechain; basechain =nft_base_chain (chain);
net/wireless/rdev-ops.h +10 -0
@@ -1171,6 +1171,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
@@ -2261,14 +2261,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))
@@ -2324,8 +2325,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 */
@@ -3885,6 +3892,25 @@ bool regulatory_pre_cac_allowed(struct wiphy *wiphy) }EXPORT_SYMBOL (regulatory_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,
@@ -3911,8 +3937,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
@@ -646,6 +646,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;
@@ -563,12 +584,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
@@ -2322,9 +2322,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 ];/**
@@ -2336,10 +2336,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 (); }
@@ -2360,7 +2357,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;
sound/soc/codecs/hdac_hda.c +3 -1
@@ -498,7 +498,9 @@ static int hdac_hda_dev_remove(struct hdac_device *hdev)struct hdac_hda_priv *hda_pvt; hda_pvt =dev_get_drvdata (&hdev->dev); -cancel_delayed_work_sync (&hda_pvt->codec.jackpoll_work); +if (hda_pvt && hda_pvt->codec.registered) +cancel_delayed_work_sync (&hda_pvt->codec.jackpoll_work); +return 0 ; }
sound/soc/codecs/rt5640.c +7 -0
@@ -2432,6 +2432,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/soc-topology.c +4 -3
@@ -1891,6 +1891,10 @@ static int soc_tplg_fe_link_create(struct soc_tplg *tplg, link->num_codecs =1 ; link->num_platforms =1 ; + link->dobj.index = tplg->index; + link->dobj.ops = tplg->ops; + link->dobj.type =SND_SOC_DOBJ_DAI_LINK ; +if (strlen (pcm->pcm_name)) { link->name =kstrdup (pcm->pcm_name,GFP_KERNEL ); link->stream_name =kstrdup (pcm->pcm_name,GFP_KERNEL );
@@ -1927,9 +1931,6 @@ static int soc_tplg_fe_link_create(struct soc_tplg *tplg, goto err; } - link->dobj.index = tplg->index; - link->dobj.ops = tplg->ops; - link->dobj.type =SND_SOC_DOBJ_DAI_LINK ;list_add (&link->dobj.list, &tplg->comp->dobj_list);return 0 ;
sound/soc/sof/intel/hda-codec.c +12 -7
@@ -24,19 +24,18 @@#define IDISP_VID_INTEL 0x80860000/* load the legacy HDA codec driver */
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.