Skip to contentSkip to conversation

Linux 5.8.8

DISCUSSION Greg Kroah-Hartman 1 participant 2 messages Sep 9, 2020 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 5.8.8 kernel.

All users of the 5.8 kernel series must upgrade.

The updated 5.8.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.8.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/mtk-sd.txt            |    2 
 Documentation/filesystems/affs.rst                          |   16 -
 Makefile                                                    |    2 
 arch/arc/kernel/perf_event.c                                |   14 -
 arch/arc/mm/init.c                                          |   27 +-
 arch/arm64/boot/dts/mediatek/mt7622.dtsi                    |    2 
 arch/mips/kernel/perf_event_mipsxx.c                        |    4 
 arch/mips/kernel/smp-bmips.c                                |    2 
 arch/mips/kernel/traps.c                                    |   12 +
 arch/mips/mm/c-r4k.c                                        |    4 
 arch/mips/oprofile/op_model_mipsxx.c                        |    4 
 arch/mips/sni/a20r.c                                        |    4 
 arch/s390/Kconfig                                           |    2 
 arch/s390/include/asm/percpu.h                              |   28 +-
 arch/x86/entry/common.c                                     |   12 -
 arch/x86/include/asm/ptrace.h                               |    2 
 arch/x86/include/asm/switch_to.h                            |   23 ++
 arch/x86/kernel/setup_percpu.c                              |    6 
 arch/x86/kernel/traps.c                                     |   66 ++---
 arch/x86/mm/fault.c                                         |  134 ++++++++++++
 arch/x86/mm/numa_emulation.c                                |    2 
 arch/x86/mm/pti.c                                           |    8 
 arch/x86/mm/tlb.c                                           |   37 +++
 block/blk-core.c                                            |    1 
 block/blk-iocost.c                                          |    5 
 block/blk-stat.c                                            |   17 -
 block/partitions/core.c                                     |   27 +-
 drivers/ata/libata-core.c                                   |    5 
 drivers/ata/libata-scsi.c                                   |    8 
 drivers/block/nbd.c                                         |    2 
 drivers/cpuidle/cpuidle.c                                   |    3 
 drivers/dma/at_hdmac.c                                      |   11 
 drivers/dma/dw-edma/dw-edma-core.c                          |   11 
 drivers/dma/fsldma.h                                        |   12 -
 drivers/dma/of-dma.c                                        |    8 
 drivers/dma/pl330.c                                         |    2 
 drivers/dma/ti/k3-udma.c                                    |    6 
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c           |   12 -
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c |    2 
 drivers/gpu/drm/amd/display/dc/core/dc_link.c               |    3 
 drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c            |    8 
 drivers/gpu/drm/amd/display/dc/dc_stream.h                  |    2 
 drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c       |    8 
 drivers/gpu/drm/amd/powerplay/hwmgr/vega10_thermal.c        |   14 +
 drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c            |    2 
 drivers/gpu/drm/i915/display/intel_hdcp.c                   |   26 +-
 drivers/gpu/drm/msm/adreno/a6xx_gmu.c                       |   12 -
 drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c                    |    2 
 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c                 |   20 -
 drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c                   |    4 
 drivers/gpu/drm/msm/msm_atomic.c                            |   36 +++
 drivers/gpu/drm/msm/msm_drv.c                               |    8 
 drivers/gpu/drm/omapdrm/omap_crtc.c                         |    3 
 drivers/hid/hid-ids.h                                       |    3 
 drivers/hid/hid-quirks.c                                    |    3 
 drivers/hv/hv_util.c                                        |   65 ++++-
 drivers/hwmon/applesmc.c                                    |   31 +-
 drivers/hwmon/pmbus/isl68137.c                              |    7 
 drivers/i2c/busses/i2c-bcm-iproc.c                          |    4 
 drivers/iommu/Kconfig                                       |    2 
 drivers/iommu/amd/init.c                                    |   21 +
 drivers/iommu/amd/iommu.c                                   |   19 +
 drivers/iommu/intel/iommu.c                                 |   14 -
 drivers/iommu/intel/irq_remapping.c                         |   10 
 drivers/irqchip/irq-ingenic.c                               |    2 
 drivers/md/dm-cache-metadata.c                              |    8 
 drivers/md/dm-crypt.c                                       |    4 
 drivers/md/dm-integrity.c                                   |   12 +
 drivers/md/dm-mpath.c                                       |   22 +
 drivers/md/dm-thin-metadata.c                               |   10 
 drivers/md/dm-writecache.c                                  |   12 -
 drivers/md/persistent-data/dm-block-manager.c               |   14 -
 drivers/media/i2c/Kconfig                                   |    2 
 drivers/media/rc/rc-main.c                                  |   44 ++-
 drivers/media/test-drivers/vicodec/vicodec-core.c           |    1 
 drivers/misc/habanalabs/device.c                            |    7 
 drivers/misc/habanalabs/firmware_if.c                       |    9 
 drivers/misc/habanalabs/gaudi/gaudi.c                       |   90 +++++---
 drivers/misc/habanalabs/gaudi/gaudiP.h                      |    3 
 drivers/misc/habanalabs/gaudi/gaudi_coresight.c             |    8 
 drivers/misc/habanalabs/goya/goya.c                         |   31 ++
 drivers/misc/habanalabs/goya/goya_coresight.c               |    8 
 drivers/misc/habanalabs/habanalabs.h                        |    7 
 drivers/misc/habanalabs/memory.c                            |    9 
 drivers/misc/habanalabs/mmu.c                               |    2 
 drivers/misc/habanalabs/pci.c                               |    6 
 drivers/misc/habanalabs/sysfs.c                             |    7 
 drivers/mmc/host/mtk-sd.c                                   |   13 +
 drivers/mmc/host/sdhci-acpi.c                               |   67 +++++-
 drivers/mmc/host/sdhci-pci-core.c                           |   10 
 drivers/mmc/host/sdhci-tegra.c                              |   53 ++++
 drivers/net/dsa/mt7530.c                                    |    2 
 drivers/net/ethernet/arc/emac_mdio.c                        |    1 
 drivers/net/ethernet/broadcom/bcmsysport.c                  |    6 
 drivers/net/ethernet/broadcom/bnxt/bnxt.c                   |   36 +--
 drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c           |   16 -
 drivers/net/ethernet/broadcom/genet/bcmgenet.c              |    2 
 drivers/net/ethernet/broadcom/tg3.c                         |   17 +
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_thermal.c          |    8 
 drivers/net/ethernet/cortina/gemini.c                       |   34 +--
 drivers/net/ethernet/hisilicon/hns/hns_enet.c               |    9 
 drivers/net/ethernet/mellanox/mlx4/mr.c                     |    2 
 drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c     |    2 
 drivers/net/ethernet/renesas/ravb_main.c                    |  110 ++++-----
 drivers/net/ethernet/ti/am65-cpsw-nuss.c                    |    2 
 drivers/net/ethernet/ti/cpsw.c                              |    2 
 drivers/net/ethernet/ti/cpsw_new.c                          |   29 +-
 drivers/net/gtp.c                                           |    1 
 drivers/net/phy/dp83867.c                                   |    4 
 drivers/net/usb/asix_common.c                               |    2 
 drivers/nvme/host/core.c                                    |    2 
 drivers/nvme/target/core.c                                  |    6 
 drivers/nvme/target/fc.c                                    |    4 
 drivers/opp/core.c                                          |   22 +
 drivers/opp/opp.h                                           |    2 
 drivers/staging/media/sunxi/cedrus/cedrus.c                 |    7 
 drivers/thermal/qcom/qcom-spmi-temp-alarm.c                 |    4 
 drivers/thermal/ti-soc-thermal/omap4-thermal-data.c         |   23 +-
 drivers/thermal/ti-soc-thermal/omap4xxx-bandgap.h           |   10 
 drivers/tty/serial/qcom_geni_serial.c                       |    2 
 drivers/xen/xenbus/xenbus_client.c                          |   10 
 fs/affs/amigaffs.c                                          |   27 ++
 fs/affs/file.c                                              |   26 ++
 fs/afs/fs_probe.c                                           |    4 
 fs/afs/vl_probe.c                                           |    4 
 fs/btrfs/block-group.c                                      |    4 
 fs/btrfs/ctree.c                                            |    6 
 fs/btrfs/extent-tree.c                                      |    2 
 fs/btrfs/extent_io.c                                        |    8 
 fs/btrfs/extent_io.h                                        |    6 
 fs/btrfs/free-space-tree.c                                  |    4 
 fs/btrfs/ioctl.c                                            |   27 +-
 fs/btrfs/scrub.c                                            |  122 ++++++----
 fs/btrfs/tree-checker.c                                     |    2 
 fs/btrfs/volumes.c                                          |    3 
 fs/ceph/file.c                                              |    1 
 fs/eventpoll.c                                              |    6 
 fs/ext2/file.c                                              |    6 
 fs/gfs2/log.c                                               |   31 ++
 fs/gfs2/trans.c                                             |    1 
 fs/io_uring.c                                               |   16 +
 fs/xfs/libxfs/xfs_attr_leaf.c                               |    4 
 fs/xfs/libxfs/xfs_bmap.c                                    |    2 
 fs/xfs/xfs_bmap_util.c                                      |    2 
 fs/xfs/xfs_file.c                                           |   12 -
 include/drm/drm_hdcp.h                                      |    3 
 include/linux/bvec.h                                        |    9 
 include/linux/libata.h                                      |    1 
 include/linux/log2.h                                        |    2 
 include/linux/netfilter/nfnetlink.h                         |    3 
 include/net/af_rxrpc.h                                      |    2 
 include/net/netfilter/nf_tables.h                           |    2 
 include/trace/events/rxrpc.h                                |   27 +-
 include/uapi/linux/netfilter/nf_tables.h                    |    2 
 kernel/bpf/syscall.c                                        |    2 
 mm/hugetlb.c                                                |   49 +++-
 mm/khugepaged.c                                             |    2 
 mm/madvise.c                                                |    2 
 mm/memory.c                                                 |   36 ++-
 mm/migrate.c                                                |   17 +
 mm/rmap.c                                                   |    9 
 mm/slub.c                                                   |   12 -
 net/batman-adv/bat_v_ogm.c                                  |   11 
 net/batman-adv/bridge_loop_avoidance.c                      |    5 
 net/batman-adv/gateway_client.c                             |    6 
 net/bluetooth/hci_core.c                                    |    2 
 net/netfilter/nf_conntrack_proto_udp.c                      |   26 --
 net/netfilter/nf_tables_api.c                               |   64 ++---
 net/netfilter/nfnetlink.c                                   |   11 
 net/netfilter/nfnetlink_log.c                               |    3 
 net/netfilter/nfnetlink_queue.c                             |    2 
 net/netfilter/nft_flow_offload.c                            |    2 
 net/netfilter/nft_payload.c                                 |    4 
 net/packet/af_packet.c                                      |    7 
 net/rxrpc/ar-internal.h                                     |   13 -
 net/rxrpc/call_object.c                                     |    1 
 net/rxrpc/input.c                                           |  123 ++++++-----
 net/rxrpc/output.c                                          |   82 +++++--
 net/rxrpc/peer_object.c                                     |   16 +
 net/rxrpc/rtt.c                                             |    3 
 net/wireless/reg.c                                          |    3 
 scripts/checkpatch.pl                                       |    4 
 scripts/kconfig/streamline_config.pl                        |    5 
 sound/core/oss/mulaw.c                                      |    4 
 sound/firewire/digi00x/digi00x.c                            |    5 
 sound/firewire/tascam/tascam.c                              |   33 ++
 sound/pci/ca0106/ca0106_main.c                              |    3 
 sound/pci/hda/hda_intel.c                                   |    2 
 sound/pci/hda/patch_hdmi.c                                  |    1 
 sound/pci/hda/patch_realtek.c                               |   46 +++-
 sound/usb/pcm.c                                             |    2 
 sound/usb/quirks-table.h                                    |   60 ++++-
 sound/usb/quirks.c                                          |    1 
 tools/include/uapi/linux/perf_event.h                       |    2 
 tools/perf/Documentation/perf-stat.txt                      |    3 
 tools/perf/bench/synthesize.c                               |    4 
 tools/perf/builtin-record.c                                 |    2 
 tools/perf/builtin-sched.c                                  |    6 
 tools/perf/builtin-stat.c                                   |    8 
 tools/perf/builtin-top.c                                    |    2 
 tools/perf/pmu-events/jevents.c                             |    2 
 tools/perf/ui/browsers/hists.c                              |    3 
 tools/perf/util/cs-etm.c                                    |    9 
 tools/perf/util/intel-pt.c                                  |    9 
 tools/perf/util/stat.h                                      |    1 
 tools/testing/selftests/bpf/test_maps.c                     |    2 
 206 files changed, 2038 insertions(+), 781 deletions(-)

Adrian Hunter (1):
mmc: sdhci-pci: Fix SDHCI_RESET_ALL for CQHCI for Intel GLK-based controllers

Adrien Crivelli (1):
ALSA: hda/realtek: Add quirk for Samsung Galaxy Book Ion NT950XCJ-X716A

Al Grant (3):
perf cs-etm: Fix corrupt data after perf inject from perf intel-pt: Fix corrupt data after perf inject from perf tools: Correct SNOOPX field offset

Al Viro (1):
fix regression in "epoll: Keep a reference on files added to the check list"

Alistair Popple (2):
mm/rmap: fixup copying of soft dirty and uffd ptes mm/migrate: fixup setting UFFD_WP flag

Amit Engel (1):
nvmet: Disable keep-alive timer when kato is cleared to 0h

Andy Lutomirski (1):
x86/debug: Allow a single level of #DB recursion

Arnaldo Carvalho de Melo (1):
perf top/report: Fix infinite loop in the TUI for grouped events

Bob Peterson (1):
gfs2: add some much needed cleanup for log flushes that fail

Brandon Syu (1):
drm/amd/display: Keep current gain when ABM disable immediately

Brian Foster (1):
xfs: finish dfops on every insert range shift iteration

Chris Wilson (1):
iommu/vt-d: Handle 36bit addressing for x86-32

Christoph Hellwig (1):
block: fix locking in bdev_del_partition

Christophe JAILLET (1):
nvmet-fc: Fix a missed _irqsave version of spin_lock in 'nvmet_fc_fod_op_done()'

Damien Le Moal (1):
dm crypt: Initialize crypto wait structures

Dan Carpenter (1):
net: gemini: Fix another missing clk_disable_unprepare() in probe

Dan Crawford (1):
ALSA: hda - Fix silent audio output and corrupted input on MSI X570-A PRO

Dan Murphy (1):
net: dp83867: Fix WoL SecureOn password

Darrick J. Wong (1):
xfs: fix xfs_bmap_validate_extent_raw when checking attr fork of rt files

David Ahern (1):
perf sched timehist: Fix use of CPU list with summary option

David Howells (4):
rxrpc: Keep the ACK serial in a var in rxrpc_input_ack()
rxrpc: Fix loss of RTT samples due to interposed ACK
rxrpc: Make rxrpc_kernel_get_srtt() indicate validity mm/khugepaged.c: fix khugepaged's request size in collapse_file

Denis Efremov (1):
net: bcmgenet: fix mask check in bcmgenet_validate_flow()

Dinghao Liu (4):
drm/amd/display: Fix memleak in amdgpu_dm_mode_config_init
net: hns: Fix memleak in hns_nic_dev_probe
net: systemport: Fix memleak in bcm_sysport_probe
net: arc_emac: Fix memleak in arc_mdio_probe

Dmitry Baryshkov (1):
drm/msm/a6xx: fix gmu start on newer firmware

Edwin Peer (1):
bnxt_en: fix HWRM error when querying VF temperature

Eric Farman (1):
s390: fix GENERIC_LOCKBREAK dependency typo in Kconfig

Eric Sandeen (1):
xfs: fix boundary test in xfs_attr_shortform_verify

Eugeniu Rosca (1):
mm: slub: fix conversion of freelist_corrupted()

Evan Quan (1):
drm/amd/pm: avoid false alarm due to confusing softwareshutdowntemp setting

Ezequiel Garcia (1):
media: cedrus: Add missing v4l2_ctrl_request_hdl_put()

Florian Fainelli (2):
MIPS: mm: BMIPS5000 has inclusive physical caches
MIPS: BMIPS: Also call bmips_cpu_setup() for secondary cores

Florian Westphal (2):
netfilter: nf_tables: fix destination register zeroing
netfilter: conntrack: do not auto-delete clash entries on reply

František Kučera (1):
ALSA: usb-audio: Add basic capture support for Pioneer DJ DJM-250MK2

Furquan Shaikh (1):
drivers: gpu: amd: Initialize amdgpu_dm_backlight_caps object to 0 in amdgpu_dm_update_backlight_caps

Grant Peltier (1):
hwmon: (pmbus/isl68137) remove READ_TEMPERATURE_1 telemetry for RAA228228

Greg Kroah-Hartman (1):

      Linux 5.8.8

Grygorii Strashko (1):
net: ethernet: ti: am65-cpsw: fix rmii 100Mbit link mode

Gustavo Pimentel (1):
dmaengine: dw-edma: Fix scatter-gather address calculation

Hans Verkuil (1):
media: vicodec: add missing v4l2_ctrl_request_hdl_put()

He Zhe (1):
mips/oprofile: Fix fallthrough placement

Himadri Pandya (1):
net: usb: Fix uninit-was-stored issue in asix_read_phy_addr()

Hou Pu (1):
nbd: restore default timeout when setting it to zero

Huang Pei (1):
MIPS: add missing MSACSR and upper MSA initialization

Huang Ying (1):
x86, fakenuma: Fix invalid starting node ID

Jacopo Mondi (1):

      media: i2c: imx214: select V4L2_FWNODE

Jaehyun Chung (1):
drm/amd/display: Revert HDCP disable sequence change

Jakub Kicinski (1):
bnxt: don't enable NAPI until rings are ready

Jason Gunthorpe (1):
include/linux/log2.h: add missing () around n in roundup_pow_of_two()

Jeff Layton (1):
ceph: don't allow setlease on cephfs

Jens Axboe (2):
block: ensure bdi->io_pages is always initialized
io_uring: no read/write-retry on -EAGAIN error and O_NONBLOCK marked file

Jesper Dangaard Brouer (1):
selftests/bpf: Fix massive output from test_maps

Jin Yao (1):
perf stat: Turn off summary for interval mode by default

Jiufei Xue (2):
io_uring: set table->files[i] to NULL when io_sqe_file_register failed
io_uring: fix removing the wrong file in __io_sqe_files_update()

Joerg Roedel (1):
mm: track page table modifications in __apply_to_page_range()

Johannes Berg (1):
cfg80211: regulatory: reject invalid hints

John Stultz (1):
tty: serial: qcom_geni_serial: Drop __init from qcom_geni_console_setup

Josef Bacik (5):
btrfs: drop path before adding new uuid tree entry
btrfs: fix potential deadlock in the search ioctl
btrfs: allocate scrub workqueues outside of locks
btrfs: set the correct lockdep class for new nodes
btrfs: set the lockdep class for log tree extent buffers

Joshua Sivec (1):
ALSA: usb-audio: Add implicit feedback quirk for UR22C

Jussi Kivilinna (1):
batman-adv: bla: use netif_rx_ni when not in interrupt context

Kai Vehmanen (1):
ALSA: hda/hdmi: always check pin power status in i915 pin fixup

Kalyan Thota (2):
drm/msm/dpu: Fix reservation failures in modeset drm/msm/dpu: Fix scale params in plane validation

Keith Busch (1):
nvme: fix controller instance leak

Krishna Manikandan (1):
drm/msm: add shutdown support for display platform_driver

Landen Chao (1):
net: dsa: mt7530: fix advertising unsupported 1000baseT_Half

Li Xinhai (1):
mm/hugetlb: try preferred node first when alloc gigantic page from cma

Linus Lüssing (1):
batman-adv: Fix own OGM check in aggregated OGMs

Linus Torvalds (1):
fsldma: fix very broken 32-bit ppc ioread64 functionality

Louis Peens (1):
nfp: flower: fix ABI mismatch between driver and firmware

Lu Baolu (1):
iommu/vt-d: Serialize IOMMU GCMD register modifications

Marcos Paulo de Souza (1):
btrfs: block-group: fix free-space bitmap threshold

Marek Szyprowski (1):
dmaengine: pl330: Fix burst length if burst size is smaller than bus width

Max Chou (1):
Bluetooth: Return NOTIFY_DONE for hci_suspend_notifier

Max Staudt (1):
affs: fix basic permission bits to actually work

Michael Chan (3):
bnxt_en: Fix ethtool -S statitics with XDP or TCs enabled.
bnxt_en: Fix possible crash in bnxt_fw_reset_task().
tg3: Fix soft lockup when tg3_reset_task() fails.

Mike Rapoport (1):
arc: fix memory initialization for systems with two memory banks

Mike Snitzer (1):
dm mpath: fix racey management of PG initialization

Mikulas Patocka (4):
ext2: don't update mtime on COW faults
xfs: don't update mtime on COW faults
dm writecache: handle DAX to partitions on persistent memory correctly dm integrity: fix error reporting in bitmap mode after creation

Ming Lei (1):
block: allow for_each_bvec to support zero len bvec

Mrinal Pandey (1):
checkpatch: fix the usage of capture group ( ... )

Muchun Song (1):
mm/hugetlb: fix a race between hugetlb sysctl handlers

Murali Karicheri (3):
net: ethernet: ti: cpsw: fix clean up of vlan mc entries for host port
net: ethernet: ti: cpsw_new: fix clean up of vlan mc entries for host port
net: ethernet: ti: cpsw_new: fix error handling in cpsw_ndo_vlan_rx_kill_vid()

Namhyung Kim (1):
perf jevents: Fix suspicious code in fixregex()

Nicholas Kazlauskas (1):
drm/amd/display: Reject overlay plane configurations in multi-display scenarios

Nicolas Dichtel (1):
gtp: add GTPA_LINK info to msg sent to userspace

Oded Gabbay (1):
habanalabs: set max power according to card type

Ofir Bitton (6):
habanalabs: unmap PCI bars upon iATU failure
habanalabs: validate packet id during CB parse
habanalabs: set clock gating according to mask
habanalabs: proper handling of alloc size in coresight
habanalabs: validate FW file size
habanalabs: check correct vmalloc return code

Or Cohen (1):
net/packet: fix overflow in tpacket_rcv

Pablo Neira Ayuso (3):
netfilter: nf_tables: add NFTA_SET_USERDATA if not null
netfilter: nf_tables: incorrect enum nft_list_attributes definition
netfilter: nfnetlink: nfnetlink_unicast() reports EAGAIN instead of ENOBUFS

Paul Cercueil (1):
irqchip/ingenic: Leave parent IRQ unmasked on suspend

Pavan Chebbi (1):
bnxt_en: Don't query FW when netif_running() is false.

Peter Ujfalusi (2):
dmaengine: of-dma: Fix of_dma_router_xlate's of_dma_xlate handling
dmaengine: ti: k3-udma: Fix the TR initialization for prep_slave_sg

Peter Zijlstra (2):
cpuidle: Fixup IRQ state
x86/entry: Fix AC assertion

Potnuri Bharat Teja (1):
cxgb4: fix thermal zone device registration

Qu Wenruo (1):
btrfs: tree-checker: fix the error message for transid error

Randy Dunlap (1):
kconfig: streamline_config.pl: check defined(ENV variable) before using it

Raul E Rangel (1):
mmc: sdhci-acpi: Fix HS400 tuning for AMDI0040

Ray Jui (1):
i2c: iproc: Fix shifting 31 bits

Rob Clark (2):
drm/msm/dpu: fix unitialized variable error drm/msm: enable vblank during atomic commits

Samson Tam (1):
drm/amd/display: Fix passive dongle mistaken as active dongle in EDID emulation

Sandeep Raghuraman (1):
drm/amdgpu: Specify get_argument function for ci_smu_funcs

Sasha Levin (1):
x86/mm/32: Bring back vmalloc faulting on x86_32

Sean Paul (1):
drm/i915: Fix sha_text population code

Sean Young (2):
media: rc: do not access device via sysfs after rc_unregister_device()
media: rc: uevent sysfs file races with rc_unregister_device()

Sebastian Parschauer (1):
HID: quirks: Always poll three more Lenovo PixArt mice

Shung-Hsi Yu (1):
net: ethernet: mlx4: Fix memory allocation in mlx4_buddy_init()

Simon Leiner (1):
xen/xenbus: Fix granting of vmalloc'd memory

Sowjanya Komatineni (1):
sdhci: tegra: Add missing TMCLK for data timeout

Suravee Suthikulpanit (2):
iommu/amd: Restore IRTE.RemapEn bit after programming IRTE iommu/amd: Use cmpxchg_double() when updating 128-bit IRTE

Sven Eckelmann (1):
batman-adv: Avoid uninitialized chaddr when handling DHCP

Sven Schnelle (1):
s390: don't trace preemption in percpu macros

Takashi Iwai (2):
ALSA: pcm: oss: Remove superfluous WARN_ON() for mulaw sanity check
ALSA: hda/realtek - Improved routing for Thinkpad X1 7th/8th Gen

Takashi Sakamoto (2):
ALSA: firewire-digi00x: exclude Avid Adrenaline from detection ALSA; firewire-tascam: exclude Tascam FE-8 from detection

Tejun Heo (3):
libata: implement ATA_HORKAGE_MAX_TRIM_128M and apply to Sandisks
blk-iocost: ioc_pd_free() shouldn't assume irq disabled
blk-stat: make q->stats->lock irqsafe

Thomas Bogendoerfer (1):
MIPS: SNI: Fix SCSI interrupt

Tiezhu Yang (3):
perf top: Skip side-band event setup if HAVE_LIBBPF_SUPPORT is not set
MIPS: perf: Fix wrong check condition of Loongson event IDs Revert "ALSA: hda: Add support for Loongson 7A1000 controller"

Tom Rix (1):
hwmon: (applesmc) check status earlier.

Tomi Valkeinen (1):
drm/omap: fix incorrect lock state

Tong Zhang (2):
drm/amd/display: should check error using DC_OK
ALSA: ca0106: fix error code handling

Tony Lindgren (1):
thermal: ti-soc-thermal: Fix bogus thermal shutdowns for omap4430

Vamshi K Sthambamkadi (1):
tracing/kprobes, x86/ptrace: Fix regs argument order for i386

Vasundhara Volam (2):
bnxt_en: Check for zero dir entries in NVRAM.
bnxt_en: Fix PCI AER error recovery flow

Veera Vegivada (1):
thermal: qcom-spmi-temp-alarm: Don't suppress negative temp

Vineet Gupta (1):
ARC: perf: don't bail setup if pct irq missing in device-tree

Vineeth Pillai (2):
hv_utils: return error if host timesysnc update is stale
hv_utils: drain the timesync packets on onchannelcallback

Viresh Kumar (1):
opp: Don't drop reference for an OPP table that was never parsed

Wayne Lin (1):
drm/amd/display: Retry AUX write when fail occurs

Wei Li (1):
perf record: Correct the help info of option "--no-bpf-event"

Wenbin Mei (3):
arm64: dts: mt7622: add reset node for mmc device
mmc: mediatek: add optional module reset property
mmc: dt-bindings: Add resets/reset-names for Mediatek MMC bindings

Yang Shi (1):
mm: madvise: fix vma user-after-free

Ye Bin (3):

      dm cache metadata: Avoid returning cmd->bm wild pointer on error
      dm thin metadata: Avoid returning cmd->bm wild pointer on error
      dm thin metadata: Fix use-after-free in dm_bm_set_read_only

Yonghong Song (1):
bpf: Fix a buffer out-of-bound access when filling raw_tp link_info

Yu Kuai (3):
dmaengine: at_hdmac: check return value of of_find_device_by_node() in at_dma_xlate()
dmaengine: at_hdmac: add missing put_device() call in at_dma_xlate()
dmaengine: at_hdmac: add missing kfree() call in at_dma_xlate()

YueHaibing (1):
perf bench: The do_run_multi_threaded() function must use IS_ERR(perf_session__new())

Yuusuke Ashizuka (1):
ravb: Fixed to be able to unload modules

author maintainer
#1 lore raw
Documentation/devicetree/bindings/mmc/mtk-sd.txt +2 -0
index 8a532f4453f2..09aecec47003 100644
@@ -49,6 +49,8 @@ Optional properties:
 		     error caused by stop clock(fifo full)
 		     Valid range = [0:0x7]. if not present, default value is 0.
 		     applied to compatible "mediatek,mt2701-mmc".
+- resets: Phandle and reset specifier pair to softreset line of MSDC IP.
+- reset-names: Should be "hrst".
 
 Examples:
 mmc0: mmc@11230000 {
Documentation/filesystems/affs.rst +10 -6
index 7f1a40dce6d3..5776cbd5fa53 100644
@@ -110,13 +110,15 @@ The Amiga protection flags RWEDRWEDHSPARWED are handled as follows:
 
   - R maps to r for user, group and others. On directories, R implies x.
 
-  - If both W and D are allowed, w will be set.
+  - W maps to w.
 
   - E maps to x.
 
-  - H and P are always retained and ignored under Linux.
+  - D is ignored.
 
-  - A is always reset when a file is written to.
+  - H, S and P are always retained and ignored under Linux.
+
+  - A is cleared when a file is written to.
 
 User id and group id will be used unless set[gu]id are given as mount
 options. Since most of the Amiga file systems are single user systems
@@ -128,11 +130,13 @@ Linux -> Amiga:
 
 The Linux rwxrwxrwx file mode is handled as follows:
 
-  - r permission will set R for user, group and others.
+  - r permission will allow R for user, group and others.
+
+  - w permission will allow W for user, group and others.
 
-  - w permission will set W and D for user, group and others.
+  - x permission of the user will allow E for plain files.
 
-  - x permission of the user will set E for plain files.
+  - D will be allowed for user, group and others.
 
   - All other flags (suid, sgid, ...) are ignored and will
     not be retained.
Makefile +1 -1
index 5081bd85af29..dba4d8f2f786 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 5
 PATCHLEVEL = 8
-SUBLEVEL = 7
+SUBLEVEL = 8
 EXTRAVERSION =
 NAME = Kleptomaniac Octopus
 
arch/arc/kernel/perf_event.c +4 -10
index 661fd842ea97..79849f37e782 100644
@@ -562,7 +562,7 @@ static int arc_pmu_device_probe(struct platform_device *pdev)
 {
 	struct arc_reg_pct_build pct_bcr;
 	struct arc_reg_cc_build cc_bcr;
-	int i, has_interrupts;
+	int i, has_interrupts, irq;
 	int counter_size;	/* in bits */
 
 	union cc_name {
@@ -637,13 +637,7 @@ static int arc_pmu_device_probe(struct platform_device *pdev)
 		.attr_groups	= arc_pmu->attr_groups,
 	};
 
-	if (has_interrupts) {
-		int irq = platform_get_irq(pdev, 0);
-
-		if (irq < 0) {
-			pr_err("Cannot get IRQ number for the platform\n");
-			return -ENODEV;
-		}
+	if (has_interrupts && (irq = platform_get_irq(pdev, 0) >= 0)) {
 
 		arc_pmu->irq = irq;
 
@@ -652,9 +646,9 @@ static int arc_pmu_device_probe(struct platform_device *pdev)
 				   this_cpu_ptr(&arc_pmu_cpu));
 
 		on_each_cpu(arc_cpu_pmu_irq_init, &irq, 1);
-
-	} else
+	} else {
 		arc_pmu->pmu.capabilities |= PERF_PMU_CAP_NO_INTERRUPT;
+	}
 
 	/*
 	 * perf parser doesn't really like '-' symbol in events name, so let's
arch/arc/mm/init.c +16 -11
index e7bdc2ac1c87..8fcb9e25aa64 100644
@@ -27,8 +27,8 @@ static unsigned long low_mem_sz;
 
 #ifdef CONFIG_HIGHMEM
 static unsigned long min_high_pfn, max_high_pfn;
-static u64 high_mem_start;
-static u64 high_mem_sz;
+static phys_addr_t high_mem_start;
+static phys_addr_t high_mem_sz;
 #endif
 
 #ifdef CONFIG_DISCONTIGMEM
@@ -70,6 +70,7 @@ void __init early_init_dt_add_memory_arch(u64 base, u64 size)
 		high_mem_sz = size;
 		in_use = 1;
 		memblock_add_node(base, size, 1);
+		memblock_reserve(base, size);
 #endif
 	}
 
@@ -158,7 +159,7 @@ void __init setup_arch_memory(void)
 	min_high_pfn = PFN_DOWN(high_mem_start);
 	max_high_pfn = PFN_DOWN(high_mem_start + high_mem_sz);
 
-	max_zone_pfn[ZONE_HIGHMEM] = max_high_pfn;
+	max_zone_pfn[ZONE_HIGHMEM] = min_low_pfn;
 
 	high_memory = (void *)(min_high_pfn << PAGE_SHIFT);
 	kmap_init();
@@ -167,22 +168,26 @@ void __init setup_arch_memory(void)
 	free_area_init(max_zone_pfn);
 }
 
-/*
- * mem_init - initializes memory
- *
- * Frees up bootmem
- * Calculates and displays memory available/used
- */
-void __init mem_init(void)
+static void __init highmem_init(void)
 {
 #ifdef CONFIG_HIGHMEM
 	unsigned long tmp;
 
-	reset_all_zones_managed_pages();
+	memblock_free(high_mem_start, high_mem_sz);
 	for (tmp = min_high_pfn; tmp < max_high_pfn; tmp++)
 		free_highmem_page(pfn_to_page(tmp));
 #endif
+}
 
+/*
+ * mem_init - initializes memory
+ *
+ * Frees up bootmem
+ * Calculates and displays memory available/used
+ */
+void __init mem_init(void)
+{
 	memblock_free_all();
+	highmem_init();
 	mem_init_print_info(NULL);
 }
arch/arm64/boot/dts/mediatek/mt7622.dtsi +2 -0
index 1a39e0ef776b..5b9ec032ce8d 100644
@@ -686,6 +686,8 @@ mmc0: mmc@11230000 {
 		clocks = <&pericfg CLK_PERI_MSDC30_0_PD>,
 			 <&topckgen CLK_TOP_MSDC50_0_SEL>;
 		clock-names = "source", "hclk";
+		resets = <&pericfg MT7622_PERI_MSDC0_SW_RST>;
+		reset-names = "hrst";
 		status = "disabled";
 	};
 
arch/mips/kernel/perf_event_mipsxx.c +2 -2
index efce5defcc5c..011eb6bbf81a 100644
@@ -1898,8 +1898,8 @@ static const struct mips_perf_event *mipsxx_pmu_map_raw_event(u64 config)
 				(base_id >= 64 && base_id < 90) ||
 				(base_id >= 128 && base_id < 164) ||
 				(base_id >= 192 && base_id < 200) ||
-				(base_id >= 256 && base_id < 274) ||
-				(base_id >= 320 && base_id < 358) ||
+				(base_id >= 256 && base_id < 275) ||
+				(base_id >= 320 && base_id < 361) ||
 				(base_id >= 384 && base_id < 574))
 				break;
 
arch/mips/kernel/smp-bmips.c +2 -0
index 2f513506a3d5..1dbfb5aadffd 100644
@@ -239,6 +239,8 @@ static int bmips_boot_secondary(int cpu, struct task_struct *idle)
  */
 static void bmips_init_secondary(void)
 {
+	bmips_cpu_setup();
+
 	switch (current_cpu_type()) {
 	case CPU_BMIPS4350:
 	case CPU_BMIPS4380:
arch/mips/kernel/traps.c +12 -0
index e664d8b43e72..2e9d0637591c 100644
@@ -1286,6 +1286,18 @@ static int enable_restore_fp_context(int msa)
 		err = own_fpu_inatomic(1);
 		if (msa && !err) {
 			enable_msa();
+			/*
+			 * with MSA enabled, userspace can see MSACSR
+			 * and MSA regs, but the values in them are from
+			 * other task before current task, restore them
+			 * from saved fp/msa context
+			 */
+			write_msa_csr(current->thread.fpu.msacsr);
+			/*
+			 * own_fpu_inatomic(1) just restore low 64bit,
+			 * fix the high 64bit
+			 */
+			init_msa_upper();
 			set_thread_flag(TIF_USEDMSA);
 			set_thread_flag(TIF_MSA_CTX_LIVE);
 		}
arch/mips/mm/c-r4k.c +4 -0
index 49569e5666d7..cb32a00d286e 100644
@@ -1712,7 +1712,11 @@ static void setup_scache(void)
 				printk("MIPS secondary cache %ldkB, %s, linesize %d bytes.\n",
 				       scache_size >> 10,
 				       way_string[c->scache.ways], c->scache.linesz);
+
+				if (current_cpu_type() == CPU_BMIPS5000)
+					c->options |= MIPS_CPU_INCLUSIVE_CACHES;
 			}
+
 #else
 			if (!(c->scache.flags & MIPS_CACHE_NOT_PRESENT))
 				panic("Dunno how to handle MIPS32 / MIPS64 second level cache");
arch/mips/oprofile/op_model_mipsxx.c +3 -1
index 1493c49ca47a..55d7b7fd18b6 100644
@@ -245,7 +245,6 @@ static int mipsxx_perfcount_handler(void)
 
 	switch (counters) {
 #define HANDLE_COUNTER(n)						\
-	fallthrough;							\
 	case n + 1:							\
 		control = r_c0_perfctrl ## n();				\
 		counter = r_c0_perfcntr ## n();				\
@@ -256,8 +255,11 @@ static int mipsxx_perfcount_handler(void)
 			handled = IRQ_HANDLED;				\
 		}
 	HANDLE_COUNTER(3)
+	fallthrough;
 	HANDLE_COUNTER(2)
+	fallthrough;
 	HANDLE_COUNTER(1)
+	fallthrough;
 	HANDLE_COUNTER(0)
 	}
 
arch/mips/sni/a20r.c +2 -2
index 0ecffb65fd6d..b09dc844985a 100644
@@ -222,8 +222,8 @@ void __init sni_a20r_irq_init(void)
 		irq_set_chip_and_handler(i, &a20r_irq_type, handle_level_irq);
 	sni_hwint = a20r_hwint;
 	change_c0_status(ST0_IM, IE_IRQ0);
-	if (request_irq(SNI_A20R_IRQ_BASE + 3, sni_isa_irq_handler, 0, "ISA",
-			NULL))
+	if (request_irq(SNI_A20R_IRQ_BASE + 3, sni_isa_irq_handler,
+			IRQF_SHARED, "ISA", sni_isa_irq_handler))
 		pr_err("Failed to register ISA interrupt\n");
 }
 
arch/s390/Kconfig +1 -1
index 4907a5149a8a..79e074ffad13 100644
@@ -30,7 +30,7 @@ config GENERIC_BUG_RELATIVE_POINTERS
 	def_bool y
 
 config GENERIC_LOCKBREAK
-	def_bool y if PREEMPTTION
+	def_bool y if PREEMPTION
 
 config PGSTE
 	def_bool y if KVM
arch/s390/include/asm/percpu.h +14 -14
index 50b4ce8cddfd..918f0ba4f4d2 100644
@@ -29,7 +29,7 @@
 	typedef typeof(pcp) pcp_op_T__;					\
 	pcp_op_T__ old__, new__, prev__;				\
 	pcp_op_T__ *ptr__;						\
-	preempt_disable();						\
+	preempt_disable_notrace();					\
 	ptr__ = raw_cpu_ptr(&(pcp));					\
 	prev__ = *ptr__;						\
 	do {								\
@@ -37,7 +37,7 @@
 		new__ = old__ op (val);					\
 		prev__ = cmpxchg(ptr__, old__, new__);			\
 	} while (prev__ != old__);					\
-	preempt_enable();						\
+	preempt_enable_notrace();					\
 	new__;								\
 })
 
@@ -68,7 +68,7 @@
 	typedef typeof(pcp) pcp_op_T__; 				\
 	pcp_op_T__ val__ = (val);					\
 	pcp_op_T__ old__, *ptr__;					\
-	preempt_disable();						\
+	preempt_disable_notrace();					\
 	ptr__ = raw_cpu_ptr(&(pcp)); 				\
 	if (__builtin_constant_p(val__) &&				\
 	    ((szcast)val__ > -129) && ((szcast)val__ < 128)) {		\
@@ -84,7 +84,7 @@
 			: [val__] "d" (val__)				\
 			: "cc");					\
 	}								\
-	preempt_enable();						\
+	preempt_enable_notrace();					\
 }
 
 #define this_cpu_add_4(pcp, val) arch_this_cpu_add(pcp, val, "laa", "asi", int)
@@ -95,14 +95,14 @@
 	typedef typeof(pcp) pcp_op_T__; 				\
 	pcp_op_T__ val__ = (val);					\
 	pcp_op_T__ old__, *ptr__;					\
-	preempt_disable();						\
+	preempt_disable_notrace();					\
 	ptr__ = raw_cpu_ptr(&(pcp));	 				\
 	asm volatile(							\
 		op "    %[old__],%[val__],%[ptr__]\n"			\
 		: [old__] "=d" (old__), [ptr__] "+Q" (*ptr__)		\
 		: [val__] "d" (val__)					\
 		: "cc");						\
-	preempt_enable();						\
+	preempt_enable_notrace();						\
 	old__ + val__;							\
 })
 
@@ -114,14 +114,14 @@
 	typedef typeof(pcp) pcp_op_T__; 				\
 	pcp_op_T__ val__ = (val);					\
 	pcp_op_T__ old__, *ptr__;					\
-	preempt_disable();						\
+	preempt_disable_notrace();					\
 	ptr__ = raw_cpu_ptr(&(pcp));	 				\
 	asm volatile(							\
 		op "    %[old__],%[val__],%[ptr__]\n"			\
 		: [old__] "=d" (old__), [ptr__] "+Q" (*ptr__)		\
 		: [val__] "d" (val__)					\
 		: "cc");						\
-	preempt_enable();						\
+	preempt_enable_notrace();					\
 }
 
 #define this_cpu_and_4(pcp, val)	arch_this_cpu_to_op(pcp, val, "lan")
@@ -136,10 +136,10 @@
 	typedef typeof(pcp) pcp_op_T__;					\
 	pcp_op_T__ ret__;						\
 	pcp_op_T__ *ptr__;						\
-	preempt_disable();						\
+	preempt_disable_notrace();					\
 	ptr__ = raw_cpu_ptr(&(pcp));					\
 	ret__ = cmpxchg(ptr__, oval, nval);				\
-	preempt_enable();						\
+	preempt_enable_notrace();					\
 	ret__;								\
 })
 
@@ -152,10 +152,10 @@
 ({									\
 	typeof(pcp) *ptr__;						\
 	typeof(pcp) ret__;						\
-	preempt_disable();						\
+	preempt_disable_notrace();					\
 	ptr__ = raw_cpu_ptr(&(pcp));					\
 	ret__ = xchg(ptr__, nval);					\
-	preempt_enable();						\
+	preempt_enable_notrace();					\
 	ret__;								\
 })
 
@@ -171,11 +171,11 @@
 	typeof(pcp1) *p1__;						\
 	typeof(pcp2) *p2__;						\
 	int ret__;							\
-	preempt_disable();						\
+	preempt_disable_notrace();					\
 	p1__ = raw_cpu_ptr(&(pcp1));					\
 	p2__ = raw_cpu_ptr(&(pcp2));					\
 	ret__ = __cmpxchg_double(p1__, p2__, o1__, o2__, n1__, n2__);	\
-	preempt_enable();						\
+	preempt_enable_notrace();					\
 	ret__;								\
 })
 
arch/x86/entry/common.c +10 -2
index f09288431f28..606c4e25ee93 100644
@@ -55,8 +55,16 @@ static noinstr void check_user_regs(struct pt_regs *regs)
 		 * state, not the interrupt state as imagined by Xen.
 		 */
 		unsigned long flags = native_save_fl();
-		WARN_ON_ONCE(flags & (X86_EFLAGS_AC | X86_EFLAGS_DF |
-				      X86_EFLAGS_NT));
+		unsigned long mask = X86_EFLAGS_DF | X86_EFLAGS_NT;
+
+		/*
+		 * For !SMAP hardware we patch out CLAC on entry.
+		 */
+		if (boot_cpu_has(X86_FEATURE_SMAP) ||
+		    (IS_ENABLED(CONFIG_64_BIT) && boot_cpu_has(X86_FEATURE_XENPV)))
+			mask |= X86_EFLAGS_AC;
+
+		WARN_ON_ONCE(flags & mask);
 
 		/* We think we came from user mode. Make sure pt_regs agrees. */
 		WARN_ON_ONCE(!user_mode(regs));
arch/x86/include/asm/ptrace.h +1 -1
index 255b2dde2c1b..9675d8b2c666 100644
@@ -322,8 +322,8 @@ static inline unsigned long regs_get_kernel_argument(struct pt_regs *regs,
 	static const unsigned int argument_offs[] = {
 #ifdef __i386__
 		offsetof(struct pt_regs, ax),
-		offsetof(struct pt_regs, cx),
 		offsetof(struct pt_regs, dx),
+		offsetof(struct pt_regs, cx),
 #define NR_REG_ARGUMENTS 3
 #else
 		offsetof(struct pt_regs, di),
arch/x86/include/asm/switch_to.h +23 -0
index 9f69cc497f4b..0e059b73437b 100644
@@ -12,6 +12,27 @@ struct task_struct *__switch_to_asm(struct task_struct *prev,
 __visible struct task_struct *__switch_to(struct task_struct *prev,
 					  struct task_struct *next);
 
+/* This runs runs on the previous thread's stack. */
+static inline void prepare_switch_to(struct task_struct *next)
+{
+#ifdef CONFIG_VMAP_STACK
+	/*
+	 * If we switch to a stack that has a top-level paging entry
+	 * that is not present in the current mm, the resulting #PF will
+	 * will be promoted to a double-fault and we'll panic.  Probe
+	 * the new stack now so that vmalloc_fault can fix up the page
+	 * tables if needed.  This can only happen if we use a stack
+	 * in vmap space.
+	 *
+	 * We assume that the stack is aligned so that it never spans
+	 * more than one top-level paging entry.
+	 *
+	 * To minimize cache pollution, just follow the stack pointer.
+	 */
+	READ_ONCE(*(unsigned char *)next->thread.sp);
+#endif
+}
+
 asmlinkage void ret_from_fork(void);
 
 /*
@@ -46,6 +67,8 @@ struct fork_frame {
 
 #define switch_to(prev, next, last)					\
 do {									\
+	prepare_switch_to(next);					\
+									\
 	((last) = __switch_to_asm((prev), (next)));			\
 } while (0)
 
arch/x86/kernel/setup_percpu.c +3 -3
index fd945ce78554..e6d7894ad127 100644
@@ -287,9 +287,9 @@ void __init setup_per_cpu_areas(void)
 	/*
 	 * Sync back kernel address range again.  We already did this in
 	 * setup_arch(), but percpu data also needs to be available in
-	 * the smpboot asm and arch_sync_kernel_mappings() doesn't sync to
-	 * swapper_pg_dir on 32-bit. The per-cpu mappings need to be available
-	 * there too.
+	 * the smpboot asm.  We can't reliably pick up percpu mappings
+	 * using vmalloc_fault(), because exception dispatch needs
+	 * percpu data.
 	 *
 	 * FIXME: Can the later sync in setup_cpu_entry_areas() replace
 	 * this call?
arch/x86/kernel/traps.c +32 -34

121 lines not on this page · raw message

arch/x86/mm/fault.c +134 -0

152 lines not on this page · raw message

arch/x86/mm/numa_emulation.c +1 -1
index c5174b4e318b..683cd12f4793 100644
@@ -321,7 +321,7 @@ static int __init split_nodes_size_interleave(struct numa_meminfo *ei,
 					      u64 addr, u64 max_addr, u64 size)
 {
 	return split_nodes_size_interleave_uniform(ei, pi, addr, max_addr, size,
-			0, NULL, NUMA_NO_NODE);
+			0, NULL, 0);
 }
 
 static int __init setup_emu2phys_nid(int *dfl_phys_nid)
arch/x86/mm/pti.c +7 -1
index a8a924b3c335..0b0d1cdce2e7 100644
@@ -447,7 +447,13 @@ static void __init pti_clone_user_shared(void)
 		 * the sp1 and sp2 slots.
 		 *
 		 * This is done for all possible CPUs during boot to ensure
-		 * that it's propagated to all mms.
+		 * that it's propagated to all mms.  If we were to add one of
+		 * these mappings during CPU hotplug, we would need to take
+		 * some measure to make sure that every mm that subsequently
+		 * ran on that CPU would have the relevant PGD entry in its
+		 * pagetables.  The usual vmalloc_fault() mechanism would not
+		 * work for page faults taken in entry_SYSCALL_64 before RSP
+		 * is set up.
 		 */
 
 		unsigned long va = (unsigned long)&per_cpu(cpu_tss_rw, cpu);
arch/x86/mm/tlb.c +37 -0
index 1a3569b43aa5..cf81902e6992 100644
@@ -317,6 +317,34 @@ void switch_mm(struct mm_struct *prev, struct mm_struct *next,
 	local_irq_restore(flags);
 }
 
+static void sync_current_stack_to_mm(struct mm_struct *mm)
+{
+	unsigned long sp = current_stack_pointer;
+	pgd_t *pgd = pgd_offset(mm, sp);
+
+	if (pgtable_l5_enabled()) {
+		if (unlikely(pgd_none(*pgd))) {
+			pgd_t *pgd_ref = pgd_offset_k(sp);
+
+			set_pgd(pgd, *pgd_ref);
+		}
+	} else {
+		/*
+		 * "pgd" is faked.  The top level entries are "p4d"s, so sync
+		 * the p4d.  This compiles to approximately the same code as
+		 * the 5-level case.
+		 */
+		p4d_t *p4d = p4d_offset(pgd, sp);
+
+		if (unlikely(p4d_none(*p4d))) {
+			pgd_t *pgd_ref = pgd_offset_k(sp);
+			p4d_t *p4d_ref = p4d_offset(pgd_ref, sp);
+
+			set_p4d(p4d, *p4d_ref);
+		}
+	}
+}
+
 static inline unsigned long mm_mangle_tif_spec_ib(struct task_struct *next)
 {
 	unsigned long next_tif = task_thread_info(next)->flags;
@@ -525,6 +553,15 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next,
 		 */
 		cond_ibpb(tsk);
 
+		if (IS_ENABLED(CONFIG_VMAP_STACK)) {
+			/*
+			 * If our current stack is in vmalloc space and isn't
+			 * mapped in the new pgd, we'll double-fault.  Forcibly
+			 * map it.
+			 */
+			sync_current_stack_to_mm(next);
+		}
+
 		/*
 		 * Stop remote flushes for the previous mm.
 		 * Skip kernel threads; we never send init_mm TLB flushing IPIs,
block/blk-core.c +1 -0
index 03252af8c82c..619a3dcd3f5e 100644
@@ -526,6 +526,7 @@ struct request_queue *__blk_alloc_queue(int node_id)
 		goto fail_stats;
 
 	q->backing_dev_info->ra_pages = VM_READAHEAD_PAGES;
+	q->backing_dev_info->io_pages = VM_READAHEAD_PAGES;
 	q->backing_dev_info->capabilities = BDI_CAP_CGROUP_WRITEBACK;
 	q->node = node_id;
 
block/blk-iocost.c +3 -2
index 86ba6fd254e1..27c05e3caf75 100644
@@ -2094,14 +2094,15 @@ static void ioc_pd_free(struct blkg_policy_data *pd)
 {
 	struct ioc_gq *iocg = pd_to_iocg(pd);
 	struct ioc *ioc = iocg->ioc;
+	unsigned long flags;
 
 	if (ioc) {
-		spin_lock(&ioc->lock);
+		spin_lock_irqsave(&ioc->lock, flags);
 		if (!list_empty(&iocg->active_list)) {
 			propagate_active_weight(iocg, 0, 0);
 			list_del_init(&iocg->active_list);
 		}
-		spin_unlock(&ioc->lock);
+		spin_unlock_irqrestore(&ioc->lock, flags);
 
 		hrtimer_cancel(&iocg->waitq_timer);
 		hrtimer_cancel(&iocg->delay_timer);
block/blk-stat.c +11 -6
index 7da302ff88d0..ae3dd1fb8e61 100644
@@ -137,6 +137,7 @@ void blk_stat_add_callback(struct request_queue *q,
 			   struct blk_stat_callback *cb)
 {
 	unsigned int bucket;
+	unsigned long flags;
 	int cpu;
 
 	for_each_possible_cpu(cpu) {
@@ -147,20 +148,22 @@ void blk_stat_add_callback(struct request_queue *q,
 			blk_rq_stat_init(&cpu_stat[bucket]);
 	}
 
-	spin_lock(&q->stats->lock);
+	spin_lock_irqsave(&q->stats->lock, flags);
 	list_add_tail_rcu(&cb->list, &q->stats->callbacks);
 	blk_queue_flag_set(QUEUE_FLAG_STATS, q);
-	spin_unlock(&q->stats->lock);
+	spin_unlock_irqrestore(&q->stats->lock, flags);
 }
 
 void blk_stat_remove_callback(struct request_queue *q,
 			      struct blk_stat_callback *cb)
 {
-	spin_lock(&q->stats->lock);
+	unsigned long flags;
+
+	spin_lock_irqsave(&q->stats->lock, flags);
 	list_del_rcu(&cb->list);
 	if (list_empty(&q->stats->callbacks) && !q->stats->enable_accounting)
 		blk_queue_flag_clear(QUEUE_FLAG_STATS, q);
-	spin_unlock(&q->stats->lock);
+	spin_unlock_irqrestore(&q->stats->lock, flags);
 
 	del_timer_sync(&cb->timer);
 }
@@ -183,10 +186,12 @@ void blk_stat_free_callback(struct blk_stat_callback *cb)
 
 void blk_stat_enable_accounting(struct request_queue *q)
 {
-	spin_lock(&q->stats->lock);
+	unsigned long flags;
+
+	spin_lock_irqsave(&q->stats->lock, flags);
 	q->stats->enable_accounting = true;
 	blk_queue_flag_set(QUEUE_FLAG_STATS, q);
-	spin_unlock(&q->stats->lock);
+	spin_unlock_irqrestore(&q->stats->lock, flags);
 }
 EXPORT_SYMBOL_GPL(blk_stat_enable_accounting);
 
block/partitions/core.c +13 -14
index 78951e33b2d7..534e11285a8d 100644
@@ -524,19 +524,20 @@ int bdev_add_partition(struct block_device *bdev, int partno,
 int bdev_del_partition(struct block_device *bdev, int partno)
 {
 	struct block_device *bdevp;
-	struct hd_struct *part;
-	int ret = 0;
-
-	part = disk_get_part(bdev->bd_disk, partno);
-	if (!part)
-		return -ENXIO;
+	struct hd_struct *part = NULL;
+	int ret;
 
-	ret = -ENOMEM;
-	bdevp = bdget(part_devt(part));
+	bdevp = bdget_disk(bdev->bd_disk, partno);
 	if (!bdevp)
-		goto out_put_part;
+		return -ENOMEM;
 
 	mutex_lock(&bdevp->bd_mutex);
+	mutex_lock_nested(&bdev->bd_mutex, 1);
+
+	ret = -ENXIO;
+	part = disk_get_part(bdev->bd_disk, partno);
+	if (!part)
+		goto out_unlock;
 
 	ret = -EBUSY;
 	if (bdevp->bd_openers)
@@ -545,16 +546,14 @@ int bdev_del_partition(struct block_device *bdev, int partno)
 	sync_blockdev(bdevp);
 	invalidate_bdev(bdevp);
 
-	mutex_lock_nested(&bdev->bd_mutex, 1);
 	delete_partition(bdev->bd_disk, part);
-	mutex_unlock(&bdev->bd_mutex);
-
 	ret = 0;
 out_unlock:
+	mutex_unlock(&bdev->bd_mutex);
 	mutex_unlock(&bdevp->bd_mutex);
 	bdput(bdevp);
-out_put_part:
-	disk_put_part(part);
+	if (part)
+		disk_put_part(part);
 	return ret;
 }
 
drivers/ata/libata-core.c +2 -3
index b1cd4d97bc2a..1be73d29119a 100644
@@ -3868,9 +3868,8 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
 	/* https://bugzilla.kernel.org/show_bug.cgi?id=15573 */
 	{ "C300-CTFDDAC128MAG",	"0001",		ATA_HORKAGE_NONCQ, },
 
-	/* Some Sandisk SSDs lock up hard with NCQ enabled.  Reported on
-	   SD7SN6S256G and SD8SN8U256G */
-	{ "SanDisk SD[78]SN*G",	NULL,		ATA_HORKAGE_NONCQ, },
+	/* Sandisk SD7/8/9s lock up hard on large trims */
+	{ "SanDisk SD[789]*",	NULL,		ATA_HORKAGE_MAX_TRIM_128M, },
 
 	/* devices which puke on READ_NATIVE_MAX */
 	{ "HDS724040KLSA80",	"KFAOA20N",	ATA_HORKAGE_BROKEN_HPA, },
drivers/ata/libata-scsi.c +7 -1
index 46336084b1a9..cc7bedafb392 100644
@@ -2080,6 +2080,7 @@ static unsigned int ata_scsiop_inq_89(struct ata_scsi_args *args, u8 *rbuf)
 
 static unsigned int ata_scsiop_inq_b0(struct ata_scsi_args *args, u8 *rbuf)
 {
+	struct ata_device *dev = args->dev;
 	u16 min_io_sectors;
 
 	rbuf[1] = 0xb0;
@@ -2105,7 +2106,12 @@ static unsigned int ata_scsiop_inq_b0(struct ata_scsi_args *args, u8 *rbuf)
 	 * with the unmap bit set.
 	 */
 	if (ata_id_has_trim(args->id)) {
-		put_unaligned_be64(65535 * ATA_MAX_TRIM_RNUM, &rbuf[36]);
+		u64 max_blocks = 65535 * ATA_MAX_TRIM_RNUM;
+
+		if (dev->horkage & ATA_HORKAGE_MAX_TRIM_128M)
+			max_blocks = 128 << (20 - SECTOR_SHIFT);
+
+		put_unaligned_be64(max_blocks, &rbuf[36]);
 		put_unaligned_be32(1, &rbuf[28]);
 	}
 
drivers/block/nbd.c +2 -0
index ce7e9f223b20..bc9dc1f847e1 100644
@@ -1360,6 +1360,8 @@ static void nbd_set_cmd_timeout(struct nbd_device *nbd, u64 timeout)
 	nbd->tag_set.timeout = timeout * HZ;
 	if (timeout)
 		blk_queue_rq_timeout(nbd->disk->queue, timeout * HZ);
+	else
+		blk_queue_rq_timeout(nbd->disk->queue, 30 * HZ);
 }
 
 /* Must be called with config_lock held */
drivers/cpuidle/cpuidle.c +2 -1
index 87197319ab06..2fe4f3cdf54d 100644
@@ -153,7 +153,8 @@ static void enter_s2idle_proper(struct cpuidle_driver *drv,
 	 */
 	stop_critical_timings();
 	drv->states[index].enter_s2idle(dev, drv, index);
-	WARN_ON(!irqs_disabled());
+	if (WARN_ON_ONCE(!irqs_disabled()))
+		local_irq_disable();
 	/*
 	 * timekeeping_resume() that will be called by tick_unfreeze() for the
 	 * first CPU executing it calls functions containing RCU read-side
drivers/dma/at_hdmac.c +9 -2
index 73a20780744b..626819b33a32 100644
@@ -1650,13 +1650,17 @@ static struct dma_chan *at_dma_xlate(struct of_phandle_args *dma_spec,
 		return NULL;
 
 	dmac_pdev = of_find_device_by_node(dma_spec->np);
+	if (!dmac_pdev)
+		return NULL;
 
 	dma_cap_zero(mask);
 	dma_cap_set(DMA_SLAVE, mask);
 
 	atslave = kmalloc(sizeof(*atslave), GFP_KERNEL);
-	if (!atslave)
+	if (!atslave) {
+		put_device(&dmac_pdev->dev);
 		return NULL;
+	}
 
 	atslave->cfg = ATC_DST_H2SEL_HW | ATC_SRC_H2SEL_HW;
 	/*
@@ -1685,8 +1689,11 @@ static struct dma_chan *at_dma_xlate(struct of_phandle_args *dma_spec,
 	atslave->dma_dev = &dmac_pdev->dev;
 
 	chan = dma_request_channel(mask, at_dma_filter, atslave);
-	if (!chan)
+	if (!chan) {
+		put_device(&dmac_pdev->dev);
+		kfree(atslave);
 		return NULL;
+	}
 
 	atchan = to_at_dma_chan(chan);
 	atchan->per_if = dma_spec->args[0] & 0xff;
drivers/dma/dw-edma/dw-edma-core.c +6 -5
index ed430ad9b3dd..b971505b8715 100644
@@ -405,7 +405,7 @@ dw_edma_device_transfer(struct dw_edma_transfer *xfer)
 			if (xfer->cyclic) {
 				burst->dar = xfer->xfer.cyclic.paddr;
 			} else {
-				burst->dar = sg_dma_address(sg);
+				burst->dar = dst_addr;
 				/* Unlike the typical assumption by other
 				 * drivers/IPs the peripheral memory isn't
 				 * a FIFO memory, in this case, it's a
@@ -413,14 +413,13 @@ dw_edma_device_transfer(struct dw_edma_transfer *xfer)
 				 * and destination addresses are increased
 				 * by the same portion (data length)
 				 */
-				src_addr += sg_dma_len(sg);
 			}
 		} else {
 			burst->dar = dst_addr;
 			if (xfer->cyclic) {
 				burst->sar = xfer->xfer.cyclic.paddr;
 			} else {
-				burst->sar = sg_dma_address(sg);
+				burst->sar = src_addr;
 				/* Unlike the typical assumption by other
 				 * drivers/IPs the peripheral memory isn't
 				 * a FIFO memory, in this case, it's a
@@ -428,12 +427,14 @@ dw_edma_device_transfer(struct dw_edma_transfer *xfer)
 				 * and destination addresses are increased
 				 * by the same portion (data length)
 				 */
-				dst_addr += sg_dma_len(sg);
 			}
 		}
 
-		if (!xfer->cyclic)
+		if (!xfer->cyclic) {
+			src_addr += sg_dma_len(sg);
+			dst_addr += sg_dma_len(sg);
 			sg = sg_next(sg);
+		}
 	}
 
 	return vchan_tx_prep(&chan->vc, &desc->vd, xfer->flags);
drivers/dma/fsldma.h +6 -6
index 56f18ae99233..308bed0a560a 100644
@@ -205,10 +205,10 @@ struct fsldma_chan {
 #else
 static u64 fsl_ioread64(const u64 __iomem *addr)
 {
-	u32 fsl_addr = lower_32_bits(addr);
-	u64 fsl_addr_hi = (u64)in_le32((u32 *)(fsl_addr + 1)) << 32;
+	u32 val_lo = in_le32((u32 __iomem *)addr);
+	u32 val_hi = in_le32((u32 __iomem *)addr + 1);
 
-	return fsl_addr_hi | in_le32((u32 *)fsl_addr);
+	return ((u64)val_hi << 32) + val_lo;
 }
 
 static void fsl_iowrite64(u64 val, u64 __iomem *addr)
@@ -219,10 +219,10 @@ static void fsl_iowrite64(u64 val, u64 __iomem *addr)
 
 static u64 fsl_ioread64be(const u64 __iomem *addr)
 {
-	u32 fsl_addr = lower_32_bits(addr);
-	u64 fsl_addr_hi = (u64)in_be32((u32 *)fsl_addr) << 32;
+	u32 val_hi = in_be32((u32 __iomem *)addr);
+	u32 val_lo = in_be32((u32 __iomem *)addr + 1);
 
-	return fsl_addr_hi | in_be32((u32 *)(fsl_addr + 1));
+	return ((u64)val_hi << 32) + val_lo;
 }
 
 static void fsl_iowrite64be(u64 val, u64 __iomem *addr)
drivers/dma/of-dma.c +4 -4
index b2c2b5e8093c..0db816eb8080 100644
@@ -71,12 +71,12 @@ static struct dma_chan *of_dma_router_xlate(struct of_phandle_args *dma_spec,
 		return NULL;
 
 	chan = ofdma_target->of_dma_xlate(&dma_spec_target, ofdma_target);
-	if (chan) {
-		chan->router = ofdma->dma_router;
-		chan->route_data = route_data;
-	} else {
+	if (IS_ERR_OR_NULL(chan)) {
 		ofdma->dma_router->route_free(ofdma->dma_router->dev,
 					      route_data);
+	} else {
+		chan->router = ofdma->dma_router;
+		chan->route_data = route_data;
 	}
 
 	/*
drivers/dma/pl330.c +1 -1
index 88b884cbb7c1..9d8a235a5b88 100644
@@ -2788,6 +2788,7 @@ pl330_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dst,
 	while (burst != (1 << desc->rqcfg.brst_size))
 		desc->rqcfg.brst_size++;
 
+	desc->rqcfg.brst_len = get_burst_len(desc, len);
 	/*
 	 * If burst size is smaller than bus width then make sure we only
 	 * transfer one at a time to avoid a burst stradling an MFIFO entry.
@@ -2795,7 +2796,6 @@ pl330_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dst,
 	if (desc->rqcfg.brst_size * 8 < pl330->pcfg.data_bus_width)
 		desc->rqcfg.brst_len = 1;
 
-	desc->rqcfg.brst_len = get_burst_len(desc, len);
 	desc->bytes_requested = len;
 
 	desc->txd.flags = flags;
drivers/dma/ti/k3-udma.c +3 -3
index 6c879a734360..3e488d963f24 100644
@@ -2109,9 +2109,9 @@ udma_prep_slave_sg_tr(struct udma_chan *uc, struct scatterlist *sgl,
 			return NULL;
 		}
 
-		cppi5_tr_init(&tr_req[i].flags, CPPI5_TR_TYPE1, false, false,
-			      CPPI5_TR_EVENT_SIZE_COMPLETION, 0);
-		cppi5_tr_csf_set(&tr_req[i].flags, CPPI5_TR_CSF_SUPR_EVT);
+		cppi5_tr_init(&tr_req[tr_idx].flags, CPPI5_TR_TYPE1, false,
+			      false, CPPI5_TR_EVENT_SIZE_COMPLETION, 0);
+		cppi5_tr_csf_set(&tr_req[tr_idx].flags, CPPI5_TR_CSF_SUPR_EVT);
 
 		tr_req[tr_idx].addr = sg_addr;
 		tr_req[tr_idx].icnt0 = tr0_cnt0;
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +10 -2
index 666ebe04837a..3f7eced92c0c 100644
@@ -2822,12 +2822,18 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev)
 				    &dm_atomic_state_funcs);
 
 	r = amdgpu_display_modeset_create_props(adev);
-	if (r)
+	if (r) {
+		dc_release_state(state->context);
+		kfree(state);
 		return r;
+	}
 
 	r = amdgpu_dm_audio_init(adev);
-	if (r)
+	if (r) {
+		dc_release_state(state->context);
+		kfree(state);
 		return r;
+	}
 
 	return 0;
 }
@@ -2844,6 +2850,8 @@ static void amdgpu_dm_update_backlight_caps(struct amdgpu_display_manager *dm)
 #if defined(CONFIG_ACPI)
 	struct amdgpu_dm_backlight_caps caps;
 
+	memset(&caps, 0, sizeof(caps));
+
 	if (dm->backlight_caps.caps_valid)
 		return;
 
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +1 -1
index e5ecc5affa1e..5098fc98cc25 100644
@@ -67,7 +67,7 @@ static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux,
 	result = dc_link_aux_transfer_raw(TO_DM_AUX(aux)->ddc_service, &payload,
 				      &operation_result);
 
-	if (payload.write)
+	if (payload.write && result >= 0)
 		result = msg->size;
 
 	if (result < 0)
drivers/gpu/drm/amd/display/dc/core/dc_link.c +2 -1
index 31aa31c280ee..885beb0bcc19 100644
@@ -767,6 +767,7 @@ static bool detect_dp(struct dc_link *link,
 		sink_caps->signal = dp_passive_dongle_detection(link->ddc,
 								sink_caps,
 								audio_support);
+		link->dpcd_caps.dongle_type = sink_caps->dongle_type;
 	}
 
 	return true;
@@ -3265,10 +3266,10 @@ void core_link_disable_stream(struct pipe_ctx *pipe_ctx)
 		core_link_set_avmute(pipe_ctx, true);
 	}
 
-	dc->hwss.blank_stream(pipe_ctx);
 #if defined(CONFIG_DRM_AMD_DC_HDCP)
 	update_psp_stream_config(pipe_ctx, true);
 #endif
+	dc->hwss.blank_stream(pipe_ctx);
 
 	if (pipe_ctx->stream->signal == SIGNAL_TYPE_DISPLAY_PORT_MST)
 		deallocate_mst_payload(pipe_ctx);
drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +4 -4
index 91cd884d6f25..7728fd71d1f3 100644
@@ -4346,9 +4346,9 @@ bool dc_link_get_backlight_level_nits(struct dc_link *link,
 			link->connector_signal != SIGNAL_TYPE_DISPLAY_PORT))
 		return false;
 
-	if (!core_link_read_dpcd(link, DP_SOURCE_BACKLIGHT_CURRENT_PEAK,
+	if (core_link_read_dpcd(link, DP_SOURCE_BACKLIGHT_CURRENT_PEAK,
 			dpcd_backlight_get.raw,
-			sizeof(union dpcd_source_backlight_get)))
+			sizeof(union dpcd_source_backlight_get)) != DC_OK)
 		return false;
 
 	*backlight_millinits_avg =
@@ -4387,9 +4387,9 @@ bool dc_link_read_default_bl_aux(struct dc_link *link, uint32_t *backlight_milli
 		link->connector_signal != SIGNAL_TYPE_DISPLAY_PORT))
 		return false;
 
-	if (!core_link_read_dpcd(link, DP_SOURCE_BACKLIGHT_LEVEL,
+	if (core_link_read_dpcd(link, DP_SOURCE_BACKLIGHT_LEVEL,
 		(uint8_t *) backlight_millinits,
-		sizeof(uint32_t)))
+		sizeof(uint32_t)) != DC_OK)
 		return false;
 
 	return true;
drivers/gpu/drm/amd/display/dc/dc_stream.h +1 -1
index 49aad691e687..ccac2315a903 100644
@@ -222,7 +222,7 @@ struct dc_stream_state {
 	union stream_update_flags update_flags;
 };
 
-#define ABM_LEVEL_IMMEDIATE_DISABLE 0xFFFFFFFF
+#define ABM_LEVEL_IMMEDIATE_DISABLE 255
 
 struct dc_stream_update {
 	struct dc_stream_state *stream;
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c +8 -0
index 17d5cb422025..8939541ad7af 100644
@@ -1213,6 +1213,7 @@ static enum dc_status dcn10_validate_global(struct dc *dc, struct dc_state *cont
 	bool video_large = false;
 	bool desktop_large = false;
 	bool dcc_disabled = false;
+	bool mpo_enabled = false;
 
 	for (i = 0; i < context->stream_count; i++) {
 		if (context->stream_status[i].plane_count == 0)
@@ -1221,6 +1222,9 @@ static enum dc_status dcn10_validate_global(struct dc *dc, struct dc_state *cont
 		if (context->stream_status[i].plane_count > 2)
 			return DC_FAIL_UNSUPPORTED_1;
 
+		if (context->stream_status[i].plane_count > 1)
+			mpo_enabled = true;
+
 		for (j = 0; j < context->stream_status[i].plane_count; j++) {
 			struct dc_plane_state *plane =
 				context->stream_status[i].plane_states[j];
@@ -1244,6 +1248,10 @@ static enum dc_status dcn10_validate_global(struct dc *dc, struct dc_state *cont
 		}
 	}
 
+	/* Disable MPO in multi-display configurations. */
+	if (context->stream_count > 1 && mpo_enabled)
+		return DC_FAIL_UNSUPPORTED_1;
+
 	/*
 	 * Workaround: On DCN10 there is UMC issue that causes underflow when
 	 * playing 4k video on 4k desktop with video downscaled and single channel
drivers/gpu/drm/amd/powerplay/hwmgr/vega10_thermal.c +12 -2
index eff87c896838..0e7ae5818034 100644
@@ -374,8 +374,18 @@ static int vega10_thermal_set_temperature_range(struct pp_hwmgr *hwmgr,
 	/* compare them in unit celsius degree */
 	if (low < range->min / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)
 		low = range->min / PP_TEMPERATURE_UNITS_PER_CENTIGRADES;
-	if (high > tdp_table->usSoftwareShutdownTemp)
-		high = tdp_table->usSoftwareShutdownTemp;
+
+	/*
+	 * As a common sense, usSoftwareShutdownTemp should be bigger
+	 * than ThotspotLimit. For any invalid usSoftwareShutdownTemp,
+	 * we will just use the max possible setting VEGA10_THERMAL_MAXIMUM_ALERT_TEMP
+	 * to avoid false alarms.
+	 */
+	if ((tdp_table->usSoftwareShutdownTemp >
+	     range->hotspot_crit_max / PP_TEMPERATURE_UNITS_PER_CENTIGRADES)) {
+		if (high > tdp_table->usSoftwareShutdownTemp)
+			high = tdp_table->usSoftwareShutdownTemp;
+	}
 
 	if (low > high)
 		return -EINVAL;
drivers/gpu/drm/amd/powerplay/smumgr/ci_smumgr.c +2 -0
index ad54f4500af1..63016c14b942 100644
@@ -37,6 +37,7 @@
 #include "cgs_common.h"
 #include "atombios.h"
 #include "pppcielanes.h"
+#include "smu7_smumgr.h"
 
 #include "smu/smu_7_0_1_d.h"
 #include "smu/smu_7_0_1_sh_mask.h"
@@ -2948,6 +2949,7 @@ const struct pp_smumgr_func ci_smu_funcs = {
 	.request_smu_load_specific_fw = NULL,
 	.send_msg_to_smc = ci_send_msg_to_smc,
 	.send_msg_to_smc_with_parameter = ci_send_msg_to_smc_with_parameter,
+	.get_argument = smu7_get_argument,
 	.download_pptable_settings = NULL,
 	.upload_pptable_settings = NULL,
 	.get_offsetof = ci_get_offsetof,
drivers/gpu/drm/i915/display/intel_hdcp.c +20 -6
index 2cbc4619b4ce..525658fd201f 100644
@@ -336,8 +336,10 @@ int intel_hdcp_validate_v_prime(struct intel_connector *connector,
 
 		/* Fill up the empty slots in sha_text and write it out */
 		sha_empty = sizeof(sha_text) - sha_leftovers;
-		for (j = 0; j < sha_empty; j++)
-			sha_text |= ksv[j] << ((sizeof(sha_text) - j - 1) * 8);
+		for (j = 0; j < sha_empty; j++) {
+			u8 off = ((sizeof(sha_text) - j - 1 - sha_leftovers) * 8);
+			sha_text |= ksv[j] << off;
+		}
 
 		ret = intel_write_sha_text(dev_priv, sha_text);
 		if (ret < 0)
@@ -435,7 +437,7 @@ int intel_hdcp_validate_v_prime(struct intel_connector *connector,
 		/* Write 32 bits of text */
 		intel_de_write(dev_priv, HDCP_REP_CTL,
 			       rep_ctl | HDCP_SHA1_TEXT_32);
-		sha_text |= bstatus[0] << 24 | bstatus[1] << 16;
+		sha_text |= bstatus[0] << 8 | bstatus[1];
 		ret = intel_write_sha_text(dev_priv, sha_text);
 		if (ret < 0)
 			return ret;
@@ -450,17 +452,29 @@ int intel_hdcp_validate_v_prime(struct intel_connector *connector,
 				return ret;
 			sha_idx += sizeof(sha_text);
 		}
+
+		/*
+		 * Terminate the SHA-1 stream by hand. For the other leftover
+		 * cases this is appended by the hardware.
+		 */
+		intel_de_write(dev_priv, HDCP_REP_CTL,
+			       rep_ctl | HDCP_SHA1_TEXT_32);
+		sha_text = DRM_HDCP_SHA1_TERMINATOR << 24;
+		ret = intel_write_sha_text(dev_priv, sha_text);
+		if (ret < 0)
+			return ret;
+		sha_idx += sizeof(sha_text);
 	} else if (sha_leftovers == 3) {
-		/* Write 32 bits of text */
+		/* Write 32 bits of text (filled from LSB) */
 		intel_de_write(dev_priv, HDCP_REP_CTL,
 			       rep_ctl | HDCP_SHA1_TEXT_32);
-		sha_text |= bstatus[0] << 24;
+		sha_text |= bstatus[0];
 		ret = intel_write_sha_text(dev_priv, sha_text);
 		if (ret < 0)
 			return ret;
 		sha_idx += sizeof(sha_text);
 
-		/* Write 8 bits of text, 24 bits of M0 */
+		/* Write 8 bits of text (filled from LSB), 24 bits of M0 */
 		intel_de_write(dev_priv, HDCP_REP_CTL,
 			       rep_ctl | HDCP_SHA1_TEXT_8);
 		ret = intel_write_sha_text(dev_priv, bstatus[1]);
drivers/gpu/drm/msm/adreno/a6xx_gmu.c +11 -1
index 1d330204c465..2dd1cf1ffbe2 100644
@@ -207,6 +207,16 @@ static int a6xx_gmu_start(struct a6xx_gmu *gmu)
 {
 	int ret;
 	u32 val;
+	u32 mask, reset_val;
+
+	val = gmu_read(gmu, REG_A6XX_GMU_CM3_DTCM_START + 0xff8);
+	if (val <= 0x20010004) {
+		mask = 0xffffffff;
+		reset_val = 0xbabeface;
+	} else {
+		mask = 0x1ff;
+		reset_val = 0x100;
+	}
 
 	gmu_write(gmu, REG_A6XX_GMU_CM3_SYSRESET, 1);
 
@@ -218,7 +228,7 @@ static int a6xx_gmu_start(struct a6xx_gmu *gmu)
 	gmu_write(gmu, REG_A6XX_GMU_CM3_SYSRESET, 0);
 
 	ret = gmu_poll_timeout(gmu, REG_A6XX_GMU_CM3_FW_INIT_RESULT, val,
-		val == 0xbabeface, 100, 10000);
+		(val & mask) == reset_val, 100, 10000);
 
 	if (ret)
 		DRM_DEV_ERROR(gmu->dev, "GMU firmware initialization timed out\n");
drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c +1 -1
index 969d95aa873c..1026e1e5bec1 100644
@@ -827,7 +827,7 @@ static void dpu_crtc_enable(struct drm_crtc *crtc,
 {
 	struct dpu_crtc *dpu_crtc;
 	struct drm_encoder *encoder;
-	bool request_bandwidth;
+	bool request_bandwidth = false;
 
 	if (!crtc) {
 		DPU_ERROR("invalid crtc\n");
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +11 -9
index 0946a86b37b2..c0cd936314e6 100644
@@ -586,7 +586,10 @@ static int dpu_encoder_virt_atomic_check(
 	dpu_kms = to_dpu_kms(priv->kms);
 	mode = &crtc_state->mode;
 	adj_mode = &crtc_state->adjusted_mode;
-	global_state = dpu_kms_get_existing_global_state(dpu_kms);
+	global_state = dpu_kms_get_global_state(crtc_state->state);
+	if (IS_ERR(global_state))
+		return PTR_ERR(global_state);
+
 	trace_dpu_enc_atomic_check(DRMID(drm_enc));
 
 	/*
@@ -621,12 +624,15 @@ static int dpu_encoder_virt_atomic_check(
 	/* Reserve dynamic resources now. */
 	if (!ret) {
 		/*
-		 * Avoid reserving resources when mode set is pending. Topology
-		 * info may not be available to complete reservation.
+		 * Release and Allocate resources on every modeset
+		 * Dont allocate when active is false.
 		 */
 		if (drm_atomic_crtc_needs_modeset(crtc_state)) {
-			ret = dpu_rm_reserve(&dpu_kms->rm, global_state,
-					drm_enc, crtc_state, topology);
+			dpu_rm_release(global_state, drm_enc);
+
+			if (!crtc_state->active_changed || crtc_state->active)
+				ret = dpu_rm_reserve(&dpu_kms->rm, global_state,
+						drm_enc, crtc_state, topology);
 		}
 	}
 
@@ -1175,7 +1181,6 @@ static void dpu_encoder_virt_disable(struct drm_encoder *drm_enc)
 	struct dpu_encoder_virt *dpu_enc = NULL;
 	struct msm_drm_private *priv;
 	struct dpu_kms *dpu_kms;
-	struct dpu_global_state *global_state;
 	int i = 0;
 
 	if (!drm_enc) {
@@ -1194,7 +1199,6 @@ static void dpu_encoder_virt_disable(struct drm_encoder *drm_enc)
 
 	priv = drm_enc->dev->dev_private;
 	dpu_kms = to_dpu_kms(priv->kms);
-	global_state = dpu_kms_get_existing_global_state(dpu_kms);
 
 	trace_dpu_enc_disable(DRMID(drm_enc));
 
@@ -1224,8 +1228,6 @@ static void dpu_encoder_virt_disable(struct drm_encoder *drm_enc)
 
 	DPU_DEBUG_ENC(dpu_enc, "encoder disabled\n");
 
-	dpu_rm_release(global_state, drm_enc);
-
 	mutex_unlock(&dpu_enc->enc_lock);
 }
 
drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c +2 -2
index 3b9c33e694bf..994d23bad387 100644
@@ -866,9 +866,9 @@ static int dpu_plane_atomic_check(struct drm_plane *plane,
 		crtc_state = drm_atomic_get_new_crtc_state(state->state,
 							   state->crtc);
 
-	min_scale = FRAC_16_16(1, pdpu->pipe_sblk->maxdwnscale);
+	min_scale = FRAC_16_16(1, pdpu->pipe_sblk->maxupscale);
 	ret = drm_atomic_helper_check_plane_state(state, crtc_state, min_scale,
-					  pdpu->pipe_sblk->maxupscale << 16,
+					  pdpu->pipe_sblk->maxdwnscale << 16,
 					  true, true);
 	if (ret) {
 		DPU_DEBUG_PLANE(pdpu, "Check plane state failed (%d)\n", ret);
drivers/gpu/drm/msm/msm_atomic.c +36 -0
index 5ccfad794c6a..561bfa48841c 100644
@@ -27,6 +27,34 @@ int msm_atomic_prepare_fb(struct drm_plane *plane,
 	return msm_framebuffer_prepare(new_state->fb, kms->aspace);
 }
 
+/*
+ * Helpers to control vblanks while we flush.. basically just to ensure
+ * that vblank accounting is switched on, so we get valid seqn/timestamp
+ * on pageflip events (if requested)
+ */
+
+static void vblank_get(struct msm_kms *kms, unsigned crtc_mask)
+{
+	struct drm_crtc *crtc;
+
+	for_each_crtc_mask(kms->dev, crtc, crtc_mask) {
+		if (!crtc->state->active)
+			continue;
+		drm_crtc_vblank_get(crtc);
+	}
+}
+
+static void vblank_put(struct msm_kms *kms, unsigned crtc_mask)
+{
+	struct drm_crtc *crtc;
+
+	for_each_crtc_mask(kms->dev, crtc, crtc_mask) {
+		if (!crtc->state->active)
+			continue;
+		drm_crtc_vblank_put(crtc);
+	}
+}
+
 static void msm_atomic_async_commit(struct msm_kms *kms, int crtc_idx)
 {
 	unsigned crtc_mask = BIT(crtc_idx);
@@ -44,6 +72,8 @@ static void msm_atomic_async_commit(struct msm_kms *kms, int crtc_idx)
 
 	kms->funcs->enable_commit(kms);
 
+	vblank_get(kms, crtc_mask);
+
 	/*
 	 * Flush hardware updates:
 	 */
@@ -58,6 +88,8 @@ static void msm_atomic_async_commit(struct msm_kms *kms, int crtc_idx)
 	kms->funcs->wait_flush(kms, crtc_mask);
 	trace_msm_atomic_wait_flush_finish(crtc_mask);
 
+	vblank_put(kms, crtc_mask);
+
 	mutex_lock(&kms->commit_lock);
 	kms->funcs->complete_commit(kms, crtc_mask);
 	mutex_unlock(&kms->commit_lock);
@@ -221,6 +253,8 @@ void msm_atomic_commit_tail(struct drm_atomic_state *state)
 	 */
 	kms->pending_crtc_mask &= ~crtc_mask;
 
+	vblank_get(kms, crtc_mask);
+
 	/*
 	 * Flush hardware updates:
 	 */
@@ -235,6 +269,8 @@ void msm_atomic_commit_tail(struct drm_atomic_state *state)
 	kms->funcs->wait_flush(kms, crtc_mask);
 	trace_msm_atomic_wait_flush_finish(crtc_mask);
 
+	vblank_put(kms, crtc_mask);
+
 	mutex_lock(&kms->commit_lock);
 	kms->funcs->complete_commit(kms, crtc_mask);
 	mutex_unlock(&kms->commit_lock);
drivers/gpu/drm/msm/msm_drv.c +8 -0
index f6ce40bf3699..b4d61af7a104 100644
@@ -1328,6 +1328,13 @@ static int msm_pdev_remove(struct platform_device *pdev)
 	return 0;
 }
 
+static void msm_pdev_shutdown(struct platform_device *pdev)
+{
+	struct drm_device *drm = platform_get_drvdata(pdev);
+
+	drm_atomic_helper_shutdown(drm);
+}
+
 static const struct of_device_id dt_match[] = {
 	{ .compatible = "qcom,mdp4", .data = (void *)KMS_MDP4 },
 	{ .compatible = "qcom,mdss", .data = (void *)KMS_MDP5 },
@@ -1340,6 +1347,7 @@ MODULE_DEVICE_TABLE(of, dt_match);
 static struct platform_driver msm_platform_driver = {
 	.probe      = msm_pdev_probe,
 	.remove     = msm_pdev_remove,
+	.shutdown   = msm_pdev_shutdown,
 	.driver     = {
 		.name   = "msm",
 		.of_match_table = dt_match,
drivers/gpu/drm/omapdrm/omap_crtc.c +2 -1
index 6d40914675da..328a4a74f534 100644
@@ -451,11 +451,12 @@ static void omap_crtc_atomic_enable(struct drm_crtc *crtc,
 	if (omap_state->manually_updated)
 		return;
 
-	spin_lock_irq(&crtc->dev->event_lock);
 	drm_crtc_vblank_on(crtc);
+
 	ret = drm_crtc_vblank_get(crtc);
 	WARN_ON(ret != 0);
 
+	spin_lock_irq(&crtc->dev->event_lock);
 	omap_crtc_arm_event(crtc);
 	spin_unlock_irq(&crtc->dev->event_lock);
 }
drivers/hid/hid-ids.h +3 -0
index 7cfa9785bfbb..6ea3619842d8 100644
@@ -727,6 +727,9 @@
 #define USB_DEVICE_ID_LENOVO_TPPRODOCK	0x6067
 #define USB_DEVICE_ID_LENOVO_X1_COVER	0x6085
 #define USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_608D	0x608d
+#define USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_6019	0x6019
+#define USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_602E	0x602e
+#define USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_6093	0x6093
 
 #define USB_VENDOR_ID_LG		0x1fd2
 #define USB_DEVICE_ID_LG_MULTITOUCH	0x0064
drivers/hid/hid-quirks.c +3 -0
index c242150d35a3..a65aef6a322f 100644
@@ -105,6 +105,9 @@ static const struct hid_device_id hid_quirks[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M406XE), HID_QUIRK_MULTI_INPUT },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE_ID2), HID_QUIRK_ALWAYS_POLL },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_608D), HID_QUIRK_ALWAYS_POLL },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_6019), HID_QUIRK_ALWAYS_POLL },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_602E), HID_QUIRK_ALWAYS_POLL },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_6093), HID_QUIRK_ALWAYS_POLL },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C007), HID_QUIRK_ALWAYS_POLL },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C077), HID_QUIRK_ALWAYS_POLL },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_KEYBOARD_G710_PLUS), HID_QUIRK_NOGET },
drivers/hv/hv_util.c +51 -14

96 lines not on this page · raw message

drivers/hwmon/applesmc.c +16 -15
index 316618409315..a18887990f4a 100644
@@ -753,15 +753,18 @@ static ssize_t applesmc_light_show(struct device *dev,
 	}
 
 	ret = applesmc_read_key(LIGHT_SENSOR_LEFT_KEY, buffer, data_length);
+	if (ret)
+		goto out;
 	/* newer macbooks report a single 10-bit bigendian value */
 	if (data_length == 10) {
 		left = be16_to_cpu(*(__be16 *)(buffer + 6)) >> 2;
 		goto out;
 	}
 	left = buffer[2];
+
+	ret = applesmc_read_key(LIGHT_SENSOR_RIGHT_KEY, buffer, data_length);
 	if (ret)
 		goto out;
-	ret = applesmc_read_key(LIGHT_SENSOR_RIGHT_KEY, buffer, data_length);
 	right = buffer[2];
 
 out:
@@ -810,12 +813,11 @@ static ssize_t applesmc_show_fan_speed(struct device *dev,
 		  to_index(attr));
 
 	ret = applesmc_read_key(newkey, buffer, 2);
-	speed = ((buffer[0] << 8 | buffer[1]) >> 2);
-
 	if (ret)
 		return ret;
-	else
-		return snprintf(sysfsbuf, PAGE_SIZE, "%u\n", speed);
+
+	speed = ((buffer[0] << 8 | buffer[1]) >> 2);
+	return snprintf(sysfsbuf, PAGE_SIZE, "%u\n", speed);
 }
 
 static ssize_t applesmc_store_fan_speed(struct device *dev,
@@ -851,12 +853,11 @@ static ssize_t applesmc_show_fan_manual(struct device *dev,
 	u8 buffer[2];
 
 	ret = applesmc_read_key(FANS_MANUAL, buffer, 2);
-	manual = ((buffer[0] << 8 | buffer[1]) >> to_index(attr)) & 0x01;
-
 	if (ret)
 		return ret;
-	else
-		return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", manual);
+
+	manual = ((buffer[0] << 8 | buffer[1]) >> to_index(attr)) & 0x01;
+	return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", manual);
 }
 
 static ssize_t applesmc_store_fan_manual(struct device *dev,
@@ -872,10 +873,11 @@ static ssize_t applesmc_store_fan_manual(struct device *dev,
 		return -EINVAL;
 
 	ret = applesmc_read_key(FANS_MANUAL, buffer, 2);
-	val = (buffer[0] << 8 | buffer[1]);
 	if (ret)
 		goto out;
 
+	val = (buffer[0] << 8 | buffer[1]);
+
 	if (input)
 		val = val | (0x01 << to_index(attr));
 	else
@@ -951,13 +953,12 @@ static ssize_t applesmc_key_count_show(struct device *dev,
 	u32 count;
 
 	ret = applesmc_read_key(KEY_COUNT_KEY, buffer, 4);
-	count = ((u32)buffer[0]<<24) + ((u32)buffer[1]<<16) +
-						((u32)buffer[2]<<8) + buffer[3];
-
 	if (ret)
 		return ret;
-	else
-		return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", count);
+
+	count = ((u32)buffer[0]<<24) + ((u32)buffer[1]<<16) +
+						((u32)buffer[2]<<8) + buffer[3];
+	return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", count);
 }
 
 static ssize_t applesmc_key_at_index_read_show(struct device *dev,
drivers/hwmon/pmbus/isl68137.c +6 -1
index 0c622711ef7e..58aa95a3c010 100644
@@ -67,6 +67,7 @@ enum variants {
 	raa_dmpvr1_2rail,
 	raa_dmpvr2_1rail,
 	raa_dmpvr2_2rail,
+	raa_dmpvr2_2rail_nontc,
 	raa_dmpvr2_3rail,
 	raa_dmpvr2_hv,
 };
@@ -241,6 +242,10 @@ static int isl68137_probe(struct i2c_client *client,
 		info->pages = 1;
 		info->read_word_data = raa_dmpvr2_read_word_data;
 		break;
+	case raa_dmpvr2_2rail_nontc:
+		info->func[0] &= ~PMBUS_HAVE_TEMP;
+		info->func[1] &= ~PMBUS_HAVE_TEMP;
+		fallthrough;
 	case raa_dmpvr2_2rail:
 		info->pages = 2;
 		info->read_word_data = raa_dmpvr2_read_word_data;
@@ -304,7 +309,7 @@ static const struct i2c_device_id raa_dmpvr_id[] = {
 	{"raa228000", raa_dmpvr2_hv},
 	{"raa228004", raa_dmpvr2_hv},
 	{"raa228006", raa_dmpvr2_hv},
-	{"raa228228", raa_dmpvr2_2rail},
+	{"raa228228", raa_dmpvr2_2rail_nontc},
 	{"raa229001", raa_dmpvr2_2rail},
 	{"raa229004", raa_dmpvr2_2rail},
 	{}
drivers/i2c/busses/i2c-bcm-iproc.c +2 -2
index 688e92818821..d8295b1c379d 100644
@@ -720,7 +720,7 @@ static int bcm_iproc_i2c_xfer_internal(struct bcm_iproc_i2c_dev *iproc_i2c,
 
 			/* mark the last byte */
 			if (!process_call && (i == msg->len - 1))
-				val |= 1 << M_TX_WR_STATUS_SHIFT;
+				val |= BIT(M_TX_WR_STATUS_SHIFT);
 
 			iproc_i2c_wr_reg(iproc_i2c, M_TX_OFFSET, val);
 		}
@@ -738,7 +738,7 @@ static int bcm_iproc_i2c_xfer_internal(struct bcm_iproc_i2c_dev *iproc_i2c,
 		 */
 		addr = i2c_8bit_addr_from_msg(msg);
 		/* mark it the last byte out */
-		val = addr | (1 << M_TX_WR_STATUS_SHIFT);
+		val = addr | BIT(M_TX_WR_STATUS_SHIFT);
 		iproc_i2c_wr_reg(iproc_i2c, M_TX_OFFSET, val);
 	}
 
drivers/iommu/Kconfig +1 -1
index b0f308cb7f7c..201b2718f075 100644
@@ -143,7 +143,7 @@ config AMD_IOMMU
 	select IOMMU_API
 	select IOMMU_IOVA
 	select IOMMU_DMA
-	depends on X86_64 && PCI && ACPI
+	depends on X86_64 && PCI && ACPI && HAVE_CMPXCHG_DOUBLE
 	help
 	  With this option you can enable support for AMD IOMMU hardware in
 	  your system. An IOMMU is a hardware component which provides
drivers/iommu/amd/init.c +19 -2
index 6ebd4825e320..bf45f8e2c7ed 100644
@@ -1518,7 +1518,14 @@ static int __init init_iommu_one(struct amd_iommu *iommu, struct ivhd_header *h)
 			iommu->mmio_phys_end = MMIO_REG_END_OFFSET;
 		else
 			iommu->mmio_phys_end = MMIO_CNTR_CONF_OFFSET;
-		if (((h->efr_attr & (0x1 << IOMMU_FEAT_GASUP_SHIFT)) == 0))
+
+		/*
+		 * Note: GA (128-bit IRTE) mode requires cmpxchg16b supports.
+		 * GAM also requires GA mode. Therefore, we need to
+		 * check cmpxchg16b support before enabling it.
+		 */
+		if (!boot_cpu_has(X86_FEATURE_CX16) ||
+		    ((h->efr_attr & (0x1 << IOMMU_FEAT_GASUP_SHIFT)) == 0))
 			amd_iommu_guest_ir = AMD_IOMMU_GUEST_IR_LEGACY;
 		break;
 	case 0x11:
@@ -1527,8 +1534,18 @@ static int __init init_iommu_one(struct amd_iommu *iommu, struct ivhd_header *h)
 			iommu->mmio_phys_end = MMIO_REG_END_OFFSET;
 		else
 			iommu->mmio_phys_end = MMIO_CNTR_CONF_OFFSET;
-		if (((h->efr_reg & (0x1 << IOMMU_EFR_GASUP_SHIFT)) == 0))
+
+		/*
+		 * Note: GA (128-bit IRTE) mode requires cmpxchg16b supports.
+		 * XT, GAM also requires GA mode. Therefore, we need to
+		 * check cmpxchg16b support before enabling them.
+		 */
+		if (!boot_cpu_has(X86_FEATURE_CX16) ||
+		    ((h->efr_reg & (0x1 << IOMMU_EFR_GASUP_SHIFT)) == 0)) {
 			amd_iommu_guest_ir = AMD_IOMMU_GUEST_IR_LEGACY;
+			break;
+		}
+
 		/*
 		 * Note: Since iommu_update_intcapxt() leverages
 		 * the IOMMU MMIO access to MSI capability block registers
drivers/iommu/amd/iommu.c +15 -4
index 2f22326ee4df..200ee948f6ec 100644
@@ -3283,6 +3283,7 @@ static int alloc_irq_index(u16 devid, int count, bool align,
 static int modify_irte_ga(u16 devid, int index, struct irte_ga *irte,
 			  struct amd_ir_data *data)
 {
+	bool ret;
 	struct irq_remap_table *table;
 	struct amd_iommu *iommu;
 	unsigned long flags;
@@ -3300,10 +3301,18 @@ static int modify_irte_ga(u16 devid, int index, struct irte_ga *irte,
 
 	entry = (struct irte_ga *)table->table;
 	entry = &entry[index];
-	entry->lo.fields_remap.valid = 0;
-	entry->hi.val = irte->hi.val;
-	entry->lo.val = irte->lo.val;
-	entry->lo.fields_remap.valid = 1;
+
+	ret = cmpxchg_double(&entry->lo.val, &entry->hi.val,
+			     entry->lo.val, entry->hi.val,
+			     irte->lo.val, irte->hi.val);
+	/*
+	 * We use cmpxchg16 to atomically update the 128-bit IRTE,
+	 * and it cannot be updated by the hardware or other processors
+	 * behind us, so the return value of cmpxchg16 should be the
+	 * same as the old value.
+	 */
+	WARN_ON(!ret);
+
 	if (data)
 		data->ref = entry;
 
@@ -3841,6 +3850,7 @@ int amd_iommu_deactivate_guest_mode(void *data)
 	struct amd_ir_data *ir_data = (struct amd_ir_data *)data;
 	struct irte_ga *entry = (struct irte_ga *) ir_data->entry;
 	struct irq_cfg *cfg = ir_data->cfg;
+	u64 valid = entry->lo.fields_remap.valid;
 
 	if (!AMD_IOMMU_GUEST_IR_VAPIC(amd_iommu_guest_ir) ||
 	    !entry || !entry->lo.fields_vapic.guest_mode)
@@ -3849,6 +3859,7 @@ int amd_iommu_deactivate_guest_mode(void *data)
 	entry->lo.val = 0;
 	entry->hi.val = 0;
 
+	entry->lo.fields_remap.valid       = valid;
 	entry->lo.fields_remap.dm          = apic->irq_dest_mode;
 	entry->lo.fields_remap.int_type    = apic->irq_delivery_mode;
 	entry->hi.fields.vector            = cfg->vector;
drivers/iommu/intel/iommu.c +7 -7
index 04e82f175601..fbe0b0cc56ed 100644
@@ -123,29 +123,29 @@ static inline unsigned int level_to_offset_bits(int level)
 	return (level - 1) * LEVEL_STRIDE;
 }
 
-static inline int pfn_level_offset(unsigned long pfn, int level)
+static inline int pfn_level_offset(u64 pfn, int level)
 {
 	return (pfn >> level_to_offset_bits(level)) & LEVEL_MASK;
 }
 
-static inline unsigned long level_mask(int level)
+static inline u64 level_mask(int level)
 {
-	return -1UL << level_to_offset_bits(level);
+	return -1ULL << level_to_offset_bits(level);
 }
 
-static inline unsigned long level_size(int level)
+static inline u64 level_size(int level)
 {
-	return 1UL << level_to_offset_bits(level);
+	return 1ULL << level_to_offset_bits(level);
 }
 
-static inline unsigned long align_to_level(unsigned long pfn, int level)
+static inline u64 align_to_level(u64 pfn, int level)
 {
 	return (pfn + level_size(level) - 1) & level_mask(level);
 }
 
 static inline unsigned long lvl_to_nr_pages(unsigned int lvl)
 {
-	return  1 << min_t(int, (lvl - 1) * LEVEL_STRIDE, MAX_AGAW_PFN_WIDTH);
+	return 1UL << min_t(int, (lvl - 1) * LEVEL_STRIDE, MAX_AGAW_PFN_WIDTH);
 }
 
 /* VT-d pages must always be _smaller_ than MM pages. Otherwise things
drivers/iommu/intel/irq_remapping.c +8 -2
index aa096b333a99..4828f4fe09ab 100644
@@ -507,12 +507,18 @@ static void iommu_enable_irq_remapping(struct intel_iommu *iommu)
 
 	/* Enable interrupt-remapping */
 	iommu->gcmd |= DMA_GCMD_IRE;
-	iommu->gcmd &= ~DMA_GCMD_CFI;  /* Block compatibility-format MSIs */
 	writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG);
-
 	IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
 		      readl, (sts & DMA_GSTS_IRES), sts);
 
+	/* Block compatibility-format MSIs */
+	if (sts & DMA_GSTS_CFIS) {
+		iommu->gcmd &= ~DMA_GCMD_CFI;
+		writel(iommu->gcmd, iommu->reg + DMAR_GCMD_REG);
+		IOMMU_WAIT_OP(iommu, DMAR_GSTS_REG,
+			      readl, !(sts & DMA_GSTS_CFIS), sts);
+	}
+
 	/*
 	 * With CFI clear in the Global Command register, we should be
 	 * protected from dangerous (i.e. compatibility) interrupts
drivers/irqchip/irq-ingenic.c +1 -1
index 9f3da4260ca6..b61a8901ef72 100644
@@ -125,7 +125,7 @@ static int __init ingenic_intc_of_init(struct device_node *node,
 		irq_reg_writel(gc, IRQ_MSK(32), JZ_REG_INTC_SET_MASK);
 	}
 
-	if (request_irq(parent_irq, intc_cascade, 0,
+	if (request_irq(parent_irq, intc_cascade, IRQF_NO_SUSPEND,
 			"SoC intc cascade interrupt", NULL))
 		pr_err("Failed to register SoC intc cascade interrupt\n");
 	return 0;
drivers/md/dm-cache-metadata.c +6 -2
index 151aa95775be..af6d4f898e4c 100644
@@ -537,12 +537,16 @@ static int __create_persistent_data_objects(struct dm_cache_metadata *cmd,
 					  CACHE_MAX_CONCURRENT_LOCKS);
 	if (IS_ERR(cmd->bm)) {
 		DMERR("could not create block manager");
-		return PTR_ERR(cmd->bm);
+		r = PTR_ERR(cmd->bm);
+		cmd->bm = NULL;
+		return r;
 	}
 
 	r = __open_or_format_metadata(cmd, may_format_device);
-	if (r)
+	if (r) {
 		dm_block_manager_destroy(cmd->bm);
+		cmd->bm = NULL;
+	}
 
 	return r;
 }
drivers/md/dm-crypt.c +2 -2
index 000ddfab5ba0..195ff0974ece 100644
@@ -736,7 +736,7 @@ static int crypt_iv_eboiv_gen(struct crypt_config *cc, u8 *iv,
 	u8 buf[MAX_CIPHER_BLOCKSIZE] __aligned(__alignof__(__le64));
 	struct skcipher_request *req;
 	struct scatterlist src, dst;
-	struct crypto_wait wait;
+	DECLARE_CRYPTO_WAIT(wait);
 	int err;
 
 	req = skcipher_request_alloc(any_tfm(cc), GFP_NOIO);
@@ -933,7 +933,7 @@ static int crypt_iv_elephant(struct crypt_config *cc, struct dm_crypt_request *d
 	u8 *es, *ks, *data, *data2, *data_offset;
 	struct skcipher_request *req;
 	struct scatterlist *sg, *sg2, src, dst;
-	struct crypto_wait wait;
+	DECLARE_CRYPTO_WAIT(wait);
 	int i, r;
 
 	req = skcipher_request_alloc(elephant->tfm, GFP_NOIO);
drivers/md/dm-integrity.c +12 -0
index a83a1de1e03f..8b4289014c00 100644
@@ -2487,6 +2487,7 @@ static void integrity_recalc(struct work_struct *w)
 	range.logical_sector = le64_to_cpu(ic->sb->recalc_sector);
 	if (unlikely(range.logical_sector >= ic->provided_data_sectors)) {
 		if (ic->mode == 'B') {
+			block_bitmap_op(ic, ic->recalc_bitmap, 0, ic->provided_data_sectors, BITMAP_OP_CLEAR);
 			DEBUG_print("queue_delayed_work: bitmap_flush_work\n");
 			queue_delayed_work(ic->commit_wq, &ic->bitmap_flush_work, 0);
 		}
@@ -2564,6 +2565,17 @@ static void integrity_recalc(struct work_struct *w)
 		goto err;
 	}
 
+	if (ic->mode == 'B') {
+		sector_t start, end;
+		start = (range.logical_sector >>
+			 (ic->sb->log2_sectors_per_block + ic->log2_blocks_per_bitmap_bit)) <<
+			(ic->sb->log2_sectors_per_block + ic->log2_blocks_per_bitmap_bit);
+		end = ((range.logical_sector + range.n_sectors) >>
+		       (ic->sb->log2_sectors_per_block + ic->log2_blocks_per_bitmap_bit)) <<
+			(ic->sb->log2_sectors_per_block + ic->log2_blocks_per_bitmap_bit);
+		block_bitmap_op(ic, ic->recalc_bitmap, start, end - start, BITMAP_OP_CLEAR);
+	}
+
 advance_and_next:
 	cond_resched();
 
drivers/md/dm-mpath.c +15 -7
index 78cff42d987e..dc5846971d6c 100644
@@ -1247,17 +1247,25 @@ static void multipath_wait_for_pg_init_completion(struct multipath *m)
 static void flush_multipath_work(struct multipath *m)
 {
 	if (m->hw_handler_name) {
-		set_bit(MPATHF_PG_INIT_DISABLED, &m->flags);
-		smp_mb__after_atomic();
+		unsigned long flags;
+
+		if (!atomic_read(&m->pg_init_in_progress))
+			goto skip;
+
+		spin_lock_irqsave(&m->lock, flags);
+		if (atomic_read(&m->pg_init_in_progress) &&
+		    !test_and_set_bit(MPATHF_PG_INIT_DISABLED, &m->flags)) {
+			spin_unlock_irqrestore(&m->lock, flags);
 
-		if (atomic_read(&m->pg_init_in_progress))
 			flush_workqueue(kmpath_handlerd);
-		multipath_wait_for_pg_init_completion(m);
+			multipath_wait_for_pg_init_completion(m);
 
-		clear_bit(MPATHF_PG_INIT_DISABLED, &m->flags);
-		smp_mb__after_atomic();
+			spin_lock_irqsave(&m->lock, flags);
+			clear_bit(MPATHF_PG_INIT_DISABLED, &m->flags);
+		}
+		spin_unlock_irqrestore(&m->lock, flags);
 	}
-
+skip:
 	if (m->queue_mode == DM_TYPE_BIO_BASED)
 		flush_work(&m->process_queued_bios);
 	flush_work(&m->trigger_event);
drivers/md/dm-thin-metadata.c +7 -3
index 76b6b323bf4b..b461836b6d26 100644
@@ -739,12 +739,16 @@ static int __create_persistent_data_objects(struct dm_pool_metadata *pmd, bool f
 					  THIN_MAX_CONCURRENT_LOCKS);
 	if (IS_ERR(pmd->bm)) {
 		DMERR("could not create block manager");
-		return PTR_ERR(pmd->bm);
+		r = PTR_ERR(pmd->bm);
+		pmd->bm = NULL;
+		return r;
 	}
 
 	r = __open_or_format_metadata(pmd, format_device);
-	if (r)
+	if (r) {
 		dm_block_manager_destroy(pmd->bm);
+		pmd->bm = NULL;
+	}
 
 	return r;
 }
@@ -954,7 +958,7 @@ int dm_pool_metadata_close(struct dm_pool_metadata *pmd)
 	}
 
 	pmd_write_lock_in_core(pmd);
-	if (!dm_bm_is_read_only(pmd->bm) && !pmd->fail_io) {
+	if (!pmd->fail_io && !dm_bm_is_read_only(pmd->bm)) {
 		r = __commit_transaction(pmd);
 		if (r < 0)
 			DMWARN("%s: __commit_transaction() failed, error = %d",
drivers/md/dm-writecache.c +10 -2
index 5358894bb9fd..1533419f1875 100644
@@ -231,6 +231,7 @@ static int persistent_memory_claim(struct dm_writecache *wc)
 	pfn_t pfn;
 	int id;
 	struct page **pages;
+	sector_t offset;
 
 	wc->memory_vmapped = false;
 
@@ -245,9 +246,16 @@ static int persistent_memory_claim(struct dm_writecache *wc)
 		goto err1;
 	}
 
+	offset = get_start_sect(wc->ssd_dev->bdev);
+	if (offset & (PAGE_SIZE / 512 - 1)) {
+		r = -EINVAL;
+		goto err1;
+	}
+	offset >>= PAGE_SHIFT - 9;
+
 	id = dax_read_lock();
 
-	da = dax_direct_access(wc->ssd_dev->dax_dev, 0, p, &wc->memory_map, &pfn);
+	da = dax_direct_access(wc->ssd_dev->dax_dev, offset, p, &wc->memory_map, &pfn);
 	if (da < 0) {
 		wc->memory_map = NULL;
 		r = da;
@@ -269,7 +277,7 @@ static int persistent_memory_claim(struct dm_writecache *wc)
 		i = 0;
 		do {
 			long daa;
-			daa = dax_direct_access(wc->ssd_dev->dax_dev, i, p - i,
+			daa = dax_direct_access(wc->ssd_dev->dax_dev, offset + i, p - i,
 						NULL, &pfn);
 			if (daa <= 0) {
 				r = daa ? daa : -EINVAL;
drivers/md/persistent-data/dm-block-manager.c +8 -6
index 749ec268d957..54c089a50b15 100644
@@ -493,7 +493,7 @@ int dm_bm_write_lock(struct dm_block_manager *bm,
 	void *p;
 	int r;
 
-	if (bm->read_only)
+	if (dm_bm_is_read_only(bm))
 		return -EPERM;
 
 	p = dm_bufio_read(bm->bufio, b, (struct dm_buffer **) result);
@@ -562,7 +562,7 @@ int dm_bm_write_lock_zero(struct dm_block_manager *bm,
 	struct buffer_aux *aux;
 	void *p;
 
-	if (bm->read_only)
+	if (dm_bm_is_read_only(bm))
 		return -EPERM;
 
 	p = dm_bufio_new(bm->bufio, b, (struct dm_buffer **) result);
@@ -602,7 +602,7 @@ EXPORT_SYMBOL_GPL(dm_bm_unlock);
 
 int dm_bm_flush(struct dm_block_manager *bm)
 {
-	if (bm->read_only)
+	if (dm_bm_is_read_only(bm))
 		return -EPERM;
 
 	return dm_bufio_write_dirty_buffers(bm->bufio);
@@ -616,19 +616,21 @@ void dm_bm_prefetch(struct dm_block_manager *bm, dm_block_t b)
 
 bool dm_bm_is_read_only(struct dm_block_manager *bm)
 {
-	return bm->read_only;
+	return (bm ? bm->read_only : true);
 }
 EXPORT_SYMBOL_GPL(dm_bm_is_read_only);
 
 void dm_bm_set_read_only(struct dm_block_manager *bm)
 {
-	bm->read_only = true;
+	if (bm)
+		bm->read_only = true;
 }
 EXPORT_SYMBOL_GPL(dm_bm_set_read_only);
 
 void dm_bm_set_read_write(struct dm_block_manager *bm)
 {
-	bm->read_only = false;
+	if (bm)
+		bm->read_only = false;
 }
 EXPORT_SYMBOL_GPL(dm_bm_set_read_write);
 
drivers/media/i2c/Kconfig +1 -1
index da11036ad804..6b1a6851ccb0 100644
@@ -728,7 +728,7 @@ config VIDEO_HI556
 config VIDEO_IMX214
 	tristate "Sony IMX214 sensor support"
 	depends on GPIOLIB && I2C && VIDEO_V4L2
-	depends on V4L2_FWNODE
+	select V4L2_FWNODE
 	select MEDIA_CONTROLLER
 	select VIDEO_V4L2_SUBDEV_API
 	select REGMAP_I2C
drivers/media/rc/rc-main.c +28 -16

85 lines not on this page · raw message

drivers/media/test-drivers/vicodec/vicodec-core.c +1 -0
index e879290727ef..25c4ca6884dd 100644
@@ -1994,6 +1994,7 @@ static int vicodec_request_validate(struct media_request *req)
 	}
 	ctrl = v4l2_ctrl_request_hdl_ctrl_find(hdl,
 					       vicodec_ctrl_stateless_state.id);
+	v4l2_ctrl_request_hdl_put(hdl);
 	if (!ctrl) {
 		v4l2_info(&ctx->dev->v4l2_dev,
 			  "Missing required codec control\n");
drivers/misc/habanalabs/device.c +6 -1
index 59608d1bac88..baa4e66d4c45 100644
@@ -1027,7 +1027,7 @@ int hl_device_reset(struct hl_device *hdev, bool hard_reset,
 			goto out_err;
 		}
 
-		hl_set_max_power(hdev, hdev->max_power);
+		hl_set_max_power(hdev);
 	} else {
 		rc = hdev->asic_funcs->soft_reset_late_init(hdev);
 		if (rc) {
@@ -1268,6 +1268,11 @@ int hl_device_init(struct hl_device *hdev, struct class *hclass)
 		goto out_disabled;
 	}
 
+	/* Need to call this again because the max power might change,
+	 * depending on card type for certain ASICs
+	 */
+	hl_set_max_power(hdev);
+
 	/*
 	 * hl_hwmon_init() must be called after device_late_init(), because only
 	 * there we get the information from the device about which
drivers/misc/habanalabs/firmware_if.c +9 -0
index d27841cb5bcb..345c228a7971 100644
@@ -13,6 +13,7 @@
 #include <linux/io-64-nonatomic-lo-hi.h>
 #include <linux/slab.h>
 
+#define FW_FILE_MAX_SIZE	0x1400000 /* maximum size of 20MB */
 /**
  * hl_fw_load_fw_to_device() - Load F/W code to device's memory.
  * @hdev: pointer to hl_device structure.
@@ -45,6 +46,14 @@ int hl_fw_load_fw_to_device(struct hl_device *hdev, const char *fw_name,
 
 	dev_dbg(hdev->dev, "%s firmware size == %zu\n", fw_name, fw_size);
 
+	if (fw_size > FW_FILE_MAX_SIZE) {
+		dev_err(hdev->dev,
+			"FW file size %zu exceeds maximum of %u bytes\n",
+			fw_size, FW_FILE_MAX_SIZE);
+		rc = -EINVAL;
+		goto out;
+	}
+
 	fw_data = (const u64 *) fw->data;
 
 	memcpy_toio(dst, fw_data, fw_size);
drivers/misc/habanalabs/gaudi/gaudi.c +66 -24

149 lines not on this page · raw message

drivers/misc/habanalabs/gaudi/gaudiP.h +2 -1
index 41a8d9bff6bf..00f1efeaa883 100644
@@ -41,7 +41,8 @@
 
 #define GAUDI_MAX_CLK_FREQ		2200000000ull	/* 2200 MHz */
 
-#define MAX_POWER_DEFAULT		200000		/* 200W */
+#define MAX_POWER_DEFAULT_PCI		200000		/* 200W */
+#define MAX_POWER_DEFAULT_PMC		350000		/* 350W */
 
 #define GAUDI_CPU_TIMEOUT_USEC		15000000	/* 15s */
 
drivers/misc/habanalabs/gaudi/gaudi_coresight.c +7 -1
index bf0e062d7b87..cc3d03549a6e 100644
@@ -523,7 +523,7 @@ static int gaudi_config_etf(struct hl_device *hdev,
 }
 
 static bool gaudi_etr_validate_address(struct hl_device *hdev, u64 addr,
-					u32 size, bool *is_host)
+					u64 size, bool *is_host)
 {
 	struct asic_fixed_properties *prop = &hdev->asic_prop;
 	struct gaudi_device *gaudi = hdev->asic_specific;
@@ -535,6 +535,12 @@ static bool gaudi_etr_validate_address(struct hl_device *hdev, u64 addr,
 		return false;
 	}
 
+	if (addr > (addr + size)) {
+		dev_err(hdev->dev,
+			"ETR buffer size %llu overflow\n", size);
+		return false;
+	}
+
 	/* PMMU and HPMMU addresses are equal, check only one of them */
 	if ((gaudi->hw_cap_initialized & HW_CAP_MMU) &&
 		hl_mem_area_inside_range(addr, size,
drivers/misc/habanalabs/goya/goya.c +31 -0
index 88460b2138d8..c179085ced7b 100644
@@ -139,6 +139,25 @@ static u16 goya_packet_sizes[MAX_PACKET_ID] = {
 	[PACKET_STOP]		= sizeof(struct packet_stop)
 };
 
+static inline bool validate_packet_id(enum packet_id id)
+{
+	switch (id) {
+	case PACKET_WREG_32:
+	case PACKET_WREG_BULK:
+	case PACKET_MSG_LONG:
+	case PACKET_MSG_SHORT:
+	case PACKET_CP_DMA:
+	case PACKET_MSG_PROT:
+	case PACKET_FENCE:
+	case PACKET_LIN_DMA:
+	case PACKET_NOP:
+	case PACKET_STOP:
+		return true;
+	default:
+		return false;
+	}
+}
+
 static u64 goya_mmu_regs[GOYA_MMU_REGS_NUM] = {
 	mmDMA_QM_0_GLBL_NON_SECURE_PROPS,
 	mmDMA_QM_1_GLBL_NON_SECURE_PROPS,
@@ -3381,6 +3400,12 @@ static int goya_validate_cb(struct hl_device *hdev,
 				PACKET_HEADER_PACKET_ID_MASK) >>
 					PACKET_HEADER_PACKET_ID_SHIFT);
 
+		if (!validate_packet_id(pkt_id)) {
+			dev_err(hdev->dev, "Invalid packet id %u\n", pkt_id);
+			rc = -EINVAL;
+			break;
+		}
+
 		pkt_size = goya_packet_sizes[pkt_id];
 		cb_parsed_length += pkt_size;
 		if (cb_parsed_length > parser->user_cb_size) {
@@ -3616,6 +3641,12 @@ static int goya_patch_cb(struct hl_device *hdev,
 				PACKET_HEADER_PACKET_ID_MASK) >>
 					PACKET_HEADER_PACKET_ID_SHIFT);
 
+		if (!validate_packet_id(pkt_id)) {
+			dev_err(hdev->dev, "Invalid packet id %u\n", pkt_id);
+			rc = -EINVAL;
+			break;
+		}
+
 		pkt_size = goya_packet_sizes[pkt_id];
 		cb_parsed_length += pkt_size;
 		if (cb_parsed_length > parser->user_cb_size) {
drivers/misc/habanalabs/goya/goya_coresight.c +7 -1
index 1258724ea510..c23a9fcb74b5 100644
@@ -358,11 +358,17 @@ static int goya_config_etf(struct hl_device *hdev,
 }
 
 static int goya_etr_validate_address(struct hl_device *hdev, u64 addr,
-		u32 size)
+		u64 size)
 {
 	struct asic_fixed_properties *prop = &hdev->asic_prop;
 	u64 range_start, range_end;
 
+	if (addr > (addr + size)) {
+		dev_err(hdev->dev,
+			"ETR buffer size %llu overflow\n", size);
+		return false;
+	}
+
 	if (hdev->mmu_enable) {
 		range_start = prop->dmmu.start_addr;
 		range_end = prop->dmmu.end_addr;
drivers/misc/habanalabs/habanalabs.h +5 -2
index 194d83352696..1072f300252a 100644
@@ -1408,6 +1408,8 @@ struct hl_device_idle_busy_ts {
  *                     details.
  * @in_reset: is device in reset flow.
  * @curr_pll_profile: current PLL profile.
+ * @card_type: Various ASICs have several card types. This indicates the card
+ *             type of the current device.
  * @cs_active_cnt: number of active command submissions on this device (active
  *                 means already in H/W queues)
  * @major: habanalabs kernel driver major.
@@ -1503,6 +1505,7 @@ struct hl_device {
 	u64				clock_gating_mask;
 	atomic_t			in_reset;
 	enum hl_pll_frequency		curr_pll_profile;
+	enum armcp_card_types		card_type;
 	int				cs_active_cnt;
 	u32				major;
 	u32				high_pll;
@@ -1587,7 +1590,7 @@ struct hl_ioctl_desc {
  *
  * Return: true if the area is inside the valid range, false otherwise.
  */
-static inline bool hl_mem_area_inside_range(u64 address, u32 size,
+static inline bool hl_mem_area_inside_range(u64 address, u64 size,
 				u64 range_start_address, u64 range_end_address)
 {
 	u64 end_address = address + size;
@@ -1792,7 +1795,7 @@ int hl_get_pwm_info(struct hl_device *hdev,
 void hl_set_pwm_info(struct hl_device *hdev, int sensor_index, u32 attr,
 			long value);
 u64 hl_get_max_power(struct hl_device *hdev);
-void hl_set_max_power(struct hl_device *hdev, u64 value);
+void hl_set_max_power(struct hl_device *hdev);
 int hl_set_voltage(struct hl_device *hdev,
 			int sensor_index, u32 attr, long value);
 int hl_set_current(struct hl_device *hdev,
drivers/misc/habanalabs/memory.c +7 -2
index 47da84a17719..e30b1b1877ef 100644
@@ -66,6 +66,11 @@ static int alloc_device_memory(struct hl_ctx *ctx, struct hl_mem_in *args,
 	num_pgs = (args->alloc.mem_size + (page_size - 1)) >> page_shift;
 	total_size = num_pgs << page_shift;
 
+	if (!total_size) {
+		dev_err(hdev->dev, "Cannot allocate 0 bytes\n");
+		return -EINVAL;
+	}
+
 	contiguous = args->flags & HL_MEM_CONTIGUOUS;
 
 	if (contiguous) {
@@ -93,7 +98,7 @@ static int alloc_device_memory(struct hl_ctx *ctx, struct hl_mem_in *args,
 	phys_pg_pack->contiguous = contiguous;
 
 	phys_pg_pack->pages = kvmalloc_array(num_pgs, sizeof(u64), GFP_KERNEL);
-	if (!phys_pg_pack->pages) {
+	if (ZERO_OR_NULL_PTR(phys_pg_pack->pages)) {
 		rc = -ENOMEM;
 		goto pages_arr_err;
 	}
@@ -683,7 +688,7 @@ static int init_phys_pg_pack_from_userptr(struct hl_ctx *ctx,
 
 	phys_pg_pack->pages = kvmalloc_array(total_npages, sizeof(u64),
 						GFP_KERNEL);
-	if (!phys_pg_pack->pages) {
+	if (ZERO_OR_NULL_PTR(phys_pg_pack->pages)) {
 		rc = -ENOMEM;
 		goto page_pack_arr_mem_err;
 	}
drivers/misc/habanalabs/mmu.c +1 -1
index a290d6b49d78..eb582bd4937b 100644
@@ -450,7 +450,7 @@ int hl_mmu_init(struct hl_device *hdev)
 	hdev->mmu_shadow_hop0 = kvmalloc_array(prop->max_asid,
 					prop->mmu_hop_table_size,
 					GFP_KERNEL | __GFP_ZERO);
-	if (!hdev->mmu_shadow_hop0) {
+	if (ZERO_OR_NULL_PTR(hdev->mmu_shadow_hop0)) {
 		rc = -ENOMEM;
 		goto err_pool_add;
 	}
drivers/misc/habanalabs/pci.c +4 -2
index 9f634ef6f5b3..77022c0b4202 100644
@@ -378,15 +378,17 @@ int hl_pci_init(struct hl_device *hdev)
 	rc = hdev->asic_funcs->init_iatu(hdev);
 	if (rc) {
 		dev_err(hdev->dev, "Failed to initialize iATU\n");
-		goto disable_device;
+		goto unmap_pci_bars;
 	}
 
 	rc = hl_pci_set_dma_mask(hdev);
 	if (rc)
-		goto disable_device;
+		goto unmap_pci_bars;
 
 	return 0;
 
+unmap_pci_bars:
+	hl_pci_bars_unmap(hdev);
 disable_device:
 	pci_clear_master(pdev);
 	pci_disable_device(pdev);
drivers/misc/habanalabs/sysfs.c +4 -3
index 70b6b1863c2e..87dadb53ac59 100644
@@ -81,7 +81,7 @@ u64 hl_get_max_power(struct hl_device *hdev)
 	return result;
 }
 
-void hl_set_max_power(struct hl_device *hdev, u64 value)
+void hl_set_max_power(struct hl_device *hdev)
 {
 	struct armcp_packet pkt;
 	int rc;
@@ -90,7 +90,7 @@ void hl_set_max_power(struct hl_device *hdev, u64 value)
 
 	pkt.ctl = cpu_to_le32(ARMCP_PACKET_MAX_POWER_SET <<
 				ARMCP_PKT_CTL_OPCODE_SHIFT);
-	pkt.value = cpu_to_le64(value);
+	pkt.value = cpu_to_le64(hdev->max_power);
 
 	rc = hdev->asic_funcs->send_cpu_message(hdev, (u32 *) &pkt, sizeof(pkt),
 						0, NULL);
@@ -316,7 +316,7 @@ static ssize_t max_power_store(struct device *dev,
 	}
 
 	hdev->max_power = value;
-	hl_set_max_power(hdev, value);
+	hl_set_max_power(hdev);
 
 out:
 	return count;
@@ -419,6 +419,7 @@ int hl_sysfs_init(struct hl_device *hdev)
 		hdev->pm_mng_profile = PM_AUTO;
 	else
 		hdev->pm_mng_profile = PM_MANUAL;
+
 	hdev->max_power = hdev->asic_prop.max_power_default;
 
 	hdev->asic_funcs->add_device_attr(hdev, &hl_dev_clks_attr_group);
drivers/mmc/host/mtk-sd.c +13 -0
index 39e7fc54c438..0319eac3a05d 100644
@@ -22,6 +22,7 @@
 #include <linux/slab.h>
 #include <linux/spinlock.h>
 #include <linux/interrupt.h>
+#include <linux/reset.h>
 
 #include <linux/mmc/card.h>
 #include <linux/mmc/core.h>
@@ -414,6 +415,7 @@ struct msdc_host {
 	struct pinctrl_state *pins_uhs;
 	struct delayed_work req_timeout;
 	int irq;		/* host interrupt */
+	struct reset_control *reset;
 
 	struct clk *src_clk;	/* msdc source clock */
 	struct clk *h_clk;      /* msdc h_clk */
@@ -1516,6 +1518,12 @@ static void msdc_init_hw(struct msdc_host *host)
 	u32 val;
 	u32 tune_reg = host->dev_comp->pad_tune_reg;
 
+	if (host->reset) {
+		reset_control_assert(host->reset);
+		usleep_range(10, 50);
+		reset_control_deassert(host->reset);
+	}
+
 	/* Configure to MMC/SD mode, clock free running */
 	sdr_set_bits(host->base + MSDC_CFG, MSDC_CFG_MODE | MSDC_CFG_CKPDN);
 
@@ -2273,6 +2281,11 @@ static int msdc_drv_probe(struct platform_device *pdev)
 	if (IS_ERR(host->src_clk_cg))
 		host->src_clk_cg = NULL;
 
+	host->reset = devm_reset_control_get_optional_exclusive(&pdev->dev,
+								"hrst");
+	if (IS_ERR(host->reset))
+		return PTR_ERR(host->reset);
+
 	host->irq = platform_get_irq(pdev, 0);
 	if (host->irq < 0) {
 		ret = -EINVAL;
drivers/mmc/host/sdhci-acpi.c +57 -10

101 lines not on this page · raw message

drivers/mmc/host/sdhci-pci-core.c +9 -1
index bb6802448b2f..af413805bbf1 100644
@@ -232,6 +232,14 @@ static void sdhci_pci_dumpregs(struct mmc_host *mmc)
 	sdhci_dumpregs(mmc_priv(mmc));
 }
 
+static void sdhci_cqhci_reset(struct sdhci_host *host, u8 mask)
+{
+	if ((host->mmc->caps2 & MMC_CAP2_CQE) && (mask & SDHCI_RESET_ALL) &&
+	    host->mmc->cqe_private)
+		cqhci_deactivate(host->mmc);
+	sdhci_reset(host, mask);
+}
+
 /*****************************************************************************\
  *                                                                           *
  * Hardware specific quirk handling                                          *
@@ -718,7 +726,7 @@ static const struct sdhci_ops sdhci_intel_glk_ops = {
 	.set_power		= sdhci_intel_set_power,
 	.enable_dma		= sdhci_pci_enable_dma,
 	.set_bus_width		= sdhci_set_bus_width,
-	.reset			= sdhci_reset,
+	.reset			= sdhci_cqhci_reset,
 	.set_uhs_signaling	= sdhci_set_uhs_signaling,
 	.hw_reset		= sdhci_pci_hw_reset,
 	.irq			= sdhci_cqhci_irq,
drivers/mmc/host/sdhci-tegra.c +51 -2

101 lines not on this page · raw message

drivers/net/dsa/mt7530.c +1 -1
index 8dcb8a49ab67..238417db26f9 100644
@@ -1501,7 +1501,7 @@ static void mt7530_phylink_validate(struct dsa_switch *ds, int port,
 		phylink_set(mask, 100baseT_Full);
 
 		if (state->interface != PHY_INTERFACE_MODE_MII) {
-			phylink_set(mask, 1000baseT_Half);
+			/* This switch only supports 1G full-duplex. */
 			phylink_set(mask, 1000baseT_Full);
 			if (port == 5)
 				phylink_set(mask, 1000baseX_Full);
drivers/net/ethernet/arc/emac_mdio.c +1 -0
index 0187dbf3b87d..54cdafdd067d 100644
@@ -153,6 +153,7 @@ int arc_mdio_probe(struct arc_emac_priv *priv)
 	if (IS_ERR(data->reset_gpio)) {
 		error = PTR_ERR(data->reset_gpio);
 		dev_err(priv->dev, "Failed to request gpio: %d\n", error);
+		mdiobus_free(bus);
 		return error;
 	}
 
drivers/net/ethernet/broadcom/bcmsysport.c +4 -2
index b25356e21a1e..e6ccc2122573 100644
@@ -2462,8 +2462,10 @@ static int bcm_sysport_probe(struct platform_device *pdev)
 	priv->tx_rings = devm_kcalloc(&pdev->dev, txq,
 				      sizeof(struct bcm_sysport_tx_ring),
 				      GFP_KERNEL);
-	if (!priv->tx_rings)
-		return -ENOMEM;
+	if (!priv->tx_rings) {
+		ret = -ENOMEM;
+		goto err_free_netdev;
+	}
 
 	priv->is_lite = params->is_lite;
 	priv->num_rx_desc_words = params->num_rx_desc_words;
drivers/net/ethernet/broadcom/bnxt/bnxt.c +22 -14
index 7463a1847ceb..cd5c7a1412c6 100644
@@ -1141,6 +1141,9 @@ static int bnxt_discard_rx(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
 
 static void bnxt_queue_fw_reset_work(struct bnxt *bp, unsigned long delay)
 {
+	if (!(test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)))
+		return;
+
 	if (BNXT_PF(bp))
 		queue_delayed_work(bnxt_pf_wq, &bp->fw_reset_task, delay);
 	else
@@ -1157,10 +1160,12 @@ static void bnxt_queue_sp_work(struct bnxt *bp)
 
 static void bnxt_cancel_sp_work(struct bnxt *bp)
 {
-	if (BNXT_PF(bp))
+	if (BNXT_PF(bp)) {
 		flush_workqueue(bnxt_pf_wq);
-	else
+	} else {
 		cancel_work_sync(&bp->sp_task);
+		cancel_delayed_work_sync(&bp->fw_reset_task);
+	}
 }
 
 static void bnxt_sched_reset(struct bnxt *bp, struct bnxt_rx_ring_info *rxr)
@@ -8987,16 +8992,19 @@ static ssize_t bnxt_show_temp(struct device *dev,
 	struct hwrm_temp_monitor_query_input req = {0};
 	struct hwrm_temp_monitor_query_output *resp;
 	struct bnxt *bp = dev_get_drvdata(dev);
-	u32 temp = 0;
+	u32 len = 0;
 
 	resp = bp->hwrm_cmd_resp_addr;
 	bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_TEMP_MONITOR_QUERY, -1, -1);
 	mutex_lock(&bp->hwrm_cmd_lock);
-	if (!_hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT))
-		temp = resp->temp * 1000; /* display millidegree */
+	if (!_hwrm_send_message_silent(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT))
+		len = sprintf(buf, "%u\n", resp->temp * 1000); /* display millidegree */
 	mutex_unlock(&bp->hwrm_cmd_lock);
 
-	return sprintf(buf, "%u\n", temp);
+	if (len)
+		return len;
+
+	return sprintf(buf, "unknown\n");
 }
 static SENSOR_DEVICE_ATTR(temp1_input, 0444, bnxt_show_temp, NULL, 0);
 
@@ -9178,15 +9186,15 @@ static int __bnxt_open_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init)
 		}
 	}
 
-	bnxt_enable_napi(bp);
-	bnxt_debug_dev_init(bp);
-
 	rc = bnxt_init_nic(bp, irq_re_init);
 	if (rc) {
 		netdev_err(bp->dev, "bnxt_init_nic err: %x\n", rc);
-		goto open_err;
+		goto open_err_irq;
 	}
 
+	bnxt_enable_napi(bp);
+	bnxt_debug_dev_init(bp);
+
 	if (link_re_init) {
 		mutex_lock(&bp->link_lock);
 		rc = bnxt_update_phy_setting(bp);
@@ -9217,10 +9225,6 @@ static int __bnxt_open_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init)
 		bnxt_vf_reps_open(bp);
 	return 0;
 
-open_err:
-	bnxt_debug_dev_exit(bp);
-	bnxt_disable_napi(bp);
-
 open_err_irq:
 	bnxt_del_napi(bp);
 
@@ -11501,6 +11505,7 @@ static void bnxt_remove_one(struct pci_dev *pdev)
 	unregister_netdev(dev);
 	bnxt_dl_unregister(bp);
 	bnxt_shutdown_tc(bp);
+	clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
 	bnxt_cancel_sp_work(bp);
 	bp->sp_event = 0;
 
@@ -12065,6 +12070,7 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 		    (long)pci_resource_start(pdev, 0), dev->dev_addr);
 	pcie_print_link_status(pdev);
 
+	pci_save_state(pdev);
 	return 0;
 
 init_err_cleanup:
@@ -12260,6 +12266,8 @@ static pci_ers_result_t bnxt_io_slot_reset(struct pci_dev *pdev)
 			"Cannot re-enable PCI device after reset.\n");
 	} else {
 		pci_set_master(pdev);
+		pci_restore_state(pdev);
+		pci_save_state(pdev);
 
 		err = bnxt_hwrm_func_reset(bp);
 		if (!err) {
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +6 -10
index b4aa56dc4f9f..bc2c76fa54ca 100644
@@ -494,20 +494,13 @@ static int bnxt_get_num_tpa_ring_stats(struct bnxt *bp)
 static int bnxt_get_num_ring_stats(struct bnxt *bp)
 {
 	int rx, tx, cmn;
-	bool sh = false;
-
-	if (bp->flags & BNXT_FLAG_SHARED_RINGS)
-		sh = true;
 
 	rx = NUM_RING_RX_HW_STATS + NUM_RING_RX_SW_STATS +
 	     bnxt_get_num_tpa_ring_stats(bp);
 	tx = NUM_RING_TX_HW_STATS;
 	cmn = NUM_RING_CMN_SW_STATS;
-	if (sh)
-		return (rx + tx + cmn) * bp->cp_nr_rings;
-	else
-		return rx * bp->rx_nr_rings + tx * bp->tx_nr_rings +
-		       cmn * bp->cp_nr_rings;
+	return rx * bp->rx_nr_rings + tx * bp->tx_nr_rings +
+	       cmn * bp->cp_nr_rings;
 }
 
 static int bnxt_get_num_stats(struct bnxt *bp)
@@ -847,7 +840,7 @@ static void bnxt_get_channels(struct net_device *dev,
 	int max_tx_sch_inputs;
 
 	/* Get the most up-to-date max_tx_sch_inputs. */
-	if (BNXT_NEW_RM(bp))
+	if (netif_running(dev) && BNXT_NEW_RM(bp))
 		bnxt_hwrm_func_resc_qcaps(bp, false);
 	max_tx_sch_inputs = hw_resc->max_tx_sch_inputs;
 
@@ -2270,6 +2263,9 @@ static int bnxt_get_nvram_directory(struct net_device *dev, u32 len, u8 *data)
 	if (rc != 0)
 		return rc;
 
+	if (!dir_entries || !entry_length)
+		return -EIO;
+
 	/* Insert 2 bytes of directory info (count and size of entries) */
 	if (len < 2)
 		return -EINVAL;
drivers/net/ethernet/broadcom/genet/bcmgenet.c +1 -1
index e471b14fc6e9..f0074c873da3 100644
@@ -1364,7 +1364,7 @@ static int bcmgenet_validate_flow(struct net_device *dev,
 	case ETHER_FLOW:
 		eth_mask = &cmd->fs.m_u.ether_spec;
 		/* don't allow mask which isn't valid */
-		if (VALIDATE_MASK(eth_mask->h_source) ||
+		if (VALIDATE_MASK(eth_mask->h_dest) ||
 		    VALIDATE_MASK(eth_mask->h_source) ||
 		    VALIDATE_MASK(eth_mask->h_proto)) {
 			netdev_err(dev, "rxnfc: Unsupported mask\n");
drivers/net/ethernet/broadcom/tg3.c +13 -4
index ebff1fc0d8ce..4515804d1ce4 100644
@@ -7221,8 +7221,8 @@ static inline void tg3_reset_task_schedule(struct tg3 *tp)
 
 static inline void tg3_reset_task_cancel(struct tg3 *tp)
 {
-	cancel_work_sync(&tp->reset_task);
-	tg3_flag_clear(tp, RESET_TASK_PENDING);
+	if (test_and_clear_bit(TG3_FLAG_RESET_TASK_PENDING, tp->tg3_flags))
+		cancel_work_sync(&tp->reset_task);
 	tg3_flag_clear(tp, TX_RECOVERY_PENDING);
 }
 
@@ -11209,18 +11209,27 @@ static void tg3_reset_task(struct work_struct *work)
 
 	tg3_halt(tp, RESET_KIND_SHUTDOWN, 0);
 	err = tg3_init_hw(tp, true);
-	if (err)
+	if (err) {
+		tg3_full_unlock(tp);
+		tp->irq_sync = 0;
+		tg3_napi_enable(tp);
+		/* Clear this flag so that tg3_reset_task_cancel() will not
+		 * call cancel_work_sync() and wait forever.
+		 */
+		tg3_flag_clear(tp, RESET_TASK_PENDING);
+		dev_close(tp->dev);
 		goto out;
+	}
 
 	tg3_netif_start(tp);
 
-out:
 	tg3_full_unlock(tp);
 
 	if (!err)
 		tg3_phy_start(tp);
 
 	tg3_flag_clear(tp, RESET_TASK_PENDING);
+out:
 	rtnl_unlock();
 }
 
drivers/net/ethernet/chelsio/cxgb4/cxgb4_thermal.c +6 -2
index 3de8a5e83b6c..d7fefdbf3e57 100644
@@ -62,6 +62,7 @@ static struct thermal_zone_device_ops cxgb4_thermal_ops = {
 int cxgb4_thermal_init(struct adapter *adap)
 {
 	struct ch_thermal *ch_thermal = &adap->ch_thermal;
+	char ch_tz_name[THERMAL_NAME_LENGTH];
[… more lines in the raw message]

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

drivers/net/ethernet/cortina/gemini.c +17 -17
index 62e271aea4a5..ffec0f3dd957 100644

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

drivers/net/ethernet/hisilicon/hns/hns_enet.c +6 -3
index 23f278e46975..22522f8a5299 100644

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

drivers/net/ethernet/mellanox/mlx4/mr.c +1 -1
index d2986f1f2db0..d7444782bfdd 100644

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

drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c +2 -0
index 2df3deedf9fd..7248d248f604 100644

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

drivers/net/ethernet/renesas/ravb_main.c +55 -55

110 lines not on this page · raw message

drivers/net/ethernet/ti/am65-cpsw-nuss.c +2 -0
index 88832277edd5..c7c9980e0260 100644

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

drivers/net/ethernet/ti/cpsw.c +1 -1
index 9b17bbbe102f..4a65edc5a375 100644

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

drivers/net/ethernet/ti/cpsw_new.c +22 -7
index 1247d35d42ef..8ed78577cded 100644

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

drivers/net/gtp.c +1 -0
index 21640a035d7d..8e47d0112e5d 100644

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

drivers/net/phy/dp83867.c +2 -2
index f3c04981b8da..cd7032628a28 100644

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

drivers/net/usb/asix_common.c +1 -1
index e39f41efda3e..7bc6e8f856fe 100644

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

drivers/nvme/host/core.c +1 -1
index f38548e6d55e..fa0039dcacc6 100644

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

drivers/nvme/target/core.c +6 -0
index 6e2f623e472e..58b035cc67a0 100644

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

drivers/nvme/target/fc.c +2 -2
index 27fd3b5aa621..f98a1ba4dc47 100644

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

drivers/opp/core.c +16 -6
index 8c90f7871772..91dcad982d36 100644

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

drivers/opp/opp.h +1 -1
index e51646ff279e..c3fcd571e446 100644

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

drivers/staging/media/sunxi/cedrus/cedrus.c +6 -1
index bc27f9430eeb..7c6b91f0e780 100644

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

drivers/thermal/qcom/qcom-spmi-temp-alarm.c +2 -2
index bf7bae42c141..6dc879fea9c8 100644

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

drivers/thermal/ti-soc-thermal/omap4-thermal-data.c +12 -11
index 63b02bfb2adf..fdb8a495ab69 100644

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

drivers/thermal/ti-soc-thermal/omap4xxx-bandgap.h +7 -3
index a453ff8eb313..9a3955c3853b 100644

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

drivers/tty/serial/qcom_geni_serial.c +1 -1
index 457c0bf8cbf8..ffdf6da016c2 100644

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

drivers/xen/xenbus/xenbus_client.c +8 -2
index 786fbb7d8be0..907bcbb93afb 100644

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

fs/affs/amigaffs.c +27 -0
index f708c45d5f66..29f11e10a7c7 100644

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

fs/affs/file.c +25 -1
index a85817f54483..ba084b0b214b 100644

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

fs/afs/fs_probe.c +2 -2
index 5d9ef517cf81..e7e98ad63a91 100644

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

fs/afs/vl_probe.c +2 -2
index e3aa013c2177..081b7e5b13f5 100644

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

fs/btrfs/block-group.c +3 -1
index c037ef514b64..8702e8a4d20d 100644

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

fs/btrfs/ctree.c +5 -1
index 82ab6e5a386d..367e3044b620 100644

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

fs/btrfs/extent-tree.c +1 -1
index 5871ef78edba..e9eedc053fc5 100644

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

fs/btrfs/extent_io.c +4 -4
index 8ba8788461ae..df68736bdad1 100644

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

fs/btrfs/extent_io.h +3 -3
index 87f60a48f750..0ab8a20d282b 100644

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

fs/btrfs/free-space-tree.c +4 -0
index 8b1f5c8897b7..6b9faf3b0e96 100644

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

fs/btrfs/ioctl.c +20 -7
index 1448bc43561c..5cbebf32082a 100644

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

fs/btrfs/scrub.c +70 -52

122 lines not on this page · raw message

fs/btrfs/tree-checker.c +1 -1
index 517b44300a05..7b1fee630f97 100644

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

fs/btrfs/volumes.c +2 -1
index 0fecf1e4d8f6..0e50b885d3fd 100644

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

fs/ceph/file.c +1 -0
index d51c3f2fdca0..327649883ec7 100644

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

fs/eventpoll.c +3 -3
index e0decff22ae2..8107e06d7f6f 100644

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

fs/ext2/file.c +4 -2
index 60378ddf1424..96044f5dbc0e 100644

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

fs/gfs2/log.c +31 -0
index a76e55bc28eb..27f467a0f008 100644

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

fs/gfs2/trans.c +1 -0
index a3dfa3aa87ad..d897dd73c599 100644

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

fs/io_uring.c +15 -1
index 4115bfedf15d..38f3ec15ba3b 100644

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

fs/xfs/libxfs/xfs_attr_leaf.c +3 -1
index 2f7e89e4be3e..4eb2ecd31b0d 100644

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

fs/xfs/libxfs/xfs_bmap.c +1 -1
index 667cdd0dfdf4..aa784404964a 100644

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

fs/xfs/xfs_bmap_util.c +1 -1
index afdc7f8e0e70..feb277874a1f 100644

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

fs/xfs/xfs_file.c +10 -2
index 00db81eac80d..4d7385426149 100644

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

include/drm/drm_hdcp.h +3 -0
index c6bab4986a65..fe58dbb46962 100644

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

include/linux/bvec.h +8 -1
index ac0c7299d5b8..dd74503f7e5e 100644

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

include/linux/libata.h +1 -0
index 77ccf040a128..5f550eb27f81 100644

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

include/linux/log2.h +1 -1
index 83a4a3ca3e8a..c619ec6eff4a 100644

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

include/linux/netfilter/nfnetlink.h +1 -2
index 851425c3178f..89016d08f6a2 100644

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

include/net/af_rxrpc.h +1 -1
index 91eacbdcf33d..f6abcc0bbd6e 100644

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

include/net/netfilter/nf_tables.h +2 -0
index 6f0f6fca9ac3..ec2cbfab71f3 100644

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

include/trace/events/rxrpc.h +22 -5
index 059b6e45a028..c33079b986e8 100644

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

include/uapi/linux/netfilter/nf_tables.h +1 -1
index 4565456c0ef4..0b27da1d771b 100644

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

kernel/bpf/syscall.c +1 -1
index 0fd80ac81f70..72e943b3bd65 100644

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

mm/hugetlb.c +37 -12

49 lines not on this page · raw message

mm/khugepaged.c +1 -1
index dd592ea9a4a0..e6fc7c3e7dc9 100644

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

mm/madvise.c +1 -1
index dd1d43cf026d..d4aa5f776543 100644

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

mm/memory.c +23 -13
index a279c1a26af7..03c693ea59bd 100644

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

mm/migrate.c +12 -5
index 40cd7016ae6f..3511f9529ea6 100644

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

mm/rmap.c +7 -2
index 6cce9ef06753..536f2706a6c8 100644

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

mm/slub.c +6 -6
index ef303070d175..76d005862c4d 100644

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

net/batman-adv/bat_v_ogm.c +6 -5
index 18028b9f95f0..65b1280cf2fc 100644

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

net/batman-adv/bridge_loop_avoidance.c +4 -1
index 41cc87f06b14..cfb9e16afe38 100644

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

net/batman-adv/gateway_client.c +4 -2
index a18dcc686dc3..ef3f85b576c4 100644

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

net/bluetooth/hci_core.c +1 -1
index 41fba93d857a..fc28dc201b93 100644

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

net/netfilter/nf_conntrack_proto_udp.c +10 -16
index 760ca2422816..af402f458ee0 100644

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

net/netfilter/nf_tables_api.c +31 -33

64 lines not on this page · raw message

net/netfilter/nfnetlink.c +8 -3
index 5f24edf95830..3a2e64e13b22 100644

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

net/netfilter/nfnetlink_log.c +1 -2
index 0ba020ca38e6..7ca2ca4bba05 100644

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

net/netfilter/nfnetlink_queue.c +1 -1
index 3243a31f6e82..70d086944bcc 100644

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

net/netfilter/nft_flow_offload.c +1 -1
index 3b9b97aa4b32..3a6c84fb2c90 100644

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

net/netfilter/nft_payload.c +3 -1
index a7de3a58f553..67ce866a446d 100644

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

net/packet/af_packet.c +6 -1
index 301f41d4929b..82f780298379 100644

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

net/rxrpc/ar-internal.h +8 -5
index 9a2139ebd67d..ca1fea72c8d2 100644

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

net/rxrpc/call_object.c +1 -0
index 38a46167523f..a40fae013942 100644

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

net/rxrpc/input.c +70 -53

123 lines not on this page · raw message

net/rxrpc/output.c +61 -21

82 lines not on this page · raw message

net/rxrpc/peer_object.c +13 -3
index ca29976bb193..68396d052052 100644

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

net/rxrpc/rtt.c +2 -1
index 928d8b34a3ee..1221b0637a7e 100644

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

net/wireless/reg.c +3 -0
index 0d74a31ef0ab..fc2af2c8b6d5 100644

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

scripts/checkpatch.pl +2 -2
index 4c820607540b..e73e998d582a 100755

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

scripts/kconfig/streamline_config.pl +4 -1
index 19857d18d814..1c78ba49ca99 100755

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

sound/core/oss/mulaw.c +2 -2
index 3788906421a7..fe27034f2846 100644

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

sound/firewire/digi00x/digi00x.c +5 -0
index c84b913a9fe0..ab8408966ec3 100644

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

sound/firewire/tascam/tascam.c +29 -4
index 5dac0d9fc58e..75f2edd8e78f 100644

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

sound/pci/ca0106/ca0106_main.c +2 -1
index 70d775ff967e..c189f70c82cb 100644

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

sound/pci/hda/hda_intel.c +0 -2
index 1a26940a3fd7..4c23b169ac67 100644

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

sound/pci/hda/patch_hdmi.c +1 -0
index f0c6d2907e39..fc22bdc30da3 100644

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

sound/pci/hda/patch_realtek.c +44 -2

46 lines not on this page · raw message

sound/usb/pcm.c +2 -0
index eb3cececda79..28506415c7ad 100644

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

sound/usb/quirks-table.h +53 -7

60 lines not on this page · raw message

sound/usb/quirks.c +1 -0
index ef1c1cf040b4..bf2d521b6768 100644

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

tools/include/uapi/linux/perf_event.h +1 -1
index 7b2d6fc9e6ed..bc8c4816ba38 100644

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

tools/perf/Documentation/perf-stat.txt +3 -0
index c8209467076b..d8299b77f5c8 100644

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

tools/perf/bench/synthesize.c +2 -2
index 8d624aea1c5e..b2924e3181dc 100644

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

tools/perf/builtin-record.c +1 -1
index 23ea934f30b3..07313217db4c 100644

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

tools/perf/builtin-sched.c +5 -1
index 459e4229945e..7b9511e59b43 100644

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

tools/perf/builtin-stat.c +5 -3
index 9be020e0098a..6e2502de755a 100644

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

tools/perf/builtin-top.c +2 -0
index 13889d73f8dd..c665d69c0651 100644

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

tools/perf/pmu-events/jevents.c +1 -1
index fa86c5f997cc..fc9c158bfa13 100644

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

tools/perf/ui/browsers/hists.c +2 -1
index be9c4c0549bc..a07626f07208 100644

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

tools/perf/util/cs-etm.c +8 -1
index c283223fb31f..a2a369e2fbb6 100644

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

tools/perf/util/intel-pt.c +8 -1
index cb3c1e569a2d..9357b5f62c27 100644

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

tools/perf/util/stat.h +1 -0
index f75ae679eb28..d8a9dd786bf4 100644

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

tools/testing/selftests/bpf/test_maps.c +2 -0
index 754cf611723e..0d92ebcb335d 100644

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

The rest of this diff is not shown. View the raw message.

Part of the diff is not shown here. View the raw message.