Linux 6.5.9
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.5.9 kernel.
All users of the 6.5 kernel series must upgrade.
The updated 6.5.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.5.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 Documentation/networking/representors.rst | 8 Documentation/rust/general-information.rst | 2 Documentation/rust/index.rst | 8 Makefile | 4 arch/arm/boot/dts/ti/omap/motorola-mapphone-common.dtsi | 1 arch/arm64/boot/dts/mediatek/mt8195.dtsi | 10 arch/powerpc/Kconfig | 2 arch/powerpc/lib/qspinlock.c | 3 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/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/pmu.h | 6 arch/x86/kvm/svm/avic.c | 5 arch/x86/kvm/svm/nested.c | 3 arch/x86/kvm/svm/pmu.c | 2 arch/x86/kvm/svm/svm.c | 3 arch/x86/kvm/vmx/pmu_intel.c | 4 arch/x86/kvm/x86.c | 37 +- crypto/asymmetric_keys/public_key.c | 5 drivers/accel/ivpu/ivpu_drv.c | 2 drivers/accel/ivpu/ivpu_fw.c | 9 drivers/accel/ivpu/ivpu_gem.h | 5 drivers/acpi/bus.c | 2 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/firmware/efi/unaccepted_memory.c | 64 +++ drivers/gpio/gpio-timberdale.c | 5 drivers/gpio/gpio-vf610.c | 7 drivers/gpio/gpiolib-acpi.c | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 3 drivers/gpu/drm/amd/pm/amdgpu_pm.c | 1 drivers/gpu/drm/bridge/ti-sn65dsi86.c | 14 drivers/gpu/drm/drm_edid.c | 3 drivers/gpu/drm/drm_panel_orientation_quirks.c | 16 drivers/gpu/drm/i915/display/intel_cx0_phy.c | 3 drivers/gpu/drm/i915/gem/i915_gem_mman.c | 1 drivers/gpu/drm/mediatek/mtk_drm_gem.c | 6 drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.c | 14 drivers/hid/hid-holtek-kbd.c | 4 drivers/hid/hid-ids.h | 1 drivers/hid/hid-input.c | 2 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/light/vcnl4000.c | 1 drivers/mmc/core/block.c | 31 + 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/nand_base.c | 3 drivers/mtd/nand/raw/nand_jedec.c | 3 drivers/mtd/nand/raw/nand_onfi.c | 3 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/google/gve/gve_rx.c | 18 - 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/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/en/xdp.c | 8 drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 10 drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 35 +- drivers/net/ethernet/mellanox/mlx5/core/en_stats.h | 11 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 5 drivers/net/ethernet/mellanox/mlx5/core/eswitch.c | 17 drivers/net/ethernet/qlogic/qed/qed_ll2.c | 7 drivers/net/mdio/mdio-mux.c | 47 ++ 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/net/wwan/iosm/iosm_ipc_imem.c | 17 drivers/net/wwan/iosm/iosm_ipc_imem.h | 2 drivers/net/wwan/iosm/iosm_ipc_pcie.c | 4 drivers/net/wwan/iosm/iosm_ipc_port.c | 17 drivers/net/wwan/iosm/iosm_ipc_trace.c | 8 drivers/net/wwan/iosm/iosm_ipc_wwan.c | 21 - drivers/nvme/host/auth.c | 4 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/phy/qualcomm/phy-qcom-qmp-combo.c | 6 drivers/phy/qualcomm/phy-qcom-qmp-pcs-usb-v6.h | 3 drivers/phy/qualcomm/phy-qcom-qmp-usb.c | 24 + drivers/pinctrl/core.c | 16 drivers/pinctrl/qcom/pinctrl-lpass-lpi.c | 17 drivers/platform/surface/surface_platform_profile.c | 3 drivers/platform/x86/apple-gmux.c | 14 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/msi-ec.c | 3 drivers/platform/x86/touchscreen_dmi.c | 45 ++ drivers/power/reset/Kconfig | 2 drivers/regulator/core.c | 6 drivers/s390/cio/css.c | 6 drivers/thunderbolt/tb.c | 10 drivers/usb/serial/option.c | 7 fs/btrfs/ctree.c | 52 ++ fs/btrfs/delayed-ref.c | 46 ++ 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/nfs/write.c | 4 fs/notify/fanotify/fanotify_user.c | 25 - fs/ntfs3/fsntfs.c | 6 fs/ntfs3/index.c | 3 fs/ntfs3/ntfs_fs.h | 2 fs/ntfs3/super.c | 31 + fs/ntfs3/xattr.c | 7 fs/overlayfs/copy_up.c | 2 include/linux/fs.h | 2 include/linux/mtd/jedec.h | 3 include/linux/mtd/onfi.h | 1 include/linux/mtd/rawnand.h | 2 include/linux/perf_event.h | 1 include/linux/virtio_net.h | 19 - include/net/bluetooth/hci_core.h | 3 include/net/bluetooth/hci_mon.h | 2 include/net/bluetooth/hci_sync.h | 3 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 io_uring/io-wq.c | 10 io_uring/io_uring.c | 6 kernel/auditsc.c | 8 kernel/events/core.c | 39 +- kernel/sched/cpufreq_schedutil.c | 3 kernel/trace/fprobe.c | 6 kernel/trace/trace_events.c | 1 kernel/trace/trace_kprobe.c | 63 +++ kernel/trace/trace_probe.h | 1 mm/slab_common.c | 6 net/bluetooth/hci_conn.c | 135 +++++-- net/bluetooth/hci_core.c | 8 net/bluetooth/hci_event.c | 77 ++-- net/bluetooth/hci_sock.c | 3 net/bluetooth/hci_sync.c | 70 ++-- net/bluetooth/iso.c | 14 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/nf_tables_api.c | 20 - net/netfilter/nft_inner.c | 1 net/netfilter/nft_payload.c | 2 net/netfilter/nft_set_rbtree.c | 2 net/nfc/nci/spi.c | 2 net/rfkill/core.c | 37 +- net/rfkill/rfkill-gpio.c | 4 net/sched/sch_hfsc.c | 18 - net/smc/af_smc.c | 2 net/sunrpc/auth.c | 11 net/sunrpc/auth_tls.c | 4 net/sunrpc/clnt.c | 10 net/sunrpc/xprtsock.c | 6 net/tls/tls_main.c | 10 net/tls/tls_sw.c | 57 ++- net/wireless/core.c | 2 net/wireless/nl80211.c | 21 + net/wireless/scan.c | 4 net/xfrm/xfrm_interface_core.c | 22 - net/xfrm/xfrm_policy.c | 27 - rust/Makefile | 24 - rust/kernel/error.rs | 2 sound/pci/hda/patch_realtek.c | 27 + sound/soc/codecs/cs35l56.c | 2 sound/soc/codecs/cs42l42-sdw.c | 1 sound/soc/codecs/wcd938x-sdw.c | 27 + sound/soc/codecs/wcd938x.c | 76 +++- sound/soc/pxa/pxa-ssp.c | 2 tools/perf/util/dlfilter.c | 32 - 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 | 14 tools/testing/selftests/netfilter/nft_audit.sh | 6 240 files changed, 2166 insertions(+), 912 deletions(-)
Aaron Conole (3):
selftests: openvswitch: Catch cases where the tests are killed
selftests: openvswitch: Fix the ct_tuple for v4
selftests: openvswitch: Add version check for pyroute2
Aditya Kumar Singh (1):
wifi: cfg80211: validate AP phy operation before starting it
Adrian Hunter (1):
perf dlfilter: Fix use of addr_location__exit() in dlfilter__object_code()
Adrien Thierry (2):
phy: qcom-qmp-usb: initialize PCS_USB registers
phy: qcom-qmp-usb: split PCS_USB init table for sc8280xp and sa8775p
Amir Goldstein (1):
fanotify: limit reporting of event with non-decodeable file handles
Amir Tzin (1):
net/mlx5e: Fix VF representors reporting zero counters to "ip -s" command
Andy Shevchenko (2):
Revert "pinctrl: avoid unsafe code pattern in find_pinctrl()"
gpiolib: acpi: Add missing memset(0) to acpi_get_gpiod_from_data()
Anna Schumaker (1):
SUNRPC/TLS: Lock the lower_xprt during the tls handshake
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 (1):
Bluetooth: avoid memcmp() out of bounds warning
Artem Borisov (1):
ALSA: hda/realtek: Add quirk for ASUS ROG GU603ZV
Avri Altman (1):
mmc: core: Capture correct oemid-bits for eMMC cards
Bagas Sanjaya (1):
Revert "net: wwan: iosm: enable runtime pm support for 7560"
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
Borislav Petkov (AMD) (1):
x86/sev: Disable MMIO emulation from user mode
Carlos Bilbao (1):
docs: Move rustdoc output, cross-reference it
Catalin Marinas (1):
mm: slab: Do not create kmalloc caches smaller than arch_slab_minalign()
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
Chuck Lever (1):
SUNRPC: Fail quickly when server does not recognize TLS
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
Dragos Tatulea (3):
net/mlx5e: RX, Fix page_pool allocation failure recovery for striding rq net/mlx5e: RX, Fix page_pool allocation failure recovery for legacy rq net/mlx5e: XDP, Fix XDP_REDIRECT mpwqe page fragment leaks on shutdown
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
Fabian Vogt (1):
HID: Add quirk to ignore the touchscreen battery on HP ENVY 15-eu0556ng
Fabio Porcedda (1):
USB: serial: option: add Telit LE910C4-WWX 0x1035 composition
Felix Kuehling (1):
drm/amdgpu: Fix possible null pointer dereference
Filipe Manana (6):
btrfs: fix race when refilling delayed refs block reserve
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):
tracing/kprobes: Return EADDRNOTAVAIL when func matches several symbols selftests/ftrace: Add new test case which checks non unique symbol
Gavrilov Ilia (1):
net: pktgen: Fix interface flags printing
Geert Uytterhoeven (2):
neighbor: tracing: Move pin6 inside CONFIG_IPV6=y section
mtd: physmap-core: Restore map_rom fallback
Geliang Tang (1):
mptcp: avoid sending RST when closing the initial subflow
Gil Fine (1):
thunderbolt: Call tb_switch_put() once DisplayPort bandwidth request is finished
Greg Kroah-Hartman (1):
Linux 6.5.9
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
Hamza Mahfooz (1):
drm/edid: add 8 bpc quirk to the BenQ GW2765
Hangbin Liu (1):
ipv4/fib: send notify when delete source address routes
Hanjun Guo (1):
ACPI: bus: Move acpi_arm_init() to the place of after acpi_ghes_init()
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
Herbert Xu (1):
KEYS: asymmetric: Fix sign/verify on pkcs1pad without a hash
Ilan Peer (1):
wifi: cfg80211: Fix 6GHz scan configuration
Iulia Tanasescu (1):
Bluetooth: ISO: Fix invalid context error
Jacek Lawrynowicz (1):
accel/ivpu: Don't flood dmesg with VPU ready message
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
Jeff Layton (2):
overlayfs: set ctime when setting mtime and atime
nfs: decrement nrequests counter before releasing the req
Jeff Moyer (1):
io-wq: fully initialize wqe before calling cpuhp_state_add_instance_nocalls()
Jens Axboe (1):
io_uring: fix crash with IORING_SETUP_NO_MMAP and invalid SQ ring address
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 (8):
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
ASoC: codecs: wcd938x: fix regulator leaks on probe errors
ASoC: codecs: wcd938x: fix runtime PM imbalance on remove
Johannes Berg (4):
wifi: cfg80211: use system_unbound_wq for wiphy work
rfkill: sync before userspace visibility/changes
wifi: mac80211: work around Cisco AP 9115 VHT MPDU length
net: rfkill: reduce data->mtx scope in rfkill_fop_open
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
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
Karol Herbst (1):
drm/nouveau/disp: fix DP capable DSM connectors
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
Khaled Almahallawy (1):
drm/i915/cx0: Only clear/set the Pipe Reset bit of the PHY Lanes Owned
Kirill A. Shutemov (1):
efi/unaccepted: Fix soft lockups caused by parallel memory acceptance
Konrad Dybcio (2):
phy: qcom-qmp-combo: Square out 8550 POWER_STATE_CONFIG1
phy: qcom-qmp-combo: initialize PCS_USB registers
Konstantin Komarov (2):
fs/ntfs3: Fix shift-out-of-bounds in ntfs_fill_super fs/ntfs3: fix deadlock in mark_as_free_ex
Krzysztof Kozlowski (3):
nfc: nci: fix possible NULL pointer dereference in send_acknowledge()
dt-bindings: mmc: sdhci-msm: correct minimum number of clocks
pinctrl: qcom: lpass-lpi: fix concurrent register updates
Kuniyuki Iwashima (1):
tcp: Fix listen() warning with v4-mapped-v6 address.
Lama Kayal (1):
net/mlx5e: Take RTNL lock before triggering netdev notifiers
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 (6):
Bluetooth: hci_event: Fix coding style
Bluetooth: hci_conn: Fix modifying handle while aborting
Bluetooth: hci_core: Fix build warnings
Bluetooth: hci_sync: Fix not handling ISO_LINK in hci_abort_conn_sync
Bluetooth: hci_sync: Introduce PTR_UINT/UINT_PTR macros
Bluetooth: hci_event: Fix using memcmp when comparing keys
Luka Guzenko (1):
ALSA: hda/relatek: Enable Mute LED on HP Laptop 15s-fq5xxx
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
Martin Wilck (1):
nvme-auth: use chap->s2 to indicate bidirectional authentication
Martino Fontana (1):
HID: nintendo: reinitialize USB Pro Controller after resuming from suspend
Masami Hiramatsu (Google) (1):
fprobe: Fix to ensure the number of active retprobes is not zero
Mateusz Pacuszka (1):
ice: Fix safe mode when DDP is missing
Mateusz Polchlopek (1):
docs: fix info about representor identification
Matthieu Baerts (2):
selftests: mptcp: join: no RST when rm subflow/addr
selftests: mptcp: join: correctly check for no RST
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 (3):
x86: KVM: SVM: always update the x2avic msr interception
x86: KVM: SVM: add support for Invalid IPI Vector interception
x86: KVM: SVM: refresh AVIC inhibition in svm_leave_nested()
Michael Ellerman (1):
powerpc/mm: Allow ARCH_FORCE_MAX_ORDER up to 12
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()"
Miguel Ojeda (3):
rust: docs: fix logo replacement
docs: rust: update Rust docs output path
kbuild: remove old Rust docs output path
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
Mårten Lindahl (1):
iio: light: vcnl4000: Don't power on/off chip in config
Neal Cardwell (1):
tcp: fix excessive TLP and RACK timeouts from HZ rounding
Nicholas Piggin (1):
powerpc/qspinlock: Fix stale propagated yield_cpu
Nikita Kravets (1):
platform/x86: msi-ec: Fix the 3rd config
Niklas Schnelle (1):
s390/pci: fix iommu bitmap allocation
Olga Kornievskaia (1):
NFSv4.1: fixup use EXCHGID4_FLAG_USE_PNFS_DS for DS server
Orlando Chamberlain (1):
apple-gmux: Hard Code max brightness for MMIO gmux
Pablo Neira Ayuso (4):
netfilter: nft_set_rbtree: .deactivate fails if element has expired
netfilter: nf_tables: do not refresh timeout when resetting element
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
Pauli Virtanen (2):
Bluetooth: hci_sync: delete CIS in BT_OPEN/CONNECT/BOUND when aborting
Bluetooth: hci_sync: always check if connection is alive before deleting
Pavel Skripkin (1):
fs/ntfs3: Fix OOB read in ntfs_init_from_boot
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
Richard Fitzgerald (2):
ASoC: cs35l56: Fix illegal use of init_completion()
ASoC: cs42l42: Fix missing include of gpio/consumer.h
Rob Herring (1):
arm64: dts: mediatek: Fix "mediatek,merge-mute" and "mediatek,merge-fifo-en" types
Rocky Liao (1):
Bluetooth: btusb: add shutdown function for QCA6174
Roman Kagan (1):
KVM: x86/pmu: Truncate counter value to allowed width on write
Rouven Czerwinski (1):
mtd: rawnand: Ensure the nand chip supports cached reads
Sagi Grimberg (1):
nvmet-tcp: Fix a possible UAF in queue intialization setup
Scott Mayhew (1):
NFS: Fix potential oops in nfs_inode_remove_request()
Sean Christopherson (2):
x86/fpu: Allow caller to constrain xfeatures when copying to uabi buffer
KVM: x86: Constrain guest-supported xfeatures only at KVM_GET_XSAVE{2}
Shailend Chand (1):
gve: Do not fully free QPL pages on prefill errors
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
Stanislaw Gruszka (1):
Revert "accel/ivpu: Use cached buffers for FW loading"
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
Tomasz Swiatek (1):
platform/x86: touchscreen_dmi: Add info for the BUSH Bush Windows tablet
Tony Lindgren (4):
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
Ulf Hansson (1):
mmc: core: Fix error propagation for some ioctl commands
Ville Syrjälä (1):
drm/i915: Retry gtt fault when out of fence registers
Vladimir Oltean (1):
net: mdio-mux: fix C45 access returning -EIO after API change
Wedson Almeida Filho (1):
rust: error: fix the description for ECHILD
Wen Gong (1):
wifi: mac80211: allow transmitting EAPOL frames with tainted key
Willem de Bruijn (1):
net: more strict VIRTIO_NET_HDR_GSO_UDP_L4 validation
Xingyuan Mo (2):
nf_tables: fix NULL pointer dereference in nft_expr_inner_parse()
nf_tables: fix NULL pointer dereference in nft_inner_init()
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
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
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/mmc/sdhci-msm.yaml +1 -1
@@ -69,7 +69,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
Documentation/networking/representors.rst +5 -3
@@ -162,9 +162,11 @@ How are representors identified? The representor netdevice should *not* directly refer to a PCIe device (e.g. through ``net_dev->dev.parent`` / ``SET_NETDEV_DEV()``), either of the representee or of the switchdev function. -Instead, it should implement the ``ndo_get_devlink_port()`` netdevice op, which -the kernel uses to provide the ``phys_switch_id`` and ``phys_port_name`` sysfs -nodes. (Some legacy drivers implement ``ndo_get_port_parent_id()`` and +Instead, the driver should use the ``SET_NETDEV_DEVLINK_PORT`` macro to +assign a devlink port instance to the netdevice before registering the +netdevice; the kernel uses the devlink port to provide the ``phys_switch_id`` +and ``phys_port_name`` sysfs nodes. +(Some legacy drivers implement ``ndo_get_port_parent_id()`` and ``ndo_get_phys_port_name()`` directly, but this is deprecated.) See :ref:`Documentation/networking/devlink/devlink-port.rst <devlink_port>` for the details of this API.
Documentation/rust/general-information.rst +1 -1
@@ -29,7 +29,7 @@ target with the same invocation used for compilation, e.g.:: To read the docs locally in your web browser, run e.g.:: - xdg-open rust/doc/kernel/index.html + xdg-open Documentation/output/rust/rustdoc/kernel/index.html To learn about how to write the documentation, please see coding-guidelines.rst.
Documentation/rust/index.rst +8 -0
@@ -6,6 +6,14 @@ Rust Documentation related to Rust within the kernel. To start using Rust in the kernel, please read the quick-start.rst guide. +.. only:: rustdoc and html + + You can also browse `rustdoc documentation <rustdoc/kernel/index.html>`_. + +.. only:: not rustdoc and html + + This documentation does not include rustdoc generated information. + .. toctree:: :maxdepth: 1
Makefile +2 -2
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 5 -SUBLEVEL = 8 +SUBLEVEL = 9 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
@@ -1595,7 +1595,7 @@ endif # Directories & files removed with 'make clean' CLEAN_FILES += include/ksym vmlinux.symvers modules-only.symvers \ modules.builtin modules.builtin.modinfo modules.nsdeps \ - compile_commands.json .thinlto-cache rust/test rust/doc \ + compile_commands.json .thinlto-cache rust/test \ rust-project.json .vmlinux.objs .vmlinux.export.c # Directories & files removed with 'make mrproper'
arch/arm/boot/dts/ti/omap/motorola-mapphone-common.dtsi +1 -0
@@ -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/arm64/boot/dts/mediatek/mt8195.dtsi +5 -5
@@ -2958,7 +2958,7 @@ merge1: vpp-merge@1c10c000 { clock-names = "merge","merge_async"; power-domains = <&spm MT8195_POWER_DOMAIN_VDOSYS1>; mediatek,gce-client-reg = <&gce0 SUBSYS_1c10XXXX 0xc000 0x1000>; - mediatek,merge-mute = <1>; + mediatek,merge-mute; resets = <&vdosys1 MT8195_VDOSYS1_SW0_RST_B_MERGE0_DL_ASYNC>; };
@@ -2971,7 +2971,7 @@ merge2: vpp-merge@1c10d000 { clock-names = "merge","merge_async"; power-domains = <&spm MT8195_POWER_DOMAIN_VDOSYS1>; mediatek,gce-client-reg = <&gce0 SUBSYS_1c10XXXX 0xd000 0x1000>; - mediatek,merge-mute = <1>; + mediatek,merge-mute; resets = <&vdosys1 MT8195_VDOSYS1_SW0_RST_B_MERGE1_DL_ASYNC>; };
@@ -2984,7 +2984,7 @@ merge3: vpp-merge@1c10e000 { clock-names = "merge","merge_async"; power-domains = <&spm MT8195_POWER_DOMAIN_VDOSYS1>; mediatek,gce-client-reg = <&gce0 SUBSYS_1c10XXXX 0xe000 0x1000>; - mediatek,merge-mute = <1>; + mediatek,merge-mute; resets = <&vdosys1 MT8195_VDOSYS1_SW0_RST_B_MERGE2_DL_ASYNC>; };
@@ -2997,7 +2997,7 @@ merge4: vpp-merge@1c10f000 { clock-names = "merge","merge_async"; power-domains = <&spm MT8195_POWER_DOMAIN_VDOSYS1>; mediatek,gce-client-reg = <&gce0 SUBSYS_1c10XXXX 0xf000 0x1000>; - mediatek,merge-mute = <1>; + mediatek,merge-mute; resets = <&vdosys1 MT8195_VDOSYS1_SW0_RST_B_MERGE3_DL_ASYNC>; };
@@ -3010,7 +3010,7 @@ merge5: vpp-merge@1c110000 { clock-names = "merge","merge_async"; power-domains = <&spm MT8195_POWER_DOMAIN_VDOSYS1>; mediatek,gce-client-reg = <&gce0 SUBSYS_1c11XXXX 0x0000 0x1000>; - mediatek,merge-fifo-en = <1>; + mediatek,merge-fifo-en; resets = <&vdosys1 MT8195_VDOSYS1_SW0_RST_B_MERGE4_DL_ASYNC>; };
arch/powerpc/Kconfig +1 -1
@@ -917,7 +917,7 @@ config ARCH_FORCE_MAX_ORDER default "6" if PPC32 && PPC_64K_PAGES range 4 10 if PPC32 && PPC_256K_PAGES default "4" if PPC32 && PPC_256K_PAGES - range 10 10 + range 10 12 default "10" help The kernel page allocator limits the size of maximal physically
arch/powerpc/lib/qspinlock.c +3 -0
@@ -406,6 +406,9 @@ static __always_inline bool yield_to_prev(struct qspinlock *lock, struct qnode *if ((yield_count &1 ) ==0 ) goto yield_prev;/* owner vcpu is running */ +if (get_owner_cpu (READ_ONCE (lock->val)) != yield_cpu) + goto yield_prev;/* re-sample lock owner */ +spin_end (); preempted = true;
arch/s390/pci/pci_dma.c +13 -2
@@ -564,6 +564,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) {
@@ -604,13 +615,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
@@ -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#define __init
arch/x86/include/asm/fpu/api.h +2 -1
@@ -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/svm.h +1 -0
@@ -268,6 +268,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
@@ -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
@@ -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
@@ -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
@@ -524,6 +524,33 @@ static enum es_result vc_slow_virt_to_phys(struct ghcb *ghcb, struct es_em_ctxtreturn 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 = ¤t->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"
@@ -1508,6 +1535,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 INSN_MMIO_WRITE :memcpy (ghcb->shared_buffer, reg_data, bytes);
arch/x86/kvm/cpuid.c +0 -8
@@ -326,14 +326,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
@@ -2738,13 +2738,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/pmu.h +6 -0
@@ -74,6 +74,12 @@ static inline u64 pmc_read_counter(struct kvm_pmc *pmc)return counter &pmc_bitmask (pmc); } +static inline void pmc_write_counter (struct kvm_pmc *pmc,u64 val) +{ + pmc->counter += val -pmc_read_counter (pmc); + pmc->counter &=pmc_bitmask (pmc); +} +static inline void pmc_release_perf_event (struct kvm_pmc *pmc) {if (pmc->perf_event) {
arch/x86/kvm/svm/avic.c +4 -1
@@ -529,8 +529,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
@@ -1243,6 +1243,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/svm/pmu.c +1 -1
@@ -160,7 +160,7 @@ static int amd_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)/* MSR_PERFCTRn */ pmc =get_gp_pmc_amd (pmu, msr,PMU_TYPE_COUNTER );if (pmc) { - pmc->counter += data -pmc_read_counter (pmc); +pmc_write_counter (pmc, data);pmc_update_sample_period (pmc);return 0 ; }
arch/x86/kvm/svm/svm.c +1 -2
@@ -829,8 +829,7 @@ void svm_set_x2apic_msr_interception(struct vcpu_svm *svm, bool intercept)if (intercept == svm->x2avic_msrs_intercepted)return ; -if (!x2avic_enabled || - !apic_x2apic_mode (svm->vcpu.arch.apic)) +if (!x2avic_enabled)return ;for (i =0 ; i <MAX_DIRECT_ACCESS_MSRS ; i++) {
arch/x86/kvm/vmx/pmu_intel.c +2 -2
@@ -406,11 +406,11 @@ static int intel_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)if (!msr_info->host_initiated && !(msr &MSR_PMC_FULL_WIDTH_BIT )) data = (s64 )(s32 )data; - pmc->counter += data -pmc_read_counter (pmc); +pmc_write_counter (pmc, data);pmc_update_sample_period (pmc);break ; }else if ((pmc =get_fixed_pmc (pmu, msr))) { - pmc->counter += data -pmc_read_counter (pmc); +pmc_write_counter (pmc, data);pmc_update_sample_period (pmc);break ; }else if ((pmc =get_gp_pmc (pmu, msr,MSR_P6_EVNTSEL0 ))) {
arch/x86/kvm/x86.c +24 -13
@@ -5385,26 +5385,37 @@ static int kvm_vcpu_ioctl_x86_set_debugregs(struct kvm_vcpu *vcpu,return 0 ; } -static void kvm_vcpu_ioctl_x86_get_xsave (struct kvm_vcpu *vcpu, -struct kvm_xsave *guest_xsave) -{ -if (fpstate_is_confidential (&vcpu->arch.guest_fpu)) -return ; - -fpu_copy_guest_fpstate_to_uabi (&vcpu->arch.guest_fpu, - guest_xsave->region, -sizeof (guest_xsave->region), - vcpu->arch.pkru); -}static void kvm_vcpu_ioctl_x86_get_xsave2 (struct kvm_vcpu *vcpu,u8 *state,unsigned int size) { +/* +* Only copy state for features that are enabled for the guest. The +* state itself isn't problematic, but setting bits in the header for +* features that are supported in *this* host but not exposed to the +* guest can result in KVM_SET_XSAVE failing when live migrating to a +* compatible host without the features that are NOT exposed to the +* guest. +* +* 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. +*/ +u64 supported_xcr0 = vcpu->arch.guest_supported_xcr0 | +XFEATURE_MASK_FPSSE ; +if (fpstate_is_confidential (&vcpu->arch.guest_fpu))return ; -fpu_copy_guest_fpstate_to_uabi (&vcpu->arch.guest_fpu, - state, size, vcpu->arch.pkru); +fpu_copy_guest_fpstate_to_uabi (&vcpu->arch.guest_fpu, state, size, + supported_xcr0, vcpu->arch.pkru); +} + +static void kvm_vcpu_ioctl_x86_get_xsave (struct kvm_vcpu *vcpu, +struct kvm_xsave *guest_xsave) +{ +return kvm_vcpu_ioctl_x86_get_xsave2 (vcpu, (void *)guest_xsave->region, +sizeof (guest_xsave->region)); } static int kvm_vcpu_ioctl_x86_set_xsave(struct kvm_vcpu *vcpu,
crypto/asymmetric_keys/public_key.c +2 -3
@@ -81,14 +81,13 @@ software_key_determine_akcipher(const struct public_key *pkey,* RSA signatures usually use EMSA-PKCS1-1_5 [RFC3447 sec 8.2]. */ if (strcmp (encoding,"pkcs1" ) ==0 ) { + *sig = op == kernel_pkey_sign || + op == kernel_pkey_verify;if (!hash_algo) { - *sig = false; n =snprintf (alg_name,CRYPTO_MAX_ALG_NAME ,"pkcs1pad(%s)" , pkey->pkey_algo); }else { - *sig = op == kernel_pkey_sign || - op == kernel_pkey_verify; n =snprintf (alg_name,CRYPTO_MAX_ALG_NAME ,"pkcs1pad(%s,%s)" , pkey->pkey_algo, hash_algo);
drivers/accel/ivpu/ivpu_drv.c +1 -1
@@ -303,7 +303,7 @@ static int ivpu_wait_for_ready(struct ivpu_device *vdev) }if (!ret) -ivpu_info (vdev,"VPU ready message received successfully\n" ); +ivpu_dbg (vdev,PM ,"VPU ready message received successfully\n" );else ivpu_hw_diagnose_failure (vdev);
drivers/accel/ivpu/ivpu_fw.c +4 -5
@@ -195,8 +195,7 @@ static int ivpu_fw_mem_init(struct ivpu_device *vdev)if (ret)return ret; - fw->mem =ivpu_bo_alloc_internal (vdev, fw->runtime_addr, fw->runtime_size, -DRM_IVPU_BO_CACHED |DRM_IVPU_BO_NOSNOOP ); + fw->mem =ivpu_bo_alloc_internal (vdev, fw->runtime_addr, fw->runtime_size,DRM_IVPU_BO_WC );if (!fw->mem) {ivpu_err (vdev,"Failed to allocate firmware runtime memory\n" );return -ENOMEM ;
@@ -273,7 +272,7 @@ int ivpu_fw_load(struct ivpu_device *vdev)memset (start,0 , size); } -clflush_cache_range (fw->mem->kvaddr, fw->mem->base.size); +wmb ();/* Flush WC buffers after writing fw->mem */ return 0 ; }
@@ -375,7 +374,7 @@ void ivpu_fw_boot_params_setup(struct ivpu_device *vdev, struct vpu_boot_paramsif (!ivpu_fw_is_cold_boot (vdev)) { boot_params->save_restore_ret_address =0 ; vdev->pm->is_warmboot = true; -clflush_cache_range (vdev->fw->mem->kvaddr,SZ_4K ); +wmb ();/* Flush WC buffers after writing save_restore_ret_address */ return ; }
@@ -430,7 +429,7 @@ void ivpu_fw_boot_params_setup(struct ivpu_device *vdev, struct vpu_boot_params boot_params->punit_telemetry_sram_size =ivpu_hw_reg_telemetry_size_get (vdev); boot_params->vpu_telemetry_enable =ivpu_hw_reg_telemetry_enable_get (vdev); -clflush_cache_range (vdev->fw->mem->kvaddr,SZ_4K ); +wmb ();/* Flush WC buffers after writing bootparams */ ivpu_fw_boot_params_print (vdev, boot_params); }
drivers/accel/ivpu/ivpu_gem.h +0 -5
@@ -8,8 +8,6 @@#include <drm/drm_gem.h> #include <drm/drm_mm.h> -#define DRM_IVPU_BO_NOSNOOP 0x10000000 -struct dma_buf ;struct ivpu_bo_ops ;struct ivpu_file_priv ;
@@ -85,9 +83,6 @@ static inline u32 ivpu_bo_cache_mode(struct ivpu_bo *bo)static inline bool ivpu_bo_is_snooped (struct ivpu_bo *bo) { -if (bo->flags &DRM_IVPU_BO_NOSNOOP ) -return false; -return ivpu_bo_cache_mode (bo) ==DRM_IVPU_BO_CACHED ; }
drivers/acpi/bus.c +1 -1
@@ -1387,10 +1387,10 @@ static int __init acpi_init(void)acpi_init_ffh ();pci_mmcfg_late_init (); -acpi_arm_init ();acpi_viot_early_init ();acpi_hest_init ();acpi_ghes_init (); +acpi_arm_init ();acpi_scan_init ();acpi_ec_init ();acpi_debugfs_init ();
drivers/acpi/irq.c +6 -1
@@ -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
@@ -2624,7 +2624,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
@@ -2366,7 +2366,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
@@ -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
@@ -4348,6 +4348,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
@@ -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/firmware/efi/unaccepted_memory.c +60 -4
95 lines not on this page · raw message
drivers/gpio/gpio-timberdale.c +3 -2
@@ -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 +4 -3
@@ -127,14 +127,14 @@ static int vf610_gpio_direction_output(struct gpio_chip *chip, unsigned gpio,unsigned long mask =BIT (gpio);u32 val; +vf610_gpio_set (chip, gpio, value); +if (port->sdata && port->sdata->have_paddr) { val =vf610_gpio_readl (port->gpio_base +GPIO_PDDR ); val |= mask;vf610_gpio_writel (val, port->gpio_base +GPIO_PDDR ); } -vf610_gpio_set (chip, gpio, value); -return pinctrl_gpio_direction_output (chip->base + gpio); }
@@ -247,7 +247,8 @@ static const struct irq_chip vf610_irqchip = { .irq_unmask = vf610_gpio_irq_unmask, .irq_set_type = vf610_gpio_irq_set_type, .irq_set_wake = vf610_gpio_irq_set_wake, - .flags = IRQCHIP_IMMUTABLE, + .flags = IRQCHIP_IMMUTABLE | IRQCHIP_MASK_ON_SUSPEND + | IRQCHIP_ENABLE_WAKEUP_ON_SUSPEND, GPIOCHIP_IRQ_RESOURCE_HELPERS, };
drivers/gpio/gpiolib-acpi.c +1 -0
@@ -951,6 +951,7 @@ static struct gpio_desc *acpi_get_gpiod_from_data(struct fwnode_handle *fwnode,if (!propname)return ERR_PTR (-EINVAL ); +memset (&lookup,0 ,sizeof (lookup)); lookup.index = index; ret =acpi_gpio_property_lookup (fwnode, propname, index, &lookup);
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +2 -1
@@ -1094,7 +1094,8 @@ int amdgpu_vm_bo_update(struct amdgpu_device *adev, struct amdgpu_bo_va *bo_va,struct drm_gem_object *gobj = dma_buf->priv;struct amdgpu_bo *abo =gem_to_amdgpu_bo (gobj); -if (abo->tbo.resource->mem_type ==TTM_PL_VRAM ) +if (abo->tbo.resource && + abo->tbo.resource->mem_type ==TTM_PL_VRAM ) bo =gem_to_amdgpu_bo (gobj); } mem = bo->tbo.resource;
drivers/gpu/drm/amd/pm/amdgpu_pm.c +1 -0
@@ -2077,6 +2077,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
@@ -692,7 +692,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;
@@ -707,7 +707,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);
@@ -725,7 +725,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,
@@ -1298,9 +1298,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);
@@ -1319,9 +1319,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_edid.c +3 -0
@@ -123,6 +123,9 @@ static const struct edid_quirk {/* AEO model 0 reports 8 bpc, but is a 6 bpc panel */ EDID_QUIRK ('A' ,'E' ,'O' ,0 ,EDID_QUIRK_FORCE_6BPC ), +/* BenQ GW2765 */ +EDID_QUIRK ('B' ,'N' ,'Q' ,0x78d6 ,EDID_QUIRK_FORCE_8BPC ), +/* BOE model on HP Pavilion 15-n233sl reports 8 bpc, but is a 6 bpc panel */ EDID_QUIRK('B', 'O', 'E', 0x78b, EDID_QUIRK_FORCE_6BPC),
drivers/gpu/drm/drm_panel_orientation_quirks.c +16 -0
@@ -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/display/intel_cx0_phy.c +1 -2
@@ -2554,8 +2554,7 @@ static void intel_cx0_phy_lane_reset(struct drm_i915_private *i915,drm_warn (&i915->drm,"PHY %c failed to bring out of SOC reset after %dus.\n" ,phy_name (phy),XELPDP_PORT_BUF_SOC_READY_TIMEOUT_US ); -intel_de_rmw (i915,XELPDP_PORT_BUF_CTL2 (port), -XELPDP_LANE_PIPE_RESET (0 ) |XELPDP_LANE_PIPE_RESET (1 ), +intel_de_rmw (i915,XELPDP_PORT_BUF_CTL2 (port), lane_pipe_reset, lane_pipe_reset); if (__intel_de_wait_for_register(i915, XELPDP_PORT_BUF_CTL2(port),
drivers/gpu/drm/i915/gem/i915_gem_mman.c +1 -0
@@ -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
@@ -239,6 +239,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 ; }
@@ -248,12 +249,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/gpu/drm/nouveau/nvkm/engine/disp/uconn.c +13 -1
@@ -62,6 +62,18 @@ nvkm_uconn_uevent_gpio(struct nvkm_object *object, u64 token, u32 bits)return object->client->event (token, &args,sizeof (args.v0)); } +static bool +nvkm_connector_is_dp_dms (u8 type) +{ +switch (type) { +case DCB_CONNECTOR_DMS59_DP0 : +case DCB_CONNECTOR_DMS59_DP1 : +return true; +default : +return false; + } +} +static int nvkm_uconn_uevent (struct nvkm_object *object,void *argv,u32 argc,struct nvkm_uevent *uevent) {
@@ -101,7 +113,7 @@ nvkm_uconn_uevent(struct nvkm_object *object, void *argv, u32 argc, struct nvkm_if (args->v0.types &NVIF_CONN_EVENT_V0_UNPLUG ) bits |=NVKM_GPIO_LO ;if (args->v0.types &NVIF_CONN_EVENT_V0_IRQ ) {/* TODO: support DP IRQ on ANX9805 and remove this hack. */ -if (!outp->info.location) +if (!outp->info.location && !nvkm_connector_is_dp_dms (conn->info.type))return -EINVAL ; }
drivers/hid/hid-holtek-kbd.c +4 -0
@@ -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-ids.h +1 -0
@@ -425,6 +425,7 @@#define I2C_DEVICE_ID_HP_SPECTRE_X360_13T_AW100 0x29F5#define I2C_DEVICE_ID_HP_SPECTRE_X360_14T_EA100_V1 0x2BED#define I2C_DEVICE_ID_HP_SPECTRE_X360_14T_EA100_V2 0x2BEE +#define I2C_DEVICE_ID_HP_ENVY_X360_15_EU0556NG 0x2D02#define USB_VENDOR_ID_ELECOM 0x056e#define USB_DEVICE_ID_ELECOM_BM084 0x0061
drivers/hid/hid-input.c +2 -0
@@ -406,6 +406,8 @@ static const struct hid_device_id hid_battery_quirks[] = { HID_BATTERY_QUIRK_IGNORE }, {HID_I2C_DEVICE (USB_VENDOR_ID_ELAN ,I2C_DEVICE_ID_HP_SPECTRE_X360_14T_EA100_V2 ), HID_BATTERY_QUIRK_IGNORE }, + { HID_I2C_DEVICE(USB_VENDOR_ID_ELAN, I2C_DEVICE_ID_HP_ENVY_X360_15_EU0556NG), + HID_BATTERY_QUIRK_IGNORE }, {} };
drivers/hid/hid-logitech-hidpp.c +2 -0
@@ -4676,6 +4676,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
@@ -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
@@ -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/light/vcnl4000.c +0 -1
@@ -994,7 +994,6 @@ static int vcnl4040_write_event_config(struct iio_dev *indio_dev, out:mutex_unlock (&data->vcnl4000_lock); - data->chip_spec->set_power_state (data, data->ps_int !=0 );return ret; }
drivers/mmc/core/block.c +20 -11
@@ -179,6 +179,7 @@ static void mmc_blk_rw_rq_prep(struct mmc_queue_req *mqrq, struct mmc_queue *mq);static void mmc_blk_hsq_req_done (struct mmc_request *mrq);static int mmc_spi_err_check (struct mmc_card *card); +static int mmc_blk_busy_cb (void *cb_data,bool *busy);static struct mmc_blk_data *mmc_blk_get (struct gendisk *disk) {
@@ -470,7 +471,7 @@ static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md,struct mmc_data data = {};struct mmc_request mrq = {};struct scatterlist sg; -bool r1b_resp, use_r1b_resp = false; +bool r1b_resp;unsigned int busy_timeout_ms;int err;unsigned int target_part;
@@ -551,8 +552,7 @@ static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md, busy_timeout_ms = idata->ic.cmd_timeout_ms ? :MMC_BLK_TIMEOUT_MS ; r1b_resp = (cmd.flags &MMC_RSP_R1B ) ==MMC_RSP_R1B ;if (r1b_resp) - use_r1b_resp =mmc_prepare_busy_cmd (card->host, &cmd, - busy_timeout_ms); +mmc_prepare_busy_cmd (card->host, &cmd, busy_timeout_ms);mmc_wait_for_req (card->host, &mrq);memcpy (&idata->ic.response, cmd.resp,sizeof (cmd.resp));
@@ -605,19 +605,28 @@ static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md,if (idata->ic.postsleep_min_us)usleep_range (idata->ic.postsleep_min_us, idata->ic.postsleep_max_us); -/* No need to poll when using HW busy detection. */ -if ((card->host->caps &MMC_CAP_WAIT_WHILE_BUSY ) && use_r1b_resp) -return 0 ; -if (mmc_host_is_spi (card->host)) {if (idata->ic.write_flag || r1b_resp || cmd.flags &MMC_RSP_SPI_BUSY )return mmc_spi_err_check (card);return err; } -/* Ensure RPMB/R1B command has completed by polling with CMD13. */ -if (idata->rpmb || r1b_resp) - err =mmc_poll_for_busy (card, busy_timeout_ms, false, -MMC_BUSY_IO ); + +/* +* Ensure RPMB, writes and R1B responses are completed by polling with +* CMD13. Note that, usually we don't need to poll when using HW busy +* detection, but here it's needed since some commands may indicate the +* error through the R1 status bits. +*/ +if (idata->rpmb || idata->ic.write_flag || r1b_resp) { +struct mmc_blk_busy_data cb_data = { + .card = card, + }; + + err =__mmc_poll_for_busy (card->host,0 , busy_timeout_ms, + &mmc_blk_busy_cb, &cb_data); + + idata->ic.response[0 ] = cb_data.status; + }return err; }
drivers/mmc/core/mmc.c +1 -1
@@ -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
@@ -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
@@ -671,11 +671,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
@@ -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
@@ -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
@@ -1162,6 +1162,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 */
@@ -1195,7 +1196,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,
@@ -1624,6 +1636,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);
@@ -1660,6 +1673,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/nand_base.c +3 -0
@@ -5109,6 +5109,9 @@ static void rawnand_check_cont_read_support(struct nand_chip *chip) {struct mtd_info *mtd =nand_to_mtd (chip); +if (!chip->parameters.supports_read_cache) +return ; +if (chip->read_retries)return ;
drivers/mtd/nand/raw/nand_jedec.c +3 -0
@@ -94,6 +94,9 @@ int nand_jedec_detect(struct nand_chip *chip) goto free_jedec_param_page; } +if (p->opt_cmd[0 ] &JEDEC_OPT_CMD_READ_CACHE ) + chip->parameters.supports_read_cache = true; + memorg->pagesize =le32_to_cpu (p->byte_per_page); mtd->writesize = memorg->pagesize;
drivers/mtd/nand/raw/nand_onfi.c +3 -0
@@ -303,6 +303,9 @@ int nand_onfi_detect(struct nand_chip *chip) ONFI_FEATURE_ADDR_TIMING_MODE, 1); } +if (le16_to_cpu (p->opt_cmd) &ONFI_OPT_CMD_READ_CACHE ) + chip->parameters.supports_read_cache = true; + onfi =kzalloc (sizeof (*onfi),GFP_KERNEL );if (!onfi) { ret = -ENOMEM ;
drivers/mtd/nand/raw/pl35x-nand-controller.c +9 -0
@@ -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
@@ -3309,7 +3309,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
@@ -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
@@ -4022,7 +4022,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
@@ -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
@@ -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, ¤t_timeo, sk->sk_err || - (sk->sk_shutdown &SEND_SHUTDOWN ) || - (csk_mem_free (cdev, sk) && !vm_wait), &wait); + ret =sk_wait_event (sk, ¤t_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;
@@ -1348,6 +1351,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 ;
@@ -1423,7 +1427,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) {
@@ -1518,6 +1526,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; }
@@ -1534,6 +1544,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 );
@@ -1585,7 +1596,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)) {
@@ -1656,6 +1672,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 ;
@@ -1747,7 +1764,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:
@@ -1816,6 +1837,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/google/gve/gve_rx.c +16 -2
@@ -146,7 +146,7 @@ static int gve_prefill_rx_pages(struct gve_rx_ring *rx) err =gve_rx_alloc_buffer (priv, &priv->pdev->dev, &rx->data.page_info[i], &rx->data.data_ring[i]);if (err) - goto alloc_err; + goto alloc_err_rda; }if (!rx->data.raw_addressing) {
@@ -171,12 +171,26 @@ static int gve_prefill_rx_pages(struct gve_rx_ring *rx)return slots; alloc_err_qpl: +/* Fully free the copy pool pages. */ while (j--) {page_ref_sub (rx->qpl_copy_pool[j].page, rx->qpl_copy_pool[j].pagecnt_bias -1 );put_page (rx->qpl_copy_pool[j].page); } -alloc_err: + +/* Do not fully free QPL pages - only remove the bias added in this +* function with gve_setup_rx_buffer. +*/ +while (i--) +page_ref_sub (rx->data.page_info[i].page, + rx->data.page_info[i].pagecnt_bias -1 ); + +gve_unassign_qpl (priv, rx->data.qpl->id); + rx->data.qpl =NULL ; + +return err; + +alloc_err_rda:while (i--) gve_rx_free_buffer(&priv->pdev->dev, &rx->data.page_info[i],
drivers/net/ethernet/intel/i40e/i40e_common.c +2 -2
@@ -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
@@ -1201,8 +1201,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 +18 -0
@@ -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"
@@ -4632,6 +4633,9 @@ static void ice_init_features(struct ice_pf *pf)static void ice_deinit_features (struct ice_pf *pf) { +if (ice_is_safe_mode (pf)) +return ; +ice_deinit_lag (pf);if (test_bit (ICE_FLAG_DCB_CAPABLE , pf->flags))ice_cfg_lldp_mib_change (&pf->hw, false);
@@ -4963,6 +4967,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 */
drivers/net/ethernet/marvell/octeon_ep/octep_main.c +6 -7
@@ -715,20 +715,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
@@ -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
@@ -848,7 +848,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
@@ -24,7 +24,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/en/xdp.c +4 -4
@@ -873,11 +873,11 @@ int mlx5e_xdp_xmit(struct net_device *dev, int n, struct xdp_frame **frames, } out: -if (flags &XDP_XMIT_FLUSH ) { -if (sq->mpwqe.wqe) -mlx5e_xdp_mpwqe_complete (sq); +if (sq->mpwqe.wqe) +mlx5e_xdp_mpwqe_complete (sq); + +if (flags &XDP_XMIT_FLUSH )mlx5e_xmit_xdp_doorbell (sq); - }return nxmit; }
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c +9 -1
@@ -704,7 +704,7 @@ mlx5e_rep_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats)/* update HW stats in background for next time */ mlx5e_queue_update_stats (priv); -memcpy (stats, &priv->stats.vf_vport,sizeof (*stats)); +mlx5e_stats_copy_rep_stats (stats, &priv->stats.rep_stats); }static int mlx5e_rep_change_mtu (struct net_device *netdev,int new_mtu)
@@ -772,6 +772,7 @@ static int mlx5e_rep_max_nch_limit(struct mlx5_core_dev *mdev)static void mlx5e_build_rep_params (struct net_device *netdev) { +const bool take_rtnl = netdev->reg_state ==NETREG_REGISTERED ;struct mlx5e_priv *priv =netdev_priv (netdev);struct mlx5e_rep_priv *rpriv = priv->ppriv;struct mlx5_eswitch_rep *rep = rpriv->rep;
@@ -797,8 +798,15 @@ static void mlx5e_build_rep_params(struct net_device *netdev)/* RQ */ mlx5e_build_rq_params (mdev, params); +/* If netdev is already registered (e.g. move from nic profile to uplink, +* RTNL lock must be held before triggering netdev notifiers. +*/ +if (take_rtnl) +rtnl_lock ();/* update XDP supported features */ mlx5e_set_xdp_feature (netdev); +if (take_rtnl) +rtnl_unlock ();/* CQ moderation params */ params->rx_dim_enabled =MLX5_CAP_GEN (mdev, cq_moderation);
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +26 -9
@@ -457,26 +457,41 @@ static int mlx5e_alloc_rx_wqes(struct mlx5e_rq *rq, u16 ix, int wqe_bulk)static int mlx5e_refill_rx_wqes (struct mlx5e_rq *rq,u16 ix,int wqe_bulk) {int remaining = wqe_bulk; -int i =0 ; +int total_alloc =0 ; +int refill_alloc; +int refill;/* The WQE bulk is split into smaller bulks that are sized * according to the page pool cache refill size to avoid overflowing * the page pool cache due to too many page releases at once. */ do { -int refill =min_t (u16, rq->wqe.info.refill_unit, remaining); -int alloc_count; + refill =min_t (u16, rq->wqe.info.refill_unit, remaining); -mlx5e_free_rx_wqes (rq, ix + i, refill); - alloc_count =mlx5e_alloc_rx_wqes (rq, ix + i, refill); - i += alloc_count; -if (unlikely (alloc_count != refill)) -break ; +mlx5e_free_rx_wqes (rq, ix + total_alloc, refill); + refill_alloc =mlx5e_alloc_rx_wqes (rq, ix + total_alloc, refill); +if (unlikely (refill_alloc != refill)) + goto err_free; + total_alloc += refill_alloc; remaining -= refill; }while (remaining); -return i; +return total_alloc; + +err_free: +mlx5e_free_rx_wqes (rq, ix, total_alloc + refill_alloc); + +for (int i =0 ; i < total_alloc + refill; i++) { +int j =mlx5_wq_cyc_ctr2ix (&rq->wqe.wq, ix + i); +struct mlx5e_wqe_frag_info *frag; + + frag =get_frag (rq, j); +for (int k =0 ; k < rq->wqe.info.num_frags; k++, frag++) + frag->flags |=BIT (MLX5E_WQE_FRAG_SKIP_RELEASE ); + } + +return 0 ; } static void
@@ -816,6 +831,8 @@ static int mlx5e_alloc_rx_mpwqe(struct mlx5e_rq *rq, u16 ix)mlx5e_page_release_fragmented (rq, frag_page); } +bitmap_fill (wi->skip_release_bitmap, rq->mpwqe.pages_per_wqe); + err: rq->stats->buff_alloc_err++;
drivers/net/ethernet/mellanox/mlx5/core/en_stats.h +10 -1
@@ -475,11 +475,20 @@ struct mlx5e_stats {struct mlx5e_vnic_env_stats vnic;struct mlx5e_vport_stats vport;struct mlx5e_pport_stats pport; -struct rtnl_link_stats64 vf_vport;struct mlx5e_pcie_stats pcie;struct mlx5e_rep_stats rep_stats; }; +static inline void mlx5e_stats_copy_rep_stats (struct rtnl_link_stats64 *vf_vport, +struct mlx5e_rep_stats *rep_stats) +{ +memset (vf_vport,0 ,sizeof (*vf_vport)); + vf_vport->rx_packets = rep_stats->vport_rx_packets; + vf_vport->tx_packets = rep_stats->vport_tx_packets; + vf_vport->rx_bytes = rep_stats->vport_rx_bytes; + vf_vport->tx_bytes = rep_stats->vport_tx_bytes; +} +extern mlx5e_stats_grp_t mlx5e_nic_stats_grps[];unsigned int mlx5e_nic_stats_grps_num (struct mlx5e_priv *priv);
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +3 -2
@@ -4931,7 +4931,8 @@ static int scan_tc_matchall_fdb_actions(struct mlx5e_priv *priv,if (err)return err; - rpriv->prev_vf_vport_stats = priv->stats.vf_vport; +mlx5e_stats_copy_rep_stats (&rpriv->prev_vf_vport_stats, + &priv->stats.rep_stats);break ;default :NL_SET_ERR_MSG_MOD (extack,"mlx5 supports only police action for matchall" );
@@ -4971,7 +4972,7 @@ void mlx5e_tc_stats_matchall(struct mlx5e_priv *priv,u64 dbytes;u64 dpkts; - cur_stats = priv->stats.vf_vport; +mlx5e_stats_copy_rep_stats (&cur_stats, &priv->stats.rep_stats); dpkts = cur_stats.rx_packets - rpriv->prev_vf_vport_stats.rx_packets; dbytes = cur_stats.rx_bytes - rpriv->prev_vf_vport_stats.rx_bytes; rpriv->prev_vf_vport_stats = cur_stats;
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c +8 -9
@@ -1022,11 +1022,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 );
@@ -1034,13 +1031,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); }
@@ -1419,6 +1414,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 {
@@ -1431,7 +1429,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), necvfs(%d), active vports(%d)\n", esw->mode == MLX5_ESWITCH_LEGACY ? "LEGACY" : "OFFLOADS",
@@ -1558,7 +1556,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), necvfs(%d), active vports(%d)\n", esw->mode == MLX5_ESWITCH_LEGACY ? "LEGACY" : "OFFLOADS",
drivers/net/ethernet/qlogic/qed/qed_ll2.c +5 -2
@@ -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 ;
@@ -2589,7 +2592,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/mdio/mdio-mux.c +47 -0
65 lines not on this page · raw message
drivers/net/phy/bcm7xxx.c +3 -0
@@ -894,6 +894,9 @@ static int bcm7xxx_28nm_probe(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, \ .config_init = bcm7xxx_16nm_ephy_config_init, \ .config_aneg = genphy_config_aneg, \
drivers/net/tun.c +5 -2
@@ -3068,10 +3068,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;
@@ -3127,7 +3128,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
@@ -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
@@ -1612,6 +1612,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 ) {
@@ -1964,6 +1965,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
@@ -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/net/wwan/iosm/iosm_ipc_imem.c +0 -17
@@ -4,7 +4,6 @@*/ #include <linux/delay.h> -#include <linux/pm_runtime.h> #include "iosm_ipc_chnl_cfg.h" #include "iosm_ipc_devlink.h"
@@ -632,11 +631,6 @@ static void ipc_imem_run_state_worker(struct work_struct *instance)/* Complete all memory stores after setting bit */ smp_mb__after_atomic (); -if (ipc_imem->pcie->pci->device ==INTEL_CP_DEVICE_7560_ID ) { -pm_runtime_mark_last_busy (ipc_imem->dev); -pm_runtime_put_autosuspend (ipc_imem->dev); - } -return ; err_ipc_mux_deinit:
@@ -1240,7 +1234,6 @@ void ipc_imem_cleanup(struct iosm_imem *ipc_imem)/* forward MDM_NOT_READY to listeners */ ipc_uevent_send (ipc_imem->dev,UEVENT_MDM_NOT_READY ); -pm_runtime_get_sync (ipc_imem->dev);hrtimer_cancel (&ipc_imem->td_alloc_timer);hrtimer_cancel (&ipc_imem->tdupdate_timer);
@@ -1426,16 +1419,6 @@ struct iosm_imem *ipc_imem_init(struct iosm_pcie *pcie, unsigned int device_id,set_bit (IOSM_DEVLINK_INIT , &ipc_imem->flag); } - -if (!pm_runtime_enabled (ipc_imem->dev)) -pm_runtime_enable (ipc_imem->dev); - -pm_runtime_set_autosuspend_delay (ipc_imem->dev, -IPC_MEM_AUTO_SUSPEND_DELAY_MS ); -pm_runtime_use_autosuspend (ipc_imem->dev); -pm_runtime_allow (ipc_imem->dev); -pm_runtime_mark_last_busy (ipc_imem->dev); -return ipc_imem; devlink_channel_fail:ipc_devlink_deinit (ipc_imem->ipc_devlink);
drivers/net/wwan/iosm/iosm_ipc_imem.h +0 -2
@@ -103,8 +103,6 @@ struct ipc_chnl_cfg;#define FULLY_FUNCTIONAL 0#define IOSM_DEVLINK_INIT 1 -#define IPC_MEM_AUTO_SUSPEND_DELAY_MS 5000 -/* List of the supported UL/DL pipes. */ enum ipc_mem_pipes {IPC_MEM_PIPE_0 =0 ,
drivers/net/wwan/iosm/iosm_ipc_pcie.c +1 -3
@@ -6,7 +6,6 @@#include <linux/acpi.h> #include <linux/bitfield.h> #include <linux/module.h> -#include <linux/pm_runtime.h> #include <net/rtnetlink.h> #include "iosm_ipc_imem.h"
@@ -438,8 +437,7 @@ static int __maybe_unused ipc_pcie_resume_cb(struct device *dev)return 0 ; } -static DEFINE_RUNTIME_DEV_PM_OPS(iosm_ipc_pm, ipc_pcie_suspend_cb, - ipc_pcie_resume_cb, NULL); +static SIMPLE_DEV_PM_OPS(iosm_ipc_pm, ipc_pcie_suspend_cb, ipc_pcie_resume_cb);static struct pci_driver iosm_ipc_driver = { .name =KBUILD_MODNAME ,
drivers/net/wwan/iosm/iosm_ipc_port.c +1 -16
@@ -3,8 +3,6 @@* Copyright (C) 2020-21 Intel Corporation. */ -#include <linux/pm_runtime.h> -#include "iosm_ipc_chnl_cfg.h" #include "iosm_ipc_imem_ops.h" #include "iosm_ipc_port.h"
@@ -15,16 +13,12 @@ static int ipc_port_ctrl_start(struct wwan_port *port)struct iosm_cdev *ipc_port =wwan_port_get_drvdata (port);int ret =0 ; -pm_runtime_get_sync (ipc_port->ipc_imem->dev); ipc_port->channel =ipc_imem_sys_port_open (ipc_port->ipc_imem, ipc_port->chl_id,IPC_HP_CDEV_OPEN );if (!ipc_port->channel) ret = -EIO ; -pm_runtime_mark_last_busy (ipc_port->ipc_imem->dev); -pm_runtime_put_autosuspend (ipc_port->ipc_imem->dev); -return ret; }
@@ -33,24 +27,15 @@ static void ipc_port_ctrl_stop(struct wwan_port *port) {struct iosm_cdev *ipc_port =wwan_port_get_drvdata (port); -pm_runtime_get_sync (ipc_port->ipc_imem->dev);ipc_imem_sys_port_close (ipc_port->ipc_imem, ipc_port->channel); -pm_runtime_mark_last_busy (ipc_port->ipc_imem->dev); -pm_runtime_put_autosuspend (ipc_port->ipc_imem->dev); }/* transfer control data to modem */ static int ipc_port_ctrl_tx (struct wwan_port *port,struct sk_buff *skb) {struct iosm_cdev *ipc_port =wwan_port_get_drvdata (port); -int ret; -pm_runtime_get_sync (ipc_port->ipc_imem->dev); - ret =ipc_imem_sys_cdev_write (ipc_port, skb); -pm_runtime_mark_last_busy (ipc_port->ipc_imem->dev); -pm_runtime_put_autosuspend (ipc_port->ipc_imem->dev); - -return ret; +return ipc_imem_sys_cdev_write (ipc_port, skb); }static const struct wwan_port_ops ipc_wwan_ctrl_ops = {
drivers/net/wwan/iosm/iosm_ipc_trace.c +0 -8
@@ -3,9 +3,7 @@* Copyright (C) 2020-2021 Intel Corporation. */ -#include <linux/pm_runtime.h> #include <linux/wwan.h> -#include "iosm_ipc_trace.h" /* sub buffer size and number of sub buffer */
@@ -99,8 +97,6 @@ static ssize_t ipc_trace_ctrl_file_write(struct file *filp,if (ret)return ret; -pm_runtime_get_sync (ipc_trace->ipc_imem->dev); -mutex_lock (&ipc_trace->trc_mutex);if (val ==TRACE_ENABLE && ipc_trace->mode !=TRACE_ENABLE ) { ipc_trace->channel = ipc_imem_sys_port_open(ipc_trace->ipc_imem,
@@ -121,10 +117,6 @@ static ssize_t ipc_trace_ctrl_file_write(struct file *filp, ret = count; unlock:mutex_unlock (&ipc_trace->trc_mutex); - -pm_runtime_mark_last_busy (ipc_trace->ipc_imem->dev); -pm_runtime_put_autosuspend (ipc_trace->ipc_imem->dev); -return ret; }
drivers/net/wwan/iosm/iosm_ipc_wwan.c +2 -19
@@ -6,7 +6,6 @@#include <linux/etherdevice.h> #include <linux/if_arp.h> #include <linux/if_link.h> -#include <linux/pm_runtime.h> #include <linux/rtnetlink.h> #include <linux/wwan.h> #include <net/pkt_sched.h>
@@ -52,13 +51,11 @@ static int ipc_wwan_link_open(struct net_device *netdev)struct iosm_netdev_priv *priv =wwan_netdev_drvpriv (netdev);struct iosm_wwan *ipc_wwan = priv->ipc_wwan;int if_id = priv->if_id; -int ret =0 ;if (if_id <IP_MUX_SESSION_START || if_id >=ARRAY_SIZE (ipc_wwan->sub_netlist))return -EINVAL ; -pm_runtime_get_sync (ipc_wwan->ipc_imem->dev);/* get channel id */ priv->ch_id =ipc_imem_sys_wwan_open (ipc_wwan->ipc_imem, if_id);
@@ -66,8 +63,7 @@ static int ipc_wwan_link_open(struct net_device *netdev)dev_err (ipc_wwan->dev,"cannot connect wwan0 & id %d to the IPC mem layer" , if_id); - ret = -ENODEV ; - goto err_out; +return -ENODEV ; }/* enable tx path, DL data may follow */
@@ -76,11 +72,7 @@ static int ipc_wwan_link_open(struct net_device *netdev)dev_dbg (ipc_wwan->dev,"Channel id %d allocated to if_id %d" , priv->ch_id, priv->if_id); -err_out: -pm_runtime_mark_last_busy (ipc_wwan->ipc_imem->dev); -pm_runtime_put_autosuspend (ipc_wwan->ipc_imem->dev); - -return ret; +return 0 ; }/* Bring-down the wwan net link */
@@ -90,12 +82,9 @@ static int ipc_wwan_link_stop(struct net_device *netdev)netif_stop_queue (netdev); -pm_runtime_get_sync (priv->ipc_wwan->ipc_imem->dev);ipc_imem_sys_wwan_close (priv->ipc_wwan->ipc_imem, priv->if_id, priv->ch_id); priv->ch_id =-1 ; -pm_runtime_mark_last_busy (priv->ipc_wwan->ipc_imem->dev); -pm_runtime_put_autosuspend (priv->ipc_wwan->ipc_imem->dev);return 0 ; }
@@ -117,7 +106,6 @@ static netdev_tx_t ipc_wwan_link_transmit(struct sk_buff *skb, if_id >= ARRAY_SIZE(ipc_wwan->sub_netlist))return -EINVAL ; -pm_runtime_get (ipc_wwan->ipc_imem->dev);/* Send the SKB to device for transmission */ ret =ipc_imem_sys_wwan_transmit (ipc_wwan->ipc_imem, if_id, priv->ch_id, skb);
@@ -131,14 +119,9 @@ static netdev_tx_t ipc_wwan_link_transmit(struct sk_buff *skb, ret =NETDEV_TX_BUSY ;dev_err (ipc_wwan->dev,"unable to push packets" ); }else { -pm_runtime_mark_last_busy (ipc_wwan->ipc_imem->dev); -pm_runtime_put_autosuspend (ipc_wwan->ipc_imem->dev); goto exit; } -pm_runtime_mark_last_busy (ipc_wwan->ipc_imem->dev); -pm_runtime_put_autosuspend (ipc_wwan->ipc_imem->dev); -return ret; exit:
drivers/nvme/host/auth.c +2 -2
@@ -341,7 +341,7 @@ static int nvme_auth_process_dhchap_success1(struct nvme_ctrl *ctrl,struct nvmf_auth_dhchap_success1_data *data = chap->buf;size_t size =sizeof (*data); -if (chap->ctrl_key) +if (chap->s2) size += chap->hash_len;if (size >CHAP_BUF_SIZE ) {
@@ -825,7 +825,7 @@ static void nvme_queue_auth_work(struct work_struct *work) goto fail2; } -if (chap->ctrl_key) { +if (chap->s2) {/* DH-HMAC-CHAP Step 5: send success2 */ dev_dbg (ctrl->device,"%s: qid %d send success2\n" , __func__, chap->qid);
drivers/nvme/host/ioctl.c +7 -3
@@ -108,9 +108,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 ) &©_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
@@ -3329,7 +3329,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
@@ -638,6 +638,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
@@ -333,19 +333,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)
@@ -514,11 +516,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
@@ -372,6 +372,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
@@ -910,15 +911,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
@@ -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 void 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/phy/qualcomm/phy-qcom-qmp-combo.c +5 -1
@@ -772,10 +772,10 @@ static const struct qmp_phy_init_tbl sm8550_usb3_pcs_tbl[] = {QMP_PHY_INIT_CFG (QPHY_USB_V6_PCS_PCS_TX_RX_CONFIG ,0x0c ),QMP_PHY_INIT_CFG (QPHY_USB_V6_PCS_EQ_CONFIG1 ,0x4b ), QMP_PHY_INIT_CFG(QPHY_USB_V6_PCS_EQ_CONFIG5, 0x10), - QMP_PHY_INIT_CFG(QPHY_USB_V6_PCS_USB3_POWER_STATE_CONFIG1, 0x68), };static const struct qmp_phy_init_tbl sm8550_usb3_pcs_usb_tbl[] = { +QMP_PHY_INIT_CFG (QPHY_USB_V6_PCS_USB3_POWER_STATE_CONFIG1 ,0x68 ),QMP_PHY_INIT_CFG (QPHY_USB_V6_PCS_USB3_LFPS_DET_HIGH_COUNT_VAL ,0xf8 ),QMP_PHY_INIT_CFG (QPHY_USB_V6_PCS_USB3_RXEQTRAINING_DFE_TIME_S2 ,0x07 ), QMP_PHY_INIT_CFG(QPHY_USB_V6_PCS_USB3_RCVR_DTCT_DLY_U3_L, 0x40),
@@ -2649,6 +2649,7 @@ static int qmp_combo_usb_power_on(struct phy *phy)void __iomem *tx2 = qmp->tx2;void __iomem *rx2 = qmp->rx2;void __iomem *pcs = qmp->pcs; +void __iomem *pcs_usb = qmp->pcs_usb;void __iomem *status;unsigned int val;int ret;
@@ -2670,6 +2671,9 @@ static int qmp_combo_usb_power_on(struct phy *phy)qmp_combo_configure (pcs, cfg->pcs_tbl, cfg->pcs_tbl_num); +if (pcs_usb) +qmp_combo_configure (pcs_usb, cfg->pcs_usb_tbl, cfg->pcs_usb_tbl_num); +if (cfg->has_pwrdn_delay)usleep_range (10 ,20 );
drivers/phy/qualcomm/phy-qcom-qmp-pcs-usb-v6.h +2 -1
@@ -12,7 +12,7 @@#define QPHY_USB_V6_PCS_LOCK_DETECT_CONFIG3 0xcc#define QPHY_USB_V6_PCS_LOCK_DETECT_CONFIG6 0xd8#define QPHY_USB_V6_PCS_REFGEN_REQ_CONFIG1 0xdc -#define QPHY_USB_V6_PCS_USB3_POWER_STATE_CONFIG1 0x90 +#define QPHY_USB_V6_PCS_POWER_STATE_CONFIG1 0x90#define QPHY_USB_V6_PCS_RX_SIGDET_LVL 0x188#define QPHY_USB_V6_PCS_RCVR_DTCT_DLY_P1U2_L 0x190#define QPHY_USB_V6_PCS_RCVR_DTCT_DLY_P1U2_H 0x194
@@ -23,6 +23,7 @@#define QPHY_USB_V6_PCS_EQ_CONFIG1 0x1dc#define QPHY_USB_V6_PCS_EQ_CONFIG5 0x1ec +#define QPHY_USB_V6_PCS_USB3_POWER_STATE_CONFIG1 0x00#define QPHY_USB_V6_PCS_USB3_LFPS_DET_HIGH_COUNT_VAL 0x18#define QPHY_USB_V6_PCS_USB3_RXEQTRAINING_DFE_TIME_S2 0x3c#define QPHY_USB_V6_PCS_USB3_RCVR_DTCT_DLY_U3_L 0x40
drivers/phy/qualcomm/phy-qcom-qmp-usb.c +19 -5
@@ -1480,8 +1480,6 @@ static const struct qmp_phy_init_tbl sc8280xp_usb3_uniphy_pcs_tbl[] = {QMP_PHY_INIT_CFG (QPHY_V5_PCS_RCVR_DTCT_DLY_P1U2_H ,0x03 ),QMP_PHY_INIT_CFG (QPHY_V5_PCS_RX_SIGDET_LVL ,0xaa ),QMP_PHY_INIT_CFG (QPHY_V5_PCS_PCS_TX_RX_CONFIG ,0x0c ), -QMP_PHY_INIT_CFG (QPHY_V5_PCS_USB3_RXEQTRAINING_DFE_TIME_S2 ,0x07 ), -QMP_PHY_INIT_CFG (QPHY_V5_PCS_USB3_LFPS_DET_HIGH_COUNT_VAL ,0xf8 ),QMP_PHY_INIT_CFG (QPHY_V5_PCS_CDR_RESET_TIME ,0x0a ),QMP_PHY_INIT_CFG (QPHY_V5_PCS_ALIGN_DETECT_CONFIG1 ,0x88 ), QMP_PHY_INIT_CFG(QPHY_V5_PCS_ALIGN_DETECT_CONFIG2, 0x13),
@@ -1490,6 +1488,11 @@ static const struct qmp_phy_init_tbl sc8280xp_usb3_uniphy_pcs_tbl[] = { QMP_PHY_INIT_CFG(QPHY_V5_PCS_REFGEN_REQ_CONFIG1, 0x21), }; +static const struct qmp_phy_init_tbl sc8280xp_usb3_uniphy_pcs_usb_tbl[] = { +QMP_PHY_INIT_CFG (QPHY_V5_PCS_USB3_RXEQTRAINING_DFE_TIME_S2 ,0x07 ), +QMP_PHY_INIT_CFG (QPHY_V5_PCS_USB3_LFPS_DET_HIGH_COUNT_VAL ,0xf8 ), +}; +static const struct qmp_phy_init_tbl sa8775p_usb3_uniphy_pcs_tbl[] = {QMP_PHY_INIT_CFG (QPHY_V5_PCS_LOCK_DETECT_CONFIG1 ,0xc4 ),QMP_PHY_INIT_CFG (QPHY_V5_PCS_LOCK_DETECT_CONFIG2 ,0x89 ),
@@ -1499,9 +1502,6 @@ static const struct qmp_phy_init_tbl sa8775p_usb3_uniphy_pcs_tbl[] = {QMP_PHY_INIT_CFG (QPHY_V5_PCS_RCVR_DTCT_DLY_P1U2_H ,0x03 ),QMP_PHY_INIT_CFG (QPHY_V5_PCS_RX_SIGDET_LVL ,0xaa ),QMP_PHY_INIT_CFG (QPHY_V5_PCS_PCS_TX_RX_CONFIG ,0x0c ), -QMP_PHY_INIT_CFG (QPHY_V5_PCS_USB3_RXEQTRAINING_DFE_TIME_S2 ,0x07 ), -QMP_PHY_INIT_CFG (QPHY_V5_PCS_USB3_LFPS_DET_HIGH_COUNT_VAL ,0xf8 ), -QMP_PHY_INIT_CFG (QPHY_V5_PCS_USB3_POWER_STATE_CONFIG1 ,0x6f ),QMP_PHY_INIT_CFG (QPHY_V5_PCS_CDR_RESET_TIME ,0x0a ),QMP_PHY_INIT_CFG (QPHY_V5_PCS_ALIGN_DETECT_CONFIG1 ,0x88 ), QMP_PHY_INIT_CFG(QPHY_V5_PCS_ALIGN_DETECT_CONFIG2, 0x13),
@@ -1510,6 +1510,12 @@ static const struct qmp_phy_init_tbl sa8775p_usb3_uniphy_pcs_tbl[] = { QMP_PHY_INIT_CFG(QPHY_V5_PCS_REFGEN_REQ_CONFIG1, 0x21), }; +static const struct qmp_phy_init_tbl sa8775p_usb3_uniphy_pcs_usb_tbl[] = { +QMP_PHY_INIT_CFG (QPHY_V5_PCS_USB3_RXEQTRAINING_DFE_TIME_S2 ,0x07 ), +QMP_PHY_INIT_CFG (QPHY_V5_PCS_USB3_LFPS_DET_HIGH_COUNT_VAL ,0xf8 ), +QMP_PHY_INIT_CFG (QPHY_V5_PCS_USB3_POWER_STATE_CONFIG1 ,0x6f ), +}; +struct qmp_usb_offsets {u16 serdes;u16 pcs;
@@ -1788,6 +1794,8 @@ static const struct qmp_phy_cfg sa8775p_usb3_uniphy_cfg = { .rx_tbl_num = ARRAY_SIZE(sc8280xp_usb3_uniphy_rx_tbl), .pcs_tbl = sa8775p_usb3_uniphy_pcs_tbl, .pcs_tbl_num = ARRAY_SIZE(sa8775p_usb3_uniphy_pcs_tbl), + .pcs_usb_tbl = sa8775p_usb3_uniphy_pcs_usb_tbl, + .pcs_usb_tbl_num = ARRAY_SIZE(sa8775p_usb3_uniphy_pcs_usb_tbl), .clk_list = qmp_v4_phy_clk_l, .num_clks = ARRAY_SIZE(qmp_v4_phy_clk_l), .reset_list = qcm2290_usb3phy_reset_l,
@@ -1833,6 +1841,8 @@ static const struct qmp_phy_cfg sc8280xp_usb3_uniphy_cfg = { .rx_tbl_num = ARRAY_SIZE(sc8280xp_usb3_uniphy_rx_tbl), .pcs_tbl = sc8280xp_usb3_uniphy_pcs_tbl, .pcs_tbl_num = ARRAY_SIZE(sc8280xp_usb3_uniphy_pcs_tbl), + .pcs_usb_tbl = sc8280xp_usb3_uniphy_pcs_usb_tbl, + .pcs_usb_tbl_num = ARRAY_SIZE(sc8280xp_usb3_uniphy_pcs_usb_tbl), .clk_list = qmp_v4_phy_clk_l, .num_clks = ARRAY_SIZE(qmp_v4_phy_clk_l), .reset_list = qcm2290_usb3phy_reset_l,
@@ -2233,6 +2243,7 @@ static int qmp_usb_power_on(struct phy *phy)void __iomem *tx = qmp->tx;void __iomem *rx = qmp->rx;void __iomem *pcs = qmp->pcs; +void __iomem *pcs_usb = qmp->pcs_usb;void __iomem *status;unsigned int val;int ret;
@@ -2256,6 +2267,9 @@ static int qmp_usb_power_on(struct phy *phy)qmp_usb_configure (pcs, cfg->pcs_tbl, cfg->pcs_tbl_num); +if (pcs_usb) +qmp_usb_configure (pcs_usb, cfg->pcs_usb_tbl, cfg->pcs_usb_tbl_num); +if (cfg->has_pwrdn_delay)usleep_range (10 ,20 );
drivers/pinctrl/core.c +7 -9
@@ -1012,20 +1012,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);
@@ -1133,6 +1130,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/pinctrl/qcom/pinctrl-lpass-lpi.c +11 -6
@@ -31,7 +31,8 @@ struct lpi_pinctrl {char __iomem *tlmm_base;char __iomem *slew_base;struct clk_bulk_data clks[MAX_LPI_NUM_CLKS ]; -struct mutex slew_access_lock; +/* Protects from concurrent register updates */ +struct mutex lock;DECLARE_BITMAP (ever_gpio,MAX_NR_GPIO );const struct lpi_pinctrl_variant_data *data; };
@@ -102,6 +103,7 @@ static int lpi_gpio_set_mux(struct pinctrl_dev *pctldev, unsigned int function,if (WARN_ON (i == g->nfuncs))return -EINVAL ; +mutex_lock (&pctrl->lock); val =lpi_gpio_read (pctrl, pin,LPI_GPIO_CFG_REG );/*
@@ -127,6 +129,7 @@ static int lpi_gpio_set_mux(struct pinctrl_dev *pctldev, unsigned int function,u32p_replace_bits (&val, i,LPI_GPIO_FUNCTION_MASK );lpi_gpio_write (pctrl, pin,LPI_GPIO_CFG_REG , val); +mutex_unlock (&pctrl->lock);return 0 ; }
@@ -232,14 +235,14 @@ static int lpi_config_set(struct pinctrl_dev *pctldev, unsigned int group,if (slew_offset ==LPI_NO_SLEW )break ; -mutex_lock (&pctrl->slew_access_lock); +mutex_lock (&pctrl->lock); sval =ioread32 (pctrl->slew_base +LPI_SLEW_RATE_CTL_REG ); sval &= ~(LPI_SLEW_RATE_MASK << slew_offset); sval |= arg << slew_offset;iowrite32 (sval, pctrl->slew_base +LPI_SLEW_RATE_CTL_REG ); -mutex_unlock (&pctrl->slew_access_lock); +mutex_unlock (&pctrl->lock);break ;default :return -EINVAL ;
@@ -255,6 +258,7 @@ static int lpi_config_set(struct pinctrl_dev *pctldev, unsigned int group,lpi_gpio_write (pctrl, group,LPI_GPIO_VALUE_REG , val); } +mutex_lock (&pctrl->lock); val =lpi_gpio_read (pctrl, group,LPI_GPIO_CFG_REG );u32p_replace_bits (&val, pullup,LPI_GPIO_PULL_MASK );
@@ -263,6 +267,7 @@ static int lpi_config_set(struct pinctrl_dev *pctldev, unsigned int group,u32p_replace_bits (&val, output_enabled,LPI_GPIO_OE_MASK );lpi_gpio_write (pctrl, group,LPI_GPIO_CFG_REG , val); +mutex_unlock (&pctrl->lock);return 0 ; }
@@ -464,7 +469,7 @@ int lpi_pinctrl_probe(struct platform_device *pdev) pctrl->chip.label =dev_name (dev); pctrl->chip.can_sleep = false; -mutex_init (&pctrl->slew_access_lock); +mutex_init (&pctrl->lock); pctrl->ctrl =devm_pinctrl_register (dev, &pctrl->desc, pctrl);if (IS_ERR (pctrl->ctrl)) {
@@ -486,7 +491,7 @@ int lpi_pinctrl_probe(struct platform_device *pdev)return 0 ; err_pinctrl: -mutex_destroy (&pctrl->slew_access_lock); +mutex_destroy (&pctrl->lock);clk_bulk_disable_unprepare (MAX_LPI_NUM_CLKS , pctrl->clks);return ret;
@@ -498,7 +503,7 @@ int lpi_pinctrl_remove(struct platform_device *pdev)struct lpi_pinctrl *pctrl =platform_get_drvdata (pdev);int i; -mutex_destroy (&pctrl->slew_access_lock); +mutex_destroy (&pctrl->lock);clk_bulk_disable_unprepare (MAX_LPI_NUM_CLKS , pctrl->clks);for (i =0 ; i < pctrl->data->npins; i++)
drivers/platform/surface/surface_platform_profile.c +1 -2
@@ -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/apple-gmux.c +13 -1
@@ -105,6 +105,8 @@ struct apple_gmux_config {#define GMUX_BRIGHTNESS_MASK 0x00ffffff#define GMUX_MAX_BRIGHTNESS GMUX_BRIGHTNESS_MASK +# define MMIO_GMUX_MAX_BRIGHTNESS 0xffff +static u8 gmux_pio_read8 (struct apple_gmux_data *gmux_data,int port)
Lines of this file are not shown. View the raw message.
drivers/platform/x86/intel/uncore-frequency/uncore-frequency-common.c +6 -2
Lines of this file are not shown. View the raw message.
drivers/platform/x86/touchscreen_dmi.c +45 -0
45 lines not on this page · raw message
fs/btrfs/ctree.c +39 -13
52 lines not on this page · raw message
fs/btrfs/delayed-ref.c +35 -11
46 lines not on this page · raw message
fs/nfs/flexfilelayout/flexfilelayout.c +10 -7
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
net/bluetooth/hci_conn.c +97 -38
135 lines not on this page · raw message
net/bluetooth/hci_event.c +50 -27
77 lines not on this page · raw message
net/bluetooth/hci_sync.c +52 -18
70 lines not on this page · raw message
net/core/dev.c +50 -15
65 lines not on this page · raw message
net/mptcp/protocol.c +23 -20
43 lines not on this page · raw message
net/tls/tls_sw.c +35 -22
57 lines not on this page · raw message
sound/soc/codecs/wcd938x.c +57 -19
76 lines not on this page · raw message
tools/testing/selftests/ftrace/test.d/kprobe/kprobe_non_uniq_symbol.tc new file +13 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/mptcp_join.sh +19 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/openvswitch/openvswitch.sh +3 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/openvswitch/ovs-dpctl.py +12 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/netfilter/nft_audit.sh +6 -0
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.