Linux 4.20.13
Greg KH
maintainerI'm announcing the release of the 4.20.13 kernel.
All users of the 4.20 kernel series must upgrade.
The updated 4.20.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.20.y
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arc/include/asm/cache.h | 11 arch/arc/kernel/head.S | 14 arch/arc/kernel/setup.c | 87 arch/arm/probes/kprobes/opt-arm.c | 2 arch/mips/configs/ath79_defconfig | 1 arch/mips/jazz/jazzdma.c | 5 arch/mips/net/ebpf_jit.c | 9 arch/parisc/kernel/ptrace.c | 29 arch/powerpc/kernel/head_8xx.S | 3 arch/s390/kvm/vsie.c | 2 arch/x86/include/asm/kvm_host.h | 2 arch/x86/kvm/cpuid.c | 4 arch/x86/kvm/mmu.c | 18 arch/x86/xen/enlighten_pv.c | 5 drivers/acpi/bus.c | 24 drivers/acpi/nfit/core.c | 6 drivers/atm/he.c | 2 drivers/clk/at91/at91sam9x5.c | 5 drivers/clk/at91/sama5d2.c | 4 drivers/clk/at91/sama5d4.c | 2 drivers/cpufreq/scmi-cpufreq.c | 2 drivers/gpio/gpio-mt7621.c | 20 drivers/gpio/gpio-pxa.c | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 2 drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 12 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 5 drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c | 7 drivers/gpu/drm/i915/intel_fbdev.c | 12 drivers/gpu/drm/meson/meson_drv.c | 9 drivers/gpu/drm/radeon/radeon_kms.c | 1 drivers/gpu/drm/sun4i/sun4i_backend.c | 5 drivers/hwmon/nct6775.c | 12 drivers/hwmon/tmp421.c | 2 drivers/infiniband/hw/mthca/mthca_provider.c | 4 drivers/infiniband/ulp/srp/ib_srp.c | 10 drivers/isdn/hardware/avm/b1.c | 2 drivers/isdn/i4l/isdn_tty.c | 6 drivers/leds/leds-lp5523.c | 4 drivers/mfd/Kconfig | 1 drivers/mfd/ab8500-core.c | 2 drivers/mfd/axp20x.c | 126 - drivers/mfd/bd9571mwv.c | 1 drivers/mfd/cros_ec_dev.c | 1 drivers/mfd/db8500-prcmu.c | 4 drivers/mfd/mc13xxx-core.c | 4 drivers/mfd/mt6397-core.c | 3 drivers/mfd/qcom_rpm.c | 4 drivers/mfd/ti_am335x_tscadc.c | 5 drivers/mfd/tps65218.c | 24 drivers/mfd/twl-core.c | 4 drivers/mfd/wm5110-tables.c | 2 drivers/net/ethernet/amazon/ena/ena_netdev.c | 10 drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 6 drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c | 6 drivers/net/ethernet/mellanox/mlx4/en_rx.c | 22 drivers/net/ethernet/mellanox/mlx4/icm.c | 92 drivers/net/ethernet/mellanox/mlx4/icm.h | 22 drivers/net/ethernet/mellanox/mlx5/core/en.h | 1 drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c | 6 drivers/net/ethernet/mellanox/mlx5/core/en/xdp.h | 17 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 1 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 25 drivers/net/ethernet/mellanox/mlx5/core/en_tx.c | 6 drivers/net/ethernet/mellanox/mlxsw/Kconfig | 1 drivers/net/ethernet/mellanox/mlxsw/pci.c | 4 drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_ctcam.c | 10 drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c | 12 drivers/net/ethernet/qlogic/qed/qed_ll2.c | 4 drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c | 6 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 51 drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c | 10 drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c | 2 drivers/net/geneve.c | 10 drivers/net/phy/micrel.c | 1 drivers/net/phy/phylink.c | 19 drivers/net/phy/sfp-bus.c | 2 drivers/net/phy/sfp.c | 30 drivers/net/phy/sfp.h | 2 drivers/net/team/team.c | 27 drivers/net/wan/fsl_ucc_hdlc.c | 62 drivers/net/wireless/mediatek/mt76/mt76x0/usb.c | 46 drivers/pinctrl/pinctrl-max77620.c | 14 drivers/pinctrl/qcom/pinctrl-qcs404.c | 2 drivers/scsi/cxgbi/cxgb3i/cxgb3i.c | 9 drivers/scsi/cxgbi/cxgb4i/cxgb4i.c | 28 drivers/scsi/cxgbi/libcxgbi.c | 7 drivers/scsi/cxgbi/libcxgbi.h | 5 drivers/scsi/isci/init.c | 14 drivers/scsi/qedi/qedi_iscsi.c | 3 drivers/scsi/qedi/qedi_iscsi.h | 1 drivers/scsi/qla1280.c | 2 drivers/scsi/qla4xxx/ql4_os.c | 2 drivers/scsi/sd_zbc.c | 8 drivers/scsi/ufs/ufs.h | 2 drivers/scsi/ufs/ufshcd.c | 2 drivers/soc/fsl/qe/qe_tdm.c | 55 drivers/staging/erofs/dir.c | 7 drivers/staging/erofs/inode.c | 10 drivers/staging/erofs/internal.h | 70 drivers/staging/erofs/super.c | 19 drivers/staging/erofs/unzip_pagevec.h | 2 drivers/staging/erofs/unzip_vle.c | 35 drivers/staging/erofs/unzip_vle_lz4.c | 2 drivers/staging/erofs/utils.c | 12 drivers/target/target_core_user.c | 88 drivers/vhost/scsi.c | 20 drivers/vhost/vhost.c | 8 drivers/video/backlight/pwm_bl.c | 19 drivers/watchdog/mt7621_wdt.c | 1 drivers/watchdog/rt2880_wdt.c | 1 drivers/xen/pvcalls-back.c | 9 drivers/xen/pvcalls-front.c | 100 fs/afs/flock.c | 4 fs/afs/inode.c | 3 fs/afs/protocol_yfs.h | 11 fs/afs/rxrpc.c | 53 fs/afs/yfsclient.c | 2 fs/ceph/snap.c | 3 fs/proc/base.c | 4 include/keys/user-type.h | 2 include/linux/compiler-clang.h | 5 include/linux/compiler-gcc.h | 4 include/linux/compiler-intel.h | 4 include/linux/compiler.h | 4 include/linux/qed/qed_chain.h | 31 include/linux/skbuff.h | 2 include/linux/virtio_net.h | 19 include/net/netfilter/nf_flow_table.h | 1 include/sound/soc.h | 6 include/trace/events/afs.h | 2 include/uapi/linux/inet_diag.h | 16 kernel/bpf/stackmap.c | 12 kernel/trace/trace.c | 2 kernel/trace/trace_kprobe.c | 10 mm/mempolicy.c | 6 net/batman-adv/soft-interface.c | 2 net/bridge/br_fdb.c | 5 net/bridge/br_multicast.c | 9 net/ceph/messenger.c | 15 net/core/filter.c | 11 net/dsa/port.c | 4 net/ipv4/inet_diag.c | 10 net/ipv4/netfilter/ipt_CLUSTERIP.c | 19 net/ipv6/netfilter.c | 4 net/ipv6/seg6.c | 4 net/ipv6/sit.c | 3 net/ipv6/udp.c | 8 net/mac80211/cfg.c | 6 net/mac80211/main.c | 4 net/mac80211/mesh.h | 6 net/mac80211/mesh_pathtbl.c | 155 - net/mac80211/rx.c | 7 net/netfilter/nf_flow_table_core.c | 5 net/netfilter/nf_tables_api.c | 5 net/netfilter/nfnetlink_osf.c | 4 net/netfilter/nft_compat.c | 3 net/netfilter/nft_flow_offload.c | 13 net/packet/af_packet.c | 2 net/sched/cls_tcindex.c | 80 net/sctp/diag.c | 1 net/sctp/offload.c | 1 net/sctp/stream.c | 4 net/socket.c | 82 net/sunrpc/auth_gss/auth_gss.c | 12 net/sunrpc/clnt.c | 20 net/sunrpc/xprt.c | 1 net/sunrpc/xprtrdma/verbs.c | 6 net/xdp/xdp_umem.c | 16 samples/bpf/Makefile | 1 samples/bpf/asm_goto_workaround.h | 16 security/keys/key.c | 4 security/keys/keyring.c | 4 security/keys/proc.c | 3 security/keys/request_key.c | 1 security/keys/request_key_auth.c | 2 sound/pci/hda/patch_realtek.c | 42 sound/soc/soc-core.c | 11 tools/include/uapi/linux/pkt_sched.h | 1163 ++++++++++ tools/testing/selftests/bpf/Makefile | 5 tools/testing/selftests/bpf/test_progs.c | 30 tools/testing/selftests/bpf/test_sock_addr.c | 53 tools/testing/selftests/net/forwarding/bridge_vlan_aware.sh | 47 tools/testing/selftests/net/ip_defrag.c | 96 tools/testing/selftests/net/ip_defrag.sh | 9 tools/testing/selftests/tc-testing/tc-tests/actions/ife.json | 88 tools/testing/selftests/tc-testing/tc-tests/actions/tunnel_key.json | 31 189 files changed, 2953 insertions(+), 993 deletions(-)
Alban Bedel (1):
MIPS: ath79: Enable OF serial ports in the default config
Alex Deucher (1):
drm/amdgpu: Set DPM_FLAG_NEVER_SKIP when enabling PM-runtime
Alexandre Belloni (2):
clk: at91: fix masterck name
clk: at91: fix at91sam9x5 peripheral clock number
Alexey Brodkin (1):
ARC: define ARCH_SLAB_MINALIGN = 8
Anders Roxell (1):
selftests: bpf: install files tcp_(server|client)*.py
Andrey Ignatov (2):
bpf: Fix [::] -> [::1] rewrite in sys_sendmsg
selftests/bpf: Test [::] -> [::1] rewrite in sys_sendmsg in test_sock_addrArthur Kiyanovski (1):
net: ena: fix race between link up and device initalization
Avri Altman (1):
scsi: ufs: Fix geometry descriptor size
Bart Van Assche (1):
RDMA/srp: Rework SCSI device reset handling
Bijan Mottahedeh (1):
vhost/scsi: Use copy_to_iter() to send control queue response
Bjorn Andersson (1):
pinctrl: qcom: qcs404: Correct SDC tile
Changbin Du (1):
kprobe: Do not use uaccess functions to access kernel memory that can fault
Charlene Liu (1):
drm/amd/display: fix PME notification not working in RV desktop
Charles Keepax (1):
mfd: wm5110: Add missing ASRC rate register
Chen-Yu Tsai (1):
mfd: axp20x: Re-align MFD cell entries
Cheng-Min Ao (1):
hwmon: (tmp421) Correct the misspelling of the tmp442 compatible attribute in OF device ID table
Chris Wilson (1):
drm/i915/fbdev: Actually configure untiled displays
Christian König (1):
drm/amdgpu: disable bulk moves for now
Christophe Leroy (1):
powerpc/8xx: fix setting of pagetable for Abatron BDI debug tool.
Colin Ian King (1):
atm: he: fix sign-extension overflow on large shift
Cong Wang (4):
team: avoid complex list operations in team_nl_cmd_options_set()
net_sched: fix a race condition in tcindex_destroy()
net_sched: fix a memory leak in cls_tcindex
net_sched: fix two more memory leaks in cls_tcindex
Curtis Malainey (1):
ASoC: soc-core: fix init platform memory handling
Dan Carpenter (2):
mfd: ab8500-core: Return zero in get_register_interruptible()
xprtrdma: Double free in rpcrdma_sendctxs_create()
Daniel Borkmann (1):
bpf: pull in pkt_sched.h header for tooling to fix bpftool build
David Howells (3):
afs: Fix key refcounting in file locking code
afs: Provide a function to get a ref on a call
afs: Fix race in async call refcounting
Davide Caratti (3):
selftests: tc-testing: drop test on missing tunnel key id
selftests: tc-testing: fix tunnel_key failure if dst_port is unspecified
selftests: tc-testing: fix parsing of ife type
Denis Bolotin (2):
qed: Fix qed_chain_set_prod() for PBL chains with non power of 2 page count
qed: Fix qed_ll2_post_rx_buffer_notify_fw() by adding a write memory barrier
Dien Pham (1):
mfd: bd9571mwv: Add volatile register to make DVFS work
Dmitry V. Levin (1):
parisc: Fix ptrace syscall number modification
Eli Cooper (1):
netfilter: ipv6: Don't preserve original oif for loopback address
Enric Balletbo i Serra (1):
mfd: cros_ec_dev: Add missing mfd_remove_devices() call in remove
Eric Biggers (3):
KEYS: allow reaching the keys quotas exactly
KEYS: user: Align the payload buffer
KEYS: always initialize keyring_index_key::desc_len
Eric Dumazet (1):
batman-adv: fix uninit-value in batadv_interface_tx()
Eugeniy Paltsev (2):
ARCv2: Enable unaligned access in early ASM code
ARC: U-boot: check arguments paranoidly
Felix Fietkau (1):
mac80211: allocate tailroom for forwarded mesh packets
Felix Kuehling (1):
drm/amdkfd: Don't assign dGPUs to APU topology devices
Fernando Fernandez Mancera (1):
netfilter: nfnetlink_osf: add missing fmatch check
Florian Fainelli (1):
net: dsa: Fix NPD checking for br_vlan_enabled()
Gao Xiang (7):
staging: erofs: remove the redundant d_rehash() for the root dentry
staging: erofs: atomic_cond_read_relaxed on ref-locked workgroup
staging: erofs: fix `erofs_workgroup_{try_to_freeze, unfreeze}'
staging: erofs: add a full barrier in erofs_workgroup_unfreeze
staging: erofs: {dir,inode,super}.c: rectify BUG_ONs
staging: erofs: unzip_{pagevec.h,vle.c}: rectify BUG_ONs
staging: erofs: unzip_vle_lz4.c,utils.c: rectify BUG_ONs
Greg Kroah-Hartman (1):
Linux 4.20.13
Guenter Roeck (2):
hwmon: (nct6775) Fix chip ID for NCT6798D
hwmon: (nct6775) Enable IO mapping for NCT6797D and NCT6798D
Hangbin Liu (3):
geneve: should not call rt6_lookup() when ipv6 was disabled
sit: check if IPv6 enabled before calling ip6_err_gen_icmpv6_unreach() Revert "bridge: do not add port to router list when receives query with source 0.0.0.0"
Heiko Stuebner (1):
backlight: pwm_bl: Fix devicetree parsing with auto-generated brightness tables
Heiner Kallweit (1):
net: phy: micrel: set soft_reset callback to genphy_soft_reset for KSZ9031
Henry Yen (1):
netfilter: nft_flow_offload: fix checking method of conntrack helper
Herbert Xu (2):
mac80211: Use linked list instead of rhashtable walk for mesh tables
mac80211: Free mpath object when rhashtable insertion fails
Hui Wang (1):
ALSA: hda/realtek: Disable PC beep in passthrough on alc285
Ido Schimmel (5):
mlxsw: spectrum: Add VXLAN dependency for spectrum
selftests: forwarding: Add a test for VLAN deletion
net: bridge: Mark FDB entries that were added by user as such
mlxsw: spectrum_switchdev: Do not treat static FDB entries as sticky
selftests: forwarding: Add a test case for externally learned FDB entries
Ilya Dryomov (1):
libceph: handle an empty authorize reply
Jean Delvare (1):
mfd: at91-usart: Add platform dependency
Jeremy Soller (1):
ALSA: hda/realtek - Headset microphone and internal speaker support for System76 oryp5
Jia-Ju Bai (1):
isdn: i4l: isdn_tty: Fix some concurrency double-free bugs
Johannes Berg (4):
Revert "socket: fix struct ifreq size in compat ioctl" Revert "kill dev_ifsioc()"
net: socket: fix SIOCGIFNAME in compat
net: socket: make bond ioctls go through compat_ifreq_ioctl()
Jonathan Marek (1):
mfd: qcom_rpm: write fw_version to CTRL_REG
Jose Abreu (5):
net: stmmac: Fix PCI module removal leak
net: stmmac: dwxgmac2: Only clear interrupts that are active
net: stmmac: Check if CBS is supported before configuring
net: stmmac: Fix the logic of checking if RX Watchdog must be enabled
net: stmmac: Prevent RX starvation in stmmac_napi_poll()
Julia Lawall (2):
drm/meson: add missing of_node_put drm/sun4i: backend: add missing of_node_puts
Kal Conley (1):
net/packet: fix 4gb buffer limit due to overflow check
Kangjie Lu (2):
mfd: mc13xxx: Fix a missing check of a register-read failure
leds: lp5523: fix a missing check of return value of lp55xx_read
Keerthy (1):
mfd: tps65218: Use devm_regmap_add_irq_chip and clean up error path in probe()
Konstantin Khlebnikov (1):
inet_diag: fix reporting cgroup classid and fallback to priority
Krzysztof Kazimierczak (1):
xsk: Check if a queue exists during umem setup
Leo (Hanghong) Ma (1):
drm/amd/display: Fix MST reboot/poweroff sequence
Leon Romanovsky (1):
RDMA/mthca: Clear QP objects during their allocation
Li RongQing (1):
ipv6: propagate genlmsg_reply return code
Logan Gunthorpe (1):
scsi: isci: initialize shost fully before calling scsi_add_host()
Lubomir Rintel (1):
gpio: pxa: avoid attempting to set pin direction via pinctrl on MMP2
Madalin Bucur (1):
dpaa_eth: NETIF_F_LLTX requires to do our own update of trans_start
Manish Rangankar (1):
scsi: qedi: Add ep_state for login completion on un-reachable targets
Marc Dionne (2):
afs: Set correct lock type for the yfs CreateFile
afs: Don't set vnode->cb_s_break in afs_validate()
Masato Suzuki (1):
scsi: sd_zbc: Fix sd_zbc_report_zones() buffer allocation
Mathieu Desnoyers (1):
ARM: 8834/1: Fix: kprobes: optimized kprobes illegal instruction
Michael S. Tsirkin (1):
include/linux/compiler*.h: fix OPTIMIZER_HIDE_VAR
Michal Hocko (1):
proc, oom: do not report alien mms when setting oom_score_adj
Nathan Chancellor (4):
mfd: twl-core: Fix section annotations on {,un}protect_pm_master
mfd: db8500-prcmu: Fix some section annotations
isdn: avm: Fix string plus integer warning from Clang
pinctrl: max77620: Use define directive for max77620_pinconf_param values
NeilBrown (1):
watchdog: mt7621_wdt/rt2880_wdt: Fix compilation problem
Nicolas Boichat (1):
mfd: mt6397: Do not call irq_domain_remove if PMIC unsupported
Nir Dotan (2):
mlxsw: spectrum_acl: Add cleanup after C-TCAM update error condition
mlxsw: pci: Return error on PCI reset timeout
Oskari Lemmela (2):
mfd: axp20x: Add AC power supply cell for AXP813
mfd: axp20x: Add supported cells for AXP803Pablo Neira Ayuso (2):
netfilter: nf_tables: fix flush after rule deletion in the same batch
netfilter: nft_compat: use-after-free when deleting targets
Paul Burton (1):
MIPS: eBPF: Always return sign extended 32b values
Pavel Tikhomirov (1):
vhost: return EINVAL if iovecs size does not match the message size
Peter Oskolkov (2):
selftests: net: fix/improve ip_defrag selftest
bpf: bpf_setsockopt: reset sock dst on SO_MARK changes
Pierre Morel (1):
s390: vsie: Use effective CRYCBD.31 to check CRYCBD validity
Quentin Perret (1):
tracing: Fix number of entries in trace header
Raed Salem (1):
net/mlx5e: FPGA, fix Innova IPsec TX offload data path performance
Rafael J. Wysocki (2):
ACPI: EC: Look for ECDT EC after calling acpi_load_tables()
gpu: drm: radeon: Set DPM_FLAG_NEVER_SKIP when enabling PM-runtime
Rakesh Pillai (1):
mac80211: Restore vif beacon interval if start ap fails
Ralph Campbell (1):
numa: change get_mempolicy() to use nr_node_ids instead of MAX_NUMNODES
René van Dorst (1):
gpio: MT7621: use a per instance irq_chip structure
Russell King (2):
net: sfp: do not probe SFP module before we're attached
net: phylink: avoid resolving link state too early
Saeed Mahameed (2):
net/mlx4_en: Force CHECKSUM_NONE for short ethernet frames net/mlx5e: XDP, fix redirect resources availability check
Song Liu (1):
bpf: fix panic in stack_map_get_build_id() on i386 and arm32
Stanislav Fomichev (4):
selftests/bpf: install with_tunnels.sh for test_flow_dissector.sh
bpf: don't assume build-id length is always 20 bytes
bpf: zero out build_id for BPF_STACK_BUILD_ID_IP selftests/bpf: retry tests that expect build-id
Stanislaw Gruszka (1):
mt76x0u: fix suspend/resume
Stanley Chu (1):
scsi: ufs: Fix system suspend status
Stefano Stabellini (4):
pvcalls-front: read all data before closing the connection
pvcalls-front: don't try to free unallocated rings
pvcalls-front: properly allocate sk
pvcalls-back: set -ENOTCONN in pvcalls_conn_back_read
Stephen Warren (1):
net/mlx4: Get rid of page operation after dma_alloc_coherent
Taehee Yoo (2):
netfilter: nf_tables: fix leaking object reference count
netfilter: ipt_CLUSTERIP: fix sleep-in-atomic bug in clusterip_config_entry_put()
Talons Lee (1):
always clear the X2APIC_ENABLE bit for PV guest
Tariq Toukan (1):
net/mlx5e: Fix wrong (zero) TX drop counter indication for representor
Thomas Bogendoerfer (2):
MIPS: jazz: fix 64bit build
scsi: qla1280: set 64bit coherent mask
Toke Høiland-Jørgensen (1):
mac80211: Change default tx_sk_pacing_shift to 7
Tonghao Zhang (1):
net/mlx5e: Don't overwrite pedit action when multiple pedit used
Tony Luck (1):
acpi/nfit: Fix race accessing memdev in nfit_get_smbios_id()
Trond Myklebust (2):
SUNRPC: Ensure rq_bytes_sent is reset before request transmission
SUNRPC: Ensure we respect the RPCSEC_GSS sequence number limit
Varun Prakash (1):
scsi: cxgb4i: add wait_for_completion()
Vignesh R (1):
mfd: ti_am335x_tscadc: Use PLATFORM_DEVID_AUTO while registering mfd cells
Vitaly Kuznetsov (1):
x86/kvm/mmu: fix switch between root and guest MMUs
Wen Yang (3):
soc/fsl/qe: fix err handling of ucc_of_parse_tdm
pvcalls-front: Avoid get_free_pages(GFP_KERNEL) under spinlock
pvcalls-front: fix potential null dereference
Willem de Bruijn (2):
net: validate untrusted gso packets without csum offload
net: avoid false positives in untrusted gso validation
Xin Long (2):
sctp: call gso_reset_checksum when computing checksum in sctp_gso_segment
sctp: set stream ext to NULL after freeing it in sctp_stream_outq_migrate
Xiubo Li (1):
scsi: tcmu: avoid cmd/qfull timers updated whenever a new cmd comes
Yan, Zheng (1):
ceph: avoid repeatedly adding inode to mdsc->snap_flush_list
Yangtao Li (1):
cpufreq: scmi: Fix use-after-free in scmi_cpufreq_exit()
Yonghong Song (1):
samples/bpf: workaround clang asm goto compilation errors
Yonglong Liu (1):
net: hns: Fix use after free identified by SLUB debug
Yu Zhang (2):
KVM: MMU: record maximum physical address width in kvm_mmu_extended_role
kvm: x86: Return LA57 feature based on hardware capability
Yuchung Cheng (2):
bpf: correctly set initial window on active Fast Open sender
bpf: fix SO_MAX_PACING_RATE to support TCP internal pacing
YueHaibing (2):
xen/pvcalls: remove set but not used variable 'intf'
scsi: qla4xxx: check return code of qla4xxx_copy_from_fwddb_param
wenxu (2):
netfilter: nft_flow_offload: Fix reverse route lookup
netfilter: nft_flow_offload: fix interaction with vrf slave device
Greg KH
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 20 -SUBLEVEL = 12 +SUBLEVEL = 13 EXTRAVERSION = NAME = Shy Crocodile
arch/arc/include/asm/cache.h +11 -0
@@ -52,6 +52,17 @@#define cache_line_size () SMP_CACHE_BYTES#define ARCH_DMA_MINALIGN SMP_CACHE_BYTES +/* +* Make sure slab-allocated buffers are 64-bit aligned when atomic64_t uses +* ARCv2 64-bit atomics (LLOCKD/SCONDD). This guarantess runtime 64-bit +* alignment for any atomic64_t embedded in buffer. +* Default ARCH_SLAB_MINALIGN is __alignof__(long long) which has a relaxed +* value of 4 (and not 8) in ARC ABI. +*/ +#if defined(CONFIG_ARC_HAS_LL64 ) && defined(CONFIG_ARC_HAS_LLSC ) +#define ARCH_SLAB_MINALIGN 8 +#endif +extern void arc_cache_init (void );extern char *arc_cache_mumbojumbo (int cpu_id,char *buf,int len);extern void read_decode_cache_bcr (void );
arch/arc/kernel/head.S +12 -2
@@ -17,6 +17,7 @@ #include <asm/entry.h> #include <asm/arcregs.h> #include <asm/cache.h> +#include <asm/irqflags.h> .macro CPU_EARLY_SETUP
@@ -47,6 +48,15 @@ sr r5, [ARC_REG_DC_CTRL] 1: + +#ifdef CONFIG_ISA_ARCV2 + ; Unaligned access is disabled at reset, so re-enable early as + ; gcc 7.3.1 (ARC GNU 2018.03) onwards generates unaligned access + ; by default + lr r5, [status32] + bset r5, r5, STATUS_AD_BIT + kflag r5 +#endif .endm .section .init.text, "ax",@progbits
@@ -93,9 +103,9 @@ ENTRY(stext) #ifdef CONFIG_ARC_UBOOT_SUPPORT ; Uboot - kernel ABI ; r0 = [0] No uboot interaction, [1] cmdline in r2, [2] DTB in r2 - ; r1 = magic number (board identity, unused as of now + ; r1 = magic number (always zero as of now) ; r2 = pointer to uboot provided cmdline or external DTB in mem - ; These are handled later in setup_arch() + ; These are handled later in handle_uboot_args() st r0, [@uboot_tag] st r2, [@uboot_arg] #endif
arch/arc/kernel/setup.c +62 -25
105 lines not on this page · raw message
arch/arm/probes/kprobes/opt-arm.c +1 -1
@@ -247,7 +247,7 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe *op, struct kprobe *or }/* Copy arch-dep-instance from template. */ -memcpy (code, (unsigned char *)optprobe_template_entry, +memcpy (code, (unsigned long *)&optprobe_template_entry,TMPL_END_IDX *sizeof (kprobe_opcode_t));/* Adjust buffer according to instruction. */
arch/mips/configs/ath79_defconfig +1 -0
@@ -71,6 +71,7 @@ CONFIG_SERIAL_8250_CONSOLE=y # CONFIG_SERIAL_8250_PCI is not set CONFIG_SERIAL_8250_NR_UARTS=1 CONFIG_SERIAL_8250_RUNTIME_UARTS=1 +CONFIG_SERIAL_OF_PLATFORM=y CONFIG_SERIAL_AR933X=y CONFIG_SERIAL_AR933X_CONSOLE=y # CONFIG_HW_RANDOM is not set
arch/mips/jazz/jazzdma.c +3 -2
@@ -74,14 +74,15 @@ static int __init vdma_init(void) get_order(VDMA_PGTBL_SIZE));BUG_ON (!pgtbl);dma_cache_wback_inv ((unsigned long )pgtbl,VDMA_PGTBL_SIZE ); - pgtbl = (VDMA_PGTBL_ENTRY *)KSEG1ADDR (pgtbl); + pgtbl = (VDMA_PGTBL_ENTRY *)CKSEG1ADDR ((unsigned long )pgtbl);/* * Clear the R4030 translation table */ vdma_pgtbl_init (); -r4030_write_reg32 (JAZZ_R4030_TRSTBL_BASE ,CPHYSADDR (pgtbl)); +r4030_write_reg32 (JAZZ_R4030_TRSTBL_BASE , +CPHYSADDR ((unsigned long )pgtbl));r4030_write_reg32 (JAZZ_R4030_TRSTBL_LIM ,VDMA_PGTBL_SIZE );r4030_write_reg32 (JAZZ_R4030_TRSTBL_INV ,0 );
arch/mips/net/ebpf_jit.c +6 -3
@@ -343,12 +343,15 @@ static int build_int_epilogue(struct jit_ctx *ctx, int dest_reg)const struct bpf_prog *prog = ctx->skf;int stack_adjust = ctx->stack_size;int store_offset = stack_adjust -8 ; +enum reg_val_type td;int r0 =MIPS_R_V0 ; -if (dest_reg ==MIPS_R_RA && -get_reg_val_type (ctx, prog->len,BPF_REG_0 ) ==REG_32BIT_ZERO_EX ) +if (dest_reg ==MIPS_R_RA ) {/* Don't let zero extended value escape. */ -emit_instr (ctx, sll, r0, r0,0 ); + td =get_reg_val_type (ctx, prog->len,BPF_REG_0 ); +if (td ==REG_64BIT || td ==REG_32BIT_ZERO_EX ) +emit_instr (ctx, sll, r0, r0,0 ); + }if (ctx->flags &EBPF_SAVE_RA ) {emit_instr (ctx, ld,MIPS_R_RA , store_offset,MIPS_R_SP );
arch/parisc/kernel/ptrace.c +21 -8
@@ -308,15 +308,29 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,long do_syscall_trace_enter (struct pt_regs *regs) { -if (test_thread_flag (TIF_SYSCALL_TRACE ) && -tracehook_report_syscall_entry (regs)) { +if (test_thread_flag (TIF_SYSCALL_TRACE )) { +int rc =tracehook_report_syscall_entry (regs); +/* -* Tracing decided this syscall should not happen or the -* debugger stored an invalid system call number. Skip -* the system call and the system call restart handling. +* As tracesys_next does not set %r28 to -ENOSYS +* when %r20 is set to -1, initialize it here. */ - regs->gr[20 ] =-1UL ; - goto out; + regs->gr[28 ] = -ENOSYS ; + +if (rc) { +/* +* A nonzero return code from +* tracehook_report_syscall_entry() tells us +* to prevent the syscall execution. Skip +* the syscall call and the syscall restart handling. +* +* Note that the tracer may also just change +* regs->gr[20] to an invalid syscall number, +* that is handled by tracesys_next. +*/ + regs->gr[20 ] =-1UL ; +return -1 ; + } }/* Do the secure computing check after ptrace. */
@@ -340,7 +354,6 @@ long do_syscall_trace_enter(struct pt_regs *regs) regs->gr[24 ] &0xffffffff , regs->gr[23] & 0xffffffff); -out:/* * Sign extend the syscall number to 64bit since it may have been * modified by a compat ptrace call
arch/powerpc/kernel/head_8xx.S +2 -1
@@ -927,11 +927,12 @@ start_here: /* set up the PTE pointers for the Abatron bdiGDB. */ - tovirt(r6,r6) lis r5, abatron_pteptrs@h ori r5, r5, abatron_pteptrs@l stw r5, 0xf0(0) /* Must match your Abatron config file */ tophys(r5,r5) + lis r6, swapper_pg_dir@h + ori r6, r6, swapper_pg_dir@l stw r6, 0(r5) /* Now turn on the MMU for real! */
arch/s390/kvm/vsie.c +1 -1
@@ -297,7 +297,7 @@ static int shadow_crycb(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page) scb_s->crycbd =0 ; apie_h = vcpu->arch.sie_block->eca &ECA_APIE ; -if (!apie_h && !key_msk) +if (!apie_h && (!key_msk || fmt_o ==CRYCB_FORMAT0 ))return 0 ;if (!crycb_addr)
arch/x86/include/asm/kvm_host.h +2 -0
@@ -299,6 +299,7 @@ union kvm_mmu_extended_role { unsigned int cr4_smap:1; unsigned int cr4_smep:1; unsigned int cr4_la57:1; + unsigned int maxphyaddr:6; }; };
@@ -397,6 +398,7 @@ struct kvm_mmu {void (*update_pte)(struct kvm_vcpu *vcpu,struct kvm_mmu_page *sp,u64 *spte,const void *pte);hpa_t root_hpa; +gpa_t root_cr3;union kvm_mmu_role mmu_role;u8 root_level;u8 shadow_root_level;
arch/x86/kvm/cpuid.c +4 -0
@@ -337,6 +337,7 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function,unsigned f_mpx =kvm_mpx_supported () ?F (MPX ) :0 ;unsigned f_xsaves = kvm_x86_ops->xsaves_supported () ?F (XSAVES ) :0 ;unsigned f_umip = kvm_x86_ops->umip_emulated () ?F (UMIP ) :0 ; +unsigned f_la57 =0 ;/* cpuid 1.edx */ const u32 kvm_cpuid_1_edx_x86_features =
@@ -491,7 +492,10 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function,// TSC_ADJUST is emulated entry->ebx |=F (TSC_ADJUST ); entry->ecx &= kvm_cpuid_7_0_ecx_x86_features; + f_la57 = entry->ecx &F (LA57 );cpuid_mask (&entry->ecx,CPUID_7_ECX ); +/* Set LA57 based on hardware capability. */ + entry->ecx |= f_la57; entry->ecx |= f_umip;/* PKU is not yet implemented for shadow paging. */ if (!tdp_enabled || !boot_cpu_has (X86_FEATURE_OSPKE ))
arch/x86/kvm/mmu.c +14 -4
@@ -3517,6 +3517,7 @@ void kvm_mmu_free_roots(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu, &invalid_list); mmu->root_hpa =INVALID_PAGE ; } + mmu->root_cr3 =0 ; }kvm_mmu_commit_zap_page (vcpu->kvm, &invalid_list);
@@ -3572,6 +3573,7 @@ static int mmu_alloc_direct_roots(struct kvm_vcpu *vcpu) vcpu->arch.mmu->root_hpa =__pa (vcpu->arch.mmu->pae_root); }else BUG (); + vcpu->arch.mmu->root_cr3 = vcpu->arch.mmu->get_cr3 (vcpu);return 0 ; }
@@ -3580,10 +3582,11 @@ static int mmu_alloc_shadow_roots(struct kvm_vcpu *vcpu) {struct kvm_mmu_page *sp;u64 pdptr, pm_mask; -gfn_t root_gfn; +gfn_t root_gfn, root_cr3;int i; - root_gfn = vcpu->arch.mmu->get_cr3 (vcpu) >>PAGE_SHIFT ; + root_cr3 = vcpu->arch.mmu->get_cr3 (vcpu); + root_gfn = root_cr3 >>PAGE_SHIFT ;if (mmu_check_root (vcpu, root_gfn))return 1 ;
@@ -3608,7 +3611,7 @@ static int mmu_alloc_shadow_roots(struct kvm_vcpu *vcpu) ++sp->root_count;spin_unlock (&vcpu->kvm->mmu_lock); vcpu->arch.mmu->root_hpa = root; -return 0 ; + goto set_root_cr3; }/*
@@ -3674,6 +3677,9 @@ static int mmu_alloc_shadow_roots(struct kvm_vcpu *vcpu) vcpu->arch.mmu->root_hpa =__pa (vcpu->arch.mmu->lm_root); } +set_root_cr3: + vcpu->arch.mmu->root_cr3 = root_cr3; +return 0 ; }
@@ -4125,7 +4131,7 @@ static bool cached_root_available(struct kvm_vcpu *vcpu, gpa_t new_cr3,struct kvm_mmu_root_info root;struct kvm_mmu *mmu = vcpu->arch.mmu; - root.cr3 = mmu->get_cr3 (vcpu); + root.cr3 = mmu->root_cr3; root.hpa = mmu->root_hpa;for (i =0 ; i <KVM_MMU_NUM_PREV_ROOTS ; i++) {
@@ -4138,6 +4144,7 @@ static bool cached_root_available(struct kvm_vcpu *vcpu, gpa_t new_cr3, } mmu->root_hpa = root.hpa; + mmu->root_cr3 = root.cr3;return i <KVM_MMU_NUM_PREV_ROOTS ; }
@@ -4731,6 +4738,7 @@ static union kvm_mmu_extended_role kvm_calc_mmu_role_ext(struct kvm_vcpu *vcpu) ext.cr4_pse = !!is_pse (vcpu); ext.cr4_pke = !!kvm_read_cr4_bits (vcpu,X86_CR4_PKE ); ext.cr4_la57 = !!kvm_read_cr4_bits (vcpu,X86_CR4_LA57 ); + ext.maxphyaddr =cpuid_maxphyaddr (vcpu); ext.valid =1 ;
@@ -5477,11 +5485,13 @@ int kvm_mmu_create(struct kvm_vcpu *vcpu) vcpu->arch.walk_mmu = &vcpu->arch.root_mmu; vcpu->arch.root_mmu.root_hpa =INVALID_PAGE ; + vcpu->arch.root_mmu.root_cr3 =0 ; vcpu->arch.root_mmu.translate_gpa = translate_gpa;for (i =0 ; i <KVM_MMU_NUM_PREV_ROOTS ; i++) vcpu->arch.root_mmu.prev_roots[i] =KVM_MMU_ROOT_INFO_INVALID ; vcpu->arch.guest_mmu.root_hpa =INVALID_PAGE ; + vcpu->arch.guest_mmu.root_cr3 =0 ; vcpu->arch.guest_mmu.translate_gpa = translate_gpa;for (i =0 ; i <KVM_MMU_NUM_PREV_ROOTS ; i++) vcpu->arch.guest_mmu.prev_roots[i] =KVM_MMU_ROOT_INFO_INVALID ;
arch/x86/xen/enlighten_pv.c +1 -4
@@ -898,10 +898,7 @@ static u64 xen_read_msr_safe(unsigned int msr, int *err) val =native_read_msr_safe (msr, err);switch (msr) {case MSR_IA32_APICBASE : -#ifdef CONFIG_X86_X2APIC - if (!(cpuid_ecx(1) & (1 << (X86_FEATURE_X2APIC & 31)))) -#endif - val &= ~X2APIC_ENABLE ; + val &= ~X2APIC_ENABLE ;break ; }return val;
drivers/acpi/bus.c +12 -12
@@ -1054,18 +1054,6 @@ void __init acpi_early_init(void) goto error0; } -/* -* ACPI 2.0 requires the EC driver to be loaded and work before -* the EC device is found in the namespace (i.e. before -* acpi_load_tables() is called). -* -* This is accomplished by looking for the ECDT table, and getting -* the EC parameters out of that. -* -* Ignore the result. Not having an ECDT is not fatal. -*/ - status =acpi_ec_ecdt_probe (); -#ifdef CONFIG_X86 if (!acpi_ioapic) {/* compatible (0) means level (3) */
@@ -1142,6 +1130,18 @@ static int __init acpi_bus_init(void) goto error1; } +/* +* ACPI 2.0 requires the EC driver to be loaded and work before the EC +* device is found in the namespace. +* +* This is accomplished by looking for the ECDT table and getting the EC +* parameters out of that. +* +* Do that before calling acpi_initialize_objects() which may trigger EC +* address space accesses. +*/ +acpi_ec_ecdt_probe (); + status =acpi_enable_subsystem (ACPI_NO_ACPI_ENABLE );if (ACPI_FAILURE (status)) { printk(KERN_ERR PREFIX
drivers/acpi/nfit/core.c +4 -2
@@ -724,6 +724,7 @@ int nfit_get_smbios_id(u32 device_handle, u16 *flags)struct acpi_nfit_memory_map *memdev;struct acpi_nfit_desc *acpi_desc;struct nfit_mem *nfit_mem; +u16 physical_id;mutex_lock (&acpi_desc_lock);list_for_each_entry (acpi_desc, &acpi_descs, list) {
@@ -731,10 +732,11 @@ int nfit_get_smbios_id(u32 device_handle, u16 *flags)list_for_each_entry (nfit_mem, &acpi_desc->dimms, list) { memdev =__to_nfit_memdev (nfit_mem);if (memdev->device_handle == device_handle) { + *flags = memdev->flags; + physical_id = memdev->physical_id;mutex_unlock (&acpi_desc->init_mutex);mutex_unlock (&acpi_desc_lock); - *flags = memdev->flags; -return memdev->physical_id; +return physical_id; } }mutex_unlock (&acpi_desc->init_mutex);
drivers/atm/he.c +1 -1
@@ -717,7 +717,7 @@ static int he_init_cs_block_rcm(struct he_dev *he_dev)instead of '/ 512', use '>> 9' to prevent a call to divdu3 on x86 platforms */ - rate_cps = (unsigned long long ) (1 << exp) * (man +512 ) >>9 ; + rate_cps = (unsigned long long ) (1UL << exp) * (man +512 ) >>9 ;if (rate_cps <10 ) rate_cps =10 ;/* 2.2.1 minimum payload rate is 10 cps */
drivers/clk/at91/at91sam9x5.c +2 -3
@@ -144,8 +144,7 @@ static void __init at91sam9x5_pmc_setup(struct device_node *np,return ; at91sam9x5_pmc =pmc_data_allocate (PMC_MAIN +1 , -nck (at91sam9x5_systemck), -nck (at91sam9x35_periphck),0 ); +nck (at91sam9x5_systemck),31 ,0 );if (!at91sam9x5_pmc)return ;
@@ -210,7 +209,7 @@ static void __init at91sam9x5_pmc_setup(struct device_node *np, parent_names[1 ] ="mainck" ; parent_names[2 ] ="plladivck" ; parent_names[3 ] ="utmick" ; - parent_names[4 ] ="mck" ; + parent_names[4 ] ="masterck" ;for (i =0 ; i <2 ; i++) {char name[6 ];
drivers/clk/at91/sama5d2.c +2 -2
@@ -240,7 +240,7 @@ static void __init sama5d2_pmc_setup(struct device_node *np) parent_names[1 ] ="mainck" ; parent_names[2 ] ="plladivck" ; parent_names[3 ] ="utmick" ; - parent_names[4 ] ="mck" ; + parent_names[4 ] ="masterck" ;for (i =0 ; i <3 ; i++) {char name[6 ];
@@ -291,7 +291,7 @@ static void __init sama5d2_pmc_setup(struct device_node *np) parent_names[1 ] ="mainck" ; parent_names[2 ] ="plladivck" ; parent_names[3 ] ="utmick" ; - parent_names[4 ] ="mck" ; + parent_names[4 ] ="masterck" ; parent_names[5 ] ="audiopll_pmcck" ;for (i =0 ; i <ARRAY_SIZE (sama5d2_gck); i++) { hw = at91_clk_register_generated(regmap, &pmc_pcr_lock,
drivers/clk/at91/sama5d4.c +1 -1
@@ -207,7 +207,7 @@ static void __init sama5d4_pmc_setup(struct device_node *np) parent_names[1 ] ="mainck" ; parent_names[2 ] ="plladivck" ; parent_names[3 ] ="utmick" ; - parent_names[4 ] ="mck" ; + parent_names[4 ] ="masterck" ;for (i =0 ; i <3 ; i++) {char name[6 ];
drivers/cpufreq/scmi-cpufreq.c +1 -1
@@ -187,8 +187,8 @@ static int scmi_cpufreq_exit(struct cpufreq_policy *policy)cpufreq_cooling_unregister (priv->cdev);dev_pm_opp_free_cpufreq_table (priv->cpu_dev, &policy->freq_table); -kfree (priv);dev_pm_opp_remove_all_dynamic (priv->cpu_dev); +kfree (priv);return 0 ; }
drivers/gpio/gpio-mt7621.c +10 -10
@@ -30,6 +30,7 @@#define GPIO_REG_EDGE 0xA0struct mtk_gc { +struct irq_chip irq_chip;struct gpio_chip chip;spinlock_t lock;int bank;
@@ -189,13 +190,6 @@ mediatek_gpio_irq_type(struct irq_data *d, unsigned int type)return 0 ; } -static struct irq_chip mediatek_gpio_irq_chip = { - .irq_unmask = mediatek_gpio_irq_unmask, - .irq_mask = mediatek_gpio_irq_mask, - .irq_mask_ack = mediatek_gpio_irq_mask, - .irq_set_type = mediatek_gpio_irq_type, -}; -static int mediatek_gpio_xlate (struct gpio_chip *chip,const struct of_phandle_args *spec,u32 *flags)
@@ -254,6 +248,13 @@ mediatek_gpio_bank_probe(struct device *dev,return ret; } + rg->irq_chip.name =dev_name (dev); + rg->irq_chip.parent_device = dev; + rg->irq_chip.irq_unmask = mediatek_gpio_irq_unmask; + rg->irq_chip.irq_mask = mediatek_gpio_irq_mask; + rg->irq_chip.irq_mask_ack = mediatek_gpio_irq_mask; + rg->irq_chip.irq_set_type = mediatek_gpio_irq_type; +if (mtk->gpio_irq) {/* * Manually request the irq here instead of passing
@@ -270,14 +271,14 @@ mediatek_gpio_bank_probe(struct device *dev,return ret; } - ret =gpiochip_irqchip_add (&rg->chip, &mediatek_gpio_irq_chip, + ret =gpiochip_irqchip_add (&rg->chip, &rg->irq_chip,0 , handle_simple_irq,IRQ_TYPE_NONE );if (ret) {dev_err (dev,"failed to add gpiochip_irqchip\n" );return ret; } -gpiochip_set_chained_irqchip (&rg->chip, &mediatek_gpio_irq_chip, +gpiochip_set_chained_irqchip (&rg->chip, &rg->irq_chip, mtk->gpio_irq,NULL ); }
@@ -310,7 +311,6 @@ mediatek_gpio_probe(struct platform_device *pdev) mtk->gpio_irq =irq_of_parse_and_map (np,0 ); mtk->dev = dev;platform_set_drvdata (pdev, mtk); - mediatek_gpio_irq_chip.name =dev_name (dev);for (i =0 ; i <MTK_BANK_CNT ; i++) { ret =mediatek_gpio_bank_probe (dev, np, i);
drivers/gpio/gpio-pxa.c +1 -0
@@ -245,6 +245,7 @@ static bool pxa_gpio_has_pinctrl(void) {switch (gpio_type) {case PXA3XX_GPIO : +case MMP2_GPIO :return false;default :
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +1 -0
@@ -212,6 +212,7 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags) }if (amdgpu_device_is_px (dev)) { +dev_pm_set_driver_flags (dev->dev,DPM_FLAG_NEVER_SKIP );pm_runtime_use_autosuspend (dev->dev);pm_runtime_set_autosuspend_delay (dev->dev,5000 );pm_runtime_set_active (dev->dev);
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +2 -0
@@ -637,12 +637,14 @@ void amdgpu_vm_move_to_lru_tail(struct amdgpu_device *adev,struct ttm_bo_global *glob = adev->mman.bdev.glob;struct amdgpu_vm_bo_base *bo_base; +#if 0 if (vm->bulk_moveable) {spin_lock (&glob->lru_lock);ttm_bo_bulk_move_lru_tail (&vm->lru_bulk_move);spin_unlock (&glob->lru_lock);return ; } +#endif memset (&vm->lru_bulk_move,0 ,sizeof (vm->lru_bulk_move));
drivers/gpu/drm/amd/amdkfd/kfd_topology.c +9 -3
@@ -1074,8 +1074,6 @@ static uint32_t kfd_generate_gpu_id(struct kfd_dev *gpu)* the GPU device is not already present in the topology device * list then return NULL. This means a new topology device has to * be created for this GPU. -* TODO: Rather than assiging @gpu to first topology device withtout -* gpu attached, it will better to have more stringent check. */ static struct kfd_topology_device *kfd_assign_gpu (struct kfd_dev *gpu) {
@@ -1083,12 +1081,20 @@ static struct kfd_topology_device *kfd_assign_gpu(struct kfd_dev *gpu)struct kfd_topology_device *out_dev =NULL ;down_write (&topology_lock); -list_for_each_entry (dev, &topology_device_list, list) +list_for_each_entry (dev, &topology_device_list, list) { +/* Discrete GPUs need their own topology device list +* entries. Don't assign them to CPU/APU nodes. +*/ +if (!gpu->device_info->needs_iommu_device && + dev->node_props.cpu_cores_count) +continue ; +if (!dev->gpu && (dev->node_props.simd_count >0 )) { dev->gpu = gpu; out_dev = dev;break ; } + }up_write (&topology_lock);return out_dev; }
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +3 -2
@@ -704,12 +704,13 @@ static int dm_suspend(void *handle)struct amdgpu_display_manager *dm = &adev->dm;int ret =0 ; +WARN_ON (adev->dm.cached_state); + adev->dm.cached_state =drm_atomic_helper_suspend (adev->ddev); +s3_handle_mst (adev->ddev, true);amdgpu_dm_irq_suspend (adev); -WARN_ON (adev->dm.cached_state); - adev->dm.cached_state =drm_atomic_helper_suspend (adev->ddev);dc_set_power_state (dm->dc,DC_ACPI_CM_POWER_STATE_D3 );
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c +6 -1
@@ -1000,7 +1000,7 @@ void dce110_enable_audio_stream(struct pipe_ctx *pipe_ctx) pipe_ctx->stream_res.audio->funcs->az_enable (pipe_ctx->stream_res.audio); -if (num_audio ==1 && pp_smu !=NULL && pp_smu->set_pme_wa_enable !=NULL ) +if (num_audio >=1 && pp_smu !=NULL && pp_smu->set_pme_wa_enable !=NULL )/*this is the first audio. apply the PME w/a in order to wake AZ from D3*/ pp_smu->set_pme_wa_enable (&pp_smu->pp_smu);/* un-mute audio */
@@ -1017,6 +1017,8 @@ void dce110_disable_audio_stream(struct pipe_ctx *pipe_ctx, int option) pipe_ctx->stream_res.stream_enc->funcs->audio_mute_control ( pipe_ctx->stream_res.stream_enc, true);if (pipe_ctx->stream_res.audio) { +struct pp_smu_funcs_rv *pp_smu = dc->res_pool->pp_smu; +if (option !=KEEP_ACQUIRED_RESOURCE || !dc->debug.az_endpoint_mute_only) {/*only disalbe az_endpoint if power down or free*/
@@ -1036,6 +1038,9 @@ void dce110_disable_audio_stream(struct pipe_ctx *pipe_ctx, int option)update_audio_usage (&dc->current_state->res_ctx, dc->res_pool, pipe_ctx->stream_res.audio, false); pipe_ctx->stream_res.audio =NULL ; } +if (pp_smu !=NULL && pp_smu->set_pme_wa_enable !=NULL ) +/*this is the first audio. apply the PME w/a in order to wake AZ from D3*/ + pp_smu->set_pme_wa_enable (&pp_smu->pp_smu);/* TODO: notify audio driver for if audio modes list changed * add audio mode list change flag */
drivers/gpu/drm/i915/intel_fbdev.c +7 -5
@@ -336,8 +336,8 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper, bool *enabled, int width, int height) { struct drm_i915_private *dev_priv = to_i915(fb_helper->dev); -unsigned long conn_configured, conn_seq, mask;unsigned int count =min (fb_helper->connector_count,BITS_PER_LONG ); +unsigned long conn_configured, conn_seq;int i, j;bool *save_enabled;bool fallback = true, ret = true;
@@ -355,10 +355,9 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,drm_modeset_backoff (&ctx);memcpy (save_enabled, enabled, count); - mask =GENMASK (count -1 ,0 ); + conn_seq =GENMASK (count -1 ,0 ); conn_configured =0 ; retry: - conn_seq = conn_configured;for (i =0 ; i < count; i++) {struct drm_fb_helper_connector *fb_conn;struct drm_connector *connector;
@@ -371,7 +370,8 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,if (conn_configured &BIT (i))continue ; -if (conn_seq ==0 && !connector->has_tile) +/* First pass, only consider tiled connectors */ +if (conn_seq ==GENMASK (count -1 ,0 ) && !connector->has_tile)continue ;if (connector->status == connector_status_connected)
@@ -475,8 +475,10 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper, conn_configured |=BIT (i); } -if ((conn_configured & mask) != mask && conn_configured != conn_seq) +if (conn_configured != conn_seq) {/* repeat until no more are found */ + conn_seq = conn_configured; goto retry; + }/* * If the BIOS didn't enable everything it could, fall back to have the
drivers/gpu/drm/meson/meson_drv.c +7 -2
@@ -368,8 +368,10 @@ static int meson_probe_remote(struct platform_device *pdev, remote_node =of_graph_get_remote_port_parent (ep);if (!remote_node || remote_node == parent ||/* Ignore parent endpoint */ - !of_device_is_available (remote_node)) + !of_device_is_available (remote_node)) { +of_node_put (remote_node);continue ; + } count +=meson_probe_remote (pdev, match, remote, remote_node);
@@ -388,10 +390,13 @@ static int meson_drv_probe(struct platform_device *pdev)for_each_endpoint_of_node (np, ep) { remote =of_graph_get_remote_port_parent (ep); -if (!remote || !of_device_is_available (remote)) +if (!remote || !of_device_is_available (remote)) { +of_node_put (remote);continue ; + } count +=meson_probe_remote (pdev, &match, np, remote); +of_node_put (remote); }if (count && !match)
drivers/gpu/drm/radeon/radeon_kms.c +1 -0
@@ -172,6 +172,7 @@ int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags) }if (radeon_is_px (dev)) { +dev_pm_set_driver_flags (dev->dev,DPM_FLAG_NEVER_SKIP );pm_runtime_use_autosuspend (dev->dev);pm_runtime_set_autosuspend_delay (dev->dev,5000 );pm_runtime_set_active (dev->dev);
drivers/gpu/drm/sun4i/sun4i_backend.c +3 -2
@@ -704,17 +704,18 @@ static struct sun4i_frontend *sun4i_backend_find_frontend(struct sun4i_drv *drv, remote =of_graph_get_remote_port_parent (ep);if (!remote)continue ; +of_node_put (remote);/* does this node match any registered engines? */ list_for_each_entry (frontend, &drv->frontend_list, list) {if (remote == frontend->node) { -of_node_put (remote);of_node_put (port); +of_node_put (ep);return frontend; } } } - +of_node_put (port);return ERR_PTR (-EINVAL ); }
drivers/hwmon/nct6775.c +7 -5
@@ -44,8 +44,8 @@* nct6796d 14 7 7 2+6 0xd420 0xc1 0x5ca3 * nct6797d 14 7 7 2+6 0xd450 0xc1 0x5ca3 * (0xd451) -* nct6798d 14 7 7 2+6 0xd458 0xc1 0x5ca3 -* (0xd459) +* nct6798d 14 7 7 2+6 0xd428 0xc1 0x5ca3 +* (0xd429) * * #temp lists the number of monitored temperature sources (first value) plus * the number of directly connectable temperature sensors (second value).
@@ -138,7 +138,7 @@ MODULE_PARM_DESC(fan_debounce, "Enable debouncing for fan RPM signal");#define SIO_NCT6795_ID 0xd350#define SIO_NCT6796_ID 0xd420#define SIO_NCT6797_ID 0xd450 -#define SIO_NCT6798_ID 0xd458 +#define SIO_NCT6798_ID 0xd428#define SIO_ID_MASK 0xFFF8enum pwm_enable { off, manual, thermal_cruise, speed_cruise, sf3, sf4 };
@@ -4508,7 +4508,8 @@ static int __maybe_unused nct6775_resume(struct device *dev)if (data->kind == nct6791 || data->kind == nct6792 || data->kind == nct6793 || data->kind == nct6795 || - data->kind == nct6796) + data->kind == nct6796 || data->kind == nct6797 || + data->kind == nct6798)nct6791_enable_io_mapping (sioreg);superio_exit (sioreg);
@@ -4644,7 +4645,8 @@ static int __init nct6775_find(int sioaddr, struct nct6775_sio_data *sio_data)if (sio_data->kind == nct6791 || sio_data->kind == nct6792 || sio_data->kind == nct6793 || sio_data->kind == nct6795 || - sio_data->kind == nct6796) + sio_data->kind == nct6796 || sio_data->kind == nct6797 || + sio_data->kind == nct6798)nct6791_enable_io_mapping (sioaddr);superio_exit (sioaddr);
drivers/hwmon/tmp421.c +1 -1
@@ -88,7 +88,7 @@ static const struct of_device_id tmp421_of_match[] = { .data = (void *)2 }, { - .compatible = "ti,tmp422", + .compatible = "ti,tmp442", .data = (void *)3 }, { },
drivers/infiniband/hw/mthca/mthca_provider.c +2 -2
@@ -533,7 +533,7 @@ static struct ib_qp *mthca_create_qp(struct ib_pd *pd, {struct mthca_ucontext *context; - qp =kmalloc (sizeof *qp,GFP_KERNEL ); + qp =kzalloc (sizeof (*qp),GFP_KERNEL );if (!qp)return ERR_PTR (-ENOMEM );
@@ -599,7 +599,7 @@ static struct ib_qp *mthca_create_qp(struct ib_pd *pd,if (pd->uobject)return ERR_PTR (-EINVAL ); - qp =kmalloc (sizeof (struct mthca_sqp ),GFP_KERNEL ); + qp =kzalloc (sizeof (struct mthca_sqp ),GFP_KERNEL );if (!qp)return ERR_PTR (-ENOMEM );
drivers/infiniband/ulp/srp/ib_srp.c +0 -10
@@ -2942,7 +2942,6 @@ static int srp_reset_device(struct scsi_cmnd *scmnd) {struct srp_target_port *target =host_to_target (scmnd->device->host);struct srp_rdma_ch *ch; -int i, j;u8 status;shost_printk (KERN_ERR , target->scsi_host,"SRP reset_device called\n" );
@@ -2954,15 +2953,6 @@ static int srp_reset_device(struct scsi_cmnd *scmnd)if (status)return FAILED ; -for (i =0 ; i < target->ch_count; i++) { - ch = &target->ch[i]; -for (j =0 ; j < target->req_ring_size; ++j) { -struct srp_request *req = &ch->req_ring[j]; - -srp_finish_req (ch, req, scmnd->device,DID_RESET <<16 ); - } - } -return SUCCESS ; }
drivers/isdn/hardware/avm/b1.c +1 -1
@@ -423,7 +423,7 @@ void b1_parse_version(avmctrl_info *cinfo)int i, j;for (j =0 ; j <AVM_MAXVERSION ; j++) - cinfo->version[j] ="\0\0" +1 ; + cinfo->version[j] ="" ;for (i =0 , j =0 ; j <AVM_MAXVERSION && i < cinfo->versionlen; j++, i += cinfo->versionbuf[i] +1 )
drivers/isdn/i4l/isdn_tty.c +5 -1
@@ -1437,15 +1437,19 @@ isdn_tty_set_termios(struct tty_struct *tty, struct ktermios *old_termios) {modem_info *info = (modem_info *) tty->driver_data; +mutex_lock (&modem_info_mutex);if (!old_termios)isdn_tty_change_speed (info);else {if (tty->termios.c_cflag == old_termios->c_cflag && tty->termios.c_ispeed == old_termios->c_ispeed && - tty->termios.c_ospeed == old_termios->c_ospeed) + tty->termios.c_ospeed == old_termios->c_ospeed) { +mutex_unlock (&modem_info_mutex);return ; + }isdn_tty_change_speed (info); } +mutex_unlock (&modem_info_mutex); }/*
drivers/leds/leds-lp5523.c +3 -1
@@ -318,7 +318,9 @@ static int lp5523_init_program_engine(struct lp55xx_chip *chip)/* Let the programs run for couple of ms and check the engine status */ usleep_range (3000 ,6000 ); -lp55xx_read (chip,LP5523_REG_STATUS , &status); + ret =lp55xx_read (chip,LP5523_REG_STATUS , &status); +if (ret) +return ret; status &=LP5523_ENG_STATUS_MASK ;if (status !=LP5523_ENG_STATUS_MASK ) {
drivers/mfd/Kconfig +1 -0
@@ -102,6 +102,7 @@ config MFD_AAT2870_CORE config MFD_AT91_USART tristate "AT91 USART Driver" select MFD_CORE + depends on ARCH_AT91 || COMPILE_TEST help Select this to get support for AT91 USART IP. This is a wrapper over at91-usart-serial driver and usart-spi-driver. Only one function
drivers/mfd/ab8500-core.c +1 -1
@@ -261,7 +261,7 @@ static int get_register_interruptible(struct ab8500 *ab8500, u8 bank,mutex_unlock (&ab8500->lock);dev_vdbg (ab8500->dev,"rd: addr %#x => data %#x\n" , addr, ret); -return ret; +return (ret <0 ) ? ret :0 ; } static int ab8500_get_register(struct device *dev, u8 bank,
drivers/mfd/axp20x.c +70 -56
182 lines not on this page · raw message
drivers/mfd/bd9571mwv.c +1 -0
@@ -59,6 +59,7 @@ static const struct regmap_access_table bd9571mwv_writable_table = { };static const struct regmap_range bd9571mwv_volatile_yes_ranges[] = { +regmap_reg_range (BD9571MWV_DVFS_MONIVDAC ,BD9571MWV_DVFS_MONIVDAC ),regmap_reg_range (BD9571MWV_GPIO_IN ,BD9571MWV_GPIO_IN ),regmap_reg_range (BD9571MWV_GPIO_INT ,BD9571MWV_GPIO_INT ),regmap_reg_range (BD9571MWV_INT_INTREQ ,BD9571MWV_INT_INTREQ ),
drivers/mfd/cros_ec_dev.c +1 -0
@@ -499,6 +499,7 @@ static int ec_device_remove(struct platform_device *pdev)cros_ec_debugfs_remove (ec); +mfd_remove_devices (ec->dev);cdev_del (&ec->cdev);device_unregister (&ec->class_dev);return 0 ;
drivers/mfd/db8500-prcmu.c +2 -2
@@ -2584,7 +2584,7 @@ static struct irq_chip prcmu_irq_chip = { .irq_unmask = prcmu_irq_unmask, }; -static __init char *fw_project_name (u32 project) +static char *fw_project_name (u32 project) {switch (project) {case PRCMU_FW_PROJECT_U8500 :
@@ -2732,7 +2732,7 @@ void __init db8500_prcmu_early_init(u32 phy_base, u32 size)INIT_WORK (&mb0_transfer.mask_work, prcmu_mask_work); } -static void __init init_prcm_registers (void ) +static void init_prcm_registers (void ) {u32 val;
drivers/mfd/mc13xxx-core.c +3 -1
@@ -274,7 +274,9 @@ int mc13xxx_adc_do_conversion(struct mc13xxx *mc13xxx, unsigned int mode, mc13xxx->adcflags |=MC13XXX_ADC_WORKING ; -mc13xxx_reg_read (mc13xxx,MC13XXX_ADC0 , &old_adc0); + ret =mc13xxx_reg_read (mc13xxx,MC13XXX_ADC0 , &old_adc0); +if (ret) + goto out; adc0 =MC13XXX_ADC0_ADINC1 |MC13XXX_ADC0_ADINC2 |MC13XXX_ADC0_CHRGRAWDIV ;
drivers/mfd/mt6397-core.c +1 -2
@@ -329,8 +329,7 @@ static int mt6397_probe(struct platform_device *pdev)default :dev_err (&pdev->dev,"unsupported chip: %d\n" , id); - ret = -ENODEV ; -break ; +return -ENODEV ; }if (ret) {
drivers/mfd/qcom_rpm.c +4 -0
@@ -638,6 +638,10 @@ static int qcom_rpm_probe(struct platform_device *pdev)return -EFAULT ; } +writel (fw_version[0 ],RPM_CTRL_REG (rpm,0 )); +writel (fw_version[1 ],RPM_CTRL_REG (rpm,1 )); +writel (fw_version[2 ],RPM_CTRL_REG (rpm,2 )); +dev_info (&pdev->dev,"RPM firmware %u.%u.%u\n" , fw_version[0 ], fw_version[1 ], fw_version[2 ]);
drivers/mfd/ti_am335x_tscadc.c +3 -2
@@ -264,8 +264,9 @@ static int ti_tscadc_probe(struct platform_device *pdev) cell->pdata_size =sizeof (tscadc); } - err =mfd_add_devices (&pdev->dev, pdev->id, tscadc->cells, - tscadc->used_cells,NULL ,0 ,NULL ); + err =mfd_add_devices (&pdev->dev,PLATFORM_DEVID_AUTO , + tscadc->cells, tscadc->used_cells,NULL , +0 ,NULL );if (err <0 ) goto err_disable_clk;
drivers/mfd/tps65218.c +3 -21
@@ -235,9 +235,9 @@ static int tps65218_probe(struct i2c_client *client,mutex_init (&tps->tps_lock); - ret =regmap_add_irq_chip (tps->regmap, tps->irq, -IRQF_ONESHOT ,0 , &tps65218_irq_chip, - &tps->irq_data); + ret =devm_regmap_add_irq_chip (&client->dev, tps->regmap, tps->irq, +IRQF_ONESHOT ,0 , &tps65218_irq_chip, + &tps->irq_data);if (ret <0 )return ret;
@@ -253,26 +253,9 @@ static int tps65218_probe(struct i2c_client *client,ARRAY_SIZE (tps65218_cells),NULL ,0 , regmap_irq_get_domain(tps->irq_data)); -if (ret <0 ) - goto err_irq; - -return 0 ; - -err_irq: -regmap_del_irq_chip (tps->irq, tps->irq_data); -return ret; } -static int tps65218_remove (struct i2c_client *client) -{ -struct tps65218 *tps =i2c_get_clientdata (client); - -regmap_del_irq_chip (tps->irq, tps->irq_data); - -return 0 ; -} -static const struct i2c_device_id tps65218_id_table[] = { {"tps65218" ,TPS65218 }, { },
@@ -285,7 +268,6 @@ static struct i2c_driver tps65218_driver = { .of_match_table = of_tps65218_match_table, }, .probe = tps65218_probe, - .remove = tps65218_remove, .id_table = tps65218_id_table, };
drivers/mfd/twl-core.c +2 -2
@@ -979,7 +979,7 @@ add_children(struct twl4030_platform_data *pdata, unsigned irq_base,* letting it generate the right frequencies for USB, MADC, and * other purposes. */ -static inline int __init protect_pm_master (void ) +static inline int protect_pm_master (void ) {int e =0 ;
@@ -988,7 +988,7 @@ static inline int __init protect_pm_master(void)return e; } -static inline int __init unprotect_pm_master (void ) +static inline int unprotect_pm_master (void ) {int e =0 ;
drivers/mfd/wm5110-tables.c +2 -0
@@ -1618,6 +1618,7 @@ static const struct reg_default wm5110_reg_default[] = { { 0x00000ECD, 0x0000 }, /* R3789 - HPLPF4_2 */ { 0x00000EE0, 0x0000 }, /* R3808 - ASRC_ENABLE */ { 0x00000EE2, 0x0000 }, /* R3810 - ASRC_RATE1 */ + { 0x00000EE3, 0x4000 }, /* R3811 - ASRC_RATE2 */ { 0x00000EF0, 0x0000 }, /* R3824 - ISRC 1 CTRL 1 */ { 0x00000EF1, 0x0000 }, /* R3825 - ISRC 1 CTRL 2 */ { 0x00000EF2, 0x0000 }, /* R3826 - ISRC 1 CTRL 3 */
@@ -2869,6 +2870,7 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg)case ARIZONA_ASRC_ENABLE :case ARIZONA_ASRC_STATUS :case ARIZONA_ASRC_RATE1 : +case ARIZONA_ASRC_RATE2 :case ARIZONA_ISRC_1_CTRL_1 :case ARIZONA_ISRC_1_CTRL_2 :case ARIZONA_ISRC_1_CTRL_3 :
drivers/net/ethernet/amazon/ena/ena_netdev.c +5 -5
@@ -2663,11 +2663,6 @@ static int ena_restore_device(struct ena_adapter *adapter) goto err_device_destroy; } -clear_bit (ENA_FLAG_ONGOING_RESET , &adapter->flags); -/* Make sure we don't have a race with AENQ Links state handler */ -if (test_bit (ENA_FLAG_LINK_UP , &adapter->flags)) -netif_carrier_on (adapter->netdev); - rc =ena_enable_msix_and_set_admin_interrupts (adapter, adapter->num_queues);if (rc) {
@@ -2684,6 +2679,11 @@ static int ena_restore_device(struct ena_adapter *adapter) }set_bit (ENA_FLAG_DEVICE_RUNNING , &adapter->flags); + +clear_bit (ENA_FLAG_ONGOING_RESET , &adapter->flags); +if (test_bit (ENA_FLAG_LINK_UP , &adapter->flags)) +netif_carrier_on (adapter->netdev); +mod_timer (&adapter->timer_service,round_jiffies (jiffies +HZ )); dev_err(&pdev->dev, "Device reset completed successfully, Driver info: %s\n",
drivers/net/ethernet/freescale/dpaa/dpaa_eth.c +6 -0
@@ -2051,6 +2051,7 @@ dpaa_start_xmit(struct sk_buff *skb, struct net_device *net_dev)bool nonlinear =skb_is_nonlinear (skb);struct rtnl_link_stats64 *percpu_stats;struct dpaa_percpu_priv *percpu_priv; +struct netdev_queue *txq;struct dpaa_priv *priv;struct qm_fd fd;int offset =0 ;
@@ -2100,6 +2101,11 @@ dpaa_start_xmit(struct sk_buff *skb, struct net_device *net_dev)if (unlikely (err <0 )) goto skb_to_fd_failed; + txq =netdev_get_tx_queue (net_dev, queue_mapping); + +/* LLTX requires to do our own update of trans_start */ + txq->trans_start = jiffies; +if (priv->tx_tstamp &&skb_shinfo (skb)->tx_flags &SKBTX_HW_TSTAMP ) { fd.cmd |=cpu_to_be32 (FM_FD_CMD_UPD );skb_shinfo (skb)->tx_flags |=SKBTX_IN_PROGRESS ;
drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c +2 -4
@@ -147,12 +147,10 @@ static void hns_ae_put_handle(struct hnae_handle *handle)struct hnae_vf_cb *vf_cb =hns_ae_get_vf_cb (handle);int i; - vf_cb->mac_cb =NULL ; - -kfree (vf_cb); -for (i =0 ; i < handle->q_num; i++)hns_ae_get_ring_pair (handle->qs[i])->used_by_vf =0 ; + +kfree (vf_cb); }static int hns_ae_wait_flow_down (struct hnae_handle *handle)
drivers/net/ethernet/mellanox/mlx4/en_rx.c +20 -2
@@ -620,6 +620,8 @@ static int get_fixed_ipv6_csum(__wsum hw_checksum, struct sk_buff *skb, }#endif +#define short_frame (size) ((size) <= ETH_ZLEN + ETH_FCS_LEN) +/* We reach this function only after checking that any of * the (IPv4 | IPv6) bits are set in cqe->status. */
@@ -627,9 +629,20 @@ static int check_csum(struct mlx4_cqe *cqe, struct sk_buff *skb, void *va, netdev_features_t dev_features) {__wsum hw_checksum =0 ; +void *hdr; + +/* CQE csum doesn't cover padding octets in short ethernet +* frames. And the pad field is appended prior to calculating +* and appending the FCS field. +* +* Detecting these padded frames requires to verify and parse +* IP headers, so we simply force all those small frames to skip +* checksum complete. +*/ +if (short_frame (skb->len)) +return -EINVAL ; -void *hdr = (u8 *)va +sizeof (struct ethhdr ); - + hdr = (u8 *)va +sizeof (struct ethhdr ); hw_checksum =csum_unfold ((__force __sum16 )cqe->checksum); if (cqe->vlan_my_qpn & cpu_to_be32(MLX4_CQE_CVLAN_PRESENT_MASK) &&
@@ -822,6 +835,11 @@ int mlx4_en_process_rx_cq(struct net_device *dev, struct mlx4_en_cq *cq, int budskb_record_rx_queue (skb, cq_ring);if (likely (dev->features &NETIF_F_RXCSUM )) { +/* TODO: For IP non TCP/UDP packets when csum complete is +* not an option (not supported or any other reason) we can +* actually check cqe IPOK status bit and report +* CHECKSUM_UNNECESSARY rather than CHECKSUM_NONE +*/ if ((cqe->status & cpu_to_be16(MLX4_CQE_STATUS_TCP | MLX4_CQE_STATUS_UDP)) && (cqe->status & cpu_to_be16(MLX4_CQE_STATUS_IPOK)) &&
drivers/net/ethernet/mellanox/mlx4/icm.c +56 -36
179 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx4/icm.h +19 -3
@@ -47,11 +47,21 @@ enum { MLX4_ICM_PAGE_SIZE = 1 << MLX4_ICM_PAGE_SHIFT, }; +struct mlx4_icm_buf { +void *addr; +size_t size; +dma_addr_t dma_addr; +}; +struct mlx4_icm_chunk {struct list_head list;int npages;int nsg; -struct scatterlist mem[MLX4_ICM_CHUNK_LEN ]; +bool coherent; +union { +struct scatterlist sg[MLX4_ICM_CHUNK_LEN ]; +struct mlx4_icm_buf buf[MLX4_ICM_CHUNK_LEN ]; + }; };struct mlx4_icm {
@@ -114,12 +124,18 @@ static inline void mlx4_icm_next(struct mlx4_icm_iter *iter)static inline dma_addr_t mlx4_icm_addr (struct mlx4_icm_iter *iter) { -return sg_dma_address (&iter->chunk->mem[iter->page_idx]); +if (iter->chunk->coherent) +return iter->chunk->buf[iter->page_idx].dma_addr; +else +return sg_dma_address (&iter->chunk->sg[iter->page_idx]); }static inline unsigned long mlx4_icm_size (struct mlx4_icm_iter *iter) { -return sg_dma_len (&iter->chunk->mem[iter->page_idx]); +if (iter->chunk->coherent) +return iter->chunk->buf[iter->page_idx].size; +else +return sg_dma_len (&iter->chunk->sg[iter->page_idx]); }int mlx4_MAP_ICM_AUX (struct mlx4_dev *dev,struct mlx4_icm *icm);
drivers/net/ethernet/mellanox/mlx5/core/en.h +1 -0
@@ -636,6 +636,7 @@ enum {MLX5E_STATE_ASYNC_EVENTS_ENABLED ,MLX5E_STATE_OPENED ,MLX5E_STATE_DESTROYING , + MLX5E_STATE_XDP_TX_ENABLED, }; struct mlx5e_rqt {
drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c +2 -4
@@ -262,7 +262,8 @@ int mlx5e_xdp_xmit(struct net_device *dev, int n, struct xdp_frame **frames,int sq_num;int i; -if (unlikely (!test_bit (MLX5E_STATE_OPENED , &priv->state))) +/* this flag is sufficient, no need to test internal sq state */ +if (unlikely (!mlx5e_xdp_tx_is_enabled (priv)))return -ENETDOWN ;if (unlikely (flags & ~XDP_XMIT_FLAGS_MASK ))
@@ -275,9 +276,6 @@ int mlx5e_xdp_xmit(struct net_device *dev, int n, struct xdp_frame **frames, sq = &priv->channels.c[sq_num]->xdpsq; -if (unlikely (!test_bit (MLX5E_SQ_STATE_ENABLED , &sq->state))) -return -ENETDOWN ; -for (i =0 ; i < n; i++) {struct xdp_frame *xdpf = frames[i];struct mlx5e_xdp_info xdpi;
drivers/net/ethernet/mellanox/mlx5/core/en/xdp.h +17 -0
@@ -49,6 +49,23 @@ bool mlx5e_xmit_xdp_frame(struct mlx5e_xdpsq *sq, struct mlx5e_xdp_info *xdpi);int mlx5e_xdp_xmit (struct net_device *dev,int n,struct xdp_frame **frames,u32 flags); +static inline void mlx5e_xdp_tx_enable (struct mlx5e_priv *priv) +{ +set_bit (MLX5E_STATE_XDP_TX_ENABLED , &priv->state); +} + +static inline void mlx5e_xdp_tx_disable (struct mlx5e_priv *priv) +{ +clear_bit (MLX5E_STATE_XDP_TX_ENABLED , &priv->state); +/* let other device's napi(s) see our new state */ +synchronize_rcu (); +} + +static inline bool mlx5e_xdp_tx_is_enabled (struct mlx5e_priv *priv) +{ +return test_bit (MLX5E_STATE_XDP_TX_ENABLED , &priv->state); +} +static inline void mlx5e_xmit_xdp_doorbell (struct mlx5e_xdpsq *sq) {struct mlx5_wq_cyc *wq = &sq->wq;
drivers/net/ethernet/mellanox/mlx5/core/en_main.c +2 -0
@@ -2903,6 +2903,7 @@ void mlx5e_activate_priv_channels(struct mlx5e_priv *priv)mlx5e_build_tx2sq_maps (priv);mlx5e_activate_channels (&priv->channels); +mlx5e_xdp_tx_enable (priv);netif_tx_start_all_queues (priv->netdev);if (MLX5_ESWITCH_MANAGER (priv->mdev))
@@ -2924,6 +2925,7 @@ void mlx5e_deactivate_priv_channels(struct mlx5e_priv *priv)*/ netif_tx_stop_all_queues (priv->netdev);netif_tx_disable (priv->netdev); +mlx5e_xdp_tx_disable (priv);mlx5e_deactivate_channels (&priv->channels); }
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c +1 -0
@@ -143,6 +143,7 @@ static void mlx5e_rep_update_sw_counters(struct mlx5e_priv *priv) s->tx_packets += sq_stats->packets; s->tx_bytes += sq_stats->bytes; + s->tx_queue_dropped += sq_stats->dropped; } } }
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +15 -10
@@ -98,6 +98,7 @@ struct mlx5e_tc_flow_parse_attr {struct ip_tunnel_info tun_info;struct mlx5_flow_spec spec;int num_mod_hdr_actions; +int max_mod_hdr_actions;void *mod_hdr_actions;int mirred_ifindex; };
@@ -1888,9 +1889,9 @@ static struct mlx5_fields fields[] = { OFFLOAD(UDP_DPORT, 2, udp.dest, 0), }; -/* On input attr->num_mod_hdr_actions tells how many HW actions can be parsed at -* max from the SW pedit action. On success, it says how many HW actions were -* actually parsed. +/* On input attr->max_mod_hdr_actions tells how many HW actions can be parsed at +* max from the SW pedit action. On success, attr->num_mod_hdr_actions +* says how many HW actions were actually parsed. */ static int offload_pedit_fields(struct pedit_headers *masks, struct pedit_headers *vals,
@@ -1914,9 +1915,11 @@ static int offload_pedit_fields(struct pedit_headers *masks, add_vals = &vals[TCA_PEDIT_KEY_EX_CMD_ADD ]; action_size =MLX5_UN_SZ_BYTES (set_action_in_add_action_in_auto); - action = parse_attr->mod_hdr_actions; - max_actions = parse_attr->num_mod_hdr_actions; - nactions =0 ; + action = parse_attr->mod_hdr_actions + + parse_attr->num_mod_hdr_actions * action_size; + + max_actions = parse_attr->max_mod_hdr_actions; + nactions = parse_attr->num_mod_hdr_actions;for (i =0 ; i <ARRAY_SIZE (fields); i++) { f = &fields[i];
@@ -2027,7 +2030,7 @@ static int alloc_mod_hdr_actions(struct mlx5e_priv *priv,if (!parse_attr->mod_hdr_actions)return -ENOMEM ; - parse_attr->num_mod_hdr_actions = max_actions; + parse_attr->max_mod_hdr_actions = max_actions;return 0 ; }
@@ -2073,9 +2076,11 @@ static int parse_tc_pedit_action(struct mlx5e_priv *priv, goto out_err; } - err =alloc_mod_hdr_actions (priv, a, namespace, parse_attr); -if (err) - goto out_err; +if (!parse_attr->mod_hdr_actions) { + err =alloc_mod_hdr_actions (priv, a, namespace, parse_attr); +if (err) + goto out_err; + } err =offload_pedit_fields (masks, vals, parse_attr, extack);if (err <0 )
drivers/net/ethernet/mellanox/mlx5/core/en_tx.c +6 -0
@@ -387,8 +387,14 @@ netdev_tx_t mlx5e_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb, num_wqebbs =DIV_ROUND_UP (ds_cnt,MLX5_SEND_WQEBB_NUM_DS ); contig_wqebbs_room =mlx5_wq_cyc_get_contig_wqebbs (wq, pi);if (unlikely (contig_wqebbs_room < num_wqebbs)) { +#ifdef CONFIG_MLX5_EN_IPSEC +struct mlx5_wqe_eth_seg cur_eth = wqe->eth; +#endif mlx5e_fill_sq_frag_edge (sq, wq, pi, contig_wqebbs_room);mlx5e_sq_fetch_wqe (sq, &wqe, &pi); +#ifdef CONFIG_MLX5_EN_IPSEC + wqe->eth = cur_eth; +#endif }/* fill wqe */
drivers/net/ethernet/mellanox/mlxsw/Kconfig +1 -0
@@ -78,6 +78,7 @@ config MLXSW_SPECTRUM depends on IPV6 || IPV6=n depends on NET_IPGRE || NET_IPGRE=n depends on IPV6_GRE || IPV6_GRE=n + depends on VXLAN || VXLAN=n select GENERIC_ALLOCATOR select PARMAN select MLXFW
drivers/net/ethernet/mellanox/mlxsw/pci.c +2 -2
@@ -1367,10 +1367,10 @@ static int mlxsw_pci_sw_reset(struct mlxsw_pci *mlxsw_pci,u32 val =mlxsw_pci_read32 (mlxsw_pci,FW_READY );if ((val &MLXSW_PCI_FW_READY_MASK ) ==MLXSW_PCI_FW_READY_MAGIC ) -break ; +return 0 ;cond_resched (); }while (time_before (jiffies, end)); -return 0 ; +return -EBUSY ; }static int mlxsw_pci_alloc_irq_vectors (struct mlxsw_pci *mlxsw_pci)
drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_ctcam.c +9 -1
@@ -75,7 +75,15 @@ mlxsw_sp_acl_ctcam_region_entry_insert(struct mlxsw_sp *mlxsw_sp, act_set =mlxsw_afa_block_first_set (rulei->act_block);mlxsw_reg_ptce2_flex_action_set_memcpy_to (ptce2_pl, act_set); -return mlxsw_reg_write (mlxsw_sp->core,MLXSW_REG (ptce2), ptce2_pl); + err =mlxsw_reg_write (mlxsw_sp->core,MLXSW_REG (ptce2), ptce2_pl); +if (err) + goto err_ptce2_write; + +return 0 ; + +err_ptce2_write: + cregion->ops->entry_remove (cregion, centry); +return err; } static void
drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c +6 -6
@@ -1219,7 +1219,7 @@ mlxsw_sp_bridge_port_fdb_flush(struct mlxsw_sp *mlxsw_sp,static enum mlxsw_reg_sfd_rec_policy mlxsw_sp_sfd_rec_policy (bool dynamic) {return dynamic ?MLXSW_REG_SFD_REC_POLICY_DYNAMIC_ENTRY_INGRESS : -MLXSW_REG_SFD_REC_POLICY_STATIC_ENTRY ; +MLXSW_REG_SFD_REC_POLICY_DYNAMIC_ENTRY_MLAG ; }static enum mlxsw_reg_sfd_op mlxsw_sp_sfd_op (bool adding)
@@ -1276,7 +1276,7 @@ static int mlxsw_sp_port_fdb_tunnel_uc_op(struct mlxsw_sp *mlxsw_sp,static int __mlxsw_sp_port_fdb_uc_op (struct mlxsw_sp *mlxsw_sp,u8 local_port,const char *mac,u16 fid,bool adding,enum mlxsw_reg_sfd_rec_action action, -bool dynamic) +enum mlxsw_reg_sfd_rec_policy policy) {char *sfd_pl;u8 num_rec;
@@ -1287,8 +1287,7 @@ static int __mlxsw_sp_port_fdb_uc_op(struct mlxsw_sp *mlxsw_sp, u8 local_port,return -ENOMEM ;mlxsw_reg_sfd_pack (sfd_pl,mlxsw_sp_sfd_op (adding),0 ); -mlxsw_reg_sfd_uc_pack (sfd_pl,0 ,mlxsw_sp_sfd_rec_policy (dynamic), - mac, fid, action, local_port); +mlxsw_reg_sfd_uc_pack (sfd_pl,0 , policy, mac, fid, action, local_port); num_rec =mlxsw_reg_sfd_num_rec_get (sfd_pl); err =mlxsw_reg_write (mlxsw_sp->core,MLXSW_REG (sfd), sfd_pl);if (err)
@@ -1307,7 +1306,8 @@ static int mlxsw_sp_port_fdb_uc_op(struct mlxsw_sp *mlxsw_sp, u8 local_port, bool dynamic) {return __mlxsw_sp_port_fdb_uc_op (mlxsw_sp, local_port, mac, fid, adding, -MLXSW_REG_SFD_REC_ACTION_NOP , dynamic); +MLXSW_REG_SFD_REC_ACTION_NOP , +mlxsw_sp_sfd_rec_policy (dynamic)); } int mlxsw_sp_rif_fdb_op(struct mlxsw_sp *mlxsw_sp, const char *mac, u16 fid,
@@ -1315,7 +1315,7 @@ int mlxsw_sp_rif_fdb_op(struct mlxsw_sp *mlxsw_sp, const char *mac, u16 fid, {return __mlxsw_sp_port_fdb_uc_op (mlxsw_sp,0 , mac, fid, adding,MLXSW_REG_SFD_REC_ACTION_FORWARD_IP_ROUTER , - false); +MLXSW_REG_SFD_REC_POLICY_STATIC_ENTRY ); } static int mlxsw_sp_port_fdb_uc_lag_op(struct mlxsw_sp *mlxsw_sp, u16 lag_id,
drivers/net/ethernet/qlogic/qed/qed_ll2.c +4 -0
@@ -1603,6 +1603,10 @@ static void qed_ll2_post_rx_buffer_notify_fw(struct qed_hwfn *p_hwfn, cq_prod =qed_chain_get_prod_idx (&p_rx->rcq_chain); rx_prod.bd_prod =cpu_to_le16 (bd_prod); rx_prod.cqe_prod =cpu_to_le16 (cq_prod); + +/* Make sure chain element is updated before ringing the doorbell */ +dma_wmb (); +DIRECT_REG_WR (p_rx->set_prod_addr, *((u32 *)&rx_prod)); }
drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c +3 -3
@@ -263,6 +263,7 @@ static int dwxgmac2_dma_interrupt(void __iomem *ioaddr, struct stmmac_extra_stats *x, u32 chan) {u32 intr_status =readl (ioaddr +XGMAC_DMA_CH_STATUS (chan)); +u32 intr_en =readl (ioaddr +XGMAC_DMA_CH_INT_EN (chan));int ret =0 ;/* ABNORMAL interrupts */
@@ -282,8 +283,7 @@ static int dwxgmac2_dma_interrupt(void __iomem *ioaddr, x->normal_irq_n++;if (likely (intr_status &XGMAC_RI )) { -u32 value =readl (ioaddr +XGMAC_DMA_CH_INT_EN (chan)); -if (likely (value &XGMAC_RIE )) { +if (likely (intr_en &XGMAC_RIE )) { x->rx_normal_irq_n++; ret |= handle_rx; }
@@ -295,7 +295,7 @@ static int dwxgmac2_dma_interrupt(void __iomem *ioaddr, }/* Clear interrupts */ -writel (~0x0 , ioaddr +XGMAC_DMA_CH_STATUS (chan)); +writel (intr_en & intr_status, ioaddr +XGMAC_DMA_CH_STATUS (chan));return ret; }
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +26 -25
77 lines not on this page · raw message
drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c +10 -0
@@ -299,7 +299,17 @@ static int stmmac_pci_probe(struct pci_dev *pdev,*/ static void stmmac_pci_remove (struct pci_dev *pdev) { +int i; +stmmac_dvr_remove (&pdev->dev); + +for (i =0 ; i <=PCI_STD_RESOURCE_END ; i++) { +if (pci_resource_len (pdev, i) ==0 ) +continue ; +pcim_iounmap_regions (pdev,BIT (i)); +break ; + } +pci_disable_device (pdev); }
drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c +2 -0
@@ -301,6 +301,8 @@ static int tc_setup_cbs(struct stmmac_priv *priv,/* Queue 0 is not AVB capable */ if (queue <=0 || queue >= tx_queues_count)return -EINVAL ; +if (!priv->dma_cap.av) +return -EOPNOTSUPP ;if (priv->speed !=SPEED_100 && priv->speed !=SPEED_1000 )return -EOPNOTSUPP ;
drivers/net/geneve.c +7 -3
@@ -1426,9 +1426,13 @@ static void geneve_link_config(struct net_device *dev, }#if IS_ENABLED (CONFIG_IPV6 )case AF_INET6 : { -struct rt6_info *rt =rt6_lookup (geneve->net, - &info->key.u.ipv6.dst,NULL ,0 , -NULL ,0 ); +struct rt6_info *rt; + +if (!__in6_dev_get (dev)) +break ; + + rt =rt6_lookup (geneve->net, &info->key.u.ipv6.dst,NULL ,0 , +NULL ,0 );if (rt && rt->dst.dev) ldev_mtu = rt->dst.dev->mtu -GENEVE_IPV6_HLEN ;
drivers/net/phy/micrel.c +1 -0
@@ -1076,6 +1076,7 @@ static struct phy_driver ksphy_driver[] = { .driver_data = &ksz9021_type, .probe = kszphy_probe, .config_init = ksz9031_config_init, + .soft_reset = genphy_soft_reset, .read_status = ksz9031_read_status, .ack_interrupt = kszphy_ack_interrupt, .config_intr = kszphy_config_intr,
drivers/net/phy/phylink.c +13 -6
@@ -475,6 +475,17 @@ static void phylink_run_resolve(struct phylink *pl)queue_work (system_power_efficient_wq, &pl->resolve); } +static void phylink_run_resolve_and_disable (struct phylink *pl,int bit) +{ +unsigned long state = pl->phylink_disable_state; + +set_bit (bit, &pl->phylink_disable_state); +if (state ==0 ) { +queue_work (system_power_efficient_wq, &pl->resolve); +flush_work (&pl->resolve); + } +} +static void phylink_fixed_poll (struct timer_list *t) { struct phylink *pl = container_of(t, struct phylink, link_poll);
@@ -928,9 +939,7 @@ void phylink_stop(struct phylink *pl)if (pl->link_an_mode ==MLO_AN_FIXED && !IS_ERR (pl->link_gpio))del_timer_sync (&pl->link_poll); -set_bit (PHYLINK_DISABLE_STOPPED , &pl->phylink_disable_state); -queue_work (system_power_efficient_wq, &pl->resolve); -flush_work (&pl->resolve); +phylink_run_resolve_and_disable (pl,PHYLINK_DISABLE_STOPPED ); }EXPORT_SYMBOL_GPL (phylink_stop);
@@ -1637,9 +1646,7 @@ static void phylink_sfp_link_down(void *upstream)ASSERT_RTNL (); -set_bit (PHYLINK_DISABLE_LINK , &pl->phylink_disable_state); -queue_work (system_power_efficient_wq, &pl->resolve); -flush_work (&pl->resolve); +phylink_run_resolve_and_disable (pl,PHYLINK_DISABLE_LINK ); }static void phylink_sfp_link_up (void *upstream)
drivers/net/phy/sfp-bus.c +2 -0
@@ -347,6 +347,7 @@ static int sfp_register_bus(struct sfp_bus *bus)return ret; } } + bus->socket_ops->attach (bus->sfp);if (bus->started) bus->socket_ops->start (bus->sfp); bus->netdev->sfp_bus = bus;
@@ -362,6 +363,7 @@ static void sfp_unregister_bus(struct sfp_bus *bus)if (bus->registered) {if (bus->started) bus->socket_ops->stop (bus->sfp); + bus->socket_ops->detach (bus->sfp);if (bus->phydev && ops && ops->disconnect_phy) ops->disconnect_phy (bus->upstream); }
drivers/net/phy/sfp.c +21 -9
@@ -184,6 +184,7 @@ struct sfp {struct gpio_desc *gpio[GPIO_MAX ]; +bool attached;unsigned int state;struct delayed_work poll;struct delayed_work timeout;
@@ -1475,7 +1476,7 @@ static void sfp_sm_event(struct sfp *sfp, unsigned int event)*/ switch (sfp->sm_mod_state) {default : -if (event ==SFP_E_INSERT ) { +if (event ==SFP_E_INSERT && sfp->attached) {sfp_module_tx_disable (sfp);sfp_sm_ins_next (sfp,SFP_MOD_PROBE ,T_PROBE_INIT ); }
@@ -1607,6 +1608,19 @@ static void sfp_sm_event(struct sfp *sfp, unsigned int event)mutex_unlock (&sfp->sm_mutex); } +static void sfp_attach (struct sfp *sfp) +{ + sfp->attached = true; +if (sfp->state &SFP_F_PRESENT ) +sfp_sm_event (sfp,SFP_E_INSERT ); +} + +static void sfp_detach (struct sfp *sfp) +{ + sfp->attached = false; +sfp_sm_event (sfp,SFP_E_REMOVE ); +} +static void sfp_start (struct sfp *sfp) {sfp_sm_event (sfp,SFP_E_DEV_UP );
@@ -1667,6 +1681,8 @@ static int sfp_module_eeprom(struct sfp *sfp, struct ethtool_eeprom *ee, }static const struct sfp_socket_ops sfp_module_ops = { + .attach = sfp_attach, + .detach = sfp_detach, .start = sfp_start, .stop = sfp_stop, .module_info = sfp_module_info,
@@ -1834,10 +1850,6 @@ static int sfp_probe(struct platform_device *pdev)dev_info (sfp->dev,"Host maximum power %u.%uW\n" , sfp->max_power_mW /1000 , (sfp->max_power_mW /100 ) %10 ); - sfp->sfp_bus =sfp_register_socket (sfp->dev, sfp, &sfp_module_ops); -if (!sfp->sfp_bus) -return -ENOMEM ; -/* Get the initial state, and always signal TX disable, * since the network interface will not be up. */
@@ -1848,10 +1860,6 @@ static int sfp_probe(struct platform_device *pdev) sfp->state |=SFP_F_RATE_SELECT ;sfp_set_state (sfp, sfp->state);sfp_module_tx_disable (sfp); -rtnl_lock (); -if (sfp->state &SFP_F_PRESENT ) -sfp_sm_event (sfp,SFP_E_INSERT ); -rtnl_unlock ();for (i =0 ; i <GPIO_MAX ; i++) {if (gpio_flags[i] !=GPIOD_IN || !sfp->gpio[i])
@@ -1884,6 +1892,10 @@ static int sfp_probe(struct platform_device *pdev)dev_warn (sfp->dev,"No tx_disable pin: SFP modules will always be emitting.\n" ); + sfp->sfp_bus =sfp_register_socket (sfp->dev, sfp, &sfp_module_ops); +if (!sfp->sfp_bus) +return -ENOMEM ; +return 0 ; }
drivers/net/phy/sfp.h +2 -0
@@ -7,6 +7,8 @@struct sfp ;struct sfp_socket_ops { +void (*attach)(struct sfp *sfp); +void (*detach)(struct sfp *sfp);void (*start)(struct sfp *sfp);void (*stop)(struct sfp *sfp);int (*module_info)(struct sfp *sfp,struct ethtool_modinfo *modinfo);
drivers/net/team/team.c +5 -22
@@ -256,17 +256,6 @@ static void __team_option_inst_mark_removed_port(struct team *team, } } -static bool __team_option_inst_tmp_find (const struct list_head *opts, -const struct team_option_inst *needle) -{ -struct team_option_inst *opt_inst; - -list_for_each_entry (opt_inst, opts, tmp_list) -if (opt_inst == needle) -return true; -return false; -} -static int __team_options_register (struct team *team,const struct team_option *option,size_t option_count)
@@ -2460,7 +2449,6 @@ static int team_nl_cmd_options_set(struct sk_buff *skb, struct genl_info *info)int err =0 ;int i;struct nlattr *nl_option; -LIST_HEAD (opt_inst_list);rtnl_lock ();
@@ -2480,6 +2468,7 @@ static int team_nl_cmd_options_set(struct sk_buff *skb, struct genl_info *info)struct nlattr *opt_attrs[TEAM_ATTR_OPTION_MAX +1 ];struct nlattr *attr;struct nlattr *attr_data; +LIST_HEAD (opt_inst_list);enum team_option_type opt_type;int opt_port_ifindex =0 ;/* != 0 for per-port options */ u32 opt_array_index =0 ;
@@ -2584,23 +2573,17 @@ static int team_nl_cmd_options_set(struct sk_buff *skb, struct genl_info *info)if (err) goto team_put; opt_inst->changed = true; - -/* dumb/evil user-space can send us duplicate opt, -* keep only the last one -*/ -if (__team_option_inst_tmp_find (&opt_inst_list, - opt_inst)) -continue ; -list_add (&opt_inst->tmp_list, &opt_inst_list); }if (!opt_found) { err = -ENOENT ; goto team_put; } - } - err =team_nl_send_event_options_get (team, &opt_inst_list); + err =team_nl_send_event_options_get (team, &opt_inst_list); +if (err) +break ; + } team_put:team_nl_team_put (team);
drivers/net/wan/fsl_ucc_hdlc.c +61 -1
86 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt76x0/usb.c +29 -17
81 lines not on this page · raw message
drivers/pinctrl/pinctrl-max77620.c +6 -8
@@ -34,14 +34,12 @@ enum max77620_pin_ppdrv { MAX77620_PIN_PP_DRV, }; -enum max77620_pinconf_param { -MAX77620_ACTIVE_FPS_SOURCE =PIN_CONFIG_END +1 , -MAX77620_ACTIVE_FPS_POWER_ON_SLOTS , -MAX77620_ACTIVE_FPS_POWER_DOWN_SLOTS , -MAX77620_SUSPEND_FPS_SOURCE , -MAX77620_SUSPEND_FPS_POWER_ON_SLOTS , -MAX77620_SUSPEND_FPS_POWER_DOWN_SLOTS , -}; +#define MAX77620_ACTIVE_FPS_SOURCE (PIN_CONFIG_END + 1) +#define MAX77620_ACTIVE_FPS_POWER_ON_SLOTS (PIN_CONFIG_END + 2) +#define MAX77620_ACTIVE_FPS_POWER_DOWN_SLOTS (PIN_CONFIG_END + 3) +#define MAX77620_SUSPEND_FPS_SOURCE (PIN_CONFIG_END + 4) +#define MAX77620_SUSPEND_FPS_POWER_ON_SLOTS (PIN_CONFIG_END + 5) +#define MAX77620_SUSPEND_FPS_POWER_DOWN_SLOTS (PIN_CONFIG_END + 6)struct max77620_pin_function {const char *name;
drivers/pinctrl/qcom/pinctrl-qcs404.c +1 -1
@@ -79,7 +79,7 @@ enum { .intr_cfg_reg = 0, \ .intr_status_reg = 0, \ .intr_target_reg = 0, \ - .tile = NORTH, \ + .tile = SOUTH, \ .mux_bit = -1, \ .pull_bit = pull, \ .drv_bit = drv, \
drivers/scsi/cxgbi/cxgb3i/cxgb3i.c +4 -5
@@ -1144,7 +1144,7 @@ static void ddp_clear_map(struct cxgbi_device *cdev, struct cxgbi_ppm *ppm, }static int ddp_setup_conn_pgidx (struct cxgbi_sock *csk, -unsigned int tid,int pg_idx,bool reply) +unsigned int tid,int pg_idx) {struct sk_buff *skb =alloc_wr (sizeof (struct cpl_set_tcb_field ),0 ,GFP_KERNEL );
@@ -1160,7 +1160,7 @@ static int ddp_setup_conn_pgidx(struct cxgbi_sock *csk, req = (struct cpl_set_tcb_field *)skb->head; req->wr.wr_hi =htonl (V_WR_OP (FW_WROPCODE_FORWARD ));OPCODE_TID (req) =htonl (MK_OPCODE_TID (CPL_SET_TCB_FIELD , tid)); - req->reply =V_NO_REPLY (reply ?0 :1 ); + req->reply =V_NO_REPLY (1 ); req->cpu_idx =0 ; req->word =htons (31 ); req->mask =cpu_to_be64 (0xF0000000 );
@@ -1177,11 +1177,10 @@ static int ddp_setup_conn_pgidx(struct cxgbi_sock *csk,* @tid: connection id * @hcrc: header digest enabled * @dcrc: data digest enabled -* @reply: request reply from h/w * set up the iscsi digest settings for a connection identified by tid */ static int ddp_setup_conn_digest (struct cxgbi_sock *csk,unsigned int tid, -int hcrc,int dcrc,int reply) +int hcrc,int dcrc) {struct sk_buff *skb =alloc_wr (sizeof (struct cpl_set_tcb_field ),0 ,GFP_KERNEL );
@@ -1197,7 +1196,7 @@ static int ddp_setup_conn_digest(struct cxgbi_sock *csk, unsigned int tid, req = (struct cpl_set_tcb_field *)skb->head; req->wr.wr_hi =htonl (V_WR_OP (FW_WROPCODE_FORWARD ));OPCODE_TID (req) =htonl (MK_OPCODE_TID (CPL_SET_TCB_FIELD , tid)); - req->reply =V_NO_REPLY (reply ?0 :1 ); + req->reply =V_NO_REPLY (1 ); req->cpu_idx =0 ; req->word =htons (31 ); req->mask =cpu_to_be64 (0x0F000000 );
drivers/scsi/cxgbi/cxgb4i/cxgb4i.c +20 -8
@@ -1548,16 +1548,22 @@ static void do_set_tcb_rpl(struct cxgbi_device *cdev, struct sk_buff *skb)struct cxgbi_sock *csk; csk =lookup_tid (t, tid); -if (!csk) +if (!csk) {pr_err ("can't find conn. for tid %u.\n" , tid); +return ; + }log_debug (1 <<CXGBI_DBG_TOE |1 <<CXGBI_DBG_SOCK ,"csk 0x%p,%u,%lx,%u, status 0x%x.\n" , csk, csk->state, csk->flags, csk->tid, rpl->status); -if (rpl->status !=CPL_ERR_NONE ) +if (rpl->status !=CPL_ERR_NONE ) {pr_err ("csk 0x%p,%u, SET_TCB_RPL status %u.\n" , csk, tid, rpl->status); + csk->err = -EINVAL ; + } + +complete (&csk->cmpl);__kfree_skb (skb); }
@@ -1984,7 +1990,7 @@ static int ddp_set_map(struct cxgbi_ppm *ppm, struct cxgbi_sock *csk, }static int ddp_setup_conn_pgidx (struct cxgbi_sock *csk,unsigned int tid, -int pg_idx,bool reply) +int pg_idx) {struct sk_buff *skb;struct cpl_set_tcb_field *req;
@@ -2000,7 +2006,7 @@ static int ddp_setup_conn_pgidx(struct cxgbi_sock *csk, unsigned int tid, req = (struct cpl_set_tcb_field *)skb->head;INIT_TP_WR (req, csk->tid);OPCODE_TID (req) =htonl (MK_OPCODE_TID (CPL_SET_TCB_FIELD , csk->tid)); - req->reply_ctrl =htons (NO_REPLY_V (reply) |QUEUENO_V (csk->rss_qid)); + req->reply_ctrl =htons (NO_REPLY_V (0 ) |QUEUENO_V (csk->rss_qid)); req->word_cookie =htons (0 ); req->mask =cpu_to_be64 (0x3 <<8 ); req->val =cpu_to_be64 (pg_idx <<8 );
@@ -2009,12 +2015,15 @@ static int ddp_setup_conn_pgidx(struct cxgbi_sock *csk, unsigned int tid,log_debug (1 <<CXGBI_DBG_TOE |1 <<CXGBI_DBG_SOCK ,"csk 0x%p, tid 0x%x, pg_idx %u.\n" , csk, csk->tid, pg_idx); +reinit_completion (&csk->cmpl);cxgb4_ofld_send (csk->cdev->ports[csk->port_id], skb); -return 0 ; +wait_for_completion (&csk->cmpl); + +return csk->err; }static int ddp_setup_conn_digest (struct cxgbi_sock *csk,unsigned int tid, -int hcrc,int dcrc,int reply) +int hcrc,int dcrc) {struct sk_buff *skb;struct cpl_set_tcb_field *req;
@@ -2032,7 +2041,7 @@ static int ddp_setup_conn_digest(struct cxgbi_sock *csk, unsigned int tid, req = (struct cpl_set_tcb_field *)skb->head;INIT_TP_WR (req, tid);OPCODE_TID (req) =htonl (MK_OPCODE_TID (CPL_SET_TCB_FIELD , tid)); - req->reply_ctrl =htons (NO_REPLY_V (reply) |QUEUENO_V (csk->rss_qid)); + req->reply_ctrl =htons (NO_REPLY_V (0 ) |QUEUENO_V (csk->rss_qid)); req->word_cookie =htons (0 ); req->mask =cpu_to_be64 (0x3 <<4 ); req->val = cpu_to_be64(((hcrc ? ULP_CRC_HEADER : 0) |
@@ -2042,8 +2051,11 @@ static int ddp_setup_conn_digest(struct cxgbi_sock *csk, unsigned int tid,log_debug (1 <<CXGBI_DBG_TOE |1 <<CXGBI_DBG_SOCK ,"csk 0x%p, tid 0x%x, crc %d,%d.\n" , csk, csk->tid, hcrc, dcrc); +reinit_completion (&csk->cmpl);cxgb4_ofld_send (csk->cdev->ports[csk->port_id], skb); -return 0 ; +wait_for_completion (&csk->cmpl); + +return csk->err; }static struct cxgbi_ppm *cdev2ppm (struct cxgbi_device *cdev)
drivers/scsi/cxgbi/libcxgbi.c +4 -3
@@ -573,6 +573,7 @@ static struct cxgbi_sock *cxgbi_sock_create(struct cxgbi_device *cdev)skb_queue_head_init (&csk->receive_queue);skb_queue_head_init (&csk->write_queue);timer_setup (&csk->retry_timer,NULL ,0 ); +init_completion (&csk->cmpl);rwlock_init (&csk->callback_lock); csk->cdev = cdev; csk->flags =0 ;
@@ -2251,14 +2252,14 @@ int cxgbi_set_conn_param(struct iscsi_cls_conn *cls_conn,if (!err && conn->hdrdgst_en) err = csk->cdev->csk_ddp_setup_digest (csk, csk->tid, conn->hdrdgst_en, - conn->datadgst_en,0 ); + conn->datadgst_en);break ;case ISCSI_PARAM_DATADGST_EN : err =iscsi_set_param (cls_conn, param, buf, buflen);if (!err && conn->datadgst_en) err = csk->cdev->csk_ddp_setup_digest (csk, csk->tid, conn->hdrdgst_en, - conn->datadgst_en,0 ); + conn->datadgst_en);break ;case ISCSI_PARAM_MAX_R2T :return iscsi_tcp_set_max_r2t (conn, buf);
@@ -2384,7 +2385,7 @@ int cxgbi_bind_conn(struct iscsi_cls_session *cls_session, ppm = csk->cdev->cdev2ppm (csk->cdev); err = csk->cdev->csk_ddp_setup_pgidx (csk, csk->tid, - ppm->tformat.pgsz_idx_dflt,0 ); + ppm->tformat.pgsz_idx_dflt);if (err <0 )return err;
drivers/scsi/cxgbi/libcxgbi.h +3 -2
@@ -149,6 +149,7 @@ struct cxgbi_sock {struct sk_buff_head receive_queue;struct sk_buff_head write_queue;struct timer_list retry_timer; +struct completion cmpl;int err;rwlock_t callback_lock;void *user_data;
@@ -490,9 +491,9 @@ struct cxgbi_device { struct cxgbi_ppm *, struct cxgbi_task_tag_info *);int (*csk_ddp_setup_digest)(struct cxgbi_sock *, -unsigned int ,int ,int ,int ); +unsigned int ,int ,int );int (*csk_ddp_setup_pgidx)(struct cxgbi_sock *, -unsigned int ,int ,bool ); +unsigned int ,int );void (*csk_release_offload_resources)(struct cxgbi_sock *);int (*csk_rx_pdu_ready)(struct cxgbi_sock *,struct sk_buff *);
drivers/scsi/isci/init.c +7 -7
@@ -588,6 +588,13 @@ static struct isci_host *isci_host_alloc(struct pci_dev *pdev, int id) shost->max_lun = ~0 ; shost->max_cmd_len =MAX_COMMAND_SIZE ; +/* turn on DIF support */ +scsi_host_set_prot (shost, +SHOST_DIF_TYPE1_PROTECTION | +SHOST_DIF_TYPE2_PROTECTION | +SHOST_DIF_TYPE3_PROTECTION ); +scsi_host_set_guard (shost,SHOST_DIX_GUARD_CRC ); + err =scsi_add_host (shost, &pdev->dev);if (err) goto err_shost;
@@ -675,13 +682,6 @@ static int isci_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) goto err_host_alloc; } pci_info->hosts[i] = h; - -/* turn on DIF support */ -scsi_host_set_prot (to_shost (h), -SHOST_DIF_TYPE1_PROTECTION | -SHOST_DIF_TYPE2_PROTECTION | -SHOST_DIF_TYPE3_PROTECTION ); -scsi_host_set_guard (to_shost (h),SHOST_DIX_GUARD_CRC ); } err =isci_setup_interrupts (pdev);
drivers/scsi/qedi/qedi_iscsi.c +3 -0
@@ -954,6 +954,7 @@ static int qedi_ep_poll(struct iscsi_endpoint *ep, int timeout_ms) qedi_ep = ep->dd_data;if (qedi_ep->state ==EP_STATE_IDLE || + qedi_ep->state ==EP_STATE_OFLDCONN_NONE || qedi_ep->state ==EP_STATE_OFLDCONN_FAILED )return -1 ;
@@ -1036,6 +1037,7 @@ static void qedi_ep_disconnect(struct iscsi_endpoint *ep)switch (qedi_ep->state) {case EP_STATE_OFLDCONN_START : +case EP_STATE_OFLDCONN_NONE : goto ep_release_conn;case EP_STATE_OFLDCONN_FAILED :break ;
@@ -1226,6 +1228,7 @@ static int qedi_set_path(struct Scsi_Host *shost, struct iscsi_path *path_data)if (!is_valid_ether_addr (&path_data->mac_addr[0 ])) {QEDI_NOTICE (&qedi->dbg_ctx,"dst mac NOT VALID\n" ); + qedi_ep->state =EP_STATE_OFLDCONN_NONE ; ret = -EIO ; goto set_path_exit; }
drivers/scsi/qedi/qedi_iscsi.h +1 -0
@@ -59,6 +59,7 @@ enum {EP_STATE_OFLDCONN_FAILED =0x2000 ,EP_STATE_CONNECT_FAILED =0x4000 ,EP_STATE_DISCONN_TIMEDOUT =0x8000 , + EP_STATE_OFLDCONN_NONE = 0x10000, };struct qedi_conn ;
drivers/scsi/qla1280.c +1 -1
@@ -4259,7 +4259,7 @@ qla1280_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) ha->devnum = devnum;/* specifies microcode load address */ #ifdef QLA_64BIT_PTR -if (dma_set_mask (&ha->pdev->dev,DMA_BIT_MASK (64 ))) { +if (dma_set_mask_and_coherent (&ha->pdev->dev,DMA_BIT_MASK (64 ))) {if (dma_set_mask (&ha->pdev->dev,DMA_BIT_MASK (32 ))) {printk (KERN_WARNING "scsi(%li): Unable to set a " "suitable DMA mask - aborting\n" , ha->host_no);
drivers/scsi/qla4xxx/ql4_os.c +2 -0
@@ -7237,6 +7237,8 @@ static int qla4xxx_sysfs_ddb_tgt_create(struct scsi_qla_host *ha, rc =qla4xxx_copy_from_fwddb_param (fnode_sess, fnode_conn, fw_ddb_entry); +if (rc) + goto free_sess;ql4_printk (KERN_INFO , ha,"%s: sysfs entry %s created\n" , __func__, fnode_sess->dev.kobj.name);
drivers/scsi/sd_zbc.c +5 -3
@@ -142,10 +142,12 @@ int sd_zbc_report_zones(struct gendisk *disk, sector_t sector,return -EOPNOTSUPP ;/* -* Get a reply buffer for the number of requested zones plus a header. -* For ATA, buffers must be aligned to 512B. +* Get a reply buffer for the number of requested zones plus a header, +* without exceeding the device maximum command size. For ATA disks, +* buffers must be aligned to 512B. */ - buflen =roundup ((nrz +1 ) *64 ,512 ); + buflen =min (queue_max_hw_sectors (disk->queue) <<9 , +roundup ((nrz +1 ) *64 ,512 )); buf =kmalloc (buflen, gfp_mask);if (!buf)return -ENOMEM ;
drivers/scsi/ufs/ufs.h +1 -1
@@ -195,7 +195,7 @@ enum ufs_desc_def_size {QUERY_DESC_CONFIGURATION_DEF_SIZE =0x90 ,QUERY_DESC_UNIT_DEF_SIZE =0x23 ,QUERY_DESC_INTERCONNECT_DEF_SIZE =0x06 , -QUERY_DESC_GEOMETRY_DEF_SIZE =0x44 , +QUERY_DESC_GEOMETRY_DEF_SIZE =0x48 ,QUERY_DESC_POWER_DEF_SIZE =0x62 , QUERY_DESC_HEALTH_DEF_SIZE = 0x25, };
drivers/scsi/ufs/ufshcd.c +2 -0
@@ -7924,6 +7924,8 @@ int ufshcd_system_resume(struct ufs_hba *hba)trace_ufshcd_system_resume (dev_name (hba->dev), ret,ktime_to_us (ktime_sub (ktime_get (), start)), hba->curr_dev_pwr_mode, hba->uic_link_state); +if (!ret) + hba->is_sys_suspended = false;return ret; }EXPORT_SYMBOL (ufshcd_system_resume);
drivers/soc/fsl/qe/qe_tdm.c +0 -55
67 lines not on this page · raw message
drivers/staging/erofs/dir.c +5 -2
@@ -53,8 +53,11 @@ static int erofs_fill_dentries(struct dir_context *ctx, strnlen(de_name, maxsize - nameoff) :le16_to_cpu (de[1 ].nameoff) - nameoff; -/* the corrupted directory found */ -BUG_ON (de_namelen <0 ); +/* a corrupted entry is found */ +if (unlikely (de_namelen <0 )) { +DBG_BUGON (1 ); +return -EIO ; + }#ifdef CONFIG_EROFS_FS_DEBUG dbg_namelen =min (EROFS_NAME_LEN -1 , de_namelen);
drivers/staging/erofs/inode.c +8 -2
@@ -133,7 +133,13 @@ static int fill_inline_data(struct inode *inode, void *data,return -ENOMEM ; m_pofs += vi->inode_isize + vi->xattr_isize; -BUG_ON (m_pofs + inode->i_size >PAGE_SIZE ); + +/* inline symlink data shouldn't across page boundary as well */ +if (unlikely (m_pofs + inode->i_size >PAGE_SIZE )) { +DBG_BUGON (1 ); +kfree (lnk); +return -EIO ; + }/* get in-page inline data */ memcpy (lnk, data + m_pofs, inode->i_size);
@@ -171,7 +177,7 @@ static int fill_inode(struct inode *inode, int isdir)return PTR_ERR (page); } -BUG_ON (!PageUptodate (page)); +DBG_BUGON (!PageUptodate (page)); data =page_address (page); err =read_inode (inode, data + ofs);
drivers/staging/erofs/internal.h +45 -25
95 lines not on this page · raw message
drivers/staging/erofs/super.c +6 -13
@@ -40,7 +40,6 @@ static int __init erofs_init_inode_cache(void)static void erofs_exit_inode_cache (void ) { -BUG_ON (erofs_inode_cachep ==NULL );kmem_cache_destroy (erofs_inode_cachep); }
@@ -303,8 +302,8 @@ static int managed_cache_releasepage(struct page *page, gfp_t gfp_mask)int ret =1 ;/* 0 - busy */ struct address_space *const mapping = page->mapping; -BUG_ON (!PageLocked (page)); -BUG_ON (mapping->a_ops != &managed_cache_aops); +DBG_BUGON (!PageLocked (page)); +DBG_BUGON (mapping->a_ops != &managed_cache_aops);if (PagePrivate (page)) ret =erofs_try_to_free_cached_page (mapping, page);
@@ -317,10 +316,10 @@ static void managed_cache_invalidatepage(struct page *page, {const unsigned int stop = length + offset; -BUG_ON (!PageLocked (page)); +DBG_BUGON (!PageLocked (page)); -/* Check for overflow */ -BUG_ON (stop >PAGE_SIZE || stop < length); +/* Check for potential overflow in debug mode */ +DBG_BUGON (stop >PAGE_SIZE || stop < length);if (offset ==0 && stop ==PAGE_SIZE )while (!managed_cache_releasepage (page,GFP_NOFS ))
@@ -442,12 +441,6 @@ static int erofs_read_super(struct super_block *sb,erofs_register_super (sb); -/* -* We already have a positive dentry, which was instantiated -* by d_make_root. Just need to d_rehash it. -*/ -d_rehash (sb->s_root); -if (!silent)infoln ("mounted on %s with opts: %s." , dev_name, (char *)data);
@@ -655,7 +648,7 @@ static int erofs_remount(struct super_block *sb, int *flags, char *data)unsigned int org_inject_rate =erofs_get_fault_rate (sbi);int err; -BUG_ON (!sb_rdonly (sb)); +DBG_BUGON (!sb_rdonly (sb)); err =parse_options (sb, data);if (err) goto out;
drivers/staging/erofs/unzip_pagevec.h +1 -1
@@ -150,7 +150,7 @@ z_erofs_pagevec_ctor_dequeue(struct z_erofs_pagevec_ctor *ctor,erofs_vtptr_t t;if (unlikely (ctor->index >= ctor->nr)) { -BUG_ON (ctor->next ==NULL ); +DBG_BUGON (!ctor->next);z_erofs_pagevec_ctor_pagedown (ctor, true); }
drivers/staging/erofs/unzip_vle.c +14 -21
@@ -20,9 +20,6 @@ static struct kmem_cache *z_erofs_workgroup_cachep __read_mostly;void z_erofs_exit_zip_subsystem (void ) { -BUG_ON (z_erofs_workqueue ==NULL ); -BUG_ON (z_erofs_workgroup_cachep ==NULL ); -destroy_workqueue (z_erofs_workqueue);kmem_cache_destroy (z_erofs_workgroup_cachep); }
@@ -366,7 +363,10 @@ z_erofs_vle_work_register(const struct z_erofs_vle_work_finder *f,struct z_erofs_vle_work *work;/* if multiref is disabled, grp should never be nullptr */ -BUG_ON (grp !=NULL ); +if (unlikely (grp)) { +DBG_BUGON (1 ); +return ERR_PTR (-EINVAL ); + }/* no available workgroup, let's allocate one */ grp =kmem_cache_zalloc (z_erofs_workgroup_cachep,GFP_NOFS );
@@ -745,7 +745,7 @@ static inline void z_erofs_vle_read_endio(struct bio *bio)bool cachemngd = false;DBG_BUGON (PageUptodate (page)); -BUG_ON (page->mapping ==NULL ); +DBG_BUGON (!page->mapping);#ifdef EROFS_FS_HAS_MANAGED_CACHE if (unlikely (mngda ==NULL && !z_erofs_is_stagingpage (page))) {
@@ -803,7 +803,7 @@ static int z_erofs_vle_unzip(struct super_block *sb,might_sleep (); work =z_erofs_vle_grab_primary_work (grp); -BUG_ON (!READ_ONCE (work->nr_pages)); +DBG_BUGON (!READ_ONCE (work->nr_pages));mutex_lock (&work->lock); nr_pages = work->nr_pages;
@@ -852,8 +852,8 @@ static int z_erofs_vle_unzip(struct super_block *sb,else pagenr =z_erofs_onlinepage_index (page); -BUG_ON (pagenr >= nr_pages); -BUG_ON (pages[pagenr] !=NULL ); +DBG_BUGON (pagenr >= nr_pages); +DBG_BUGON (pages[pagenr]); pages[pagenr] = page; }
@@ -876,9 +876,8 @@ static int z_erofs_vle_unzip(struct super_block *sb,if (z_erofs_is_stagingpage (page))continue ;#ifdef EROFS_FS_HAS_MANAGED_CACHE - else if (page->mapping == mngda) { -BUG_ON (PageLocked (page)); -BUG_ON (!PageUptodate (page)); +if (page->mapping == mngda) { +DBG_BUGON (!PageUptodate (page));continue ; }#endif
@@ -886,8 +885,8 @@ static int z_erofs_vle_unzip(struct super_block *sb,/* only non-head page could be reused as a compressed page */ pagenr =z_erofs_onlinepage_index (page); -BUG_ON (pagenr >= nr_pages); -BUG_ON (pages[pagenr] !=NULL ); +DBG_BUGON (pagenr >= nr_pages); +DBG_BUGON (pages[pagenr]); ++sparsemem_pages; pages[pagenr] = page;
@@ -897,9 +896,6 @@ static int z_erofs_vle_unzip(struct super_block *sb, llen = (nr_pages <<PAGE_SHIFT ) - work->pageofs;if (z_erofs_vle_workgrp_fmt (grp) ==Z_EROFS_VLE_WORKGRP_FMT_PLAIN ) { -/* FIXME! this should be fixed in the future */ -BUG_ON (grp->llen != llen); - err =z_erofs_vle_plain_copy (compressed_pages, clusterpages, pages, nr_pages, work->pageofs); goto out;
@@ -914,10 +910,8 @@ static int z_erofs_vle_unzip(struct super_block *sb,if (err != -ENOTSUPP ) goto out_percpu; -if (sparsemem_pages >= nr_pages) { -BUG_ON (sparsemem_pages > nr_pages); +if (sparsemem_pages >= nr_pages) goto skip_allocpage; - }for (i =0 ; i < nr_pages; ++i) {if (pages[i] !=NULL )
@@ -1010,7 +1004,7 @@ static void z_erofs_vle_unzip_wq(struct work_struct *work) struct z_erofs_vle_unzip_io_sb, io.u.work);LIST_HEAD (page_pool); -BUG_ON (iosb->io.head ==Z_EROFS_VLE_WORKGRP_TAIL_CLOSED ); +DBG_BUGON (iosb->io.head ==Z_EROFS_VLE_WORKGRP_TAIL_CLOSED );z_erofs_vle_unzip_all (iosb->sb, &iosb->io, &page_pool);put_pages_list (&page_pool);
@@ -1344,7 +1338,6 @@ static int z_erofs_vle_normalaccess_readpages(struct file *filp,continue ; } -BUG_ON (PagePrivate (page));set_page_private (page, (unsigned long )head); head = page; }
drivers/staging/erofs/unzip_vle_lz4.c +1 -1
@@ -57,7 +57,7 @@ int z_erofs_vle_plain_copy(struct page **compressed_pages,if (compressed_pages[j] != page)continue ; -BUG_ON (mirrored[j]); +DBG_BUGON (mirrored[j]);memcpy (percpu_data + j *PAGE_SIZE , dst,PAGE_SIZE ); mirrored[j] = true;break ;
drivers/staging/erofs/utils.c +6 -6
@@ -23,9 +23,6 @@ struct page *erofs_allocpage(struct list_head *pool, gfp_t gfp)list_del (&page->lru); }else { page =alloc_pages (gfp | __GFP_NOFAIL,0 ); - -BUG_ON (page ==NULL ); -BUG_ON (page->mapping !=NULL ); }return page; }
@@ -58,7 +55,7 @@ struct erofs_workgroup *erofs_find_workgroup(/* decrease refcount added by erofs_workgroup_put */ if (unlikely (oldcount ==1 ))atomic_long_dec (&erofs_global_shrink_cnt); -BUG_ON (index != grp->index); +DBG_BUGON (index != grp->index); }rcu_read_unlock ();return grp;
@@ -71,8 +68,11 @@ int erofs_register_workgroup(struct super_block *sb,struct erofs_sb_info *sbi;int err; -/* grp->refcount should not < 1 */ -BUG_ON (!atomic_read (&grp->refcount)); +/* grp shouldn't be broken or used before */ +if (unlikely (atomic_read (&grp->refcount) !=1 )) { +DBG_BUGON (1 ); +return -EINVAL ; + } err =radix_tree_preload (GFP_NOFS );if (err)
drivers/target/target_core_user.c +61 -27
49 lines not on this page · raw message
drivers/xen/pvcalls-front.c +72 -28
100 lines not on this page · raw message
fs/afs/rxrpc.c +42 -11
53 lines not on this page · raw message
net/mac80211/mesh_pathtbl.c +46 -109
155 lines not on this page · raw message
net/sched/cls_tcindex.c +48 -32
80 lines not on this page · raw message
net/socket.c +63 -19
82 lines not on this page · raw message
samples/bpf/asm_goto_workaround.h new file +16 -0
Lines of this file are not shown. View the raw message.
sound/pci/hda/patch_realtek.c +41 -1
42 lines not on this page · raw message
tools/include/uapi/linux/pkt_sched.h new file +1163 -0
1,163 lines not on this page · raw message
tools/testing/selftests/bpf/test_progs.c +30 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/test_sock_addr.c +50 -3
53 lines not on this page · raw message
tools/testing/selftests/net/forwarding/bridge_vlan_aware.sh +46 -1
47 lines not on this page · raw message
tools/testing/selftests/net/ip_defrag.c +87 -9
96 lines not on this page · raw message
tools/testing/selftests/net/ip_defrag.sh +8 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/tc-testing/tc-tests/actions/ife.json +44 -44
88 lines not on this page · raw message
tools/testing/selftests/tc-testing/tc-tests/actions/tunnel_key.json +1 -30
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.