Skip to contentSkip to conversation

Linux 6.1.60

DISCUSSION Greg Kroah-Hartman 1 participant 2 messages Oct 25, 2023 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 6.1.60 kernel.

All users of the 6.1 kernel series must upgrade.

The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary

thanks,

greg k-h

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

 Documentation/devicetree/bindings/mmc/sdhci-msm.yaml                   |    2 
 Makefile                                                               |    2 
 arch/arm/boot/dts/motorola-mapphone-common.dtsi                        |    1 
 arch/s390/pci/pci_dma.c                                                |   15 
 arch/x86/boot/compressed/sev.c                                         |   10 
 arch/x86/include/asm/fpu/api.h                                         |    3 
 arch/x86/include/asm/kvm_host.h                                        |    3 
 arch/x86/include/asm/svm.h                                             |    1 
 arch/x86/kernel/fpu/core.c                                             |    5 
 arch/x86/kernel/fpu/xstate.c                                           |   12 
 arch/x86/kernel/fpu/xstate.h                                           |    3 
 arch/x86/kernel/sev-shared.c                                           |   53 ++-
 arch/x86/kernel/sev.c                                                  |   30 +
 arch/x86/kvm/cpuid.c                                                   |    8 
 arch/x86/kvm/lapic.c                                                   |    8 
 arch/x86/kvm/mmu/mmu.c                                                 |    9 
 arch/x86/kvm/mmu/mmu_internal.h                                        |   15 
 arch/x86/kvm/mmu/tdp_mmu.c                                             |  135 +++----
 arch/x86/kvm/mmu/tdp_mmu.h                                             |    4 
 arch/x86/kvm/svm/avic.c                                                |    5 
 arch/x86/kvm/svm/nested.c                                              |    3 
 arch/x86/kvm/x86.c                                                     |   42 +-
 drivers/acpi/irq.c                                                     |    7 
 drivers/ata/libata-core.c                                              |    2 
 drivers/ata/libata-eh.c                                                |    2 
 drivers/base/regmap/regmap.c                                           |    2 
 drivers/bluetooth/btusb.c                                              |    1 
 drivers/bluetooth/hci_vhci.c                                           |    3 
 drivers/gpio/gpio-timberdale.c                                         |    5 
 drivers/gpio/gpio-vf610.c                                              |   46 +-
 drivers/gpu/drm/amd/pm/amdgpu_pm.c                                     |    1 
 drivers/gpu/drm/bridge/ti-sn65dsi86.c                                  |   14 
 drivers/gpu/drm/drm_panel_orientation_quirks.c                         |   16 
 drivers/gpu/drm/i915/gem/i915_gem_mman.c                               |    1 
 drivers/gpu/drm/mediatek/mtk_drm_gem.c                                 |    6 
 drivers/hid/.kunitconfig                                               |    1 
 drivers/hid/Kconfig                                                    |    1 
 drivers/hid/hid-holtek-kbd.c                                           |    4 
 drivers/hid/hid-input-test.c                                           |   80 ++++
 drivers/hid/hid-input.c                                                |   36 +-
 drivers/hid/hid-logitech-hidpp.c                                       |    2 
 drivers/hid/hid-multitouch.c                                           |    4 
 drivers/hid/hid-nintendo.c                                             |  175 +++++-----
 drivers/i2c/i2c-mux.c                                                  |    2 
 drivers/iio/adc/ad7192.c                                               |   42 +-
 drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c              |    6 
 drivers/iio/industrialio-core.c                                        |   38 ++
 drivers/mmc/core/mmc.c                                                 |    2 
 drivers/mmc/core/sdio.c                                                |    8 
 drivers/mmc/host/mtk-sd.c                                              |    6 
 drivers/mmc/host/sdhci-pci-gli.c                                       |  104 +++--
 drivers/mtd/maps/physmap-core.c                                        |   11 
 drivers/mtd/nand/raw/arasan-nand-controller.c                          |   16 
 drivers/mtd/nand/raw/marvell_nand.c                                    |   23 +
 drivers/mtd/nand/raw/pl35x-nand-controller.c                           |    9 
 drivers/mtd/nand/raw/qcom_nandc.c                                      |    2 
 drivers/mtd/nand/spi/micron.c                                          |    2 
 drivers/net/bonding/bond_main.c                                        |    2 
 drivers/net/dsa/bcm_sf2.c                                              |   24 -
 drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_io.c            |   36 +-
 drivers/net/ethernet/intel/i40e/i40e_common.c                          |    4 
 drivers/net/ethernet/intel/ice/ice_lib.c                               |    3 
 drivers/net/ethernet/intel/ice/ice_main.c                              |   18 -
 drivers/net/ethernet/intel/igc/igc.h                                   |    7 
 drivers/net/ethernet/intel/igc/igc_base.c                              |   29 +
 drivers/net/ethernet/intel/igc/igc_base.h                              |    2 
 drivers/net/ethernet/intel/igc/igc_defines.h                           |    1 
 drivers/net/ethernet/intel/igc/igc_ethtool.c                           |    1 
 drivers/net/ethernet/intel/igc/igc_main.c                              |   20 -
 drivers/net/ethernet/intel/igc/igc_ptp.c                               |   57 +--
 drivers/net/ethernet/intel/igc/igc_tsn.c                               |   69 ++-
 drivers/net/ethernet/marvell/octeon_ep/octep_main.c                    |   13 
 drivers/net/ethernet/marvell/sky2.h                                    |    2 
 drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c               |    2 
 drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c              |    3 
 drivers/net/ethernet/mellanox/mlx5/core/eswitch.c                      |   17 
 drivers/net/ethernet/qlogic/qed/qed_ll2.c                              |    7 
 drivers/net/phy/bcm7xxx.c                                              |    3 
 drivers/net/tun.c                                                      |    7 
 drivers/net/usb/smsc95xx.c                                             |    2 
 drivers/net/wireless/intel/iwlwifi/mvm/tx.c                            |    3 
 drivers/net/wireless/marvell/mwifiex/11n_rxreorder.c                   |   16 
 drivers/nvme/host/ioctl.c                                              |   10 
 drivers/nvme/host/pci.c                                                |    3 
 drivers/nvme/host/rdma.c                                               |    3 
 drivers/nvme/target/fabrics-cmd-auth.c                                 |    9 
 drivers/nvme/target/tcp.c                                              |    7 
 drivers/phy/motorola/phy-mapphone-mdm6600.c                            |   38 +-
 drivers/pinctrl/core.c                                                 |   16 
 drivers/platform/surface/surface_platform_profile.c                    |    3 
 drivers/platform/x86/asus-nb-wmi.c                                     |    3 
 drivers/platform/x86/asus-wmi.c                                        |   15 
 drivers/platform/x86/asus-wmi.h                                        |    2 
 drivers/platform/x86/intel/uncore-frequency/uncore-frequency-common.c  |    8 
 drivers/platform/x86/touchscreen_dmi.c                                 |   23 +
 drivers/power/reset/Kconfig                                            |    2 
 drivers/regulator/core.c                                               |    6 
 drivers/s390/cio/css.c                                                 |    6 
 drivers/tty/serial/8250/8250_omap.c                                    |  110 ++----
 drivers/tty/serial/serial_core.c                                       |  115 +++---
 drivers/usb/misc/onboard_usb_hub.c                                     |    5 
 drivers/usb/misc/onboard_usb_hub.h                                     |   12 
 drivers/usb/serial/option.c                                            |    7 
 fs/btrfs/ctree.c                                                       |   52 ++
 fs/btrfs/delayed-ref.c                                                 |    9 
 fs/btrfs/delayed-ref.h                                                 |    1 
 fs/btrfs/extent-tree.c                                                 |    6 
 fs/btrfs/ioctl.c                                                       |    4 
 fs/btrfs/transaction.c                                                 |    6 
 fs/btrfs/tree-log.c                                                    |    2 
 fs/btrfs/volumes.c                                                     |    2 
 fs/fs-writeback.c                                                      |   11 
 fs/namei.c                                                             |    9 
 fs/nfs/flexfilelayout/flexfilelayout.c                                 |   17 
 fs/nfs/nfs42proc.c                                                     |    3 
 fs/nfs/nfs4proc.c                                                      |    2 
 fs/nfs/pnfs.c                                                          |   33 +
 fs/ntfs3/fsntfs.c                                                      |    6 
 fs/ntfs3/index.c                                                       |    3 
 fs/ntfs3/xattr.c                                                       |    7 
 fs/overlayfs/copy_up.c                                                 |    2 
 include/linux/fprobe.h                                                 |   10 
 include/linux/fs.h                                                     |    2 
 include/linux/hid.h                                                    |    2 
 include/linux/iio/iio.h                                                |    2 
 include/linux/kallsyms.h                                               |    8 
 include/linux/perf_event.h                                             |    1 
 include/net/bluetooth/hci_core.h                                       |    2 
 include/net/bluetooth/hci_mon.h                                        |    2 
 include/net/ip_fib.h                                                   |    1 
 include/net/netns/xfrm.h                                               |    1 
 include/net/sock.h                                                     |   10 
 include/net/tcp.h                                                      |    3 
 include/trace/events/neigh.h                                           |    4 
 kernel/auditsc.c                                                       |    8 
 kernel/events/core.c                                                   |   39 +-
 kernel/kallsyms.c                                                      |   36 +-
 kernel/kallsyms_internal.h                                             |    2 
 kernel/sched/cpufreq_schedutil.c                                       |    3 
 kernel/trace/bpf_trace.c                                               |    2 
 kernel/trace/fprobe.c                                                  |   32 +
 kernel/trace/trace_events.c                                            |    1 
 kernel/trace/trace_kprobe.c                                            |   63 +++
 kernel/trace/trace_probe.h                                             |    1 
 lib/Kconfig.debug                                                      |    5 
 lib/test_fprobe.c                                                      |    6 
 net/bluetooth/hci_conn.c                                               |   72 ++--
 net/bluetooth/hci_core.c                                               |    8 
 net/bluetooth/hci_event.c                                              |   33 +
 net/bluetooth/hci_sock.c                                               |    3 
 net/core/dev.c                                                         |   65 ++-
 net/core/dev.h                                                         |    3 
 net/core/pktgen.c                                                      |   14 
 net/core/rtnetlink.c                                                   |    4 
 net/core/stream.c                                                      |   12 
 net/ipv4/af_inet.c                                                     |   10 
 net/ipv4/esp4.c                                                        |    4 
 net/ipv4/fib_semantics.c                                               |   15 
 net/ipv4/fib_trie.c                                                    |    4 
 net/ipv4/inet_connection_sock.c                                        |    1 
 net/ipv4/inet_hashtables.c                                             |   24 -
 net/ipv4/tcp.c                                                         |   16 
 net/ipv4/tcp_bpf.c                                                     |   12 
 net/ipv4/tcp_ipv4.c                                                    |    1 
 net/ipv4/tcp_output.c                                                  |   25 +
 net/ipv4/tcp_recovery.c                                                |    2 
 net/ipv6/esp6.c                                                        |    4 
 net/ipv6/xfrm6_policy.c                                                |    4 
 net/mac80211/cfg.c                                                     |    3 
 net/mac80211/ibss.c                                                    |    2 
 net/mac80211/ieee80211_i.h                                             |    1 
 net/mac80211/mesh_plink.c                                              |    2 
 net/mac80211/mlme.c                                                    |   27 +
 net/mac80211/tx.c                                                      |    3 
 net/mac80211/vht.c                                                     |   16 
 net/mptcp/protocol.c                                                   |   43 +-
 net/netfilter/nft_payload.c                                            |    2 
 net/netfilter/nft_set_rbtree.c                                         |    2 
 net/nfc/nci/spi.c                                                      |    2 
 net/rfkill/rfkill-gpio.c                                               |    4 
 net/sched/sch_hfsc.c                                                   |   18 -
 net/smc/af_smc.c                                                       |    5 
 net/smc/smc_ib.c                                                       |    7 
 net/smc/smc_ib.h                                                       |    2 
 net/tls/tls_main.c                                                     |   10 
 net/tls/tls_sw.c                                                       |   57 ++-
 net/wireless/core.c                                                    |    2 
 net/wireless/nl80211.c                                                 |    2 
 net/wireless/scan.c                                                    |    4 
 net/xfrm/xfrm_interface_core.c                                         |   22 -
 net/xfrm/xfrm_policy.c                                                 |   21 -
 samples/fprobe/fprobe_example.c                                        |    6 
 scripts/kallsyms.c                                                     |    5 
 sound/pci/hda/patch_realtek.c                                          |   27 +
 sound/soc/codecs/wcd938x-sdw.c                                         |   27 +
 sound/soc/codecs/wcd938x.c                                             |   50 ++
 sound/soc/pxa/pxa-ssp.c                                                |    2 
 tools/testing/selftests/ftrace/test.d/kprobe/kprobe_non_uniq_symbol.tc |   13 
 tools/testing/selftests/net/mptcp/mptcp_join.sh                        |   21 +
 tools/testing/selftests/net/openvswitch/openvswitch.sh                 |    4 
 tools/testing/selftests/net/openvswitch/ovs-dpctl.py                   |   10 
 tools/testing/selftests/netfilter/nft_audit.sh                         |    6 
 tools/testing/selftests/vm/charge_reserved_hugetlb.sh                  |    4 
 tools/testing/selftests/vm/hugetlb_reparenting_test.sh                 |    4 
 204 files changed, 2057 insertions(+), 936 deletions(-)

Aaron Conole (2):
selftests: openvswitch: Catch cases where the tests are killed
selftests: openvswitch: Add version check for pyroute2

Albert Huang (1):
net/smc: fix smc clc failed issue when netdevice not in init_net

Alexander Stein (1):
gpio: vf610: make irq_chip immutable

Alisa-Dariana Roman (1):
iio: adc: ad7192: Correct reference voltage

Anand Moon (2):
usb: misc: onboard_usb_hub: add Genesys Logic GL852G hub support
usb: misc: onboard_usb_hub: add Genesys Logic GL3523 hub support

Andy Shevchenko (1):
Revert "pinctrl: avoid unsafe code pattern in find_pinctrl()"

Arkadiusz Bokowy (1):
Bluetooth: vhci: Fix race when opening vhci device

Armin Wolf (1):
platform/surface: platform_profile: Propagate error if profile registration fails

Arnd Bergmann (2):
Bluetooth: avoid memcmp() out of bounds warning
serial: 8250: omap: convert to modern PM ops

Artem Borisov (1):
ALSA: hda/realtek: Add quirk for ASUS ROG GU603ZV

Avri Altman (1):
mmc: core: Capture correct oemid-bits for eMMC cards

Ben Greear (1):
wifi: iwlwifi: Ensure ack flag is properly cleared.

Benjamin Berg (1):
wifi: cfg80211: avoid leaking stack data into trace

Benoît Monin (1):
USB: serial: option: add entry for Sierra EM9191 with new firmware

Bibek Kumar Patro (1):
mtd: rawnand: qcom: Unmap the right resource upon probe failure

Bjorn Helgaas (1):
ice: Remove redundant pci_enable_pcie_error_reporting()

Borislav Petkov (AMD) (1):
x86/sev: Disable MMIO emulation from user mode

Chen-Yu Tsai (1):
drm/mediatek: Correctly free sg_table in gem prime vmap

Chengfeng Ye (1):

      gpio: timberdale: Fix potential deadlock on &tgpio->lock

Christoph Paasch (1):
netlink: Correct offload_xstats size

Chunhai Guo (1):
fs-writeback: do not requeue a clean inode having skipped pages

Clément Léger (1):
tracing: relax trace_event_eval_update() execution with cond_resched()

Dai Ngo (1):
nfs42: client needs to strip file mode's suid/sgid bit after ALLOCATE op

Damien Le Moal (2):
ata: libata-core: Fix compilation warning in ata_dev_config_ncq()
ata: libata-eh: Fix compilation warning in ata_eh_link_report()

Dan Carpenter (2):
net: usb: smsc95xx: Fix an error code in smsc95xx_reset()
ASoC: pxa: fix a memory leak in probe()

Dan Clash (1):
audit,io_uring: io_uring openat triggers audit reference count underflow

David Thompson (1):
pwr-mlxbf: extend Kconfig to include gpio-mlxbf3 dependency

Dinghao Liu (1):
s390/cio: fix a memleak in css_alloc_subchannel

Dong Chenchen (1):
net: xfrm: skip policies marked as dead while reinserting policies

Dust Li (1):
net/smc: return the right falback reason when prefix checks fail

Edward AD (1):
Bluetooth: hci_sock: fix slab oob read in create_monitor_event

Eric Dumazet (6):
xfrm: fix a data-race in xfrm_lookup_with_ifid()
xfrm: fix a data-race in xfrm_gen_index()
xfrm: interface: use DEV_STATS_INC()
tcp: tsq: relax tcp_small_queue_check() when rtx queue contains a single skb
tun: prevent negative ifindex
ipv4: fib: annotate races around nh->nh_saddr_genid and nh->nh_saddr

Fabio Porcedda (1):

      USB: serial: option: add Telit LE910C4-WWX 0x1035 composition

Filipe Manana (5):
btrfs: prevent transaction block reserve underflow when starting transaction
btrfs: return -EUCLEAN for delayed tree ref with a ref count not equals to 1
btrfs: error out when COWing block using a stale transaction
btrfs: error when COWing block from a root that is being deleted
btrfs: error out when reallocating block for defrag using a stale transaction

Florian Fainelli (1):
net: phy: bcm7xxx: Add missing 16nm EPHY statistics

Florian Westphal (1):
netfilter: nft_payload: fix wrong mac header matching

Francis Laniel (2):
selftests/ftrace: Add new test case which checks non unique symbol tracing/kprobes: Return EADDRNOTAVAIL when func matches several symbols

Gavrilov Ilia (1):
net: pktgen: Fix interface flags printing

Geert Uytterhoeven (3):
neighbor: tracing: Move pin6 inside CONFIG_IPV6=y section
mtd: physmap-core: Restore map_rom fallback
serial: 8250: omap: Move uart_write() inside PM section

Geliang Tang (1):
mptcp: avoid sending RST when closing the initial subflow

Greg Kroah-Hartman (1):

      Linux 6.1.60

Gustavo A. R. Silva (1):
wifi: mwifiex: Sanity check tlv_len and tlv_bitmap_len

Haibo Chen (3):
mmc: core: sdio: hold retuning if sdio in 1-bit mode
gpio: vf610: set value before the direction to avoid a glitch
gpio: vf610: mask the gpio irq in system suspend and support wakeup

Hangbin Liu (1):
ipv4/fib: send notify when delete source address routes

Hannes Reinecke (1):
net/tls: split tls_rx_reader_lock

Hans de Goede (4):
HID: logitech-hidpp: Add Bluetooth ID for the Logitech M720 Triathlon mouse platform/x86: asus-wmi: Change ASUS_WMI_BRN_DOWN code from 0x20 to 0x2e platform/x86: asus-wmi: Only map brightness codes when using asus-wmi backlight control platform/x86: asus-wmi: Map 0x2a code, Ignore 0x2b and 0x2c events

Heiner Kallweit (1):
i2c: mux: Avoid potential false error message in i2c_mux_add_adapter

Hyeonggon Yoo (1):
lib/Kconfig.debug: do not enable DEBUG_PREEMPT by default

Icenowy Zheng (1):
usb: misc: onboard_usb_hub: add Genesys Logic GL850G hub support

Ilan Peer (1):
wifi: cfg80211: Fix 6GHz scan configuration

Ilpo Järvinen (2):
serial: Move uart_change_speed() earlier
serial: Rename uart_change_speed() to uart_change_line_settings()

Jakub Kicinski (4):
net: avoid UAF on deleted altname
net: fix ifname in netlink ntf during netns move
net: check for altname conflicts when changing netdev's netns
net: move altnames together with the netdevice

Javier Carrasco (1):
usb: misc: onboard_hub: add support for Microchip USB2412 USB 2.0 hub

Jeff Layton (1):
overlayfs: set ctime when setting mtime and atime

Jesse Brandeburg (2):
ice: fix over-shifted variable
ice: reset first in crash dump kernels

Jianbo Liu (1):
net/mlx5e: Don't offload internal port if filter device is out device

Jim Mattson (1):
KVM: x86: Mask LVTPC when handling a PMI

Jinjie Ruan (1):
net: dsa: bcm_sf2: Fix possible memory leak in bcm_sf2_mdio_register()

Jiri Wiesner (1):
bonding: Return pointer to data after pull on skb

Joerg Roedel (2):
x86/sev: Check IOBM for IOIO exceptions from user-space x86/sev: Check for user-space IOIO pointing to kernel space

Johan Hovold (6):
regmap: fix NULL deref on lookup
ASoC: codecs: wcd938x-sdw: fix use after free on driver unbind
ASoC: codecs: wcd938x-sdw: fix runtime PM imbalance on probe errors
ASoC: codecs: wcd938x: drop bogus bind error handling
ASoC: codecs: wcd938x: fix unbind tear down order
ASoC: codecs: wcd938x: fix resource leaks on bind errors

Johannes Berg (2):
wifi: cfg80211: use system_unbound_wq for wiphy work
wifi: mac80211: work around Cisco AP 9115 VHT MPDU length

Josef Bacik (2):
btrfs: initialize start_slot in btrfs_log_prealloc_extents
btrfs: fix some -Wmaybe-uninitialized warnings in ioctl.c

Josua Mayer (1):
net: rfkill: gpio: prevent value glitch during probe

José Expósito (1):
HID: input: map battery system charging

Juntong Deng (1):
selftests/mm: fix awk usage in charge_reserved_hugetlb.sh and hugetlb_reparenting_test.sh that may cause error

Kai Uwe Broulik (1):
drm: panel-orientation-quirks: Add quirk for One Mix 2S

Kailang Yang (1):
ALSA: hda/realtek - Fixed ASUS platform headset Mic issue

Kees Cook (2):
sky2: Make sure there is at least one frag_addr available
Bluetooth: hci_sock: Correctly bounds check and pad HCI_MON_NEW_INDEX name

Keith Busch (2):
nvme: sanitize metadata bounce buffer for reads
nvme-pci: add BOGUS_NID for Intel 0a54 device

Kenneth Feng (1):

      drm/amd/pm: add unique_id for gc 11.0.3

Konstantin Komarov (1):
fs/ntfs3: fix deadlock in mark_as_free_ex

Krzysztof Kozlowski (2):
nfc: nci: fix possible NULL pointer dereference in send_acknowledge()
dt-bindings: mmc: sdhci-msm: correct minimum number of clocks

Kuniyuki Iwashima (1):
tcp: Fix listen() warning with v4-mapped-v6 address.

Lee, Chun-Yi (2):
Bluetooth: hci_event: Ignore NULL link key
Bluetooth: Reject connection with the device which has same BD_ADDR

Luiz Augusto von Dentz (3):
Bluetooth: hci_event: Fix coding style
Bluetooth: hci_core: Fix build warnings
Bluetooth: hci_event: Fix using memcmp when comparing keys

Luka Guzenko (1):
ALSA: hda/relatek: Enable Mute LED on HP Laptop 15s-fq5xxx

Lukas Wunner (1):
serial: Reduce spinlocked portion of uart_rs485_config()

Ma Ke (3):
net: ipv4: fix return value check in esp_remove_trailer
net: ipv6: fix return value check in esp_remove_trailer
HID: holtek: fix slab-out-of-bounds Write in holtek_kbd_input_event

Maher Sanalla (1):
net/mlx5: Handle fw tracer change ownership event based on MTRC

Manish Chopra (1):
qed: fix LL2 RX buffer allocation

Martin Kurbanov (1):
mtd: spinand: micron: correct bitmask for ecc status

Martino Fontana (1):
HID: nintendo: reinitialize USB Pro Controller after resuming from suspend

Masami Hiramatsu (Google) (3):
fprobe: Pass entry_data to handlers
fprobe: Add nr_maxactive to specify rethook_node pool size
fprobe: Fix to ensure the number of active retprobes is not zero

Matthieu Baerts (2):
selftests: mptcp: join: correctly check for no RST
selftests: mptcp: join: no RST when rm subflow/addr

Matti Vaittinen (1):
iio: adc: ad7192: Simplify using devm_regulator_get_enable()

Maurizio Lombardi (2):
nvmet-auth: complete a request only after freeing the dhchap pointers
nvme-rdma: do not try to stop unallocated queues

Maxim Levitsky (2):
x86: KVM: SVM: add support for Invalid IPI Vector interception
x86: KVM: SVM: refresh AVIC inhibition in svm_leave_nested()

Michal Schmidt (1):
i40e: prevent crash on probe if hw registers have invalid values

Michał Mirosław (1):
regulator/core: Revert "fix kobject release warning and memory leak in regulator_register()"

Miquel Raynal (3):
mtd: rawnand: pl353: Ensure program page operations are successful
mtd: rawnand: marvell: Ensure program page operations are successful
mtd: rawnand: arasan: Ensure program page operations are successful

Muhammad Husaini Zulkifli (4):
igc: remove I226 Qbv BaseTime restriction
igc: Remove reset adapter task for i226 during disable tsn config
igc: Add qbv_config_change_errors counter
igc: Add condition for qbv_config_change_errors counter

Neal Cardwell (1):
tcp: fix excessive TLP and RACK timeouts from HZ rounding

Niklas Schnelle (1):
s390/pci: fix iommu bitmap allocation

Nuno Sá (1):
iio: core: introduce iio_device_{claim|release}_buffer_mode() APIs

Olga Kornievskaia (1):
NFSv4.1: fixup use EXCHGID4_FLAG_USE_PNFS_DS for DS server

Pablo Neira Ayuso (3):
netfilter: nft_set_rbtree: .deactivate fails if element has expired
netfilter: nf_tables: do not remove elements if set backend implements .abort
netfilter: nf_tables: revert do not remove elements if set backend implements .abort

Pablo Sun (1):
mmc: mtk-sd: Use readl_poll_timeout_atomic in msdc_reset_hw

Paolo Abeni (4):
tcp: check mptcp-level constraints for backlog coalescing
mptcp: more conservative check for zero probes
tcp: allow again tcp_disconnect() when threads are waiting
tcp_bpf: properly release resources on error paths

Pedro Tammela (1):
net/sched: sch_hfsc: upgrade 'rt' to 'sc' when it becomes a inner curve

Peter Zijlstra (1):
perf: Disallow mis-matched inherited group reads

Phil Sutter (1):
selftests: netfilter: Run nft_audit.sh in its own netns

Puliang Lu (1):
USB: serial: option: add Fibocom to DELL custom modem FM101R-GL

Rahul Rameshbabu (1):

      HID: multitouch: Add required quirk for Synaptics 0xcd7e device

Renan Guilherme Lebre Ramos (1):
platform/x86: touchscreen_dmi: Add info for the Positivo C4128B

Rocky Liao (1):
Bluetooth: btusb: add shutdown function for QCA6174

Sagi Grimberg (1):
nvmet-tcp: Fix a possible UAF in queue intialization setup

Sean Christopherson (3):
x86/fpu: Allow caller to constrain xfeatures when copying to uabi buffer
KVM: x86: Constrain guest-supported xfeatures only at KVM_GET_XSAVE{2}
KVM: x86/mmu: Stop zapping invalidated TDP MMU roots asynchronously

Shay Drory (1):
net/mlx5: E-switch, register event handler before arming the event

Shinas Rasheed (1):
octeon_ep: update BQL sent bytes before ringing doorbell

Srinivas Pandruvada (1):
platform/x86: intel-uncore-freq: Conditionally create attribute for read frequency

Stephen Boyd (1):
drm/bridge: ti-sn65dsi86: Associate DSI device lifetime with auxiliary device

Sunil V L (1):
ACPI: irq: Fix incorrect return value in acpi_register_gsi()

Sven van Ashbrook (1):
mmc: sdhci-pci-gli: fix LPM negotiation so x86/S0ix SoCs can suspend

Tan Tee Min (1):
igc: enable Qbv configuration for 2nd GCL

Tony Lindgren (6):
serial: 8250: omap: Fix imprecise external abort for omap_8250_pm()
serial: 8250_omap: Fix errors with no_console_suspend
ARM: dts: ti: omap: Fix noisy serial with overrun-throttle-ms for mapphone
phy: mapphone-mdm6600: Fix runtime disable on probe
phy: mapphone-mdm6600: Fix runtime PM for remove
phy: mapphone-mdm6600: Fix pinctrl_pm handling for sleep pins

Trond Myklebust (2):
pNFS: Fix a hang in nfs4_evict_inode()
pNFS/flexfiles: Check the layout validity in ff_layout_mirror_prepare_stats

Tzung-Bi Shih (1):
iio: cros_ec: fix an use-after-free in cros_ec_sensors_push_data()

Ville Syrjälä (1):
drm/i915: Retry gtt fault when out of fence registers

Vinicius Costa Gomes (1):
igc: Fix race condition in PTP tx code

Wen Gong (1):
wifi: mac80211: allow transmitting EAPOL frames with tainted key

Xuewen Yan (1):
cpufreq: schedutil: Update next_freq when cpufreq_limits change

Ying Hsu (1):
Bluetooth: Avoid redundant authentication

Zeng Heng (1):
fs/ntfs3: fix panic about slab-out-of-bounds caused by ntfs_list_ea()

Zhang Changzhong (1):
xfrm6: fix inet6_dev refcount underflow problem

Zhen Lei (2):
kallsyms: Reduce the memory occupied by kallsyms_seqs_of_names[]
kallsyms: Add helper kallsyms_on_each_match_symbol()

Ziqi Zhao (1):
fs/ntfs3: Fix possible null-pointer dereference in hdr_find_e()

Ziyang Xuan (1):
Bluetooth: Fix a refcnt underflow problem for hci_conn

Zygo Blaxell (1):
btrfs: fix stripe length calculation for non-zoned data chunk allocation

author maintainer
#1 lore raw
Documentation/devicetree/bindings/mmc/sdhci-msm.yaml +1 -1
index a96f143479c7..eb0e9cca7057 100644
@@ -59,7 +59,7 @@ properties:
     maxItems: 4
 
   clocks:
-    minItems: 3
+    minItems: 2
     items:
       - description: Main peripheral bus clock, PCLK/HCLK - AHB Bus clock
       - description: SDC MMC clock, MCLK
Makefile +1 -1
index 4ad29c852e5f..d47edcd8888e 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 6
 PATCHLEVEL = 1
-SUBLEVEL = 59
+SUBLEVEL = 60
 EXTRAVERSION =
 NAME = Curry Ramen
 
arch/arm/boot/dts/motorola-mapphone-common.dtsi +1 -0
index d69f0f4b4990..d2d516d113ba 100644
@@ -640,6 +640,7 @@ &uart1 {
 &uart3 {
 	interrupts-extended = <&wakeupgen GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH
 			       &omap4_pmx_core 0x17c>;
+	overrun-throttle-ms = <500>;
 };
 
 &uart4 {
arch/s390/pci/pci_dma.c +13 -2
index 227cf0a62800..486aa03abbe1 100644
@@ -544,6 +544,17 @@ static void s390_dma_unmap_sg(struct device *dev, struct scatterlist *sg,
 		s->dma_length = 0;
 	}
 }
+
+static unsigned long *bitmap_vzalloc(size_t bits, gfp_t flags)
+{
+	size_t n = BITS_TO_LONGS(bits);
+	size_t bytes;
+
+	if (unlikely(check_mul_overflow(n, sizeof(unsigned long), &bytes)))
+		return NULL;
+
+	return vzalloc(bytes);
+}
 	
 int zpci_dma_init_device(struct zpci_dev *zdev)
 {
@@ -584,13 +595,13 @@ int zpci_dma_init_device(struct zpci_dev *zdev)
 				zdev->end_dma - zdev->start_dma + 1);
 	zdev->end_dma = zdev->start_dma + zdev->iommu_size - 1;
 	zdev->iommu_pages = zdev->iommu_size >> PAGE_SHIFT;
-	zdev->iommu_bitmap = vzalloc(zdev->iommu_pages / 8);
+	zdev->iommu_bitmap = bitmap_vzalloc(zdev->iommu_pages, GFP_KERNEL);
 	if (!zdev->iommu_bitmap) {
 		rc = -ENOMEM;
 		goto free_dma_table;
 	}
 	if (!s390_iommu_strict) {
-		zdev->lazy_bitmap = vzalloc(zdev->iommu_pages / 8);
+		zdev->lazy_bitmap = bitmap_vzalloc(zdev->iommu_pages, GFP_KERNEL);
 		if (!zdev->lazy_bitmap) {
 			rc = -ENOMEM;
 			goto free_bitmap;
arch/x86/boot/compressed/sev.c +10 -0
index e65f0968e0d9..9c91cc40f456 100644
@@ -103,6 +103,16 @@ static enum es_result vc_read_mem(struct es_em_ctxt *ctxt,
 	return ES_OK;
 }
 
+static enum es_result vc_ioio_check(struct es_em_ctxt *ctxt, u16 port, size_t size)
+{
+	return ES_OK;
+}
+
+static bool fault_in_kernel_space(unsigned long address)
+{
+	return false;
+}
+
 #undef __init
 #undef __pa
 #define __init
arch/x86/include/asm/fpu/api.h +2 -1
index b475d9a582b8..e829fa4c6788 100644
@@ -148,7 +148,8 @@ static inline void fpu_update_guest_xfd(struct fpu_guest *guest_fpu, u64 xfd) {
 static inline void fpu_sync_guest_vmexit_xfd_state(void) { }
 #endif
 
-extern void fpu_copy_guest_fpstate_to_uabi(struct fpu_guest *gfpu, void *buf, unsigned int size, u32 pkru);
+extern void fpu_copy_guest_fpstate_to_uabi(struct fpu_guest *gfpu, void *buf,
+					   unsigned int size, u64 xfeatures, u32 pkru);
 extern int fpu_copy_uabi_to_guest_fpstate(struct fpu_guest *gfpu, const void *buf, u64 xcr0, u32 *vpkru);
 
 static inline void fpstate_set_confidential(struct fpu_guest *gfpu)
arch/x86/include/asm/kvm_host.h +1 -2
index 08a84f801bfe..c1dcaa3d2d6e 100644
@@ -1324,7 +1324,6 @@ struct kvm_arch {
 	 * the thread holds the MMU lock in write mode.
 	 */
 	spinlock_t tdp_mmu_pages_lock;
-	struct workqueue_struct *tdp_mmu_zap_wq;
 #endif /* CONFIG_X86_64 */
 
 	/*
@@ -1727,7 +1726,7 @@ void kvm_mmu_vendor_module_exit(void);
 
 void kvm_mmu_destroy(struct kvm_vcpu *vcpu);
 int kvm_mmu_create(struct kvm_vcpu *vcpu);
-int kvm_mmu_init_vm(struct kvm *kvm);
+void kvm_mmu_init_vm(struct kvm *kvm);
 void kvm_mmu_uninit_vm(struct kvm *kvm);
 
 void kvm_mmu_after_set_cpuid(struct kvm_vcpu *vcpu);
arch/x86/include/asm/svm.h +1 -0
index 02aac78cb21d..184fd776cd39 100644
@@ -259,6 +259,7 @@ enum avic_ipi_failure_cause {
 	AVIC_IPI_FAILURE_TARGET_NOT_RUNNING,
 	AVIC_IPI_FAILURE_INVALID_TARGET,
 	AVIC_IPI_FAILURE_INVALID_BACKING_PAGE,
+	AVIC_IPI_FAILURE_INVALID_IPI_VECTOR,
 };
 
 #define AVIC_PHYSICAL_MAX_INDEX_MASK	GENMASK_ULL(8, 0)
arch/x86/kernel/fpu/core.c +3 -2
index a083f9ac9e4f..1d190761d00f 100644
@@ -369,14 +369,15 @@ int fpu_swap_kvm_fpstate(struct fpu_guest *guest_fpu, bool enter_guest)
 EXPORT_SYMBOL_GPL(fpu_swap_kvm_fpstate);
 
 void fpu_copy_guest_fpstate_to_uabi(struct fpu_guest *gfpu, void *buf,
-				    unsigned int size, u32 pkru)
+				    unsigned int size, u64 xfeatures, u32 pkru)
 {
 	struct fpstate *kstate = gfpu->fpstate;
 	union fpregs_state *ustate = buf;
 	struct membuf mb = { .p = buf, .left = size };
 
 	if (cpu_feature_enabled(X86_FEATURE_XSAVE)) {
-		__copy_xstate_to_uabi_buf(mb, kstate, pkru, XSTATE_COPY_XSAVE);
+		__copy_xstate_to_uabi_buf(mb, kstate, xfeatures, pkru,
+					  XSTATE_COPY_XSAVE);
 	} else {
 		memcpy(&ustate->fxsave, &kstate->regs.fxsave,
 		       sizeof(ustate->fxsave));
arch/x86/kernel/fpu/xstate.c +6 -6
index 1afbc4866b10..ebe698f8af73 100644
@@ -1053,6 +1053,7 @@ static void copy_feature(bool from_xstate, struct membuf *to, void *xstate,
  * __copy_xstate_to_uabi_buf - Copy kernel saved xstate to a UABI buffer
  * @to:		membuf descriptor
  * @fpstate:	The fpstate buffer from which to copy
+ * @xfeatures:	The mask of xfeatures to save (XSAVE mode only)
  * @pkru_val:	The PKRU value to store in the PKRU component
  * @copy_mode:	The requested copy mode
  *
@@ -1063,7 +1064,8 @@ static void copy_feature(bool from_xstate, struct membuf *to, void *xstate,
  * It supports partial copy but @to.pos always starts from zero.
  */
 void __copy_xstate_to_uabi_buf(struct membuf to, struct fpstate *fpstate,
-			       u32 pkru_val, enum xstate_copy_mode copy_mode)
+			       u64 xfeatures, u32 pkru_val,
+			       enum xstate_copy_mode copy_mode)
 {
 	const unsigned int off_mxcsr = offsetof(struct fxregs_state, mxcsr);
 	struct xregs_state *xinit = &init_fpstate.regs.xsave;
@@ -1087,7 +1089,7 @@ void __copy_xstate_to_uabi_buf(struct membuf to, struct fpstate *fpstate,
 		break;
 
 	case XSTATE_COPY_XSAVE:
-		header.xfeatures &= fpstate->user_xfeatures;
+		header.xfeatures &= fpstate->user_xfeatures & xfeatures;
 		break;
 	}
 
@@ -1189,6 +1191,7 @@ void copy_xstate_to_uabi_buf(struct membuf to, struct task_struct *tsk,
 			     enum xstate_copy_mode copy_mode)
 {
 	__copy_xstate_to_uabi_buf(to, tsk->thread.fpu.fpstate,
+				  tsk->thread.fpu.fpstate->user_xfeatures,
 				  tsk->thread.pkru, copy_mode);
 }
 
@@ -1540,10 +1543,7 @@ static int fpstate_realloc(u64 xfeatures, unsigned int ksize,
 		fpregs_restore_userregs();
 
 	newfps->xfeatures = curfps->xfeatures | xfeatures;
-
-	if (!guest_fpu)
-		newfps->user_xfeatures = curfps->user_xfeatures | xfeatures;
-
+	newfps->user_xfeatures = curfps->user_xfeatures | xfeatures;
 	newfps->xfd = curfps->xfd & ~xfeatures;
 
 	/* Do the final updates within the locked region */
arch/x86/kernel/fpu/xstate.h +2 -1
index a4ecb04d8d64..3518fb26d06b 100644
@@ -43,7 +43,8 @@ enum xstate_copy_mode {
 
 struct membuf;
 extern void __copy_xstate_to_uabi_buf(struct membuf to, struct fpstate *fpstate,
-				      u32 pkru_val, enum xstate_copy_mode copy_mode);
+				      u64 xfeatures, u32 pkru_val,
+				      enum xstate_copy_mode copy_mode);
 extern void copy_xstate_to_uabi_buf(struct membuf to, struct task_struct *tsk,
 				    enum xstate_copy_mode mode);
 extern int copy_uabi_from_kernel_to_xstate(struct fpstate *fpstate, const void *kbuf, u32 *pkru);
arch/x86/kernel/sev-shared.c +44 -9

137 lines not on this page · raw message

arch/x86/kernel/sev.c +30 -0
index afda719dd725..e7968c41ecf5 100644
@@ -512,6 +512,33 @@ static enum es_result vc_slow_virt_to_phys(struct ghcb *ghcb, struct es_em_ctxt
 	return ES_OK;
 }
 
+static enum es_result vc_ioio_check(struct es_em_ctxt *ctxt, u16 port, size_t size)
+{
+	BUG_ON(size > 4);
+
+	if (user_mode(ctxt->regs)) {
+		struct thread_struct *t = &current->thread;
+		struct io_bitmap *iobm = t->io_bitmap;
+		size_t idx;
+
+		if (!iobm)
+			goto fault;
+
+		for (idx = port; idx < port + size; ++idx) {
+			if (test_bit(idx, iobm->bitmap))
+				goto fault;
+		}
+	}
+
+	return ES_OK;
+
+fault:
+	ctxt->fi.vector = X86_TRAP_GP;
+	ctxt->fi.error_code = 0;
+
+	return ES_EXCEPTION;
+}
+
 /* Include code shared with pre-decompression boot stage */
 #include "sev-shared.c"
 
@@ -1552,6 +1579,9 @@ static enum es_result vc_handle_mmio(struct ghcb *ghcb, struct es_em_ctxt *ctxt)
 			return ES_DECODE_FAILED;
 	}
 
+	if (user_mode(ctxt->regs))
+		return ES_UNSUPPORTED;
+
 	switch (mmio) {
 	case MMIO_WRITE:
 		memcpy(ghcb->shared_buffer, reg_data, bytes);
arch/x86/kvm/cpuid.c +0 -8
index 7b4224f5ee2d..c3ef1fc602bf 100644
@@ -338,14 +338,6 @@ static void kvm_vcpu_after_set_cpuid(struct kvm_vcpu *vcpu)
 	vcpu->arch.guest_supported_xcr0 =
 		cpuid_get_supported_xcr0(vcpu->arch.cpuid_entries, vcpu->arch.cpuid_nent);
 
-	/*
-	 * FP+SSE can always be saved/restored via KVM_{G,S}ET_XSAVE, even if
-	 * XSAVE/XCRO are not exposed to the guest, and even if XSAVE isn't
-	 * supported by the host.
-	 */
-	vcpu->arch.guest_fpu.fpstate->user_xfeatures = vcpu->arch.guest_supported_xcr0 |
-						       XFEATURE_MASK_FPSSE;
-
 	kvm_update_pv_runtime(vcpu);
 
 	vcpu->arch.maxphyaddr = cpuid_query_maxphyaddr(vcpu);
arch/x86/kvm/lapic.c +6 -2
index 68eba393842f..7e8dbd54869a 100644
@@ -2535,13 +2535,17 @@ int kvm_apic_local_deliver(struct kvm_lapic *apic, int lvt_type)
 {
 	u32 reg = kvm_lapic_get_reg(apic, lvt_type);
 	int vector, mode, trig_mode;
+	int r;
 
 	if (kvm_apic_hw_enabled(apic) && !(reg & APIC_LVT_MASKED)) {
 		vector = reg & APIC_VECTOR_MASK;
 		mode = reg & APIC_MODE_MASK;
 		trig_mode = reg & APIC_LVT_LEVEL_TRIGGER;
-		return __apic_accept_irq(apic, mode, vector, 1, trig_mode,
-					NULL);
+
+		r = __apic_accept_irq(apic, mode, vector, 1, trig_mode, NULL);
+		if (r && lvt_type == APIC_LVTPC)
+			kvm_lapic_set_reg(apic, APIC_LVTPC, reg | APIC_LVT_MASKED);
+		return r;
 	}
 	return 0;
 }
arch/x86/kvm/mmu/mmu.c +2 -7
index 2a6fec4e2d19..d30325e297a0 100644
@@ -5994,19 +5994,16 @@ static void kvm_mmu_invalidate_zap_pages_in_memslot(struct kvm *kvm,
 	kvm_mmu_zap_all_fast(kvm);
 }
 
-int kvm_mmu_init_vm(struct kvm *kvm)
+void kvm_mmu_init_vm(struct kvm *kvm)
 {
 	struct kvm_page_track_notifier_node *node = &kvm->arch.mmu_sp_tracker;
-	int r;
 
 	INIT_LIST_HEAD(&kvm->arch.active_mmu_pages);
 	INIT_LIST_HEAD(&kvm->arch.zapped_obsolete_pages);
 	INIT_LIST_HEAD(&kvm->arch.lpage_disallowed_mmu_pages);
 	spin_lock_init(&kvm->arch.mmu_unsync_pages_lock);
 
-	r = kvm_mmu_init_tdp_mmu(kvm);
-	if (r < 0)
-		return r;
+	kvm_mmu_init_tdp_mmu(kvm);
 
 	node->track_write = kvm_mmu_pte_write;
 	node->track_flush_slot = kvm_mmu_invalidate_zap_pages_in_memslot;
@@ -6019,8 +6016,6 @@ int kvm_mmu_init_vm(struct kvm *kvm)
 
 	kvm->arch.split_desc_cache.kmem_cache = pte_list_desc_cache;
 	kvm->arch.split_desc_cache.gfp_zero = __GFP_ZERO;
-
-	return 0;
 }
 
 static void mmu_free_vm_memory_caches(struct kvm *kvm)
arch/x86/kvm/mmu/mmu_internal.h +7 -8
index 582def531d4d..0a9d5f2925c3 100644
@@ -56,7 +56,12 @@ struct kvm_mmu_page {
 
 	bool tdp_mmu_page;
 	bool unsync;
-	u8 mmu_valid_gen;
+	union {
+		u8 mmu_valid_gen;
+
+		/* Only accessed under slots_lock.  */
+		bool tdp_mmu_scheduled_root_to_zap;
+	};
 	bool lpage_disallowed; /* Can't be replaced by an equiv large page */
 
 	/*
@@ -92,13 +97,7 @@ struct kvm_mmu_page {
 		struct kvm_rmap_head parent_ptes; /* rmap pointers to parent sptes */
 		tdp_ptep_t ptep;
 	};
-	union {
-		DECLARE_BITMAP(unsync_child_bitmap, 512);
-		struct {
-			struct work_struct tdp_mmu_async_work;
-			void *tdp_mmu_async_data;
-		};
-	};
+	DECLARE_BITMAP(unsync_child_bitmap, 512);
 
 	struct list_head lpage_disallowed_link;
 #ifdef CONFIG_X86_32
arch/x86/kvm/mmu/tdp_mmu.c +56 -79

215 lines not on this page · raw message

arch/x86/kvm/mmu/tdp_mmu.h +2 -2
index d0a9fe0770fd..c82a8bb321bb 100644
@@ -65,7 +65,7 @@ u64 *kvm_tdp_mmu_fast_pf_get_last_sptep(struct kvm_vcpu *vcpu, u64 addr,
 					u64 *spte);
 
 #ifdef CONFIG_X86_64
-int kvm_mmu_init_tdp_mmu(struct kvm *kvm);
+void kvm_mmu_init_tdp_mmu(struct kvm *kvm);
 void kvm_mmu_uninit_tdp_mmu(struct kvm *kvm);
 static inline bool is_tdp_mmu_page(struct kvm_mmu_page *sp) { return sp->tdp_mmu_page; }
 
@@ -86,7 +86,7 @@ static inline bool is_tdp_mmu(struct kvm_mmu *mmu)
 	return sp && is_tdp_mmu_page(sp) && sp->root_count;
 }
 #else
-static inline int kvm_mmu_init_tdp_mmu(struct kvm *kvm) { return 0; }
+static inline void kvm_mmu_init_tdp_mmu(struct kvm *kvm) {}
 static inline void kvm_mmu_uninit_tdp_mmu(struct kvm *kvm) {}
 static inline bool is_tdp_mmu_page(struct kvm_mmu_page *sp) { return false; }
 static inline bool is_tdp_mmu(struct kvm_mmu *mmu) { return false; }
arch/x86/kvm/svm/avic.c +4 -1
index d3e66740c7c6..fb125b54ee68 100644
@@ -542,8 +542,11 @@ int avic_incomplete_ipi_interception(struct kvm_vcpu *vcpu)
 	case AVIC_IPI_FAILURE_INVALID_BACKING_PAGE:
 		WARN_ONCE(1, "Invalid backing page\n");
 		break;
+	case AVIC_IPI_FAILURE_INVALID_IPI_VECTOR:
+		/* Invalid IPI with vector < 16 */
+		break;
 	default:
-		pr_err("Unknown IPI interception\n");
+		vcpu_unimpl(vcpu, "Unknown avic incomplete IPI interception\n");
 	}
 
 	return 1;
arch/x86/kvm/svm/nested.c +3 -0
index 8053974af326..bc288e6bde64 100644
@@ -1164,6 +1164,9 @@ void svm_leave_nested(struct kvm_vcpu *vcpu)
 
 		nested_svm_uninit_mmu_context(vcpu);
 		vmcb_mark_all_dirty(svm->vmcb);
+
+		if (kvm_apicv_activated(vcpu->kvm))
+			kvm_make_request(KVM_REQ_APICV_UPDATE, vcpu);
 	}
 
 	kvm_clear_request(KVM_REQ_GET_NESTED_STATE_PAGES, vcpu);
arch/x86/kvm/x86.c +25 -17

67 lines not on this page · raw message

drivers/acpi/irq.c +6 -1
index c2c786eb95ab..1687483ff319 100644
@@ -57,6 +57,7 @@ int acpi_register_gsi(struct device *dev, u32 gsi, int trigger,
 		      int polarity)
 {
 	struct irq_fwspec fwspec;
+	unsigned int irq;
 
 	fwspec.fwnode = acpi_get_gsi_domain_id(gsi);
 	if (WARN_ON(!fwspec.fwnode)) {
@@ -68,7 +69,11 @@ int acpi_register_gsi(struct device *dev, u32 gsi, int trigger,
 	fwspec.param[1] = acpi_dev_get_irq_type(trigger, polarity);
 	fwspec.param_count = 2;
 
-	return irq_create_fwspec_mapping(&fwspec);
+	irq = irq_create_fwspec_mapping(&fwspec);
+	if (!irq)
+		return -EINVAL;
+
+	return irq;
 }
 EXPORT_SYMBOL_GPL(acpi_register_gsi);
 
drivers/ata/libata-core.c +1 -1
index fbc231a3f795..fa2fc1953fc2 100644
@@ -2456,7 +2456,7 @@ static int ata_dev_config_lba(struct ata_device *dev)
 {
 	const u16 *id = dev->id;
 	const char *lba_desc;
-	char ncq_desc[24];
+	char ncq_desc[32];
 	int ret;
 
 	dev->flags |= ATA_DFLAG_LBA;
drivers/ata/libata-eh.c +1 -1
index 2a04dd36a494..1eaaf01418ea 100644
@@ -2247,7 +2247,7 @@ static void ata_eh_link_report(struct ata_link *link)
 	struct ata_eh_context *ehc = &link->eh_context;
 	struct ata_queued_cmd *qc;
 	const char *frozen, *desc;
-	char tries_buf[6] = "";
+	char tries_buf[16] = "";
 	int tag, nr_failed = 0;
 
 	if (ehc->i.flags & ATA_EHI_QUIET)
drivers/base/regmap/regmap.c +1 -1
index 7de1f27d0323..df1f78abdf26 100644
@@ -1572,7 +1572,7 @@ static int dev_get_regmap_match(struct device *dev, void *res, void *data)
 
 	/* If the user didn't specify a name match any */
 	if (data)
-		return !strcmp((*r)->name, data);
+		return (*r)->name && !strcmp((*r)->name, data);
 	else
 		return 1;
 }
drivers/bluetooth/btusb.c +1 -0
index f2062c2a28da..96d4f48e3601 100644
@@ -3984,6 +3984,7 @@ static int btusb_probe(struct usb_interface *intf,
 
 	if (id->driver_info & BTUSB_QCA_ROME) {
 		data->setup_on_usb = btusb_setup_qca;
+		hdev->shutdown = btusb_shutdown_qca;
 		hdev->set_bdaddr = btusb_set_bdaddr_ath3012;
 		hdev->cmd_timeout = btusb_qca_cmd_timeout;
 		set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks);
drivers/bluetooth/hci_vhci.c +3 -0
index c443c3b0a4da..4415d850d698 100644
@@ -74,7 +74,10 @@ static int vhci_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
 	struct vhci_data *data = hci_get_drvdata(hdev);
 
 	memcpy(skb_push(skb, 1), &hci_skb_pkt_type(skb), 1);
+
+	mutex_lock(&data->open_mutex);
 	skb_queue_tail(&data->readq, skb);
+	mutex_unlock(&data->open_mutex);
 
 	wake_up_interruptible(&data->read_wait);
 	return 0;
drivers/gpio/gpio-timberdale.c +3 -2
index de14949a3fe5..92c1f2baa4bf 100644
@@ -43,9 +43,10 @@ static int timbgpio_update_bit(struct gpio_chip *gpio, unsigned index,
 	unsigned offset, bool enabled)
 {
 	struct timbgpio *tgpio = gpiochip_get_data(gpio);
+	unsigned long flags;
 	u32 reg;
 
-	spin_lock(&tgpio->lock);
+	spin_lock_irqsave(&tgpio->lock, flags);
 	reg = ioread32(tgpio->membase + offset);
 
 	if (enabled)
@@ -54,7 +55,7 @@ static int timbgpio_update_bit(struct gpio_chip *gpio, unsigned index,
 		reg &= ~(1 << index);
 
 	iowrite32(reg, tgpio->membase + offset);
-	spin_unlock(&tgpio->lock);
+	spin_unlock_irqrestore(&tgpio->lock, flags);
 
 	return 0;
 }
drivers/gpio/gpio-vf610.c +26 -20

101 lines not on this page · raw message

drivers/gpu/drm/amd/pm/amdgpu_pm.c +1 -0
index 8472013ff38a..0e78437c8389 100644
@@ -1991,6 +1991,7 @@ static int default_attr_update(struct amdgpu_device *adev, struct amdgpu_device_
 		case IP_VERSION(11, 0, 0):
 		case IP_VERSION(11, 0, 1):
 		case IP_VERSION(11, 0, 2):
+		case IP_VERSION(11, 0, 3):
 			*states = ATTR_STATE_SUPPORTED;
 			break;
 		default:
drivers/gpu/drm/bridge/ti-sn65dsi86.c +7 -7
index b89f7f7ca188..1b5c27ed2737 100644
@@ -673,7 +673,7 @@ static struct ti_sn65dsi86 *bridge_to_ti_sn65dsi86(struct drm_bridge *bridge)
 	return container_of(bridge, struct ti_sn65dsi86, bridge);
 }
 
-static int ti_sn_attach_host(struct ti_sn65dsi86 *pdata)
+static int ti_sn_attach_host(struct auxiliary_device *adev, struct ti_sn65dsi86 *pdata)
 {
 	int val;
 	struct mipi_dsi_host *host;
@@ -688,7 +688,7 @@ static int ti_sn_attach_host(struct ti_sn65dsi86 *pdata)
 	if (!host)
 		return -EPROBE_DEFER;
 
-	dsi = devm_mipi_dsi_device_register_full(dev, host, &info);
+	dsi = devm_mipi_dsi_device_register_full(&adev->dev, host, &info);
 	if (IS_ERR(dsi))
 		return PTR_ERR(dsi);
 
@@ -706,7 +706,7 @@ static int ti_sn_attach_host(struct ti_sn65dsi86 *pdata)
 
 	pdata->dsi = dsi;
 
-	return devm_mipi_dsi_attach(dev, dsi);
+	return devm_mipi_dsi_attach(&adev->dev, dsi);
 }
 
 static int ti_sn_bridge_attach(struct drm_bridge *bridge,
@@ -1279,9 +1279,9 @@ static int ti_sn_bridge_probe(struct auxiliary_device *adev,
 	struct device_node *np = pdata->dev->of_node;
 	int ret;
 
-	pdata->next_bridge = devm_drm_of_get_bridge(pdata->dev, np, 1, 0);
+	pdata->next_bridge = devm_drm_of_get_bridge(&adev->dev, np, 1, 0);
 	if (IS_ERR(pdata->next_bridge))
-		return dev_err_probe(pdata->dev, PTR_ERR(pdata->next_bridge),
+		return dev_err_probe(&adev->dev, PTR_ERR(pdata->next_bridge),
 				     "failed to create panel bridge\n");
 
 	ti_sn_bridge_parse_lanes(pdata, np);
@@ -1300,9 +1300,9 @@ static int ti_sn_bridge_probe(struct auxiliary_device *adev,
 
 	drm_bridge_add(&pdata->bridge);
 
-	ret = ti_sn_attach_host(pdata);
+	ret = ti_sn_attach_host(adev, pdata);
 	if (ret) {
-		dev_err_probe(pdata->dev, ret, "failed to attach dsi host\n");
+		dev_err_probe(&adev->dev, ret, "failed to attach dsi host\n");
 		goto err_remove_bridge;
 	}
 
drivers/gpu/drm/drm_panel_orientation_quirks.c +16 -0
index 0cb646cb04ee..d5c15292ae93 100644
@@ -38,6 +38,14 @@ static const struct drm_dmi_panel_orientation_data gpd_micropc = {
 	.orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP,
 };
 
+static const struct drm_dmi_panel_orientation_data gpd_onemix2s = {
+	.width = 1200,
+	.height = 1920,
+	.bios_dates = (const char * const []){ "05/21/2018", "10/26/2018",
+		"03/04/2019", NULL },
+	.orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP,
+};
+
 static const struct drm_dmi_panel_orientation_data gpd_pocket = {
 	.width = 1200,
 	.height = 1920,
@@ -401,6 +409,14 @@ static const struct dmi_system_id orientation_data[] = {
 		  DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "LTH17"),
 		},
 		.driver_data = (void *)&lcd800x1280_rightside_up,
+	}, {	/* One Mix 2S (generic strings, also match on bios date) */
+		.matches = {
+		  DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Default string"),
+		  DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Default string"),
+		  DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "Default string"),
+		  DMI_EXACT_MATCH(DMI_BOARD_NAME, "Default string"),
+		},
+		.driver_data = (void *)&gpd_onemix2s,
 	},
 	{}
 };
drivers/gpu/drm/i915/gem/i915_gem_mman.c +1 -0
index d445e2d63c9c..d7e30d889a5c 100644
@@ -235,6 +235,7 @@ static vm_fault_t i915_error_to_vmf_fault(int err)
 	case 0:
 	case -EAGAIN:
 	case -ENOSPC: /* transient failure to evict? */
+	case -ENOBUFS: /* temporarily out of fences? */
 	case -ERESTARTSYS:
 	case -EINTR:
 	case -EBUSY:
drivers/gpu/drm/mediatek/mtk_drm_gem.c +5 -1
index 1d0374a577a5..fb4f0e336b60 100644
@@ -234,6 +234,7 @@ int mtk_drm_gem_prime_vmap(struct drm_gem_object *obj, struct iosys_map *map)
 	npages = obj->size >> PAGE_SHIFT;
 	mtk_gem->pages = kcalloc(npages, sizeof(*mtk_gem->pages), GFP_KERNEL);
 	if (!mtk_gem->pages) {
+		sg_free_table(sgt);
 		kfree(sgt);
 		return -ENOMEM;
 	}
@@ -243,12 +244,15 @@ int mtk_drm_gem_prime_vmap(struct drm_gem_object *obj, struct iosys_map *map)
 	mtk_gem->kvaddr = vmap(mtk_gem->pages, npages, VM_MAP,
 			       pgprot_writecombine(PAGE_KERNEL));
 	if (!mtk_gem->kvaddr) {
+		sg_free_table(sgt);
 		kfree(sgt);
 		kfree(mtk_gem->pages);
 		return -ENOMEM;
 	}
-out:
+	sg_free_table(sgt);
 	kfree(sgt);
+
+out:
 	iosys_map_set_vaddr(map, mtk_gem->kvaddr);
 
 	return 0;
drivers/hid/.kunitconfig +1 -0
index 04daeff5c970..675a8209c7ae 100644
@@ -1,5 +1,6 @@
 CONFIG_KUNIT=y
 CONFIG_USB=y
 CONFIG_USB_HID=y
+CONFIG_HID_BATTERY_STRENGTH=y
 CONFIG_HID_UCLOGIC=y
 CONFIG_HID_KUNIT_TEST=y
drivers/hid/Kconfig +1 -0
index c1873ccc7248..9ad5e43d9961 100644
@@ -1263,6 +1263,7 @@ config HID_MCP2221
 config HID_KUNIT_TEST
 	tristate "KUnit tests for HID" if !KUNIT_ALL_TESTS
 	depends on KUNIT
+	depends on HID_BATTERY_STRENGTH
 	depends on HID_UCLOGIC
 	default KUNIT_ALL_TESTS
 	help
drivers/hid/hid-holtek-kbd.c +4 -0
index 403506b9697e..b346d68a06f5 100644
@@ -130,6 +130,10 @@ static int holtek_kbd_input_event(struct input_dev *dev, unsigned int type,
 		return -ENODEV;
 
 	boot_hid = usb_get_intfdata(boot_interface);
+	if (list_empty(&boot_hid->inputs)) {
+		hid_err(hid, "no inputs found\n");
+		return -ENODEV;
+	}
 	boot_hid_input = list_first_entry(&boot_hid->inputs,
 		struct hid_input, list);
 
drivers/hid/hid-input-test.c new file +80 -0

80 lines not on this page · raw message

drivers/hid/hid-input.c +34 -2
index 77ee5e01e611..4ba5df3c1e03 100644
@@ -492,7 +492,7 @@ static int hidinput_get_battery_property(struct power_supply *psy,
 		if (dev->battery_status == HID_BATTERY_UNKNOWN)
 			val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
 		else
-			val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
+			val->intval = dev->battery_charge_status;
 		break;
 
 	case POWER_SUPPLY_PROP_SCOPE:
@@ -560,6 +560,7 @@ static int hidinput_setup_battery(struct hid_device *dev, unsigned report_type,
 	dev->battery_max = max;
 	dev->battery_report_type = report_type;
 	dev->battery_report_id = field->report->id;
+	dev->battery_charge_status = POWER_SUPPLY_STATUS_DISCHARGING;
 
 	/*
 	 * Stylus is normally not connected to the device and thus we
@@ -626,6 +627,20 @@ static void hidinput_update_battery(struct hid_device *dev, int value)
 		power_supply_changed(dev->battery);
 	}
 }
+
+static bool hidinput_set_battery_charge_status(struct hid_device *dev,
+					       unsigned int usage, int value)
+{
+	switch (usage) {
+	case HID_BAT_CHARGING:
+		dev->battery_charge_status = value ?
+					     POWER_SUPPLY_STATUS_CHARGING :
+					     POWER_SUPPLY_STATUS_DISCHARGING;
+		return true;
+	}
+
+	return false;
+}
 #else  /* !CONFIG_HID_BATTERY_STRENGTH */
 static int hidinput_setup_battery(struct hid_device *dev, unsigned report_type,
 				  struct hid_field *field, bool is_percentage)
@@ -640,6 +655,12 @@ static void hidinput_cleanup_battery(struct hid_device *dev)
 static void hidinput_update_battery(struct hid_device *dev, int value)
 {
 }
+
+static bool hidinput_set_battery_charge_status(struct hid_device *dev,
+					       unsigned int usage, int value)
+{
+	return false;
+}
 #endif	/* CONFIG_HID_BATTERY_STRENGTH */
 
 static bool hidinput_field_in_collection(struct hid_device *device, struct hid_field *field,
@@ -1239,6 +1260,9 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
 			hidinput_setup_battery(device, HID_INPUT_REPORT, field, true);
 			usage->type = EV_PWR;
 			return;
+		case HID_BAT_CHARGING:
+			usage->type = EV_PWR;
+			return;
 		}
 		goto unknown;
 
@@ -1481,7 +1505,11 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct
 		return;
 
 	if (usage->type == EV_PWR) {
-		hidinput_update_battery(hid, value);
+		bool handled = hidinput_set_battery_charge_status(hid, usage->hid, value);
+
+		if (!handled)
+			hidinput_update_battery(hid, value);
+
 		return;
 	}
 
@@ -2346,3 +2374,7 @@ void hidinput_disconnect(struct hid_device *hid)
 	cancel_work_sync(&hid->led_work);
 }
 EXPORT_SYMBOL_GPL(hidinput_disconnect);
+
+#ifdef CONFIG_HID_KUNIT_TEST
+#include "hid-input-test.c"
+#endif
drivers/hid/hid-logitech-hidpp.c +2 -0
index fb427391c3b8..8d0dad12b2d3 100644
@@ -4427,6 +4427,8 @@ static const struct hid_device_id hidpp_devices[] = {
 	  HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb008) },
 	{ /* MX Master mouse over Bluetooth */
 	  HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb012) },
+	{ /* M720 Triathlon mouse over Bluetooth */
+	  HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb015) },
 	{ /* MX Ergo trackball over Bluetooth */
 	  HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb01d) },
 	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb01e) },
drivers/hid/hid-multitouch.c +4 -0
index 521b2ffb4244..8db4ae05febc 100644
@@ -2144,6 +2144,10 @@ static const struct hid_device_id mt_devices[] = {
 			USB_DEVICE_ID_MTP_STM)},
 
 	/* Synaptics devices */
+	{ .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
+		HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
+			USB_VENDOR_ID_SYNAPTICS, 0xcd7e) },
+
 	{ .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
 		HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
 			USB_VENDOR_ID_SYNAPTICS, 0xce08) },
drivers/hid/hid-nintendo.c +103 -72

221 lines not on this page · raw message

drivers/i2c/i2c-mux.c +1 -1
index 313904be5f3b..57ff09f18c37 100644
@@ -341,7 +341,7 @@ int i2c_mux_add_adapter(struct i2c_mux_core *muxc,
 		priv->adap.lock_ops = &i2c_parent_lock_ops;
 
 	/* Sanity check on class */
-	if (i2c_mux_parent_classes(parent) & class)
+	if (i2c_mux_parent_classes(parent) & class & ~I2C_CLASS_DEPRECATED)
 		dev_err(&parent->dev,
 			"Segment %d behind mux can't share classes with ancestors\n",
 			chan_id);
drivers/iio/adc/ad7192.c +26 -16

57 lines not on this page · raw message

drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c +5 -1
index d98f7e4d202c..1ddce991fb3f 100644
@@ -190,8 +190,11 @@ int cros_ec_sensors_push_data(struct iio_dev *indio_dev,
 	/*
 	 * Ignore samples if the buffer is not set: it is needed if the ODR is
 	 * set but the buffer is not enabled yet.
+	 *
+	 * Note: iio_device_claim_buffer_mode() returns -EBUSY if the buffer
+	 * is not enabled.
 	 */
-	if (!iio_buffer_enabled(indio_dev))
+	if (iio_device_claim_buffer_mode(indio_dev) < 0)
 		return 0;
 
 	out = (s16 *)st->samples;
@@ -210,6 +213,7 @@ int cros_ec_sensors_push_data(struct iio_dev *indio_dev,
 	iio_push_to_buffers_with_timestamp(indio_dev, st->samples,
 					   timestamp + delta);
 
+	iio_device_release_buffer_mode(indio_dev);
 	return 0;
 }
 EXPORT_SYMBOL_GPL(cros_ec_sensors_push_data);
drivers/iio/industrialio-core.c +38 -0
index f3f8392623a4..c9614982cb67 100644
@@ -2084,6 +2084,44 @@ void iio_device_release_direct_mode(struct iio_dev *indio_dev)
 }
 EXPORT_SYMBOL_GPL(iio_device_release_direct_mode);
 
+/**
+ * iio_device_claim_buffer_mode - Keep device in buffer mode
+ * @indio_dev:	the iio_dev associated with the device
+ *
+ * If the device is in buffer mode it is guaranteed to stay
+ * that way until iio_device_release_buffer_mode() is called.
+ *
+ * Use with iio_device_release_buffer_mode().
+ *
+ * Returns: 0 on success, -EBUSY on failure.
+ */
+int iio_device_claim_buffer_mode(struct iio_dev *indio_dev)
+{
+	mutex_lock(&indio_dev->mlock);
+
+	if (iio_buffer_enabled(indio_dev))
+		return 0;
+
+	mutex_unlock(&indio_dev->mlock);
+	return -EBUSY;
+}
+EXPORT_SYMBOL_GPL(iio_device_claim_buffer_mode);
+
+/**
+ * iio_device_release_buffer_mode - releases claim on buffer mode
+ * @indio_dev:	the iio_dev associated with the device
+ *
+ * Release the claim. Device is no longer guaranteed to stay
+ * in buffer mode.
+ *
+ * Use with iio_device_claim_buffer_mode().
+ */
+void iio_device_release_buffer_mode(struct iio_dev *indio_dev)
+{
+	mutex_unlock(&indio_dev->mlock);
+}
+EXPORT_SYMBOL_GPL(iio_device_release_buffer_mode);
+
 /**
  * iio_device_get_current_mode() - helper function providing read-only access to
  *				   the opaque @currentmode variable
drivers/mmc/core/mmc.c +1 -1
index 89cd48fcec79..4a4bab9aa726 100644
@@ -104,7 +104,7 @@ static int mmc_decode_cid(struct mmc_card *card)
 	case 3: /* MMC v3.1 - v3.3 */
 	case 4: /* MMC v4 */
 		card->cid.manfid	= UNSTUFF_BITS(resp, 120, 8);
-		card->cid.oemid		= UNSTUFF_BITS(resp, 104, 16);
+		card->cid.oemid		= UNSTUFF_BITS(resp, 104, 8);
 		card->cid.prod_name[0]	= UNSTUFF_BITS(resp, 96, 8);
 		card->cid.prod_name[1]	= UNSTUFF_BITS(resp, 88, 8);
 		card->cid.prod_name[2]	= UNSTUFF_BITS(resp, 80, 8);
drivers/mmc/core/sdio.c +7 -1
index f64b9ac76a5c..5914516df2f7 100644
@@ -1089,8 +1089,14 @@ static int mmc_sdio_resume(struct mmc_host *host)
 		}
 		err = mmc_sdio_reinit_card(host);
 	} else if (mmc_card_wake_sdio_irq(host)) {
-		/* We may have switched to 1-bit mode during suspend */
+		/*
+		 * We may have switched to 1-bit mode during suspend,
+		 * need to hold retuning, because tuning only supprt
+		 * 4-bit mode or 8 bit mode.
+		 */
+		mmc_retune_hold_now(host);
 		err = sdio_enable_4bit_bus(host->card);
+		mmc_retune_release(host);
 	}
 
 	if (err)
drivers/mmc/host/mtk-sd.c +3 -3
index 1a0d4dc24717..70e414027155 100644
@@ -655,11 +655,11 @@ static void msdc_reset_hw(struct msdc_host *host)
 	u32 val;
 
 	sdr_set_bits(host->base + MSDC_CFG, MSDC_CFG_RST);
-	readl_poll_timeout(host->base + MSDC_CFG, val, !(val & MSDC_CFG_RST), 0, 0);
+	readl_poll_timeout_atomic(host->base + MSDC_CFG, val, !(val & MSDC_CFG_RST), 0, 0);
 
 	sdr_set_bits(host->base + MSDC_FIFOCS, MSDC_FIFOCS_CLR);
-	readl_poll_timeout(host->base + MSDC_FIFOCS, val,
-			   !(val & MSDC_FIFOCS_CLR), 0, 0);
+	readl_poll_timeout_atomic(host->base + MSDC_FIFOCS, val,
+				  !(val & MSDC_FIFOCS_CLR), 0, 0);
 
 	val = readl(host->base + MSDC_INT);
 	writel(val, host->base + MSDC_INT);
drivers/mmc/host/sdhci-pci-gli.c +66 -38

122 lines not on this page · raw message

drivers/mtd/maps/physmap-core.c +11 -0
index c73854da5136..19dad5a23f94 100644
@@ -552,6 +552,17 @@ static int physmap_flash_probe(struct platform_device *dev)
 		if (info->probe_type) {
 			info->mtds[i] = do_map_probe(info->probe_type,
 						     &info->maps[i]);
+
+			/* Fall back to mapping region as ROM */
+			if (!info->mtds[i] && IS_ENABLED(CONFIG_MTD_ROM) &&
+			    strcmp(info->probe_type, "map_rom")) {
+				dev_warn(&dev->dev,
+					 "map_probe() failed for type %s\n",
+					 info->probe_type);
+
+				info->mtds[i] = do_map_probe("map_rom",
+							     &info->maps[i]);
+			}
 		} else {
 			int j;
 
drivers/mtd/nand/raw/arasan-nand-controller.c +14 -2
index ec7e6eeac55f..e6ffe87a599e 100644
@@ -515,6 +515,7 @@ static int anfc_write_page_hw_ecc(struct nand_chip *chip, const u8 *buf,
 	struct mtd_info *mtd = nand_to_mtd(chip);
 	unsigned int len = mtd->writesize + (oob_required ? mtd->oobsize : 0);
 	dma_addr_t dma_addr;
+	u8 status;
 	int ret;
 	struct anfc_op nfc_op = {
 		.pkt_reg =
@@ -561,10 +562,21 @@ static int anfc_write_page_hw_ecc(struct nand_chip *chip, const u8 *buf,
 	}
 
 	/* Spare data is not protected */
-	if (oob_required)
+	if (oob_required) {
 		ret = nand_write_oob_std(chip, page);
+		if (ret)
+			return ret;
+	}
 
-	return ret;
+	/* Check write status on the chip side */
+	ret = nand_status_op(chip, &status);
+	if (ret)
+		return ret;
+
+	if (status & NAND_STATUS_FAIL)
+		return -EIO;
+
+	return 0;
 }
 
 static int anfc_sel_write_page_hw_ecc(struct nand_chip *chip, const u8 *buf,
drivers/mtd/nand/raw/marvell_nand.c +22 -1
index a57a1501449a..d527c03630bc 100644
@@ -1154,6 +1154,7 @@ static int marvell_nfc_hw_ecc_hmg_do_write_page(struct nand_chip *chip,
 		.ndcb[2] = NDCB2_ADDR5_PAGE(page),
 	};
 	unsigned int oob_bytes = lt->spare_bytes + (raw ? lt->ecc_bytes : 0);
+	u8 status;
 	int ret;
 
 	/* NFCv2 needs more information about the operation being executed */
@@ -1187,7 +1188,18 @@ static int marvell_nfc_hw_ecc_hmg_do_write_page(struct nand_chip *chip,
 
 	ret = marvell_nfc_wait_op(chip,
 				  PSEC_TO_MSEC(sdr->tPROG_max));
-	return ret;
+	if (ret)
+		return ret;
+
+	/* Check write status on the chip side */
+	ret = nand_status_op(chip, &status);
+	if (ret)
+		return ret;
+
+	if (status & NAND_STATUS_FAIL)
+		return -EIO;
+
+	return 0;
 }
 
 static int marvell_nfc_hw_ecc_hmg_write_page_raw(struct nand_chip *chip,
@@ -1616,6 +1628,7 @@ static int marvell_nfc_hw_ecc_bch_write_page(struct nand_chip *chip,
 	int data_len = lt->data_bytes;
 	int spare_len = lt->spare_bytes;
 	int chunk, ret;
+	u8 status;
 
 	marvell_nfc_select_target(chip, chip->cur_cs);
 
@@ -1652,6 +1665,14 @@ static int marvell_nfc_hw_ecc_bch_write_page(struct nand_chip *chip,
 	if (ret)
 		return ret;
 
+	/* Check write status on the chip side */
+	ret = nand_status_op(chip, &status);
+	if (ret)
+		return ret;
+
+	if (status & NAND_STATUS_FAIL)
+		return -EIO;
+
 	return 0;
 }
 
drivers/mtd/nand/raw/pl35x-nand-controller.c +9 -0
index 3c6f6aff649f..7bcece135715 100644
@@ -513,6 +513,7 @@ static int pl35x_nand_write_page_hwecc(struct nand_chip *chip,
 	u32 addr1 = 0, addr2 = 0, row;
 	u32 cmd_addr;
 	int i, ret;
+	u8 status;
 
 	ret = pl35x_smc_set_ecc_mode(nfc, chip, PL35X_SMC_ECC_CFG_MODE_APB);
 	if (ret)
@@ -565,6 +566,14 @@ static int pl35x_nand_write_page_hwecc(struct nand_chip *chip,
 	if (ret)
 		goto disable_ecc_engine;
 
+	/* Check write status on the chip side */
+	ret = nand_status_op(chip, &status);
+	if (ret)
+		goto disable_ecc_engine;
+
+	if (status & NAND_STATUS_FAIL)
+		ret = -EIO;
+
 disable_ecc_engine:
 	pl35x_smc_set_ecc_mode(nfc, chip, PL35X_SMC_ECC_CFG_MODE_BYPASS);
 
drivers/mtd/nand/raw/qcom_nandc.c +1 -1
index 198a44794d2d..fbf36cbcbb18 100644
@@ -3310,7 +3310,7 @@ static int qcom_nandc_probe(struct platform_device *pdev)
 err_aon_clk:
 	clk_disable_unprepare(nandc->core_clk);
 err_core_clk:
-	dma_unmap_resource(dev, res->start, resource_size(res),
+	dma_unmap_resource(dev, nandc->base_dma, resource_size(res),
 			   DMA_BIDIRECTIONAL, 0);
 	return ret;
 }
drivers/mtd/nand/spi/micron.c +1 -1
index 50b7295bc922..12601bc4227a 100644
@@ -12,7 +12,7 @@
 
 #define SPINAND_MFR_MICRON		0x2c
 
-#define MICRON_STATUS_ECC_MASK		GENMASK(7, 4)
+#define MICRON_STATUS_ECC_MASK		GENMASK(6, 4)
 #define MICRON_STATUS_ECC_NO_BITFLIPS	(0 << 4)
 #define MICRON_STATUS_ECC_1TO3_BITFLIPS	(1 << 4)
 #define MICRON_STATUS_ECC_4TO6_BITFLIPS	(3 << 4)
drivers/net/bonding/bond_main.c +1 -1
index 7a3c7a74af04..b170a3d8d007 100644
@@ -3990,7 +3990,7 @@ static inline const void *bond_pull_data(struct sk_buff *skb,
 	if (likely(n <= hlen))
 		return data;
 	else if (skb && likely(pskb_may_pull(skb, n)))
-		return skb->head;
+		return skb->data;
 
 	return NULL;
 }
drivers/net/dsa/bcm_sf2.c +15 -9
index 72374b066f64..cd1f240c90f3 100644
@@ -617,17 +617,16 @@ static int bcm_sf2_mdio_register(struct dsa_switch *ds)
 	dn = of_find_compatible_node(NULL, NULL, "brcm,unimac-mdio");
 	priv->master_mii_bus = of_mdio_find_bus(dn);
 	if (!priv->master_mii_bus) {
-		of_node_put(dn);
-		return -EPROBE_DEFER;
+		err = -EPROBE_DEFER;
+		goto err_of_node_put;
 	}
 
-	get_device(&priv->master_mii_bus->dev);
 	priv->master_mii_dn = dn;
 
 	priv->slave_mii_bus = mdiobus_alloc();
 	if (!priv->slave_mii_bus) {
-		of_node_put(dn);
-		return -ENOMEM;
+		err = -ENOMEM;
+		goto err_put_master_mii_bus_dev;
 	}
 
 	priv->slave_mii_bus->priv = priv;
@@ -684,11 +683,17 @@ static int bcm_sf2_mdio_register(struct dsa_switch *ds)
 	}
 
 	err = mdiobus_register(priv->slave_mii_bus);
-	if (err && dn) {
-		mdiobus_free(priv->slave_mii_bus);
-		of_node_put(dn);
-	}
+	if (err && dn)
+		goto err_free_slave_mii_bus;
 
+	return 0;
+
+err_free_slave_mii_bus:
+	mdiobus_free(priv->slave_mii_bus);
+err_put_master_mii_bus_dev:
+	put_device(&priv->master_mii_bus->dev);
+err_of_node_put:
+	of_node_put(dn);
 	return err;
 }
 
@@ -696,6 +701,7 @@ static void bcm_sf2_mdio_unregister(struct bcm_sf2_priv *priv)
 {
 	mdiobus_unregister(priv->slave_mii_bus);
 	mdiobus_free(priv->slave_mii_bus);
+	put_device(&priv->master_mii_bus->dev);
 	of_node_put(priv->master_mii_dn);
 }
 
drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_io.c +29 -7
index a4256087ac82..5e45bef4fd34 100644
@@ -911,7 +911,7 @@ static int csk_wait_memory(struct chtls_dev *cdev,
 			   struct sock *sk, long *timeo_p)
 {
 	DEFINE_WAIT_FUNC(wait, woken_wake_function);
-	int err = 0;
+	int ret, err = 0;
 	long current_timeo;
 	long vm_wait = 0;
 	bool noblock;
@@ -942,10 +942,13 @@ static int csk_wait_memory(struct chtls_dev *cdev,
 
 		set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
 		sk->sk_write_pending++;
-		sk_wait_event(sk, &current_timeo, sk->sk_err ||
-			      (sk->sk_shutdown & SEND_SHUTDOWN) ||
-			      (csk_mem_free(cdev, sk) && !vm_wait), &wait);
+		ret = sk_wait_event(sk, &current_timeo, sk->sk_err ||
+				    (sk->sk_shutdown & SEND_SHUTDOWN) ||
+				    (csk_mem_free(cdev, sk) && !vm_wait),
+				    &wait);
 		sk->sk_write_pending--;
+		if (ret < 0)
+			goto do_error;
 
 		if (vm_wait) {
 			vm_wait -= current_timeo;
@@ -1438,6 +1441,7 @@ static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 	int copied = 0;
 	int target;
 	long timeo;
+	int ret;
 
 	buffers_freed = 0;
 
@@ -1513,7 +1517,11 @@ static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 		if (copied >= target)
 			break;
 		chtls_cleanup_rbuf(sk, copied);
-		sk_wait_data(sk, &timeo, NULL);
+		ret = sk_wait_data(sk, &timeo, NULL);
+		if (ret < 0) {
+			copied = copied ? : ret;
+			goto unlock;
+		}
 		continue;
 found_ok_skb:
 		if (!skb->len) {
@@ -1608,6 +1616,8 @@ static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 
 	if (buffers_freed)
 		chtls_cleanup_rbuf(sk, copied);
+
+unlock:
 	release_sock(sk);
 	return copied;
 }
@@ -1624,6 +1634,7 @@ static int peekmsg(struct sock *sk, struct msghdr *msg,
 	int copied = 0;
 	size_t avail;          /* amount of available data in current skb */
 	long timeo;
+	int ret;
 
 	lock_sock(sk);
 	timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
@@ -1675,7 +1686,12 @@ static int peekmsg(struct sock *sk, struct msghdr *msg,
 			release_sock(sk);
 			lock_sock(sk);
 		} else {
-			sk_wait_data(sk, &timeo, NULL);
+			ret = sk_wait_data(sk, &timeo, NULL);
+			if (ret < 0) {
+				/* here 'copied' is 0 due to previous checks */
+				copied = ret;
+				break;
+			}
 		}
 
 		if (unlikely(peek_seq != tp->copied_seq)) {
@@ -1746,6 +1762,7 @@ int chtls_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 	int copied = 0;
 	long timeo;
 	int target;             /* Read at least this many bytes */
+	int ret;
 
 	buffers_freed = 0;
 
@@ -1837,7 +1854,11 @@ int chtls_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 		if (copied >= target)
 			break;
 		chtls_cleanup_rbuf(sk, copied);
-		sk_wait_data(sk, &timeo, NULL);
+		ret = sk_wait_data(sk, &timeo, NULL);
+		if (ret < 0) {
+			copied = copied ? : ret;
+			goto unlock;
+		}
 		continue;
 
 found_ok_skb:
@@ -1906,6 +1927,7 @@ int chtls_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 	if (buffers_freed)
 		chtls_cleanup_rbuf(sk, copied);
 
+unlock:
 	release_sock(sk);
 	return copied;
 }
drivers/net/ethernet/intel/i40e/i40e_common.c +2 -2
index 82e06272158d..6266756b47b9 100644
@@ -1082,7 +1082,7 @@ void i40e_clear_hw(struct i40e_hw *hw)
 		     I40E_PFLAN_QALLOC_FIRSTQ_SHIFT;
 	j = (val & I40E_PFLAN_QALLOC_LASTQ_MASK) >>
 	    I40E_PFLAN_QALLOC_LASTQ_SHIFT;
-	if (val & I40E_PFLAN_QALLOC_VALID_MASK)
+	if (val & I40E_PFLAN_QALLOC_VALID_MASK && j >= base_queue)
 		num_queues = (j - base_queue) + 1;
 	else
 		num_queues = 0;
@@ -1092,7 +1092,7 @@ void i40e_clear_hw(struct i40e_hw *hw)
 	    I40E_PF_VT_PFALLOC_FIRSTVF_SHIFT;
 	j = (val & I40E_PF_VT_PFALLOC_LASTVF_MASK) >>
 	    I40E_PF_VT_PFALLOC_LASTVF_SHIFT;
-	if (val & I40E_PF_VT_PFALLOC_VALID_MASK)
+	if (val & I40E_PF_VT_PFALLOC_VALID_MASK && j >= i)
 		num_vfs = (j - i) + 1;
 	else
 		num_vfs = 0;
drivers/net/ethernet/intel/ice/ice_lib.c +1 -2
index 7276badfa19e..c051503c3a89 100644
@@ -1100,8 +1100,7 @@ static void ice_set_rss_vsi_ctx(struct ice_vsi_ctx *ctxt, struct ice_vsi *vsi)
 
 	ctxt->info.q_opt_rss = ((lut_type << ICE_AQ_VSI_Q_OPT_RSS_LUT_S) &
 				ICE_AQ_VSI_Q_OPT_RSS_LUT_M) |
-				((hash_type << ICE_AQ_VSI_Q_OPT_RSS_HASH_S) &
-				 ICE_AQ_VSI_Q_OPT_RSS_HASH_M);
+				(hash_type & ICE_AQ_VSI_Q_OPT_RSS_HASH_M);
 }
 
 static void
drivers/net/ethernet/intel/ice/ice_main.c +15 -3
index 3f98781e74b2..f0f39364819a 100644
@@ -6,6 +6,7 @@
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
 #include <generated/utsrelease.h>
+#include <linux/crash_dump.h>
 #include "ice.h"
 #include "ice_base.h"
 #include "ice_lib.h"
@@ -4681,6 +4682,20 @@ ice_probe(struct pci_dev *pdev, const struct pci_device_id __always_unused *ent)
 		return -EINVAL;
 	}
 
+	/* when under a kdump kernel initiate a reset before enabling the
+	 * device in order to clear out any pending DMA transactions. These
+	 * transactions can cause some systems to machine check when doing
+	 * the pcim_enable_device() below.
+	 */
+	if (is_kdump_kernel()) {
+		pci_save_state(pdev);
+		pci_clear_master(pdev);
+		err = pcie_flr(pdev);
+		if (err)
+			return err;
+		pci_restore_state(pdev);
+	}
+
 	/* this driver uses devres, see
 	 * Documentation/driver-api/driver-model/devres.rst
 	 */
@@ -4708,7 +4723,6 @@ ice_probe(struct pci_dev *pdev, const struct pci_device_id __always_unused *ent)
 		return err;
 	}
 
-	pci_enable_pcie_error_reporting(pdev);
 	pci_set_master(pdev);
 
 	pf->pdev = pdev;
@@ -5001,7 +5015,6 @@ ice_probe(struct pci_dev *pdev, const struct pci_device_id __always_unused *ent)
 	ice_devlink_destroy_regions(pf);
 	ice_deinit_hw(hw);
 err_exit_unroll:
-	pci_disable_pcie_error_reporting(pdev);
 	pci_disable_device(pdev);
 	return err;
 }
@@ -5127,7 +5140,6 @@ static void ice_remove(struct pci_dev *pdev)
 	ice_reset(&pf->hw, ICE_RESET_PFR);
 	pci_wait_for_pending_transaction(pdev);
 	ice_clear_interrupt_scheme(pf);
-	pci_disable_pcie_error_reporting(pdev);
 	pci_disable_device(pdev);
 }
 
drivers/net/ethernet/intel/igc/igc.h +6 -1
index d3b17aa1d1a8..43c05b41627f 100644
@@ -183,9 +183,11 @@ struct igc_adapter {
 	u32 max_frame_size;
 	u32 min_frame_size;
 
+	int tc_setup_type;
 	ktime_t base_time;
 	ktime_t cycle_time;
 	bool qbv_enable;
+	u32 qbv_config_change_errors;
 
 	/* OS defined structs */
 	struct pci_dev *pdev;
@@ -228,6 +230,10 @@ struct igc_adapter {
 	struct ptp_clock *ptp_clock;
 	struct ptp_clock_info ptp_caps;
 	struct work_struct ptp_tx_work;
+	/* Access to ptp_tx_skb and ptp_tx_start are protected by the
+	 * ptp_tx_lock.
+	 */
+	spinlock_t ptp_tx_lock;
 	struct sk_buff *ptp_tx_skb;
 	struct hwtstamp_config tstamp_config;
 	unsigned long ptp_tx_start;
@@ -429,7 +435,6 @@ enum igc_state_t {
 	__IGC_TESTING,
 	__IGC_RESETTING,
 	__IGC_DOWN,
-	__IGC_PTP_TX_IN_PROGRESS,
 };
 
 enum igc_tx_flags {
drivers/net/ethernet/intel/igc/igc_base.c +29 -0
index a15927e77272..a1d815af507d 100644
@@ -396,6 +396,35 @@ void igc_rx_fifo_flush_base(struct igc_hw *hw)
 	rd32(IGC_MPC);
 }
 
+bool igc_is_device_id_i225(struct igc_hw *hw)
+{
+	switch (hw->device_id) {
+	case IGC_DEV_ID_I225_LM:
+	case IGC_DEV_ID_I225_V:
+	case IGC_DEV_ID_I225_I:
+	case IGC_DEV_ID_I225_K:
+	case IGC_DEV_ID_I225_K2:
+	case IGC_DEV_ID_I225_LMVP:
+	case IGC_DEV_ID_I225_IT:
+		return true;
+	default:
+		return false;
+	}
+}
+
+bool igc_is_device_id_i226(struct igc_hw *hw)
+{
+	switch (hw->device_id) {
+	case IGC_DEV_ID_I226_LM:
+	case IGC_DEV_ID_I226_V:
+	case IGC_DEV_ID_I226_K:
+	case IGC_DEV_ID_I226_IT:
+		return true;
+	default:
+		return false;
+	}
+}
+
 static struct igc_mac_operations igc_mac_ops_base = {
 	.init_hw		= igc_init_hw_base,
 	.check_for_link		= igc_check_for_copper_link,
drivers/net/ethernet/intel/igc/igc_base.h +2 -0
index 52849f5e8048..9f3827eda157 100644
@@ -7,6 +7,8 @@
 /* forward declaration */
 void igc_rx_fifo_flush_base(struct igc_hw *hw);
 void igc_power_down_phy_copper_base(struct igc_hw *hw);
+bool igc_is_device_id_i225(struct igc_hw *hw);
+bool igc_is_device_id_i226(struct igc_hw *hw);
 
 /* Transmit Descriptor - Advanced */
 union igc_adv_tx_desc {
drivers/net/ethernet/intel/igc/igc_defines.h +1 -0
index 90ca01889cd8..efdabcbd66dd 100644
@@ -515,6 +515,7 @@
 /* Transmit Scheduling */
 #define IGC_TQAVCTRL_TRANSMIT_MODE_TSN	0x00000001
 #define IGC_TQAVCTRL_ENHANCED_QAV	0x00000008
+#define IGC_TQAVCTRL_FUTSCDDIS		0x00000080
 
 #define IGC_TXQCTL_QUEUE_MODE_LAUNCHT	0x00000001
 #define IGC_TXQCTL_STRICT_CYCLE		0x00000002
drivers/net/ethernet/intel/igc/igc_ethtool.c +1 -0
index 9166fde40c77..e23b95edb05e 100644
@@ -67,6 +67,7 @@ static const struct igc_stats igc_gstrings_stats[] = {
 	IGC_STAT("rx_hwtstamp_cleared", rx_hwtstamp_cleared),
 	IGC_STAT("tx_lpi_counter", stats.tlpic),
 	IGC_STAT("rx_lpi_counter", stats.rlpic),
+	IGC_STAT("qbv_config_change_errors", qbv_config_change_errors),
 };
 
 #define IGC_NETDEV_STAT(_net_stat) { \
drivers/net/ethernet/intel/igc/igc_main.c +15 -5
index 1ac836a55cd3..4b6f882b380d 100644
@@ -1606,9 +1606,10 @@ static netdev_tx_t igc_xmit_frame_ring(struct sk_buff *skb,
 		 * the other timer registers before skipping the
 		 * timestamping request.
 		 */
-		if (adapter->tstamp_config.tx_type == HWTSTAMP_TX_ON &&
-		    !test_and_set_bit_lock(__IGC_PTP_TX_IN_PROGRESS,
-					   &adapter->state)) {
+		unsigned long flags;
+
+		spin_lock_irqsave(&adapter->ptp_tx_lock, flags);
+		if (adapter->tstamp_config.tx_type == HWTSTAMP_TX_ON && !adapter->ptp_tx_skb) {
 			skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
 			tx_flags |= IGC_TX_FLAGS_TSTAMP;
 
@@ -1617,6 +1618,8 @@ static netdev_tx_t igc_xmit_frame_ring(struct sk_buff *skb,
 		} else {
 			adapter->tx_hwtstamp_skipped++;
 		}
+
+		spin_unlock_irqrestore(&adapter->ptp_tx_lock, flags);
 	}
 
 	if (skb_vlan_tag_present(skb)) {
@@ -6035,6 +6038,7 @@ static bool validate_schedule(struct igc_adapter *adapter,
 			      const struct tc_taprio_qopt_offload *qopt)
 {
 	int queue_uses[IGC_MAX_TX_QUEUES] = { };
+	struct igc_hw *hw = &adapter->hw;
 	struct timespec64 now;
 	size_t n;
 
@@ -6047,8 +6051,10 @@ static bool validate_schedule(struct igc_adapter *adapter,
 	 * in the future, it will hold all the packets until that
 	 * time, causing a lot of TX Hangs, so to avoid that, we
 	 * reject schedules that would start in the future.
+	 * Note: Limitation above is no longer in i226.
 	 */
-	if (!is_base_time_past(qopt->base_time, &now))
+	if (!is_base_time_past(qopt->base_time, &now) &&
+	    igc_is_device_id_i225(hw))
 		return false;
 
 	for (n = 0; n < qopt->num_entries; n++) {
@@ -6103,6 +6109,7 @@ static int igc_tsn_clear_schedule(struct igc_adapter *adapter)
 
 	adapter->base_time = 0;
 	adapter->cycle_time = NSEC_PER_SEC;
+	adapter->qbv_config_change_errors = 0;
 
 	for (i = 0; i < adapter->num_tx_queues; i++) {
 		struct igc_ring *ring = adapter->tx_ring[i];
@@ -6118,6 +6125,7 @@ static int igc_save_qbv_schedule(struct igc_adapter *adapter,
 				 struct tc_taprio_qopt_offload *qopt)
 {
 	bool queue_configured[IGC_MAX_TX_QUEUES] = { };
+	struct igc_hw *hw = &adapter->hw;
 	u32 start_time = 0, end_time = 0;
 	size_t n;
 	int i;
@@ -6130,7 +6138,7 @@ static int igc_save_qbv_schedule(struct igc_adapter *adapter,
 	if (qopt->base_time < 0)
 		return -ERANGE;
 
-	if (adapter->base_time)
+	if (igc_is_device_id_i225(hw) && adapter->base_time)
 		return -EALREADY;
 
 	if (!validate_schedule(adapter, qopt))
@@ -6283,6 +6291,8 @@ static int igc_setup_tc(struct net_device *dev, enum tc_setup_type type,
 {
 	struct igc_adapter *adapter = netdev_priv(dev);
 
+	adapter->tc_setup_type = type;
+
 	switch (type) {
 	case TC_SETUP_QDISC_TAPRIO:
 		return igc_tsn_enable_qbv_scheduling(adapter, type_data);
drivers/net/ethernet/intel/igc/igc_ptp.c +31 -26

120 lines not on this page · raw message

drivers/net/ethernet/intel/igc/igc_tsn.c +48 -21

124 lines not on this page · raw message

drivers/net/ethernet/marvell/octeon_ep/octep_main.c +6 -7
index 61354f798503..e171097c1365 100644
@@ -707,20 +707,19 @@ static netdev_tx_t octep_start_xmit(struct sk_buff *skb,
 		hw_desc->dptr = tx_buffer->sglist_dma;
 	}
 
-	/* Flush the hw descriptor before writing to doorbell */
-	wmb();
-
-	/* Ring Doorbell to notify the NIC there is a new packet */
-	writel(1, iq->doorbell_reg);
+	netdev_tx_sent_queue(iq->netdev_q, skb->len);
+	skb_tx_timestamp(skb);
 	atomic_inc(&iq->instr_pending);
 	wi++;
 	if (wi == iq->max_count)
 		wi = 0;
 	iq->host_write_index = wi;
+	/* Flush the hw descriptor before writing to doorbell */
+	wmb();
 
-	netdev_tx_sent_queue(iq->netdev_q, skb->len);
+	/* Ring Doorbell to notify the NIC there is a new packet */
+	writel(1, iq->doorbell_reg);
 	iq->stats.instr_posted++;
-	skb_tx_timestamp(skb);
 	return NETDEV_TX_OK;
 
 dma_map_sg_err:
drivers/net/ethernet/marvell/sky2.h +1 -1
index ddec1627f1a7..8d0bacf4e49c 100644
@@ -2195,7 +2195,7 @@ struct rx_ring_info {
 	struct sk_buff	*skb;
 	dma_addr_t	data_addr;
 	DEFINE_DMA_UNMAP_LEN(data_size);
-	dma_addr_t	frag_addr[ETH_JUMBO_MTU >> PAGE_SHIFT];
+	dma_addr_t	frag_addr[ETH_JUMBO_MTU >> PAGE_SHIFT ?: 1];
 };
 
 enum flow_control {
drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c +1 -1
index c4e40834e3ff..374c0011a127 100644
@@ -821,7 +821,7 @@ static void mlx5_fw_tracer_ownership_change(struct work_struct *work)
 
 	mlx5_core_dbg(tracer->dev, "FWTracer: ownership changed, current=(%d)\n", tracer->owner);
 	if (tracer->owner) {
-		tracer->owner = false;
+		mlx5_fw_tracer_ownership_acquire(tracer);
 		return;
 	}
 
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c +2 -1
index cd15d36b1507..907ad6ffe727 100644
@@ -23,7 +23,8 @@ static int mlx5e_set_int_port_tunnel(struct mlx5e_priv *priv,
 
 	route_dev = dev_get_by_index(dev_net(e->out_dev), e->route_dev_ifindex);
 
-	if (!route_dev || !netif_is_ovs_master(route_dev))
+	if (!route_dev || !netif_is_ovs_master(route_dev) ||
+	    attr->parse_attr->filter_dev == e->out_dev)
 		goto out;
 
 	err = mlx5e_set_fwd_to_int_port_actions(priv, attr, e->route_dev_ifindex,
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c +8 -9
index 4b9d567c8f47..48939c72b592 100644
@@ -969,11 +969,8 @@ const u32 *mlx5_esw_query_functions(struct mlx5_core_dev *dev)
 	return ERR_PTR(err);
 }
 
-static void mlx5_eswitch_event_handlers_register(struct mlx5_eswitch *esw)
+static void mlx5_eswitch_event_handler_register(struct mlx5_eswitch *esw)
 {
-	MLX5_NB_INIT(&esw->nb, eswitch_vport_event, NIC_VPORT_CHANGE);
-	mlx5_eq_notifier_register(esw->dev, &esw->nb);
-
 	if (esw->mode == MLX5_ESWITCH_OFFLOADS && mlx5_eswitch_is_funcs_handler(esw->dev)) {
 		MLX5_NB_INIT(&esw->esw_funcs.nb, mlx5_esw_funcs_changed_handler,
 			     ESW_FUNCTIONS_CHANGED);
@@ -981,13 +978,11 @@ static void mlx5_eswitch_event_handlers_register(struct mlx5_eswitch *esw)
 	}
 }
 
-static void mlx5_eswitch_event_handlers_unregister(struct mlx5_eswitch *esw)
+static void mlx5_eswitch_event_handler_unregister(struct mlx5_eswitch *esw)
 {
 	if (esw->mode == MLX5_ESWITCH_OFFLOADS && mlx5_eswitch_is_funcs_handler(esw->dev))
 		mlx5_eq_notifier_unregister(esw->dev, &esw->esw_funcs.nb);
 
-	mlx5_eq_notifier_unregister(esw->dev, &esw->nb);
-
 	flush_workqueue(esw->work_queue);
 }
 
@@ -1273,6 +1268,9 @@ int mlx5_eswitch_enable_locked(struct mlx5_eswitch *esw, int num_vfs)
 
 	mlx5_eswitch_update_num_of_vfs(esw, num_vfs);
 
+	MLX5_NB_INIT(&esw->nb, eswitch_vport_event, NIC_VPORT_CHANGE);
+	mlx5_eq_notifier_register(esw->dev, &esw->nb);
+
 	if (esw->mode == MLX5_ESWITCH_LEGACY) {
 		err = esw_legacy_enable(esw);
 	} else {
@@ -1285,7 +1283,7 @@ int mlx5_eswitch_enable_locked(struct mlx5_eswitch *esw, int num_vfs)
 
 	esw->fdb_table.flags |= MLX5_ESW_FDB_CREATED;
 
-	mlx5_eswitch_event_handlers_register(esw);
+	mlx5_eswitch_event_handler_register(esw);
 
 	esw_info(esw->dev, "Enable: mode(%s), nvfs(%d), active vports(%d)\n",
 		 esw->mode == MLX5_ESWITCH_LEGACY ? "LEGACY" : "OFFLOADS",
@@ -1394,7 +1392,8 @@ void mlx5_eswitch_disable_locked(struct mlx5_eswitch *esw)
 	 */
 	mlx5_esw_mode_change_notify(esw, MLX5_ESWITCH_LEGACY);
 
-	mlx5_eswitch_event_handlers_unregister(esw);
+	mlx5_eq_notifier_unregister(esw->dev, &esw->nb);
+	mlx5_eswitch_event_handler_unregister(esw);
 
 	esw_info(esw->dev, "Disable: mode(%s), nvfs(%d), active vports(%d)\n",
 		 esw->mode == MLX5_ESWITCH_LEGACY ? "LEGACY" : "OFFLOADS",
drivers/net/ethernet/qlogic/qed/qed_ll2.c +5 -2
index ed274f033626..810df65cdf08 100644
@@ -113,7 +113,10 @@ static void qed_ll2b_complete_tx_packet(void *cxt,
 static int qed_ll2_alloc_buffer(struct qed_dev *cdev,
 				u8 **data, dma_addr_t *phys_addr)
 {
-	*data = kmalloc(cdev->ll2->rx_size, GFP_ATOMIC);
+	size_t size = cdev->ll2->rx_size + NET_SKB_PAD +
+		      SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
+
+	*data = kmalloc(size, GFP_ATOMIC);
 	if (!(*data)) {
 		DP_INFO(cdev, "Failed to allocate LL2 buffer data\n");
 		return -ENOMEM;
@@ -2590,7 +2593,7 @@ static int qed_ll2_start(struct qed_dev *cdev, struct qed_ll2_params *params)
 	INIT_LIST_HEAD(&cdev->ll2->list);
 	spin_lock_init(&cdev->ll2->lock);
 
-	cdev->ll2->rx_size = NET_SKB_PAD + ETH_HLEN +
+	cdev->ll2->rx_size = PRM_DMA_PAD_BYTES_NUM + ETH_HLEN +
 			     L1_CACHE_BYTES + params->mtu;
 
 	/* Allocate memory for LL2.
drivers/net/phy/bcm7xxx.c +3 -0
index 6cebf3aaa621..dc5b27cb48fb 100644
@@ -907,6 +907,9 @@ static void bcm7xxx_28nm_remove(struct phy_device *phydev)
 	.name		= _name,					\
 	/* PHY_BASIC_FEATURES */					\
 	.flags		= PHY_IS_INTERNAL,				\
+	.get_sset_count	= bcm_phy_get_sset_count,			\
+	.get_strings	= bcm_phy_get_strings,				\
+	.get_stats	= bcm7xxx_28nm_get_phy_stats,			\
 	.probe		= bcm7xxx_28nm_probe,				\
 	.remove		= bcm7xxx_28nm_remove,				\
 	.config_init	= bcm7xxx_16nm_ephy_config_init,		\
drivers/net/tun.c +5 -2
index 7544df1ff50e..d373953ddc30 100644
@@ -3056,10 +3056,11 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
 	struct net *net = sock_net(&tfile->sk);
 	struct tun_struct *tun;
 	void __user* argp = (void __user*)arg;
-	unsigned int ifindex, carrier;
+	unsigned int carrier;
 	struct ifreq ifr;
 	kuid_t owner;
 	kgid_t group;
+	int ifindex;
 	int sndbuf;
 	int vnet_hdr_sz;
 	int le;
@@ -3115,7 +3116,9 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
 		ret = -EFAULT;
 		if (copy_from_user(&ifindex, argp, sizeof(ifindex)))
 			goto unlock;
-
+		ret = -EINVAL;
+		if (ifindex < 0)
+			goto unlock;
 		ret = 0;
 		tfile->ifindex = ifindex;
 		goto unlock;
drivers/net/usb/smsc95xx.c +1 -1
index 563ecd27b93e..17da42fe605c 100644
@@ -897,7 +897,7 @@ static int smsc95xx_reset(struct usbnet *dev)
 
 	if (timeout >= 100) {
 		netdev_warn(dev->net, "timeout waiting for completion of Lite Reset\n");
-		return ret;
+		return -ETIMEDOUT;
 	}
 
 	ret = smsc95xx_set_mac_address(dev);
drivers/net/wireless/intel/iwlwifi/mvm/tx.c +3 -0
index 542cfcad6e0e..2d01f6226b7c 100644
@@ -1585,6 +1585,7 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
 		iwl_trans_free_tx_cmd(mvm->trans, info->driver_data[1]);
 
 		memset(&info->status, 0, sizeof(info->status));
+		info->flags &= ~(IEEE80211_TX_STAT_ACK | IEEE80211_TX_STAT_TX_FILTERED);
 
 		/* inform mac80211 about what happened with the frame */
 		switch (status & TX_STATUS_MSK) {
@@ -1936,6 +1937,8 @@ static void iwl_mvm_tx_reclaim(struct iwl_mvm *mvm, int sta_id, int tid,
 		 */
 		if (!is_flush)
 			info->flags |= IEEE80211_TX_STAT_ACK;
+		else
+			info->flags &= ~IEEE80211_TX_STAT_ACK;
 	}
 
 	/*
drivers/net/wireless/marvell/mwifiex/11n_rxreorder.c +16 -0
index 7351acac6932..54ab8b54369b 100644
@@ -921,6 +921,14 @@ void mwifiex_11n_rxba_sync_event(struct mwifiex_private *priv,
 	while (tlv_buf_left >= sizeof(*tlv_rxba)) {
 		tlv_type = le16_to_cpu(tlv_rxba->header.type);
 		tlv_len  = le16_to_cpu(tlv_rxba->header.len);
+		if (size_add(sizeof(tlv_rxba->header), tlv_len) > tlv_buf_left) {
+			mwifiex_dbg(priv->adapter, WARN,
+				    "TLV size (%zu) overflows event_buf buf_left=%d\n",
+				    size_add(sizeof(tlv_rxba->header), tlv_len),
+				    tlv_buf_left);
+			return;
+		}
+
 		if (tlv_type != TLV_TYPE_RXBA_SYNC) {
 			mwifiex_dbg(priv->adapter, ERROR,
 				    "Wrong TLV id=0x%x\n", tlv_type);
@@ -929,6 +937,14 @@ void mwifiex_11n_rxba_sync_event(struct mwifiex_private *priv,
 
 		tlv_seq_num = le16_to_cpu(tlv_rxba->seq_num);
 		tlv_bitmap_len = le16_to_cpu(tlv_rxba->bitmap_len);
+		if (size_add(sizeof(*tlv_rxba), tlv_bitmap_len) > tlv_buf_left) {
+			mwifiex_dbg(priv->adapter, WARN,
+				    "TLV size (%zu) overflows event_buf buf_left=%d\n",
+				    size_add(sizeof(*tlv_rxba), tlv_bitmap_len),
+				    tlv_buf_left);
+			return;
+		}
+
 		mwifiex_dbg(priv->adapter, INFO,
 			    "%pM tid=%d seq_num=%d bitmap_len=%d\n",
 			    tlv_rxba->mac, tlv_rxba->tid, tlv_seq_num,
drivers/nvme/host/ioctl.c +7 -3
index 8224675f8de2..b33004a4bcb5 100644
@@ -32,9 +32,13 @@ static void *nvme_add_user_metadata(struct request *req, void __user *ubuf,
 	if (!buf)
 		goto out;
 
-	ret = -EFAULT;
-	if ((req_op(req) == REQ_OP_DRV_OUT) && copy_from_user(buf, ubuf, len))
-		goto out_free_meta;
+	if (req_op(req) == REQ_OP_DRV_OUT) {
+		ret = -EFAULT;
+		if (copy_from_user(buf, ubuf, len))
+			goto out_free_meta;
+	} else {
+		memset(buf, 0, len);
+	}
 
 	bip = bio_integrity_alloc(bio, GFP_KERNEL, 1);
 	if (IS_ERR(bip)) {
drivers/nvme/host/pci.c +2 -1
index 64990a2cfd0a..886c3fc9578e 100644
@@ -3439,7 +3439,8 @@ static const struct pci_device_id nvme_id_table[] = {
 	{ PCI_VDEVICE(INTEL, 0x0a54),	/* Intel P4500/P4600 */
 		.driver_data = NVME_QUIRK_STRIPE_SIZE |
 				NVME_QUIRK_DEALLOCATE_ZEROES |
-				NVME_QUIRK_IGNORE_DEV_SUBNQN, },
+				NVME_QUIRK_IGNORE_DEV_SUBNQN |
+				NVME_QUIRK_BOGUS_NID, },
 	{ PCI_VDEVICE(INTEL, 0x0a55),	/* Dell Express Flash P4600 */
 		.driver_data = NVME_QUIRK_STRIPE_SIZE |
 				NVME_QUIRK_DEALLOCATE_ZEROES, },
drivers/nvme/host/rdma.c +3 -0
index c478480f54aa..aa1734e2fd44 100644
@@ -643,6 +643,9 @@ static void __nvme_rdma_stop_queue(struct nvme_rdma_queue *queue)
 
 static void nvme_rdma_stop_queue(struct nvme_rdma_queue *queue)
 {
+	if (!test_bit(NVME_RDMA_Q_ALLOCATED, &queue->flags))
+		return;
+
 	mutex_lock(&queue->queue_lock);
 	if (test_and_clear_bit(NVME_RDMA_Q_LIVE, &queue->flags))
 		__nvme_rdma_stop_queue(queue);
drivers/nvme/target/fabrics-cmd-auth.c +6 -3
index 7970a7640e58..fbae76cdc254 100644
@@ -337,19 +337,21 @@ void nvmet_execute_auth_send(struct nvmet_req *req)
 			 __func__, ctrl->cntlid, req->sq->qid,
 			 status, req->error_loc);
 	req->cqe->result.u64 = 0;
-	nvmet_req_complete(req, status);
 	if (req->sq->dhchap_step != NVME_AUTH_DHCHAP_MESSAGE_SUCCESS2 &&
 	    req->sq->dhchap_step != NVME_AUTH_DHCHAP_MESSAGE_FAILURE2) {
 		unsigned long auth_expire_secs = ctrl->kato ? ctrl->kato : 120;
 
 		mod_delayed_work(system_wq, &req->sq->auth_expired_work,
 				 auth_expire_secs * HZ);
-		return;
+		goto complete;
 	}
 	/* Final states, clear up variables */
 	nvmet_auth_sq_free(req->sq);
 	if (req->sq->dhchap_step == NVME_AUTH_DHCHAP_MESSAGE_FAILURE2)
 		nvmet_ctrl_fatal_error(ctrl);
+
+complete:
+	nvmet_req_complete(req, status);
 }
 
 static int nvmet_auth_challenge(struct nvmet_req *req, void *d, int al)
@@ -527,11 +529,12 @@ void nvmet_execute_auth_receive(struct nvmet_req *req)
 	kfree(d);
 done:
 	req->cqe->result.u64 = 0;
-	nvmet_req_complete(req, status);
+
 	if (req->sq->dhchap_step == NVME_AUTH_DHCHAP_MESSAGE_SUCCESS2)
 		nvmet_auth_sq_free(req->sq);
 	else if (req->sq->dhchap_step == NVME_AUTH_DHCHAP_MESSAGE_FAILURE1) {
 		nvmet_auth_sq_free(req->sq);
 		nvmet_ctrl_fatal_error(ctrl);
 	}
+	nvmet_req_complete(req, status);
 }
drivers/nvme/target/tcp.c +2 -5
index 5e29da94f72d..355d80323b83 100644
@@ -345,6 +345,7 @@ static void nvmet_tcp_fatal_error(struct nvmet_tcp_queue *queue)
 
 static void nvmet_tcp_socket_error(struct nvmet_tcp_queue *queue, int status)
 {
+	queue->rcv_state = NVMET_TCP_RECV_ERR;
 	if (status == -EPIPE || status == -ECONNRESET)
 		kernel_sock_shutdown(queue->sock, SHUT_RDWR);
 	else
@@ -871,15 +872,11 @@ static int nvmet_tcp_handle_icreq(struct nvmet_tcp_queue *queue)
 	iov.iov_len = sizeof(*icresp);
 	ret = kernel_sendmsg(queue->sock, &msg, &iov, 1, iov.iov_len);
 	if (ret < 0)
-		goto free_crypto;
+		return ret; /* queue removal will cleanup */
 
 	queue->state = NVMET_TCP_Q_LIVE;
 	nvmet_prepare_receive_pdu(queue);
 	return 0;
-free_crypto:
-	if (queue->hdr_digest || queue->data_digest)
-		nvmet_tcp_free_crypto(queue);
-	return ret;
 }
 
 static void nvmet_tcp_handle_req_failure(struct nvmet_tcp_queue *queue,
drivers/phy/motorola/phy-mapphone-mdm6600.c +18 -20
index 3cd4d51c247c..67802f9e40ba 100644
@@ -122,16 +122,10 @@ static int phy_mdm6600_power_on(struct phy *x)
 {
 	struct phy_mdm6600 *ddata = phy_get_drvdata(x);
 	struct gpio_desc *enable_gpio = ddata->ctrl_gpios[PHY_MDM6600_ENABLE];
-	int error;
 
 	if (!ddata->enabled)
 		return -ENODEV;
 
-	error = pinctrl_pm_select_default_state(ddata->dev);
-	if (error)
-		dev_warn(ddata->dev, "%s: error with default_state: %i\n",
-			 __func__, error);
-
 	gpiod_set_value_cansleep(enable_gpio, 1);
 
 	/* Allow aggressive PM for USB, it's only needed for n_gsm port */
@@ -160,11 +154,6 @@ static int phy_mdm6600_power_off(struct phy *x)
 
 	gpiod_set_value_cansleep(enable_gpio, 0);
 
-	error = pinctrl_pm_select_sleep_state(ddata->dev);
-	if (error)
-		dev_warn(ddata->dev, "%s: error with sleep_state: %i\n",
-			 __func__, error);
-
 	return 0;
 }
 
@@ -456,6 +445,7 @@ static void phy_mdm6600_device_power_off(struct phy_mdm6600 *ddata)
 {
 	struct gpio_desc *reset_gpio =
 		ddata->ctrl_gpios[PHY_MDM6600_RESET];
+	int error;
 
 	ddata->enabled = false;
 	phy_mdm6600_cmd(ddata, PHY_MDM6600_CMD_BP_SHUTDOWN_REQ);
@@ -471,6 +461,17 @@ static void phy_mdm6600_device_power_off(struct phy_mdm6600 *ddata)
 	} else {
 		dev_err(ddata->dev, "Timed out powering down\n");
 	}
+
+	/*
+	 * Keep reset gpio high with padconf internal pull-up resistor to
+	 * prevent modem from waking up during deeper SoC idle states. The
+	 * gpio bank lines can have glitches if not in the always-on wkup
+	 * domain.
+	 */
+	error = pinctrl_pm_select_sleep_state(ddata->dev);
+	if (error)
+		dev_warn(ddata->dev, "%s: error with sleep_state: %i\n",
+			 __func__, error);
 }
 
 static void phy_mdm6600_deferred_power_on(struct work_struct *work)
@@ -571,12 +572,6 @@ static int phy_mdm6600_probe(struct platform_device *pdev)
 	ddata->dev = &pdev->dev;
 	platform_set_drvdata(pdev, ddata);
 
-	/* Active state selected in phy_mdm6600_power_on() */
-	error = pinctrl_pm_select_sleep_state(ddata->dev);
-	if (error)
-		dev_warn(ddata->dev, "%s: error with sleep_state: %i\n",
-			 __func__, error);
-
 	error = phy_mdm6600_init_lines(ddata);
 	if (error)
 		return error;
@@ -627,10 +622,12 @@ static int phy_mdm6600_probe(struct platform_device *pdev)
 	pm_runtime_put_autosuspend(ddata->dev);
 
 cleanup:
-	if (error < 0)
+	if (error < 0) {
 		phy_mdm6600_device_power_off(ddata);
-	pm_runtime_disable(ddata->dev);
-	pm_runtime_dont_use_autosuspend(ddata->dev);
+		pm_runtime_disable(ddata->dev);
+		pm_runtime_dont_use_autosuspend(ddata->dev);
+	}
+
 	return error;
 }
 
@@ -639,6 +636,7 @@ static int phy_mdm6600_remove(struct platform_device *pdev)
 	struct phy_mdm6600 *ddata = platform_get_drvdata(pdev);
 	struct gpio_desc *reset_gpio = ddata->ctrl_gpios[PHY_MDM6600_RESET];
 
+	pm_runtime_get_noresume(ddata->dev);
 	pm_runtime_dont_use_autosuspend(ddata->dev);
 	pm_runtime_put_sync(ddata->dev);
 	pm_runtime_disable(ddata->dev);
drivers/pinctrl/core.c +7 -9
index 27e41873c04f..9e57f4c62e60 100644
@@ -1007,20 +1007,17 @@ static int add_setting(struct pinctrl *p, struct pinctrl_dev *pctldev,
 
 static struct pinctrl *find_pinctrl(struct device *dev)
 {
-	struct pinctrl *entry, *p = NULL;
+	struct pinctrl *p;
 
 	mutex_lock(&pinctrl_list_mutex);
-
-	list_for_each_entry(entry, &pinctrl_list, node) {
-		if (entry->dev == dev) {
-			p = entry;
-			kref_get(&p->users);
-			break;
+	list_for_each_entry(p, &pinctrl_list, node)
+		if (p->dev == dev) {
+			mutex_unlock(&pinctrl_list_mutex);
+			return p;
 		}
-	}
 
 	mutex_unlock(&pinctrl_list_mutex);
-	return p;
+	return NULL;
 }
 
 static void pinctrl_free(struct pinctrl *p, bool inlist);
@@ -1129,6 +1126,7 @@ struct pinctrl *pinctrl_get(struct device *dev)
 	p = find_pinctrl(dev);
 	if (p) {
 		dev_dbg(dev, "obtain a copy of previously claimed pinctrl\n");
+		kref_get(&p->users);
 		return p;
 	}
 
drivers/platform/surface/surface_platform_profile.c +1 -2
index fbf2e11fd6ce..37c761f57714 100644
@@ -159,8 +159,7 @@ static int surface_platform_profile_probe(struct ssam_device *sdev)
 	set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, tpd->handler.choices);
 	set_bit(PLATFORM_PROFILE_PERFORMANCE, tpd->handler.choices);
 
-	platform_profile_register(&tpd->handler);
-	return 0;
+	return platform_profile_register(&tpd->handler);
 }
 
 static void surface_platform_profile_remove(struct ssam_device *sdev)
drivers/platform/x86/asus-nb-wmi.c +3 -0
index d85d895fee89..df1db54d4e18 100644
@@ -531,6 +531,9 @@ static void asus_nb_wmi_quirks(struct asus_wmi_driver *driver)
 static const struct key_entry asus_nb_wmi_keymap[] = {
 	{ KE_KEY, ASUS_WMI_BRN_DOWN, { KEY_BRIGHTNESSDOWN } },
 	{ KE_KEY, ASUS_WMI_BRN_UP, { KEY_BRIGHTNESSUP } },
+	{ KE_KEY, 0x2a, { KEY_SELECTIVE_SCREENSHOT } },
+	{ KE_IGNORE, 0x2b, }, /* PrintScreen (also send via PS/2) on newer models */
+	{ KE_IGNORE, 0x2c, }, /* CapsLock (also send via PS/2) on newer models */
 	{ KE_KEY, 0x30, { KEY_VOLUMEUP } },
 	{ KE_KEY, 0x31, { KEY_VOLUMEDOWN } },
 	{ KE_KEY, 0x32, { KEY_MUTE } },
drivers/platform/x86/asus-wmi.c +4 -11
index 36effe04c6f3..49dd55b8e8fa 100644
@@ -3268,7 +3268,6 @@ static void asus_wmi_handle_event_code(int code, struct asus_wmi *asus)
 {
 	unsigned int key_value = 1;
 	bool autorelease = 1;
-	int orig_code = code;
 
 	if (asus->driver->key_filter) {
 		asus->driver->key_filter(asus->driver, &code, &key_value,
@@ -3277,16 +3276,10 @@ static void asus_wmi_handle_event_code(int code, struct asus_wmi *asus)
 			return;
 	}
 
-	if (code >= NOTIFY_BRNUP_MIN && code <= NOTIFY_BRNUP_MAX)
-		code = ASUS_WMI_BRN_UP;
-	else if (code >= NOTIFY_BRNDOWN_MIN && code <= NOTIFY_BRNDOWN_MAX)
-		code = ASUS_WMI_BRN_DOWN;
-
-	if (code == ASUS_WMI_BRN_DOWN || code == ASUS_WMI_BRN_UP) {
-		if (acpi_video_get_backlight_type() == acpi_backlight_vendor) {
-			asus_wmi_backlight_notify(asus, orig_code);
-			return;
-		}
+	if (acpi_video_get_backlight_type() == acpi_backlight_vendor &&
+	    code >= NOTIFY_BRNUP_MIN && code <= NOTIFY_BRNDOWN_MAX) {
+		asus_wmi_backlight_notify(asus, code);
+		return;
 	}
 
 	if (code == NOTIFY_KBD_BRTUP) {
drivers/platform/x86/asus-wmi.h +1 -1
index a478ebfd34df..fc41d1b1bb7f 100644
@@ -18,7 +18,7 @@
 #include <linux/i8042.h>
 
 #define ASUS_WMI_KEY_IGNORE (-1)
-#define ASUS_WMI_BRN_DOWN	0x20
+#define ASUS_WMI_BRN_DOWN	0x2e
 #define ASUS_WMI_BRN_UP		0x2f
 
 struct module;
drivers/platform/x86/intel/uncore-frequency/uncore-frequency-common.c +6 -2
index fa8f14c925ec..9b12fe8e95c9 100644
@@ -153,7 +153,7 @@ show_uncore_data(initial_max_freq_khz);
 
 static int create_attr_group(struct uncore_data *data, char *name)
 {
-	int ret, index = 0;
+	int ret, freq, index = 0;
 
 	init_attribute_rw(max_freq_khz);
 	init_attribute_rw(min_freq_khz);
@@ -165,7 +165,11 @@ static int create_attr_group(struct uncore_data *data, char *name)
 	data->uncore_attrs[index++] = &data->min_freq_khz_dev_attr.attr;
 	data->uncore_attrs[index++] = &data->initial_min_freq_khz_dev_attr.attr;
 	data->uncore_attrs[index++] = &data->initial_max_freq_khz_dev_attr.attr;
-	data->uncore_attrs[index++] = &data->current_freq_khz_dev_attr.attr;
+
+	ret = uncore_read_freq(data, &freq);
+	if (!ret)
+		data->uncore_attrs[index++] = &data->current_freq_khz_dev_attr.attr;
+
 	data->uncore_attrs[index] = NULL;
 
 	data->uncore_attr_group.name = name;
drivers/platform/x86/touchscreen_dmi.c +23 -0
index 68e66b60445c..9a92d515abb9 100644
@@ -740,6 +740,21 @@ static const struct ts_dmi_data pipo_w11_data = {
 	.properties	= pipo_w11_props,
 };
 
+static const struct property_entry positivo_c4128b_props[] = {
[… more lines in the raw message]

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

drivers/power/reset/Kconfig +1 -1
index a8c46ba5878f..54201f037410 100644

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

drivers/regulator/core.c +1 -5
index f6a95f72af18..34d3d8281906 100644

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

drivers/s390/cio/css.c +4 -2
index c7db95398500..98a14c1f3d67 100644

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

drivers/tty/serial/8250/8250_omap.c +52 -58

110 lines not on this page · raw message

drivers/tty/serial/serial_core.c +59 -56

115 lines not on this page · raw message

drivers/usb/misc/onboard_usb_hub.c +5 -0
index 832d3ba9368f..8edd0375e0a8 100644

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

drivers/usb/misc/onboard_usb_hub.h +12 -0
index 2cde54b69eed..d023fb90b411 100644

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

drivers/usb/serial/option.c +7 -0
index f13930b4534c..b9dd714a3ae6 100644

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

fs/btrfs/ctree.c +39 -13

52 lines not on this page · raw message

fs/btrfs/delayed-ref.c +1 -8
index 36a3debe9493..e08e3852c478 100644

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

fs/btrfs/delayed-ref.h +0 -1
index d6304b690ec4..712a6315e956 100644

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

fs/btrfs/extent-tree.c +3 -3
index 08ff10a81cb9..2a7c9088fe1f 100644

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

fs/btrfs/ioctl.c +2 -2
index 9e323420c96d..9474265ee7ea 100644

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

fs/btrfs/transaction.c +3 -3
index 1193214ba8c1..60db4c3b82fa 100644

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

fs/btrfs/tree-log.c +1 -1
index c03ff6a5a7f6..7c33b28c02ae 100644

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

fs/btrfs/volumes.c +1 -1
index a40ebd2321d0..e62b4c139a72 100644

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

fs/fs-writeback.c +8 -3
index d387708977a5..a5c31a479aac 100644

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

fs/namei.c +5 -4
index 4248647f1ab2..5e1c2ab2ae70 100644

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

fs/nfs/flexfilelayout/flexfilelayout.c +10 -7
index 5c69a6e9ab3e..81bbafab18a9 100644

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

fs/nfs/nfs42proc.c +2 -1
index d903ea10410c..5a8fe0e57a3d 100644

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

fs/nfs/nfs4proc.c +0 -2
index e1297c6bcfbe..5cf53def987e 100644

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

fs/nfs/pnfs.c +23 -10
index a5db5158c634..1ffb1068216b 100644

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

fs/ntfs3/fsntfs.c +5 -1
index 829b62d3bb88..9c0fc3a29d0c 100644

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

fs/ntfs3/index.c +3 -0
index 495cfb37962f..b89a33f5761e 100644

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

fs/ntfs3/xattr.c +6 -1
index f5d3092f478c..df15e00c2a3a 100644

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

fs/overlayfs/copy_up.c +1 -1
index e6d711f42607..86d4b6975dbc 100644

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

include/linux/fprobe.h +8 -2
index 1c2bde0ead73..678f741a7b33 100644

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

include/linux/fs.h +1 -1
index 26ea1a0a59a1..dc745317e1bd 100644

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

include/linux/hid.h +2 -0
index 784dd6b6046e..58f5ab29c11a 100644

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

include/linux/iio/iio.h +2 -0
index f0ec8a5e5a7a..9d3bd6379eb8 100644

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

include/linux/kallsyms.h +8 -0
index 649faac31ddb..0cd33be7142a 100644

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

include/linux/perf_event.h +1 -0
index 63fae3c7ae43..1578a4de1f3c 100644

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

include/net/bluetooth/hci_core.h +1 -1
index ddbcbf9ccb2c..583aebd8c1e0 100644

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

include/net/bluetooth/hci_mon.h +1 -1
index 2d5fcda1bcd0..082f89531b88 100644

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

include/net/ip_fib.h +1 -0
index f0c13864180e..15de07d36540 100644

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

include/net/netns/xfrm.h +1 -0
index bd7c3be4af5d..423b52eca908 100644

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

include/net/sock.h +4 -6
index fe695e8bfe28..a1fcbb2a8a2c 100644

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

include/net/tcp.h +3 -0
index 9ebb54122bb7..548c75c8a34c 100644

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

include/trace/events/neigh.h +2 -2
index 5eaa1fa99171..833143d0992e 100644

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

kernel/auditsc.c +4 -4
index a2240f54fc22..c5f41fc75d54 100644

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

kernel/events/core.c +33 -6
index db1065daabb6..2b8315a948a2 100644

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

kernel/kallsyms.c +32 -4
index ad3cccb0970f..824bcc7b5dbc 100644

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

kernel/kallsyms_internal.h +1 -1
index a04b7a5cb1e3..27fabdcc40f5 100644

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

kernel/sched/cpufreq_schedutil.c +2 -1
index 1207c78f85c1..853a07618a3c 100644

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

kernel/trace/bpf_trace.c +1 -1
index 8c77c54e6348..f4a494a457c5 100644

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

kernel/trace/fprobe.c +21 -11
index 1322247ce648..f386d6bd8e0e 100644

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

kernel/trace/trace_events.c +1 -0
index 9da418442a06..2e3dce5e2575 100644

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

kernel/trace/trace_kprobe.c +63 -0

63 lines not on this page · raw message

kernel/trace/trace_probe.h +1 -0
index f41c330bd60f..f48b3ed20b09 100644

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

lib/Kconfig.debug +4 -1
index 12dfe6691dd5..4db0199651f5 100644

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

lib/test_fprobe.c +4 -2
index e0381b3ec410..34fa5a5bbda1 100644

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

net/bluetooth/hci_conn.c +44 -28

72 lines not on this page · raw message

net/bluetooth/hci_core.c +5 -3
index d13b498f148c..6a1db678d032 100644

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

net/bluetooth/hci_event.c +27 -6
index e4d8857716eb..c86a45344fe2 100644

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

net/bluetooth/hci_sock.c +2 -1
index 1d249d839819..484fc2a8e4ba 100644

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

net/core/dev.c +50 -15

65 lines not on this page · raw message

net/core/dev.h +3 -0
index cbb8a925175a..9ca91457c197 100644

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

net/core/pktgen.c +7 -7
index c3763056c554..471d4effa8b4 100644

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

net/core/rtnetlink.c +1 -3
index 9d4507aa736b..854b3fd66b1b 100644

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

net/core/stream.c +7 -5
index 5b05b889d31a..051aa71a8ad0 100644

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

net/ipv4/af_inet.c +8 -2
index 04853c83c85c..5d379df90c82 100644

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

net/ipv4/esp4.c +3 -1
index 2d094d417eca..e2546961add3 100644

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

net/ipv4/fib_semantics.c +10 -5
index eafa4a033515..5eb1b8d302bb 100644

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

net/ipv4/fib_trie.c +4 -0
index d13fb9e76b97..9bdfdab906fe 100644

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

net/ipv4/inet_connection_sock.c +0 -1
index 62a3b103f258..80ce0112e24b 100644

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

net/ipv4/inet_hashtables.c +9 -15
index d79de4b95186..62d9472ac8bc 100644

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

net/ipv4/tcp.c +8 -8
index 96fdde6e42b1..288678f17cca 100644

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

net/ipv4/tcp_bpf.c +12 -0
index f53380fd89bc..f8037d142bb7 100644

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

net/ipv4/tcp_ipv4.c +1 -0
index 5df19f93f86a..7ebbbe561e40 100644

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

net/ipv4/tcp_output.c +19 -6
index 443b1cab2529..cc7ed86fb0a5 100644

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

net/ipv4/tcp_recovery.c +1 -1
index 50abaa941387..c08579369110 100644

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

net/ipv6/esp6.c +3 -1
index 14ed868680c6..c2dcb5c613b6 100644

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

net/ipv6/xfrm6_policy.c +2 -2
index ea435eba3053..f0053087d2e4 100644

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

net/mac80211/cfg.c +2 -1
index 0167413d5697..ee9f455bb2d1 100644

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

net/mac80211/ibss.c +1 -1
index 9dffc3079588..79d2c5505289 100644

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

net/mac80211/ieee80211_i.h +1 -0
index 27479bbb093a..99a976ea1749 100644

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

net/mac80211/mesh_plink.c +1 -1
index ddfe5102b9a4..bd0b7c189adf 100644

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

net/mac80211/mlme.c +25 -2
index dc9e7eb7dd85..c07645c999f9 100644

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

net/mac80211/tx.c +2 -1
index 2f9e1abdf375..2db103a56a28 100644

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

net/mac80211/vht.c +14 -2
index 803de5881485..f7526be8a1c7 100644

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

net/mptcp/protocol.c +23 -20

43 lines not on this page · raw message

net/netfilter/nft_payload.c +1 -1
index d7de2ecb287e..f44f2eaf3217 100644

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

net/netfilter/nft_set_rbtree.c +2 -0
index 2660ceab3759..e34662f4a71e 100644

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

net/nfc/nci/spi.c +2 -0
index 0935527d1d12..b68150c971d0 100644

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

net/rfkill/rfkill-gpio.c +2 -2
index f5afc9bcdee6..2cc95c8dc4c7 100644

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

net/sched/sch_hfsc.c +14 -4
index 61d52594ff6d..54dddc2ff502 100644

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

net/smc/af_smc.c +3 -2
index f774d840759d..4ea41d6e3696 100644

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

net/smc/smc_ib.c +4 -3
index 854772dd52fd..ace861173532 100644

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

net/smc/smc_ib.h +1 -1
index 034295676e88..ebcb05ede7f5 100644

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

net/tls/tls_main.c +7 -3
index f2e7302a4d96..338a443fa47b 100644

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

net/tls/tls_sw.c +35 -22

57 lines not on this page · raw message

net/wireless/core.c +1 -1
index 2c7960467206..bf2f1f583fb1 100644

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

net/wireless/nl80211.c +1 -1
index 1d993a490ac4..b19b5acfaf3a 100644

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

net/wireless/scan.c +4 -0
index e5c1510c098f..b7e1631b3d80 100644

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

net/xfrm/xfrm_interface_core.c +10 -12
index d71dbe822096..85501b77f4e3 100644

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

net/xfrm/xfrm_policy.c +12 -9
index e65de78cb61b..e47c670c7e2c 100644

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

samples/fprobe/fprobe_example.c +4 -2
index e22da8573116..dd794990ad7e 100644

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

scripts/kallsyms.c +4 -1
index 80aab2aa7224..ff8cce175784 100644

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

sound/pci/hda/patch_realtek.c +27 -0
index 14e70e2f9c88..0163d4c7fdda 100644

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

sound/soc/codecs/wcd938x-sdw.c +26 -1
index 9c10200ff34b..5b5b7c267a61 100644

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

sound/soc/codecs/wcd938x.c +35 -15

50 lines not on this page · raw message

sound/soc/pxa/pxa-ssp.c +1 -1
index 430dd446321e..452f0caf415b 100644

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

tools/testing/selftests/ftrace/test.d/kprobe/kprobe_non_uniq_symbol.tc new file +13 -0
new file mode 100644
index 000000000000..bc9514428dba

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

tools/testing/selftests/net/mptcp/mptcp_join.sh +19 -2
index 7b20878a1af5..ea6fc59e9f62 100755

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

tools/testing/selftests/net/openvswitch/openvswitch.sh +3 -1
index 7ce46700a3ae..52054a09d575 100755

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

tools/testing/selftests/net/openvswitch/ovs-dpctl.py +9 -1
index 5d467d1993cb..e787a1f967b0 100644

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

tools/testing/selftests/netfilter/nft_audit.sh +6 -0
index bb34329e02a7..5267c88496d5 100755

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

tools/testing/selftests/vm/charge_reserved_hugetlb.sh +2 -2
index a5cb4b09a46c..0899019a7fcb 100644

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

tools/testing/selftests/vm/hugetlb_reparenting_test.sh +2 -2
index bf2d2a684edf..14d26075c863 100644

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.