Skip to contentSkip to conversation

Linux 5.15.81

DISCUSSION Greg Kroah-Hartman 1 participant 2 messages Dec 2, 2022 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 5.15.81 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

------------

 Makefile                                                 |    2 
 arch/arm/boot/dts/am335x-pcm-953.dtsi                    |   28 
 arch/arm/boot/dts/at91sam9g20ek_common.dtsi              |    9 
 arch/arm/boot/dts/imx6q-prti6q.dts                       |    4 
 arch/arm/mach-mxs/mach-mxs.c                             |    4 
 arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts      |    2 
 arch/arm64/include/asm/syscall_wrapper.h                 |    2 
 arch/arm64/kvm/arm.c                                     |   11 
 arch/mips/include/asm/fw/fw.h                            |    2 
 arch/mips/pic32/pic32mzda/early_console.c                |   13 
 arch/mips/pic32/pic32mzda/init.c                         |    2 
 arch/nios2/boot/Makefile                                 |    2 
 arch/riscv/boot/dts/sifive/hifive-unleashed-a00.dts      |   38 
 arch/riscv/kernel/vdso/Makefile                          |    3 
 arch/riscv/kernel/vdso/vdso.lds.S                        |    2 
 arch/s390/kernel/crash_dump.c                            |    2 
 arch/x86/hyperv/hv_init.c                                |   54 
 arch/x86/include/asm/cpufeatures.h                       |    3 
 arch/x86/kernel/cpu/sgx/ioctl.c                          |   31 
 arch/x86/kernel/cpu/tsx.c                                |   38 
 arch/x86/kvm/svm/nested.c                                |    6 
 arch/x86/kvm/svm/svm.c                                   |   16 
 arch/x86/kvm/vmx/nested.c                                |    3 
 arch/x86/kvm/x86.c                                       |   18 
 arch/x86/mm/ioremap.c                                    |    8 
 arch/x86/power/cpu.c                                     |   23 
 block/bfq-cgroup.c                                       |    4 
 drivers/android/binder_alloc.c                           |    7 
 drivers/ata/libata-scsi.c                                |   55 
 drivers/bus/intel-ixp4xx-eb.c                            |    9 
 drivers/bus/sunxi-rsb.c                                  |   38 
 drivers/dma-buf/dma-heap.c                               |   28 
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_aldebaran.c     |    1 
 drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c                  |    8 
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c        |   37 
 drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c  |    3 
 drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_thermal.c  |   25 
 drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c  |    4 
 drivers/gpu/drm/drm_dp_dual_mode_helper.c                |   51 
 drivers/gpu/drm/drm_panel_orientation_quirks.c           |    6 
 drivers/gpu/drm/i915/gt/intel_gt.c                       |    4 
 drivers/gpu/drm/tegra/drm.c                              |    4 
 drivers/gpu/host1x/dev.c                                 |    4 
 drivers/hv/channel_mgmt.c                                |    6 
 drivers/hv/vmbus_drv.c                                   |    1 
 drivers/iio/industrialio-sw-trigger.c                    |    6 
 drivers/iio/light/apds9960.c                             |   12 
 drivers/iio/pressure/ms5611.h                            |   18 
 drivers/iio/pressure/ms5611_core.c                       |   56 
 drivers/iio/pressure/ms5611_i2c.c                        |   11 
 drivers/iio/pressure/ms5611_spi.c                        |   17 
 drivers/input/misc/soc_button_array.c                    |   14 
 drivers/input/mouse/synaptics.c                          |    1 
 drivers/input/serio/i8042-x86ia64io.h                    |    8 
 drivers/input/touchscreen/goodix.c                       |   11 
 drivers/irqchip/irq-gic-v3-its.c                         |    2 
 drivers/md/dm-integrity.c                                |   20 
 drivers/mmc/host/sdhci-brcmstb.c                         |   68 
 drivers/net/arcnet/com20020_cs.c                         |   11 
 drivers/net/dsa/sja1105/sja1105_mdio.c                   |    6 
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c        |   12 
 drivers/net/ethernet/cavium/liquidio/lio_main.c          |    4 
 drivers/net/ethernet/cavium/thunder/thunder_bgx.c        |    4 
 drivers/net/ethernet/freescale/enetc/enetc.c             |   32 
 drivers/net/ethernet/freescale/enetc/enetc.h             |   10 
 drivers/net/ethernet/freescale/enetc/enetc_pf.c          |    6 
 drivers/net/ethernet/freescale/enetc/enetc_qos.c         |   83 
 drivers/net/ethernet/intel/iavf/iavf_main.c              |   33 
 drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c          |    8 
 drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c  |    3 
 drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c      |    2 
 drivers/net/ethernet/marvell/octeontx2/af/rvu_sdp.c      |    7 
 drivers/net/ethernet/mediatek/mtk_eth_soc.c              |    4 
 drivers/net/ethernet/mellanox/mlx4/qp.c                  |    3 
 drivers/net/ethernet/mellanox/mlx5/core/cmd.c            |    6 
 drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c |    2 
 drivers/net/ethernet/mellanox/mlx5/core/main.c           |    9 
 drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c    |   14 
 drivers/net/ethernet/netronome/nfp/nfp_devlink.c         |    2 
 drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c     |    3 
 drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c     |    6 
 drivers/net/ethernet/qlogic/qla3xxx.c                    |    1 
 drivers/net/ethernet/sfc/ef100_netdev.c                  |    1 
 drivers/net/macsec.c                                     |   28 
 drivers/net/usb/qmi_wwan.c                               |    1 
 drivers/net/wireless/ath/ath11k/qmi.h                    |    2 
 drivers/net/wireless/cisco/airo.c                        |   18 
 drivers/net/wireless/mac80211_hwsim.c                    |    5 
 drivers/net/wireless/microchip/wilc1000/cfg80211.c       |   40 
 drivers/net/wireless/microchip/wilc1000/hif.c            |   21 
 drivers/net/wwan/iosm/iosm_ipc_pcie.c                    |    2 
 drivers/nfc/st-nci/se.c                                  |   49 
 drivers/nvme/host/pci.c                                  |   18 
 drivers/nvme/target/configfs.c                           |    7 
 drivers/platform/x86/acer-wmi.c                          |    9 
 drivers/platform/x86/asus-wmi.c                          |    2 
 drivers/platform/x86/hp-wmi.c                            |    3 
 drivers/platform/x86/ideapad-laptop.c                    |   42 
 drivers/platform/x86/intel/hid.c                         |    3 
 drivers/platform/x86/intel/pmt/class.c                   |   31 
 drivers/platform/x86/touchscreen_dmi.c                   |   25 
 drivers/regulator/core.c                                 |    8 
 drivers/regulator/twl6030-regulator.c                    |    2 
 drivers/s390/block/dasd_eckd.c                           |    6 
 drivers/scsi/ibmvscsi/ibmvfc.c                           |   14 
 drivers/scsi/scsi_debug.c                                |    7 
 drivers/scsi/scsi_transport_iscsi.c                      |   31 
 drivers/scsi/storvsc_drv.c                               |   69 
 drivers/spi/spi-dw-dma.c                                 |    3 
 drivers/spi/spi-stm32.c                                  |    2 
 drivers/tee/optee/device.c                               |    2 
 drivers/tty/serial/8250/8250_core.c                      |    1 
 drivers/tty/serial/8250/8250_omap.c                      |    7 
 drivers/tty/serial/fsl_lpuart.c                          |   82 
 drivers/usb/cdns3/cdnsp-gadget.c                         |   12 
 drivers/usb/cdns3/cdnsp-ring.c                           |   17 
 drivers/usb/dwc3/dwc3-exynos.c                           |   11 
 drivers/usb/dwc3/gadget.c                                |   22 
 drivers/xen/platform-pci.c                               |    7 
 drivers/xen/xen-pciback/conf_space_capability.c          |    9 
 fs/btrfs/ioctl.c                                         |    7 
 fs/btrfs/sysfs.c                                         |    7 
 fs/btrfs/zoned.c                                         |    9 
 fs/ceph/caps.c                                           |   50 
 fs/ceph/snap.c                                           |   31 
 fs/cifs/cifs_dfs_ref.c                                   |   59 
 fs/cifs/cifs_fs_sb.h                                     |    5 
 fs/cifs/cifsglob.h                                       |   24 
 fs/cifs/cifsproto.h                                      |    5 
 fs/cifs/connect.c                                        | 1359 +++++++--------
 fs/cifs/dfs_cache.c                                      |   44 
 fs/cifs/misc.c                                           |   62 
 fs/cifs/smb2ops.c                                        |   10 
 fs/cifs/smb2pdu.c                                        |    6 
 fs/ext4/extents.c                                        |   18 
 fs/fs-writeback.c                                        |   30 
 fs/fuse/file.c                                           |   37 
 fs/nilfs2/sufile.c                                       |    8 
 fs/zonefs/super.c                                        |   37 
 include/linux/serial_core.h                              |    1 
 include/trace/events/rxrpc.h                             |    2 
 include/uapi/linux/audit.h                               |    2 
 init/Kconfig                                             |    2 
 kernel/gcov/clang.c                                      |    2 
 kernel/irq/manage.c                                      |   31 
 kernel/irq/msi.c                                         |    7 
 lib/vdso/Makefile                                        |    2 
 mm/vmscan.c                                              |   10 
 net/9p/trans_fd.c                                        |    2 
 net/core/flow_dissector.c                                |    2 
 net/dccp/ipv4.c                                          |    2 
 net/dccp/ipv6.c                                          |    2 
 net/ipv4/Kconfig                                         |   10 
 net/ipv4/esp4_offload.c                                  |    3 
 net/ipv4/fib_trie.c                                      |    4 
 net/ipv4/inet_hashtables.c                               |   10 
 net/ipv4/ip_input.c                                      |    5 
 net/ipv4/netfilter/ipt_CLUSTERIP.c                       |    4 
 net/ipv4/tcp_ipv4.c                                      |    2 
 net/ipv6/esp6_offload.c                                  |    3 
 net/ipv6/tcp_ipv6.c                                      |    2 
 net/ipv6/xfrm6_policy.c                                  |    6 
 net/key/af_key.c                                         |   34 
 net/mac80211/main.c                                      |    8 
 net/mac80211/mesh_pathtbl.c                              |    2 
 net/netfilter/ipset/ip_set_hash_gen.h                    |    2 
 net/netfilter/ipset/ip_set_hash_ip.c                     |    8 
 net/netfilter/nf_conntrack_core.c                        |    2 
 net/netfilter/nf_conntrack_netlink.c                     |   24 
 net/netfilter/nf_conntrack_standalone.c                  |    2 
 net/netfilter/nf_flow_table_offload.c                    |    4 
 net/netfilter/nf_tables_api.c                            |    6 
 net/netfilter/nft_ct.c                                   |    6 
 net/netfilter/xt_connmark.c                              |   18 
 net/nfc/nci/core.c                                       |    2 
 net/nfc/nci/data.c                                       |    4 
 net/openvswitch/conntrack.c                              |    8 
 net/rxrpc/af_rxrpc.c                                     |    2 
 net/rxrpc/ar-internal.h                                  |   24 
 net/rxrpc/call_accept.c                                  |    4 
 net/rxrpc/call_object.c                                  |   44 
 net/rxrpc/conn_client.c                                  |   66 
 net/rxrpc/conn_object.c                                  |   49 
 net/rxrpc/conn_service.c                                 |    8 
 net/rxrpc/input.c                                        |    4 
 net/rxrpc/local_object.c                                 |   68 
 net/rxrpc/net_ns.c                                       |    5 
 net/rxrpc/peer_object.c                                  |   40 
 net/rxrpc/proc.c                                         |   75 
 net/rxrpc/skbuff.c                                       |    1 
 net/sched/Kconfig                                        |    2 
 net/sched/act_connmark.c                                 |    4 
 net/sched/act_ct.c                                       |    8 
 net/sched/act_ctinfo.c                                   |    6 
 net/sctp/outqueue.c                                      |   13 
 net/tipc/discover.c                                      |    5 
 net/tipc/topsrv.c                                        |   20 
 net/xfrm/xfrm_device.c                                   |   15 
 net/xfrm/xfrm_replay.c                                   |    2 
 sound/soc/codecs/hdac_hda.h                              |    4 
 sound/soc/codecs/max98373-i2c.c                          |    4 
 sound/soc/codecs/sgtl5000.c                              |    1 
 sound/soc/fsl/fsl_asrc.c                                 |    2 
 sound/soc/fsl/fsl_esai.c                                 |    2 
 sound/soc/fsl/fsl_sai.c                                  |   55 
 sound/soc/intel/boards/bytcht_es8316.c                   |    7 
 sound/soc/soc-pcm.c                                      |    5 
 sound/soc/stm/stm32_adfsdm.c                             |   11 
 sound/usb/endpoint.c                                     |    3 
 sound/usb/quirks.c                                       |    2 
 sound/usb/usbaudio.h                                     |    3 
 tools/iio/iio_generic_buffer.c                           |    4 
 tools/testing/selftests/bpf/verifier/ref_tracking.c      |   36 
 tools/testing/selftests/net/mptcp/mptcp_connect.c        |   72 
 tools/testing/selftests/net/mptcp/simult_flows.sh        |   37 
 215 files changed, 2708 insertions(+), 1814 deletions(-)

Ai Chao (1):
ALSA: usb-audio: add quirk to fix Hamedal C20 disconnect issue

Al Cooper (2):
mmc: sdhci-brcmstb: Re-organize flags
mmc: sdhci-brcmstb: Enable Clock Gating to save power

Alejandro Concepción Rodríguez (1):
iio: light: apds9960: fix wrong register for gesture gain

Aleksandr Miloserdov (1):
nvmet: fix memory leak in nvmet_subsys_attr_model_store_locked

Alexandre Belloni (1):
init/Kconfig: fix CC_HAS_ASM_GOTO_TIED_OUTPUT test with dash

Aman Dhoot (1):
Input: synaptics - switch touchpad on HP Laptop 15-da3001TU to RMI mode

Anand Jain (2):
btrfs: free btrfs_path before copying fspath to userspace
btrfs: free btrfs_path before copying subvol info to userspace

Andreas Kemnade (1):

      regulator: twl6030: re-add TWL6032_SUBCLASS

Andrzej Hajda (1):
drm/i915: fix TLB invalidation for Gen12 video and compute engines

Arnav Rawat (1):
platform/x86: ideapad-laptop: Fix interrupt storm on fn-lock toggle on some Yoga laptops

Asher Song (1):
Revert "drm/amdgpu: Revert "drm/amdgpu: getting fan speed pwm for vega10 properly""

Baokun Li (1):
ext4: fix use-after-free in ext4_ext_shift_extents

Bart Van Assche (1):
scsi: scsi_debug: Make the READ CAPACITY response compliant with ZBC

Bean Huo (1):
nvme-pci: add NVME_QUIRK_BOGUS_NID for Micron Nitro

Borys Popławski (1):
x86/sgx: Add overflow check in sgx_validate_offset_length()

Brian King (1):
scsi: ibmvfc: Avoid path failures during live migration

Brian Norris (1):
mmc: sdhci-brcmstb: Fix SDHCI_RESET_ALL for CQHCI

Carlos Llamas (1):

      binder: validate alloc->mm in ->mmap() handler

Chen Zhongjin (3):
xfrm: Fix ignored return value in xfrm6_init()
iio: core: Fix entry not deleted when iio_register_sw_trigger_type() fails
nilfs2: fix nilfs_sufile_mark_dirty() not set segment usage as dirty

Christian König (1):
drm/amdgpu: always register an MMU notifier for userptr

Christian Langrock (1):
xfrm: replay: Fix ESN wrap around for GSO

Christoph Hellwig (3):
nvme-pci: disable namespace identifiers for the MAXIO MAP1001
btrfs: zoned: fix missing endianness conversion in sb_write_pointer
btrfs: use kvcalloc in btrfs_get_dev_zone_info

Damien Le Moal (1):
zonefs: fix zone report size in __zonefs_io_error()

Daniel Xu (1):
netfilter: conntrack: Fix data-races around ct mark

David E. Box (1):
platform/x86/intel/pmt: Sapphire Rapids PMT errata fix

David Howells (3):
rxrpc: Allow list of in-use local UDP endpoints to be viewed in /proc
rxrpc: Use refcount_t rather than atomic_t
rxrpc: Fix race between conn bundle lookup and bundle removal [ZDI-CAN-15975]

Dawei Li (1):
dma-buf: fix racing conflict of dma_heap_add()

Detlev Casanova (1):
ASoC: sgtl5000: Reset the CHIP_CLK_CTRL reg on remove

Diana Wang (1):
nfp: fill splittable of devlink_port_attrs correctly

Dominik Haller (1):
ARM: dts: am335x-pcm-953: Define fixed regulators in root node

Emil Renner Berthing (1):
riscv: dts: sifive unleashed: Add PWM controlled LEDs

Enrico Sau (1):

      net: usb: qmi_wwan: add Telit 0x103a composition

Eyal Birger (1):
xfrm: fix "disable_policy" on ipv4 early demux

Fabio Estevam (1):
ARM: dts: imx6q-prti6q: Fix ref/tcxo-clock-frequency properties

Felix Fietkau (1):
netfilter: flowtable_offload: add missing locking

Gaosheng Cui (1):
audit: fix undefined behavior in bit shift for AUDIT_BIT

Gleb Mazovetskiy (1):
tcp: configurable source port perturb table size

Greg Kroah-Hartman (2):
lib/vdso: use "grep -E" instead of "egrep"
Linux 5.15.81

Guchun Chen (1):
drm/amdgpu: disable BACO support on more cards

Hans de Goede (7):
platform/x86: touchscreen_dmi: Add info for the RCA Cambio W101 v2 2-in-1
drm: panel-orientation-quirks: Add quirk for Acer Switch V 10 (SW5-017)
ASoC: Intel: bytcht_es8316: Add quirk for the Nanote UMPC-01
Input: goodix - try resetting the controller when no config is set
Input: soc_button_array - add use_low_level_irq module parameter
Input: soc_button_array - add Acer Switch V 10 to dmi_use_low_level_irq[] platform/x86: acer-wmi: Enable SW_TABLET_MODE on Switch V 10 (SW5-017)

Heiko Carstens (1):
s390/crashdump: fix TOD programmable field size

Herbert Xu (1):
af_key: Fix send_acquire race with pfkey_register

Hui Tang (1):
net: mvpp2: fix possible invalid pointer dereference

Ilpo Järvinen (2):
serial: Add rs485_supported to uart_port
serial: fsl_lpuart: Fill in rs485_supported

Ivan Hu (1):
platform/x86/intel/hid: Add some ACPI device IDs

Ivan Vecera (2):
iavf: Fix a crash during reset task
iavf: Do not restart Tx queues after reset task failure

Jaco Coetzee (1):
nfp: add port from netdev validation for EEPROM access

Jakob Unterwurzacher (1):
arm64: dts: rockchip: lower rk3399-puma-haikou SD controller clock frequency

Jason A. Donenfeld (2):
wifi: airo: do not assign -1 to unsigned char
MIPS: pic32: treat port as signed integer

Jiasheng Jiang (2):
ASoC: max98373: Add checks for devm_kcalloc
octeontx2-pf: Add check for devm_kcalloc

Johannes Weiner (1):
mm: vmscan: fix extreme overreclaim and swap floods

Jonas Jelonek (1):
wifi: mac80211_hwsim: fix debugfs attribute ps with rc table support

Josef Bacik (1):
btrfs: free btrfs_path before copying root refs to userspace

Jozsef Kadlecsik (1):
netfilter: ipset: restore allowing 64 clashing elements in hash:net,iface

Junxiao Chang (1):
ASoC: hdac_hda: fix hda pcm buffer overflow issue

Kai-Heng Feng (1):
platform/x86: hp-wmi: Ignore Smart Experience App event

Kenneth Lee (1):
ceph: Use kcalloc for allocating multiple elements

Kuniyuki Iwashima (2):
arm64/syscall: Include asm/ptrace.h in syscall_wrapper header. dccp/tcp: Reset saddr on failure after inet6?_hash_connect().

Lars-Peter Clausen (1):
iio: ms5611: Simplify IO callback parameters

Leo Savernik (1):
nvme: add a bogus subsystem NQN quirk for Micron MTFDKBA2T0TFH

Leon Romanovsky (1):
net: liquidio: simplify if expression

Lin Ma (1):
nfc/nci: fix race with opening and closing

Linus Walleij (1):
bus: ixp4xx: Don't touch bit 7 on IXP42x

Liu Jian (2):
net: ethernet: mtk_eth_soc: fix error handling in mtk_open()
net: sparx5: fix error handling in sparx5_port_open()

Liu Shixin (1):
NFC: nci: fix memory leak in nci_rx_data_packet()

Luiz Capitulino (4):
genirq/msi: Shutdown managed interrupts with unsatifiable affinities
genirq: Always limit the affinity to online CPUs irqchip/gic-v3: Always trust the managed affinity provided by the core code
genirq: Take the proposed affinity at face value if force==true

Lukas Wunner (1):

      serial: 8250: 8250_omap: Avoid RS485 RTS glitch on ->set_termios()

Lyude Paul (1):
drm/amd/dc/dce120: Fix audio register mapping, stop triggering KASAN

Maarten Zanders (1):
ASoC: fsl_asrc fsl_esai fsl_sai: allow CONFIG_PM=N

Manyi Li (1):
platform/x86: ideapad-laptop: Disable touchpad_switch

Marc Zyngier (1):
KVM: arm64: pkvm: Fixup boot mode to reflect that the kernel resumes from EL1

Marco Felsch (1):
ASoC: fsl_sai: use local device pointer

Marek Marczykowski-Górecki (1):
xen-pciback: Allow setting PCI_MSIX_FLAGS_MASKALL too

Marek Szyprowski (1):
usb: dwc3: exynos: Fix remove() function

Martin Faltesek (3):
nfc: st-nci: fix incorrect validating logic in EVT_TRANSACTION
nfc: st-nci: fix memory leaks in EVT_TRANSACTION
nfc: st-nci: fix incorrect sizing calculations in EVT_TRANSACTION

Matthieu Baerts (1):
selftests: mptcp: fix mibit vs mbit mix up

Matti Vaittinen (1):
tools: iio: iio_generic_buffer: Fix read size

Maxim Levitsky (5):
KVM: x86: nSVM: leave nested mode on vCPU free
KVM: x86: forcibly leave nested mode on vCPU reset
KVM: x86: nSVM: harden svm_free_nested against freeing vmcb02 while still in use
KVM: x86: add kvm_leave_nested
KVM: x86: remove exit_int_info warning in svm_handle_exit

Michael Grzeschik (2):
ARM: dts: at91: sam9g20ek: enable udc vbus gpio pinctrl
usb: dwc3: gadget: conditionally remove requests

Michael Kelley (2):
scsi: storvsc: Fix handling of srb_status and capacity change events x86/ioremap: Fix page aligned size calculation in __ioremap_caller()

Miklos Szeredi (1):
fuse: lock inode unconditionally in fuse_fallocate()

Mikulas Patocka (2):
dm integrity: flush the journal on suspend
dm integrity: clear the journal on suspend

Mitja Spes (1):
iio: pressure: ms5611: fixed value compensation bug

Moshe Shemesh (2):
net/mlx5: Fix FW tracer timestamp calculation
net/mlx5: Fix handling of entry refcount when command is not issued to FW

Mukesh Ojha (1):
gcov: clang: fix the buffer overflow issue

Nathan Chancellor (1):
RISC-V: vdso: Do not add missing symbols to version section in linker script

Nicolas Cavallari (1):
wifi: mac80211: Fix ack frame idr leak when mesh has no route

Niklas Cassel (1):
ata: libata-core: do not issue non-internal commands once EH is pending

Olivier Moysan (1):
ASoC: stm32: dfsdm: manage cb buffers cleanup

Pablo Neira Ayuso (1):
netfilter: nf_tables: do not set up extensions for end interval

Paolo Abeni (1):
selftests: mptcp: more stable simult_flows tests

Paulo Alcantara (4):
cifs: introduce new helper for cifs_reconnect()
cifs: split out dfs code from cifs_reconnect()
cifs: support nested dfs links over reconnect
cifs: fix missed refcounting of ipc tcon

Pawan Gupta (2):
x86/tsx: Add a feature bit for TSX control MSR support x86/pm: Add enumeration check before spec MSRs save/restore setup

Pawel Laszczak (2):
usb: cdnsp: Fix issue with Clear Feature Halt Endpoint
usb: cdnsp: fix issue with ZLP - added TD_SIZE = 1

Peter Kosyh (1):
net/mlx4: Check retval of mlx4_bitmap_init

Phil Turnbull (4):
wifi: wilc1000: validate pairwise and authentication suite offsets
wifi: wilc1000: validate length of IEEE80211_P2P_ATTR_OPER_CHANNEL attribute
wifi: wilc1000: validate length of IEEE80211_P2P_ATTR_CHANNEL_LIST attribute
wifi: wilc1000: validate number of channels

Ramesh Errabolu (1):
drm/amdgpu: Enable Aldebaran devices to report CU Occupancy

Randy Dunlap (1):
nios2: add FORCE for vmlinuz.gz

Reinette Chatre (1):
x86/sgx: Create utility to validate user provided offset and length

Richard Fitzgerald (1):
ASoC: soc-pcm: Don't zero TDM masks in __soc_pcm_open()

Robin Murphy (1):
gpu: host1x: Avoid trying to use GART on Tegra20

Roy Novich (1):
net/mlx5: Do not query pci info while pci disabled

Sabrina Dubroca (1):
Revert "net: macsec: report real_dev features when HW offloading is enabled"

Samuel Holland (2):
bus: sunxi-rsb: Remove the shutdown callback
bus: sunxi-rsb: Support atomic transfers

Sean Nyekjaer (1):
spi: stm32: fix stm32_spi_prepare_mbr() that halves spi clk for every run

Sherry Sun (1):
tty: serial: fsl_lpuart: don't break the on-going transfer when global reset

Simon Rettberg (1):
drm/display: Don't assume dual mode adaptors support i2c sub-addressing

Slawomir Laba (1):
iavf: Fix race condition between iavf_shutdown and iavf_remove

Stefan Haberland (1):
s390/dasd: fix no record found for raw_track_access

Svyatoslav Feldsherov (1):
fs: do not update freeing inode i_io_list

Takashi Iwai (1):
Input: i8042 - apply probe defer to more ASUS ZenBook models

Thinh Nguyen (2):
usb: dwc3: gadget: Return -ESHUTDOWN on ep disable
usb: dwc3: gadget: Clear ep descriptor last

Thomas Jarosch (1):
xfrm: Fix oops in __xfrm_state_delete()

Tiago Dias Ferreira (1):
nvme-pci: add NVME_QUIRK_BOGUS_NID for Netac NV7000

Tsung-hua Lin (1):
drm/amd/display: No display after resume from WB/CB

Tyler J. Stachecki (1):
wifi: ath11k: Fix QCN9074 firmware boot on x86

Vishwanath Pai (1):
netfilter: ipset: regression in ip_set_hash_ip.c

Vitaly Kuznetsov (1):
x86/hyperv: Restore VP assist page after cpu offlining/onlining

Vladimir Oltean (4):
net: dsa: sja1105: disallow C45 transactions on the BASE-TX MDIO bus
net: enetc: manage ENETC_F_QBV in priv->active_offloads only when enabled
net: enetc: cache accesses to &priv->si->hw
net: enetc: preserve TX ring priority across reconfiguration

Wang Hai (2):
net: pch_gbe: fix potential memleak in pch_gbe_tx_queue()
arcnet: fix potential memory leak in com20020_probe()

Wang ShaoBo (1):
net: wwan: iosm: use ACPI_FREE() but not kfree() in ipc_pcie_read_bios_cfg()

Wenchao Hao (1):
ata: libata-scsi: simplify __ata_scsi_queuecmd()

Xander Li (1):
nvme-pci: disable write zeroes on various Kingston SSD

Xin Long (5):
sctp: remove the unnecessary sinfo_stream check in sctp_prsctp_prune_unsent
sctp: clear out_curr if all frag chunks of current msg are pruned
tipc: set con sock in tipc_conn_alloc
tipc: add an extra conn_get in tipc_conn_alloc
net: sched: allow act_ct to be built without NF_NAT

Xiongfeng Wang (3):
spi: dw-dma: decrease reference count in dw_spi_dma_init_mfld()
octeontx2-af: Fix reference count issue in rvu_sdp_init() platform/x86: asus-wmi: add missing pci_dev_put() in asus_wmi_set_xusb2pr()

Xiubo Li (3):
ceph: do not update snapshot context when there is no new snapshot
ceph: avoid putting the realm twice when decoding snaps fails
ceph: fix NULL pointer dereference for req->r_session

Yang Yingliang (7):
regulator: core: fix UAF in destroy_regulator()
tee: optee: fix possible memory leak in optee_register_device()
octeontx2-af: debugsfs: fix pci device refcount leak
net: pch_gbe: fix pci device refcount leak while module exiting
Drivers: hv: vmbus: fix double free in the error path of vmbus_add_channel_work()
Drivers: hv: vmbus: fix possible memory leak in vmbus_device_register()
bnx2x: fix pci device refcount leak in bnx2x_vf_is_pcie_pending()

Youlin Li (1):
selftests/bpf: Add verifier test for release_reference()

Yu Kuai (1):
block, bfq: fix null pointer dereference in bfq_bio_bfqg()

Yu Liao (1):
net: thunderx: Fix the ACPI memory leak

YueHaibing (2):
macsec: Fix invalid error code set
tipc: check skb_linearize() return value in tipc_disc_rcv()

Zeng Heng (1):
regulator: core: fix kobject release warning and memory leak in regulator_register()

Zhang Changzhong (2):
net/qla3xxx: fix potential memleak in ql3xxx_send()
sfc: fix potential memleak in __ef100_hard_start_xmit()

Zhang Xiaoxu (1):
cifs: Fix connections leak when tlink setup failed

Zhen Lei (1):
btrfs: sysfs: normalize the error handling branch in btrfs_init_sysfs()

Zheng Yongjun (1):
ARM: mxs: fix memory leak in mxs_machine_init()

Zhengchao Shao (1):
9p/fd: fix issue of list_del corruption in p9_fd_cancel()

Zhou Guanghui (1):
scsi: iscsi: Fix possible memory leak when device_register() failed

Ziyang Xuan (1):
ipv4: Fix error return code in fib_table_insert()

ruanjinjie (1):
xen/platform-pci: add missing free_irq() in error path

taozhang (1):
wifi: mac80211: fix memory free error when registering wiphy fail

author maintainer
#1 lore raw
Makefile +1 -1
index b840fe57331f..cc0a1da24943 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 5
 PATCHLEVEL = 15
-SUBLEVEL = 80
+SUBLEVEL = 81
 EXTRAVERSION =
 NAME = Trick or Treat
 
arch/arm/boot/dts/am335x-pcm-953.dtsi +13 -15
index 124026fa0d09..f207499461b3 100644
@@ -12,22 +12,20 @@ / {
 	compatible = "phytec,am335x-pcm-953", "phytec,am335x-phycore-som", "ti,am33xx";
 
 	/* Power */
-	regulators {
-		vcc3v3: fixedregulator@1 {
-			compatible = "regulator-fixed";
-			regulator-name = "vcc3v3";
-			regulator-min-microvolt = <3300000>;
-			regulator-max-microvolt = <3300000>;
-			regulator-boot-on;
-		};
+	vcc3v3: fixedregulator1 {
+		compatible = "regulator-fixed";
+		regulator-name = "vcc3v3";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+		regulator-boot-on;
+	};
 
-		vcc1v8: fixedregulator@2 {
-			compatible = "regulator-fixed";
-			regulator-name = "vcc1v8";
-			regulator-min-microvolt = <1800000>;
-			regulator-max-microvolt = <1800000>;
-			regulator-boot-on;
-		};
+	vcc1v8: fixedregulator2 {
+		compatible = "regulator-fixed";
+		regulator-name = "vcc1v8";
+		regulator-min-microvolt = <1800000>;
+		regulator-max-microvolt = <1800000>;
+		regulator-boot-on;
 	};
 
 	/* User IO */
arch/arm/boot/dts/at91sam9g20ek_common.dtsi +9 -0
index ca03685f0f08..4783e657b4cb 100644
@@ -39,6 +39,13 @@ pinctrl_pck0_as_mck: pck0_as_mck {
 
 				};
 
+				usb1 {
+					pinctrl_usb1_vbus_gpio: usb1_vbus_gpio {
+						atmel,pins =
+							<AT91_PIOC 5 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>;	/* PC5 GPIO */
+					};
+				};
+
 				mmc0_slot1 {
 					pinctrl_board_mmc0_slot1: mmc0_slot1-board {
 						atmel,pins =
@@ -84,6 +91,8 @@ macb0: ethernet@fffc4000 {
 			};
 
 			usb1: gadget@fffa4000 {
+				pinctrl-0 = <&pinctrl_usb1_vbus_gpio>;
+				pinctrl-names = "default";
 				atmel,vbus-gpio = <&pioC 5 GPIO_ACTIVE_HIGH>;
 				status = "okay";
 			};
arch/arm/boot/dts/imx6q-prti6q.dts +2 -2
index b4605edfd2ab..d8fa83effd63 100644
@@ -364,8 +364,8 @@ wifi {
 		pinctrl-names = "default";
 		pinctrl-0 = <&pinctrl_wifi>;
 		interrupts-extended = <&gpio1 30 IRQ_TYPE_LEVEL_HIGH>;
-		ref-clock-frequency = "38400000";
-		tcxo-clock-frequency = "19200000";
+		ref-clock-frequency = <38400000>;
+		tcxo-clock-frequency = <19200000>;
 	};
 };
 
arch/arm/mach-mxs/mach-mxs.c +3 -1
index 25c9d184fa4c..1c57ac401649 100644
@@ -393,8 +393,10 @@ static void __init mxs_machine_init(void)
 
 	root = of_find_node_by_path("/");
 	ret = of_property_read_string(root, "model", &soc_dev_attr->machine);
-	if (ret)
+	if (ret) {
+		kfree(soc_dev_attr);
 		return;
+	}
 
 	soc_dev_attr->family = "Freescale MXS Family";
 	soc_dev_attr->soc_id = mxs_get_soc_id();
arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts +1 -1
index 3ae5d727e367..f07f4b8231f9 100644
@@ -207,7 +207,7 @@ &sdmmc {
 	cap-sd-highspeed;
 	cd-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>;
 	disable-wp;
-	max-frequency = <150000000>;
+	max-frequency = <40000000>;
 	pinctrl-names = "default";
 	pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
 	vmmc-supply = <&vcc3v3_baseboard>;
arch/arm64/include/asm/syscall_wrapper.h +1 -1
index b383b4802a7b..d30217c21eff 100644
@@ -8,7 +8,7 @@
 #ifndef __ASM_SYSCALL_WRAPPER_H
 #define __ASM_SYSCALL_WRAPPER_H
 
-struct pt_regs;
+#include <asm/ptrace.h>
 
 #define SC_ARM64_REGS_TO_ARGS(x, ...)				\
 	__MAP(x,__SC_ARGS					\
arch/arm64/kvm/arm.c +11 -0
index 4cb265e15361..3fe816c244ce 100644
@@ -2000,6 +2000,17 @@ static int pkvm_drop_host_privileges(void)
 	 * once the host stage 2 is installed.
 	 */
 	static_branch_enable(&kvm_protected_mode_initialized);
+
+	/*
+	 * Fixup the boot mode so that we don't take spurious round
+	 * trips via EL2 on cpu_resume. Flush to the PoC for a good
+	 * measure, so that it can be observed by a CPU coming out of
+	 * suspend with the MMU off.
+	 */
+	__boot_cpu_mode[0] = __boot_cpu_mode[1] = BOOT_CPU_MODE_EL1;
+	dcache_clean_poc((unsigned long)__boot_cpu_mode,
+			 (unsigned long)(__boot_cpu_mode + 2));
+
 	on_each_cpu(_kvm_host_prot_finalize, &ret, 1);
 	return ret;
 }
arch/mips/include/asm/fw/fw.h +1 -1
index d0ef8b4892bb..d0494ce4b337 100644
@@ -26,6 +26,6 @@ extern char *fw_getcmdline(void);
 extern void fw_meminit(void);
 extern char *fw_getenv(char *name);
 extern unsigned long fw_getenvl(char *name);
-extern void fw_init_early_console(char port);
+extern void fw_init_early_console(void);
 
 #endif /* __ASM_FW_H_ */
arch/mips/pic32/pic32mzda/early_console.c +6 -7
index 25372e62783b..3cd1b408fa1c 100644
@@ -27,7 +27,7 @@
 #define U_BRG(x)	(UART_BASE(x) + 0x40)
 
 static void __iomem *uart_base;
-static char console_port = -1;
+static int console_port = -1;
 
 static int __init configure_uart_pins(int port)
 {
@@ -47,7 +47,7 @@ static int __init configure_uart_pins(int port)
 	return 0;
 }
 
-static void __init configure_uart(char port, int baud)
+static void __init configure_uart(int port, int baud)
 {
 	u32 pbclk;
 
@@ -60,7 +60,7 @@ static void __init configure_uart(char port, int baud)
 		     uart_base + PIC32_SET(U_STA(port)));
 }
 
-static void __init setup_early_console(char port, int baud)
+static void __init setup_early_console(int port, int baud)
 {
 	if (configure_uart_pins(port))
 		return;
@@ -130,16 +130,15 @@ static int __init get_baud_from_cmdline(char *arch_cmdline)
 	return baud;
 }
 
-void __init fw_init_early_console(char port)
+void __init fw_init_early_console(void)
 {
 	char *arch_cmdline = pic32_getcmdline();
-	int baud = -1;
+	int baud, port;
 
 	uart_base = ioremap(PIC32_BASE_UART, 0xc00);
 
 	baud = get_baud_from_cmdline(arch_cmdline);
-	if (port == -1)
-		port = get_port_from_cmdline(arch_cmdline);
+	port = get_port_from_cmdline(arch_cmdline);
 
 	if (port == -1)
 		port = EARLY_CONSOLE_PORT;
arch/mips/pic32/pic32mzda/init.c +1 -1
index 764f2d022fae..429830afff54 100644
@@ -47,7 +47,7 @@ void __init plat_mem_setup(void)
 		strlcpy(arcs_cmdline, boot_command_line, COMMAND_LINE_SIZE);
 
 #ifdef CONFIG_EARLY_PRINTK
-	fw_init_early_console(-1);
+	fw_init_early_console();
 #endif
 	pic32_config_init();
 }
arch/nios2/boot/Makefile +1 -1
index 37dfc7e584bc..0b704c1f379f 100644
@@ -20,7 +20,7 @@ $(obj)/vmlinux.bin: vmlinux FORCE
 $(obj)/vmlinux.gz: $(obj)/vmlinux.bin FORCE
 	$(call if_changed,gzip)
 
-$(obj)/vmImage: $(obj)/vmlinux.gz
+$(obj)/vmImage: $(obj)/vmlinux.gz FORCE
 	$(call if_changed,uimage)
 	@$(kecho) 'Kernel: $@ is ready'
 
arch/riscv/boot/dts/sifive/hifive-unleashed-a00.dts +38 -0
index 22f971e97161..2f4d677c9c4f 100644
@@ -3,6 +3,8 @@
 
 #include "fu540-c000.dtsi"
 #include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/leds/common.h>
+#include <dt-bindings/pwm/pwm.h>
 
 /* Clock frequency (in Hz) of the PCB crystal for rtcclk */
 #define RTCCLK_FREQ		1000000
@@ -46,6 +48,42 @@ gpio-restart {
 		compatible = "gpio-restart";
 		gpios = <&gpio 10 GPIO_ACTIVE_LOW>;
 	};
+
+	led-controller {
+		compatible = "pwm-leds";
+
+		led-d1 {
+			pwms = <&pwm0 0 7812500 PWM_POLARITY_INVERTED>;
+			active-low;
+			color = <LED_COLOR_ID_GREEN>;
+			max-brightness = <255>;
+			label = "d1";
+		};
+
+		led-d2 {
+			pwms = <&pwm0 1 7812500 PWM_POLARITY_INVERTED>;
+			active-low;
+			color = <LED_COLOR_ID_GREEN>;
+			max-brightness = <255>;
+			label = "d2";
+		};
+
+		led-d3 {
+			pwms = <&pwm0 2 7812500 PWM_POLARITY_INVERTED>;
+			active-low;
+			color = <LED_COLOR_ID_GREEN>;
+			max-brightness = <255>;
+			label = "d3";
+		};
+
+		led-d4 {
+			pwms = <&pwm0 3 7812500 PWM_POLARITY_INVERTED>;
+			active-low;
+			color = <LED_COLOR_ID_GREEN>;
+			max-brightness = <255>;
+			label = "d4";
+		};
+	};
 };
 
 &uart0 {
arch/riscv/kernel/vdso/Makefile +3 -0
index 84ac0fe612e7..db6548509bb3 100644
@@ -28,6 +28,9 @@ obj-vdso := $(addprefix $(obj)/, $(obj-vdso))
 
 obj-y += vdso.o
 CPPFLAGS_vdso.lds += -P -C -U$(ARCH)
+ifneq ($(filter vgettimeofday, $(vdso-syms)),)
+CPPFLAGS_vdso.lds += -DHAS_VGETTIMEOFDAY
+endif
 
 # Disable -pg to prevent insert call site
 CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE)
arch/riscv/kernel/vdso/vdso.lds.S +2 -0
index e9111f700af0..3729cb28aac8 100644
@@ -65,9 +65,11 @@ VERSION
 	LINUX_4.15 {
 	global:
 		__vdso_rt_sigreturn;
+#ifdef HAS_VGETTIMEOFDAY
 		__vdso_gettimeofday;
 		__vdso_clock_gettime;
 		__vdso_clock_getres;
+#endif
 		__vdso_getcpu;
 		__vdso_flush_icache;
 	local: *;
arch/s390/kernel/crash_dump.c +1 -1
index f17ad2daab07..8722bd07c607 100644
@@ -44,7 +44,7 @@ struct save_area {
 	u64 fprs[16];
 	u32 fpc;
 	u32 prefix;
-	u64 todpreg;
+	u32 todpreg;
 	u64 timer;
 	u64 todcmp;
 	u64 vxrs_low[16];
arch/x86/hyperv/hv_init.c +26 -28

67 lines not on this page · raw message

arch/x86/include/asm/cpufeatures.h +3 -0
index 2b56bfef9917..f3cb8c8bf8d9 100644
@@ -303,6 +303,9 @@
 #define X86_FEATURE_USE_IBPB_FW		(11*32+16) /* "" Use IBPB during runtime firmware calls */
 #define X86_FEATURE_RSB_VMEXIT_LITE	(11*32+17) /* "" Fill RSB on VM exit when EIBRS is enabled */
 
+
+#define X86_FEATURE_MSR_TSX_CTRL	(11*32+20) /* "" MSR IA32_TSX_CTRL (Intel) implemented */
+
 /* Intel-defined CPU features, CPUID level 0x00000007:1 (EAX), word 12 */
 #define X86_FEATURE_AVX_VNNI		(12*32+ 4) /* AVX VNNI instructions */
 #define X86_FEATURE_AVX512_BF16		(12*32+ 5) /* AVX512 BFLOAT16 instructions */
arch/x86/kernel/cpu/sgx/ioctl.c +25 -6
index 83df20e3e633..217777c029ee 100644
@@ -372,6 +372,29 @@ static int sgx_encl_add_page(struct sgx_encl *encl, unsigned long src,
 	return ret;
 }
 
+/*
+ * Ensure user provided offset and length values are valid for
+ * an enclave.
+ */
+static int sgx_validate_offset_length(struct sgx_encl *encl,
+				      unsigned long offset,
+				      unsigned long length)
+{
+	if (!IS_ALIGNED(offset, PAGE_SIZE))
+		return -EINVAL;
+
+	if (!length || !IS_ALIGNED(length, PAGE_SIZE))
+		return -EINVAL;
+
+	if (offset + length < offset)
+		return -EINVAL;
+
+	if (offset + length - PAGE_SIZE >= encl->size)
+		return -EINVAL;
+
+	return 0;
+}
+
 /**
  * sgx_ioc_enclave_add_pages() - The handler for %SGX_IOC_ENCLAVE_ADD_PAGES
  * @encl:       an enclave pointer
@@ -425,14 +448,10 @@ static long sgx_ioc_enclave_add_pages(struct sgx_encl *encl, void __user *arg)
 	if (copy_from_user(&add_arg, arg, sizeof(add_arg)))
 		return -EFAULT;
 
-	if (!IS_ALIGNED(add_arg.offset, PAGE_SIZE) ||
-	    !IS_ALIGNED(add_arg.src, PAGE_SIZE))
-		return -EINVAL;
-
-	if (!add_arg.length || add_arg.length & (PAGE_SIZE - 1))
+	if (!IS_ALIGNED(add_arg.src, PAGE_SIZE))
 		return -EINVAL;
 
-	if (add_arg.offset + add_arg.length - PAGE_SIZE >= encl->size)
+	if (sgx_validate_offset_length(encl, add_arg.offset, add_arg.length))
 		return -EINVAL;
 
 	if (copy_from_user(&secinfo, (void __user *)add_arg.secinfo,
arch/x86/kernel/cpu/tsx.c +17 -21
index ec7bbac3a9f2..8009c8346d8f 100644
@@ -58,24 +58,6 @@ static void tsx_enable(void)
 	wrmsrl(MSR_IA32_TSX_CTRL, tsx);
 }
 
-static bool tsx_ctrl_is_supported(void)
-{
-	u64 ia32_cap = x86_read_arch_cap_msr();
-
-	/*
-	 * TSX is controlled via MSR_IA32_TSX_CTRL.  However, support for this
-	 * MSR is enumerated by ARCH_CAP_TSX_MSR bit in MSR_IA32_ARCH_CAPABILITIES.
-	 *
-	 * TSX control (aka MSR_IA32_TSX_CTRL) is only available after a
-	 * microcode update on CPUs that have their MSR_IA32_ARCH_CAPABILITIES
-	 * bit MDS_NO=1. CPUs with MDS_NO=0 are not planned to get
-	 * MSR_IA32_TSX_CTRL support even after a microcode update. Thus,
-	 * tsx= cmdline requests will do nothing on CPUs without
-	 * MSR_IA32_TSX_CTRL support.
-	 */
-	return !!(ia32_cap & ARCH_CAP_TSX_CTRL_MSR);
-}
-
 static enum tsx_ctrl_states x86_get_tsx_auto_mode(void)
 {
 	if (boot_cpu_has_bug(X86_BUG_TAA))
@@ -135,7 +117,7 @@ static void tsx_clear_cpuid(void)
 		rdmsrl(MSR_TSX_FORCE_ABORT, msr);
 		msr |= MSR_TFA_TSX_CPUID_CLEAR;
 		wrmsrl(MSR_TSX_FORCE_ABORT, msr);
-	} else if (tsx_ctrl_is_supported()) {
+	} else if (cpu_feature_enabled(X86_FEATURE_MSR_TSX_CTRL)) {
 		rdmsrl(MSR_IA32_TSX_CTRL, msr);
 		msr |= TSX_CTRL_CPUID_CLEAR;
 		wrmsrl(MSR_IA32_TSX_CTRL, msr);
@@ -158,7 +140,8 @@ static void tsx_dev_mode_disable(void)
 	u64 mcu_opt_ctrl;
 
 	/* Check if RTM_ALLOW exists */
-	if (!boot_cpu_has_bug(X86_BUG_TAA) || !tsx_ctrl_is_supported() ||
+	if (!boot_cpu_has_bug(X86_BUG_TAA) ||
+	    !cpu_feature_enabled(X86_FEATURE_MSR_TSX_CTRL) ||
 	    !cpu_feature_enabled(X86_FEATURE_SRBDS_CTRL))
 		return;
 
@@ -191,7 +174,20 @@ void __init tsx_init(void)
 		return;
 	}
 
-	if (!tsx_ctrl_is_supported()) {
+	/*
+	 * TSX is controlled via MSR_IA32_TSX_CTRL.  However, support for this
+	 * MSR is enumerated by ARCH_CAP_TSX_MSR bit in MSR_IA32_ARCH_CAPABILITIES.
+	 *
+	 * TSX control (aka MSR_IA32_TSX_CTRL) is only available after a
+	 * microcode update on CPUs that have their MSR_IA32_ARCH_CAPABILITIES
+	 * bit MDS_NO=1. CPUs with MDS_NO=0 are not planned to get
+	 * MSR_IA32_TSX_CTRL support even after a microcode update. Thus,
+	 * tsx= cmdline requests will do nothing on CPUs without
+	 * MSR_IA32_TSX_CTRL support.
+	 */
+	if (x86_read_arch_cap_msr() & ARCH_CAP_TSX_CTRL_MSR) {
+		setup_force_cpu_cap(X86_FEATURE_MSR_TSX_CTRL);
+	} else {
 		tsx_ctrl_state = TSX_CTRL_NOT_SUPPORTED;
 		return;
 	}
arch/x86/kvm/svm/nested.c +3 -3
index 78f1138753e6..e0b4f88b04b3 100644
@@ -919,6 +919,9 @@ void svm_free_nested(struct vcpu_svm *svm)
 	if (!svm->nested.initialized)
 		return;
 
+	if (WARN_ON_ONCE(svm->vmcb != svm->vmcb01.ptr))
+		svm_switch_vmcb(svm, &svm->vmcb01);
+
 	svm_vcpu_free_msrpm(svm->nested.msrpm);
 	svm->nested.msrpm = NULL;
 
@@ -937,9 +940,6 @@ void svm_free_nested(struct vcpu_svm *svm)
 	svm->nested.initialized = false;
 }
 
-/*
- * Forcibly leave nested mode in order to be able to reset the VCPU later on.
- */
 void svm_leave_nested(struct kvm_vcpu *vcpu)
 {
 	struct vcpu_svm *svm = to_svm(vcpu);
arch/x86/kvm/svm/svm.c +1 -15
index 3116d24945c8..773420203305 100644
@@ -317,12 +317,6 @@ int svm_set_efer(struct kvm_vcpu *vcpu, u64 efer)
 	return 0;
 }
 
-static int is_external_interrupt(u32 info)
-{
-	info &= SVM_EVTINJ_TYPE_MASK | SVM_EVTINJ_VALID;
-	return info == (SVM_EVTINJ_VALID | SVM_EVTINJ_TYPE_INTR);
-}
-
 static u32 svm_get_interrupt_shadow(struct kvm_vcpu *vcpu)
 {
 	struct vcpu_svm *svm = to_svm(vcpu);
@@ -1427,6 +1421,7 @@ static void svm_free_vcpu(struct kvm_vcpu *vcpu)
 	 */
 	svm_clear_current_vmcb(svm->vmcb);
 
+	svm_leave_nested(vcpu);
 	svm_free_nested(svm);
 
 	sev_free_vcpu(vcpu);
@@ -3359,15 +3354,6 @@ static int handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath)
 		return 0;
 	}
 
-	if (is_external_interrupt(svm->vmcb->control.exit_int_info) &&
-	    exit_code != SVM_EXIT_EXCP_BASE + PF_VECTOR &&
-	    exit_code != SVM_EXIT_NPF && exit_code != SVM_EXIT_TASK_SWITCH &&
-	    exit_code != SVM_EXIT_INTR && exit_code != SVM_EXIT_NMI)
-		printk(KERN_ERR "%s: unexpected exit_int_info 0x%x "
-		       "exit_code 0x%x\n",
-		       __func__, svm->vmcb->control.exit_int_info,
-		       exit_code);
-
 	if (exit_fastpath != EXIT_FASTPATH_NONE)
 		return 1;
 
arch/x86/kvm/vmx/nested.c +0 -3
index 91b182fafb43..817632d5a118 100644
@@ -6276,9 +6276,6 @@ static int vmx_get_nested_state(struct kvm_vcpu *vcpu,
 	return kvm_state.size;
 }
 
-/*
- * Forcibly leave nested mode in order to be able to reset the VCPU later on.
- */
 void vmx_leave_nested(struct kvm_vcpu *vcpu)
 {
 	if (is_guest_mode(vcpu)) {
arch/x86/kvm/x86.c +17 -1
index c58e23e9b5ec..fcfa3fedf84f 100644
@@ -608,6 +608,12 @@ void kvm_deliver_exception_payload(struct kvm_vcpu *vcpu)
 }
 EXPORT_SYMBOL_GPL(kvm_deliver_exception_payload);
 
+/* Forcibly leave the nested mode in cases like a vCPU reset */
+static void kvm_leave_nested(struct kvm_vcpu *vcpu)
+{
+	kvm_x86_ops.nested_ops->leave_nested(vcpu);
+}
+
 static void kvm_multiple_exception(struct kvm_vcpu *vcpu,
 		unsigned nr, bool has_error, u32 error_code,
 	        bool has_payload, unsigned long payload, bool reinject)
@@ -4775,7 +4781,7 @@ static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu,
 
 	if (events->flags & KVM_VCPUEVENT_VALID_SMM) {
 		if (!!(vcpu->arch.hflags & HF_SMM_MASK) != events->smi.smm) {
-			kvm_x86_ops.nested_ops->leave_nested(vcpu);
+			kvm_leave_nested(vcpu);
 			kvm_smm_changed(vcpu, events->smi.smm);
 		}
 
@@ -11111,8 +11117,18 @@ void kvm_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event)
 	unsigned long new_cr0;
 	u32 eax, dummy;
 
+	/*
+	 * SVM doesn't unconditionally VM-Exit on INIT and SHUTDOWN, thus it's
+	 * possible to INIT the vCPU while L2 is active.  Force the vCPU back
+	 * into L1 as EFER.SVME is cleared on INIT (along with all other EFER
+	 * bits), i.e. virtualization is disabled.
+	 */
+	if (is_guest_mode(vcpu))
+		kvm_leave_nested(vcpu);
+
 	kvm_lapic_reset(vcpu, init_event);
 
+	WARN_ON_ONCE(is_guest_mode(vcpu) || is_smm(vcpu));
 	vcpu->arch.hflags = 0;
 
 	vcpu->arch.smi_pending = 0;
arch/x86/mm/ioremap.c +7 -1
index 7ce9b8dd8757..5dfa40279f0f 100644
@@ -216,9 +216,15 @@ __ioremap_caller(resource_size_t phys_addr, unsigned long size,
 	 * Mappings have to be page-aligned
 	 */
 	offset = phys_addr & ~PAGE_MASK;
-	phys_addr &= PHYSICAL_PAGE_MASK;
+	phys_addr &= PAGE_MASK;
 	size = PAGE_ALIGN(last_addr+1) - phys_addr;
 
+	/*
+	 * Mask out any bits not part of the actual physical
+	 * address, like memory encryption bits.
+	 */
+	phys_addr &= PHYSICAL_PAGE_MASK;
+
 	retval = memtype_reserve(phys_addr, (u64)phys_addr + size,
 						pcm, &new_pcm);
 	if (retval) {
arch/x86/power/cpu.c +15 -8
index 3c1eadc5a77a..f5133d620d4e 100644
@@ -513,16 +513,23 @@ static int pm_cpu_check(const struct x86_cpu_id *c)
 
 static void pm_save_spec_msr(void)
 {
-	u32 spec_msr_id[] = {
-		MSR_IA32_SPEC_CTRL,
-		MSR_IA32_TSX_CTRL,
-		MSR_TSX_FORCE_ABORT,
-		MSR_IA32_MCU_OPT_CTRL,
-		MSR_AMD64_LS_CFG,
-		MSR_AMD64_DE_CFG,
+	struct msr_enumeration {
+		u32 msr_no;
+		u32 feature;
+	} msr_enum[] = {
+		{ MSR_IA32_SPEC_CTRL,	 X86_FEATURE_MSR_SPEC_CTRL },
+		{ MSR_IA32_TSX_CTRL,	 X86_FEATURE_MSR_TSX_CTRL },
+		{ MSR_TSX_FORCE_ABORT,	 X86_FEATURE_TSX_FORCE_ABORT },
+		{ MSR_IA32_MCU_OPT_CTRL, X86_FEATURE_SRBDS_CTRL },
+		{ MSR_AMD64_LS_CFG,	 X86_FEATURE_LS_CFG_SSBD },
+		{ MSR_AMD64_DE_CFG,	 X86_FEATURE_LFENCE_RDTSC },
 	};
+	int i;
 
-	msr_build_context(spec_msr_id, ARRAY_SIZE(spec_msr_id));
+	for (i = 0; i < ARRAY_SIZE(msr_enum); i++) {
+		if (boot_cpu_has(msr_enum[i].feature))
+			msr_build_context(&msr_enum[i].msr_no, 1);
+	}
 }
 
 static int pm_check_save_msr(void)
block/bfq-cgroup.c +4 -0
index e2e765a54fe9..a8d0b4c71b05 100644
@@ -613,6 +613,10 @@ struct bfq_group *bfq_bio_bfqg(struct bfq_data *bfqd, struct bio *bio)
 	struct bfq_group *bfqg;
 
 	while (blkg) {
+		if (!blkg->online) {
+			blkg = blkg->parent;
+			continue;
+		}
 		bfqg = blkg_to_bfqg(blkg);
 		if (bfqg->online) {
 			bio_associate_blkg_from_css(bio, &blkg->blkcg->css);
drivers/android/binder_alloc.c +7 -0
index 8ed450125c92..6acfb896b2e5 100644
@@ -753,6 +753,12 @@ int binder_alloc_mmap_handler(struct binder_alloc *alloc,
 	const char *failure_string;
 	struct binder_buffer *buffer;
 
+	if (unlikely(vma->vm_mm != alloc->vma_vm_mm)) {
+		ret = -EINVAL;
+		failure_string = "invalid vma->vm_mm";
+		goto err_invalid_mm;
+	}
+
 	mutex_lock(&binder_alloc_mmap_lock);
 	if (alloc->buffer_size) {
 		ret = -EBUSY;
@@ -799,6 +805,7 @@ int binder_alloc_mmap_handler(struct binder_alloc *alloc,
 	alloc->buffer_size = 0;
 err_already_mapped:
 	mutex_unlock(&binder_alloc_mmap_lock);
+err_invalid_mm:
 	binder_alloc_debug(BINDER_DEBUG_USER_ERROR,
 			   "%s: %d %lx-%lx %s failed %d\n", __func__,
 			   alloc->pid, vma->vm_start, vma->vm_end,
drivers/ata/libata-scsi.c +31 -24

75 lines not on this page · raw message

drivers/bus/intel-ixp4xx-eb.c +3 -6
index a4388440aca7..91db001eb69a 100644
@@ -49,7 +49,7 @@
 #define IXP4XX_EXP_SIZE_SHIFT		10
 #define IXP4XX_EXP_CNFG_0		BIT(9) /* Always zero */
 #define IXP43X_EXP_SYNC_INTEL		BIT(8) /* Only on IXP43x */
-#define IXP43X_EXP_EXP_CHIP		BIT(7) /* Only on IXP43x */
+#define IXP43X_EXP_EXP_CHIP		BIT(7) /* Only on IXP43x, dangerous to touch on IXP42x */
 #define IXP4XX_EXP_BYTE_RD16		BIT(6)
 #define IXP4XX_EXP_HRDY_POL		BIT(5) /* Only on IXP42x */
 #define IXP4XX_EXP_MUX_EN		BIT(4)
@@ -57,8 +57,6 @@
 #define IXP4XX_EXP_WORD			BIT(2) /* Always zero */
 #define IXP4XX_EXP_WR_EN		BIT(1)
 #define IXP4XX_EXP_BYTE_EN		BIT(0)
-#define IXP42X_RESERVED			(BIT(30)|IXP4XX_EXP_CNFG_0|BIT(8)|BIT(7)|IXP4XX_EXP_WORD)
-#define IXP43X_RESERVED			(BIT(30)|IXP4XX_EXP_CNFG_0|BIT(5)|IXP4XX_EXP_WORD)
 
 #define IXP4XX_EXP_CNFG0		0x20
 #define IXP4XX_EXP_CNFG0_MEM_MAP	BIT(31)
@@ -252,10 +250,9 @@ static void ixp4xx_exp_setup_chipselect(struct ixp4xx_eb *eb,
 		cs_cfg |= val << IXP4XX_EXP_CYC_TYPE_SHIFT;
 	}
 
-	if (eb->is_42x)
-		cs_cfg &= ~IXP42X_RESERVED;
 	if (eb->is_43x) {
-		cs_cfg &= ~IXP43X_RESERVED;
+		/* Should always be zero */
+		cs_cfg &= ~IXP4XX_EXP_WORD;
 		/*
 		 * This bit for Intel strata flash is currently unused, but let's
 		 * report it if we find one.
drivers/bus/sunxi-rsb.c +21 -17
index 60b082fe2ed0..20ed77f2b949 100644
@@ -271,6 +271,9 @@ EXPORT_SYMBOL_GPL(sunxi_rsb_driver_register);
 /* common code that starts a transfer */
 static int _sunxi_rsb_run_xfer(struct sunxi_rsb *rsb)
 {
+	u32 int_mask, status;
+	bool timeout;
+
 	if (readl(rsb->regs + RSB_CTRL) & RSB_CTRL_START_TRANS) {
 		dev_dbg(rsb->dev, "RSB transfer still in progress\n");
 		return -EBUSY;
@@ -278,13 +281,23 @@ static int _sunxi_rsb_run_xfer(struct sunxi_rsb *rsb)
 
 	reinit_completion(&rsb->complete);
 
-	writel(RSB_INTS_LOAD_BSY | RSB_INTS_TRANS_ERR | RSB_INTS_TRANS_OVER,
-	       rsb->regs + RSB_INTE);
+	int_mask = RSB_INTS_LOAD_BSY | RSB_INTS_TRANS_ERR | RSB_INTS_TRANS_OVER;
+	writel(int_mask, rsb->regs + RSB_INTE);
 	writel(RSB_CTRL_START_TRANS | RSB_CTRL_GLOBAL_INT_ENB,
 	       rsb->regs + RSB_CTRL);
 
-	if (!wait_for_completion_io_timeout(&rsb->complete,
-					    msecs_to_jiffies(100))) {
+	if (irqs_disabled()) {
+		timeout = readl_poll_timeout_atomic(rsb->regs + RSB_INTS,
+						    status, (status & int_mask),
+						    10, 100000);
+		writel(status, rsb->regs + RSB_INTS);
+	} else {
+		timeout = !wait_for_completion_io_timeout(&rsb->complete,
+							  msecs_to_jiffies(100));
+		status = rsb->status;
+	}
+
+	if (timeout) {
 		dev_dbg(rsb->dev, "RSB timeout\n");
 
 		/* abort the transfer */
@@ -296,18 +309,18 @@ static int _sunxi_rsb_run_xfer(struct sunxi_rsb *rsb)
 		return -ETIMEDOUT;
 	}
 
-	if (rsb->status & RSB_INTS_LOAD_BSY) {
+	if (status & RSB_INTS_LOAD_BSY) {
 		dev_dbg(rsb->dev, "RSB busy\n");
 		return -EBUSY;
 	}
 
-	if (rsb->status & RSB_INTS_TRANS_ERR) {
-		if (rsb->status & RSB_INTS_TRANS_ERR_ACK) {
+	if (status & RSB_INTS_TRANS_ERR) {
+		if (status & RSB_INTS_TRANS_ERR_ACK) {
 			dev_dbg(rsb->dev, "RSB slave nack\n");
 			return -EINVAL;
 		}
 
-		if (rsb->status & RSB_INTS_TRANS_ERR_DATA) {
+		if (status & RSB_INTS_TRANS_ERR_DATA) {
 			dev_dbg(rsb->dev, "RSB transfer data error\n");
 			return -EIO;
 		}
@@ -816,14 +829,6 @@ static int sunxi_rsb_remove(struct platform_device *pdev)
 	return 0;
 }
 
-static void sunxi_rsb_shutdown(struct platform_device *pdev)
-{
-	struct sunxi_rsb *rsb = platform_get_drvdata(pdev);
-
-	pm_runtime_disable(&pdev->dev);
-	sunxi_rsb_hw_exit(rsb);
-}
-
 static const struct dev_pm_ops sunxi_rsb_dev_pm_ops = {
 	SET_RUNTIME_PM_OPS(sunxi_rsb_runtime_suspend,
 			   sunxi_rsb_runtime_resume, NULL)
@@ -839,7 +844,6 @@ MODULE_DEVICE_TABLE(of, sunxi_rsb_of_match_table);
 static struct platform_driver sunxi_rsb_driver = {
 	.probe = sunxi_rsb_probe,
 	.remove	= sunxi_rsb_remove,
-	.shutdown = sunxi_rsb_shutdown,
 	.driver	= {
 		.name = RSB_CTRL_NAME,
 		.of_match_table = sunxi_rsb_of_match_table,
drivers/dma-buf/dma-heap.c +15 -13
index 8f5848aa144f..59d158873f4c 100644
@@ -233,18 +233,6 @@ struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info)
 		return ERR_PTR(-EINVAL);
 	}
 
-	/* check the name is unique */
-	mutex_lock(&heap_list_lock);
-	list_for_each_entry(h, &heap_list, list) {
-		if (!strcmp(h->name, exp_info->name)) {
-			mutex_unlock(&heap_list_lock);
-			pr_err("dma_heap: Already registered heap named %s\n",
-			       exp_info->name);
-			return ERR_PTR(-EINVAL);
-		}
-	}
-	mutex_unlock(&heap_list_lock);
-
 	heap = kzalloc(sizeof(*heap), GFP_KERNEL);
 	if (!heap)
 		return ERR_PTR(-ENOMEM);
@@ -283,13 +271,27 @@ struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info)
 		err_ret = ERR_CAST(dev_ret);
 		goto err2;
 	}
-	/* Add heap to the list */
+
 	mutex_lock(&heap_list_lock);
+	/* check the name is unique */
+	list_for_each_entry(h, &heap_list, list) {
+		if (!strcmp(h->name, exp_info->name)) {
+			mutex_unlock(&heap_list_lock);
+			pr_err("dma_heap: Already registered heap named %s\n",
+			       exp_info->name);
+			err_ret = ERR_PTR(-EINVAL);
+			goto err3;
+		}
+	}
+
+	/* Add heap to the list */
 	list_add(&heap->list, &heap_list);
 	mutex_unlock(&heap_list_lock);
 
 	return heap;
 
+err3:
+	device_destroy(dma_heap_class, heap->heap_devt);
 err2:
 	cdev_del(&heap->heap_cdev);
 err1:
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_aldebaran.c +1 -0
index 46cd4ee6bafb..f3743089a1c9 100644
@@ -44,5 +44,6 @@ const struct kfd2kgd_calls aldebaran_kfd2kgd = {
 	.get_atc_vmid_pasid_mapping_info =
 				kgd_gfx_v9_get_atc_vmid_pasid_mapping_info,
 	.set_vm_context_page_table_base = kgd_gfx_v9_set_vm_context_page_table_base,
+	.get_cu_occupancy = kgd_gfx_v9_get_cu_occupancy,
 	.program_trap_handler_settings = kgd_gfx_v9_program_trap_handler_settings
 };
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +3 -5
index a1e63ba4c54a..13ca51ff8bd0 100644
@@ -419,11 +419,9 @@ int amdgpu_gem_userptr_ioctl(struct drm_device *dev, void *data,
 	if (r)
 		goto release_object;
 
-	if (args->flags & AMDGPU_GEM_USERPTR_REGISTER) {
-		r = amdgpu_mn_register(bo, args->addr);
-		if (r)
-			goto release_object;
-	}
+	r = amdgpu_mn_register(bo, args->addr);
+	if (r)
+		goto release_object;
 
 	if (args->flags & AMDGPU_GEM_USERPTR_VALIDATE) {
 		r = amdgpu_ttm_tt_get_user_pages(bo, bo->tbo.ttm->pages);
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +37 -0
index d9f99212e624..72e9b9b80c22 100644
@@ -1374,7 +1374,44 @@ static const struct dmi_system_id hpd_disconnect_quirk_table[] = {
 			DMI_MATCH(DMI_PRODUCT_NAME, "Precision 3460"),
 		},
 	},
+	{
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+			DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex Tower Plus 7010"),
+		},
+	},
+	{
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+			DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex Tower 7010"),
+		},
+	},
+	{
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+			DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex SFF Plus 7010"),
+		},
+	},
+	{
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+			DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex SFF 7010"),
+		},
+	},
+	{
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+			DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex Micro Plus 7010"),
+		},
+	},
+	{
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+			DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex Micro 7010"),
+		},
+	},
 	{}
+	/* TODO: refactor this from a fixed table to a dynamic option */
 };
 
 static void retrieve_dmi_info(struct amdgpu_display_manager *dm)
drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c +2 -1
index c65e4d125c8e..013fca9b9c68 100644
@@ -361,7 +361,8 @@ static const struct dce_audio_registers audio_regs[] = {
 	audio_regs(2),
 	audio_regs(3),
 	audio_regs(4),
-	audio_regs(5)
+	audio_regs(5),
+	audio_regs(6),
 };
 
 #define DCE120_AUD_COMMON_MASK_SH_LIST(mask_sh)\
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_thermal.c +12 -13
index dad3e3741a4e..190af79f3236 100644
@@ -67,22 +67,21 @@ int vega10_fan_ctrl_get_fan_speed_info(struct pp_hwmgr *hwmgr,
 int vega10_fan_ctrl_get_fan_speed_pwm(struct pp_hwmgr *hwmgr,
 		uint32_t *speed)
 {
-	uint32_t current_rpm;
-	uint32_t percent = 0;
-
-	if (hwmgr->thermal_controller.fanInfo.bNoFan)
-		return 0;
+	struct amdgpu_device *adev = hwmgr->adev;
+	uint32_t duty100, duty;
+	uint64_t tmp64;
 
-	if (vega10_get_current_rpm(hwmgr, &current_rpm))
-		return -1;
+	duty100 = REG_GET_FIELD(RREG32_SOC15(THM, 0, mmCG_FDO_CTRL1),
+				CG_FDO_CTRL1, FMAX_DUTY100);
+	duty = REG_GET_FIELD(RREG32_SOC15(THM, 0, mmCG_THERMAL_STATUS),
+				CG_THERMAL_STATUS, FDO_PWM_DUTY);
 
-	if (hwmgr->thermal_controller.
-			advanceFanControlParameters.usMaxFanRPM != 0)
-		percent = current_rpm * 255 /
-			hwmgr->thermal_controller.
-			advanceFanControlParameters.usMaxFanRPM;
+	if (!duty100)
+		return -EINVAL;
 
-	*speed = MIN(percent, 255);
+	tmp64 = (uint64_t)duty * 255;
+	do_div(tmp64, duty100);
+	*speed = MIN((uint32_t)tmp64, 255);
 
 	return 0;
 }
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c +4 -0
index ca6fa133993c..82a8c184526d 100644
@@ -368,6 +368,10 @@ static void sienna_cichlid_check_bxco_support(struct smu_context *smu)
 		    ((adev->pdev->device == 0x73BF) &&
 		    (adev->pdev->revision == 0xCF)) ||
 		    ((adev->pdev->device == 0x7422) &&
+		    (adev->pdev->revision == 0x00)) ||
+		    ((adev->pdev->device == 0x73A3) &&
+		    (adev->pdev->revision == 0x00)) ||
+		    ((adev->pdev->device == 0x73E3) &&
 		    (adev->pdev->revision == 0x00)))
 			smu_baco->platform_support = false;
 
drivers/gpu/drm/drm_dp_dual_mode_helper.c +29 -22

91 lines not on this page · raw message

drivers/gpu/drm/drm_panel_orientation_quirks.c +6 -0
index 083273736c83..ca0fefeaab20 100644
@@ -128,6 +128,12 @@ static const struct dmi_system_id orientation_data[] = {
 		  DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "One S1003"),
 		},
 		.driver_data = (void *)&lcd800x1280_rightside_up,
+	}, {	/* Acer Switch V 10 (SW5-017) */
+		.matches = {
+		  DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Acer"),
+		  DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "SW5-017"),
+		},
+		.driver_data = (void *)&lcd800x1280_rightside_up,
 	}, {	/* Anbernic Win600 */
 		.matches = {
 		  DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "Anbernic"),
drivers/gpu/drm/i915/gt/intel_gt.c +4 -0
index ed8ad3b26395..a09820ada82c 100644
@@ -982,6 +982,10 @@ void intel_gt_invalidate_tlbs(struct intel_gt *gt)
 		if (!i915_mmio_reg_offset(rb.reg))
 			continue;
 
+		if (GRAPHICS_VER(i915) == 12 && (engine->class == VIDEO_DECODE_CLASS ||
+		    engine->class == VIDEO_ENHANCEMENT_CLASS))
+			rb.bit = _MASKED_BIT_ENABLE(rb.bit);
+
 		intel_uncore_write_fw(uncore, rb.reg, rb.bit);
 	}
 
drivers/gpu/drm/tegra/drm.c +4 -0
index 611cd8dad46e..4f5affdc6080 100644
@@ -1083,6 +1083,10 @@ static bool host1x_drm_wants_iommu(struct host1x_device *dev)
 	struct host1x *host1x = dev_get_drvdata(dev->dev.parent);
 	struct iommu_domain *domain;
 
+	/* Our IOMMU usage policy doesn't currently play well with GART */
+	if (of_machine_is_compatible("nvidia,tegra20"))
+		return false;
+
 	/*
 	 * If the Tegra DRM clients are backed by an IOMMU, push buffers are
 	 * likely to be allocated beyond the 32-bit boundary if sufficient
drivers/gpu/host1x/dev.c +4 -0
index fc9f54282f7d..c2a4bf2aae61 100644
@@ -204,6 +204,10 @@ static void host1x_setup_sid_table(struct host1x *host)
 
 static bool host1x_wants_iommu(struct host1x *host1x)
 {
+	/* Our IOMMU usage policy doesn't currently play well with GART */
+	if (of_machine_is_compatible("nvidia,tegra20"))
+		return false;
+
 	/*
 	 * If we support addressing a maximum of 32 bits of physical memory
 	 * and if the host1x firewall is enabled, there's no need to enable
drivers/hv/channel_mgmt.c +5 -1
index 07003019263a..d8dc5cc5e3a8 100644
@@ -531,13 +531,17 @@ static void vmbus_add_channel_work(struct work_struct *work)
 	 * Add the new device to the bus. This will kick off device-driver
 	 * binding which eventually invokes the device driver's AddDevice()
 	 * method.
+	 *
+	 * If vmbus_device_register() fails, the 'device_obj' is freed in
+	 * vmbus_device_release() as called by device_unregister() in the
+	 * error path of vmbus_device_register(). In the outside error
+	 * path, there's no need to free it.
 	 */
 	ret = vmbus_device_register(newchannel->device_obj);
 
 	if (ret != 0) {
 		pr_err("unable to add child device object (relid %d)\n",
 			newchannel->offermsg.child_relid);
-		kfree(newchannel->device_obj);
 		goto err_deq_chan;
 	}
 
drivers/hv/vmbus_drv.c +1 -0
index ecfc299834e1..b906a3a7941c 100644
@@ -2109,6 +2109,7 @@ int vmbus_device_register(struct hv_device *child_device_obj)
 	ret = device_register(&child_device_obj->device);
 	if (ret) {
 		pr_err("Unable to register child device\n");
+		put_device(&child_device_obj->device);
 		return ret;
 	}
 
drivers/iio/industrialio-sw-trigger.c +5 -1
index 9ae793a70b8b..a7714d32a641 100644
@@ -58,8 +58,12 @@ int iio_register_sw_trigger_type(struct iio_sw_trigger_type *t)
 
 	t->group = configfs_register_default_group(iio_triggers_group, t->name,
 						&iio_trigger_type_group_type);
-	if (IS_ERR(t->group))
+	if (IS_ERR(t->group)) {
+		mutex_lock(&iio_trigger_types_lock);
+		list_del(&t->list);
+		mutex_unlock(&iio_trigger_types_lock);
 		ret = PTR_ERR(t->group);
+	}
 
 	return ret;
 }
drivers/iio/light/apds9960.c +6 -6
index 4141c0fa7bc4..7c4353317337 100644
@@ -54,9 +54,6 @@
 #define APDS9960_REG_CONTROL_PGAIN_MASK_SHIFT	2
 
 #define APDS9960_REG_CONFIG_2	0x90
-#define APDS9960_REG_CONFIG_2_GGAIN_MASK	0x60
-#define APDS9960_REG_CONFIG_2_GGAIN_MASK_SHIFT	5
-
 #define APDS9960_REG_ID		0x92
 
 #define APDS9960_REG_STATUS	0x93
@@ -77,6 +74,9 @@
 #define APDS9960_REG_GCONF_1_GFIFO_THRES_MASK_SHIFT	6
 
 #define APDS9960_REG_GCONF_2	0xa3
+#define APDS9960_REG_GCONF_2_GGAIN_MASK			0x60
+#define APDS9960_REG_GCONF_2_GGAIN_MASK_SHIFT		5
+
 #define APDS9960_REG_GOFFSET_U	0xa4
 #define APDS9960_REG_GOFFSET_D	0xa5
 #define APDS9960_REG_GPULSE	0xa6
@@ -396,9 +396,9 @@ static int apds9960_set_pxs_gain(struct apds9960_data *data, int val)
 			}
 
 			ret = regmap_update_bits(data->regmap,
-				APDS9960_REG_CONFIG_2,
-				APDS9960_REG_CONFIG_2_GGAIN_MASK,
-				idx << APDS9960_REG_CONFIG_2_GGAIN_MASK_SHIFT);
+				APDS9960_REG_GCONF_2,
+				APDS9960_REG_GCONF_2_GGAIN_MASK,
+				idx << APDS9960_REG_GCONF_2_GGAIN_MASK_SHIFT);
 			if (!ret)
 				data->pxs_gain = idx;
 			mutex_unlock(&data->lock);
drivers/iio/pressure/ms5611.h +7 -11
index bc06271fa38b..5e2d2d4d87b5 100644
@@ -25,13 +25,6 @@ enum {
 	MS5607,
 };
 
-struct ms5611_chip_info {
-	u16 prom[MS5611_PROM_WORDS_NB];
-
-	int (*temp_and_pressure_compensate)(struct ms5611_chip_info *chip_info,
-					    s32 *temp, s32 *pressure);
-};
-
 /*
  * OverSampling Rate descriptor.
  * Warning: cmd MUST be kept aligned on a word boundary (see
@@ -50,12 +43,15 @@ struct ms5611_state {
 	const struct ms5611_osr *pressure_osr;
 	const struct ms5611_osr *temp_osr;
 
-	int (*reset)(struct device *dev);
-	int (*read_prom_word)(struct device *dev, int index, u16 *word);
-	int (*read_adc_temp_and_pressure)(struct device *dev,
+	u16 prom[MS5611_PROM_WORDS_NB];
+
+	int (*reset)(struct ms5611_state *st);
+	int (*read_prom_word)(struct ms5611_state *st, int index, u16 *word);
+	int (*read_adc_temp_and_pressure)(struct ms5611_state *st,
 					  s32 *temp, s32 *pressure);
 
-	struct ms5611_chip_info *chip_info;
+	int (*compensate_temp_and_pressure)(struct ms5611_state *st, s32 *temp,
+					  s32 *pressure);
 	struct regulator *vdd;
 };
 
drivers/iio/pressure/ms5611_core.c +29 -27

118 lines not on this page · raw message

drivers/iio/pressure/ms5611_i2c.c +4 -7
index 7c04f730430c..cccc40f7df0b 100644
@@ -20,17 +20,15 @@
 
 #include "ms5611.h"
 
-static int ms5611_i2c_reset(struct device *dev)
+static int ms5611_i2c_reset(struct ms5611_state *st)
 {
-	struct ms5611_state *st = iio_priv(dev_to_iio_dev(dev));
-
 	return i2c_smbus_write_byte(st->client, MS5611_RESET);
 }
 
-static int ms5611_i2c_read_prom_word(struct device *dev, int index, u16 *word)
+static int ms5611_i2c_read_prom_word(struct ms5611_state *st, int index,
+				     u16 *word)
 {
 	int ret;
-	struct ms5611_state *st = iio_priv(dev_to_iio_dev(dev));
 
 	ret = i2c_smbus_read_word_swapped(st->client,
 			MS5611_READ_PROM_WORD + (index << 1));
@@ -57,11 +55,10 @@ static int ms5611_i2c_read_adc(struct ms5611_state *st, s32 *val)
 	return 0;
 }
 
-static int ms5611_i2c_read_adc_temp_and_pressure(struct device *dev,
+static int ms5611_i2c_read_adc_temp_and_pressure(struct ms5611_state *st,
 						 s32 *temp, s32 *pressure)
 {
 	int ret;
-	struct ms5611_state *st = iio_priv(dev_to_iio_dev(dev));
 	const struct ms5611_osr *osr = st->temp_osr;
 
 	ret = i2c_smbus_write_byte(st->client, osr->cmd);
drivers/iio/pressure/ms5611_spi.c +7 -10
index f7743ee3318f..3039fe8aa2a2 100644
@@ -15,18 +15,17 @@
 
 #include "ms5611.h"
 
-static int ms5611_spi_reset(struct device *dev)
+static int ms5611_spi_reset(struct ms5611_state *st)
 {
 	u8 cmd = MS5611_RESET;
-	struct ms5611_state *st = iio_priv(dev_to_iio_dev(dev));
 
 	return spi_write_then_read(st->client, &cmd, 1, NULL, 0);
 }
 
-static int ms5611_spi_read_prom_word(struct device *dev, int index, u16 *word)
+static int ms5611_spi_read_prom_word(struct ms5611_state *st, int index,
+				     u16 *word)
 {
 	int ret;
-	struct ms5611_state *st = iio_priv(dev_to_iio_dev(dev));
 
 	ret = spi_w8r16be(st->client, MS5611_READ_PROM_WORD + (index << 1));
 	if (ret < 0)
@@ -37,11 +36,10 @@ static int ms5611_spi_read_prom_word(struct device *dev, int index, u16 *word)
 	return 0;
 }
 
-static int ms5611_spi_read_adc(struct device *dev, s32 *val)
+static int ms5611_spi_read_adc(struct ms5611_state *st, s32 *val)
 {
 	int ret;
 	u8 buf[3] = { MS5611_READ_ADC };
-	struct ms5611_state *st = iio_priv(dev_to_iio_dev(dev));
 
 	ret = spi_write_then_read(st->client, buf, 1, buf, 3);
 	if (ret < 0)
@@ -52,11 +50,10 @@ static int ms5611_spi_read_adc(struct device *dev, s32 *val)
 	return 0;
 }
 
-static int ms5611_spi_read_adc_temp_and_pressure(struct device *dev,
+static int ms5611_spi_read_adc_temp_and_pressure(struct ms5611_state *st,
 						 s32 *temp, s32 *pressure)
 {
 	int ret;
-	struct ms5611_state *st = iio_priv(dev_to_iio_dev(dev));
 	const struct ms5611_osr *osr = st->temp_osr;
 
 	/*
@@ -68,7 +65,7 @@ static int ms5611_spi_read_adc_temp_and_pressure(struct device *dev,
 		return ret;
 
 	usleep_range(osr->conv_usec, osr->conv_usec + (osr->conv_usec / 10UL));
-	ret = ms5611_spi_read_adc(dev, temp);
+	ret = ms5611_spi_read_adc(st, temp);
 	if (ret < 0)
 		return ret;
 
@@ -78,7 +75,7 @@ static int ms5611_spi_read_adc_temp_and_pressure(struct device *dev,
 		return ret;
 
 	usleep_range(osr->conv_usec, osr->conv_usec + (osr->conv_usec / 10UL));
-	return ms5611_spi_read_adc(dev, pressure);
+	return ms5611_spi_read_adc(st, pressure);
 }
 
 static int ms5611_spi_probe(struct spi_device *spi)
drivers/input/misc/soc_button_array.c +13 -1
index efffcf0ebd3b..31c02c2019c1 100644
@@ -18,6 +18,10 @@
 #include <linux/gpio.h>
 #include <linux/platform_device.h>
 
+static bool use_low_level_irq;
+module_param(use_low_level_irq, bool, 0444);
+MODULE_PARM_DESC(use_low_level_irq, "Use low-level triggered IRQ instead of edge triggered");
+
 struct soc_button_info {
 	const char *name;
 	int acpi_index;
@@ -73,6 +77,13 @@ static const struct dmi_system_id dmi_use_low_level_irq[] = {
 			DMI_MATCH(DMI_PRODUCT_NAME, "Aspire SW5-012"),
 		},
 	},
+	{
+		/* Acer Switch V 10 SW5-017, same issue as Acer Switch 10 SW5-012. */
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "SW5-017"),
+		},
+	},
 	{
 		/*
 		 * Acer One S1003. _LID method messes with power-button GPIO
@@ -164,7 +175,8 @@ soc_button_device_create(struct platform_device *pdev,
 		}
 
 		/* See dmi_use_low_level_irq[] comment */
-		if (!autorepeat && dmi_check_system(dmi_use_low_level_irq)) {
+		if (!autorepeat && (use_low_level_irq ||
+				    dmi_check_system(dmi_use_low_level_irq))) {
 			irq_set_irq_type(irq, IRQ_TYPE_LEVEL_LOW);
 			gpio_keys[n_buttons].irq = irq;
 			gpio_keys[n_buttons].gpio = -ENOENT;
drivers/input/mouse/synaptics.c +1 -0
index ffad142801b3..973a4c1d5d09 100644
@@ -191,6 +191,7 @@ static const char * const smbus_pnp_ids[] = {
 	"SYN3221", /* HP 15-ay000 */
 	"SYN323d", /* HP Spectre X360 13-w013dx */
 	"SYN3257", /* HP Envy 13-ad105ng */
+	"SYN3286", /* HP Laptop 15-da3001TU */
 	NULL
 };
 
drivers/input/serio/i8042-x86ia64io.h +4 -4
index 4b0201cf71f5..3a41ac9af2e7 100644
@@ -114,18 +114,18 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = {
 		.driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_NEVER)
 	},
 	{
-		/* ASUS ZenBook UX425UA */
+		/* ASUS ZenBook UX425UA/QA */
 		.matches = {
 			DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
-			DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX425UA"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX425"),
 		},
 		.driver_data = (void *)(SERIO_QUIRK_PROBE_DEFER | SERIO_QUIRK_RESET_NEVER)
 	},
 	{
-		/* ASUS ZenBook UM325UA */
+		/* ASUS ZenBook UM325UA/QA */
 		.matches = {
 			DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
-			DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX325UA_UM325UA"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX325"),
 		},
 		.driver_data = (void *)(SERIO_QUIRK_PROBE_DEFER | SERIO_QUIRK_RESET_NEVER)
 	},
drivers/input/touchscreen/goodix.c +11 -0
index 9a9deea51163..0b513fcd51d1 100644
@@ -1039,6 +1039,7 @@ static int goodix_configure_dev(struct goodix_ts_data *ts)
 	input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0);
 	input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0);
 
+retry_read_config:
 	/* Read configuration and apply touchscreen parameters */
 	goodix_read_config(ts);
 
@@ -1046,6 +1047,16 @@ static int goodix_configure_dev(struct goodix_ts_data *ts)
 	touchscreen_parse_properties(ts->input_dev, true, &ts->prop);
 
 	if (!ts->prop.max_x || !ts->prop.max_y || !ts->max_touch_num) {
+		if (!ts->reset_controller_at_probe &&
+		    ts->irq_pin_access_method != IRQ_PIN_ACCESS_NONE) {
+			dev_info(&ts->client->dev, "Config not set, resetting controller\n");
+			/* Retry after a controller reset */
+			ts->reset_controller_at_probe = true;
+			error = goodix_reset(ts);
+			if (error)
+				return error;
+			goto retry_read_config;
+		}
 		dev_err(&ts->client->dev,
 			"Invalid config (%d, %d, %d), using defaults\n",
 			ts->prop.max_x, ts->prop.max_y, ts->max_touch_num);
drivers/irqchip/irq-gic-v3-its.c +1 -1
index fc1bfffc468f..59a5d06b2d3e 100644
@@ -1620,7 +1620,7 @@ static int its_select_cpu(struct irq_data *d,
 
 		cpu = cpumask_pick_least_loaded(d, tmpmask);
 	} else {
-		cpumask_and(tmpmask, irq_data_get_affinity_mask(d), cpu_online_mask);
+		cpumask_copy(tmpmask, aff_mask);
 
 		/* If we cannot cross sockets, limit the search to that node */
 		if ((its_dev->its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_23144) &&
drivers/md/dm-integrity.c +14 -6
index d5b827086962..9705f3c358dd 100644
@@ -259,6 +259,7 @@ struct dm_integrity_c {
 
 	struct completion crypto_backoff;
 
+	bool wrote_to_journal;
 	bool journal_uptodate;
 	bool just_formatted;
 	bool recalculate_flag;
@@ -2361,6 +2362,8 @@ static void integrity_commit(struct work_struct *w)
 	if (!commit_sections)
 		goto release_flush_bios;
 
+	ic->wrote_to_journal = true;
+
 	i = commit_start;
 	for (n = 0; n < commit_sections; n++) {
 		for (j = 0; j < ic->journal_section_entries; j++) {
@@ -2575,10 +2578,6 @@ static void integrity_writer(struct work_struct *w)
 
 	unsigned prev_free_sectors;
 
-	/* the following test is not needed, but it tests the replay code */
-	if (unlikely(dm_post_suspending(ic->ti)) && !ic->meta_dev)
-		return;
-
 	spin_lock_irq(&ic->endio_wait.lock);
 	write_start = ic->committed_section;
 	write_sections = ic->n_committed_sections;
@@ -3085,10 +3084,17 @@ static void dm_integrity_postsuspend(struct dm_target *ti)
 	drain_workqueue(ic->commit_wq);
 
 	if (ic->mode == 'J') {
-		if (ic->meta_dev)
-			queue_work(ic->writer_wq, &ic->writer_work);
+		queue_work(ic->writer_wq, &ic->writer_work);
 		drain_workqueue(ic->writer_wq);
 		dm_integrity_flush_buffers(ic, true);
+		if (ic->wrote_to_journal) {
+			init_journal(ic, ic->free_section,
+				     ic->journal_sections - ic->free_section, ic->commit_seq);
+			if (ic->free_section) {
+				init_journal(ic, 0, ic->free_section,
+					     next_commit_seq(ic->commit_seq));
+			}
+		}
 	}
 
 	if (ic->mode == 'B') {
@@ -3116,6 +3122,8 @@ static void dm_integrity_resume(struct dm_target *ti)
 
 	DEBUG_print("resume\n");
 
+	ic->wrote_to_journal = false;
+
 	if (ic->provided_data_sectors != old_provided_data_sectors) {
 		if (ic->provided_data_sectors > old_provided_data_sectors &&
 		    ic->mode == 'B' &&
drivers/mmc/host/sdhci-brcmstb.c +51 -17

152 lines not on this page · raw message

drivers/net/arcnet/com20020_cs.c +9 -2
index b88a109b3b15..26ee263d8f3a 100644
@@ -113,6 +113,7 @@ static int com20020_probe(struct pcmcia_device *p_dev)
 	struct com20020_dev *info;
 	struct net_device *dev;
 	struct arcnet_local *lp;
+	int ret = -ENOMEM;
 
 	dev_dbg(&p_dev->dev, "com20020_attach()\n");
 
@@ -142,12 +143,18 @@ static int com20020_probe(struct pcmcia_device *p_dev)
 	info->dev = dev;
 	p_dev->priv = info;
 
-	return com20020_config(p_dev);
+	ret = com20020_config(p_dev);
+	if (ret)
+		goto fail_config;
+
+	return 0;
 
+fail_config:
+	free_arcdev(dev);
 fail_alloc_dev:
 	kfree(info);
 fail_alloc_info:
-	return -ENOMEM;
+	return ret;
 } /* com20020_attach */
 
 static void com20020_detach(struct pcmcia_device *link)
drivers/net/dsa/sja1105/sja1105_mdio.c +6 -0
index 215dd17ca790..4059fcc8c832 100644
@@ -256,6 +256,9 @@ static int sja1105_base_tx_mdio_read(struct mii_bus *bus, int phy, int reg)
 	u32 tmp;
 	int rc;
 
+	if (reg & MII_ADDR_C45)
+		return -EOPNOTSUPP;
+
 	rc = sja1105_xfer_u32(priv, SPI_READ, regs->mdio_100base_tx + reg,
 			      &tmp, NULL);
 	if (rc < 0)
@@ -272,6 +275,9 @@ static int sja1105_base_tx_mdio_write(struct mii_bus *bus, int phy, int reg,
 	const struct sja1105_regs *regs = priv->info->regs;
 	u32 tmp = val;
 
+	if (reg & MII_ADDR_C45)
+		return -EOPNOTSUPP;
+
 	return sja1105_xfer_u32(priv, SPI_WRITE, regs->mdio_100base_tx + reg,
 				&tmp, NULL);
 }
drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c +8 -4
index 561395731450..a9f202bbada1 100644
@@ -795,16 +795,20 @@ static void bnx2x_vf_enable_traffic(struct bnx2x *bp, struct bnx2x_virtf *vf)
 
 static u8 bnx2x_vf_is_pcie_pending(struct bnx2x *bp, u8 abs_vfid)
 {
-	struct pci_dev *dev;
 	struct bnx2x_virtf *vf = bnx2x_vf_by_abs_fid(bp, abs_vfid);
+	struct pci_dev *dev;
+	bool pending;
 
 	if (!vf)
 		return false;
 
 	dev = pci_get_domain_bus_and_slot(vf->domain, vf->bus, vf->devfn);
-	if (dev)
-		return bnx2x_is_pcie_pending(dev);
-	return false;
+	if (!dev)
+		return false;
+	pending = bnx2x_is_pcie_pending(dev);
+	pci_dev_put(dev);
+
+	return pending;
 }
 
 int bnx2x_vf_flr_clnup_epilog(struct bnx2x *bp, u8 abs_vfid)
drivers/net/ethernet/cavium/liquidio/lio_main.c +2 -2
index 7bd97d98afeb..ae68821dd56d 100644
@@ -1798,7 +1798,7 @@ static int liquidio_open(struct net_device *netdev)
 
 	ifstate_set(lio, LIO_IFSTATE_RUNNING);
 
-	if (!OCTEON_CN23XX_PF(oct) || (OCTEON_CN23XX_PF(oct) && !oct->msix_on)) {
+	if (!OCTEON_CN23XX_PF(oct) || !oct->msix_on) {
 		ret = setup_tx_poll_fn(netdev);
 		if (ret)
 			goto err_poll;
@@ -1828,7 +1828,7 @@ static int liquidio_open(struct net_device *netdev)
 	return 0;
 
 err_rx_ctrl:
-	if (!OCTEON_CN23XX_PF(oct) || (OCTEON_CN23XX_PF(oct) && !oct->msix_on))
+	if (!OCTEON_CN23XX_PF(oct) || !oct->msix_on)
 		cleanup_tx_poll_fn(netdev);
 err_poll:
 	if (lio->ptp_clock) {
drivers/net/ethernet/cavium/thunder/thunder_bgx.c +3 -1
index c36fed9c3d73..daaffae1a89f 100644
@@ -1435,8 +1435,10 @@ static acpi_status bgx_acpi_match_id(acpi_handle handle, u32 lvl,
 		return AE_OK;
 	}
 
-	if (strncmp(string.pointer, bgx_sel, 4))
+	if (strncmp(string.pointer, bgx_sel, 4)) {
+		kfree(string.pointer);
 		return AE_OK;
+	}
 
 	acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, 1,
 			    bgx_acpi_register_phy, NULL, bgx, NULL);
drivers/net/ethernet/freescale/enetc/enetc.c +20 -12
index 77d765809c1e..222a250fba84 100644
@@ -1768,7 +1768,7 @@ static void enetc_setup_txbdr(struct enetc_hw *hw, struct enetc_bdr *tx_ring)
 	/* enable Tx ints by setting pkt thr to 1 */
 	enetc_txbdr_wr(hw, idx, ENETC_TBICR0, ENETC_TBICR0_ICEN | 0x1);
 
-	tbmr = ENETC_TBMR_EN;
+	tbmr = ENETC_TBMR_EN | ENETC_TBMR_SET_PRIO(tx_ring->prio);
 	if (tx_ring->ndev->features & NETIF_F_HW_VLAN_CTAG_TX)
 		tbmr |= ENETC_TBMR_VIH;
 
@@ -1831,13 +1831,14 @@ static void enetc_setup_rxbdr(struct enetc_hw *hw, struct enetc_bdr *rx_ring)
 
 static void enetc_setup_bdrs(struct enetc_ndev_priv *priv)
 {
+	struct enetc_hw *hw = &priv->si->hw;
 	int i;
 
 	for (i = 0; i < priv->num_tx_rings; i++)
-		enetc_setup_txbdr(&priv->si->hw, priv->tx_ring[i]);
+		enetc_setup_txbdr(hw, priv->tx_ring[i]);
 
 	for (i = 0; i < priv->num_rx_rings; i++)
-		enetc_setup_rxbdr(&priv->si->hw, priv->rx_ring[i]);
+		enetc_setup_rxbdr(hw, priv->rx_ring[i]);
 }
 
 static void enetc_clear_rxbdr(struct enetc_hw *hw, struct enetc_bdr *rx_ring)
@@ -1870,13 +1871,14 @@ static void enetc_clear_txbdr(struct enetc_hw *hw, struct enetc_bdr *tx_ring)
 
 static void enetc_clear_bdrs(struct enetc_ndev_priv *priv)
 {
+	struct enetc_hw *hw = &priv->si->hw;
 	int i;
 
 	for (i = 0; i < priv->num_tx_rings; i++)
-		enetc_clear_txbdr(&priv->si->hw, priv->tx_ring[i]);
+		enetc_clear_txbdr(hw, priv->tx_ring[i]);
 
 	for (i = 0; i < priv->num_rx_rings; i++)
-		enetc_clear_rxbdr(&priv->si->hw, priv->rx_ring[i]);
+		enetc_clear_rxbdr(hw, priv->rx_ring[i]);
 
 	udelay(1);
 }
@@ -1884,13 +1886,13 @@ static void enetc_clear_bdrs(struct enetc_ndev_priv *priv)
 static int enetc_setup_irqs(struct enetc_ndev_priv *priv)
 {
 	struct pci_dev *pdev = priv->si->pdev;
+	struct enetc_hw *hw = &priv->si->hw;
 	int i, j, err;
 
 	for (i = 0; i < priv->bdr_int_num; i++) {
 		int irq = pci_irq_vector(pdev, ENETC_BDR_INT_BASE_IDX + i);
 		struct enetc_int_vector *v = priv->int_vector[i];
 		int entry = ENETC_BDR_INT_BASE_IDX + i;
-		struct enetc_hw *hw = &priv->si->hw;
 
 		snprintf(v->name, sizeof(v->name), "%s-rxtx%d",
 			 priv->ndev->name, i);
@@ -1978,13 +1980,14 @@ static void enetc_setup_interrupts(struct enetc_ndev_priv *priv)
 
 static void enetc_clear_interrupts(struct enetc_ndev_priv *priv)
 {
+	struct enetc_hw *hw = &priv->si->hw;
 	int i;
 
 	for (i = 0; i < priv->num_tx_rings; i++)
-		enetc_txbdr_wr(&priv->si->hw, i, ENETC_TBIER, 0);
+		enetc_txbdr_wr(hw, i, ENETC_TBIER, 0);
 
 	for (i = 0; i < priv->num_rx_rings; i++)
-		enetc_rxbdr_wr(&priv->si->hw, i, ENETC_RBIER, 0);
+		enetc_rxbdr_wr(hw, i, ENETC_RBIER, 0);
 }
 
 static int enetc_phylink_connect(struct net_device *ndev)
@@ -2151,6 +2154,7 @@ int enetc_setup_tc_mqprio(struct net_device *ndev, void *type_data)
 {
 	struct enetc_ndev_priv *priv = netdev_priv(ndev);
 	struct tc_mqprio_qopt *mqprio = type_data;
+	struct enetc_hw *hw = &priv->si->hw;
 	struct enetc_bdr *tx_ring;
 	int num_stack_tx_queues;
 	u8 num_tc;
@@ -2167,7 +2171,8 @@ int enetc_setup_tc_mqprio(struct net_device *ndev, void *type_data)
 		/* Reset all ring priorities to 0 */
 		for (i = 0; i < priv->num_tx_rings; i++) {
 			tx_ring = priv->tx_ring[i];
-			enetc_set_bdr_prio(&priv->si->hw, tx_ring->index, 0);
+			tx_ring->prio = 0;
+			enetc_set_bdr_prio(hw, tx_ring->index, tx_ring->prio);
 		}
 
 		return 0;
@@ -2186,7 +2191,8 @@ int enetc_setup_tc_mqprio(struct net_device *ndev, void *type_data)
 	 */
 	for (i = 0; i < num_tc; i++) {
 		tx_ring = priv->tx_ring[i];
-		enetc_set_bdr_prio(&priv->si->hw, tx_ring->index, i);
+		tx_ring->prio = i;
+		enetc_set_bdr_prio(hw, tx_ring->index, tx_ring->prio);
 	}
 
 	/* Reset the number of netdev queues based on the TC count */
@@ -2296,19 +2302,21 @@ static int enetc_set_rss(struct net_device *ndev, int en)
 static void enetc_enable_rxvlan(struct net_device *ndev, bool en)
 {
 	struct enetc_ndev_priv *priv = netdev_priv(ndev);
+	struct enetc_hw *hw = &priv->si->hw;
 	int i;
 
 	for (i = 0; i < priv->num_rx_rings; i++)
-		enetc_bdr_enable_rxvlan(&priv->si->hw, i, en);
+		enetc_bdr_enable_rxvlan(hw, i, en);
 }
 
 static void enetc_enable_txvlan(struct net_device *ndev, bool en)
 {
 	struct enetc_ndev_priv *priv = netdev_priv(ndev);
+	struct enetc_hw *hw = &priv->si->hw;
 	int i;
 
 	for (i = 0; i < priv->num_tx_rings; i++)
-		enetc_bdr_enable_txvlan(&priv->si->hw, i, en);
+		enetc_bdr_enable_txvlan(hw, i, en);
 }
 
 void enetc_set_features(struct net_device *ndev, netdev_features_t features)
drivers/net/ethernet/freescale/enetc/enetc.h +6 -4
index f304cdb854ec..a3b936375c56 100644
@@ -91,6 +91,7 @@ struct enetc_bdr {
 		void __iomem *rcir;
 	};
 	u16 index;
+	u16 prio;
 	int bd_count; /* # of BDs */
 	int next_to_use;
 	int next_to_clean;
@@ -423,19 +424,20 @@ int enetc_set_psfp(struct net_device *ndev, bool en);
 
 static inline void enetc_get_max_cap(struct enetc_ndev_priv *priv)
 {
+	struct enetc_hw *hw = &priv->si->hw;
 	u32 reg;
 
-	reg = enetc_port_rd(&priv->si->hw, ENETC_PSIDCAPR);
+	reg = enetc_port_rd(hw, ENETC_PSIDCAPR);
 	priv->psfp_cap.max_streamid = reg & ENETC_PSIDCAPR_MSK;
 	/* Port stream filter capability */
-	reg = enetc_port_rd(&priv->si->hw, ENETC_PSFCAPR);
+	reg = enetc_port_rd(hw, ENETC_PSFCAPR);
 	priv->psfp_cap.max_psfp_filter = reg & ENETC_PSFCAPR_MSK;
 	/* Port stream gate capability */
-	reg = enetc_port_rd(&priv->si->hw, ENETC_PSGCAPR);
+	reg = enetc_port_rd(hw, ENETC_PSGCAPR);
 	priv->psfp_cap.max_psfp_gate = (reg & ENETC_PSGCAPR_SGIT_MSK);
 	priv->psfp_cap.max_psfp_gatelist = (reg & ENETC_PSGCAPR_GCL_MSK) >> 16;
 	/* Port flow meter capability */
-	reg = enetc_port_rd(&priv->si->hw, ENETC_PFMCAPR);
+	reg = enetc_port_rd(hw, ENETC_PFMCAPR);
 	priv->psfp_cap.max_psfp_meter = reg & ENETC_PFMCAPR_MSK;
 }
 
drivers/net/ethernet/freescale/enetc/enetc_pf.c +2 -4
index 3615357cc60f..5efb079ef25f 100644
@@ -800,9 +800,6 @@ static void enetc_pf_netdev_setup(struct enetc_si *si, struct net_device *ndev,
 
 	ndev->priv_flags |= IFF_UNICAST_FLT;
 
-	if (si->hw_features & ENETC_SI_F_QBV)
-		priv->active_offloads |= ENETC_F_QBV;
-
 	if (si->hw_features & ENETC_SI_F_PSFP && !enetc_psfp_enable(priv)) {
 		priv->active_offloads |= ENETC_F_QCI;
 		ndev->features |= NETIF_F_HW_TC;
@@ -1053,7 +1050,8 @@ static void enetc_pl_mac_link_up(struct phylink_config *config,
 	int idx;
 
 	priv = netdev_priv(pf->si->ndev);
-	if (priv->active_offloads & ENETC_F_QBV)
+
+	if (pf->si->hw_features & ENETC_SI_F_QBV)
 		enetc_sched_speed_set(priv, speed);
 
 	if (!phylink_autoneg_inband(mode) &&
drivers/net/ethernet/freescale/enetc/enetc_qos.c +44 -39

203 lines not on this page · raw message

drivers/net/ethernet/intel/iavf/iavf_main.c +23 -10
index 629ebdfa48b8..4b2e99be7ef5 100644
@@ -2270,7 +2270,6 @@ static void iavf_disable_vf(struct iavf_adapter *adapter)
 	iavf_free_queues(adapter);
 	memset(adapter->vf_res, 0, IAVF_VIRTCHNL_VF_RESOURCE_SIZE);
 	iavf_shutdown_adminq(&adapter->hw);
-	adapter->netdev->flags &= ~IFF_UP;
 	adapter->flags &= ~IAVF_FLAG_RESET_PENDING;
 	iavf_change_state(adapter, __IAVF_DOWN);
 	wake_up(&adapter->down_waitqueue);
@@ -2369,6 +2368,11 @@ static void iavf_reset_task(struct work_struct *work)
 		iavf_disable_vf(adapter);
 		mutex_unlock(&adapter->client_lock);
 		mutex_unlock(&adapter->crit_lock);
+		if (netif_running(netdev)) {
+			rtnl_lock();
+			dev_close(netdev);
+			rtnl_unlock();
+		}
 		return; /* Do not attempt to reinit. It's dead, Jim. */
 	}
 
@@ -2381,6 +2385,7 @@ static void iavf_reset_task(struct work_struct *work)
 
 	if (running) {
 		netif_carrier_off(netdev);
+		netif_tx_stop_all_queues(netdev);
 		adapter->link_up = false;
 		iavf_napi_disable_all(adapter);
 	}
@@ -2503,6 +2508,16 @@ static void iavf_reset_task(struct work_struct *work)
 
 	mutex_unlock(&adapter->client_lock);
 	mutex_unlock(&adapter->crit_lock);
+
+	if (netif_running(netdev)) {
+		/* Close device to ensure that Tx queues will not be started
+		 * during netif_device_attach() at the end of the reset task.
+		 */
+		rtnl_lock();
+		dev_close(netdev);
+		rtnl_unlock();
+	}
+
 	dev_err(&adapter->pdev->dev, "failed to allocate resources during reinit\n");
 reset_finish:
 	rtnl_lock();
@@ -4174,23 +4189,21 @@ static int __maybe_unused iavf_resume(struct device *dev_d)
 static void iavf_remove(struct pci_dev *pdev)
 {
 	struct iavf_adapter *adapter = iavf_pdev_to_adapter(pdev);
-	struct net_device *netdev = adapter->netdev;
 	struct iavf_fdir_fltr *fdir, *fdirtmp;
 	struct iavf_vlan_filter *vlf, *vlftmp;
+	struct iavf_cloud_filter *cf, *cftmp;
 	struct iavf_adv_rss *rss, *rsstmp;
 	struct iavf_mac_filter *f, *ftmp;
-	struct iavf_cloud_filter *cf, *cftmp;
-	struct iavf_hw *hw = &adapter->hw;
+	struct net_device *netdev;
+	struct iavf_hw *hw;
 	int err;
 
-	/* When reboot/shutdown is in progress no need to do anything
-	 * as the adapter is already REMOVE state that was set during
-	 * iavf_shutdown() callback.
-	 */
-	if (adapter->state == __IAVF_REMOVE)
+	netdev = adapter->netdev;
+	hw = &adapter->hw;
+
+	if (test_and_set_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section))
 		return;
 
-	set_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section);
 	/* Wait until port initialization is complete.
 	 * There are flows where register/unregister netdev may race.
 	 */
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +6 -2
index ae586f8895fc..524913c28f3b 100644
@@ -7356,6 +7356,7 @@ static int mvpp2_get_sram(struct platform_device *pdev,
 			  struct mvpp2 *priv)
 {
 	struct resource *res;
+	void __iomem *base;
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 2);
 	if (!res) {
@@ -7366,9 +7367,12 @@ static int mvpp2_get_sram(struct platform_device *pdev,
 		return 0;
 	}
 
-	priv->cm3_base = devm_ioremap_resource(&pdev->dev, res);
+	base = devm_ioremap_resource(&pdev->dev, res);
+	if (IS_ERR(base))
+		return PTR_ERR(base);
 
-	return PTR_ERR_OR_ZERO(priv->cm3_base);
+	priv->cm3_base = base;
+	return 0;
 }
 
 static int mvpp2_probe(struct platform_device *pdev)
drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c +3 -0
index f001579569a2..66d34699f160 100644
@@ -441,6 +441,8 @@ static int rvu_dbg_rvu_pf_cgx_map_display(struct seq_file *filp, void *unused)
 		sprintf(lmac, "LMAC%d", lmac_id);
 		seq_printf(filp, "%s\t0x%x\t\tNIX%d\t\t%s\t%s\n",
 			   dev_name(&pdev->dev), pcifunc, blkid, cgx, lmac);
+
+		pci_dev_put(pdev);
 	}
 	return 0;
 }
@@ -2127,6 +2129,7 @@ static int cgx_print_dmac_flt(struct seq_file *s, int lmac_id)
 		}
 	}
 
+	pci_dev_put(pdev);
 	return 0;
 }
 
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c +2 -0
index 603361c94786..09892703cfd4 100644
@@ -4832,6 +4832,8 @@ static int nix_setup_ipolicers(struct rvu *rvu,
 		ipolicer->ref_count = devm_kcalloc(rvu->dev,
 						   ipolicer->band_prof.max,
 						   sizeof(u16), GFP_KERNEL);
+		if (!ipolicer->ref_count)
+			return -ENOMEM;
 	}
 
 	/* Set policer timeunit to 2us ie  (19 + 1) * 100 nsec = 2us */
drivers/net/ethernet/marvell/octeontx2/af/rvu_sdp.c +5 -2
index b04fb226f708..ae50d56258ec 100644
@@ -62,15 +62,18 @@ int rvu_sdp_init(struct rvu *rvu)
 		pfvf->sdp_info = devm_kzalloc(rvu->dev,
 					      sizeof(struct sdp_node_info),
 					      GFP_KERNEL);
-		if (!pfvf->sdp_info)
+		if (!pfvf->sdp_info) {
+			pci_dev_put(pdev);
 			return -ENOMEM;
+		}
 
 		dev_info(rvu->dev, "SDP PF number:%d\n", sdp_pf_num[i]);
 
-		put_device(&pdev->dev);
 		i++;
 	}
 
+	pci_dev_put(pdev);
+
 	return 0;
 }
 
drivers/net/ethernet/mediatek/mtk_eth_soc.c +3 -1
index 8601ef26c260..cc6a5b2f24e3 100644
@@ -2327,8 +2327,10 @@ static int mtk_open(struct net_device *dev)
 		int err;
 
 		err = mtk_start_dma(eth);
-		if (err)
+		if (err) {
+			phylink_disconnect_phy(mac->phylink);
 			return err;
+		}
 
 		if (eth->soc->offload_version && mtk_ppe_start(&eth->ppe) == 0)
 			gdm_config = MTK_GDMA_TO_PPE;
drivers/net/ethernet/mellanox/mlx4/qp.c +2 -1
index b149e601f673..48cfaa7eaf50 100644
@@ -697,7 +697,8 @@ static int mlx4_create_zones(struct mlx4_dev *dev,
 			err = mlx4_bitmap_init(*bitmap + k, 1,
 					       MLX4_QP_TABLE_RAW_ETH_SIZE - 1, 0,
 					       0);
-			mlx4_bitmap_alloc_range(*bitmap + k, 1, 1, 0);
+			if (!err)
+				mlx4_bitmap_alloc_range(*bitmap + k, 1, 1, 0);
 		}
 
 		if (err)
drivers/net/ethernet/mellanox/mlx5/core/cmd.c +3 -3
index 98ca5d1ed45d..85190f2f4d50 100644
@@ -971,6 +971,7 @@ static void cmd_work_handler(struct work_struct *work)
 		cmd_ent_get(ent);
 	set_bit(MLX5_CMD_ENT_STATE_PENDING_COMP, &ent->state);
 
+	cmd_ent_get(ent); /* for the _real_ FW event on completion */
 	/* Skip sending command to fw if internal error */
 	if (mlx5_cmd_is_down(dev) || !opcode_allowed(&dev->cmd, ent->op)) {
 		u8 status = 0;
@@ -984,7 +985,6 @@ static void cmd_work_handler(struct work_struct *work)
 		return;
 	}
 
-	cmd_ent_get(ent); /* for the _real_ FW event on completion */
 	/* ring doorbell after the descriptor is valid */
 	mlx5_core_dbg(dev, "writing 0x%x to command doorbell\n", 1 << ent->idx);
 	wmb();
@@ -1598,8 +1598,8 @@ static void mlx5_cmd_comp_handler(struct mlx5_core_dev *dev, u64 vec, bool force
 				cmd_ent_put(ent); /* timeout work was canceled */
 
 			if (!forced || /* Real FW completion */
-			    pci_channel_offline(dev->pdev) || /* FW is inaccessible */
-			    dev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR)
+			     mlx5_cmd_is_down(dev) || /* No real FW completion is expected */
+			     !opcode_allowed(cmd, ent->op))
 				cmd_ent_put(ent);
 
 			ent->ts2 = ktime_get_ns();
drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c +1 -1
index ea46152816f9..326e0b170e36 100644
@@ -638,7 +638,7 @@ static void mlx5_tracer_handle_timestamp_trace(struct mlx5_fw_tracer *tracer,
 			trace_timestamp = (timestamp_event.timestamp & MASK_52_7) |
 					  (str_frmt->timestamp & MASK_6_0);
 		else
-			trace_timestamp = ((timestamp_event.timestamp & MASK_52_7) - 1) |
+			trace_timestamp = ((timestamp_event.timestamp - 1) & MASK_52_7) |
 					  (str_frmt->timestamp & MASK_6_0);
 
 		mlx5_tracer_print_trace(str_frmt, dev, trace_timestamp);
drivers/net/ethernet/mellanox/mlx5/core/main.c +6 -3
index d092261e96c3..19c11d33f4b6 100644
@@ -1608,7 +1608,8 @@ static pci_ers_result_t mlx5_pci_err_detected(struct pci_dev *pdev,
 	res = state == pci_channel_io_perm_failure ?
 		PCI_ERS_RESULT_DISCONNECT : PCI_ERS_RESULT_NEED_RESET;
 
-	mlx5_pci_trace(dev, "Exit, result = %d, %s\n",  res, result2str(res));
+	mlx5_core_info(dev, "%s Device state = %d pci_status: %d. Exit, result = %d, %s\n",
+		       __func__, dev->state, dev->pci_status, res, result2str(res));
 	return res;
 }
 
@@ -1647,7 +1648,8 @@ static pci_ers_result_t mlx5_pci_slot_reset(struct pci_dev *pdev)
 	struct mlx5_core_dev *dev = pci_get_drvdata(pdev);
 	int err;
 
-	mlx5_pci_trace(dev, "Enter\n");
+	mlx5_core_info(dev, "%s Device state = %d pci_status: %d. Enter\n",
+		       __func__, dev->state, dev->pci_status);
 
 	err = mlx5_pci_enable_device(dev);
 	if (err) {
@@ -1669,7 +1671,8 @@ static pci_ers_result_t mlx5_pci_slot_reset(struct pci_dev *pdev)
 
 	res = PCI_ERS_RESULT_RECOVERED;
 out:
-	mlx5_pci_trace(dev, "Exit, err = %d, result = %d, %s\n", err, res, result2str(res));
+	mlx5_core_info(dev, "%s Device state = %d pci_status: %d. Exit, err = %d, result = %d, %s\n",
+		       __func__, dev->state, dev->pci_status, err, res, result2str(res));
 	return res;
 }
 
drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c +12 -2
index cb68eaaac881..5c7b21ce64ed 100644
@@ -83,7 +83,7 @@ static int sparx5_port_open(struct net_device *ndev)
 	err = phylink_of_phy_connect(port->phylink, port->of_node, 0);
 	if (err) {
 		netdev_err(ndev, "Could not attach to PHY\n");
-		return err;
+		goto err_connect;
 	}
 
 	phylink_start(port->phylink);
@@ -95,10 +95,20 @@ static int sparx5_port_open(struct net_device *ndev)
 			err = sparx5_serdes_set(port->sparx5, port, &port->conf);
 		else
 			err = phy_power_on(port->serdes);
-		if (err)
+		if (err) {
 			netdev_err(ndev, "%s failed\n", __func__);
+			goto out_power;
+		}
 	}
 
+	return 0;
+
+out_power:
+	phylink_stop(port->phylink);
+	phylink_disconnect_phy(port->phylink);
+err_connect:
+	sparx5_port_enable(port, false);
+
 	return err;
 }
 
drivers/net/ethernet/netronome/nfp/nfp_devlink.c +1 -1
index bea978df7713..1647b6b180cc 100644
@@ -363,7 +363,7 @@ int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port)
 		return ret;
 
 	attrs.split = eth_port.is_split;
-	attrs.splittable = !attrs.split;
+	attrs.splittable = eth_port.port_lanes > 1 && !attrs.split;
 	attrs.lanes = eth_port.port_lanes;
 	attrs.flavour = DEVLINK_PORT_FLAVOUR_PHYSICAL;
 	attrs.phys.port_number = eth_port.label_port;
drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c +3 -0
index 865865adfefc..d295942968f3 100644
@@ -1219,6 +1219,9 @@ nfp_port_get_module_info(struct net_device *netdev,
 	u8 data;
 
 	port = nfp_port_from_netdev(netdev);
+	if (!port)
+		return -EOPNOTSUPP;
+
 	/* update port state to get latest interface */
 	set_bit(NFP_PORT_CHANGED, &port->flags);
 	eth_port = nfp_port_get_eth_port(port);
drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c +5 -1
index ec3e558f890e..d555b4cc6049 100644
@@ -1148,6 +1148,7 @@ static void pch_gbe_tx_queue(struct pch_gbe_adapter *adapter,
 		buffer_info->dma = 0;
 		buffer_info->time_stamp = 0;
 		tx_ring->next_to_use = ring_num;
+		dev_kfree_skb_any(skb);
 		return;
 	}
 	buffer_info->mapped = true;
@@ -2464,6 +2465,7 @@ static void pch_gbe_remove(struct pci_dev *pdev)
 	unregister_netdev(netdev);
 
 	pch_gbe_phy_hw_reset(&adapter->hw);
+	pci_dev_put(adapter->ptp_pdev);
 
 	free_netdev(netdev);
 }
@@ -2539,7 +2541,7 @@ static int pch_gbe_probe(struct pci_dev *pdev,
 	/* setup the private structure */
 	ret = pch_gbe_sw_init(adapter);
 	if (ret)
-		goto err_free_netdev;
+		goto err_put_dev;
 
 	/* Initialize PHY */
 	ret = pch_gbe_init_phy(adapter);
@@ -2597,6 +2599,8 @@ static int pch_gbe_probe(struct pci_dev *pdev,
 
 err_free_adapter:
 	pch_gbe_phy_hw_reset(&adapter->hw);
+err_put_dev:
+	pci_dev_put(adapter->ptp_pdev);
 err_free_netdev:
 	free_netdev(netdev);
 	return ret;
drivers/net/ethernet/qlogic/qla3xxx.c +1 -0
index 40d14d80f6f1..29837e533cee 100644
@@ -2469,6 +2469,7 @@ static netdev_tx_t ql3xxx_send(struct sk_buff *skb,
 					     skb_shinfo(skb)->nr_frags);
 	if (tx_cb->seg_count == -1) {
 		netdev_err(ndev, "%s: invalid segment count!\n", __func__);
+		dev_kfree_skb_any(skb);
 		return NETDEV_TX_OK;
 	}
 
drivers/net/ethernet/sfc/ef100_netdev.c +1 -0
index 67fe44db6b61..63a44ee763be 100644
@@ -200,6 +200,7 @@ static netdev_tx_t ef100_hard_start_xmit(struct sk_buff *skb,
 		   skb->len, skb->data_len, channel->channel);
 	if (!efx->n_channels || !efx->n_tx_channels || !channel) {
 		netif_stop_queue(net_dev);
+		dev_kfree_skb_any(skb);
 		goto err;
 	}
 
drivers/net/macsec.c +4 -24
index 4811bd1f3d74..aa9d0dfeda5a 100644
@@ -2644,11 +2644,6 @@ static int macsec_upd_offload(struct sk_buff *skb, struct genl_info *info)
 	if (ret)
 		goto rollback;
 
-	/* Force features update, since they are different for SW MACSec and
-	 * HW offloading cases.
-	 */
-	netdev_update_features(dev);
-
 	rtnl_unlock();
 	return 0;
 
@@ -3416,16 +3411,9 @@ static netdev_tx_t macsec_start_xmit(struct sk_buff *skb,
 	return ret;
 }
 
-#define SW_MACSEC_FEATURES \
+#define MACSEC_FEATURES \
 	(NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST)
 
-/* If h/w offloading is enabled, use real device features save for
- *   VLAN_FEATURES - they require additional ops
- *   HW_MACSEC - no reason to report it
- */
-#define REAL_DEV_FEATURES(dev) \
-	((dev)->features & ~(NETIF_F_VLAN_FEATURES | NETIF_F_HW_MACSEC))
-
 static int macsec_dev_init(struct net_device *dev)
 {
 	struct macsec_dev *macsec = macsec_priv(dev);
@@ -3442,12 +3430,8 @@ static int macsec_dev_init(struct net_device *dev)
 		return err;
 	}
 
-	if (macsec_is_offloaded(macsec)) {
-		dev->features = REAL_DEV_FEATURES(real_dev);
-	} else {
-		dev->features = real_dev->features & SW_MACSEC_FEATURES;
-		dev->features |= NETIF_F_LLTX | NETIF_F_GSO_SOFTWARE;
-	}
+	dev->features = real_dev->features & MACSEC_FEATURES;
+	dev->features |= NETIF_F_LLTX | NETIF_F_GSO_SOFTWARE;
 
 	dev->needed_headroom = real_dev->needed_headroom +
 			       MACSEC_NEEDED_HEADROOM;
@@ -3476,10 +3460,7 @@ static netdev_features_t macsec_fix_features(struct net_device *dev,
 	struct macsec_dev *macsec = macsec_priv(dev);
 	struct net_device *real_dev = macsec->real_dev;
 
-	if (macsec_is_offloaded(macsec))
-		return REAL_DEV_FEATURES(real_dev);
-
-	features &= (real_dev->features & SW_MACSEC_FEATURES) |
+	features &= (real_dev->features & MACSEC_FEATURES) |
 		    NETIF_F_GSO_SOFTWARE | NETIF_F_SOFT_FEATURES;
 	features |= NETIF_F_LLTX;
 
@@ -3827,7 +3808,6 @@ static int macsec_changelink(struct net_device *dev, struct nlattr *tb[],
 	if (macsec_is_offloaded(macsec)) {
 		const struct macsec_ops *ops;
 		struct macsec_context ctx;
-		int ret;
 
 		ops = macsec_get_ops(netdev_priv(dev), &ctx);
 		if (!ops) {
drivers/net/usb/qmi_wwan.c +1 -0
index 6bf5c75f519d..d886f903e428 100644
@@ -1353,6 +1353,7 @@ static const struct usb_device_id products[] = {
 	{QMI_FIXED_INTF(0x2357, 0x0201, 4)},	/* TP-LINK HSUPA Modem MA180 */
 	{QMI_FIXED_INTF(0x2357, 0x9000, 4)},	/* TP-LINK MA260 */
 	{QMI_QUIRK_SET_DTR(0x1bc7, 0x1031, 3)}, /* Telit LE910C1-EUX */
+	{QMI_QUIRK_SET_DTR(0x1bc7, 0x103a, 0)}, /* Telit LE910C4-WWX */
 	{QMI_QUIRK_SET_DTR(0x1bc7, 0x1040, 2)},	/* Telit LE922A */
 	{QMI_QUIRK_SET_DTR(0x1bc7, 0x1050, 2)},	/* Telit FN980 */
 	{QMI_QUIRK_SET_DTR(0x1bc7, 0x1060, 2)},	/* Telit LN920 */
drivers/net/wireless/ath/ath11k/qmi.h +1 -1
index 3d5930330703..25940b683ea4 100644
@@ -27,7 +27,7 @@
 #define ATH11K_QMI_WLANFW_MAX_NUM_MEM_SEG_V01	52
 #define ATH11K_QMI_CALDB_SIZE			0x480000
 #define ATH11K_QMI_BDF_EXT_STR_LENGTH		0x20
-#define ATH11K_QMI_FW_MEM_REQ_SEGMENT_CNT	3
+#define ATH11K_QMI_FW_MEM_REQ_SEGMENT_CNT	5
 
 #define QMI_WLFW_REQUEST_MEM_IND_V01		0x0035
 #define QMI_WLFW_FW_MEM_READY_IND_V01		0x0037
drivers/net/wireless/cisco/airo.c +14 -4
index 65dd8cff1b01..fc19ecbc4c08 100644
@@ -5233,7 +5233,7 @@ static int get_wep_tx_idx(struct airo_info *ai)
 	return -1;
 }
 
-static int set_wep_key(struct airo_info *ai, u16 index, const char *key,
+static int set_wep_key(struct airo_info *ai, u16 index, const u8 *key,
 		       u16 keylen, int perm, int lock)
 {
 	static const unsigned char macaddr[ETH_ALEN] = { 0x01, 0, 0, 0, 0, 0 };
@@ -5284,7 +5284,7 @@ static void proc_wepkey_on_close(struct inode *inode, struct file *file)
 	struct net_device *dev = PDE_DATA(inode);
 	struct airo_info *ai = dev->ml_priv;
 	int i, rc;
-	char key[16];
+	u8 key[16];
 	u16 index = 0;
 	int j = 0;
 
@@ -5312,12 +5312,22 @@ static void proc_wepkey_on_close(struct inode *inode, struct file *file)
 	}
 
 	for (i = 0; i < 16*3 && data->wbuffer[i+j]; i++) {
+		int val;
+
+		if (i % 3 == 2)
+			continue;
+
+		val = hex_to_bin(data->wbuffer[i+j]);
+		if (val < 0) {
+			airo_print_err(ai->dev->name, "WebKey passed invalid key hex");
+			return;
+		}
 		switch(i%3) {
 		case 0:
-			key[i/3] = hex_to_bin(data->wbuffer[i+j])<<4;
+			key[i/3] = (u8)val << 4;
 			break;
 		case 1:
-			key[i/3] |= hex_to_bin(data->wbuffer[i+j]);
+			key[i/3] |= (u8)val;
 			break;
 		}
 	}
drivers/net/wireless/mac80211_hwsim.c +5 -0
index b228567b2a73..c3c3b5aa87b0 100644
@@ -845,6 +845,7 @@ static void hwsim_send_nullfunc(struct mac80211_hwsim_data *data, u8 *mac,
 	struct hwsim_vif_priv *vp = (void *)vif->drv_priv;
 	struct sk_buff *skb;
 	struct ieee80211_hdr *hdr;
+	struct ieee80211_tx_info *cb;
 
 	if (!vp->assoc)
 		return;
@@ -866,6 +867,10 @@ static void hwsim_send_nullfunc(struct mac80211_hwsim_data *data, u8 *mac,
 	memcpy(hdr->addr2, mac, ETH_ALEN);
 	memcpy(hdr->addr3, vp->bssid, ETH_ALEN);
 
+	cb = IEEE80211_SKB_CB(skb);
+	cb->control.rates[0].count = 1;
+	cb->control.rates[1].idx = -1;
+
 	rcu_read_lock();
 	mac80211_hwsim_tx_frame(data->hw, skb,
 				rcu_dereference(vif->chanctx_conf)->def.chan);
drivers/net/wireless/microchip/wilc1000/cfg80211.c +31 -9
index 87c14969c75f..1688144d7847 100644
@@ -939,30 +939,52 @@ static inline void wilc_wfi_cfg_parse_ch_attr(u8 *buf, u32 len, u8 sta_ch)
 		return;
 
 	while (index + sizeof(*e) <= len) {
+		u16 attr_size;
+
 		e = (struct wilc_attr_entry *)&buf[index];
-		if (e->attr_type == IEEE80211_P2P_ATTR_CHANNEL_LIST)
+		attr_size = le16_to_cpu(e->attr_len);
+
+		if (index + sizeof(*e) + attr_size > len)
+			return;
+
+		if (e->attr_type == IEEE80211_P2P_ATTR_CHANNEL_LIST &&
+		    attr_size >= (sizeof(struct wilc_attr_ch_list) - sizeof(*e)))
 			ch_list_idx = index;
-		else if (e->attr_type == IEEE80211_P2P_ATTR_OPER_CHANNEL)
+		else if (e->attr_type == IEEE80211_P2P_ATTR_OPER_CHANNEL &&
+			 attr_size == (sizeof(struct wilc_attr_oper_ch) - sizeof(*e)))
 			op_ch_idx = index;
+
 		if (ch_list_idx && op_ch_idx)
 			break;
-		index += le16_to_cpu(e->attr_len) + sizeof(*e);
+
+		index += sizeof(*e) + attr_size;
 	}
 
 	if (ch_list_idx) {
-		u16 attr_size;
-		struct wilc_ch_list_elem *e;
-		int i;
+		unsigned int i;
+		u16 elem_size;
 
 		ch_list = (struct wilc_attr_ch_list *)&buf[ch_list_idx];
-		attr_size = le16_to_cpu(ch_list->attr_len);
-		for (i = 0; i < attr_size;) {
+		/* the number of bytes following the final 'elem' member */
+		elem_size = le16_to_cpu(ch_list->attr_len) -
+			(sizeof(*ch_list) - sizeof(struct wilc_attr_entry));
+		for (i = 0; i < elem_size;) {
+			struct wilc_ch_list_elem *e;
+
 			e = (struct wilc_ch_list_elem *)(ch_list->elem + i);
+
+			i += sizeof(*e);
+			if (i > elem_size)
+				break;
+
+			i += e->no_of_channels;
+			if (i > elem_size)
+				break;
+
 			if (e->op_class == WILC_WLAN_OPERATING_CLASS_2_4GHZ) {
 				memset(e->ch_list, sta_ch, e->no_of_channels);
 				break;
 			}
-			i += e->no_of_channels;
 		}
 	}
 
drivers/net/wireless/microchip/wilc1000/hif.c +16 -5
index a133736a7821..3e5cc947b9b9 100644
@@ -467,14 +467,25 @@ void *wilc_parse_join_bss_param(struct cfg80211_bss *bss,
 
 	rsn_ie = cfg80211_find_ie(WLAN_EID_RSN, ies->data, ies->len);
 	if (rsn_ie) {
+		int rsn_ie_len = sizeof(struct element) + rsn_ie[1];
 		int offset = 8;
 
-		param->mode_802_11i = 2;
-		param->rsn_found = true;
 		/* extract RSN capabilities */
-		offset += (rsn_ie[offset] * 4) + 2;
-		offset += (rsn_ie[offset] * 4) + 2;
-		memcpy(param->rsn_cap, &rsn_ie[offset], 2);
+		if (offset < rsn_ie_len) {
+			/* skip over pairwise suites */
+			offset += (rsn_ie[offset] * 4) + 2;
+
+			if (offset < rsn_ie_len) {
+				/* skip over authentication suites */
+				offset += (rsn_ie[offset] * 4) + 2;
+
+				if (offset + 1 < rsn_ie_len) {
+					param->mode_802_11i = 2;
+					param->rsn_found = true;
+					memcpy(param->rsn_cap, &rsn_ie[offset], 2);
+				}
+			}
+		}
 	}
 
 	if (param->rsn_found) {
drivers/net/wwan/iosm/iosm_ipc_pcie.c +1 -1
index 01df23835be0..8b4222b137d1 100644
@@ -249,7 +249,7 @@ static enum ipc_pcie_sleep_state ipc_pcie_read_bios_cfg(struct device *dev)
 	if (object->integer.value == 3)
 		sleep_state = IPC_PCIE_D3L2;
 
-	kfree(object);
+	ACPI_FREE(object);
 
 default_ret:
 	return sleep_state;
drivers/nfc/st-nci/se.c +36 -13

68 lines not on this page · raw message

drivers/nvme/host/pci.c +18 -0
index e9f3701dda3f..772bdc6845fb 100644
@@ -3351,6 +3351,10 @@ static const struct pci_device_id nvme_id_table[] = {
 	{ PCI_DEVICE(0x1cc1, 0x8201),   /* ADATA SX8200PNP 512GB */
 		.driver_data = NVME_QUIRK_NO_DEEPEST_PS |
 				NVME_QUIRK_IGNORE_DEV_SUBNQN, },
+	 { PCI_DEVICE(0x1344, 0x5407), /* Micron Technology Inc NVMe SSD */
+		.driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN },
+	 { PCI_DEVICE(0x1344, 0x6001),   /* Micron Nitro NVMe */
+		 .driver_data = NVME_QUIRK_BOGUS_NID, },
 	{ PCI_DEVICE(0x1c5c, 0x1504),   /* SK Hynix PC400 */
 		.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, },
 	{ PCI_DEVICE(0x15b7, 0x2001),   /*  Sandisk Skyhawk */
@@ -3361,6 +3365,20 @@ static const struct pci_device_id nvme_id_table[] = {
 		.driver_data = NVME_QUIRK_NO_DEEPEST_PS, },
 	{ PCI_DEVICE(0x2646, 0x2263),   /* KINGSTON A2000 NVMe SSD  */
 		.driver_data = NVME_QUIRK_NO_DEEPEST_PS, },
+	{ PCI_DEVICE(0x2646, 0x5018),   /* KINGSTON OM8SFP4xxxxP OS21012 NVMe SSD */
+		.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, },
+	{ PCI_DEVICE(0x2646, 0x5016),   /* KINGSTON OM3PGP4xxxxP OS21011 NVMe SSD */
+		.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, },
+	{ PCI_DEVICE(0x2646, 0x501A),   /* KINGSTON OM8PGP4xxxxP OS21005 NVMe SSD */
+		.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, },
+	{ PCI_DEVICE(0x2646, 0x501B),   /* KINGSTON OM8PGP4xxxxQ OS21005 NVMe SSD */
+		.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, },
+	{ PCI_DEVICE(0x2646, 0x501E),   /* KINGSTON OM3PGP4xxxxQ OS21011 NVMe SSD */
+		.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, },
+	{ PCI_DEVICE(0x1f40, 0x5236),   /* Netac Technologies Co. NV7000 NVMe SSD */
+		.driver_data = NVME_QUIRK_BOGUS_NID, },
+	{ PCI_DEVICE(0x1e4B, 0x1001),   /* MAXIO MAP1001 */
+		.driver_data = NVME_QUIRK_BOGUS_NID, },
 	{ PCI_DEVICE(0x1e4B, 0x1002),   /* MAXIO MAP1002 */
 		.driver_data = NVME_QUIRK_BOGUS_NID, },
 	{ PCI_DEVICE(0x1e4B, 0x1202),   /* MAXIO MAP1202 */
drivers/nvme/target/configfs.c +5 -2
index cea30e4f5053..625038057a76 100644
@@ -1189,6 +1189,7 @@ static ssize_t nvmet_subsys_attr_model_store_locked(struct nvmet_subsys *subsys,
 		const char *page, size_t count)
 {
 	int pos = 0, len;
+	char *val;
 
 	if (subsys->subsys_discovered) {
 		pr_err("Can't set model number. %s is already assigned\n",
@@ -1211,9 +1212,11 @@ static ssize_t nvmet_subsys_attr_model_store_locked(struct nvmet_subsys *subsys,
 			return -EINVAL;
 	}
 
-	subsys->model_number = kmemdup_nul(page, len, GFP_KERNEL);
-	if (!subsys->model_number)
+	val = kmemdup_nul(page, len, GFP_KERNEL);
+	if (!val)
 		return -ENOMEM;
+	kfree(subsys->model_number);
+	subsys->model_number = val;
 	return count;
 }
 
drivers/platform/x86/acer-wmi.c +9 -0
index 8c2a73d5428d..82516796a53b 100644
@@ -564,6 +564,15 @@ static const struct dmi_system_id acer_quirks[] __initconst = {
 		},
 		.driver_data = (void *)ACER_CAP_KBD_DOCK,
 	},
+	{
+		.callback = set_force_caps,
+		.ident = "Acer Aspire Switch V 10 SW5-017",
+		.matches = {
+			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Acer"),
+			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "SW5-017"),
+		},
+		.driver_data = (void *)ACER_CAP_KBD_DOCK,
+	},
 	{
 		.callback = set_force_caps,
 		.ident = "Acer One 10 (S1003)",
drivers/platform/x86/asus-wmi.c +2 -0
index e14fb5fa7324..f030ea97f126 100644
@@ -1511,6 +1511,8 @@ static void asus_wmi_set_xusb2pr(struct asus_wmi *asus)
 	pci_write_config_dword(xhci_pdev, USB_INTEL_XUSB2PR,
 				cpu_to_le32(ports_available));
 
+	pci_dev_put(xhci_pdev);
+
 	pr_info("set USB_INTEL_XUSB2PR old: 0x%04x, new: 0x%04x\n",
 			orig_ports_available, ports_available);
 }
drivers/platform/x86/hp-wmi.c +3 -0
index 5a3a3cd89214..1e390dcee561 100644
@@ -64,6 +64,7 @@ enum hp_wmi_event_ids {
 	HPWMI_PEAKSHIFT_PERIOD		= 0x0F,
 	HPWMI_BATTERY_CHARGE_PERIOD	= 0x10,
 	HPWMI_SANITIZATION_MODE		= 0x17,
+	HPWMI_SMART_EXPERIENCE_APP	= 0x21,
 };
 
 struct bios_args {
@@ -641,6 +642,8 @@ static void hp_wmi_notify(u32 value, void *context)
 		break;
 	case HPWMI_SANITIZATION_MODE:
 		break;
+	case HPWMI_SMART_EXPERIENCE_APP:
+		break;
 	default:
 		pr_info("Unknown event_id - %d - 0x%x\n", event_id, event_data);
 		break;
drivers/platform/x86/ideapad-laptop.c +41 -1

74 lines not on this page · raw message

drivers/platform/x86/intel/hid.c +3 -0
index d7d6782c40c2..4d1c78635114 100644
@@ -27,6 +27,9 @@ static const struct acpi_device_id intel_hid_ids[] = {
 	{"INTC1051", 0},
 	{"INTC1054", 0},
 	{"INTC1070", 0},
+	{"INTC1076", 0},
+	{"INTC1077", 0},
+	{"INTC1078", 0},
 	{"", 0},
 };
 MODULE_DEVICE_TABLE(acpi, intel_hid_ids);
drivers/platform/x86/intel/pmt/class.c +30 -1
index 659b1073033c..586a5877422b 100644
@@ -9,6 +9,7 @@
  */
 
 #include <linux/kernel.h>
+#include <linux/io-64-nonatomic-lo-hi.h>
 #include <linux/module.h>
 #include <linux/mm.h>
 #include <linux/pci.h>
@@ -18,6 +19,7 @@
 #define PMT_XA_START		0
 #define PMT_XA_MAX		INT_MAX
 #define PMT_XA_LIMIT		XA_LIMIT(PMT_XA_START, PMT_XA_MAX)
+#define GUID_SPR_PUNIT		0x9956f43f
 
 /*
  * Early implementations of PMT on client platforms have some
@@ -41,6 +43,29 @@ bool intel_pmt_is_early_client_hw(struct device *dev)
 }
 EXPORT_SYMBOL_GPL(intel_pmt_is_early_client_hw);
 
+static inline int
+pmt_memcpy64_fromio(void *to, const u64 __iomem *from, size_t count)
+{
+	int i, remain;
+	u64 *buf = to;
+
+	if (!IS_ALIGNED((unsigned long)from, 8))
+		return -EFAULT;
+
+	for (i = 0; i < count/8; i++)
+		buf[i] = readq(&from[i]);
+
+	/* Copy any remaining bytes */
+	remain = count % 8;
+	if (remain) {
+		u64 tmp = readq(&from[i]);
+
+		memcpy(&buf[i], &tmp, remain);
+	}
+
+	return count;
+}
+
 /*
  * sysfs
  */
@@ -62,7 +87,11 @@ intel_pmt_read(struct file *filp, struct kobject *kobj,
 	if (count > entry->size - off)
 		count = entry->size - off;
 
-	memcpy_fromio(buf, entry->base + off, count);
+	if (entry->guid == GUID_SPR_PUNIT)
+		/* PUNIT on SPR only supports aligned 64-bit read */
+		count = pmt_memcpy64_fromio(buf, entry->base + off, count);
+	else
+		memcpy_fromio(buf, entry->base + off, count);
 
 	return count;
 }
drivers/platform/x86/touchscreen_dmi.c +25 -0
index c608078538a7..3d0790263fa7 100644

Lines of this file are not shown. View the raw message.

drivers/regulator/core.c +6 -2
index aa4d78b02483..221ae807b379 100644

Lines of this file are not shown. View the raw message.

drivers/regulator/twl6030-regulator.c +2 -0
index 430265c404d6..7c7e3648ea4b 100644

Lines of this file are not shown. View the raw message.

drivers/s390/block/dasd_eckd.c +2 -4
index ff7b7d470e96..57dfc92aa756 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/ibmvscsi/ibmvfc.c +11 -3
index b3531065a438..45ef78f388dc 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/scsi_debug.c +7 -0
index 2b5e249f5d5b..0b16061d8da8 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/scsi_transport_iscsi.c +16 -15
index f46ae5391758..cc39cbef9d7f 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/storvsc_drv.c +34 -35

69 lines not on this page · raw message

drivers/spi/spi-dw-dma.c +3 -0
index a09831c62192..32ac8f9068e8 100644

Lines of this file are not shown. View the raw message.

drivers/spi/spi-stm32.c +1 -1
index 96a73f9e2677..3c6f201b5dd8 100644

Lines of this file are not shown. View the raw message.

drivers/tee/optee/device.c +1 -1
index 128a2d2a50a1..a74d82e230e3 100644

Lines of this file are not shown. View the raw message.

drivers/tty/serial/8250/8250_core.c +1 -0
index c3348d5af922..f3bfaa1a794b 100644

Lines of this file are not shown. View the raw message.

drivers/tty/serial/8250/8250_omap.c +4 -3
index 469fdb91830e..078a7028ee5a 100644

Lines of this file are not shown. View the raw message.

drivers/tty/serial/fsl_lpuart.c +55 -27

82 lines not on this page · raw message

drivers/usb/cdns3/cdnsp-gadget.c +4 -8
index e85bf768c66d..068ccbd144b2 100644

Lines of this file are not shown. View the raw message.

drivers/usb/cdns3/cdnsp-ring.c +12 -5
index 794e413800ae..2f29431f612e 100644

Lines of this file are not shown. View the raw message.

drivers/usb/dwc3/dwc3-exynos.c +1 -10
index 0ecf20eeceee..4be6a873bd07 100644

Lines of this file are not shown. View the raw message.

drivers/usb/dwc3/gadget.c +11 -11
index c38418b4df90..dfa1d9eedde1 100644

Lines of this file are not shown. View the raw message.

drivers/xen/platform-pci.c +5 -2
index 18f0ed8b1f93..6ebd819338ec 100644

Lines of this file are not shown. View the raw message.

drivers/xen/xen-pciback/conf_space_capability.c +6 -3
index 5e53b4817f16..097316a74126 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/ioctl.c +6 -1
index b9dcaae7c8d5..d9ff0697132b 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/sysfs.c +5 -2
index 25a6f587852b..1c40e5151321 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/zoned.c +5 -4
index 96958ca474bd..dbb75c2995e9 100644

Lines of this file are not shown. View the raw message.

fs/ceph/caps.c +13 -37

50 lines not on this page · raw message

fs/ceph/snap.c +21 -10
index b41e6724c591..b512c82f9ccd 100644

Lines of this file are not shown. View the raw message.

fs/cifs/cifs_dfs_ref.c +2 -57

59 lines not on this page · raw message

fs/cifs/cifs_fs_sb.h +0 -5
index f97407520ea1..013a4bd65280 100644

Lines of this file are not shown. View the raw message.

fs/cifs/cifsglob.h +23 -1
index a97ed30843cf..1ab72c3d0bff 100644

Lines of this file are not shown. View the raw message.

fs/cifs/cifsproto.h +4 -1
index d0f85b666662..b2697356b5e7 100644

Lines of this file are not shown. View the raw message.

fs/cifs/connect.c +713 -646

1,359 lines not on this page · raw message

fs/cifs/dfs_cache.c +36 -8

44 lines not on this page · raw message

fs/cifs/misc.c +5 -57

62 lines not on this page · raw message

fs/cifs/smb2ops.c +7 -3
index 53e87466e3b2..5e6526c201fe 100644

Lines of this file are not shown. View the raw message.

fs/cifs/smb2pdu.c +5 -1
index 8aa0372141f5..c0ea2813978b 100644

Lines of this file are not shown. View the raw message.

fs/ext4/extents.c +13 -5
index 725607520e84..9e09caaf9b0b 100644

Lines of this file are not shown. View the raw message.

fs/fs-writeback.c +19 -11
index 2a27f0256fa3..f4a5a0c2858a 100644

Lines of this file are not shown. View the raw message.

fs/fuse/file.c +16 -21
index 307e7dae3ab6..cc95a1c37644 100644

Lines of this file are not shown. View the raw message.

fs/nilfs2/sufile.c +8 -0
index 63722475e17e..51f4cb060231 100644

Lines of this file are not shown. View the raw message.

fs/zonefs/super.c +27 -10
index f8feaed0b54d..85a98590b6ef 100644

Lines of this file are not shown. View the raw message.

include/linux/serial_core.h +1 -0
index 86fa187f6d65..d5b6b1550d59 100644

Lines of this file are not shown. View the raw message.

include/trace/events/rxrpc.h +1 -1
index 1c714336b863..221856f2d295 100644

Lines of this file are not shown. View the raw message.

include/uapi/linux/audit.h +1 -1
index daa481729e9b..27799acd0e5e 100644

Lines of this file are not shown. View the raw message.

init/Kconfig +1 -1
index d19ed66aba3b..a4144393717b 100644

Lines of this file are not shown. View the raw message.

kernel/gcov/clang.c +2 -0
index cbb0bed958ab..7670a811a565 100644

Lines of this file are not shown. View the raw message.

kernel/irq/manage.c +23 -8
index 0c3c26fb054f..9862372e0f01 100644

Lines of this file are not shown. View the raw message.

kernel/irq/msi.c +7 -0
index 7f350ae59c5f..d75586dc584f 100644

Lines of this file are not shown. View the raw message.

lib/vdso/Makefile +1 -1
index c415a685d61b..e814061d6aa0 100644

Lines of this file are not shown. View the raw message.

mm/vmscan.c +4 -6
index 74296c2d1fed..1b63d6155416 100644

Lines of this file are not shown. View the raw message.

net/9p/trans_fd.c +2 -0
index a8c1f742148c..31f2026514f3 100644

Lines of this file are not shown. View the raw message.

net/core/flow_dissector.c +1 -1
index 1c34e2266578..1d230f041386 100644

Lines of this file are not shown. View the raw message.

net/dccp/ipv4.c +2 -0
index 0ea29270d7e5..5bcfa1e9a941 100644

Lines of this file are not shown. View the raw message.

net/dccp/ipv6.c +2 -0
index fa663518fa0e..071620622e1e 100644

Lines of this file are not shown. View the raw message.

net/ipv4/Kconfig +10 -0
index 87983e70f03f..23b06063e1a5 100644

Lines of this file are not shown. View the raw message.

net/ipv4/esp4_offload.c +3 -0
index dad5d29a6a8d..2ddba1e2cf22 100644

Lines of this file are not shown. View the raw message.

net/ipv4/fib_trie.c +3 -1
index 19c6e7b93d3d..52f9f69f57b3 100644

Lines of this file are not shown. View the raw message.

net/ipv4/inet_hashtables.c +5 -5
index ce6a3873f89e..0d378da4b1b1 100644

Lines of this file are not shown. View the raw message.

net/ipv4/ip_input.c +5 -0
index 459d7e630cb0..124bf8fdf924 100644

Lines of this file are not shown. View the raw message.

net/ipv4/netfilter/ipt_CLUSTERIP.c +2 -2
index b518f20c9a24..34737b1d6526 100644

Lines of this file are not shown. View the raw message.

net/ipv4/tcp_ipv4.c +2 -0
index 42d4af632495..0e1fbad17dbe 100644

Lines of this file are not shown. View the raw message.

net/ipv6/esp6_offload.c +3 -0
index 302170882382..4cc19acfc369 100644

Lines of this file are not shown. View the raw message.

net/ipv6/tcp_ipv6.c +2 -0
index 51f4d330e820..93b3e7c247ce 100644

Lines of this file are not shown. View the raw message.

net/ipv6/xfrm6_policy.c +5 -1
index af7a4b8b1e9c..247296e3294b 100644

Lines of this file are not shown. View the raw message.

net/key/af_key.c +23 -11
index 53cca9019158..1d6ae1df3886 100644

Lines of this file are not shown. View the raw message.

net/mac80211/main.c +6 -2
index 5311c3cd3050..9617ff8e2714 100644

Lines of this file are not shown. View the raw message.

net/mac80211/mesh_pathtbl.c +1 -1
index acc1c299f1ae..69d5e1ec6ede 100644

Lines of this file are not shown. View the raw message.

net/netfilter/ipset/ip_set_hash_gen.h +1 -1
index 3adc291d9ce1..7499192af586 100644

Lines of this file are not shown. View the raw message.

net/netfilter/ipset/ip_set_hash_ip.c +3 -5
index dd30c03d5a23..75d556d71652 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nf_conntrack_core.c +1 -1
index 9da5ee6c50cd..43ea8cfd374b 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nf_conntrack_netlink.c +14 -10
index ef0a78aa9ba9..1727a4c4764f 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nf_conntrack_standalone.c +1 -1
index 55aa55b252b2..4d85368203e0 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nf_flow_table_offload.c +4 -0
index c4559fae8acd..66c9a6c2b9cf 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nf_tables_api.c +4 -2
index 227f03db7ee1..3fac57d66dda 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nft_ct.c +3 -3
index 9c7472af9e4a..bd468e955a21 100644

Lines of this file are not shown. View the raw message.

net/netfilter/xt_connmark.c +10 -8
index e5ebc0810675..ad3c033db64e 100644

Lines of this file are not shown. View the raw message.

net/nfc/nci/core.c +1 -1
index 189c9f428a3c..7b6cf9a44aea 100644

Lines of this file are not shown. View the raw message.

net/nfc/nci/data.c +3 -1
index aa5e712adf07..3d36ea5701f0 100644

Lines of this file are not shown. View the raw message.

net/openvswitch/conntrack.c +4 -4
index dc86f03309c1..7106ce231a2d 100644

Lines of this file are not shown. View the raw message.

net/rxrpc/af_rxrpc.c +1 -1
index 2b5f89713e36..ceba28e9dce6 100644

Lines of this file are not shown. View the raw message.

net/rxrpc/ar-internal.h +9 -15
index f2e3fb77a02d..e0123efa2a62 100644

Lines of this file are not shown. View the raw message.

net/rxrpc/call_accept.c +2 -2
index 8b24ffbc72ef..99e10eea3732 100644

Lines of this file are not shown. View the raw message.

net/rxrpc/call_object.c +23 -21

44 lines not on this page · raw message

net/rxrpc/conn_client.c +38 -28

66 lines not on this page · raw message

net/rxrpc/conn_object.c +25 -24

49 lines not on this page · raw message

net/rxrpc/conn_service.c +4 -4
index e1966dfc9152..6e6aa02c6f9e 100644

Lines of this file are not shown. View the raw message.

net/rxrpc/input.c +1 -3
index 3521ebd0ee41..721d847ba92b 100644

Lines of this file are not shown. View the raw message.

net/rxrpc/local_object.c +34 -34

68 lines not on this page · raw message

net/rxrpc/net_ns.c +4 -1
index e4d6d432515b..bb4c25d6df64 100644

Lines of this file are not shown. View the raw message.

net/rxrpc/peer_object.c +21 -19
index 0298fe2ad6d3..26d2ae9baaf2 100644

Lines of this file are not shown. View the raw message.

net/rxrpc/proc.c +72 -3

75 lines not on this page · raw message

net/rxrpc/skbuff.c +0 -1
index 0348d2bf6f7d..580a5acffee7 100644

Lines of this file are not shown. View the raw message.

net/sched/Kconfig +1 -1
index 1e8ab4749c6c..4662a6ce8a7e 100644

Lines of this file are not shown. View the raw message.

net/sched/act_connmark.c +2 -2
index 94e78ac7a748..032ef927d0eb 100644

Lines of this file are not shown. View the raw message.

net/sched/act_ct.c +4 -4
index d85fdefe5730..81a2d6cbfb44 100644

Lines of this file are not shown. View the raw message.

net/sched/act_ctinfo.c +3 -3
index 549374a2d008..2d75fe1223ac 100644

Lines of this file are not shown. View the raw message.

net/sctp/outqueue.c +8 -5
index b3950963fc8f..dc29ac0f8d3f 100644

Lines of this file are not shown. View the raw message.

net/tipc/discover.c +4 -1
index e8630707901e..e8dcdf267c0c 100644

Lines of this file are not shown. View the raw message.

net/tipc/topsrv.c +11 -9
index d92ec92f0b71..e3b427a70398 100644

Lines of this file are not shown. View the raw message.

net/xfrm/xfrm_device.c +14 -1
index c255aac6b816..8b8e957a69c3 100644

Lines of this file are not shown. View the raw message.

net/xfrm/xfrm_replay.c +1 -1
index 9277d81b344c..49dd788859d8 100644

Lines of this file are not shown. View the raw message.

sound/soc/codecs/hdac_hda.h +2 -2
index d0efc5e254ae..da0ed74758b0 100644

Lines of this file are not shown. View the raw message.

sound/soc/codecs/max98373-i2c.c +4 -0
index ddb6436835d7..68497a4521dd 100644

Lines of this file are not shown. View the raw message.

sound/soc/codecs/sgtl5000.c +1 -0
index dc56e6c6b668..3c5a4fe2fad6 100644

Lines of this file are not shown. View the raw message.

sound/soc/fsl/fsl_asrc.c +1 -1
index 44dcbf49456c..08ca410ef551 100644

Lines of this file are not shown. View the raw message.

sound/soc/fsl/fsl_esai.c +1 -1
index bda66b30e063..763f5f0592af 100644

Lines of this file are not shown. View the raw message.

sound/soc/fsl/fsl_sai.c +28 -27

55 lines not on this page · raw message

sound/soc/intel/boards/bytcht_es8316.c +7 -0
index 4d313d0d0f23..950457bcc28f 100644

Lines of this file are not shown. View the raw message.

sound/soc/soc-pcm.c +0 -5
index 48f71bb81a2f..f6dc71e8ea87 100644

Lines of this file are not shown. View the raw message.

sound/soc/stm/stm32_adfsdm.c +11 -0
index e6078f50e508..1e9b4b1df69e 100644

Lines of this file are not shown. View the raw message.

sound/usb/endpoint.c +2 -1
index 3bbc227769d0..092350eb5f4e 100644

Lines of this file are not shown. View the raw message.

sound/usb/quirks.c +2 -0
index 879d8b1f301c..2ae9ad993ff4 100644

Lines of this file are not shown. View the raw message.

sound/usb/usbaudio.h +3 -0
index 39c3c61a7e49..ec06f441e890 100644

Lines of this file are not shown. View the raw message.

tools/iio/iio_generic_buffer.c +2 -2
index 2491c54a5e4f..f8deae4e26a1 100644

Lines of this file are not shown. View the raw message.

tools/testing/selftests/bpf/verifier/ref_tracking.c +36 -0
index 3b6ee009c00b..4a768b130d61 100644

Lines of this file are not shown. View the raw message.

tools/testing/selftests/net/mptcp/mptcp_connect.c +58 -14

72 lines not on this page · raw message

tools/testing/selftests/net/mptcp/simult_flows.sh +15 -22
index 910d8126af8f..7df4900dfaf7 100755

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.