Linux 5.14.10
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.14.10 kernel.
All users of the 5.14 kernel series must upgrade.
The updated 5.14.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.14.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/m68k/kernel/entry.S | 2 arch/mips/net/bpf_jit.c | 57 +++++-- arch/nios2/Kconfig.debug | 3 arch/nios2/kernel/setup.c | 2 arch/s390/include/asm/ccwgroup.h | 2 arch/x86/crypto/aesni-intel_glue.c | 2 arch/x86/events/intel/core.c | 1 arch/x86/include/asm/kvm_page_track.h | 2 arch/x86/include/asm/kvmclock.h | 14 + arch/x86/kernel/kvmclock.c | 13 - arch/x86/kvm/cpuid.c | 4 arch/x86/kvm/emulate.c | 1 arch/x86/kvm/ioapic.c | 10 - arch/x86/kvm/mmu/page_track.c | 4 arch/x86/kvm/svm/nested.c | 1 arch/x86/kvm/svm/sev.c | 92 +++++++---- arch/x86/kvm/vmx/evmcs.c | 12 + arch/x86/kvm/vmx/nested.c | 6 arch/x86/kvm/vmx/vmx.c | 11 - arch/x86/kvm/x86.c | 10 + arch/x86/net/bpf_jit_comp.c | 66 +++++--- block/bfq-iosched.c | 16 - drivers/acpi/nfit/core.c | 12 + drivers/base/core.c | 36 +++- drivers/block/nbd.c | 29 ++- drivers/cpufreq/cpufreq_governor_attr_set.c | 2 drivers/crypto/ccp/ccp-ops.c | 14 - drivers/gpio/gpio-pca953x.c | 11 - drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 15 - drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 31 +++ drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 62 ++----- drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 9 - drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 2 drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c | 8 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 15 - drivers/gpu/drm/i915/gt/intel_rps.c | 2 drivers/gpu/drm/i915/gvt/scheduler.c | 4 drivers/gpu/drm/i915/i915_request.c | 11 - drivers/hid/amd-sfh-hid/amd_sfh_pcie.c | 8 drivers/hid/hid-betopff.c | 13 + drivers/hid/hid-u2fzero.c | 4 drivers/hid/usbhid/hid-core.c | 13 + drivers/hwmon/mlxreg-fan.c | 12 + drivers/hwmon/occ/common.c | 17 -- drivers/hwmon/pmbus/mp2975.c | 2 drivers/hwmon/tmp421.c | 71 ++++---- drivers/hwmon/w83791d.c | 29 +-- drivers/hwmon/w83792d.c | 28 +-- drivers/hwmon/w83793.c | 26 +-- drivers/infiniband/core/cma.c | 51 +++++- drivers/infiniband/core/cma_priv.h | 1 drivers/infiniband/hw/hfi1/ipoib_tx.c | 8 drivers/infiniband/hw/hns/hns_roce_cq.c | 31 ++- drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 13 - drivers/infiniband/hw/irdma/cm.c | 4 drivers/infiniband/hw/irdma/hw.c | 14 + drivers/infiniband/hw/irdma/i40iw_if.c | 2 drivers/infiniband/hw/irdma/main.h | 1 drivers/infiniband/hw/irdma/user.h | 2 drivers/infiniband/hw/irdma/utils.c | 2 drivers/infiniband/hw/irdma/verbs.c | 9 - drivers/interconnect/qcom/sdm660.c | 11 - drivers/ipack/devices/ipoctal.c | 63 +++++-- drivers/media/platform/s5p-jpeg/jpeg-core.c | 18 +- drivers/media/platform/s5p-jpeg/jpeg-core.h | 28 +-- drivers/media/rc/ir_toy.c | 21 ++ drivers/mmc/host/renesas_sdhi_core.c | 2 drivers/net/dsa/mv88e6xxx/chip.c | 17 +- drivers/net/dsa/mv88e6xxx/chip.h | 1 drivers/net/dsa/mv88e6xxx/global1.c | 2 drivers/net/dsa/mv88e6xxx/port.c | 2 drivers/net/ethernet/freescale/enetc/enetc_pf.c | 3 drivers/net/ethernet/hisilicon/hns3/hnae3.h | 1 drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 16 - drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c | 105 ++++++++----- drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c | 21 +- drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c | 29 +-- drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 19 +- drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c | 33 ---- drivers/net/ethernet/intel/e100.c | 22 +- drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 2 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 8 drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 47 +++-- drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 1 drivers/net/ethernet/micrel/Makefile | 6 drivers/net/ethernet/micrel/ks8851_common.c | 8 drivers/net/ethernet/pensando/ionic/ionic_stats.c | 9 - drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 4 drivers/net/mhi/net.c | 6 drivers/net/phy/bcm7xxx.c | 114 +++++++++++++- drivers/net/phy/mdio_bus.c | 4 drivers/net/usb/hso.c | 6 drivers/net/usb/smsc95xx.c | 3 drivers/net/wireless/mac80211_hwsim.c | 4 drivers/nvme/host/core.c | 4 drivers/nvme/host/nvme.h | 6 drivers/nvme/host/pci.c | 3 drivers/pinctrl/qcom/pinctrl-spmi-gpio.c | 37 ++++ drivers/platform/x86/intel-hid.c | 27 ++- drivers/ptp/ptp_kvm_x86.c | 9 - drivers/s390/cio/ccwgroup.c | 10 - drivers/s390/net/qeth_core.h | 1 drivers/s390/net/qeth_core_main.c | 19 -- drivers/s390/net/qeth_l2_main.c | 1 drivers/s390/net/qeth_l3_main.c | 1 drivers/scsi/csiostor/csio_init.c | 1 drivers/scsi/elx/libefc/efc_device.c | 7 drivers/scsi/elx/libefc/efc_fabric.c | 3 drivers/scsi/qla2xxx/qla_def.h | 1 drivers/scsi/qla2xxx/qla_isr.c | 2 drivers/scsi/qla2xxx/qla_nvme.c | 40 ++-- drivers/scsi/ufs/ufshcd-pci.c | 78 +++++++++ drivers/scsi/ufs/ufshcd.c | 6 drivers/scsi/ufs/ufshcd.h | 1 drivers/staging/media/hantro/hantro_drv.c | 2 drivers/staging/media/sunxi/cedrus/cedrus_video.c | 2 drivers/tty/vt/vt.c | 21 ++ drivers/watchdog/Kconfig | 2 fs/binfmt_elf.c | 2 fs/debugfs/inode.c | 2 fs/ext4/dir.c | 6 fs/ext4/extents.c | 19 +- fs/ext4/fast_commit.c | 6 fs/ext4/inode.c | 5 fs/ext4/super.c | 21 +- fs/verity/enable.c | 2 fs/verity/open.c | 2 include/linux/bpf.h | 2 include/linux/fwnode.h | 11 - include/net/ip_fib.h | 2 include/net/nexthop.h | 2 include/net/sock.h | 2 include/sound/rawmidi.h | 1 include/uapi/sound/asound.h | 1 kernel/bpf/bpf_struct_ops.c | 7 kernel/bpf/core.c | 2 kernel/sched/cpufreq_schedutil.c | 16 + kernel/sched/debug.c | 8 kernel/sched/fair.c | 6 lib/Kconfig.kasan | 2 mm/util.c | 4 net/core/sock.c | 32 +++ net/ipv4/fib_semantics.c | 16 + net/ipv4/udp.c | 10 - net/ipv6/route.c | 5 net/ipv6/udp.c | 2 net/mac80211/mesh_ps.c | 3 net/mac80211/rate.c | 4 net/mac80211/tx.c | 12 + net/mac80211/wpa.c | 6 net/mptcp/mptcp_diag.c | 2 net/mptcp/pm_netlink.c | 4 net/mptcp/protocol.h | 2 net/mptcp/subflow.c | 2 net/mptcp/syncookies.c | 13 - net/mptcp/token.c | 11 - net/mptcp/token_test.c | 14 - net/netfilter/ipset/ip_set_hash_gen.h | 4 net/netfilter/ipvs/ip_vs_conn.c | 4 net/netfilter/nf_conntrack_core.c | 70 ++++---- net/netfilter/nf_tables_api.c | 30 ++- net/netfilter/nft_compat.c | 17 +- net/netfilter/xt_LOG.c | 10 + net/netfilter/xt_NFLOG.c | 10 + net/sched/cls_flower.c | 6 net/sctp/input.c | 2 net/unix/af_unix.c | 34 +++- sound/core/rawmidi.c | 9 + sound/firewire/motu/amdtp-motu.c | 7 sound/pci/hda/patch_realtek.c | 129 ++++++++++++++++ sound/soc/fsl/fsl_esai.c | 16 + sound/soc/fsl/fsl_micfil.c | 15 + sound/soc/fsl/fsl_sai.c | 14 + sound/soc/fsl/fsl_spdif.c | 14 + sound/soc/fsl/fsl_xcvr.c | 15 + sound/soc/mediatek/common/mtk-afe-fe-dai.c | 19 +- sound/soc/sof/imx/imx8.c | 9 - sound/soc/sof/imx/imx8m.c | 9 - sound/soc/sof/xtensa/core.c | 4 tools/lib/bpf/linker.c | 8 tools/objtool/special.c | 38 +++- tools/perf/arch/x86/util/iostat.c | 2 tools/perf/builtin-stat.c | 2 tools/perf/tests/dwarf-unwind.c | 39 +++- tools/testing/selftests/bpf/Makefile | 3 tools/testing/selftests/bpf/test_lwt_ip_encap.sh | 13 - 188 files changed, 1839 insertions(+), 861 deletions(-)
Aaro Koskinen (1):
smsc95xx: fix stalled rx after link change
Adrian Hunter (1):
scsi: ufs: ufs-pci: Fix Intel LKF link stability
Al Viro (1):
m68k: Update ->thread.esp0 before calling syscall_trace() in ret_from_signal
Alexandra Winter (2):
s390/qeth: Fix deadlock in remove_discipline s390/qeth: fix deadlock during failing recovery
Andrea Claudi (1):
ipvs: check that ip_vs_conn_tab_bits is between 8 and 20
Andrej Shadura (1):
HID: u2fzero: ignore incomplete packets without data
Andrew Lunn (3):
dsa: mv88e6xxx: 6161: Use chip wide MAX MTU
dsa: mv88e6xxx: Fix MTU definition
dsa: mv88e6xxx: Include tagger overhead when setting MTU for DSA and CPU ports
Andrey Gusakov (1):
gpio: pca953x: do not ignore i2c errors
Anirudh Rayabharam (1):
HID: usbhid: free raw_report buffers in usbhid_stop
Arnd Bergmann (1):
net: ks8851: fix link error
Basavaraj Natikar (1):
HID: amd_sfh: Fix potential NULL pointer dereference - take 2
Cameron Berkenpas (1):
ALSA: hda/realtek: Quirks to enable speaker output for Lenovo Legion 7i 15IMHG05, Yoga 7i 14ITL5/15ITL5, and 13s Gen2 laptops.
Charlene Liu (1):
drm/amd/display: Pass PCI deviceid into DC
Chen Jingwen (1):
elf: don't use MAP_FIXED_NOREPLACE for elf interpreter mappings
Chenyi Qiang (1):
KVM: nVMX: Fix nested bus lock VM exit
Chih-Kang Chang (1):
mac80211: Fix ieee80211_amsdu_aggregate frag_tail bug
Christoph Lameter (1):
IB/cma: Do not send IGMP leaves for sendonly Multicast groups
Dan Carpenter (1):
crypto: ccp - fix resource leaks in ccp_run_aes_gcm_cmd()
Daniele Palmas (1):
drivers: net: mhi: fix error path in mhi_net_newlink
David Collins (1):
pinctrl: qcom: spmi-gpio: correct parent irqspec translation
Davide Caratti (1):
mptcp: allow changing the 'backup' bit when no sockets are open
Dongliang Mu (1):
usb: hso: remove the bailout parameter
Eddie James (1):
hwmon: (occ) Fix P10 VRM temp sensors
Eric Biggers (1):
fs-verity: fix signed integer overflow with i_size near S64_MAX
Eric Dumazet (3):
af_unix: fix races in sk_peer_pid and sk_peer_cred accesses
net: udp: annotate data race around udp_sk(sk)->corkflag
netfilter: conntrack: serialize hash resizes and cleanups
Evgeny Novikov (1):
HID: amd_sfh: Fix potential NULL pointer dereference
F.A.Sulaiman (1):
HID: betop: fix slab-out-of-bounds Write in betop_probe
Felix Fietkau (1):
Revert "mac80211: do not use low data rates for data frames with no ack flag"
Feng Zhou (1):
ixgbe: Fix NULL pointer dereference in ixgbe_xdp_setup
Florian Fainelli (1):
net: phy: bcm7xxx: Fixed indirect MMD operations
Florian Westphal (3):
netfilter: nf_tables: unlink table before deleting it
netfilter: log: work around missing softdep backend module
mptcp: don't return sockets in foreign netns
Greg Kroah-Hartman (1):
Linux 5.14.10
Guangbin Huang (2):
net: hns3: fix always enable rx vlan filter problem after selftest
net: hns3: disable firmware compatible features when uninstall PF
Guchun Chen (2):
drm/amdgpu: avoid over-handle of fence driver fini in s3 test (v2) drm/amdgpu: stop scheduler when calling hw_fini (v2)
Guo Zhi (1):
RDMA/hfi1: Fix kernel pointer leak
Haimin Zhang (1):
KVM: x86: Handle SRCU initialization failure during page track init
Hawking Zhang (1):
drm/amdgpu: correct initial cp_hqd_quantum for gfx9
Hou Tao (2):
bpf: Handle return value of BPF_PROG_TYPE_STRUCT_OPS prog
ext4: limit the number of blocks in one ADD_RANGE TLV
Ian Rogers (1):
perf test: Fix DWARF unwind for optimized builds.
Igor Matheus Andrade Torrente (1):
tty: Fix out-of-bound vmalloc access in imageblit
Jackie Liu (1):
watchdog/sb_watchdog: fix compilation problem due to COMPILE_TEST
Jacob Keller (2):
e100: fix length calculation in e100_get_regs_len
e100: fix buffer overrun in e100_get_regs
James Morse (1):
cpufreq: schedutil: Destroy mutex before kobject_put() frees the memory
James Smart (1):
scsi: elx: efct: Fix void-pointer-to-enum-cast warning for efc_nport_topology
Jaroslav Kysela (1):
ALSA: rawmidi: introduce SNDRV_RAWMIDI_IOCTL_USER_PVERSION
Jason Gunthorpe (3):
RDMA/cma: Do not change route.addr.src_addr.ss_family RDMA/cma: Ensure rdma_addr_cancel() happens before issuing more requests RDMA/hns: Work around broken constant propagation in gcc 8
Jeffle Xu (1):
ext4: fix reserved space counter leakage
Jens Axboe (1):
Revert "block, bfq: honor already-setup queue merges"
Jernej Skrabec (1):
media: hantro: Fix check for single irq
Jia He (1):
ACPI: NFIT: Use fallback node id when numa info in NFIT table is incorrect
Jian Shen (5):
net: hns3: do not allow call hns3_nic_net_open repeatedly
net: hns3: remove tc enable checking
net: hns3: don't rollback when destroy mqprio fail
net: hns3: fix mixed flag HCLGE_FLAG_MQPRIO_ENABLE and HCLGE_FLAG_DCB_ENABLE
net: hns3: fix show wrong state when add existing uc mac address
Jiri Benc (2):
selftests, bpf: Fix makefile dependencies on libbpf selftests, bpf: test_lwt_ip_encap: Really disable rp_filter
Johan Almbladh (1):
bpf, x86: Fix bpf mapping of atomic fetch implementation
Johan Hovold (5):
ipack: ipoctal: fix stack information leak
ipack: ipoctal: fix tty registration race
ipack: ipoctal: fix tty-registration error handling
ipack: ipoctal: fix missing allocation-failure check
ipack: ipoctal: fix module reference leak
Johannes Berg (3):
mac80211: fix use-after-free in CCMP/GCMP RX
mac80211: mesh: fix potentially unaligned access
mac80211-hwsim: fix late beacon hrtimer handling
Jonathan Hsu (1):
scsi: ufs: Fix illegal offset in UPIU event trace
Josip Pavic (1):
drm/amd/display: initialize backlight_ramping_override to false
José Expósito (1):
platform/x86/intel: hid: Add DMI switches allow list
Jozsef Kadlecsik (1):
netfilter: ipset: Fix oversized kvmalloc() calls
Kan Liang (1):
perf/x86/intel: Update event constraints for ICX
Keith Busch (1):
nvme: add command id quirk for apple controllers
Kevin Hao (1):
cpufreq: schedutil: Use kobject release() method to free sugov_tunables
Kumar Kartikeya Dwivedi (1):
libbpf: Fix segfault in static linker for objects without BTF
Lama Kayal (1):
net/mlx4_en: Resolve bad operstate value
Like Xu (2):
perf iostat: Use system-wide mode if the target cpu_list is unspecified perf iostat: Fix Segmentation fault from NULL 'struct perf_counts_values *'
Likun Gao (1):
drm/amdgpu: adjust fence driver enable sequence
Linus Torvalds (3):
kvm: fix objtool relocation warning
mm: don't allow oversized kvmalloc() calls
objtool: print out the symbol type when complaining about it
Lorenz Bauer (1):
bpf: Exempt CAP_BPF from checks against bpf_jit_limit
Lorenzo Bianconi (1):
mac80211: limit injected vht mcs/nss in ieee80211_parse_tx_radiotap
Marco Elver (1):
kasan: fix Kconfig check of CC_HAS_WORKING_NOSANITIZE_ADDRESS
Matthew Auld (1):
drm/i915/request: fix early tracepoints
Maxim Levitsky (1):
KVM: x86: nSVM: don't copy virt_ext from vmcb12
Mel Gorman (1):
sched/fair: Null terminate buffer when updating tunable_scaling
Michal Koutný (1):
sched/fair: Add ancestors of unthrottled undecayed cfs_rq
Mingwei Zhang (1):
KVM: SVM: fix missing sev_decommission in sev_receive_start
Nadezda Lutovinova (3):
hwmon: (w83793) Fix NULL pointer dereference by removing unnecessary structure field
hwmon: (w83792d) Fix NULL pointer dereference by removing unnecessary structure field
hwmon: (w83791d) Fix NULL pointer dereference by removing unnecessary structure field
Nick Desaulniers (1):
nbd: use shifts rather than multiplies
Nicolas Dufresne (1):
media: cedrus: Fix SUNXI tile size calculation
Nirmoy Das (1):
debugfs: debugfs_create_file_size(): use IS_ERR to check for error
Pablo Neira Ayuso (1):
netfilter: nf_tables: Fix oversized kvmalloc() calls
Paul Fertser (3):
hwmon: (tmp421) handle I2C errors
hwmon: (tmp421) report /PVLD condition as fault
hwmon: (tmp421) fix rounding for negative values
Peng Li (1):
net: hns3: reconstruct function hns3_self_test
Peter Gonda (3):
KVM: SEV: Update svm_vm_copy_asid_from for SEV-ES
KVM: SEV: Acquire vcpu mutex when updating VMSA
KVM: SEV: Allow some commands for mirror VM
Peter Ujfalusi (2):
ASoC: SOF: imx: imx8: Bar index is only valid for IRAM and SRAM types
ASoC: SOF: imx: imx8m: Bar index is only valid for IRAM and SRAM types
Peter Zijlstra (1):
objtool: Teach get_alt_entry() about more relocation types
Piotr Krysiuk (1):
bpf, mips: Validate conditional branch offsets
Praful Swarnakar (1):
drm/amd/display: Fix Display Flicker on embedded panels
Prike Liang (1):
drm/amdgpu: force exit gfxoff on sdma resume for rmb s0ix
Rahul Lakkireddy (1):
scsi: csiostor: Add module softdep on cxgb4
Randy Dunlap (3):
media: s5p-jpeg: rename JPEG marker constants to prevent build warnings
NIOS2: fix kconfig unmet dependency warning for SERIAL_CORE_CONSOLE
NIOS2: setup.c: drop unused variable 'dram_start'
Ritesh Harjani (1):
ext4: fix loff_t overflow in ext4_max_bitmap_size()
Saravana Kannan (3):
driver core: fw_devlink: Add support for FWNODE_FLAG_NEEDS_CHILD_BOUND_ON_ADD
net: mdiobus: Set FWNODE_FLAG_NEEDS_CHILD_BOUND_ON_ADD for mdiobus parents driver core: fw_devlink: Improve handling of cyclic dependencies
Saurav Kashyap (1):
scsi: qla2xxx: Changes to support kdump kernel for NVMe BFS
Sean Christopherson (3):
KVM: x86: Clear KVM's cached guest CR3 at RESET/INIT
KVM: x86: Swap order of CPUID entry "index" vs. "significant flag" checks
KVM: SEV: Pin guest memory for write for RECEIVE_UPDATE_DATA
Sean Young (1):
media: ir_toy: prevent device from hanging during transmit
Shannon Nelson (1):
ionic: fix gathering of debug stats
Shawn Guo (2):
interconnect: qcom: sdm660: Fix id of slv_cnoc_mnoc_cfg
interconnect: qcom: sdm660: Correct NOC_QOS_PRIORITY shift and mask
Shengjiu Wang (5):
ASoC: fsl_sai: register platform component before registering cpu dai
ASoC: fsl_esai: register platform component before registering cpu dai
ASoC: fsl_micfil: register platform component before registering cpu dai
ASoC: fsl_spdif: register platform component before registering cpu dai
ASoC: fsl_xcvr: register platform component before registering cpu dai
Shreyansh Chouhan (1):
crypto: aesni - xts_crypt() return if walk.nbytes is 0
Simon Ser (1):
drm/amdgpu: check tiling flags when creating FB on GFX8-
Sindhu Devale (4):
RDMA/irdma: Skip CQP ring during a reset
RDMA/irdma: Validate number of CQ entries on create CQ RDMA/irdma: Report correct WC error when transport retry counter is exceeded RDMA/irdma: Report correct WC error when there are MW bind errors
Takashi Sakamoto (1):
ALSA: firewire-motu: fix truncated bytes in message tracepoints
Tao Liu (1):
RDMA/cma: Fix listener leak in rdma_cma_listen_on_all() failure
Tejas Upadhyay (1):
drm/i915: Remove warning from the rps worker
Theodore Ts'o (1):
ext4: add error checking to ext4_ext_replay_set_iblocks()
Trevor Wu (1):
ASoC: mediatek: common: handle NULL case in suspend/resume function
Vadim Pasternak (2):
hwmon: (mlxreg-fan) Return non-zero value when fan current state is enforced from sysfs
hwmon: (pmbus/mp2975) Add missed POUT attribute for page 1 mp2975 controller
Vitaly Kuznetsov (2):
KVM: x86: Fix stack-out-of-bounds memory access from ioapic_write_indirect()
KVM: nVMX: Filter out all unsupported controls when eVMCS was activated
Vlad Buslov (1):
net: sched: flower: protect fl_walk() with rcu
Vladimir Oltean (1):
net: enetc: fix the incorrect clearing of IF_MODE bits
Wenpeng Liang (2):
RDMA/hns: Fix the size setting error when copying CQE in clean_cq() RDMA/hns: Add the check of the CQE size of the user space
Wolfram Sang (1):
mmc: renesas_sdhi: fix regression with hard reset on old SDHIs
Wong Vee Khee (1):
net: stmmac: fix EEE init issue when paired with EEE capable PHYs
Xiao Liang (1):
net: ipv4: Fix rtnexthop len when RTA_FLOW is present
Xin Long (1):
sctp: break out if skb_header_pointer returns NULL in sctp_rcv_ootb
Yong Zhi (1):
ASoC: SOF: Fix DSP oops stack dump output contents
Zelin Deng (2):
x86/kvmclock: Move this_cpu_pvti into kvmclock.h
ptp: Fix ptp_kvm_getcrosststamp issue for x86 ptp_kvm
Zhenzhong Duan (1):
KVM: VMX: Fix a TSX_CTRL_CPUID_CLEAR field mask issue
Zhi A Wang (1):
drm/i915/gvt: fix the usage of ww lock in gvt scheduler.
yangerkun (2):
ext4: fix potential infinite loop in ext4_dx_readdir()
ext4: flush s_error_work before journal destroy in ext4_fill_super
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 14 -SUBLEVEL = 9 +SUBLEVEL = 10 EXTRAVERSION = NAME = Opossums on Parade
arch/m68k/kernel/entry.S +2 -0
@@ -186,6 +186,8 @@ ENTRY(ret_from_signal) movel %curptr@(TASK_STACK),%a1 tstb %a1@(TINFO_FLAGS+2) jge 1f + lea %sp@(SWITCH_STACK_SIZE),%a1 + movel %a1,%curptr@(TASK_THREAD+THREAD_ESP0) jbsr syscall_trace 1: RESTORE_SWITCH_STACK addql #4,%sp
arch/mips/net/bpf_jit.c +43 -14
121 lines not on this page · raw message
arch/nios2/Kconfig.debug +2 -1
@@ -3,9 +3,10 @@ config EARLY_PRINTK bool "Activate early kernel debugging" default y + depends on TTY select SERIAL_CORE_CONSOLE help - Enable early printk on console + Enable early printk on console. This is useful for kernel debugging when your machine crashes very early before the console code is initialized. You should normally say N here, unless you want to debug such a crash.
arch/nios2/kernel/setup.c +0 -2
@@ -149,8 +149,6 @@ static void __init find_limits(unsigned long *min, unsigned long *max_low,void __init setup_arch (char **cmdline_p) { -int dram_start; -console_verbose (); memory_start =memblock_start_of_DRAM ();
arch/s390/include/asm/ccwgroup.h +1 -1
@@ -57,7 +57,7 @@ struct ccwgroup_device *get_ccwgroupdev_by_busid(struct ccwgroup_driver *gdrv, char *bus_id);extern int ccwgroup_set_online (struct ccwgroup_device *gdev); -extern int ccwgroup_set_offline (struct ccwgroup_device *gdev); +int ccwgroup_set_offline (struct ccwgroup_device *gdev,bool call_gdrv);extern int ccwgroup_probe_ccwdev (struct ccw_device *cdev);extern void ccwgroup_remove_ccwdev (struct ccw_device *cdev);
arch/x86/crypto/aesni-intel_glue.c +1 -1
@@ -849,7 +849,7 @@ static int xts_crypt(struct skcipher_request *req, bool encrypt)return -EINVAL ; err =skcipher_walk_virt (&walk, req, false); -if (err) +if (!walk.nbytes)return err;if (unlikely (tail >0 && walk.nbytes < walk.total)) {
arch/x86/events/intel/core.c +1 -0
@@ -263,6 +263,7 @@ static struct event_constraint intel_icl_event_constraints[] = {INTEL_EVENT_CONSTRAINT_RANGE (0xa8 ,0xb0 ,0xf ),INTEL_EVENT_CONSTRAINT_RANGE (0xb7 ,0xbd ,0xf ),INTEL_EVENT_CONSTRAINT_RANGE (0xd0 ,0xe6 ,0xf ), +INTEL_EVENT_CONSTRAINT (0xef ,0xf ),INTEL_EVENT_CONSTRAINT_RANGE (0xf0 ,0xf4 ,0xf ), EVENT_CONSTRAINT_END };
arch/x86/include/asm/kvm_page_track.h +1 -1
@@ -46,7 +46,7 @@ struct kvm_page_track_notifier_node { struct kvm_page_track_notifier_node *node); }; -void kvm_page_track_init (struct kvm *kvm); +int kvm_page_track_init (struct kvm *kvm);void kvm_page_track_cleanup (struct kvm *kvm);void kvm_page_track_free_memslot (struct kvm_memory_slot *slot);
arch/x86/include/asm/kvmclock.h +14 -0
@@ -2,6 +2,20 @@#ifndef _ASM_X86_KVM_CLOCK_H#define _ASM_X86_KVM_CLOCK_H +#include <linux/percpu.h> +extern struct clocksource kvm_clock; +DECLARE_PER_CPU(struct pvclock_vsyscall_time_info *, hv_clock_per_cpu); + +static inline struct pvclock_vcpu_time_info *this_cpu_pvti (void ) +{ +return &this_cpu_read (hv_clock_per_cpu)->pvti; +} + +static inline struct pvclock_vsyscall_time_info *this_cpu_hvclock (void ) +{ +return this_cpu_read (hv_clock_per_cpu); +} +#endif /* _ASM_X86_KVM_CLOCK_H */
arch/x86/kernel/kvmclock.c +2 -11
@@ -49,18 +49,9 @@ early_param("no-kvmclock-vsyscall", parse_no_kvmclock_vsyscall);static struct pvclock_vsyscall_time_info hv_clock_boot[HVC_BOOT_ARRAY_SIZE] __bss_decrypted __aligned(PAGE_SIZE); static struct pvclock_wall_clock wall_clock __bss_decrypted; -static DEFINE_PER_CPU(struct pvclock_vsyscall_time_info *, hv_clock_per_cpu);static struct pvclock_vsyscall_time_info *hvclock_mem; - -static inline struct pvclock_vcpu_time_info *this_cpu_pvti (void ) -{ -return &this_cpu_read (hv_clock_per_cpu)->pvti; -} - -static inline struct pvclock_vsyscall_time_info *this_cpu_hvclock (void ) -{ -return this_cpu_read (hv_clock_per_cpu); -} +DEFINE_PER_CPU(struct pvclock_vsyscall_time_info *, hv_clock_per_cpu); +EXPORT_PER_CPU_SYMBOL_GPL (hv_clock_per_cpu);/* * The wallclock is the time of day when we booted. Since then, some time may
arch/x86/kvm/cpuid.c +2 -2
@@ -65,8 +65,8 @@ static inline struct kvm_cpuid_entry2 *cpuid_entry2_find(for (i =0 ; i < nent; i++) { e = &entries[i]; -if (e->function == function && (e->index == index || - !(e->flags &KVM_CPUID_FLAG_SIGNIFCANT_INDEX ))) +if (e->function == function && + (!(e->flags &KVM_CPUID_FLAG_SIGNIFCANT_INDEX ) || e->index == index))return e; }
arch/x86/kvm/emulate.c +0 -1
@@ -435,7 +435,6 @@ static int fastop(struct x86_emulate_ctxt *ctxt, fastop_t fop); __FOP_RET(#op) asm(".pushsection .fixup, \"ax\"\n" -".global kvm_fastop_exception \n" "kvm_fastop_exception: xor %esi, %esi; ret\n" ".popsection" );
arch/x86/kvm/ioapic.c +5 -5
@@ -319,8 +319,8 @@ static void ioapic_write_indirect(struct kvm_ioapic *ioapic, u32 val)unsigned index;bool mask_before, mask_after;union kvm_ioapic_redirect_entry *e; -unsigned long vcpu_bitmap;int old_remote_irr, old_delivery_status, old_dest_id, old_dest_mode; +DECLARE_BITMAP (vcpu_bitmap,KVM_MAX_VCPUS );switch (ioapic->ioregsel) {case IOAPIC_REG_VERSION :
@@ -384,9 +384,9 @@ static void ioapic_write_indirect(struct kvm_ioapic *ioapic, u32 val) irq.shorthand =APIC_DEST_NOSHORT ; irq.dest_id = e->fields.dest_id; irq.msi_redir_hint = false; -bitmap_zero (&vcpu_bitmap,16 ); +bitmap_zero (vcpu_bitmap,KVM_MAX_VCPUS );kvm_bitmap_or_dest_vcpus (ioapic->kvm, &irq, - &vcpu_bitmap); + vcpu_bitmap);if (old_dest_mode != e->fields.dest_mode || old_dest_id != e->fields.dest_id) {/*
@@ -399,10 +399,10 @@ static void ioapic_write_indirect(struct kvm_ioapic *ioapic, u32 val)kvm_lapic_irq_dest_mode ( !!e->fields.dest_mode);kvm_bitmap_or_dest_vcpus (ioapic->kvm, &irq, - &vcpu_bitmap); + vcpu_bitmap); }kvm_make_scan_ioapic_request_mask (ioapic->kvm, - &vcpu_bitmap); + vcpu_bitmap); }else {kvm_make_scan_ioapic_request (ioapic->kvm); }
arch/x86/kvm/mmu/page_track.c +2 -2
@@ -163,13 +163,13 @@ void kvm_page_track_cleanup(struct kvm *kvm)cleanup_srcu_struct (&head->track_srcu); } -void kvm_page_track_init (struct kvm *kvm) +int kvm_page_track_init (struct kvm *kvm) {struct kvm_page_track_notifier_head *head; head = &kvm->arch.track_notifier_head; -init_srcu_struct (&head->track_srcu);INIT_HLIST_HEAD (&head->track_notifier_list); +return init_srcu_struct (&head->track_srcu); }/*
arch/x86/kvm/svm/nested.c +0 -1
@@ -545,7 +545,6 @@ static void nested_vmcb02_prepare_control(struct vcpu_svm *svm) (svm->nested.ctl.int_ctl & int_ctl_vmcb12_bits) | (svm->vmcb01.ptr->control.int_ctl & int_ctl_vmcb01_bits); - svm->vmcb->control.virt_ext = svm->nested.ctl.virt_ext; svm->vmcb->control.int_vector = svm->nested.ctl.int_vector; svm->vmcb->control.int_state = svm->nested.ctl.int_state; svm->vmcb->control.event_inj = svm->nested.ctl.event_inj;
arch/x86/kvm/svm/sev.c +62 -30
157 lines not on this page · raw message
arch/x86/kvm/vmx/evmcs.c +9 -3
@@ -354,14 +354,20 @@ void nested_evmcs_filter_control_msr(u32 msr_index, u64 *pdata)switch (msr_index) {case MSR_IA32_VMX_EXIT_CTLS :case MSR_IA32_VMX_TRUE_EXIT_CTLS : - ctl_high &= ~VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL ; + ctl_high &= ~EVMCS1_UNSUPPORTED_VMEXIT_CTRL ;break ;case MSR_IA32_VMX_ENTRY_CTLS :case MSR_IA32_VMX_TRUE_ENTRY_CTLS : - ctl_high &= ~VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL ; + ctl_high &= ~EVMCS1_UNSUPPORTED_VMENTRY_CTRL ;break ;case MSR_IA32_VMX_PROCBASED_CTLS2 : - ctl_high &= ~SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES ; + ctl_high &= ~EVMCS1_UNSUPPORTED_2NDEXEC ; +break ; +case MSR_IA32_VMX_PINBASED_CTLS : + ctl_high &= ~EVMCS1_UNSUPPORTED_PINCTRL ; +break ; +case MSR_IA32_VMX_VMFUNC : + ctl_low &= ~EVMCS1_UNSUPPORTED_VMFUNC ;break ; }
arch/x86/kvm/vmx/nested.c +6 -0
@@ -5898,6 +5898,12 @@ static bool nested_vmx_l0_wants_exit(struct kvm_vcpu *vcpu,case EXIT_REASON_VMFUNC :/* VM functions are emulated through L2->L0 vmexits. */ return true; +case EXIT_REASON_BUS_LOCK : +/* +* At present, bus lock VM exit is never exposed to L1. +* Handle L2's bus locks in L0 directly. +*/ +return true;default :break ; }
arch/x86/kvm/vmx/vmx.c +6 -5
@@ -1840,10 +1840,11 @@ static int vmx_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) &msr_info->data))return 1 ;/* -* Enlightened VMCS v1 doesn't have certain fields, but buggy -* Hyper-V versions are still trying to use corresponding -* features when they are exposed. Filter out the essential -* minimum. +* Enlightened VMCS v1 doesn't have certain VMCS fields but +* instead of just ignoring the features, different Hyper-V +* versions are either trying to use them and fail or do some +* sanity checking and refuse to boot. Filter all unsupported +* features out. */ if (!msr_info->host_initiated && vmx->nested.enlightened_vmcs_enabled)
@@ -6815,7 +6816,7 @@ static int vmx_create_vcpu(struct kvm_vcpu *vcpu)*/ tsx_ctrl =vmx_find_uret_msr (vmx,MSR_IA32_TSX_CTRL );if (tsx_ctrl) - vmx->guest_uret_msrs[i].mask = ~(u64 )TSX_CTRL_CPUID_CLEAR ; + tsx_ctrl->mask = ~(u64 )TSX_CTRL_CPUID_CLEAR ; } err =alloc_loaded_vmcs (&vmx->vmcs01);
arch/x86/kvm/x86.c +9 -1
@@ -10873,6 +10873,9 @@ void kvm_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event)static_call (kvm_x86_vcpu_reset)(vcpu, init_event); + vcpu->arch.cr3 =0 ; +kvm_register_mark_dirty (vcpu,VCPU_EXREG_CR3 ); +/* * Reset the MMU context if paging was enabled prior to INIT (which is * implied if CR0.PG=1 as CR0 will be '0' prior to RESET). Unlike the
@@ -11090,9 +11093,15 @@ void kvm_arch_free_vm(struct kvm *kvm)int kvm_arch_init_vm (struct kvm *kvm,unsigned long type) { +int ret; +if (type)return -EINVAL ; + ret =kvm_page_track_init (kvm); +if (ret) +return ret; +INIT_HLIST_HEAD (&kvm->arch.mask_notifier_list);INIT_LIST_HEAD (&kvm->arch.active_mmu_pages);INIT_LIST_HEAD (&kvm->arch.zapped_obsolete_pages);
@@ -11125,7 +11134,6 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)kvm_apicv_init (kvm);kvm_hv_init_vm (kvm); -kvm_page_track_init (kvm);kvm_mmu_init_vm (kvm);return static_call (kvm_x86_vm_init)(kvm);
arch/x86/net/bpf_jit_comp.c +48 -18
163 lines not on this page · raw message
block/bfq-iosched.c +3 -13
@@ -2662,15 +2662,6 @@ bfq_setup_merge(struct bfq_queue *bfqq, struct bfq_queue *new_bfqq)* are likely to increase the throughput. */ bfqq->new_bfqq = new_bfqq; -/* -* The above assignment schedules the following redirections: -* each time some I/O for bfqq arrives, the process that -* generated that I/O is disassociated from bfqq and -* associated with new_bfqq. Here we increases new_bfqq->ref -* in advance, adding the number of processes that are -* expected to be associated with new_bfqq as they happen to -* issue I/O. -*/ new_bfqq->ref += process_refs;return new_bfqq; }
@@ -2733,10 +2724,6 @@ bfq_setup_cooperator(struct bfq_data *bfqd, struct bfq_queue *bfqq, {struct bfq_queue *in_service_bfqq, *new_bfqq; -/* if a merge has already been setup, then proceed with that first */ -if (bfqq->new_bfqq) -return bfqq->new_bfqq; -/* * Check delayed stable merge for rotational or non-queueing * devs. For this branch to be executed, bfqq must not be
@@ -2838,6 +2825,9 @@ bfq_setup_cooperator(struct bfq_data *bfqd, struct bfq_queue *bfqq,if (bfq_too_late_for_merging (bfqq))return NULL ; +if (bfqq->new_bfqq) +return bfqq->new_bfqq; +if (!io_struct ||unlikely (bfqq == &bfqd->oom_bfqq))return NULL ;
drivers/acpi/nfit/core.c +12 -0
@@ -3007,6 +3007,18 @@ static int acpi_nfit_register_region(struct acpi_nfit_desc *acpi_desc, ndr_desc->target_node =NUMA_NO_NODE ; } +/* Fallback to address based numa information if node lookup failed */ +if (ndr_desc->numa_node ==NUMA_NO_NODE ) { + ndr_desc->numa_node =memory_add_physaddr_to_nid (spa->address); +dev_info (acpi_desc->dev,"changing numa node from %d to %d for nfit region [%pa-%pa]" , +NUMA_NO_NODE , ndr_desc->numa_node, &res.start, &res.end); + } +if (ndr_desc->target_node ==NUMA_NO_NODE ) { + ndr_desc->target_node =phys_to_target_node (spa->address); +dev_info (acpi_desc->dev,"changing target node from %d to %d for nfit region [%pa-%pa]" , +NUMA_NO_NODE , ndr_desc->numa_node, &res.start, &res.end); + } +/* * Persistence domain bits are hierarchical, if * ACPI_NFIT_CAPABILITY_CACHE_FLUSH is set then
drivers/base/core.c +31 -5
@@ -1721,6 +1721,25 @@ static int fw_devlink_create_devlink(struct device *con,struct device *sup_dev;int ret =0 ; +/* +* In some cases, a device P might also be a supplier to its child node +* C. However, this would defer the probe of C until the probe of P +* completes successfully. This is perfectly fine in the device driver +* model. device_add() doesn't guarantee probe completion of the device +* by the time it returns. +* +* However, there are a few drivers that assume C will finish probing +* as soon as it's added and before P finishes probing. So, we provide +* a flag to let fw_devlink know not to delay the probe of C until the +* probe of P completes successfully. +* +* When such a flag is set, we can't create device links where P is the +* supplier of C as that would delay the probe of C. +*/ +if (sup_handle->flags &FWNODE_FLAG_NEEDS_CHILD_BOUND_ON_ADD && +fwnode_is_ancestor_of (sup_handle, con->fwnode)) +return -EINVAL ; + sup_dev =get_dev_from_fwnode (sup_handle);if (sup_dev) {/*
@@ -1771,14 +1790,21 @@ static int fw_devlink_create_devlink(struct device *con,* be broken by applying logic. Check for these types of cycles and * break them so that devices in the cycle probe properly. * -* If the supplier's parent is dependent on the consumer, then -* the consumer-supplier dependency is a false dependency. So, -* treat it as an invalid link. +* If the supplier's parent is dependent on the consumer, then the +* consumer and supplier have a cyclic dependency. Since fw_devlink +* can't tell which of the inferred dependencies are incorrect, don't +* enforce probe ordering between any of the devices in this cyclic +* dependency. Do this by relaxing all the fw_devlink device links in +* this cycle and by treating the fwnode link between the consumer and +* the supplier as an invalid dependency. */ sup_dev =fwnode_get_next_parent_dev (sup_handle);if (sup_dev &&device_is_dependent (con, sup_dev)) { -dev_dbg (con,"Not linking to %pfwP - False link\n" , - sup_handle); +dev_info (con,"Fixing up cyclic dependency with %pfwP (%s)\n" , + sup_handle,dev_name (sup_dev)); +device_links_write_lock (); +fw_devlink_relax_cycle (con, sup_dev); +device_links_write_unlock (); ret = -EINVAL ; }else {/*
drivers/block/nbd.c +17 -12
@@ -97,13 +97,18 @@ struct nbd_config {atomic_t recv_threads;wait_queue_head_t recv_wq; -loff_t blksize; +unsigned int blksize_bits;loff_t bytesize;#if IS_ENABLED (CONFIG_DEBUG_FS )struct dentry *dbg_dir;#endif }; +static inline unsigned int nbd_blksize (struct nbd_config *config) +{ +return 1u << config->blksize_bits; +} +struct nbd_device {struct blk_mq_tag_set tag_set;
@@ -147,7 +152,7 @@ static struct dentry *nbd_dbg_dir;#define NBD_MAGIC 0x68797548 -#define NBD_DEF_BLKSIZE 1024 +#define NBD_DEF_BLKSIZE_BITS 10static unsigned int nbds_max =16 ;static int max_part =16 ;
@@ -350,12 +355,12 @@ static int nbd_set_size(struct nbd_device *nbd, loff_t bytesize, loff_t blksize) {if (!blksize) - blksize =NBD_DEF_BLKSIZE ; + blksize =1u <<NBD_DEF_BLKSIZE_BITS ;if (blksize <512 || blksize >PAGE_SIZE || !is_power_of_2 (blksize))return -EINVAL ; nbd->config->bytesize = bytesize; - nbd->config->blksize = blksize; + nbd->config->blksize_bits =__ffs (blksize);if (!nbd->task_recv)return 0 ;
@@ -1370,7 +1375,7 @@ static int nbd_start_device(struct nbd_device *nbd) args->index = i;queue_work (nbd->recv_workq, &args->work); } -return nbd_set_size (nbd, config->bytesize, config->blksize); +return nbd_set_size (nbd, config->bytesize,nbd_blksize (config)); }static int nbd_start_device_ioctl (struct nbd_device *nbd,struct block_device *bdev)
@@ -1439,11 +1444,11 @@ static int __nbd_ioctl(struct block_device *bdev, struct nbd_device *nbd,case NBD_SET_BLKSIZE :return nbd_set_size (nbd, config->bytesize, arg);case NBD_SET_SIZE : -return nbd_set_size (nbd, arg, config->blksize); +return nbd_set_size (nbd, arg,nbd_blksize (config));case NBD_SET_SIZE_BLOCKS : -if (check_mul_overflow ((loff_t )arg, config->blksize, &bytesize)) +if (check_shl_overflow (arg, config->blksize_bits, &bytesize))return -EINVAL ; -return nbd_set_size (nbd, bytesize, config->blksize); +return nbd_set_size (nbd, bytesize,nbd_blksize (config));case NBD_SET_TIMEOUT :nbd_set_cmd_timeout (nbd, arg);return 0 ;
@@ -1509,7 +1514,7 @@ static struct nbd_config *nbd_alloc_config(void)atomic_set (&config->recv_threads,0 );init_waitqueue_head (&config->recv_wq);init_waitqueue_head (&config->conn_wait); - config->blksize =NBD_DEF_BLKSIZE ; + config->blksize_bits =NBD_DEF_BLKSIZE_BITS ;atomic_set (&config->live_connections,0 );try_module_get (THIS_MODULE );return config;
@@ -1637,7 +1642,7 @@ static int nbd_dev_dbg_init(struct nbd_device *nbd)debugfs_create_file ("tasks" ,0444 , dir, nbd, &nbd_dbg_tasks_fops);debugfs_create_u64 ("size_bytes" ,0444 , dir, &config->bytesize);debugfs_create_u32 ("timeout" ,0444 , dir, &nbd->tag_set.timeout); -debugfs_create_u64 ("blocksize" ,0444 , dir, &config->blksize); +debugfs_create_u32 ("blocksize_bits" ,0444 , dir, &config->blksize_bits);debugfs_create_file ("flags" ,0444 , dir, nbd, &nbd_dbg_flags_fops);return 0 ;
@@ -1841,7 +1846,7 @@ nbd_device_policy[NBD_DEVICE_ATTR_MAX + 1] = {static int nbd_genl_size_set (struct genl_info *info,struct nbd_device *nbd) {struct nbd_config *config = nbd->config; -u64 bsize = config->blksize; +u64 bsize =nbd_blksize (config);u64 bytes = config->bytesize;if (info->attrs[NBD_ATTR_SIZE_BYTES ])
@@ -1850,7 +1855,7 @@ static int nbd_genl_size_set(struct genl_info *info, struct nbd_device *nbd)if (info->attrs[NBD_ATTR_BLOCK_SIZE_BYTES ]) bsize =nla_get_u64 (info->attrs[NBD_ATTR_BLOCK_SIZE_BYTES ]); -if (bytes != config->bytesize || bsize != config->blksize) +if (bytes != config->bytesize || bsize !=nbd_blksize (config))return nbd_set_size (nbd, bytes, bsize);return 0 ; }
drivers/cpufreq/cpufreq_governor_attr_set.c +1 -1
@@ -74,8 +74,8 @@ unsigned int gov_attr_set_put(struct gov_attr_set *attr_set, struct list_head *lif (count)return count; -kobject_put (&attr_set->kobj);mutex_destroy (&attr_set->update_lock); +kobject_put (&attr_set->kobj);return 0 ; }EXPORT_SYMBOL_GPL (gov_attr_set_put);
drivers/crypto/ccp/ccp-ops.c +8 -6
@@ -778,7 +778,7 @@ ccp_run_aes_gcm_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) in_place ?DMA_BIDIRECTIONAL : DMA_TO_DEVICE);if (ret) - goto e_ctx; + goto e_aad;if (in_place) { dst = src;
@@ -863,7 +863,7 @@ ccp_run_aes_gcm_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) op.u.aes.size =0 ; ret = cmd_q->ccp->vdata->perform->aes (&op);if (ret) - goto e_dst; + goto e_final_wa;if (aes->action ==CCP_AES_ACTION_ENCRYPT ) {/* Put the ciphered tag after the ciphertext. */
@@ -873,17 +873,19 @@ ccp_run_aes_gcm_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) ret =ccp_init_dm_workarea (&tag, cmd_q, authsize,DMA_BIDIRECTIONAL );if (ret) - goto e_tag; + goto e_final_wa; ret =ccp_set_dm_area (&tag,0 , p_tag,0 , authsize); -if (ret) - goto e_tag; +if (ret) { +ccp_dm_free (&tag); + goto e_final_wa; + } ret =crypto_memneq (tag.address, final_wa.address, authsize) ? -EBADMSG :0 ;ccp_dm_free (&tag); } -e_tag: +e_final_wa:ccp_dm_free (&final_wa); e_dst:
drivers/gpio/gpio-pca953x.c +2 -9
@@ -468,15 +468,8 @@ static int pca953x_gpio_get_value(struct gpio_chip *gc, unsigned off)mutex_lock (&chip->i2c_lock); ret =regmap_read (chip->regmap, inreg, ®_val);mutex_unlock (&chip->i2c_lock); -if (ret <0 ) { -/* -* NOTE: -* diagnostic already emitted; that's all we should -* do unless gpio_*_value_cansleep() calls become different -* from their nonsleeping siblings (and report faults). -*/ -return 0 ; - } +if (ret <0 ) +return ret;return !!(reg_val & bit); }
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +8 -7
@@ -3602,9 +3602,9 @@ int amdgpu_device_init(struct amdgpu_device *adev, fence_driver_init:/* Fence driver */ - r =amdgpu_fence_driver_init (adev); + r =amdgpu_fence_driver_sw_init (adev);if (r) { -dev_err (adev->dev,"amdgpu_fence_driver_init failed\n" ); +dev_err (adev->dev,"amdgpu_fence_driver_sw_init failed\n" );amdgpu_vf_error_put (adev,AMDGIM_ERROR_VF_FENCE_INIT_FAIL ,0 ,0 ); goto failed; }
@@ -3631,6 +3631,8 @@ int amdgpu_device_init(struct amdgpu_device *adev, goto release_ras_con; } +amdgpu_fence_driver_hw_init (adev); + dev_info(adev->dev, "SE %d, SH per SE %d, CU per SH %d, active_cu_number %d\n", adev->gfx.config.max_shader_engines,
@@ -3798,7 +3800,7 @@ void amdgpu_device_fini_hw(struct amdgpu_device *adev)else drm_atomic_helper_shutdown (adev_to_drm (adev)); } -amdgpu_fence_driver_fini_hw (adev); +amdgpu_fence_driver_hw_fini (adev);if (adev->pm_sysfs_en)amdgpu_pm_sysfs_fini (adev);
@@ -3820,7 +3822,7 @@ void amdgpu_device_fini_hw(struct amdgpu_device *adev)void amdgpu_device_fini_sw (struct amdgpu_device *adev) {amdgpu_device_ip_fini (adev); -amdgpu_fence_driver_fini_sw (adev); +amdgpu_fence_driver_sw_fini (adev);release_firmware (adev->firmware.gpu_info_fw); adev->firmware.gpu_info_fw =NULL ; adev->accel_working = false;
@@ -3895,7 +3897,7 @@ int amdgpu_device_suspend(struct drm_device *dev, bool fbcon)/* evict vram memory */ amdgpu_bo_evict_vram (adev); -amdgpu_fence_driver_suspend (adev); +amdgpu_fence_driver_hw_fini (adev);amdgpu_device_ip_suspend_phase2 (adev);/* evict remaining vram memory
@@ -3940,8 +3942,7 @@ int amdgpu_device_resume(struct drm_device *dev, bool fbcon)dev_err (adev->dev,"amdgpu_device_ip_resume failed (%d).\n" , r);return r; } -amdgpu_fence_driver_resume (adev); - +amdgpu_fence_driver_hw_init (adev); r =amdgpu_device_ip_late_init (adev);if (r)
drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +31 -0
@@ -837,6 +837,28 @@ static int convert_tiling_flags_to_modifier(struct amdgpu_framebuffer *afb)return 0 ; } +/* Mirrors the is_displayable check in radeonsi's gfx6_compute_surface */ +static int check_tiling_flags_gfx6 (struct amdgpu_framebuffer *afb) +{ +u64 micro_tile_mode; + +/* Zero swizzle mode means linear */ +if (AMDGPU_TILING_GET (afb->tiling_flags,SWIZZLE_MODE ) ==0 ) +return 0 ; + + micro_tile_mode =AMDGPU_TILING_GET (afb->tiling_flags,MICRO_TILE_MODE ); +switch (micro_tile_mode) { +case 0 :/* DISPLAY */ +case 3 :/* RENDER */ +return 0 ; +default : +drm_dbg_kms (afb->base.dev, +"Micro tile mode %llu not supported for scanout\n" , + micro_tile_mode); +return -EINVAL ; + } +} +static void get_block_dimensions (unsigned int block_log2,unsigned int cpp,unsigned int *width,unsigned int *height) {
@@ -1103,6 +1125,7 @@ int amdgpu_display_framebuffer_init(struct drm_device *dev,const struct drm_mode_fb_cmd2 *mode_cmd, struct drm_gem_object *obj) { + struct amdgpu_device *adev = drm_to_adev(dev);int ret, i;/*
@@ -1122,6 +1145,14 @@ int amdgpu_display_framebuffer_init(struct drm_device *dev,if (ret)return ret; +if (!dev->mode_config.allow_fb_modifiers) { +drm_WARN_ONCE (dev, adev->family >=AMDGPU_FAMILY_AI , +"GFX9+ requires FB check based on format modifier\n" ); + ret =check_tiling_flags_gfx6 (rfb); +if (ret) +return ret; + } +if (dev->mode_config.allow_fb_modifiers && !(rfb->base.flags &DRM_MODE_FB_MODIFIERS )) { ret =convert_tiling_flags_to_modifier (rfb);
drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c +19 -43
131 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h +4 -5
@@ -106,9 +106,6 @@ struct amdgpu_fence_driver {struct dma_fence **fences; }; -int amdgpu_fence_driver_init (struct amdgpu_device *adev); -void amdgpu_fence_driver_fini_hw (struct amdgpu_device *adev); -void amdgpu_fence_driver_fini_sw (struct amdgpu_device *adev);void amdgpu_fence_driver_force_completion (struct amdgpu_ring *ring); int amdgpu_fence_driver_init_ring(struct amdgpu_ring *ring,
@@ -117,8 +114,10 @@ int amdgpu_fence_driver_init_ring(struct amdgpu_ring *ring,int amdgpu_fence_driver_start_ring (struct amdgpu_ring *ring,struct amdgpu_irq_src *irq_src,unsigned irq_type); -void amdgpu_fence_driver_suspend (struct amdgpu_device *adev); -void amdgpu_fence_driver_resume (struct amdgpu_device *adev); +void amdgpu_fence_driver_hw_init (struct amdgpu_device *adev); +void amdgpu_fence_driver_hw_fini (struct amdgpu_device *adev); +int amdgpu_fence_driver_sw_init (struct amdgpu_device *adev); +void amdgpu_fence_driver_sw_fini (struct amdgpu_device *adev);int amdgpu_fence_emit (struct amdgpu_ring *ring,struct dma_fence **fence,unsigned flags); int amdgpu_fence_emit_polling(struct amdgpu_ring *ring, uint32_t *s,
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +1 -1
@@ -3598,7 +3598,7 @@ static int gfx_v9_0_mqd_init(struct amdgpu_ring *ring)/* set static priority for a queue/ring */ gfx_v9_0_mqd_set_priority (ring, mqd); - mqd->cp_hqd_quantum =RREG32 (mmCP_HQD_QUANTUM); + mqd->cp_hqd_quantum =RREG32_SOC15 (GC ,0 , mmCP_HQD_QUANTUM);/* map_queues packet doesn't need activate the queue, * so only kiq need set this field.
drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c +8 -0
@@ -883,6 +883,12 @@ static int sdma_v5_2_start(struct amdgpu_device *adev)msleep (1000 ); } +/* TODO: check whether can submit a doorbell request to raise +* a doorbell fence to exit gfxoff. +*/ +if (adev->in_s0ix) +amdgpu_gfx_off_ctrl (adev, false); +sdma_v5_2_soft_reset (adev);/* unhalt the MEs */ sdma_v5_2_enable (adev, true);
@@ -891,6 +897,8 @@ static int sdma_v5_2_start(struct amdgpu_device *adev)/* start the gfx rings and rlc compute queues */ r =sdma_v5_2_gfx_resume (adev); +if (adev->in_s0ix) +amdgpu_gfx_off_ctrl (adev, true);if (r)return r; r =sdma_v5_2_rlc_resume (adev);
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +2 -0
@@ -1117,6 +1117,7 @@ static int amdgpu_dm_init(struct amdgpu_device *adev) init_data.asic_id.pci_revision_id = adev->pdev->revision; init_data.asic_id.hw_internal_rev = adev->external_rev_id; + init_data.asic_id.chip_id = adev->pdev->device; init_data.asic_id.vram_width = adev->gmc.vram_width;/* TODO: initialize init_data.asic_id.vram_type here!!!! */
@@ -1724,6 +1725,7 @@ static int dm_late_init(void *handle) linear_lut[i] =0xFFFF * i /15 ; params.set =0 ; + params.backlight_ramping_override = false; params.backlight_ramping_start =0xCCCC ; params.backlight_ramping_reduction =0xCCCCCCCC ; params.backlight_lut_array_size =16 ;
drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +7 -8
@@ -1813,14 +1813,13 @@ bool perform_link_training_with_retries(if (panel_mode ==DP_PANEL_MODE_EDP ) {struct cp_psp *cp_psp = &stream->ctx->cp_psp; -if (cp_psp && cp_psp->funcs.enable_assr) { -if (!cp_psp->funcs.enable_assr (cp_psp->handle, link)) { -/* since eDP implies ASSR on, change panel -* mode to disable ASSR -*/ - panel_mode =DP_PANEL_MODE_DEFAULT ; - } - } +if (cp_psp && cp_psp->funcs.enable_assr) +/* ASSR is bound to fail with unsigned PSP +* verstage used during devlopment phase. +* Report and continue with eDP panel mode to +* perform eDP link training with right settings +*/ + cp_psp->funcs.enable_assr (cp_psp->handle, link); }#endif
drivers/gpu/drm/i915/gt/intel_rps.c +0 -2
@@ -861,8 +861,6 @@ void intel_rps_park(struct intel_rps *rps) {int adj; -GEM_BUG_ON (atomic_read (&rps->num_waiters)); -if (!intel_rps_clear_active (rps))return ;
drivers/gpu/drm/i915/gvt/scheduler.c +2 -2
@@ -576,7 +576,7 @@ static int prepare_shadow_batch_buffer(struct intel_vgpu_workload *workload)/* No one is going to touch shadow bb from now on. */ i915_gem_object_flush_map (bb->obj); -i915_gem_object_unlock (bb->obj); +i915_gem_ww_ctx_fini (&ww); } }return 0 ;
@@ -630,7 +630,7 @@ static int prepare_shadow_wa_ctx(struct intel_shadow_wa_ctx *wa_ctx)return ret; } -i915_gem_object_unlock (wa_ctx->indirect_ctx.obj); +i915_gem_ww_ctx_fini (&ww);/* FIXME: we are not tracking our pinned VMA leaving it * up to the core to fix up the stray pin_count upon
drivers/gpu/drm/i915/i915_request.c +2 -9
@@ -914,8 +914,6 @@ static void __i915_request_ctor(void *arg)i915_sw_fence_init (&rq->submit, submit_notify);i915_sw_fence_init (&rq->semaphore, semaphore_notify); -dma_fence_init (&rq->fence, &i915_fence_ops, &rq->lock,0 ,0 ); - rq->capture_list =NULL ;init_llist_head (&rq->execute_cb);
@@ -978,17 +976,12 @@ __i915_request_create(struct intel_context *ce, gfp_t gfp) rq->ring = ce->ring; rq->execution_mask = ce->engine->mask; -kref_init (&rq->fence.refcount); - rq->fence.flags =0 ; - rq->fence.error =0 ; -INIT_LIST_HEAD (&rq->fence.cb_list); - ret =intel_timeline_get_seqno (tl, rq, &seqno);if (ret) goto err_free; - rq->fence.context = tl->fence_context; - rq->fence.seqno = seqno; +dma_fence_init (&rq->fence, &i915_fence_ops, &rq->lock, + tl->fence_context, seqno);RCU_INIT_POINTER (rq->timeline, tl); rq->hwsp_seqno = tl->hwsp_seqno;
drivers/hid/amd-sfh-hid/amd_sfh_pcie.c +4 -4
@@ -239,13 +239,13 @@ static int amd_mp2_pci_probe(struct pci_dev *pdev, const struct pci_device_id *iif (!privdata->cl_data)return -ENOMEM ; - rc =devm_add_action_or_reset (&pdev->dev, amd_mp2_pci_remove, privdata); +mp2_select_ops (privdata); + + rc =amd_sfh_hid_client_init (privdata);if (rc)return rc; -mp2_select_ops (privdata); - -return amd_sfh_hid_client_init (privdata); +return devm_add_action_or_reset (&pdev->dev, amd_mp2_pci_remove, privdata); }static const struct pci_device_id amd_mp2_pci_tbl[] = {
drivers/hid/hid-betopff.c +10 -3
@@ -56,15 +56,22 @@ static int betopff_init(struct hid_device *hid) {struct betopff_device *betopff;struct hid_report *report; -struct hid_input *hidinput = - list_first_entry(&hid->inputs, struct hid_input, list); +struct hid_input *hidinput;struct list_head *report_list = &hid->report_enum[HID_OUTPUT_REPORT ].report_list; -struct input_dev *dev = hidinput->input; +struct input_dev *dev;int field_count =0 ;int error;int i, j; +if (list_empty (&hid->inputs)) { +hid_err (hid,"no inputs found\n" ); +return -ENODEV ; + } + + hidinput = list_first_entry(&hid->inputs, struct hid_input, list); + dev = hidinput->input; +if (list_empty (report_list)) {hid_err (hid,"no output reports found\n" );return -ENODEV ;
drivers/hid/hid-u2fzero.c +3 -1
@@ -198,7 +198,9 @@ static int u2fzero_rng_read(struct hwrng *rng, void *data, } ret =u2fzero_recv (dev, &req, &resp); -if (ret <0 ) + +/* ignore errors or packets without data */ + if (ret < offsetof(struct u2f_hid_msg, init.data))return 0 ;/* only take the minimum amount of data it is safe to take */
drivers/hid/usbhid/hid-core.c +12 -1
@@ -505,7 +505,7 @@ static void hid_ctrl(struct urb *urb)if (unplug) { usbhid->ctrltail = usbhid->ctrlhead; - }else { + }else if (usbhid->ctrlhead != usbhid->ctrltail) { usbhid->ctrltail = (usbhid->ctrltail +1 ) & (HID_CONTROL_FIFO_SIZE -1 ); if (usbhid->ctrlhead != usbhid->ctrltail &&
@@ -1223,9 +1223,20 @@ static void usbhid_stop(struct hid_device *hid)mutex_lock (&usbhid->mutex);clear_bit (HID_STARTED , &usbhid->iofl); +spin_lock_irq (&usbhid->lock);/* Sync with error and led handlers */ set_bit (HID_DISCONNECTED , &usbhid->iofl); +while (usbhid->ctrltail != usbhid->ctrlhead) { +if (usbhid->ctrl[usbhid->ctrltail].dir ==USB_DIR_OUT ) { +kfree (usbhid->ctrl[usbhid->ctrltail].raw_report); + usbhid->ctrl[usbhid->ctrltail].raw_report =NULL ; + } + + usbhid->ctrltail = (usbhid->ctrltail +1 ) & + (HID_CONTROL_FIFO_SIZE -1 ); + }spin_unlock_irq (&usbhid->lock); +usb_kill_urb (usbhid->urbin);usb_kill_urb (usbhid->urbout);usb_kill_urb (usbhid->urbctrl);
drivers/hwmon/mlxreg-fan.c +9 -3
@@ -315,8 +315,8 @@ static int mlxreg_fan_set_cur_state(struct thermal_cooling_device *cdev, {struct mlxreg_fan *fan = cdev->devdata;unsigned long cur_state; +int i, config =0 ;u32 regval; -int i;int err;/*
@@ -329,6 +329,12 @@ static int mlxreg_fan_set_cur_state(struct thermal_cooling_device *cdev,* overwritten. */ if (state >=MLXREG_FAN_SPEED_MIN && state <=MLXREG_FAN_SPEED_MAX ) { +/* +* This is configuration change, which is only supported through sysfs. +* For configuration non-zero value is to be returned to avoid thermal +* statistics update. +*/ + config =1 ; state -=MLXREG_FAN_MAX_STATE ;for (i =0 ; i < state; i++) fan->cooling_levels[i] = state;
@@ -343,7 +349,7 @@ static int mlxreg_fan_set_cur_state(struct thermal_cooling_device *cdev, cur_state =MLXREG_FAN_PWM_DUTY2STATE (regval);if (state < cur_state) -return 0 ; +return config; state = cur_state; }
@@ -359,7 +365,7 @@ static int mlxreg_fan_set_cur_state(struct thermal_cooling_device *cdev,dev_err (fan->dev,"Failed to write PWM duty\n" );return err; } -return 0 ; +return config; }static const struct thermal_cooling_device_ops mlxreg_fan_cooling_ops = {
drivers/hwmon/occ/common.c +5 -12
@@ -340,18 +340,11 @@ static ssize_t occ_show_temp_10(struct device *dev,if (val ==OCC_TEMP_SENSOR_FAULT )return -EREMOTEIO ; -/* -* VRM doesn't return temperature, only alarm bit. This -* attribute maps to tempX_alarm instead of tempX_input for -* VRM -*/ -if (temp->fru_type !=OCC_FRU_TYPE_VRM ) { -/* sensor not ready */ -if (val ==0 ) -return -EAGAIN ; +/* sensor not ready */ +if (val ==0 ) +return -EAGAIN ; - val *=1000 ; - } + val *=1000 ;break ;case 2 : val = temp->fru_type;
@@ -886,7 +879,7 @@ static int occ_setup_sensor_attrs(struct occ *occ) 0, i); attr++; -if (sensors->temp.version >1 && +if (sensors->temp.version ==2 && temp->fru_type ==OCC_FRU_TYPE_VRM ) {snprintf (attr->name,sizeof (attr->name),"temp%d_alarm" , s);
drivers/hwmon/pmbus/mp2975.c +1 -1
@@ -54,7 +54,7 @@#define MP2975_RAIL2_FUNC (PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT | \ PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT | \ - PMBUS_PHASE_VIRTUAL) + PMBUS_HAVE_POUT | PMBUS_PHASE_VIRTUAL)struct mp2975_data {struct pmbus_driver_info info;
drivers/hwmon/tmp421.c +39 -32
119 lines not on this page · raw message
drivers/hwmon/w83791d.c +11 -18
@@ -273,9 +273,6 @@ struct w83791d_data {char valid;/* !=0 if following fields are valid */ unsigned long last_updated;/* In jiffies */ -/* array of 2 pointers to subclients */ -struct i2c_client *lm75[2 ]; -/* volts */ u8 in[NUMBER_OF_VIN ];/* Register value */ u8 in_max[NUMBER_OF_VIN ];/* Register value */
@@ -1257,7 +1254,6 @@ static const struct attribute_group w83791d_group_fanpwm45 = {static int w83791d_detect_subclients (struct i2c_client *client) {struct i2c_adapter *adapter = client->adapter; -struct w83791d_data *data =i2c_get_clientdata (client);int address = client->addr;int i, id;u8 val;
@@ -1280,22 +1276,19 @@ static int w83791d_detect_subclients(struct i2c_client *client) } val =w83791d_read (client,W83791D_REG_I2C_SUBADDR ); -if (!(val &0x08 )) - data->lm75[0 ] =devm_i2c_new_dummy_device (&client->dev, adapter, -0x48 + (val &0x7 )); -if (!(val &0x80 )) { -if (!IS_ERR (data->lm75[0 ]) && - ((val &0x7 ) == ((val >>4 ) &0x7 ))) { -dev_err (&client->dev, -"duplicate addresses 0x%x, " -"use force_subclient\n" , - data->lm75[0 ]->addr); -return -ENODEV ; - } - data->lm75[1 ] =devm_i2c_new_dummy_device (&client->dev, adapter, -0x48 + ((val >>4 ) &0x7 )); + +if (!(val &0x88 ) && (val &0x7 ) == ((val >>4 ) &0x7 )) { +dev_err (&client->dev, +"duplicate addresses 0x%x, use force_subclient\n" ,0x48 + (val &0x7 )); +return -ENODEV ; } +if (!(val &0x08 )) +devm_i2c_new_dummy_device (&client->dev, adapter,0x48 + (val &0x7 )); + +if (!(val &0x80 )) +devm_i2c_new_dummy_device (&client->dev, adapter,0x48 + ((val >>4 ) &0x7 )); +return 0 ; }
drivers/hwmon/w83792d.c +11 -17
@@ -264,9 +264,6 @@ struct w83792d_data {char valid;/* !=0 if following fields are valid */ unsigned long last_updated;/* In jiffies */ -/* array of 2 pointers to subclients */ -struct i2c_client *lm75[2 ]; -u8 in[9 ];/* Register value */ u8 in_max[9 ];/* Register value */ u8 in_min[9 ];/* Register value */
@@ -927,7 +924,6 @@ w83792d_detect_subclients(struct i2c_client *new_client)int address = new_client->addr;u8 val;struct i2c_adapter *adapter = new_client->adapter; -struct w83792d_data *data =i2c_get_clientdata (new_client); id =i2c_adapter_id (adapter);if (force_subclients[0 ] == id && force_subclients[1 ] == address) {
@@ -946,21 +942,19 @@ w83792d_detect_subclients(struct i2c_client *new_client) } val =w83792d_read_value (new_client,W83792D_REG_I2C_SUBADDR ); -if (!(val &0x08 )) - data->lm75[0 ] =devm_i2c_new_dummy_device (&new_client->dev, adapter, -0x48 + (val &0x7 )); -if (!(val &0x80 )) { -if (!IS_ERR (data->lm75[0 ]) && - ((val &0x7 ) == ((val >>4 ) &0x7 ))) { -dev_err (&new_client->dev, -"duplicate addresses 0x%x, use force_subclient\n" , - data->lm75[0 ]->addr); -return -ENODEV ; - } - data->lm75[1 ] =devm_i2c_new_dummy_device (&new_client->dev, adapter, -0x48 + ((val >>4 ) &0x7 )); + +if (!(val &0x88 ) && (val &0x7 ) == ((val >>4 ) &0x7 )) { +dev_err (&new_client->dev, +"duplicate addresses 0x%x, use force_subclient\n" ,0x48 + (val &0x7 )); +return -ENODEV ; } +if (!(val &0x08 )) +devm_i2c_new_dummy_device (&new_client->dev, adapter,0x48 + (val &0x7 )); + +if (!(val &0x80 )) +devm_i2c_new_dummy_device (&new_client->dev, adapter,0x48 + ((val >>4 ) &0x7 )); +return 0 ; }
drivers/hwmon/w83793.c +11 -15
@@ -202,7 +202,6 @@ static inline s8 TEMP_TO_REG(long val, s8 min, s8 max) }struct w83793_data { -struct i2c_client *lm75[2 ];struct device *hwmon_dev;struct mutex update_lock;char valid;/* !=0 if following fields are valid */
@@ -1566,7 +1565,6 @@ w83793_detect_subclients(struct i2c_client *client)int address = client->addr;u8 tmp;struct i2c_adapter *adapter = client->adapter; -struct w83793_data *data =i2c_get_clientdata (client); id =i2c_adapter_id (adapter);if (force_subclients[0 ] == id && force_subclients[1 ] == address) {
@@ -1586,21 +1584,19 @@ w83793_detect_subclients(struct i2c_client *client) } tmp =w83793_read_value (client,W83793_REG_I2C_SUBADDR ); -if (!(tmp &0x08 )) - data->lm75[0 ] =devm_i2c_new_dummy_device (&client->dev, adapter, -0x48 + (tmp &0x7 )); -if (!(tmp &0x80 )) { -if (!IS_ERR (data->lm75[0 ]) - && ((tmp &0x7 ) == ((tmp >>4 ) &0x7 ))) { -dev_err (&client->dev, -"duplicate addresses 0x%x, " -"use force_subclients\n" , data->lm75[0 ]->addr); -return -ENODEV ; - } - data->lm75[1 ] =devm_i2c_new_dummy_device (&client->dev, adapter, -0x48 + ((tmp >>4 ) &0x7 )); + +if (!(tmp &0x88 ) && (tmp &0x7 ) == ((tmp >>4 ) &0x7 )) { +dev_err (&client->dev, +"duplicate addresses 0x%x, use force_subclient\n" ,0x48 + (tmp &0x7 )); +return -ENODEV ; } +if (!(tmp &0x08 )) +devm_i2c_new_dummy_device (&client->dev, adapter,0x48 + (tmp &0x7 )); + +if (!(tmp &0x80 )) +devm_i2c_new_dummy_device (&client->dev, adapter,0x48 + ((tmp >>4 ) &0x7 )); +return 0 ; }
drivers/infiniband/core/cma.c +45 -6
107 lines not on this page · raw message
drivers/infiniband/core/cma_priv.h +1 -0
@@ -91,6 +91,7 @@ struct rdma_id_private {u8 afonly;u8 timeout;u8 min_rnr_timer; +u8 used_resolve_ip;enum ib_gid_type gid_type;/*
drivers/infiniband/hw/hfi1/ipoib_tx.c +4 -4
@@ -873,14 +873,14 @@ void hfi1_ipoib_tx_timeout(struct net_device *dev, unsigned int q)struct hfi1_ipoib_txq *txq = &priv->txqs[q];u64 completed =atomic64_read (&txq->complete_txreqs); -dd_dev_info (priv->dd,"timeout txq %llx q %u stopped %u stops %d no_desc %d ring_full %d\n" , - (unsigned long long )txq, q, +dd_dev_info (priv->dd,"timeout txq %p q %u stopped %u stops %d no_desc %d ring_full %d\n" , + txq, q,__netif_subqueue_stopped (dev, txq->q_idx),atomic_read (&txq->stops),atomic_read (&txq->no_desc),atomic_read (&txq->ring_full)); -dd_dev_info (priv->dd,"sde %llx engine %u\n" , - (unsigned long long )txq->sde, +dd_dev_info (priv->dd,"sde %p engine %u\n" , + txq->sde, txq->sde ? txq->sde->this_idx :0 );dd_dev_info (priv->dd,"flow %x\n" , txq->flow.as_int); dd_dev_info(priv->dd, "sent %llu completed %llu used %llu\n",
drivers/infiniband/hw/hns/hns_roce_cq.c +22 -9
@@ -326,19 +326,30 @@ static void set_cq_param(struct hns_roce_cq *hr_cq, u32 cq_entries, int vector,INIT_LIST_HEAD (&hr_cq->rq_list); } -static void set_cqe_size (struct hns_roce_cq *hr_cq,struct ib_udata *udata, -struct hns_roce_ib_create_cq *ucmd) +static int set_cqe_size (struct hns_roce_cq *hr_cq,struct ib_udata *udata, +struct hns_roce_ib_create_cq *ucmd) {struct hns_roce_dev *hr_dev =to_hr_dev (hr_cq->ib_cq.device); -if (udata) { -if (udata->inlen >=offsetofend (typeof (*ucmd), cqe_size)) - hr_cq->cqe_size = ucmd->cqe_size; -else - hr_cq->cqe_size =HNS_ROCE_V2_CQE_SIZE ; - }else { +if (!udata) { hr_cq->cqe_size = hr_dev->caps.cqe_sz; +return 0 ; + } + +if (udata->inlen >=offsetofend (typeof (*ucmd), cqe_size)) { +if (ucmd->cqe_size !=HNS_ROCE_V2_CQE_SIZE && + ucmd->cqe_size !=HNS_ROCE_V3_CQE_SIZE ) { +ibdev_err (&hr_dev->ib_dev, +"invalid cqe size %u.\n" , ucmd->cqe_size); +return -EINVAL ; + } + + hr_cq->cqe_size = ucmd->cqe_size; + }else { + hr_cq->cqe_size =HNS_ROCE_V2_CQE_SIZE ; } + +return 0 ; } int hns_roce_create_cq(struct ib_cq *ib_cq, const struct ib_cq_init_attr *attr,
@@ -366,7 +377,9 @@ int hns_roce_create_cq(struct ib_cq *ib_cq, const struct ib_cq_init_attr *attr,set_cq_param (hr_cq, attr->cqe, attr->comp_vector, &ucmd); -set_cqe_size (hr_cq, udata, &ucmd); + ret =set_cqe_size (hr_cq, udata, &ucmd); +if (ret) +return ret; ret =alloc_cq_buf (hr_dev, hr_cq, udata, ucmd.buf_addr);if (ret) {
drivers/infiniband/hw/hns/hns_roce_hw_v2.c +7 -6
@@ -3306,7 +3306,7 @@ static void __hns_roce_v2_cq_clean(struct hns_roce_cq *hr_cq, u32 qpn, dest =get_cqe_v2 (hr_cq, (prod_index + nfreed) & hr_cq->ib_cq.cqe); owner_bit =hr_reg_read (dest,CQE_OWNER ); -memcpy (dest, cqe,sizeof (*cqe)); +memcpy (dest, cqe, hr_cq->cqe_size);hr_reg_write (dest,CQE_OWNER , owner_bit); } }
@@ -4411,7 +4411,12 @@ static int modify_qp_init_to_rtr(struct ib_qp *ibqp, hr_qp->path_mtu = ib_mtu; mtu =ib_mtu_enum_to_int (ib_mtu); -if (WARN_ON (mtu <0 )) +if (WARN_ON (mtu <=0 )) +return -EINVAL ; +#define MAX_LP_MSG_LEN 65536 +/* MTU * (2 ^ LP_PKTN_INI) shouldn't be bigger than 64KB */ + lp_pktn_ini =ilog2 (MAX_LP_MSG_LEN / mtu); +if (WARN_ON (lp_pktn_ini >=0xF ))return -EINVAL ;if (attr_mask &IB_QP_PATH_MTU ) {
@@ -4419,10 +4424,6 @@ static int modify_qp_init_to_rtr(struct ib_qp *ibqp,hr_reg_clear (qpc_mask,QPC_MTU ); } -#define MAX_LP_MSG_LEN 65536 -/* MTU * (2 ^ LP_PKTN_INI) shouldn't be bigger than 64KB */ - lp_pktn_ini =ilog2 (MAX_LP_MSG_LEN / mtu); -hr_reg_write (context,QPC_LP_PKTN_INI , lp_pktn_ini);hr_reg_clear (qpc_mask,QPC_LP_PKTN_INI );
drivers/infiniband/hw/irdma/cm.c +2 -2
@@ -3496,7 +3496,7 @@ static void irdma_cm_disconn_true(struct irdma_qp *iwqp) original_hw_tcp_state == IRDMA_TCP_STATE_TIME_WAIT || last_ae == IRDMA_AE_RDMAP_ROE_BAD_LLP_CLOSE || last_ae == IRDMA_AE_BAD_CLOSE || - last_ae == IRDMA_AE_LLP_CONNECTION_RESET || iwdev->reset)) { + last_ae == IRDMA_AE_LLP_CONNECTION_RESET || iwdev->rf->reset)) { issue_close =1 ; iwqp->cm_id =NULL ; qp->term_flags =0 ;
@@ -4250,7 +4250,7 @@ void irdma_cm_teardown_connections(struct irdma_device *iwdev, u32 *ipaddr, teardown_entry); attr.qp_state =IB_QPS_ERR ;irdma_modify_qp (&cm_node->iwqp->ibqp, &attr,IB_QP_STATE ,NULL ); -if (iwdev->reset) +if (iwdev->rf->reset)irdma_cm_disconn (cm_node->iwqp);irdma_rem_ref_cm_node (cm_node); }
drivers/infiniband/hw/irdma/hw.c +11 -3
@@ -176,6 +176,14 @@ static void irdma_set_flush_fields(struct irdma_sc_qp *qp,case IRDMA_AE_LLP_RECEIVED_MPA_CRC_ERROR : qp->flush_code =FLUSH_GENERAL_ERR ;break ; +case IRDMA_AE_LLP_TOO_MANY_RETRIES : + qp->flush_code =FLUSH_RETRY_EXC_ERR ; +break ; +case IRDMA_AE_AMP_MWBIND_INVALID_RIGHTS : +case IRDMA_AE_AMP_MWBIND_BIND_DISABLED : +case IRDMA_AE_AMP_MWBIND_INVALID_BOUNDS : + qp->flush_code =FLUSH_MW_BIND_ERR ; +break ;default : qp->flush_code =FLUSH_FATAL_ERR ;break ;
@@ -1489,7 +1497,7 @@ void irdma_reinitialize_ieq(struct irdma_sc_vsi *vsi)irdma_puda_dele_rsrc (vsi,IRDMA_PUDA_RSRC_TYPE_IEQ , false);if (irdma_initialize_ieq (iwdev)) { - iwdev->reset = true; + iwdev->rf->reset = true; rf->gen_ops.request_reset (rf); } }
@@ -1632,13 +1640,13 @@ void irdma_rt_deinit_hw(struct irdma_device *iwdev)case IEQ_CREATED :if (!iwdev->roce_mode)irdma_puda_dele_rsrc (&iwdev->vsi,IRDMA_PUDA_RSRC_TYPE_IEQ , - iwdev->reset); + iwdev->rf->reset); fallthrough;case ILQ_CREATED :if (!iwdev->roce_mode)irdma_puda_dele_rsrc (&iwdev->vsi,IRDMA_PUDA_RSRC_TYPE_ILQ , - iwdev->reset); + iwdev->rf->reset);break ;default :ibdev_warn (&iwdev->ibdev,"bad init_state = %d\n" , iwdev->init_state);
drivers/infiniband/hw/irdma/i40iw_if.c +1 -1
@@ -55,7 +55,7 @@ static void i40iw_close(struct i40e_info *cdev_info, struct i40e_client *client, iwdev =to_iwdev (ibdev);if (reset) - iwdev->reset = true; + iwdev->rf->reset = true; iwdev->iw_status =0 ;irdma_port_ibevent (iwdev);
drivers/infiniband/hw/irdma/main.h +0 -1
@@ -346,7 +346,6 @@ struct irdma_device { bool roce_mode:1; bool roce_dcqcn_en:1; bool dcb:1; - bool reset:1; bool iw_ooo:1;enum init_completion_state init_state;
drivers/infiniband/hw/irdma/user.h +2 -0
@@ -102,6 +102,8 @@ enum irdma_flush_opcode {FLUSH_REM_OP_ERR ,FLUSH_LOC_LEN_ERR ,FLUSH_FATAL_ERR , +FLUSH_RETRY_EXC_ERR , + FLUSH_MW_BIND_ERR, }; enum irdma_cmpl_status {
drivers/infiniband/hw/irdma/utils.c +1 -1
@@ -2510,7 +2510,7 @@ void irdma_modify_qp_to_err(struct irdma_sc_qp *sc_qp)struct irdma_qp *qp = sc_qp->qp_uk.back_qp;struct ib_qp_attr attr; -if (qp->iwdev->reset) +if (qp->iwdev->rf->reset)return ; attr.qp_state =IB_QPS_ERR ;
drivers/infiniband/hw/irdma/verbs.c +6 -3
@@ -535,8 +535,7 @@ static int irdma_destroy_qp(struct ib_qp *ibqp, struct ib_udata *udata)irdma_qp_rem_ref (&iwqp->ibqp);wait_for_completion (&iwqp->free_qp);irdma_free_lsmm_rsrc (iwqp); -if (!iwdev->reset) -irdma_cqp_qp_destroy_cmd (&iwdev->rf->sc_dev, &iwqp->sc_qp); +irdma_cqp_qp_destroy_cmd (&iwdev->rf->sc_dev, &iwqp->sc_qp);if (!iwqp->user_mode) {if (iwqp->iwscq) {
@@ -2041,7 +2040,7 @@ static int irdma_create_cq(struct ib_cq *ibcq,/* Kmode allocations */ int rsize; -if (entries > rf->max_cqe) { +if (entries <1 || entries > rf->max_cqe) { err_code = -EINVAL ; goto cq_free_rsrc; }
@@ -3359,6 +3358,10 @@ static enum ib_wc_status irdma_flush_err_to_ib_wc_status(enum irdma_flush_opcodereturn IB_WC_LOC_LEN_ERR ;case FLUSH_GENERAL_ERR :return IB_WC_WR_FLUSH_ERR ; +case FLUSH_RETRY_EXC_ERR : +return IB_WC_RETRY_EXC_ERR ; +case FLUSH_MW_BIND_ERR : +return IB_WC_MW_BIND_ERR ;case FLUSH_FATAL_ERR :default :return IB_WC_FATAL_ERR ;
drivers/interconnect/qcom/sdm660.c +5 -6
@@ -44,9 +44,9 @@#define NOC_PERM_MODE_BYPASS (1 << NOC_QOS_MODE_BYPASS)#define NOC_QOS_PRIORITYn_ADDR (n) (0x8 + (n * 0x1000)) -#define NOC_QOS_PRIORITY_MASK 0xf +#define NOC_QOS_PRIORITY_P1_MASK 0xc +#define NOC_QOS_PRIORITY_P0_MASK 0x3#define NOC_QOS_PRIORITY_P1_SHIFT 0x2 -#define NOC_QOS_PRIORITY_P0_SHIFT 0x3#define NOC_QOS_MODEn_ADDR (n) (0xc + (n * 0x1000))#define NOC_QOS_MODEn_MASK 0x3
@@ -307,7 +307,7 @@ DEFINE_QNODE(slv_bimc_cfg, SDM660_SLAVE_BIMC_CFG, 4, -1, 56, true, -1, 0, -1, 0)DEFINE_QNODE (slv_prng,SDM660_SLAVE_PRNG ,4 ,-1 ,44 , true,-1 ,0 ,-1 ,0 );DEFINE_QNODE (slv_spdm,SDM660_SLAVE_SPDM ,4 ,-1 ,60 , true,-1 ,0 ,-1 ,0 );DEFINE_QNODE (slv_qdss_cfg,SDM660_SLAVE_QDSS_CFG ,4 ,-1 ,63 , true,-1 ,0 ,-1 ,0 ); -DEFINE_QNODE (slv_cnoc_mnoc_cfg,SDM660_SLAVE_BLSP_1 ,4 ,-1 ,66 , true,-1 ,0 ,-1 ,SDM660_MASTER_CNOC_MNOC_CFG ); +DEFINE_QNODE (slv_cnoc_mnoc_cfg,SDM660_SLAVE_CNOC_MNOC_CFG ,4 ,-1 ,66 , true,-1 ,0 ,-1 ,SDM660_MASTER_CNOC_MNOC_CFG );DEFINE_QNODE (slv_snoc_cfg,SDM660_SLAVE_SNOC_CFG ,4 ,-1 ,70 , true,-1 ,0 ,-1 ,0 );DEFINE_QNODE (slv_qm_cfg,SDM660_SLAVE_QM_CFG ,4 ,-1 ,212 , true,-1 ,0 ,-1 ,0 );DEFINE_QNODE (slv_clk_ctl,SDM660_SLAVE_CLK_CTL ,4 ,-1 ,47 , true,-1 ,0 ,-1 ,0 );
@@ -624,13 +624,12 @@ static int qcom_icc_noc_set_qos_priority(struct regmap *rmap,/* Must be updated one at a time, P1 first, P0 last */ val = qos->areq_prio <<NOC_QOS_PRIORITY_P1_SHIFT ; rc =regmap_update_bits (rmap,NOC_QOS_PRIORITYn_ADDR (qos->qos_port), -NOC_QOS_PRIORITY_MASK , val); +NOC_QOS_PRIORITY_P1_MASK , val);if (rc)return rc; - val = qos->prio_level <<NOC_QOS_PRIORITY_P0_SHIFT ;return regmap_update_bits (rmap,NOC_QOS_PRIORITYn_ADDR (qos->qos_port), -NOC_QOS_PRIORITY_MASK , val); +NOC_QOS_PRIORITY_P0_MASK , qos->prio_level); }static int qcom_icc_set_noc_qos (struct icc_node *src,u64 max_bw)
drivers/ipack/devices/ipoctal.c +47 -16
142 lines not on this page · raw message
drivers/media/platform/s5p-jpeg/jpeg-core.c +9 -9
@@ -1140,8 +1140,8 @@ static bool s5p_jpeg_parse_hdr(struct s5p_jpeg_q_data *result,continue ; length =0 ;switch (c) { -/* SOF0: baseline JPEG */ -case SOF0 : +/* JPEG_MARKER_SOF0: baseline JPEG */ +case JPEG_MARKER_SOF0 :if (get_word_be (&jpeg_buffer, &word))break ; length = (long )word -2 ;
@@ -1172,7 +1172,7 @@ static bool s5p_jpeg_parse_hdr(struct s5p_jpeg_q_data *result, notfound =0 ;break ; -case DQT : +case JPEG_MARKER_DQT :if (get_word_be (&jpeg_buffer, &word))break ; length = (long )word -2 ;
@@ -1185,7 +1185,7 @@ static bool s5p_jpeg_parse_hdr(struct s5p_jpeg_q_data *result,skip (&jpeg_buffer, length);break ; -case DHT : +case JPEG_MARKER_DHT :if (get_word_be (&jpeg_buffer, &word))break ; length = (long )word -2 ;
@@ -1198,15 +1198,15 @@ static bool s5p_jpeg_parse_hdr(struct s5p_jpeg_q_data *result,skip (&jpeg_buffer, length);break ; -case SOS : +case JPEG_MARKER_SOS : sos = jpeg_buffer.curr -2 ;/* 0xffda */ break ;/* skip payload-less markers */ - case RST ... RST + 7: -case SOI : -case EOI : -case TEM : + case JPEG_MARKER_RST ... JPEG_MARKER_RST + 7: +case JPEG_MARKER_SOI : +case JPEG_MARKER_EOI : +case JPEG_MARKER_TEM :break ;/* skip uninteresting payload markers */
drivers/media/platform/s5p-jpeg/jpeg-core.h +14 -14
@@ -37,15 +37,15 @@#define EXYNOS3250_IRQ_TIMEOUT 0x10000000/* a selection of JPEG markers */ -#define TEM 0x01 -#define SOF0 0xc0 -#define DHT 0xc4 -#define RST 0xd0 -#define SOI 0xd8 -#define EOI 0xd9 -#define SOS 0xda -#define DQT 0xdb -#define DHP 0xde +#define JPEG_MARKER_TEM 0x01 +#define JPEG_MARKER_SOF0 0xc0 +#define JPEG_MARKER_DHT 0xc4 +#define JPEG_MARKER_RST 0xd0 +#define JPEG_MARKER_SOI 0xd8 +#define JPEG_MARKER_EOI 0xd9 +#define JPEG_MARKER_SOS 0xda +#define JPEG_MARKER_DQT 0xdb +#define JPEG_MARKER_DHP 0xde/* Flags that indicate a format can be used for capture/output */ #define SJPEG_FMT_FLAG_ENC_CAPTURE (1 << 0)
@@ -187,11 +187,11 @@ struct s5p_jpeg_marker {* @fmt: driver-specific format of this queue * @w: image width * @h: image height -* @sos: SOS marker's position relative to the buffer beginning -* @dht: DHT markers' positions relative to the buffer beginning -* @dqt: DQT markers' positions relative to the buffer beginning -* @sof: SOF0 marker's position relative to the buffer beginning -* @sof_len: SOF0 marker's payload length (without length field itself) +* @sos: JPEG_MARKER_SOS's position relative to the buffer beginning +* @dht: JPEG_MARKER_DHT' positions relative to the buffer beginning +* @dqt: JPEG_MARKER_DQT' positions relative to the buffer beginning +* @sof: JPEG_MARKER_SOF0's position relative to the buffer beginning +* @sof_len: JPEG_MARKER_SOF0's payload length (without length field itself) * @size: image buffer size in bytes */ struct s5p_jpeg_q_data {
drivers/media/rc/ir_toy.c +20 -1
@@ -24,6 +24,7 @@ static const u8 COMMAND_VERSION[] = { 'v' };// End transmit and repeat reset command so we exit sump mode static const u8 COMMAND_RESET [] = {0xff ,0xff ,0 ,0 ,0 ,0 ,0 };static const u8 COMMAND_SMODE_ENTER [] = {'s' }; +static const u8 COMMAND_SMODE_EXIT [] = {0 };static const u8 COMMAND_TXSTART [] = {0x26 ,0x24 ,0x25 ,0x03 };#define REPLY_XMITCOUNT 't'
@@ -309,12 +310,30 @@ static int irtoy_tx(struct rc_dev *rc, uint *txbuf, uint count) buf[i] =cpu_to_be16 (v); } - buf[count] =cpu_to_be16 (0xffff ); + buf[count] =0xffff ; irtoy->tx_buf = buf; irtoy->tx_len = size; irtoy->emitted =0 ; +// There is an issue where if the unit is receiving IR while the +// first TXSTART command is sent, the device might end up hanging +// with its led on. It does not respond to any command when this +// happens. To work around this, re-enter sample mode. + err =irtoy_command (irtoy,COMMAND_SMODE_EXIT , +sizeof (COMMAND_SMODE_EXIT ),STATE_RESET ); +if (err) { +dev_err (irtoy->dev,"exit sample mode: %d\n" , err); +return err; + } + + err =irtoy_command (irtoy,COMMAND_SMODE_ENTER , +sizeof (COMMAND_SMODE_ENTER ),STATE_COMMAND ); +if (err) { +dev_err (irtoy->dev,"enter sample mode: %d\n" , err); +return err; + } + err =irtoy_command (irtoy,COMMAND_TXSTART ,sizeof (COMMAND_TXSTART ),STATE_TX );kfree (buf);
drivers/mmc/host/renesas_sdhi_core.c +2 -0
@@ -582,6 +582,8 @@ static void renesas_sdhi_reset(struct tmio_mmc_host *host)/* Unknown why but without polling reset status, it will hang */ read_poll_timeout (reset_control_status, ret, ret ==0 ,1 ,100 , false, priv->rstc); +/* At least SDHI_VER_GEN2_SDR50 needs manual release of reset */ +sd_ctrl_write16 (host,CTL_RESET_SD ,0x0001 ); priv->needs_adjust_hs400 = false;renesas_sdhi_set_clock (host, host->clk_cache); }else if (priv->scc_ctl) {
drivers/net/dsa/mv88e6xxx/chip.c +10 -7
@@ -2775,8 +2775,8 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port)if (err)return err; -/* Port Control 2: don't force a good FCS, set the maximum frame size to -* 10240 bytes, disable 802.1q tags checking, don't discard tagged or +/* Port Control 2: don't force a good FCS, set the MTU size to +* 10222 bytes, disable 802.1q tags checking, don't discard tagged or * untagged frames on this port, do a destination address lookup on all * received packets as usual, disable ARP mirroring and don't send a * copy of all transmitted/received frames on this port to the CPU.
@@ -2795,7 +2795,7 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port)return err;if (chip->info->ops->port_set_jumbo_size) { - err = chip->info->ops->port_set_jumbo_size (chip, port,10240 ); + err = chip->info->ops->port_set_jumbo_size (chip, port,10218 );if (err)return err; }
@@ -2885,10 +2885,10 @@ static int mv88e6xxx_get_max_mtu(struct dsa_switch *ds, int port)struct mv88e6xxx_chip *chip = ds->priv;if (chip->info->ops->port_set_jumbo_size) -return 10240 ; +return 10240 -VLAN_ETH_HLEN -EDSA_HLEN -ETH_FCS_LEN ;else if (chip->info->ops->set_max_frame_size) -return 1632 ; -return 1522 ; +return 1632 -VLAN_ETH_HLEN -EDSA_HLEN -ETH_FCS_LEN ; +return 1522 -VLAN_ETH_HLEN -EDSA_HLEN -ETH_FCS_LEN ; }static int mv88e6xxx_change_mtu (struct dsa_switch *ds,int port,int new_mtu)
@@ -2896,6 +2896,9 @@ static int mv88e6xxx_change_mtu(struct dsa_switch *ds, int port, int new_mtu)struct mv88e6xxx_chip *chip = ds->priv;int ret =0 ; +if (dsa_is_dsa_port (ds, port) ||dsa_is_cpu_port (ds, port)) + new_mtu +=EDSA_HLEN ; +mv88e6xxx_reg_lock (chip);if (chip->info->ops->port_set_jumbo_size) ret = chip->info->ops->port_set_jumbo_size (chip, port, new_mtu);
@@ -3657,7 +3660,6 @@ static const struct mv88e6xxx_ops mv88e6161_ops = { .port_set_ucast_flood = mv88e6352_port_set_ucast_flood, .port_set_mcast_flood = mv88e6352_port_set_mcast_flood, .port_set_ether_type = mv88e6351_port_set_ether_type, - .port_set_jumbo_size = mv88e6165_port_set_jumbo_size, .port_egress_rate_limiting = mv88e6097_port_egress_rate_limiting, .port_pause_limit = mv88e6097_port_pause_limit, .port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
@@ -3682,6 +3684,7 @@ static const struct mv88e6xxx_ops mv88e6161_ops = { .avb_ops = &mv88e6165_avb_ops, .ptp_ops = &mv88e6165_ptp_ops, .phylink_validate = mv88e6185_phylink_validate, + .set_max_frame_size = mv88e6185_g1_set_max_frame_size, };static const struct mv88e6xxx_ops mv88e6165_ops = {
drivers/net/dsa/mv88e6xxx/chip.h +1 -0
@@ -18,6 +18,7 @@#include <linux/timecounter.h> #include <net/dsa.h> +#define EDSA_HLEN 8#define MV88E6XXX_N_FID 4096/* PVT limits for 4-bit port and 5-bit switch */
drivers/net/dsa/mv88e6xxx/global1.c +2 -0
@@ -232,6 +232,8 @@ int mv88e6185_g1_set_max_frame_size(struct mv88e6xxx_chip *chip, int mtu)u16 val;int err; + mtu +=ETH_HLEN +ETH_FCS_LEN ; + err =mv88e6xxx_g1_read (chip,MV88E6XXX_G1_CTL1 , &val);if (err)return err;
drivers/net/dsa/mv88e6xxx/port.c +2 -0
@@ -1277,6 +1277,8 @@ int mv88e6165_port_set_jumbo_size(struct mv88e6xxx_chip *chip, int port,u16 reg;int err; + size +=VLAN_ETH_HLEN +ETH_FCS_LEN ; + err =mv88e6xxx_port_read (chip, port,MV88E6XXX_PORT_CTL2 , ®);if (err)return err;
drivers/net/ethernet/freescale/enetc/enetc_pf.c +1 -2
@@ -541,8 +541,7 @@ static void enetc_mac_config(struct enetc_hw *hw, phy_interface_t phy_mode)if (phy_interface_mode_is_rgmii (phy_mode)) { val =enetc_port_rd (hw,ENETC_PM0_IF_MODE ); - val &= ~ENETC_PM0_IFM_EN_AUTO ; - val &=ENETC_PM0_IFM_IFMODE_MASK ; + val &= ~(ENETC_PM0_IFM_EN_AUTO |ENETC_PM0_IFM_IFMODE_MASK ); val |=ENETC_PM0_IFM_IFMODE_GMII |ENETC_PM0_IFM_RG ;enetc_port_wr (hw,ENETC_PM0_IF_MODE , val); }
drivers/net/ethernet/hisilicon/hns3/hnae3.h +0 -1
@@ -750,7 +750,6 @@ struct hnae3_tc_info {u8 prio_tc[HNAE3_MAX_USER_PRIO ];/* TC indexed by prio */ u16 tqp_count[HNAE3_MAX_TC ];u16 tqp_offset[HNAE3_MAX_TC ]; -unsigned long tc_en;/* bitmap of TC enabled */ u8 num_tc;/* Total number of enabled TCs */ bool mqprio_active; };
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +7 -9
@@ -620,13 +620,9 @@ static int hns3_nic_set_real_num_queue(struct net_device *netdev)return ret; } -for (i =0 ; i <HNAE3_MAX_TC ; i++) { -if (!test_bit (i, &tc_info->tc_en)) -continue ; - +for (i =0 ; i < tc_info->num_tc; i++)netdev_set_tc_queue (netdev, i, tc_info->tqp_count[i], tc_info->tqp_offset[i]); - } } ret =netif_set_real_num_tx_queues (netdev, queue_size);
@@ -776,6 +772,11 @@ static int hns3_nic_net_open(struct net_device *netdev)if (hns3_nic_resetting (netdev))return -EBUSY ; +if (!test_bit (HNS3_NIC_STATE_DOWN , &priv->state)) { +netdev_warn (netdev,"net open repeatedly!\n" ); +return 0 ; + } +netif_carrier_off (netdev); ret =hns3_nic_set_real_num_queue (netdev);
@@ -4825,12 +4826,9 @@ static void hns3_init_tx_ring_tc(struct hns3_nic_priv *priv)struct hnae3_tc_info *tc_info = &kinfo->tc_info;int i; -for (i =0 ; i <HNAE3_MAX_TC ; i++) { +for (i =0 ; i < tc_info->num_tc; i++) {int j; -if (!test_bit (i, &tc_info->tc_en)) -continue ; -for (j =0 ; j < tc_info->tqp_count[i]; j++) {struct hnae3_queue *q;
drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c +67 -38
140 lines not on this page · raw message
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.c +13 -8
@@ -472,7 +472,7 @@ int hclge_cmd_queue_init(struct hclge_dev *hdev)return ret; } -static int hclge_firmware_compat_config (struct hclge_dev *hdev) +static int hclge_firmware_compat_config (struct hclge_dev *hdev,bool en) {struct hclge_firmware_compat_cmd *req;struct hclge_desc desc;
@@ -480,13 +480,16 @@ static int hclge_firmware_compat_config(struct hclge_dev *hdev)hclge_cmd_setup_basic_desc (&desc,HCLGE_OPC_IMP_COMPAT_CFG , false); - req = (struct hclge_firmware_compat_cmd *)desc.data; +if (en) { + req = (struct hclge_firmware_compat_cmd *)desc.data; -hnae3_set_bit (compat,HCLGE_LINK_EVENT_REPORT_EN_B ,1 ); -hnae3_set_bit (compat,HCLGE_NCSI_ERROR_REPORT_EN_B ,1 ); -if (hnae3_dev_phy_imp_supported (hdev)) -hnae3_set_bit (compat,HCLGE_PHY_IMP_EN_B ,1 ); - req->compat =cpu_to_le32 (compat); +hnae3_set_bit (compat,HCLGE_LINK_EVENT_REPORT_EN_B ,1 ); +hnae3_set_bit (compat,HCLGE_NCSI_ERROR_REPORT_EN_B ,1 ); +if (hnae3_dev_phy_imp_supported (hdev)) +hnae3_set_bit (compat,HCLGE_PHY_IMP_EN_B ,1 ); + + req->compat =cpu_to_le32 (compat); + }return hclge_cmd_send (&hdev->hw, &desc,1 ); }
@@ -543,7 +546,7 @@ int hclge_cmd_init(struct hclge_dev *hdev)/* ask the firmware to enable some features, driver can work without * it. */ - ret =hclge_firmware_compat_config (hdev); + ret =hclge_firmware_compat_config (hdev, true);if (ret) dev_warn(&hdev->pdev->dev, "Firmware compatible features not enabled(%d).\n",
@@ -573,6 +576,8 @@ static void hclge_cmd_uninit_regs(struct hclge_hw *hw)void hclge_cmd_uninit (struct hclge_dev *hdev) { +hclge_firmware_compat_config (hdev, false); +set_bit (HCLGE_STATE_CMD_DISABLE , &hdev->state);/* wait to ensure that the firmware completes the possible left * over commands.
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_dcb.c +16 -13
@@ -224,6 +224,10 @@ static int hclge_ieee_setets(struct hnae3_handle *h, struct ieee_ets *ets) }hclge_tm_schd_info_update (hdev, num_tc); +if (num_tc >1 ) + hdev->flag |=HCLGE_FLAG_DCB_ENABLE ; +else + hdev->flag &= ~HCLGE_FLAG_DCB_ENABLE ; ret =hclge_ieee_ets_to_tm_info (hdev, ets);if (ret)
@@ -285,8 +289,7 @@ static int hclge_ieee_setpfc(struct hnae3_handle *h, struct ieee_pfc *pfc)u8 i, j, pfc_map, *prio_tc;int ret; -if (!(hdev->dcbx_cap &DCB_CAP_DCBX_VER_IEEE ) || - hdev->flag &HCLGE_FLAG_MQPRIO_ENABLE ) +if (!(hdev->dcbx_cap &DCB_CAP_DCBX_VER_IEEE ))return -EINVAL ;if (pfc->pfc_en == hdev->tm_info.pfc_en)
@@ -420,8 +423,6 @@ static int hclge_mqprio_qopt_check(struct hclge_dev *hdev,static void hclge_sync_mqprio_qopt (struct hnae3_tc_info *tc_info,struct tc_mqprio_qopt_offload *mqprio_qopt) { -int i; -memset (tc_info,0 ,sizeof (*tc_info)); tc_info->num_tc = mqprio_qopt->qopt.num_tc; memcpy(tc_info->prio_tc, mqprio_qopt->qopt.prio_tc_map,
@@ -430,9 +431,6 @@ static void hclge_sync_mqprio_qopt(struct hnae3_tc_info *tc_info, sizeof_field(struct hnae3_tc_info, tqp_count));memcpy (tc_info->tqp_offset, mqprio_qopt->qopt.offset, sizeof_field(struct hnae3_tc_info, tqp_offset)); - -for (i =0 ; i <HNAE3_MAX_USER_PRIO ; i++) -set_bit (tc_info->prio_tc[i], &tc_info->tc_en); } static int hclge_config_tc(struct hclge_dev *hdev,
@@ -498,12 +496,17 @@ static int hclge_setup_tc(struct hnae3_handle *h,return hclge_notify_init_up (hdev); err_out: -/* roll-back */ -memcpy (&kinfo->tc_info, &old_tc_info,sizeof (old_tc_info)); -if (hclge_config_tc (hdev, &kinfo->tc_info)) -dev_err (&hdev->pdev->dev, -"failed to roll back tc configuration\n" ); - +if (!tc) { +dev_warn (&hdev->pdev->dev, +"failed to destroy mqprio, will active after reset, ret = %d\n" , + ret); + }else { +/* roll-back */ +memcpy (&kinfo->tc_info, &old_tc_info,sizeof (old_tc_info)); +if (hclge_config_tc (hdev, &kinfo->tc_info)) +dev_err (&hdev->pdev->dev, +"failed to roll back tc configuration\n" ); + }hclge_notify_init_up (hdev);return ret;
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +9 -10
@@ -8701,15 +8701,8 @@ int hclge_add_uc_addr_common(struct hclge_vport *vport, }/* check if we just hit the duplicate */ -if (!ret) { -dev_warn (&hdev->pdev->dev,"VF %u mac(%pM) exists\n" , - vport->vport_id, addr); -return 0 ; - } - -dev_err (&hdev->pdev->dev, -"PF failed to add unicast entry(%pM) in the MAC table\n" , - addr); +if (!ret) +return -EEXIST ;return ret; }
@@ -8861,7 +8854,13 @@ static void hclge_sync_vport_mac_list(struct hclge_vport *vport, }else {set_bit (HCLGE_VPORT_STATE_MAC_TBL_CHANGE , &vport->state); -break ; + +/* If one unicast mac address is existing in hardware, +* we need to try whether other unicast mac addresses +* are new addresses that can be added. +*/ +if (ret != -EEXIST ) +break ; } } }
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c +5 -28
@@ -687,12 +687,10 @@ static void hclge_tm_vport_tc_info_update(struct hclge_vport *vport)for (i =0 ; i <HNAE3_MAX_TC ; i++) {if (hdev->hw_tc_map &BIT (i) && i < kinfo->tc_info.num_tc) { -set_bit (i, &kinfo->tc_info.tc_en); kinfo->tc_info.tqp_offset[i] = i * kinfo->rss_size; kinfo->tc_info.tqp_count[i] = kinfo->rss_size; }else {/* Set to default queue if TC is disable */ -clear_bit (i, &kinfo->tc_info.tc_en); kinfo->tc_info.tqp_offset[i] =0 ; kinfo->tc_info.tqp_count[i] =1 ; }
@@ -729,14 +727,6 @@ static void hclge_tm_tc_info_init(struct hclge_dev *hdev)for (i =0 ; i <HNAE3_MAX_USER_PRIO ; i++) hdev->tm_info.prio_tc[i] = (i >= hdev->tm_info.num_tc) ?0 : i; - -/* DCB is enabled if we have more than 1 TC or pfc_en is -* non-zero. -*/ -if (hdev->tm_info.num_tc >1 || hdev->tm_info.pfc_en) - hdev->flag |=HCLGE_FLAG_DCB_ENABLE ; -else - hdev->flag &= ~HCLGE_FLAG_DCB_ENABLE ; }static void hclge_tm_pg_info_init (struct hclge_dev *hdev)
@@ -767,10 +757,10 @@ static void hclge_tm_pg_info_init(struct hclge_dev *hdev)static void hclge_update_fc_mode_by_dcb_flag (struct hclge_dev *hdev) { -if (!(hdev->flag &HCLGE_FLAG_DCB_ENABLE )) { +if (hdev->tm_info.num_tc ==1 && !hdev->tm_info.pfc_en) {if (hdev->fc_mode_last_time ==HCLGE_FC_PFC )dev_warn (&hdev->pdev->dev, -"DCB is disable, but last mode is FC_PFC\n" ); +"Only 1 tc used, but last mode is FC_PFC\n" ); hdev->tm_info.fc_mode = hdev->fc_mode_last_time; }else if (hdev->tm_info.fc_mode !=HCLGE_FC_PFC ) {
@@ -796,7 +786,7 @@ static void hclge_update_fc_mode(struct hclge_dev *hdev) } } -static void hclge_pfc_info_init (struct hclge_dev *hdev) +void hclge_tm_pfc_info_update (struct hclge_dev *hdev) {if (hdev->ae_dev->dev_version >=HNAE3_DEVICE_VERSION_V3 )hclge_update_fc_mode (hdev);
@@ -812,7 +802,7 @@ static void hclge_tm_schd_info_init(struct hclge_dev *hdev)hclge_tm_vport_info_update (hdev); -hclge_pfc_info_init (hdev); +hclge_tm_pfc_info_update (hdev); }static int hclge_tm_pg_to_pri_map (struct hclge_dev *hdev)
@@ -1558,19 +1548,6 @@ void hclge_tm_schd_info_update(struct hclge_dev *hdev, u8 num_tc)hclge_tm_schd_info_init (hdev); } -void hclge_tm_pfc_info_update (struct hclge_dev *hdev) -{ -/* DCB is enabled if we have more than 1 TC or pfc_en is -* non-zero. -*/ -if (hdev->tm_info.num_tc >1 || hdev->tm_info.pfc_en) - hdev->flag |=HCLGE_FLAG_DCB_ENABLE ; -else - hdev->flag &= ~HCLGE_FLAG_DCB_ENABLE ; - -hclge_pfc_info_init (hdev); -} -int hclge_tm_init_hw (struct hclge_dev *hdev,bool init) {int ret;
@@ -1616,7 +1593,7 @@ int hclge_tm_vport_map_update(struct hclge_dev *hdev)if (ret)return ret; -if (!(hdev->flag &HCLGE_FLAG_DCB_ENABLE )) +if (hdev->tm_info.num_tc ==1 && !hdev->tm_info.pfc_en)return 0 ;return hclge_tm_bp_setup (hdev);
drivers/net/ethernet/intel/e100.c +15 -7
@@ -2437,11 +2437,15 @@ static void e100_get_drvinfo(struct net_device *netdev, sizeof(info->bus_info)); } -#define E100_PHY_REGS 0x1C +#define E100_PHY_REGS 0x1Dstatic int e100_get_regs_len (struct net_device *netdev) {struct nic *nic =netdev_priv (netdev); -return 1 +E100_PHY_REGS +sizeof (nic->mem->dump_buf); + +/* We know the number of registers, and the size of the dump buffer. +* Calculate the total size in bytes. +*/ +return (1 +E100_PHY_REGS ) *sizeof (u32) +sizeof (nic->mem->dump_buf); } static void e100_get_regs(struct net_device *netdev,
@@ -2455,14 +2459,18 @@ static void e100_get_regs(struct net_device *netdev, buff[0 ] =ioread8 (&nic->csr->scb.cmd_hi) <<24 |ioread8 (&nic->csr->scb.cmd_lo) <<16 |ioread16 (&nic->csr->scb.status); -for (i =E100_PHY_REGS ; i >=0 ; i--) - buff[1 +E100_PHY_REGS - i] = -mdio_read (netdev, nic->mii.phy_id, i); +for (i =0 ; i <E100_PHY_REGS ; i++) +/* Note that we read the registers in reverse order. This +* ordering is the ABI apparently used by ethtool and other +* applications. +*/ + buff[1 + i] =mdio_read (netdev, nic->mii.phy_id, +E100_PHY_REGS -1 - i);memset (nic->mem->dump_buf,0 ,sizeof (nic->mem->dump_buf));e100_exec_cb (nic,NULL , e100_dump);msleep (10 ); -memcpy (&buff[2 +E100_PHY_REGS ], nic->mem->dump_buf, -sizeof (nic->mem->dump_buf)); +memcpy (&buff[1 +E100_PHY_REGS ], nic->mem->dump_buf, +sizeof (nic->mem->dump_buf)); }static void e100_get_wol (struct net_device *netdev,struct ethtool_wolinfo *wol)
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c +1 -1
@@ -3204,7 +3204,7 @@ static unsigned int ixgbe_max_channels(struct ixgbe_adapter *adapter) max_combined =ixgbe_max_rss_indices (adapter); } -return max_combined; +return min_t (int, max_combined,num_online_cpus ()); } static void ixgbe_get_channels(struct net_device *dev,
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +6 -2
@@ -10112,6 +10112,7 @@ static int ixgbe_xdp_setup(struct net_device *dev, struct bpf_prog *prog)struct ixgbe_adapter *adapter =netdev_priv (dev);struct bpf_prog *old_prog;bool need_reset; +int num_queues;if (adapter->flags &IXGBE_FLAG_SRIOV_ENABLED )return -EINVAL ;
@@ -10161,11 +10162,14 @@ static int ixgbe_xdp_setup(struct net_device *dev, struct bpf_prog *prog)/* Kick start the NAPI context if there is an AF_XDP socket open * on that queue id. This so that receiving will start. */ -if (need_reset && prog) -for (i =0 ; i < adapter->num_rx_queues; i++) +if (need_reset && prog) { + num_queues =min_t (int, adapter->num_rx_queues, + adapter->num_xdp_queues); +for (i =0 ; i < num_queues; i++)if (adapter->xdp_ring[i]->xsk_pool) (void )ixgbe_xsk_wakeup (adapter->netdev, i,XDP_WAKEUP_RX ); + }return 0 ; }
drivers/net/ethernet/mellanox/mlx4/en_netdev.c +29 -18
57 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx4/mlx4_en.h +0 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/micrel/ks8851_common.c +8 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/pensando/ionic/ionic_stats.c +0 -9
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +4 -0
Lines of this file are not shown. View the raw message.
drivers/net/phy/bcm7xxx.c +110 -4
114 lines not on this page · raw message
drivers/pinctrl/qcom/pinctrl-spmi-gpio.c +34 -3
Lines of this file are not shown. View the raw message.
drivers/scsi/ufs/ufshcd-pci.c +78 -0
78 lines not on this page · raw message
drivers/staging/media/hantro/hantro_drv.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/staging/media/sunxi/cedrus/cedrus_video.c +1 -1
Lines of this file are not shown. View the raw message.
net/netfilter/nf_conntrack_core.c +37 -33
70 lines not on this page · raw message
sound/pci/hda/patch_realtek.c +129 -0
129 lines not on this page · raw message
sound/soc/mediatek/common/mtk-afe-fe-dai.c +11 -8
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/test_lwt_ip_encap.sh +8 -5
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.