Linux 5.15.199
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.199 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/netlink/specs/fou.yaml | 130 Makefile | 2 arch/arm64/boot/dts/rockchip/rk3399-nanopi-r4s.dts | 1 arch/arm64/kernel/hibernate.c | 2 arch/x86/events/perf_event.h | 13 arch/x86/include/asm/kfence.h | 29 arch/x86/kernel/cpu/resctrl/core.c | 21 arch/x86/kernel/cpu/resctrl/internal.h | 3 arch/x86/mm/fault.c | 15 arch/x86/mm/kaslr.c | 10 block/blk-cgroup.c | 4 crypto/authencesn.c | 6 drivers/base/regmap/regmap.c | 4 drivers/bluetooth/hci_ldisc.c | 4 drivers/comedi/comedi.h | 2 drivers/comedi/comedi_fops.c | 2 drivers/comedi/drivers/dmm32at.c | 32 drivers/comedi/range.c | 2 drivers/dma/at_hdmac.c | 9 drivers/dma/bcm-sba-raid.c | 6 drivers/dma/idxd/compat.c | 23 drivers/dma/lpc18xx-dmamux.c | 19 drivers/dma/qcom/gpi.c | 6 drivers/dma/sh/rz-dmac.c | 5 drivers/dma/stm32-dmamux.c | 22 drivers/dma/tegra210-adma.c | 10 drivers/dma/ti/dma-crossbar.c | 18 drivers/dma/ti/k3-udma-private.c | 2 drivers/dma/ti/omap-dma.c | 4 drivers/dma/xilinx/xilinx_dma.c | 7 drivers/edac/i3200_edac.c | 11 drivers/edac/x38_edac.c | 9 drivers/gpio/gpiolib-acpi.c | 2 drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 18 drivers/gpu/drm/amd/pm/powerplay/si_dpm.c | 23 drivers/gpu/drm/imx/imx-tve.c | 13 drivers/gpu/drm/nouveau/dispnv50/curs507a.c | 1 drivers/gpu/drm/panel/panel-simple.c | 1 drivers/gpu/drm/vmwgfx/vmwgfx_shader.c | 4 drivers/hid/hid-uclogic-core.c | 12 drivers/hid/usbhid/hid-core.c | 17 drivers/hwtracing/intel_th/core.c | 19 drivers/iio/adc/ad9467.c | 2 drivers/iio/adc/at91-sama5d2_adc.c | 1 drivers/iio/adc/exynos_adc.c | 13 drivers/iio/dac/ad5686.c | 6 drivers/input/serio/i8042-acpipnpio.h | 18 drivers/irqchip/irq-gic-v3-its.c | 8 drivers/isdn/mISDN/timerdev.c | 13 drivers/leds/led-class.c | 10 drivers/misc/mei/mei-trace.h | 18 drivers/misc/uacce/uacce.c | 42 drivers/mmc/host/rtsx_pci_sdmmc.c | 41 drivers/net/bonding/bond_main.c | 11 drivers/net/can/usb/ems_usb.c | 8 drivers/net/can/usb/esd_usb2.c | 9 drivers/net/can/usb/etas_es58x/es58x_core.c | 2 drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c | 9 drivers/net/can/usb/mcba_usb.c | 8 drivers/net/can/usb/usb_8dev.c | 8 drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 5 drivers/net/ethernet/emulex/benet/be_cmds.c | 3 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h | 2 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 2 drivers/net/ethernet/intel/ice/ice_main.c | 1 drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c | 2 drivers/net/ethernet/marvell/octeontx2/af/rvu.c | 86 drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h | 7 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 25 drivers/net/ethernet/mellanox/mlx5/core/en_stats.c | 21 drivers/net/ethernet/mellanox/mlx5/core/en_stats.h | 4 drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_lgcy.c | 2 drivers/net/ethernet/rocker/rocker_main.c | 5 drivers/net/ethernet/stmicro/stmmac/dwmac5.c | 5 drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c | 5 drivers/net/ipvlan/ipvlan.h | 2 drivers/net/ipvlan/ipvlan_core.c | 16 drivers/net/ipvlan/ipvlan_main.c | 49 drivers/net/macvlan.c | 20 drivers/net/team/team.c | 23 drivers/net/usb/dm9601.c | 4 drivers/net/usb/usbnet.c | 11 drivers/net/wireless/ath/ath10k/ce.c | 16 drivers/net/wireless/marvell/mwifiex/11n_rxreorder.c | 6 drivers/net/wireless/rsi/rsi_91x_mac80211.c | 1 drivers/nfc/virtual_ncidev.c | 4 drivers/nvme/host/fabrics.c | 15 drivers/nvme/host/fabrics.h | 1 drivers/nvme/host/fc.c | 5 drivers/nvme/host/nvme.h | 14 drivers/nvme/host/pci.c | 41 drivers/nvme/host/rdma.c | 1 drivers/nvme/host/tcp.c | 1 drivers/nvme/target/tcp.c | 28 drivers/of/base.c | 8 drivers/of/platform.c | 2 drivers/pci/Kconfig | 6 drivers/phy/broadcom/phy-bcm-ns-usb3.c | 2 drivers/phy/rockchip/phy-rockchip-inno-usb2.c | 12 drivers/phy/st/phy-stm32-usbphyc.c | 2 drivers/phy/tegra/xusb-tegra186.c | 3 drivers/pinctrl/meson/pinctrl-meson.c | 2 drivers/pinctrl/qcom/pinctrl-lpass-lpi.c | 17 drivers/ptp/ptp_chardev.c | 37 drivers/ptp/ptp_private.h | 16 drivers/scsi/be2iscsi/be_mgmt.c | 1 drivers/scsi/qla2xxx/qla_os.c | 2 drivers/scsi/storvsc_drv.c | 3 drivers/slimbus/core.c | 19 drivers/staging/iio/adc/ad7280a.c | 289 +- drivers/target/sbp/sbp_target.c | 4 drivers/usb/dwc3/core.c | 2 drivers/usb/dwc3/core.h | 1 drivers/usb/host/ohci-platform.c | 1 drivers/usb/host/uhci-platform.c | 1 drivers/usb/serial/ftdi_sio.c | 1 drivers/usb/serial/ftdi_sio_ids.h | 2 drivers/usb/serial/option.c | 1 drivers/w1/slaves/w1_therm.c | 69 drivers/w1/w1.c | 2 drivers/xen/xen-scsiback.c | 1 fs/btrfs/relocation.c | 13 fs/btrfs/transaction.c | 11 fs/ext4/ext4.h | 38 fs/ext4/xattr.c | 1 fs/fs-writeback.c | 14 fs/ksmbd/mgmt/tree_connect.c | 18 fs/ksmbd/mgmt/tree_connect.h | 1 fs/ksmbd/smb2pdu.c | 3 fs/ksmbd/transport_rdma.c | 15 fs/nfs/flexfilelayout/flexfilelayoutdev.c | 2 fs/nfsd/nfsctl.c | 17 fs/ntfs3/inode.c | 7 fs/xfs/libxfs/xfs_ialloc.c | 11 include/drm/ttm/ttm_tt.h | 2 include/linux/kfence.h | 1 include/linux/mlx5/mlx5_ifc.h | 27 include/linux/nvme.h | 3 include/linux/pagewalk.h | 3 include/linux/posix-clock.h | 39 include/linux/textsearch.h | 1 include/net/cfg80211.h | 95 include/net/dst.h | 12 include/net/nfc/nfc.h | 2 include/sound/pcm.h | 2 kernel/bpf/cgroup.c | 8 kernel/dma/pool.c | 7 kernel/irq/irq_sim.c | 2 kernel/time/hrtimer.c | 2 kernel/time/posix-clock.c | 53 mm/Kconfig | 12 mm/ksm.c | 115 mm/migrate.c | 14 mm/page_alloc.c | 10 mm/pagewalk.c | 20 net/bluetooth/hci_core.c | 4 net/bpf/test_run.c | 5 net/bridge/br_input.c | 2 net/can/j1939/transport.c | 10 net/core/dev.c | 25 net/core/filter.c | 25 net/ipv4/Makefile | 1 net/ipv4/esp4.c | 4 net/ipv4/fou.c | 1315 ---------- net/ipv4/fou_core.c | 1285 +++++++++ net/ipv4/fou_nl.c | 48 net/ipv4/fou_nl.h | 25 net/ipv4/ip_gre.c | 11 net/ipv4/ip_output.c | 16 net/ipv6/esp6.c | 4 net/ipv6/icmp.c | 4 net/ipv6/ip6_tunnel.c | 2 net/ipv6/ndisc.c | 4 net/l2tp/l2tp_core.c | 4 net/mac80211/ibss.c | 8 net/mac80211/ieee80211_i.h | 6 net/mac80211/iface.c | 10 net/mac80211/mesh.c | 10 net/mac80211/mesh_hwmp.c | 6 net/mac80211/mlme.c | 13 net/mac80211/ocb.c | 6 net/mac80211/rx.c | 2 net/mac80211/scan.c | 2 net/mac80211/status.c | 5 net/mac80211/tdls.c | 11 net/mac80211/util.c | 2 net/mptcp/protocol.c | 13 net/netrom/nr_route.c | 13 net/nfc/core.c | 27 net/nfc/llcp_commands.c | 17 net/nfc/llcp_core.c | 4 net/nfc/nci/core.c | 4 net/sched/act_ife.c | 12 net/sched/sch_qfq.c | 8 net/sched/sch_teql.c | 5 net/sctp/sm_statefuns.c | 10 net/tls/tls_device.c | 18 net/wireless/core.c | 131 net/wireless/core.h | 7 net/wireless/sysfs.c | 8 net/xfrm/espintcp.c | 4 sound/core/oss/pcm_oss.c | 4 sound/core/pcm_native.c | 9 sound/pci/ctxfi/ctamixer.c | 2 sound/soc/codecs/tlv320adcx140.c | 4 sound/soc/fsl/imx-card.c | 1 sound/usb/mixer.c | 22 sound/usb/mixer_scarlett_gen2.c | 7 tools/testing/selftests/net/toeplitz.c | 4 tools/testing/selftests/ptp/testptp.c | 210 + tools/testing/vsock/util.c | 12 211 files changed, 3607 insertions(+), 2114 deletions(-)
Abdun Nihaal (1):
scsi: xen: scsiback: Fix potential memory leak in scsiback_remove()
Aboorva Devarajan (1):
mm/page_alloc: make percpu_pagelist_high_fraction reads lock-free
Alex Maftei (2):
selftests/ptp: Add -x option for testing PTP_SYS_OFFSET_EXTENDED selftests/ptp: Add -X option for testing PTP_SYS_OFFSET_PRECISE
Alexander Usyskin (1):
mei: trace: treat reg parameter as string
Alexis Lothoré (1):
net: stmmac: make sure that ptp_rate is not 0 before configuring EST
Andrew Cooper (1):
x86/kfence: avoid writing L1TF-vulnerable PTEs
Andrey Vatoropin (1):
be2net: Fix NULL pointer dereference in be_cmd_get_mac_from_list
Arnd Bergmann (1):
irqchip/gic-v3-its: Avoid truncating memory addresses
Arun Raghavan (1):
ALSA: usb: Increase volume range that triggers a warning
Bagas Sanjaya (2):
textsearch: describe @list member in ts_ops search mm, kfence: describe @slab parameter in __kfence_obj_info()
Bartlomiej Kubik (1):
fs/ntfs3: Initialize allocated memory before use
Bartosz Golaszewski (2):
pinctrl: lpass-lpi: implement .get_direction() for the GPIO driver
pinctrl: meson: mark the GPIO controller as sleeping
Benjamin Tissoires (1):
HID: usbhid: paper over wrong bNumDescriptor field
Berk Cem Goksel (1):
ALSA: usb-audio: Fix use-after-free in snd_usb_mixer_free()
Biju Das (1):
dmaengine: sh: rz-dmac: Fix rz_dmac_terminate_all()
Brian Foster (1):
xfs: set max_agbno to allow sparse alloc of last full inode chunk
Cedric Xing (1):
x86: make page fault handling disable interrupts properly
Chen Ni (1):
net/sched: act_ife: convert comma to semicolon
Cheng-Yu Lee (1):
regmap: Fix race condition in hwspinlock irqsave routine
Chenghai Huang (1):
uacce: ensure safe queue release with state management
Dan Carpenter (2):
phy: stm32-usphyc: Fix off by one in probe()
wifi: mwifiex: Fix a loop in mwifiex_update_ampdu_rxwinsize()
Dan Williams (1):
x86/kaslr: Recognize all ZONE_DEVICE users as physaddr consumers
Daniel Borkmann (1):
bpf: Do not let BPF test infra emit invalid GSO types to stack
Daniel Wagner (1):
nvme-fc: rename free_ctrl callback to match name pattern
David Hildenbrand (1):
mm/pagewalk: add walk_page_range_vma()
Denis Sergeev (1):
gpiolib: acpi: use BIT_ULL() for u64 mask in address space handler
Dmitry Skorodumov (1):
ipvlan: Make the addrs_lock be per port
Edward Adam Davis (1):
wifi: cfg80211: init wiphy_work before allocating rfkill fails
Emil Svendsen (1):
ASoC: tlv320adcx140: fix word length
Eric Dumazet (11):
ip6_tunnel: use skb_vlan_inet_prepare() in __ip6_tnl_rcv()
net: update netdev_lock_{type,name}
macvlan: fix possible UAF in macvlan_forward_source()
ipv4: ip_gre: make ipgre_header() robust
net/sched: sch_qfq: do not free existing class in qfq_change_class()
bonding: limit BOND_MODE_8023AD to Ethernet devices
l2tp: avoid one data-race in l2tp_tunnel_del_work()
mISDN: annotate data-race around dev->work
ipv6: annotate data-race in ndisc_router_discovery()
bonding: provide a net pointer to __skb_flow_dissect() net/sched: act_ife: avoid possible NULL deref
Ethan Nelson-Moore (2):
USB: serial: ftdi_sio: add support for PICAXE AXE027 cable
net: usb: dm9601: remove broken SR9700 support
Fabio Estevam (1):
ASoC: fsl: imx-card: Do not force slot width to sample width
Fernand Sieber (1):
perf/x86/intel: Do not enable BTS for guests
Fernando Fernandez Mancera (1):
ipv6: use the right ifindex when replying to icmpv6 from localhost
Gal Pressman (3):
selftests: drv-net: fix RPS mask handling for high CPU numbers net/mlx5e: Expose rx_oversize_pkts_buffer counter net/mlx5e: Account for netdev stats in ndo_get_stats64
Gaosheng Cui (1):
drm/ttm: fix undefined behavior in bit shift for TTM_TT_FLAG_PRIV_POPULATED
Geraldo Nascimento (1):
arm64: dts: rockchip: remove redundant max-link-speed from nanopi-r4s
Greg Kroah-Hartman (1):
Linux 5.15.199
Gyeyoung Baek (1):
genirq/irq_sim: Initialize work context pointers properly
Hans de Goede (1):
leds: led-class: Only Add LED to leds_list when it is fully ready
Haotian Zhang (1):
dmaengine: omap-dma: fix dma_pool resource leak in error paths
Haoxiang Li (6):
EDAC/x38: Fix a resource leak in x38_probe1() EDAC/i3200: Fix a resource leak in i3200_probe1() drm/vmwgfx: Fix an error return check in vmw_compat_shader_add()
w1: fix redundant counter decrement in w1_attach_slave_device()
scsi: be2iscsi: Fix a memory leak in beiscsi_boot_get_sinfo() drm/amdkfd: fix a memory leak in device_queue_manager_init()
Henry Martin (1):
HID: uclogic: Add NULL check in uclogic_input_configured()
Huacai Chen (1):
USB: OHCI/UHCI: Add soft dependencies on ehci_platform
Ian Abbott (2):
comedi: dmm32at: serialize use of paged registers
comedi: Fix getting range information for subdevices 16 to 255
Ilikara Zheng (1):
nvme-pci: disable secondary temp for Wodposit WPBSNM8
JP Kobryn (1):
btrfs: prevent use-after-free on page private data in btrfs_subpage_clear_uptodate()
Jakub Kicinski (3):
netlink: add a proto specification for FOU
net: fou: rename the source for linking
net: fou: use policy and operation tables generated from the spec
Jamal Hadi Salim (2):
net/sched: Enforce that teql can only be used as root qdisc
net/sched: qfq: Use cl_is_active to determine whether class is active in qfq_rm_from_ag
Jaroslav Kysela (1):
ALSA: pcm: Improve the fix for race of buffer access at PCM OSS layer
Jeongjun Park (1):
netrom: fix double-free in nr_route_frame()
Jesse Brandeburg (1):
ice: stop counting UDP csum mismatch as rx_errors
Jia-Hong Su (1):
Bluetooth: hci_uart: fix null-ptr-deref in hci_uart_write_work
Jijie Shao (2):
net: hns3: fix wrong GENMASK() for HCLGE_FD_AD_COUNTER_NUM_M
net: hns3: fix the HCLGE_FD_AD_NXT_KEY error setting issue
Johan Hovold (14):
dmaengine: at_hdmac: fix device leak on of_dma_xlate()
dmaengine: bcm-sba-raid: fix device leak on probe
dmaengine: idxd: fix device leaks on compat bind and unbind
dmaengine: lpc18xx-dmamux: fix device leak on route allocation
dmaengine: ti: dma-crossbar: fix device leak on dra7x route allocation
dmaengine: ti: dma-crossbar: fix device leak on am335x route allocation
dmaengine: ti: k3-udma: fix device leak on udma lookup
slimbus: core: fix runtime PM imbalance on report present
slimbus: core: fix device reference leak on report present
intel_th: fix device leak on output open()
iio: adc: exynos_adc: fix OF populate on driver rebind
dmaengine: stm32: dmamux: fix OF node leak on route allocation failure
dmaengine: stm32: dmamux: fix device leak on route allocation drm/imx/tve: fix probe device leak
Johannes Berg (6):
wifi: cfg80211: add a work abstraction with special semantics
wifi: mac80211: use wiphy work for sdata->work
wifi: mac80211: move TDLS work to wiphy work
wifi: cfg80211: use system_unbound_wq for wiphy work
wifi: cfg80211: fix wiphy delayed work queueing
wifi: cfg80211: fully move wiphy work to unbound workqueue
Jonathan Cameron (1):
staging:iio:adc:ad7280a: Register define cleanup.
Keith Busch (1):
nvme-pci: do not directly handle subsys reset fallout
Kery Qi (2):
rocker: fix memory leak in rocker_world_port_post_fini()
scsi: firewire: sbp-target: Fix overflow in sbp_make_tpg()
Krzysztof Kozlowski (1):
phy: broadcom: ns-usb3: Fix Wvoid-pointer-to-enum-cast warning (again)
Kuniyuki Iwashima (5):
gue: Fix skb memleak with inner IP protocol 0.
fou: Don't allow 0 for FOU_ATTR_IPPROTO.
nfc: llcp: Fix memleak in nfc_llcp_send_ui_frame().
nfc: nci: Fix race between rfkill and nci_unregister_device().
tls: Use __sk_dst_get() and dst_dev_rcu() in get_netdev_for_sock().
Kübrich, Andreas (1):
iio: dac: ad5686: add AD5695R to ad5686_chip_info_tbl
Laurent Vivier (1):
usbnet: limit max_mtu based on device's hard_mtu
Laveesh Bansal (1):
writeback: fix 100% CPU usage when dirtytime_expire_interval is 0
Linus Torvalds (1):
Fix memory leak in posix_clock_open()
Long Li (1):
scsi: storvsc: Process unsupported MODE_SENSE_10
Louis Chauvet (1):
phy: rockchip: inno-usb2: fix disconnection in gadget mode
Luca Ceresoli (1):
phy: rockchip: inno-usb2: fix communication disruption in gadget mode
Luís Henriques (1):
ext4: fix memory leaks in ext4_fname_{setup_filename,prepare_lookup}Lyude Paul (1):
drm/nouveau/disp/nv50-: Set lock_core in curs507a_prepare
Maciek Machnikowski (1):
testptp: add option to shift clock by nanoseconds
Mahesh Bandewar (1):
selftest/ptp: update ptp selftest to exercise the gettimex options
Maninder Singh (1):
NFSD: fix race between nfsd registration and exports_proc
Marc Kleine-Budde (5):
can: ems_usb: ems_usb_read_bulk_callback(): fix URB memory leak
can: kvaser_usb: kvaser_usb_read_bulk_callback(): fix URB memory leak
can: mcba_usb: mcba_usb_read_bulk_callback(): fix URB memory leak
can: usb_8dev: usb_8dev_read_bulk_callback(): fix URB memory leak
can: esd_usb: esd_usb_read_bulk_callback(): fix URB memory leak
Marek Vasut (2):
drm/panel-simple: fix connector type for DataImage SCF0700C48GGU18 panel
wifi: rsi: Fix memory corruption due to not set vif driver data size
Martin Kaiser (1):
net: bridge: fix static key check
Matthew Schwartz (1):
mmc: rtsx_pci_sdmmc: implement sdmmc_card_busy function
Matthew Wilcox (Oracle) (1):
migrate: correct lock ordering for hugetlb file folios
Matthieu Baerts (NGI0) (2):
mptcp: only reset subflow errors when propagated
mptcp: avoid dup SUB_CLOSED events after disconnect
Maurizio Lombardi (1):
nvmet-tcp: remove boilerplate code
Miaoqian Lin (1):
dmaengine: qcom: gpi: Fix memory leak in gpi_peripheral_config()
Miri Korenblit (1):
wifi: cfg80211: cancel wiphy_work before freeing wiphy
Namjae Jeon (1):
ksmbd: fix use-after-free in ksmbd_tree_connect_put under concurrency
Nikola Z. Ivanov (1):
team: Move team device type change at the end of team_port_add
Nilay Shroff (1):
nvme: fix PCIe subsystem reset controller state transition
Paul Chaignon (1):
bpf: Reject narrower access to pointer ctx fields
Pavel Zhigulin (1):
iio: adc: ad7280a: handle spi_setup() errors in probe()
Pedro Demarchi Gomes (1):
ksm: use range-walk function to jump over holes in scan_get_next_rmap_item
Pei Xiao (1):
iio: adc: at91-sama5d2_adc: Fix potential use-after-free in sama5d2_adc driver
Rahul Rameshbabu (2):
testptp: Add support for testing ptp_clock_info .adjphase callback
HID: uclogic: Correct devm device reference for hidinput input_dev name
Raju Rangoju (1):
amd-xgbe: avoid misleading per-packet error log
Ratheesh Kannoth (1):
octeontx2-af: Fix error handling
Rob Herring (Arm) (1):
of: platform: Use default match table for /firmware
Robbie Ko (1):
btrfs: fix deadlock in wait_current_trans() due to ignored transaction type
Sabrina Dubroca (1):
espintcp: fix skb leaks
Saeed Mahameed (2):
net/mlx5e: Restore destroying state bit after profile cleanup net/mlx5: Add HW definitions of vport debug counters
Sai Sree Kartheek Adivi (1):
dma/pool: distinguish between missing and exhausted atomic pools
Samasth Norway Ananda (1):
ALSA: scarlett2: Fix buffer overflow in config retrieval
Sharath Chandra Vurukala (1):
net: Add locking to protect skb->dev access in ip_output
Sheetal (1):
dmaengine: tegra-adma: Fix use-after-free
Shivam Kumar (1):
nvme-tcp: fix NULL pointer dereferences in nvmet_tcp_build_pdu_iovec
Stefano Garzarella (1):
vsock/test: add a final full barrier after run all tests
Suraj Gupta (1):
dmaengine: xilinx_dma: Fix uninitialized addr_width when "xlnx,addrwidth" property is missing
Szymon Wilczek (1):
can: etas_es58x: allow partial RX URB allocation to succeed
Taeyang Lee (1):
crypto: authencesn - reject too-short AAD (assoclen<8) to match ESP/ESN spec
Takashi Iwai (1):
ALSA: ctxfi: Fix potential OOB access in audio mixer handling
Tetsuo Handa (1):
net: can: j1939: j1939_xtp_rx_rts_session_active(): deactivate session upon receiving the second rts
Thadeu Lima de Souza Cascardo (1):
Revert "nfc/nci: Add the inconsistency check between the input data length and count"
Thinh Nguyen (1):
usb: dwc3: Check for USB4 IP_NAME
Thomas Fourier (4):
wifi: ath10k: fix dma_free_coherent() pointer
octeontx2: Fix otx2_dma_map_page() error return code
scsi: qla2xxx: edif: Fix dma_free_coherent() size
ksmbd: smbd: fix dma_unmap_sg() nents
Thomas Weißschuh (1):
hrtimer: Fix softirq base check in update_needs_ipi()
Thorsten Blum (1):
w1: therm: Fix off-by-one buffer overflow in alarms_store
Timur Kristóf (2):
drm/amd/pm: Don't clear SI SMC table when setting power limit drm/amd/pm: Workaround SI powertune issue on Radeon 430 (v2)
Tomas Melin (1):
iio: adc: ad9467: fix ad9434 vref mask
Ulrich Mohr (1):
USB: serial: option: add Telit LE910 MBIM composition
Waiman Long (1):
blk-cgroup: Reinit blkg_iostat_set after clearing in blkcg_reset_stats()
Wayne Chang (1):
phy: tegra: xusb: Explicitly configure HS_DISCON_LEVEL to 0x7
Weigang He (1):
of: fix reference count leak in of_alias_scan()
Wenkai Lin (1):
uacce: fix cdev handling in the cleanup path
Wojtek Wasko (3):
posix-clock: Store file pointer in struct posix_clock_context
ptp: Add PHC file mode checks. Allow RO adjtime() without FMODE_WRITE.
testptp: Add option to open PHC in readonly mode
Xabier Marquiegui (2):
posix-clock: introduce posix_clock_context concept
ptp: add testptp mask test
Xiaochen Shen (2):
x86/resctrl: Add missing resctrl initialization for Hygon x86/resctrl: Fix memory bandwidth counter width for Hygon
Xin Long (1):
sctp: move SCTP_CMD_ASSOC_SHKEY right after SCTP_CMD_PEER_INIT
Yafang Shao (1):
net/mlx5e: Report rx_discards_phy via rx_dropped
Yang Erkun (1):
ext4: fix iloc.bh leak in ext4_xattr_inode_update_ref
Yang Guang (1):
w1: w1_therm: use swap() to make code cleaner
Yang Shen (1):
uacce: implement mremap in uacce_vm_ops to return -EPERM
Ying Hsu (1):
Bluetooth: Fix hci_suspend_sync crash
Zhaoyang Huang (1):
arm64: Set __nocfi on swsusp_arch_resume()
Zilin Guan (3):
pnfs/flexfiles: Fix memory leak in nfs4_ff_alloc_deviceid_node() net/mlx5: Fix memory leak in esw_acl_ingress_lgcy_setup()
net: mvpp2: cls: Fix memory leak in mvpp2_ethtool_cls_rule_ins()
Zqiang (1):
usbnet: Fix using smp_processor_id() in preemptible code warnings
feng (1):
Input: i8042 - add quirk for ASUS Zenbook UX425QA_UM425QA
gongqi (1):
Input: i8042 - add quirks for MECHREVO Wujie 15X Pro
Greg Kroah-Hartman
maintainerDocumentation/netlink/specs/fou.yaml new file +130 -0
@@ -0,0 +1,130 @@ +name: fou + +protocol: genetlink-legacy + +doc: | + Foo-over-UDP. + +c-family-name: fou-genl-name +c-version-name: fou-genl-version +max-by-define: true +kernel-policy: global + +definitions: + - + type: enum + name: encap_type + name-prefix: fou-encap- + enum-name: + entries: [ unspec, direct, gue ] + +attribute-sets: + - + name: fou + name-prefix: fou-attr- + attributes: + - + name: unspec + type: unused + - + name: port + type: u16 + byte-order: big-endian + - + name: af + type: u8 + - + name: ipproto + type: u8 + checks: + min: 1 + - + name: type + type: u8 + - + name: remcsum_nopartial + type: flag + - + name: local_v4 + type: u32 + - + name: local_v6 + type: binary + checks: + min-len: 16 + - + name: peer_v4 + type: u32 + - + name: peer_v6 + type: binary + checks: + min-len: 16 + - + name: peer_port + type: u16 + byte-order: big-endian + - + name: ifindex + type: s32 + +operations: + list: + - + name: unspec + doc: unused + + - + name: add + doc: Add port. + attribute-set: fou + + dont-validate: [ strict, dump ] + flags: [ admin-perm ] + + do: + request: &all_attrs + attributes: + - port + - ipproto + - type + - remcsum_nopartial + - local_v4 + - peer_v4 + - local_v6 + - peer_v6 + - peer_port + - ifindex + + - + name: del + doc: Delete port. + attribute-set: fou + + dont-validate: [ strict, dump ] + flags: [ admin-perm ] + + do: + request: &select_attrs + attributes: + - af + - ifindex + - port + - peer_port + - local_v4 + - peer_v4 + - local_v6 + - peer_v6 + + - + name: get + doc: Get tunnel info. + attribute-set: fou + dont-validate: [ strict, dump ] + + do: + request: *select_attrs + reply: *all_attrs + + dump: + reply: *all_attrs
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 198 +SUBLEVEL = 199 EXTRAVERSION = NAME = Trick or Treat
arch/arm64/boot/dts/rockchip/rk3399-nanopi-r4s.dts +0 -1
@@ -73,7 +73,6 @@ &i2c4 { }; &pcie0 { - max-link-speed = <1>; num-lanes = <1>; vpcie3v3-supply = <&vcc3v3_sys>; };
arch/arm64/kernel/hibernate.c +1 -1
@@ -428,7 +428,7 @@ int swsusp_arch_suspend(void)* Memory allocated by get_safe_page() will be dealt with by the hibernate code, * we don't need to free it here. */ -int swsusp_arch_resume (void ) +int __nocfi swsusp_arch_resume(void) {int rc;void *zero_page;
arch/x86/events/perf_event.h +11 -2
@@ -1286,13 +1286,22 @@ static inline bool intel_pmu_has_bts_period(struct perf_event *event, u64 periodstruct hw_perf_event *hwc = &event->hw;unsigned int hw_event, bts_event; -if (event->attr.freq) +/* +* Only use BTS for fixed rate period==1 events. +*/ +if (event->attr.freq || period !=1 ) +return false; + +/* +* BTS doesn't virtualize. +*/ +if (event->attr.exclude_host)return false; hw_event = hwc->config &INTEL_ARCH_EVENT_MASK ; bts_event = x86_pmu.event_map (PERF_COUNT_HW_BRANCH_INSTRUCTIONS ); -return hw_event == bts_event && period ==1 ; +return hw_event == bts_event; }static inline bool intel_pmu_has_bts (struct perf_event *event)
arch/x86/include/asm/kfence.h +24 -5
@@ -42,10 +42,34 @@ static inline bool kfence_protect_page(unsigned long addr, bool protect) {unsigned int level;pte_t *pte =lookup_address (addr, &level); +pteval_t val;if (WARN_ON (!pte || level !=PG_LEVEL_4K ))return false; + val =pte_val (*pte); + +/* +* protect requires making the page not-present. If the PTE is +* already in the right state, there's nothing to do. +*/ +if (protect != !!(val & _PAGE_PRESENT)) +return true; + +/* +* Otherwise, invert the entire PTE. This avoids writing out an +* L1TF-vulnerable PTE (not present, without the high address bits +* set). +*/ +set_pte (pte,__pte (~val)); + +/* +* If the page was protected (non-present) and we're making it +* present, there is no need to flush the TLB at all. +*/ +if (!protect) +return true; +/* * We need to avoid IPIs, as we may get KFENCE allocations or faults * with interrupts disabled. Therefore, the below is best-effort, and
@@ -53,11 +77,6 @@ static inline bool kfence_protect_page(unsigned long addr, bool protect)* lazy fault handling takes care of faults after the page is PRESENT. */ -if (protect) -set_pte (pte,__pte (pte_val (*pte) & ~_PAGE_PRESENT)); -else -set_pte (pte,__pte (pte_val (*pte) | _PAGE_PRESENT)); -/* * Flush this CPU's TLB, assuming whoever did the allocation/free is * likely to continue running on this CPU.
arch/x86/kernel/cpu/resctrl/core.c +17 -4
@@ -769,7 +769,8 @@ static __init bool get_mem_config(void)if (boot_cpu_data.x86_vendor ==X86_VENDOR_INTEL )return __get_mem_config_intel (&hw_res->r_resctrl); -else if (boot_cpu_data.x86_vendor ==X86_VENDOR_AMD ) +else if (boot_cpu_data.x86_vendor ==X86_VENDOR_AMD || + boot_cpu_data.x86_vendor ==X86_VENDOR_HYGON )return __rdt_get_mem_config_amd (&hw_res->r_resctrl);return false;
@@ -904,7 +905,8 @@ static __init void rdt_init_res_defs(void) {if (boot_cpu_data.x86_vendor ==X86_VENDOR_INTEL )rdt_init_res_defs_intel (); -else if (boot_cpu_data.x86_vendor ==X86_VENDOR_AMD ) +else if (boot_cpu_data.x86_vendor ==X86_VENDOR_AMD || + boot_cpu_data.x86_vendor ==X86_VENDOR_HYGON )rdt_init_res_defs_amd (); }
@@ -935,8 +937,19 @@ void resctrl_cpu_detect(struct cpuinfo_x86 *c) c->x86_cache_occ_scale = ebx; c->x86_cache_mbm_width_offset = eax &0xff ; -if (c->x86_vendor ==X86_VENDOR_AMD && !c->x86_cache_mbm_width_offset) - c->x86_cache_mbm_width_offset =MBM_CNTR_WIDTH_OFFSET_AMD ; +if (!c->x86_cache_mbm_width_offset) { +switch (c->x86_vendor) { +case X86_VENDOR_AMD : + c->x86_cache_mbm_width_offset =MBM_CNTR_WIDTH_OFFSET_AMD ; +break ; +case X86_VENDOR_HYGON : + c->x86_cache_mbm_width_offset =MBM_CNTR_WIDTH_OFFSET_HYGON ; +break ; +default : +/* Leave c->x86_cache_mbm_width_offset as 0 */ +break ; + } + } } }
arch/x86/kernel/cpu/resctrl/internal.h +3 -0
@@ -40,6 +40,9 @@#define MAX_MBA_BW_AMD 0x800#define MBM_CNTR_WIDTH_OFFSET_AMD 20 +/* Hygon MBM counter width as an offset from MBM_CNTR_WIDTH_BASE */ +#define MBM_CNTR_WIDTH_OFFSET_HYGON 8 +#define RMID_VAL_ERROR BIT_ULL(63)#define RMID_VAL_UNAVAIL BIT_ULL(62)/*
arch/x86/mm/fault.c +5 -10
@@ -804,8 +804,6 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,force_sig_pkuerr ((void __user *)address, pkey); else force_sig_fault(SIGSEGV, si_code, (void __user *)address); - -local_irq_disable (); }static noinline void
@@ -1443,15 +1441,12 @@ handle_page_fault(struct pt_regs *regs, unsigned long error_code,do_kern_addr_fault (regs, error_code, address); }else {do_user_addr_fault (regs, error_code, address); -/* -* User address page fault handling might have reenabled -* interrupts. Fixing up all potential exit points of -* do_user_addr_fault() and its leaf functions is just not -* doable w/o creating an unholy mess or turning the code -* upside down. -*/ -local_irq_disable (); } +/* +* page fault handling might have reenabled interrupts, +* make sure to disable them again. +*/ +local_irq_disable (); }DEFINE_IDTENTRY_RAW_ERRORCODE (exc_page_fault)
arch/x86/mm/kaslr.c +5 -5
@@ -98,12 +98,12 @@ void __init kernel_randomize_memory(void)/* * Adapt physical memory region size based on available memory, -* except when CONFIG_PCI_P2PDMA is enabled. P2PDMA exposes the -* device BAR space assuming the direct map space is large enough -* for creating a ZONE_DEVICE mapping in the direct map corresponding -* to the physical BAR address. +* except when CONFIG_ZONE_DEVICE is enabled. ZONE_DEVICE wants to map +* any physical address into the direct-map. KASLR wants to reliably +* steal some physical address bits. Those design choices are in direct +* conflict. */ -if (!IS_ENABLED (CONFIG_PCI_P2PDMA ) && (memory_tb < kaslr_regions[0 ].size_tb)) +if (!IS_ENABLED (CONFIG_ZONE_DEVICE ) && (memory_tb < kaslr_regions[0 ].size_tb)) kaslr_regions[0 ].size_tb = memory_tb;/*
block/blk-cgroup.c +4 -0
@@ -491,8 +491,12 @@ static int blkcg_reset_stats(struct cgroup_subsys_state *css,struct blkg_iostat_set *bis =per_cpu_ptr (blkg->iostat_cpu, cpu);memset (bis,0 ,sizeof (*bis)); + +/* Re-initialize the cleared blkg_iostat_set */ +u64_stats_init (&bis->sync); }memset (&blkg->iostat,0 ,sizeof (blkg->iostat)); +u64_stats_init (&blkg->iostat.sync);for (i =0 ; i <BLKCG_MAX_POLS ; i++) {struct blkcg_policy *pol = blkcg_policy[i];
crypto/authencesn.c +6 -0
@@ -191,6 +191,9 @@ static int crypto_authenc_esn_encrypt(struct aead_request *req)struct scatterlist *src, *dst;int err; +if (assoclen <8 ) +return -EINVAL ; +sg_init_table (areq_ctx->src,2 ); src =scatterwalk_ffwd (areq_ctx->src, req->src, assoclen); dst = src;
@@ -284,6 +287,9 @@ static int crypto_authenc_esn_decrypt(struct aead_request *req)u32 tmp[2 ];int err; +if (assoclen <8 ) +return -EINVAL ; + cryptlen -= authsize;if (req->src != dst) {
drivers/base/regmap/regmap.c +3 -1
@@ -473,9 +473,11 @@ static void regmap_lock_hwlock_irq(void *__map)static void regmap_lock_hwlock_irqsave (void *__map) {struct regmap *map = __map; +unsigned long flags =0 ;hwspin_lock_timeout_irqsave (map->hwlock,UINT_MAX , - &map->spinlock_flags); + &flags); + map->spinlock_flags = flags; }static void regmap_unlock_hwlock (void *__map)
drivers/bluetooth/hci_ldisc.c +2 -2
@@ -684,6 +684,8 @@ static int hci_uart_register_dev(struct hci_uart *hu)return err; } +set_bit (HCI_UART_PROTO_INIT , &hu->flags); +if (test_bit (HCI_UART_INIT_PENDING , &hu->hdev_flags))return 0 ;
@@ -711,8 +713,6 @@ static int hci_uart_set_proto(struct hci_uart *hu, int id) hu->proto = p; -set_bit (HCI_UART_PROTO_INIT , &hu->flags); - err =hci_uart_register_dev (hu);if (err) {return err;
drivers/comedi/comedi.h +1 -1
@@ -640,7 +640,7 @@ struct comedi_chaninfo {/** * struct comedi_rangeinfo - used to retrieve the range table for a channel -* @range_type: Encodes subdevice index (bits 27:24), channel index +* @range_type: Encodes subdevice index (bits 31:24), channel index * (bits 23:16) and range table length (bits 15:0). * @range_ptr: Pointer to array of @struct comedi_krange to be filled * in with the range table for the channel or subdevice.
drivers/comedi/comedi_fops.c +1 -1
@@ -1095,7 +1095,7 @@ static int do_chaninfo_ioctl(struct comedi_device *dev,for (i =0 ; i < s->n_chan; i++) {int x; - x = (dev->minor <<28 ) | (it->subdev <<24 ) | (i <<16 ) | + x = (it->subdev <<24 ) | (i <<16 ) | (s->range_table_list[i]->length);if (put_user (x, it->rangelist + i))return -EFAULT ;
drivers/comedi/drivers/dmm32at.c +30 -2
@@ -331,6 +331,7 @@ static int dmm32at_ai_cmdtest(struct comedi_device *dev,static void dmm32at_setaitimer (struct comedi_device *dev,unsigned int nansec) { +unsigned long irq_flags;unsigned char lo1, lo2, hi2;unsigned short both2;
@@ -343,6 +344,9 @@ static void dmm32at_setaitimer(struct comedi_device *dev, unsigned int nansec)/* set counter clocks to 10MHz, disable all aux dio */ outb (0 , dev->iobase +DMM32AT_CTRDIO_CFG_REG ); +/* serialize access to control register and paged registers */ +spin_lock_irqsave (&dev->spinlock, irq_flags); +/* get access to the clock regs */ outb (DMM32AT_CTRL_PAGE_8254 , dev->iobase +DMM32AT_CTRL_REG );
@@ -355,6 +359,8 @@ static void dmm32at_setaitimer(struct comedi_device *dev, unsigned int nansec)outb (lo2, dev->iobase +DMM32AT_CLK2 );outb (hi2, dev->iobase +DMM32AT_CLK2 ); +spin_unlock_irqrestore (&dev->spinlock, irq_flags); +/* enable the ai conversion interrupt and the clock to start scans */ outb(DMM32AT_INTCLK_ADINT | DMM32AT_INTCLK_CLKEN | DMM32AT_INTCLK_CLKSEL,
@@ -364,13 +370,19 @@ static void dmm32at_setaitimer(struct comedi_device *dev, unsigned int nansec)static int dmm32at_ai_cmd (struct comedi_device *dev,struct comedi_subdevice *s) {struct comedi_cmd *cmd = &s->async->cmd; +unsigned long irq_flags;int ret;dmm32at_ai_set_chanspec (dev, s, cmd->chanlist[0 ], cmd->chanlist_len); +/* serialize access to control register and paged registers */ +spin_lock_irqsave (&dev->spinlock, irq_flags); +/* reset the interrupt just in case */ outb (DMM32AT_CTRL_INTRST , dev->iobase +DMM32AT_CTRL_REG ); +spin_unlock_irqrestore (&dev->spinlock, irq_flags); +/* * wait for circuit to settle * we don't have the 'insn' here but it's not needed
@@ -430,8 +442,13 @@ static irqreturn_t dmm32at_isr(int irq, void *d)comedi_handle_events (dev, s); } +/* serialize access to control register and paged registers */ +spin_lock (&dev->spinlock); +/* reset the interrupt */ outb (DMM32AT_CTRL_INTRST , dev->iobase +DMM32AT_CTRL_REG ); + +spin_unlock (&dev->spinlock);return IRQ_HANDLED ; }
@@ -482,14 +499,25 @@ static int dmm32at_ao_insn_write(struct comedi_device *dev,static int dmm32at_8255_io (struct comedi_device *dev,int dir,int port,int data,unsigned long regbase) { +unsigned long irq_flags; +int ret; + +/* serialize access to control register and paged registers */ +spin_lock_irqsave (&dev->spinlock, irq_flags); +/* get access to the DIO regs */ outb (DMM32AT_CTRL_PAGE_8255 , dev->iobase +DMM32AT_CTRL_REG );if (dir) {outb (data, dev->iobase + regbase + port); -return 0 ; + ret =0 ; + }else { + ret =inb (dev->iobase + regbase + port); } -return inb (dev->iobase + regbase + port); + +spin_unlock_irqrestore (&dev->spinlock, irq_flags); + +return ret; }/* Make sure the board is there and put it to a known state */
drivers/comedi/range.c +1 -1
@@ -52,7 +52,7 @@ int do_rangeinfo_ioctl(struct comedi_device *dev,const struct comedi_lrange *lr;struct comedi_subdevice *s; - subd = (it->range_type >>24 ) &0xf ; + subd = (it->range_type >>24 ) &0xff ; chan = (it->range_type >>16 ) &0xff ;if (!dev->attached)
drivers/dma/at_hdmac.c +7 -2
@@ -1578,6 +1578,7 @@ static void atc_free_chan_resources(struct dma_chan *chan) {struct at_dma_chan *atchan =to_at_dma_chan (chan);struct at_dma *atdma =to_at_dma (chan->device); +struct at_dma_slave *atslave;struct at_desc *desc, *_desc;LIST_HEAD (list);
@@ -1598,8 +1599,12 @@ static void atc_free_chan_resources(struct dma_chan *chan)/* * Free atslave allocated in at_dma_xlate() */ -kfree (chan->private); - chan->private =NULL ; + atslave = chan->private; +if (atslave) { +put_device (atslave->dma_dev); +kfree (atslave); + chan->private =NULL ; + }dev_vdbg (chan2dev (chan),"free_chan_resources: done\n" ); }
drivers/dma/bcm-sba-raid.c +5 -1
@@ -1707,7 +1707,7 @@ static int sba_probe(struct platform_device *pdev)/* Prealloc channel resource */ ret =sba_prealloc_channel_resources (sba);if (ret) - goto fail_free_mchan; + goto fail_put_mbox;/* Check availability of debugfs */ if (!debugfs_initialized ())
@@ -1737,6 +1737,8 @@ static int sba_probe(struct platform_device *pdev) fail_free_resources:debugfs_remove_recursive (sba->root);sba_freeup_channel_resources (sba); +fail_put_mbox: +put_device (sba->mbox_dev); fail_free_mchan:mbox_free_channel (sba->mchan);return ret;
@@ -1752,6 +1754,8 @@ static int sba_remove(struct platform_device *pdev)sba_freeup_channel_resources (sba); +put_device (sba->mbox_dev); +mbox_free_channel (sba->mchan);return 0 ;
drivers/dma/idxd/compat.c +19 -4
@@ -21,11 +21,16 @@ static ssize_t unbind_store(struct device_driver *drv, const char *buf, size_t cint rc = -ENODEV ; dev =bus_find_device_by_name (bus,NULL , buf); -if (dev && dev->driver) { +if (!dev) +return -ENODEV ; + +if (dev->driver) {device_driver_detach (dev); rc = count; } +put_device (dev); +return rc; } static DRIVER_ATTR_IGNORE_LOCKDEP(unbind, 0200, NULL, unbind_store);
@@ -39,9 +44,12 @@ static ssize_t bind_store(struct device_driver *drv, const char *buf, size_t coustruct idxd_dev *idxd_dev; dev =bus_find_device_by_name (bus,NULL , buf); -if (!dev || dev->driver || drv != &dsa_drv.drv) +if (!dev)return -ENODEV ; +if (dev->driver || drv != &dsa_drv.drv) + goto err_put_dev; + idxd_dev =confdev_to_idxd_dev (dev);if (is_idxd_dev (idxd_dev)) { alt_drv =driver_find ("idxd" , bus);
@@ -54,13 +62,20 @@ static ssize_t bind_store(struct device_driver *drv, const char *buf, size_t cou alt_drv =driver_find ("user" , bus); }if (!alt_drv) -return -ENODEV ; + goto err_put_dev; rc =device_driver_attach (alt_drv, dev);if (rc <0 ) -return rc; + goto err_put_dev; + +put_device (dev);return count; + +err_put_dev: +put_device (dev); + +return rc; } static DRIVER_ATTR_IGNORE_LOCKDEP(bind, 0200, NULL, bind_store);
drivers/dma/lpc18xx-dmamux.c +14 -5
@@ -55,30 +55,31 @@ static void *lpc18xx_dmamux_reserve(struct of_phandle_args *dma_spec,struct lpc18xx_dmamux_data *dmamux =platform_get_drvdata (pdev);unsigned long flags;unsigned mux; +int ret = -EINVAL ;if (dma_spec->args_count !=3 ) {dev_err (&pdev->dev,"invalid number of dma mux args\n" ); -return ERR_PTR (-EINVAL ); + goto err_put_pdev; } mux = dma_spec->args[0 ];if (mux >= dmamux->dma_master_requests) {dev_err (&pdev->dev,"invalid mux number: %d\n" , dma_spec->args[0 ]); -return ERR_PTR (-EINVAL ); + goto err_put_pdev; }if (dma_spec->args[1 ] >LPC18XX_DMAMUX_MAX_VAL ) {dev_err (&pdev->dev,"invalid dma mux value: %d\n" , dma_spec->args[1 ]); -return ERR_PTR (-EINVAL ); + goto err_put_pdev; }/* The of_node_put() will be done in the core for the node */ dma_spec->np =of_parse_phandle (ofdma->of_node,"dma-masters" ,0 );if (!dma_spec->np) {dev_err (&pdev->dev,"can't get dma master\n" ); -return ERR_PTR (-EINVAL ); + goto err_put_pdev; }spin_lock_irqsave (&dmamux->lock, flags);
@@ -87,7 +88,8 @@ static void *lpc18xx_dmamux_reserve(struct of_phandle_args *dma_spec,dev_err (&pdev->dev,"dma request %u busy with %u.%u\n" , mux, mux, dmamux->muxes[mux].value);of_node_put (dma_spec->np); -return ERR_PTR (-EBUSY ); + ret = -EBUSY ; + goto err_put_pdev; } dmamux->muxes[mux].busy = true;
@@ -104,7 +106,14 @@ static void *lpc18xx_dmamux_reserve(struct of_phandle_args *dma_spec,dev_dbg (&pdev->dev,"mapping dmamux %u.%u to dma request %u\n" , mux, dmamux->muxes[mux].value, mux); +put_device (&pdev->dev); +return &dmamux->muxes[mux]; + +err_put_pdev: +put_device (&pdev->dev); + +return ERR_PTR (ret); }static int lpc18xx_dmamux_probe (struct platform_device *pdev)
drivers/dma/qcom/gpi.c +4 -2
@@ -1621,14 +1621,16 @@ static int gpi_peripheral_config(struct dma_chan *chan, struct dma_slave_config *config) { struct gchan *gchan = to_gchan(chan); +void *new_config;if (!config->peripheral_config)return -EINVAL ; - gchan->config =krealloc (gchan->config, config->peripheral_size,GFP_NOWAIT ); -if (!gchan->config) + new_config =krealloc (gchan->config, config->peripheral_size,GFP_NOWAIT ); +if (!new_config)return -ENOMEM ; + gchan->config = new_config;memcpy (gchan->config, config->peripheral_config, config->peripheral_size);return 0 ;
drivers/dma/sh/rz-dmac.c +5 -0
@@ -531,11 +531,16 @@ rz_dmac_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,static int rz_dmac_terminate_all (struct dma_chan *chan) {struct rz_dmac_chan *channel =to_rz_dmac_chan (chan); +struct rz_lmdesc *lmdesc = channel->lmdesc.base;unsigned long flags; +unsigned int i;LIST_HEAD (head);rz_dmac_disable_hw (channel);spin_lock_irqsave (&channel->vc.lock, flags); +for (i =0 ; i <DMAC_NR_LMDESC ; i++) + lmdesc[i].header =0 ; +list_splice_tail_init (&channel->ld_active, &channel->ld_free);list_splice_tail_init (&channel->ld_queue, &channel->ld_free);spin_unlock_irqrestore (&channel->vc.lock, flags);
drivers/dma/stm32-dmamux.c +15 -7
@@ -88,23 +88,25 @@ static void *stm32_dmamux_route_allocate(struct of_phandle_args *dma_spec,struct stm32_dmamux_data *dmamux =platform_get_drvdata (pdev);struct stm32_dmamux *mux;u32 i, min, max; -int ret; +int ret = -EINVAL ;unsigned long flags;if (dma_spec->args_count !=3 ) {dev_err (&pdev->dev,"invalid number of dma mux args\n" ); -return ERR_PTR (-EINVAL ); + goto err_put_pdev; }if (dma_spec->args[0 ] > dmamux->dmamux_requests) {dev_err (&pdev->dev,"invalid mux request number: %d\n" , dma_spec->args[0 ]); -return ERR_PTR (-EINVAL ); + goto err_put_pdev; } mux =kzalloc (sizeof (*mux),GFP_KERNEL ); -if (!mux) -return ERR_PTR (-ENOMEM ); +if (!mux) { + ret = -ENOMEM ; + goto err_put_pdev; + }spin_lock_irqsave (&dmamux->lock, flags); mux->chan_id = find_first_zero_bit(dmamux->dma_inuse,
@@ -131,7 +133,6 @@ static void *stm32_dmamux_route_allocate(struct of_phandle_args *dma_spec, dma_spec->np =of_parse_phandle (ofdma->of_node,"dma-masters" , i -1 );if (!dma_spec->np) {dev_err (&pdev->dev,"can't get dma master\n" ); - ret = -EINVAL ; goto error; }
@@ -140,7 +141,7 @@ static void *stm32_dmamux_route_allocate(struct of_phandle_args *dma_spec, ret =pm_runtime_resume_and_get (&pdev->dev);if (ret <0 ) {spin_unlock_irqrestore (&dmamux->lock, flags); - goto error; + goto err_put_dma_spec_np; }spin_unlock_irqrestore (&dmamux->lock, flags);
@@ -158,13 +159,20 @@ static void *stm32_dmamux_route_allocate(struct of_phandle_args *dma_spec,dev_dbg (&pdev->dev,"Mapping DMAMUX(%u) to DMA%u(%u)\n" , mux->request, mux->master, mux->chan_id); +put_device (&pdev->dev); +return mux; +err_put_dma_spec_np: +of_node_put (dma_spec->np); error:clear_bit (mux->chan_id, dmamux->dma_inuse); error_chan_id:kfree (mux); +err_put_pdev: +put_device (&pdev->dev); +return ERR_PTR (ret); }
drivers/dma/tegra210-adma.c +9 -1
@@ -344,10 +344,17 @@ static void tegra_adma_stop(struct tegra_adma_chan *tdc)return ; } -kfree (tdc->desc); +vchan_terminate_vdesc (&tdc->desc->vd); tdc->desc =NULL ; } +static void tegra_adma_synchronize (struct dma_chan *dc) +{ +struct tegra_adma_chan *tdc =to_tegra_adma_chan (dc); + +vchan_synchronize (&tdc->vc); +} +static void tegra_adma_start (struct tegra_adma_chan *tdc) {struct virt_dma_desc *vd =vchan_next_desc (&tdc->vc);
@@ -889,6 +896,7 @@ static int tegra_adma_probe(struct platform_device *pdev) tdma->dma_dev.device_config = tegra_adma_slave_config; tdma->dma_dev.device_tx_status = tegra_adma_tx_status; tdma->dma_dev.device_terminate_all = tegra_adma_terminate_all; + tdma->dma_dev.device_synchronize = tegra_adma_synchronize; tdma->dma_dev.src_addr_widths =BIT (DMA_SLAVE_BUSWIDTH_4_BYTES ); tdma->dma_dev.dst_addr_widths =BIT (DMA_SLAVE_BUSWIDTH_4_BYTES ); tdma->dma_dev.directions =BIT (DMA_DEV_TO_MEM ) |BIT (DMA_MEM_TO_DEV );
drivers/dma/ti/dma-crossbar.c +12 -6
@@ -78,34 +78,35 @@ static void *ti_am335x_xbar_route_allocate(struct of_phandle_args *dma_spec, {struct platform_device *pdev =of_find_device_by_node (ofdma->of_node);struct ti_am335x_xbar_data *xbar =platform_get_drvdata (pdev); -struct ti_am335x_xbar_map *map; +struct ti_am335x_xbar_map *map =ERR_PTR (-EINVAL );if (dma_spec->args_count !=3 ) -return ERR_PTR (-EINVAL ); + goto out_put_pdev;if (dma_spec->args[2 ] >= xbar->xbar_events) {dev_err (&pdev->dev,"Invalid XBAR event number: %d\n" , dma_spec->args[2 ]); -return ERR_PTR (-EINVAL ); + goto out_put_pdev; }if (dma_spec->args[0 ] >= xbar->dma_requests) {dev_err (&pdev->dev,"Invalid DMA request line number: %d\n" , dma_spec->args[0 ]); -return ERR_PTR (-EINVAL ); + goto out_put_pdev; }/* The of_node_put() will be done in the core for the node */ dma_spec->np =of_parse_phandle (ofdma->of_node,"dma-masters" ,0 );if (!dma_spec->np) {dev_err (&pdev->dev,"Can't get DMA master\n" ); -return ERR_PTR (-EINVAL ); + goto out_put_pdev; } map =kzalloc (sizeof (*map),GFP_KERNEL );if (!map) {of_node_put (dma_spec->np); -return ERR_PTR (-ENOMEM ); + map =ERR_PTR (-ENOMEM ); + goto out_put_pdev; } map->dma_line = (u16 )dma_spec->args[0 ];
@@ -119,6 +120,9 @@ static void *ti_am335x_xbar_route_allocate(struct of_phandle_args *dma_spec,ti_am335x_xbar_write (xbar->iomem, map->dma_line, map->mux_val); +out_put_pdev: +put_device (&pdev->dev); +return map; }
@@ -287,6 +291,8 @@ static void *ti_dra7_xbar_route_allocate(struct of_phandle_args *dma_spec,ti_dra7_xbar_write (xbar->iomem, map->xbar_out, map->xbar_in); +put_device (&pdev->dev); +return map; }
drivers/dma/ti/k3-udma-private.c +1 -1
@@ -40,9 +40,9 @@ struct udma_dev *of_xudma_dev_get(struct device_node *np, const char *property) } ud =platform_get_drvdata (pdev); +put_device (&pdev->dev);if (!ud) {pr_debug ("UDMA has not been probed\n" ); -put_device (&pdev->dev);return ERR_PTR (-EPROBE_DEFER ); }
drivers/dma/ti/omap-dma.c +4 -0
@@ -1804,6 +1804,8 @@ static int omap_dma_probe(struct platform_device *pdev)if (rc) {pr_warn ("OMAP-DMA: failed to register slave DMA engine device: %d\n" , rc); +if (od->ll123_supported) +dma_pool_destroy (od->desc_pool);omap_dma_free (od);return rc; }
@@ -1819,6 +1821,8 @@ static int omap_dma_probe(struct platform_device *pdev)if (rc) {pr_warn ("OMAP-DMA: failed to register DMA controller\n" );dma_async_device_unregister (&od->ddev); +if (od->ll123_supported) +dma_pool_destroy (od->desc_pool);omap_dma_free (od); } }
drivers/dma/xilinx/xilinx_dma.c +5 -2
@@ -128,6 +128,7 @@#define XILINX_MCDMA_MAX_CHANS_PER_DEVICE 0x20#define XILINX_DMA_MAX_CHANS_PER_DEVICE 0x2#define XILINX_CDMA_MAX_CHANS_PER_DEVICE 0x1 +#define XILINX_DMA_DFAULT_ADDRWIDTH 0x20#define XILINX_DMA_DMAXR_ALL_IRQ_MASK \ (XILINX_DMA_DMASR_FRM_CNT_IRQ | \
@@ -3013,7 +3014,7 @@ static int xilinx_dma_probe(struct platform_device *pdev)struct device_node *node = pdev->dev.of_node;struct xilinx_dma_device *xdev;struct device_node *child, *np = pdev->dev.of_node; -u32 num_frames, addr_width, len_width; +u32 num_frames, addr_width =XILINX_DMA_DFAULT_ADDRWIDTH , len_width;int i, err;/* Allocate and initialize the DMA engine structure */
@@ -3082,7 +3083,9 @@ static int xilinx_dma_probe(struct platform_device *pdev) err =of_property_read_u32 (node,"xlnx,addrwidth" , &addr_width);if (err <0 ) -dev_warn (xdev->dev,"missing xlnx,addrwidth property\n" ); +dev_warn (xdev->dev, +"missing xlnx,addrwidth property, using default value %d\n" , +XILINX_DMA_DFAULT_ADDRWIDTH );if (addr_width >32 ) xdev->ext_addr = true;
drivers/edac/i3200_edac.c +6 -5
@@ -358,10 +358,11 @@ static int i3200_probe1(struct pci_dev *pdev, int dev_idx) layers[1 ].type =EDAC_MC_LAYER_CHANNEL ; layers[1 ].size = nr_channels; layers[1 ].is_virt_csrow = false; - mci =edac_mc_alloc (0 ,ARRAY_SIZE (layers), layers, -sizeof (struct i3200_priv )); + + rc = -ENOMEM ; + mci =edac_mc_alloc (0 ,ARRAY_SIZE (layers), layers,sizeof (struct i3200_priv ));if (!mci) -return -ENOMEM ; + goto unmap;edac_dbg (3 ,"MC: init mci\n" );
@@ -421,9 +422,9 @@ static int i3200_probe1(struct pci_dev *pdev, int dev_idx)return 0 ; fail: +edac_mc_free (mci); +unmap:iounmap (window); -if (mci) -edac_mc_free (mci);return rc; }
drivers/edac/x38_edac.c +6 -3
@@ -341,9 +341,12 @@ static int x38_probe1(struct pci_dev *pdev, int dev_idx) layers[1 ].type =EDAC_MC_LAYER_CHANNEL ; layers[1 ].size = x38_channel_num; layers[1 ].is_virt_csrow = false; + + + rc = -ENOMEM ; mci =edac_mc_alloc (0 ,ARRAY_SIZE (layers), layers,0 );if (!mci) -return -ENOMEM ; + goto unmap;edac_dbg (3 ,"MC: init mci\n" );
@@ -403,9 +406,9 @@ static int x38_probe1(struct pci_dev *pdev, int dev_idx)return 0 ; fail: +edac_mc_free (mci); +unmap:iounmap (window); -if (mci) -edac_mc_free (mci);return rc; }
drivers/gpio/gpiolib-acpi.c +1 -1
@@ -1173,7 +1173,7 @@ acpi_gpio_adr_space_handler(u32 function, acpi_physical_address address,mutex_unlock (&achip->conn_lock);if (function ==ACPI_WRITE ) -gpiod_set_raw_value_cansleep (desc, !!(*value &BIT (i))); +gpiod_set_raw_value_cansleep (desc, !!(*value &BIT_ULL (i)));else *value |= (u64 )gpiod_get_raw_value_cansleep (desc) << i; }
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +10 -8
@@ -1847,6 +1847,14 @@ static int allocate_hiq_sdma_mqd(struct device_queue_manager *dqm)return retval; } +static void deallocate_hiq_sdma_mqd (struct kfd_dev *dev, +struct kfd_mem_obj *mqd) +{ +WARN (!mqd,"No hiq sdma mqd trunk to free" ); + +amdgpu_amdkfd_free_gtt_mem (dev->kgd, &mqd->gtt_mem); +} +struct device_queue_manager *device_queue_manager_init (struct kfd_dev *dev) {struct device_queue_manager *dqm;
@@ -1980,19 +1988,13 @@ struct device_queue_manager *device_queue_manager_init(struct kfd_dev *dev)if (!dqm->ops.initialize (dqm))return dqm; +deallocate_hiq_sdma_mqd (dev, &dqm->hiq_sdma_mqd); + out_free:kfree (dqm);return NULL ; } -static void deallocate_hiq_sdma_mqd (struct kfd_dev *dev, -struct kfd_mem_obj *mqd) -{ -WARN (!mqd,"No hiq sdma mqd trunk to free" ); - -amdgpu_amdkfd_free_gtt_mem (dev->kgd, mqd->gtt_mem); -} -void device_queue_manager_uninit (struct device_queue_manager *dqm) { dqm->ops.uninitialize (dqm);
drivers/gpu/drm/amd/pm/powerplay/si_dpm.c +12 -11
@@ -2242,8 +2242,6 @@ static int si_populate_smc_tdp_limits(struct amdgpu_device *adev,if (scaling_factor ==0 )return -EINVAL ; -memset (smc_table,0 ,sizeof (SISLANDS_SMC_STATETABLE )); - ret = si_calculate_adjusted_tdp_limits(adev, false, /* ??? */ adev->pm.dpm.tdp_adjustment,
@@ -2252,6 +2250,12 @@ static int si_populate_smc_tdp_limits(struct amdgpu_device *adev,if (ret)return ret; +if (adev->pdev->device ==0x6611 && adev->pdev->revision ==0x87 ) { +/* Workaround buggy powertune on Radeon 430 and 520. */ + tdp_limit =32 ; + near_tdp_limit =28 ; + } + smc_table->dpm2Params.TDPLimit =cpu_to_be32 (si_scale_power_for_smc (tdp_limit, scaling_factor) *1000 ); smc_table->dpm2Params.NearTDPLimit =
@@ -2297,16 +2301,8 @@ static int si_populate_smc_tdp_limits_2(struct amdgpu_device *adev,if (ni_pi->enable_power_containment) {SISLANDS_SMC_STATETABLE *smc_table = &si_pi->smc_statetable; -u32 scaling_factor =si_get_smc_power_scaling_factor (adev);int ret; -memset (smc_table,0 ,sizeof (SISLANDS_SMC_STATETABLE )); - - smc_table->dpm2Params.NearTDPLimit = -cpu_to_be32 (si_scale_power_for_smc (adev->pm.dpm.near_tdp_limit_adjusted, scaling_factor) *1000 ); - smc_table->dpm2Params.SafePowerLimit = -cpu_to_be32 (si_scale_power_for_smc ((adev->pm.dpm.near_tdp_limit_adjusted *SISLANDS_DPM2_TDP_SAFE_LIMIT_PERCENT ) /100 , scaling_factor) *1000 ); - ret = amdgpu_si_copy_bytes_to_smc(adev, (si_pi->state_table_start + offsetof(SISLANDS_SMC_STATETABLE, dpm2Params) +
@@ -3435,10 +3431,15 @@ static void si_apply_state_adjust_rules(struct amdgpu_device *adev, (adev->pdev->revision ==0x80 ) || (adev->pdev->revision ==0x81 ) || (adev->pdev->revision ==0x83 ) || - (adev->pdev->revision == 0x87) || + (adev->pdev->revision ==0x87 && + adev->pdev->device !=0x6611 ) || (adev->pdev->device ==0x6604 ) || (adev->pdev->device == 0x6605)) { max_sclk = 75000; + }else if (adev->pdev->revision ==0x87 && + adev->pdev->device ==0x6611 ) { +/* Radeon 430 and 520 */ + max_sclk =78000 ; } }
drivers/gpu/drm/imx/imx-tve.c +13 -0
@@ -521,6 +521,13 @@ static const struct component_ops imx_tve_ops = { .bind = imx_tve_bind, }; +static void imx_tve_put_device (void *_dev) +{ +struct device *dev = _dev; + +put_device (dev); +} +static int imx_tve_probe (struct platform_device *pdev) {struct device *dev = &pdev->dev;
@@ -543,6 +550,12 @@ static int imx_tve_probe(struct platform_device *pdev)if (ddc_node) { tve->ddc =of_find_i2c_adapter_by_node (ddc_node);of_node_put (ddc_node); +if (tve->ddc) { + ret =devm_add_action_or_reset (dev, imx_tve_put_device, + &tve->ddc->dev); +if (ret) +return ret; + } } tve->mode =of_get_tve_mode (np);
drivers/gpu/drm/nouveau/dispnv50/curs507a.c +1 -0
@@ -84,6 +84,7 @@ curs507a_prepare(struct nv50_wndw *wndw, struct nv50_head_atom *asyh, asyh->curs.handle = handle; asyh->curs.offset = offset; asyh->set.curs = asyh->curs.visible; +nv50_atom (asyh->state.state)->lock_core = true; } }
drivers/gpu/drm/panel/panel-simple.c +1 -0
@@ -1921,6 +1921,7 @@ static const struct panel_desc dataimage_scf0700c48ggu18 = { }, .bus_format = MEDIA_BUS_FMT_RGB888_1X24, .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE, + .connector_type = DRM_MODE_CONNECTOR_DPI, };static const struct display_timing dlc_dlc0700yzg_1_timing = {
drivers/gpu/drm/vmwgfx/vmwgfx_shader.c +3 -1
@@ -996,8 +996,10 @@ int vmw_compat_shader_add(struct vmw_private *dev_priv,ttm_bo_unreserve (&buf->base); res =vmw_shader_alloc (dev_priv, buf, size,0 , shader_type); -if (unlikely (ret !=0 )) +if (IS_ERR (res)) { + ret =PTR_ERR (res); goto no_reserve; + } ret = vmw_cmdbuf_res_add(man, vmw_cmdbuf_res_shader, vmw_shader_key(user_key, shader_type),
drivers/hid/hid-uclogic-core.c +4 -8
@@ -104,10 +104,8 @@ static int uclogic_input_configured(struct hid_device *hdev, {struct uclogic_drvdata *drvdata =hid_get_drvdata (hdev);struct uclogic_params *params = &drvdata->params; -char *name;const char *suffix =NULL ;struct hid_field *field; -size_t len;/* no report associated (HID_QUIRK_MULTI_INPUT not set) */ if (!hi->report)
@@ -146,12 +144,10 @@ static int uclogic_input_configured(struct hid_device *hdev, }if (suffix) { - len =strlen (hdev->name) +2 +strlen (suffix); - name =devm_kzalloc (&hi->input->dev, len,GFP_KERNEL ); -if (name) { -snprintf (name, len,"%s %s" , hdev->name, suffix); - hi->input->name = name; - } + hi->input->name =devm_kasprintf (&hdev->dev,GFP_KERNEL , +"%s %s" , hdev->name, suffix); +if (!hi->input->name) +return -ENOMEM ; }return 0 ;
drivers/hid/usbhid/hid-core.c +16 -1
@@ -983,6 +983,7 @@ static int usbhid_parse(struct hid_device *hid)struct usb_device *dev =interface_to_usbdev (intf);struct hid_descriptor *hdesc;struct hid_class_descriptor *hcdesc; +__u8 fixed_opt_descriptors_size;u32 quirks =0 ;unsigned int rsize =0 ;char *rdesc;
@@ -1013,7 +1014,21 @@ static int usbhid_parse(struct hid_device *hid) (hdesc->bNumDescriptors - 1) * sizeof(*hcdesc)) {dbg_hid ("hid descriptor invalid, bLen=%hhu bNum=%hhu\n" , hdesc->bLength, hdesc->bNumDescriptors); -return -EINVAL ; + +/* +* Some devices may expose a wrong number of descriptors compared +* to the provided length. +* However, we ignore the optional hid class descriptors entirely +* so we can safely recompute the proper field. +*/ +if (hdesc->bLength >=sizeof (*hdesc)) { + fixed_opt_descriptors_size = hdesc->bLength -sizeof (*hdesc); + +hid_warn (intf,"fixing wrong optional hid class descriptors count\n" ); + hdesc->bNumDescriptors = fixed_opt_descriptors_size /sizeof (*hcdesc) +1 ; + }else { +return -EINVAL ; + } } hid->version =le16_to_cpu (hdesc->bcdHID);
drivers/hwtracing/intel_th/core.c +16 -3
@@ -810,9 +810,12 @@ static int intel_th_output_open(struct inode *inode, struct file *file)int err; dev =bus_find_device_by_devt (&intel_th_bus, inode->i_rdev); -if (!dev || !dev->driver) { +if (!dev) +return -ENODEV ; + +if (!dev->driver) { err = -ENODEV ; - goto out_no_device; + goto out_put_device; } thdrv =to_intel_th_driver (dev->driver);
@@ -836,12 +839,22 @@ static int intel_th_output_open(struct inode *inode, struct file *file) out_put_device:put_device (dev); -out_no_device: +return err; } +static int intel_th_output_release (struct inode *inode,struct file *file) +{ +struct intel_th_device *thdev = file->private_data; + +put_device (&thdev->dev); + +return 0 ; +} +static const struct file_operations intel_th_output_fops = { .open = intel_th_output_open, + .release = intel_th_output_release, .llseek = noop_llseek, };
drivers/iio/adc/ad9467.c +1 -1
@@ -90,7 +90,7 @@#define CHIPID_AD9434 0x6A#define AD9434_DEF_OUTPUT_MODE 0x00 -#define AD9434_REG_VREF_MASK 0xC0 +#define AD9434_REG_VREF_MASK GENMASK(4, 0)/* * Analog Devices AD9467 16-Bit, 200/250 MSPS ADC
drivers/iio/adc/at91-sama5d2_adc.c +1 -0
@@ -1887,6 +1887,7 @@ static int at91_adc_remove(struct platform_device *pdev)struct at91_adc_state *st =iio_priv (indio_dev);iio_device_unregister (indio_dev); +cancel_work_sync (&st->touch_st.workq);at91_adc_dma_disable (pdev);
drivers/iio/adc/exynos_adc.c +2 -11
@@ -721,14 +721,7 @@ static const struct iio_chan_spec exynos_adc_iio_channels[] = { ADC_CHANNEL(9, "adc9"), }; -static int exynos_adc_remove_devices (struct device *dev,void *c) -{ -struct platform_device *pdev =to_platform_device (dev); - -platform_device_unregister (pdev); -return 0 ; -}static int exynos_adc_ts_open (struct input_dev *dev) {
@@ -929,8 +922,7 @@ static int exynos_adc_probe(struct platform_device *pdev)return 0 ; err_of_populate: -device_for_each_child (&indio_dev->dev,NULL , - exynos_adc_remove_devices); +of_platform_depopulate (&indio_dev->dev);if (has_ts) {input_unregister_device (info->input);free_irq (info->tsirq, info);
@@ -959,8 +951,7 @@ static int exynos_adc_remove(struct platform_device *pdev)free_irq (info->tsirq, info);input_unregister_device (info->input); } -device_for_each_child (&indio_dev->dev,NULL , - exynos_adc_remove_devices); +of_platform_depopulate (&indio_dev->dev);iio_device_unregister (indio_dev);free_irq (info->irq, info);if (info->data->exit_hw)
drivers/iio/dac/ad5686.c +6 -0
@@ -427,6 +427,12 @@ static const struct ad5686_chip_info ad5686_chip_info_tbl[] = { .num_channels = 4, .regmap_type = AD5686_REGMAP, }, + [ID_AD5695R] = { + .channels = ad5685r_channels, + .int_vref_mv = 2500, + .num_channels = 4, + .regmap_type = AD5686_REGMAP, + }, [ID_AD5696] = { .channels = ad5686_channels, .num_channels = 4,
drivers/input/serio/i8042-acpipnpio.h +18 -0
@@ -113,6 +113,17 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = { }, .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_NEVER) }, + { +/* +* ASUS Zenbook UX425QA_UM425QA +* Some Zenbooks report "Zenbook" with a lowercase b. +*/ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"ASUSTeK COMPUTER INC." ), + DMI_MATCH(DMI_PRODUCT_NAME, "Zenbook UX425QA_UM425QA"), + }, + .driver_data = (void *)(SERIO_QUIRK_PROBE_DEFER |SERIO_QUIRK_RESET_NEVER ) + }, {/* ASUS ZenBook UX425UA/QA */ .matches = {
@@ -1168,6 +1179,13 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = { .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) }, + { + .matches = { + DMI_MATCH(DMI_BOARD_NAME, "WUJIE Series-X5SP4NAG"), + }, + .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | + SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) + }, /* * A lot of modern Clevo barebones have touchpad and/or keyboard issues * after suspend fixable with nomux + reset + noloop + nopnp. Luckily,
drivers/irqchip/irq-gic-v3-its.c +4 -4
@@ -609,7 +609,7 @@ static struct its_collection *its_build_mapd_cmd(struct its_node *its,struct its_cmd_block *cmd, struct its_cmd_desc *desc) { - unsigned long itt_addr; + phys_addr_t itt_addr;u8 size =ilog2 (desc->its_mapd_cmd.dev->nr_ites); itt_addr =virt_to_phys (desc->its_mapd_cmd.dev->itt);
@@ -780,7 +780,7 @@ static struct its_vpe *its_build_vmapp_cmd(struct its_node *its, struct its_cmd_desc *desc) {struct its_vpe *vpe =valid_vpe (its, desc->its_vmapp_cmd.vpe); -unsigned long vpt_addr, vconf_addr; +phys_addr_t vpt_addr, vconf_addr;u64 target;bool alloc;
@@ -2413,10 +2413,10 @@ static int its_setup_baser(struct its_node *its, struct its_baser *baser, baser->psz = psz; tmp = indirect ?GITS_LVL1_ENTRY_SIZE : esz; -pr_info ("ITS@%pa: allocated %d %s @%lx (%s, esz %d, psz %dK, shr %d)\n" , +pr_info ("ITS@%pa: allocated %d %s @%llx (%s, esz %d, psz %dK, shr %d)\n" , &its->phys_base, (int )(PAGE_ORDER_TO_SIZE (order) / (int )tmp), its_base_type_string[type], - (unsigned long )virt_to_phys (base), + (u64 )virt_to_phys (base), indirect ?"indirect" :"flat" , (int )esz, psz /SZ_1K , (int )shr >>GITS_BASER_SHAREABILITY_SHIFT );
drivers/isdn/mISDN/timerdev.c +8 -5
@@ -109,14 +109,14 @@ mISDN_read(struct file *filep, char __user *buf, size_t count, loff_t *off)spin_unlock_irq (&dev->lock);if (filep->f_flags &O_NONBLOCK )return -EAGAIN ; -wait_event_interruptible (dev->wait, (dev->work || +wait_event_interruptible (dev->wait, (READ_ONCE (dev->work) || !list_empty (list)));if (signal_pending (current))return -ERESTARTSYS ;spin_lock_irq (&dev->lock); }if (dev->work) - dev->work =0 ; +WRITE_ONCE (dev->work,0 );if (!list_empty (list)) { timer = list_first_entry(list, struct mISDNtimer, list);list_del (&timer->list);
@@ -141,13 +141,16 @@ mISDN_poll(struct file *filep, poll_table *wait)if (*debug &DEBUG_TIMER )printk (KERN_DEBUG "%s(%p, %p)\n" , __func__, filep, wait);if (dev) { +u32 work; +poll_wait (filep, &dev->wait, wait); mask =0 ; -if (dev->work || !list_empty (&dev->expired)) + work =READ_ONCE (dev->work); +if (work || !list_empty (&dev->expired)) mask |= (EPOLLIN |EPOLLRDNORM );if (*debug &DEBUG_TIMER )printk (KERN_DEBUG "%s work(%d) empty(%d)\n" , __func__, - dev->work,list_empty (&dev->expired)); + work,list_empty (&dev->expired)); }return mask; }
@@ -172,7 +175,7 @@ misdn_add_timer(struct mISDNtimerdev *dev, int timeout)struct mISDNtimer *timer;if (!timeout) { - dev->work =1 ; +WRITE_ONCE (dev->work,1 );wake_up_interruptible (&dev->wait); id =0 ; }else {
drivers/leds/led-class.c +5 -5
@@ -412,11 +412,6 @@ int led_classdev_register_ext(struct device *parent,#ifdef CONFIG_LEDS_BRIGHTNESS_HW_CHANGED led_cdev->brightness_hw_changed =-1 ;#endif -/* add to the list of leds */ -down_write (&leds_list_lock); -list_add_tail (&led_cdev->node, &leds_list); -up_write (&leds_list_lock); -if (!led_cdev->max_brightness) led_cdev->max_brightness =LED_FULL ;
@@ -424,6 +419,11 @@ int led_classdev_register_ext(struct device *parent,led_init_core (led_cdev); +/* add to the list of leds */ +down_write (&leds_list_lock); +list_add_tail (&led_cdev->node, &leds_list); +up_write (&leds_list_lock); +#ifdef CONFIG_LEDS_TRIGGERS led_trigger_set_default (led_cdev);#endif
drivers/misc/mei/mei-trace.h +9 -9
@@ -21,18 +21,18 @@ TRACE_EVENT(mei_reg_read, TP_ARGS(dev, reg, offs, val),TP_STRUCT__entry (__string (dev ,dev_name (dev )) - __field(const char *, reg) +__string (reg, reg)__field (u32, offs)__field (u32, val) ),TP_fast_assign ( __assign_str(dev, dev_name(dev)); - __entry->reg = reg; +__assign_str (reg, reg); __entry->offs = offs; __entry->val = val; ),TP_printk ("[%s] read %s:[%#x] = %#x" , -__get_str (dev), __entry->reg, __entry->offs, __entry->val) +__get_str (dev),__get_str (reg), __entry->offs, __entry->val) ); TRACE_EVENT(mei_reg_write,
@@ -40,18 +40,18 @@ TRACE_EVENT(mei_reg_write, TP_ARGS(dev, reg, offs, val),TP_STRUCT__entry (__string (dev ,dev_name (dev )) - __field(const char *, reg) +__string (reg, reg)__field (u32, offs)__field (u32, val) ),TP_fast_assign ( __assign_str(dev, dev_name(dev)); - __entry->reg = reg; +__assign_str (reg, reg); __entry->offs = offs; __entry->val = val; ),TP_printk ("[%s] write %s[%#x] = %#x" , -__get_str (dev), __entry->reg, __entry->offs, __entry->val) +__get_str (dev),__get_str (reg), __entry->offs, __entry->val) ); TRACE_EVENT(mei_pci_cfg_read,
@@ -59,18 +59,18 @@ TRACE_EVENT(mei_pci_cfg_read,TP_ARGS (dev, reg, offs, val),TP_STRUCT__entry ( __string(dev, dev_name(dev)) - __field(const char *, reg) + __string(reg, reg) __field(u32, offs)__field (u32, val) ),TP_fast_assign ( __assign_str(dev, dev_name(dev)); - __entry->reg = reg; +__assign_str (reg, reg); __entry->offs = offs; __entry->val = val; ),TP_printk ("[%s] pci cfg read %s:[%#x] = %#x" , -__get_str (dev), __entry->reg, __entry->offs, __entry->val) +__get_str (dev),__get_str (reg), __entry->offs, __entry->val) );#endif /* _MEI_TRACE_H_ */
drivers/misc/uacce/uacce.c +34 -8
82 lines not on this page · raw message
drivers/mmc/host/rtsx_pci_sdmmc.c +41 -0
53 lines not on this page · raw message
drivers/net/bonding/bond_main.c +9 -2
@@ -1836,6 +1836,12 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,*/ if (!bond_has_slaves (bond)) {if (bond_dev->type != slave_dev->type) { +if (slave_dev->type !=ARPHRD_ETHER && +BOND_MODE (bond) ==BOND_MODE_8023AD ) { +SLAVE_NL_ERR (bond_dev, slave_dev, extack, +"8023AD mode requires Ethernet devices" ); +return -EINVAL ; + }slave_dbg (bond_dev, slave_dev,"change device type from %d to %d\n" , bond_dev->type, slave_dev->type);
@@ -3805,8 +3811,9 @@ static bool bond_flow_dissect(struct bonding *bond, struct sk_buff *skb, const vcase BOND_XMIT_POLICY_ENCAP23 :case BOND_XMIT_POLICY_ENCAP34 :memset (fk,0 ,sizeof (*fk)); -return __skb_flow_dissect (NULL , skb, &flow_keys_bonding, - fk, data, l2_proto, nhoff, hlen,0 ); +return __skb_flow_dissect (dev_net (bond->dev), skb, + &flow_keys_bonding, fk, data, + l2_proto, nhoff, hlen,0 );default :break ; }
drivers/net/can/usb/ems_usb.c +7 -1
@@ -485,11 +485,17 @@ static void ems_usb_read_bulk_callback(struct urb *urb) urb->transfer_buffer,RX_BUFFER_SIZE , ems_usb_read_bulk_callback, dev); +usb_anchor_urb (urb, &dev->rx_submitted); + retval =usb_submit_urb (urb,GFP_ATOMIC ); +if (!retval) +return ; + +usb_unanchor_urb (urb);if (retval == -ENODEV )netif_device_detach (netdev); -else if (retval) +else netdev_err (netdev,"failed resubmitting read bulk urb: %d\n" , retval); }
drivers/net/can/usb/esd_usb2.c +8 -1
@@ -440,13 +440,20 @@ static void esd_usb2_read_bulk_callback(struct urb *urb) urb->transfer_buffer,RX_BUFFER_SIZE , esd_usb2_read_bulk_callback, dev); +usb_anchor_urb (urb, &dev->rx_submitted); + retval =usb_submit_urb (urb,GFP_ATOMIC ); +if (!retval) +return ; + +usb_unanchor_urb (urb); +if (retval == -ENODEV ) {for (i =0 ; i < dev->net_count; i++) {if (dev->nets[i])netif_device_detach (dev->nets[i]->netdev); } - }else if (retval) { + }else {dev_err (dev->udev->dev.parent,"failed resubmitting read bulk urb: %d\n" , retval); }
drivers/net/can/usb/etas_es58x/es58x_core.c +1 -1
@@ -1743,7 +1743,7 @@ static int es58x_alloc_rx_urbs(struct es58x_device *es58x_dev)dev_dbg (dev,"%s: Allocated %d rx URBs each of size %zu\n" , __func__, i, rx_buf_len); -return ret; +return 0 ; }/**
drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c +8 -1
@@ -350,7 +350,14 @@ static void kvaser_usb_read_bulk_callback(struct urb *urb) urb->transfer_buffer,KVASER_USB_RX_BUFFER_SIZE , kvaser_usb_read_bulk_callback, dev); +usb_anchor_urb (urb, &dev->rx_submitted); + err =usb_submit_urb (urb,GFP_ATOMIC ); +if (!err) +return ; + +usb_unanchor_urb (urb); +if (err == -ENODEV ) {for (i =0 ; i < dev->nchannels; i++) {if (!dev->nets[i])
@@ -358,7 +365,7 @@ static void kvaser_usb_read_bulk_callback(struct urb *urb)netif_device_detach (dev->nets[i]->netdev); } - }else if (err) { + }else {dev_err (&dev->intf->dev,"Failed resubmitting read bulk urb: %d\n" , err); }
drivers/net/can/usb/mcba_usb.c +7 -1
@@ -614,11 +614,17 @@ static void mcba_usb_read_bulk_callback(struct urb *urb) urb->transfer_buffer,MCBA_USB_RX_BUFF_SIZE , mcba_usb_read_bulk_callback, priv); +usb_anchor_urb (urb, &priv->rx_submitted); + retval =usb_submit_urb (urb,GFP_ATOMIC ); +if (!retval) +return ; + +usb_unanchor_urb (urb);if (retval == -ENODEV )netif_device_detach (netdev); -else if (retval) +else netdev_err (netdev,"failed resubmitting read bulk urb: %d\n" , retval); }
drivers/net/can/usb/usb_8dev.c +7 -1
@@ -544,11 +544,17 @@ static void usb_8dev_read_bulk_callback(struct urb *urb) urb->transfer_buffer,RX_BUFFER_SIZE , usb_8dev_read_bulk_callback, priv); +usb_anchor_urb (urb, &priv->rx_submitted); + retval =usb_submit_urb (urb,GFP_ATOMIC ); +if (!retval) +return ; + +usb_unanchor_urb (urb);if (retval == -ENODEV )netif_device_detach (netdev); -else if (retval) +else netdev_err (netdev,"failed resubmitting read bulk urb: %d\n" , retval); }
drivers/net/ethernet/amd/xgbe/xgbe-drv.c +1 -4
@@ -2112,7 +2112,7 @@ static void xgbe_get_stats64(struct net_device *netdev, s->multicast = pstats->rxmulticastframes_g; s->rx_length_errors = pstats->rxlengtherror; s->rx_crc_errors = pstats->rxcrcerror; - s->rx_fifo_errors = pstats->rxfifooverflow; + s->rx_over_errors = pstats->rxfifooverflow; s->tx_packets = pstats->txframecount_gb; s->tx_bytes = pstats->txoctetcount_gb;
@@ -2566,9 +2566,6 @@ static int xgbe_rx_poll(struct xgbe_channel *channel, int budget) goto read_again;if (error || packet->errors) { -if (packet->errors) -netif_err (pdata, rx_err, netdev, -"error in received packet\n" );dev_kfree_skb (skb); goto next_packet; }
drivers/net/ethernet/emulex/benet/be_cmds.c +2 -1
@@ -3796,6 +3796,7 @@ int be_cmd_get_perm_mac(struct be_adapter *adapter, u8 *mac) {int status;bool pmac_valid = false; +u32 pmac_id;eth_zero_addr (mac);
@@ -3808,7 +3809,7 @@ int be_cmd_get_perm_mac(struct be_adapter *adapter, u8 *mac) adapter->if_handle, 0); }else { status =be_cmd_get_mac_from_list (adapter, mac, &pmac_valid, -NULL , adapter->if_handle,0 ); + &pmac_id, adapter->if_handle,0 ); }return status;
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h +1 -1
@@ -1036,7 +1036,7 @@ struct hclge_fd_tcam_config_3_cmd {#define HCLGE_FD_AD_QID_M GENMASK(11, 2)#define HCLGE_FD_AD_USE_COUNTER_B 12#define HCLGE_FD_AD_COUNTER_NUM_S 13 -#define HCLGE_FD_AD_COUNTER_NUM_M GENMASK(20, 13) +#define HCLGE_FD_AD_COUNTER_NUM_M GENMASK(19, 13)#define HCLGE_FD_AD_NXT_STEP_B 20#define HCLGE_FD_AD_NXT_KEY_S 21#define HCLGE_FD_AD_NXT_KEY_M GENMASK(25, 21)
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +1 -1
@@ -5856,7 +5856,7 @@ static int hclge_fd_ad_config(struct hclge_dev *hdev, u8 stage, int loc, HCLGE_FD_AD_COUNTER_NUM_S, action->counter_id);hnae3_set_bit (ad_data,HCLGE_FD_AD_NXT_STEP_B , action->use_next_stage);hnae3_set_field (ad_data,HCLGE_FD_AD_NXT_KEY_M ,HCLGE_FD_AD_NXT_KEY_S , - action->counter_id); + action->next_input_key); req->ad_data =cpu_to_le64 (ad_data); ret =hclge_cmd_send (&hdev->hw, &desc,1 );
drivers/net/ethernet/intel/ice/ice_main.c +0 -1
@@ -5841,7 +5841,6 @@ void ice_update_vsi_stats(struct ice_vsi *vsi) pf->stats.illegal_bytes + pf->stats.rx_len_errors + pf->stats.rx_undersize + - pf->hw_csum_rx_error + pf->stats.rx_jabber + pf->stats.rx_fragments + pf->stats.rx_oversize;
drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c +1 -1
@@ -1389,7 +1389,7 @@ int mvpp2_ethtool_cls_rule_ins(struct mvpp2_port *port, efs->rule.flow_type =mvpp2_cls_ethtool_flow_to_type (info->fs.flow_type);if (efs->rule.flow_type <0 ) { ret = efs->rule.flow_type; - goto clean_rule; + goto clean_eth_rule; } ret =mvpp2_cls_rfs_parse_rule (&efs->rule);
drivers/net/ethernet/marvell/octeontx2/af/rvu.c +64 -22
154 lines not on this page · raw message
drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h +1 -6
@@ -737,13 +737,8 @@ static inline dma_addr_t otx2_dma_map_page(struct otx2_nic *pfvf, size_t offset, size_t size, enum dma_data_direction dir) { - dma_addr_t iova; - - iova =dma_map_page_attrs (pfvf->dev, page, + return dma_map_page_attrs(pfvf->dev, page,offset ,size ,dir ,DMA_ATTR_SKIP_CPU_SYNC ); -if (unlikely (dma_mapping_error (pfvf->dev, iova))) -return (dma_addr_t )NULL ; -return iova; } static inline void otx2_dma_unmap_page(struct otx2_nic *pfvf,
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +16 -9
@@ -3169,6 +3169,8 @@ mlx5e_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats)mlx5e_queue_update_stats (priv); } +netdev_stats_to_stats64 (stats, &dev->stats); +if (mlx5e_is_uplink_rep (priv)) {struct mlx5e_vport_stats *vstats = &priv->stats.vport;
@@ -3185,19 +3187,21 @@ mlx5e_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats)mlx5e_fold_sw_stats64 (priv, stats); } - stats->rx_missed_errors = priv->stats.qcnt.rx_out_of_buffer; + stats->rx_missed_errors += priv->stats.qcnt.rx_out_of_buffer; + stats->rx_dropped +=PPORT_2863_GET (pstats, if_in_discards); - stats->rx_length_errors = + stats->rx_length_errors +=PPORT_802_3_GET (pstats, a_in_range_length_errors) +PPORT_802_3_GET (pstats, a_out_of_range_length_field) + -PPORT_802_3_GET (pstats, a_frame_too_long_errors); - stats->rx_crc_errors = +PPORT_802_3_GET (pstats, a_frame_too_long_errors) + +VNIC_ENV_GET (&priv->stats.vnic, eth_wqe_too_small); + stats->rx_crc_errors +=PPORT_802_3_GET (pstats, a_frame_check_sequence_errors); - stats->rx_frame_errors =PPORT_802_3_GET (pstats, a_alignment_errors); - stats->tx_aborted_errors =PPORT_2863_GET (pstats, if_out_discards); - stats->rx_errors = stats->rx_length_errors + stats->rx_crc_errors + - stats->rx_frame_errors; - stats->tx_errors = stats->tx_aborted_errors + stats->tx_carrier_errors; + stats->rx_frame_errors +=PPORT_802_3_GET (pstats, a_alignment_errors); + stats->tx_aborted_errors +=PPORT_2863_GET (pstats, if_out_discards); + stats->rx_errors += stats->rx_length_errors + stats->rx_crc_errors + + stats->rx_frame_errors; + stats->tx_errors += stats->tx_aborted_errors + stats->tx_carrier_errors; }static void mlx5e_nic_set_rx_mode (struct mlx5e_priv *priv)
@@ -4856,6 +4860,7 @@ int mlx5e_priv_init(struct mlx5e_priv *priv,void mlx5e_priv_cleanup (struct mlx5e_priv *priv) { +bool destroying =test_bit (MLX5E_STATE_DESTROYING , &priv->state);int i;/* bail if change profile failed and also rollback failed */
@@ -4870,6 +4875,8 @@ void mlx5e_priv_cleanup(struct mlx5e_priv *priv)kvfree (priv->htb.qos_sq_stats);memset (priv,0 ,sizeof (*priv)); +if (destroying)/* restore destroying bit, to allow unload */ +set_bit (MLX5E_STATE_DESTROYING , &priv->state); } struct net_device *
drivers/net/ethernet/mellanox/mlx5/core/en_stats.c +20 -1
@@ -567,17 +567,26 @@ static const struct counter_desc vnic_env_stats_dev_oob_desc[] = { VNIC_ENV_OFF(vport_env.internal_rq_out_of_buffer) }, }; +static const struct counter_desc vnic_env_stats_drop_desc[] = { + {"rx_oversize_pkts_buffer" , +VNIC_ENV_OFF (vport_env.eth_wqe_too_small) }, +}; +#define NUM_VNIC_ENV_STEER_COUNTERS (dev) \ (MLX5_CAP_GEN(dev, nic_receive_steering_discard) ? \ ARRAY_SIZE(vnic_env_stats_steer_desc) : 0)#define NUM_VNIC_ENV_DEV_OOB_COUNTERS (dev) \ (MLX5_CAP_GEN(dev, vnic_env_int_rq_oob) ? \ ARRAY_SIZE(vnic_env_stats_dev_oob_desc) : 0) +#define NUM_VNIC_ENV_DROP_COUNTERS (dev) \ + (MLX5_CAP_GEN(dev, eth_wqe_too_small) ? \ + ARRAY_SIZE(vnic_env_stats_drop_desc) : 0)static MLX5E_DECLARE_STATS_GRP_OP_NUM_STATS (vnic_env) {return NUM_VNIC_ENV_STEER_COUNTERS (priv->mdev) + -NUM_VNIC_ENV_DEV_OOB_COUNTERS (priv->mdev); +NUM_VNIC_ENV_DEV_OOB_COUNTERS (priv->mdev) + +NUM_VNIC_ENV_DROP_COUNTERS (priv->mdev); }static MLX5E_DECLARE_STATS_GRP_OP_FILL_STRS (vnic_env)
@@ -591,6 +600,11 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STRS(vnic_env)for (i =0 ; i <NUM_VNIC_ENV_DEV_OOB_COUNTERS (priv->mdev); i++)strcpy (data + (idx++) *ETH_GSTRING_LEN , vnic_env_stats_dev_oob_desc[i].format); + +for (i =0 ; i <NUM_VNIC_ENV_DROP_COUNTERS (priv->mdev); i++) +strcpy (data + (idx++) *ETH_GSTRING_LEN , + vnic_env_stats_drop_desc[i].format); +return idx; }
@@ -605,6 +619,11 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(vnic_env)for (i =0 ; i <NUM_VNIC_ENV_DEV_OOB_COUNTERS (priv->mdev); i++) data[idx++] =MLX5E_READ_CTR32_BE (priv->stats.vnic.query_vnic_env_out, vnic_env_stats_dev_oob_desc, i); + +for (i =0 ; i <NUM_VNIC_ENV_DROP_COUNTERS (priv->mdev); i++) + data[idx++] =MLX5E_READ_CTR32_BE (priv->stats.vnic.query_vnic_env_out, + vnic_env_stats_drop_desc, i); +return idx; }
drivers/net/ethernet/mellanox/mlx5/core/en_stats.h +4 -0
@@ -256,6 +256,10 @@ struct mlx5e_qcounter_stats {u32 rx_if_down_packets; }; +#define VNIC_ENV_GET (vnic_env_stats, c) \ + MLX5_GET(query_vnic_env_out, (vnic_env_stats)->query_vnic_env_out, \ + vport_env.c) +struct mlx5e_vnic_env_stats {__be64 query_vnic_env_out[MLX5_ST_SZ_QW (query_vnic_env_out)]; };
drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_lgcy.c +1 -1
@@ -188,7 +188,7 @@ int esw_acl_ingress_lgcy_setup(struct mlx5_eswitch *esw,if (IS_ERR (vport->ingress.acl)) { err =PTR_ERR (vport->ingress.acl); vport->ingress.acl =NULL ; -return err; + goto out; } err =esw_acl_ingress_lgcy_groups_create (esw, vport);
drivers/net/ethernet/rocker/rocker_main.c +2 -3
@@ -1525,9 +1525,8 @@ static void rocker_world_port_post_fini(struct rocker_port *rocker_port) {struct rocker_world_ops *wops = rocker_port->rocker->wops; -if (!wops->port_post_fini) -return ; - wops->port_post_fini (rocker_port); +if (wops->port_post_fini) + wops->port_post_fini (rocker_port);kfree (rocker_port->wpriv); }
drivers/net/ethernet/stmicro/stmmac/dwmac5.c +5 -0
@@ -597,6 +597,11 @@ int dwmac5_est_configure(void __iomem *ioaddr, struct stmmac_est *cfg,int i, ret =0x0 ;u32 ctrl; +if (!ptp_rate) { +pr_warn ("Dwmac5: Invalid PTP rate" ); +return -EINVAL ; + } + ret |=dwmac5_est_write (ioaddr,BTR_LOW , cfg->btr[0 ], false); ret |=dwmac5_est_write (ioaddr,BTR_HIGH , cfg->btr[1 ], false); ret |=dwmac5_est_write (ioaddr,TER , cfg->ter, false);
drivers/net/ethernet/stmicro/stmmac/dwxgmac2_core.c +5 -0
@@ -1494,6 +1494,11 @@ static int dwxgmac3_est_configure(void __iomem *ioaddr, struct stmmac_est *cfg,int i, ret =0x0 ;u32 ctrl; +if (!ptp_rate) { +pr_warn ("Dwxgmac2: Invalid PTP rate" ); +return -EINVAL ; + } + ret |=dwxgmac3_est_write (ioaddr,XGMAC_BTR_LOW , cfg->btr[0 ], false); ret |=dwxgmac3_est_write (ioaddr,XGMAC_BTR_HIGH , cfg->btr[1 ], false); ret |=dwxgmac3_est_write (ioaddr,XGMAC_TER , cfg->ter, false);
drivers/net/ipvlan/ipvlan.h +1 -1
@@ -69,7 +69,6 @@ struct ipvl_dev {DECLARE_BITMAP (mac_filters,IPVLAN_MAC_FILTER_SIZE );netdev_features_t sfeatures;u32 msg_enable; -spinlock_t addrs_lock; };struct ipvl_addr {
@@ -90,6 +89,7 @@ struct ipvl_port {struct net_device *dev;possible_net_t pnet;struct hlist_head hlhead[IPVLAN_HASH_SIZE ]; +spinlock_t addrs_lock;/* guards hash-table and addrs */ struct list_head ipvlans;u16 mode;u16 flags;
drivers/net/ipvlan/ipvlan_core.c +7 -9
@@ -104,17 +104,15 @@ void ipvlan_ht_addr_del(struct ipvl_addr *addr)struct ipvl_addr *ipvlan_find_addr (const struct ipvl_dev *ipvlan,const void *iaddr,bool is_v6) { -struct ipvl_addr *addr, *ret =NULL ; +struct ipvl_addr *addr; -rcu_read_lock (); -list_for_each_entry_rcu (addr, &ipvlan->addrs, anode) { -if (addr_equal (is_v6, addr, iaddr)) { - ret = addr; -break ; - } +assert_spin_locked (&ipvlan->port->addrs_lock); + +list_for_each_entry (addr, &ipvlan->addrs, anode) { +if (addr_equal (is_v6, addr, iaddr)) +return addr; } -rcu_read_unlock (); -return ret; +return NULL ; }bool ipvlan_addr_busy (struct ipvl_port *port,void *iaddr,bool is_v6)
drivers/net/ipvlan/ipvlan_main.c +29 -20
173 lines not on this page · raw message
drivers/net/macvlan.c +13 -7
@@ -56,7 +56,7 @@ struct macvlan_port {struct macvlan_source_entry {struct hlist_node hlist; -struct macvlan_dev *vlan; +struct macvlan_dev __rcu *vlan;unsigned char addr[6 +2 ]__aligned(sizeof(u16)) ;struct rcu_head rcu; };
@@ -143,7 +143,7 @@ static struct macvlan_source_entry *macvlan_hash_lookup_source(hlist_for_each_entry_rcu (entry, h, hlist,lockdep_rtnl_is_held ()) {if (ether_addr_equal_64bits (entry->addr, addr) && - entry->vlan == vlan) +rcu_access_pointer (entry->vlan) == vlan)return entry; }return NULL ;
@@ -165,7 +165,7 @@ static int macvlan_hash_add_source(struct macvlan_dev *vlan,return -ENOMEM ;ether_addr_copy (entry->addr, addr); - entry->vlan = vlan; +RCU_INIT_POINTER (entry->vlan, vlan); h = &port->vlan_source_hash[macvlan_eth_hash (addr)];hlist_add_head_rcu (&entry->hlist, h); vlan->macaddr_count++;
@@ -184,6 +184,7 @@ static void macvlan_hash_add(struct macvlan_dev *vlan)static void macvlan_hash_del_source (struct macvlan_source_entry *entry) { +RCU_INIT_POINTER (entry->vlan,NULL );hlist_del_rcu (&entry->hlist);kfree_rcu (entry, rcu); }
@@ -382,7 +383,7 @@ static void macvlan_flush_sources(struct macvlan_port *port,int i;hash_for_each_safe (port->vlan_source_hash, i, next, entry, hlist) -if (entry->vlan == vlan) +if (rcu_access_pointer (entry->vlan) == vlan)macvlan_hash_del_source (entry); vlan->macaddr_count =0 ;
@@ -425,9 +426,14 @@ static bool macvlan_forward_source(struct sk_buff *skb,hlist_for_each_entry_rcu (entry, h, hlist) {if (ether_addr_equal_64bits (entry->addr, addr)) { -if (entry->vlan->flags &MACVLAN_FLAG_NODST ) +struct macvlan_dev *vlan =rcu_dereference (entry->vlan); + +if (!vlan) +continue ; + +if (vlan->flags &MACVLAN_FLAG_NODST ) consume = true; -macvlan_forward_source_one (skb, entry->vlan); +macvlan_forward_source_one (skb, vlan); } }
@@ -1636,7 +1642,7 @@ static int macvlan_fill_info_macaddr(struct sk_buff *skb,struct macvlan_source_entry *entry;hlist_for_each_entry_rcu (entry, h, hlist,lockdep_rtnl_is_held ()) { -if (entry->vlan != vlan) +if (rcu_access_pointer (entry->vlan) != vlan)continue ;if (nla_put (skb,IFLA_MACVLAN_MACADDR ,ETH_ALEN , entry->addr))return 1 ;
drivers/net/team/team.c +15 -8
@@ -1181,10 +1181,6 @@ static int team_port_add(struct team *team, struct net_device *port_dev,return -EPERM ; } - err =team_dev_type_check_change (dev, port_dev); -if (err) -return err; -if (port_dev->flags &IFF_UP ) {NL_SET_ERR_MSG (extack,"Device is up. Set it down before adding it as a team port" ); netdev_err(dev, "Device %s is up. Set it down before adding it as a team port\n",
@@ -1202,10 +1198,16 @@ static int team_port_add(struct team *team, struct net_device *port_dev,INIT_LIST_HEAD (&port->qom_list); port->orig.mtu = port_dev->mtu; - err =dev_set_mtu (port_dev, dev->mtu); -if (err) { -netdev_dbg (dev,"Error %d calling dev_set_mtu\n" , err); - goto err_set_mtu; +/* +* MTU assignment will be handled in team_dev_type_check_change +* if dev and port_dev are of different types +*/ +if (dev->type == port_dev->type) { + err =dev_set_mtu (port_dev, dev->mtu); +if (err) { +netdev_dbg (dev,"Error %d calling dev_set_mtu\n" , err); + goto err_set_mtu; + } }memcpy (port->orig.dev_addr, port_dev->dev_addr, port_dev->addr_len);
@@ -1280,6 +1282,10 @@ static int team_port_add(struct team *team, struct net_device *port_dev, } } + err =team_dev_type_check_change (dev, port_dev); +if (err) + goto err_set_dev_type; +if (dev->flags &IFF_UP ) {netif_addr_lock_bh (dev);dev_uc_sync_multiple (port_dev, dev);
@@ -1298,6 +1304,7 @@ static int team_port_add(struct team *team, struct net_device *port_dev,return 0 ; +err_set_dev_type: err_set_slave_promisc:__team_option_inst_del_port (team, port);
drivers/net/usb/dm9601.c +0 -4
@@ -603,10 +603,6 @@ static const struct usb_device_id products[] = { USB_DEVICE(0x0fe6, 0x8101), /* DM9601 USB to Fast Ethernet Adapter */ .driver_info = (unsigned long )&dm9601_info, }, - { -USB_DEVICE (0x0fe6 ,0x9700 ),/* DM9601 USB to Fast Ethernet Adapter */ - .driver_info = (unsigned long)&dm9601_info, - }, {USB_DEVICE (0x0a46 ,0x9000 ),/* DM9000E */ .driver_info = (unsigned long)&dm9601_info,
drivers/net/usb/usbnet.c +8 -3
@@ -707,6 +707,7 @@ void usbnet_resume_rx(struct usbnet *dev)struct sk_buff *skb;int num =0 ; +local_bh_disable ();clear_bit (EVENT_RX_PAUSED , &dev->flags);while ((skb =skb_dequeue (&dev->rxq_pause)) !=NULL ) {
@@ -715,6 +716,7 @@ void usbnet_resume_rx(struct usbnet *dev) }tasklet_schedule (&dev->bh); +local_bh_enable ();netif_dbg (dev, rx_status, dev->net,"paused rx queue disabled, %d skbs requeued\n" , num);
@@ -1797,9 +1799,12 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)if ((dev->driver_info->flags &FLAG_NOARP ) !=0 ) net->flags |=IFF_NOARP ; -/* maybe the remote can't receive an Ethernet MTU */ -if (net->mtu > (dev->hard_mtu - net->hard_header_len)) - net->mtu = dev->hard_mtu - net->hard_header_len; +if (net->max_mtu > (dev->hard_mtu - net->hard_header_len)) + net->max_mtu = dev->hard_mtu - net->hard_header_len; + +if (net->mtu > net->max_mtu) + net->mtu = net->max_mtu; + }else if (!info->in || !info->out) status =usbnet_get_endpoints (dev, udev);else {
drivers/net/wireless/ath/ath10k/ce.c +8 -8
@@ -1791,8 +1791,8 @@ static void _ath10k_ce_free_pipe(struct ath10k *ar, int ce_id) (ce_state->src_ring->nentries *sizeof (struct ce_desc ) +CE_DESC_RING_ALIGN ), - ce_state->src_ring->base_addr_owner_space, - ce_state->src_ring->base_addr_ce_space); + ce_state->src_ring->base_addr_owner_space_unaligned, + ce_state->src_ring->base_addr_ce_space_unaligned);kfree (ce_state->src_ring); }
@@ -1801,8 +1801,8 @@ static void _ath10k_ce_free_pipe(struct ath10k *ar, int ce_id) (ce_state->dest_ring->nentries *sizeof (struct ce_desc ) +CE_DESC_RING_ALIGN ), - ce_state->dest_ring->base_addr_owner_space, - ce_state->dest_ring->base_addr_ce_space); + ce_state->dest_ring->base_addr_owner_space_unaligned, + ce_state->dest_ring->base_addr_ce_space_unaligned);kfree (ce_state->dest_ring); }
@@ -1822,8 +1822,8 @@ static void _ath10k_ce_free_pipe_64(struct ath10k *ar, int ce_id) (ce_state->src_ring->nentries *sizeof (struct ce_desc_64 ) +CE_DESC_RING_ALIGN ), - ce_state->src_ring->base_addr_owner_space, - ce_state->src_ring->base_addr_ce_space); + ce_state->src_ring->base_addr_owner_space_unaligned, + ce_state->src_ring->base_addr_ce_space_unaligned);kfree (ce_state->src_ring); }
@@ -1832,8 +1832,8 @@ static void _ath10k_ce_free_pipe_64(struct ath10k *ar, int ce_id) (ce_state->dest_ring->nentries *sizeof (struct ce_desc_64 ) +CE_DESC_RING_ALIGN ), - ce_state->dest_ring->base_addr_owner_space, - ce_state->dest_ring->base_addr_ce_space); + ce_state->dest_ring->base_addr_owner_space_unaligned, + ce_state->dest_ring->base_addr_ce_space_unaligned);kfree (ce_state->dest_ring); }
drivers/net/wireless/marvell/mwifiex/11n_rxreorder.c +3 -3
@@ -839,7 +839,7 @@ void mwifiex_update_rxreor_flags(struct mwifiex_adapter *adapter, u8 flags)static void mwifiex_update_ampdu_rxwinsize (struct mwifiex_adapter *adapter,bool coex_flag) { -u8 i; +u8 i, j;u32 rx_win_size;struct mwifiex_private *priv;
@@ -879,8 +879,8 @@ static void mwifiex_update_ampdu_rxwinsize(struct mwifiex_adapter *adapter,if (rx_win_size != priv->add_ba_param.rx_win_size) {if (!priv->media_connected)continue ; -for (i =0 ; i <MAX_NUM_TID ; i++) -mwifiex_11n_delba (priv, i); +for (j =0 ; j <MAX_NUM_TID ; j++) +mwifiex_11n_delba (priv, j); } } }
drivers/net/wireless/rsi/rsi_91x_mac80211.c +1 -0
@@ -2022,6 +2022,7 @@ int rsi_mac80211_attach(struct rsi_common *common) hw->queues =MAX_HW_QUEUES ; hw->extra_tx_headroom =RSI_NEEDED_HEADROOM ; + hw->vif_data_size =sizeof (struct vif_priv ); hw->max_rates =1 ; hw->max_rate_tries =MAX_RETRIES ;
drivers/nfc/virtual_ncidev.c +0 -4
@@ -121,10 +121,6 @@ static ssize_t virtual_ncidev_write(struct file *file,kfree_skb (skb);return -EFAULT ; } -if (strnlen (skb->data, count) != count) { -kfree_skb (skb); -return -EINVAL ; - }nci_recv_frame (ndev, skb);return count;
drivers/nvme/host/fabrics.c +15 -0
@@ -254,6 +254,21 @@ int nvmf_reg_write32(struct nvme_ctrl *ctrl, u32 off, u32 val) }EXPORT_SYMBOL_GPL (nvmf_reg_write32); +int nvmf_subsystem_reset (struct nvme_ctrl *ctrl) +{ +int ret; + +if (!nvme_wait_reset (ctrl)) +return -EBUSY ; + + ret = ctrl->ops->reg_write32 (ctrl,NVME_REG_NSSR ,NVME_SUBSYS_RESET ); +if (ret) +return ret; + +return nvme_try_sched_reset (ctrl); +} +EXPORT_SYMBOL_GPL (nvmf_subsystem_reset); +/** * nvmf_log_connect_error() - Error-parsing-diagnostic print out function for * connect() errors.
drivers/nvme/host/fabrics.h +1 -0
@@ -182,6 +182,7 @@ nvmf_ctlr_matches_baseopts(struct nvme_ctrl *ctrl,int nvmf_reg_read32 (struct nvme_ctrl *ctrl,u32 off,u32 *val);int nvmf_reg_read64 (struct nvme_ctrl *ctrl,u32 off,u64 *val);int nvmf_reg_write32 (struct nvme_ctrl *ctrl,u32 off,u32 val); +int nvmf_subsystem_reset (struct nvme_ctrl *ctrl);int nvmf_connect_admin_queue (struct nvme_ctrl *ctrl);int nvmf_connect_io_queue (struct nvme_ctrl *ctrl,u16 qid);int nvmf_register_transport (struct nvmf_transport_ops *ops);
drivers/nvme/host/fc.c +3 -2
@@ -2410,7 +2410,7 @@ nvme_fc_ctrl_get(struct nvme_fc_ctrl *ctrl)* controller. Called after last nvme_put_ctrl() call */ static void -nvme_fc_nvme_ctrl_freed (struct nvme_ctrl *nctrl) +nvme_fc_free_ctrl (struct nvme_ctrl *nctrl) {struct nvme_fc_ctrl *ctrl =to_fc_ctrl (nctrl);
@@ -3361,7 +3361,8 @@ static const struct nvme_ctrl_ops nvme_fc_ctrl_ops = { .reg_read32 = nvmf_reg_read32, .reg_read64 = nvmf_reg_read64, .reg_write32 = nvmf_reg_write32, - .free_ctrl = nvme_fc_nvme_ctrl_freed, + .subsystem_reset = nvmf_subsystem_reset, + .free_ctrl = nvme_fc_free_ctrl, .submit_async_event = nvme_fc_submit_async_event, .delete_ctrl = nvme_fc_delete_ctrl, .get_address = nvmf_get_address,
drivers/nvme/host/nvme.h +3 -11
@@ -514,6 +514,7 @@ struct nvme_ctrl_ops {int (*reg_read64)(struct nvme_ctrl *ctrl,u32 off,u64 *val);void (*free_ctrl)(struct nvme_ctrl *ctrl);void (*submit_async_event)(struct nvme_ctrl *ctrl); +int (*subsystem_reset)(struct nvme_ctrl *ctrl);void (*delete_ctrl)(struct nvme_ctrl *ctrl);void (*stop_ctrl)(struct nvme_ctrl *ctrl);int (*get_address)(struct nvme_ctrl *ctrl,char *buf,int size);
@@ -583,18 +584,9 @@ int nvme_try_sched_reset(struct nvme_ctrl *ctrl);static inline int nvme_reset_subsystem (struct nvme_ctrl *ctrl) { -int ret; - -if (!ctrl->subsystem) +if (!ctrl->subsystem || !ctrl->ops->subsystem_reset)return -ENOTTY ; -if (!nvme_wait_reset (ctrl)) -return -EBUSY ; - - ret = ctrl->ops->reg_write32 (ctrl,NVME_REG_NSSR ,0x4E564D65 ); -if (ret) -return ret; - -return nvme_try_sched_reset (ctrl); +return ctrl->ops->subsystem_reset (ctrl); }/*
drivers/nvme/host/pci.c +41 -0
59 lines not on this page · raw message
drivers/nvme/host/rdma.c +1 -0
@@ -2287,6 +2287,7 @@ static const struct nvme_ctrl_ops nvme_rdma_ctrl_ops = { .reg_read32 = nvmf_reg_read32, .reg_read64 = nvmf_reg_read64, .reg_write32 = nvmf_reg_write32, + .subsystem_reset = nvmf_subsystem_reset, .free_ctrl = nvme_rdma_free_ctrl, .submit_async_event = nvme_rdma_submit_async_event, .delete_ctrl = nvme_rdma_delete_ctrl,
drivers/nvme/host/tcp.c +1 -0
@@ -2559,6 +2559,7 @@ static const struct nvme_ctrl_ops nvme_tcp_ctrl_ops = { .reg_read32 = nvmf_reg_read32, .reg_read64 = nvmf_reg_read64, .reg_write32 = nvmf_reg_write32, + .subsystem_reset = nvmf_subsystem_reset, .free_ctrl = nvme_tcp_free_ctrl, .submit_async_event = nvme_tcp_submit_async_event, .delete_ctrl = nvme_tcp_delete_ctrl,
drivers/nvme/target/tcp.c +20 -8
@@ -945,8 +945,7 @@ static int nvmet_tcp_handle_h2c_data_pdu(struct nvmet_tcp_queue *queue)if (unlikely (data->ttag >= queue->nr_cmds)) {pr_err ("queue %d: received out of bound ttag %u, nr_cmds %u\n" , queue->idx, data->ttag, queue->nr_cmds); -nvmet_tcp_fatal_error (queue); -return -EPROTO ; + goto err_proto; } cmd = &queue->cmds[data->ttag]; }else {
@@ -957,9 +956,7 @@ static int nvmet_tcp_handle_h2c_data_pdu(struct nvmet_tcp_queue *queue)pr_err ("ttag %u unexpected data offset %u (expected %u)\n" , data->ttag,le32_to_cpu (data->data_offset), cmd->rbytes_done); -/* FIXME: use path and transport errors */ -nvmet_tcp_fatal_error (queue); -return -EPROTO ; + goto err_proto; } exp_data_len = le32_to_cpu(data->hdr.plen) -
@@ -972,9 +969,19 @@ static int nvmet_tcp_handle_h2c_data_pdu(struct nvmet_tcp_queue *queue) cmd->pdu_len == 0 || cmd->pdu_len > NVMET_TCP_MAXH2CDATA)) {pr_err ("H2CData PDU len %u is invalid\n" , cmd->pdu_len); -/* FIXME: use proper transport errors */ -nvmet_tcp_fatal_error (queue); -return -EPROTO ; + goto err_proto; + } +/* +* Ensure command data structures are initialized. We must check both +* cmd->req.sg and cmd->iov because they can have different NULL states: +* - Uninitialized commands: both NULL +* - READ commands: cmd->req.sg allocated, cmd->iov NULL +* - WRITE commands: both allocated +*/ +if (unlikely (!cmd->req.sg || !cmd->iov)) { +pr_err ("queue %d: H2CData PDU received for invalid command state (ttag %u)\n" , + queue->idx, data->ttag); + goto err_proto; } cmd->pdu_recv =0 ;nvmet_tcp_map_pdu_iovec (cmd);
@@ -982,6 +989,11 @@ static int nvmet_tcp_handle_h2c_data_pdu(struct nvmet_tcp_queue *queue) queue->rcv_state =NVMET_TCP_RECV_DATA ;return 0 ; + +err_proto: +/* FIXME: use proper transport errors */ +nvmet_tcp_fatal_error (queue); +return -EPROTO ; }static int nvmet_tcp_done_recv_pdu (struct nvmet_tcp_queue *queue)
drivers/of/base.c +6 -2
@@ -2018,13 +2018,17 @@ void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align)) end--; len = end - start; -if (kstrtoint (end,10 , &id) <0 ) +if (kstrtoint (end,10 , &id) <0 ) { +of_node_put (np);continue ; + }/* Allocate an alias_prop with enough space for the stem */ ap = dt_alloc(sizeof(*ap) + len + 1, __alignof__(*ap)); -if (!ap) +if (!ap) { +of_node_put (np);continue ; + }memset (ap,0 ,sizeof (*ap) + len +1 ); ap->alias = start;of_alias_add (ap, np, id, start, len);
drivers/of/platform.c +1 -1
@@ -533,7 +533,7 @@ static int __init of_platform_default_populate_init(void) node =of_find_node_by_path ("/firmware" );if (node) { -of_platform_populate (node,NULL ,NULL ,NULL ); +of_platform_default_populate (node,NULL ,NULL );of_node_put (node); }
drivers/pci/Kconfig +0 -6
@@ -176,12 +176,6 @@ config PCI_P2PDMA P2P DMA transactions must be between devices behind the same root port. - Enabling this option will reduce the entropy of x86 KASLR memory - regions. For example - on a 46 bit system, the entropy goes down - from 16 bits to 15 bits. The actual reduction in entropy depends - on the physical address bits, on processor features, kernel config - (5 level page table) and physical memory present on the system. - If unsure, say N. config PCI_LABEL
drivers/phy/broadcom/phy-bcm-ns-usb3.c +1 -1
@@ -203,7 +203,7 @@ static int bcm_ns_usb3_mdio_probe(struct mdio_device *mdiodev) usb3->dev = dev; usb3->mdiodev = mdiodev; - usb3->family = (enum bcm_ns_family )device_get_match_data (dev); + usb3->family = (unsigned long )device_get_match_data (dev); syscon_np =of_parse_phandle (dev->of_node,"usb3-dmp-syscon" ,0 ); err =of_address_to_resource (syscon_np,0 , &res);
drivers/phy/rockchip/phy-rockchip-inno-usb2.c +8 -4
@@ -689,17 +689,20 @@ static void rockchip_chg_detect_work(struct work_struct *work) container_of(work, struct rockchip_usb2phy_port, chg_work.work);struct rockchip_usb2phy *rphy =dev_get_drvdata (rport->phy->dev.parent);struct regmap *base =get_reg_base (rphy); -bool is_dcd, tmout, vout; +bool is_dcd, tmout, vout, vbus_attach;unsigned long delay; + vbus_attach =property_enabled (rphy->grf, &rport->port_cfg->utmi_bvalid); +dev_dbg (&rport->phy->dev,"chg detection work state = %d\n" , rphy->chg_state);switch (rphy->chg_state) {case USB_CHG_STATE_UNDEFINED : -if (!rport->suspended) +if (!rport->suspended && !vbus_attach)rockchip_usb2phy_power_off (rport->phy);/* put the controller in non-driving mode */ -property_enable (base, &rphy->phy_cfg->chg_det.opmode, false); +if (!vbus_attach) +property_enable (base, &rphy->phy_cfg->chg_det.opmode, false);/* Start DCD processing stage 1 */ rockchip_chg_enable_dcd (rphy, true); rphy->chg_state =USB_CHG_STATE_WAIT_FOR_DCD ;
@@ -763,7 +766,8 @@ static void rockchip_chg_detect_work(struct work_struct *work) fallthrough;case USB_CHG_STATE_DETECTED :/* put the controller in normal mode */ -property_enable (base, &rphy->phy_cfg->chg_det.opmode, true); +if (!vbus_attach) +property_enable (base, &rphy->phy_cfg->chg_det.opmode, true);rockchip_usb2phy_otg_sm_work (&rport->otg_sm_work.work);dev_dbg (&rport->phy->dev,"charger = %s\n" ,chg_to_string (rphy->chg_type));
drivers/phy/st/phy-stm32-usbphyc.c +1 -1
@@ -530,7 +530,7 @@ static int stm32_usbphyc_probe(struct platform_device *pdev) } ret =of_property_read_u32 (child,"reg" , &index); -if (ret || index > usbphyc->nphys) { +if (ret || index >= usbphyc->nphys) {dev_err (&phy->dev,"invalid reg property: %d\n" , ret);if (!ret) ret = -EINVAL ;
drivers/phy/tegra/xusb-tegra186.c +3 -0
@@ -84,6 +84,7 @@#define XUSB_PADCTL_USB2_BIAS_PAD_CTL0 0x284#define BIAS_PAD_PD BIT(11)#define HS_SQUELCH_LEVEL (x) (((x) & 0x7) << 0) +#define HS_DISCON_LEVEL (x) (((x) & 0x7) << 3)#define XUSB_PADCTL_USB2_BIAS_PAD_CTL1 0x288#define USB2_TRK_START_TIMER (x) (((x) & 0x7f) << 12)
@@ -601,6 +602,8 @@ static void tegra186_utmi_bias_pad_power_on(struct tegra_xusb_padctl *padctl) value &= ~BIAS_PAD_PD ; value &= ~HS_SQUELCH_LEVEL (~0 ); value |=HS_SQUELCH_LEVEL (priv->calib.hs_squelch); + value &= ~HS_DISCON_LEVEL (~0 ); + value |=HS_DISCON_LEVEL (0x7 );padctl_writel (padctl, value,XUSB_PADCTL_USB2_BIAS_PAD_CTL0 );udelay (1 );
drivers/pinctrl/meson/pinctrl-meson.c +1 -1
@@ -617,7 +617,7 @@ static int meson_gpiolib_register(struct meson_pinctrl *pc) pc->chip.set = meson_gpio_set; pc->chip.base =-1 ; pc->chip.ngpio = pc->data->num_pins; - pc->chip.can_sleep = false; + pc->chip.can_sleep = true; pc->chip.of_node = pc->of_node; pc->chip.of_gpio_n_cells =2 ;
drivers/pinctrl/qcom/pinctrl-lpass-lpi.c +17 -0
@@ -484,6 +484,22 @@ static const struct pinconf_ops lpi_gpio_pinconf_ops = { .pin_config_group_set = lpi_config_set, }; +static int lpi_gpio_get_direction (struct gpio_chip *chip,unsigned int pin) +{ +unsigned long config =pinconf_to_config_packed (PIN_CONFIG_OUTPUT ,0 ); +struct lpi_pinctrl *state =gpiochip_get_data (chip); +unsigned long arg; +int ret; + + ret =lpi_config_get (state->ctrl, pin, &config); +if (ret) +return ret; + + arg =pinconf_to_config_argument (config); + +return arg ?GPIO_LINE_DIRECTION_OUT :GPIO_LINE_DIRECTION_IN ; +} +static int lpi_gpio_direction_input (struct gpio_chip *chip,unsigned int pin) {struct lpi_pinctrl *state =gpiochip_get_data (chip);
@@ -582,6 +598,7 @@ static void lpi_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)#endif static const struct gpio_chip lpi_gpio_template = { + .get_direction = lpi_gpio_get_direction, .direction_input = lpi_gpio_direction_input, .direction_output = lpi_gpio_direction_output, .get = lpi_gpio_get,
drivers/ptp/ptp_chardev.c +29 -8
@@ -103,14 +103,16 @@ int ptp_set_pinfunc(struct ptp_clock *ptp, unsigned int pin,return 0 ; } -int ptp_open (struct posix_clock *pc,fmode_t fmode) +int ptp_open (struct posix_clock_context *pccontext,fmode_t fmode) {return 0 ; } -long ptp_ioctl (struct posix_clock *pc,unsigned int cmd,unsigned long arg) +long ptp_ioctl (struct posix_clock_context *pccontext,unsigned int cmd, +unsigned long arg) { - struct ptp_clock *ptp = container_of(pc, struct ptp_clock, clock); +struct ptp_clock *ptp = + container_of(pccontext->clk, struct ptp_clock, clock);struct ptp_sys_offset_extended *extoff =NULL ;struct ptp_sys_offset_precise precise_offset;struct system_device_crosststamp xtstamp;
@@ -148,6 +150,10 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg)case PTP_EXTTS_REQUEST :case PTP_EXTTS_REQUEST2 : +if ((pccontext->fp->f_mode &FMODE_WRITE ) ==0 ) { + err = -EACCES ; +break ; + }memset (&req,0 ,sizeof (req)); if (copy_from_user(&req.extts, (void __user *)arg,
@@ -189,6 +195,10 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg)case PTP_PEROUT_REQUEST :case PTP_PEROUT_REQUEST2 : +if ((pccontext->fp->f_mode &FMODE_WRITE ) ==0 ) { + err = -EACCES ; +break ; + }memset (&req,0 ,sizeof (req)); if (copy_from_user(&req.perout, (void __user *)arg,
@@ -257,6 +267,10 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg)case PTP_ENABLE_PPS :case PTP_ENABLE_PPS2 : +if ((pccontext->fp->f_mode &FMODE_WRITE ) ==0 ) { + err = -EACCES ; +break ; + }memset (&req,0 ,sizeof (req));if (!capable (CAP_SYS_TIME ))
@@ -395,6 +409,10 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg)case PTP_PIN_SETFUNC :case PTP_PIN_SETFUNC2 : +if ((pccontext->fp->f_mode &FMODE_WRITE ) ==0 ) { + err = -EACCES ; +break ; + }if (copy_from_user (&pd, (void __user *)arg,sizeof (pd))) { err = -EFAULT ;break ;
@@ -434,9 +452,11 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg)return err; } -__poll_t ptp_poll (struct posix_clock *pc,struct file *fp,poll_table *wait) +__poll_t ptp_poll (struct posix_clock_context *pccontext,struct file *fp, +poll_table *wait) { - struct ptp_clock *ptp = container_of(pc, struct ptp_clock, clock); +struct ptp_clock *ptp = + container_of(pccontext->clk, struct ptp_clock, clock);poll_wait (fp, &ptp->tsev_wq, wait);
@@ -445,10 +465,11 @@ __poll_t ptp_poll(struct posix_clock *pc, struct file *fp, poll_table *wait)#define EXTTS_BUFSIZE (PTP_BUF_TIMESTAMPS * sizeof(struct ptp_extts_event)) -ssize_t ptp_read (struct posix_clock *pc, -uint rdflags,char __user *buf,size_t cnt) +ssize_t ptp_read (struct posix_clock_context *pccontext,uint rdflags, +char __user *buf,size_t cnt) { - struct ptp_clock *ptp = container_of(pc, struct ptp_clock, clock); +struct ptp_clock *ptp = + container_of(pccontext->clk, struct ptp_clock, clock);struct timestamp_event_queue *queue = &ptp->tsevq;struct ptp_extts_event *event;unsigned long flags;
drivers/ptp/ptp_private.h +9 -7
@@ -125,16 +125,18 @@ extern struct class *ptp_class;int ptp_set_pinfunc (struct ptp_clock *ptp,unsigned int pin,enum ptp_pin_function func,unsigned int chan); -long ptp_ioctl (struct posix_clock *pc, -unsigned int cmd,unsigned long arg); +long ptp_ioctl (struct posix_clock_context *pccontext,unsigned int cmd, +unsigned long arg); -int ptp_open (struct posix_clock *pc,fmode_t fmode); +int ptp_open (struct posix_clock_context *pccontext,fmode_t fmode); -ssize_t ptp_read (struct posix_clock *pc, -uint flags,char __user *buf,size_t cnt); +int ptp_release (struct posix_clock_context *pccontext); -__poll_t ptp_poll (struct posix_clock *pc, -struct file *fp,poll_table *wait); +ssize_t ptp_read (struct posix_clock_context *pccontext,uint flags,char __user *buf, +size_t cnt); + +__poll_t ptp_poll (struct posix_clock_context *pccontext,struct file *fp, +poll_table *wait);/* * see ptp_sysfs.c
drivers/scsi/be2iscsi/be_mgmt.c +1 -0
@@ -1025,6 +1025,7 @@ unsigned int beiscsi_boot_get_sinfo(struct beiscsi_hba *phba) &nonemb_cmd->dma, GFP_KERNEL);if (!nonemb_cmd->va) { +free_mcc_wrb (ctrl, tag);mutex_unlock (&ctrl->mbox_lock);return 0 ; }
drivers/scsi/qla2xxx/qla_os.c +1 -1
@@ -4431,7 +4431,7 @@ qla2x00_mem_alloc(struct qla_hw_data *ha, uint16_t req_len, uint16_t rsp_len, fail_elsrej:dma_pool_destroy (ha->purex_dma_pool); fail_flt: -dma_free_coherent (&ha->pdev->dev,SFP_DEV_SIZE , +dma_free_coherent (&ha->pdev->dev,sizeof (struct qla_flt_header ) +FLT_REGIONS_SIZE , ha->flt, ha->flt_dma); fail_flt_buffer:
drivers/scsi/storvsc_drv.c +2 -1
@@ -1199,7 +1199,7 @@ static void storvsc_on_io_completion(struct storvsc_device *stor_device,* The current SCSI handling on the host side does * not correctly handle: * INQUIRY command with page code parameter set to 0x80 -* MODE_SENSE command with cmd[2] == 0x1c +* MODE_SENSE and MODE_SENSE_10 command with cmd[2] == 0x1c * MAINTENANCE_IN is not supported by HyperV FC passthrough * * Setup srb and scsi status so this won't be fatal.
@@ -1209,6 +1209,7 @@ static void storvsc_on_io_completion(struct storvsc_device *stor_device,if ((stor_pkt->vm_srb.cdb[0 ] ==INQUIRY ) || (stor_pkt->vm_srb.cdb[0 ] ==MODE_SENSE ) || + (stor_pkt->vm_srb.cdb[0 ] ==MODE_SENSE_10 ) || (stor_pkt->vm_srb.cdb[0 ] ==MAINTENANCE_IN &&hv_dev_is_fc (device))) { vstor_packet->vm_srb.scsi_status =0 ;
drivers/slimbus/core.c +12 -7
@@ -378,6 +378,8 @@ struct slim_device *slim_get_device(struct slim_controller *ctrl, sbdev =slim_alloc_device (ctrl, e_addr,NULL );if (!sbdev)return ERR_PTR (-ENOMEM ); + +get_device (&sbdev->dev); }return sbdev;
@@ -496,21 +498,24 @@ int slim_device_report_present(struct slim_controller *ctrl,if (ctrl->sched.clk_state !=SLIM_CLK_ACTIVE ) {dev_err (ctrl->dev,"slim ctrl not active,state:%d, ret:%d\n" , ctrl->sched.clk_state, ret); - goto slimbus_not_active; + goto out_put_rpm; } sbdev =slim_get_device (ctrl, e_addr); -if (IS_ERR (sbdev)) -return -ENODEV ; +if (IS_ERR (sbdev)) { + ret = -ENODEV ; + goto out_put_rpm; + }if (sbdev->is_laddr_valid) { *laddr = sbdev->laddr; -return 0 ; + ret =0 ; + }else { + ret =slim_device_alloc_laddr (sbdev, true); } - ret =slim_device_alloc_laddr (sbdev, true); - -slimbus_not_active: +put_device (&sbdev->dev); +out_put_rpm:pm_runtime_mark_last_busy (ctrl->dev);pm_runtime_put_autosuspend (ctrl->dev);return ret;
drivers/staging/iio/adc/ad7280a.c +157 -132
4 lines not on this page · raw message
drivers/w1/slaves/w1_therm.c +23 -46
69 lines not on this page · raw message
fs/nfs/flexfilelayout/flexfilelayoutdev.c +1 -1
Lines of this file are not shown. View the raw message.
include/net/cfg80211.h +91 -4
95 lines not on this page · raw message
kernel/time/posix-clock.c +37 -16
53 lines not on this page · raw message
mm/ksm.c +105 -10
115 lines not on this page · raw message
net/ipv4/fou.c deleted +0 -1315
1,315 lines not on this page · raw message
net/ipv4/fou_core.c new file +1285 -0
1,285 lines not on this page · raw message
net/ipv4/fou_nl.c new file +48 -0
48 lines not on this page · raw message
net/wireless/core.c +130 -1
131 lines not on this page · raw message
tools/testing/selftests/ptp/testptp.c +192 -18
210 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.