Linux 5.10.177
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.177 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
------------
Makefile | 2 arch/arm/boot/dts/e60k02.dtsi | 1 arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts | 1 arch/m68k/kernel/traps.c | 4 arch/mips/bmips/dma.c | 5 arch/mips/bmips/setup.c | 8 arch/powerpc/kernel/ptrace/ptrace-view.c | 6 arch/riscv/include/uapi/asm/setup.h | 8 arch/s390/lib/uaccess.c | 2 arch/sh/include/asm/processor_32.h | 1 arch/sh/kernel/signal_32.c | 3 arch/xtensa/kernel/traps.c | 16 drivers/atm/idt77252.c | 11 drivers/bluetooth/btqcomsmd.c | 17 drivers/bluetooth/btsdio.c | 1 drivers/bus/imx-weim.c | 2 drivers/char/ipmi/ipmi_ssif.c | 137 ++------ drivers/firmware/arm_scmi/mailbox.c | 37 ++ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 19 + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h | 12 drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c | 10 drivers/gpu/drm/i915/display/intel_display.c | 1 drivers/gpu/drm/i915/i915_active.c | 3 drivers/gpu/drm/meson/meson_drv.c | 20 - drivers/gpu/drm/sun4i/sun4i_drv.c | 4 drivers/hid/hid-cp2112.c | 1 drivers/hwmon/hwmon.c | 7 drivers/hwmon/it87.c | 4 drivers/i2c/busses/i2c-imx-lpi2c.c | 4 drivers/i2c/busses/i2c-xgene-slimpro.c | 3 drivers/input/mouse/alps.c | 16 drivers/input/mouse/focaltech.c | 8 drivers/input/touchscreen/goodix.c | 14 drivers/interconnect/qcom/osm-l3.c | 2 drivers/md/dm-crypt.c | 16 drivers/md/dm-stats.c | 7 drivers/md/dm-stats.h | 2 drivers/md/dm-thin.c | 2 drivers/md/dm.c | 4 drivers/md/md.c | 3 drivers/mtd/nand/raw/meson_nand.c | 8 drivers/net/dsa/mv88e6xxx/chip.c | 9 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 8 drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 2 drivers/net/ethernet/google/gve/gve_ethtool.c | 5 drivers/net/ethernet/intel/i40e/i40e_diag.c | 11 drivers/net/ethernet/intel/i40e/i40e_diag.h | 2 drivers/net/ethernet/intel/iavf/iavf_common.c | 2 drivers/net/ethernet/intel/iavf/iavf_txrx.c | 2 drivers/net/ethernet/intel/igb/igb_main.c | 2 drivers/net/ethernet/intel/igbvf/netdev.c | 8 drivers/net/ethernet/intel/igbvf/vf.c | 13 drivers/net/ethernet/intel/igc/igc_main.c | 20 - drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c | 6 drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_ofld.c | 3 drivers/net/ethernet/mellanox/mlx5/core/eswitch.c | 1 drivers/net/ethernet/natsemi/sonic.c | 4 drivers/net/ethernet/qlogic/qed/qed_sriov.c | 5 drivers/net/ethernet/qualcomm/emac/emac.c | 6 drivers/net/ethernet/realtek/r8169_phy_config.c | 3 drivers/net/ethernet/sfc/ef10.c | 38 +- drivers/net/ethernet/sfc/efx.c | 17 drivers/net/ethernet/stmicro/stmmac/common.h | 1 drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c | 61 --- drivers/net/ethernet/toshiba/ps3_gelic_net.c | 41 +- drivers/net/ethernet/toshiba/ps3_gelic_net.h | 5 drivers/net/ethernet/xircom/xirc2ps_cs.c | 5 drivers/net/ieee802154/ca8210.c | 5 drivers/net/ipa/gsi_trans.c | 2 drivers/net/mdio/mdio-thunder.c | 1 drivers/net/mdio/of_mdio.c | 12 drivers/net/net_failover.c | 8 drivers/net/phy/dp83869.c | 6 drivers/net/phy/mdio_devres.c | 11 drivers/net/phy/phy.c | 23 - drivers/net/usb/cdc_mbim.c | 5 drivers/net/usb/qmi_wwan.c | 1 drivers/net/usb/smsc95xx.c | 6 drivers/net/xen-netback/common.h | 2 drivers/net/xen-netback/netback.c | 25 + drivers/pinctrl/pinctrl-amd.c | 36 +- drivers/pinctrl/pinctrl-at91-pio4.c | 1 drivers/pinctrl/pinctrl-ocelot.c | 2 drivers/platform/chrome/cros_ec_chardev.c | 2 drivers/power/supply/bq24190_charger.c | 64 +-- drivers/power/supply/da9150-charger.c | 1 drivers/ptp/ptp_qoriq.c | 2 drivers/regulator/fixed.c | 2 drivers/s390/crypto/vfio_ap_drv.c | 3 drivers/scsi/device_handler/scsi_dh_alua.c | 6 drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 3 drivers/scsi/lpfc/lpfc_sli.c | 8 drivers/scsi/megaraid/megaraid_sas_fusion.c | 4 drivers/scsi/qla2xxx/qla_os.c | 11 drivers/scsi/scsi_devinfo.c | 1 drivers/scsi/storvsc_drv.c | 16 drivers/scsi/ufs/ufshcd.c | 1 drivers/target/iscsi/iscsi_target_parameters.c | 12 drivers/tee/amdtee/core.c | 29 - drivers/thunderbolt/nhi.c | 2 drivers/thunderbolt/usb4.c | 22 - drivers/tty/serial/8250/Kconfig | 4 drivers/tty/serial/fsl_lpuart.c | 13 drivers/usb/cdns3/cdns3-pci-wrap.c | 5 drivers/usb/chipidea/ci.h | 2 drivers/usb/chipidea/core.c | 11 drivers/usb/chipidea/otg.c | 5 drivers/usb/dwc2/platform.c | 16 drivers/usb/dwc3/gadget.c | 79 ++-- drivers/usb/gadget/function/u_audio.c | 2 drivers/usb/storage/unusual_uas.h | 7 drivers/usb/typec/ucsi/ucsi.c | 11 drivers/video/fbdev/au1200fb.c | 3 drivers/video/fbdev/geode/lxfb_core.c | 3 drivers/video/fbdev/intelfb/intelfbdrv.c | 3 drivers/video/fbdev/nvidia/nvidia.c | 2 drivers/video/fbdev/tgafb.c | 3 fs/btrfs/ioctl.c | 2 fs/btrfs/qgroup.c | 11 fs/btrfs/volumes.c | 11 fs/cifs/cifsfs.h | 5 fs/cifs/cifssmb.c | 9 fs/cifs/smb2ops.c | 2 fs/ext4/inode.c | 3 fs/gfs2/aops.c | 2 fs/gfs2/bmap.c | 3 fs/gfs2/glops.c | 3 fs/nfs/nfs4proc.c | 5 fs/nfsd/nfs4proc.c | 22 - fs/nilfs2/ioctl.c | 2 fs/ocfs2/aops.c | 18 - fs/verity/enable.c | 24 - fs/verity/verify.c | 12 fs/xfs/xfs_extent_busy.c | 14 fs/xfs/xfs_trans_dquot.c | 13 fs/zonefs/super.c | 2 include/linux/nvme-tcp.h | 5 include/linux/of_mdio.h | 22 + include/net/bluetooth/l2cap.h | 1 include/trace/events/rcu.h | 2 kernel/bpf/core.c | 2 kernel/compat.c | 2 kernel/events/core.c | 4 kernel/kcsan/Makefile | 3 kernel/sched/core.c | 7 kernel/sched/fair.c | 54 ++- kernel/trace/kprobe_event_gen_test.c | 4 net/bluetooth/l2cap_core.c | 129 +++++-- net/can/bcm.c | 16 net/hsr/hsr_framereg.c | 2 net/ipv4/ip_gre.c | 4 net/ipv6/ip6_gre.c | 4 net/mac80211/wme.c | 6 net/tls/tls_main.c | 9 net/xdp/xdp_umem.c | 13 security/keys/request_key.c | 9 sound/pci/asihpi/hpi6205.c | 2 sound/pci/hda/patch_ca0132.c | 4 sound/pci/hda/patch_conexant.c | 6 sound/pci/hda/patch_realtek.c | 1 sound/pci/ymfpci/ymfpci.c | 71 ++-- sound/pci/ymfpci/ymfpci_main.c | 74 ++-- sound/usb/format.c | 8 tools/bootconfig/test-bootconfig.sh | 12 tools/lib/bpf/btf_dump.c | 154 ++++++--- tools/power/x86/turbostat/turbostat.8 | 2 tools/power/x86/turbostat/turbostat.c | 2 tools/testing/selftests/bpf/prog_tests/btf.c | 28 + tools/testing/selftests/bpf/progs/btf_dump_test_case_bitfields.c | 2 tools/testing/selftests/bpf/progs/btf_dump_test_case_packing.c | 80 ++++ tools/testing/selftests/bpf/progs/btf_dump_test_case_padding.c | 171 ++++++++-- virt/kvm/kvm_main.c | 149 ++++++-- 173 files changed, 1647 insertions(+), 797 deletions(-)
AKASHI Takahiro (1):
igc: fix the validation logic for taprio's gate list
Adrien Thierry (1):
scsi: ufs: core: Add soft dependency on governor_simpleondemand
Akihiko Odaki (1):
igbvf: Regard vf reset nack as success
Al Viro (1):
sh: sanitize the flags on sigreturn
Alex Elder (1):
net: ipa: compute DMA pool size properly
Alexander Aring (1):
ca8210: fix mac_len negative array access
Alexander Lobakin (2):
iavf: fix inverted Rx hash condition leading to disabled hash
iavf: fix non-tunneled IPv6 UDP packet type and hashing
Alexander Stein (1):
i2c: imx-lpi2c: check only for enabled interrupt flags
Alexander Sverdlin (1):
tty: serial: fsl_lpuart: fix race on RX DMA shutdown
Alexandre Ghiti (1):
riscv: Bump COMMAND_LINE_SIZE value to 1024
Alvin Šipraga (1):
usb: gadget: u_audio: don't let userspace block driver unbind
Anand Jain (1):
btrfs: scan device in non-exclusive mode
Anders Roxell (1):
kernel: kcsan: kcsan_test: build without structleak plugin
Andreas Gruenbacher (1):
gfs2: Always check inode size of inline inodes
Andrii Nakryiko (3):
libbpf: Fix BTF-to-C converter's padding logic selftests/bpf: Add few corner cases to test padding handling of btf_dump
libbpf: Fix btf_dump's packed struct determination
Anton Gusev (1):
tracing: Fix wrong return in kprobe_event_gen_test.c
Arseniy Krasnov (1):
mtd: rawnand: meson: invalidate cache on polling ECC bit
Brian Foster (1):
xfs: don't reuse busy extents on extent trim
Caleb Sander (1):
nvme-tcp: fix nvme_tcp_term_pdu to match spec
Christophe JAILLET (1):
regulator: Handle deferred clk
ChunHao Lin (1):
r8169: fix RTL8168H and RTL8107E rx crc error
Coly Li (1):
dm thin: fix deadlock when swapping to thin device
Corey Minyard (3):
ipmi:ssif: Increase the message retry time ipmi:ssif: resend_msg() cannot fail ipmi:ssif: Add a timer between request retries
Cristian Marussi (1):
firmware: arm_scmi: Fix device node validation for mailbox transport
Dai Ngo (1):
NFSD: fix use-after-free in __nfs42_ssc_open()
Damien Le Moal (1):
zonefs: Fix error message in zonefs_file_dio_append()
Dan Carpenter (1):
net/mlx5: E-Switch, Fix an Oops in error handling code
Daniel Borkmann (1):
bpf: Adjust insufficient default bpf_jit_limit
Daniil Tatianin (1):
qed/qed_sriov: guard against NULL derefs from qed_iov_get_vf_info
Danny Kaehn (1):
HID: cp2112: Fix driver not registering GPIO IRQ chip as threaded
Darrick J. Wong (1):
xfs: shut down the filesystem if we screw up quota reservation
David Disseldorp (1):
cifs: fix DFS traversal oops without CONFIG_CIFS_DFS_UPCALL
David Howells (1):
keys: Do not cache key in task struct if key is requested from kernel thread
Dmitry Baryshkov (1):
interconnect: qcom: osm-l3: fix icc_onecell_data allocation
Douglas Raillard (1):
rcu: Fix rcu_torture_read ftrace event
Eduard Zingerman (1):
selftests/bpf: Test btf dump for struct with padding only fields
Enrico Sau (2):
net: usb: cdc_mbim: avoid altsetting toggling for Telit FE990
net: usb: qmi_wwan: add Telit 0x1080 composition
Eric Biggers (1):
fsverity: don't drop pagecache at end of FS_IOC_ENABLE_VERITY
Eric Dumazet (1):
erspan: do not use skb_mac_header() in ndo_start_xmit()
Fabrice Gasnier (1):
usb: dwc2: fix a devres leak in hw_enable upon suspend resume
Faicker Mo (1):
net/net_failover: fix txq exceeding warning
Fangzhi Zuo (1):
drm/amd/display: Add DSC Support for Synaptics Cascaded MST Hub
Felix Fietkau (1):
wifi: mac80211: fix qos on mesh interfaces
Filipe Manana (1):
btrfs: fix race between quota disable and quota assign ioctls
Florian Fainelli (1):
net: phy: Ensure state transitions are processed from phy_stop()
Frank Crawford (1):
hwmon (it87): Fix voltage scaling for chips with 10.9mV ADCs
Gaosheng Cui (1):
intel/igbvf: free irq on the error path in igbvf_request_msix()
Geert Uytterhoeven (1):
serial: 8250: SERIAL_8250_ASPEED_VUART should depend on ARCH_ASPEED
Geoff Levand (2):
net/ps3_gelic_net: Fix RX sk_buff length
net/ps3_gelic_net: Use dma_mapping_error
Greg Kroah-Hartman (1):
Linux 5.10.177
Hangyu Hua (1):
net: tls: fix possible race condition between do_tls_getsockopt_conf() and do_tls_setsockopt_conf()
Hans de Goede (2):
usb: ucsi: Fix NULL pointer deref in ucsi_connector_change()
Input: goodix - add Lenovo Yoga Book X90F to nine_bytes_report DMI table
Harshit Mogalapalli (1):
ca8210: Fix unsigned mac_len comparison with zero in ca8210_skb_tx()
Heiko Carstens (1):
s390/uaccess: add missing earlyclobber annotations to __clear_user()
Horatiu Vultur (1):
pinctrl: ocelot: Fix alt mode for ocelot
Ivan Bornyakov (1):
bus: imx-weim: fix branch condition evaluates to a garbage value
Ivan Orlov (1):
can: bcm: bcm_tx_setup(): fix KMSAN uninit-value in vfs_write
Jakob Koschel (1):
scsi: lpfc: Avoid usage of list iterator variable after loop
Jan Kara via Ocfs2-devel (1):
ocfs2: fix data corruption after failed write
Jason A. Donenfeld (1):
Input: focaltech - use explicitly signed char type
Jason Wang (1):
serial: fsl_lpuart: Fix comment typo
Jens Axboe (1):
powerpc: Don't try to copy PPR for task with NULL pt_regs
Jiasheng Jiang (1):
dm stats: check for and propagate alloc_percpu failure
Joel Selvaraj (1):
scsi: core: Add BLIST_SKIP_VPD_PAGES for SKhynix H28U74301AMR
Johan Hovold (3):
drm/sun4i: fix missing component unbind on bind errors drm/meson: fix missing component unbind on bind errors
pinctrl: at91-pio4: fix domain name assignment
Joshua Washington (1):
gve: Cache link_speed value from device
Josua Mayer (1):
net: phy: dp83869: fix default value for tx-/rx-internal-delay
Juergen Gross (1):
xen/netback: don't do grant copy across page boundary
Kal Conley (1):
xsk: Add missing overflow check in xdp_umem_reg
Kalesh AP (1):
bnxt_en: Fix typo in PCI id to device description string mapping
Kang Chen (1):
scsi: hisi_sas: Check devm_add_action() return value
Kornel Dulęba (1):
pinctrl: amd: Disable and mask interrupts on resume
Kristian Overskeid (1):
net: hsr: Don't log netdev_err message on unknown prp dst node
Kuninori Morimoto (2):
ALSA: asihpi: check pao in control_message()
ALSA: hda/ca0132: fixup buffer overrun at tuning_ctl_set()
Lama Kayal (1):
net/mlx5: Fix steering rules cleanup
Li Zetao (1):
atm: idt77252: fix kmemleak when rmmod idt77252
Liang He (1):
net: mdio: thunder: Add missing fwnode_handle_put()
Liguang Zhang (1):
ipmi:ssif: make ssif_i2c_send() void
Lin Ma (1):
igb: revert rtnl_lock() that causes deadlock
Linus Torvalds (1):
sched_getaffinity: don't assume 'cpumask_size()' is fully initialized
Lorenz Bauer (1):
selftests/bpf: check that modifier resolves after pointer
Lucas Stach (1):
drm/etnaviv: fix reference leak when mmaping imported buffer
Luiz Augusto von Dentz (2):
Bluetooth: L2CAP: Fix not checking for maximum number of DCID
Bluetooth: L2CAP: Fix responding with wrong PDU type
Maher Sanalla (1):
net/mlx5: Read the TC mapping of all priorities on ETS query
Marco Elver (1):
kcsan: avoid passing -g for test
Mario Limonciello (1):
thunderbolt: Use const qualifier for ring_interrupt_index
Martin Blumenstingl (1):
drm/meson: Fix error handling when afbcd.ops->init fails
Masami Hiramatsu (Google) (1):
bootconfig: Fix testcase to increase max node
Matthieu Baerts (1):
hsr: ratelimit only when errors are printed
Maurizio Lombardi (1):
scsi: target: iscsi: Fix an error message in iscsi_check_key()
Max Filippov (1):
xtensa: fix KASAN report for show_stack
Maxime Bizon (1):
net: mdio: fix owner field for mdio buses registered using device-tree
Miaohe Lin (1):
KVM: fix memoryleak in kvm_init()
Michael Chan (1):
bnxt_en: Add missing 200G link speed reporting
Michael Grzeschik (1):
usb: dwc3: gadget: move cmd_endtransfer to extra function
Michael Kelley (1):
scsi: storvsc: Handle BlockSize change in Hyper-V VHD/VHDX file
Michael Schmitz (1):
m68k: Only force 030 bus error if PC not in exception table
Mika Westerberg (1):
thunderbolt: Use scale field when allocating USB3 bandwidth
Mike Snitzer (1):
dm crypt: avoid accessing uninitialized tasklet
Mikulas Patocka (1):
dm crypt: add cond_resched() to dmcrypt_write()
Minghao Chi (1):
power: supply: bq24190_charger: using pm_runtime_resume_and_get instead of pm_runtime_get_sync
Nathan Huckleberry (1):
fsverity: Remove WQ_UNBOUND from fsverity read workqueue
NeilBrown (1):
md: avoid signed overflow in slot_store()
Nilesh Javali (1):
scsi: qla2xxx: Perform lockless command completion in abort path
Nirmoy Das (1):
drm/i915/active: Fix missing debug object activation
Paulo Alcantara (1):
cifs: prevent infinite recursion in CIFSGetDFSRefer()
Pawel Laszczak (1):
usb: cdns3: Fix issue with using incorrect PCI device function
Peng Fan (2):
ARM: dts: imx6sll: e60k02: fix usbotg1 pinctrl
ARM: dts: imx6sl: tolino-shine2hd: fix usbotg1 pinctrl
Phinex Hung (1):
hwmon: fix potential sensor registration fail if of_node is missing
Prarit Bhargava (1):
tools/power turbostat: Fix /dev/cpu_dma_latency warnings
Radoslaw Tyl (1):
i40e: fix registers dump after run ethtool adapter self test
Randy Dunlap (1):
serial: 8250: ASPEED_VUART: select REGMAP instead of depending on it
Rijo Thomas (1):
tee: amdtee: fix race condition in amdtee_open_session
Ryusuke Konishi (1):
nilfs2: fix kernel-infoleak in nilfs_ioctl_wrap_copy()
Sean Christopherson (3):
KVM: Clean up benign vcpu->cpu data races when kicking vCPUs
KVM: KVM: Use cpumask_available() to check for NULL cpumask when kicking vCPUs
KVM: Register /dev/kvm as the _very_ last thing during initialization
Shyam Prasad N (1):
cifs: empty interface list when server doesn't support query interfaces
Song Liu (1):
perf: fix perf_event_context->time
SongJingyi (1):
ptp_qoriq: fix memory leak in probe()
Steffen Bätz (1):
net: dsa: mv88e6xxx: Enable IGMP snooping on user ports only
Stephan Gerhold (1):
Bluetooth: btqcomsmd: Fix command timeout after setting BD address
Szymon Heidrich (1):
net: usb: smsc95xx: Limit packet length to skb->len
Takashi Iwai (3):
ALSA: ymfpci: Fix assignment in if condition
ALSA: hda/conexant: Partial revert of a quirk for Lenovo
ALSA: usb-audio: Fix regression on detection of Roland VS-100
Tasos Sahanidis (1):
ALSA: ymfpci: Fix BUG_ON in probe function
Tomas Henzl (1):
scsi: megaraid_sas: Fix crash after a double completion
Tony Krowiak (1):
s390/vfio-ap: fix memory leak in vfio_ap device driver
Trond Myklebust (1):
NFSv4: Fix hangs when recovering open state after a server reboot
Tzung-Bi Shih (1):
platform/chrome: cros_ec_chardev: fix kernel data leak from ioctl
Ville Syrjälä (1):
drm/i915: Preserve crtc_state->inherited during state clearing
Vincent Guittot (1):
sched/fair: Sanitize vruntime of entity being migrated
Vitaly Kuznetsov (2):
KVM: Optimize kvm_make_vcpus_request_mask() a bit
KVM: Pre-allocate cpumasks for kvm_make_all_cpus_request_except()
Vladimir Oltean (1):
net: stmmac: don't reject VLANs when IFF_PROMISC is set
Wei Chen (6):
i2c: xgene-slimpro: Fix out-of-bounds bug in xgene_slimpro_i2c_xfer()
fbdev: tgafb: Fix potential divide by zero
fbdev: nvidia: Fix potential divide by zero
fbdev: intelfb: Fix potential divide by zero
fbdev: lxfb: Fix potential divide by zero
fbdev: au1200fb: Fix potential divide by zero
Wesley Cheng (1):
usb: dwc3: gadget: Add 1ms delay after end transfer command without IOC
Xu Yang (2):
usb: chipdea: core: fix return -EINVAL if request role is the same with current role
usb: chipidea: core: fix possible concurrent when switch role
Yang Jihong (1):
perf/core: Fix perf_output_begin parameter is incorrectly invoked in perf_event_bpf_output
Yaroslav Furman (1):
uas: Add US_FL_NO_REPORT_OPCODES for JMicron JMS583Gen 2
Ye Bin (1):
ext4: fix kernel BUG in 'ext4_write_inline_data_end()'
Yu Kuai (1):
scsi: scsi_dh_alua: Fix memleak for 'qdata' in alua_activate()
Zhang Changzhong (1):
net/sonic: use dma_mapping_error() for error check
Zhang Qiao (1):
sched/fair: sanitize vruntime of entity being placed
Zheng Wang (5):
power: supply: bq24190: Fix use after free bug in bq24190_remove due to race condition
power: supply: da9150: Fix use after free bug in da9150_charger_remove due to race condition
xirc2ps_cs: Fix use after free bug in xirc2ps_detach
net: qcom/emac: Fix use after free bug in emac_remove due to race condition
Bluetooth: btsdio: fix use after free bug in btsdio_remove due to unfinished work
huangwenhui (1):
ALSA: hda/realtek: Add quirk for Lenovo ZhaoYang CF4620Z
msizanoen (1):
Input: alps - fix compatibility with -funsigned-char
Álvaro Fernández Rojas (1):
mips: bmips: BCM6358: disable RAC flush for TP1
Íñigo Huguet (1):
sfc: ef10: don't overwrite offload features at NIC reset
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 176 +SUBLEVEL = 177 EXTRAVERSION = NAME = Dare mighty things
arch/arm/boot/dts/e60k02.dtsi +1 -0
@@ -296,6 +296,7 @@ &usdhc3 { &usbotg1 { pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usbotg1>; disable-over-current; srp-disable; hnp-disable;
arch/arm/boot/dts/imx6sl-tolino-shine2hd.dts +1 -0
@@ -580,6 +580,7 @@ &usdhc3 { &usbotg1 { pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usbotg1>; disable-over-current; srp-disable; hnp-disable;
arch/m68k/kernel/traps.c +3 -1
@@ -30,6 +30,7 @@#include <linux/init.h> #include <linux/ptrace.h> #include <linux/kallsyms.h> +#include <linux/extable.h> #include <asm/setup.h> #include <asm/fpu.h>
@@ -549,7 +550,8 @@ static inline void bus_error030 (struct frame *fp) errorcode |=2 ;if (mmusr & (MMU_I |MMU_WP )) { -if (ssw &4 ) { +/* We might have an exception table for this PC */ +if (ssw &4 && !search_exception_tables (fp->ptregs.pc)) { pr_err("Data %s fault at %#010lx in %s (pc=%#lx)\n", ssw & RW ? "read" : "write", fp->un.fmtb.daddr,
arch/mips/bmips/dma.c +5 -0
@@ -64,6 +64,8 @@ phys_addr_t dma_to_phys(struct device *dev, dma_addr_t dma_addr)return dma_addr; } +bool bmips_rac_flush_disable; +void arch_sync_dma_for_cpu_all (void ) {void __iomem *cbr =BMIPS_GET_CBR ();
@@ -74,6 +76,9 @@ void arch_sync_dma_for_cpu_all(void) boot_cpu_type() != CPU_BMIPS4380)return ; +if (unlikely (bmips_rac_flush_disable)) +return ; +/* Flush stale data out of the readahead cache */ cfg =__raw_readl (cbr +BMIPS_RAC_CONFIG );__raw_writel (cfg |0x100 , cbr +BMIPS_RAC_CONFIG );
arch/mips/bmips/setup.c +8 -0
@@ -34,6 +34,8 @@#define REG_BCM6328_OTP ((void __iomem *)CKSEG1ADDR(0x1000062c))#define BCM6328_TP1_DISABLED BIT(9) +extern bool bmips_rac_flush_disable; +static const unsigned long kbase =VMLINUX_LOAD_ADDRESS &0xfff00000 ;struct bmips_quirk {
@@ -103,6 +105,12 @@ static void bcm6358_quirks(void)* disable SMP for now */ bmips_smp_enabled =0 ; + +/* +* RAC flush causes kernel panics on BCM6358 when booting from TP1 +* because the bootloader is not initializing it properly. +*/ + bmips_rac_flush_disable = !!(read_c0_brcm_cmt_local () & (1 <<31 )); }static void bcm6368_quirks (void )
arch/powerpc/kernel/ptrace/ptrace-view.c +6 -0
@@ -298,6 +298,9 @@ static int gpr_set(struct task_struct *target, const struct user_regset *regset,static int ppr_get (struct task_struct *target,const struct user_regset *regset,struct membuf to) { +if (!target->thread.regs) +return -EINVAL ; +return membuf_write (&to, &target->thread.regs->ppr,sizeof (u64)); }
@@ -305,6 +308,9 @@ static int ppr_set(struct task_struct *target, const struct user_regset *regset, unsigned int pos, unsigned int count, const void *kbuf, const void __user *ubuf) { + if (!target->thread.regs) + return -EINVAL; + return user_regset_copyin(&pos, &count, &kbuf, &ubuf, &target->thread.regs->ppr, 0, sizeof(u64)); }
arch/riscv/include/uapi/asm/setup.h new file +8 -0
@@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */ + +#ifndef _UAPI_ASM_RISCV_SETUP_H +#define _UAPI_ASM_RISCV_SETUP_H + +#define COMMAND_LINE_SIZE 1024 + +#endif /* _UAPI_ASM_RISCV_SETUP_H */
arch/s390/lib/uaccess.c +1 -1
@@ -339,7 +339,7 @@ static inline unsigned long clear_user_mvcos(void __user *to, unsigned long size"4: slgr %0,%0\n" "5:\n" EX_TABLE(0b,2b) EX_TABLE(3b,5b) - : "+a" (size), "+a" (to), "+a" (tmp1), "=a" (tmp2) + : "+&a" (size), "+&a" (to), "+a" (tmp1), "=&a" (tmp2) : "a" (empty_zero_page), "d" (reg0) : "cc", "memory");return size; }
arch/sh/include/asm/processor_32.h +1 -0
@@ -50,6 +50,7 @@#define SR_FD 0x00008000#define SR_MD 0x40000000 +#define SR_USER_MASK 0x00000303 // M, Q, S, T bits/* * DSP structure and data */
arch/sh/kernel/signal_32.c +3 -0
@@ -115,6 +115,7 @@ static int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *r0_p) { unsigned int err = 0; +unsigned int sr = regs->sr & ~SR_USER_MASK ;#define COPY (x) err |= __get_user(regs->x, &sc->sc_##x)COPY (regs[1 ]);
@@ -130,6 +131,8 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *r0_pCOPY (sr);COPY (pc);#undef COPY + regs->sr = (regs->sr &SR_USER_MASK ) | sr; +#ifdef CONFIG_SH_FPU if (boot_cpu_data.flags &CPU_HAS_FPU ) {int owned_fp;
arch/xtensa/kernel/traps.c +12 -4
@@ -503,7 +503,7 @@ static size_t kstack_depth_to_print = CONFIG_PRINT_STACK_DEPTH;void show_stack (struct task_struct *task,unsigned long *sp,const char *loglvl) { -size_t len; +size_t len, off =0 ;if (!sp) sp =stack_pointer (task);
@@ -512,9 +512,17 @@ void show_stack(struct task_struct *task, unsigned long *sp, const char *loglvl) kstack_depth_to_print * STACK_DUMP_ENTRY_SIZE);printk ("%sStack:\n" , loglvl); -print_hex_dump (loglvl," " ,DUMP_PREFIX_NONE , -STACK_DUMP_LINE_SIZE ,STACK_DUMP_ENTRY_SIZE , - sp, len, false); +while (off < len) { +u8 line[STACK_DUMP_LINE_SIZE ]; +size_t line_len = len - off >STACK_DUMP_LINE_SIZE ? +STACK_DUMP_LINE_SIZE : len - off; + +__memcpy (line, (u8 *)sp + off, line_len); +print_hex_dump (loglvl," " ,DUMP_PREFIX_NONE , +STACK_DUMP_LINE_SIZE ,STACK_DUMP_ENTRY_SIZE , + line, line_len, false); + off +=STACK_DUMP_LINE_SIZE ; + }show_trace (task, sp, loglvl); }
drivers/atm/idt77252.c +11 -0
@@ -2915,6 +2915,7 @@ close_card_oam(struct idt77252_dev *card)recycle_rx_pool_skb (card, &vc->rcv.rx_pool); } +kfree (vc); } } }
@@ -2958,6 +2959,15 @@ open_card_ubr0(struct idt77252_dev *card)return 0 ; } +static void +close_card_ubr0 (struct idt77252_dev *card) +{ +struct vc_map *vc = card->vcs[0 ]; + +free_scq (card, vc->scq); +kfree (vc); +} +static int idt77252_dev_open (struct idt77252_dev *card) {
@@ -3007,6 +3017,7 @@ static void idt77252_dev_close(struct atm_dev *dev)struct idt77252_dev *card = dev->dev_data;u32 conf; +close_card_ubr0 (card);close_card_oam (card); conf = SAR_CFG_RXPTH | /* enable receive path */
drivers/bluetooth/btqcomsmd.c +16 -1
@@ -122,6 +122,21 @@ static int btqcomsmd_setup(struct hci_dev *hdev)return 0 ; } +static int btqcomsmd_set_bdaddr (struct hci_dev *hdev,const bdaddr_t *bdaddr) +{ +int ret; + + ret =qca_set_bdaddr_rome (hdev, bdaddr); +if (ret) +return ret; + +/* The firmware stops responding for a while after setting the bdaddr, +* causing timeouts for subsequent commands. Sleep a bit to avoid this. +*/ +usleep_range (1000 ,10000 ); +return 0 ; +} +static int btqcomsmd_probe (struct platform_device *pdev) {struct btqcomsmd *btq;
@@ -162,7 +177,7 @@ static int btqcomsmd_probe(struct platform_device *pdev) hdev->close = btqcomsmd_close; hdev->send = btqcomsmd_send; hdev->setup = btqcomsmd_setup; - hdev->set_bdaddr = qca_set_bdaddr_rome; + hdev->set_bdaddr = btqcomsmd_set_bdaddr; ret =hci_register_dev (hdev);if (ret <0 )
drivers/bluetooth/btsdio.c +1 -0
@@ -352,6 +352,7 @@ static void btsdio_remove(struct sdio_func *func)BT_DBG ("func %p" , func); +cancel_work_sync (&data->work);if (!data)return ;
drivers/bus/imx-weim.c +1 -1
@@ -192,8 +192,8 @@ static int weim_parse_dt(struct platform_device *pdev, void __iomem *base)const struct of_device_id *of_id =of_match_device (weim_id_table, &pdev->dev);const struct imx_weim_devtype *devtype = of_id->data; +int ret =0 , have_child =0 ;struct device_node *child; -int ret, have_child =0 ;struct cs_timing_state ts = {};u32 reg;
drivers/char/ipmi/ipmi_ssif.c +51 -86
274 lines not on this page · raw message
drivers/firmware/arm_scmi/mailbox.c +37 -0
@@ -52,6 +52,39 @@ static bool mailbox_chan_available(struct device *dev, int idx) "#mbox-cells", idx, NULL); } +static int mailbox_chan_validate (struct device *cdev) +{ +int num_mb, num_sh, ret =0 ; +struct device_node *np = cdev->of_node; + + num_mb =of_count_phandle_with_args (np,"mboxes" ,"#mbox-cells" ); + num_sh =of_count_phandle_with_args (np,"shmem" ,NULL ); +/* Bail out if mboxes and shmem descriptors are inconsistent */ +if (num_mb <=0 || num_sh >2 || num_mb != num_sh) { +dev_warn (cdev,"Invalid channel descriptor for '%s'\n" , +of_node_full_name (np)); +return -EINVAL ; + } + +if (num_sh >1 ) { +struct device_node *np_tx, *np_rx; + + np_tx =of_parse_phandle (np,"shmem" ,0 ); + np_rx =of_parse_phandle (np,"shmem" ,1 ); +/* SCMI Tx and Rx shared mem areas have to be distinct */ +if (!np_tx || !np_rx || np_tx == np_rx) { +dev_warn (cdev,"Invalid shmem descriptor for '%s'\n" , +of_node_full_name (np)); + ret = -EINVAL ; + } + +of_node_put (np_tx); +of_node_put (np_rx); + } + +return ret; +} +static int mailbox_chan_setup (struct scmi_chan_info *cinfo,struct device *dev,bool tx) {
@@ -64,6 +97,10 @@ static int mailbox_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,resource_size_t size;struct resource res; + ret =mailbox_chan_validate (cdev); +if (ret) +return ret; + smbox =devm_kzalloc (dev,sizeof (*smbox),GFP_KERNEL );if (!smbox)return -ENOMEM ;
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +19 -0
@@ -164,6 +164,21 @@ static bool needs_dsc_aux_workaround(struct dc_link *link)return false; } +bool is_synaptics_cascaded_panamera (struct dc_link *link,struct drm_dp_mst_port *port) +{ +u8 branch_vendor_data[4 ] = {0 };// Vendor data 0x50C ~ 0x50F + +if (drm_dp_dpcd_read (port->mgr->aux,DP_BRANCH_VENDOR_SPECIFIC_START , &branch_vendor_data,4 ) ==4 ) { +if (link->dpcd_caps.branch_dev_id ==DP_BRANCH_DEVICE_ID_90CC24 && +IS_SYNAPTICS_CASCADED_PANAMERA (link->dpcd_caps.branch_dev_name, branch_vendor_data)) { +DRM_INFO ("Synaptics Cascaded MST hub\n" ); +return true; + } + } + +return false; +} +static bool validate_dsc_caps_on_connector (struct amdgpu_dm_connector *aconnector) {struct dc_sink *dc_sink = aconnector->dc_sink;
@@ -185,6 +200,10 @@ static bool validate_dsc_caps_on_connector(struct amdgpu_dm_connector *aconnecto needs_dsc_aux_workaround(aconnector->dc_link)) aconnector->dsc_aux = &aconnector->mst_port->dm_dp_aux.aux; +/* synaptics cascaded MST hub case */ +if (!aconnector->dsc_aux &&is_synaptics_cascaded_panamera (aconnector->dc_link, port)) + aconnector->dsc_aux = port->mgr->aux; +if (!aconnector->dsc_aux)return false;
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h +12 -0
@@ -26,6 +26,18 @@#ifndef __DAL_AMDGPU_DM_MST_TYPES_H__#define __DAL_AMDGPU_DM_MST_TYPES_H__ +#define DP_BRANCH_VENDOR_SPECIFIC_START 0x50C + +/** +* Panamera MST Hub detection +* Offset DPCD 050Eh == 0x5A indicates cascaded MST hub case +* Check from beginning of branch device vendor specific field (050Ch) +*/ +#define IS_SYNAPTICS_PANAMERA (branchDevName) (((int)branchDevName[4] & 0xF0) == 0x50 ? 1 : 0) +#define BRANCH_HW_REVISION_PANAMERA_A2 0x10 +#define SYNAPTICS_CASCADED_HUB_ID 0x5A +#define IS_SYNAPTICS_CASCADED_PANAMERA (devName, data) ((IS_SYNAPTICS_PANAMERA(devName) && ((int)data[2] == SYNAPTICS_CASCADED_HUB_ID)) ? 1 : 0) +struct amdgpu_display_manager ;struct amdgpu_dm_connector ;
drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c +9 -1
@@ -93,7 +93,15 @@ static void *etnaviv_gem_prime_vmap_impl(struct etnaviv_gem_object *etnaviv_obj)static int etnaviv_gem_prime_mmap_obj (struct etnaviv_gem_object *etnaviv_obj,struct vm_area_struct *vma) { -return dma_buf_mmap (etnaviv_obj->base.dma_buf, vma,0 ); +int ret; + + ret =dma_buf_mmap (etnaviv_obj->base.dma_buf, vma,0 ); +if (!ret) { +/* Drop the reference acquired by drm_gem_mmap_obj(). */ +drm_gem_object_put (&etnaviv_obj->base); + } + +return ret; }static const struct etnaviv_gem_ops etnaviv_gem_prime_ops = {
drivers/gpu/drm/i915/display/intel_display.c +1 -0
@@ -13335,6 +13335,7 @@ intel_crtc_prepare_cleared_state(struct intel_crtc_state *crtc_state)* only fields that are know to not cause problems are preserved. */ saved_state->uapi = crtc_state->uapi; + saved_state->inherited = crtc_state->inherited; saved_state->scaler_state = crtc_state->scaler_state; saved_state->shared_dpll = crtc_state->shared_dpll; saved_state->dpll_hw_state = crtc_state->dpll_hw_state;
drivers/gpu/drm/i915/i915_active.c +1 -2
@@ -96,8 +96,7 @@ static void debug_active_init(struct i915_active *ref)static void debug_active_activate (struct i915_active *ref) {lockdep_assert_held (&ref->tree_lock); -if (!atomic_read (&ref->count))/* before the first inc */ -debug_object_activate (ref, &active_debug_desc); +debug_object_activate (ref, &active_debug_desc); }static void debug_active_deactivate (struct i915_active *ref)
drivers/gpu/drm/meson/meson_drv.c +13 -7
@@ -320,38 +320,38 @@ static int meson_drv_bind_master(struct device *dev, bool has_components)if (priv->afbcd.ops) { ret = priv->afbcd.ops->init (priv);if (ret) -return ret; + goto free_drm; }/* Encoder Initialization */ ret =meson_venc_cvbs_create (priv);if (ret) - goto free_drm; + goto exit_afbcd;if (has_components) { ret =component_bind_all (drm->dev, drm);if (ret) {dev_err (drm->dev,"Couldn't bind all components\n" ); - goto free_drm; + goto exit_afbcd; } } ret =meson_plane_create (priv);if (ret) - goto free_drm; + goto unbind_all; ret =meson_overlay_create (priv);if (ret) - goto free_drm; + goto unbind_all; ret =meson_crtc_create (priv);if (ret) - goto free_drm; + goto unbind_all; ret =drm_irq_install (drm, priv->vsync_irq);if (ret) - goto free_drm; + goto unbind_all;drm_mode_config_reset (drm);
@@ -369,6 +369,12 @@ static int meson_drv_bind_master(struct device *dev, bool has_components) uninstall_irq:drm_irq_uninstall (drm); +unbind_all: +if (has_components) +component_unbind_all (drm->dev, drm); +exit_afbcd: +if (priv->afbcd.ops) + priv->afbcd.ops->exit (priv); free_drm:drm_dev_put (drm);
drivers/gpu/drm/sun4i/sun4i_drv.c +3 -1
@@ -93,7 +93,7 @@ static int sun4i_drv_bind(struct device *dev)/* drm_vblank_init calls kcalloc, which can fail */ ret =drm_vblank_init (drm, drm->mode_config.num_crtc);if (ret) - goto cleanup_mode_config; + goto unbind_all; drm->irq_enabled = true;
@@ -117,6 +117,8 @@ static int sun4i_drv_bind(struct device *dev) finish_poll:drm_kms_helper_poll_fini (drm); +unbind_all: +component_unbind_all (dev,NULL ); cleanup_mode_config:drm_mode_config_cleanup (drm);of_reserved_mem_device_release (dev);
drivers/hid/hid-cp2112.c +1 -0
@@ -1352,6 +1352,7 @@ static int cp2112_probe(struct hid_device *hdev, const struct hid_device_id *id) girq->parents =NULL ; girq->default_type =IRQ_TYPE_NONE ; girq->handler = handle_simple_irq; + girq->threaded = true; ret =gpiochip_add_data (&dev->gc, dev);if (ret <0 ) {
drivers/hwmon/hwmon.c +5 -2
@@ -700,6 +700,7 @@ __hwmon_device_register(struct device *dev, const char *name, void *drvdata, {struct hwmon_device *hwdev;struct device *hdev; +struct device *tdev = dev;int i, err, id;/* Complain about invalid characters in hwmon name attribute */
@@ -757,7 +758,9 @@ __hwmon_device_register(struct device *dev, const char *name, void *drvdata, hwdev->name = name; hdev->class = &hwmon_class; hdev->parent = dev; - hdev->of_node = dev ? dev->of_node :NULL ; +while (tdev && !tdev->of_node) + tdev = tdev->parent; + hdev->of_node = tdev ? tdev->of_node :NULL ; hwdev->chip = chip;dev_set_drvdata (hdev, drvdata);dev_set_name (hdev,HWMON_ID_FORMAT , id);
@@ -769,7 +772,7 @@ __hwmon_device_register(struct device *dev, const char *name, void *drvdata,INIT_LIST_HEAD (&hwdev->tzdata); -if (dev && dev->of_node && chip && chip->ops->read && +if (hdev->of_node && chip && chip->ops->read && chip->info[0 ]->type == hwmon_chip && (chip->info[0 ]->config[0 ] &HWMON_C_REGISTER_TZ )) { err =hwmon_thermal_register_sensors (hdev);
drivers/hwmon/it87.c +3 -1
@@ -486,6 +486,8 @@ static const struct it87_devices it87_devices[] = {#define has_pwm_freq2 (data) ((data)->features & FEAT_PWM_FREQ2)#define has_six_temp (data) ((data)->features & FEAT_SIX_TEMP)#define has_vin3_5v (data) ((data)->features & FEAT_VIN3_5V) +#define has_scaling (data) ((data)->features & (FEAT_12MV_ADC | \ + FEAT_10_9MV_ADC))struct it87_sio_data {int sioaddr;
@@ -3098,7 +3100,7 @@ static int it87_probe(struct platform_device *pdev) "Detected broken BIOS defaults, disabling PWM interface\n");/* Starting with IT8721F, we handle scaling of internal voltages */ -if (has_12mv_adc (data)) { +if (has_scaling (data)) {if (sio_data->internal &BIT (0 )) data->in_scaled |=BIT (3 );/* in3 is AVCC */ if (sio_data->internal &BIT (1 ))
drivers/i2c/busses/i2c-imx-lpi2c.c +4 -0
@@ -502,10 +502,14 @@ static int lpi2c_imx_xfer(struct i2c_adapter *adapter,static irqreturn_t lpi2c_imx_isr (int irq,void *dev_id) {struct lpi2c_imx_struct *lpi2c_imx = dev_id; +unsigned int enabled;unsigned int temp; + enabled =readl (lpi2c_imx->base +LPI2C_MIER ); +lpi2c_imx_intctrl (lpi2c_imx,0 ); temp =readl (lpi2c_imx->base +LPI2C_MSR ); + temp &= enabled;if (temp &MSR_RDF )lpi2c_imx_read_rxfifo (lpi2c_imx);
drivers/i2c/busses/i2c-xgene-slimpro.c +3 -0
@@ -308,6 +308,9 @@ static int slimpro_i2c_blkwr(struct slimpro_i2c_dev *ctx, u32 chip,u32 msg[3 ];int rc; +if (writelen >I2C_SMBUS_BLOCK_MAX ) +return -EINVAL ; +memcpy (ctx->dma_buffer, data, writelen); paddr =dma_map_single (ctx->dev, ctx->dma_buffer, writelen,DMA_TO_DEVICE );
drivers/input/mouse/alps.c +8 -8
@@ -852,8 +852,8 @@ static void alps_process_packet_v6(struct psmouse *psmouse) x = y = z =0 ;/* Divide 4 since trackpoint's speed is too fast */ -input_report_rel (dev2,REL_X , (char )x /4 ); -input_report_rel (dev2,REL_Y , -((char )y /4 )); +input_report_rel (dev2,REL_X , (s8 )x /4 ); +input_report_rel (dev2,REL_Y , -((s8 )y /4 ));psmouse_report_standard_buttons (dev2, packet[3 ]);
@@ -1104,8 +1104,8 @@ static void alps_process_trackstick_packet_v7(struct psmouse *psmouse) ((packet[3 ] &0x20 ) <<1 ); z = (packet[5 ] &0x3f ) | ((packet[3 ] &0x80 ) >>1 ); -input_report_rel (dev2,REL_X , (char )x); -input_report_rel (dev2,REL_Y , -((char )y)); +input_report_rel (dev2,REL_X , (s8 )x); +input_report_rel (dev2,REL_Y , -((s8 )y));input_report_abs (dev2,ABS_PRESSURE , z);psmouse_report_standard_buttons (dev2, packet[1 ]);
@@ -2294,20 +2294,20 @@ static int alps_get_v3_v7_resolution(struct psmouse *psmouse, int reg_pitch)if (reg <0 )return reg; - x_pitch = (char )(reg <<4 ) >>4 ;/* sign extend lower 4 bits */ + x_pitch = (s8)(reg <<4 ) >>4 ;/* sign extend lower 4 bits */ x_pitch =50 +2 * x_pitch;/* In 0.1 mm units */ - y_pitch = (char )reg >>4 ;/* sign extend upper 4 bits */ + y_pitch = (s8 )reg >>4 ;/* sign extend upper 4 bits */ y_pitch =36 +2 * y_pitch;/* In 0.1 mm units */ reg =alps_command_mode_read_reg (psmouse, reg_pitch +1 );if (reg <0 )return reg; - x_electrode = (char )(reg <<4 ) >>4 ;/* sign extend lower 4 bits */ + x_electrode = (s8)(reg <<4 ) >>4 ;/* sign extend lower 4 bits */ x_electrode =17 + x_electrode; - y_electrode = (char )reg >>4 ;/* sign extend upper 4 bits */ + y_electrode = (s8 )reg >>4 ;/* sign extend upper 4 bits */ y_electrode =13 + y_electrode; x_phys = x_pitch * (x_electrode -1 );/* In 0.1 mm units */
drivers/input/mouse/focaltech.c +4 -4
@@ -202,8 +202,8 @@ static void focaltech_process_rel_packet(struct psmouse *psmouse, state->pressed = packet[0 ] >>7 ; finger1 = ((packet[0 ] >>4 ) &0x7 ) -1 ;if (finger1 <FOC_MAX_FINGERS ) { - state->fingers[finger1].x += (char )packet[1 ]; - state->fingers[finger1].y += (char )packet[2 ]; + state->fingers[finger1].x += (s8 )packet[1 ]; + state->fingers[finger1].y += (s8 )packet[2 ]; }else {psmouse_err (psmouse,"First finger in rel packet invalid: %d\n" , finger1);
@@ -218,8 +218,8 @@ static void focaltech_process_rel_packet(struct psmouse *psmouse,*/ finger2 = ((packet[3 ] >>4 ) &0x7 ) -1 ;if (finger2 <FOC_MAX_FINGERS ) { - state->fingers[finger2].x += (char )packet[4 ]; - state->fingers[finger2].y += (char )packet[5 ]; + state->fingers[finger2].x += (s8 )packet[4 ]; + state->fingers[finger2].y += (s8 )packet[5 ]; } }
drivers/input/touchscreen/goodix.c +11 -3
@@ -183,10 +183,18 @@ static const unsigned long goodix_irq_flags[] = {static const struct dmi_system_id nine_bytes_report[] = { #if defined(CONFIG_DMI) && defined(CONFIG_X86) { - .ident ="Lenovo YogaBook" , -/* YB1-X91L/F and YB1-X90L/F */ +/* Lenovo Yoga Book X90F / X90L */ .matches = { -DMI_MATCH (DMI_PRODUCT_NAME ,"Lenovo YB1-X9" ) +DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"Intel Corporation" ), +DMI_EXACT_MATCH (DMI_PRODUCT_NAME ,"CHERRYVIEW D1 PLATFORM" ), +DMI_EXACT_MATCH (DMI_PRODUCT_VERSION ,"YETI-11" ), + } + }, + { +/* Lenovo Yoga Book X91F / X91L */ + .matches = { +/* Non exact match to match F + L versions */ +DMI_MATCH (DMI_PRODUCT_NAME ,"Lenovo YB1-X91" ), } }, #endif
drivers/interconnect/qcom/osm-l3.c +1 -1
@@ -258,7 +258,7 @@ static int qcom_osm_l3_probe(struct platform_device *pdev) qnodes = desc->nodes; num_nodes = desc->num_nodes; - data =devm_kcalloc (&pdev->dev, num_nodes,sizeof (*node),GFP_KERNEL ); + data =devm_kzalloc (&pdev->dev,struct_size (data, nodes, num_nodes),GFP_KERNEL );if (!data)return -ENOMEM ;
drivers/md/dm-crypt.c +10 -6
@@ -67,7 +67,9 @@ struct dm_crypt_io {struct crypt_config *cc;struct bio *base_bio;u8 *integrity_metadata; -bool integrity_metadata_from_pool; + bool integrity_metadata_from_pool:1; + bool in_tasklet:1; +struct work_struct work;struct tasklet_struct tasklet;
@@ -1722,6 +1724,7 @@ static void crypt_io_init(struct dm_crypt_io *io, struct crypt_config *cc, io->ctx.r.req =NULL ; io->integrity_metadata =NULL ; io->integrity_metadata_from_pool = false; + io->in_tasklet = false;atomic_set (&io->io_pending,0 ); }
@@ -1767,14 +1770,13 @@ static void crypt_dec_pending(struct dm_crypt_io *io)* our tasklet. In this case we need to delay bio_endio() * execution to after the tasklet is done and dequeued. */ -if (tasklet_trylock (&io->tasklet)) { -tasklet_unlock (&io->tasklet); -bio_endio (base_bio); +if (io->in_tasklet) { +INIT_WORK (&io->work, kcryptd_io_bio_endio); +queue_work (cc->io_queue, &io->work);return ; } -INIT_WORK (&io->work, kcryptd_io_bio_endio); -queue_work (cc->io_queue, &io->work); +bio_endio (base_bio); }/*
@@ -1934,6 +1936,7 @@ static int dmcrypt_write(void *data) io =crypt_io_from_node (rb_first (&write_tree));rb_erase (&io->rb_node, &write_tree);kcryptd_io_write (io); +cond_resched (); }while (!RB_EMPTY_ROOT (&write_tree));blk_finish_plug (&plug); }
@@ -2227,6 +2230,7 @@ static void kcryptd_queue_crypt(struct dm_crypt_io *io)* it is being executed with irqs disabled. */ if (in_irq () ||irqs_disabled ()) { + io->in_tasklet = true;tasklet_init (&io->tasklet, kcryptd_crypt_tasklet, (unsigned long )&io->work);tasklet_schedule (&io->tasklet);return ;
drivers/md/dm-stats.c +6 -1
@@ -188,7 +188,7 @@ static int dm_stat_in_flight(struct dm_stat_shared *shared)atomic_read (&shared->in_flight[WRITE ]); } -void dm_stats_init (struct dm_stats *stats) +int dm_stats_init (struct dm_stats *stats) {int cpu;struct dm_stats_last_position *last;
@@ -196,11 +196,16 @@ void dm_stats_init(struct dm_stats *stats)mutex_init (&stats->mutex);INIT_LIST_HEAD (&stats->list); stats->last = alloc_percpu(struct dm_stats_last_position); +if (!stats->last) +return -ENOMEM ; +for_each_possible_cpu (cpu) { last =per_cpu_ptr (stats->last, cpu); last->last_sector = (sector_t )ULLONG_MAX ; last->last_rw =UINT_MAX ; } + +return 0 ; }void dm_stats_cleanup (struct dm_stats *stats)
drivers/md/dm-stats.h +1 -1
@@ -22,7 +22,7 @@ struct dm_stats_aux {unsigned long long duration_ns; }; -void dm_stats_init (struct dm_stats *st); +int dm_stats_init (struct dm_stats *st);void dm_stats_cleanup (struct dm_stats *st);struct mapped_device ;
drivers/md/dm-thin.c +2 -0
@@ -3383,6 +3383,7 @@ static int pool_ctr(struct dm_target *ti, unsigned argc, char **argv) pt->low_water_blocks = low_water_blocks; pt->adjusted_pf = pt->requested_pf = pf; ti->num_flush_bios =1 ; + ti->limit_swap_bios = true;/* * Only need to enable discards if the pool should pass
@@ -4259,6 +4260,7 @@ static int thin_ctr(struct dm_target *ti, unsigned argc, char **argv) goto bad; ti->num_flush_bios =1 ; + ti->limit_swap_bios = true; ti->flush_supported = true; ti->per_io_data_size =sizeof (struct dm_thin_endio_hook );
drivers/md/dm.c +3 -1
@@ -1910,7 +1910,9 @@ static struct mapped_device *alloc_dev(int minor)if (!md->bdev) goto bad; -dm_stats_init (&md->stats); + r =dm_stats_init (&md->stats); +if (r <0 ) + goto bad;/* Populate the mapping, nobody knows we exist yet */ spin_lock (&_minor_lock);
drivers/md/md.c +3 -0
@@ -3207,6 +3207,9 @@ slot_store(struct md_rdev *rdev, const char *buf, size_t len) err =kstrtouint (buf,10 , (unsigned int *)&slot);if (err <0 )return err; +if (slot <0 ) +/* overflow */ +return -ENOSPC ; }if (rdev->mddev->pers && slot ==-1 ) {/* Setting 'slot' on an active array requires also
drivers/mtd/nand/raw/meson_nand.c +7 -1
@@ -172,6 +172,7 @@ struct meson_nfc {dma_addr_t daddr;dma_addr_t iaddr; +u32 info_bytes;unsigned long assigned_cs; };
@@ -499,6 +500,7 @@ static int meson_nfc_dma_buffer_setup(struct nand_chip *nand, void *databuf, nfc->daddr, datalen, dir);return ret; } + nfc->info_bytes = infolen; cmd =GENCMDIADDRL (NFC_CMD_AIL , nfc->iaddr);writel (cmd, nfc->reg_base +NFC_REG_CMD );
@@ -516,8 +518,10 @@ static void meson_nfc_dma_buffer_release(struct nand_chip *nand,struct meson_nfc *nfc =nand_get_controller_data (nand);dma_unmap_single (nfc->dev, nfc->daddr, datalen, dir); -if (infolen) +if (infolen) {dma_unmap_single (nfc->dev, nfc->iaddr, infolen, dir); + nfc->info_bytes =0 ; + } }static int meson_nfc_read_buf (struct nand_chip *nand,u8 *buf,int len)
@@ -706,6 +710,8 @@ static void meson_nfc_check_ecc_pages_valid(struct meson_nfc *nfc,usleep_range (10 ,15 );/* info is updated by nfc dma engine*/ smp_rmb (); +dma_sync_single_for_cpu (nfc->dev, nfc->iaddr, nfc->info_bytes, +DMA_FROM_DEVICE ); ret = *info &ECC_COMPLETE ; }while (!ret); }
drivers/net/dsa/mv88e6xxx/chip.c +7 -2
@@ -2611,9 +2611,14 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port)* If this is the upstream port for this switch, enable * forwarding of unknown unicasts and multicasts. */ - reg =MV88E6XXX_PORT_CTL0_IGMP_MLD_SNOOP | -MV88E6185_PORT_CTL0_USE_TAG |MV88E6185_PORT_CTL0_USE_IP | + reg =MV88E6185_PORT_CTL0_USE_TAG |MV88E6185_PORT_CTL0_USE_IP |MV88E6XXX_PORT_CTL0_STATE_FORWARDING ; +/* Forward any IPv4 IGMP or IPv6 MLD frames received +* by a USER port to the CPU port to allow snooping. +*/ +if (dsa_is_user_port (ds, port)) + reg |=MV88E6XXX_PORT_CTL0_IGMP_MLD_SNOOP ; + err =mv88e6xxx_port_write (chip, port,MV88E6XXX_PORT_CTL0 , reg);if (err)return err;
drivers/net/ethernet/broadcom/bnxt/bnxt.c +4 -4
@@ -219,12 +219,12 @@ static const struct pci_device_id bnxt_pci_tbl[] = { { PCI_VDEVICE(BROADCOM, 0x1750), .driver_data = BCM57508 }, { PCI_VDEVICE(BROADCOM, 0x1751), .driver_data = BCM57504 }, { PCI_VDEVICE(BROADCOM, 0x1752), .driver_data = BCM57502 }, - { PCI_VDEVICE(BROADCOM, 0x1800), .driver_data = BCM57508_NPAR }, + { PCI_VDEVICE(BROADCOM, 0x1800), .driver_data = BCM57502_NPAR }, { PCI_VDEVICE(BROADCOM, 0x1801), .driver_data = BCM57504_NPAR }, - { PCI_VDEVICE(BROADCOM, 0x1802), .driver_data = BCM57502_NPAR }, - { PCI_VDEVICE(BROADCOM, 0x1803), .driver_data = BCM57508_NPAR }, + { PCI_VDEVICE(BROADCOM, 0x1802), .driver_data = BCM57508_NPAR }, + { PCI_VDEVICE(BROADCOM, 0x1803), .driver_data = BCM57502_NPAR }, { PCI_VDEVICE(BROADCOM, 0x1804), .driver_data = BCM57504_NPAR }, - { PCI_VDEVICE(BROADCOM, 0x1805), .driver_data = BCM57502_NPAR }, + { PCI_VDEVICE(BROADCOM, 0x1805), .driver_data = BCM57508_NPAR }, { PCI_VDEVICE(BROADCOM, 0xd802), .driver_data = BCM58802 }, { PCI_VDEVICE(BROADCOM, 0xd804), .driver_data = BCM58804 }, #ifdef CONFIG_BNXT_SRIOV
drivers/net/ethernet/broadcom/bnxt/bnxt.h +1 -0
@@ -1198,6 +1198,7 @@ struct bnxt_link_info {#define BNXT_LINK_SPEED_40GB PORT_PHY_QCFG_RESP_LINK_SPEED_40GB#define BNXT_LINK_SPEED_50GB PORT_PHY_QCFG_RESP_LINK_SPEED_50GB#define BNXT_LINK_SPEED_100GB PORT_PHY_QCFG_RESP_LINK_SPEED_100GB +#define BNXT_LINK_SPEED_200GB PORT_PHY_QCFG_RESP_LINK_SPEED_200GBu16 support_speeds;u16 support_pam4_speeds;u16 auto_link_speeds;/* fw adv setting */
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +2 -0
@@ -1653,6 +1653,8 @@ u32 bnxt_fw_to_ethtool_speed(u16 fw_link_speed)return SPEED_50000 ;case BNXT_LINK_SPEED_100GB :return SPEED_100000 ; +case BNXT_LINK_SPEED_200GB : +return SPEED_200000 ;default :return SPEED_UNKNOWN ; }
drivers/net/ethernet/google/gve/gve_ethtool.c +4 -1
@@ -510,7 +510,10 @@ static int gve_get_link_ksettings(struct net_device *netdev, struct ethtool_link_ksettings *cmd) {struct gve_priv *priv =netdev_priv (netdev); -int err =gve_adminq_report_link_speed (priv); +int err =0 ; + +if (priv->link_speed ==0 ) + err =gve_adminq_report_link_speed (priv); cmd->base.speed = priv->link_speed;return err;
drivers/net/ethernet/intel/i40e/i40e_diag.c +6 -5
@@ -44,7 +44,7 @@ static i40e_status i40e_diag_reg_pattern_test(struct i40e_hw *hw,return 0 ; } -struct i40e_diag_reg_test_info i40e_reg_list[] = { +const struct i40e_diag_reg_test_info i40e_reg_list[] = {/* offset mask elements stride */ {I40E_QTX_CTL (0 ),0x0000FFBF ,1 ,I40E_QTX_CTL (1 ) -I40E_QTX_CTL (0 )},
@@ -78,27 +78,28 @@ i40e_status i40e_diag_reg_test(struct i40e_hw *hw) {i40e_status ret_code =0 ;u32 reg, mask; +u32 elements;u32 i, j;for (i =0 ; i40e_reg_list[i].offset !=0 && !ret_code; i++) { + elements = i40e_reg_list[i].elements;/* set actual reg range for dynamically allocated resources */ if (i40e_reg_list[i].offset ==I40E_QTX_CTL (0 ) && hw->func_caps.num_tx_qp !=0 ) - i40e_reg_list[i].elements = hw->func_caps.num_tx_qp; + elements = hw->func_caps.num_tx_qp;if ((i40e_reg_list[i].offset ==I40E_PFINT_ITRN (0 ,0 ) || i40e_reg_list[i].offset ==I40E_PFINT_ITRN (1 ,0 ) || i40e_reg_list[i].offset ==I40E_PFINT_ITRN (2 ,0 ) || i40e_reg_list[i].offset ==I40E_QINT_TQCTL (0 ) || i40e_reg_list[i].offset ==I40E_QINT_RQCTL (0 )) && hw->func_caps.num_msix_vectors !=0 ) - i40e_reg_list[i].elements = - hw->func_caps.num_msix_vectors -1 ; + elements = hw->func_caps.num_msix_vectors -1 ;/* test register access */ mask = i40e_reg_list[i].mask; -for (j =0 ; j < i40e_reg_list[i].elements && !ret_code; j++) { +for (j =0 ; j < elements && !ret_code; j++) { reg = i40e_reg_list[i].offset + (j * i40e_reg_list[i].stride); ret_code =i40e_diag_reg_pattern_test (hw, reg, mask);
drivers/net/ethernet/intel/i40e/i40e_diag.h +1 -1
@@ -20,7 +20,7 @@ struct i40e_diag_reg_test_info {u32 stride;/* bytes between each element */ }; -extern struct i40e_diag_reg_test_info i40e_reg_list[]; +extern const struct i40e_diag_reg_test_info i40e_reg_list[];i40e_status i40e_diag_reg_test (struct i40e_hw *hw);i40e_status i40e_diag_eeprom_test (struct i40e_hw *hw);
drivers/net/ethernet/intel/iavf/iavf_common.c +1 -1
@@ -662,7 +662,7 @@ struct iavf_rx_ptype_decoded iavf_ptype_lookup[] = {/* Non Tunneled IPv6 */ IAVF_PTT (88 ,IP ,IPV6 ,FRG ,NONE ,NONE ,NOF ,NONE ,PAY3 ),IAVF_PTT (89 ,IP ,IPV6 ,NOF ,NONE ,NONE ,NOF ,NONE ,PAY3 ), -IAVF_PTT (90 ,IP ,IPV6 ,NOF ,NONE ,NONE ,NOF ,UDP ,PAY3 ), +IAVF_PTT (90 ,IP ,IPV6 ,NOF ,NONE ,NONE ,NOF ,UDP ,PAY4 ),IAVF_PTT_UNUSED_ENTRY (91 ),IAVF_PTT (92 ,IP ,IPV6 ,NOF ,NONE ,NONE ,NOF ,TCP ,PAY4 ), IAVF_PTT(93, IP, IPV6, NOF, NONE, NONE, NOF, SCTP, PAY4),
drivers/net/ethernet/intel/iavf/iavf_txrx.c +1 -1
@@ -1061,7 +1061,7 @@ static inline void iavf_rx_hash(struct iavf_ring *ring,cpu_to_le64 ((u64 )IAVF_RX_DESC_FLTSTAT_RSS_HASH <<IAVF_RX_DESC_STATUS_FLTSTAT_SHIFT ); -if (ring->netdev->features &NETIF_F_RXHASH ) +if (!(ring->netdev->features &NETIF_F_RXHASH ))return ;if ((rx_desc->wb.qword1.status_error_len & rss_mask) == rss_mask) {
drivers/net/ethernet/intel/igb/igb_main.c +0 -2
@@ -3821,9 +3821,7 @@ static void igb_remove(struct pci_dev *pdev)igb_release_hw_control (adapter);#ifdef CONFIG_PCI_IOV -rtnl_lock ();igb_disable_sriov (pdev); -rtnl_unlock ();#endif unregister_netdev (netdev);
drivers/net/ethernet/intel/igbvf/netdev.c +6 -2
@@ -1074,7 +1074,7 @@ static int igbvf_request_msix(struct igbvf_adapter *adapter) igbvf_intr_msix_rx,0 , adapter->rx_ring->name, netdev);if (err) - goto out; + goto free_irq_tx; adapter->rx_ring->itr_register =E1000_EITR (vector); adapter->rx_ring->itr_val = adapter->current_itr;
@@ -1083,10 +1083,14 @@ static int igbvf_request_msix(struct igbvf_adapter *adapter) err =request_irq (adapter->msix_entries[vector].vector, igbvf_msix_other,0 , netdev->name, netdev);if (err) - goto out; + goto free_irq_rx;igbvf_configure_msix (adapter);return 0 ; +free_irq_rx: +free_irq (adapter->msix_entries[--vector].vector, netdev); +free_irq_tx: +free_irq (adapter->msix_entries[--vector].vector, netdev); out:return err; }
drivers/net/ethernet/intel/igbvf/vf.c +10 -3
@@ -1,6 +1,8 @@// SPDX-License-Identifier: GPL-2.0 /* Copyright(c) 2009 - 2018 Intel Corporation. */ +#include <linux/etherdevice.h> +#include "vf.h" static s32 e1000_check_for_link_vf (struct e1000_hw *hw);
@@ -131,11 +133,16 @@ static s32 e1000_reset_hw_vf(struct e1000_hw *hw)/* set our "perm_addr" based on info provided by PF */ ret_val = mbx->ops.read_posted (hw, msgbuf,3 );if (!ret_val) { -if (msgbuf[0 ] == (E1000_VF_RESET | -E1000_VT_MSGTYPE_ACK )) +switch (msgbuf[0 ]) { +case E1000_VF_RESET |E1000_VT_MSGTYPE_ACK :memcpy (hw->mac.perm_addr, addr,ETH_ALEN ); -else +break ; +case E1000_VF_RESET |E1000_VT_MSGTYPE_NACK : +eth_zero_addr (hw->mac.perm_addr); +break ; +default : ret_val = -E1000_ERR_MAC_INIT ; + } } }
drivers/net/ethernet/intel/igc/igc_main.c +10 -10
@@ -4874,18 +4874,18 @@ static bool validate_schedule(struct igc_adapter *adapter,if (e->command !=TC_TAPRIO_CMD_SET_GATES )return false; -for (i =0 ; i < adapter->num_tx_queues; i++) { -if (e->gate_mask &BIT (i)) +for (i =0 ; i < adapter->num_tx_queues; i++) +if (e->gate_mask &BIT (i)) { queue_uses[i]++; -/* There are limitations: A single queue cannot be -* opened and closed multiple times per cycle unless the -* gate stays open. Check for it. -*/ -if (queue_uses[i] >1 && - !(prev->gate_mask &BIT (i))) -return false; - } +/* There are limitations: A single queue cannot +* be opened and closed multiple times per cycle +* unless the gate stays open. Check for it. +*/ +if (queue_uses[i] >1 && + !(prev->gate_mask &BIT (i))) +return false; + } }return true;
drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c +4 -2
@@ -117,12 +117,14 @@ static int mlx5e_dcbnl_ieee_getets(struct net_device *netdev,if (!MLX5_CAP_GEN (priv->mdev, ets))return -EOPNOTSUPP ; - ets->ets_cap =mlx5_max_tc (priv->mdev) +1 ; -for (i =0 ; i < ets->ets_cap; i++) { +for (i =0 ; i <IEEE_8021QAZ_MAX_TCS ; i++) { err =mlx5_query_port_prio_tc (mdev, i, &ets->prio_tc[i]);if (err)return err; + } + ets->ets_cap =mlx5_max_tc (priv->mdev) +1 ; +for (i =0 ; i < ets->ets_cap; i++) { err =mlx5_query_port_tc_group (mdev, i, &tc_group[i]);if (err)return err;
drivers/net/ethernet/mellanox/mlx5/core/esw/acl/ingress_ofld.c +1 -2
@@ -301,8 +301,7 @@ int mlx5_esw_acl_ingress_vport_bond_update(struct mlx5_eswitch *esw, u16 vport_nif (WARN_ON_ONCE (IS_ERR (vport))) {esw_warn (esw->dev,"vport(%d) invalid!\n" , vport_num); - err =PTR_ERR (vport); - goto out; +return PTR_ERR (vport); }esw_acl_ingress_ofld_rules_destroy (esw, vport);
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c +1 -0
@@ -1339,6 +1339,7 @@ static void esw_disable_vport(struct mlx5_eswitch *esw, u16 vport_num)*/ esw_vport_change_handle_locked (vport); vport->enabled_events =0 ; +esw_apply_vport_rx_mode (esw, vport, false, false);esw_vport_cleanup (esw, vport); esw->enabled_vports--;
drivers/net/ethernet/natsemi/sonic.c +2 -2
@@ -292,7 +292,7 @@ static int sonic_send_packet(struct sk_buff *skb, struct net_device *dev)*/ laddr =dma_map_single (lp->device, skb->data, length,DMA_TO_DEVICE ); -if (!laddr) { +if (dma_mapping_error (lp->device, laddr)) {pr_err_ratelimited ("%s: failed to map tx DMA buffer.\n" , dev->name);dev_kfree_skb_any (skb);return NETDEV_TX_OK ;
@@ -509,7 +509,7 @@ static bool sonic_alloc_rb(struct net_device *dev, struct sonic_local *lp, *new_addr =dma_map_single (lp->device,skb_put (*new_skb,SONIC_RBSIZE ),SONIC_RBSIZE ,DMA_FROM_DEVICE ); -if (!*new_addr) { +if (dma_mapping_error (lp->device, *new_addr)) {dev_kfree_skb (*new_skb); *new_skb =NULL ;return false;
drivers/net/ethernet/qlogic/qed/qed_sriov.c +4 -1
@@ -4378,6 +4378,9 @@ qed_iov_configure_min_tx_rate(struct qed_dev *cdev, int vfid, u32 rate) } vf =qed_iov_get_vf_info (QED_LEADING_HWFN (cdev), (u16 )vfid, true); +if (!vf) +return -EINVAL ; + vport_id = vf->vport_id;return qed_configure_vport_wfq (cdev, vport_id, rate);
@@ -5123,7 +5126,7 @@ static void qed_iov_handle_trust_change(struct qed_hwfn *hwfn)/* Validate that the VF has a configured vport */ vf =qed_iov_get_vf_info (hwfn, i, true); -if (!vf->vport_instance) +if (!vf || !vf->vport_instance)continue ;memset (¶ms,0 ,sizeof (params));
drivers/net/ethernet/qualcomm/emac/emac.c +6 -0
@@ -728,9 +728,15 @@ static int emac_remove(struct platform_device *pdev)struct net_device *netdev =dev_get_drvdata (&pdev->dev);struct emac_adapter *adpt =netdev_priv (netdev); +netif_carrier_off (netdev); +netif_tx_disable (netdev); +unregister_netdev (netdev);netif_napi_del (&adpt->rx_q.napi); +free_irq (adpt->irq.irq, &adpt->irq); +cancel_work_sync (&adpt->work_thread); +emac_clks_teardown (adpt);put_device (&adpt->phydev->mdio.dev);
drivers/net/ethernet/realtek/r8169_phy_config.c +3 -0
@@ -970,6 +970,9 @@ static void rtl8168h_2_hw_phy_config(struct rtl8169_private *tp,/* disable phy pfm mode */ phy_modify_paged (phydev,0x0a44 ,0x11 ,BIT (7 ),0 ); +/* disable 10m pll off */ +phy_modify_paged (phydev,0x0a43 ,0x10 ,BIT (0 ),0 ); +rtl8168g_disable_aldps (phydev);rtl8168g_config_eee_phy (phydev); }
drivers/net/ethernet/sfc/ef10.c +26 -12
@@ -1304,7 +1304,8 @@ static void efx_ef10_fini_nic(struct efx_nic *efx)static int efx_ef10_init_nic (struct efx_nic *efx) {struct efx_ef10_nic_data *nic_data = efx->nic_data; -netdev_features_t hw_enc_features =0 ; +struct net_device *net_dev = efx->net_dev; +netdev_features_t tun_feats, tso_feats;int rc;if (nic_data->must_check_datapath_caps) {
@@ -1349,20 +1350,30 @@ static int efx_ef10_init_nic(struct efx_nic *efx) nic_data->must_restore_piobufs = false; } -/* add encapsulated checksum offload features */ +/* encap features might change during reset if fw variant changed */ if (efx_has_cap (efx,VXLAN_NVGRE ) && !efx_ef10_is_vf (efx)) - hw_enc_features |=NETIF_F_IP_CSUM |NETIF_F_IPV6_CSUM ; -/* add encapsulated TSO features */ -if (efx_has_cap (efx,TX_TSO_V2_ENCAP )) { -netdev_features_t encap_tso_features; + net_dev->hw_enc_features |=NETIF_F_IP_CSUM |NETIF_F_IPV6_CSUM ; +else + net_dev->hw_enc_features &= ~(NETIF_F_IP_CSUM |NETIF_F_IPV6_CSUM ); - encap_tso_features =NETIF_F_GSO_UDP_TUNNEL |NETIF_F_GSO_GRE | -NETIF_F_GSO_UDP_TUNNEL_CSUM |NETIF_F_GSO_GRE_CSUM ; + tun_feats =NETIF_F_GSO_UDP_TUNNEL |NETIF_F_GSO_GRE | +NETIF_F_GSO_UDP_TUNNEL_CSUM |NETIF_F_GSO_GRE_CSUM ; + tso_feats =NETIF_F_TSO |NETIF_F_TSO6 ; - hw_enc_features |= encap_tso_features |NETIF_F_TSO ; - efx->net_dev->features |= encap_tso_features; +if (efx_has_cap (efx,TX_TSO_V2_ENCAP )) { +/* If this is first nic_init, or if it is a reset and a new fw +* variant has added new features, enable them by default. +* If the features are not new, maintain their current value. +*/ +if (!(net_dev->hw_features & tun_feats)) + net_dev->features |= tun_feats; + net_dev->hw_enc_features |= tun_feats | tso_feats; + net_dev->hw_features |= tun_feats; + }else { + net_dev->hw_enc_features &= ~(tun_feats | tso_feats); + net_dev->hw_features &= ~tun_feats; + net_dev->features &= ~tun_feats; } - efx->net_dev->hw_enc_features = hw_enc_features;/* don't fail init if RSS setup doesn't work */ rc = efx->type->rx_push_rss_config(efx, false,
@@ -3977,7 +3988,10 @@ static unsigned int ef10_check_caps(const struct efx_nic *efx, NETIF_F_HW_VLAN_CTAG_FILTER | \ NETIF_F_IPV6_CSUM | \ NETIF_F_RXHASH | \ - NETIF_F_NTUPLE) + NETIF_F_NTUPLE | \ + NETIF_F_SG | \ + NETIF_F_RXCSUM | \ + NETIF_F_RXALL)const struct efx_nic_type efx_hunt_a0_vf_nic_type = { .is_vf = true,
drivers/net/ethernet/sfc/efx.c +7 -10
@@ -1045,21 +1045,18 @@ static int efx_pci_probe_post_io(struct efx_nic *efx) }/* Determine netdevice features */ - net_dev->features |= (efx->type->offload_features |NETIF_F_SG | -NETIF_F_TSO |NETIF_F_RXCSUM |NETIF_F_RXALL ); -if (efx->type->offload_features & (NETIF_F_IPV6_CSUM |NETIF_F_HW_CSUM )) { - net_dev->features |=NETIF_F_TSO6 ; -if (efx_has_cap (efx,TX_TSO_V2_ENCAP )) - net_dev->hw_enc_features |=NETIF_F_TSO6 ; - } -/* Check whether device supports TSO */ -if (!efx->type->tso_versions || !efx->type->tso_versions (efx)) - net_dev->features &= ~NETIF_F_ALL_TSO ; + net_dev->features |= efx->type->offload_features; + +/* Add TSO features */ +if (efx->type->tso_versions && efx->type->tso_versions (efx)) + net_dev->features |=NETIF_F_TSO |NETIF_F_TSO6 ; +/* Mask for features that also apply to VLAN devices */ net_dev->vlan_features |= (NETIF_F_HW_CSUM |NETIF_F_SG |NETIF_F_HIGHDMA |NETIF_F_ALL_TSO |NETIF_F_RXCSUM ); +/* Determine user configurable features */ net_dev->hw_features |= net_dev->features & ~efx->fixed_features;/* Disable receiving frames with bad FCS, by default. */
drivers/net/ethernet/stmicro/stmmac/common.h +0 -1
@@ -480,7 +480,6 @@ struct mac_device_info {unsigned int xlgmac;unsigned int num_vlan;u32 vlan_filter[32 ]; -unsigned int promisc;bool vlan_fail_q_en;u8 vlan_fail_q; };
drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c +3 -58
88 lines not on this page · raw message
drivers/net/ethernet/toshiba/ps3_gelic_net.c +22 -19
88 lines not on this page · raw message
drivers/net/ethernet/toshiba/ps3_gelic_net.h +3 -2
@@ -19,8 +19,9 @@#define GELIC_NET_RX_DESCRIPTORS 128/* num of descriptors */ #define GELIC_NET_TX_DESCRIPTORS 128/* num of descriptors */ -#define GELIC_NET_MAX_MTU VLAN_ETH_FRAME_LEN -#define GELIC_NET_MIN_MTU VLAN_ETH_ZLEN +#define GELIC_NET_MAX_FRAME 2312 +#define GELIC_NET_MAX_MTU 2294 +#define GELIC_NET_MIN_MTU 64#define GELIC_NET_RXBUF_ALIGN 128#define GELIC_CARD_RX_CSUM_DEFAULT 1/* hw chksum */ #define GELIC_NET_WATCHDOG_TIMEOUT 5*HZ
drivers/net/ethernet/xircom/xirc2ps_cs.c +5 -0
@@ -503,6 +503,11 @@ static void xirc2ps_detach(struct pcmcia_device *link) {struct net_device *dev = link->priv; +struct local_info *local =netdev_priv (dev); + +netif_carrier_off (dev); +netif_tx_disable (dev); +cancel_work_sync (&local->tx_timeout_task);dev_dbg (&link->dev,"detach\n" );
drivers/net/ieee802154/ca8210.c +3 -2
@@ -1945,10 +1945,9 @@ static int ca8210_skb_tx(struct ca8210_priv *priv ) { -int status;struct ieee802154_hdr header = { };struct secspec secspec; -unsigned int mac_len; +int mac_len, status;dev_dbg (&priv->spi->dev,"%s called\n" , __func__);
@@ -1956,6 +1955,8 @@ static int ca8210_skb_tx(* packet */ mac_len =ieee802154_hdr_peek_addrs (skb, &header); +if (mac_len <0 ) +return mac_len; secspec.security_level = header.sec.level; secspec.key_id_mode = header.sec.key_id_mode;
drivers/net/ipa/gsi_trans.c +1 -1
@@ -159,7 +159,7 @@ int gsi_trans_pool_init_dma(struct device *dev, struct gsi_trans_pool *pool,* gsi_trans_pool_exit_dma() can assume the total allocated * size is exactly (count * size). */ - total_size =get_order (total_size) <<PAGE_SHIFT ; + total_size =PAGE_SIZE <<get_order (total_size); virt =dma_alloc_coherent (dev, total_size, &addr,GFP_KERNEL );if (!virt)
drivers/net/mdio/mdio-thunder.c +1 -0
@@ -104,6 +104,7 @@ static int thunder_mdiobus_pci_probe(struct pci_dev *pdev,if (i >=ARRAY_SIZE (nexus->buses))break ; } +fwnode_handle_put (fwn);return 0 ; err_release_regions:
drivers/net/mdio/of_mdio.c +7 -5
@@ -238,21 +238,23 @@ bool of_mdiobus_child_is_phy(struct device_node *child)EXPORT_SYMBOL (of_mdiobus_child_is_phy);/** -* of_mdiobus_register - Register mii_bus and create PHYs from the device tree +* __of_mdiobus_register - Register mii_bus and create PHYs from the device tree * @mdio: pointer to mii_bus structure * @np: pointer to device_node of MDIO bus. +* @owner: module owning the @mdio object. * * This function registers the mii_bus structure and registers a phy_device * for each child node of @np. */ -int of_mdiobus_register (struct mii_bus *mdio,struct device_node *np) +int __of_mdiobus_register (struct mii_bus *mdio,struct device_node *np, +struct module *owner) {struct device_node *child;bool scanphys = false;int addr, rc;if (!np) -return mdiobus_register (mdio); +return __mdiobus_register (mdio, owner);/* Do not continue if the node is disabled */ if (!of_device_is_available (np))
@@ -272,7 +274,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)of_property_read_u32 (np,"reset-post-delay-us" , &mdio->reset_post_delay_us);/* Register the MDIO bus */ - rc =mdiobus_register (mdio); + rc =__mdiobus_register (mdio, owner);if (rc)return rc;
@@ -336,7 +338,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)mdiobus_unregister (mdio);return rc; } -EXPORT_SYMBOL (of_mdiobus_register); +EXPORT_SYMBOL (__of_mdiobus_register);/** * of_mdio_find_device - Given a device tree node, find the mdio_device
drivers/net/net_failover.c +2 -6
@@ -130,14 +130,10 @@ static u16 net_failover_select_queue(struct net_device *dev, txq = ops->ndo_select_queue (primary_dev, skb, sb_dev); else txq =netdev_pick_tx (primary_dev, skb,NULL ); - -qdisc_skb_cb (skb)->slave_dev_queue_mapping = skb->queue_mapping; - -return txq; + }else { + txq =skb_rx_queue_recorded (skb) ?skb_get_rx_queue (skb) :0 ; } - txq =skb_rx_queue_recorded (skb) ?skb_get_rx_queue (skb) :0 ; -/* Save the original txq to restore before passing to the driver */ qdisc_skb_cb (skb)->slave_dev_queue_mapping = skb->queue_mapping;
drivers/net/phy/dp83869.c +2 -4
@@ -553,15 +553,13 @@ static int dp83869_of_init(struct phy_device *phydev) &dp83869_internal_delay[0 ], delay_size, true);if (dp83869->rx_int_delay <0 ) - dp83869->rx_int_delay = - dp83869_internal_delay[DP83869_CLK_DELAY_DEF ]; + dp83869->rx_int_delay =DP83869_CLK_DELAY_DEF ; dp83869->tx_int_delay =phy_get_internal_delay (phydev, dev, &dp83869_internal_delay[0 ], delay_size, false);if (dp83869->tx_int_delay <0 ) - dp83869->tx_int_delay = - dp83869_internal_delay[DP83869_CLK_DELAY_DEF ]; + dp83869->tx_int_delay =DP83869_CLK_DELAY_DEF ;return ret; }
drivers/net/phy/mdio_devres.c +6 -5
@@ -98,13 +98,14 @@ EXPORT_SYMBOL(__devm_mdiobus_register);#if IS_ENABLED (CONFIG_OF_MDIO )/** -* devm_of_mdiobus_register - Resource managed variant of of_mdiobus_register() +* __devm_of_mdiobus_register - Resource managed variant of of_mdiobus_register() * @dev: Device to register mii_bus for * @mdio: MII bus structure to register * @np: Device node to parse +* @owner: Owning module */ -int devm_of_mdiobus_register (struct device *dev,struct mii_bus *mdio, -struct device_node *np) +int __devm_of_mdiobus_register (struct device *dev,struct mii_bus *mdio, +struct device_node *np,struct module *owner) {struct mdiobus_devres *dr;int ret;
@@ -117,7 +118,7 @@ int devm_of_mdiobus_register(struct device *dev, struct mii_bus *mdio,if (!dr)return -ENOMEM ; - ret =of_mdiobus_register (mdio, np); + ret =__of_mdiobus_register (mdio, np, owner);if (ret) {devres_free (dr);return ret;
@@ -127,7 +128,7 @@ int devm_of_mdiobus_register(struct device *dev, struct mii_bus *mdio,devres_add (dev, dr); return 0; } -EXPORT_SYMBOL (devm_of_mdiobus_register); +EXPORT_SYMBOL (__devm_of_mdiobus_register);#endif /* CONFIG_OF_MDIO */ MODULE_LICENSE ("GPL" );
drivers/net/phy/phy.c +16 -7
@@ -56,6 +56,18 @@ static const char *phy_state_to_str(enum phy_state st)return NULL ; } +static void phy_process_state_change (struct phy_device *phydev, +enum phy_state old_state) +{ +if (old_state != phydev->state) { +phydev_dbg (phydev,"PHY state change %s -> %s\n" , +phy_state_to_str (old_state), +phy_state_to_str (phydev->state)); +if (phydev->drv && phydev->drv->link_change_notify) + phydev->drv->link_change_notify (phydev); + } +} +static void phy_link_up (struct phy_device *phydev) { phydev->phy_link_change (phydev, true);
@@ -1110,6 +1122,7 @@ EXPORT_SYMBOL(phy_free_interrupt);void phy_stop (struct phy_device *phydev) {struct net_device *dev = phydev->attached_dev; +enum phy_state old_state;if (!phy_is_started (phydev) && phydev->state !=PHY_DOWN ) { WARN(1, "called from state %s\n",
@@ -1118,6 +1131,7 @@ void phy_stop(struct phy_device *phydev) }mutex_lock (&phydev->lock); + old_state = phydev->state;if (phydev->state ==PHY_CABLETEST ) {phy_abort_cable_test (phydev);
@@ -1128,6 +1142,7 @@ void phy_stop(struct phy_device *phydev)sfp_upstream_stop (phydev->sfp_bus); phydev->state =PHY_HALTED ; +phy_process_state_change (phydev, old_state);mutex_unlock (&phydev->lock);
@@ -1242,13 +1257,7 @@ void phy_state_machine(struct work_struct *work)if (err <0 )phy_error (phydev); -if (old_state != phydev->state) { -phydev_dbg (phydev,"PHY state change %s -> %s\n" , -phy_state_to_str (old_state), -phy_state_to_str (phydev->state)); -if (phydev->drv && phydev->drv->link_change_notify) - phydev->drv->link_change_notify (phydev); - } +phy_process_state_change (phydev, old_state);/* Only re-schedule a PHY state machine change if we are polling the * PHY, if PHY_IGNORE_INTERRUPT is set, then we will be moving
drivers/net/usb/cdc_mbim.c +5 -0
@@ -663,6 +663,11 @@ static const struct usb_device_id mbim_devs[] = { .driver_info = (unsigned long)&cdc_mbim_info_avoid_altsetting_toggle, }, +/* Telit FE990 */ + { USB_DEVICE_AND_INTERFACE_INFO(0x1bc7, 0x1081, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE), + .driver_info = (unsigned long )&cdc_mbim_info_avoid_altsetting_toggle, + }, + /* default entry */ { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE), .driver_info = (unsigned long)&cdc_mbim_info_zlp,
drivers/net/usb/qmi_wwan.c +1 -0
@@ -1297,6 +1297,7 @@ static const struct usb_device_id products[] = { {QMI_QUIRK_SET_DTR(0x1bc7, 0x1050, 2)}, /* Telit FN980 */ {QMI_QUIRK_SET_DTR(0x1bc7, 0x1060, 2)}, /* Telit LN920 */ {QMI_QUIRK_SET_DTR(0x1bc7, 0x1070, 2)}, /* Telit FN990 */ + {QMI_QUIRK_SET_DTR(0x1bc7, 0x1080, 2)}, /* Telit FE990 */ {QMI_FIXED_INTF(0x1bc7, 0x1100, 3)}, /* Telit ME910 */ {QMI_FIXED_INTF(0x1bc7, 0x1101, 3)}, /* Telit ME910 dual modem */ {QMI_FIXED_INTF(0x1bc7, 0x1200, 5)}, /* Telit LE920 */
drivers/net/usb/smsc95xx.c +6 -0
@@ -1824,6 +1824,12 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) size = (u16)((header &RX_STS_FL_ ) >>16 ); align_count = (4 - ((size +NET_IP_ALIGN ) %4 )) %4 ; +if (unlikely (size > skb->len)) { +netif_dbg (dev, rx_err, dev->net, +"size err header=0x%08x\n" , header); +return 0 ; + } +if (unlikely (header &RX_STS_ES_ )) {netif_dbg (dev, rx_err, dev->net,"Error header=0x%08x\n" , header);
drivers/net/xen-netback/common.h +1 -1
@@ -166,7 +166,7 @@ struct xenvif_queue { /* Per-queue data for xenvif */struct pending_tx_info pending_tx_info[MAX_PENDING_REQS ];grant_handle_t grant_tx_handle[MAX_PENDING_REQS ]; -struct gnttab_copy tx_copy_ops[MAX_PENDING_REQS ]; +struct gnttab_copy tx_copy_ops[2 *MAX_PENDING_REQS ];struct gnttab_map_grant_ref tx_map_ops[MAX_PENDING_REQS ];struct gnttab_unmap_grant_ref tx_unmap_ops[MAX_PENDING_REQS ];/* passed to gnttab_[un]map_refs with pages under (un)mapping */
drivers/net/xen-netback/netback.c +23 -2
@@ -334,6 +334,7 @@ static int xenvif_count_requests(struct xenvif_queue *queue,struct xenvif_tx_cb {u16 copy_pending_idx[XEN_NETBK_LEGACY_SLOTS_MAX +1 ];u8 copy_count; +u32 split_mask; };#define XENVIF_TX_CB (skb) ((struct xenvif_tx_cb *)(skb)->cb)
@@ -361,6 +362,8 @@ static inline struct sk_buff *xenvif_alloc_skb(unsigned int size)struct sk_buff *skb =alloc_skb (size +NET_SKB_PAD +NET_IP_ALIGN ,GFP_ATOMIC | __GFP_NOWARN); + +BUILD_BUG_ON (sizeof (*XENVIF_TX_CB (skb)) >sizeof (skb->cb));if (unlikely (skb ==NULL ))return NULL ;
@@ -396,11 +399,13 @@ static void xenvif_get_requests(struct xenvif_queue *queue, nr_slots = shinfo->nr_frags +1 ;copy_count (skb) =0 ; +XENVIF_TX_CB (skb)->split_mask =0 ;/* Create copy ops for exactly data_len bytes into the skb head. */ __skb_put (skb, data_len);while (data_len >0 ) {int amount = data_len > txp->size ? txp->size : data_len; +bool split = false; cop->source.u.ref = txp->gref; cop->source.domid = queue->vif->domid;
@@ -413,6 +418,13 @@ static void xenvif_get_requests(struct xenvif_queue *queue, cop->dest.u.gmfn =virt_to_gfn (skb->data +skb_headlen (skb) - data_len); +/* Don't cross local page boundary! */ +if (cop->dest.offset + amount >XEN_PAGE_SIZE ) { + amount =XEN_PAGE_SIZE - cop->dest.offset; +XENVIF_TX_CB (skb)->split_mask |=1U <<copy_count (skb); + split = true; + } + cop->len = amount; cop->flags = GNTCOPY_source_gref;
@@ -420,7 +432,8 @@ static void xenvif_get_requests(struct xenvif_queue *queue, pending_idx = queue->pending_ring[index];callback_param (queue, pending_idx).ctx =NULL ;copy_pending_idx (skb,copy_count (skb)) = pending_idx; -copy_count (skb)++; +if (!split) +copy_count (skb)++; cop++; data_len -= amount;
@@ -441,7 +454,8 @@ static void xenvif_get_requests(struct xenvif_queue *queue, nr_slots--; }else {/* The copy op partially covered the tx_request. -* The remainder will be mapped. +* The remainder will be mapped or copied in the next +* iteration. */ txp->offset += amount; txp->size -= amount;
@@ -539,6 +553,13 @@ static int xenvif_tx_check_gop(struct xenvif_queue *queue, pending_idx =copy_pending_idx (skb, i); newerr = (*gopp_copy)->status; + +/* Split copies need to be handled together. */ +if (XENVIF_TX_CB (skb)->split_mask & (1U << i)) { + (*gopp_copy)++; +if (!newerr) + newerr = (*gopp_copy)->status; + }if (likely (!newerr)) {/* The first frag might still have this slot mapped */ if (i <copy_count (skb) -1 || !sharedslot)
drivers/pinctrl/pinctrl-amd.c +20 -16
@@ -764,32 +764,34 @@ static const struct pinconf_ops amd_pinconf_ops = { .pin_config_group_set = amd_pinconf_group_set, }; -static void amd_gpio_irq_init (struct amd_gpio *gpio_dev) +static void amd_gpio_irq_init_pin (struct amd_gpio *gpio_dev,int pin) { -struct pinctrl_desc *desc = gpio_dev->pctrl->desc; +const struct pin_desc *pd;unsigned long flags;u32 pin_reg, mask; -int i; mask =BIT (WAKE_CNTRL_OFF_S0I3 ) |BIT (WAKE_CNTRL_OFF_S3 ) |BIT (INTERRUPT_MASK_OFF ) |BIT (INTERRUPT_ENABLE_OFF ) |BIT (WAKE_CNTRL_OFF_S4 ); -for (i =0 ; i < desc->npins; i++) { -int pin = desc->pins[i].number; -const struct pin_desc *pd =pin_desc_get (gpio_dev->pctrl, pin); - -if (!pd) -continue ; + pd =pin_desc_get (gpio_dev->pctrl, pin); +if (!pd) +return ; -raw_spin_lock_irqsave (&gpio_dev->lock, flags); +raw_spin_lock_irqsave (&gpio_dev->lock, flags); + pin_reg =readl (gpio_dev->base + pin *4 ); + pin_reg &= ~mask; +writel (pin_reg, gpio_dev->base + pin *4 ); +raw_spin_unlock_irqrestore (&gpio_dev->lock, flags); +} - pin_reg =readl (gpio_dev->base + i *4 ); - pin_reg &= ~mask; -writel (pin_reg, gpio_dev->base + i *4 ); +static void amd_gpio_irq_init (struct amd_gpio *gpio_dev) +{ +struct pinctrl_desc *desc = gpio_dev->pctrl->desc; +int i; -raw_spin_unlock_irqrestore (&gpio_dev->lock, flags); - } +for (i =0 ; i < desc->npins; i++) +amd_gpio_irq_init_pin (gpio_dev, i); }#ifdef CONFIG_PM_SLEEP
@@ -842,8 +844,10 @@ static int amd_gpio_resume(struct device *dev)for (i =0 ; i < desc->npins; i++) {int pin = desc->pins[i].number; -if (!amd_gpio_should_save (gpio_dev, pin)) +if (!amd_gpio_should_save (gpio_dev, pin)) { +amd_gpio_irq_init_pin (gpio_dev, pin);continue ; + }raw_spin_lock_irqsave (&gpio_dev->lock, flags); gpio_dev->saved_regs[i] |=readl (gpio_dev->base + pin *4 ) &PIN_IRQ_PENDING ;
drivers/pinctrl/pinctrl-at91-pio4.c +0 -1
@@ -1139,7 +1139,6 @@ static int atmel_pinctrl_probe(struct platform_device *pdev)dev_err (dev,"can't add the irq domain\n" );return -ENODEV ; } - atmel_pioctrl->irq_domain->name ="atmel gpio" ;for (i =0 ; i < atmel_pioctrl->npins; i++) {int irq =irq_create_mapping (atmel_pioctrl->irq_domain, i);
drivers/pinctrl/pinctrl-ocelot.c +1 -1
@@ -575,7 +575,7 @@ static int ocelot_pinmux_set_mux(struct pinctrl_dev *pctldev,regmap_update_bits (info->map,REG_ALT (0 , info, pin->pin),BIT (p), f << p);regmap_update_bits (info->map,REG_ALT (1 , info, pin->pin), -BIT (p), f << (p -1 )); +BIT (p), (f >>1 ) << p);return 0 ; }
drivers/platform/chrome/cros_ec_chardev.c +1 -1
@@ -284,7 +284,7 @@ static long cros_ec_chardev_ioctl_xcmd(struct cros_ec_dev *ec, void __user *arg) u_cmd.insize > EC_MAX_MSG_BYTES)return -EINVAL ; - s_cmd =kmalloc (sizeof (*s_cmd) +max (u_cmd.outsize, u_cmd.insize), + s_cmd =kzalloc (sizeof (*s_cmd) +max (u_cmd.outsize, u_cmd.insize),GFP_KERNEL );if (!s_cmd)return -ENOMEM ;
drivers/power/supply/bq24190_charger.c +22 -42
151 lines not on this page · raw message
drivers/power/supply/da9150-charger.c +1 -0
@@ -662,6 +662,7 @@ static int da9150_charger_remove(struct platform_device *pdev)if (!IS_ERR_OR_NULL (charger->usb_phy))usb_unregister_notifier (charger->usb_phy, &charger->otg_nb); +cancel_work_sync (&charger->otg_work);power_supply_unregister (charger->battery);power_supply_unregister (charger->usb);
drivers/ptp/ptp_qoriq.c +1 -1
@@ -601,7 +601,7 @@ static int ptp_qoriq_probe(struct platform_device *dev)return 0 ; no_clock: -iounmap (ptp_qoriq->base); +iounmap (base); no_ioremap:release_resource (ptp_qoriq->rsrc); no_resource:
drivers/regulator/fixed.c +1 -1
@@ -175,7 +175,7 @@ static int reg_fixed_voltage_probe(struct platform_device *pdev) drvdata->enable_clock =devm_clk_get (dev,NULL );if (IS_ERR (drvdata->enable_clock)) {dev_err (dev,"Can't get enable-clock from devicetree\n" ); -return -ENOENT ; +return PTR_ERR (drvdata->enable_clock); } }else { drvdata->desc.ops = &fixed_voltage_ops;
drivers/s390/crypto/vfio_ap_drv.c +2 -1
@@ -82,8 +82,9 @@ static void vfio_ap_queue_dev_remove(struct ap_device *apdev)static void vfio_ap_matrix_dev_release (struct device *dev) { -struct ap_matrix_dev *matrix_dev =dev_get_drvdata (dev); +struct ap_matrix_dev *matrix_dev; + matrix_dev = container_of(dev, struct ap_matrix_dev, device);kfree (matrix_dev); }
drivers/scsi/device_handler/scsi_dh_alua.c +4 -2
@@ -1036,10 +1036,12 @@ static int alua_activate(struct scsi_device *sdev,rcu_read_unlock ();mutex_unlock (&h->init_mutex); -if (alua_rtpg_queue (pg, sdev, qdata, true)) +if (alua_rtpg_queue (pg, sdev, qdata, true)) { fn =NULL ; -else + }else { +kfree (qdata); err =SCSI_DH_DEV_OFFLINED ; + }kref_put (&pg->kref, release_port_group); out:if (fn)
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c +1 -2
@@ -2402,8 +2402,7 @@ static int interrupt_preinit_v3_hw(struct hisi_hba *hisi_hba) hisi_hba->cq_nvecs = vectors -BASE_VECTORS_V3_HW ; shost->nr_hw_queues = hisi_hba->cq_nvecs; -devm_add_action (&pdev->dev, hisi_sas_v3_free_vectors, pdev); -return 0 ; +return devm_add_action (&pdev->dev, hisi_sas_v3_free_vectors, pdev); }static int interrupt_init_v3_hw (struct hisi_hba *hisi_hba)
drivers/scsi/lpfc/lpfc_sli.c +4 -4
@@ -20816,20 +20816,20 @@ lpfc_get_io_buf_from_private_pool(struct lpfc_hba *phba,static struct lpfc_io_buf *lpfc_get_io_buf_from_expedite_pool (struct lpfc_hba *phba) { -struct lpfc_io_buf *lpfc_ncmd; +struct lpfc_io_buf *lpfc_ncmd =NULL , *iter;struct lpfc_io_buf *lpfc_ncmd_next;unsigned long iflag;struct lpfc_epd_pool *epd_pool; epd_pool = &phba->epd_pool; - lpfc_ncmd =NULL ;spin_lock_irqsave (&epd_pool->lock, iflag);if (epd_pool->count >0 ) { -list_for_each_entry_safe (lpfc_ncmd, lpfc_ncmd_next, +list_for_each_entry_safe (iter, lpfc_ncmd_next, &epd_pool->list, list) { -list_del (&lpfc_ncmd->list); +list_del (&iter->list); epd_pool->count--; + lpfc_ncmd = iter;break ; } }
drivers/scsi/megaraid/megaraid_sas_fusion.c +2 -2
@@ -4656,7 +4656,7 @@ int megasas_task_abort_fusion(struct scsi_cmnd *scmd) devhandle =megasas_get_tm_devhandle (scmd->device);if (devhandle == (u16 )ULONG_MAX ) { - ret =SUCCESS ; + ret =FAILED ;sdev_printk (KERN_INFO , scmd->device,"task abort issued for invalid devhandle\n" );mutex_unlock (&instance->reset_mutex);
@@ -4726,7 +4726,7 @@ int megasas_reset_target_fusion(struct scsi_cmnd *scmd) devhandle =megasas_get_tm_devhandle (scmd->device);if (devhandle == (u16 )ULONG_MAX ) { - ret =SUCCESS ; + ret =FAILED ;sdev_printk (KERN_INFO , scmd->device,"target reset issued for invalid devhandle\n" );mutex_unlock (&instance->reset_mutex);
drivers/scsi/qla2xxx/qla_os.c +11 -0
@@ -1762,6 +1762,17 @@ __qla2x00_abort_all_cmds(struct qla_qpair *qp, int res)for (cnt =1 ; cnt < req->num_outstanding_cmds; cnt++) { sp = req->outstanding_cmds[cnt];if (sp) { +/* +* perform lockless completion during driver unload +*/ +if (qla2x00_chip_is_down (vha)) { + req->outstanding_cmds[cnt] =NULL ; +spin_unlock_irqrestore (qp->qp_lock_ptr, flags); + sp->done (sp, res); +spin_lock_irqsave (qp->qp_lock_ptr, flags); +continue ; + } +switch (sp->cmd_type) {case TYPE_SRB :qla2x00_abort_srb (qp, sp, res, &flags);
drivers/scsi/scsi_devinfo.c +1 -0
@@ -232,6 +232,7 @@ static struct { {"SGI", "RAID5", "*", BLIST_SPARSELUN}, {"SGI", "TP9100", "*", BLIST_REPORTLUN2}, {"SGI", "Universal Xport", "*", BLIST_NO_ULD_ATTACH}, + {"SKhynix", "H28U74301AMR", NULL, BLIST_SKIP_VPD_PAGES}, {"IBM", "Universal Xport", "*", BLIST_NO_ULD_ATTACH}, {"SUN", "Universal Xport", "*", BLIST_NO_ULD_ATTACH}, {"DELL", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},
drivers/scsi/storvsc_drv.c +16 -0
@@ -1013,6 +1013,22 @@ static void storvsc_handle_error(struct vmscsi_request *vm_srb, goto do_work; } +/* +* Check for "Operating parameters have changed" +* due to Hyper-V changing the VHD/VHDX BlockSize +* when adding/removing a differencing disk. This +* causes discard_granularity to change, so do a +* rescan to pick up the new granularity. We don't +* want scsi_report_sense() to output a message +* that a sysadmin wouldn't know what to do with. +*/ +if ((asc ==0x3f ) && (ascq !=0x03 ) && + (ascq !=0x0e )) { + process_err_fn = storvsc_device_scan; +set_host_byte (scmnd,DID_REQUEUE ); + goto do_work; + } +/* * Otherwise, let upper layer deal with the * error when sense message is present
drivers/scsi/ufs/ufshcd.c +1 -0
@@ -9311,5 +9311,6 @@ EXPORT_SYMBOL_GPL(ufshcd_init);MODULE_AUTHOR ("Santosh Yaragnavi <[email protected]>" );MODULE_AUTHOR ("Vinayak Holikatti <[email protected]>" );MODULE_DESCRIPTION ("Generic UFS host controller driver Core" ); +MODULE_SOFTDEP ("pre: governor_simpleondemand" );MODULE_LICENSE ("GPL" );MODULE_VERSION (UFSHCD_DRIVER_VERSION );
drivers/target/iscsi/iscsi_target_parameters.c +7 -5
@@ -1262,18 +1262,20 @@ static struct iscsi_param *iscsi_check_key(return param;if (!(param->phase & phase)) { -pr_err ("Key \"%s\" may not be negotiated during " , - param->name); +char *phase_name; +switch (phase) {case PHASE_SECURITY : -pr_debug ("Security phase.\n" ); + phase_name ="Security" ;break ;case PHASE_OPERATIONAL : -pr_debug ("Operational phase.\n" ); + phase_name ="Operational" ;break ;default : -pr_debug ("Unknown phase.\n" ); + phase_name ="Unknown" ; } +pr_err ("Key \"%s\" may not be negotiated during %s phase.\n" , + param->name, phase_name);return NULL ; }
drivers/tee/amdtee/core.c +14 -15
@@ -267,35 +267,34 @@ int amdtee_open_session(struct tee_context *ctx, goto out; } +/* Open session with loaded TA */ +handle_open_session (arg, &session_info, param); +if (arg->ret !=TEEC_SUCCESS ) { +pr_err ("open_session failed %d\n" , arg->ret); +handle_unload_ta (ta_handle); +kref_put (&sess->refcount, destroy_session); + goto out; + } +/* Find an empty session index for the given TA */ spin_lock (&sess->lock); i =find_first_zero_bit (sess->sess_mask,TEE_NUM_SESSIONS ); -if (i <TEE_NUM_SESSIONS ) +if (i <TEE_NUM_SESSIONS ) { + sess->session_info[i] = session_info; +set_session_id (ta_handle, i, &arg->session);set_bit (i, sess->sess_mask); + }spin_unlock (&sess->lock);if (i >=TEE_NUM_SESSIONS ) {pr_err ("reached maximum session count %d\n" ,TEE_NUM_SESSIONS ); +handle_close_session (ta_handle, session_info);handle_unload_ta (ta_handle);kref_put (&sess->refcount, destroy_session); rc = -ENOMEM ; goto out; } -/* Open session with loaded TA */ -handle_open_session (arg, &session_info, param); -if (arg->ret !=TEEC_SUCCESS ) { -pr_err ("open_session failed %d\n" , arg->ret); -spin_lock (&sess->lock); -clear_bit (i, sess->sess_mask); -spin_unlock (&sess->lock); -handle_unload_ta (ta_handle); -kref_put (&sess->refcount, destroy_session); - goto out; - } - - sess->session_info[i] = session_info; -set_session_id (ta_handle, i, &arg->session); out:free_pages ((u64 )ta,get_order (ta_size));return rc;
drivers/thunderbolt/nhi.c +1 -1
@@ -36,7 +36,7 @@#define NHI_MAILBOX_TIMEOUT 500/* ms */ -static int ring_interrupt_index (struct tb_ring *ring) +static int ring_interrupt_index (const struct tb_ring *ring) {int bit = ring->hop;if (!ring->is_tx)
drivers/thunderbolt/usb4.c +17 -5
@@ -1636,18 +1636,30 @@ static int usb4_usb3_port_write_allocated_bandwidth(struct tb_port *port, int downstream_bw) {u32 val, ubw, dbw, scale; -int ret; +int ret, max_bw; -/* Read the used scale, hardware default is 0 */ - ret =tb_port_read (port, &scale,TB_CFG_PORT , - port->cap_adap +ADP_USB3_CS_3 ,1 ); +/* Figure out suitable scale */ + scale =0 ; + max_bw =max (upstream_bw, downstream_bw); +while (scale <64 ) { +if (mbps_to_usb3_bw (max_bw, scale) <4096 ) +break ; + scale++; + } + +if (WARN_ON (scale >=64 )) +return -EINVAL ; + + ret =tb_port_write (port, &scale,TB_CFG_PORT , + port->cap_adap +ADP_USB3_CS_3 ,1 );if (ret)return ret; - scale &=ADP_USB3_CS_3_SCALE_MASK ; ubw =mbps_to_usb3_bw (upstream_bw, scale); dbw =mbps_to_usb3_bw (downstream_bw, scale); +tb_port_dbg (port,"scaled bandwidth %u/%u, scale %u\n" , ubw, dbw, scale); + ret =tb_port_read (port, &val,TB_CFG_PORT , port->cap_adap +ADP_USB3_CS_2 ,1 );if (ret)
drivers/tty/serial/8250/Kconfig +3 -1
@@ -254,7 +254,9 @@ config SERIAL_8250_ASPEED_VUART tristate "Aspeed Virtual UART" depends on SERIAL_8250 depends on OF - depends on REGMAP && MFD_SYSCON + depends on MFD_SYSCON + depends on ARCH_ASPEED || COMPILE_TEST + select REGMAP help If you want to use the virtual UART (VUART) device on Aspeed BMC platforms, enable this option. This enables the 16550A-
drivers/tty/serial/fsl_lpuart.c +4 -9
@@ -1278,6 +1278,7 @@ static void lpuart_dma_rx_free(struct uart_port *port)struct dma_chan *chan = sport->dma_rx_chan;dmaengine_terminate_all (chan); +del_timer_sync (&sport->lpuart_timer);dma_unmap_sg (chan->device->dev, &sport->rx_sgl,1 ,DMA_FROM_DEVICE );kfree (sport->rx_ring.buf); sport->rx_ring.tail =0 ;
@@ -1743,7 +1744,6 @@ static int lpuart32_startup(struct uart_port *port)static void lpuart_dma_shutdown (struct lpuart_port *sport) {if (sport->lpuart_dma_rx_use) { -del_timer_sync (&sport->lpuart_timer);lpuart_dma_rx_free (&sport->port); sport->lpuart_dma_rx_use = false; }
@@ -1894,10 +1894,8 @@ lpuart_set_termios(struct uart_port *port, struct ktermios *termios,* Since timer function acqures sport->port.lock, need to stop before * acquring same lock because otherwise del_timer_sync() can deadlock. */ -if (old && sport->lpuart_dma_rx_use) { -del_timer_sync (&sport->lpuart_timer); +if (old && sport->lpuart_dma_rx_use)lpuart_dma_rx_free (&sport->port); - }spin_lock_irqsave (&sport->port.lock, flags);
@@ -2129,10 +2127,8 @@ lpuart32_set_termios(struct uart_port *port, struct ktermios *termios,* Since timer function acqures sport->port.lock, need to stop before * acquring same lock because otherwise del_timer_sync() can deadlock. */ -if (old && sport->lpuart_dma_rx_use) { -del_timer_sync (&sport->lpuart_timer); +if (old && sport->lpuart_dma_rx_use)lpuart_dma_rx_free (&sport->port); - }spin_lock_irqsave (&sport->port.lock, flags);
@@ -2766,11 +2762,10 @@ static int __maybe_unused lpuart_suspend(struct device *dev)* EDMA driver during suspend will forcefully release any * non-idle DMA channels. If port wakeup is enabled or if port * is console port or 'no_console_suspend' is set the Rx DMA -* cannot resume as as expected, hence gracefully release the +* cannot resume as expected, hence gracefully release the * Rx DMA path before suspend and start Rx DMA path on resume. */ if (irq_wake) { -del_timer_sync (&sport->lpuart_timer);lpuart_dma_rx_free (&sport->port); }
drivers/usb/cdns3/cdns3-pci-wrap.c +5 -0
@@ -60,6 +60,11 @@ static struct pci_dev *cdns3_get_second_fun(struct pci_dev *pdev)return NULL ; } +if (func->devfn !=PCI_DEV_FN_HOST_DEVICE && + func->devfn !=PCI_DEV_FN_OTG ) { +return NULL ; + } +return func; }
drivers/usb/chipidea/ci.h +2 -0
@@ -204,6 +204,7 @@ struct hw_bank {* @in_lpm: if the core in low power mode * @wakeup_int: if wakeup interrupt occur * @rev: The revision number for controller +* @mutex: protect code from concorrent running when doing role switch */ struct ci_hdrc {struct device *dev;
@@ -257,6 +258,7 @@ struct ci_hdrc {bool in_lpm;bool wakeup_int;enum ci_revision rev; +struct mutex mutex; };static inline struct ci_role_driver *ci_role (struct ci_hdrc *ci)
drivers/usb/chipidea/core.c +10 -1
@@ -966,9 +966,16 @@ static ssize_t role_store(struct device *dev, strlen(ci->roles[role]->name)))break ; -if (role ==CI_ROLE_END || role == ci->role) +if (role ==CI_ROLE_END )return -EINVAL ; +mutex_lock (&ci->mutex); + +if (role == ci->role) { +mutex_unlock (&ci->mutex); +return n; + } +pm_runtime_get_sync (dev);disable_irq (ci->irq);ci_role_stop (ci);
@@ -977,6 +984,7 @@ static ssize_t role_store(struct device *dev,ci_handle_vbus_change (ci);enable_irq (ci->irq);pm_runtime_put_sync (dev); +mutex_unlock (&ci->mutex);return (ret ==0 ) ? n : ret; }
@@ -1012,6 +1020,7 @@ static int ci_hdrc_probe(struct platform_device *pdev)return -ENOMEM ;spin_lock_init (&ci->lock); +mutex_init (&ci->mutex); ci->dev = dev; ci->platdata =dev_get_platdata (dev); ci->imx28_write_fix = !!(ci->platdata->flags &
drivers/usb/chipidea/otg.c +4 -1
@@ -166,8 +166,10 @@ static int hw_wait_vbus_lower_bsv(struct ci_hdrc *ci)static void ci_handle_id_switch (struct ci_hdrc *ci) { -enum ci_role role =ci_otg_role (ci); +enum ci_role role; +mutex_lock (&ci->mutex); + role =ci_otg_role (ci);if (role != ci->role) {dev_dbg (ci->dev,"switching from %s to %s\n" ,ci_role (ci)->name, ci->roles[role]->name);
@@ -197,6 +199,7 @@ static void ci_handle_id_switch(struct ci_hdrc *ci)if (role ==CI_ROLE_GADGET )ci_handle_vbus_change (ci); } +mutex_unlock (&ci->mutex); }/** * ci_otg_work - perform otg (vbus/id) event handle
drivers/usb/dwc2/platform.c +2 -14
@@ -121,13 +121,6 @@ static int dwc2_get_dr_mode(struct dwc2_hsotg *hsotg)return 0 ; } -static void __dwc2_disable_regulators (void *data) -{ -struct dwc2_hsotg *hsotg = data; - -regulator_bulk_disable (ARRAY_SIZE (hsotg->supplies), hsotg->supplies); -} -static int __dwc2_lowlevel_hw_enable (struct dwc2_hsotg *hsotg) {struct platform_device *pdev =to_platform_device (hsotg->dev);
@@ -138,11 +131,6 @@ static int __dwc2_lowlevel_hw_enable(struct dwc2_hsotg *hsotg)if (ret)return ret; - ret =devm_add_action_or_reset (&pdev->dev, - __dwc2_disable_regulators, hsotg); -if (ret) -return ret; -if (hsotg->clk) { ret =clk_prepare_enable (hsotg->clk);if (ret)
@@ -198,7 +186,7 @@ static int __dwc2_lowlevel_hw_disable(struct dwc2_hsotg *hsotg)if (hsotg->clk)clk_disable_unprepare (hsotg->clk); -return 0 ; +return regulator_bulk_disable (ARRAY_SIZE (hsotg->supplies), hsotg->supplies); }/**
@@ -625,7 +613,7 @@ static int dwc2_driver_probe(struct platform_device *dev)if (hsotg->params.activate_stm_id_vb_detection)regulator_disable (hsotg->usb33d); error: -if (hsotg->dr_mode !=USB_DR_MODE_PERIPHERAL ) +if (hsotg->ll_hw_enabled)dwc2_lowlevel_hw_disable (hsotg);return retval; }
drivers/usb/dwc3/gadget.c +46 -33
105 lines not on this page · raw message
drivers/usb/gadget/function/u_audio.c +1 -1
@@ -613,7 +613,7 @@ void g_audio_cleanup(struct g_audio *g_audio) uac = g_audio->uac; card = uac->card;if (card) -snd_card_free (card); +snd_card_free_when_closed (card);kfree (uac->p_prm.ureq);kfree (uac->c_prm.ureq);
drivers/usb/storage/unusual_uas.h +7 -0
@@ -111,6 +111,13 @@ UNUSUAL_DEV(0x152d, 0x0578, 0x0000, 0x9999, USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_BROKEN_FUA), +/* Reported by: Yaroslav Furman <[email protected]> */ +UNUSUAL_DEV (0x152d ,0x0583 ,0x0000 ,0x9999 , +"JMicron" , +"JMS583Gen 2" , +USB_SC_DEVICE ,USB_PR_DEVICE ,NULL , +US_FL_NO_REPORT_OPCODES ), +/* Reported-by: Thinh Nguyen <[email protected]> */ UNUSUAL_DEV(0x154b, 0xf00b, 0x0000, 0x9999, "PNY",
drivers/usb/typec/ucsi/ucsi.c +6 -5
@@ -1152,7 +1152,7 @@ static int ucsi_register_port(struct ucsi *ucsi, int index)static int ucsi_init (struct ucsi *ucsi) {struct ucsi_connector *con; -u64 command; +u64 command, ntfy;int ret;int i;
@@ -1164,8 +1164,8 @@ static int ucsi_init(struct ucsi *ucsi) }/* Enable basic notifications */ - ucsi->ntfy =UCSI_ENABLE_NTFY_CMD_COMPLETE |UCSI_ENABLE_NTFY_ERROR ; - command =UCSI_SET_NOTIFICATION_ENABLE | ucsi->ntfy; + ntfy =UCSI_ENABLE_NTFY_CMD_COMPLETE |UCSI_ENABLE_NTFY_ERROR ; + command =UCSI_SET_NOTIFICATION_ENABLE | ntfy; ret =ucsi_send_command (ucsi, command,NULL ,0 );if (ret <0 ) goto err_reset;
@@ -1197,12 +1197,13 @@ static int ucsi_init(struct ucsi *ucsi) }/* Enable all notifications */ - ucsi->ntfy =UCSI_ENABLE_NTFY_ALL ; - command =UCSI_SET_NOTIFICATION_ENABLE | ucsi->ntfy; + ntfy =UCSI_ENABLE_NTFY_ALL ; + command =UCSI_SET_NOTIFICATION_ENABLE | ntfy; ret =ucsi_send_command (ucsi, command,NULL ,0 );if (ret <0 ) goto err_unregister; + ucsi->ntfy = ntfy;return 0 ; err_unregister:
drivers/video/fbdev/au1200fb.c +3 -0
@@ -1040,6 +1040,9 @@ static int au1200fb_fb_check_var(struct fb_var_screeninfo *var,u32 pixclock;int screen_size, plane; +if (!var->pixclock) +return -EINVAL ; + plane = fbdev->plane;/* Make sure that the mode respect all LCD controller and
drivers/video/fbdev/geode/lxfb_core.c +3 -0
@@ -234,6 +234,9 @@ static void get_modedb(struct fb_videomode **modedb, unsigned int *size)static int lxfb_check_var (struct fb_var_screeninfo *var,struct fb_info *info) { +if (!var->pixclock) +return -EINVAL ; +if (var->xres >1920 || var->yres >1440 )return -EINVAL ;
drivers/video/fbdev/intelfb/intelfbdrv.c +3 -0
@@ -1214,6 +1214,9 @@ static int intelfb_check_var(struct fb_var_screeninfo *var, dinfo =GET_DINFO (info); +if (!var->pixclock) +return -EINVAL ; +/* update the pitch */ if (intelfbhw_validate_mode (dinfo, var) !=0 )return -EINVAL ;
drivers/video/fbdev/nvidia/nvidia.c +2 -0
@@ -763,6 +763,8 @@ static int nvidiafb_check_var(struct fb_var_screeninfo *var,int pitch, err =0 ;NVTRACE_ENTER (); +if (!var->pixclock) +return -EINVAL ; var->transp.offset =0 ; var->transp.length =0 ;
drivers/video/fbdev/tgafb.c +3 -0
@@ -166,6 +166,9 @@ tgafb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) {struct tga_par *par = (struct tga_par *)info->par; +if (!var->pixclock) +return -EINVAL ; +if (par->tga_type ==TGA_TYPE_8PLANE ) {if (var->bits_per_pixel !=8 )return -EINVAL ;
fs/btrfs/ioctl.c +2 -0
@@ -4254,7 +4254,9 @@ static long btrfs_ioctl_qgroup_assign(struct file *file, void __user *arg) }/* update qgroup status and info */ +mutex_lock (&fs_info->qgroup_ioctl_lock); err =btrfs_run_qgroups (trans); +mutex_unlock (&fs_info->qgroup_ioctl_lock);if (err <0 )btrfs_handle_fs_error (fs_info, err,"failed to update qgroup status and info" );
fs/btrfs/qgroup.c +10 -1
@@ -2762,13 +2762,22 @@ int btrfs_qgroup_account_extents(struct btrfs_trans_handle *trans) }/* -* called from commit_transaction. Writes all changed qgroups to disk. +* Writes all changed qgroups to disk. +* Called by the transaction commit path and the qgroup assign ioctl. */ int btrfs_run_qgroups (struct btrfs_trans_handle *trans) {struct btrfs_fs_info *fs_info = trans->fs_info;int ret =0 ; +/* +* In case we are called from the qgroup assign ioctl, assert that we +* are holding the qgroup_ioctl_lock, otherwise we can race with a quota +* disable operation (ioctl) and access a freed quota root. +*/ +if (trans->transaction->state !=TRANS_STATE_COMMIT_DOING ) +lockdep_assert_held (&fs_info->qgroup_ioctl_lock); +if (!fs_info->quota_root)return ret;
fs/btrfs/volumes.c +10 -1
@@ -1411,8 +1411,17 @@ struct btrfs_device *btrfs_scan_one_device(const char *path, fmode_t flags,* later supers, using BTRFS_SUPER_MIRROR_MAX instead */ bytenr =btrfs_sb_offset (0 ); - flags |=FMODE_EXCL ; +/* +* Avoid using flag |= FMODE_EXCL here, as the systemd-udev may +* initiate the device scan which may race with the user's mount +* or mkfs command, resulting in failure. +* Since the device scan is solely for reading purposes, there is +* no need for FMODE_EXCL. Additionally, the devices are read again +* during the mount process. It is ok to get some inconsistent +* values temporarily, as the device paths of the fsid are the only +* required information for assembling the volume. +*/ bdev =blkdev_get_by_path (path, flags, holder);if (IS_ERR (bdev))return ERR_CAST (bdev);
fs/cifs/cifsfs.h +4 -1
@@ -126,7 +126,10 @@ extern const struct dentry_operations cifs_ci_dentry_ops;#ifdef CONFIG_CIFS_DFS_UPCALL extern struct vfsmount *cifs_dfs_d_automount (struct path *path);#else -#define cifs_dfs_d_automount NULL +static inline struct vfsmount *cifs_dfs_d_automount (struct path *path) +{ +return ERR_PTR (-EREMOTE ); +}#endif /* Functions related to symlinks */
fs/cifs/cifssmb.c +7 -2
@@ -4859,8 +4859,13 @@ CIFSGetDFSRefer(const unsigned int xid, struct cifs_ses *ses,return -ENODEV ; getDFSRetry: - rc =smb_init (SMB_COM_TRANSACTION2 ,15 , ses->tcon_ipc, (void **) &pSMB, - (void **) &pSMBr); +/* +* Use smb_init_no_reconnect() instead of smb_init() as +* CIFSGetDFSRefer() may be called from cifs_reconnect_tcon() and thus +* causing an infinite recursion. +*/ + rc =smb_init_no_reconnect (SMB_COM_TRANSACTION2 ,15 , ses->tcon_ipc, + (void **)&pSMB, (void **)&pSMBr);if (rc)return rc;
fs/cifs/smb2ops.c +1 -1
@@ -593,7 +593,7 @@ SMB3_request_interfaces(const unsigned int xid, struct cifs_tcon *tcon)if (rc == -EOPNOTSUPP ) {cifs_dbg (FYI ,"server does not support query network interfaces\n" ); - goto out; + ret_data_len =0 ; }else if (rc !=0 ) {cifs_tcon_dbg (VFS ,"error %d on ioctl to get interface list\n" , rc); goto out;
fs/ext4/inode.c +2 -1
@@ -1303,7 +1303,8 @@ static int ext4_write_end(struct file *file,bool verity =ext4_verity_in_progress (inode);trace_ext4_write_end (inode, pos, len, copied); -if (inline_data) { +if (inline_data && +ext4_test_inode_state (inode,EXT4_STATE_MAY_INLINE_DATA )) { ret =ext4_write_inline_data_end (inode, pos, len, copied, page);if (ret <0 ) {
fs/gfs2/aops.c +0 -2
@@ -451,8 +451,6 @@ static int stuffed_readpage(struct gfs2_inode *ip, struct page *page)return error; kaddr =kmap_atomic (page); -if (dsize >gfs2_max_stuffed_size (ip)) - dsize =gfs2_max_stuffed_size (ip);memcpy (kaddr, dibh->b_data +sizeof (struct gfs2_dinode ), dsize);memset (kaddr + dsize,0 ,PAGE_SIZE - dsize);kunmap_atomic (kaddr);
fs/gfs2/bmap.c +0 -3
@@ -69,9 +69,6 @@ static int gfs2_unstuffer_page(struct gfs2_inode *ip, struct buffer_head *dibh,void *kaddr =kmap (page);u64 dsize =i_size_read (inode); -if (dsize >gfs2_max_stuffed_size (ip)) - dsize =gfs2_max_stuffed_size (ip); -memcpy (kaddr, dibh->b_data +sizeof (struct gfs2_dinode ), dsize);memset (kaddr + dsize,0 ,PAGE_SIZE - dsize);kunmap (page);
fs/gfs2/glops.c +3 -0
@@ -454,6 +454,9 @@ static int gfs2_dinode_in(struct gfs2_inode *ip, const void *buf) ip->i_depth = (u8 )depth; ip->i_entries =be32_to_cpu (str->di_entries); +if (gfs2_is_stuffed (ip) && ip->i_inode.i_size >gfs2_max_stuffed_size (ip)) + goto corrupt; +if (S_ISREG (ip->i_inode.i_mode))gfs2_set_aops (&ip->i_inode);
fs/nfs/nfs4proc.c +2 -3
@@ -1975,8 +1975,7 @@ _nfs4_opendata_reclaim_to_nfs4_state(struct nfs4_opendata *data)if (!data->rpc_done) {if (data->rpc_status)return ERR_PTR (data->rpc_status); -/* cached opens have already been processed */ - goto update; +return nfs4_try_open_cached (data); } ret =nfs_refresh_inode (inode, &data->f_attr);
@@ -1985,7 +1984,7 @@ _nfs4_opendata_reclaim_to_nfs4_state(struct nfs4_opendata *data)if (data->o_res.delegation_type !=0 )nfs4_opendata_check_deleg (data, state); -update: +if (!update_open_stateid (state, &data->o_res.stateid,NULL , data->o_arg.fmode))return ERR_PTR (-EAGAIN );
fs/nfsd/nfs4proc.c +6 -16
@@ -1248,13 +1248,6 @@ nfsd4_interssc_connect(struct nl4_server *nss, struct svc_rqst *rqstp,return status; } -static void -nfsd4_interssc_disconnect (struct vfsmount *ss_mnt) -{ -nfs_do_sb_deactive (ss_mnt->mnt_sb); -mntput (ss_mnt); -} -/* * Verify COPY destination stateid. *
@@ -1325,11 +1318,6 @@ nfsd4_cleanup_inter_ssc(struct vfsmount *ss_mnt, struct nfsd_file *src, { } -static void -nfsd4_interssc_disconnect (struct vfsmount *ss_mnt) -{ -} -static struct file *nfs42_ssc_open (struct vfsmount *ss_mnt,struct nfs_fh *src_fh,nfs4_stateid *stateid)
@@ -1471,14 +1459,14 @@ static int nfsd4_do_async_copy(void *data) copy->nf_src =kzalloc (sizeof (struct nfsd_file ),GFP_KERNEL );if (!copy->nf_src) { copy->nfserr = nfserr_serverfault; -nfsd4_interssc_disconnect (copy->ss_mnt); +/* ss_mnt will be unmounted by the laundromat */ goto do_callback; } copy->nf_src->nf_file =nfs42_ssc_open (copy->ss_mnt, ©->c_fh, ©->stateid);if (IS_ERR (copy->nf_src->nf_file)) { copy->nfserr = nfserr_offload_denied; -nfsd4_interssc_disconnect (copy->ss_mnt); +/* ss_mnt will be unmounted by the laundromat */ goto do_callback; } }
@@ -1561,8 +1549,10 @@ nfsd4_copy(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,if (async_copy)cleanup_async_copy (async_copy); status =nfserrno (-ENOMEM ); -if (!copy->cp_intra) -nfsd4_interssc_disconnect (copy->ss_mnt); +/* +* source's vfsmount of inter-copy will be unmounted +* by the laundromat +*/ goto out; }
fs/nilfs2/ioctl.c +1 -1
@@ -70,7 +70,7 @@ static int nilfs_ioctl_wrap_copy(struct the_nilfs *nilfs,if (argv->v_index > ~(__u64 )0 - argv->v_nmembs)return -EINVAL ; - buf = (void *)__get_free_pages (GFP_NOFS ,0 ); + buf = (void *)get_zeroed_page (GFP_NOFS );if (unlikely (!buf))return -ENOMEM ; maxmembs =PAGE_SIZE / argv->v_size;
fs/ocfs2/aops.c +16 -2
@@ -1981,11 +1981,25 @@ int ocfs2_write_end_nolock(struct address_space *mapping, }if (unlikely (copied < len) && wc->w_target_page) { +loff_t new_isize; +if (!PageUptodate (wc->w_target_page)) copied =0 ; -ocfs2_zero_new_buffers (wc->w_target_page, start+copied, - start+len); + new_isize =max_t (loff_t,i_size_read (inode), pos + copied); +if (new_isize >page_offset (wc->w_target_page)) + ocfs2_zero_new_buffers(wc->w_target_page, start+copied,
Lines of this file are not shown. View the raw message.
kernel/sched/fair.c +49 -5
54 lines not on this page · raw message
net/bluetooth/l2cap_core.c +88 -41
129 lines not on this page · raw message
sound/pci/ymfpci/ymfpci.c +42 -29
71 lines not on this page · raw message
sound/pci/ymfpci/ymfpci_main.c +50 -24
74 lines not on this page · raw message
tools/lib/bpf/btf_dump.c +105 -49
154 lines not on this page · raw message
tools/testing/selftests/bpf/prog_tests/btf.c +28 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/btf_dump_test_case_bitfields.c +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/btf_dump_test_case_packing.c +79 -1
80 lines not on this page · raw message
tools/testing/selftests/bpf/progs/btf_dump_test_case_padding.c +153 -18
171 lines not on this page · raw message
virt/kvm/kvm_main.c +114 -35
149 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.