Linux 5.8.8
Greg Kroah-Hartman
maintainerI'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_onlyYonghong 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
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/mmc/mtk-sd.txt +2 -0
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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)); \ asmvolatile ( \ 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)); \ asmvolatile ( \ 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 255struct dc_stream_update {struct dc_stream_state *stream;
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c +8 -0
@@ -1213,6 +1213,7 @@ static enum dc_status dcn10_validate_global(struct dc *dc, struct dc_state *contbool 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 *contif (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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 *du8 *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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 ];
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/cortina/gemini.c +17 -17
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/hisilicon/hns/hns_enet.c +6 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx4/mr.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/netronome/nfp/flower/tunnel_conf.c +2 -0
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
Lines of this file are not shown. View the raw message.
drivers/staging/media/sunxi/cedrus/cedrus.c +6 -1
Lines of this file are not shown. View the raw message.
drivers/thermal/qcom/qcom-spmi-temp-alarm.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/thermal/ti-soc-thermal/omap4-thermal-data.c +12 -11
Lines of this file are not shown. View the raw message.
drivers/thermal/ti-soc-thermal/omap4xxx-bandgap.h +7 -3
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
include/uapi/linux/netfilter/nf_tables.h +1 -1
Lines of this file are not shown. View the raw message.
mm/hugetlb.c +37 -12
49 lines not on this page · raw message
net/netfilter/nf_conntrack_proto_udp.c +10 -16
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/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
sound/pci/hda/patch_realtek.c +44 -2
46 lines not on this page · raw message
sound/usb/quirks-table.h +53 -7
60 lines not on this page · raw message
tools/testing/selftests/bpf/test_maps.c +2 -0
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.