Linux 6.1.60
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.60 kernel.
All users of the 6.1 kernel series must upgrade.
The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/devicetree/bindings/mmc/sdhci-msm.yaml | 2 Makefile | 2 arch/arm/boot/dts/motorola-mapphone-common.dtsi | 1 arch/s390/pci/pci_dma.c | 15 arch/x86/boot/compressed/sev.c | 10 arch/x86/include/asm/fpu/api.h | 3 arch/x86/include/asm/kvm_host.h | 3 arch/x86/include/asm/svm.h | 1 arch/x86/kernel/fpu/core.c | 5 arch/x86/kernel/fpu/xstate.c | 12 arch/x86/kernel/fpu/xstate.h | 3 arch/x86/kernel/sev-shared.c | 53 ++- arch/x86/kernel/sev.c | 30 + arch/x86/kvm/cpuid.c | 8 arch/x86/kvm/lapic.c | 8 arch/x86/kvm/mmu/mmu.c | 9 arch/x86/kvm/mmu/mmu_internal.h | 15 arch/x86/kvm/mmu/tdp_mmu.c | 135 +++---- arch/x86/kvm/mmu/tdp_mmu.h | 4 arch/x86/kvm/svm/avic.c | 5 arch/x86/kvm/svm/nested.c | 3 arch/x86/kvm/x86.c | 42 +- drivers/acpi/irq.c | 7 drivers/ata/libata-core.c | 2 drivers/ata/libata-eh.c | 2 drivers/base/regmap/regmap.c | 2 drivers/bluetooth/btusb.c | 1 drivers/bluetooth/hci_vhci.c | 3 drivers/gpio/gpio-timberdale.c | 5 drivers/gpio/gpio-vf610.c | 46 +- drivers/gpu/drm/amd/pm/amdgpu_pm.c | 1 drivers/gpu/drm/bridge/ti-sn65dsi86.c | 14 drivers/gpu/drm/drm_panel_orientation_quirks.c | 16 drivers/gpu/drm/i915/gem/i915_gem_mman.c | 1 drivers/gpu/drm/mediatek/mtk_drm_gem.c | 6 drivers/hid/.kunitconfig | 1 drivers/hid/Kconfig | 1 drivers/hid/hid-holtek-kbd.c | 4 drivers/hid/hid-input-test.c | 80 ++++ drivers/hid/hid-input.c | 36 +- drivers/hid/hid-logitech-hidpp.c | 2 drivers/hid/hid-multitouch.c | 4 drivers/hid/hid-nintendo.c | 175 +++++----- drivers/i2c/i2c-mux.c | 2 drivers/iio/adc/ad7192.c | 42 +- drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c | 6 drivers/iio/industrialio-core.c | 38 ++ drivers/mmc/core/mmc.c | 2 drivers/mmc/core/sdio.c | 8 drivers/mmc/host/mtk-sd.c | 6 drivers/mmc/host/sdhci-pci-gli.c | 104 +++-- drivers/mtd/maps/physmap-core.c | 11 drivers/mtd/nand/raw/arasan-nand-controller.c | 16 drivers/mtd/nand/raw/marvell_nand.c | 23 + drivers/mtd/nand/raw/pl35x-nand-controller.c | 9 drivers/mtd/nand/raw/qcom_nandc.c | 2 drivers/mtd/nand/spi/micron.c | 2 drivers/net/bonding/bond_main.c | 2 drivers/net/dsa/bcm_sf2.c | 24 - drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_io.c | 36 +- drivers/net/ethernet/intel/i40e/i40e_common.c | 4 drivers/net/ethernet/intel/ice/ice_lib.c | 3 drivers/net/ethernet/intel/ice/ice_main.c | 18 - drivers/net/ethernet/intel/igc/igc.h | 7 drivers/net/ethernet/intel/igc/igc_base.c | 29 + drivers/net/ethernet/intel/igc/igc_base.h | 2 drivers/net/ethernet/intel/igc/igc_defines.h | 1 drivers/net/ethernet/intel/igc/igc_ethtool.c | 1 drivers/net/ethernet/intel/igc/igc_main.c | 20 - drivers/net/ethernet/intel/igc/igc_ptp.c | 57 +-- drivers/net/ethernet/intel/igc/igc_tsn.c | 69 ++- drivers/net/ethernet/marvell/octeon_ep/octep_main.c | 13 drivers/net/ethernet/marvell/sky2.h | 2 drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c | 2 drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c | 3 drivers/net/ethernet/mellanox/mlx5/core/eswitch.c | 17 drivers/net/ethernet/qlogic/qed/qed_ll2.c | 7 drivers/net/phy/bcm7xxx.c | 3 drivers/net/tun.c | 7 drivers/net/usb/smsc95xx.c | 2 drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 3 drivers/net/wireless/marvell/mwifiex/11n_rxreorder.c | 16 drivers/nvme/host/ioctl.c | 10 drivers/nvme/host/pci.c | 3 drivers/nvme/host/rdma.c | 3 drivers/nvme/target/fabrics-cmd-auth.c | 9 drivers/nvme/target/tcp.c | 7 drivers/phy/motorola/phy-mapphone-mdm6600.c | 38 +- drivers/pinctrl/core.c | 16 drivers/platform/surface/surface_platform_profile.c | 3 drivers/platform/x86/asus-nb-wmi.c | 3 drivers/platform/x86/asus-wmi.c | 15 drivers/platform/x86/asus-wmi.h | 2 drivers/platform/x86/intel/uncore-frequency/uncore-frequency-common.c | 8 drivers/platform/x86/touchscreen_dmi.c | 23 + drivers/power/reset/Kconfig | 2 drivers/regulator/core.c | 6 drivers/s390/cio/css.c | 6 drivers/tty/serial/8250/8250_omap.c | 110 ++---- drivers/tty/serial/serial_core.c | 115 +++--- drivers/usb/misc/onboard_usb_hub.c | 5 drivers/usb/misc/onboard_usb_hub.h | 12 drivers/usb/serial/option.c | 7 fs/btrfs/ctree.c | 52 ++ fs/btrfs/delayed-ref.c | 9 fs/btrfs/delayed-ref.h | 1 fs/btrfs/extent-tree.c | 6 fs/btrfs/ioctl.c | 4 fs/btrfs/transaction.c | 6 fs/btrfs/tree-log.c | 2 fs/btrfs/volumes.c | 2 fs/fs-writeback.c | 11 fs/namei.c | 9 fs/nfs/flexfilelayout/flexfilelayout.c | 17 fs/nfs/nfs42proc.c | 3 fs/nfs/nfs4proc.c | 2 fs/nfs/pnfs.c | 33 + fs/ntfs3/fsntfs.c | 6 fs/ntfs3/index.c | 3 fs/ntfs3/xattr.c | 7 fs/overlayfs/copy_up.c | 2 include/linux/fprobe.h | 10 include/linux/fs.h | 2 include/linux/hid.h | 2 include/linux/iio/iio.h | 2 include/linux/kallsyms.h | 8 include/linux/perf_event.h | 1 include/net/bluetooth/hci_core.h | 2 include/net/bluetooth/hci_mon.h | 2 include/net/ip_fib.h | 1 include/net/netns/xfrm.h | 1 include/net/sock.h | 10 include/net/tcp.h | 3 include/trace/events/neigh.h | 4 kernel/auditsc.c | 8 kernel/events/core.c | 39 +- kernel/kallsyms.c | 36 +- kernel/kallsyms_internal.h | 2 kernel/sched/cpufreq_schedutil.c | 3 kernel/trace/bpf_trace.c | 2 kernel/trace/fprobe.c | 32 + kernel/trace/trace_events.c | 1 kernel/trace/trace_kprobe.c | 63 +++ kernel/trace/trace_probe.h | 1 lib/Kconfig.debug | 5 lib/test_fprobe.c | 6 net/bluetooth/hci_conn.c | 72 ++-- net/bluetooth/hci_core.c | 8 net/bluetooth/hci_event.c | 33 + net/bluetooth/hci_sock.c | 3 net/core/dev.c | 65 ++- net/core/dev.h | 3 net/core/pktgen.c | 14 net/core/rtnetlink.c | 4 net/core/stream.c | 12 net/ipv4/af_inet.c | 10 net/ipv4/esp4.c | 4 net/ipv4/fib_semantics.c | 15 net/ipv4/fib_trie.c | 4 net/ipv4/inet_connection_sock.c | 1 net/ipv4/inet_hashtables.c | 24 - net/ipv4/tcp.c | 16 net/ipv4/tcp_bpf.c | 12 net/ipv4/tcp_ipv4.c | 1 net/ipv4/tcp_output.c | 25 + net/ipv4/tcp_recovery.c | 2 net/ipv6/esp6.c | 4 net/ipv6/xfrm6_policy.c | 4 net/mac80211/cfg.c | 3 net/mac80211/ibss.c | 2 net/mac80211/ieee80211_i.h | 1 net/mac80211/mesh_plink.c | 2 net/mac80211/mlme.c | 27 + net/mac80211/tx.c | 3 net/mac80211/vht.c | 16 net/mptcp/protocol.c | 43 +- net/netfilter/nft_payload.c | 2 net/netfilter/nft_set_rbtree.c | 2 net/nfc/nci/spi.c | 2 net/rfkill/rfkill-gpio.c | 4 net/sched/sch_hfsc.c | 18 - net/smc/af_smc.c | 5 net/smc/smc_ib.c | 7 net/smc/smc_ib.h | 2 net/tls/tls_main.c | 10 net/tls/tls_sw.c | 57 ++- net/wireless/core.c | 2 net/wireless/nl80211.c | 2 net/wireless/scan.c | 4 net/xfrm/xfrm_interface_core.c | 22 - net/xfrm/xfrm_policy.c | 21 - samples/fprobe/fprobe_example.c | 6 scripts/kallsyms.c | 5 sound/pci/hda/patch_realtek.c | 27 + sound/soc/codecs/wcd938x-sdw.c | 27 + sound/soc/codecs/wcd938x.c | 50 ++ sound/soc/pxa/pxa-ssp.c | 2 tools/testing/selftests/ftrace/test.d/kprobe/kprobe_non_uniq_symbol.tc | 13 tools/testing/selftests/net/mptcp/mptcp_join.sh | 21 + tools/testing/selftests/net/openvswitch/openvswitch.sh | 4 tools/testing/selftests/net/openvswitch/ovs-dpctl.py | 10 tools/testing/selftests/netfilter/nft_audit.sh | 6 tools/testing/selftests/vm/charge_reserved_hugetlb.sh | 4 tools/testing/selftests/vm/hugetlb_reparenting_test.sh | 4 204 files changed, 2057 insertions(+), 936 deletions(-)
Aaron Conole (2):
selftests: openvswitch: Catch cases where the tests are killed
selftests: openvswitch: Add version check for pyroute2
Albert Huang (1):
net/smc: fix smc clc failed issue when netdevice not in init_net
Alexander Stein (1):
gpio: vf610: make irq_chip immutable
Alisa-Dariana Roman (1):
iio: adc: ad7192: Correct reference voltage
Anand Moon (2):
usb: misc: onboard_usb_hub: add Genesys Logic GL852G hub support
usb: misc: onboard_usb_hub: add Genesys Logic GL3523 hub support
Andy Shevchenko (1):
Revert "pinctrl: avoid unsafe code pattern in find_pinctrl()"
Arkadiusz Bokowy (1):
Bluetooth: vhci: Fix race when opening vhci device
Armin Wolf (1):
platform/surface: platform_profile: Propagate error if profile registration fails
Arnd Bergmann (2):
Bluetooth: avoid memcmp() out of bounds warning
serial: 8250: omap: convert to modern PM ops
Artem Borisov (1):
ALSA: hda/realtek: Add quirk for ASUS ROG GU603ZV
Avri Altman (1):
mmc: core: Capture correct oemid-bits for eMMC cards
Ben Greear (1):
wifi: iwlwifi: Ensure ack flag is properly cleared.
Benjamin Berg (1):
wifi: cfg80211: avoid leaking stack data into trace
Benoît Monin (1):
USB: serial: option: add entry for Sierra EM9191 with new firmware
Bibek Kumar Patro (1):
mtd: rawnand: qcom: Unmap the right resource upon probe failure
Bjorn Helgaas (1):
ice: Remove redundant pci_enable_pcie_error_reporting()
Borislav Petkov (AMD) (1):
x86/sev: Disable MMIO emulation from user mode
Chen-Yu Tsai (1):
drm/mediatek: Correctly free sg_table in gem prime vmap
Chengfeng Ye (1):
gpio: timberdale: Fix potential deadlock on &tgpio->lock
Christoph Paasch (1):
netlink: Correct offload_xstats size
Chunhai Guo (1):
fs-writeback: do not requeue a clean inode having skipped pages
Clément Léger (1):
tracing: relax trace_event_eval_update() execution with cond_resched()
Dai Ngo (1):
nfs42: client needs to strip file mode's suid/sgid bit after ALLOCATE op
Damien Le Moal (2):
ata: libata-core: Fix compilation warning in ata_dev_config_ncq()
ata: libata-eh: Fix compilation warning in ata_eh_link_report()
Dan Carpenter (2):
net: usb: smsc95xx: Fix an error code in smsc95xx_reset()
ASoC: pxa: fix a memory leak in probe()
Dan Clash (1):
audit,io_uring: io_uring openat triggers audit reference count underflow
David Thompson (1):
pwr-mlxbf: extend Kconfig to include gpio-mlxbf3 dependency
Dinghao Liu (1):
s390/cio: fix a memleak in css_alloc_subchannel
Dong Chenchen (1):
net: xfrm: skip policies marked as dead while reinserting policies
Dust Li (1):
net/smc: return the right falback reason when prefix checks fail
Edward AD (1):
Bluetooth: hci_sock: fix slab oob read in create_monitor_event
Eric Dumazet (6):
xfrm: fix a data-race in xfrm_lookup_with_ifid()
xfrm: fix a data-race in xfrm_gen_index()
xfrm: interface: use DEV_STATS_INC()
tcp: tsq: relax tcp_small_queue_check() when rtx queue contains a single skb
tun: prevent negative ifindex
ipv4: fib: annotate races around nh->nh_saddr_genid and nh->nh_saddr
Fabio Porcedda (1):
USB: serial: option: add Telit LE910C4-WWX 0x1035 composition
Filipe Manana (5):
btrfs: prevent transaction block reserve underflow when starting transaction
btrfs: return -EUCLEAN for delayed tree ref with a ref count not equals to 1
btrfs: error out when COWing block using a stale transaction
btrfs: error when COWing block from a root that is being deleted
btrfs: error out when reallocating block for defrag using a stale transaction
Florian Fainelli (1):
net: phy: bcm7xxx: Add missing 16nm EPHY statistics
Florian Westphal (1):
netfilter: nft_payload: fix wrong mac header matching
Francis Laniel (2):
selftests/ftrace: Add new test case which checks non unique symbol tracing/kprobes: Return EADDRNOTAVAIL when func matches several symbols
Gavrilov Ilia (1):
net: pktgen: Fix interface flags printing
Geert Uytterhoeven (3):
neighbor: tracing: Move pin6 inside CONFIG_IPV6=y section
mtd: physmap-core: Restore map_rom fallback
serial: 8250: omap: Move uart_write() inside PM section
Geliang Tang (1):
mptcp: avoid sending RST when closing the initial subflow
Greg Kroah-Hartman (1):
Linux 6.1.60
Gustavo A. R. Silva (1):
wifi: mwifiex: Sanity check tlv_len and tlv_bitmap_len
Haibo Chen (3):
mmc: core: sdio: hold retuning if sdio in 1-bit mode
gpio: vf610: set value before the direction to avoid a glitch
gpio: vf610: mask the gpio irq in system suspend and support wakeup
Hangbin Liu (1):
ipv4/fib: send notify when delete source address routes
Hannes Reinecke (1):
net/tls: split tls_rx_reader_lock
Hans de Goede (4):
HID: logitech-hidpp: Add Bluetooth ID for the Logitech M720 Triathlon mouse platform/x86: asus-wmi: Change ASUS_WMI_BRN_DOWN code from 0x20 to 0x2e platform/x86: asus-wmi: Only map brightness codes when using asus-wmi backlight control platform/x86: asus-wmi: Map 0x2a code, Ignore 0x2b and 0x2c events
Heiner Kallweit (1):
i2c: mux: Avoid potential false error message in i2c_mux_add_adapter
Hyeonggon Yoo (1):
lib/Kconfig.debug: do not enable DEBUG_PREEMPT by default
Icenowy Zheng (1):
usb: misc: onboard_usb_hub: add Genesys Logic GL850G hub support
Ilan Peer (1):
wifi: cfg80211: Fix 6GHz scan configuration
Ilpo Järvinen (2):
serial: Move uart_change_speed() earlier
serial: Rename uart_change_speed() to uart_change_line_settings()
Jakub Kicinski (4):
net: avoid UAF on deleted altname
net: fix ifname in netlink ntf during netns move
net: check for altname conflicts when changing netdev's netns
net: move altnames together with the netdevice
Javier Carrasco (1):
usb: misc: onboard_hub: add support for Microchip USB2412 USB 2.0 hub
Jeff Layton (1):
overlayfs: set ctime when setting mtime and atime
Jesse Brandeburg (2):
ice: fix over-shifted variable
ice: reset first in crash dump kernels
Jianbo Liu (1):
net/mlx5e: Don't offload internal port if filter device is out device
Jim Mattson (1):
KVM: x86: Mask LVTPC when handling a PMI
Jinjie Ruan (1):
net: dsa: bcm_sf2: Fix possible memory leak in bcm_sf2_mdio_register()
Jiri Wiesner (1):
bonding: Return pointer to data after pull on skb
Joerg Roedel (2):
x86/sev: Check IOBM for IOIO exceptions from user-space x86/sev: Check for user-space IOIO pointing to kernel space
Johan Hovold (6):
regmap: fix NULL deref on lookup
ASoC: codecs: wcd938x-sdw: fix use after free on driver unbind
ASoC: codecs: wcd938x-sdw: fix runtime PM imbalance on probe errors
ASoC: codecs: wcd938x: drop bogus bind error handling
ASoC: codecs: wcd938x: fix unbind tear down order
ASoC: codecs: wcd938x: fix resource leaks on bind errors
Johannes Berg (2):
wifi: cfg80211: use system_unbound_wq for wiphy work
wifi: mac80211: work around Cisco AP 9115 VHT MPDU length
Josef Bacik (2):
btrfs: initialize start_slot in btrfs_log_prealloc_extents
btrfs: fix some -Wmaybe-uninitialized warnings in ioctl.c
Josua Mayer (1):
net: rfkill: gpio: prevent value glitch during probe
José Expósito (1):
HID: input: map battery system charging
Juntong Deng (1):
selftests/mm: fix awk usage in charge_reserved_hugetlb.sh and hugetlb_reparenting_test.sh that may cause error
Kai Uwe Broulik (1):
drm: panel-orientation-quirks: Add quirk for One Mix 2S
Kailang Yang (1):
ALSA: hda/realtek - Fixed ASUS platform headset Mic issue
Kees Cook (2):
sky2: Make sure there is at least one frag_addr available
Bluetooth: hci_sock: Correctly bounds check and pad HCI_MON_NEW_INDEX name
Keith Busch (2):
nvme: sanitize metadata bounce buffer for reads
nvme-pci: add BOGUS_NID for Intel 0a54 device
Kenneth Feng (1):
drm/amd/pm: add unique_id for gc 11.0.3
Konstantin Komarov (1):
fs/ntfs3: fix deadlock in mark_as_free_ex
Krzysztof Kozlowski (2):
nfc: nci: fix possible NULL pointer dereference in send_acknowledge()
dt-bindings: mmc: sdhci-msm: correct minimum number of clocks
Kuniyuki Iwashima (1):
tcp: Fix listen() warning with v4-mapped-v6 address.
Lee, Chun-Yi (2):
Bluetooth: hci_event: Ignore NULL link key
Bluetooth: Reject connection with the device which has same BD_ADDR
Luiz Augusto von Dentz (3):
Bluetooth: hci_event: Fix coding style
Bluetooth: hci_core: Fix build warnings
Bluetooth: hci_event: Fix using memcmp when comparing keys
Luka Guzenko (1):
ALSA: hda/relatek: Enable Mute LED on HP Laptop 15s-fq5xxx
Lukas Wunner (1):
serial: Reduce spinlocked portion of uart_rs485_config()
Ma Ke (3):
net: ipv4: fix return value check in esp_remove_trailer
net: ipv6: fix return value check in esp_remove_trailer
HID: holtek: fix slab-out-of-bounds Write in holtek_kbd_input_event
Maher Sanalla (1):
net/mlx5: Handle fw tracer change ownership event based on MTRC
Manish Chopra (1):
qed: fix LL2 RX buffer allocation
Martin Kurbanov (1):
mtd: spinand: micron: correct bitmask for ecc status
Martino Fontana (1):
HID: nintendo: reinitialize USB Pro Controller after resuming from suspend
Masami Hiramatsu (Google) (3):
fprobe: Pass entry_data to handlers
fprobe: Add nr_maxactive to specify rethook_node pool size
fprobe: Fix to ensure the number of active retprobes is not zero
Matthieu Baerts (2):
selftests: mptcp: join: correctly check for no RST
selftests: mptcp: join: no RST when rm subflow/addr
Matti Vaittinen (1):
iio: adc: ad7192: Simplify using devm_regulator_get_enable()
Maurizio Lombardi (2):
nvmet-auth: complete a request only after freeing the dhchap pointers
nvme-rdma: do not try to stop unallocated queues
Maxim Levitsky (2):
x86: KVM: SVM: add support for Invalid IPI Vector interception
x86: KVM: SVM: refresh AVIC inhibition in svm_leave_nested()
Michal Schmidt (1):
i40e: prevent crash on probe if hw registers have invalid values
Michał Mirosław (1):
regulator/core: Revert "fix kobject release warning and memory leak in regulator_register()"
Miquel Raynal (3):
mtd: rawnand: pl353: Ensure program page operations are successful
mtd: rawnand: marvell: Ensure program page operations are successful
mtd: rawnand: arasan: Ensure program page operations are successful
Muhammad Husaini Zulkifli (4):
igc: remove I226 Qbv BaseTime restriction
igc: Remove reset adapter task for i226 during disable tsn config
igc: Add qbv_config_change_errors counter
igc: Add condition for qbv_config_change_errors counter
Neal Cardwell (1):
tcp: fix excessive TLP and RACK timeouts from HZ rounding
Niklas Schnelle (1):
s390/pci: fix iommu bitmap allocation
Nuno Sá (1):
iio: core: introduce iio_device_{claim|release}_buffer_mode() APIs
Olga Kornievskaia (1):
NFSv4.1: fixup use EXCHGID4_FLAG_USE_PNFS_DS for DS server
Pablo Neira Ayuso (3):
netfilter: nft_set_rbtree: .deactivate fails if element has expired
netfilter: nf_tables: do not remove elements if set backend implements .abort
netfilter: nf_tables: revert do not remove elements if set backend implements .abort
Pablo Sun (1):
mmc: mtk-sd: Use readl_poll_timeout_atomic in msdc_reset_hw
Paolo Abeni (4):
tcp: check mptcp-level constraints for backlog coalescing
mptcp: more conservative check for zero probes
tcp: allow again tcp_disconnect() when threads are waiting
tcp_bpf: properly release resources on error paths
Pedro Tammela (1):
net/sched: sch_hfsc: upgrade 'rt' to 'sc' when it becomes a inner curve
Peter Zijlstra (1):
perf: Disallow mis-matched inherited group reads
Phil Sutter (1):
selftests: netfilter: Run nft_audit.sh in its own netns
Puliang Lu (1):
USB: serial: option: add Fibocom to DELL custom modem FM101R-GL
Rahul Rameshbabu (1):
HID: multitouch: Add required quirk for Synaptics 0xcd7e device
Renan Guilherme Lebre Ramos (1):
platform/x86: touchscreen_dmi: Add info for the Positivo C4128B
Rocky Liao (1):
Bluetooth: btusb: add shutdown function for QCA6174
Sagi Grimberg (1):
nvmet-tcp: Fix a possible UAF in queue intialization setup
Sean Christopherson (3):
x86/fpu: Allow caller to constrain xfeatures when copying to uabi buffer
KVM: x86: Constrain guest-supported xfeatures only at KVM_GET_XSAVE{2}
KVM: x86/mmu: Stop zapping invalidated TDP MMU roots asynchronously
Shay Drory (1):
net/mlx5: E-switch, register event handler before arming the event
Shinas Rasheed (1):
octeon_ep: update BQL sent bytes before ringing doorbell
Srinivas Pandruvada (1):
platform/x86: intel-uncore-freq: Conditionally create attribute for read frequency
Stephen Boyd (1):
drm/bridge: ti-sn65dsi86: Associate DSI device lifetime with auxiliary device
Sunil V L (1):
ACPI: irq: Fix incorrect return value in acpi_register_gsi()
Sven van Ashbrook (1):
mmc: sdhci-pci-gli: fix LPM negotiation so x86/S0ix SoCs can suspend
Tan Tee Min (1):
igc: enable Qbv configuration for 2nd GCL
Tony Lindgren (6):
serial: 8250: omap: Fix imprecise external abort for omap_8250_pm()
serial: 8250_omap: Fix errors with no_console_suspend
ARM: dts: ti: omap: Fix noisy serial with overrun-throttle-ms for mapphone
phy: mapphone-mdm6600: Fix runtime disable on probe
phy: mapphone-mdm6600: Fix runtime PM for remove
phy: mapphone-mdm6600: Fix pinctrl_pm handling for sleep pins
Trond Myklebust (2):
pNFS: Fix a hang in nfs4_evict_inode()
pNFS/flexfiles: Check the layout validity in ff_layout_mirror_prepare_stats
Tzung-Bi Shih (1):
iio: cros_ec: fix an use-after-free in cros_ec_sensors_push_data()
Ville Syrjälä (1):
drm/i915: Retry gtt fault when out of fence registers
Vinicius Costa Gomes (1):
igc: Fix race condition in PTP tx code
Wen Gong (1):
wifi: mac80211: allow transmitting EAPOL frames with tainted key
Xuewen Yan (1):
cpufreq: schedutil: Update next_freq when cpufreq_limits change
Ying Hsu (1):
Bluetooth: Avoid redundant authentication
Zeng Heng (1):
fs/ntfs3: fix panic about slab-out-of-bounds caused by ntfs_list_ea()
Zhang Changzhong (1):
xfrm6: fix inet6_dev refcount underflow problem
Zhen Lei (2):
kallsyms: Reduce the memory occupied by kallsyms_seqs_of_names[]
kallsyms: Add helper kallsyms_on_each_match_symbol()
Ziqi Zhao (1):
fs/ntfs3: Fix possible null-pointer dereference in hdr_find_e()
Ziyang Xuan (1):
Bluetooth: Fix a refcnt underflow problem for hci_conn
Zygo Blaxell (1):
btrfs: fix stripe length calculation for non-zoned data chunk allocation
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/mmc/sdhci-msm.yaml +1 -1
@@ -59,7 +59,7 @@ properties: maxItems: 4 clocks: - minItems: 3 + minItems: 2 items: - description: Main peripheral bus clock, PCLK/HCLK - AHB Bus clock - description: SDC MMC clock, MCLK
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 59 +SUBLEVEL = 60 EXTRAVERSION = NAME = Curry Ramen
arch/arm/boot/dts/motorola-mapphone-common.dtsi +1 -0
@@ -640,6 +640,7 @@ &uart1 { &uart3 { interrupts-extended = <&wakeupgen GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH &omap4_pmx_core 0x17c>; + overrun-throttle-ms = <500>; }; &uart4 {
arch/s390/pci/pci_dma.c +13 -2
@@ -544,6 +544,17 @@ static void s390_dma_unmap_sg(struct device *dev, struct scatterlist *sg, s->dma_length =0 ; } } + +static unsigned long *bitmap_vzalloc (size_t bits,gfp_t flags) +{ +size_t n =BITS_TO_LONGS (bits); +size_t bytes; + +if (unlikely (check_mul_overflow (n,sizeof (unsigned long ), &bytes))) +return NULL ; + +return vzalloc (bytes); +}int zpci_dma_init_device (struct zpci_dev *zdev) {
@@ -584,13 +595,13 @@ int zpci_dma_init_device(struct zpci_dev *zdev) zdev->end_dma - zdev->start_dma + 1); zdev->end_dma = zdev->start_dma + zdev->iommu_size -1 ; zdev->iommu_pages = zdev->iommu_size >>PAGE_SHIFT ; - zdev->iommu_bitmap =vzalloc (zdev->iommu_pages /8 ); + zdev->iommu_bitmap =bitmap_vzalloc (zdev->iommu_pages,GFP_KERNEL );if (!zdev->iommu_bitmap) { rc = -ENOMEM ; goto free_dma_table; }if (!s390_iommu_strict) { - zdev->lazy_bitmap =vzalloc (zdev->iommu_pages /8 ); + zdev->lazy_bitmap =bitmap_vzalloc (zdev->iommu_pages,GFP_KERNEL );if (!zdev->lazy_bitmap) { rc = -ENOMEM ; goto free_bitmap;
arch/x86/boot/compressed/sev.c +10 -0
@@ -103,6 +103,16 @@ static enum es_result vc_read_mem(struct es_em_ctxt *ctxt,return ES_OK ; } +static enum es_result vc_ioio_check (struct es_em_ctxt *ctxt,u16 port,size_t size) +{ +return ES_OK ; +} + +static bool fault_in_kernel_space (unsigned long address) +{ +return false; +} +#undef __init#undef __pa#define __init
arch/x86/include/asm/fpu/api.h +2 -1
@@ -148,7 +148,8 @@ static inline void fpu_update_guest_xfd(struct fpu_guest *guest_fpu, u64 xfd) {static inline void fpu_sync_guest_vmexit_xfd_state (void ) { }#endif -extern void fpu_copy_guest_fpstate_to_uabi (struct fpu_guest *gfpu,void *buf,unsigned int size,u32 pkru); +extern void fpu_copy_guest_fpstate_to_uabi (struct fpu_guest *gfpu,void *buf, +unsigned int size,u64 xfeatures,u32 pkru);extern int fpu_copy_uabi_to_guest_fpstate (struct fpu_guest *gfpu,const void *buf,u64 xcr0,u32 *vpkru);static inline void fpstate_set_confidential (struct fpu_guest *gfpu)
arch/x86/include/asm/kvm_host.h +1 -2
@@ -1324,7 +1324,6 @@ struct kvm_arch {* the thread holds the MMU lock in write mode. */ spinlock_t tdp_mmu_pages_lock; -struct workqueue_struct *tdp_mmu_zap_wq;#endif /* CONFIG_X86_64 */ /*
@@ -1727,7 +1726,7 @@ void kvm_mmu_vendor_module_exit(void);void kvm_mmu_destroy (struct kvm_vcpu *vcpu);int kvm_mmu_create (struct kvm_vcpu *vcpu); -int kvm_mmu_init_vm (struct kvm *kvm); +void kvm_mmu_init_vm (struct kvm *kvm);void kvm_mmu_uninit_vm (struct kvm *kvm);void kvm_mmu_after_set_cpuid (struct kvm_vcpu *vcpu);
arch/x86/include/asm/svm.h +1 -0
@@ -259,6 +259,7 @@ enum avic_ipi_failure_cause {AVIC_IPI_FAILURE_TARGET_NOT_RUNNING ,AVIC_IPI_FAILURE_INVALID_TARGET ,AVIC_IPI_FAILURE_INVALID_BACKING_PAGE , + AVIC_IPI_FAILURE_INVALID_IPI_VECTOR, };#define AVIC_PHYSICAL_MAX_INDEX_MASK GENMASK_ULL(8, 0)
arch/x86/kernel/fpu/core.c +3 -2
@@ -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
@@ -512,6 +512,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"
@@ -1552,6 +1579,9 @@ static enum es_result vc_handle_mmio(struct ghcb *ghcb, struct es_em_ctxt *ctxt)return ES_DECODE_FAILED ; } +if (user_mode (ctxt->regs)) +return ES_UNSUPPORTED ; +switch (mmio) {case MMIO_WRITE :memcpy (ghcb->shared_buffer, reg_data, bytes);
arch/x86/kvm/cpuid.c +0 -8
@@ -338,14 +338,6 @@ static void kvm_vcpu_after_set_cpuid(struct kvm_vcpu *vcpu) vcpu->arch.guest_supported_xcr0 =cpuid_get_supported_xcr0 (vcpu->arch.cpuid_entries, vcpu->arch.cpuid_nent); -/* -* FP+SSE can always be saved/restored via KVM_{G,S}ET_XSAVE, even if -* XSAVE/XCRO are not exposed to the guest, and even if XSAVE isn't -* supported by the host. -*/ - vcpu->arch.guest_fpu.fpstate->user_xfeatures = vcpu->arch.guest_supported_xcr0 | -XFEATURE_MASK_FPSSE ; -kvm_update_pv_runtime (vcpu); vcpu->arch.maxphyaddr =cpuid_query_maxphyaddr (vcpu);
arch/x86/kvm/lapic.c +6 -2
@@ -2535,13 +2535,17 @@ int kvm_apic_local_deliver(struct kvm_lapic *apic, int lvt_type) {u32 reg =kvm_lapic_get_reg (apic, lvt_type);int vector, mode, trig_mode; +int r;if (kvm_apic_hw_enabled (apic) && !(reg &APIC_LVT_MASKED )) { vector = reg &APIC_VECTOR_MASK ; mode = reg &APIC_MODE_MASK ; trig_mode = reg &APIC_LVT_LEVEL_TRIGGER ; -return __apic_accept_irq (apic, mode, vector,1 , trig_mode, -NULL ); + + r =__apic_accept_irq (apic, mode, vector,1 , trig_mode,NULL ); +if (r && lvt_type ==APIC_LVTPC ) +kvm_lapic_set_reg (apic,APIC_LVTPC , reg |APIC_LVT_MASKED ); +return r; }return 0 ; }
arch/x86/kvm/mmu/mmu.c +2 -7
@@ -5994,19 +5994,16 @@ static void kvm_mmu_invalidate_zap_pages_in_memslot(struct kvm *kvm,kvm_mmu_zap_all_fast (kvm); } -int kvm_mmu_init_vm (struct kvm *kvm) +void kvm_mmu_init_vm (struct kvm *kvm) {struct kvm_page_track_notifier_node *node = &kvm->arch.mmu_sp_tracker; -int r;INIT_LIST_HEAD (&kvm->arch.active_mmu_pages);INIT_LIST_HEAD (&kvm->arch.zapped_obsolete_pages);INIT_LIST_HEAD (&kvm->arch.lpage_disallowed_mmu_pages);spin_lock_init (&kvm->arch.mmu_unsync_pages_lock); - r =kvm_mmu_init_tdp_mmu (kvm); -if (r <0 ) -return r; +kvm_mmu_init_tdp_mmu (kvm); node->track_write = kvm_mmu_pte_write; node->track_flush_slot = kvm_mmu_invalidate_zap_pages_in_memslot;
@@ -6019,8 +6016,6 @@ int kvm_mmu_init_vm(struct kvm *kvm) kvm->arch.split_desc_cache.kmem_cache = pte_list_desc_cache; kvm->arch.split_desc_cache.gfp_zero = __GFP_ZERO; - -return 0 ; }static void mmu_free_vm_memory_caches (struct kvm *kvm)
arch/x86/kvm/mmu/mmu_internal.h +7 -8
@@ -56,7 +56,12 @@ struct kvm_mmu_page {bool tdp_mmu_page;bool unsync; -u8 mmu_valid_gen; +union { +u8 mmu_valid_gen; + +/* Only accessed under slots_lock. */ +bool tdp_mmu_scheduled_root_to_zap; + };bool lpage_disallowed;/* Can't be replaced by an equiv large page */ /*
@@ -92,13 +97,7 @@ struct kvm_mmu_page {struct kvm_rmap_head parent_ptes;/* rmap pointers to parent sptes */ tdp_ptep_t ptep; }; -union { - DECLARE_BITMAP(unsync_child_bitmap, 512); -struct { -struct work_struct tdp_mmu_async_work; -void *tdp_mmu_async_data; - }; - }; +DECLARE_BITMAP (unsync_child_bitmap,512 );struct list_head lpage_disallowed_link;#ifdef CONFIG_X86_32
arch/x86/kvm/mmu/tdp_mmu.c +56 -79
215 lines not on this page · raw message
arch/x86/kvm/mmu/tdp_mmu.h +2 -2
@@ -65,7 +65,7 @@ u64 *kvm_tdp_mmu_fast_pf_get_last_sptep(struct kvm_vcpu *vcpu, u64 addr, u64 *spte);#ifdef CONFIG_X86_64 -int kvm_mmu_init_tdp_mmu (struct kvm *kvm); +void kvm_mmu_init_tdp_mmu (struct kvm *kvm);void kvm_mmu_uninit_tdp_mmu (struct kvm *kvm);static inline bool is_tdp_mmu_page (struct kvm_mmu_page *sp) {return sp->tdp_mmu_page; }
@@ -86,7 +86,7 @@ static inline bool is_tdp_mmu(struct kvm_mmu *mmu) return sp && is_tdp_mmu_page(sp) && sp->root_count; }#else -static inline int kvm_mmu_init_tdp_mmu (struct kvm *kvm) {return 0 ; } +static inline void kvm_mmu_init_tdp_mmu (struct kvm *kvm) {}static inline void kvm_mmu_uninit_tdp_mmu (struct kvm *kvm) {}static inline bool is_tdp_mmu_page (struct kvm_mmu_page *sp) {return false; }static inline bool is_tdp_mmu (struct kvm_mmu *mmu) {return false; }
arch/x86/kvm/svm/avic.c +4 -1
@@ -542,8 +542,11 @@ int avic_incomplete_ipi_interception(struct kvm_vcpu *vcpu)case AVIC_IPI_FAILURE_INVALID_BACKING_PAGE :WARN_ONCE (1 ,"Invalid backing page\n" );break ; +case AVIC_IPI_FAILURE_INVALID_IPI_VECTOR : +/* Invalid IPI with vector < 16 */ +break ;default : -pr_err ("Unknown IPI interception\n" ); +vcpu_unimpl (vcpu,"Unknown avic incomplete IPI interception\n" ); }return 1 ;
arch/x86/kvm/svm/nested.c +3 -0
@@ -1164,6 +1164,9 @@ void svm_leave_nested(struct kvm_vcpu *vcpu)nested_svm_uninit_mmu_context (vcpu);vmcb_mark_all_dirty (svm->vmcb); + +if (kvm_apicv_activated (vcpu->kvm)) +kvm_make_request (KVM_REQ_APICV_UPDATE , vcpu); }kvm_clear_request (KVM_REQ_GET_NESTED_STATE_PAGES , vcpu);
arch/x86/kvm/x86.c +25 -17
67 lines not on this page · raw message
drivers/acpi/irq.c +6 -1
@@ -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
@@ -2456,7 +2456,7 @@ static int ata_dev_config_lba(struct ata_device *dev) {const u16 *id = dev->id;const char *lba_desc; -char ncq_desc[24 ]; +char ncq_desc[32 ];int ret; dev->flags |=ATA_DFLAG_LBA ;
drivers/ata/libata-eh.c +1 -1
@@ -2247,7 +2247,7 @@ static void ata_eh_link_report(struct ata_link *link)struct ata_eh_context *ehc = &link->eh_context;struct ata_queued_cmd *qc;const char *frozen, *desc; -char tries_buf[6 ] ="" ; +char tries_buf[16 ] ="" ;int tag, nr_failed =0 ;if (ehc->i.flags &ATA_EHI_QUIET )
drivers/base/regmap/regmap.c +1 -1
@@ -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
@@ -3984,6 +3984,7 @@ static int btusb_probe(struct usb_interface *intf,if (id->driver_info &BTUSB_QCA_ROME ) { data->setup_on_usb = btusb_setup_qca; + hdev->shutdown = btusb_shutdown_qca; hdev->set_bdaddr = btusb_set_bdaddr_ath3012; hdev->cmd_timeout = btusb_qca_cmd_timeout;set_bit (HCI_QUIRK_SIMULTANEOUS_DISCOVERY , &hdev->quirks);
drivers/bluetooth/hci_vhci.c +3 -0
@@ -74,7 +74,10 @@ static int vhci_send_frame(struct hci_dev *hdev, struct sk_buff *skb)struct vhci_data *data =hci_get_drvdata (hdev);memcpy (skb_push (skb,1 ), &hci_skb_pkt_type (skb),1 ); + +mutex_lock (&data->open_mutex);skb_queue_tail (&data->readq, skb); +mutex_unlock (&data->open_mutex);wake_up_interruptible (&data->read_wait);return 0 ;
drivers/gpio/gpio-timberdale.c +3 -2
@@ -43,9 +43,10 @@ static int timbgpio_update_bit(struct gpio_chip *gpio, unsigned index, unsigned offset, bool enabled) {struct timbgpio *tgpio =gpiochip_get_data (gpio); +unsigned long flags;u32 reg; -spin_lock (&tgpio->lock); +spin_lock_irqsave (&tgpio->lock, flags); reg =ioread32 (tgpio->membase + offset);if (enabled)
@@ -54,7 +55,7 @@ static int timbgpio_update_bit(struct gpio_chip *gpio, unsigned index, reg &= ~(1 << index);iowrite32 (reg, tgpio->membase + offset); -spin_unlock (&tgpio->lock); +spin_unlock_irqrestore (&tgpio->lock, flags);return 0 ; }
drivers/gpio/gpio-vf610.c +26 -20
101 lines not on this page · raw message
drivers/gpu/drm/amd/pm/amdgpu_pm.c +1 -0
@@ -1991,6 +1991,7 @@ static int default_attr_update(struct amdgpu_device *adev, struct amdgpu_device_case IP_VERSION (11 ,0 ,0 ):case IP_VERSION (11 ,0 ,1 ):case IP_VERSION (11 ,0 ,2 ): +case IP_VERSION (11 ,0 ,3 ): *states =ATTR_STATE_SUPPORTED ;break ;default :
drivers/gpu/drm/bridge/ti-sn65dsi86.c +7 -7
@@ -673,7 +673,7 @@ static struct ti_sn65dsi86 *bridge_to_ti_sn65dsi86(struct drm_bridge *bridge) return container_of(bridge, struct ti_sn65dsi86, bridge); } -static int ti_sn_attach_host (struct ti_sn65dsi86 *pdata) +static int ti_sn_attach_host (struct auxiliary_device *adev,struct ti_sn65dsi86 *pdata) {int val;struct mipi_dsi_host *host;
@@ -688,7 +688,7 @@ static int ti_sn_attach_host(struct ti_sn65dsi86 *pdata)if (!host)return -EPROBE_DEFER ; - dsi =devm_mipi_dsi_device_register_full (dev, host, &info); + dsi =devm_mipi_dsi_device_register_full (&adev->dev, host, &info);if (IS_ERR (dsi))return PTR_ERR (dsi);
@@ -706,7 +706,7 @@ static int ti_sn_attach_host(struct ti_sn65dsi86 *pdata) pdata->dsi = dsi; -return devm_mipi_dsi_attach (dev, dsi); +return devm_mipi_dsi_attach (&adev->dev, dsi); } static int ti_sn_bridge_attach(struct drm_bridge *bridge,
@@ -1279,9 +1279,9 @@ static int ti_sn_bridge_probe(struct auxiliary_device *adev,struct device_node *np = pdata->dev->of_node;int ret; - pdata->next_bridge =devm_drm_of_get_bridge (pdata->dev, np,1 ,0 ); + pdata->next_bridge =devm_drm_of_get_bridge (&adev->dev, np,1 ,0 );if (IS_ERR (pdata->next_bridge)) -return dev_err_probe (pdata->dev,PTR_ERR (pdata->next_bridge), +return dev_err_probe (&adev->dev,PTR_ERR (pdata->next_bridge),"failed to create panel bridge\n" );ti_sn_bridge_parse_lanes (pdata, np);
@@ -1300,9 +1300,9 @@ static int ti_sn_bridge_probe(struct auxiliary_device *adev,drm_bridge_add (&pdata->bridge); - ret =ti_sn_attach_host (pdata); + ret =ti_sn_attach_host (adev, pdata);if (ret) { -dev_err_probe (pdata->dev, ret,"failed to attach dsi host\n" ); +dev_err_probe (&adev->dev, ret,"failed to attach dsi host\n" ); goto err_remove_bridge; }
drivers/gpu/drm/drm_panel_orientation_quirks.c +16 -0
@@ -38,6 +38,14 @@ static const struct drm_dmi_panel_orientation_data gpd_micropc = { .orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP, }; +static const struct drm_dmi_panel_orientation_data gpd_onemix2s = { + .width =1200 , + .height =1920 , + .bios_dates = (const char *const []){"05/21/2018" ,"10/26/2018" , +"03/04/2019" ,NULL }, + .orientation =DRM_MODE_PANEL_ORIENTATION_RIGHT_UP , +}; +static const struct drm_dmi_panel_orientation_data gpd_pocket = { .width =1200 , .height =1920 ,
@@ -401,6 +409,14 @@ static const struct dmi_system_id orientation_data[] = { DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "LTH17"), }, .driver_data = (void *)&lcd800x1280_rightside_up, + }, { /* One Mix 2S (generic strings, also match on bios date) */ + .matches = { + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Default string"), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Default string"), + DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "Default string"), + DMI_EXACT_MATCH(DMI_BOARD_NAME, "Default string"), + }, + .driver_data = (void *)&gpd_onemix2s, }, {} };
drivers/gpu/drm/i915/gem/i915_gem_mman.c +1 -0
@@ -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
@@ -234,6 +234,7 @@ int mtk_drm_gem_prime_vmap(struct drm_gem_object *obj, struct iosys_map *map) npages = obj->size >>PAGE_SHIFT ; mtk_gem->pages =kcalloc (npages,sizeof (*mtk_gem->pages),GFP_KERNEL );if (!mtk_gem->pages) { +sg_free_table (sgt);kfree (sgt);return -ENOMEM ; }
@@ -243,12 +244,15 @@ int mtk_drm_gem_prime_vmap(struct drm_gem_object *obj, struct iosys_map *map) mtk_gem->kvaddr =vmap (mtk_gem->pages, npages,VM_MAP ,pgprot_writecombine (PAGE_KERNEL ));if (!mtk_gem->kvaddr) { +sg_free_table (sgt);kfree (sgt);kfree (mtk_gem->pages);return -ENOMEM ; } -out: +sg_free_table (sgt);kfree (sgt); + +out:iosys_map_set_vaddr (map, mtk_gem->kvaddr);return 0 ;
drivers/hid/.kunitconfig +1 -0
@@ -1,5 +1,6 @@ CONFIG_KUNIT=y CONFIG_USB=y CONFIG_USB_HID=y +CONFIG_HID_BATTERY_STRENGTH=y CONFIG_HID_UCLOGIC=y CONFIG_HID_KUNIT_TEST=y
drivers/hid/Kconfig +1 -0
@@ -1263,6 +1263,7 @@ config HID_MCP2221 config HID_KUNIT_TEST tristate "KUnit tests for HID" if !KUNIT_ALL_TESTS depends on KUNIT + depends on HID_BATTERY_STRENGTH depends on HID_UCLOGIC default KUNIT_ALL_TESTS help
drivers/hid/hid-holtek-kbd.c +4 -0
@@ -130,6 +130,10 @@ static int holtek_kbd_input_event(struct input_dev *dev, unsigned int type,return -ENODEV ; boot_hid =usb_get_intfdata (boot_interface); +if (list_empty (&boot_hid->inputs)) { +hid_err (hid,"no inputs found\n" ); +return -ENODEV ; + } boot_hid_input =list_first_entry (&boot_hid->inputs, struct hid_input, list);
drivers/hid/hid-input-test.c new file +80 -0
80 lines not on this page · raw message
drivers/hid/hid-input.c +34 -2
@@ -492,7 +492,7 @@ static int hidinput_get_battery_property(struct power_supply *psy,if (dev->battery_status ==HID_BATTERY_UNKNOWN ) val->intval =POWER_SUPPLY_STATUS_UNKNOWN ;else - val->intval =POWER_SUPPLY_STATUS_DISCHARGING ; + val->intval = dev->battery_charge_status;break ;case POWER_SUPPLY_PROP_SCOPE :
@@ -560,6 +560,7 @@ static int hidinput_setup_battery(struct hid_device *dev, unsigned report_type, dev->battery_max = max; dev->battery_report_type = report_type; dev->battery_report_id = field->report->id; + dev->battery_charge_status =POWER_SUPPLY_STATUS_DISCHARGING ;/* * Stylus is normally not connected to the device and thus we
@@ -626,6 +627,20 @@ static void hidinput_update_battery(struct hid_device *dev, int value) power_supply_changed(dev->battery); } } + +static bool hidinput_set_battery_charge_status (struct hid_device *dev, +unsigned int usage,int value) +{ +switch (usage) { +case HID_BAT_CHARGING : + dev->battery_charge_status = value ? +POWER_SUPPLY_STATUS_CHARGING : +POWER_SUPPLY_STATUS_DISCHARGING ; +return true; + } + +return false; +}#else /* !CONFIG_HID_BATTERY_STRENGTH */ static int hidinput_setup_battery (struct hid_device *dev,unsigned report_type,struct hid_field *field,bool is_percentage)
@@ -640,6 +655,12 @@ static void hidinput_cleanup_battery(struct hid_device *dev)static void hidinput_update_battery (struct hid_device *dev,int value) { } + +static bool hidinput_set_battery_charge_status (struct hid_device *dev, +unsigned int usage,int value) +{ +return false; +}#endif /* CONFIG_HID_BATTERY_STRENGTH */ static bool hidinput_field_in_collection(struct hid_device *device, struct hid_field *field,
@@ -1239,6 +1260,9 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fielhidinput_setup_battery (device,HID_INPUT_REPORT , field, true); usage->type =EV_PWR ;return ; +case HID_BAT_CHARGING : + usage->type =EV_PWR ; +return ; } goto unknown;
@@ -1481,7 +1505,11 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, structreturn ;if (usage->type ==EV_PWR ) { -hidinput_update_battery (hid, value); +bool handled =hidinput_set_battery_charge_status (hid, usage->hid, value); + +if (!handled) +hidinput_update_battery (hid, value); +return ; }
@@ -2346,3 +2374,7 @@ void hidinput_disconnect(struct hid_device *hid)cancel_work_sync (&hid->led_work); }EXPORT_SYMBOL_GPL (hidinput_disconnect); + +#ifdef CONFIG_HID_KUNIT_TEST +#include "hid-input-test.c" +#endif
drivers/hid/hid-logitech-hidpp.c +2 -0
@@ -4427,6 +4427,8 @@ static const struct hid_device_id hidpp_devices[] = { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb008) }, {/* MX Master mouse over Bluetooth */ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb012) }, + { /* M720 Triathlon mouse over Bluetooth */ + HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb015) }, { /* MX Ergo trackball over Bluetooth */ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb01d) }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb01e) },
drivers/hid/hid-multitouch.c +4 -0
@@ -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/adc/ad7192.c +26 -16
57 lines not on this page · raw message
drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c +5 -1
@@ -190,8 +190,11 @@ int cros_ec_sensors_push_data(struct iio_dev *indio_dev,/* * Ignore samples if the buffer is not set: it is needed if the ODR is * set but the buffer is not enabled yet. +* +* Note: iio_device_claim_buffer_mode() returns -EBUSY if the buffer +* is not enabled. */ -if (!iio_buffer_enabled (indio_dev)) +if (iio_device_claim_buffer_mode (indio_dev) <0 )return 0 ; out = (s16 *)st->samples;
@@ -210,6 +213,7 @@ int cros_ec_sensors_push_data(struct iio_dev *indio_dev,iio_push_to_buffers_with_timestamp (indio_dev, st->samples, timestamp + delta); +iio_device_release_buffer_mode (indio_dev);return 0 ; }EXPORT_SYMBOL_GPL (cros_ec_sensors_push_data);
drivers/iio/industrialio-core.c +38 -0
@@ -2084,6 +2084,44 @@ void iio_device_release_direct_mode(struct iio_dev *indio_dev) }EXPORT_SYMBOL_GPL (iio_device_release_direct_mode); +/** +* iio_device_claim_buffer_mode - Keep device in buffer mode +* @indio_dev: the iio_dev associated with the device +* +* If the device is in buffer mode it is guaranteed to stay +* that way until iio_device_release_buffer_mode() is called. +* +* Use with iio_device_release_buffer_mode(). +* +* Returns: 0 on success, -EBUSY on failure. +*/ +int iio_device_claim_buffer_mode (struct iio_dev *indio_dev) +{ +mutex_lock (&indio_dev->mlock); + +if (iio_buffer_enabled (indio_dev)) +return 0 ; + +mutex_unlock (&indio_dev->mlock); +return -EBUSY ; +} +EXPORT_SYMBOL_GPL (iio_device_claim_buffer_mode); + +/** +* iio_device_release_buffer_mode - releases claim on buffer mode +* @indio_dev: the iio_dev associated with the device +* +* Release the claim. Device is no longer guaranteed to stay +* in buffer mode. +* +* Use with iio_device_claim_buffer_mode(). +*/ +void iio_device_release_buffer_mode (struct iio_dev *indio_dev) +{ +mutex_unlock (&indio_dev->mlock); +} +EXPORT_SYMBOL_GPL (iio_device_release_buffer_mode); +/** * iio_device_get_current_mode() - helper function providing read-only access to * the opaque @currentmode variable
drivers/mmc/core/mmc.c +1 -1
@@ -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
@@ -655,11 +655,11 @@ static void msdc_reset_hw(struct msdc_host *host)u32 val;sdr_set_bits (host->base +MSDC_CFG ,MSDC_CFG_RST ); -readl_poll_timeout (host->base +MSDC_CFG , val, !(val &MSDC_CFG_RST ),0 ,0 ); +readl_poll_timeout_atomic (host->base +MSDC_CFG , val, !(val &MSDC_CFG_RST ),0 ,0 );sdr_set_bits (host->base +MSDC_FIFOCS ,MSDC_FIFOCS_CLR ); -readl_poll_timeout (host->base +MSDC_FIFOCS , val, - !(val &MSDC_FIFOCS_CLR ),0 ,0 ); +readl_poll_timeout_atomic (host->base +MSDC_FIFOCS , val, + !(val &MSDC_FIFOCS_CLR ),0 ,0 ); val =readl (host->base +MSDC_INT );writel (val, host->base +MSDC_INT );
drivers/mmc/host/sdhci-pci-gli.c +66 -38
122 lines not on this page · raw message
drivers/mtd/maps/physmap-core.c +11 -0
@@ -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
@@ -1154,6 +1154,7 @@ static int marvell_nfc_hw_ecc_hmg_do_write_page(struct nand_chip *chip, .ndcb[2] = NDCB2_ADDR5_PAGE(page), };unsigned int oob_bytes = lt->spare_bytes + (raw ? lt->ecc_bytes :0 ); +u8 status;int ret;/* NFCv2 needs more information about the operation being executed */
@@ -1187,7 +1188,18 @@ static int marvell_nfc_hw_ecc_hmg_do_write_page(struct nand_chip *chip, ret =marvell_nfc_wait_op (chip,PSEC_TO_MSEC (sdr->tPROG_max)); -return ret; +if (ret) +return ret; + +/* Check write status on the chip side */ + ret =nand_status_op (chip, &status); +if (ret) +return ret; + +if (status &NAND_STATUS_FAIL ) +return -EIO ; + +return 0 ; } static int marvell_nfc_hw_ecc_hmg_write_page_raw(struct nand_chip *chip,
@@ -1616,6 +1628,7 @@ static int marvell_nfc_hw_ecc_bch_write_page(struct nand_chip *chip,int data_len = lt->data_bytes;int spare_len = lt->spare_bytes;int chunk, ret; +u8 status;marvell_nfc_select_target (chip, chip->cur_cs);
@@ -1652,6 +1665,14 @@ static int marvell_nfc_hw_ecc_bch_write_page(struct nand_chip *chip,if (ret)return ret; +/* Check write status on the chip side */ + ret =nand_status_op (chip, &status); +if (ret) +return ret; + +if (status &NAND_STATUS_FAIL ) +return -EIO ; +return 0 ; }
drivers/mtd/nand/raw/pl35x-nand-controller.c +9 -0
@@ -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
@@ -3310,7 +3310,7 @@ static int qcom_nandc_probe(struct platform_device *pdev) err_aon_clk:clk_disable_unprepare (nandc->core_clk); err_core_clk: -dma_unmap_resource (dev, res->start,resource_size (res), +dma_unmap_resource (dev, nandc->base_dma,resource_size (res),DMA_BIDIRECTIONAL ,0 );return ret; }
drivers/mtd/nand/spi/micron.c +1 -1
@@ -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
@@ -3990,7 +3990,7 @@ static inline const void *bond_pull_data(struct sk_buff *skb,if (likely (n <= hlen))return data;else if (skb &&likely (pskb_may_pull (skb, n))) -return skb->head; +return skb->data;return NULL ; }
drivers/net/dsa/bcm_sf2.c +15 -9
@@ -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;
@@ -1438,6 +1441,7 @@ static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,int copied =0 ;int target;long timeo; +int ret; buffers_freed =0 ;
@@ -1513,7 +1517,11 @@ static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,if (copied >= target)break ;chtls_cleanup_rbuf (sk, copied); -sk_wait_data (sk, &timeo,NULL ); + ret =sk_wait_data (sk, &timeo,NULL ); +if (ret <0 ) { + copied = copied ? : ret; + goto unlock; + }continue ; found_ok_skb:if (!skb->len) {
@@ -1608,6 +1616,8 @@ static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,if (buffers_freed)chtls_cleanup_rbuf (sk, copied); + +unlock:release_sock (sk);return copied; }
@@ -1624,6 +1634,7 @@ static int peekmsg(struct sock *sk, struct msghdr *msg,int copied =0 ;size_t avail;/* amount of available data in current skb */ long timeo; +int ret;lock_sock (sk); timeo =sock_rcvtimeo (sk, flags &MSG_DONTWAIT );
@@ -1675,7 +1686,12 @@ static int peekmsg(struct sock *sk, struct msghdr *msg,release_sock (sk);lock_sock (sk); }else { -sk_wait_data (sk, &timeo,NULL ); + ret =sk_wait_data (sk, &timeo,NULL ); +if (ret <0 ) { +/* here 'copied' is 0 due to previous checks */ + copied = ret; +break ; + } }if (unlikely (peek_seq != tp->copied_seq)) {
@@ -1746,6 +1762,7 @@ int chtls_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,int copied =0 ;long timeo;int target;/* Read at least this many bytes */ +int ret; buffers_freed =0 ;
@@ -1837,7 +1854,11 @@ int chtls_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,if (copied >= target)break ;chtls_cleanup_rbuf (sk, copied); -sk_wait_data (sk, &timeo,NULL ); + ret =sk_wait_data (sk, &timeo,NULL ); +if (ret <0 ) { + copied = copied ? : ret; + goto unlock; + }continue ; found_ok_skb:
@@ -1906,6 +1927,7 @@ int chtls_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,if (buffers_freed)chtls_cleanup_rbuf (sk, copied); +unlock:release_sock (sk);return copied; }
drivers/net/ethernet/intel/i40e/i40e_common.c +2 -2
@@ -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
@@ -1100,8 +1100,7 @@ static void ice_set_rss_vsi_ctx(struct ice_vsi_ctx *ctxt, struct ice_vsi *vsi) ctxt->info.q_opt_rss = ((lut_type <<ICE_AQ_VSI_Q_OPT_RSS_LUT_S ) &ICE_AQ_VSI_Q_OPT_RSS_LUT_M ) | - ((hash_type <<ICE_AQ_VSI_Q_OPT_RSS_HASH_S ) & -ICE_AQ_VSI_Q_OPT_RSS_HASH_M ); + (hash_type &ICE_AQ_VSI_Q_OPT_RSS_HASH_M ); } static void
drivers/net/ethernet/intel/ice/ice_main.c +15 -3
@@ -6,6 +6,7 @@#define pr_fmt (fmt) KBUILD_MODNAME ": " fmt#include <generated/utsrelease.h> +#include <linux/crash_dump.h> #include "ice.h" #include "ice_base.h" #include "ice_lib.h"
@@ -4681,6 +4682,20 @@ ice_probe(struct pci_dev *pdev, const struct pci_device_id __always_unused *ent)return -EINVAL ; } +/* when under a kdump kernel initiate a reset before enabling the +* device in order to clear out any pending DMA transactions. These +* transactions can cause some systems to machine check when doing +* the pcim_enable_device() below. +*/ +if (is_kdump_kernel ()) { +pci_save_state (pdev); +pci_clear_master (pdev); + err =pcie_flr (pdev); +if (err) +return err; +pci_restore_state (pdev); + } +/* this driver uses devres, see * Documentation/driver-api/driver-model/devres.rst */
@@ -4708,7 +4723,6 @@ ice_probe(struct pci_dev *pdev, const struct pci_device_id __always_unused *ent)return err; } -pci_enable_pcie_error_reporting (pdev);pci_set_master (pdev); pf->pdev = pdev;
@@ -5001,7 +5015,6 @@ ice_probe(struct pci_dev *pdev, const struct pci_device_id __always_unused *ent)ice_devlink_destroy_regions (pf);ice_deinit_hw (hw); err_exit_unroll: -pci_disable_pcie_error_reporting (pdev);pci_disable_device (pdev);return err; }
@@ -5127,7 +5140,6 @@ static void ice_remove(struct pci_dev *pdev)ice_reset (&pf->hw,ICE_RESET_PFR );pci_wait_for_pending_transaction (pdev);ice_clear_interrupt_scheme (pf); -pci_disable_pcie_error_reporting (pdev);pci_disable_device (pdev); }
drivers/net/ethernet/intel/igc/igc.h +6 -1
@@ -183,9 +183,11 @@ struct igc_adapter {u32 max_frame_size;u32 min_frame_size; +int tc_setup_type;ktime_t base_time;ktime_t cycle_time;bool qbv_enable; +u32 qbv_config_change_errors;/* OS defined structs */ struct pci_dev *pdev;
@@ -228,6 +230,10 @@ struct igc_adapter {struct ptp_clock *ptp_clock;struct ptp_clock_info ptp_caps;struct work_struct ptp_tx_work; +/* Access to ptp_tx_skb and ptp_tx_start are protected by the +* ptp_tx_lock. +*/ +spinlock_t ptp_tx_lock;struct sk_buff *ptp_tx_skb;struct hwtstamp_config tstamp_config;unsigned long ptp_tx_start;
@@ -429,7 +435,6 @@ enum igc_state_t { __IGC_TESTING, __IGC_RESETTING, __IGC_DOWN, - __IGC_PTP_TX_IN_PROGRESS, }; enum igc_tx_flags {
drivers/net/ethernet/intel/igc/igc_base.c +29 -0
@@ -396,6 +396,35 @@ void igc_rx_fifo_flush_base(struct igc_hw *hw)rd32 (IGC_MPC ); } +bool igc_is_device_id_i225 (struct igc_hw *hw) +{ +switch (hw->device_id) { +case IGC_DEV_ID_I225_LM : +case IGC_DEV_ID_I225_V : +case IGC_DEV_ID_I225_I : +case IGC_DEV_ID_I225_K : +case IGC_DEV_ID_I225_K2 : +case IGC_DEV_ID_I225_LMVP : +case IGC_DEV_ID_I225_IT : +return true; +default : +return false; + } +} + +bool igc_is_device_id_i226 (struct igc_hw *hw) +{ +switch (hw->device_id) { +case IGC_DEV_ID_I226_LM : +case IGC_DEV_ID_I226_V : +case IGC_DEV_ID_I226_K : +case IGC_DEV_ID_I226_IT : +return true; +default : +return false; + } +} +static struct igc_mac_operations igc_mac_ops_base = { .init_hw = igc_init_hw_base, .check_for_link = igc_check_for_copper_link,
drivers/net/ethernet/intel/igc/igc_base.h +2 -0
@@ -7,6 +7,8 @@/* forward declaration */ void igc_rx_fifo_flush_base (struct igc_hw *hw);void igc_power_down_phy_copper_base (struct igc_hw *hw); +bool igc_is_device_id_i225 (struct igc_hw *hw); +bool igc_is_device_id_i226 (struct igc_hw *hw);/* Transmit Descriptor - Advanced */ union igc_adv_tx_desc {
drivers/net/ethernet/intel/igc/igc_defines.h +1 -0
@@ -515,6 +515,7 @@/* Transmit Scheduling */ #define IGC_TQAVCTRL_TRANSMIT_MODE_TSN 0x00000001#define IGC_TQAVCTRL_ENHANCED_QAV 0x00000008 +#define IGC_TQAVCTRL_FUTSCDDIS 0x00000080#define IGC_TXQCTL_QUEUE_MODE_LAUNCHT 0x00000001#define IGC_TXQCTL_STRICT_CYCLE 0x00000002
drivers/net/ethernet/intel/igc/igc_ethtool.c +1 -0
@@ -67,6 +67,7 @@ static const struct igc_stats igc_gstrings_stats[] = {IGC_STAT ("rx_hwtstamp_cleared" , rx_hwtstamp_cleared),IGC_STAT ("tx_lpi_counter" , stats.tlpic),IGC_STAT ("rx_lpi_counter" , stats.rlpic), + IGC_STAT("qbv_config_change_errors", qbv_config_change_errors), };#define IGC_NETDEV_STAT (_net_stat) { \
drivers/net/ethernet/intel/igc/igc_main.c +15 -5
@@ -1606,9 +1606,10 @@ static netdev_tx_t igc_xmit_frame_ring(struct sk_buff *skb,* the other timer registers before skipping the * timestamping request. */ -if (adapter->tstamp_config.tx_type ==HWTSTAMP_TX_ON && - !test_and_set_bit_lock (__IGC_PTP_TX_IN_PROGRESS, - &adapter->state)) { +unsigned long flags; + +spin_lock_irqsave (&adapter->ptp_tx_lock, flags); +if (adapter->tstamp_config.tx_type ==HWTSTAMP_TX_ON && !adapter->ptp_tx_skb) {skb_shinfo (skb)->tx_flags |=SKBTX_IN_PROGRESS ; tx_flags |=IGC_TX_FLAGS_TSTAMP ;
@@ -1617,6 +1618,8 @@ static netdev_tx_t igc_xmit_frame_ring(struct sk_buff *skb, }else { adapter->tx_hwtstamp_skipped++; } + +spin_unlock_irqrestore (&adapter->ptp_tx_lock, flags); }if (skb_vlan_tag_present (skb)) {
@@ -6035,6 +6038,7 @@ static bool validate_schedule(struct igc_adapter *adapter, const struct tc_taprio_qopt_offload *qopt) {int queue_uses[IGC_MAX_TX_QUEUES ] = { }; +struct igc_hw *hw = &adapter->hw;struct timespec64 now;size_t n;
@@ -6047,8 +6051,10 @@ static bool validate_schedule(struct igc_adapter *adapter,* in the future, it will hold all the packets until that * time, causing a lot of TX Hangs, so to avoid that, we * reject schedules that would start in the future. +* Note: Limitation above is no longer in i226. */ -if (!is_base_time_past (qopt->base_time, &now)) +if (!is_base_time_past (qopt->base_time, &now) && +igc_is_device_id_i225 (hw))return false;for (n =0 ; n < qopt->num_entries; n++) {
@@ -6103,6 +6109,7 @@ static int igc_tsn_clear_schedule(struct igc_adapter *adapter) adapter->base_time =0 ; adapter->cycle_time =NSEC_PER_SEC ; + adapter->qbv_config_change_errors =0 ;for (i =0 ; i < adapter->num_tx_queues; i++) {struct igc_ring *ring = adapter->tx_ring[i];
@@ -6118,6 +6125,7 @@ static int igc_save_qbv_schedule(struct igc_adapter *adapter, struct tc_taprio_qopt_offload *qopt) {bool queue_configured[IGC_MAX_TX_QUEUES ] = { }; +struct igc_hw *hw = &adapter->hw;u32 start_time =0 , end_time =0 ;size_t n;int i;
@@ -6130,7 +6138,7 @@ static int igc_save_qbv_schedule(struct igc_adapter *adapter,if (qopt->base_time <0 )return -ERANGE ; -if (adapter->base_time) +if (igc_is_device_id_i225 (hw) && adapter->base_time)return -EALREADY ;if (!validate_schedule (adapter, qopt))
@@ -6283,6 +6291,8 @@ static int igc_setup_tc(struct net_device *dev, enum tc_setup_type type, {struct igc_adapter *adapter =netdev_priv (dev); + adapter->tc_setup_type = type; +switch (type) {case TC_SETUP_QDISC_TAPRIO :return igc_tsn_enable_qbv_scheduling (adapter, type_data);
drivers/net/ethernet/intel/igc/igc_ptp.c +31 -26
120 lines not on this page · raw message
drivers/net/ethernet/intel/igc/igc_tsn.c +48 -21
124 lines not on this page · raw message
drivers/net/ethernet/marvell/octeon_ep/octep_main.c +6 -7
@@ -707,20 +707,19 @@ static netdev_tx_t octep_start_xmit(struct sk_buff *skb, hw_desc->dptr = tx_buffer->sglist_dma; } -/* Flush the hw descriptor before writing to doorbell */ -wmb (); - -/* Ring Doorbell to notify the NIC there is a new packet */ -writel (1 , iq->doorbell_reg); +netdev_tx_sent_queue (iq->netdev_q, skb->len); +skb_tx_timestamp (skb);atomic_inc (&iq->instr_pending); wi++;if (wi == iq->max_count) wi =0 ; iq->host_write_index = wi; +/* Flush the hw descriptor before writing to doorbell */ +wmb (); -netdev_tx_sent_queue (iq->netdev_q, skb->len); +/* Ring Doorbell to notify the NIC there is a new packet */ +writel (1 , iq->doorbell_reg); iq->stats.instr_posted++; -skb_tx_timestamp (skb);return NETDEV_TX_OK ; dma_map_sg_err:
drivers/net/ethernet/marvell/sky2.h +1 -1
@@ -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
@@ -821,7 +821,7 @@ static void mlx5_fw_tracer_ownership_change(struct work_struct *work)mlx5_core_dbg (tracer->dev,"FWTracer: ownership changed, current=(%d)\n" , tracer->owner);if (tracer->owner) { - tracer->owner = false; +mlx5_fw_tracer_ownership_acquire (tracer);return ; }
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c +2 -1
@@ -23,7 +23,8 @@ static int mlx5e_set_int_port_tunnel(struct mlx5e_priv *priv, route_dev =dev_get_by_index (dev_net (e->out_dev), e->route_dev_ifindex); -if (!route_dev || !netif_is_ovs_master (route_dev)) +if (!route_dev || !netif_is_ovs_master (route_dev) || + attr->parse_attr->filter_dev == e->out_dev) goto out; err = mlx5e_set_fwd_to_int_port_actions(priv, attr, e->route_dev_ifindex,
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c +8 -9
@@ -969,11 +969,8 @@ const u32 *mlx5_esw_query_functions(struct mlx5_core_dev *dev)return ERR_PTR (err); } -static void mlx5_eswitch_event_handlers_register (struct mlx5_eswitch *esw) +static void mlx5_eswitch_event_handler_register (struct mlx5_eswitch *esw) { -MLX5_NB_INIT (&esw->nb, eswitch_vport_event,NIC_VPORT_CHANGE ); -mlx5_eq_notifier_register (esw->dev, &esw->nb); -if (esw->mode ==MLX5_ESWITCH_OFFLOADS &&mlx5_eswitch_is_funcs_handler (esw->dev)) {MLX5_NB_INIT (&esw->esw_funcs.nb, mlx5_esw_funcs_changed_handler,ESW_FUNCTIONS_CHANGED );
@@ -981,13 +978,11 @@ static void mlx5_eswitch_event_handlers_register(struct mlx5_eswitch *esw) } } -static void mlx5_eswitch_event_handlers_unregister (struct mlx5_eswitch *esw) +static void mlx5_eswitch_event_handler_unregister (struct mlx5_eswitch *esw) {if (esw->mode ==MLX5_ESWITCH_OFFLOADS &&mlx5_eswitch_is_funcs_handler (esw->dev))mlx5_eq_notifier_unregister (esw->dev, &esw->esw_funcs.nb); -mlx5_eq_notifier_unregister (esw->dev, &esw->nb); -flush_workqueue (esw->work_queue); }
@@ -1273,6 +1268,9 @@ int mlx5_eswitch_enable_locked(struct mlx5_eswitch *esw, int num_vfs)mlx5_eswitch_update_num_of_vfs (esw, num_vfs); +MLX5_NB_INIT (&esw->nb, eswitch_vport_event,NIC_VPORT_CHANGE ); +mlx5_eq_notifier_register (esw->dev, &esw->nb); +if (esw->mode ==MLX5_ESWITCH_LEGACY ) { err =esw_legacy_enable (esw); }else {
@@ -1285,7 +1283,7 @@ int mlx5_eswitch_enable_locked(struct mlx5_eswitch *esw, int num_vfs) esw->fdb_table.flags |=MLX5_ESW_FDB_CREATED ; -mlx5_eswitch_event_handlers_register (esw); +mlx5_eswitch_event_handler_register (esw); esw_info(esw->dev, "Enable: mode(%s), nvfs(%d), active vports(%d)\n", esw->mode == MLX5_ESWITCH_LEGACY ? "LEGACY" : "OFFLOADS",
@@ -1394,7 +1392,8 @@ void mlx5_eswitch_disable_locked(struct mlx5_eswitch *esw)*/ mlx5_esw_mode_change_notify (esw,MLX5_ESWITCH_LEGACY ); -mlx5_eswitch_event_handlers_unregister (esw); +mlx5_eq_notifier_unregister (esw->dev, &esw->nb); +mlx5_eswitch_event_handler_unregister (esw); esw_info(esw->dev, "Disable: mode(%s), nvfs(%d), active vports(%d)\n", esw->mode == MLX5_ESWITCH_LEGACY ? "LEGACY" : "OFFLOADS",
drivers/net/ethernet/qlogic/qed/qed_ll2.c +5 -2
@@ -113,7 +113,10 @@ static void qed_ll2b_complete_tx_packet(void *cxt,static int qed_ll2_alloc_buffer (struct qed_dev *cdev,u8 **data,dma_addr_t *phys_addr) { - *data =kmalloc (cdev->ll2->rx_size,GFP_ATOMIC ); +size_t size = cdev->ll2->rx_size +NET_SKB_PAD + +SKB_DATA_ALIGN (sizeof (struct skb_shared_info )); + + *data =kmalloc (size,GFP_ATOMIC );if (!(*data)) {DP_INFO (cdev,"Failed to allocate LL2 buffer data\n" );return -ENOMEM ;
@@ -2590,7 +2593,7 @@ static int qed_ll2_start(struct qed_dev *cdev, struct qed_ll2_params *params)INIT_LIST_HEAD (&cdev->ll2->list);spin_lock_init (&cdev->ll2->lock); - cdev->ll2->rx_size =NET_SKB_PAD +ETH_HLEN + + cdev->ll2->rx_size =PRM_DMA_PAD_BYTES_NUM +ETH_HLEN +L1_CACHE_BYTES + params->mtu;/* Allocate memory for LL2.
drivers/net/phy/bcm7xxx.c +3 -0
@@ -907,6 +907,9 @@ static void bcm7xxx_28nm_remove(struct phy_device *phydev) .name = _name, \/* PHY_BASIC_FEATURES */ \ .flags = PHY_IS_INTERNAL, \ + .get_sset_count = bcm_phy_get_sset_count, \ + .get_strings = bcm_phy_get_strings, \ + .get_stats = bcm7xxx_28nm_get_phy_stats, \ .probe = bcm7xxx_28nm_probe, \ .remove = bcm7xxx_28nm_remove, \ .config_init = bcm7xxx_16nm_ephy_config_init, \
drivers/net/tun.c +5 -2
@@ -3056,10 +3056,11 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,struct net *net =sock_net (&tfile->sk);struct tun_struct *tun;void __user * argp = (void __user *)arg; -unsigned int ifindex, carrier; +unsigned int carrier;struct ifreq ifr;kuid_t owner;kgid_t group; +int ifindex;int sndbuf;int vnet_hdr_sz;int le;
@@ -3115,7 +3116,9 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd, ret = -EFAULT ;if (copy_from_user (&ifindex, argp,sizeof (ifindex))) goto unlock; - + ret = -EINVAL ; +if (ifindex <0 ) + goto unlock; ret =0 ; tfile->ifindex = ifindex; goto unlock;
drivers/net/usb/smsc95xx.c +1 -1
@@ -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
@@ -1585,6 +1585,7 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,iwl_trans_free_tx_cmd (mvm->trans, info->driver_data[1 ]);memset (&info->status,0 ,sizeof (info->status)); + info->flags &= ~(IEEE80211_TX_STAT_ACK |IEEE80211_TX_STAT_TX_FILTERED );/* inform mac80211 about what happened with the frame */ switch (status &TX_STATUS_MSK ) {
@@ -1936,6 +1937,8 @@ static void iwl_mvm_tx_reclaim(struct iwl_mvm *mvm, int sta_id, int tid,*/ if (!is_flush) info->flags |=IEEE80211_TX_STAT_ACK ; +else + info->flags &= ~IEEE80211_TX_STAT_ACK ; }/*
drivers/net/wireless/marvell/mwifiex/11n_rxreorder.c +16 -0
@@ -921,6 +921,14 @@ void mwifiex_11n_rxba_sync_event(struct mwifiex_private *priv,while (tlv_buf_left >=sizeof (*tlv_rxba)) { tlv_type =le16_to_cpu (tlv_rxba->header.type); tlv_len =le16_to_cpu (tlv_rxba->header.len); +if (size_add (sizeof (tlv_rxba->header), tlv_len) > tlv_buf_left) { +mwifiex_dbg (priv->adapter,WARN , +"TLV size (%zu) overflows event_buf buf_left=%d\n" , +size_add (sizeof (tlv_rxba->header), tlv_len), + tlv_buf_left); +return ; + } +if (tlv_type !=TLV_TYPE_RXBA_SYNC ) {mwifiex_dbg (priv->adapter,ERROR ,"Wrong TLV id=0x%x\n" , tlv_type);
@@ -929,6 +937,14 @@ void mwifiex_11n_rxba_sync_event(struct mwifiex_private *priv, tlv_seq_num =le16_to_cpu (tlv_rxba->seq_num); tlv_bitmap_len =le16_to_cpu (tlv_rxba->bitmap_len); +if (size_add (sizeof (*tlv_rxba), tlv_bitmap_len) > tlv_buf_left) { +mwifiex_dbg (priv->adapter,WARN , +"TLV size (%zu) overflows event_buf buf_left=%d\n" , +size_add (sizeof (*tlv_rxba), tlv_bitmap_len), + tlv_buf_left); +return ; + } + mwifiex_dbg(priv->adapter, INFO, "%pM tid=%d seq_num=%d bitmap_len=%d\n", tlv_rxba->mac, tlv_rxba->tid, tlv_seq_num,
drivers/nvme/host/ioctl.c +7 -3
@@ -32,9 +32,13 @@ static void *nvme_add_user_metadata(struct request *req, void __user *ubuf,if (!buf) goto out; - ret = -EFAULT ; -if ((req_op (req) ==REQ_OP_DRV_OUT ) &©_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
@@ -3439,7 +3439,8 @@ static const struct pci_device_id nvme_id_table[] = { { PCI_VDEVICE(INTEL, 0x0a54), /* Intel P4500/P4600 */ .driver_data =NVME_QUIRK_STRIPE_SIZE |NVME_QUIRK_DEALLOCATE_ZEROES | - NVME_QUIRK_IGNORE_DEV_SUBNQN, }, +NVME_QUIRK_IGNORE_DEV_SUBNQN | + NVME_QUIRK_BOGUS_NID, }, { PCI_VDEVICE(INTEL, 0x0a55), /* Dell Express Flash P4600 */ .driver_data = NVME_QUIRK_STRIPE_SIZE | NVME_QUIRK_DEALLOCATE_ZEROES, },
drivers/nvme/host/rdma.c +3 -0
@@ -643,6 +643,9 @@ static void __nvme_rdma_stop_queue(struct nvme_rdma_queue *queue)static void nvme_rdma_stop_queue (struct nvme_rdma_queue *queue) { +if (!test_bit (NVME_RDMA_Q_ALLOCATED , &queue->flags)) +return ; +mutex_lock (&queue->queue_lock);if (test_and_clear_bit (NVME_RDMA_Q_LIVE , &queue->flags))__nvme_rdma_stop_queue (queue);
drivers/nvme/target/fabrics-cmd-auth.c +6 -3
@@ -337,19 +337,21 @@ void nvmet_execute_auth_send(struct nvmet_req *req) __func__, ctrl->cntlid, req->sq->qid, status, req->error_loc); req->cqe->result.u64 =0 ; -nvmet_req_complete (req, status);if (req->sq->dhchap_step !=NVME_AUTH_DHCHAP_MESSAGE_SUCCESS2 && req->sq->dhchap_step !=NVME_AUTH_DHCHAP_MESSAGE_FAILURE2 ) {unsigned long auth_expire_secs = ctrl->kato ? ctrl->kato :120 ;mod_delayed_work (system_wq, &req->sq->auth_expired_work, auth_expire_secs *HZ ); -return ; + goto complete; }/* Final states, clear up variables */ nvmet_auth_sq_free (req->sq);if (req->sq->dhchap_step ==NVME_AUTH_DHCHAP_MESSAGE_FAILURE2 )nvmet_ctrl_fatal_error (ctrl); + +complete: +nvmet_req_complete (req, status); }static int nvmet_auth_challenge (struct nvmet_req *req,void *d,int al)
@@ -527,11 +529,12 @@ void nvmet_execute_auth_receive(struct nvmet_req *req)kfree (d); done: req->cqe->result.u64 =0 ; -nvmet_req_complete (req, status); +if (req->sq->dhchap_step ==NVME_AUTH_DHCHAP_MESSAGE_SUCCESS2 )nvmet_auth_sq_free (req->sq);else if (req->sq->dhchap_step ==NVME_AUTH_DHCHAP_MESSAGE_FAILURE1 ) {nvmet_auth_sq_free (req->sq);nvmet_ctrl_fatal_error (ctrl); } +nvmet_req_complete (req, status); }
drivers/nvme/target/tcp.c +2 -5
@@ -345,6 +345,7 @@ static void nvmet_tcp_fatal_error(struct nvmet_tcp_queue *queue)static void nvmet_tcp_socket_error (struct nvmet_tcp_queue *queue,int status) { + queue->rcv_state =NVMET_TCP_RECV_ERR ;if (status == -EPIPE || status == -ECONNRESET )kernel_sock_shutdown (queue->sock,SHUT_RDWR );else
@@ -871,15 +872,11 @@ static int nvmet_tcp_handle_icreq(struct nvmet_tcp_queue *queue) iov.iov_len =sizeof (*icresp); ret =kernel_sendmsg (queue->sock, &msg, &iov,1 , iov.iov_len);if (ret <0 ) - goto free_crypto; +return ret;/* queue removal will cleanup */ queue->state =NVMET_TCP_Q_LIVE ;nvmet_prepare_receive_pdu (queue);return 0 ; -free_crypto: -if (queue->hdr_digest || queue->data_digest) -nvmet_tcp_free_crypto (queue); -return ret; } static void nvmet_tcp_handle_req_failure(struct nvmet_tcp_queue *queue,
drivers/phy/motorola/phy-mapphone-mdm6600.c +18 -20
@@ -122,16 +122,10 @@ static int phy_mdm6600_power_on(struct phy *x) {struct phy_mdm6600 *ddata =phy_get_drvdata (x);struct gpio_desc *enable_gpio = ddata->ctrl_gpios[PHY_MDM6600_ENABLE ]; -int error;if (!ddata->enabled)return -ENODEV ; - error =pinctrl_pm_select_default_state (ddata->dev); -if (error) -dev_warn (ddata->dev,"%s: error with default_state: %i\n" , - __func__, error); -gpiod_set_value_cansleep (enable_gpio,1 );/* Allow aggressive PM for USB, it's only needed for n_gsm port */
@@ -160,11 +154,6 @@ static int phy_mdm6600_power_off(struct phy *x)gpiod_set_value_cansleep (enable_gpio,0 ); - error =pinctrl_pm_select_sleep_state (ddata->dev); -if (error) -dev_warn (ddata->dev,"%s: error with sleep_state: %i\n" , - __func__, error); -return 0 ; }
@@ -456,6 +445,7 @@ static void phy_mdm6600_device_power_off(struct phy_mdm6600 *ddata) {struct gpio_desc *reset_gpio = ddata->ctrl_gpios[PHY_MDM6600_RESET ]; +int error; ddata->enabled = false;phy_mdm6600_cmd (ddata,PHY_MDM6600_CMD_BP_SHUTDOWN_REQ );
@@ -471,6 +461,17 @@ static void phy_mdm6600_device_power_off(struct phy_mdm6600 *ddata) }else {dev_err (ddata->dev,"Timed out powering down\n" ); } + +/* +* Keep reset gpio high with padconf internal pull-up resistor to +* prevent modem from waking up during deeper SoC idle states. The +* gpio bank lines can have glitches if not in the always-on wkup +* domain. +*/ + error =pinctrl_pm_select_sleep_state (ddata->dev); +if (error) +dev_warn (ddata->dev,"%s: error with sleep_state: %i\n" , + __func__, error); }static void phy_mdm6600_deferred_power_on (struct work_struct *work)
@@ -571,12 +572,6 @@ static int phy_mdm6600_probe(struct platform_device *pdev) ddata->dev = &pdev->dev;platform_set_drvdata (pdev, ddata); -/* Active state selected in phy_mdm6600_power_on() */ - error =pinctrl_pm_select_sleep_state (ddata->dev); -if (error) -dev_warn (ddata->dev,"%s: error with sleep_state: %i\n" , - __func__, error); - error =phy_mdm6600_init_lines (ddata);if (error)return error;
@@ -627,10 +622,12 @@ static int phy_mdm6600_probe(struct platform_device *pdev)pm_runtime_put_autosuspend (ddata->dev); cleanup: -if (error <0 ) +if (error <0 ) {phy_mdm6600_device_power_off (ddata); -pm_runtime_disable (ddata->dev); -pm_runtime_dont_use_autosuspend (ddata->dev); +pm_runtime_disable (ddata->dev); +pm_runtime_dont_use_autosuspend (ddata->dev); + } +return error; }
@@ -639,6 +636,7 @@ static int phy_mdm6600_remove(struct platform_device *pdev)struct phy_mdm6600 *ddata =platform_get_drvdata (pdev);struct gpio_desc *reset_gpio = ddata->ctrl_gpios[PHY_MDM6600_RESET ]; +pm_runtime_get_noresume (ddata->dev);pm_runtime_dont_use_autosuspend (ddata->dev);pm_runtime_put_sync (ddata->dev);pm_runtime_disable (ddata->dev);
drivers/pinctrl/core.c +7 -9
@@ -1007,20 +1007,17 @@ static int add_setting(struct pinctrl *p, struct pinctrl_dev *pctldev,static struct pinctrl *find_pinctrl (struct device *dev) { -struct pinctrl *entry, *p =NULL ; +struct pinctrl *p;mutex_lock (&pinctrl_list_mutex); - -list_for_each_entry (entry, &pinctrl_list, node) { -if (entry->dev == dev) { - p = entry; -kref_get (&p->users); -break ; +list_for_each_entry (p, &pinctrl_list, node) +if (p->dev == dev) { +mutex_unlock (&pinctrl_list_mutex); +return p; } - }mutex_unlock (&pinctrl_list_mutex); -return p; +return NULL ; }static void pinctrl_free (struct pinctrl *p,bool inlist);
@@ -1129,6 +1126,7 @@ struct pinctrl *pinctrl_get(struct device *dev) p =find_pinctrl (dev);if (p) {dev_dbg (dev,"obtain a copy of previously claimed pinctrl\n" ); +kref_get (&p->users);return p; }
drivers/platform/surface/surface_platform_profile.c +1 -2
@@ -159,8 +159,7 @@ static int surface_platform_profile_probe(struct ssam_device *sdev)set_bit (PLATFORM_PROFILE_BALANCED_PERFORMANCE , tpd->handler.choices);set_bit (PLATFORM_PROFILE_PERFORMANCE , tpd->handler.choices); -platform_profile_register (&tpd->handler); -return 0 ; +return platform_profile_register (&tpd->handler); }static void surface_platform_profile_remove (struct ssam_device *sdev)
drivers/platform/x86/asus-nb-wmi.c +3 -0
@@ -531,6 +531,9 @@ static void asus_nb_wmi_quirks(struct asus_wmi_driver *driver)static const struct key_entry asus_nb_wmi_keymap[] = { {KE_KEY ,ASUS_WMI_BRN_DOWN , {KEY_BRIGHTNESSDOWN } }, {KE_KEY ,ASUS_WMI_BRN_UP , {KEY_BRIGHTNESSUP } }, + {KE_KEY ,0x2a , {KEY_SELECTIVE_SCREENSHOT } }, + {KE_IGNORE ,0x2b , },/* PrintScreen (also send via PS/2) on newer models */ + {KE_IGNORE ,0x2c , },/* CapsLock (also send via PS/2) on newer models */ {KE_KEY ,0x30 , {KEY_VOLUMEUP } }, {KE_KEY ,0x31 , {KEY_VOLUMEDOWN } }, {KE_KEY ,0x32 , {KEY_MUTE } },
drivers/platform/x86/asus-wmi.c +4 -11
@@ -3268,7 +3268,6 @@ static void asus_wmi_handle_event_code(int code, struct asus_wmi *asus) {unsigned int key_value =1 ;bool autorelease =1 ; -int orig_code = code;if (asus->driver->key_filter) { asus->driver->key_filter(asus->driver, &code, &key_value,
@@ -3277,16 +3276,10 @@ static void asus_wmi_handle_event_code(int code, struct asus_wmi *asus)return ; } -if (code >=NOTIFY_BRNUP_MIN && code <=NOTIFY_BRNUP_MAX ) - code =ASUS_WMI_BRN_UP ; -else if (code >=NOTIFY_BRNDOWN_MIN && code <=NOTIFY_BRNDOWN_MAX ) - code =ASUS_WMI_BRN_DOWN ; - -if (code ==ASUS_WMI_BRN_DOWN || code ==ASUS_WMI_BRN_UP ) { -if (acpi_video_get_backlight_type () == acpi_backlight_vendor) { -asus_wmi_backlight_notify (asus, orig_code); -return ; - } +if (acpi_video_get_backlight_type () == acpi_backlight_vendor && + code >=NOTIFY_BRNUP_MIN && code <=NOTIFY_BRNDOWN_MAX ) { +asus_wmi_backlight_notify (asus, code); +return ; }if (code ==NOTIFY_KBD_BRTUP ) {
drivers/platform/x86/asus-wmi.h +1 -1
@@ -18,7 +18,7 @@#include <linux/i8042.h> #define ASUS_WMI_KEY_IGNORE (-1) -#define ASUS_WMI_BRN_DOWN 0x20 +#define ASUS_WMI_BRN_DOWN 0x2e#define ASUS_WMI_BRN_UP 0x2fstruct module ;
drivers/platform/x86/intel/uncore-frequency/uncore-frequency-common.c +6 -2
@@ -153,7 +153,7 @@ show_uncore_data(initial_max_freq_khz);static int create_attr_group (struct uncore_data *data,char *name) { -int ret, index =0 ; +int ret, freq, index =0 ;init_attribute_rw (max_freq_khz);init_attribute_rw (min_freq_khz);
@@ -165,7 +165,11 @@ static int create_attr_group(struct uncore_data *data, char *name) data->uncore_attrs[index++] = &data->min_freq_khz_dev_attr.attr; data->uncore_attrs[index++] = &data->initial_min_freq_khz_dev_attr.attr; data->uncore_attrs[index++] = &data->initial_max_freq_khz_dev_attr.attr; - data->uncore_attrs[index++] = &data->current_freq_khz_dev_attr.attr; + + ret =uncore_read_freq (data, &freq); +if (!ret) + data->uncore_attrs[index++] = &data->current_freq_khz_dev_attr.attr; + data->uncore_attrs[index] =NULL ; data->uncore_attr_group.name = name;
drivers/platform/x86/touchscreen_dmi.c +23 -0
@@ -740,6 +740,21 @@ static const struct ts_dmi_data pipo_w11_data = { .properties = pipo_w11_props, }; +static const struct property_entry positivo_c4128b_props[] = {
Lines of this file are not shown. View the raw message.
drivers/tty/serial/8250/8250_omap.c +52 -58
110 lines not on this page · raw message
drivers/tty/serial/serial_core.c +59 -56
115 lines not on this page · raw message
fs/btrfs/ctree.c +39 -13
52 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 +44 -28
72 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 +35 -15
50 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 +9 -1
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.
tools/testing/selftests/vm/charge_reserved_hugetlb.sh +2 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/vm/hugetlb_reparenting_test.sh +2 -2
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.