Linux 5.15.11
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.11 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/networking/device_drivers/ethernet/intel/ixgbe.rst | 16 + Makefile | 2 arch/arm/boot/dts/imx6ull-pinfunc.h | 2 arch/arm/boot/dts/socfpga_arria10_socdk_qspi.dts | 2 arch/arm/boot/dts/socfpga_arria5_socdk.dts | 2 arch/arm/boot/dts/socfpga_cyclone5_socdk.dts | 2 arch/arm/boot/dts/socfpga_cyclone5_sockit.dts | 2 arch/arm/boot/dts/socfpga_cyclone5_socrates.dts | 2 arch/arm/boot/dts/socfpga_cyclone5_sodia.dts | 2 arch/arm/boot/dts/socfpga_cyclone5_vining_fpga.dts | 4 arch/arm64/boot/dts/freescale/fsl-ls1088a-ten64.dts | 2 arch/arm64/boot/dts/freescale/imx8mq.dtsi | 2 arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts | 2 arch/arm64/boot/dts/rockchip/rk3399-khadas-edge.dtsi | 1 arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts | 1 arch/arm64/boot/dts/rockchip/rk3399-leez-p710.dts | 2 arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi | 2 arch/arm64/kernel/machine_kexec_file.c | 1 arch/powerpc/kernel/module_64.c | 42 ++ arch/powerpc/platforms/85xx/smp.c | 4 arch/riscv/boot/dts/sifive/hifive-unleashed-a00.dts | 1 arch/riscv/boot/dts/sifive/hifive-unmatched-a00.dts | 2 arch/s390/kernel/irq.c | 9 arch/s390/kernel/machine_kexec_file.c | 7 arch/x86/kvm/ioapic.h | 1 arch/x86/kvm/irq.h | 1 arch/x86/kvm/vmx/vmx.c | 4 arch/x86/kvm/x86.c | 14 arch/x86/net/bpf_jit_comp.c | 101 ++++--- block/blk-iocost.c | 9 drivers/Makefile | 3 drivers/ata/libata-scsi.c | 15 - drivers/block/xen-blkfront.c | 15 - drivers/bus/ti-sysc.c | 3 drivers/clk/clk.c | 15 - drivers/dma/idxd/irq.c | 7 drivers/dma/idxd/registers.h | 1 drivers/dma/idxd/submit.c | 18 + drivers/dma/st_fdma.c | 2 drivers/firmware/scpi_pm_domain.c | 10 drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 4 drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c | 1 drivers/gpu/drm/amd/amdgpu/gfxhub_v2_0.c | 1 drivers/gpu/drm/amd/amdgpu/gfxhub_v2_1.c | 1 drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c | 1 drivers/gpu/drm/amd/amdgpu/mmhub_v1_7.c | 1 drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.c | 1 drivers/gpu/drm/amd/amdgpu/mmhub_v2_3.c | 1 drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c | 2 drivers/gpu/drm/amd/display/dc/dcn31/dcn31_init.c | 1 drivers/gpu/drm/amd/pm/swsmu/smu12/smu_v12_0.c | 3 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 3 drivers/gpu/drm/ast/ast_mode.c | 5 drivers/gpu/drm/drm_fb_helper.c | 8 drivers/gpu/drm/i915/display/g4x_hdmi.c | 1 drivers/gpu/drm/i915/display/intel_ddi.c | 1 drivers/gpu/drm/i915/display/intel_dmc.c | 2 drivers/gpu/drm/i915/display/intel_hdmi.c | 32 +- drivers/gpu/drm/i915/display/intel_hdmi.h | 1 drivers/gpu/drm/tiny/simpledrm.c | 2 drivers/md/persistent-data/dm-btree-remove.c | 2 drivers/media/usb/dvb-usb-v2/mxl111sf.c | 16 - drivers/net/can/m_can/m_can.c | 24 + drivers/net/can/m_can/m_can.h | 3 drivers/net/can/m_can/m_can_pci.c | 48 +++ drivers/net/dsa/mv88e6xxx/chip.c | 4 drivers/net/dsa/mv88e6xxx/port.c | 4 drivers/net/ethernet/broadcom/bcmsysport.c | 5 drivers/net/ethernet/broadcom/bcmsysport.h | 1 drivers/net/ethernet/hisilicon/hns3/hnae3.h | 2 drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c | 20 - drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_mbx.c | 3 drivers/net/ethernet/intel/ice/ice_ptp.c | 13 drivers/net/ethernet/intel/ice/ice_ptp.h | 6 drivers/net/ethernet/intel/igb/igb_main.c | 28 - drivers/net/ethernet/intel/igbvf/netdev.c | 1 drivers/net/ethernet/intel/igc/igc_i225.c | 2 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 4 drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c | 3 drivers/net/ethernet/sfc/ef100_nic.c | 3 drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c | 4 drivers/net/ethernet/stmicro/stmmac/stmmac.h | 17 + drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c | 86 +++++ drivers/net/netdevsim/bpf.c | 1 drivers/net/netdevsim/ethtool.c | 5 drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 5 drivers/net/xen-netback/common.h | 1 drivers/net/xen-netback/rx.c | 77 +++-- drivers/net/xen-netfront.c | 125 ++++++-- drivers/pci/msi.c | 15 - drivers/pinctrl/pinctrl-amd.c | 29 +- drivers/reset/tegra/reset-bpmp.c | 9 drivers/scsi/scsi_debug.c | 42 +- drivers/scsi/ufs/ufshcd.c | 12 drivers/soc/imx/soc-imx.c | 4 drivers/soc/tegra/fuse/fuse-tegra.c | 2 drivers/soc/tegra/fuse/fuse.h | 2 drivers/tee/amdtee/core.c | 5 drivers/tty/hvc/hvc_xen.c | 30 +- drivers/tty/n_hdlc.c | 23 + drivers/tty/serial/8250/8250_fintek.c | 20 - drivers/usb/cdns3/cdnsp-gadget.c | 12 drivers/usb/cdns3/cdnsp-ring.c | 11 drivers/usb/cdns3/cdnsp-trace.h | 4 drivers/usb/core/devio.c | 144 +++++++--- drivers/usb/core/quirks.c | 3 drivers/usb/dwc2/platform.c | 3 drivers/usb/early/xhci-dbc.c | 15 - drivers/usb/gadget/composite.c | 6 drivers/usb/gadget/function/u_ether.c | 16 - drivers/usb/gadget/legacy/dbgp.c | 6 drivers/usb/gadget/legacy/inode.c | 6 drivers/usb/host/xhci-mtk-sch.c | 2 drivers/usb/host/xhci-pci.c | 6 drivers/usb/serial/cp210x.c | 6 drivers/usb/serial/option.c | 8 drivers/usb/typec/tcpm/tcpm.c | 18 - drivers/vdpa/vdpa.c | 3 drivers/vdpa/vdpa_user/vduse_dev.c | 6 drivers/vhost/vdpa.c | 2 drivers/virtio/virtio_ring.c | 2 drivers/xen/events/events_base.c | 6 fs/afs/file.c | 5 fs/afs/super.c | 1 fs/btrfs/disk-io.c | 14 fs/btrfs/extent_io.c | 10 fs/btrfs/inode.c | 2 fs/btrfs/super.c | 26 - fs/btrfs/tree-log.c | 1 fs/btrfs/volumes.c | 25 - fs/btrfs/volumes.h | 6 fs/ceph/caps.c | 16 - fs/ceph/file.c | 18 + fs/ceph/mds_client.c | 3 fs/cifs/fs_context.c | 38 ++ fs/fuse/dir.c | 2 fs/io-wq.c | 31 +- fs/overlayfs/dir.c | 3 fs/overlayfs/overlayfs.h | 1 fs/overlayfs/super.c | 12 fs/zonefs/super.c | 1 include/uapi/linux/mptcp.h | 18 - include/xen/events.h | 1 kernel/audit.c | 21 - kernel/bpf/verifier.c | 49 ++- kernel/locking/rtmutex.c | 2 kernel/rcu/tree.c | 10 kernel/time/timekeeping.c | 3 net/core/skbuff.c | 2 net/ipv4/inet_diag.c | 4 net/ipv6/sit.c | 1 net/mac80211/agg-rx.c | 5 net/mac80211/agg-tx.c | 16 - net/mac80211/driver-ops.h | 5 net/mac80211/mlme.c | 13 net/mac80211/sta_info.h | 1 net/mac80211/tx.c | 6 net/mac80211/util.c | 7 net/mptcp/pm_netlink.c | 3 net/mptcp/protocol.c | 6 net/mptcp/sockopt.c | 1 net/packet/af_packet.c | 5 net/rds/connection.c | 1 net/sched/cls_api.c | 1 net/sched/sch_cake.c | 6 net/sched/sch_ets.c | 4 net/smc/af_smc.c | 4 net/vmw_vsock/virtio_transport_common.c | 3 net/wireless/reg.c | 7 scripts/recordmcount.pl | 2 security/selinux/hooks.c | 33 +- tools/perf/builtin-inject.c | 13 tools/testing/selftests/bpf/prog_tests/btf_skc_cls_ingress.c | 16 - tools/testing/selftests/bpf/verifier/atomic_cmpxchg.c | 86 +++++ tools/testing/selftests/bpf/verifier/value_ptr_arith.c | 23 + tools/testing/selftests/damon/.gitignore | 2 tools/testing/selftests/damon/Makefile | 2 tools/testing/selftests/damon/debugfs_attrs.sh | 18 + tools/testing/selftests/damon/huge_count_read_write.c | 39 ++ tools/testing/selftests/kvm/kvm_create_max_vcpus.c | 30 ++ tools/testing/selftests/net/fcnal-test.sh | 45 ++- tools/testing/selftests/net/forwarding/forwarding.config.sample | 2 tools/testing/selftests/net/icmp_redirect.sh | 2 tools/testing/selftests/net/toeplitz.c | 2 virt/kvm/kvm_main.c | 6 185 files changed, 1583 insertions(+), 554 deletions(-)
Adrian Hunter (2):
perf inject: Fix segfault due to close without open perf inject: Fix segfault due to perf_data__fd() without open
Alan Stern (1):
USB: core: Make do_proc_control() and do_proc_bulk() killable
Alejandro Concepcion-Rodriguez (1):
drm: simpledrm: fix wrong unit with pixel clock
Alex Bee (1):
arm64: dts: rockchip: fix audio-supply for Rock Pi 4
Alexei Starovoitov (2):
bpf: Fix extable fixup offset.
bpf: Fix extable address check.
Alyssa Ross (1):
dmaengine: st_fdma: fix MODULE_ALIAS
Amelie Delaunay (1):
usb: dwc2: fix STM ID/VBUS detection startup delay in dwc2_driver_probe
Anand Jain (4):
btrfs: convert latest_bdev type to btrfs_device and rename
btrfs: use latest_dev in btrfs_show_devname
btrfs: update latest_dev when we create a sprout device
btrfs: remove stale comment about the btrfs_show_devname
Andrey Eremeev (1):
dsa: mv88e6xxx: fix debug print for SPEED_UNFORCED
Arnd Bergmann (1):
virtio: always enter drivers/virtio/
Artem Lapkin (1):
arm64: dts: rockchip: remove mmc-hs400-enhanced-strobe from rk3399-khadas-edge
Baowen Zheng (1):
flow_offload: return EOPNOTSUPP for the unsupported mpls action type
Bin Meng (2):
riscv: dts: unleashed: Add gpio card detect to mmc-spi-slot
riscv: dts: unmatched: Add gpio card detect to mmc-spi-slot
Christian Brauner (1):
ceph: fix up non-directory creation in SGID directories
Chunfeng Yun (1):
usb: xhci-mtk: fix list_del warning when enable list debug
Cyril Novikov (1):
ixgbe: set X550 MDIO speed before talking to PHY
D. Wythe (1):
net/smc: Prevent smc_release() from long blocking
Dan Carpenter (4):
vduse: fix memory corruption in vduse_dev_ioctl()
vduse: check that offset is within bounds in get_config()
vdpa: check that offsets are within bounds
tee: amdtee: fix an IS_ERR() vs NULL bug
Daniel Borkmann (7):
bpf: Fix kernel address leakage in atomic fetch
bpf, selftests: Add test case for atomic fetch on spilled pointer
bpf: Fix signed bounds propagation after mov32
bpf: Make 32->64 bounds propagation slightly more robust bpf, selftests: Add test case trying to taint map value pointer
bpf: Fix kernel address leakage in atomic cmpxchg's r0 aux reg bpf, selftests: Update test case for atomic cmpxchg on r0 with pointer
Daniele Palmas (1):
USB: serial: option: add Telit FN990 compositions
Dave Jiang (3):
dmaengine: idxd: add halt interrupt support
dmaengine: idxd: fix calling wq quiesce inside spinlock
dmaengine: idxd: fix missed completion on abort path
David Ahern (3):
selftests: Add duplicate config only for MD5 VRF tests
selftests: Fix raw socket bind tests with VRF
selftests: Fix IPv6 address bind tests
David Howells (1):
afs: Fix mmap
Davide Caratti (1):
net/sched: sch_ets: don't remove idle classes from the round-robin list
Dinh Nguyen (1):
ARM: socfpga: dts: fix qspi node compatible
Eric Dumazet (3):
sch_cake: do not call cake_destroy() from cake_init()
inet_diag: fix kernel-infoleak for UDP sockets
sit: do not call ipip6_dev_free() from sit_init_net()
Fabio Estevam (1):
ARM: dts: imx6ull-pinfunc: Fix CSI_DATA07__ESAI_TX0 pad name
Felix Fietkau (3):
mac80211: fix rate control for retransmitted frames
mac80211: fix regression in SSN handling of addba tx
mac80211: send ADDBA requests using the tid/queue of the aggregation session
Filip Pokryvka (1):
netdevsim: don't overwrite read only ethtool parms
Filipe Manana (1):
btrfs: fix double free of anon_dev after failure to create subvolume
Florian Fainelli (1):
net: systemport: Add global locking for descriptor lifecycle
Florian Klink (1):
arm64: dts: rockchip: fix poweroff on helios64
Florian Westphal (2):
mptcp: remove tcp ulp setsockopt support
mptcp: clear 'kern' flag from fallback sockets
Gal Pressman (1):
net: Fix double 0x prefix print in SKB dump
George Kennedy (4):
libata: if T_LENGTH is zero, dma direction should be DMA_NONE
scsi: scsi_debug: Don't call kcalloc() if size arg is zero
scsi: scsi_debug: Fix type in min_t to avoid stack OOB
scsi: scsi_debug: Sanity check block descriptor length in resp_mode_select()
Greg Kroah-Hartman (3):
USB: gadget: bRequestType is a bitfield, not a enum Revert "usb: early: convert to readl_poll_timeout_atomic()" Linux 5.15.11
Haimin Zhang (1):
netdevsim: Zero-initialize memory for new map's value in function nsim_bpf_map_alloc
Hangbin Liu (1):
selftest/net/forwarding: declare NETIFS p9 p10
Hangyu Hua (1):
rds: memory leak in __rds_conn_create()
Harshit Mogalapalli (1):
drm/i915/display: Fix an unsigned subtraction which can never be negative.
Hawking Zhang (1):
drm/amdgpu: don't override default ECO_BITs setting
Hu Weiwen (1):
ceph: fix duplicate increment of opened_inodes metric
Ilan Peer (1):
cfg80211: Acquire wiphy mutex on regulatory work
Jaegeuk Kim (1):
scsi: ufs: core: Retry START_STOP on UNIT_ATTENTION
Jani Nikula (1):
drm/i915/hdmi: convert intel_hdmi_to_dev to intel_hdmi_to_i915
Javier Martinez Canillas (1):
Revert "drm/fb-helper: improve DRM fbdev emulation device names"
Jens Axboe (3):
io-wq: remove spurious bit clear on task_work addition
io-wq: check for wq exit after adding new worker task_work
io-wq: drop wqe lock before creating new worker
Jerome Marchand (1):
recordmcount.pl: look for jgnop instruction as well as bcrl on s390
Ji-Ze Hong (Peter Hong) (1):
serial: 8250_fintek: Fix garbled text for console
Jianglei Nie (1):
btrfs: fix memory leak in __add_inode_ref()
Jiasheng Jiang (2):
drm/ast: potential dereference of null pointer
sfc_ef100: potential dereference of null pointer
Jie Meng (1):
bpf, x64: Factor out emission of REX byte in more cases
Jie Wang (1):
net: hns3: fix use-after-free bug in hclgevf_send_mbx_msg
Jie2x Zhou (1):
selftests: net: Correct ping6 expected rc from 2 to 1
Jimmy Wang (1):
USB: NO_LPM quirk Lenovo USB-C to Ethernet Adapher(RTL8153-04)
Joe Thornber (1):
dm btree remove: fix use after free in rebalance_children()
Johan Hovold (1):
USB: serial: cp210x: fix CP2105 GPIO registration
Johannes Berg (6):
mac80211: mark TX-during-stop for TX in in_reconfig
mac80211: validate extended element ID is present
mac80211: track only QoS data frames for admission control
iwlwifi: mvm: don't crash on invalid rate w/o STA
mac80211: agg-tx: don't schedule_and_wake_txq() under sta->lock
mac80211: fix lookup when adding AddBA extension element
John Keeping (3):
arm64: dts: rockchip: fix rk3308-roc-cc vcc-sd supply
arm64: dts: rockchip: fix rk3399-leez-p710 vcc3v3-lan supply
net: stmmac: dwmac-rk: fix oob read in rk_gmac_setup
Jon Hunter (1):
reset: tegra-bpmp: Revert Handle errors in BPMP response
Josef Bacik (1):
btrfs: check WRITE_ERR when trying to read an extent buffer
Juergen Gross (6):
x86/kvm: remove unused ack_notifier callbacks xen/blkfront: harden blkfront against event channel storms xen/netfront: harden netfront against event channel storms xen/console: harden hvc_xen against event channel storms xen/netback: fix rx queue stall detection xen/netback: don't queue unlimited number of packages
Karen Sornek (1):
igb: Fix removal of unicast MAC filters of VFs
Karol Kolacinski (2):
ice: Use div64_u64 instead of div_u64 in adjfine
ice: Don't put stale timestamps in the skb
Lai Jiangshan (1):
KVM: X86: Fix tlb flush for tdp in kvm_invalidate_pcid()
Lakshmi Ramasubramanian (1):
arm64: kexec: Fix missing error code 'ret' warning in load_other_segments()
Lang Yu (1):
drm/amd/pm: fix a potential gpu_metrics_table memory leak
Le Ma (1):
drm/amdgpu: correct register access for RLC_JUMP_TABLE_RESTORE
Letu Ren (1):
igbvf: fix double free in igbvf_probe
Magnus Karlsson (2):
xsk: Do not sleep in poll() when need_wakeup set Revert "xsk: Do not sleep in poll() when need_wakeup set"
Marek Behún (1):
net: dsa: mv88e6xxx: Unforce speed & duplex in mac_link_down()
Marian Postevca (1):
usb: gadget: u_ether: fix race in setting MAC address in setup phase
Mario Limonciello (2):
pinctrl: amd: Fix wakeups when IRQ is shared with SCI drm/amd/pm: fix reading SMU FW version from amdgpu_firmware_info on YC
Martin KaFai Lau (1):
bpf, selftests: Fix racing issue in btf_skc_cls_ingress test
Martin Kepplinger (1):
arm64: dts: imx8mq: remove interconnect property from lcdif
Mathew McBride (1):
arm64: dts: ten64: remove redundant interrupt declaration for gpio-keys
Matthias Schiffer (3):
Revert "can: m_can: remove support for custom bit timing"
can: m_can: make custom bittiming fields const
can: m_can: pci: use custom bit timings for Elkhart Lake
Matthieu Baerts (1):
mptcp: add missing documented NL params
Maxim Galaganov (1):
mptcp: fix deadlock in __mptcp_push_pending()
Mike Tipton (1):
clk: Don't parent clks until the parent is fully registered
Miklos Szeredi (2):
fuse: annotate lock in fuse_reverse_inval_entry()
ovl: fix warning in ovl_create_real()
Naohiro Aota (1):
zonefs: add MODULE_ALIAS_FS
Nathan Chancellor (1):
soc/tegra: fuse: Fix bitwise vs. logical OR warning
Nehal Bakulchandra Shah (1):
usb: xhci: Extend support for runtime power management for AMD's Yellow carp.
Nicholas Kazlauskas (1):
drm/amd/display: Set exit_optimized_pwr_state for DCN31
Ong Boon Leong (1):
net: stmmac: fix tc flower deletion for VLAN priority Rx steering
Paolo Abeni (1):
mptcp: never allow the PM to close a listener subflow
Paolo Bonzini (2):
KVM: VMX: clear vmx_x86_ops.sync_pir_to_irr if APICv is disabled
KVM: downgrade two BUG_ONs to WARN_ON_ONCE
Parav Pandit (1):
vdpa: Consider device id larger than 31
Paul E. McKenney (1):
rcu: Mark accesses to rcu_state.n_force_qs
Paul Moore (1):
audit: improve robustness of the audit queue handling
Pavel Skripkin (1):
media: mxl111sf: change mutex_init() location
Pawel Laszczak (4):
usb: cdnsp: Fix incorrect status for control request
usb: cdnsp: Fix incorrect calling of cdnsp_died function
usb: cdnsp: Fix issue in cdnsp_log_ep trace event
usb: cdnsp: Fix lack of spin_lock_irqsave/spin_lock_restore
Philipp Rudo (1):
s390/kexec_file: fix error handling when applying relocations
Po-Hsu Lin (1):
selftests: icmp_redirect: pass xfail=0 to log_test()
Robert Schlabbach (1):
ixgbe: Document how to enable NBASE-T support
Russell Currey (1):
powerpc/module_64: Fix livepatching for RO modules
Sasha Neftin (1):
igc: Fix typo in i225 LTR functions
Scott Mayhew (1):
selinux: fix sleeping function called from invalid context
SeongJae Park (1):
selftests/damon: test debugfs file reads/writes with huge count
Shin'ichiro Kawasaki (1):
btrfs: fix missing blkdev_put() call in btrfs_scan_one_device()
Stefan Roese (1):
PCI/MSI: Mask MSI-X vectors only on success
Stephan Gerhold (1):
soc: imx: Register SoC device only on i.MX boards
Sudeep Holla (1):
firmware: arm_scpi: Fix string overflow in SCPI genpd driver
Sven Schnelle (1):
s390/entry: fix duplicate tracking of irq nesting level
Tejun Heo (1):
iocost: Fix divide-by-zero on donation from low hweight cgroup
Tetsuo Handa (1):
tty: n_hdlc: make n_hdlc_tty_wakeup() asynchronous
Thiago Rafael Becker (1):
cifs: sanitize multiple delimiters in prepath
Thomas Gleixner (1):
PCI/MSI: Clear PCI_MSIX_FLAGS_MASKALL on error
Tony Lindgren (1):
bus: ti-sysc: Fix variable set but not used warning for reinit_modules
Ville Syrjälä (1):
drm/i915/hdmi: Turn DP++ TMDS output buffers back on in encoder->shutdown()
Vitaly Kuznetsov (2):
KVM: selftests: Make sure kvm_create_max_vcpus test won't hit RLIMIT_NOFILE
KVM: x86: Drop guest CPUID check for host initiated writes to MSR_IA32_PERF_CAPABILITIES
Wei Wang (1):
virtio/vsock: fix the transport to work with VMADDR_CID_ANY
Will Deacon (1):
virtio_ring: Fix querying of maximum DMA mapping size for virtio device
Willem de Bruijn (2):
selftests/net: toeplitz: fix udp option
net/packet: rx_owner_map depends on pg_vec
Xiaoming Ni (1):
powerpc/85xx: Fix oops when CONFIG_FSL_PMC=n
Xiubo Li (1):
ceph: initialize pathlen variable in reconnect_caps_cb
Xu Yang (1):
usb: typec: tcpm: fix tcpm unregister port but leave a pending timer
Yu Liao (1):
timekeeping: Really make sure wall_to_monotonic isn't positive
Yufeng Mo (1):
net: hns3: fix race condition in debugfs
Zqiang (1):
locking/rtmutex: Fix incorrect condition in rtmutex_spin_on_owner()
Greg Kroah-Hartman
maintainerDocumentation/networking/device_drivers/ethernet/intel/ixgbe.rst +16 -0
@@ -440,6 +440,22 @@ NOTE: For 82599-based network connections, if you are enabling jumbo frames in a virtual function (VF), jumbo frames must first be enabled in the physical function (PF). The VF MTU setting cannot be larger than the PF MTU. +NBASE-T Support +--------------- +The ixgbe driver supports NBASE-T on some devices. However, the advertisement +of NBASE-T speeds is suppressed by default, to accommodate broken network +switches which cannot cope with advertised NBASE-T speeds. Use the ethtool +command to enable advertising NBASE-T speeds on devices which support it:: + + ethtool -s eth? advertise 0x1800000001028 + +On Linux systems with INTERFACES(5), this can be specified as a pre-up command +in /etc/network/interfaces so that the interface is always brought up with +NBASE-T support, e.g.:: + + iface eth? inet dhcp + pre-up ethtool -s eth? advertise 0x1800000001028 || true + Generic Receive Offload, aka GRO -------------------------------- The driver supports the in-kernel software implementation of GRO. GRO has
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 10 +SUBLEVEL = 11 EXTRAVERSION = NAME = Trick or Treat
arch/arm/boot/dts/imx6ull-pinfunc.h +1 -1
@@ -82,6 +82,6 @@#define MX6ULL_PAD_CSI_DATA04__ESAI_TX_FS 0x01F4 0x0480 0x0000 0x9 0x0#define MX6ULL_PAD_CSI_DATA05__ESAI_TX_CLK 0x01F8 0x0484 0x0000 0x9 0x0#define MX6ULL_PAD_CSI_DATA06__ESAI_TX5_RX0 0x01FC 0x0488 0x0000 0x9 0x0 -#define MX6ULL_PAD_CSI_DATA07__ESAI_T0 0x0200 0x048C 0x0000 0x9 0x0 +#define MX6ULL_PAD_CSI_DATA07__ESAI_TX0 0x0200 0x048C 0x0000 0x9 0x0#endif /* __DTS_IMX6ULL_PINFUNC_H */
arch/arm/boot/dts/socfpga_arria10_socdk_qspi.dts +1 -1
@@ -12,7 +12,7 @@ &qspi { flash0: n25q00@0 { #address-cells = <1>; #size-cells = <1>; - compatible = "n25q00aa"; + compatible = "micron,mt25qu02g", "jedec,spi-nor"; reg = <0>; spi-max-frequency = <100000000>;
arch/arm/boot/dts/socfpga_arria5_socdk.dts +1 -1
@@ -119,7 +119,7 @@ &qspi { flash: flash@0 { #address-cells = <1>; #size-cells = <1>; - compatible = "n25q256a"; + compatible = "micron,n25q256a", "jedec,spi-nor"; reg = <0>; spi-max-frequency = <100000000>;
arch/arm/boot/dts/socfpga_cyclone5_socdk.dts +1 -1
@@ -124,7 +124,7 @@ &qspi { flash0: n25q00@0 { #address-cells = <1>; #size-cells = <1>; - compatible = "n25q00"; + compatible = "micron,mt25qu02g", "jedec,spi-nor"; reg = <0>; /* chip select */ spi-max-frequency = <100000000>;
arch/arm/boot/dts/socfpga_cyclone5_sockit.dts +1 -1
@@ -169,7 +169,7 @@ &qspi { flash: flash@0 { #address-cells = <1>; #size-cells = <1>; - compatible = "n25q00"; + compatible = "micron,mt25qu02g", "jedec,spi-nor"; reg = <0>; spi-max-frequency = <100000000>;
arch/arm/boot/dts/socfpga_cyclone5_socrates.dts +1 -1
@@ -80,7 +80,7 @@ &qspi { flash: flash@0 { #address-cells = <1>; #size-cells = <1>; - compatible = "n25q256a"; + compatible = "micron,n25q256a", "jedec,spi-nor"; reg = <0>; spi-max-frequency = <100000000>; m25p,fast-read;
arch/arm/boot/dts/socfpga_cyclone5_sodia.dts +1 -1
@@ -116,7 +116,7 @@ &qspi { flash0: n25q512a@0 { #address-cells = <1>; #size-cells = <1>; - compatible = "n25q512a"; + compatible = "micron,n25q512a", "jedec,spi-nor"; reg = <0>; spi-max-frequency = <100000000>;
arch/arm/boot/dts/socfpga_cyclone5_vining_fpga.dts +2 -2
@@ -224,7 +224,7 @@ &qspi { n25q128@0 { #address-cells = <1>; #size-cells = <1>; - compatible = "n25q128"; + compatible = "micron,n25q128", "jedec,spi-nor"; reg = <0>; /* chip select */ spi-max-frequency = <100000000>; m25p,fast-read;
@@ -241,7 +241,7 @@ n25q128@0 { n25q00@1 { #address-cells = <1>; #size-cells = <1>; - compatible = "n25q00"; + compatible = "micron,mt25qu02g", "jedec,spi-nor"; reg = <1>; /* chip select */ spi-max-frequency = <100000000>; m25p,fast-read;
arch/arm64/boot/dts/freescale/fsl-ls1088a-ten64.dts +0 -2
@@ -38,7 +38,6 @@ buttons { powerdn { label = "External Power Down"; gpios = <&gpio1 17 GPIO_ACTIVE_LOW>; - interrupts = <&gpio1 17 IRQ_TYPE_EDGE_FALLING>; linux,code = <KEY_POWER>; };
@@ -46,7 +45,6 @@ powerdn { admin { label = "ADMIN button"; gpios = <&gpio3 8 GPIO_ACTIVE_HIGH>; - interrupts = <&gpio3 8 IRQ_TYPE_EDGE_RISING>; linux,code = <KEY_WPS_BUTTON>; }; };
arch/arm64/boot/dts/freescale/imx8mq.dtsi +0 -2
@@ -524,8 +524,6 @@ lcdif: lcd-controller@30320000 { <&clk IMX8MQ_VIDEO_PLL1>, <&clk IMX8MQ_VIDEO_PLL1_OUT>; assigned-clock-rates = <0>, <0>, <0>, <594000000>; - interconnects = <&noc IMX8MQ_ICM_LCDIF &noc IMX8MQ_ICS_DRAM>; - interconnect-names = "dram"; status = "disabled"; port@0 {
arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts +1 -1
@@ -97,7 +97,7 @@ vcc_sd: vcc-sd { regulator-max-microvolt = <3300000>; regulator-always-on; regulator-boot-on; - vim-supply = <&vcc_io>; + vin-supply = <&vcc_io>; }; vdd_core: vdd-core {
arch/arm64/boot/dts/rockchip/rk3399-khadas-edge.dtsi +0 -1
@@ -705,7 +705,6 @@ &sdmmc { &sdhci { bus-width = <8>; mmc-hs400-1_8v; - mmc-hs400-enhanced-strobe; non-removable; status = "okay"; };
arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts +1 -0
@@ -269,6 +269,7 @@ rk808: pmic@1b { clock-output-names = "xin32k", "rk808-clkout2"; pinctrl-names = "default"; pinctrl-0 = <&pmic_int_l>; + rockchip,system-power-controller; vcc1-supply = <&vcc5v0_sys>; vcc2-supply = <&vcc5v0_sys>; vcc3-supply = <&vcc5v0_sys>;
arch/arm64/boot/dts/rockchip/rk3399-leez-p710.dts +1 -1
@@ -55,7 +55,7 @@ vcc3v3_lan: vcc3v3-lan { regulator-boot-on; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; - vim-supply = <&vcc3v3_sys>; + vin-supply = <&vcc3v3_sys>; }; vcc3v3_sys: vcc3v3-sys {
arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi +1 -1
@@ -457,7 +457,7 @@ &io_domains { status = "okay"; bt656-supply = <&vcc_3v0>; - audio-supply = <&vcc_3v0>; + audio-supply = <&vcc1v8_codec>; sdmmc-supply = <&vcc_sdio>; gpio1830-supply = <&vcc_3v0>; };
arch/arm64/kernel/machine_kexec_file.c +1 -0
@@ -149,6 +149,7 @@ int load_other_segments(struct kimage *image, initrd_len, cmdline, 0);if (!dtb) {pr_err ("Preparing for new dtb failed\n" ); + ret = -EINVAL ; goto out_err; }
arch/powerpc/kernel/module_64.c +34 -8
72 lines not on this page · raw message
arch/powerpc/platforms/85xx/smp.c +2 -2
@@ -220,7 +220,7 @@ static int smp_85xx_start_cpu(int cpu)local_irq_save (flags);hard_irq_disable (); -if (qoriq_pm_ops) +if (qoriq_pm_ops && qoriq_pm_ops->cpu_up_prepare) qoriq_pm_ops->cpu_up_prepare (cpu);/* if cpu is not spinning, reset it */
@@ -292,7 +292,7 @@ static int smp_85xx_kick_cpu(int nr) booting_thread_hwid =cpu_thread_in_core (nr); primary =cpu_first_thread_sibling (nr); -if (qoriq_pm_ops) +if (qoriq_pm_ops && qoriq_pm_ops->cpu_up_prepare) qoriq_pm_ops->cpu_up_prepare (nr);/*
arch/riscv/boot/dts/sifive/hifive-unleashed-a00.dts +1 -0
@@ -80,6 +80,7 @@ mmc@0 { spi-max-frequency = <20000000>; voltage-ranges = <3300 3300>; disable-wp; + gpios = <&gpio 11 GPIO_ACTIVE_LOW>; }; };
arch/riscv/boot/dts/sifive/hifive-unmatched-a00.dts +2 -0
@@ -2,6 +2,7 @@ /* Copyright (c) 2020 SiFive, Inc */ #include "fu740-c000.dtsi" +#include <dt-bindings/gpio/gpio.h> #include <dt-bindings/interrupt-controller/irq.h> /* Clock frequency (in Hz) of the PCB crystal for rtcclk */
@@ -228,6 +229,7 @@ mmc@0 { spi-max-frequency = <20000000>; voltage-ranges = <3300 3300>; disable-wp; + gpios = <&gpio 15 GPIO_ACTIVE_LOW>; }; };
arch/s390/kernel/irq.c +5 -4
@@ -138,7 +138,7 @@ void noinstr do_io_irq(struct pt_regs *regs)struct pt_regs *old_regs =set_irq_regs (regs);int from_idle; -irq_enter (); +irq_enter_rcu ();if (user_mode (regs))update_timer_sys ();
@@ -155,7 +155,8 @@ void noinstr do_io_irq(struct pt_regs *regs)do_irq_async (regs,IO_INTERRUPT ); }while (MACHINE_IS_LPAR &&irq_pending (regs)); -irq_exit (); +irq_exit_rcu (); +set_irq_regs (old_regs);irqentry_exit (regs, state);
@@ -169,7 +170,7 @@ void noinstr do_ext_irq(struct pt_regs *regs)struct pt_regs *old_regs =set_irq_regs (regs);int from_idle; -irq_enter (); +irq_enter_rcu ();if (user_mode (regs))update_timer_sys ();
@@ -184,7 +185,7 @@ void noinstr do_ext_irq(struct pt_regs *regs)do_irq_async (regs,EXT_INTERRUPT ); -irq_exit (); +irq_exit_rcu ();set_irq_regs (old_regs);irqentry_exit (regs, state);
arch/s390/kernel/machine_kexec_file.c +6 -1
@@ -277,6 +277,7 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi, {Elf_Rela *relas;int i, r_type; +int ret; relas = (void *)pi->ehdr + relsec->sh_offset;
@@ -311,7 +312,11 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi, addr = section->sh_addr + relas[i].r_offset; r_type =ELF64_R_TYPE (relas[i].r_info); -arch_kexec_do_relocs (r_type, loc, val, addr); + ret =arch_kexec_do_relocs (r_type, loc, val, addr); +if (ret) { +pr_err ("Unknown rela relocation: %d\n" , r_type); +return -ENOEXEC ; + } }return 0 ; }
arch/x86/kvm/ioapic.h +0 -1
@@ -81,7 +81,6 @@ struct kvm_ioapic {unsigned long irq_states[IOAPIC_NUM_PINS ];struct kvm_io_device dev;struct kvm *kvm; -void (*ack_notifier)(void *opaque,int irq);spinlock_t lock;struct rtc_status rtc_status;struct delayed_work eoi_inject;
arch/x86/kvm/irq.h +0 -1
@@ -56,7 +56,6 @@ struct kvm_pic {struct kvm_io_device dev_master;struct kvm_io_device dev_slave;struct kvm_io_device dev_elcr; -void (*ack_notifier)(void *opaque,int irq);unsigned long irq_states[PIC_NUM_PINS ]; };
arch/x86/kvm/vmx/vmx.c +2 -2
@@ -7776,10 +7776,10 @@ static __init int hardware_setup(void) ple_window_shrink =0 ; } -if (!cpu_has_vmx_apicv ()) { +if (!cpu_has_vmx_apicv ()) enable_apicv =0 ; +if (!enable_apicv) vmx_x86_ops.sync_pir_to_irr =NULL ; - }if (cpu_has_vmx_tsc_scaling ()) { kvm_has_tsc_control = true;
arch/x86/kvm/x86.c +13 -1
@@ -1091,6 +1091,18 @@ static void kvm_invalidate_pcid(struct kvm_vcpu *vcpu, unsigned long pcid)unsigned long roots_to_free =0 ;int i; +/* +* MOV CR3 and INVPCID are usually not intercepted when using TDP, but +* this is reachable when running EPT=1 and unrestricted_guest=0, and +* also via the emulator. KVM's TDP page tables are not in the scope of +* the invalidation, but the guest's TLB entries need to be flushed as +* the CPU may have cached entries in its TLB for the target PCID. +*/ +if (unlikely (tdp_enabled)) { +kvm_make_request (KVM_REQ_TLB_FLUSH_GUEST , vcpu); +return ; + } +/* * If neither the current CR3 nor any of the prev_roots use the given * PCID, then nothing needs to be done here because a resync will
@@ -3347,7 +3359,7 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)if (!msr_info->host_initiated)return 1 ; -if (guest_cpuid_has (vcpu,X86_FEATURE_PDCM ) &&kvm_get_msr_feature (&msr_ent)) +if (kvm_get_msr_feature (&msr_ent))return 1 ;if (data & ~msr_ent.data)return 1 ;
arch/x86/net/bpf_jit_comp.c +69 -32
161 lines not on this page · raw message
block/blk-iocost.c +8 -1
@@ -2311,7 +2311,14 @@ static void ioc_timer_fn(struct timer_list *timer) hwm =current_hweight_max (iocg); new_hwi =hweight_after_donation (iocg, old_hwi, hwm, usage, &now); -if (new_hwi < hwm) { +/* +* Donation calculation assumes hweight_after_donation +* to be positive, a condition that a donor w/ hwa < 2 +* can't meet. Don't bother with donation if hwa is +* below 2. It's not gonna make a meaningful difference +* anyway. +*/ +if (new_hwi < hwm && hwa >=2 ) { iocg->hweight_donating = hwa; iocg->hweight_after_donation = new_hwi;list_add (&iocg->surplus_list, &surpluses);
drivers/Makefile +1 -2
@@ -41,8 +41,7 @@ obj-$(CONFIG_DMADEVICES) += dma/ # SOC specific infrastructure drivers. obj-y += soc/ -obj-$(CONFIG_VIRTIO) += virtio/ -obj-$(CONFIG_VIRTIO_PCI_LIB) += virtio/ +obj-y += virtio/ obj-$(CONFIG_VDPA) += vdpa/ obj-$(CONFIG_XEN) += xen/
drivers/ata/libata-scsi.c +13 -2
@@ -2826,8 +2826,19 @@ static unsigned int ata_scsi_pass_thru(struct ata_queued_cmd *qc) goto invalid_fld; } -if (ata_is_ncq (tf->protocol) && (cdb[2 + cdb_offset] &0x3 ) ==0 ) - tf->protocol =ATA_PROT_NCQ_NODATA ; +if ((cdb[2 + cdb_offset] &0x3 ) ==0 ) { +/* +* When T_LENGTH is zero (No data is transferred), dir should +* be DMA_NONE. +*/ +if (scmd->sc_data_direction !=DMA_NONE ) { + fp =2 + cdb_offset; + goto invalid_fld; + } + +if (ata_is_ncq (tf->protocol)) + tf->protocol =ATA_PROT_NCQ_NODATA ; + }/* enable LBA */ tf->flags |=ATA_TFLAG_LBA ;
drivers/block/xen-blkfront.c +12 -3
@@ -1511,9 +1511,12 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)unsigned long flags;struct blkfront_ring_info *rinfo = (struct blkfront_ring_info *)dev_id;struct blkfront_info *info = rinfo->dev_info; +unsigned int eoiflag =XEN_EOI_FLAG_SPURIOUS ; -if (unlikely (info->connected !=BLKIF_STATE_CONNECTED )) +if (unlikely (info->connected !=BLKIF_STATE_CONNECTED )) { +xen_irq_lateeoi (irq,XEN_EOI_FLAG_SPURIOUS );return IRQ_HANDLED ; + }spin_lock_irqsave (&rinfo->ring_lock, flags); again:
@@ -1529,6 +1532,8 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)unsigned long id;unsigned int op; + eoiflag =0 ; +RING_COPY_RESPONSE (&rinfo->ring, i, &bret); id = bret.id;
@@ -1645,6 +1650,8 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)spin_unlock_irqrestore (&rinfo->ring_lock, flags); +xen_irq_lateeoi (irq, eoiflag); +return IRQ_HANDLED ; err:
@@ -1652,6 +1659,8 @@ static irqreturn_t blkif_interrupt(int irq, void *dev_id)spin_unlock_irqrestore (&rinfo->ring_lock, flags); +/* No EOI in order to avoid further interrupts. */ +pr_alert ("%s disabled for further use\n" , info->gd->disk_name);return IRQ_HANDLED ; }
@@ -1691,8 +1700,8 @@ static int setup_blkring(struct xenbus_device *dev,if (err) goto fail; - err =bind_evtchn_to_irqhandler (rinfo->evtchn, blkif_interrupt,0 , -"blkif" , rinfo); + err =bind_evtchn_to_irqhandler_lateeoi (rinfo->evtchn, blkif_interrupt, +0 ,"blkif" , rinfo);if (err <=0 ) {xenbus_dev_fatal (dev, err,"bind_evtchn_to_irqhandler failed" );
drivers/bus/ti-sysc.c +1 -2
@@ -2456,12 +2456,11 @@ static void sysc_reinit_modules(struct sysc_soc_info *soc)struct sysc_module *module;struct list_head *pos;struct sysc *ddata; -int error =0 ;list_for_each (pos, &sysc_soc->restored_modules) { module = list_entry(pos, struct sysc_module, node); ddata = module->ddata; - error =sysc_reinit_module (ddata, ddata->enabled); +sysc_reinit_module (ddata, ddata->enabled); } }
drivers/clk/clk.c +12 -3
@@ -3415,6 +3415,14 @@ static int __clk_core_init(struct clk_core *core)clk_prepare_lock (); +/* +* Set hw->core after grabbing the prepare_lock to synchronize with +* callers of clk_core_fill_parent_index() where we treat hw->core +* being NULL as the clk not being registered yet. This is crucial so +* that clks aren't parented until their parent is fully registered. +*/ + core->hw->core = core; + ret =clk_pm_runtime_get (core);if (ret) goto unlock;
@@ -3579,8 +3587,10 @@ static int __clk_core_init(struct clk_core *core) out:clk_pm_runtime_put (core); unlock: -if (ret) +if (ret) {hlist_del_init (&core->child_node); + core->hw->core =NULL ; + }clk_prepare_unlock ();
@@ -3844,7 +3854,6 @@ __clk_register(struct device *dev, struct device_node *np, struct clk_hw *hw) core->num_parents = init->num_parents; core->min_rate =0 ; core->max_rate =ULONG_MAX ; - hw->core = core; ret =clk_core_populate_parent_map (core, init);if (ret)
@@ -3862,7 +3871,7 @@ __clk_register(struct device *dev, struct device_node *np, struct clk_hw *hw) goto fail_create_clk; } -clk_core_link_consumer (hw->core, hw->clk); +clk_core_link_consumer (core, hw->clk); ret =__clk_core_init (core);if (!ret)
drivers/dma/idxd/irq.c +6 -1
@@ -63,6 +63,9 @@ static int process_misc_interrupts(struct idxd_device *idxd, u32 cause)int i;bool err = false; +if (cause &IDXD_INTC_HALT_STATE ) + goto halt; +if (cause &IDXD_INTC_ERR ) {spin_lock (&idxd->dev_lock);for (i =0 ; i <4 ; i++)
@@ -121,6 +124,7 @@ static int process_misc_interrupts(struct idxd_device *idxd, u32 cause)if (!err)return 0 ; +halt: gensts.bits =ioread32 (idxd->reg_base +IDXD_GENSTATS_OFFSET );if (gensts.state ==IDXD_DEVICE_STATE_HALT ) { idxd->state =IDXD_DEV_HALTED ;
@@ -133,9 +137,10 @@ static int process_misc_interrupts(struct idxd_device *idxd, u32 cause)INIT_WORK (&idxd->work, idxd_device_reinit);queue_work (idxd->wq, &idxd->work); }else { -spin_lock (&idxd->dev_lock); + idxd->state =IDXD_DEV_HALTED ;idxd_wqs_quiesce (idxd);idxd_wqs_unmap_portal (idxd); +spin_lock (&idxd->dev_lock);idxd_device_clear_state (idxd); dev_err(&idxd->pdev->dev, "idxd halted, need %s.\n",
drivers/dma/idxd/registers.h +1 -0
@@ -158,6 +158,7 @@ enum idxd_device_reset_type {#define IDXD_INTC_CMD 0x02#define IDXD_INTC_OCCUPY 0x04#define IDXD_INTC_PERFMON_OVFL 0x08 +#define IDXD_INTC_HALT_STATE 0x10#define IDXD_CMD_OFFSET 0xa0union idxd_command_reg {
drivers/dma/idxd/submit.c +17 -1
@@ -106,6 +106,7 @@ static void llist_abort_desc(struct idxd_wq *wq, struct idxd_irq_entry *ie, {struct idxd_desc *d, *t, *found =NULL ;struct llist_node *head; +LIST_HEAD (flist); desc->completion->status =IDXD_COMP_DESC_ABORT ;/*
@@ -120,7 +121,11 @@ static void llist_abort_desc(struct idxd_wq *wq, struct idxd_irq_entry *ie, found = desc;continue ; } -list_add_tail (&desc->list, &ie->work_list); + +if (d->completion->status) +list_add_tail (&d->list, &flist); +else +list_add_tail (&d->list, &ie->work_list); } }
@@ -130,6 +135,17 @@ static void llist_abort_desc(struct idxd_wq *wq, struct idxd_irq_entry *ie,if (found)complete_desc (found,IDXD_COMPLETE_ABORT ); + +/* +* complete_desc() will return desc to allocator and the desc can be +* acquired by a different process and the desc->list can be modified. +* Delete desc from list so the list trasversing does not get corrupted +* by the other process. +*/ +list_for_each_entry_safe (d, t, &flist, list) { +list_del_init (&d->list); +complete_desc (d,IDXD_COMPLETE_NORMAL ); + } }int idxd_submit_desc (struct idxd_wq *wq,struct idxd_desc *desc)
drivers/dma/st_fdma.c +1 -1
@@ -874,4 +874,4 @@ MODULE_LICENSE("GPL v2");MODULE_DESCRIPTION ("STMicroelectronics FDMA engine driver" );MODULE_AUTHOR ("Ludovic.barre <[email protected]>" );MODULE_AUTHOR ("Peter Griffin <[email protected]>" ); -MODULE_ALIAS ("platform: " DRIVER_NAME ); +MODULE_ALIAS ("platform:" DRIVER_NAME );
drivers/firmware/scpi_pm_domain.c +7 -3
@@ -16,7 +16,6 @@ struct scpi_pm_domain {struct generic_pm_domain genpd;struct scpi_ops *ops;u32 domain; -char name[30 ]; };/*
@@ -110,8 +109,13 @@ static int scpi_pm_domain_probe(struct platform_device *pdev) scpi_pd->domain = i; scpi_pd->ops = scpi_ops; -sprintf (scpi_pd->name,"%pOFn.%d" , np, i); - scpi_pd->genpd.name = scpi_pd->name; + scpi_pd->genpd.name =devm_kasprintf (dev,GFP_KERNEL , +"%pOFn.%d" , np, i); +if (!scpi_pd->genpd.name) { +dev_err (dev,"Failed to allocate genpd name:%pOFn.%d\n" , + np, i); +continue ; + } scpi_pd->genpd.power_off = scpi_pd_power_off; scpi_pd->genpd.power_on = scpi_pd_power_on;
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +2 -2
@@ -3061,8 +3061,8 @@ static void gfx_v9_0_init_pg(struct amdgpu_device *adev) AMD_PG_SUPPORT_CP | AMD_PG_SUPPORT_GDS | AMD_PG_SUPPORT_RLC_SMU_HS)) { -WREG32 (mmRLC_JUMP_TABLE_RESTORE, - adev->gfx.rlc.cp_table_gpu_addr >>8 ); +WREG32_SOC15 (GC ,0 , mmRLC_JUMP_TABLE_RESTORE, + adev->gfx.rlc.cp_table_gpu_addr >>8 );gfx_v9_0_init_gfx_power_gating (adev); } }
drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c +0 -1
@@ -162,7 +162,6 @@ static void gfxhub_v1_0_init_tlb_regs(struct amdgpu_device *adev) ENABLE_ADVANCED_DRIVER_MODEL, 1); tmp =REG_SET_FIELD (tmp,MC_VM_MX_L1_TLB_CNTL ,SYSTEM_APERTURE_UNMAPPED_ACCESS ,0 ); - tmp =REG_SET_FIELD (tmp,MC_VM_MX_L1_TLB_CNTL ,ECO_BITS ,0 ); tmp =REG_SET_FIELD (tmp,MC_VM_MX_L1_TLB_CNTL ,MTYPE ,MTYPE_UC );/* XXX for emulation. */ tmp =REG_SET_FIELD (tmp,MC_VM_MX_L1_TLB_CNTL ,ATC_EN ,1 );
drivers/gpu/drm/amd/amdgpu/gfxhub_v2_0.c +0 -1
@@ -196,7 +196,6 @@ static void gfxhub_v2_0_init_tlb_regs(struct amdgpu_device *adev) ENABLE_ADVANCED_DRIVER_MODEL, 1); tmp =REG_SET_FIELD (tmp,GCMC_VM_MX_L1_TLB_CNTL ,SYSTEM_APERTURE_UNMAPPED_ACCESS ,0 ); - tmp =REG_SET_FIELD (tmp,GCMC_VM_MX_L1_TLB_CNTL ,ECO_BITS ,0 ); tmp =REG_SET_FIELD (tmp,GCMC_VM_MX_L1_TLB_CNTL ,MTYPE ,MTYPE_UC );/* UC, uncached */
drivers/gpu/drm/amd/amdgpu/gfxhub_v2_1.c +0 -1
@@ -197,7 +197,6 @@ static void gfxhub_v2_1_init_tlb_regs(struct amdgpu_device *adev) ENABLE_ADVANCED_DRIVER_MODEL, 1); tmp =REG_SET_FIELD (tmp,GCMC_VM_MX_L1_TLB_CNTL ,SYSTEM_APERTURE_UNMAPPED_ACCESS ,0 ); - tmp =REG_SET_FIELD (tmp,GCMC_VM_MX_L1_TLB_CNTL ,ECO_BITS ,0 ); tmp =REG_SET_FIELD (tmp,GCMC_VM_MX_L1_TLB_CNTL ,MTYPE ,MTYPE_UC );/* UC, uncached */
drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c +0 -1
@@ -145,7 +145,6 @@ static void mmhub_v1_0_init_tlb_regs(struct amdgpu_device *adev) ENABLE_ADVANCED_DRIVER_MODEL, 1); tmp =REG_SET_FIELD (tmp,MC_VM_MX_L1_TLB_CNTL ,SYSTEM_APERTURE_UNMAPPED_ACCESS ,0 ); - tmp =REG_SET_FIELD (tmp,MC_VM_MX_L1_TLB_CNTL ,ECO_BITS ,0 ); tmp =REG_SET_FIELD (tmp,MC_VM_MX_L1_TLB_CNTL ,MTYPE ,MTYPE_UC );/* XXX for emulation. */ tmp =REG_SET_FIELD (tmp,MC_VM_MX_L1_TLB_CNTL ,ATC_EN ,1 );
drivers/gpu/drm/amd/amdgpu/mmhub_v1_7.c +0 -1
@@ -165,7 +165,6 @@ static void mmhub_v1_7_init_tlb_regs(struct amdgpu_device *adev) ENABLE_ADVANCED_DRIVER_MODEL, 1); tmp =REG_SET_FIELD (tmp,MC_VM_MX_L1_TLB_CNTL ,SYSTEM_APERTURE_UNMAPPED_ACCESS ,0 ); - tmp =REG_SET_FIELD (tmp,MC_VM_MX_L1_TLB_CNTL ,ECO_BITS ,0 ); tmp =REG_SET_FIELD (tmp,MC_VM_MX_L1_TLB_CNTL ,MTYPE ,MTYPE_UC );/* XXX for emulation. */ tmp =REG_SET_FIELD (tmp,MC_VM_MX_L1_TLB_CNTL ,ATC_EN ,1 );
drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.c +0 -1
@@ -269,7 +269,6 @@ static void mmhub_v2_0_init_tlb_regs(struct amdgpu_device *adev) ENABLE_ADVANCED_DRIVER_MODEL, 1); tmp =REG_SET_FIELD (tmp,MMMC_VM_MX_L1_TLB_CNTL ,SYSTEM_APERTURE_UNMAPPED_ACCESS ,0 ); - tmp =REG_SET_FIELD (tmp,MMMC_VM_MX_L1_TLB_CNTL ,ECO_BITS ,0 ); tmp =REG_SET_FIELD (tmp,MMMC_VM_MX_L1_TLB_CNTL ,MTYPE ,MTYPE_UC );/* UC, uncached */
drivers/gpu/drm/amd/amdgpu/mmhub_v2_3.c +0 -1
@@ -194,7 +194,6 @@ static void mmhub_v2_3_init_tlb_regs(struct amdgpu_device *adev) ENABLE_ADVANCED_DRIVER_MODEL, 1); tmp =REG_SET_FIELD (tmp,MMMC_VM_MX_L1_TLB_CNTL ,SYSTEM_APERTURE_UNMAPPED_ACCESS ,0 ); - tmp =REG_SET_FIELD (tmp,MMMC_VM_MX_L1_TLB_CNTL ,ECO_BITS ,0 ); tmp =REG_SET_FIELD (tmp,MMMC_VM_MX_L1_TLB_CNTL ,MTYPE ,MTYPE_UC );/* UC, uncached */
drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c +0 -2
@@ -189,8 +189,6 @@ static void mmhub_v9_4_init_tlb_regs(struct amdgpu_device *adev, int hubid) ENABLE_ADVANCED_DRIVER_MODEL, 1); tmp =REG_SET_FIELD (tmp,VMSHAREDVC0_MC_VM_MX_L1_TLB_CNTL ,SYSTEM_APERTURE_UNMAPPED_ACCESS ,0 ); - tmp =REG_SET_FIELD (tmp,VMSHAREDVC0_MC_VM_MX_L1_TLB_CNTL , -ECO_BITS ,0 ); tmp =REG_SET_FIELD (tmp,VMSHAREDVC0_MC_VM_MX_L1_TLB_CNTL ,MTYPE ,MTYPE_UC );/* XXX for emulation. */ tmp = REG_SET_FIELD(tmp, VMSHAREDVC0_MC_VM_MX_L1_TLB_CNTL,
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_init.c +1 -0
@@ -100,6 +100,7 @@ static const struct hw_sequencer_funcs dcn31_funcs = { .z10_save_init = dcn31_z10_save_init, .is_abm_supported = dcn31_is_abm_supported, .set_disp_pattern_generator = dcn30_set_disp_pattern_generator, + .exit_optimized_pwr_state = dcn21_exit_optimized_pwr_state, .update_visual_confirm_color = dcn20_update_visual_confirm_color, };
drivers/gpu/drm/amd/pm/swsmu/smu12/smu_v12_0.c +3 -0
@@ -191,6 +191,9 @@ int smu_v12_0_fini_smc_tables(struct smu_context *smu)kfree (smu_table->watermarks_table); smu_table->watermarks_table =NULL ; +kfree (smu_table->gpu_metrics_table); + smu_table->gpu_metrics_table =NULL ; +return 0 ; }
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c +3 -0
@@ -197,6 +197,7 @@ int smu_v13_0_check_fw_status(struct smu_context *smu)int smu_v13_0_check_fw_version (struct smu_context *smu) { +struct amdgpu_device *adev = smu->adev;uint32_t if_version =0xff , smu_version =0xff ;uint16_t smu_major;uint8_t smu_minor, smu_debug;
@@ -209,6 +210,8 @@ int smu_v13_0_check_fw_version(struct smu_context *smu) smu_major = (smu_version >>16 ) &0xffff ; smu_minor = (smu_version >>8 ) &0xff ; smu_debug = (smu_version >>0 ) &0xff ; +if (smu->is_apu) + adev->pm.fw_version = smu_version;switch (smu->adev->asic_type) {case CHIP_ALDEBARAN :
drivers/gpu/drm/ast/ast_mode.c +4 -1
@@ -1121,7 +1121,10 @@ static void ast_crtc_reset(struct drm_crtc *crtc)if (crtc->state) crtc->funcs->atomic_destroy_state (crtc, crtc->state); -__drm_atomic_helper_crtc_reset (crtc, &ast_state->base); +if (ast_state) +__drm_atomic_helper_crtc_reset (crtc, &ast_state->base); +else +__drm_atomic_helper_crtc_reset (crtc,NULL ); } static struct drm_crtc_state *
drivers/gpu/drm/drm_fb_helper.c +7 -1
@@ -1743,7 +1743,13 @@ void drm_fb_helper_fill_info(struct fb_info *info, sizes->fb_width, sizes->fb_height); info->par = fb_helper; -snprintf (info->fix.id,sizeof (info->fix.id),"%s" , +/* +* The DRM drivers fbdev emulation device name can be confusing if the +* driver name also has a "drm" suffix on it. Leading to names such as +* "simpledrmdrmfb" in /proc/fb. Unfortunately, it's an uAPI and can't +* be changed due user-space tools (e.g: pm-utils) matching against it. +*/ +snprintf (info->fix.id,sizeof (info->fix.id),"%sdrmfb" , fb_helper->dev->driver->name); }
drivers/gpu/drm/i915/display/g4x_hdmi.c +1 -0
@@ -584,6 +584,7 @@ void g4x_hdmi_init(struct drm_i915_private *dev_priv,else intel_encoder->enable = g4x_enable_hdmi; } + intel_encoder->shutdown = intel_hdmi_encoder_shutdown; intel_encoder->type =INTEL_OUTPUT_HDMI ; intel_encoder->power_domain =intel_port_to_power_domain (port);
drivers/gpu/drm/i915/display/intel_ddi.c +1 -0
@@ -4432,6 +4432,7 @@ static void intel_ddi_encoder_shutdown(struct intel_encoder *encoder)enum phy phy =intel_port_to_phy (i915, encoder->port);intel_dp_encoder_shutdown (encoder); +intel_hdmi_encoder_shutdown (encoder);if (!intel_phy_is_tc (i915, phy))return ;
drivers/gpu/drm/i915/display/intel_dmc.c +1 -1
@@ -606,7 +606,7 @@ static void parse_dmc_fw(struct drm_i915_private *dev_priv,continue ; offset = readcount + dmc->dmc_info[id].dmc_offset *4 ; -if (fw->size - offset <0 ) { +if (offset > fw->size) {drm_err (&dev_priv->drm,"Reading beyond the fw_size\n" );continue ; }
drivers/gpu/drm/i915/display/intel_hdmi.c +21 -11
@@ -53,21 +53,20 @@#include "intel_panel.h" #include "intel_snps_phy.h" -static struct drm_device *intel_hdmi_to_dev (struct intel_hdmi *intel_hdmi) +static struct drm_i915_private *intel_hdmi_to_i915 (struct intel_hdmi *intel_hdmi) { -return hdmi_to_dig_port (intel_hdmi)->base.base.dev; +return to_i915 (hdmi_to_dig_port (intel_hdmi)->base.base.dev); }static void assert_hdmi_port_disabled (struct intel_hdmi *intel_hdmi) { -struct drm_device *dev =intel_hdmi_to_dev (intel_hdmi); -struct drm_i915_private *dev_priv =to_i915 (dev); +struct drm_i915_private *dev_priv =intel_hdmi_to_i915 (intel_hdmi);u32 enabled_bits; enabled_bits =HAS_DDI (dev_priv) ?DDI_BUF_CTL_ENABLE :SDVO_ENABLE ; -drm_WARN (dev, +drm_WARN (&dev_priv->drm,intel_de_read (dev_priv, intel_hdmi->hdmi_reg) & enabled_bits,"HDMI port enabled, expecting disabled\n" ); }
@@ -1246,13 +1245,14 @@ static void hsw_set_infoframes(struct intel_encoder *encoder,void intel_dp_dual_mode_set_tmds_output (struct intel_hdmi *hdmi,bool enable) { -struct drm_i915_private *dev_priv =to_i915 (intel_hdmi_to_dev (hdmi)); -struct i2c_adapter *adapter = -intel_gmbus_get_adapter (dev_priv, hdmi->ddc_bus); +struct drm_i915_private *dev_priv =intel_hdmi_to_i915 (hdmi); +struct i2c_adapter *adapter;if (hdmi->dp_dual_mode.type <DRM_DP_DUAL_MODE_TYPE2_DVI )return ; + adapter =intel_gmbus_get_adapter (dev_priv, hdmi->ddc_bus); +drm_dbg_kms (&dev_priv->drm,"%s DP dual mode adaptor TMDS output\n" , enable ?"Enabling" :"Disabling" );
@@ -1830,7 +1830,7 @@ hdmi_port_clock_valid(struct intel_hdmi *hdmi, int clock, bool respect_downstream_limits, bool has_hdmi_sink) { - struct drm_i915_private *dev_priv = to_i915(intel_hdmi_to_dev(hdmi)); + struct drm_i915_private *dev_priv = intel_hdmi_to_i915(hdmi);if (clock <25000 )return MODE_CLOCK_LOW ;
@@ -1946,8 +1946,7 @@ intel_hdmi_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode) {struct intel_hdmi *hdmi =intel_attached_hdmi (to_intel_connector (connector)); -struct drm_device *dev =intel_hdmi_to_dev (hdmi); -struct drm_i915_private *dev_priv =to_i915 (dev); +struct drm_i915_private *dev_priv =intel_hdmi_to_i915 (hdmi);enum drm_mode_status status;int clock = mode->clock;int max_dotclk =to_i915 (connector->dev)->max_dotclk_freq;
@@ -2260,6 +2259,17 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,return 0 ; } +void intel_hdmi_encoder_shutdown (struct intel_encoder *encoder) +{ +struct intel_hdmi *intel_hdmi =enc_to_intel_hdmi (encoder); + +/* +* Give a hand to buggy BIOSen which forget to turn +* the TMDS output buffers back on after a reboot. +*/ +intel_dp_dual_mode_set_tmds_output (intel_hdmi, true); +} +static void intel_hdmi_unset_edid (struct drm_connector *connector) {
drivers/gpu/drm/i915/display/intel_hdmi.h +1 -0
@@ -28,6 +28,7 @@ void intel_hdmi_init_connector(struct intel_digital_port *dig_port,int intel_hdmi_compute_config (struct intel_encoder *encoder,struct intel_crtc_state *pipe_config,struct drm_connector_state *conn_state); +void intel_hdmi_encoder_shutdown (struct intel_encoder *encoder); bool intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder, struct drm_connector *connector, bool high_tmds_clock_ratio,
drivers/gpu/drm/tiny/simpledrm.c +1 -1
@@ -458,7 +458,7 @@ static struct drm_display_mode simpledrm_mode(unsigned int width, {struct drm_display_mode mode = {SIMPLEDRM_MODE (width, height) }; - mode.clock =60 /* Hz */ * mode.hdisplay * mode.vdisplay; + mode.clock = mode.hdisplay * mode.vdisplay *60 /1000 /* kHz */ ;drm_mode_set_name (&mode);return mode;
drivers/md/persistent-data/dm-btree-remove.c +1 -1
@@ -423,9 +423,9 @@ static int rebalance_children(struct shadow_spine *s,memcpy (n,dm_block_data (child),dm_bm_block_size (dm_tm_get_bm (info->tm))); -dm_tm_unlock (info->tm, child);dm_tm_dec (info->tm,dm_block_location (child)); +dm_tm_unlock (info->tm, child);return 0 ; }
drivers/media/usb/dvb-usb-v2/mxl111sf.c +14 -2
@@ -931,8 +931,6 @@ static int mxl111sf_init(struct dvb_usb_device *d) .len = sizeof(eeprom), .buf = eeprom }, }; -mutex_init (&state->msg_lock); - ret =get_chip_info (state);if (mxl_fail (ret))pr_err ("failed to get chip info during probe" );
@@ -1074,6 +1072,14 @@ static int mxl111sf_get_stream_config_dvbt(struct dvb_frontend *fe,return 0 ; } +static int mxl111sf_probe (struct dvb_usb_device *dev) +{ +struct mxl111sf_state *state =d_to_priv (dev); + +mutex_init (&state->msg_lock); +return 0 ; +} +static struct dvb_usb_device_properties mxl111sf_props_dvbt = { .driver_name =KBUILD_MODNAME , .owner =THIS_MODULE ,
@@ -1083,6 +1089,7 @@ static struct dvb_usb_device_properties mxl111sf_props_dvbt = { .generic_bulk_ctrl_endpoint = 0x02, .generic_bulk_ctrl_endpoint_response = 0x81, + .probe = mxl111sf_probe, .i2c_algo = &mxl111sf_i2c_algo, .frontend_attach = mxl111sf_frontend_attach_dvbt, .tuner_attach = mxl111sf_attach_tuner,
@@ -1124,6 +1131,7 @@ static struct dvb_usb_device_properties mxl111sf_props_atsc = { .generic_bulk_ctrl_endpoint = 0x02, .generic_bulk_ctrl_endpoint_response = 0x81, + .probe = mxl111sf_probe, .i2c_algo = &mxl111sf_i2c_algo, .frontend_attach = mxl111sf_frontend_attach_atsc, .tuner_attach = mxl111sf_attach_tuner,
@@ -1165,6 +1173,7 @@ static struct dvb_usb_device_properties mxl111sf_props_mh = { .generic_bulk_ctrl_endpoint = 0x02, .generic_bulk_ctrl_endpoint_response = 0x81, + .probe = mxl111sf_probe, .i2c_algo = &mxl111sf_i2c_algo, .frontend_attach = mxl111sf_frontend_attach_mh, .tuner_attach = mxl111sf_attach_tuner,
@@ -1233,6 +1242,7 @@ static struct dvb_usb_device_properties mxl111sf_props_atsc_mh = { .generic_bulk_ctrl_endpoint = 0x02, .generic_bulk_ctrl_endpoint_response = 0x81, + .probe = mxl111sf_probe, .i2c_algo = &mxl111sf_i2c_algo, .frontend_attach = mxl111sf_frontend_attach_atsc_mh, .tuner_attach = mxl111sf_attach_tuner,
@@ -1311,6 +1321,7 @@ static struct dvb_usb_device_properties mxl111sf_props_mercury = { .generic_bulk_ctrl_endpoint = 0x02, .generic_bulk_ctrl_endpoint_response = 0x81, + .probe = mxl111sf_probe, .i2c_algo = &mxl111sf_i2c_algo, .frontend_attach = mxl111sf_frontend_attach_mercury, .tuner_attach = mxl111sf_attach_tuner,
@@ -1381,6 +1392,7 @@ static struct dvb_usb_device_properties mxl111sf_props_mercury_mh = { .generic_bulk_ctrl_endpoint = 0x02, .generic_bulk_ctrl_endpoint_response = 0x81, + .probe = mxl111sf_probe, .i2c_algo = &mxl111sf_i2c_algo, .frontend_attach = mxl111sf_frontend_attach_mercury_mh, .tuner_attach = mxl111sf_attach_tuner,
drivers/net/can/m_can/m_can.c +18 -6
@@ -1494,20 +1494,32 @@ static int m_can_dev_setup(struct m_can_classdev *cdev)case 30 :/* CAN_CTRLMODE_FD_NON_ISO is fixed with M_CAN IP v3.0.x */ can_set_static_ctrlmode (dev,CAN_CTRLMODE_FD_NON_ISO ); - cdev->can.bittiming_const = &m_can_bittiming_const_30X; - cdev->can.data_bittiming_const = &m_can_data_bittiming_const_30X; + cdev->can.bittiming_const = cdev->bit_timing ? + cdev->bit_timing : &m_can_bittiming_const_30X; + + cdev->can.data_bittiming_const = cdev->data_timing ? + cdev->data_timing : + &m_can_data_bittiming_const_30X;break ;case 31 :/* CAN_CTRLMODE_FD_NON_ISO is fixed with M_CAN IP v3.1.x */ can_set_static_ctrlmode (dev,CAN_CTRLMODE_FD_NON_ISO ); - cdev->can.bittiming_const = &m_can_bittiming_const_31X; - cdev->can.data_bittiming_const = &m_can_data_bittiming_const_31X; + cdev->can.bittiming_const = cdev->bit_timing ? + cdev->bit_timing : &m_can_bittiming_const_31X; + + cdev->can.data_bittiming_const = cdev->data_timing ? + cdev->data_timing : + &m_can_data_bittiming_const_31X;break ;case 32 :case 33 :/* Support both MCAN version v3.2.x and v3.3.0 */ - cdev->can.bittiming_const = &m_can_bittiming_const_31X; - cdev->can.data_bittiming_const = &m_can_data_bittiming_const_31X; + cdev->can.bittiming_const = cdev->bit_timing ? + cdev->bit_timing : &m_can_bittiming_const_31X; + + cdev->can.data_bittiming_const = cdev->data_timing ? + cdev->data_timing : + &m_can_data_bittiming_const_31X; cdev->can.ctrlmode_supported |= (m_can_niso_supported(cdev) ?
drivers/net/can/m_can/m_can.h +3 -0
@@ -85,6 +85,9 @@ struct m_can_classdev {struct sk_buff *tx_skb;struct phy *transceiver; +const struct can_bittiming_const *bit_timing; +const struct can_bittiming_const *data_timing; +struct m_can_ops *ops;int version;
drivers/net/can/m_can/m_can_pci.c +44 -4
83 lines not on this page · raw message
drivers/net/dsa/mv88e6xxx/chip.c +4 -0
@@ -769,6 +769,10 @@ static void mv88e6xxx_mac_link_down(struct dsa_switch *ds, int port,if ((!mv88e6xxx_port_ppu_updates (chip, port) || mode ==MLO_AN_FIXED ) && ops->port_sync_link) err = ops->port_sync_link (chip, port, mode, false); + +if (!err && ops->port_set_speed_duplex) + err = ops->port_set_speed_duplex (chip, port,SPEED_UNFORCED , +DUPLEX_UNFORCED );mv88e6xxx_reg_unlock (chip);if (err)
drivers/net/dsa/mv88e6xxx/port.c +2 -2
@@ -283,7 +283,7 @@ static int mv88e6xxx_port_set_speed_duplex(struct mv88e6xxx_chip *chip,if (err)return err; -if (speed) +if (speed !=SPEED_UNFORCED )dev_dbg (chip->dev,"p%d: Speed set to %d Mbps\n" , port, speed);else dev_dbg (chip->dev,"p%d: Speed unforced\n" , port);
@@ -516,7 +516,7 @@ int mv88e6393x_port_set_speed_duplex(struct mv88e6xxx_chip *chip, int port,if (err)return err; -if (speed) +if (speed !=SPEED_UNFORCED )dev_dbg (chip->dev,"p%d: Speed set to %d Mbps\n" , port, speed);else dev_dbg (chip->dev,"p%d: Speed unforced\n" , port);
drivers/net/ethernet/broadcom/bcmsysport.c +4 -1
@@ -1309,11 +1309,11 @@ static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb,struct bcm_sysport_priv *priv =netdev_priv (dev);struct device *kdev = &priv->pdev->dev;struct bcm_sysport_tx_ring *ring; +unsigned long flags, desc_flags;struct bcm_sysport_cb *cb;struct netdev_queue *txq;u32 len_status, addr_lo;unsigned int skb_len; -unsigned long flags;dma_addr_t mapping;u16 queue;int ret;
@@ -1373,8 +1373,10 @@ static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb, ring->desc_count--;/* Ports are latched, so write upper address first */ +spin_lock_irqsave (&priv->desc_lock, desc_flags);tdma_writel (priv, len_status,TDMA_WRITE_PORT_HI (ring->index));tdma_writel (priv, addr_lo,TDMA_WRITE_PORT_LO (ring->index)); +spin_unlock_irqrestore (&priv->desc_lock, desc_flags);/* Check ring space and update SW control flow */ if (ring->desc_count ==0 )
@@ -2013,6 +2015,7 @@ static int bcm_sysport_open(struct net_device *dev) }/* Initialize both hardware and software ring */ +spin_lock_init (&priv->desc_lock);for (i =0 ; i < dev->num_tx_queues; i++) { ret =bcm_sysport_init_tx_ring (priv, i);if (ret) {
drivers/net/ethernet/broadcom/bcmsysport.h +1 -0
@@ -711,6 +711,7 @@ struct bcm_sysport_priv {int wol_irq;/* Transmit rings */ +spinlock_t desc_lock;struct bcm_sysport_tx_ring *tx_rings;/* Receive queue */
drivers/net/ethernet/hisilicon/hns3/hnae3.h +2 -0
@@ -830,6 +830,8 @@ struct hnae3_handle {u8 netdev_flags;struct dentry *hnae3_dbgfs; +/* protects concurrent contention between debugfs commands */ +struct mutex dbgfs_lock;/* Network interface message level enabled bits */ u32 msg_enable;
drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c +14 -6
@@ -1021,6 +1021,7 @@ static ssize_t hns3_dbg_read(struct file *filp, char __user *buffer,if (ret)return ret; +mutex_lock (&handle->dbgfs_lock); save_buf = &hns3_dbg_cmd[index].buf; if (!test_bit(HNS3_NIC_STATE_INITED, &priv->state) ||
@@ -1033,15 +1034,15 @@ static ssize_t hns3_dbg_read(struct file *filp, char __user *buffer, read_buf = *save_buf; }else { read_buf =kvzalloc (hns3_dbg_cmd[index].buf_len,GFP_KERNEL ); -if (!read_buf) -return -ENOMEM ; +if (!read_buf) { + ret = -ENOMEM ; + goto out; + }/* save the buffer addr until the last read operation */ *save_buf = read_buf; - } -/* get data ready for the first time to read */ -if (!*ppos) { +/* get data ready for the first time to read */ ret =hns3_dbg_read_cmd (dbg_data, hns3_dbg_cmd[index].cmd, read_buf, hns3_dbg_cmd[index].buf_len);if (ret)
@@ -1050,8 +1051,10 @@ static ssize_t hns3_dbg_read(struct file *filp, char __user *buffer, size =simple_read_from_buffer (buffer, count, ppos, read_buf,strlen (read_buf)); -if (size >0 ) +if (size >0 ) { +mutex_unlock (&handle->dbgfs_lock);return size; + } out:/* free the buffer for the last read operation */
@@ -1060,6 +1063,7 @@ static ssize_t hns3_dbg_read(struct file *filp, char __user *buffer, *save_buf =NULL ; } +mutex_unlock (&handle->dbgfs_lock);return ret; }
@@ -1132,6 +1136,8 @@ int hns3_dbg_init(struct hnae3_handle *handle)debugfs_create_dir (hns3_dbg_dentry[i].name, handle->hnae3_dbgfs); +mutex_init (&handle->dbgfs_lock); +for (i =0 ; i <ARRAY_SIZE (hns3_dbg_cmd); i++) { if ((hns3_dbg_cmd[i].cmd == HNAE3_DBG_CMD_TM_NODES && ae_dev->dev_version <= HNAE3_DEVICE_VERSION_V2) ||
@@ -1158,6 +1164,7 @@ int hns3_dbg_init(struct hnae3_handle *handle)return 0 ; out: +mutex_destroy (&handle->dbgfs_lock);debugfs_remove_recursive (handle->hnae3_dbgfs); handle->hnae3_dbgfs =NULL ;return ret;
@@ -1173,6 +1180,7 @@ void hns3_dbg_uninit(struct hnae3_handle *handle) hns3_dbg_cmd[i].buf =NULL ; } +mutex_destroy (&handle->dbgfs_lock);debugfs_remove_recursive (handle->hnae3_dbgfs); handle->hnae3_dbgfs =NULL ; }
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_mbx.c +2 -1
@@ -114,7 +114,8 @@ int hclgevf_send_mbx_msg(struct hclgevf_dev *hdev,memcpy (&req->msg, send_msg,sizeof (struct hclge_vf_to_pf_msg )); -trace_hclge_vf_mbx_send (hdev, req); +if (test_bit (HCLGEVF_STATE_NIC_REGISTERED , &hdev->state)) +trace_hclge_vf_mbx_send (hdev, req);/* synchronous send */ if (need_resp) {
drivers/net/ethernet/intel/ice/ice_ptp.c +5 -8
@@ -459,7 +459,7 @@ static int ice_ptp_adjfine(struct ptp_clock_info *info, long scaled_ppm) scaled_ppm = -scaled_ppm; } -while ((u64 )scaled_ppm >div_u64 (U64_MAX , incval)) { +while ((u64 )scaled_ppm >div64_u64 (U64_MAX , incval)) {/* handle overflow by scaling down the scaled_ppm and * the divisor, losing some precision */
@@ -1182,19 +1182,16 @@ static void ice_ptp_tx_tstamp_work(struct kthread_work *work)if (err)continue ; -/* Check if the timestamp is valid */ -if (!(raw_tstamp &ICE_PTP_TS_VALID )) +/* Check if the timestamp is invalid or stale */ +if (!(raw_tstamp &ICE_PTP_TS_VALID ) || + raw_tstamp == tx->tstamps[idx].cached_tstamp)continue ; -/* clear the timestamp register, so that it won't show valid -* again when re-used. -*/ -ice_clear_phy_tstamp (hw, tx->quad, phy_idx); -/* The timestamp is valid, so we'll go ahead and clear this * index and then send the timestamp up to the stack. */ spin_lock (&tx->lock); + tx->tstamps[idx].cached_tstamp = raw_tstamp;clear_bit (idx, tx->in_use); skb = tx->tstamps[idx].skb; tx->tstamps[idx].skb =NULL ;
drivers/net/ethernet/intel/ice/ice_ptp.h +6 -0
@@ -46,15 +46,21 @@ struct ice_perout_channel {* struct ice_tx_tstamp - Tracking for a single Tx timestamp * @skb: pointer to the SKB for this timestamp request * @start: jiffies when the timestamp was first requested +* @cached_tstamp: last read timestamp * * This structure tracks a single timestamp request. The SKB pointer is * provided when initiating a request. The start time is used to ensure that * we discard old requests that were not fulfilled within a 2 second time * window. +* Timestamp values in the PHY are read only and do not get cleared except at +* hardware reset or when a new timestamp value is captured. The cached_tstamp +* field is used to detect the case where a new timestamp has not yet been +* captured, ensuring that we avoid sending stale timestamp data to the stack. */ struct ice_tx_tstamp {struct sk_buff *skb;unsigned long start; +u64 cached_tstamp; };/**
drivers/net/ethernet/intel/igb/igb_main.c +14 -14
@@ -7641,6 +7641,20 @@ static int igb_set_vf_mac_filter(struct igb_adapter *adapter, const int vf,struct vf_mac_filter *entry =NULL ;int ret =0 ; +if ((vf_data->flags &IGB_VF_FLAG_PF_SET_MAC ) && + !vf_data->trusted) { +dev_warn (&pdev->dev, +"VF %d requested MAC filter but is administratively denied\n" , + vf); +return -EINVAL ; + } +if (!is_valid_ether_addr (addr)) { +dev_warn (&pdev->dev, +"VF %d attempted to set invalid MAC filter\n" , + vf); +return -EINVAL ; + } +switch (info) {case E1000_VF_MAC_FILTER_CLR :/* remove all unicast MAC filters related to the current VF */
@@ -7654,20 +7668,6 @@ static int igb_set_vf_mac_filter(struct igb_adapter *adapter, const int vf, }break ;case E1000_VF_MAC_FILTER_ADD : -if ((vf_data->flags &IGB_VF_FLAG_PF_SET_MAC ) && - !vf_data->trusted) { -dev_warn (&pdev->dev, -"VF %d requested MAC filter but is administratively denied\n" , - vf); -return -EINVAL ; - } -if (!is_valid_ether_addr (addr)) { -dev_warn (&pdev->dev, -"VF %d attempted to set invalid MAC filter\n" , - vf); -return -EINVAL ; - } -/* try to find empty slot in the list */ list_for_each (pos, &adapter->vf_macs.l) { entry = list_entry(pos, struct vf_mac_filter, l);
drivers/net/ethernet/intel/igbvf/netdev.c +1 -0
@@ -2861,6 +2861,7 @@ static int igbvf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)return 0 ; err_hw_init: +netif_napi_del (&adapter->rx_ring->napi);kfree (adapter->tx_ring);kfree (adapter->rx_ring); err_sw_init:
drivers/net/ethernet/intel/igc/igc_i225.c +1 -1
@@ -636,7 +636,7 @@ s32 igc_set_ltr_i225(struct igc_hw *hw, bool link) ltrv =rd32 (IGC_LTRMAXV );if (ltr_max != (ltrv &IGC_LTRMAXV_LTRV_MASK )) { ltrv =IGC_LTRMAXV_LSNP_REQ | ltr_max | - (scale_min <<IGC_LTRMAXV_SCALE_SHIFT ); + (scale_max <<IGC_LTRMAXV_SCALE_SHIFT );wr32 (IGC_LTRMAXV , ltrv); } }
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +4 -0
@@ -5526,6 +5526,10 @@ static int ixgbe_non_sfp_link_config(struct ixgbe_hw *hw)if (!speed && hw->mac.ops.get_link_capabilities) { ret = hw->mac.ops.get_link_capabilities (hw, &speed, &autoneg); +/* remove NBASE-T speeds from default autonegotiation +* to accommodate broken network switches in the field +* which cannot cope with advertised NBASE-T speeds +*/ speed &= ~(IXGBE_LINK_SPEED_5GB_FULL |IXGBE_LINK_SPEED_2_5GB_FULL ); }
drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c +3 -0
@@ -3405,6 +3405,9 @@ static s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw)/* flush pending Tx transactions */ ixgbe_clear_tx_pending (hw); +/* set MDIO speed before talking to the PHY in case it's the 1st time */ +ixgbe_set_mdio_speed (hw); +/* PHY ops must be identified and initialized prior to reset */ status = hw->phy.ops.init (hw); if (status == IXGBE_ERR_SFP_NOT_SUPPORTED ||
drivers/net/ethernet/sfc/ef100_nic.c +3 -0
@@ -609,6 +609,9 @@ static size_t ef100_update_stats(struct efx_nic *efx,ef100_common_stat_mask (mask);ef100_ethtool_stat_mask (mask); +if (!mc_stats) +return 0 ; +efx_nic_copy_stats (efx, mc_stats);efx_nic_update_stats (ef100_stat_desc,EF100_STAT_COUNT , mask, stats, mc_stats, false);
drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c +3 -1
@@ -33,6 +33,7 @@ struct rk_gmac_ops {void (*set_rgmii_speed)(struct rk_priv_data *bsp_priv,int speed);void (*set_rmii_speed)(struct rk_priv_data *bsp_priv,int speed);void (*integrated_phy_powerup)(struct rk_priv_data *bsp_priv); +bool regs_valid;u32 regs[]; };
@@ -1092,6 +1093,7 @@ static const struct rk_gmac_ops rk3568_ops = { .set_to_rmii = rk3568_set_to_rmii, .set_rgmii_speed = rk3568_set_gmac_speed, .set_rmii_speed = rk3568_set_gmac_speed, + .regs_valid = true, .regs = {0xfe2a0000 ,/* gmac0 */ 0xfe010000, /* gmac1 */
@@ -1383,7 +1385,7 @@ static struct rk_priv_data *rk_gmac_setup(struct platform_device *pdev,* to be distinguished. */ res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); -if (res) { +if (res && ops->regs_valid) {int i =0 ;while (ops->regs[i]) {
drivers/net/ethernet/stmicro/stmmac/stmmac.h +17 -0
@@ -172,6 +172,19 @@ struct stmmac_flow_entry {int is_l4; }; +/* Rx Frame Steering */ +enum stmmac_rfs_type { +STMMAC_RFS_T_VLAN , +STMMAC_RFS_T_MAX , +}; + +struct stmmac_rfs_entry { +unsigned long cookie; +int in_use; +int type; +int tc; +}; +struct stmmac_priv {/* Frequently used values are kept adjacent for cache effect */ u32 tx_coal_frames[MTL_MAX_TX_QUEUES ];
@@ -289,6 +302,10 @@ struct stmmac_priv {struct stmmac_tc_entry *tc_entries;unsigned int flow_entries_max;struct stmmac_flow_entry *flow_entries; +unsigned int rfs_entries_max[STMMAC_RFS_T_MAX ]; +unsigned int rfs_entries_cnt[STMMAC_RFS_T_MAX ]; +unsigned int rfs_entries_total; +struct stmmac_rfs_entry *rfs_entries;/* Pulse Per Second output */ struct stmmac_pps_cfg pps[STMMAC_PPS_MAX ];
drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c +73 -13
136 lines not on this page · raw message
drivers/net/netdevsim/bpf.c +1 -0
@@ -514,6 +514,7 @@ nsim_bpf_map_alloc(struct netdevsim *ns, struct bpf_offloaded_map *offmap) goto err_free; key = nmap->entry[i].key; *key = i; +memset (nmap->entry[i].value,0 , offmap->map.value_size); } }
drivers/net/netdevsim/ethtool.c +4 -1
@@ -77,7 +77,10 @@ static int nsim_set_ringparam(struct net_device *dev, {struct netdevsim *ns =netdev_priv (dev); -memcpy (&ns->ethtool.ring, ring,sizeof (ns->ethtool.ring)); + ns->ethtool.ring.rx_pending = ring->rx_pending; + ns->ethtool.ring.rx_jumbo_pending = ring->rx_jumbo_pending; + ns->ethtool.ring.rx_mini_pending = ring->rx_mini_pending; + ns->ethtool.ring.tx_pending = ring->tx_pending;return 0 ; }
drivers/net/wireless/intel/iwlwifi/mvm/tx.c +3 -2
@@ -268,17 +268,18 @@ static u32 iwl_mvm_get_tx_rate(struct iwl_mvm *mvm,int rate_idx =-1 ;u8 rate_plcp;u32 rate_flags =0 ; -struct iwl_mvm_sta *mvmsta =iwl_mvm_sta_from_mac80211 (sta);/* info->control is only relevant for non HW rate control */ if (!ieee80211_hw_check (mvm->hw,HAS_RATE_CONTROL )) { +struct iwl_mvm_sta *mvmsta =iwl_mvm_sta_from_mac80211 (sta); +/* HT rate doesn't make sense for a non data frame */ WARN_ONCE (info->control.rates[0 ].flags &IEEE80211_TX_RC_MCS && !ieee80211_is_data (fc),"Got a HT rate (flags:0x%x/mcs:%d/fc:0x%x/state:%d) for a non data frame\n" , info->control.rates[0 ].flags, info->control.rates[0 ].idx, -le16_to_cpu (fc), mvmsta->sta_state); +le16_to_cpu (fc), sta ? mvmsta->sta_state :-1 ); rate_idx = info->control.rates[0 ].idx; }
drivers/net/xen-netback/common.h +1 -0
@@ -203,6 +203,7 @@ struct xenvif_queue { /* Per-queue data for xenvif */unsigned int rx_queue_max;unsigned int rx_queue_len;unsigned long last_rx_time; +unsigned int rx_slots_needed;bool stalled;struct xenvif_copy_state rx_copy;
drivers/net/xen-netback/rx.c +49 -28
129 lines not on this page · raw message
drivers/net/xen-netfront.c +94 -31
250 lines not on this page · raw message
drivers/pci/msi.c +11 -4
@@ -721,9 +721,6 @@ static int msix_capability_init(struct pci_dev *dev, struct msix_entry *entries, goto out_disable; } -/* Ensure that all table entries are masked. */ -msix_mask_all (base, tsize); - ret =msix_setup_entries (dev, base, entries, nvec, affd);if (ret) goto out_disable;
@@ -750,6 +747,16 @@ static int msix_capability_init(struct pci_dev *dev, struct msix_entry *entries,/* Set MSI-X enabled bits and unmask the function */ pci_intx_for_msi (dev,0 ); dev->msix_enabled =1 ; + +/* +* Ensure that all table entries are masked to prevent +* stale entries from firing in a crash kernel. +* +* Done late to deal with a broken Marvell NVME device +* which takes the MSI-X mask bits into account even +* when MSI-X is disabled, which prevents MSI delivery. +*/ +msix_mask_all (base, tsize);pci_msix_clear_and_set_ctrl (dev,PCI_MSIX_FLAGS_MASKALL ,0 );pcibios_free_irq (dev);
@@ -776,7 +783,7 @@ static int msix_capability_init(struct pci_dev *dev, struct msix_entry *entries,free_msi_irqs (dev); out_disable: -pci_msix_clear_and_set_ctrl (dev,PCI_MSIX_FLAGS_ENABLE ,0 ); +pci_msix_clear_and_set_ctrl (dev,PCI_MSIX_FLAGS_MASKALL |PCI_MSIX_FLAGS_ENABLE ,0 );return ret; }
drivers/pinctrl/pinctrl-amd.c +26 -3
@@ -598,14 +598,14 @@ static struct irq_chip amd_gpio_irqchip = {#define PIN_IRQ_PENDING (BIT(INTERRUPT_STS_OFF) | BIT(WAKE_STS_OFF)) -static irqreturn_t amd_gpio_irq_handler (int irq,void *dev_id) +static bool do_amd_gpio_irq_handler (int irq,void *dev_id) {struct amd_gpio *gpio_dev = dev_id;struct gpio_chip *gc = &gpio_dev->gc; -irqreturn_t ret =IRQ_NONE ;unsigned int i, irqnr;unsigned long flags;u32 __iomem *regs; +bool ret = false;u32 regval;u64 status, mask;
@@ -627,6 +627,14 @@ static irqreturn_t amd_gpio_irq_handler(int irq, void *dev_id)/* Each status bit covers four pins */ for (i =0 ; i <4 ; i++) { regval =readl (regs + i); +/* caused wake on resume context for shared IRQ */ +if (irq <0 && (regval &BIT (WAKE_STS_OFF ))) { +dev_dbg (&gpio_dev->pdev->dev, +"Waking due to GPIO %d: 0x%x" , + irqnr + i, regval); +return true; + } +if (!(regval &PIN_IRQ_PENDING ) || !(regval &BIT (INTERRUPT_MASK_OFF )))continue ;
@@ -650,9 +658,12 @@ static irqreturn_t amd_gpio_irq_handler(int irq, void *dev_id) }writel (regval, regs + i);raw_spin_unlock_irqrestore (&gpio_dev->lock, flags); - ret =IRQ_HANDLED ; + ret = true; } } +/* did not cause wake on resume context for shared IRQ */ +if (irq <0 ) +return false;/* Signal EOI to the GPIO unit */ raw_spin_lock_irqsave (&gpio_dev->lock, flags);
@@ -664,6 +675,16 @@ static irqreturn_t amd_gpio_irq_handler(int irq, void *dev_id)return ret; } +static irqreturn_t amd_gpio_irq_handler (int irq,void *dev_id) +{ +return IRQ_RETVAL (do_amd_gpio_irq_handler (irq, dev_id)); +} + +static bool __maybe_unused amd_gpio_check_wake (void *dev_id) +{ +return do_amd_gpio_irq_handler (-1 , dev_id); +} +static int amd_get_groups_count (struct pinctrl_dev *pctldev) {struct amd_gpio *gpio_dev =pinctrl_dev_get_drvdata (pctldev);
@@ -1033,6 +1054,7 @@ static int amd_gpio_probe(struct platform_device *pdev) goto out2;platform_set_drvdata (pdev, gpio_dev); +acpi_register_wakeup_handler (gpio_dev->irq, amd_gpio_check_wake, gpio_dev);dev_dbg (&pdev->dev,"amd gpio driver loaded\n" );return ret;
@@ -1050,6 +1072,7 @@ static int amd_gpio_remove(struct platform_device *pdev) gpio_dev =platform_get_drvdata (pdev);gpiochip_remove (&gpio_dev->gc); +acpi_unregister_wakeup_handler (amd_gpio_check_wake, gpio_dev);return 0 ; }
drivers/reset/tegra/reset-bpmp.c +1 -8
@@ -20,7 +20,6 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc,struct tegra_bpmp *bpmp =to_tegra_bpmp (rstc);struct mrq_reset_request request;struct tegra_bpmp_message msg; -int err;memset (&request,0 ,sizeof (request)); request.cmd = command;
@@ -31,13 +30,7 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc, msg.tx.data = &request; msg.tx.size =sizeof (request); - err =tegra_bpmp_transfer (bpmp, &msg); -if (err) -return err; -if (msg.rx.ret) -return -EINVAL ; - -return 0 ; +return tegra_bpmp_transfer (bpmp, &msg); } static int tegra_bpmp_reset_module(struct reset_controller_dev *rstc,
drivers/scsi/scsi_debug.c +25 -17
137 lines not on this page · raw message
drivers/scsi/ufs/ufshcd.c +9 -3
@@ -8477,7 +8477,7 @@ static int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,struct scsi_sense_hdr sshdr;struct scsi_device *sdp;unsigned long flags; -int ret; +int ret, retries;spin_lock_irqsave (hba->host->host_lock, flags); sdp = hba->sdev_ufs_device;
@@ -8510,8 +8510,14 @@ static int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,* callbacks hence set the RQF_PM flag so that it doesn't resume the * already suspended childs. */ - ret =scsi_execute (sdp, cmd,DMA_NONE ,NULL ,0 ,NULL , &sshdr, -START_STOP_TIMEOUT ,0 ,0 ,RQF_PM ,NULL ); +for (retries =3 ; retries >0 ; --retries) { + ret =scsi_execute (sdp, cmd,DMA_NONE ,NULL ,0 ,NULL , &sshdr, +START_STOP_TIMEOUT ,0 ,0 ,RQF_PM ,NULL ); +if (!scsi_status_is_check_condition (ret) || + !scsi_sense_valid (&sshdr) || + sshdr.sense_key !=UNIT_ATTENTION ) +break ; + }if (ret) { sdev_printk(KERN_WARNING, sdp, "START_STOP failed for power mode: %d, result %x\n",
drivers/soc/imx/soc-imx.c +4 -0
@@ -36,6 +36,10 @@ static int __init imx_soc_device_init(void)int ret;int i; +/* Return early if this is running on devices with different SoCs */ +if (!__mxc_cpu_type) +return 0 ; +if (of_machine_is_compatible ("fsl,ls1021a" ))return 0 ;
drivers/soc/tegra/fuse/fuse-tegra.c +1 -1
@@ -320,7 +320,7 @@ static struct platform_driver tegra_fuse_driver = { };builtin_platform_driver (tegra_fuse_driver); -bool __init tegra_fuse_read_spare (unsigned int spare) +u32 __init tegra_fuse_read_spare (unsigned int spare) {unsigned int offset = fuse->soc->info->spare + spare *4 ;
drivers/soc/tegra/fuse/fuse.h +1 -1
@@ -65,7 +65,7 @@ struct tegra_fuse {void tegra_init_revision (void );void tegra_init_apbmisc (void ); -bool __init tegra_fuse_read_spare (unsigned int spare); +u32 __init tegra_fuse_read_spare (unsigned int spare);u32 __init tegra_fuse_read_early (unsigned int offset);u8 tegra_get_major_rev (void );
drivers/tee/amdtee/core.c +2 -3
@@ -203,9 +203,8 @@ static int copy_ta_binary(struct tee_context *ctx, void *ptr, void **ta, *ta_size =roundup (fw->size,PAGE_SIZE ); *ta = (void *)__get_free_pages (GFP_KERNEL ,get_order (*ta_size)); -if (IS_ERR (*ta)) { -pr_err ("%s: get_free_pages failed 0x%llx\n" , __func__, - (u64)*ta); +if (!*ta) { +pr_err ("%s: get_free_pages failed\n" , __func__); rc = -ENOMEM ; goto rel_fw; }
drivers/tty/hvc/hvc_xen.c +27 -3
@@ -37,6 +37,8 @@ struct xencons_info {struct xenbus_device *xbdev;struct xencons_interface *intf;unsigned int evtchn; +XENCONS_RING_IDX out_cons; +unsigned int out_cons_same;struct hvc_struct *hvc;int irq;int vtermno;
@@ -138,6 +140,8 @@ static int domU_read_console(uint32_t vtermno, char *buf, int len)XENCONS_RING_IDX cons, prod;int recv =0 ;struct xencons_info *xencons =vtermno_to_xencons (vtermno); +unsigned int eoiflag =0 ; +if (xencons ==NULL )return -EINVAL ; intf = xencons->intf;
@@ -157,7 +161,27 @@ static int domU_read_console(uint32_t vtermno, char *buf, int len)mb ();/* read ring before consuming */ intf->in_cons = cons; -notify_daemon (xencons); +/* +* When to mark interrupt having been spurious: +* - there was no new data to be read, and +* - the backend did not consume some output bytes, and +* - the previous round with no read data didn't see consumed bytes +* (we might have a race with an interrupt being in flight while +* updating xencons->out_cons, so account for that by allowing one +* round without any visible reason) +*/ +if (intf->out_cons != xencons->out_cons) { + xencons->out_cons = intf->out_cons; + xencons->out_cons_same =0 ; + } +if (recv) { +notify_daemon (xencons); + }else if (xencons->out_cons_same++ >1 ) { + eoiflag =XEN_EOI_FLAG_SPURIOUS ; + } + +xen_irq_lateeoi (xencons->irq, eoiflag); +return recv; }
@@ -386,7 +410,7 @@ static int xencons_connect_backend(struct xenbus_device *dev,if (ret)return ret; info->evtchn = evtchn; - irq =bind_evtchn_to_irq (evtchn); + irq =bind_interdomain_evtchn_to_irq_lateeoi (dev, evtchn);if (irq <0 )return irq; info->irq = irq;
@@ -550,7 +574,7 @@ static int __init xen_hvc_init(void)return r; info =vtermno_to_xencons (HVC_COOKIE ); - info->irq =bind_evtchn_to_irq (info->evtchn); + info->irq =bind_evtchn_to_irq_lateeoi (info->evtchn); }if (info->irq <0 ) info->irq =0 ;/* NO_IRQ */
drivers/tty/n_hdlc.c +22 -1
@@ -140,6 +140,8 @@ struct n_hdlc {struct n_hdlc_buf_list rx_buf_list;struct n_hdlc_buf_list tx_free_buf_list;struct n_hdlc_buf_list rx_free_buf_list; +struct work_struct write_work; +struct tty_struct *tty_for_write_work; };/*
@@ -154,6 +156,7 @@ static struct n_hdlc_buf *n_hdlc_buf_get(struct n_hdlc_buf_list *list);/* Local functions */ static struct n_hdlc *n_hdlc_alloc (void ); +static void n_hdlc_tty_write_work (struct work_struct *work);/* max frame size for memory allocations */ static int maxframe =4096 ;
@@ -210,6 +213,8 @@ static void n_hdlc_tty_close(struct tty_struct *tty)wake_up_interruptible (&tty->read_wait);wake_up_interruptible (&tty->write_wait); +cancel_work_sync (&n_hdlc->write_work); +n_hdlc_free_buf_list (&n_hdlc->rx_free_buf_list);n_hdlc_free_buf_list (&n_hdlc->tx_free_buf_list);n_hdlc_free_buf_list (&n_hdlc->rx_buf_list);
@@ -241,6 +246,8 @@ static int n_hdlc_tty_open(struct tty_struct *tty)return -ENFILE ; } +INIT_WORK (&n_hdlc->write_work, n_hdlc_tty_write_work); + n_hdlc->tty_for_write_work = tty; tty->disc_data = n_hdlc; tty->receive_room =65536 ;
@@ -334,6 +341,20 @@ static void n_hdlc_send_frames(struct n_hdlc *n_hdlc, struct tty_struct *tty) goto check_again; }/* end of n_hdlc_send_frames() */ +/** +* n_hdlc_tty_write_work - Asynchronous callback for transmit wakeup +* @work: pointer to work_struct +* +* Called when low level device driver can accept more send data. +*/ +static void n_hdlc_tty_write_work (struct work_struct *work) +{ + struct n_hdlc *n_hdlc = container_of(work, struct n_hdlc, write_work); +struct tty_struct *tty = n_hdlc->tty_for_write_work; + +n_hdlc_send_frames (n_hdlc, tty); +}/* end of n_hdlc_tty_write_work() */ +/** * n_hdlc_tty_wakeup - Callback for transmit wakeup * @tty: pointer to associated tty instance data
@@ -344,7 +365,7 @@ static void n_hdlc_tty_wakeup(struct tty_struct *tty) {struct n_hdlc *n_hdlc = tty->disc_data; -n_hdlc_send_frames (n_hdlc, tty); +schedule_work (&n_hdlc->write_work); }/* end of n_hdlc_tty_wakeup() */ /**
drivers/tty/serial/8250/8250_fintek.c +0 -20
@@ -290,25 +290,6 @@ static void fintek_8250_set_max_fifo(struct fintek_8250 *pdata) } } -static void fintek_8250_goto_highspeed (struct uart_8250_port *uart, -struct fintek_8250 *pdata) -{ -sio_write_reg (pdata,LDN , pdata->index); - -switch (pdata->pid) { -case CHIP_ID_F81966 : -case CHIP_ID_F81866 :/* set uart clock for high speed serial mode */ -sio_write_mask_reg (pdata,F81866_UART_CLK , -F81866_UART_CLK_MASK , -F81866_UART_CLK_14_769MHZ ); - - uart->port.uartclk =921600 *16 ; -break ; -default :/* leave clock speed untouched */ -break ; - } -} -static void fintek_8250_set_termios (struct uart_port *port,struct ktermios *termios,struct ktermios *old)
@@ -430,7 +411,6 @@ static int probe_setup_port(struct fintek_8250 *pdata,fintek_8250_set_irq_mode (pdata, level_mode);fintek_8250_set_max_fifo (pdata); -fintek_8250_goto_highspeed (uart, pdata);fintek_8250_exit_key (addr[i]);
drivers/usb/cdns3/cdnsp-gadget.c +12 -0
@@ -1541,15 +1541,27 @@ static int cdnsp_gadget_pullup(struct usb_gadget *gadget, int is_on) {struct cdnsp_device *pdev =gadget_to_cdnsp (gadget);struct cdns *cdns =dev_get_drvdata (pdev->dev); +unsigned long flags;trace_cdnsp_pullup (is_on); +/* +* Disable events handling while controller is being +* enabled/disabled. +*/ +disable_irq (cdns->dev_irq); +spin_lock_irqsave (&pdev->lock, flags); +if (!is_on) {cdnsp_reset_device (pdev);cdns_clear_vbus (cdns); }else {cdns_set_vbus (cdns); } + +spin_unlock_irqrestore (&pdev->lock, flags); +enable_irq (cdns->dev_irq); +return 0 ; }
drivers/usb/cdns3/cdnsp-ring.c +10 -1
@@ -1029,6 +1029,8 @@ static void cdnsp_process_ctrl_td(struct cdnsp_device *pdev,return ; } + *status =0 ; +cdnsp_finish_td (pdev, td, event, pep, status); }
@@ -1523,7 +1525,14 @@ irqreturn_t cdnsp_thread_irq_handler(int irq, void *data)spin_lock_irqsave (&pdev->lock, flags);if (pdev->cdnsp_state & (CDNSP_STATE_HALTED |CDNSP_STATE_DYING )) { -cdnsp_died (pdev); +/* +* While removing or stopping driver there may still be deferred +* not handled interrupt which should not be treated as error. +* Driver should simply ignore it. +*/ +if (pdev->gadget_driver) +cdnsp_died (pdev); +spin_unlock_irqrestore (&pdev->lock, flags);return IRQ_HANDLED ; }
drivers/usb/cdns3/cdnsp-trace.h +2 -2
@@ -57,9 +57,9 @@ DECLARE_EVENT_CLASS(cdnsp_log_ep, __entry->first_prime_det = pep->stream_info.first_prime_det; __entry->drbls_count = pep->stream_info.drbls_count; ), -TP_printk ("%s: SID: %08x ep state: %x stream: enabled: %d num %d " +TP_printk ("%s: SID: %08x, ep state: %x, stream: enabled: %d num %d " "tds %d, first prime: %d drbls %d" , -__get_str (name), __entry->state, __entry->stream_id, +__get_str (name), __entry->stream_id, __entry->state, __entry->enabled, __entry->num_streams, __entry->td_count, __entry->first_prime_det, __entry->drbls_count) );
drivers/usb/core/devio.c +111 -33
243 lines not on this page · raw message
drivers/usb/core/quirks.c +3 -0
@@ -434,6 +434,9 @@ static const struct usb_device_id usb_quirk_list[] = { { USB_DEVICE(0x1532, 0x0116), .driver_info = USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL }, + /* Lenovo USB-C to Ethernet Adapter RTL8153-04 */ + { USB_DEVICE(0x17ef, 0x720c), .driver_info = USB_QUIRK_NO_LPM }, + /* Lenovo Powered USB-C Travel Hub (4X90S92381, RTL8153 GigE) */ { USB_DEVICE(0x17ef, 0x721e), .driver_info = USB_QUIRK_NO_LPM },
drivers/usb/dwc2/platform.c +3 -0
@@ -575,6 +575,9 @@ static int dwc2_driver_probe(struct platform_device *dev) ggpio |=GGPIO_STM32_OTG_GCCFG_IDEN ; ggpio |=GGPIO_STM32_OTG_GCCFG_VBDEN ;dwc2_writel (hsotg, ggpio,GGPIO ); + +/* ID/VBUS detection startup time */ +usleep_range (5000 ,7000 ); } retval =dwc2_drd_init (hsotg);
drivers/usb/early/xhci-dbc.c +11 -4
@@ -14,7 +14,6 @@#include <linux/pci_ids.h> #include <linux/memblock.h> #include <linux/io.h> -#include <linux/iopoll.h> #include <asm/pci-direct.h> #include <asm/fixmap.h> #include <linux/bcd.h>
@@ -136,9 +135,17 @@ static int handshake(void __iomem *ptr, u32 mask, u32 done, int wait, int delay) {u32 result; -return readl_poll_timeout_atomic (ptr, result, - ((result & mask) == done), - delay, wait); +/* Can not use readl_poll_timeout_atomic() for early boot things */ +do { + result =readl (ptr); + result &= mask; +if (result == done) +return 0 ; +udelay (delay); + wait -= delay; + }while (wait >0 ); + +return -ETIMEDOUT ; }static void __init xdbc_bios_handoff (void )
drivers/usb/gadget/composite.c +3 -3
@@ -1680,14 +1680,14 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)u8 endp;if (w_length >USB_COMP_EP0_BUFSIZ ) { -if (ctrl->bRequestType ==USB_DIR_OUT ) { - goto done; - }else { +if (ctrl->bRequestType &USB_DIR_IN ) {/* Cast away the const, we are going to overwrite on purpose. */ __le16 *temp = (__le16 *)&ctrl->wLength; *temp =cpu_to_le16 (USB_COMP_EP0_BUFSIZ ); w_length =USB_COMP_EP0_BUFSIZ ; + }else { + goto done; } }
drivers/usb/gadget/function/u_ether.c +6 -10
@@ -17,6 +17,7 @@#include <linux/etherdevice.h> #include <linux/ethtool.h> #include <linux/if_vlan.h> +#include <linux/etherdevice.h> #include "u_ether.h"
@@ -861,19 +862,23 @@ int gether_register_netdev(struct net_device *net) {struct eth_dev *dev;struct usb_gadget *g; -struct sockaddr sa;int status;if (!net->dev.parent)return -EINVAL ; dev =netdev_priv (net); g = dev->gadget; + + net->addr_assign_type =NET_ADDR_RANDOM ; +eth_hw_addr_set (net, dev->dev_mac); + status =register_netdev (net);if (status <0 ) {dev_dbg (&g->dev,"register_netdev failed, %d\n" , status);return status; }else {INFO (dev,"HOST MAC %pM\n" , dev->host_mac); +INFO (dev,"MAC %pM\n" , dev->dev_mac);/* two kinds of host-initiated state changes: * - iff DATA transfer is active, carrier is "on"
@@ -881,15 +886,6 @@ int gether_register_netdev(struct net_device *net)*/ netif_carrier_off (net); } - sa.sa_family = net->type; -memcpy (sa.sa_data, dev->dev_mac,ETH_ALEN ); -rtnl_lock (); - status =dev_set_mac_address (net, &sa,NULL ); -rtnl_unlock (); -if (status) -pr_warn ("cannot set self ethernet address: %d\n" , status); -else
Lines of this file are not shown. View the raw message.
kernel/bpf/verifier.c +36 -13
49 lines not on this page · raw message
net/vmw_vsock/virtio_transport_common.c +2 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/prog_tests/btf_skc_cls_ingress.c +14 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/verifier/atomic_cmpxchg.c +86 -0
86 lines not on this page · raw message
tools/testing/selftests/bpf/verifier/value_ptr_arith.c +23 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/damon/.gitignore new file +2 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/damon/debugfs_attrs.sh +18 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/damon/huge_count_read_write.c new file +39 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/kvm/kvm_create_max_vcpus.c +30 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/fcnal-test.sh +34 -11
45 lines not on this page · raw message
tools/testing/selftests/net/forwarding/forwarding.config.sample +2 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/icmp_redirect.sh +1 -1
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.