Linux 5.10.122
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.122 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/ABI/testing/sysfs-ata | 11 +- Makefile | 2 arch/arm64/net/bpf_jit_comp.c | 1 arch/m68k/Kconfig.machine | 1 arch/m68k/include/asm/pgtable_no.h | 3 arch/mips/kernel/mips-cpc.c | 1 arch/powerpc/Kconfig | 1 arch/powerpc/include/asm/ppc-opcode.h | 2 arch/powerpc/include/asm/thread_info.h | 10 +- arch/powerpc/kernel/idle.c | 2 arch/powerpc/kernel/idle_6xx.S | 2 arch/powerpc/kernel/l2cr_6xx.S | 6 - arch/powerpc/kernel/ptrace/ptrace.c | 21 +++- arch/powerpc/kernel/swsusp_32.S | 2 arch/powerpc/kernel/swsusp_asm64.S | 2 arch/powerpc/mm/mmu_context.c | 2 arch/powerpc/platforms/powermac/cache.S | 4 arch/riscv/kernel/efi.c | 2 arch/s390/crypto/aes_s390.c | 4 arch/s390/mm/gmap.c | 14 +++ arch/x86/include/asm/cpufeature.h | 2 drivers/ata/libata-transport.c | 2 drivers/ata/pata_octeon_cf.c | 3 drivers/base/bus.c | 4 drivers/base/dd.c | 10 -- drivers/block/nbd.c | 37 +++++--- drivers/bus/ti-sysc.c | 4 drivers/clocksource/timer-oxnas-rps.c | 2 drivers/clocksource/timer-riscv.c | 2 drivers/clocksource/timer-sp804.c | 10 +- drivers/dma/idxd/dma.c | 23 +++++ drivers/dma/xilinx/zynqmp_dma.c | 5 - drivers/extcon/extcon-ptn5150.c | 11 ++ drivers/extcon/extcon.c | 29 +++--- drivers/firmware/dmi-sysfs.c | 2 drivers/firmware/stratix10-svc.c | 12 +- drivers/gpio/gpio-pca953x.c | 19 ++-- drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 42 ++++++++- drivers/gpu/drm/drm_atomic_helper.c | 16 ++- drivers/gpu/drm/imx/ipuv3-crtc.c | 2 drivers/gpu/drm/radeon/radeon_connectors.c | 4 drivers/hwtracing/coresight/coresight-cpu-debug.c | 7 - drivers/i2c/busses/i2c-cadence.c | 12 ++ drivers/iio/adc/ad7124.c | 1 drivers/iio/adc/sc27xx_adc.c | 20 ++-- drivers/iio/adc/stmpe-adc.c | 8 - drivers/iio/common/st_sensors/st_sensors_core.c | 24 +++-- drivers/iio/dummy/iio_simple_dummy.c | 20 ++-- drivers/iio/proximity/vl53l0x-i2c.c | 7 - drivers/input/mouse/bcm5974.c | 7 + drivers/interconnect/core.c | 7 + drivers/interconnect/qcom/sc7180.c | 21 ---- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 2 drivers/iommu/arm/arm-smmu/arm-smmu.c | 5 - drivers/md/md.c | 15 ++- drivers/md/raid0.c | 31 +++--- drivers/misc/cardreader/rtsx_usb.c | 1 drivers/misc/fastrpc.c | 9 + drivers/misc/lkdtm/bugs.c | 5 + drivers/misc/lkdtm/usercopy.c | 17 +++ drivers/mmc/core/block.c | 3 drivers/mtd/ubi/fastmap-wl.c | 69 ++++++++++----- drivers/mtd/ubi/fastmap.c | 11 -- drivers/mtd/ubi/ubi.h | 4 drivers/mtd/ubi/vmt.c | 1 drivers/mtd/ubi/wl.c | 19 ++-- drivers/net/dsa/lantiq_gswip.c | 4 drivers/net/dsa/mv88e6xxx/chip.c | 1 drivers/net/ethernet/altera/altera_tse_main.c | 6 + drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 8 - drivers/net/ethernet/mediatek/mtk_eth_soc.c | 3 drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 2 drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c | 7 + drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 5 + drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 35 ++++++- drivers/net/ethernet/mellanox/mlx5/core/steering/fs_dr.c | 9 - drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c | 4 drivers/net/ethernet/sfc/efx_channels.c | 6 - drivers/net/ethernet/sfc/net_driver.h | 2 drivers/net/ethernet/ti/am65-cpsw-nuss.c | 3 drivers/net/phy/dp83867.c | 29 ++++++ drivers/net/phy/mdio_bus.c | 1 drivers/nfc/st21nfca/se.c | 53 ++++++----- drivers/pci/controller/dwc/pcie-qcom.c | 6 - drivers/pcmcia/Kconfig | 2 drivers/phy/qualcomm/phy-qcom-qmp.c | 2 drivers/pwm/pwm-lp3943.c | 1 drivers/rpmsg/qcom_smd.c | 4 drivers/rtc/rtc-mt6397.c | 2 drivers/scsi/myrb.c | 11 +- drivers/scsi/sd.c | 1 drivers/soc/rockchip/grf.c | 2 drivers/staging/fieldbus/anybuss/host.c | 2 drivers/staging/greybus/audio_codec.c | 4 drivers/staging/rtl8192e/rtllib_softmac.c | 2 drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c | 2 drivers/staging/rtl8712/os_intfs.c | 1 drivers/staging/rtl8712/usb_intf.c | 12 +- drivers/staging/rtl8712/usb_ops.c | 27 +++-- drivers/tty/goldfish.c | 2 drivers/tty/n_tty.c | 38 ++++++++ drivers/tty/serial/8250/8250_fintek.c | 8 - drivers/tty/serial/digicolor-usart.c | 2 drivers/tty/serial/fsl_lpuart.c | 24 ----- drivers/tty/serial/icom.c | 2 drivers/tty/serial/meson_uart.c | 13 ++ drivers/tty/serial/msm_serial.c | 5 + drivers/tty/serial/owl-uart.c | 1 drivers/tty/serial/rda-uart.c | 2 drivers/tty/serial/sa1100.c | 4 drivers/tty/serial/serial_txx9.c | 2 drivers/tty/serial/sh-sci.c | 6 + drivers/tty/serial/sifive.c | 8 + drivers/tty/serial/st-asc.c | 4 drivers/tty/serial/stm32-usart.c | 15 ++- drivers/tty/synclink_gt.c | 2 drivers/tty/sysrq.c | 13 +- drivers/usb/core/hcd-pci.c | 4 drivers/usb/dwc2/gadget.c | 1 drivers/usb/dwc3/dwc3-pci.c | 2 drivers/usb/host/isp116x-hcd.c | 6 - drivers/usb/host/oxu210hp-hcd.c | 2 drivers/usb/musb/omap2430.c | 1 drivers/usb/storage/karma.c | 15 +-- drivers/usb/typec/mux.c | 14 ++- drivers/usb/usbip/stub_dev.c | 2 drivers/usb/usbip/stub_rx.c | 2 drivers/vhost/vringh.c | 10 +- drivers/video/fbdev/hyperv_fb.c | 19 ---- drivers/video/fbdev/pxa3xx-gcu.c | 12 +- drivers/watchdog/rti_wdt.c | 2 drivers/watchdog/ts4800_wdt.c | 5 - drivers/watchdog/wdat_wdt.c | 1 drivers/xen/xlate_mmu.c | 1 fs/afs/dir.c | 5 - fs/ceph/xattr.c | 10 +- fs/cifs/cifsfs.c | 2 fs/cifs/cifsfs.h | 2 fs/cifs/cifsglob.h | 4 fs/cifs/misc.c | 27 +++-- fs/cifs/smb2ops.c | 7 + fs/cifs/smb2pdu.c | 3 fs/f2fs/checkpoint.c | 4 fs/jffs2/fs.c | 1 fs/kernfs/dir.c | 31 ++++-- fs/nfs/nfs4proc.c | 4 fs/zonefs/super.c | 11 +- include/linux/iio/common/st_sensors.h | 3 include/linux/jump_label.h | 4 include/linux/mlx5/mlx5_ifc.h | 5 - include/linux/nodemask.h | 38 ++++---- include/net/flow_offload.h | 1 include/net/netfilter/nf_tables.h | 1 include/net/netfilter/nf_tables_offload.h | 2 include/net/sch_generic.h | 42 +++------ kernel/bpf/core.c | 14 +-- kernel/trace/trace.c | 13 ++ lib/Makefile | 2 lib/nodemask.c | 4 net/core/flow_offload.c | 6 + net/ipv4/ip_gre.c | 11 +- net/ipv4/tcp_input.c | 11 +- net/ipv4/tcp_output.c | 4 net/ipv4/xfrm4_protocol.c | 1 net/ipv6/seg6_hmac.c | 1 net/key/af_key.c | 10 +- net/netfilter/nf_tables_api.c | 52 ++++------- net/netfilter/nf_tables_offload.c | 23 ++++- net/netfilter/nft_nat.c | 3 net/smc/smc_cdc.c | 2 net/sunrpc/xdr.c | 6 + net/sunrpc/xprtrdma/rpc_rdma.c | 5 + net/tipc/bearer.c | 3 net/unix/af_unix.c | 2 scripts/gdb/linux/config.py | 6 - scripts/mod/modpost.c | 5 - sound/pci/hda/patch_conexant.c | 7 + sound/pci/hda/patch_realtek.c | 1 sound/soc/fsl/fsl_sai.h | 4 tools/perf/builtin-c2c.c | 4 tools/testing/selftests/netfilter/nft_nat.sh | 43 +++++++++ 181 files changed, 1050 insertions(+), 569 deletions(-)
Adrian Hunter (1):
mmc: block: Fix CQE recovery reset success
Alexander Lobakin (1):
modpost: fix removing numeric suffixes
Alexandru Tachici (1):
iio: adc: ad7124: Remove shift from scan_type
Alexey Kardashevskiy (1):
powerpc/mm: Switch obsolete dssall to .long
Andre Przywara (1):
clocksource/drivers/sp804: Avoid error on multiple instances
Baokun Li (1):
jffs2: fix memory leak in jffs2_do_fill_super
Bjorn Andersson (1):
usb: typec: mux: Check dev_set_name() return value
Brian Norris (2):
drm/bridge: analogix_dp: Support PSR-exit to disable transition drm/atomic: Force bridge self-refresh-exit on CRTC switch
Cameron Berkenpas (1):
ALSA: hda/realtek: Fix for quirk to enable speaker output on the Lenovo Yoga DuetITL 2021
Changbin Du (1):
sysrq: do not omit current cpu when showing backtrace of all active CPUs
Changcheng Liu (1):
net/mlx5: correct ECE offset in query qp output
Christian Borntraeger (1):
s390/gmap: voluntarily schedule during key setting
Christophe JAILLET (1):
staging: fieldbus: Fix the error handling path in anybuss_host_common_probe()
Chuck Lever (1):
SUNRPC: Fix the calculation of xdr->end in xdr_get_next_encode_buffer()
Cixi Geng (2):
iio: adc: sc27xx: fix read big scale voltage not right
iio: adc: sc27xx: Fine tune the scale calibration values
Damien Le Moal (2):
scsi: sd: Fix potential NULL pointer dereference
zonefs: fix handling of explicit_open option on mount
Dan Carpenter (1):
net: ethernet: mtk_eth_soc: out of bounds read in mtk_hwlro_get_fdir_entry()
Daniel Gibson (1):
tty: n_tty: Restore EOF push handling behavior
Dave Jiang (2):
dmaengine: idxd: set DMA_INTERRUPT cap bit
dmaengine: idxd: add missing callback function to support DMA_INTERRUPT
David Howells (1):
afs: Fix infinite loop found by xfstest generic/676
Dongliang Mu (1):
f2fs: remove WARN_ON in f2fs_is_valid_blkaddr
Duoming Zhou (4):
drivers: staging: rtl8192u: Fix deadlock in ieee80211_beacons_stop()
drivers: staging: rtl8192e: Fix deadlock in rtllib_beacons_stop()
drivers: tty: serial: Fix deadlock in sa1100_set_termios()
drivers: usb: host: Fix deadlock in oxu_bus_suspend()
Eric Dumazet (3):
tcp: tcp_rtx_synack() can be called from process context bpf, arm64: Clear prog->jited_len along prog->jited
tcp: fix tcp_mtup_probe_success vs wrong snd_cwnd
Evan Green (1):
USB: hcd-pci: Fully suspend across freeze/thaw cycle
Feras Daoud (1):
net/mlx5: Rearm the FW tracer after each tracer event
Florian Westphal (1):
netfilter: nat: really support inet nat without l3 address
Gal Pressman (1):
net/mlx4_en: Fix wrong return value on ioctl EEPROM query failure
Gong Yuanjun (2):
mips: cpc: Fix refcount leak in mips_cpc_default_phys_base drm/radeon: fix a possible null pointer dereference
Greg Kroah-Hartman (1):
Linux 5.10.122
Greg Ungerer (2):
m68knommu: set ZERO_PAGE() to the allocated zeroed page
m68knommu: fix undefined reference to `_init_sp'
Guangguan Wang (1):
net/smc: fixes for converting from "struct smc_cdc_tx_pend **" to "struct smc_wr_tx_pend_priv *"
Guilherme G. Piccoli (1):
coresight: cpu-debug: Replace mutex with mutex_trylock on panic notifier
Guoju Fang (1):
net: sched: add barrier to fix packet stuck problem for lockless qdisc
Guoqing Jiang (1):
md: protect md_unregister_thread from reentrancy
Haibo Chen (1):
gpio: pca953x: use the correct register address to do regcache sync
Hangyu Hua (1):
usb: usbip: fix a refcount leak in stub_probe()
Hannes Reinecke (1):
scsi: myrb: Fix up null pointer access on myrb_cleanup()
Hao Luo (1):
kernfs: Separate kernfs_pr_cont_buf and rename_lock.
Heinrich Schuchardt (1):
riscv: read-only pages should not be writable
Hoang Le (1):
tipc: check attribute length for bearer name
Huang Guobin (1):
tty: Fix a possible resource leak in icom_probe
Ilpo Järvinen (8):
serial: 8250_fintek: Check SER_RS485_RTS_* only with RS485
serial: digicolor-usart: Don't allow CS5-6
serial: rda-uart: Don't allow CS5-6
serial: txx9: Don't allow CS5-6
serial: sh-sci: Don't allow CS5-6
serial: sifive: Sanitize CSIZE and c_iflag
serial: st-asc: Sanitize CSIZE and correct PARENB for CS7
serial: stm32-usart: Correct CSIZE, bits, and parity
Jakob Koschel (1):
staging: greybus: codecs: fix type confusion of list iterator variable
Jann Horn (1):
s390/crypto: fix scatterwalk_unmap() callers in AES-GCM
Jiasheng Jiang (1):
lkdtm/bugs: Check for the NULL pointer after calling kmalloc
Johan Hovold (2):
phy: qcom-qmp: fix pipe-clock imbalance on power-on failure
PCI: qcom: Fix pipe clock imbalance
John Ogness (2):
serial: meson: acquire port->lock in startup()
serial: msm_serial: disable interrupts in __msm_console_write()
Jun Miao (1):
tracing: Fix sleeping function called from invalid context on RT kernel
Kees Cook (2):
lkdtm/usercopy: Expand size of "out of frame" object
nodemask: Fix return values to be unsigned
Kinglong Mee (1):
xprtrdma: treat all calls not a bcall when bc_serv is NULL
Krzysztof Kozlowski (3):
rpmsg: qcom_smd: Fix irq_of_parse_and_map() return value
rpmsg: qcom_smd: Fix returning 0 if irq_of_parse_and_map() fails clocksource/drivers/oxnas-rps: Fix irq_of_parse_and_map() return value
Kuan-Ying Lee (1):
scripts/gdb: change kernel config dumping method
Kuniyuki Iwashima (1):
af_unix: Fix a data-race in unix_dgram_peer_wake_me().
Leo Yan (1):
perf c2c: Fix sorting in percent_rmt_hitm_cmp()
Leon Romanovsky (1):
net/mlx5: Don't use already freed action pointer
Li Jun (1):
extcon: ptn5150: Add queue work sync before driver release
Lin Ma (1):
USB: storage: karma: fix rio_karma_init return
Linus Torvalds (1):
drm: imx: fix compiler warning with gcc-12
Liu Xinpeng (1):
watchdog: wdat_wdt: Stop watchdog when rebooting the system
Lucas Tanure (1):
i2c: cadence: Increase timeout per message if necessary
Maciej W. Rozycki (1):
serial: sifive: Report actual baud base rather than fixed 115200
Marek Szyprowski (1):
usb: dwc2: gadget: don't reset gadget's driver->bus
Mark Bloch (1):
net/mlx5: fs, fail conflicting actions
Mark-PK Tsai (1):
tracing: Avoid adding tracer option before update_tracer_options
Martin Faltesek (3):
nfc: st21nfca: fix incorrect validating logic in EVT_TRANSACTION
nfc: st21nfca: fix memory leaks in EVT_TRANSACTION handling
nfc: st21nfca: fix incorrect sizing calculations in EVT_TRANSACTION
Martin Habets (1):
sfc: fix considering that all channels have TX queues
Masahiro Yamada (5):
xen: unexport __init-annotated xen_xlate_map_ballooned_pages()
net: mdio: unexport __init-annotated mdio_bus_init()
net: xfrm: unexport __init-annotated xfrm4_protocol_init()
net: ipv6: unexport __init-annotated seg6_hmac_init()
modpost: fix undefined behavior of is_arm_mapping_symbol()
Masami Hiramatsu (1):
bootconfig: Make the bootconfig.o as a normal object file
Mathias Nyman (1):
Input: bcm5974 - set missing URB_NO_TRANSFER_DMA_MAP urb flag
Maxim Mikityanskiy (1):
net/mlx5e: Update netdev features after changing XDP state
Menglong Dong (1):
bpf: Fix probe read error in ___bpf_prog_run()
Miaoqian Lin (13):
tty: serial: owl: Fix missing clk_disable_unprepare() in owl_uart_probe
usb: musb: Fix missing of_node_put() in omap2430_probe
iio: adc: stmpe-adc: Fix wait_for_completion_timeout return value check
iio: proximity: vl53l0x: Fix return value check of wait_for_completion_timeout
soc: rockchip: Fix refcount leak in rockchip_grf_init
firmware: dmi-sysfs: Fix memory leak in dmi_sysfs_register_handle
watchdog: rti-wdt: Fix pm_runtime_get_sync() error checking
watchdog: ts4800_wdt: Fix refcount leak in ts4800_wdt_probe
net: ethernet: ti: am65-cpsw-nuss: Fix some refcount leaks
net: dsa: mv88e6xxx: Fix refcount leak in mv88e6xxx_mdios_register
ata: pata_octeon_cf: Fix refcount leak in octeon_cf_probe
net: dsa: lantiq_gswip: Fix refcount leak in gswip_gphy_fw_list
net: altera: Fix refcount leak in altera_tse_mdio_create
Michael Ellerman (2):
powerpc/kasan: Force thread size increase with KASAN powerpc/32: Fix overread/overwrite of thread_struct via ptrace
Michal Kubecek (1):
Revert "net: af_key: add check for pfkey_broadcast in function pfkey_process"
Miquel Raynal (1):
iio: st_sensors: Add a local lock for protecting odr
Niels Dossche (1):
usb: usbip: add missing device lock on tweak configuration cmd
Olivier Matz (2):
ixgbe: fix bcast packets Rx on VF after promisc removal
ixgbe: fix unexpected VLAN Rx in promisc mode on VF
Pablo Neira Ayuso (5):
netfilter: nf_tables: delete flowtable hooks via transaction list
netfilter: nf_tables: always initialize flowtable hook list in transaction
netfilter: nf_tables: release new hooks on unsupported flowtable flags
netfilter: nf_tables: memleak flow rule from commit path
netfilter: nf_tables: bail out early if hardware offload is not supported
Pascal Hambourg (1):
md/raid0: Ignore RAID0 layout if the second zone has only one device
Paulo Alcantara (1):
cifs: fix reconnect on smb3 mount types
Peter Zijlstra (2):
x86/cpu: Elide KCSAN for cpu_has() and friends jump_label,noinstr: Avoid instrumentation for JUMP_LABEL=n builds
Radhey Shyam Pandey (1):
dmaengine: zynqmp_dma: In struct zynqmp_dma_chan fix desc_size data type
Randy Dunlap (1):
pcmcia: db1xxx_ss: restrict to MIPS_DB1XXX boards
Samuel Holland (1):
clocksource/drivers/riscv: Events are stopped during CPU suspend
Saravana Kannan (1):
driver core: Fix wait_for_device_probe() & deferred_probe_timeout interaction
Saurabh Sengar (1):
video: fbdev: hyperv_fb: Allow resolutions with size > 64 MB for Gen1
Schspa Shi (1):
driver: base: fix UAF when driver_attach failed
Sergey Shtylyov (1):
ata: libata-transport: fix {dma|pio|xfer}_mode sysfs files
Shengjiu Wang (1):
ASoC: fsl_sai: Fix FSL_SAI_xDR/xFR definition
Sherry Sun (1):
tty: serial: fsl_lpuart: fix potential bug when using both of_alias_get_id and ida_simple_get
Shuah Khan (1):
misc: rtsx: set NULL intfdata when probe fails
Shyam Prasad N (1):
cifs: return errors during session setup during reconnects
Stephen Boyd (2):
interconnect: qcom: sc7180: Drop IP0 interconnects
interconnect: Restore sync state by ignoring ipa-virt in provider count
Steve French (1):
cifs: version operations for smb20 unneeded when legacy support disabled
Tan Tee Min (1):
net: phy: dp83867: retrigger SGMII AN when link change
Tony Lindgren (1):
bus: ti-sysc: Fix warnings for unbind for serial
Trond Myklebust (1):
NFSv4: Don't hold the layoutget locks across multiple RPC calls
Uwe Kleine-König (1):
pwm: lp3943: Fix duty calculation in case period was clamped
Venky Shankar (1):
ceph: allow ceph.dir.rctime xattr to be updatable
Vincent Ray (1):
net: sched: fixed barrier to prevent skbuff sticking in qdisc backlog
Wang Cheng (2):
staging: rtl8712: fix uninit-value in usb_read8() and friends
staging: rtl8712: fix uninit-value in r871xu_drv_init()
Wang Weiyang (1):
tty: goldfish: Use tty_port_destroy() to destroy port
Willem de Bruijn (1):
ip_gre: test csum_start instead of transport header
Xiaoke Wang (2):
iio: dummy: iio_simple_dummy: check the return value of kstrdup()
staging: rtl8712: fix a potential memory leak in r871xu_drv_init()
Xiaomeng Tong (2):
misc: fastrpc: fix an incorrect NULL check on list iterator
firmware: stratix10-svc: fix a missing check on list iterator
Xie Yongji (1):
vringh: Fix loop descriptors check in the indirect cases
Yang Yingliang (4):
rtc: mt6397: check return value after calling platform_get_resource() iommu/arm-smmu: fix possible null-ptr-deref in arm_smmu_device_probe() iommu/arm-smmu-v3: check return value after calling platform_get_resource()
video: fbdev: pxa3xx-gcu: release the resources correctly in pxa3xx_gcu_probe/remove()
Yu Kuai (3):
nbd: call genl_unregister_family() first in nbd_cleanup()
nbd: fix race between nbd_alloc_config() and module removal
nbd: fix io hung while disconnecting device
Yu Xiao (1):
nfp: only report pause frame configuration for physical device
Zhang Wensheng (1):
driver core: fix deadlock in __device_attach
Zhen Ni (1):
USB: host: isp116x: check return value after calling platform_get_resource()
Zheng Yongjun (1):
usb: dwc3: pci: Fix pm_runtime_get_sync() error checking
Zheyu Ma (1):
tty: synclink_gt: Fix null-pointer-dereference in slgt_clean()
Zhihao Cheng (2):
ubi: fastmap: Fix high cpu usage of ubi_bgt by making sure wl_pool not empty
ubi: ubi_create_volume: Fix use-after-free when volume creation failed
bumwoo lee (1):
extcon: Modify extcon device to be created after driver data is set
huangwenhui (1):
ALSA: hda/conexant - Fix loopback issue with CX20632
Íñigo Huguet (1):
sfc: fix wrong tx channel offset with efx_separate_tx_channels
Greg Kroah-Hartman
maintainerDocumentation/ABI/testing/sysfs-ata +6 -5
@@ -107,13 +107,14 @@ Description: described in ATA8 7.16 and 7.17. Only valid if the device is not a PM. - pio_mode: (RO) Transfer modes supported by the device when - in PIO mode. Mostly used by PATA device. + pio_mode: (RO) PIO transfer mode used by the device. + Mostly used by PATA devices. - xfer_mode: (RO) Current transfer mode + xfer_mode: (RO) Current transfer mode. Mostly used by + PATA devices. - dma_mode: (RO) Transfer modes supported by the device when - in DMA mode. Mostly used by PATA device. + dma_mode: (RO) DMA transfer mode used by the device. + Mostly used by PATA devices. class: (RO) Device class. Can be "ata" for disk, "atapi" for packet device, "pmp" for PM, or
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 121 +SUBLEVEL = 122 EXTRAVERSION = NAME = Dare mighty things
arch/arm64/net/bpf_jit_comp.c +1 -0
@@ -1111,6 +1111,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)bpf_jit_binary_free (header); prog->bpf_func =NULL ; prog->jited =0 ; + prog->jited_len =0 ; goto out_off; }bpf_jit_binary_lock_ro (header);
arch/m68k/Kconfig.machine +1 -0
@@ -321,6 +321,7 @@ comment "Machine Options" config UBOOT bool "Support for U-Boot command line parameters" + depends on COLDFIRE help If you say Y here kernel will try to collect command line parameters from the initial u-boot stack.
arch/m68k/include/asm/pgtable_no.h +2 -1
@@ -42,7 +42,8 @@ extern void paging_init(void);* ZERO_PAGE is a global shared page that is always zero: used * for zero-mapped memory areas etc.. */ -#define ZERO_PAGE (vaddr) (virt_to_page(0)) +extern void *empty_zero_page; +#define ZERO_PAGE (vaddr) (virt_to_page(empty_zero_page))/* * All 32bit addresses are effectively valid for vmalloc...
arch/mips/kernel/mips-cpc.c +1 -0
@@ -27,6 +27,7 @@ phys_addr_t __weak mips_cpc_default_phys_base(void) cpc_node =of_find_compatible_node (of_root,NULL ,"mti,mips-cpc" );if (cpc_node) { err =of_address_to_resource (cpc_node,0 , &res); +of_node_put (cpc_node);if (!err)return res.start; }
arch/powerpc/Kconfig +0 -1
@@ -786,7 +786,6 @@ config THREAD_SHIFT range 13 15 default "15" if PPC_256K_PAGES default "14" if PPC64 - default "14" if KASAN default "13" help Used to define the stack size. The default is almost always what you
arch/powerpc/include/asm/ppc-opcode.h +2 -0
@@ -212,6 +212,7 @@#define PPC_INST_COPY 0x7c20060c#define PPC_INST_DCBA 0x7c0005ec#define PPC_INST_DCBA_MASK 0xfc0007fe +#define PPC_INST_DSSALL 0x7e00066c#define PPC_INST_ISEL 0x7c00001e#define PPC_INST_ISEL_MASK 0xfc00003e#define PPC_INST_LSWI 0x7c0004aa
@@ -517,6 +518,7 @@#define PPC_DCBZL (a, b) stringify_in_c(.long PPC_RAW_DCBZL(a, b))#define PPC_DIVDE (t, a, b) stringify_in_c(.long PPC_RAW_DIVDE(t, a, b))#define PPC_DIVDEU (t, a, b) stringify_in_c(.long PPC_RAW_DIVDEU(t, a, b)) +#define PPC_DSSALL stringify_in_c(.long PPC_INST_DSSALL)#define PPC_LQARX (t, a, b, eh) stringify_in_c(.long PPC_RAW_LQARX(t, a, b, eh))#define PPC_LDARX (t, a, b, eh) stringify_in_c(.long PPC_RAW_LDARX(t, a, b, eh))#define PPC_LWARX (t, a, b, eh) stringify_in_c(.long PPC_RAW_LWARX(t, a, b, eh))
arch/powerpc/include/asm/thread_info.h +8 -2
@@ -14,10 +14,16 @@#ifdef __KERNEL__ -#if defined(CONFIG_VMAP_STACK ) &&CONFIG_THREAD_SHIFT <PAGE_SHIFT +#ifdef CONFIG_KASAN +#define MIN_THREAD_SHIFT (CONFIG_THREAD_SHIFT + 1) +#else +#define MIN_THREAD_SHIFT CONFIG_THREAD_SHIFT +#endif + +#if defined(CONFIG_VMAP_STACK ) &&MIN_THREAD_SHIFT <PAGE_SHIFT #define THREAD_SHIFT PAGE_SHIFT#else -#define THREAD_SHIFT CONFIG_THREAD_SHIFT +#define THREAD_SHIFT MIN_THREAD_SHIFT#endif #define THREAD_SIZE (1 << THREAD_SHIFT)
arch/powerpc/kernel/idle.c +1 -1
@@ -82,7 +82,7 @@ void power4_idle(void)return ;if (cpu_has_feature (CPU_FTR_ALTIVEC )) - asmvolatile ("DSSALL ; sync" :::"memory" ); + asmvolatile (PPC_DSSALL " ; sync" :::"memory" );power4_idle_nap ();
arch/powerpc/kernel/idle_6xx.S +1 -1
@@ -129,7 +129,7 @@ BEGIN_FTR_SECTION END_FTR_SECTION_IFCLR(CPU_FTR_NO_DPM) mtspr SPRN_HID0,r4 BEGIN_FTR_SECTION - DSSALL + PPC_DSSALL sync END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) lwz r8,TI_LOCAL_FLAGS(r2) /* set napping bit */
arch/powerpc/kernel/l2cr_6xx.S +3 -3
@@ -96,7 +96,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_L2CR) /* Stop DST streams */ BEGIN_FTR_SECTION - DSSALL + PPC_DSSALL sync END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC)
@@ -292,7 +292,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_L3CR) isync /* Stop DST streams */ - DSSALL + PPC_DSSALL sync /* Get the current enable bit of the L3CR into r4 */
@@ -401,7 +401,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_L3CR) _GLOBAL(__flush_disable_L1) /* Stop pending alitvec streams and memory accesses */ BEGIN_FTR_SECTION - DSSALL + PPC_DSSALL END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) sync
arch/powerpc/kernel/ptrace/ptrace.c +17 -4
@@ -75,8 +75,13 @@ long arch_ptrace(struct task_struct *child, long request,flush_fp_to_thread (child);if (fpidx < (PT_FPSCR -PT_FPR0 )) -memcpy (&tmp, &child->thread.TS_FPR (fpidx), -sizeof (long )); +if (IS_ENABLED (CONFIG_PPC32 )) { +// On 32-bit the index we are passed refers to 32-bit words + tmp = ((u32 *)child->thread.fp_state.fpr)[fpidx]; + }else { +memcpy (&tmp, &child->thread.TS_FPR (fpidx), +sizeof (long )); + }else tmp = child->thread.fp_state.fpscr; }
@@ -108,8 +113,13 @@ long arch_ptrace(struct task_struct *child, long request,flush_fp_to_thread (child);if (fpidx < (PT_FPSCR -PT_FPR0 )) -memcpy (&child->thread.TS_FPR (fpidx), &data, -sizeof (long )); +if (IS_ENABLED (CONFIG_PPC32 )) { +// On 32-bit the index we are passed refers to 32-bit words + ((u32 *)child->thread.fp_state.fpr)[fpidx] = data; + }else { +memcpy (&child->thread.TS_FPR (fpidx), &data, +sizeof (long )); + }else child->thread.fp_state.fpscr = data; ret =0 ;
@@ -478,4 +488,7 @@ void __init pt_regs_check(void)* real registers. */ BUILD_BUG_ON (PT_DSCR <sizeof (struct user_pt_regs ) /sizeof (unsigned long )); + +// ptrace_get/put_fpr() rely on PPC32 and VSX being incompatible +BUILD_BUG_ON (IS_ENABLED (CONFIG_PPC32 ) &&IS_ENABLED (CONFIG_VSX )); }
arch/powerpc/kernel/swsusp_32.S +1 -1
@@ -181,7 +181,7 @@ _GLOBAL(swsusp_arch_resume) #ifdef CONFIG_ALTIVEC /* Stop pending alitvec streams and memory accesses */ BEGIN_FTR_SECTION - DSSALL + PPC_DSSALL END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) #endif sync
arch/powerpc/kernel/swsusp_asm64.S +1 -1
@@ -142,7 +142,7 @@ END_FW_FTR_SECTION_IFCLR(FW_FEATURE_LPAR) _GLOBAL(swsusp_arch_resume) /* Stop pending alitvec streams and memory accesses */ BEGIN_FTR_SECTION - DSSALL + PPC_DSSALL END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) sync
arch/powerpc/mm/mmu_context.c +1 -1
@@ -79,7 +79,7 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next,* context */ if (cpu_has_feature (CPU_FTR_ALTIVEC )) - asmvolatile ("dssall" ); + asm volatile (PPC_DSSALL);if (new_on_cpu)radix_kvm_prefetch_workaround (next);
arch/powerpc/platforms/powermac/cache.S +2 -2
@@ -48,7 +48,7 @@ flush_disable_75x: /* Stop DST streams */ BEGIN_FTR_SECTION - DSSALL + PPC_DSSALL sync END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC)
@@ -197,7 +197,7 @@ flush_disable_745x: isync /* Stop prefetch streams */ - DSSALL + PPC_DSSALL sync /* Disable L2 prefetching */
arch/riscv/kernel/efi.c +1 -1
@@ -65,7 +65,7 @@ static int __init set_permissions(pte_t *ptep, unsigned long addr, void *data)if (md->attribute &EFI_MEMORY_RO ) { val =pte_val (pte) & ~_PAGE_WRITE; - val =pte_val (pte) | _PAGE_READ; + val |= _PAGE_READ; pte =__pte (val); }if (md->attribute &EFI_MEMORY_XP ) {
arch/s390/crypto/aes_s390.c +2 -2
@@ -700,7 +700,7 @@ static inline void _gcm_sg_unmap_and_advance(struct gcm_sg_walk *gw, unsigned int nbytes) { gw->walk_bytes_remain -= nbytes; -scatterwalk_unmap (&gw->walk); +scatterwalk_unmap (gw->walk_ptr);scatterwalk_advance (&gw->walk, nbytes);scatterwalk_done (&gw->walk,0 , gw->walk_bytes_remain); gw->walk_ptr =NULL ;
@@ -775,7 +775,7 @@ static int gcm_out_walk_go(struct gcm_sg_walk *gw, unsigned int minbytesneeded) goto out; } -scatterwalk_unmap (&gw->walk); +scatterwalk_unmap (gw->walk_ptr); gw->walk_ptr =NULL ; gw->ptr = gw->buf;
arch/s390/mm/gmap.c +14 -0
@@ -2596,6 +2596,18 @@ static int __s390_enable_skey_pte(pte_t *pte, unsigned long addr,return 0 ; } +/* +* Give a chance to schedule after setting a key to 256 pages. +* We only hold the mm lock, which is a rwsem and the kvm srcu. +* Both can sleep. +*/ +static int __s390_enable_skey_pmd (pmd_t *pmd,unsigned long addr, +unsigned long next,struct mm_walk *walk) +{ +cond_resched (); +return 0 ; +} +static int __s390_enable_skey_hugetlb (pte_t *pte,unsigned long addr,unsigned long hmask,unsigned long next,struct mm_walk *walk)
@@ -2618,12 +2630,14 @@ static int __s390_enable_skey_hugetlb(pte_t *pte, unsigned long addr, end = start +HPAGE_SIZE -1 ;__storage_key_init_range (start, end);set_bit (PG_arch_1, &page->flags); +cond_resched ();return 0 ; }static const struct mm_walk_ops enable_skey_walk_ops = { .hugetlb_entry = __s390_enable_skey_hugetlb, .pte_entry = __s390_enable_skey_pte, + .pmd_entry = __s390_enable_skey_pmd, };int s390_enable_skey (void )
arch/x86/include/asm/cpufeature.h +1 -1
@@ -49,7 +49,7 @@ extern const char * const x86_power_flags[32];extern const char *const x86_bug_flags[NBUGINTS *32 ];#define test_cpu_cap (c, bit) \ - test_bit(bit, (unsigned long *)((c)->x86_capability)) + arch_test_bit(bit, (unsigned long *)((c)->x86_capability))/* * There are 32 bits/features in each mask word. The high bits
drivers/ata/libata-transport.c +1 -1
@@ -196,7 +196,7 @@ static struct { { XFER_PIO_0, "XFER_PIO_0" }, { XFER_PIO_SLOW, "XFER_PIO_SLOW" } }; -ata_bitfield_name_match (xfer,ata_xfer_names) +ata_bitfield_name_search (xfer, ata_xfer_names)/* * ATA Port attributes
drivers/ata/pata_octeon_cf.c +3 -0
@@ -888,12 +888,14 @@ static int octeon_cf_probe(struct platform_device *pdev)int i; res_dma =platform_get_resource (dma_dev,IORESOURCE_MEM ,0 );if (!res_dma) { +put_device (&dma_dev->dev);of_node_put (dma_node);return -EINVAL ; } cf_port->dma_base = (u64 )devm_ioremap (&pdev->dev, res_dma->start,resource_size (res_dma));if (!cf_port->dma_base) { +put_device (&dma_dev->dev);of_node_put (dma_node);return -EINVAL ; }
@@ -903,6 +905,7 @@ static int octeon_cf_probe(struct platform_device *pdev) irq = i; irq_handler = octeon_cf_interrupt; } +put_device (&dma_dev->dev); }of_node_put (dma_node); }
drivers/base/bus.c +3 -1
@@ -621,7 +621,7 @@ int bus_add_driver(struct device_driver *drv)if (drv->bus->p->drivers_autoprobe) { error =driver_attach (drv);if (error) - goto out_unregister; + goto out_del_list; }module_add_driver (drv->owner, drv);
@@ -648,6 +648,8 @@ int bus_add_driver(struct device_driver *drv)return 0 ; +out_del_list: +klist_del (&priv->knode_bus); out_unregister:kobject_put (&priv->kobj);/* drv->p is freed in driver_release() */
drivers/base/dd.c +4 -6
@@ -250,7 +250,6 @@ DEFINE_SHOW_ATTRIBUTE(deferred_devs);int driver_deferred_probe_timeout;EXPORT_SYMBOL_GPL (driver_deferred_probe_timeout); -static DECLARE_WAIT_QUEUE_HEAD (probe_timeout_waitqueue);static int __init deferred_probe_timeout_setup (char *str) {
@@ -302,7 +301,6 @@ static void deferred_probe_timeout_work_func(struct work_struct *work)list_for_each_entry (p, &deferred_probe_pending_list, deferred_probe)dev_info (p->device,"deferred probe pending\n" );mutex_unlock (&deferred_probe_mutex); -wake_up_all (&probe_timeout_waitqueue); } static DECLARE_DELAYED_WORK(deferred_probe_timeout_work, deferred_probe_timeout_work_func);
@@ -706,9 +704,6 @@ int driver_probe_done(void)*/ void wait_for_device_probe (void ) { -/* wait for probe timeout */ -wait_event (probe_timeout_waitqueue, !driver_deferred_probe_timeout); -/* wait for the deferred probe workqueue to finish */ flush_work (&deferred_probe_work);
@@ -897,6 +892,7 @@ static void __device_attach_async_helper(void *_dev, async_cookie_t cookie)static int __device_attach (struct device *dev,bool allow_async) {int ret =0 ; +bool async = false;device_lock (dev);if (dev->p->dead) {
@@ -935,7 +931,7 @@ static int __device_attach(struct device *dev, bool allow_async)*/ dev_dbg (dev,"scheduling asynchronous probe\n" );get_device (dev); -async_schedule_dev (__device_attach_async_helper, dev); + async = true; }else {pm_request_idle (dev); }
@@ -945,6 +941,8 @@ static int __device_attach(struct device *dev, bool allow_async) } out_unlock:device_unlock (dev); +if (async) +async_schedule_dev (__device_attach_async_helper, dev);return ret; }
drivers/block/nbd.c +26 -11
@@ -1359,7 +1359,7 @@ static int nbd_start_device_ioctl(struct nbd_device *nbd, struct block_device *bstatic void nbd_clear_sock_ioctl (struct nbd_device *nbd,struct block_device *bdev) { -sock_shutdown (nbd); +nbd_clear_sock (nbd);__invalidate_device (bdev, true);nbd_bdev_reset (bdev); if (test_and_clear_bit(NBD_RT_HAS_CONFIG_REF,
@@ -1472,15 +1472,20 @@ static struct nbd_config *nbd_alloc_config(void) {struct nbd_config *config; +if (!try_module_get (THIS_MODULE )) +return ERR_PTR (-ENODEV ); + config =kzalloc (sizeof (struct nbd_config ),GFP_NOFS ); -if (!config) -return NULL ; +if (!config) { +module_put (THIS_MODULE ); +return ERR_PTR (-ENOMEM ); + } +atomic_set (&config->recv_threads,0 );init_waitqueue_head (&config->recv_wq);init_waitqueue_head (&config->conn_wait); config->blksize =NBD_DEF_BLKSIZE ;atomic_set (&config->live_connections,0 ); -try_module_get (THIS_MODULE );return config; }
@@ -1507,12 +1512,13 @@ static int nbd_open(struct block_device *bdev, fmode_t mode)mutex_unlock (&nbd->config_lock); goto out; } - config = nbd->config =nbd_alloc_config (); -if (!config) { - ret = -ENOMEM ; + config =nbd_alloc_config (); +if (IS_ERR (config)) { + ret =PTR_ERR (config);mutex_unlock (&nbd->config_lock); goto out; } + nbd->config = config;refcount_set (&nbd->config_refs,1 );refcount_inc (&nbd->refs);mutex_unlock (&nbd->config_lock);
@@ -1934,13 +1940,14 @@ static int nbd_genl_connect(struct sk_buff *skb, struct genl_info *info)nbd_put (nbd);return -EINVAL ; } - config = nbd->config =nbd_alloc_config (); -if (!nbd->config) { + config =nbd_alloc_config (); +if (IS_ERR (config)) {mutex_unlock (&nbd->config_lock);nbd_put (nbd);printk (KERN_ERR "nbd: couldn't allocate config\n" ); -return -ENOMEM ; +return PTR_ERR (config); } + nbd->config = config;refcount_set (&nbd->config_refs,1 );set_bit (NBD_RT_BOUND , &config->runtime_flags);
@@ -2461,6 +2468,12 @@ static void __exit nbd_cleanup(void)struct nbd_device *nbd;LIST_HEAD (del_list); +/* +* Unregister netlink interface prior to waiting +* for the completion of netlink commands. +*/ +genl_unregister_family (&nbd_genl_family); +nbd_dbg_close ();mutex_lock (&nbd_index_mutex);
@@ -2470,13 +2483,15 @@ static void __exit nbd_cleanup(void)while (!list_empty (&del_list)) { nbd = list_first_entry(&del_list, struct nbd_device, list);list_del_init (&nbd->list); +if (refcount_read (&nbd->config_refs)) +printk (KERN_ERR "nbd: possibly leaking nbd_config (ref %d)\n" , +refcount_read (&nbd->config_refs));if (refcount_read (&nbd->refs) !=1 )printk (KERN_ERR "nbd: possibly leaking a device\n" );nbd_put (nbd); }idr_destroy (&nbd_index_idr); -genl_unregister_family (&nbd_genl_family);unregister_blkdev (NBD_MAJOR ,"nbd" ); }
drivers/bus/ti-sysc.c +3 -1
@@ -3291,7 +3291,9 @@ static int sysc_remove(struct platform_device *pdev)struct sysc *ddata =platform_get_drvdata (pdev);int error; -cancel_delayed_work_sync (&ddata->idle_work); +/* Device can still be enabled, see deferred idle quirk in probe */ +if (cancel_delayed_work_sync (&ddata->idle_work)) +ti_sysc_idle (&ddata->idle_work.work); error =pm_runtime_get_sync (ddata->dev);if (error <0 ) {
drivers/clocksource/timer-oxnas-rps.c +1 -1
@@ -236,7 +236,7 @@ static int __init oxnas_rps_timer_init(struct device_node *np) } rps->irq =irq_of_parse_and_map (np,0 ); -if (rps->irq <0 ) { +if (!rps->irq) { ret = -EINVAL ; goto err_iomap; }
drivers/clocksource/timer-riscv.c +1 -1
@@ -32,7 +32,7 @@ static int riscv_clock_next_event(unsigned long delta,static unsigned int riscv_clock_event_irq; static DEFINE_PER_CPU(struct clock_event_device, riscv_clock_event) = { .name ="riscv_timer_clockevent" , - .features =CLOCK_EVT_FEAT_ONESHOT , + .features =CLOCK_EVT_FEAT_ONESHOT |CLOCK_EVT_FEAT_C3STOP , .rating =100 , .set_next_event = riscv_clock_next_event, };
drivers/clocksource/timer-sp804.c +5 -5
@@ -274,6 +274,11 @@ static int __init sp804_of_init(struct device_node *np, struct sp804_timer *timestruct clk *clk1, *clk2;const char *name =of_get_property (np,"compatible" ,NULL ); +if (initialized) { +pr_debug ("%pOF: skipping further SP804 timer device\n" , np); +return 0 ; + } + base =of_iomap (np,0 );if (!base)return -ENXIO ;
@@ -285,11 +290,6 @@ static int __init sp804_of_init(struct device_node *np, struct sp804_timer *timewritel (0 , timer1_base + timer->ctrl);writel (0 , timer2_base + timer->ctrl); -if (initialized || !of_device_is_available (np)) { - ret = -EINVAL ; - goto err; - } - clk1 =of_clk_get (np,0 );if (IS_ERR (clk1)) clk1 =NULL ;
drivers/dma/idxd/dma.c +23 -0
@@ -82,6 +82,27 @@ static inline void idxd_prep_desc_common(struct idxd_wq *wq, hw->int_handle = wq->vec_ptr; } +static struct dma_async_tx_descriptor * +idxd_dma_prep_interrupt (struct dma_chan *c,unsigned long flags) +{ +struct idxd_wq *wq =to_idxd_wq (c); +u32 desc_flags; +struct idxd_desc *desc; + +if (wq->state !=IDXD_WQ_ENABLED ) +return NULL ; + +op_flag_setup (flags, &desc_flags); + desc =idxd_alloc_desc (wq,IDXD_OP_BLOCK ); +if (IS_ERR (desc)) +return NULL ; + +idxd_prep_desc_common (wq, desc->hw,DSA_OPCODE_NOOP , +0 ,0 ,0 , desc->compl_dma, desc_flags); + desc->txd.flags = flags; +return &desc->txd; +} +static struct dma_async_tx_descriptor *idxd_dma_submit_memcpy (struct dma_chan *c,dma_addr_t dma_dest,dma_addr_t dma_src,size_t len,unsigned long flags)
@@ -188,10 +209,12 @@ int idxd_register_dma_device(struct idxd_device *idxd)INIT_LIST_HEAD (&dma->channels); dma->dev = dev; +dma_cap_set (DMA_INTERRUPT , dma->cap_mask);dma_cap_set (DMA_PRIVATE , dma->cap_mask);dma_cap_set (DMA_COMPLETION_NO_ORDER , dma->cap_mask); dma->device_release = idxd_dma_release; + dma->device_prep_dma_interrupt = idxd_dma_prep_interrupt;if (idxd->hw.opcap.bits[0 ] &IDXD_OPCAP_MEMMOVE ) {dma_cap_set (DMA_MEMCPY , dma->cap_mask); dma->device_prep_dma_memcpy = idxd_dma_submit_memcpy;
drivers/dma/xilinx/zynqmp_dma.c +3 -2
@@ -232,7 +232,7 @@ struct zynqmp_dma_chan {bool is_dmacoherent;struct tasklet_struct tasklet;bool idle; -u32 desc_size; +size_t desc_size;bool err;u32 bus_width;u32 src_burst_len;
@@ -490,7 +490,8 @@ static int zynqmp_dma_alloc_chan_resources(struct dma_chan *dchan) } chan->desc_pool_v =dma_alloc_coherent (chan->dev, - (2 * chan->desc_size *ZYNQMP_DMA_NUM_DESCS ), + (2 *ZYNQMP_DMA_DESC_SIZE (chan) * +ZYNQMP_DMA_NUM_DESCS ), &chan->desc_pool_p,GFP_KERNEL );if (!chan->desc_pool_v)return -ENOMEM ;
drivers/extcon/extcon-ptn5150.c +11 -0
@@ -194,6 +194,13 @@ static int ptn5150_init_dev_type(struct ptn5150_info *info)return 0 ; } +static void ptn5150_work_sync_and_put (void *data) +{ +struct ptn5150_info *info = data; + +cancel_work_sync (&info->irq_work); +} +static int ptn5150_i2c_probe (struct i2c_client *i2c) {struct device *dev = &i2c->dev;
@@ -284,6 +291,10 @@ static int ptn5150_i2c_probe(struct i2c_client *i2c)if (ret)return -EINVAL ; + ret =devm_add_action_or_reset (dev, ptn5150_work_sync_and_put, info); +if (ret) +return ret; +/* * Update current extcon state if for example OTG connection was there * before the probe
drivers/extcon/extcon.c +17 -12
@@ -1230,19 +1230,14 @@ int extcon_dev_register(struct extcon_dev *edev) edev->dev.type = &edev->extcon_dev_type; } - ret =device_register (&edev->dev); -if (ret) { -put_device (&edev->dev); - goto err_dev; - } -spin_lock_init (&edev->lock); - edev->nh =devm_kcalloc (&edev->dev, edev->max_supported, -sizeof (*edev->nh),GFP_KERNEL ); -if (!edev->nh) { - ret = -ENOMEM ; -device_unregister (&edev->dev); - goto err_dev; +if (edev->max_supported) { + edev->nh =kcalloc (edev->max_supported,sizeof (*edev->nh), +GFP_KERNEL ); +if (!edev->nh) { + ret = -ENOMEM ; + goto err_alloc_nh; + } }for (index =0 ; index < edev->max_supported; index++)
@@ -1253,6 +1248,12 @@ int extcon_dev_register(struct extcon_dev *edev)dev_set_drvdata (&edev->dev, edev); edev->state =0 ; + ret =device_register (&edev->dev); +if (ret) { +put_device (&edev->dev); + goto err_dev; + } +mutex_lock (&extcon_dev_list_lock);list_add (&edev->entry, &extcon_dev_list);mutex_unlock (&extcon_dev_list_lock);
@@ -1260,6 +1261,9 @@ int extcon_dev_register(struct extcon_dev *edev)return 0 ; err_dev: +if (edev->max_supported) +kfree (edev->nh); +err_alloc_nh:if (edev->max_supported)kfree (edev->extcon_dev_type.groups); err_alloc_groups:
@@ -1320,6 +1324,7 @@ void extcon_dev_unregister(struct extcon_dev *edev)if (edev->max_supported) {kfree (edev->extcon_dev_type.groups);kfree (edev->cables); +kfree (edev->nh); }put_device (&edev->dev);
drivers/firmware/dmi-sysfs.c +1 -1
@@ -603,7 +603,7 @@ static void __init dmi_sysfs_register_handle(const struct dmi_header *dh, "%d-%d", dh->type, entry->instance);if (*ret) { -kfree (entry); +kobject_put (&entry->kobj);return ; }
drivers/firmware/stratix10-svc.c +6 -6
@@ -941,17 +941,17 @@ EXPORT_SYMBOL_GPL(stratix10_svc_allocate_memory);void stratix10_svc_free_memory (struct stratix10_svc_chan *chan,void *kaddr) {struct stratix10_svc_data_mem *pmem; -size_t size =0 ;list_for_each_entry (pmem, &svc_data_mem, node)if (pmem->vaddr == kaddr) { - size = pmem->size; -break ; +gen_pool_free (chan->ctrl->genpool, + (unsigned long )kaddr, pmem->size); + pmem->vaddr =NULL ; +list_del (&pmem->node); +return ; } -gen_pool_free (chan->ctrl->genpool, (unsigned long )kaddr, size); - pmem->vaddr =NULL ; -list_del (&pmem->node); +list_del (&svc_data_mem); }EXPORT_SYMBOL_GPL (stratix10_svc_free_memory);
drivers/gpio/gpio-pca953x.c +11 -8
@@ -1107,20 +1107,21 @@ static int pca953x_regcache_sync(struct device *dev) {struct pca953x_chip *chip =dev_get_drvdata (dev);int ret; +u8 regaddr;/* * The ordering between direction and output is important, * sync these registers first and only then sync the rest. */ - ret =regcache_sync_region (chip->regmap, chip->regs->direction, - chip->regs->direction +NBANK (chip)); + regaddr =pca953x_recalc_addr (chip, chip->regs->direction,0 ); + ret =regcache_sync_region (chip->regmap, regaddr, regaddr +NBANK (chip));if (ret) {dev_err (dev,"Failed to sync GPIO dir registers: %d\n" , ret);return ret; } - ret =regcache_sync_region (chip->regmap, chip->regs->output, - chip->regs->output +NBANK (chip)); + regaddr =pca953x_recalc_addr (chip, chip->regs->output,0 ); + ret =regcache_sync_region (chip->regmap, regaddr, regaddr +NBANK (chip));if (ret) {dev_err (dev,"Failed to sync GPIO out registers: %d\n" , ret);return ret;
@@ -1128,16 +1129,18 @@ static int pca953x_regcache_sync(struct device *dev)#ifdef CONFIG_GPIO_PCA953X_IRQ if (chip->driver_data &PCA_PCAL ) { - ret =regcache_sync_region (chip->regmap,PCAL953X_IN_LATCH , -PCAL953X_IN_LATCH +NBANK (chip)); + regaddr =pca953x_recalc_addr (chip,PCAL953X_IN_LATCH ,0 ); + ret =regcache_sync_region (chip->regmap, regaddr, + regaddr +NBANK (chip));if (ret) {dev_err (dev,"Failed to sync INT latch registers: %d\n" , ret);return ret; } - ret =regcache_sync_region (chip->regmap,PCAL953X_INT_MASK , -PCAL953X_INT_MASK +NBANK (chip)); + regaddr =pca953x_recalc_addr (chip,PCAL953X_INT_MASK ,0 ); + ret =regcache_sync_region (chip->regmap, regaddr, + regaddr +NBANK (chip));if (ret) {dev_err (dev,"Failed to sync INT mask registers: %d\n" , ret);
drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +38 -4
64 lines not on this page · raw message
drivers/gpu/drm/drm_atomic_helper.c +13 -3
@@ -996,9 +996,19 @@ crtc_needs_disable(struct drm_crtc_state *old_state,return drm_atomic_crtc_effectively_active (old_state);/* -* We need to run through the crtc_funcs->disable() function if the CRTC -* is currently on, if it's transitioning to self refresh mode, or if -* it's in self refresh mode and needs to be fully disabled. +* We need to disable bridge(s) and CRTC if we're transitioning out of +* self-refresh and changing CRTCs at the same time, because the +* bridge tracks self-refresh status via CRTC state. +*/ +if (old_state->self_refresh_active && + old_state->crtc != new_state->crtc) +return true; + +/* +* We also need to run through the crtc_funcs->disable() function if +* the CRTC is currently on, if it's transitioning to self refresh +* mode, or if it's in self refresh mode and needs to be fully +* disabled. */ return old_state->active || (old_state->self_refresh_active && !new_state->enable) ||
drivers/gpu/drm/imx/ipuv3-crtc.c +1 -1
@@ -68,7 +68,7 @@ static void ipu_crtc_disable_planes(struct ipu_crtc *ipu_crtc,drm_atomic_crtc_state_for_each_plane (plane, old_crtc_state) {if (plane == &ipu_crtc->plane[0 ]->base) disable_full = true; -if (&ipu_crtc->plane[1 ] && plane == &ipu_crtc->plane[1 ]->base) +if (ipu_crtc->plane[1 ] && plane == &ipu_crtc->plane[1 ]->base) disable_partial = true; }
drivers/gpu/drm/radeon/radeon_connectors.c +4 -0
@@ -473,6 +473,8 @@ static struct drm_display_mode *radeon_fp_native_mode(struct drm_encoder *encode native_mode->vdisplay != 0 && native_mode->clock != 0) { mode =drm_mode_duplicate (dev, native_mode); +if (!mode) +return NULL ; mode->type =DRM_MODE_TYPE_PREFERRED |DRM_MODE_TYPE_DRIVER ;drm_mode_set_name (mode);
@@ -487,6 +489,8 @@ static struct drm_display_mode *radeon_fp_native_mode(struct drm_encoder *encode* simpler. */ mode =drm_cvt_mode (dev, native_mode->hdisplay, native_mode->vdisplay,60 , true, false, false); +if (!mode) +return NULL ; mode->type =DRM_MODE_TYPE_PREFERRED |DRM_MODE_TYPE_DRIVER ;DRM_DEBUG_KMS ("Adding cvt approximation of native panel mode %s\n" , mode->name); }
drivers/hwtracing/coresight/coresight-cpu-debug.c +4 -3
@@ -379,9 +379,10 @@ static int debug_notifier_call(struct notifier_block *self,int cpu;struct debug_drvdata *drvdata; -mutex_lock (&debug_lock); +/* Bail out if we can't acquire the mutex or the functionality is off */ +if (!mutex_trylock (&debug_lock)) +return NOTIFY_DONE ; -/* Bail out if the functionality is disabled */ if (!debug_enable) goto skip_dump;
@@ -400,7 +401,7 @@ static int debug_notifier_call(struct notifier_block *self, skip_dump:mutex_unlock (&debug_lock); -return 0 ; +return NOTIFY_DONE ; }static struct notifier_block debug_notifier = {
drivers/i2c/busses/i2c-cadence.c +10 -2
@@ -724,7 +724,7 @@ static void cdns_i2c_master_reset(struct i2c_adapter *adap)static int cdns_i2c_process_msg (struct cdns_i2c *id,struct i2c_msg *msg,struct i2c_adapter *adap) { -unsigned long time_left; +unsigned long time_left, msg_timeout;u32 reg; id->p_msg = msg;
@@ -749,8 +749,16 @@ static int cdns_i2c_process_msg(struct cdns_i2c *id, struct i2c_msg *msg,else cdns_i2c_msend (id); +/* Minimal time to execute this message */ + msg_timeout =msecs_to_jiffies ((1000 * msg->len *BITS_PER_BYTE ) / id->i2c_clk); +/* Plus some wiggle room */ + msg_timeout +=msecs_to_jiffies (500 ); + +if (msg_timeout < adap->timeout) + msg_timeout = adap->timeout; +/* Wait for the signal of completion */ - time_left =wait_for_completion_timeout (&id->xfer_done, adap->timeout); + time_left =wait_for_completion_timeout (&id->xfer_done, msg_timeout);if (time_left ==0 ) {cdns_i2c_master_reset (adap); dev_err(id->adap.dev.parent,
drivers/iio/adc/ad7124.c +0 -1
@@ -170,7 +170,6 @@ static const struct iio_chan_spec ad7124_channel_template = { .sign = 'u', .realbits = 24, .storagebits = 32, - .shift = 8, .endianness = IIO_BE, }, };
drivers/iio/adc/sc27xx_adc.c +10 -10
@@ -36,8 +36,8 @@/* Bits and mask definition for SC27XX_ADC_CH_CFG register */ #define SC27XX_ADC_CHN_ID_MASK GENMASK(4, 0) -#define SC27XX_ADC_SCALE_MASK GENMASK(10, 8) -#define SC27XX_ADC_SCALE_SHIFT 8 +#define SC27XX_ADC_SCALE_MASK GENMASK(10, 9) +#define SC27XX_ADC_SCALE_SHIFT 9/* Bits definitions for SC27XX_ADC_INT_EN registers */ #define SC27XX_ADC_IRQ_EN BIT(0)
@@ -103,14 +103,14 @@ static struct sc27xx_adc_linear_graph small_scale_graph = { 100, 341, }; -static const struct sc27xx_adc_linear_graph big_scale_graph_calib = { -4200 ,856 , -3600 ,733 , +static const struct sc27xx_adc_linear_graph sc2731_big_scale_graph_calib = { +4200 ,850 , +3600 ,728 , }; -static const struct sc27xx_adc_linear_graph small_scale_graph_calib = { -1000 ,833 , -100 ,80 , +static const struct sc27xx_adc_linear_graph sc2731_small_scale_graph_calib = { +1000 ,838 , +100 ,84 , };static int sc27xx_adc_get_calib_data (u32 calib_data,int calib_adc)
@@ -130,11 +130,11 @@ static int sc27xx_adc_scale_calibration(struct sc27xx_adc_data *data,size_t len;if (big_scale) { - calib_graph = &big_scale_graph_calib; + calib_graph = &sc2731_big_scale_graph_calib; graph = &big_scale_graph; cell_name ="big_scale_calib" ; }else { - calib_graph = &small_scale_graph_calib; + calib_graph = &sc2731_small_scale_graph_calib; graph = &small_scale_graph; cell_name ="small_scale_calib" ; }
drivers/iio/adc/stmpe-adc.c +4 -4
@@ -61,7 +61,7 @@ struct stmpe_adc {static int stmpe_read_voltage (struct stmpe_adc *info,struct iio_chan_spec const *chan,int *val) { -long ret; +unsigned long ret;mutex_lock (&info->lock);
@@ -79,7 +79,7 @@ static int stmpe_read_voltage(struct stmpe_adc *info, ret =wait_for_completion_timeout (&info->completion,STMPE_ADC_TIMEOUT ); -if (ret <=0 ) { +if (ret ==0 ) {stmpe_reg_write (info->stmpe,STMPE_REG_ADC_INT_STA ,STMPE_ADC_CH (info->channel));mutex_unlock (&info->lock);
@@ -96,7 +96,7 @@ static int stmpe_read_voltage(struct stmpe_adc *info,static int stmpe_read_temp (struct stmpe_adc *info,struct iio_chan_spec const *chan,int *val) { -long ret; +unsigned long ret;mutex_lock (&info->lock);
@@ -114,7 +114,7 @@ static int stmpe_read_temp(struct stmpe_adc *info, ret =wait_for_completion_timeout (&info->completion,STMPE_ADC_TIMEOUT ); -if (ret <=0 ) { +if (ret ==0 ) {mutex_unlock (&info->lock);return -ETIMEDOUT ; }
drivers/iio/common/st_sensors/st_sensors_core.c +18 -6
@@ -70,16 +70,18 @@ static int st_sensors_match_odr(struct st_sensor_settings *sensor_settings,int st_sensors_set_odr (struct iio_dev *indio_dev,unsigned int odr) { -int err; +int err =0 ;struct st_sensor_odr_avl odr_out = {0 ,0 };struct st_sensor_data *sdata =iio_priv (indio_dev); +mutex_lock (&sdata->odr_lock); +if (!sdata->sensor_settings->odr.mask) -return 0 ; + goto unlock_mutex; err =st_sensors_match_odr (sdata->sensor_settings, odr, &odr_out);if (err <0 ) - goto st_sensors_match_odr_error; + goto unlock_mutex; if ((sdata->sensor_settings->odr.addr == sdata->sensor_settings->pw.addr) &&
@@ -102,7 +104,9 @@ int st_sensors_set_odr(struct iio_dev *indio_dev, unsigned int odr)if (err >=0 ) sdata->odr = odr_out.hz; -st_sensors_match_odr_error: +unlock_mutex: +mutex_unlock (&sdata->odr_lock); +return err; }EXPORT_SYMBOL (st_sensors_set_odr);
@@ -364,6 +368,8 @@ int st_sensors_init_sensor(struct iio_dev *indio_dev,struct st_sensors_platform_data *of_pdata;int err =0 ; +mutex_init (&sdata->odr_lock); +/* If OF/DT pdata exists, it will take precedence of anything else */ of_pdata =st_sensors_dev_probe (indio_dev->dev.parent, pdata);if (IS_ERR (of_pdata))
@@ -557,18 +563,24 @@ int st_sensors_read_info_raw(struct iio_dev *indio_dev, err = -EBUSY ; goto out; }else { +mutex_lock (&sdata->odr_lock); err =st_sensors_set_enable (indio_dev, true); -if (err <0 ) +if (err <0 ) { +mutex_unlock (&sdata->odr_lock); goto out; + }msleep ((sdata->sensor_settings->bootime *1000 ) / sdata->odr); err =st_sensors_read_axis_data (indio_dev, ch, val); -if (err <0 ) +if (err <0 ) { +mutex_unlock (&sdata->odr_lock); goto out; + } *val = *val >> ch->scan_type.shift; err =st_sensors_set_enable (indio_dev, false); +mutex_unlock (&sdata->odr_lock); } out:mutex_unlock (&indio_dev->mlock);
drivers/iio/dummy/iio_simple_dummy.c +12 -8
@@ -575,10 +575,9 @@ static struct iio_sw_device *iio_dummy_probe(const char *name)*/ swd =kzalloc (sizeof (*swd),GFP_KERNEL ); -if (!swd) { - ret = -ENOMEM ; - goto error_kzalloc; - } +if (!swd) +return ERR_PTR (-ENOMEM ); +/* * Allocate an IIO device. *
@@ -590,7 +589,7 @@ static struct iio_sw_device *iio_dummy_probe(const char *name) indio_dev =iio_device_alloc (parent,sizeof (*st));if (!indio_dev) { ret = -ENOMEM ; - goto error_ret; + goto error_free_swd; } st =iio_priv (indio_dev);
@@ -616,6 +615,10 @@ static struct iio_sw_device *iio_dummy_probe(const char *name)* indio_dev->name = spi_get_device_id(spi)->name; */ indio_dev->name =kstrdup (name,GFP_KERNEL ); +if (!indio_dev->name) { + ret = -ENOMEM ; + goto error_free_device; + }/* Provide description of available channels */ indio_dev->channels = iio_dummy_channels;
@@ -632,7 +635,7 @@ static struct iio_sw_device *iio_dummy_probe(const char *name) ret =iio_simple_dummy_events_register (indio_dev);if (ret <0 ) - goto error_free_device; + goto error_free_name; ret =iio_simple_dummy_configure_buffer (indio_dev);if (ret <0 )
@@ -649,11 +652,12 @@ static struct iio_sw_device *iio_dummy_probe(const char *name)iio_simple_dummy_unconfigure_buffer (indio_dev); error_unregister_events:iio_simple_dummy_events_unregister (indio_dev); +error_free_name: +kfree (indio_dev->name); error_free_device:iio_device_free (indio_dev); -error_ret: +error_free_swd:kfree (swd); -error_kzalloc:return ERR_PTR (ret); }
drivers/iio/proximity/vl53l0x-i2c.c +3 -4
@@ -104,6 +104,7 @@ static int vl53l0x_read_proximity(struct vl53l0x_data *data,u16 tries =20 ;u8 buffer[12 ];int ret; +unsigned long time_left; ret =i2c_smbus_write_byte_data (client,VL_REG_SYSRANGE_START ,1 );if (ret <0 )
@@ -112,10 +113,8 @@ static int vl53l0x_read_proximity(struct vl53l0x_data *data,if (data->client->irq) {reinit_completion (&data->completion); - ret =wait_for_completion_timeout (&data->completion,HZ /10 ); -if (ret <0 ) -return ret; -else if (ret ==0 ) + time_left =wait_for_completion_timeout (&data->completion,HZ /10 ); +if (time_left ==0 )return -ETIMEDOUT ;vl53l0x_clear_irq (data);
drivers/input/mouse/bcm5974.c +6 -1
@@ -942,17 +942,22 @@ static int bcm5974_probe(struct usb_interface *iface,if (!dev->tp_data) goto err_free_bt_buffer; -if (dev->bt_urb) +if (dev->bt_urb) {usb_fill_int_urb (dev->bt_urb, udev,usb_rcvintpipe (udev, cfg->bt_ep), dev->bt_data, dev->cfg.bt_datalen, bcm5974_irq_button, dev,1 ); + dev->bt_urb->transfer_flags |=URB_NO_TRANSFER_DMA_MAP ; + } +usb_fill_int_urb (dev->tp_urb, udev,usb_rcvintpipe (udev, cfg->tp_ep), dev->tp_data, dev->cfg.tp_datalen, bcm5974_irq_trackpad, dev,1 ); + dev->tp_urb->transfer_flags |=URB_NO_TRANSFER_DMA_MAP ; +/* create bcm5974 device */ usb_make_path (udev, dev->phys,sizeof (dev->phys));strlcat (dev->phys,"/input0" ,sizeof (dev->phys));
drivers/interconnect/core.c +6 -1
@@ -1084,9 +1084,14 @@ static int of_count_icc_providers(struct device_node *np) {struct device_node *child;int count =0 ; +const struct of_device_id __maybe_unused ignore_list[] = { + { .compatible ="qcom,sc7180-ipa-virt" }, + {} + };for_each_available_child_of_node (np, child) { -if (of_property_read_bool (child,"#interconnect-cells" )) +if (of_property_read_bool (child,"#interconnect-cells" ) && +likely (!of_match_node (ignore_list, child))) count++; count +=of_count_icc_providers (child); }
drivers/interconnect/qcom/sc7180.c +0 -21
@@ -47,7 +47,6 @@ DEFINE_QNODE(qnm_mnoc_sf, SC7180_MASTER_MNOC_SF_MEM_NOC, 1, 32, SC7180_SLAVE_GEMDEFINE_QNODE (qnm_snoc_gc,SC7180_MASTER_SNOC_GC_MEM_NOC ,1 ,8 ,SC7180_SLAVE_LLCC );DEFINE_QNODE (qnm_snoc_sf,SC7180_MASTER_SNOC_SF_MEM_NOC ,1 ,16 ,SC7180_SLAVE_LLCC );DEFINE_QNODE (qxm_gpu,SC7180_MASTER_GFX3D ,2 ,32 ,SC7180_SLAVE_GEM_NOC_SNOC ,SC7180_SLAVE_LLCC ); -DEFINE_QNODE (ipa_core_master,SC7180_MASTER_IPA_CORE ,1 ,8 ,SC7180_SLAVE_IPA_CORE );DEFINE_QNODE (llcc_mc,SC7180_MASTER_LLCC ,2 ,4 ,SC7180_SLAVE_EBI1 );DEFINE_QNODE (qhm_mnoc_cfg,SC7180_MASTER_CNOC_MNOC_CFG ,1 ,4 ,SC7180_SLAVE_SERVICE_MNOC );DEFINE_QNODE (qxm_camnoc_hf0,SC7180_MASTER_CAMNOC_HF0 ,2 ,32 ,SC7180_SLAVE_MNOC_HF_MEM_NOC );
@@ -129,7 +128,6 @@ DEFINE_QNODE(qhs_mdsp_ms_mpu_cfg, SC7180_SLAVE_MSS_PROC_MS_MPU_CFG, 1, 4);DEFINE_QNODE (qns_gem_noc_snoc,SC7180_SLAVE_GEM_NOC_SNOC ,1 ,8 ,SC7180_MASTER_GEM_NOC_SNOC );DEFINE_QNODE (qns_llcc,SC7180_SLAVE_LLCC ,1 ,16 ,SC7180_MASTER_LLCC );DEFINE_QNODE (srvc_gemnoc,SC7180_SLAVE_SERVICE_GEM_NOC ,1 ,4 ); -DEFINE_QNODE (ipa_core_slave,SC7180_SLAVE_IPA_CORE ,1 ,8 );DEFINE_QNODE (ebi,SC7180_SLAVE_EBI1 ,2 ,4 );DEFINE_QNODE (qns_mem_noc_hf,SC7180_SLAVE_MNOC_HF_MEM_NOC ,1 ,32 ,SC7180_MASTER_MNOC_HF_MEM_NOC );DEFINE_QNODE (qns_mem_noc_sf,SC7180_SLAVE_MNOC_SF_MEM_NOC ,1 ,32 ,SC7180_MASTER_MNOC_SF_MEM_NOC );
@@ -160,7 +158,6 @@ DEFINE_QBCM(bcm_mc0, "MC0", true, &ebi);DEFINE_QBCM (bcm_sh0,"SH0" , true, &qns_llcc);DEFINE_QBCM (bcm_mm0,"MM0" , false, &qns_mem_noc_hf);DEFINE_QBCM (bcm_ce0,"CE0" , false, &qxm_crypto); -DEFINE_QBCM (bcm_ip0,"IP0" , false, &ipa_core_slave);DEFINE_QBCM (bcm_cn0,"CN0" , true, &qnm_snoc, &xm_qdss_dap, &qhs_a1_noc_cfg, &qhs_a2_noc_cfg, &qhs_ahb2phy0, &qhs_aop, &qhs_aoss, &qhs_boot_rom, &qhs_camera_cfg, &qhs_camera_nrt_throttle_cfg, &qhs_camera_rt_throttle_cfg, &qhs_clk_ctl, &qhs_cpr_cx, &qhs_cpr_mx, &qhs_crypto0_cfg, &qhs_dcc_cfg, &qhs_ddrss_cfg, &qhs_display_cfg, &qhs_display_rt_throttle_cfg, &qhs_display_throttle_cfg, &qhs_glm, &qhs_gpuss_cfg, &qhs_imem_cfg, &qhs_ipa, &qhs_mnoc_cfg, &qhs_mss_cfg, &qhs_npu_cfg, &qhs_npu_dma_throttle_cfg, &qhs_npu_dsp_throttle_cfg, &qhs_pimem_cfg, &qhs_prng, &qhs_qdss_cfg, &qhs_qm_cfg, &qhs_qm_mpu_cfg, &qhs_qup0, &qhs_qup1, &qhs_security, &qhs_snoc_cfg, &qhs_tcsr, &qhs_tlmm_1, &qhs_tlmm_2, &qhs_tlmm_3, &qhs_ufs_mem_cfg, &qhs_usb3, &qhs_venus_cfg, &qhs_venus_throttle_cfg, &qhs_vsense_ctrl_cfg, &srvc_cnoc);DEFINE_QBCM (bcm_mm1,"MM1" , false, &qxm_camnoc_hf0_uncomp, &qxm_camnoc_hf1_uncomp, &qxm_camnoc_sf_uncomp, &qhm_mnoc_cfg, &qxm_mdp0, &qxm_rot, &qxm_venus0, &qxm_venus_arm9);DEFINE_QBCM (bcm_sh2,"SH2" , false, &acm_sys_tcu);
@@ -372,22 +369,6 @@ static struct qcom_icc_desc sc7180_gem_noc = { .num_bcms = ARRAY_SIZE(gem_noc_bcms), }; -static struct qcom_icc_bcm *ipa_virt_bcms[] = { - &bcm_ip0, -}; - -static struct qcom_icc_node *ipa_virt_nodes[] = { - [MASTER_IPA_CORE ] = &ipa_core_master, - [SLAVE_IPA_CORE ] = &ipa_core_slave, -}; - -static struct qcom_icc_desc sc7180_ipa_virt = { - .nodes = ipa_virt_nodes, - .num_nodes =ARRAY_SIZE (ipa_virt_nodes), - .bcms = ipa_virt_bcms, - .num_bcms =ARRAY_SIZE (ipa_virt_bcms), -}; -static struct qcom_icc_bcm *mc_virt_bcms[] = { &bcm_acv, &bcm_mc0,
@@ -611,8 +592,6 @@ static const struct of_device_id qnoc_of_match[] = { .data = &sc7180_dc_noc}, { .compatible = "qcom,sc7180-gem-noc", .data = &sc7180_gem_noc}, - { .compatible = "qcom,sc7180-ipa-virt", - .data = &sc7180_ipa_virt}, { .compatible = "qcom,sc7180-mc-virt", .data = &sc7180_mc_virt}, { .compatible = "qcom,sc7180-mmss-noc",
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c +2 -0
@@ -3512,6 +3512,8 @@ static int arm_smmu_device_probe(struct platform_device *pdev)/* Base address */ res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); +if (!res) +return -EINVAL ;if (resource_size (res) <arm_smmu_resource_size (smmu)) {dev_err (dev,"MMIO region too small (%pr)\n" , res);return -EINVAL ;
drivers/iommu/arm/arm-smmu/arm-smmu.c +2 -3
@@ -2123,11 +2123,10 @@ static int arm_smmu_device_probe(struct platform_device *pdev)if (err)return err; - res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); - ioaddr = res->start; - smmu->base =devm_ioremap_resource (dev, res); + smmu->base =devm_platform_get_and_ioremap_resource (pdev,0 , &res);if (IS_ERR (smmu->base))return PTR_ERR (smmu->base); + ioaddr = res->start;/* * The resource size should effectively match the value of SMMU_TOP; * stash that temporarily until we know PAGESIZE to validate it with.
drivers/md/md.c +10 -5
@@ -7970,17 +7970,22 @@ EXPORT_SYMBOL(md_register_thread);void md_unregister_thread (struct md_thread **threadp) { -struct md_thread *thread = *threadp; -if (!thread) -return ; -pr_debug ("interrupting MD-thread pid %d\n" ,task_pid_nr (thread->tsk)); -/* Locking ensures that mddev_unlock does not wake_up a +struct md_thread *thread; + +/* +* Locking ensures that mddev_unlock does not wake_up a * non-existent thread */ spin_lock (&pers_lock); + thread = *threadp; +if (!thread) { +spin_unlock (&pers_lock); +return ; + } *threadp =NULL ;spin_unlock (&pers_lock); +pr_debug ("interrupting MD-thread pid %d\n" ,task_pid_nr (thread->tsk));kthread_stop (thread->tsk);kfree (thread); }
drivers/md/raid0.c +16 -15
@@ -128,21 +128,6 @@ static int create_strip_zones(struct mddev *mddev, struct r0conf **private_conf)pr_debug ("md/raid0:%s: FINAL %d zones\n" ,mdname (mddev), conf->nr_strip_zones); -if (conf->nr_strip_zones ==1 ) { - conf->layout =RAID0_ORIG_LAYOUT ; - }else if (mddev->layout ==RAID0_ORIG_LAYOUT || - mddev->layout ==RAID0_ALT_MULTIZONE_LAYOUT ) { - conf->layout = mddev->layout; - }else if (default_layout ==RAID0_ORIG_LAYOUT || - default_layout ==RAID0_ALT_MULTIZONE_LAYOUT ) { - conf->layout = default_layout; - }else { -pr_err ("md/raid0:%s: cannot assemble multi-zone RAID0 with default_layout setting\n" , -mdname (mddev)); -pr_err ("md/raid0: please set raid0.default_layout to 1 or 2\n" ); - err = -ENOTSUPP ; - goto abort; - }/* * now since we have the hard sector sizes, we can make sure * chunk size is a multiple of that sector size
@@ -273,6 +258,22 @@ static int create_strip_zones(struct mddev *mddev, struct r0conf **private_conf) (unsigned long long)smallest->sectors); } +if (conf->nr_strip_zones ==1 || conf->strip_zone[1 ].nb_dev ==1 ) { + conf->layout =RAID0_ORIG_LAYOUT ; + }else if (mddev->layout ==RAID0_ORIG_LAYOUT || + mddev->layout ==RAID0_ALT_MULTIZONE_LAYOUT ) { + conf->layout = mddev->layout; + }else if (default_layout ==RAID0_ORIG_LAYOUT || + default_layout ==RAID0_ALT_MULTIZONE_LAYOUT ) { + conf->layout = default_layout; + }else { +pr_err ("md/raid0:%s: cannot assemble multi-zone RAID0 with default_layout setting\n" , +mdname (mddev)); +pr_err ("md/raid0: please set raid0.default_layout to 1 or 2\n" ); + err = -EOPNOTSUPP ; + goto abort; + } +pr_debug ("md/raid0:%s: done.\n" ,mdname (mddev)); *private_conf = conf;
drivers/misc/cardreader/rtsx_usb.c +1 -0
@@ -667,6 +667,7 @@ static int rtsx_usb_probe(struct usb_interface *intf,return 0 ; out_init_fail: +usb_set_intfdata (ucr->pusb_intf,NULL );usb_free_coherent (ucr->pusb_dev,IOBUF_SIZE , ucr->iobuf, ucr->iobuf_dma);return ret;
drivers/misc/fastrpc.c +5 -4
@@ -1349,17 +1349,18 @@ static int fastrpc_req_munmap_impl(struct fastrpc_user *fl, struct fastrpc_req_munmap *req) {struct fastrpc_invoke_args args[1 ] = { [0 ] = {0 } }; -struct fastrpc_buf *buf, *b; +struct fastrpc_buf *buf =NULL , *iter, *b;struct fastrpc_munmap_req_msg req_msg;struct device *dev = fl->sctx->dev;int err;u32 sc;spin_lock (&fl->lock); -list_for_each_entry_safe (buf, b, &fl->mmaps, node) { -if ((buf->raddr == req->vaddrout) && (buf->size == req->size)) +list_for_each_entry_safe (iter, b, &fl->mmaps, node) { +if ((iter->raddr == req->vaddrout) && (iter->size == req->size)) { + buf = iter;break ; - buf =NULL ; + } }spin_unlock (&fl->lock);
drivers/misc/lkdtm/bugs.c +5 -0
@@ -231,6 +231,11 @@ void lkdtm_ARRAY_BOUNDS(void) not_checked =kmalloc (sizeof (*not_checked) *2 ,GFP_KERNEL ); checked =kmalloc (sizeof (*checked) *2 ,GFP_KERNEL ); +if (!not_checked || !checked) { +kfree (not_checked); +kfree (checked); +return ; + }pr_info ("Array access within bounds ...\n" );/* For both, touch all bytes in the actual member size. */
drivers/misc/lkdtm/usercopy.c +14 -3
@@ -30,12 +30,12 @@ static const unsigned char test_text[] = "This is a test.\n";*/ static noinline unsigned char *trick_compiler(unsigned char *stack) { -return stack +0 ; +return stack + unconst; } static noinline unsigned char *do_usercopy_stack_callee(int value) { -unsigned char buf[32 ]; +unsigned char buf[128 ];int i;/* Exercise stack to avoid everything living in registers. */
@@ -43,7 +43,12 @@ static noinline unsigned char *do_usercopy_stack_callee(int value) buf[i] = value &0xff ; } -return trick_compiler (buf); +/* +* Put the target buffer in the middle of stack allocation +* so that we don't step on future stack users regardless +* of stack growth direction. +*/ +return trick_compiler (&buf[(128 /2 )-32 ]); } static noinline void do_usercopy_stack(bool to_user, bool bad_frame)
@@ -66,6 +71,12 @@ static noinline void do_usercopy_stack(bool to_user, bool bad_frame) bad_stack -=sizeof (unsigned long ); } +#ifdef ARCH_HAS_CURRENT_STACK_POINTER +pr_info ("stack : %px\n" , (void *)current_stack_pointer); +#endif +pr_info ("good_stack: %px-%px\n" , good_stack, good_stack +sizeof (good_stack)); +pr_info ("bad_stack : %px-%px\n" , bad_stack, bad_stack +sizeof (good_stack)); + user_addr =vm_mmap (NULL ,0 ,PAGE_SIZE ,PROT_READ |PROT_WRITE |PROT_EXEC ,MAP_ANONYMOUS |MAP_PRIVATE ,0 );
drivers/mmc/core/block.c +1 -2
@@ -1442,8 +1442,7 @@ void mmc_blk_cqe_recovery(struct mmc_queue *mq) err =mmc_cqe_recovery (host);if (err)mmc_blk_reset (mq->blkdata, host,MMC_BLK_CQE_RECOVERY ); -else -mmc_blk_reset_success (mq->blkdata,MMC_BLK_CQE_RECOVERY ); +mmc_blk_reset_success (mq->blkdata,MMC_BLK_CQE_RECOVERY );pr_debug ("%s: CQE recovery done\n" ,mmc_hostname (host)); }
drivers/mtd/ubi/fastmap-wl.c +46 -23
112 lines not on this page · raw message
drivers/mtd/ubi/fastmap.c +0 -11
@@ -1230,17 +1230,6 @@ static int ubi_write_fastmap(struct ubi_device *ubi, fm_pos +=sizeof (*fec);ubi_assert (fm_pos <= ubi->fm_size); } -if (ubi->fm_next_anchor) { - fec = (struct ubi_fm_ec *)(fm_raw + fm_pos); - - fec->pnum =cpu_to_be32 (ubi->fm_next_anchor->pnum); -set_seen (ubi, ubi->fm_next_anchor->pnum, seen_pebs); - fec->ec =cpu_to_be32 (ubi->fm_next_anchor->ec); - - free_peb_count++; - fm_pos +=sizeof (*fec); -ubi_assert (fm_pos <= ubi->fm_size); - } fmh->free_peb_count =cpu_to_be32 (free_peb_count);ubi_for_each_used_peb (ubi, wl_e, tmp_rb) {
drivers/mtd/ubi/ubi.h +1 -3
@@ -491,8 +491,7 @@ struct ubi_debug_info {* @fm_work: fastmap work queue * @fm_work_scheduled: non-zero if fastmap work was scheduled * @fast_attach: non-zero if UBI was attached by fastmap -* @fm_anchor: The new anchor PEB used during fastmap update -* @fm_next_anchor: An anchor PEB candidate for the next time fastmap is updated +* @fm_anchor: The next anchor PEB to use for fastmap * @fm_do_produce_anchor: If true produce an anchor PEB in wl * * @used: RB-tree of used physical eraseblocks
@@ -603,7 +602,6 @@ struct ubi_device {int fm_work_scheduled;int fast_attach;struct ubi_wl_entry *fm_anchor; -struct ubi_wl_entry *fm_next_anchor;int fm_do_produce_anchor;/* Wear-leveling sub-system's stuff */
drivers/mtd/ubi/vmt.c +0 -1
@@ -309,7 +309,6 @@ int ubi_create_volume(struct ubi_device *ubi, struct ubi_mkvol_req *req) ubi->volumes[vol_id] =NULL ; ubi->vol_count -=1 ;spin_unlock (&ubi->volumes_lock); -ubi_eba_destroy_table (eba_tbl); out_acc:spin_lock (&ubi->volumes_lock); ubi->rsvd_pebs -= vol->reserved_pebs;
drivers/mtd/ubi/wl.c +10 -9
@@ -688,16 +688,16 @@ static int wear_leveling_worker(struct ubi_device *ubi, struct ubi_work *wrk,#ifdef CONFIG_MTD_UBI_FASTMAP e1 =find_anchor_wl_entry (&ubi->used); -if (e1 && ubi->fm_next_anchor && - (ubi->fm_next_anchor->ec - e1->ec >=UBI_WL_THRESHOLD )) { +if (e1 && ubi->fm_anchor && + (ubi->fm_anchor->ec - e1->ec >=UBI_WL_THRESHOLD )) { ubi->fm_do_produce_anchor =1 ; -/* fm_next_anchor is no longer considered a good anchor -* candidate. +/* +* fm_anchor is no longer considered a good anchor. * NULL assignment also prevents multiple wear level checks * of this PEB. */ -wl_tree_add (ubi->fm_next_anchor, &ubi->free); - ubi->fm_next_anchor =NULL ; +wl_tree_add (ubi->fm_anchor, &ubi->free); + ubi->fm_anchor =NULL ; ubi->free_count++; }
@@ -1086,12 +1086,13 @@ static int __erase_worker(struct ubi_device *ubi, struct ubi_work *wl_wrk)if (!err) {spin_lock (&ubi->wl_lock); -if (!ubi->fm_disabled && !ubi->fm_next_anchor && +if (!ubi->fm_disabled && !ubi->fm_anchor && e->pnum <UBI_FM_MAX_START ) { -/* Abort anchor production, if needed it will be +/* +* Abort anchor production, if needed it will be * enabled again in the wear leveling started below. */ - ubi->fm_next_anchor = e; + ubi->fm_anchor = e; ubi->fm_do_produce_anchor =0 ; }else {wl_tree_add (e, &ubi->free);
drivers/net/dsa/lantiq_gswip.c +3 -1
@@ -1981,8 +1981,10 @@ static int gswip_gphy_fw_list(struct gswip_priv *priv,for_each_available_child_of_node (gphy_fw_list_np, gphy_fw_np) { err =gswip_gphy_fw_probe (priv, &priv->gphy_fw[i], gphy_fw_np, i); -if (err) +if (err) { +of_node_put (gphy_fw_np); goto remove_gphy; + } i++; }
drivers/net/dsa/mv88e6xxx/chip.c +1 -0
@@ -3148,6 +3148,7 @@ static int mv88e6xxx_mdios_register(struct mv88e6xxx_chip *chip,*/ child =of_get_child_by_name (np,"mdio" ); err =mv88e6xxx_mdio_register (chip, child, false); +of_node_put (child);if (err)return err;
drivers/net/ethernet/altera/altera_tse_main.c +5 -1
@@ -163,7 +163,8 @@ static int altera_tse_mdio_create(struct net_device *dev, unsigned int id) mdio =mdiobus_alloc ();if (mdio ==NULL ) {netdev_err (dev,"Error allocating MDIO bus\n" ); -return -ENOMEM ; + ret = -ENOMEM ; + goto put_node; } mdio->name =ALTERA_TSE_RESOURCE_NAME ;
@@ -180,6 +181,7 @@ static int altera_tse_mdio_create(struct net_device *dev, unsigned int id) mdio->id); goto out_free_mdio; } +of_node_put (mdio_node);if (netif_msg_drv (priv))netdev_info (dev,"MDIO bus %s: created\n" , mdio->id);
@@ -189,6 +191,8 @@ static int altera_tse_mdio_create(struct net_device *dev, unsigned int id) out_free_mdio:mdiobus_free (mdio); mdio =NULL ; +put_node: +of_node_put (mdio_node);return ret; }
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c +4 -4
@@ -1157,9 +1157,9 @@ static int ixgbe_update_vf_xcast_mode(struct ixgbe_adapter *adapter,switch (xcast_mode) {case IXGBEVF_XCAST_MODE_NONE : - disable =IXGBE_VMOLR_BAM |IXGBE_VMOLR_ROMPE | + disable =IXGBE_VMOLR_ROMPE |IXGBE_VMOLR_MPE |IXGBE_VMOLR_UPE |IXGBE_VMOLR_VPE ; - enable =0 ; + enable =IXGBE_VMOLR_BAM ;break ;case IXGBEVF_XCAST_MODE_MULTI : disable =IXGBE_VMOLR_MPE |IXGBE_VMOLR_UPE |IXGBE_VMOLR_VPE ;
@@ -1181,9 +1181,9 @@ static int ixgbe_update_vf_xcast_mode(struct ixgbe_adapter *adapter,return -EPERM ; } - disable =0 ; + disable =IXGBE_VMOLR_VPE ; enable =IXGBE_VMOLR_BAM |IXGBE_VMOLR_ROMPE | -IXGBE_VMOLR_MPE |IXGBE_VMOLR_UPE |IXGBE_VMOLR_VPE ; +IXGBE_VMOLR_MPE |IXGBE_VMOLR_UPE ;break ;default :return -EOPNOTSUPP ;
drivers/net/ethernet/mediatek/mtk_eth_soc.c +3 -0
@@ -1966,6 +1966,9 @@ static int mtk_hwlro_get_fdir_entry(struct net_device *dev,struct ethtool_rx_flow_spec *fsp = (struct ethtool_rx_flow_spec *)&cmd->fs; +if (fsp->location >=ARRAY_SIZE (mac->hwlro_ip)) +return -EINVAL ; +/* only tcp dst ipv4 is meaningful, others are meaningless */ fsp->flow_type =TCP_V4_FLOW ; fsp->h_u.tcp_ip4_spec.ip4dst =ntohl (mac->hwlro_ip[fsp->location]);
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c +1 -1
@@ -2099,7 +2099,7 @@ static int mlx4_en_get_module_eeprom(struct net_device *dev,en_err (priv,"mlx4_get_module_info i(%d) offset(%d) bytes_to_read(%d) - FAILED (0x%x)\n" , i, offset, ee->len - i, ret); -return 0 ; +return ret; } i += ret;
drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c +5 -2
@@ -675,6 +675,9 @@ static void mlx5_fw_tracer_handle_traces(struct work_struct *work)if (!tracer->owner)return ; +if (unlikely (!tracer->str_db.loaded)) + goto arm; + block_count = tracer->buff.size /TRACER_BLOCK_SIZE_BYTE ; start_offset = tracer->buff.consumer_index *TRACER_BLOCK_SIZE_BYTE ;
@@ -732,6 +735,7 @@ static void mlx5_fw_tracer_handle_traces(struct work_struct *work) &tmp_trace_block[TRACES_PER_BLOCK - 1]); } +arm:mlx5_fw_tracer_arm (dev); }
@@ -1138,8 +1142,7 @@ static int fw_tracer_event(struct notifier_block *nb, unsigned long action, voidqueue_work (tracer->work_queue, &tracer->ownership_change_work);break ;case MLX5_TRACER_SUBTYPE_TRACES_AVAILABLE : -if (likely (tracer->str_db.loaded)) -queue_work (tracer->work_queue, &tracer->handle_traces_work); +queue_work (tracer->work_queue, &tracer->handle_traces_work);break ;default : mlx5_core_dbg(dev, "FWTracer: Event with unrecognized subtype: sub_type %d\n",
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +5 -0
@@ -4576,6 +4576,11 @@ static int mlx5e_xdp_set(struct net_device *netdev, struct bpf_prog *prog) unlock:mutex_unlock (&priv->state_lock); + +/* Need to fix some features. */ +if (!err) +netdev_update_features (netdev); +return err; }
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +32 -3
@@ -1520,9 +1520,22 @@ static struct mlx5_flow_rule *find_flow_rule(struct fs_fte *fte,return NULL ; } -static bool check_conflicting_actions (u32 action1,u32 action2) +static bool check_conflicting_actions_vlan (const struct mlx5_fs_vlan *vlan0, +const struct mlx5_fs_vlan *vlan1) { -u32 xored_actions = action1 ^ action2; +return vlan0->ethtype != vlan1->ethtype || + vlan0->vid != vlan1->vid || + vlan0->prio != vlan1->prio; +} + +static bool check_conflicting_actions (const struct mlx5_flow_act *act1, +const struct mlx5_flow_act *act2) +{ +u32 action1 = act1->action; +u32 action2 = act2->action; +u32 xored_actions; + + xored_actions = action1 ^ action2;/* if one rule only wants to count, it's ok */ if (action1 == MLX5_FLOW_CONTEXT_ACTION_COUNT ||
@@ -1539,6 +1552,22 @@ static bool check_conflicting_actions(u32 action1, u32 action2) MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH_2))return true; +if (action1 &MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT && + act1->pkt_reformat != act2->pkt_reformat) +return true; + +if (action1 &MLX5_FLOW_CONTEXT_ACTION_MOD_HDR && + act1->modify_hdr != act2->modify_hdr) +return true; + +if (action1 &MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH && +check_conflicting_actions_vlan (&act1->vlan[0 ], &act2->vlan[0 ])) +return true; + +if (action1 &MLX5_FLOW_CONTEXT_ACTION_VLAN_PUSH_2 && +check_conflicting_actions_vlan (&act1->vlan[1 ], &act2->vlan[1 ])) +return true; +return false; }
@@ -1546,7 +1575,7 @@ static int check_conflicting_ftes(struct fs_fte *fte, const struct mlx5_flow_context *flow_context, const struct mlx5_flow_act *flow_act) { - if (check_conflicting_actions(flow_act->action, fte->action.action)) { + if (check_conflicting_actions(flow_act, &fte->action)) { mlx5_core_warn(get_dev(&fte->node), "Found two FTEs with conflicting actions\n");return -EEXIST ;
drivers/net/ethernet/mellanox/mlx5/core/steering/fs_dr.c +4 -5
@@ -43,11 +43,10 @@ static int set_miss_action(struct mlx5_flow_root_namespace *ns, err =mlx5dr_table_set_miss_action (ft->fs_dr_table.dr_table, action);if (err && action) { err =mlx5dr_action_destroy (action); -if (err) { - action =NULL ; -mlx5_core_err (ns->dev,"Failed to destroy action (%d)\n" , - err); - } +if (err) +mlx5_core_err (ns->dev, +"Failed to destroy action (%d)\n" , err); + action =NULL ; } ft->fs_dr_table.miss_action = action;if (old_miss_action) {
drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c +2 -2
@@ -286,8 +286,6 @@ nfp_net_get_link_ksettings(struct net_device *netdev,/* Init to unknowns */ ethtool_link_ksettings_add_link_mode (cmd, supported,FIBRE ); -ethtool_link_ksettings_add_link_mode (cmd, supported, Pause); -ethtool_link_ksettings_add_link_mode (cmd, advertising, Pause); cmd->base.port =PORT_OTHER ; cmd->base.speed =SPEED_UNKNOWN ; cmd->base.duplex =DUPLEX_UNKNOWN ;
@@ -295,6 +293,8 @@ nfp_net_get_link_ksettings(struct net_device *netdev, port =nfp_port_from_netdev (netdev); eth_port =nfp_port_get_eth_port (port);if (eth_port) { +ethtool_link_ksettings_add_link_mode (cmd, supported, Pause); +ethtool_link_ksettings_add_link_mode (cmd, advertising, Pause); cmd->base.autoneg = eth_port->aneg !=NFP_ANEG_DISABLED ?AUTONEG_ENABLE :AUTONEG_DISABLE ;nfp_net_set_fec_link_mode (eth_port, cmd);
drivers/net/ethernet/sfc/efx_channels.c +2 -4
@@ -287,6 +287,7 @@ int efx_probe_interrupts(struct efx_nic *efx) efx->n_channels =1 ; efx->n_rx_channels =1 ; efx->n_tx_channels =1 ; + efx->tx_channel_offset =0 ; efx->n_xdp_channels =0 ; efx->xdp_channel_offset = efx->n_channels; rc =pci_enable_msi (efx->pci_dev);
@@ -307,6 +308,7 @@ int efx_probe_interrupts(struct efx_nic *efx) efx->n_channels =1 + (efx_separate_tx_channels ?1 :0 ); efx->n_rx_channels =1 ; efx->n_tx_channels =1 ; + efx->tx_channel_offset =1 ; efx->n_xdp_channels =0 ; efx->xdp_channel_offset = efx->n_channels; efx->legacy_irq = efx->pci_dev->irq;
@@ -858,10 +860,6 @@ int efx_set_channels(struct efx_nic *efx)int xdp_queue_number;int rc; - efx->tx_channel_offset = - efx_separate_tx_channels ? - efx->n_channels - efx->n_tx_channels :0 ; -if (efx->xdp_tx_queue_count) {EFX_WARN_ON_PARANOID (efx->xdp_tx_queues);
drivers/net/ethernet/sfc/net_driver.h +1 -1
@@ -1522,7 +1522,7 @@ static inline bool efx_channel_is_xdp_tx(struct efx_channel *channel)static inline bool efx_channel_has_tx_queues (struct efx_channel *channel) { -return true; +return channel && channel->channel >= channel->efx->tx_channel_offset; }static inline unsigned int efx_channel_num_tx_queues (struct efx_channel *channel)
drivers/net/ethernet/ti/am65-cpsw-nuss.c +2 -1
@@ -1716,6 +1716,7 @@ static int am65_cpsw_init_cpts(struct am65_cpsw_common *common)if (IS_ERR (cpts)) {int ret =PTR_ERR (cpts); +of_node_put (node);if (ret == -EOPNOTSUPP ) {dev_info (dev,"cpts disabled\n" );return 0 ;
@@ -2064,9 +2065,9 @@ static int am65_cpsw_nuss_probe(struct platform_device *pdev)if (!node)return -ENOENT ; common->port_num =of_get_child_count (node); +of_node_put (node);if (common->port_num <1 || common->port_num >AM65_CPSW_MAX_PORTS )return -ENOENT ; -of_node_put (node);if (common->port_num !=1 )return -EOPNOTSUPP ;
drivers/net/phy/dp83867.c +29 -0
@@ -137,6 +137,7 @@#define DP83867_DOWNSHIFT_2_COUNT 2#define DP83867_DOWNSHIFT_4_COUNT 4#define DP83867_DOWNSHIFT_8_COUNT 8 +#define DP83867_SGMII_AUTONEG_EN BIT(7)/* CFG3 bits */ #define DP83867_CFG3_INT_OE BIT(7)
@@ -802,6 +803,32 @@ static int dp83867_phy_reset(struct phy_device *phydev) DP83867_PHYCR_FORCE_LINK_GOOD, 0); } +static void dp83867_link_change_notify (struct phy_device *phydev) +{ +/* There is a limitation in DP83867 PHY device where SGMII AN is +* only triggered once after the device is booted up. Even after the +* PHY TPI is down and up again, SGMII AN is not triggered and +* hence no new in-band message from PHY to MAC side SGMII. +* This could cause an issue during power up, when PHY is up prior +* to MAC. At this condition, once MAC side SGMII is up, MAC side +* SGMII wouldn`t receive new in-band message from TI PHY with +* correct link status, speed and duplex info. +* Thus, implemented a SW solution here to retrigger SGMII Auto-Neg +* whenever there is a link change. +*/ +if (phydev->interface ==PHY_INTERFACE_MODE_SGMII ) { +int val =0 ; + + val =phy_clear_bits (phydev,DP83867_CFG2 , +DP83867_SGMII_AUTONEG_EN ); +if (val <0 ) +return ; + +phy_set_bits (phydev,DP83867_CFG2 , +DP83867_SGMII_AUTONEG_EN ); + } +} +static struct phy_driver dp83867_driver[] = { { .phy_id =DP83867_PHY_ID ,
@@ -826,6 +853,8 @@ static struct phy_driver dp83867_driver[] = { .suspend = genphy_suspend, .resume = genphy_resume, + + .link_change_notify = dp83867_link_change_notify, }, };module_phy_driver (dp83867_driver);
drivers/net/phy/mdio_bus.c +0 -1
@@ -1008,7 +1008,6 @@ int __init mdio_bus_init(void)return ret; } -EXPORT_SYMBOL_GPL (mdio_bus_init);#if IS_ENABLED (CONFIG_PHYLIB )void mdio_bus_exit (void )
drivers/nfc/st21nfca/se.c +30 -23
79 lines not on this page · raw message
drivers/pci/controller/dwc/pcie-qcom.c +0 -6
@@ -1192,12 +1192,6 @@ static int qcom_pcie_init_2_7_0(struct qcom_pcie *pcie) goto err_disable_clocks; } - ret =clk_prepare_enable (res->pipe_clk); -if (ret) { -dev_err (dev,"cannot prepare/enable pipe clock\n" ); - goto err_disable_clocks; - } -/* configure PCIe to RC mode */ writel (DEVICE_TYPE_RC , pcie->parf +PCIE20_PARF_DEVICE_TYPE );
drivers/pcmcia/Kconfig +1 -1
@@ -151,7 +151,7 @@ config TCIC config PCMCIA_ALCHEMY_DEVBOARD tristate "Alchemy Db/Pb1xxx PCMCIA socket services" - depends on MIPS_ALCHEMY && PCMCIA + depends on MIPS_DB1XXX && PCMCIA help Enable this driver of you want PCMCIA support on your Alchemy Db1000, Db/Pb1100, Db/Pb1500, Db/Pb1550, Db/Pb1200, DB1300
drivers/phy/qualcomm/phy-qcom-qmp.c +1 -1
@@ -3141,7 +3141,7 @@ static int qcom_qmp_phy_power_on(struct phy *phy) ret =reset_control_deassert (qmp->ufs_reset);if (ret) - goto err_lane_rst; + goto err_pcs_ready;qcom_qmp_phy_configure (pcs_misc, cfg->regs, cfg->pcs_misc_tbl, cfg->pcs_misc_tbl_num);
drivers/pwm/pwm-lp3943.c +1 -0
@@ -125,6 +125,7 @@ static int lp3943_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,if (err)return err; + duty_ns =min (duty_ns, period_ns); val = (u8)(duty_ns *LP3943_MAX_DUTY / period_ns);return lp3943_write_byte (lp3943, reg_duty, val);
drivers/rpmsg/qcom_smd.c +2 -2
@@ -1388,9 +1388,9 @@ static int qcom_smd_parse_edge(struct device *dev, edge->name = node->name; irq =irq_of_parse_and_map (node,0 ); -if (irq <0 ) { +if (!irq) {dev_err (dev,"required smd interrupt missing\n" ); - ret = irq; + ret = -EINVAL ; goto put_node; }
drivers/rtc/rtc-mt6397.c +2 -0
@@ -269,6 +269,8 @@ static int mtk_rtc_probe(struct platform_device *pdev)return -ENOMEM ; res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); +if (!res) +return -EINVAL ; rtc->addr_base = res->start; rtc->data =of_device_get_match_data (&pdev->dev);
drivers/scsi/myrb.c +8 -3
@@ -1241,7 +1241,8 @@ static void myrb_cleanup(struct myrb_hba *cb)myrb_unmap (cb);if (cb->mmio_base) { - cb->disable_intr (cb->io_base); +if (cb->disable_intr) + cb->disable_intr (cb->io_base);iounmap (cb->mmio_base); }if (cb->irq)
@@ -3515,9 +3516,13 @@ static struct myrb_hba *myrb_detect(struct pci_dev *pdev,mutex_init (&cb->dcmd_mutex);mutex_init (&cb->dma_mutex); cb->pdev = pdev; + cb->host = shost; -if (pci_enable_device (pdev)) - goto failure; +if (pci_enable_device (pdev)) { +dev_err (&pdev->dev,"Failed to enable PCI device\n" ); +scsi_host_put (shost); +return NULL ; + }if (privdata->hw_init == DAC960_PD_hw_init || privdata->hw_init == DAC960_P_hw_init) {
drivers/scsi/sd.c +0 -1
@@ -3511,7 +3511,6 @@ static int sd_probe(struct device *dev) out_put:put_disk (gd); out_free: -sd_zbc_release_disk (sdkp);kfree (sdkp); out:scsi_autopm_put_device (sdp);
drivers/soc/rockchip/grf.c +2 -0
@@ -148,12 +148,14 @@ static int __init rockchip_grf_init(void)return -ENODEV ;if (!match || !match->data) {pr_err ("%s: missing grf data\n" , __func__); +of_node_put (np);return -EINVAL ; } grf_info = match->data; grf =syscon_node_to_regmap (np); +of_node_put (np);if (IS_ERR (grf)) {pr_err ("%s: could not get grf syscon\n" , __func__);return PTR_ERR (grf);
drivers/staging/fieldbus/anybuss/host.c +1 -1
@@ -1384,7 +1384,7 @@ anybuss_host_common_probe(struct device *dev, goto err_device;return cd; err_device: -device_unregister (&cd->client->dev); +put_device (&cd->client->dev); err_kthread:kthread_stop (cd->qthread); err_reset:
drivers/staging/greybus/audio_codec.c +2 -2
@@ -621,8 +621,8 @@ static int gbcodec_mute_stream(struct snd_soc_dai *dai, int mute, int stream)break ; }if (!data) { -dev_err (dai->dev,"%s:%s DATA connection missing\n" , - dai->name, module->name); +dev_err (dai->dev,"%s DATA connection missing\n" , + dai->name);mutex_unlock (&codec->lock);return -ENODEV ; }
drivers/staging/rtl8192e/rtllib_softmac.c +1 -1
@@ -651,9 +651,9 @@ static void rtllib_beacons_stop(struct rtllib_device *ieee)spin_lock_irqsave (&ieee->beacon_lock, flags); ieee->beacon_txing =0 ; -del_timer_sync (&ieee->beacon_timer);spin_unlock_irqrestore (&ieee->beacon_lock, flags); +del_timer_sync (&ieee->beacon_timer); }
drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c +1 -1
@@ -528,9 +528,9 @@ static void ieee80211_beacons_stop(struct ieee80211_device *ieee)spin_lock_irqsave (&ieee->beacon_lock, flags); ieee->beacon_txing =0 ; -del_timer_sync (&ieee->beacon_timer);spin_unlock_irqrestore (&ieee->beacon_lock, flags); +del_timer_sync (&ieee->beacon_timer); }void ieee80211_stop_send_beacons (struct ieee80211_device *ieee)
drivers/staging/rtl8712/os_intfs.c +0 -1
@@ -332,7 +332,6 @@ void r8712_free_drv_sw(struct _adapter *padapter)r8712_free_evt_priv (&padapter->evtpriv);r8712_DeInitSwLeds (padapter);r8712_free_mlme_priv (&padapter->mlmepriv); -r8712_free_io_queue (padapter);_free_xmit_priv (&padapter->xmitpriv);_r8712_free_sta_priv (&padapter->stapriv);_r8712_free_recv_priv (&padapter->recvpriv);
drivers/staging/rtl8712/usb_intf.c +6 -6
@@ -266,6 +266,7 @@ static uint r8712_usb_dvobj_init(struct _adapter *padapter)static void r8712_usb_dvobj_deinit (struct _adapter *padapter) { +r8712_free_io_queue (padapter); }void rtl871x_intf_stop (struct _adapter *padapter)
@@ -303,9 +304,6 @@ void r871x_dev_unload(struct _adapter *padapter)rtl8712_hal_deinit (padapter); } -/*s6.*/ -if (padapter->dvobj_deinit) - padapter->dvobj_deinit (padapter); padapter->bup = false; } }
@@ -541,13 +539,13 @@ static int r871xu_drv_init(struct usb_interface *pusb_intf, }else { AutoloadFail = false; } -if (((mac[0 ] ==0xff ) && (mac[1 ] ==0xff ) && +if ((!AutoloadFail) || + ((mac[0 ] ==0xff ) && (mac[1 ] ==0xff ) && (mac[2 ] ==0xff ) && (mac[3 ] ==0xff ) && (mac[4 ] ==0xff ) && (mac[5 ] ==0xff )) || ((mac[0 ] ==0x00 ) && (mac[1 ] ==0x00 ) && (mac[2 ] ==0x00 ) && (mac[3 ] ==0x00 ) && - (mac[4 ] ==0x00 ) && (mac[5 ] ==0x00 )) || - (!AutoloadFail)) { + (mac[4 ] ==0x00 ) && (mac[5 ] ==0x00 ))) { mac[0 ] =0x00 ; mac[1 ] =0xe0 ; mac[2 ] =0x4c ;
@@ -610,6 +608,8 @@ static void r871xu_dev_remove(struct usb_interface *pusb_intf)/* Stop driver mlme relation timer */ r8712_stop_drv_timers (padapter);r871x_dev_unload (padapter); +if (padapter->dvobj_deinit) + padapter->dvobj_deinit (padapter);r8712_free_drv_sw (padapter);free_netdev (pnetdev);
drivers/staging/rtl8712/usb_ops.c +18 -9
@@ -29,7 +29,8 @@ static u8 usb_read8(struct intf_hdl *intfhdl, u32 addr)u16 wvalue;u16 index;u16 len; -__le32 data; +int status; +__le32 data =0 ;struct intf_priv *intfpriv = intfhdl->pintfpriv; request =0x05 ;
@@ -37,8 +38,10 @@ static u8 usb_read8(struct intf_hdl *intfhdl, u32 addr) index =0 ; wvalue = (u16)(addr &0x0000ffff ); len =1 ; -r8712_usbctrl_vendorreq (intfpriv, request, wvalue, index, &data, len, - requesttype); + status =r8712_usbctrl_vendorreq (intfpriv, request, wvalue, index, + &data, len, requesttype); +if (status <0 ) +return 0 ;return (u8)(le32_to_cpu (data) &0x0ff ); }
@@ -49,7 +52,8 @@ static u16 usb_read16(struct intf_hdl *intfhdl, u32 addr)u16 wvalue;u16 index;u16 len; -__le32 data; +int status; +__le32 data =0 ;struct intf_priv *intfpriv = intfhdl->pintfpriv; request =0x05 ;
@@ -57,8 +61,10 @@ static u16 usb_read16(struct intf_hdl *intfhdl, u32 addr) index =0 ; wvalue = (u16)(addr &0x0000ffff ); len =2 ; -r8712_usbctrl_vendorreq (intfpriv, request, wvalue, index, &data, len, - requesttype); + status =r8712_usbctrl_vendorreq (intfpriv, request, wvalue, index, + &data, len, requesttype); +if (status <0 ) +return 0 ;return (u16)(le32_to_cpu (data) &0xffff ); }
@@ -69,7 +75,8 @@ static u32 usb_read32(struct intf_hdl *intfhdl, u32 addr)u16 wvalue;u16 index;u16 len; -__le32 data; +int status; +__le32 data =0 ;struct intf_priv *intfpriv = intfhdl->pintfpriv; request =0x05 ;
@@ -77,8 +84,10 @@ static u32 usb_read32(struct intf_hdl *intfhdl, u32 addr) index =0 ; wvalue = (u16)(addr &0x0000ffff ); len =4 ; -r8712_usbctrl_vendorreq (intfpriv, request, wvalue, index, &data, len, - requesttype); + status =r8712_usbctrl_vendorreq (intfpriv, request, wvalue, index, + &data, len, requesttype); +if (status <0 ) +return 0 ;return le32_to_cpu (data); }
drivers/tty/goldfish.c +2 -0
@@ -407,6 +407,7 @@ static int goldfish_tty_probe(struct platform_device *pdev) err_tty_register_device_failed:free_irq (irq, qtty); err_dec_line_count: +tty_port_destroy (&qtty->port); goldfish_tty_current_line_count--;if (goldfish_tty_current_line_count ==0 )goldfish_tty_delete_driver ();
@@ -428,6 +429,7 @@ static int goldfish_tty_remove(struct platform_device *pdev)iounmap (qtty->base); qtty->base =NULL ;free_irq (qtty->irq, pdev); +tty_port_destroy (&qtty->port); goldfish_tty_current_line_count--;if (goldfish_tty_current_line_count ==0 )goldfish_tty_delete_driver ();
drivers/tty/n_tty.c +37 -1
@@ -2073,6 +2073,35 @@ static bool canon_copy_from_read_buf(struct tty_struct *tty,return ldata->read_tail != canon_head; } +/* +* If we finished a read at the exact location of an +* EOF (special EOL character that's a __DISABLED_CHAR) +* in the stream, silently eat the EOF. +*/ +static void canon_skip_eof (struct tty_struct *tty) +{ +struct n_tty_data *ldata = tty->disc_data; +size_t tail, canon_head; + + canon_head =smp_load_acquire (&ldata->canon_head); + tail = ldata->read_tail; + +// No data? +if (tail == canon_head) +return ; + +// See if the tail position is EOF in the circular buffer + tail &= (N_TTY_BUF_SIZE -1 ); +if (!test_bit (tail, ldata->read_flags)) +return ; +if (read_buf (ldata, tail) != __DISABLED_CHAR) +return ; + +// Clear the EOL bit, skip the EOF char. +clear_bit (tail, ldata->read_flags); +smp_store_release (&ldata->read_tail, ldata->read_tail +1 ); +} +/** * job_control - check job control * @tty: tty
@@ -2142,7 +2171,14 @@ static ssize_t n_tty_read(struct tty_struct *tty, struct file *file,*/ if (*cookie) {if (ldata->icanon && !L_EXTPROC (tty)) { -if (canon_copy_from_read_buf (tty, &kb, &nr)) +/* +* If we have filled the user buffer, see +* if we should skip an EOF character before +* releasing the lock and returning done. +*/ +if (!nr) +canon_skip_eof (tty); +else if (canon_copy_from_read_buf (tty, &kb, &nr))return kb - kbuf; }else {if (copy_from_read_buf (tty, &kb, &nr))
drivers/tty/serial/8250/8250_fintek.c +4 -4
@@ -200,12 +200,12 @@ static int fintek_8250_rs485_config(struct uart_port *port,if (!pdata)return -EINVAL ; -/* Hardware do not support same RTS level on send and receive */ -if (!(rs485->flags &SER_RS485_RTS_ON_SEND ) == - !(rs485->flags &SER_RS485_RTS_AFTER_SEND )) -return -EINVAL ;if (rs485->flags &SER_RS485_ENABLED ) { +/* Hardware do not support same RTS level on send and receive */ +if (!(rs485->flags &SER_RS485_RTS_ON_SEND ) == + !(rs485->flags &SER_RS485_RTS_AFTER_SEND )) +return -EINVAL ;memset (rs485->padding,0 ,sizeof (rs485->padding)); config |=RS485_URA ; }else {
drivers/tty/serial/digicolor-usart.c +2 -0
@@ -309,6 +309,8 @@ static void digicolor_uart_set_termios(struct uart_port *port,case CS8 :default : config |=UA_CONFIG_CHAR_LEN ; + termios->c_cflag &= ~CSIZE ; + termios->c_cflag |=CS8 ;break ; }
drivers/tty/serial/fsl_lpuart.c +4 -20
@@ -229,8 +229,6 @@/* IMX lpuart has four extra unused regs located at the beginning */ #define IMX_REG_OFF 0x10 -static DEFINE_IDA (fsl_lpuart_ida); -enum lpuart_type {VF610_LPUART ,LS1021A_LPUART ,
@@ -265,7 +263,6 @@ struct lpuart_port {int rx_dma_rng_buf_len;unsigned int dma_tx_nents;wait_queue_head_t dma_wait; -bool id_allocated; };struct lpuart_soc_data {
@@ -2638,23 +2635,18 @@ static int lpuart_probe(struct platform_device *pdev) ret =of_alias_get_id (np,"serial" );if (ret <0 ) { - ret =ida_simple_get (&fsl_lpuart_ida,0 ,UART_NR ,GFP_KERNEL ); -if (ret <0 ) { -dev_err (&pdev->dev,"port line is full, add device failed\n" ); -return ret; - } - sport->id_allocated = true; +dev_err (&pdev->dev,"failed to get alias id, errno %d\n" , ret); +return ret; }if (ret >=ARRAY_SIZE (lpuart_ports)) {dev_err (&pdev->dev,"serial%d out of range\n" , ret); - ret = -EINVAL ; - goto failed_out_of_range; +return -EINVAL ; } sport->port.line = ret; ret =lpuart_enable_clks (sport);if (ret) - goto failed_clock_enable; +return ret; sport->port.uartclk =lpuart_get_baud_clk_rate (sport); lpuart_ports[sport->port.line] = sport;
@@ -2697,10 +2689,6 @@ static int lpuart_probe(struct platform_device *pdev) failed_attach_port: failed_irq_request:lpuart_disable_clks (sport); -failed_clock_enable: -failed_out_of_range: -if (sport->id_allocated) -ida_simple_remove (&fsl_lpuart_ida, sport->port.line);return ret; }
@@ -2710,9 +2698,6 @@ static int lpuart_remove(struct platform_device *pdev)uart_remove_one_port (&lpuart_reg, &sport->port); -if (sport->id_allocated) -ida_simple_remove (&fsl_lpuart_ida, sport->port.line); -lpuart_disable_clks (sport);if (sport->dma_tx_chan)
@@ -2842,7 +2827,6 @@ static int __init lpuart_serial_init(void) static void __exit lpuart_serial_exit(void) { -ida_destroy (&fsl_lpuart_ida);platform_driver_unregister (&lpuart_driver);uart_unregister_driver (&lpuart_reg); }
drivers/tty/serial/icom.c +1 -1
@@ -1503,7 +1503,7 @@ static int icom_probe(struct pci_dev *dev, retval =pci_read_config_dword (dev,PCI_COMMAND , &command_reg);if (retval) {dev_err (&dev->dev,"PCI Config read FAILED\n" ); -return retval; + goto probe_exit0; } pci_write_config_dword(dev, PCI_COMMAND,
drivers/tty/serial/meson_uart.c +13 -0
@@ -255,6 +255,14 @@ static const char *meson_uart_type(struct uart_port *port)return (port->type ==PORT_MESON ) ?"meson_uart" :NULL ; } +/* +* This function is called only from probe() using a temporary io mapping +* in order to perform a reset before setting up the device. Since the +* temporarily mapped region was successfully requested, there can be no +* console on this port at this time. Hence it is not necessary for this +* function to acquire the port->lock. (Since there is no console on this +* port at this time, the port->lock is not initialized yet.) +*/ static void meson_uart_reset (struct uart_port *port) {u32 val;
@@ -269,9 +277,12 @@ static void meson_uart_reset(struct uart_port *port)static int meson_uart_startup (struct uart_port *port) { +unsigned long flags;u32 val;int ret =0 ; +spin_lock_irqsave (&port->lock, flags); + val =readl (port->membase +AML_UART_CONTROL ); val |=AML_UART_CLEAR_ERR ;writel (val, port->membase +AML_UART_CONTROL );
@@ -287,6 +298,8 @@ static int meson_uart_startup(struct uart_port *port) val = (AML_UART_RECV_IRQ (1 ) |AML_UART_XMIT_IRQ (port->fifosize /2 ));writel (val, port->membase +AML_UART_MISC ); +spin_unlock_irqrestore (&port->lock, flags); + ret =request_irq (port->irq, meson_uart_interrupt,0 , port->name, port);
drivers/tty/serial/msm_serial.c +5 -0
@@ -1593,6 +1593,7 @@ static inline struct uart_port *msm_get_port_from_line(unsigned int line)static void __msm_console_write (struct uart_port *port,const char *s,unsigned int count,bool is_uartdm) { +unsigned long flags;int i;int num_newlines =0 ;bool replaced = false;
@@ -1610,6 +1611,8 @@ static void __msm_console_write(struct uart_port *port, const char *s, num_newlines++; count += num_newlines; +local_irq_save (flags); +if (port->sysrq) locked =0 ;else if (oops_in_progress)
@@ -1655,6 +1658,8 @@ static void __msm_console_write(struct uart_port *port, const char *s,if (locked)spin_unlock (&port->lock); + +local_irq_restore (flags); } static void msm_console_write(struct console *co, const char *s,
drivers/tty/serial/owl-uart.c +1 -0
@@ -695,6 +695,7 @@ static int owl_uart_probe(struct platform_device *pdev) owl_port->port.uartclk =clk_get_rate (owl_port->clk);if (owl_port->port.uartclk ==0 ) {dev_err (&pdev->dev,"clock rate is zero\n" ); +clk_disable_unprepare (owl_port->clk);return -EINVAL ; } owl_port->port.flags =UPF_BOOT_AUTOCONF |UPF_IOREMAP |UPF_LOW_LATENCY ;
drivers/tty/serial/rda-uart.c +2 -0
@@ -262,6 +262,8 @@ static void rda_uart_set_termios(struct uart_port *port, fallthrough;case CS7 : ctrl &= ~RDA_UART_DBITS_8 ; + termios->c_cflag &= ~CSIZE ; + termios->c_cflag |=CS7 ;break ;default : ctrl |=RDA_UART_DBITS_8 ;
drivers/tty/serial/sa1100.c +2 -2
@@ -448,6 +448,8 @@ sa1100_set_termios(struct uart_port *port, struct ktermios *termios, baud =uart_get_baud_rate (port, termios, old,0 , port->uartclk/16 ); quot =uart_get_divisor (port, baud); +del_timer_sync (&sport->timer); +spin_lock_irqsave (&sport->port.lock, flags); sport->port.read_status_mask &=UTSR0_TO_SM (UTSR0_TFS );
@@ -478,8 +480,6 @@ sa1100_set_termios(struct uart_port *port, struct ktermios *termios,UTSR1_TO_SM (UTSR1_ROR ); } -del_timer_sync (&sport->timer); -/* * Update the per-port timeout. */
drivers/tty/serial/serial_txx9.c +2 -0
@@ -644,6 +644,8 @@ serial_txx9_set_termios(struct uart_port *port, struct ktermios *termios,case CS6 :/* not supported */ case CS8 : cval |=TXX9_SILCR_UMODE_8BIT ; + termios->c_cflag &= ~CSIZE ; + termios->c_cflag |=CS8 ;break ; }
drivers/tty/serial/sh-sci.c +5 -1
@@ -2392,8 +2392,12 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios,int best_clk =-1 ;unsigned long flags; -if ((termios->c_cflag &CSIZE ) ==CS7 ) +if ((termios->c_cflag &CSIZE ) ==CS7 ) { smr_val |=SCSMR_CHR ; + }else { + termios->c_cflag &= ~CSIZE ; + termios->c_cflag |=CS8 ; + }if (termios->c_cflag &PARENB ) smr_val |=SCSMR_PE ;if (termios->c_cflag &PARODD )
drivers/tty/serial/sifive.c +6 -2
@@ -667,12 +667,16 @@ static void sifive_serial_set_termios(struct uart_port *port,int rate;char nstop; -if ((termios->c_cflag &CSIZE ) !=CS8 ) +if ((termios->c_cflag &CSIZE ) !=CS8 ) {dev_err_once (ssp->port.dev,"only 8-bit words supported\n" ); + termios->c_cflag &= ~CSIZE ; + termios->c_cflag |=CS8 ; + }if (termios->c_iflag & (INPCK |PARMRK ))dev_err_once (ssp->port.dev,"parity checking not supported\n" );if (termios->c_iflag &BRKINT )dev_err_once (ssp->port.dev,"BREAK detection not supported\n" ); + termios->c_iflag &= ~(INPCK |PARMRK |BRKINT );/* Set number of stop bits */ nstop = (termios->c_cflag &CSTOPB ) ?2 :1 ;
@@ -999,7 +1003,7 @@ static int sifive_serial_probe(struct platform_device *pdev)/* Set up clock divider */ ssp->clkin_rate =clk_get_rate (ssp->clk); ssp->baud_rate =SIFIVE_DEFAULT_BAUD_RATE ; - ssp->port.uartclk = ssp->baud_rate *16 ; + ssp->port.uartclk = ssp->clkin_rate;__ssp_update_div (ssp);platform_set_drvdata (pdev, ssp);
drivers/tty/serial/st-asc.c +4 -0
@@ -535,10 +535,14 @@ static void asc_set_termios(struct uart_port *port, struct ktermios *termios,/* set character length */ if ((cflag &CSIZE ) ==CS7 ) { ctrl_val |=ASC_CTL_MODE_7BIT_PAR ; + cflag |=PARENB ; }else { ctrl_val |= (cflag &PARENB ) ?ASC_CTL_MODE_8BIT_PAR :ASC_CTL_MODE_8BIT ; + cflag &= ~CSIZE ; + cflag |=CS8 ; } + termios->c_cflag = cflag;/* set stop bit */ ctrl_val |= (cflag &CSTOPB ) ?ASC_CTL_STOP_2BIT :ASC_CTL_STOP_1BIT ;
drivers/tty/serial/stm32-usart.c +12 -3
@@ -810,13 +810,22 @@ static void stm32_usart_set_termios(struct uart_port *port,* CS8 or (CS7 + parity), 8 bits word aka [M1:M0] = 0b00 * M0 and M1 already cleared by cr1 initialization. */ -if (bits ==9 ) +if (bits ==9 ) { cr1 |=USART_CR1_M0 ; -else if ((bits ==7 ) && cfg->has_7bits_data) + }else if ((bits ==7 ) && cfg->has_7bits_data) { cr1 |=USART_CR1_M1 ; -else if (bits !=8 ) + }else if (bits !=8 ) {dev_dbg (port->dev,"Unsupported data bits config: %u bits\n" , bits); + cflag &= ~CSIZE ; + cflag |=CS8 ; + termios->c_cflag = cflag; + bits =8 ; +if (cflag &PARENB ) { + bits++; + cr1 |=USART_CR1_M0 ; + } + }if (ofs->rtor !=UNDEF_REG && (stm32_port->rx_ch || stm32_port->fifoen)) {
drivers/tty/synclink_gt.c +2 -0
@@ -1749,6 +1749,8 @@ static int hdlcdev_init(struct slgt_info *info)*/ static void hdlcdev_exit (struct slgt_info *info) { +if (!info->netdev) +return ;unregister_hdlc_device (info->netdev);free_netdev (info->netdev); info->netdev =NULL ;
drivers/tty/sysrq.c +9 -4
@@ -231,8 +231,10 @@ static void showacpu(void *dummy)unsigned long flags;/* Idle CPUs have no interesting backtrace. */ -if (idle_cpu (smp_processor_id ())) +if (idle_cpu (smp_processor_id ())) { +pr_info ("CPU%d: backtrace skipped as idling\n" ,smp_processor_id ());return ; + }raw_spin_lock_irqsave (&show_lock, flags);pr_info ("CPU%d:\n" ,smp_processor_id ());
@@ -259,10 +261,13 @@ static void sysrq_handle_showallcpus(int key)if (in_irq ()) regs =get_irq_regs (); -if (regs) { -pr_info ("CPU%d:\n" ,smp_processor_id ()); + +pr_info ("CPU%d:\n" ,smp_processor_id ()); +if (regs)show_regs (regs); - } +else +show_stack (NULL ,NULL ,KERN_INFO ); +schedule_work (&sysrq_showallcpus); } }
drivers/usb/core/hcd-pci.c +2 -2
@@ -614,10 +614,10 @@ const struct dev_pm_ops usb_hcd_pci_pm_ops = { .suspend_noirq = hcd_pci_suspend_noirq, .resume_noirq = hcd_pci_resume_noirq, .resume = hcd_pci_resume, - .freeze = check_root_hub_suspended, + .freeze = hcd_pci_suspend, .freeze_noirq = check_root_hub_suspended, .thaw_noirq = NULL, - .thaw = NULL, + .thaw = hcd_pci_resume, .poweroff = hcd_pci_suspend, .poweroff_noirq = hcd_pci_suspend_noirq, .restore_noirq = hcd_pci_resume_noirq,
drivers/usb/dwc2/gadget.c +0 -1
@@ -4518,7 +4518,6 @@ static int dwc2_hsotg_udc_start(struct usb_gadget *gadget,WARN_ON (hsotg->driver); - driver->driver.bus =NULL ; hsotg->driver = driver; hsotg->gadget.dev.of_node = hsotg->dev->of_node; hsotg->gadget.speed =USB_SPEED_UNKNOWN ;
drivers/usb/dwc3/dwc3-pci.c +1 -1
@@ -213,7 +213,7 @@ static void dwc3_pci_resume_work(struct work_struct *work)int ret; ret =pm_runtime_get_sync (&dwc3->dev); -if (ret) { +if (ret <0 ) {pm_runtime_put_sync_autosuspend (&dwc3->dev);return ; }
drivers/usb/host/isp116x-hcd.c +4 -2
@@ -1541,10 +1541,12 @@ static int isp116x_remove(struct platform_device *pdev)iounmap (isp116x->data_reg); res =platform_get_resource (pdev,IORESOURCE_MEM ,1 ); -release_mem_region (res->start,2 ); +if (res) +release_mem_region (res->start,2 );iounmap (isp116x->addr_reg); res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); -release_mem_region (res->start,2 ); +if (res) +release_mem_region (res->start,2 );usb_put_hcd (hcd);return 0 ;
drivers/usb/host/oxu210hp-hcd.c +2 -0
@@ -3908,8 +3908,10 @@ static int oxu_bus_suspend(struct usb_hcd *hcd) } } +spin_unlock_irq (&oxu->lock);/* turn off now-idle HC */ del_timer_sync (&oxu->watchdog); +spin_lock_irq (&oxu->lock);ehci_halt (oxu); hcd->state =HC_STATE_SUSPENDED ;
drivers/usb/musb/omap2430.c +1 -0
@@ -360,6 +360,7 @@ static int omap2430_probe(struct platform_device *pdev) control_node =of_parse_phandle (np,"ctrl-module" ,0 );if (control_node) { control_pdev =of_find_device_by_node (control_node); +of_node_put (control_node);if (!control_pdev) {dev_err (&pdev->dev,"Failed to get control device\n" ); ret = -EINVAL ;
drivers/usb/storage/karma.c +8 -7
@@ -174,24 +174,25 @@ static void rio_karma_destructor(void *extra)static int rio_karma_init (struct us_data *us) { -int ret =0 ;struct karma_data *data =kzalloc (sizeof (struct karma_data ),GFP_NOIO );if (!data) - goto out; +return -ENOMEM ; data->recv =kmalloc (RIO_RECV_LEN ,GFP_NOIO );if (!data->recv) {kfree (data); - goto out; +return -ENOMEM ; } us->extra = data; us->extra_destructor = rio_karma_destructor; - ret =rio_karma_send_command (RIO_ENTER_STORAGE , us); - data->in_storage = (ret ==0 ); -out: -return ret; +if (rio_karma_send_command (RIO_ENTER_STORAGE , us)) +return -EIO ; + + data->in_storage =1 ; + +return 0 ; }static struct scsi_host_template karma_host_template;
drivers/usb/typec/mux.c +10 -4
@@ -127,8 +127,11 @@ typec_switch_register(struct device *parent, sw->dev.class = &typec_mux_class; sw->dev.type = &typec_switch_dev_type; sw->dev.driver_data = desc->drvdata; -dev_set_name (&sw->dev,"%s-switch" , - desc->name ? desc->name :dev_name (parent)); + ret =dev_set_name (&sw->dev,"%s-switch" , desc->name ? desc->name :dev_name (parent)); +if (ret) { +put_device (&sw->dev); +return ERR_PTR (ret); + } ret =device_add (&sw->dev);if (ret) {
@@ -331,8 +334,11 @@ typec_mux_register(struct device *parent, const struct typec_mux_desc *desc) mux->dev.class = &typec_mux_class; mux->dev.type = &typec_mux_dev_type; mux->dev.driver_data = desc->drvdata; -dev_set_name (&mux->dev,"%s-mux" , - desc->name ? desc->name :dev_name (parent)); + ret =dev_set_name (&mux->dev,"%s-mux" , desc->name ? desc->name :dev_name (parent)); +if (ret) { +put_device (&mux->dev); +return ERR_PTR (ret); + } ret =device_add (&mux->dev);if (ret) {
drivers/usb/usbip/stub_dev.c +1 -1
@@ -393,7 +393,6 @@ static int stub_probe(struct usb_device *udev) err_port:dev_set_drvdata (&udev->dev,NULL ); -usb_put_dev (udev);/* we already have busid_priv, just lock busid_lock */ spin_lock (&busid_priv->busid_lock);
@@ -408,6 +407,7 @@ static int stub_probe(struct usb_device *udev)put_busid_priv (busid_priv); sdev_free: +usb_put_dev (udev);stub_device_free (sdev);return rc;
drivers/usb/usbip/stub_rx.c +2 -0
@@ -138,7 +138,9 @@ static int tweak_set_configuration_cmd(struct urb *urb) req = (struct usb_ctrlrequest *) urb->setup_packet; config =le16_to_cpu (req->wValue); +usb_lock_device (sdev->udev); err =usb_set_configuration (sdev->udev, config); +usb_unlock_device (sdev->udev);if (err && err != -ENODEV )dev_err (&sdev->udev->dev,"can't set config #%d, error %d\n" , config, err);
drivers/vhost/vringh.c +8 -2
@@ -274,7 +274,7 @@ __vringh_iov(struct vringh *vrh, u16 i,int (*copy)(const struct vringh *vrh, void *dst, const void *src, size_t len)) { -int err, count =0 , up_next, desc_max; +int err, count =0 , indirect_count =0 , up_next, desc_max;struct vring_desc desc, *descs;struct vringh_range range = {-1ULL ,0 }, slowrange;bool slow = false;
@@ -331,7 +331,12 @@ __vringh_iov(struct vringh *vrh, u16 i,continue ; } -if (count++ == vrh->vring.num) { +if (up_next ==-1 ) + count++; +else + indirect_count++; + +if (count > vrh->vring.num || indirect_count > desc_max) {vringh_bad ("Descriptor loop in %p" , descs); err = -ELOOP ; goto fail;
@@ -393,6 +398,7 @@ __vringh_iov(struct vringh *vrh, u16 i, i =return_from_indirect (vrh, &up_next, &descs, &desc_max); slow = false; + indirect_count =0 ; }else break ; }
drivers/video/fbdev/hyperv_fb.c +1 -18
@@ -1008,7 +1008,6 @@ static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info)struct pci_dev *pdev =NULL ;void __iomem *fb_virt;int gen2vm =efi_enabled (EFI_BOOT ); -resource_size_t pot_start, pot_end;phys_addr_t paddr;int ret;
@@ -1059,23 +1058,7 @@ static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info) dio_fb_size = screen_width * screen_height * screen_depth /8 ; -if (gen2vm) { - pot_start =0 ; - pot_end =-1 ; - }else { -if (!(pci_resource_flags (pdev,0 ) &IORESOURCE_MEM ) || -pci_resource_len (pdev,0 ) < screen_fb_size) { -pr_err ("Resource not available or (0x%lx < 0x%lx)\n" , - (unsigned long )pci_resource_len (pdev,0 ), - (unsigned long ) screen_fb_size); - goto err1; - } - - pot_end =pci_resource_end (pdev,0 ); - pot_start = pot_end - screen_fb_size +1 ; - } - - ret =vmbus_allocate_mmio (&par->mem, hdev, pot_start, pot_end, + ret =vmbus_allocate_mmio (&par->mem, hdev,0 ,-1 , screen_fb_size,0x100000 , true);if (ret !=0 ) {pr_err ("Unable to allocate framebuffer memory\n" );
drivers/video/fbdev/pxa3xx-gcu.c +7 -5
@@ -650,6 +650,7 @@ static int pxa3xx_gcu_probe(struct platform_device *pdev)for (i =0 ; i <8 ; i++) { ret =pxa3xx_gcu_add_buffer (dev, priv);if (ret) { +pxa3xx_gcu_free_buffers (dev, priv);dev_err (dev,"failed to allocate DMA memory\n" ); goto err_disable_clk; }
@@ -666,15 +667,15 @@ static int pxa3xx_gcu_probe(struct platform_device *pdev) SHARED_SIZE, irq);return 0 ; -err_free_dma: -dma_free_coherent (dev,SHARED_SIZE , - priv->shared, priv->shared_phys); +err_disable_clk: +clk_disable_unprepare (priv->clk); err_misc_deregister:misc_deregister (&priv->misc_dev); -err_disable_clk: -clk_disable_unprepare (priv->clk); +err_free_dma: +dma_free_coherent (dev,SHARED_SIZE , + priv->shared, priv->shared_phys);return ret; }
@@ -687,6 +688,7 @@ static int pxa3xx_gcu_remove(struct platform_device *pdev)pxa3xx_gcu_wait_idle (priv);misc_deregister (&priv->misc_dev);dma_free_coherent (dev,SHARED_SIZE , priv->shared, priv->shared_phys); +clk_disable_unprepare (priv->clk);pxa3xx_gcu_free_buffers (dev, priv);return 0 ;
drivers/watchdog/rti_wdt.c +1 -1
@@ -227,7 +227,7 @@ static int rti_wdt_probe(struct platform_device *pdev)pm_runtime_enable (dev); ret =pm_runtime_get_sync (dev); -if (ret) { +if (ret <0 ) {pm_runtime_put_noidle (dev);pm_runtime_disable (&pdev->dev);return dev_err_probe (dev, ret,"runtime pm failed\n" );
drivers/watchdog/ts4800_wdt.c +4 -1
@@ -125,13 +125,16 @@ static int ts4800_wdt_probe(struct platform_device *pdev) ret =of_property_read_u32_index (np,"syscon" ,1 , ®);if (ret <0 ) {dev_err (dev,"no offset in syscon\n" ); +of_node_put (syscon_np);return ret; }/* allocate memory for watchdog struct */ wdt =devm_kzalloc (dev,sizeof (*wdt),GFP_KERNEL ); -if (!wdt) +if (!wdt) { +of_node_put (syscon_np);return -ENOMEM ; + }/* set regmap and offset to know where to write */ wdt->feed_offset = reg;
drivers/watchdog/wdat_wdt.c +1 -0
@@ -462,6 +462,7 @@ static int wdat_wdt_probe(struct platform_device *pdev)return ret;watchdog_set_nowayout (&wdat->wdd, nowayout); +watchdog_stop_on_reboot (&wdat->wdd);return devm_watchdog_register_device (dev, &wdat->wdd); }
drivers/xen/xlate_mmu.c +0 -1
@@ -261,7 +261,6 @@ int __init xen_xlate_map_ballooned_pages(xen_pfn_t **gfns, void **virt,return 0 ; } -EXPORT_SYMBOL_GPL (xen_xlate_map_ballooned_pages);struct remap_pfn {struct mm_struct *mm;
fs/afs/dir.c +4 -1
@@ -412,8 +412,11 @@ static int afs_dir_iterate_block(struct afs_vnode *dvnode, }/* skip if starts before the current position */ -if (offset < curr) +if (offset < curr) { +if (next > curr) + ctx->pos = blkoff + next *sizeof (union afs_xdr_dirent );continue ; + }/* found the next entry */ if (!dir_emit(ctx, dire->u.name, nlen,
fs/ceph/xattr.c +9 -1
@@ -317,6 +317,14 @@ static ssize_t ceph_vxattrcb_snap_btime(struct ceph_inode_info *ci, char *val, }#define XATTR_RSTAT_FIELD (_type, _name) \ XATTR_NAME_CEPH(_type, _name, VXATTR_FLAG_RSTAT) +#define XATTR_RSTAT_FIELD_UPDATABLE (_type, _name) \ + { \ + .name = CEPH_XATTR_NAME(_type, _name), \ + .name_size = sizeof (CEPH_XATTR_NAME(_type, _name)), \ + .getxattr_cb = ceph_vxattrcb_ ## _type ## _ ## _name, \ + .exists_cb = NULL, \ + .flags = VXATTR_FLAG_RSTAT, \ + }#define XATTR_LAYOUT_FIELD (_type, _name, _field) \ { \ .name = CEPH_XATTR_NAME2(_type, _name, _field), \
@@ -354,7 +362,7 @@ static struct ceph_vxattr ceph_dir_vxattrs[] = {XATTR_RSTAT_FIELD (dir, rfiles),XATTR_RSTAT_FIELD (dir, rsubdirs),XATTR_RSTAT_FIELD (dir, rbytes), - XATTR_RSTAT_FIELD(dir, rctime), + XATTR_RSTAT_FIELD_UPDATABLE(dir, rctime), { .name ="ceph.dir.pin" , .name_size = sizeof("ceph.dir.pin"),
fs/cifs/cifsfs.c +1 -1
@@ -1033,7 +1033,7 @@ struct file_system_type cifs_fs_type = { };MODULE_ALIAS_FS ("cifs" ); -static struct file_system_type smb3_fs_type = { +struct file_system_type smb3_fs_type = { .owner =THIS_MODULE , .name ="smb3" , .mount = smb3_do_mount,
fs/cifs/cifsfs.h +1 -1
@@ -51,7 +51,7 @@ static inline unsigned long cifs_get_time(struct dentry *dentry)return (unsigned long ) dentry->d_fsdata; } -extern struct file_system_type cifs_fs_type; +extern struct file_system_type cifs_fs_type, smb3_fs_type;extern const struct address_space_operations cifs_addr_ops;extern const struct address_space_operations cifs_addr_ops_smallbuf;
fs/cifs/cifsglob.h +3 -1
@@ -1982,11 +1982,13 @@ extern mempool_t *cifs_mid_poolp;/* Operations for different SMB versions */ #define SMB1_VERSION_STRING "1.0" +#define SMB20_VERSION_STRING "2.0" +#ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY extern struct smb_version_operations smb1_operations;extern struct smb_version_values smb1_values; -#define SMB20_VERSION_STRING "2.0"extern struct smb_version_operations smb20_operations;extern struct smb_version_values smb20_values; +#endif /* CIFS_ALLOW_INSECURE_LEGACY */ #define SMB21_VERSION_STRING "2.1"extern struct smb_version_operations smb21_operations;extern struct smb_version_values smb21_values;
fs/cifs/misc.c +16 -11
@@ -1053,18 +1053,23 @@ static struct super_block *__cifs_get_super(void (*f)(struct super_block *, void .data = data, .sb = NULL, }; +struct file_system_type **fs_type = (struct file_system_type *[]) { + &cifs_fs_type, &smb3_fs_type,NULL , + }; -iterate_supers_type (&cifs_fs_type, f, &sd); - -if (!sd.sb) -return ERR_PTR (-EINVAL ); -/* -* Grab an active reference in order to prevent automounts (DFS links) -* of expiring and then freeing up our cifs superblock pointer while -* we're doing failover. -*/ -cifs_sb_active (sd.sb); -return sd.sb; +for (; *fs_type; fs_type++) { +iterate_supers_type (*fs_type, f, &sd); +if (sd.sb) { +/* +* Grab an active reference in order to prevent automounts (DFS links) +* of expiring and then freeing up our cifs superblock pointer while +* we're doing failover. +*/ +cifs_sb_active (sd.sb); +return sd.sb; + } + } +return ERR_PTR (-EINVAL ); }static void __cifs_put_super (struct super_block *sb)
fs/cifs/smb2ops.c +6 -1
@@ -4032,11 +4032,13 @@ smb3_set_oplock_level(struct cifsInodeInfo *cinode, __u32 oplock, } } +#ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY static bool smb2_is_read_op (__u32 oplock) {return oplock ==SMB2_OPLOCK_LEVEL_II ; } +#endif /* CIFS_ALLOW_INSECURE_LEGACY */ static bool smb21_is_read_op (__u32 oplock)
@@ -5122,7 +5124,7 @@ smb2_make_node(unsigned int xid, struct inode *inode,return rc; } - +#ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY struct smb_version_operations smb20_operations = { .compare_fids = smb2_compare_fids, .setup_request = smb2_setup_request,
@@ -5220,6 +5222,7 @@ struct smb_version_operations smb20_operations = { .llseek = smb3_llseek, .is_status_io_timeout = smb2_is_status_io_timeout, }; +#endif /* CIFS_ALLOW_INSECURE_LEGACY */ struct smb_version_operations smb21_operations = { .compare_fids = smb2_compare_fids,
@@ -5548,6 +5551,7 @@ struct smb_version_operations smb311_operations = { .is_status_io_timeout = smb2_is_status_io_timeout, }; +#ifdef CONFIG_CIFS_ALLOW_INSECURE_LEGACY struct smb_version_values smb20_values = { .version_string =SMB20_VERSION_STRING , .protocol_id = SMB20_PROT_ID,
@@ -5568,6 +5572,7 @@ struct smb_version_values smb20_values = { .signing_required = SMB2_NEGOTIATE_SIGNING_REQUIRED, .create_lease_size = sizeof(struct create_lease), }; +#endif /* ALLOW_INSECURE_LEGACY */ struct smb_version_values smb21_values = { .version_string =SMB21_VERSION_STRING ,
fs/cifs/smb2pdu.c +3 -0
@@ -281,6 +281,9 @@ smb2_reconnect(__le16 smb2_command, struct cifs_tcon *tcon, ses->binding_chan =NULL ;mutex_unlock (&tcon->ses->session_mutex); goto failed; + }else if (rc) { +mutex_unlock (&ses->session_mutex); + goto out; } }/*
fs/f2fs/checkpoint.c +2 -2
@@ -148,7 +148,7 @@ static bool __is_bitmap_valid(struct f2fs_sb_info *sbi, block_t blkaddr,f2fs_err (sbi,"Inconsistent error blkaddr:%u, sit bitmap:%d" , blkaddr, exist);set_sbi_flag (sbi,SBI_NEED_FSCK ); -WARN_ON (1 ); +dump_stack (); }return exist; }
@@ -186,7 +186,7 @@ bool f2fs_is_valid_blkaddr(struct f2fs_sb_info *sbi,f2fs_warn (sbi,"access invalid blkaddr:%u" , blkaddr);set_sbi_flag (sbi,SBI_NEED_FSCK ); -WARN_ON (1 ); +dump_stack ();return false; }else {return __is_bitmap_valid (sbi, blkaddr, type);
fs/jffs2/fs.c +1 -0
@@ -603,6 +603,7 @@ int jffs2_do_fill_super(struct super_block *sb, struct fs_context *fc)jffs2_free_raw_node_refs (c);kvfree (c->blocks);jffs2_clear_xattr_subsystem (c); +jffs2_sum_exit (c); out_inohash:kfree (c->inocache_list); out_wbuf:
fs/kernfs/dir.c +19 -12
@@ -19,7 +19,15 @@DEFINE_MUTEX (kernfs_mutex);static DEFINE_SPINLOCK (kernfs_rename_lock);/* kn->parent and ->name */
Lines of this file are not shown. View the raw message.
include/net/netfilter/nf_tables_offload.h +1 -1
Lines of this file are not shown. View the raw message.
include/net/sch_generic.h +14 -28
42 lines not on this page · raw message
net/netfilter/nf_tables_api.c +22 -30
52 lines not on this page · raw message
tools/testing/selftests/netfilter/nft_nat.sh +43 -0
43 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.