Linux 5.4.279
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.279 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
------------
Makefile | 2 arch/arm/boot/dts/exynos4210-smdkv310.dts | 2 arch/arm/boot/dts/exynos4412-origen.dts | 2 arch/arm/boot/dts/exynos4412-smdk4412.dts | 2 arch/arm/boot/dts/rk3066a.dtsi | 1 arch/arm64/boot/dts/qcom/qcs404-evb.dtsi | 2 arch/arm64/boot/dts/rockchip/rk3368.dtsi | 3 arch/csky/include/uapi/asm/unistd.h | 1 arch/hexagon/include/asm/syscalls.h | 6 arch/hexagon/include/uapi/asm/unistd.h | 1 arch/hexagon/kernel/syscalltab.c | 7 arch/mips/bmips/setup.c | 3 arch/mips/pci/ops-rc32434.c | 4 arch/mips/pci/pcie-octeon.c | 6 arch/parisc/kernel/syscalls/syscall.tbl | 4 arch/powerpc/include/asm/hvcall.h | 8 arch/powerpc/include/asm/io.h | 24 arch/sparc/kernel/syscalls/syscall.tbl | 2 arch/x86/kernel/amd_nb.c | 9 arch/x86/kernel/time.c | 20 drivers/acpi/acpica/exregion.c | 23 drivers/ata/libata-core.c | 8 drivers/base/core.c | 3 drivers/bluetooth/ath3k.c | 25 drivers/dma/dma-axi-dmac.c | 2 drivers/dma/ioat/init.c | 1 drivers/gpio/Kconfig | 2 drivers/gpio/gpio-davinci.c | 5 drivers/gpu/drm/amd/amdgpu/kv_dpm.c | 2 drivers/gpu/drm/amd/display/dc/dcn10/dcn10_stream_encoder.c | 6 drivers/gpu/drm/arm/display/komeda/komeda_pipeline_state.c | 2 drivers/gpu/drm/bridge/panel.c | 7 drivers/gpu/drm/exynos/exynos_drm_vidi.c | 7 drivers/gpu/drm/exynos/exynos_hdmi.c | 7 drivers/gpu/drm/nouveau/dispnv04/tvnv17.c | 6 drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 6 drivers/gpu/drm/radeon/sumo_dpm.c | 2 drivers/greybus/interface.c | 1 drivers/hid/hid-core.c | 1 drivers/hid/hid-logitech-dj.c | 4 drivers/hv/hv_util.c | 19 drivers/hwtracing/intel_th/pci.c | 25 drivers/i2c/busses/i2c-at91-slave.c | 3 drivers/i2c/busses/i2c-ocores.c | 2 drivers/iio/adc/ad7266.c | 2 drivers/iio/chemical/bme680.h | 2 drivers/iio/chemical/bme680_core.c | 62 +- drivers/iio/dac/ad5592r-base.c | 56 - drivers/iio/dac/ad5592r-base.h | 1 drivers/input/input.c | 105 ++- drivers/iommu/amd_iommu_init.c | 9 drivers/media/dvb-core/dvbdev.c | 2 drivers/misc/mei/pci-me.c | 4 drivers/misc/vmw_vmci/vmci_event.c | 6 drivers/mmc/host/sdhci-pci-core.c | 11 drivers/mmc/host/sdhci.c | 25 drivers/mtd/nand/spi/macronix.c | 99 +++ drivers/mtd/parsers/redboot.c | 2 drivers/net/dsa/microchip/ksz9477.c | 6 drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c | 11 drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 14 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 3 drivers/net/ethernet/mellanox/mlx5/core/fw.c | 4 drivers/net/ethernet/mellanox/mlx5/core/health.c | 8 drivers/net/ethernet/mellanox/mlx5/core/lib/pci_vsc.c | 4 drivers/net/ethernet/pensando/ionic/ionic_lif.c | 4 drivers/net/phy/micrel.c | 15 drivers/net/usb/ax88179_178a.c | 6 drivers/net/usb/rtl8150.c | 3 drivers/net/virtio_net.c | 12 drivers/net/vxlan.c | 4 drivers/net/wireless/intel/iwlwifi/iwl-drv.c | 2 drivers/net/wireless/intel/iwlwifi/mvm/fw.c | 10 drivers/net/wireless/intel/iwlwifi/mvm/rs.h | 9 drivers/pci/controller/pcie-rockchip-ep.c | 6 drivers/pci/pci.c | 12 drivers/pinctrl/core.c | 2 drivers/pinctrl/pinctrl-rockchip.c | 63 +- drivers/ptp/ptp_chardev.c | 3 drivers/pwm/pwm-stm32.c | 3 drivers/regulator/core.c | 1 drivers/scsi/mpt3sas/mpt3sas_base.c | 19 drivers/scsi/qedi/qedi_debugfs.c | 12 drivers/soc/ti/wkup_m3_ipc.c | 7 drivers/tty/serial/mcf.c | 2 drivers/tty/serial/sc16is7xx.c | 25 drivers/usb/atm/cxacru.c | 14 drivers/usb/class/cdc-wdm.c | 4 drivers/usb/gadget/function/f_fs.c | 4 drivers/usb/gadget/function/f_printer.c | 1 drivers/usb/host/xhci-pci.c | 7 drivers/usb/host/xhci-ring.c | 5 drivers/usb/misc/uss720.c | 20 drivers/usb/musb/da8xx.c | 8 drivers/usb/storage/alauda.c | 9 fs/jfs/xattr.c | 4 fs/nfs/read.c | 4 fs/nilfs2/dir.c | 59 - fs/nilfs2/segment.c | 3 fs/ocfs2/file.c | 2 fs/ocfs2/namei.c | 2 fs/open.c | 4 fs/proc/vmcore.c | 2 fs/udf/udftime.c | 11 include/linux/compat.h | 2 include/linux/iommu.h | 2 include/linux/micrel_phy.h | 1 include/linux/nvme.h | 4 include/linux/pci.h | 9 include/linux/syscalls.h | 2 include/net/bluetooth/hci_core.h | 36 + include/net/netfilter/nf_tables.h | 5 include/uapi/asm-generic/hugetlb_encode.h | 24 kernel/events/core.c | 13 kernel/gcov/gcc_4_7.c | 4 kernel/gen_kheaders.sh | 9 kernel/rcu/rcutorture.c | 3 kernel/time/tick-common.c | 42 - kernel/trace/preemptirq_delay_test.c | 1 net/batman-adv/originator.c | 29 net/bluetooth/l2cap_core.c | 8 net/can/j1939/main.c | 6 net/can/j1939/transport.c | 21 net/core/drop_monitor.c | 20 net/core/net_namespace.c | 9 net/core/sock.c | 6 net/ipv4/af_inet.c | 23 net/ipv4/cipso_ipv4.c | 12 net/ipv4/tcp.c | 16 net/ipv6/af_inet6.c | 24 net/ipv6/ip6_fib.c | 6 net/ipv6/ipv6_sockglue.c | 9 net/ipv6/route.c | 9 net/ipv6/seg6_iptunnel.c | 14 net/ipv6/tcp_ipv6.c | 9 net/ipv6/xfrm6_policy.c | 8 net/iucv/iucv.c | 26 net/mac80211/mesh_pathtbl.c | 13 net/mac80211/sta_info.c | 4 net/netfilter/ipset/ip_set_core.c | 92 +- net/netfilter/ipset/ip_set_list_set.c | 30 net/netfilter/nf_tables_api.c | 13 net/netfilter/nft_exthdr.c | 17 net/netfilter/nft_lookup.c | 3 net/netrom/nr_timer.c | 3 net/sched/act_api.c | 66 +- net/sched/sch_multiq.c | 2 net/sched/sch_taprio.c | 15 net/sunrpc/auth_gss/auth_gss.c | 4 net/unix/af_unix.c | 47 - net/unix/diag.c | 12 net/wireless/pmsr.c | 8 sound/soc/fsl/fsl-asoc-card.c | 3 sound/soc/ti/davinci-mcasp.c | 310 ++++------ sound/synth/emux/soundfont.c | 17 tools/include/asm-generic/hugetlb_encode.h | 20 tools/testing/selftests/bpf/test_tc_tunnel.sh | 13 tools/testing/selftests/ftrace/test.d/kprobe/kprobe_eventname.tc | 3 tools/testing/selftests/vm/compaction_test.c | 103 +-- 159 files changed, 1466 insertions(+), 841 deletions(-)
Adam Miotk (1):
drm/bridge/panel: Fix runtime warning on panel bridge release
Adrian Hunter (2):
mmc: sdhci: Do not invert write-protect twice
mmc: sdhci: Do not lock spinlock around mmc_gpio_get_ro()
Alan Stern (1):
USB: class: cdc-wdm: Fix CPU lockup caused by excessive log messages
Aleksandr Mishin (2):
liquidio: Adjust a NULL pointer handling path in lio_vf_rep_copy_packet
gpio: davinci: Validate the obtained number of IRQs
Alessandro Carminati (Red Hat) (1):
selftests/bpf: Prevent client connect before server bind in test_tc_tunnel.sh
Alex Bee (1):
arm64: dts: rockchip: Add sound-dai-cells for RK3368
Alex Deucher (2):
drm/radeon: fix UBSAN warning in kv_dpm.c
drm/amdgpu: fix UBSAN warning in kv_dpm.c
Alex Henrie (1):
usb: misc: uss720: check for incompatible versions of the Belkin F5U002
Alexander Shishkin (5):
intel_th: pci: Add Granite Rapids support
intel_th: pci: Add Granite Rapids SOC support
intel_th: pci: Add Sapphire Rapids SOC support
intel_th: pci: Add Meteor Lake-S support
intel_th: pci: Add Lunar Lake support
Alexandru Ardelean (1):
iio: dac: ad5592r: un-indent code-block for scale read
Amjad Ouled-Ameur (1):
drm/komeda: check for error-valued pointer
Andrew Davis (1):
soc: ti: wkup_m3_ipc: Send NULL dummy message instead of pointer message
Arnd Bergmann (5):
sparc: fix old compat_sys_select()
parisc: use correct compat recv/recvfrom syscalls csky, hexagon: fix broken sys_sync_file_range
hexagon: fix fadvise64_64 calling conventions
ftruncate: pass a signed offset
Biju Das (1):
regulator: core: Fix modpost error "regulator_get_regmap" undefined
Breno Leitao (1):
scsi: mpt3sas: Avoid test/set_bit() operating in non-allocated memory
Chen Hanxiao (1):
SUNRPC: return proper error from gss_wrap_req_priv
Christian Marangi (1):
mips: bmips: BCM6358: make sure CBR is correctly set
Colin Ian King (1):
ASoC: ti: davinci-mcasp: remove redundant assignment to variable ret
Dan Carpenter (1):
usb: musb: da8xx: fix a resource leak in probe()
Daniel Borkmann (1):
vxlan: Fix regression when dropping packets due to invalid src addresses
David Ruth (1):
net/sched: act_api: fix possible infinite loop in tcf_idr_check_alloc()
Dawei Li (2):
net/iucv: Avoid explicit cpumask var allocation on stack net/dpaa2: Avoid explicit cpumask var allocation on stack
Denis Arefev (1):
mtd: partitions: redboot: Added conversion of operands to a larger type
Dev Jain (2):
selftests/mm: compaction_test: fix incorrect write of zero to nr_hugepages selftests/mm: compaction_test: fix bogus test success on Aarch64
Dirk Behme (1):
drivers: core: synchronize really_probe() and dev_uevent()
Divya Koppera (1):
net: phy: mchp: Add support for LAN8814 QUAD PHY
Dmitry Torokhov (1):
Input: try trimming too long modalias strings
Elinor Montmasson (1):
ASoC: fsl-asoc-card: set priv->pdev before using it
Emmanuel Grumbach (1):
wifi: iwlwifi: mvm: don't read past the mfuart notifcation
Enguerrand de Ribaucourt (1):
net: phy: micrel: add Microchip KSZ 9477 to the device table
Eric Dumazet (9):
ipv6: sr: block BH in seg6_output_core() and seg6_input_core() net/sched: taprio: always validate TCA_TAPRIO_ATTR_PRIOMAP
ipv6: fix possible race in __fib6_drop_pcpu_from()
tcp: fix race in tcp_v6_syn_recv_sock()
batman-adv: bypass empty buckets in batadv_purge_orig_ref()
ipv6: prevent possible NULL deref in fib6_nh_init()
ipv6: prevent possible NULL dereference in rt6_probe()
xfrm6: check ip6_dst_idev() return value in xfrm6_get_saddr()
ipv6: annotate some data-races around sk->sk_prot
Fernando Yang (1):
iio: adc: ad7266: Fix variable checking bug
Florian Westphal (1):
netfilter: nftables: exthdr: fix 4-byte stack OOB write
Gal Pressman (1):
net/mlx5e: Fix features validation check for tunneled UDP (non-VXLAN) packets
Gavrilov Ilia (1):
netrom: Fix a memory leak in nr_heartbeat_expiry()
George Shen (1):
drm/amd/display: Handle Y carry-over in VCP X.Y calculation
Greg Kroah-Hartman (2):
jfs: xattr: fix buffer overflow for invalid xattr Linux 5.4.279
Gregor Herburger (1):
gpio: tqmx86: fix typo in Kconfig label
Grygorii Tertychnyi (1):
i2c: ocores: set IACK bit after core is enabled
Hagar Gamal Halim Hemdan (1):
vmci: prevent speculation leaks by sanitizing event in event_deliver()
Hagar Hemdan (1):
pinctrl: fix deadlock in create_pinctrl() when handling -EPROBE_DEFER
Haifeng Xu (1):
perf/core: Fix missing wakeup when waiting for context reference
Hangyu Hua (1):
net: sched: sch_multiq: fix possible OOB write in multiq_tune()
Hannes Reinecke (1):
nvme: fixup comment for nvme RDMA Provider Type
Heng Qi (1):
virtio_net: checksum offloading handling fix
Huang-Huang Bao (3):
pinctrl: rockchip: fix pinmux bits for RK3328 GPIO2-B pins
pinctrl: rockchip: fix pinmux bits for RK3328 GPIO3-B pins
pinctrl: rockchip: fix pinmux reset in rockchip_pmx_set
Hugo Villeneuve (2):
serial: sc16is7xx: replace hardcoded divisor value with BIT() macro
serial: sc16is7xx: fix bug in sc16is7xx_set_baud() when using prescaler
Ilpo Järvinen (2):
MIPS: Routerboard 532: Fix vendor retry check code
mmc: sdhci-pci: Convert PCIBIOS_* return codes to errnos
Jaime Liao (1):
mtd: spinand: macronix: Add support for serial NAND flash
Jani Nikula (1):
drm/exynos/vidi: fix memory leak in .get_modes()
Jason Xing (1):
tcp: count CLOSE-WAIT sockets for TCP_MIB_CURRESTAB
Jean Delvare (1):
i2c: at91: Fix the functionality flags of the slave-only interface
Jean-Michel Hautbois (1):
tty: mcf: MCF54418 has 10 UARTS
Jeff Johnson (1):
tracing: Add MODULE_DESCRIPTION() to preemptirq_delay_test
Joao Paulo Goncalves (1):
ASoC: ti: davinci-mcasp: Fix race condition during probe
Johan Hovold (1):
arm64: dts: qcom: qcs404: fix bluetooth device address
Johan Jonker (1):
ARM: dts: rockchip: rk3066a: add #sound-dai-cells to hdmi node
Johannes Berg (1):
wifi: iwlwifi: mvm: revert gen2 TX A-MPDU size to 64
Jose Ignacio Tornos Martinez (1):
net: usb: ax88179_178a: improve link status logs
José Expósito (1):
HID: logitech-dj: Fix memory leak in logi_dj_recv_switch_to_dj_mode()
Jozsef Kadlecsik (2):
netfilter: ipset: Fix race between namespace cleanup and gc in the list:set type
netfilter: ipset: Fix suspicious rcu_dereference_protected()
Karol Kolacinski (1):
ptp: Fix error message on failed pin verification
Krzysztof Kozlowski (3):
ARM: dts: samsung: smdkv310: fix keypad no-autorepeat
ARM: dts: samsung: exynos4412-origen: fix keypad no-autorepeat
ARM: dts: samsung: smdk4412: fix keypad no-autorepeat
Kuangyi Chiang (2):
xhci: Apply reset resume quirk to Etron EJ188 xHCI host
xhci: Apply broken streams quirk to Etron EJ188 xHCI host
Kun(llfl) (1):
iommu/amd: Fix sysfs leak in iommu init
Kuniyuki Iwashima (10):
af_unix: Annotate data-race of sk->sk_state in unix_inq_len().
af_unix: Annotate data-races around sk->sk_state in unix_write_space() and poll().
af_unix: Annotate data-races around sk->sk_state in sendmsg() and recvmsg().
af_unix: Annotate data-races around sk->sk_state in UNIX_DIAG.
af_unix: Annotate data-race of net->unx.sysctl_max_dgram_qlen.
af_unix: Use unix_recvq_full_lockless() in unix_stream_connect().
af_unix: Use skb_queue_len_lockless() in sk_diag_show_rqlen().
af_unix: Annotate data-race of sk->sk_shutdown in sk_diag_fill().
ipv6: Fix data races around sk->sk_prot.
tcp: Fix data races around icsk->icsk_af_ops.Laurent Pinchart (1):
drm/panel: ilitek-ili9881c: Fix warning with GPIO controllers that sleep
Lin Ma (1):
wifi: cfg80211: pmsr: use correct nla_get_uX functions
Linus Torvalds (1):
x86: stop playing stack games in profile_pc()
Lu Baolu (1):
iommu: Return right value in iommu_sva_bind_device()
Luiz Augusto von Dentz (1):
Bluetooth: L2CAP: Fix rejecting L2CAP_CONN_PARAM_UPDATE_REQ
Ma Ke (2):
drm/nouveau/dispnv04: fix null pointer dereference in nv17_tv_get_ld_modes drm/nouveau/dispnv04: fix null pointer dereference in nv17_tv_get_hd_modes
Manish Rangankar (1):
scsi: qedi: Fix crash while reading debugfs attribute
Marc Ferland (1):
iio: dac: ad5592r: fix temperature channel scaling value
Marek Szyprowski (1):
drm/exynos: hdmi: report safe 640x480 mode as a fallback when no EDID found
Mario Limonciello (1):
PCI/PM: Avoid D3cold for HP Pavilion 17 PC/1972 PCIe Ports
Masahiro Yamada (1):
Revert "kheaders: substituting --sort in archive creation"
Mathias Nyman (1):
xhci: Set correct transferred length for cancelled bulk transfers
Matthew Wilcox (Oracle) (3):
nilfs2: Remove check for PageError
nilfs2: return the mapped address from nilfs_get_page()
nfs: Leave pages in the pagecache if readpage failed
Matthias Goergens (1):
hugetlb_encode.h: fix undefined behaviour (34 << 26)
Matthias Maennich (1):
kheaders: explicitly define file modes for archived headers
Michael Ellerman (1):
powerpc/io: Avoid clang null pointer arithmetic warnings
Moshe Shemesh (1):
net/mlx5: Stop waiting for PCI if pci channel is offline
Muhammad Usama Anjum (1):
selftests/mm: conform test to TAP format output
Nathan Lynch (1):
powerpc/pseries: Enforce hcall result buffer validity and size
Naveen Naidu (1):
PCI: Add PCI_ERROR_RESPONSE and related definitions
Nicolas Escande (1):
wifi: mac80211: mesh: Fix leak of mesh_preq_queue objects
Nikita Shubin (1):
dmaengine: ioatdma: Fix missing kmem_cache_destroy()
Nikita Zhandarovich (2):
HID: core: remove unnecessary WARN_ON() in implement()
usb: atm: cxacru: fix endpoint checking in cxacru_bind()
Niklas Cassel (1):
ata: libata-core: Fix double free on error
Nuno Sa (1):
dmaengine: axi-dmac: fix possible race in remove()
Oleg Nesterov (1):
tick/nohz_full: Don't abuse smp_call_function_single() in tick_setup_device()
Oleksij Rempel (2):
net: can: j1939: recover socket queue on CAN bus error during BAM transmission
net: can: j1939: enhanced error handling for tightly received RTS messages in xtp_rx_rts_session_new
Oliver Neukum (2):
net: usb: rtl8150 fix unintiatilzed variables in rtl8150_get_link_ksettings
usb: gadget: printer: SS+ support
Ondrej Mosnacek (1):
cipso: fix total option length computation
Oswald Buddenhagen (1):
ALSA: emux: improve patch ioctl data validation
Pablo Neira Ayuso (2):
netfilter: nf_tables: validate family when identifying table via handle
netfilter: nf_tables: fully validate NFT_DATA_VALUE on store to data registers
Paul E. McKenney (1):
rcutorture: Fix rcu_torture_one_read() pipe_count overflow comment
Pedro Tammela (1):
net/sched: act_api: rely on rcu in tcf_idr_check_alloc
Peter Oberparleiter (1):
gcov: add support for GCC 14
Peter Ujfalusi (4):
ASoC: ti: davinci-mcasp: Use platform_get_irq_byname_optional
ASoC: ti: davinci-mcasp: Remove legacy dma_request parsing
ASoC: ti: davinci-mcasp: Simplify the configuration parameter handling
ASoC: ti: davinci-mcasp: Handle missing required DT properties
Petr Pavlu (1):
net/ipv6: Fix the RT cache flush via sysctl using a previous delay
Raju Rangoju (1):
ACPICA: Revert "ACPICA: avoid Info: mapping multiple BARs. Your kernel is fine."
Remi Pommarel (1):
wifi: mac80211: Fix deadlock in ieee80211_sta_ps_deliver_wakeup()
Ricardo Ribalda (1):
media: dvbdev: Initialize sbuf
Rick Wertenbroek (1):
PCI: rockchip-ep: Remove wrong mask on subsys_vendor_id
Rik van Riel (1):
fs/proc: fix softlockup in __read_vmcore
Roman Smirnov (1):
udf: udftime: prevent overflow in udf_disk_stamp_to_time()
Ryusuke Konishi (2):
nilfs2: fix nilfs_empty_dir() misjudgment and long loop on I/O errors
nilfs2: fix potential kernel bug due to lack of writeback flag waiting
Sergiu Cuciurean (1):
iio: dac: ad5592r-base: Replace indio_dev->mlock with own device lock
Shahar S Matityahu (1):
wifi: iwlwifi: dbg_ini: move iwl_dbg_tlv_free outside of debugfs ifdef
Shichao Lai (1):
usb-storage: alauda: Check whether the media is initialized
Shigeru Yoshida (1):
net: can: j1939: Initialize unused data in j1939_send_one()
Sicong Huang (1):
greybus: Fix use-after-free bug in gb_interface_release due to race condition.
Songyang Li (1):
MIPS: Octeon: Add PCIe link status check
Steven Rostedt (Google) (1):
tracing/selftests: Fix kprobe event name test for .isra. functions
Su Yue (2):
ocfs2: use coarse time for new created files
ocfs2: fix races between hole punching and AIO+DIO
Sven Eckelmann (1):
batman-adv: Don't accept TT entries for out-of-spec VIDs
Taehee Yoo (1):
ionic: fix use after netif_napi_del()
Tomas Winkler (1):
mei: me: release irq in mei_me_pci_resume error path
Tristram Ha (1):
net: dsa: microchip: fix initial port flush problem
Uri Arev (1):
Bluetooth: ath3k: Fix multiple issues reported by checkpatch.pl
Uwe Kleine-König (1):
pwm: stm32: Refuse too small period requests
Vasileios Amoiridis (4):
iio: chemical: bme680: Fix pressure value output
iio: chemical: bme680: Fix calibration data variable
iio: chemical: bme680: Fix overflows in compensate() functions
iio: chemical: bme680: Fix sensor data read operation
Vineeth Pillai (1):
hv_utils: drain the timesync packets on onchannelcallback
Wander Lairson Costa (1):
drop_monitor: replace spin_lock by raw_spin_lock
Wesley Cheng (1):
usb: gadget: f_fs: Fix race between aio_cancel() and AIO request complete
Yazen Ghannam (1):
x86/amd_nb: Check for invalid SMN reads
Yue Haibing (1):
netns: Make get_net_ns() handle zero refcount net
Zhang Qilong (1):
ASoC: ti: davinci-mcasp: remove always zero of davinci_mcasp_get_dt_params
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 278 +SUBLEVEL = 279 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm/boot/dts/exynos4210-smdkv310.dts +1 -1
@@ -64,7 +64,7 @@ &keypad { samsung,keypad-num-rows = <2>; samsung,keypad-num-columns = <8>; - linux,keypad-no-autorepeat; + linux,input-no-autorepeat; wakeup-source; pinctrl-names = "default"; pinctrl-0 = <&keypad_rows &keypad_cols>;
arch/arm/boot/dts/exynos4412-origen.dts +1 -1
@@ -431,7 +431,7 @@ &keypad { samsung,keypad-num-rows = <3>; samsung,keypad-num-columns = <2>; - linux,keypad-no-autorepeat; + linux,input-no-autorepeat; wakeup-source; pinctrl-0 = <&keypad_rows &keypad_cols>; pinctrl-names = "default";
arch/arm/boot/dts/exynos4412-smdk4412.dts +1 -1
@@ -43,7 +43,7 @@ &keypad { samsung,keypad-num-rows = <3>; samsung,keypad-num-columns = <8>; - linux,keypad-no-autorepeat; + linux,input-no-autorepeat; wakeup-source; pinctrl-0 = <&keypad_rows &keypad_cols>; pinctrl-names = "default";
arch/arm/boot/dts/rk3066a.dtsi +1 -0
@@ -124,6 +124,7 @@ pinctrl-0 = <&hdmii2c_xfer>, <&hdmi_hpd>; power-domains = <&power RK3066_PD_VIO>; rockchip,grf = <&grf>; + #sound-dai-cells = <0>; status = "disabled"; ports {
arch/arm64/boot/dts/qcom/qcs404-evb.dtsi +1 -1
@@ -43,7 +43,7 @@ vddrf-supply = <&vreg_l1_1p3>; vddch0-supply = <&vdd_ch0_3p3>; - local-bd-address = [ 02 00 00 00 5a ad ]; + local-bd-address = [ 00 00 00 00 00 00 ]; max-speed = <3200000>; };
arch/arm64/boot/dts/rockchip/rk3368.dtsi +3 -0
@@ -686,6 +686,7 @@ dma-names = "tx"; pinctrl-names = "default"; pinctrl-0 = <&spdif_tx>; + #sound-dai-cells = <0>; status = "disabled"; };
@@ -697,6 +698,7 @@ clocks = <&cru SCLK_I2S_2CH>, <&cru HCLK_I2S_2CH>; dmas = <&dmac_bus 6>, <&dmac_bus 7>; dma-names = "tx", "rx"; + #sound-dai-cells = <0>; status = "disabled"; };
@@ -710,6 +712,7 @@ dma-names = "tx", "rx"; pinctrl-names = "default"; pinctrl-0 = <&i2s_8ch_bus>; + #sound-dai-cells = <0>; status = "disabled"; };
arch/csky/include/uapi/asm/unistd.h +1 -0
@@ -7,6 +7,7 @@#define __ARCH_WANT_SYS_CLONE3#define __ARCH_WANT_SET_GET_RLIMIT#define __ARCH_WANT_TIME32_SYSCALLS +#define __ARCH_WANT_SYNC_FILE_RANGE2#include <asm-generic/unistd.h> #define __NR_set_thread_area (__NR_arch_specific_syscall + 0)
arch/hexagon/include/asm/syscalls.h new file +6 -0
@@ -0,0 +1,6 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#include <asm-generic/syscalls.h> + +asmlinkage long sys_hexagon_fadvise64_64 (int fd,int advice, +u32 a2,u32 a3,u32 a4,u32 a5);
arch/hexagon/include/uapi/asm/unistd.h +1 -0
@@ -36,5 +36,6 @@#define __ARCH_WANT_SYS_VFORK#define __ARCH_WANT_SYS_FORK#define __ARCH_WANT_TIME32_SYSCALLS +#define __ARCH_WANT_SYNC_FILE_RANGE2#include <asm-generic/unistd.h>
arch/hexagon/kernel/syscalltab.c +7 -0
@@ -14,6 +14,13 @@#undef __SYSCALL#define __SYSCALL (nr, call) [nr] = (call), +SYSCALL_DEFINE6 (hexagon_fadvise64_64, int, fd, int, advice, + SC_ARG64(offset), SC_ARG64(len)) +{ +return ksys_fadvise64_64 (fd,SC_VAL64 (loff_t, offset),SC_VAL64 (loff_t, len), advice); +} +#define sys_fadvise64_64 sys_hexagon_fadvise64_64 + void *sys_call_table[__NR_syscalls] = {#include <asm/unistd.h> };
arch/mips/bmips/setup.c +2 -1
@@ -110,7 +110,8 @@ static void bcm6358_quirks(void)* RAC flush causes kernel panics on BCM6358 when booting from TP1 * because the bootloader is not initializing it properly. */ - bmips_rac_flush_disable = !!(read_c0_brcm_cmt_local () & (1 <<31 )); + bmips_rac_flush_disable = !!(read_c0_brcm_cmt_local () & (1 <<31 )) || + !!BMIPS_GET_CBR (); }static void bcm6368_quirks (void )
arch/mips/pci/ops-rc32434.c +2 -2
@@ -112,8 +112,8 @@ static int read_config_dword(struct pci_bus *bus, unsigned int devfn,* gives them time to settle */ if (where ==PCI_VENDOR_ID ) { -if (ret ==0xffffffff || ret ==0x00000000 || - ret ==0x0000ffff || ret ==0xffff0000 ) { +if (*val ==0xffffffff || *val ==0x00000000 || + *val ==0x0000ffff || *val ==0xffff0000 ) {if (delay >4 )return 0 ; delay *=2 ;
arch/mips/pci/pcie-octeon.c +6 -0
@@ -230,12 +230,18 @@ static inline uint64_t __cvmx_pcie_build_config_addr(int pcie_port, int bus, {union cvmx_pcie_address pcie_addr;union cvmx_pciercx_cfg006 pciercx_cfg006; +union cvmx_pciercx_cfg032 pciercx_cfg032; pciercx_cfg006.u32 =cvmx_pcie_cfgx_read (pcie_port,CVMX_PCIERCX_CFG006 (pcie_port));if ((bus <= pciercx_cfg006.s.pbnum) && (dev !=0 ))return 0 ; + pciercx_cfg032.u32 = +cvmx_pcie_cfgx_read (pcie_port,CVMX_PCIERCX_CFG032 (pcie_port)); +if ((pciercx_cfg032.s.dlla ==0 ) || (pciercx_cfg032.s.lt ==1 )) +return 0 ; + pcie_addr.u64 =0 ; pcie_addr.config.upper =2 ; pcie_addr.config.io =1 ;
arch/parisc/kernel/syscalls/syscall.tbl +2 -2
@@ -108,7 +108,7 @@ 95 common fchown sys_fchown 96 common getpriority sys_getpriority 97 common setpriority sys_setpriority -98 common recv sys_recv +98 common recv sys_recv compat_sys_recv 99 common statfs sys_statfs compat_sys_statfs 100 common fstatfs sys_fstatfs compat_sys_fstatfs 101 common stat64 sys_stat64
@@ -135,7 +135,7 @@ 120 common clone sys_clone_wrapper 121 common setdomainname sys_setdomainname 122 common sendfile sys_sendfile compat_sys_sendfile -123 common recvfrom sys_recvfrom +123 common recvfrom sys_recvfrom compat_sys_recvfrom 124 32 adjtimex sys_adjtimex_time32 124 64 adjtimex sys_adjtimex 125 common mprotect sys_mprotect
arch/powerpc/include/asm/hvcall.h +4 -4
@@ -403,7 +403,7 @@ long plpar_hcall_norets(unsigned long opcode, ...);* Used for all but the craziest of phyp interfaces (see plpar_hcall9) */ #define PLPAR_HCALL_BUFSIZE 4 -long plpar_hcall (unsigned long opcode,unsigned long *retbuf, ...); +long plpar_hcall (unsigned long opcode,unsigned long retbuf[static PLPAR_HCALL_BUFSIZE ], ...);/** * plpar_hcall_raw: - Make a hypervisor call without calculating hcall stats
@@ -417,7 +417,7 @@ long plpar_hcall(unsigned long opcode, unsigned long *retbuf, ...);* plpar_hcall, but plpar_hcall_raw works in real mode and does not * calculate hypervisor call statistics. */ -long plpar_hcall_raw (unsigned long opcode,unsigned long *retbuf, ...); +long plpar_hcall_raw (unsigned long opcode,unsigned long retbuf[static PLPAR_HCALL_BUFSIZE ], ...);/** * plpar_hcall9: - Make a pseries hypervisor call with up to 9 return arguments
@@ -428,8 +428,8 @@ long plpar_hcall_raw(unsigned long opcode, unsigned long *retbuf, ...);* PLPAR_HCALL9_BUFSIZE to size the return argument buffer. */ #define PLPAR_HCALL9_BUFSIZE 9 -long plpar_hcall9 (unsigned long opcode,unsigned long *retbuf, ...); -long plpar_hcall9_raw (unsigned long opcode,unsigned long *retbuf, ...); +long plpar_hcall9 (unsigned long opcode,unsigned long retbuf[static PLPAR_HCALL9_BUFSIZE ], ...); +long plpar_hcall9_raw (unsigned long opcode,unsigned long retbuf[static PLPAR_HCALL9_BUFSIZE ], ...);struct hvcall_mpp_data {unsigned long entitled_mem;
arch/powerpc/include/asm/io.h +12 -12
@@ -542,12 +542,12 @@ __do_out_asm(_rec_outl, "stwbrx")#define __do_inw (port) _rec_inw(port)#define __do_inl (port) _rec_inl(port)#else /* CONFIG_PPC32 */ -#define __do_outb (val, port) writeb(val,(PCI_IO_ADDR)_IO_BASE+port); -#define __do_outw (val, port) writew(val,(PCI_IO_ADDR)_IO_BASE+port); -#define __do_outl (val, port) writel(val,(PCI_IO_ADDR)_IO_BASE+port); -#define __do_inb (port) readb((PCI_IO_ADDR)_IO_BASE + port); -#define __do_inw (port) readw((PCI_IO_ADDR)_IO_BASE + port); -#define __do_inl (port) readl((PCI_IO_ADDR)_IO_BASE + port); +#define __do_outb (val, port) writeb(val,(PCI_IO_ADDR)(_IO_BASE+port)); +#define __do_outw (val, port) writew(val,(PCI_IO_ADDR)(_IO_BASE+port)); +#define __do_outl (val, port) writel(val,(PCI_IO_ADDR)(_IO_BASE+port)); +#define __do_inb (port) readb((PCI_IO_ADDR)(_IO_BASE + port)); +#define __do_inw (port) readw((PCI_IO_ADDR)(_IO_BASE + port)); +#define __do_inl (port) readl((PCI_IO_ADDR)(_IO_BASE + port));#endif /* !CONFIG_PPC32 */ #ifdef CONFIG_EEH
@@ -563,12 +563,12 @@ __do_out_asm(_rec_outl, "stwbrx")#define __do_writesw (a, b, n) _outsw(PCI_FIX_ADDR(a),(b),(n))#define __do_writesl (a, b, n) _outsl(PCI_FIX_ADDR(a),(b),(n)) -#define __do_insb (p, b, n) readsb((PCI_IO_ADDR)_IO_BASE+(p), (b), (n)) -#define __do_insw (p, b, n) readsw((PCI_IO_ADDR)_IO_BASE+(p), (b), (n)) -#define __do_insl (p, b, n) readsl((PCI_IO_ADDR)_IO_BASE+(p), (b), (n)) -#define __do_outsb (p, b, n) writesb((PCI_IO_ADDR)_IO_BASE+(p),(b),(n)) -#define __do_outsw (p, b, n) writesw((PCI_IO_ADDR)_IO_BASE+(p),(b),(n)) -#define __do_outsl (p, b, n) writesl((PCI_IO_ADDR)_IO_BASE+(p),(b),(n)) +#define __do_insb (p, b, n) readsb((PCI_IO_ADDR)(_IO_BASE+(p)), (b), (n)) +#define __do_insw (p, b, n) readsw((PCI_IO_ADDR)(_IO_BASE+(p)), (b), (n)) +#define __do_insl (p, b, n) readsl((PCI_IO_ADDR)(_IO_BASE+(p)), (b), (n)) +#define __do_outsb (p, b, n) writesb((PCI_IO_ADDR)(_IO_BASE+(p)),(b),(n)) +#define __do_outsw (p, b, n) writesw((PCI_IO_ADDR)(_IO_BASE+(p)),(b),(n)) +#define __do_outsl (p, b, n) writesl((PCI_IO_ADDR)(_IO_BASE+(p)),(b),(n))#define __do_memset_io (addr, c, n) \ _memset_io(PCI_FIX_ADDR(addr), c, n)
arch/sparc/kernel/syscalls/syscall.tbl +1 -1
@@ -117,7 +117,7 @@ 90 common dup2 sys_dup2 91 32 setfsuid32 sys_setfsuid 92 common fcntl sys_fcntl compat_sys_fcntl -93 common select sys_select +93 common select sys_select compat_sys_select 94 32 setfsgid32 sys_setfsgid 95 common fsync sys_fsync 96 common setpriority sys_setpriority
arch/x86/kernel/amd_nb.c +8 -1
@@ -166,7 +166,14 @@ static int __amd_smn_rw(u16 node, u32 address, u32 *value, bool write)int amd_smn_read (u16 node,u32 address,u32 *value) { -return __amd_smn_rw (node, address, value, false); +int err =__amd_smn_rw (node, address, value, false); + +if (PCI_POSSIBLE_ERROR (*value)) { + err = -ENODEV ; + *value =0 ; + } + +return err; }EXPORT_SYMBOL_GPL (amd_smn_read);
arch/x86/kernel/time.c +1 -19
@@ -27,25 +27,7 @@unsigned long profile_pc (struct pt_regs *regs) { -unsigned long pc =instruction_pointer (regs); - -if (!user_mode (regs) &&in_lock_functions (pc)) { -#ifdef CONFIG_FRAME_POINTER -return *(unsigned long *)(regs->bp +sizeof (long )); -#else -unsigned long *sp = (unsigned long *)regs->sp; -/* -* Return address is either directly at stack pointer -* or above a saved flags. Eflags has bits 22-31 zero, -* kernel addresses don't. -*/ -if (sp[0 ] >>22 ) -return sp[0 ]; -if (sp[1 ] >>22 ) -return sp[1 ]; -#endif - } -return pc; +return instruction_pointer (regs); }EXPORT_SYMBOL (profile_pc);
drivers/acpi/acpica/exregion.c +2 -21
@@ -43,7 +43,6 @@ acpi_ex_system_memory_space_handler(u32 function,struct acpi_mem_space_context *mem_info = region_context;u32 length;acpi_size map_length; -acpi_size page_boundary_map_length;#ifdef ACPI_MISALIGNMENT_NOT_SUPPORTED u32 remainder;#endif
@@ -120,26 +119,8 @@ acpi_ex_system_memory_space_handler(u32 function, map_length = (acpi_size) ((mem_info->address + mem_info->length) - address); -/* -* If mapping the entire remaining portion of the region will cross -* a page boundary, just map up to the page boundary, do not cross. -* On some systems, crossing a page boundary while mapping regions -* can cause warnings if the pages have different attributes -* due to resource management. -* -* This has the added benefit of constraining a single mapping to -* one page, which is similar to the original code that used a 4k -* maximum window. -*/ - page_boundary_map_length = (acpi_size) - (ACPI_ROUND_UP (address,ACPI_DEFAULT_PAGE_SIZE ) - address); -if (page_boundary_map_length ==0 ) { - page_boundary_map_length =ACPI_DEFAULT_PAGE_SIZE ; - } - -if (map_length > page_boundary_map_length) { - map_length = page_boundary_map_length; - } +if (map_length >ACPI_DEFAULT_PAGE_SIZE ) + map_length =ACPI_DEFAULT_PAGE_SIZE ;/* Create a new mapping starting at the address given */
drivers/ata/libata-core.c +4 -4
@@ -6194,8 +6194,10 @@ struct ata_host *ata_host_alloc(struct device *dev, int max_ports)if (!host)return NULL ; -if (!devres_open_group (dev,NULL ,GFP_KERNEL )) - goto err_free; +if (!devres_open_group (dev,NULL ,GFP_KERNEL )) { +kfree (host); +return NULL ; + } dr =devres_alloc (ata_devres_release,0 ,GFP_KERNEL );if (!dr)
@@ -6227,8 +6229,6 @@ struct ata_host *ata_host_alloc(struct device *dev, int max_ports) err_out:devres_release_group (dev,NULL ); - err_free: -kfree (host);return NULL ; }
drivers/base/core.c +3 -0
@@ -1273,8 +1273,11 @@ static ssize_t uevent_show(struct device *dev, struct device_attribute *attr,if (!env)return -ENOMEM ; +/* Synchronize with really_probe() */ +device_lock (dev);/* let the kset specific function add its keys */ retval = kset->uevent_ops->uevent (kset, &dev->kobj, env); +device_unlock (dev);if (retval) goto out;
drivers/bluetooth/ath3k.c +11 -14
@@ -3,7 +3,6 @@* Copyright (c) 2008-2009 Atheros Communications Inc. */ -#include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h>
@@ -129,7 +128,6 @@ MODULE_DEVICE_TABLE(usb, ath3k_table);* for AR3012 */ static const struct usb_device_id ath3k_blist_tbl[] = { -/* Atheros AR3012 with sflash firmware*/ {USB_DEVICE (0x0489 ,0xe04e ), .driver_info =BTUSB_ATH3012 }, {USB_DEVICE (0x0489 ,0xe04d ), .driver_info =BTUSB_ATH3012 },
@@ -203,7 +201,7 @@ static inline void ath3k_log_failed_loading(int err, int len, int size,#define TIMEGAP_USEC_MAX 100static int ath3k_load_firmware (struct usb_device *udev, -const struct firmware *firmware) +const struct firmware *firmware) {u8 *send_buf;int len =0 ;
@@ -241,9 +239,9 @@ static int ath3k_load_firmware(struct usb_device *udev,memcpy (send_buf, firmware->data + sent, size); err =usb_bulk_msg (udev, pipe, send_buf, size, - &len,3000 ); + &len,3000 ); -if (err || (len != size)) { +if (err || len != size) {ath3k_log_failed_loading (err, len, size, count); goto error; }
@@ -278,7 +276,7 @@ static int ath3k_get_state(struct usb_device *udev, unsigned char *state) }static int ath3k_get_version (struct usb_device *udev, -struct ath3k_version *version) +struct ath3k_version *version) {int ret, pipe =0 ;struct ath3k_version *buf;
@@ -300,7 +298,7 @@ static int ath3k_get_version(struct usb_device *udev, }static int ath3k_load_fwfile (struct usb_device *udev, -const struct firmware *firmware) +const struct firmware *firmware) {u8 *send_buf;int len =0 ;
@@ -341,8 +339,8 @@ static int ath3k_load_fwfile(struct usb_device *udev,memcpy (send_buf, firmware->data + sent, size); err =usb_bulk_msg (udev, pipe, send_buf, size, - &len,3000 ); -if (err || (len != size)) { + &len,3000 ); +if (err || len != size) {ath3k_log_failed_loading (err, len, size, count);kfree (send_buf);return err;
@@ -461,7 +459,6 @@ static int ath3k_load_syscfg(struct usb_device *udev) }switch (fw_version.ref_clock) { -case ATH3K_XTAL_FREQ_26M : clk_value =26 ;break ;
@@ -477,7 +474,7 @@ static int ath3k_load_syscfg(struct usb_device *udev) }snprintf (filename,ATH3K_NAME_LEN ,"ar3k/ramps_0x%08x_%d%s" , -le32_to_cpu (fw_version.rom_version), clk_value,".dfu" ); +le32_to_cpu (fw_version.rom_version), clk_value,".dfu" ); ret =request_firmware (&firmware, filename, &udev->dev);if (ret <0 ) {
@@ -492,7 +489,7 @@ static int ath3k_load_syscfg(struct usb_device *udev) }static int ath3k_probe (struct usb_interface *intf, -const struct usb_device_id *id) +const struct usb_device_id *id) {const struct firmware *firmware;struct usb_device *udev =interface_to_usbdev (intf);
@@ -541,10 +538,10 @@ static int ath3k_probe(struct usb_interface *intf,if (ret <0 ) {if (ret == -ENOENT )BT_ERR ("Firmware file \"%s\" not found" , -ATH3K_FIRMWARE ); +ATH3K_FIRMWARE );else BT_ERR ("Firmware file \"%s\" request failed (err=%d)" , -ATH3K_FIRMWARE , ret); +ATH3K_FIRMWARE , ret);return ret; }
drivers/dma/dma-axi-dmac.c +1 -1
@@ -947,8 +947,8 @@ static int axi_dmac_remove(struct platform_device *pdev) {struct axi_dmac *dmac =platform_get_drvdata (pdev); -of_dma_controller_free (pdev->dev.of_node);free_irq (dmac->irq, dmac); +of_dma_controller_free (pdev->dev.of_node);tasklet_kill (&dmac->chan.vchan.task);dma_async_device_unregister (&dmac->dma_dev);clk_disable_unprepare (dmac->clk);
drivers/dma/ioat/init.c +1 -0
@@ -1446,6 +1446,7 @@ module_init(ioat_init_module); static void __exit ioat_exit_module(void) {pci_unregister_driver (&ioat_pci_driver); +kmem_cache_destroy (ioat_sed_cache);kmem_cache_destroy (ioat_cache); }module_exit (ioat_exit_module);
drivers/gpio/Kconfig +1 -1
@@ -1230,7 +1230,7 @@ config GPIO_TPS68470 drivers are loaded. config GPIO_TQMX86 - tristate "TQ-Systems QTMX86 GPIO" + tristate "TQ-Systems TQMx86 GPIO" depends on MFD_TQMX86 || COMPILE_TEST depends on HAS_IOPORT_MAP select GPIOLIB_IRQCHIP
drivers/gpio/gpio-davinci.c +5 -0
@@ -227,6 +227,11 @@ static int davinci_gpio_probe(struct platform_device *pdev)else nirq =DIV_ROUND_UP (ngpio,16 ); +if (nirq >MAX_INT_PER_BANK ) { +dev_err (dev,"Too many IRQs!\n" ); +return -EINVAL ; + } + chips =devm_kzalloc (dev,sizeof (*chips),GFP_KERNEL );if (!chips)return -ENOMEM ;
drivers/gpu/drm/amd/amdgpu/kv_dpm.c +2 -0
@@ -163,6 +163,8 @@ static void sumo_construct_vid_mapping_table(struct amdgpu_device *adev,for (i =0 ; i <SUMO_MAX_HARDWARE_POWERLEVELS ; i++) {if (table[i].ulSupportedSCLK !=0 ) { +if (table[i].usVoltageIndex >=SUMO_MAX_NUMBER_VOLTAGES ) +continue ; vid_mapping_table->entries[table[i].usVoltageIndex].vid_7bit = table[i].usVoltageID; vid_mapping_table->entries[table[i].usVoltageIndex].vid_2bit =
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_stream_encoder.c +6 -0
@@ -635,6 +635,12 @@ void enc1_stream_encoder_set_mst_bandwidth( x), 26)); +// If y rounds up to integer, carry it over to x. +if (y >>26 ) { + x +=1 ; + y =0 ; + } +REG_SET_2 (DP_MSE_RATE_CNTL ,0 ,DP_MSE_RATE_X , x,DP_MSE_RATE_Y , y);
drivers/gpu/drm/arm/display/komeda/komeda_pipeline_state.c +1 -1
@@ -259,7 +259,7 @@ komeda_component_get_avail_scaler(struct komeda_component *c,u32 avail_scalers; pipe_st =komeda_pipeline_get_state (c->pipeline, state); -if (!pipe_st) +if (IS_ERR_OR_NULL (pipe_st))return NULL ; avail_scalers = (pipe_st->active_comps & KOMEDA_PIPELINE_SCALERS) ^
drivers/gpu/drm/bridge/panel.c +5 -2
@@ -203,9 +203,12 @@ EXPORT_SYMBOL(drm_panel_bridge_remove);static void devm_drm_panel_bridge_release (struct device *dev,void *res) { -struct drm_bridge **bridge = res; +struct drm_bridge *bridge = *(struct drm_bridge **)res; -drm_panel_bridge_remove (*bridge); +if (!bridge) +return ; + +drm_bridge_remove (bridge); }/**
drivers/gpu/drm/exynos/exynos_drm_vidi.c +6 -1
@@ -301,6 +301,7 @@ static int vidi_get_modes(struct drm_connector *connector)struct vidi_context *ctx =ctx_from_connector (connector);struct edid *edid;int edid_len; +int count;/* * the edid data comes from user side and it would be set
@@ -320,7 +321,11 @@ static int vidi_get_modes(struct drm_connector *connector)drm_connector_update_edid_property (connector, edid); -return drm_add_edid_modes (connector, edid); + count =drm_add_edid_modes (connector, edid); + +kfree (edid); + +return count; }static const struct drm_connector_helper_funcs vidi_connector_helper_funcs = {
drivers/gpu/drm/exynos/exynos_hdmi.c +5 -2
@@ -876,11 +876,11 @@ static int hdmi_get_modes(struct drm_connector *connector)int ret;if (!hdata->ddc_adpt) -return 0 ; + goto no_edid; edid =drm_get_edid (connector, hdata->ddc_adpt);if (!edid) -return 0 ; + goto no_edid; hdata->dvi_mode = !drm_detect_hdmi_monitor (edid); DRM_DEV_DEBUG_KMS(hdata->dev, "%s : width[%d] x height[%d]\n",
@@ -895,6 +895,9 @@ static int hdmi_get_modes(struct drm_connector *connector)kfree (edid);return ret; + +no_edid: +return drm_add_modes_noedid (connector,640 ,480 ); }static int hdmi_find_phy_conf (struct hdmi_context *hdata,u32 pixel_clock)
drivers/gpu/drm/nouveau/dispnv04/tvnv17.c +6 -0
@@ -208,6 +208,8 @@ static int nv17_tv_get_ld_modes(struct drm_encoder *encoder,struct drm_display_mode *mode; mode =drm_mode_duplicate (encoder->dev, tv_mode); +if (!mode) +continue ; mode->clock = tv_norm->tv_enc_mode.vrefresh * mode->htotal / 1000 *
@@ -257,6 +259,8 @@ static int nv17_tv_get_hd_modes(struct drm_encoder *encoder,if (modes[i].hdisplay == output_mode->hdisplay && modes[i].vdisplay == output_mode->vdisplay) { mode =drm_mode_duplicate (encoder->dev, output_mode); +if (!mode) +continue ; mode->type |=DRM_MODE_TYPE_PREFERRED ; }else {
@@ -264,6 +268,8 @@ static int nv17_tv_get_hd_modes(struct drm_encoder *encoder, modes[i].vdisplay,60 , false, (output_mode->flags & DRM_MODE_FLAG_INTERLACE), false); +if (!mode) +continue ; }/* CVT modes are sometimes unsuitable... */
drivers/gpu/drm/panel/panel-ilitek-ili9881c.c +3 -3
@@ -307,10 +307,10 @@ static int ili9881c_prepare(struct drm_panel *panel)msleep (5 );/* And reset it */ -gpiod_set_value (ctx->reset,1 ); +gpiod_set_value_cansleep (ctx->reset,1 );msleep (20 ); -gpiod_set_value (ctx->reset,0 ); +gpiod_set_value_cansleep (ctx->reset,0 );msleep (20 );for (i =0 ; i <ARRAY_SIZE (ili9881c_init); i++) {
@@ -367,7 +367,7 @@ static int ili9881c_unprepare(struct drm_panel *panel)mipi_dsi_dcs_enter_sleep_mode (ctx->dsi);regulator_disable (ctx->power); -gpiod_set_value (ctx->reset,1 ); +gpiod_set_value_cansleep (ctx->reset,1 );return 0 ; }
drivers/gpu/drm/radeon/sumo_dpm.c +2 -0
@@ -1621,6 +1621,8 @@ void sumo_construct_vid_mapping_table(struct radeon_device *rdev,for (i =0 ; i <SUMO_MAX_HARDWARE_POWERLEVELS ; i++) {if (table[i].ulSupportedSCLK !=0 ) { +if (table[i].usVoltageIndex >=SUMO_MAX_NUMBER_VOLTAGES ) +continue ; vid_mapping_table->entries[table[i].usVoltageIndex].vid_7bit = table[i].usVoltageID; vid_mapping_table->entries[table[i].usVoltageIndex].vid_2bit =
drivers/greybus/interface.c +1 -0
@@ -694,6 +694,7 @@ static void gb_interface_release(struct device *dev)trace_gb_interface_release (intf); +cancel_work_sync (&intf->mode_switch_work);kfree (intf); }
drivers/hid/hid-core.c +0 -1
@@ -1439,7 +1439,6 @@ static void implement(const struct hid_device *hid, u8 *report,hid_warn (hid,"%s() called with too large value %d (n: %d)! (%s)\n" , __func__, value, n, current->comm); -WARN_ON (1 ); value &= m; } }
drivers/hid/hid-logitech-dj.c +3 -1
@@ -1213,8 +1213,10 @@ static int logi_dj_recv_switch_to_dj_mode(struct dj_receiver_dev *djrcv_dev,*/ msleep (50 ); -if (retval) +if (retval) { +kfree (dj_report);return retval; + } }/*
drivers/hv/hv_util.c +16 -3
@@ -283,10 +283,23 @@ static void timesync_onchannelcallback(void *context)struct ictimesync_ref_data *refdata;u8 *time_txf_buf = util_timesynch.recv_buffer; -vmbus_recvpacket (channel, time_txf_buf, -PAGE_SIZE , &recvlen, &requestid); +/* +* Drain the ring buffer and use the last packet to update +* host_ts +*/ +while (1 ) { +int ret =vmbus_recvpacket (channel, time_txf_buf, +HV_HYP_PAGE_SIZE , &recvlen, + &requestid); +if (ret) { +pr_warn_once ("TimeSync IC pkt recv failed (Err: %d)\n" , + ret); +break ; + } + +if (!recvlen) +break ; -if (recvlen >0 ) { icmsghdrp = (struct icmsg_hdr *)&time_txf_buf[sizeof (struct vmbuspipe_hdr )];
drivers/hwtracing/intel_th/pci.c +25 -0
@@ -294,11 +294,36 @@ static const struct pci_device_id intel_th_pci_id_table[] = { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xae24), .driver_data = (kernel_ulong_t)&intel_th_2x, }, + { +/* Meteor Lake-S */ +PCI_DEVICE (PCI_VENDOR_ID_INTEL ,0x7f26 ), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, {/* Raptor Lake-S */ PCI_DEVICE (PCI_VENDOR_ID_INTEL ,0x7a26 ), .driver_data = (kernel_ulong_t)&intel_th_2x, }, + { +/* Granite Rapids */ +PCI_DEVICE (PCI_VENDOR_ID_INTEL ,0x0963 ), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, + { +/* Granite Rapids SOC */ +PCI_DEVICE (PCI_VENDOR_ID_INTEL ,0x3256 ), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, + { +/* Sapphire Rapids SOC */ +PCI_DEVICE (PCI_VENDOR_ID_INTEL ,0x3456 ), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, + { +/* Lunar Lake */ +PCI_DEVICE (PCI_VENDOR_ID_INTEL ,0xa824 ), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, {/* Rocket Lake CPU */ PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4c19),
drivers/i2c/busses/i2c-at91-slave.c +1 -2
@@ -106,8 +106,7 @@ static int at91_unreg_slave(struct i2c_client *slave)static u32 at91_twi_func (struct i2c_adapter *adapter) { -return I2C_FUNC_SLAVE |I2C_FUNC_I2C |I2C_FUNC_SMBUS_EMUL - |I2C_FUNC_SMBUS_READ_BLOCK_DATA ; +return I2C_FUNC_SLAVE ; }static const struct i2c_algorithm at91_twi_algorithm_slave = {
drivers/i2c/busses/i2c-ocores.c +1 -1
@@ -443,8 +443,8 @@ static int ocores_init(struct device *dev, struct ocores_i2c *i2c)oc_setreg (i2c,OCI2C_PREHIGH , prescale >>8 );/* Init the device */ -oc_setreg (i2c,OCI2C_CMD ,OCI2C_CMD_IACK );oc_setreg (i2c,OCI2C_CONTROL , ctrl |OCI2C_CTRL_EN ); +oc_setreg (i2c,OCI2C_CMD ,OCI2C_CMD_IACK );return 0 ; }
drivers/iio/adc/ad7266.c +2 -0
@@ -159,6 +159,8 @@ static int ad7266_read_raw(struct iio_dev *indio_dev, ret =ad7266_read_single (st, val, chan->address);iio_device_release_direct_mode (indio_dev); +if (ret <0 ) +return ret; *val = (*val >>2 ) &0xfff ;if (chan->scan_type.sign =='s' ) *val =sign_extend32 (*val,11 );
drivers/iio/chemical/bme680.h +2 -0
@@ -54,7 +54,9 @@#define BME680_NB_CONV_MASK GENMASK(3, 0)#define BME680_REG_MEAS_STAT_0 0x1D +#define BME680_NEW_DATA_BIT BIT(7)#define BME680_GAS_MEAS_BIT BIT(6) +#define BME680_MEAS_BIT BIT(5)/* Calibration Parameters */ #define BME680_T2_LSB_REG 0x8A
drivers/iio/chemical/bme680_core.c +54 -8
125 lines not on this page · raw message
drivers/iio/dac/ad5592r-base.c +27 -29
148 lines not on this page · raw message
drivers/iio/dac/ad5592r-base.h +1 -0
@@ -52,6 +52,7 @@ struct ad5592r_state {struct regulator *reg;struct gpio_chip gpiochip;struct mutex gpio_lock;/* Protect cached gpio_out, gpio_val, etc. */ +struct mutex lock;unsigned int num_channels;const struct ad5592r_rw_ops *ops;int scale_avail[2 ][2 ];
drivers/input/input.c +90 -15
151 lines not on this page · raw message
drivers/iommu/amd_iommu_init.c +9 -0
@@ -1410,8 +1410,17 @@ static int __init init_iommu_from_acpi(struct amd_iommu *iommu,return 0 ; } +static void __init free_sysfs (struct amd_iommu *iommu) +{ +if (iommu->iommu.dev) { +iommu_device_unregister (&iommu->iommu); +iommu_device_sysfs_remove (&iommu->iommu); + } +} +static void __init free_iommu_one (struct amd_iommu *iommu) { +free_sysfs (iommu);free_command_buffer (iommu);free_event_buffer (iommu);free_ppr_log (iommu);
drivers/media/dvb-core/dvbdev.c +1 -1
@@ -974,7 +974,7 @@ int dvb_usercopy(struct file *file,int (*func)(struct file *file, unsigned int cmd, void *arg)) { -char sbuf[128 ]; +char sbuf[128 ] = {};void *mbuf =NULL ;void *parg =NULL ;int err = -EINVAL ;
drivers/misc/mei/pci-me.c +3 -1
@@ -379,8 +379,10 @@ static int mei_me_pci_resume(struct device *device) } err =mei_restart (dev); -if (err) +if (err) { +free_irq (pdev->irq, dev);return err; + }/* Start timer if stopped in suspend */ schedule_delayed_work (&dev->timer_work,HZ );
drivers/misc/vmw_vmci/vmci_event.c +5 -1
@@ -9,6 +9,7 @@#include <linux/vmw_vmci_api.h> #include <linux/list.h> #include <linux/module.h> +#include <linux/nospec.h> #include <linux/sched.h> #include <linux/slab.h> #include <linux/rculist.h>
@@ -86,9 +87,12 @@ static void event_deliver(struct vmci_event_msg *event_msg) {struct vmci_subscription *cur;struct list_head *subscriber_list; +u32 sanitized_event, max_vmci_event;rcu_read_lock (); - subscriber_list = &subscriber_array[event_msg->event_data.event]; + max_vmci_event =ARRAY_SIZE (subscriber_array); + sanitized_event =array_index_nospec (event_msg->event_data.event, max_vmci_event); + subscriber_list = &subscriber_array[sanitized_event];list_for_each_entry_rcu (cur, subscriber_list, node) { cur->callback (cur->id, &event_msg->event_data, cur->callback_data);
drivers/mmc/host/sdhci-pci-core.c +7 -4
@@ -1376,7 +1376,7 @@ static int jmicron_pmos(struct sdhci_pci_chip *chip, int on) ret =pci_read_config_byte (chip->pdev,0xAE , &scratch);if (ret) -return ret; + goto fail;/* * Turn PMOS on [bit 0], set over current detection to 2.4 V
@@ -1387,7 +1387,10 @@ static int jmicron_pmos(struct sdhci_pci_chip *chip, int on)else scratch &= ~0x47 ; -return pci_write_config_byte (chip->pdev,0xAE , scratch); + ret =pci_write_config_byte (chip->pdev,0xAE , scratch); + +fail: +return pcibios_err_to_errno (ret); }static int jmicron_probe (struct sdhci_pci_chip *chip)
@@ -2303,7 +2306,7 @@ static int sdhci_pci_probe(struct pci_dev *pdev, ret =pci_read_config_byte (pdev,PCI_SLOT_INFO , &slots);if (ret) -return ret; +return pcibios_err_to_errno (ret); slots =PCI_SLOT_INFO_SLOTS (slots) +1 ;dev_dbg (&pdev->dev,"found %d slot(s)\n" , slots);
@@ -2312,7 +2315,7 @@ static int sdhci_pci_probe(struct pci_dev *pdev, ret =pci_read_config_byte (pdev,PCI_SLOT_INFO , &first_bar);if (ret) -return ret; +return pcibios_err_to_errno (ret); first_bar &=PCI_SLOT_INFO_FIRST_BAR_MASK ;
drivers/mmc/host/sdhci.c +14 -11
@@ -2141,26 +2141,29 @@ static int sdhci_get_cd(struct mmc_host *mmc)static int sdhci_check_ro (struct sdhci_host *host) { -unsigned long flags; +bool allow_invert = false;int is_readonly; -spin_lock_irqsave (&host->lock, flags); - -if (host->flags &SDHCI_DEVICE_DEAD ) +if (host->flags &SDHCI_DEVICE_DEAD ) { is_readonly =0 ; -else if (host->ops->get_ro) + }else if (host->ops->get_ro) { is_readonly = host->ops->get_ro (host); -else if (mmc_can_gpio_ro (host->mmc)) + }else if (mmc_can_gpio_ro (host->mmc)) { is_readonly =mmc_gpio_get_ro (host->mmc); -else +/* Do not invert twice */ + allow_invert = !(host->mmc->caps2 &MMC_CAP2_RO_ACTIVE_HIGH ); + }else { is_readonly = !(sdhci_readl (host,SDHCI_PRESENT_STATE ) &SDHCI_WRITE_PROTECT ); + allow_invert = true; + } -spin_unlock_irqrestore (&host->lock, flags); +if (is_readonly >=0 && + allow_invert && + (host->quirks &SDHCI_QUIRK_INVERTED_WRITE_PROTECT )) + is_readonly = !is_readonly; -/* This quirk needs to be replaced by a callback-function later */ -return host->quirks &SDHCI_QUIRK_INVERTED_WRITE_PROTECT ? - !is_readonly : is_readonly; +return is_readonly; }#define SAMPLE_COUNT 5
drivers/mtd/nand/spi/macronix.c +99 -0
105 lines not on this page · raw message
drivers/mtd/parsers/redboot.c +1 -1
@@ -102,7 +102,7 @@ static int parse_redboot_partitions(struct mtd_info *master, offset -= master->erasesize; } }else { - offset = directory * master->erasesize; + offset = (unsigned long ) directory * master->erasesize;while (mtd_block_isbad (master, offset)) { offset += master->erasesize;if (offset == master->size)
drivers/net/dsa/microchip/ksz9477.c +2 -4
@@ -206,10 +206,8 @@ static int ksz9477_reset_switch(struct ksz_device *dev) SPI_AUTO_EDGE_DETECTION, 0);/* default configuration */ -ksz_read8 (dev,REG_SW_LUE_CTRL_1 , &data8); - data8 =SW_AGING_ENABLE |SW_LINK_AUTO_AGING | -SW_SRC_ADDR_FILTER |SW_FLUSH_STP_TABLE |SW_FLUSH_MSTP_TABLE ; -ksz_write8 (dev,REG_SW_LUE_CTRL_1 , data8); +ksz_write8 (dev,REG_SW_LUE_CTRL_1 , +SW_AGING_ENABLE |SW_LINK_AUTO_AGING |SW_SRC_ADDR_FILTER );/* disable interrupts */ ksz_write32 (dev,REG_SW_INT_MASK__4 ,SWITCH_INT_MASK );
drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c +5 -6
@@ -272,13 +272,12 @@ lio_vf_rep_copy_packet(struct octeon_device *oct, pg_info->page_offset;memcpy (skb->data, va,MIN_SKB_SIZE );skb_put (skb,MIN_SKB_SIZE ); +skb_add_rx_frag (skb,skb_shinfo (skb)->nr_frags, + pg_info->page, + pg_info->page_offset +MIN_SKB_SIZE , + len -MIN_SKB_SIZE , +LIO_RXBUFFER_SZ ); } - -skb_add_rx_frag (skb,skb_shinfo (skb)->nr_frags, - pg_info->page, - pg_info->page_offset +MIN_SKB_SIZE , - len -MIN_SKB_SIZE , -LIO_RXBUFFER_SZ ); }else {struct octeon_skb_page_info *pg_info = ((struct octeon_skb_page_info *)(skb->cb));
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c +9 -5
@@ -1945,11 +1945,14 @@ static int dpaa2_eth_xdp_xmit(struct net_device *net_dev, int n,static int update_xps (struct dpaa2_eth_priv *priv) {struct net_device *net_dev = priv->net_dev; -struct cpumask xps_mask; -struct dpaa2_eth_fq *fq;int i, num_queues, netdev_queues; +struct dpaa2_eth_fq *fq; +cpumask_var_t xps_mask;int err =0 ; +if (!alloc_cpumask_var (&xps_mask,GFP_KERNEL )) +return -ENOMEM ; + num_queues =dpaa2_eth_queue_count (priv); netdev_queues = (net_dev->num_tc ? :1 ) * num_queues;
@@ -1959,16 +1962,17 @@ static int update_xps(struct dpaa2_eth_priv *priv)for (i =0 ; i < netdev_queues; i++) { fq = &priv->fq[i % num_queues]; -cpumask_clear (&xps_mask); -cpumask_set_cpu (fq->target_cpu, &xps_mask); +cpumask_clear (xps_mask); +cpumask_set_cpu (fq->target_cpu, xps_mask); - err =netif_set_xps_queue (net_dev, &xps_mask, i); + err =netif_set_xps_queue (net_dev, xps_mask, i);if (err) {netdev_warn_once (net_dev,"Error setting XPS queue\n" );break ; } } +free_cpumask_var (xps_mask);return err; }
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +1 -2
@@ -4433,7 +4433,7 @@ static netdev_features_t mlx5e_tunnel_features_check(struct mlx5e_priv *priv,/* Verify if UDP port is being offloaded by HW */ if (mlx5_vxlan_lookup_port (priv->mdev->vxlan, port)) -return features; +return vxlan_features_check (skb, features);#if IS_ENABLED (CONFIG_GENEVE )/* Support Geneve offload for default UDP port */
@@ -4454,7 +4454,6 @@ netdev_features_t mlx5e_features_check(struct sk_buff *skb,struct mlx5e_priv *priv =netdev_priv (netdev); features =vlan_features_check (skb, features); - features =vxlan_features_check (skb, features);#ifdef CONFIG_MLX5_EN_IPSEC if (mlx5e_ipsec_feature_check (skb, netdev, features))
drivers/net/ethernet/mellanox/mlx5/core/fw.c +4 -0
@@ -337,6 +337,10 @@ int mlx5_cmd_fast_teardown_hca(struct mlx5_core_dev *dev)do {if (mlx5_get_nic_state (dev) ==MLX5_NIC_IFC_DISABLED )break ; +if (pci_channel_offline (dev->pdev)) { +mlx5_core_err (dev,"PCI channel offline, stop waiting for NIC IFC\n" ); +return -EACCES ; + }cond_resched (); }while (!time_after (jiffies, end));
drivers/net/ethernet/mellanox/mlx5/core/health.c +8 -0
@@ -250,6 +250,10 @@ void mlx5_error_sw_reset(struct mlx5_core_dev *dev)do {if (mlx5_get_nic_state (dev) ==MLX5_NIC_IFC_DISABLED )break ; +if (pci_channel_offline (dev->pdev)) { +mlx5_core_err (dev,"PCI channel offline, stop waiting for NIC IFC\n" ); + goto unlock; + }msleep (20 ); }while (!time_after (jiffies, end));
@@ -322,6 +326,10 @@ static int mlx5_health_try_recover(struct mlx5_core_dev *dev) "health recovery flow aborted, PCI reads still not working\n");return -EIO ; } +if (pci_channel_offline (dev->pdev)) { +mlx5_core_err (dev,"PCI channel offline, stop waiting for PCI\n" ); +return -EACCES ; + }msleep (100 ); }
drivers/net/ethernet/mellanox/mlx5/core/lib/pci_vsc.c +4 -0
@@ -74,6 +74,10 @@ int mlx5_vsc_gw_lock(struct mlx5_core_dev *dev) ret = -EBUSY ; goto pci_unlock; } +if (pci_channel_offline (dev->pdev)) { + ret = -EACCES ; + goto pci_unlock; + }/* Check if semaphore is already locked */ ret =vsc_read (dev,VSC_SEMAPHORE_OFFSET , &lock_val);
drivers/net/ethernet/pensando/ionic/ionic_lif.c +1 -3
@@ -205,10 +205,8 @@ static int ionic_qcq_enable(struct ionic_qcq *qcq)if (ret)return ret; -if (qcq->napi.poll) -napi_enable (&qcq->napi); -if (qcq->flags &IONIC_QCQ_F_INTR ) { +napi_enable (&qcq->napi);irq_set_affinity_hint (qcq->intr.vector, &qcq->intr.affinity_mask); ionic_intr_mask(idev->intr_ctrl, qcq->intr.index,
drivers/net/phy/micrel.c +15 -0
@@ -1149,6 +1149,19 @@ static struct phy_driver ksphy_driver[] = { .get_stats = kszphy_get_stats, .suspend = genphy_suspend, .resume = kszphy_resume, +}, { + .phy_id = PHY_ID_LAN8814, + .phy_id_mask = MICREL_PHY_ID_MASK, + .name = "Microchip INDY Gigabit Quad PHY", + .driver_data = &ksz9021_type, + .probe = kszphy_probe, + .soft_reset = genphy_soft_reset, + .read_status = ksz9031_read_status, + .get_sset_count = kszphy_get_sset_count, + .get_strings = kszphy_get_strings, + .get_stats = kszphy_get_stats, + .suspend = genphy_suspend, + .resume = kszphy_resume, }, { .phy_id = PHY_ID_KSZ9131, .phy_id_mask = MICREL_PHY_ID_MASK,
@@ -1221,6 +1234,8 @@ static struct mdio_device_id __maybe_unused micrel_tbl[] = { { PHY_ID_KSZ8081, MICREL_PHY_ID_MASK }, { PHY_ID_KSZ8873MLL, MICREL_PHY_ID_MASK }, { PHY_ID_KSZ886X, MICREL_PHY_ID_MASK }, + { PHY_ID_KSZ9477, MICREL_PHY_ID_MASK }, + { PHY_ID_LAN8814, MICREL_PHY_ID_MASK }, { } };
drivers/net/usb/ax88179_178a.c +5 -1
@@ -345,7 +345,8 @@ static void ax88179_status(struct usbnet *dev, struct urb *urb)if (netif_carrier_ok (dev->net) != link) {usbnet_link_change (dev, link,1 ); -netdev_info (dev->net,"ax88179 - Link status is: %d\n" , link); +if (!link) +netdev_info (dev->net,"ax88179 - Link status is: 0\n" ); } }
@@ -1532,6 +1533,7 @@ static int ax88179_link_reset(struct usbnet *dev) GMII_PHY_PHYSR, 2, &tmp16);if (!(tmp16 &GMII_PHY_PHYSR_LINK )) { +netdev_info (dev->net,"ax88179 - Link status is: 0\n" );return 0 ; }else if (GMII_PHY_PHYSR_GIGA == (tmp16 &GMII_PHY_PHYSR_SMASK )) { mode |=AX_MEDIUM_GIGAMODE |AX_MEDIUM_EN_125MHZ ;
@@ -1569,6 +1571,8 @@ static int ax88179_link_reset(struct usbnet *dev)netif_carrier_on (dev->net); +netdev_info (dev->net,"ax88179 - Link status is: 1\n" ); +return 0 ; }
drivers/net/usb/rtl8150.c +2 -1
@@ -798,7 +798,8 @@ static int rtl8150_get_link_ksettings(struct net_device *netdev, struct ethtool_link_ksettings *ecmd) {rtl8150_t *dev =netdev_priv (netdev); -short lpa, bmcr; +short lpa =0 ; +short bmcr =0 ;u32 supported; supported = (SUPPORTED_10baseT_Half |
drivers/net/virtio_net.c +10 -2
@@ -3157,8 +3157,16 @@ static int virtnet_probe(struct virtio_device *vdev) dev->features |= dev->hw_features &NETIF_F_ALL_TSO ;/* (!csum && gso) case will be fixed by register_netdev() */ } -if (virtio_has_feature (vdev,VIRTIO_NET_F_GUEST_CSUM )) - dev->features |=NETIF_F_RXCSUM ; + +/* 1. With VIRTIO_NET_F_GUEST_CSUM negotiation, the driver doesn't +* need to calculate checksums for partially checksummed packets, +* as they're considered valid by the upper layer. +* 2. Without VIRTIO_NET_F_GUEST_CSUM negotiation, the driver only +* receives fully checksummed packets. The device may assist in +* validating these packets' checksums, so the driver won't have to. +*/ + dev->features |=NETIF_F_RXCSUM ; +if (virtio_has_feature (vdev,VIRTIO_NET_F_GUEST_TSO4 ) ||virtio_has_feature (vdev,VIRTIO_NET_F_GUEST_TSO6 )) dev->features |=NETIF_F_GRO_HW ;
drivers/net/vxlan.c +4 -0
@@ -1323,6 +1323,10 @@ static bool vxlan_snoop(struct net_device *dev,struct vxlan_fdb *f;u32 ifindex =0 ; +/* Ignore packets from invalid src-address */ +if (!is_valid_ether_addr (src_mac)) +return true; +#if IS_ENABLED (CONFIG_IPV6 )if (src_ip->sa.sa_family ==AF_INET6 && (ipv6_addr_type (&src_ip->sin6.sin6_addr) &IPV6_ADDR_LINKLOCAL ))
drivers/net/wireless/intel/iwlwifi/iwl-drv.c +1 -1
@@ -1669,8 +1669,8 @@ struct iwl_drv *iwl_drv_start(struct iwl_trans *trans) err_fw:#ifdef CONFIG_IWLWIFI_DEBUGFS debugfs_remove_recursive (drv->dbgfs_drv); -iwl_dbg_tlv_free (drv->trans);#endif +iwl_dbg_tlv_free (drv->trans);kfree (drv); err:return ERR_PTR (ret);
drivers/net/wireless/intel/iwlwifi/mvm/fw.c +0 -10
@@ -197,20 +197,10 @@ void iwl_mvm_mfu_assert_dump_notif(struct iwl_mvm *mvm, {struct iwl_rx_packet *pkt =rxb_addr (rxb);struct iwl_mfu_assert_dump_notif *mfu_dump_notif = (void *)pkt->data; -__le32 *dump_data = mfu_dump_notif->data; -int n_words =le32_to_cpu (mfu_dump_notif->data_size) /sizeof (__le32); -int i;if (mfu_dump_notif->index_num ==0 )IWL_INFO (mvm,"MFUART assert id 0x%x occurred\n" ,le32_to_cpu (mfu_dump_notif->assert_id)); - -for (i =0 ; i < n_words; i++) -IWL_DEBUG_INFO (mvm, -"MFUART assert dump, dword %u: 0x%08x\n" , -le16_to_cpu (mfu_dump_notif->index_num) * - n_words + i, -le32_to_cpu (dump_data[i])); } static bool iwl_alive_fn(struct iwl_notif_wait_data *notif_wait,
drivers/net/wireless/intel/iwlwifi/mvm/rs.h +2 -7
@@ -133,13 +133,8 @@ enum {#define LINK_QUAL_AGG_FRAME_LIMIT_DEF (63)#define LINK_QUAL_AGG_FRAME_LIMIT_MAX (63) -/* -* FIXME - various places in firmware API still use u8, -* e.g. LQ command and SCD config command. -* This should be 256 instead. -*/ -#define LINK_QUAL_AGG_FRAME_LIMIT_GEN2_DEF (255) -#define LINK_QUAL_AGG_FRAME_LIMIT_GEN2_MAX (255) +#define LINK_QUAL_AGG_FRAME_LIMIT_GEN2_DEF (64) +#define LINK_QUAL_AGG_FRAME_LIMIT_GEN2_MAX (64)#define LINK_QUAL_AGG_FRAME_LIMIT_MIN (0)#define LQ_SIZE 2/* 2 mode tables: "Active" and "Search" */
drivers/pci/controller/pcie-rockchip-ep.c +2 -4
@@ -130,10 +130,8 @@ static int rockchip_pcie_ep_write_header(struct pci_epc *epc, u8 fn,/* All functions share the same vendor ID with function 0 */ if (fn ==0 ) { -u32 vid_regs = (hdr->vendorid &GENMASK (15 ,0 )) | - (hdr->subsys_vendor_id &GENMASK (31 ,16 )) <<16 ; - -rockchip_pcie_write (rockchip, vid_regs, +rockchip_pcie_write (rockchip, + hdr->vendorid | hdr->subsys_vendor_id <<16 ,PCIE_CORE_CONFIG_VENDOR ); }
drivers/pci/pci.c +12 -0
@@ -2626,6 +2626,18 @@ static const struct dmi_system_id bridge_d3_blacklist[] = { DMI_MATCH(DMI_BOARD_VERSION, "Continental Z2"), }, }, + { +/* +* Changing power state of root port dGPU is connected fails +* https://gitlab.freedesktop.org/drm/amd/-/issues/3229 +*/ + .ident = "Hewlett-Packard HP Pavilion 17 Notebook PC/1972", + .matches = { +DMI_MATCH (DMI_BOARD_VENDOR ,"Hewlett-Packard" ), +DMI_MATCH (DMI_BOARD_NAME ,"1972" ), + DMI_MATCH(DMI_BOARD_VERSION, "95.33"), + }, + }, #endif { } };
drivers/pinctrl/core.c +1 -1
@@ -1090,8 +1090,8 @@ static struct pinctrl *create_pinctrl(struct device *dev,* an -EPROBE_DEFER later, as that is the worst case. */ if (ret == -EPROBE_DEFER ) { -pinctrl_free (p, false);mutex_unlock (&pinctrl_maps_mutex); +pinctrl_free (p, false);return ERR_PTR (ret); } }
drivers/pinctrl/pinctrl-rockchip.c +55 -8
93 lines not on this page · raw message
drivers/ptp/ptp_chardev.c +2 -1
@@ -84,7 +84,8 @@ int ptp_set_pinfunc(struct ptp_clock *ptp, unsigned int pin, }if (info->verify (info, pin, func, chan)) { -pr_err ("driver cannot use function %u on pin %u\n" , func, chan); +pr_err ("driver cannot use function %u and channel %u on pin %u\n" , + func, chan, pin);return -EOPNOTSUPP ; }
drivers/pwm/pwm-stm32.c +3 -0
@@ -337,6 +337,9 @@ static int stm32_pwm_config(struct stm32_pwm *priv, int ch, prd = div; +if (!prd) +return -EINVAL ; +if (prescaler >MAX_TIM_PSC )return -EINVAL ;
drivers/regulator/core.c +1 -0
@@ -3074,6 +3074,7 @@ struct regmap *regulator_get_regmap(struct regulator *regulator)return map ? map :ERR_PTR (-EOPNOTSUPP ); } +EXPORT_SYMBOL_GPL (regulator_get_regmap);/** * regulator_get_hardware_vsel_register - get the HW voltage selector register
drivers/scsi/mpt3sas/mpt3sas_base.c +19 -0
@@ -7089,6 +7089,12 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc) ioc->pd_handles_sz = (ioc->facts.MaxDevHandle /8 );if (ioc->facts.MaxDevHandle %8 ) ioc->pd_handles_sz++; +/* +* pd_handles_sz should have, at least, the minimal room for +* set_bit()/test_bit(), otherwise out-of-memory touch may occur. +*/ + ioc->pd_handles_sz =ALIGN (ioc->pd_handles_sz,sizeof (unsigned long )); + ioc->pd_handles =kzalloc (ioc->pd_handles_sz,GFP_KERNEL );if (!ioc->pd_handles) {
@@ -7106,6 +7112,13 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc) ioc->pend_os_device_add_sz = (ioc->facts.MaxDevHandle /8 );if (ioc->facts.MaxDevHandle %8 ) ioc->pend_os_device_add_sz++; + +/* +* pend_os_device_add_sz should have, at least, the minimal room for +* set_bit()/test_bit(), otherwise out-of-memory may occur. +*/ + ioc->pend_os_device_add_sz =ALIGN (ioc->pend_os_device_add_sz, +sizeof (unsigned long )); ioc->pend_os_device_add =kzalloc (ioc->pend_os_device_add_sz,GFP_KERNEL );if (!ioc->pend_os_device_add) {
@@ -7384,6 +7397,12 @@ _base_check_ioc_facts_changes(struct MPT3SAS_ADAPTER *ioc)if (ioc->facts.MaxDevHandle %8 ) pd_handles_sz++; +/* +* pd_handles should have, at least, the minimal room for +* set_bit()/test_bit(), otherwise out-of-memory touch may +* occur. +*/ + pd_handles_sz =ALIGN (pd_handles_sz,sizeof (unsigned long )); pd_handles =krealloc (ioc->pd_handles, pd_handles_sz,GFP_KERNEL );if (!pd_handles) {
drivers/scsi/qedi/qedi_debugfs.c +4 -8
@@ -120,15 +120,11 @@ static ssize_t qedi_dbg_do_not_recover_cmd_read(struct file *filp, char __user *buffer, size_t count, loff_t *ppos) { - size_t cnt = 0; - -if (*ppos) -return 0 ; + char buf[64]; +int len; - cnt =sprintf (buffer,"do_not_recover=%d\n" , qedi_do_not_recover); - cnt =min_t (int, count, cnt - *ppos); - *ppos += cnt; -return cnt; + len =sprintf (buf,"do_not_recover=%d\n" , qedi_do_not_recover); +return simple_read_from_buffer (buffer, count, ppos, buf, len); } static int
drivers/soc/ti/wkup_m3_ipc.c +2 -5
@@ -14,7 +14,6 @@#include <linux/irq.h> #include <linux/module.h> #include <linux/of.h> -#include <linux/omap-mailbox.h> #include <linux/platform_device.h> #include <linux/remoteproc.h> #include <linux/suspend.h>
@@ -151,7 +150,6 @@ static irqreturn_t wkup_m3_txev_handler(int irq, void *ipc_data)static int wkup_m3_ping (struct wkup_m3_ipc *m3_ipc) {struct device *dev = m3_ipc->dev; -mbox_msg_t dummy_msg =0 ;int ret;if (!m3_ipc->mbox) {
@@ -167,7 +165,7 @@ static int wkup_m3_ping(struct wkup_m3_ipc *m3_ipc)* the RX callback to avoid multiple interrupts being received * by the CM3. */ - ret =mbox_send_message (m3_ipc->mbox, &dummy_msg); + ret =mbox_send_message (m3_ipc->mbox,NULL );if (ret <0 ) {dev_err (dev,"%s: mbox_send_message() failed: %d\n" , __func__, ret);
@@ -189,7 +187,6 @@ static int wkup_m3_ping(struct wkup_m3_ipc *m3_ipc)static int wkup_m3_ping_noirq (struct wkup_m3_ipc *m3_ipc) {struct device *dev = m3_ipc->dev; -mbox_msg_t dummy_msg =0 ;int ret;if (!m3_ipc->mbox) {
@@ -198,7 +195,7 @@ static int wkup_m3_ping_noirq(struct wkup_m3_ipc *m3_ipc)return -EIO ; } - ret =mbox_send_message (m3_ipc->mbox, &dummy_msg); + ret =mbox_send_message (m3_ipc->mbox,NULL );if (ret <0 ) {dev_err (dev,"%s: mbox_send_message() failed: %d\n" , __func__, ret);
drivers/tty/serial/mcf.c +1 -1
@@ -479,7 +479,7 @@ static const struct uart_ops mcf_uart_ops = { .verify_port = mcf_verify_port, }; -static struct mcf_uart mcf_ports[4 ]; +static struct mcf_uart mcf_ports[10 ];#define MCF_MAXPORTS ARRAY_SIZE(mcf_ports)
drivers/tty/serial/sc16is7xx.c +19 -6
@@ -489,16 +489,28 @@ static bool sc16is7xx_regmap_precious(struct device *dev, unsigned int reg)return false; } +/* +* Configure programmable baud rate generator (divisor) according to the +* desired baud rate. +* +* From the datasheet, the divisor is computed according to: +* +* XTAL1 input frequency +* ----------------------- +* prescaler +* divisor = --------------------------- +* baud-rate x sampling-rate +*/ static int sc16is7xx_set_baud (struct uart_port *port,int baud) {struct sc16is7xx_port *s =dev_get_drvdata (port->dev);u8 lcr; -u8 prescaler =0 ; +unsigned int prescaler =1 ;unsigned long clk = port->uartclk, div = clk /16 / baud; -if (div >0xffff ) { - prescaler =SC16IS7XX_MCR_CLKSEL_BIT ; - div /=4 ; +if (div >=BIT (16 )) { + prescaler =4 ; + div /= prescaler; }/* In an amazing feat of design, the Enhanced Features Register shares
@@ -533,9 +545,10 @@ static int sc16is7xx_set_baud(struct uart_port *port, int baud)mutex_unlock (&s->efr_lock); +/* If bit MCR_CLKSEL is set, the divide by 4 prescaler is activated. */ sc16is7xx_port_update (port,SC16IS7XX_MCR_REG ,SC16IS7XX_MCR_CLKSEL_BIT , - prescaler); + prescaler ==1 ?0 :SC16IS7XX_MCR_CLKSEL_BIT );/* Open the LCR divisors for configuration */ sc16is7xx_port_write(port, SC16IS7XX_LCR_REG,
@@ -550,7 +563,7 @@ static int sc16is7xx_set_baud(struct uart_port *port, int baud)/* Put LCR back to the normal mode */ sc16is7xx_port_write (port,SC16IS7XX_LCR_REG , lcr); -return DIV_ROUND_CLOSEST (clk /16 , div); +return DIV_ROUND_CLOSEST ((clk / prescaler) /16 , div); } static void sc16is7xx_handle_rx(struct uart_port *port, unsigned int rxlen,
drivers/usb/atm/cxacru.c +14 -0
@@ -1135,6 +1135,7 @@ static int cxacru_bind(struct usbatm_data *usbatm_instance,struct cxacru_data *instance;struct usb_device *usb_dev =interface_to_usbdev (intf);struct usb_host_endpoint *cmd_ep = usb_dev->ep_in[CXACRU_EP_CMD ]; +struct usb_endpoint_descriptor *in, *out;int ret;/* instance init */
@@ -1181,6 +1182,19 @@ static int cxacru_bind(struct usbatm_data *usbatm_instance, goto fail; } +if (usb_endpoint_xfer_int (&cmd_ep->desc)) + ret =usb_find_common_endpoints (intf->cur_altsetting, +NULL ,NULL , &in, &out); +else + ret =usb_find_common_endpoints (intf->cur_altsetting, + &in, &out,NULL ,NULL ); + +if (ret) { +usb_err (usbatm_instance,"cxacru_bind: interface has incorrect endpoints\n" ); + ret = -ENODEV ; + goto fail; + } +if ((cmd_ep->desc.bmAttributes &USB_ENDPOINT_XFERTYPE_MASK ) ==USB_ENDPOINT_XFER_INT ) { usb_fill_int_urb(instance->rcv_urb,
drivers/usb/class/cdc-wdm.c +2 -2
@@ -252,14 +252,14 @@ static void wdm_int_callback(struct urb *urb)dev_err (&desc->intf->dev,"Stall on int endpoint\n" ); goto sw;/* halt is cleared in work */ default : -dev_err (&desc->intf->dev, +dev_err_ratelimited (&desc->intf->dev,"nonzero urb status received: %d\n" , status);break ; } }if (urb->actual_length <sizeof (struct usb_cdc_notification )) { -dev_err (&desc->intf->dev,"wdm_int_callback - %d bytes\n" , +dev_err_ratelimited (&desc->intf->dev,"wdm_int_callback - %d bytes\n" , urb->actual_length); goto exit; }
drivers/usb/gadget/function/f_fs.c +4 -0
@@ -827,6 +827,7 @@ static void ffs_user_copy_worker(struct work_struct *work)int ret = io_data->req->status ? io_data->req->status : io_data->req->actual;bool kiocb_has_eventfd = io_data->kiocb->ki_flags &IOCB_EVENTFD ; +unsigned long flags;if (io_data->read && ret >0 ) {mm_segment_t oldfs =get_fs ();
@@ -843,7 +844,10 @@ static void ffs_user_copy_worker(struct work_struct *work)if (io_data->ffs->ffs_eventfd && !kiocb_has_eventfd)eventfd_signal (io_data->ffs->ffs_eventfd,1 ); +spin_lock_irqsave (&io_data->ffs->eps_lock, flags);usb_ep_free_request (io_data->ep, io_data->req); + io_data->req =NULL ; +spin_unlock_irqrestore (&io_data->ffs->eps_lock, flags);if (io_data->read)kfree (io_data->to_free);
drivers/usb/gadget/function/f_printer.c +1 -0
@@ -208,6 +208,7 @@ static inline struct usb_endpoint_descriptor *ep_desc(struct usb_gadget *gadget, struct usb_endpoint_descriptor *ss) {switch (gadget->speed) { +case USB_SPEED_SUPER_PLUS :case USB_SPEED_SUPER :return ss;case USB_SPEED_HIGH :
drivers/usb/host/xhci-pci.c +7 -0
@@ -33,6 +33,7 @@#define PCI_VENDOR_ID_ETRON 0x1b6f#define PCI_DEVICE_ID_EJ168 0x7023 +#define PCI_DEVICE_ID_EJ188 0x7052#define PCI_DEVICE_ID_INTEL_LYNXPOINT_XHCI 0x8c31#define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI 0x9c31
@@ -256,6 +257,12 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) xhci->quirks |=XHCI_TRUST_TX_LENGTH ; xhci->quirks |=XHCI_BROKEN_STREAMS ; } +if (pdev->vendor ==PCI_VENDOR_ID_ETRON && + pdev->device ==PCI_DEVICE_ID_EJ188 ) { + xhci->quirks |=XHCI_RESET_ON_RESUME ; + xhci->quirks |=XHCI_BROKEN_STREAMS ; + } +if (pdev->vendor ==PCI_VENDOR_ID_RENESAS && pdev->device ==0x0014 ) { xhci->quirks |=XHCI_TRUST_TX_LENGTH ;
drivers/usb/host/xhci-ring.c +2 -3
@@ -2343,9 +2343,8 @@ static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td, goto finish_td;case COMP_STOPPED_LENGTH_INVALID :/* stopped on ep trb with invalid length, exclude it */ - ep_trb_len =0 ; - remaining =0 ; -break ; + td->urb->actual_length =sum_trb_lengths (xhci, ep_ring, ep_trb); + goto finish_td;case COMP_USB_TRANSACTION_ERROR : if (xhci->quirks & XHCI_NO_SOFT_RETRY || (ep_ring->err_count++ > MAX_SOFT_RETRY) ||
drivers/usb/misc/uss720.c +13 -7
@@ -677,7 +677,7 @@ static int uss720_probe(struct usb_interface *intf,struct parport_uss720_private *priv;struct parport *pp;unsigned char reg; -int i; +int ret; dev_dbg(&intf->dev, "probe: vendor id 0x%x, device id 0x%x\n", le16_to_cpu(usbdev->descriptor.idVendor),
@@ -688,8 +688,8 @@ static int uss720_probe(struct usb_interface *intf,usb_put_dev (usbdev);return -ENODEV ; } - i =usb_set_interface (usbdev, intf->altsetting->desc.bInterfaceNumber,2 ); -dev_dbg (&intf->dev,"set interface result %d\n" , i); + ret =usb_set_interface (usbdev, intf->altsetting->desc.bInterfaceNumber,2 ); +dev_dbg (&intf->dev,"set interface result %d\n" , ret); interface = intf->cur_altsetting;
@@ -725,12 +725,18 @@ static int uss720_probe(struct usb_interface *intf,set_1284_register (pp,7 ,0x00 ,GFP_KERNEL );set_1284_register (pp,6 ,0x30 ,GFP_KERNEL );/* PS/2 mode */ set_1284_register (pp,2 ,0x0c ,GFP_KERNEL ); -/* debugging */ -get_1284_register (pp,0 , ®,GFP_KERNEL ); + +/* The Belkin F5U002 Rev 2 P80453-B USB parallel port adapter shares the +* device ID 050d:0002 with some other device that works with this +* driver, but it itself does not. Detect and handle the bad cable +* here. */ + ret =get_1284_register (pp,0 , ®,GFP_KERNEL );dev_dbg (&intf->dev,"reg: %7ph\n" , priv->reg); +if (ret <0 ) +return ret; - i =usb_find_last_int_in_endpoint (interface, &epd); -if (!i) { + ret =usb_find_last_int_in_endpoint (interface, &epd); +if (!ret) {dev_dbg (&intf->dev,"epaddr %d interval %d\n" , epd->bEndpointAddress, epd->bInterval); }
drivers/usb/musb/da8xx.c +6 -2
@@ -556,7 +556,7 @@ static int da8xx_probe(struct platform_device *pdev) ret =of_platform_populate (pdev->dev.of_node,NULL , da8xx_auxdata_lookup, &pdev->dev);if (ret) -return ret; + goto err_unregister_phy;memset (musb_resources,0x00 ,sizeof (*musb_resources) *ARRAY_SIZE (musb_resources));
@@ -582,9 +582,13 @@ static int da8xx_probe(struct platform_device *pdev) ret =PTR_ERR_OR_ZERO (glue->musb);if (ret) {dev_err (&pdev->dev,"failed to register musb device: %d\n" , ret); -usb_phy_generic_unregister (glue->usb_phy); + goto err_unregister_phy; } +return 0 ; + +err_unregister_phy: +usb_phy_generic_unregister (glue->usb_phy);return ret; }
drivers/usb/storage/alauda.c +6 -3
@@ -105,6 +105,8 @@ struct alauda_info {unsigned char sense_key;unsigned long sense_asc;/* additional sense code */ unsigned long sense_ascq;/* additional sense code qualifier */ + +bool media_initialized; };#define short_pack (lsb,msb) ( ((u16)(lsb)) | ( ((u16)(msb))<<8 ) )
@@ -476,11 +478,12 @@ static int alauda_check_media(struct us_data *us) }/* Check for media change */ -if (status[0 ] &0x08 ) { +if (status[0 ] &0x08 || !info->media_initialized) {usb_stor_dbg (us,"Media change detected\n" );alauda_free_maps (&MEDIA_INFO (us)); -alauda_init_media (us); - + rc =alauda_init_media (us); +if (rc ==USB_STOR_TRANSPORT_GOOD ) + info->media_initialized = true; info->sense_key =UNIT_ATTENTION ; info->sense_asc =0x28 ; info->sense_ascq =0x00 ;
fs/jfs/xattr.c +3 -1
@@ -557,9 +557,11 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size) size_check:if (EALIST_SIZE (ea_buf->xattr) != ea_size) { +int size =min_t (int,EALIST_SIZE (ea_buf->xattr), ea_size); +printk (KERN_ERR "ea_get: invalid extended attribute\n" );print_hex_dump (KERN_ERR ,"" ,DUMP_PREFIX_ADDRESS ,16 ,1 , - ea_buf->xattr, ea_size,1 ); + ea_buf->xattr, size,1 );ea_release (inode, ea_buf); rc = -EIO ; goto clean_up;
fs/nfs/read.c +0 -4
@@ -103,12 +103,8 @@ static void nfs_readpage_release(struct nfs_page *req, int error)if (nfs_error_is_fatal_on_server (error) && error != -ETIMEDOUT )SetPageError (page);if (nfs_page_group_sync_on_bit (req,PG_UNLOCKPAGE )) { -struct address_space *mapping =page_file_mapping (page); -if (PageUptodate (page))nfs_readpage_to_fscache (inode, page,0 ); -else if (!PageError (page) && !PagePrivate (page)) -generic_error_remove_page (mapping, page);unlock_page (page); }nfs_release_request (req);
fs/nilfs2/dir.c +28 -31
110 lines not on this page · raw message
fs/nilfs2/segment.c +3 -0
@@ -1692,6 +1692,7 @@ static void nilfs_segctor_prepare_write(struct nilfs_sc_info *sci)if (bh->b_page != bd_page) {if (bd_page) {lock_page (bd_page); +wait_on_page_writeback (bd_page);clear_page_dirty_for_io (bd_page);set_page_writeback (bd_page);unlock_page (bd_page);
@@ -1705,6 +1706,7 @@ static void nilfs_segctor_prepare_write(struct nilfs_sc_info *sci)if (bh == segbuf->sb_super_root) {if (bh->b_page != bd_page) {lock_page (bd_page); +wait_on_page_writeback (bd_page);clear_page_dirty_for_io (bd_page);set_page_writeback (bd_page);unlock_page (bd_page);
@@ -1721,6 +1723,7 @@ static void nilfs_segctor_prepare_write(struct nilfs_sc_info *sci) }if (bd_page) {lock_page (bd_page); +wait_on_page_writeback (bd_page);clear_page_dirty_for_io (bd_page);set_page_writeback (bd_page);unlock_page (bd_page);
fs/ocfs2/file.c +2 -0
@@ -1940,6 +1940,8 @@ static int __ocfs2_change_file_space(struct file *file, struct inode *inode,inode_lock (inode); +/* Wait all existing dio workers, newcomers will block on i_rwsem */ +inode_dio_wait (inode);/* * This prevents concurrent writes on other nodes */
fs/ocfs2/namei.c +1 -1
@@ -558,7 +558,7 @@ static int __ocfs2_mknod_locked(struct inode *dir, fe->i_last_eb_blk =0 ;strcpy (fe->i_signature,OCFS2_INODE_SIGNATURE ); fe->i_flags |=cpu_to_le32 (OCFS2_VALID_FL ); -ktime_get_real_ts64 (&ts); +ktime_get_coarse_real_ts64 (&ts); fe->i_atime = fe->i_ctime = fe->i_mtime =cpu_to_le64 (ts.tv_sec); fe->i_mtime_nsec = fe->i_ctime_nsec = fe->i_atime_nsec =
fs/open.c +2 -2
@@ -200,13 +200,13 @@ long do_sys_ftruncate(unsigned int fd, loff_t length, int small)return error; } -SYSCALL_DEFINE2(ftruncate, unsigned int, fd, unsigned long, length) +SYSCALL_DEFINE2(ftruncate, unsigned int, fd, off_t, length) {return do_sys_ftruncate (fd, length,1 ); }#ifdef CONFIG_COMPAT -COMPAT_SYSCALL_DEFINE2(ftruncate, unsigned int, fd, compat_ulong_t, length) +COMPAT_SYSCALL_DEFINE2(ftruncate, unsigned int, fd, compat_off_t, length) {return do_sys_ftruncate (fd, length,1 ); }
fs/proc/vmcore.c +2 -0
@@ -374,6 +374,8 @@ static ssize_t __read_vmcore(char *buffer, size_t buflen, loff_t *fpos,/* leave now if filled buffer already */ if (buflen ==0 )return acc; + +cond_resched (); }list_for_each_entry (m, &vmcore_list, list) {
fs/udf/udftime.c +8 -3
@@ -60,13 +60,18 @@ udf_disk_stamp_to_time(struct timespec64 *dest, struct timestamp src) dest->tv_sec =mktime64 (year, src.month, src.day, src.hour, src.minute, src.second); dest->tv_sec -= offset *60 ; - dest->tv_nsec =1000 * (src.centiseconds *10000 + - src.hundredsOfMicroseconds *100 + src.microseconds); +/* * Sanitize nanosecond field since reportedly some filesystems are * recorded with bogus sub-second values. */ - dest->tv_nsec %=NSEC_PER_SEC ; +if (src.centiseconds <100 && src.hundredsOfMicroseconds <100 && + src.microseconds <100 ) { + dest->tv_nsec =1000 * (src.centiseconds *10000 + + src.hundredsOfMicroseconds *100 + src.microseconds); + }else { + dest->tv_nsec =0 ; + } }void
include/linux/compat.h +1 -1
@@ -567,7 +567,7 @@ asmlinkage long compat_sys_fstatfs(unsigned int fd,asmlinkage long compat_sys_fstatfs64 (unsigned int fd,compat_size_t sz,struct compat_statfs64 __user *buf);asmlinkage long compat_sys_truncate (const char __user *,compat_off_t ); -asmlinkage long compat_sys_ftruncate (unsigned int ,compat_ulong_t ); +asmlinkage long compat_sys_ftruncate (unsigned int ,compat_off_t );/* No generic prototype for truncate64, ftruncate64, fallocate */ asmlinkage long compat_sys_openat (int dfd,const char __user *filename,int flags,umode_t mode);
include/linux/iommu.h +1 -1
@@ -1006,7 +1006,7 @@ iommu_aux_get_pasid(struct iommu_domain *domain, struct device *dev)static inline struct iommu_sva *iommu_sva_bind_device (struct device *dev,struct mm_struct *mm,void *drvdata) { -return NULL ; +return ERR_PTR (-ENODEV ); }static inline void iommu_sva_unbind_device (struct iommu_sva *handle)
include/linux/micrel_phy.h +1 -0
@@ -27,6 +27,7 @@#define PHY_ID_KSZ8061 0x00221570#define PHY_ID_KSZ9031 0x00221620#define PHY_ID_KSZ9131 0x00221640 +#define PHY_ID_LAN8814 0x00221660#define PHY_ID_KSZ886X 0x00221430#define PHY_ID_KSZ8863 0x00221435
include/linux/nvme.h +2 -2
@@ -69,8 +69,8 @@ enum { NVMF_RDMA_QPTYPE_DATAGRAM = 2, /* Reliable Datagram */ }; -/* RDMA QP Service Type codes for Discovery Log Page entry TSAS -* RDMA_QPTYPE field +/* RDMA Provider Type codes for Discovery Log Page entry TSAS +* RDMA_PRTYPE field */ enum {NVMF_RDMA_PRTYPE_NOT_SPECIFIED =1 ,/* No Provider Specified */
include/linux/pci.h +9 -0
@@ -129,6 +129,15 @@ enum pci_interrupt_pin {/* The number of legacy PCI INTx interrupts */ #define PCI_NUM_INTX 4 +/* +* Reading from a device that doesn't respond typically returns ~0. A +* successful read from a device may also return ~0, so you need additional +* information to reliably identify errors. +*/ +#define PCI_ERROR_RESPONSE (~0ULL) +#define PCI_SET_ERROR_RESPONSE (val) (*(val) = ((typeof(*(val))) PCI_ERROR_RESPONSE)) +#define PCI_POSSIBLE_ERROR (val) ((val) == ((typeof(val)) PCI_ERROR_RESPONSE)) +/* * pci_power_t values must match the bits in the Capabilities PME_Support * and Control/Status PowerState fields in the Power Management capability.
include/linux/syscalls.h +1 -1
@@ -422,7 +422,7 @@ asmlinkage long sys_fstatfs(unsigned int fd, struct statfs __user *buf);asmlinkage long sys_fstatfs64 (unsigned int fd,size_t sz,struct statfs64 __user *buf);asmlinkage long sys_truncate (const char __user *path,long length); -asmlinkage long sys_ftruncate (unsigned int fd,unsigned long length); +asmlinkage long sys_ftruncate (unsigned int fd,off_t length);#if BITS_PER_LONG ==32 asmlinkage long sys_truncate64 (const char __user *path,loff_t length);asmlinkage long sys_ftruncate64 (unsigned int fd,loff_t length);
include/net/bluetooth/hci_core.h +32 -4
@@ -1451,18 +1451,46 @@ static inline int hci_check_conn_params(u16 min, u16 max, u16 latency, {u16 max_latency; -if (min > max || min <6 || max >3200 ) +if (min > max) { +BT_WARN ("min %d > max %d" , min, max);return -EINVAL ; + } + +if (min <6 ) { +BT_WARN ("min %d < 6" , min); +return -EINVAL ; + } + +if (max >3200 ) { +BT_WARN ("max %d > 3200" , max); +return -EINVAL ; + } + +if (to_multiplier <10 ) { +BT_WARN ("to_multiplier %d < 10" , to_multiplier); +return -EINVAL ; + } -if (to_multiplier <10 || to_multiplier >3200 ) +if (to_multiplier >3200 ) { +BT_WARN ("to_multiplier %d > 3200" , to_multiplier);return -EINVAL ; + } -if (max >= to_multiplier *8 ) +if (max >= to_multiplier *8 ) { +BT_WARN ("max %d >= to_multiplier %d * 8" , max, to_multiplier);return -EINVAL ; + } max_latency = (to_multiplier *4 / max) -1 ; -if (latency >499 || latency > max_latency) +if (latency >499 ) { +BT_WARN ("latency %d > 499" , latency);return -EINVAL ; + } + +if (latency > max_latency) { +BT_WARN ("latency %d > max_latency %d" , latency, max_latency); +return -EINVAL ; + }return 0 ; }
include/net/netfilter/nf_tables.h +5 -0
@@ -467,6 +467,11 @@ static inline void *nft_set_priv(const struct nft_set *set)return (void *)set->data; } +static inline enum nft_data_types nft_set_datatype (const struct nft_set *set) +{ +return set->dtype ==NFT_DATA_VERDICT ?NFT_DATA_VERDICT :NFT_DATA_VALUE ; +} +static inline bool nft_set_gc_is_pending (const struct nft_set *s) {return refcount_read (&s->refs) !=1 ;
include/uapi/asm-generic/hugetlb_encode.h +12 -12
@@ -20,17 +20,17 @@#define HUGETLB_FLAG_ENCODE_SHIFT 26#define HUGETLB_FLAG_ENCODE_MASK 0x3f -#define HUGETLB_FLAG_ENCODE_64KB (16 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_512KB (19 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_1MB (20 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_2MB (21 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_8MB (23 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_16MB (24 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_32MB (25 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_256MB (28 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_512MB (29 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_1GB (30 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_2GB (31 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_16GB (34 << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_64KB (16U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_512KB (19U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_1MB (20U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_2MB (21U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_8MB (23U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_16MB (24U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_32MB (25U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_256MB (28U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_512MB (29U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_1GB (30U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_2GB (31U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_16GB (34U << HUGETLB_FLAG_ENCODE_SHIFT)#endif /* _ASM_GENERIC_HUGETLB_ENCODE_H_ */
kernel/events/core.c +13 -0
@@ -4760,6 +4760,7 @@ int perf_event_release_kernel(struct perf_event *event) again:mutex_lock (&event->child_mutex);list_for_each_entry (child, &event->child_list, child_list) { +void *var =NULL ;/* * Cannot change, child events are not migrated, see the
@@ -4800,11 +4801,23 @@ int perf_event_release_kernel(struct perf_event *event)* this can't be the last reference. */ put_event (event); + }else { + var = &ctx->refcount; }mutex_unlock (&event->child_mutex);mutex_unlock (&ctx->mutex);put_ctx (ctx); + +if (var) { +/* +* If perf_event_free_task() has deleted all events from the +* ctx while the child_mutex got released above, make sure to +* notify about the preceding put_ctx(). +*/ +smp_mb ();/* pairs with wait_var_event() */ +wake_up_var (var); + } goto again; }mutex_unlock (&event->child_mutex);
kernel/gcov/gcc_4_7.c +3 -1
@@ -19,7 +19,9 @@#include <linux/vmalloc.h> #include "gcov.h" -#if (__GNUC__ >=10 ) +#if (__GNUC__ >=14 ) +#define GCOV_COUNTERS 9 +#elif (__GNUC__ >=10 )#define GCOV_COUNTERS 8#elif (__GNUC__ >=7 )#define GCOV_COUNTERS 9
kernel/gen_kheaders.sh +3 -6
@@ -83,12 +83,9 @@ find $cpio_dir -type f -print0 | xargs -0 -P8 -n1 perl -pi -e 'BEGIN {undef $/;}; s/\/\*((?!SPDX).)*?\*\///smg;' # Create archive and try to normalize metadata for reproducibility. -# For compatibility with older versions of tar, files are fed to tar -# pre-sorted, as --sort=name might not be available. -find $cpio_dir -printf "./%P\n" | LC_ALL=C sort | \ - tar "${KBUILD_BUILD_TIMESTAMP:+--mtime=$KBUILD_BUILD_TIMESTAMP}" \ - --owner=0 --group=0 --numeric-owner --no-recursion \ - -I $XZ -cf $tarfile -C $cpio_dir/ -T - > /dev/null +tar "${KBUILD_BUILD_TIMESTAMP:+--mtime=$KBUILD_BUILD_TIMESTAMP}" \ + --owner=0 --group=0 --sort=name --numeric-owner --mode=u=rw,go=r,a+X \ + -I $XZ -cf $tarfile -C $cpio_dir/ . > /dev/null echo $headers_md5 > kernel/kheaders.md5 echo "$this_file_md5" >> kernel/kheaders.md5
kernel/rcu/rcutorture.c +2 -1
@@ -1291,7 +1291,8 @@ static bool rcu_torture_one_read(struct torture_random_state *trsp)preempt_disable (); pipe_count = p->rtort_pipe_count;if (pipe_count >RCU_TORTURE_PIPE_LEN ) { -/* Should not happen, but... */ +// Should not happen in a correct RCU implementation, +// happens quite often for torture_type=busted. pipe_count =RCU_TORTURE_PIPE_LEN ; } completed = cur_ops->get_gp_seq ();
kernel/time/tick-common.c +14 -28
59 lines not on this page · raw message
kernel/trace/preemptirq_delay_test.c +1 -0
@@ -69,4 +69,5 @@ static void __exit preemptirq_delay_exit(void) module_init(preemptirq_delay_init) module_exit(preemptirq_delay_exit) +MODULE_DESCRIPTION("Preempt / IRQ disable delay thread to test latency tracers");MODULE_LICENSE ("GPL v2" );
net/batman-adv/originator.c +29 -0
@@ -11,6 +11,7 @@#include <linux/errno.h> #include <linux/etherdevice.h> #include <linux/gfp.h> +#include <linux/if_vlan.h> #include <linux/jiffies.h> #include <linux/kernel.h> #include <linux/kref.h>
@@ -132,6 +133,29 @@ batadv_orig_node_vlan_get(struct batadv_orig_node *orig_node,return vlan; } +/** +* batadv_vlan_id_valid() - check if vlan id is in valid batman-adv encoding +* @vid: the VLAN identifier +* +* Return: true when either no vlan is set or if VLAN is in correct range, +* false otherwise +*/ +static bool batadv_vlan_id_valid (unsigned short vid) +{ +unsigned short non_vlan = vid & ~(BATADV_VLAN_HAS_TAG |VLAN_VID_MASK ); + +if (vid ==0 ) +return true; + +if (!(vid &BATADV_VLAN_HAS_TAG )) +return false; + +if (non_vlan) +return false; + +return true; +} +/** * batadv_orig_node_vlan_new() - search and possibly create an orig_node_vlan * object
@@ -150,6 +174,9 @@ batadv_orig_node_vlan_new(struct batadv_orig_node *orig_node, {struct batadv_orig_node_vlan *vlan; +if (!batadv_vlan_id_valid (vid)) +return NULL ; +spin_lock_bh (&orig_node->vlan_list_lock);/* first look if an object for this vid already exists */
@@ -1345,6 +1372,8 @@ void batadv_purge_orig_ref(struct batadv_priv *bat_priv)/* for all origins... */ for (i =0 ; i < hash->size; i++) { head = &hash->table[i]; +if (hlist_empty (head)) +continue ; list_lock = &hash->list_locks[i];spin_lock_bh (list_lock);
net/bluetooth/l2cap_core.c +1 -7
@@ -5334,13 +5334,7 @@ static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,memset (&rsp,0 ,sizeof (rsp)); -if (max > hcon->le_conn_max_interval) { -BT_DBG ("requested connection interval exceeds current bounds." ); - err = -EINVAL ; - }else { - err =hci_check_conn_params (min, max, latency, to_multiplier); - } - + err =hci_check_conn_params (min, max, latency, to_multiplier);if (err) rsp.result =cpu_to_le16 (L2CAP_CONN_PARAM_REJECTED );else
net/can/j1939/main.c +1 -5
@@ -30,10 +30,6 @@ MODULE_ALIAS("can-proto-" __stringify(CAN_J1939));/* CAN_HDR: #bytes before can_frame data part */ #define J1939_CAN_HDR (offsetof(struct can_frame, data)) -/* CAN_FTR: #bytes beyond data part */ -#define J1939_CAN_FTR (sizeof(struct can_frame) - J1939_CAN_HDR - \ - sizeof(((struct can_frame *)0)->data)) -/* lowest layer */ static void j1939_can_recv (struct sk_buff *iskb,void *data) {
@@ -338,7 +334,7 @@ int j1939_send_one(struct j1939_priv *priv, struct sk_buff *skb)memset (cf,0 ,J1939_CAN_HDR );/* make it a full can frame again */ -skb_put (skb,J1939_CAN_FTR + (8 - dlc)); +skb_put_zero (skb,8 - dlc); canid =CAN_EFF_FLAG | (skcb->priority << 26) |
net/can/j1939/transport.c +19 -2
@@ -1577,8 +1577,8 @@ j1939_session *j1939_xtp_rx_rts_session_new(struct j1939_priv *priv,struct j1939_sk_buff_cb skcb = *j1939_skb_to_cb (skb);struct j1939_session *session;const u8 *dat; +int len, ret;pgn_t pgn; -int len;netdev_dbg (priv->ndev,"%s\n" , __func__);
@@ -1634,7 +1634,22 @@ j1939_session *j1939_xtp_rx_rts_session_new(struct j1939_priv *priv, session->pkt.rx =0 ; session->pkt.tx =0 ; -WARN_ON_ONCE (j1939_session_activate (session)); + ret =j1939_session_activate (session); +if (ret) { +/* Entering this scope indicates an issue with the J1939 bus. +* Possible scenarios include: +* - A time lapse occurred, and a new session was initiated +* due to another packet being sent correctly. This could +* have been caused by too long interrupt, debugger, or being +* out-scheduled by another task. +* - The bus is receiving numerous erroneous packets, either +* from a malfunctioning device or during a test scenario. +*/ +netdev_alert (priv->ndev,"%s: 0x%p: concurrent session with same addr (%02x %02x) is already active.\n" , + __func__, session, skcb.addr.sa, skcb.addr.da); +j1939_session_put (session); +return NULL ; + }return session; }
@@ -1662,6 +1677,8 @@ static int j1939_xtp_rx_rts_session_active(struct j1939_session *session,j1939_session_timers_cancel (session);j1939_session_cancel (session,J1939_XTP_ABORT_BUSY ); +if (session->transmission) +j1939_session_deactivate_activate_next (session);return -EBUSY ; }
net/core/drop_monitor.c +10 -10
@@ -71,7 +71,7 @@ struct net_dm_hw_entries { };struct per_cpu_dm_data { -spinlock_t lock;/* Protects 'skb', 'hw_entries' and +raw_spinlock_t lock;/* Protects 'skb', 'hw_entries' and * 'send_timer' */ union {
@@ -165,9 +165,9 @@ static struct sk_buff *reset_per_cpu_data(struct per_cpu_dm_data *data) err:mod_timer (&data->send_timer, jiffies +HZ /10 ); out: -spin_lock_irqsave (&data->lock, flags); +raw_spin_lock_irqsave (&data->lock, flags);swap (data->skb, skb); -spin_unlock_irqrestore (&data->lock, flags); +raw_spin_unlock_irqrestore (&data->lock, flags);if (skb) {struct nlmsghdr *nlh = (struct nlmsghdr *)skb->data;
@@ -222,7 +222,7 @@ static void trace_drop_common(struct sk_buff *skb, void *location)local_irq_save (flags); data =this_cpu_ptr (&dm_cpu_data); -spin_lock (&data->lock); +raw_spin_lock (&data->lock); dskb = data->skb;if (!dskb)
@@ -256,7 +256,7 @@ static void trace_drop_common(struct sk_buff *skb, void *location) } out: -spin_unlock_irqrestore (&data->lock, flags); +raw_spin_unlock_irqrestore (&data->lock, flags); }static void trace_kfree_skb_hit (void *ignore,struct sk_buff *skb,void *location)
@@ -315,9 +315,9 @@ net_dm_hw_reset_per_cpu_data(struct per_cpu_dm_data *hw_data)mod_timer (&hw_data->send_timer, jiffies +HZ /10 ); } -spin_lock_irqsave (&hw_data->lock, flags); +raw_spin_lock_irqsave (&hw_data->lock, flags);swap (hw_data->hw_entries, hw_entries); -spin_unlock_irqrestore (&hw_data->lock, flags); +raw_spin_unlock_irqrestore (&hw_data->lock, flags);return hw_entries; }
@@ -445,7 +445,7 @@ net_dm_hw_summary_probe(struct sk_buff *skb,int i; hw_data =this_cpu_ptr (&dm_hw_cpu_data); -spin_lock_irqsave (&hw_data->lock, flags); +raw_spin_lock_irqsave (&hw_data->lock, flags); hw_entries = hw_data->hw_entries;if (!hw_entries)
@@ -474,7 +474,7 @@ net_dm_hw_summary_probe(struct sk_buff *skb, } out: -spin_unlock_irqrestore (&hw_data->lock, flags); +raw_spin_unlock_irqrestore (&hw_data->lock, flags); }static const struct net_dm_alert_ops net_dm_alert_summary_ops = {
@@ -1592,7 +1592,7 @@ static struct notifier_block dropmon_net_notifier = {static void __net_dm_cpu_data_init (struct per_cpu_dm_data *data) { -spin_lock_init (&data->lock); +raw_spin_lock_init (&data->lock);skb_queue_head_init (&data->drop_queue);u64_stats_init (&data->stats.syncp); }
net/core/net_namespace.c +7 -2
@@ -664,11 +664,16 @@ EXPORT_SYMBOL_GPL(__put_net);* get_net_ns - increment the refcount of the network namespace * @ns: common namespace (net) * -* Returns the net's common namespace. +* Returns the net's common namespace or ERR_PTR() if ref is zero. */ struct ns_common *get_net_ns (struct ns_common *ns) { - return &get_net(container_of(ns, struct net, ns))->ns; +struct net *net; + + net = maybe_get_net(container_of(ns, struct net, ns)); +if (net) +return &net->ns; +return ERR_PTR (-EINVAL ); }EXPORT_SYMBOL_GPL (get_net_ns);
net/core/sock.c +4 -2
@@ -3172,7 +3172,8 @@ int sock_common_getsockopt(struct socket *sock, int level, int optname, {struct sock *sk = sock->sk; -return sk->sk_prot->getsockopt (sk, level, optname, optval, optlen); +/* IPV6_ADDRFORM can change sk->sk_prot under us. */ +return READ_ONCE (sk->sk_prot)->getsockopt (sk, level, optname, optval, optlen); }EXPORT_SYMBOL (sock_common_getsockopt);
@@ -3213,7 +3214,8 @@ int sock_common_setsockopt(struct socket *sock, int level, int optname, {struct sock *sk = sock->sk; -return sk->sk_prot->setsockopt (sk, level, optname, optval, optlen); +/* IPV6_ADDRFORM can change sk->sk_prot under us. */ +return READ_ONCE (sk->sk_prot)->setsockopt (sk, level, optname, optval, optlen); }EXPORT_SYMBOL (sock_common_setsockopt);
net/ipv4/af_inet.c +16 -7
@@ -553,22 +553,27 @@ int inet_dgram_connect(struct socket *sock, struct sockaddr *uaddr, int addr_len, int flags) {struct sock *sk = sock->sk; +const struct proto *prot;int err;if (addr_len <sizeof (uaddr->sa_family))return -EINVAL ; + +/* IPV6_ADDRFORM can change sk->sk_prot under us. */ + prot =READ_ONCE (sk->sk_prot); +if (uaddr->sa_family ==AF_UNSPEC ) -return sk->sk_prot->disconnect (sk, flags); +return prot->disconnect (sk, flags);if (BPF_CGROUP_PRE_CONNECT_ENABLED (sk)) { - err = sk->sk_prot->pre_connect (sk, uaddr, addr_len); + err = prot->pre_connect (sk, uaddr, addr_len);if (err)return err; }if (!inet_sk (sk)->inet_num &&inet_autobind (sk))return -EAGAIN ; -return sk->sk_prot->connect (sk, uaddr, addr_len); +return prot->connect (sk, uaddr, addr_len); }EXPORT_SYMBOL (inet_dgram_connect);
@@ -731,10 +736,11 @@ EXPORT_SYMBOL(inet_stream_connect);int inet_accept (struct socket *sock,struct socket *newsock,int flags,bool kern) { -struct sock *sk1 = sock->sk; +struct sock *sk1 = sock->sk, *sk2;int err = -EINVAL ; -struct sock *sk2 = sk1->sk_prot->accept (sk1, flags, &err, kern); +/* IPV6_ADDRFORM can change sk->sk_prot under us. */ + sk2 =READ_ONCE (sk1->sk_prot)->accept (sk1, flags, &err, kern);if (!sk2) goto do_err;
@@ -815,12 +821,15 @@ ssize_t inet_sendpage(struct socket *sock, struct page *page, int offset, size_t size, int flags) {struct sock *sk = sock->sk; +const struct proto *prot;if (unlikely (inet_send_prepare (sk)))return -EAGAIN ; -if (sk->sk_prot->sendpage) -return sk->sk_prot->sendpage (sk, page, offset, size, flags); +/* IPV6_ADDRFORM can change sk->sk_prot under us. */ + prot =READ_ONCE (sk->sk_prot); +if (prot->sendpage) +return prot->sendpage (sk, page, offset, size, flags);return sock_no_sendpage (sock, page, offset, size, flags); }EXPORT_SYMBOL (inet_sendpage);
net/ipv4/cipso_ipv4.c +8 -4
@@ -2015,12 +2015,16 @@ static int cipso_v4_delopt(struct ip_options_rcu __rcu **opt_ptr)* from there we can determine the new total option length */ iter =0 ; optlen_new =0 ; -while (iter < opt->opt.optlen) -if (opt->opt.__data[iter] !=IPOPT_NOP ) { +while (iter < opt->opt.optlen) { +if (opt->opt.__data[iter] ==IPOPT_END ) { +break ; + }else if (opt->opt.__data[iter] ==IPOPT_NOP ) { + iter++; + }else { iter += opt->opt.__data[iter +1 ]; optlen_new = iter; - }else - iter++; + } + } hdr_delta = opt->opt.optlen; opt->opt.optlen = (optlen_new +3 ) & ~3 ; hdr_delta -= opt->opt.optlen;
net/ipv4/tcp.c +11 -5
@@ -2258,6 +2258,10 @@ void tcp_set_state(struct sock *sk, int state)if (oldstate !=TCP_ESTABLISHED )TCP_INC_STATS (sock_net (sk),TCP_MIB_CURRESTAB );break ; +case TCP_CLOSE_WAIT : +if (oldstate ==TCP_SYN_RECV ) +TCP_INC_STATS (sock_net (sk),TCP_MIB_CURRESTAB ); +break ;case TCP_CLOSE :if (oldstate ==TCP_CLOSE_WAIT || oldstate ==TCP_ESTABLISHED )
@@ -2269,7 +2273,7 @@ void tcp_set_state(struct sock *sk, int state)inet_put_port (sk);/* fall through */ default : -if (oldstate ==TCP_ESTABLISHED ) +if (oldstate ==TCP_ESTABLISHED || oldstate ==TCP_CLOSE_WAIT )TCP_DEC_STATS (sock_net (sk),TCP_MIB_CURRESTAB ); }
@@ -3204,8 +3208,9 @@ int tcp_setsockopt(struct sock *sk, int level, int optname, char __user *optval,const struct inet_connection_sock *icsk =inet_csk (sk);if (level !=SOL_TCP ) -return icsk->icsk_af_ops->setsockopt (sk, level, optname, - optval, optlen); +/* Paired with WRITE_ONCE() in do_ipv6_setsockopt() and tcp_v6_connect() */ +return READ_ONCE (icsk->icsk_af_ops)->setsockopt (sk, level, optname, + optval, optlen);return do_tcp_setsockopt (sk, level, optname, optval, optlen); }EXPORT_SYMBOL (tcp_setsockopt);
@@ -3729,8 +3734,9 @@ int tcp_getsockopt(struct sock *sk, int level, int optname, char __user *optval,struct inet_connection_sock *icsk =inet_csk (sk);if (level !=SOL_TCP ) -return icsk->icsk_af_ops->getsockopt (sk, level, optname, - optval, optlen); +/* Paired with WRITE_ONCE() in do_ipv6_setsockopt() and tcp_v6_connect() */ +return READ_ONCE (icsk->icsk_af_ops)->getsockopt (sk, level, optname, + optval, optlen);return do_tcp_getsockopt (sk, level, optname, optval, optlen); }EXPORT_SYMBOL (tcp_getsockopt);
net/ipv6/af_inet6.c +18 -6
@@ -441,11 +441,14 @@ static int __inet6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len,int inet6_bind (struct socket *sock,struct sockaddr *uaddr,int addr_len) {struct sock *sk = sock->sk; +const struct proto *prot;int err =0 ; +/* IPV6_ADDRFORM can change sk->sk_prot under us. */ + prot =READ_ONCE (sk->sk_prot);/* If the socket has its own bind function then use it. */ -if (sk->sk_prot->bind) -return sk->sk_prot->bind (sk, uaddr, addr_len); +if (prot->bind) +return prot->bind (sk, uaddr, addr_len);if (addr_len <SIN6_LEN_RFC2133 )
Lines of this file are not shown. View the raw message.
net/netfilter/ipset/ip_set_core.c +52 -40
92 lines not on this page · raw message
net/netfilter/ipset/ip_set_list_set.c +14 -16
Lines of this file are not shown. View the raw message.
net/sched/act_api.c +43 -23
66 lines not on this page · raw message
net/unix/af_unix.c +20 -27
47 lines not on this page · raw message
sound/soc/ti/davinci-mcasp.c +124 -186
310 lines not on this page · raw message
tools/include/asm-generic/hugetlb_encode.h +10 -10
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/test_tc_tunnel.sh +12 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/ftrace/test.d/kprobe/kprobe_eventname.tc +2 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/vm/compaction_test.c +54 -49
103 lines not on this page · 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.