Linux 5.15.65
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.65 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.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/arm64/silicon-errata.rst | 2 Makefile | 2 arch/arm64/Kconfig | 17 arch/arm64/kernel/cpu_errata.c | 8 arch/s390/hypfs/hypfs_diag.c | 2 arch/s390/hypfs/inode.c | 2 drivers/acpi/thermal.c | 2 drivers/android/binder_alloc.c | 9 drivers/dma-buf/udmabuf.c | 18 drivers/firmware/tegra/bpmp.c | 6 drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c | 3 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 3 drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c | 2 drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.c | 6 drivers/gpu/drm/amd/display/dc/dcn10/dcn10_optc.c | 5 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_mpc.c | 6 drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hubbub.c | 8 drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hubp.c | 2 drivers/gpu/drm/amd/display/modules/freesync/freesync.c | 15 drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 1 drivers/gpu/drm/i915/gt/intel_gt.c | 3 drivers/gpu/drm/vc4/Kconfig | 1 drivers/gpu/drm/vc4/vc4_hdmi.c | 17 drivers/hid/amd-sfh-hid/amd_sfh_pcie.c | 18 drivers/hid/hid-asus.c | 7 drivers/hid/hid-ids.h | 1 drivers/hid/hid-input.c | 2 drivers/hid/hid-steam.c | 10 drivers/hid/hid-thrustmaster.c | 3 drivers/hid/hidraw.c | 3 drivers/hv/hv_balloon.c | 13 drivers/media/usb/pvrusb2/pvrusb2-hdw.c | 1 drivers/mmc/host/mtk-sd.c | 6 drivers/mmc/host/sdhci-of-dwcmshc.c | 88 + drivers/pci/pcie/portdrv_core.c | 9 drivers/video/fbdev/pm2fb.c | 5 fs/btrfs/block-group.c | 47 - fs/btrfs/block-group.h | 4 fs/btrfs/ctree.c | 3 fs/btrfs/ctree.h | 4 fs/btrfs/disk-io.c | 82 - fs/btrfs/disk-io.h | 10 fs/btrfs/extent-tree.c | 48 - fs/btrfs/extent_io.c | 11 fs/btrfs/inode.c | 25 fs/btrfs/locking.c | 91 + fs/btrfs/locking.h | 14 fs/btrfs/relocation.c | 2 fs/btrfs/tree-checker.c | 25 fs/btrfs/tree-log.c | 221 +--- fs/io_uring.c | 746 +++++++--------- fs/ksmbd/mgmt/tree_connect.c | 2 fs/ksmbd/smb2pdu.c | 21 fs/ntfs3/xattr.c | 7 include/drm/drm_bridge.h | 13 include/linux/rmap.h | 7 include/linux/skbuff.h | 8 include/linux/skmsg.h | 3 include/net/sock.h | 68 + include/uapi/linux/btrfs_tree.h | 4 kernel/kprobes.c | 9 kernel/trace/ftrace.c | 10 lib/crypto/Kconfig | 1 mm/hugetlb.c | 2 mm/mmap.c | 12 mm/rmap.c | 29 net/bluetooth/l2cap_core.c | 10 net/bpf/test_run.c | 3 net/core/dev.c | 1 net/core/neighbour.c | 27 net/core/skmsg.c | 4 net/netfilter/Kconfig | 1 net/packet/af_packet.c | 4 scripts/Makefile.modpost | 3 sound/soc/sh/rz-ssi.c | 26 sound/usb/quirks.c | 2 tools/testing/selftests/netfilter/nft_flowtable.sh | 246 ++--- 78 files changed, 1194 insertions(+), 970 deletions(-)
Adam Borowski (1):
ACPI: thermal: drop an always true check
Akihiko Odaki (1):
HID: AMD_SFH: Add a DMI quirk entry for Chromebooks
Alvin Lee (1):
drm/amd/display: For stereo keep "FLIP_ANY_FRAME"
Biju Das (1):
ASoC: sh: rz-ssi: Improve error handling in rz_ssi_probe() error path
Boqun Feng (1):
Drivers: hv: balloon: Support status report for larger page sizes
Charlene Liu (1):
drm/amd/display: avoid doing vm_init multiple time
Chris Wilson (1):
drm/i915/gt: Skip TLB invalidations once wedged
Denis V. Lunev (1):
neigh: fix possible DoS due to net iface start/stop loop
Dongliang Mu (1):
media: pvrusb2: fix memory leak in pvr_probe
Dusica Milinkovic (1):
drm/amdgpu: Increase tlb flush timeout for sriov
Eric Biggers (1):
crypto: lib - remove unneeded selection of XOR_BLOCKS
Evan Quan (1):
drm/amd/pm: add missing ->fini_microcode interface for Sienna Cichlid
Filipe Manana (4):
btrfs: remove root argument from btrfs_unlink_inode()
btrfs: remove no longer needed logic for replaying directory deletes
btrfs: add and use helper for unlinking inode during log replay
btrfs: fix warning during log replay when bumping inode link count
Florian Westphal (1):
testing: selftests: nft_flowtable.sh: use random netns names
Fudong Wang (1):
drm/amd/display: clear optc underflow before turn off odm clock
Geert Uytterhoeven (1):
netfilter: conntrack: NF_CONNTRACK_PROCFS should no longer default to y
Greg Kroah-Hartman (2):
Revert "PCI/portdrv: Don't disable AER reporting in get_port_device_capability()" Linux 5.15.65
Hawkins Jiawei (1):
net: fix refcount bug in sk_psock_get (2)
Ilya Bakoulin (1):
drm/amd/display: Fix pixel clock programming
James Morse (1):
arm64: errata: Add Cortex-A510 to the repeat tlbi list
Jann Horn (2):
mm: Force TLB flush for PFNMAP mappings before unlink_file_vma() mm/rmap: Fix anon_vma->degree ambiguity leading to double-reuse
Jens Axboe (2):
io_uring: remove poll entry from list when canceling all
io_uring: bump poll refs to full 31-bits
Jiapeng Chong (1):
io_uring: Remove unused function req_ref_put
Jing Leng (1):
kbuild: Fix include path in scripts/Makefile.modpost
Josef Bacik (3):
btrfs: move lockdep class helpers to locking.c
btrfs: fix lockdep splat with reloc root extent buffers
btrfs: tree-checker: check for overlapping extent items
Josh Kilmer (1):
HID: asus: ROG NKey: Ignore portion of 0x5a report
Josip Pavic (1):
drm/amd/display: Avoid MPC infinite loop
Juergen Gross (1):
s390/hypfs: avoid error message under KVM
Karthik Alapati (1):
HID: hidraw: fix memory leak in hidraw_release()
Konstantin Komarov (1):
fs/ntfs3: Fix work with fragmented xattr
Kuniyuki Iwashima (1):
kprobes: don't call disarm_kprobe() for disabled kprobes
Lee Jones (1):
HID: steam: Prevent NULL pointer dereference in steam_{recv,send}_report
Leo Ma (1):
drm/amd/display: Fix HDMI VSIF V3 incorrect issue
Letu Ren (1):
fbdev: fb_pm2fb: Avoid potential divide by zero error
Liam Howlett (1):
android: binder: fix lockdep check on clearing vma
Liming Sun (1):
mmc: sdhci-of-dwcmshc: Re-enable support for the BlueField-3 SoC
Luiz Augusto von Dentz (1):
Bluetooth: L2CAP: Fix build errors in some archs
Maxime Ripard (3):
drm/bridge: Add stubs for devm_drm_of_get_bridge when OF is disabled drm/vc4: hdmi: Rework power up
drm/vc4: hdmi: Depends on CONFIG_PM
Miaohe Lin (1):
mm/hugetlb: avoid corrupting page->mapping in hugetlb_mcopy_atomic_pte
Michael Hübner (1):
HID: thrustmaster: Add sparco wheel and fix array length
Namjae Jeon (2):
ksmbd: return STATUS_BAD_NETWORK_NAME error status if share is not configured
ksmbd: don't remove dos attribute xattr on O_TRUNC open
Omar Sandoval (1):
btrfs: fix space cache corruption and potential double allocations
Pavel Begunkov (10):
io_uring: correct fill events helpers types
io_uring: clean cqe filling functions
io_uring: refactor poll update
io_uring: move common poll bits
io_uring: kill poll linking optimisation
io_uring: inline io_poll_complete
io_uring: poll rework
io_uring: fail links when poll fails
io_uring: fix wrong arm_poll error handling
io_uring: fix UAF due to missing POLLFREE handling
Sebastian Reichel (1):
mmc: sdhci-of-dwcmshc: rename rk3568 to rk35xx
Steev Klimaszewski (1):
HID: add Lenovo Yoga C630 battery quirk
Takashi Iwai (1):
ALSA: usb-audio: Add quirk for LH Labs Geek Out HD Audio 1V5
Timo Alho (1):
firmware: tegra: bpmp: Do only aligned access to IPC memory area
Vivek Kasireddy (1):
udmabuf: Set the DMA mask for the udmabuf device (v2)
Wenbin Mei (1):
mmc: mtk-sd: Clear interrupts when cqe off/disable
Yang Jihong (1):
ftrace: Fix NULL pointer dereference in is_ftrace_trampoline when ftrace is dead
Yang Yingliang (1):
net: neigh: don't call kfree_skb() under spin_lock_irqsave()
Yifeng Zhao (1):
mmc: sdhci-of-dwcmshc: add reset call back for rockchip Socs
Zhengchao Shao (2):
bpf: Don't redirect packets with invalid pkt_len net/af_packet: check len when min_header_len equals to 0
Greg Kroah-Hartman
maintainerDocumentation/arm64/silicon-errata.rst +2 -0
@@ -92,6 +92,8 @@ stable kernels. +----------------+-----------------+-----------------+-----------------------------+ | ARM | Cortex-A77 | #1508412 | ARM64_ERRATUM_1508412 | +----------------+-----------------+-----------------+-----------------------------+ +| ARM | Cortex-A510 | #2441009 | ARM64_ERRATUM_2441009 | ++----------------+-----------------+-----------------+-----------------------------+ | ARM | Neoverse-N1 | #1188873,1418040| ARM64_ERRATUM_1418040 | +----------------+-----------------+-----------------+-----------------------------+ | ARM | Neoverse-N1 | #1349291 | N/A |
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 64 +SUBLEVEL = 65 EXTRAVERSION = NAME = Trick or Treat
arch/arm64/Kconfig +17 -0
@@ -666,6 +666,23 @@ config ARM64_ERRATUM_1508412 If unsure, say Y. +config ARM64_ERRATUM_2441009 + bool "Cortex-A510: Completion of affected memory accesses might not be guaranteed by completion of a TLBI" + default y + select ARM64_WORKAROUND_REPEAT_TLBI + help + This option adds a workaround for ARM Cortex-A510 erratum #2441009. + + Under very rare circumstances, affected Cortex-A510 CPUs + may not handle a race between a break-before-make sequence on one + CPU, and another CPU accessing the same page. This could allow a + store to a page that has been unmapped. + + Work around this by adding the affected CPUs to the list that needs + TLB sequences to be done twice. + + If unsure, say Y. + config CAVIUM_ERRATUM_22375 bool "Cavium erratum 22375, 24313" default y
arch/arm64/kernel/cpu_errata.c +7 -1
@@ -213,6 +213,12 @@ static const struct arm64_cpu_capabilities arm64_repeat_tlbi_list[] = {/* Kryo4xx Gold (rcpe to rfpe) => (r0p0 to r3p0) */ ERRATA_MIDR_RANGE(MIDR_QCOM_KRYO_4XX_GOLD, 0xc, 0xe, 0xf, 0xe), }, +#endif +#ifdef CONFIG_ARM64_ERRATUM_2441009 + { +/* Cortex-A510 r0p0 -> r1p1. Fixed in r1p2 */ + ERRATA_MIDR_RANGE(MIDR_CORTEX_A510, 0, 0, 1, 1), + }, #endif {}, };
@@ -429,7 +435,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = {#endif #ifdef CONFIG_ARM64_WORKAROUND_REPEAT_TLBI { - .desc = "Qualcomm erratum 1009, or ARM erratum 1286807", + .desc = "Qualcomm erratum 1009, or ARM erratum 1286807, 2441009", .capability = ARM64_WORKAROUND_REPEAT_TLBI, .type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM, .matches = cpucap_multi_entry_cap_matches,
arch/s390/hypfs/hypfs_diag.c +1 -1
@@ -437,7 +437,7 @@ __init int hypfs_diag_init(void)int rc;if (diag204_probe ()) { -pr_err ("The hardware system does not support hypfs\n" ); +pr_info ("The hardware system does not support hypfs\n" );return -ENODATA ; }
arch/s390/hypfs/inode.c +1 -1
@@ -496,9 +496,9 @@ static int __init hypfs_init(void)hypfs_vm_exit (); fail_hypfs_diag_exit:hypfs_diag_exit (); +pr_err ("Initialization of hypfs failed with rc=%i\n" , rc); fail_dbfs_exit:hypfs_dbfs_exit (); -pr_err ("Initialization of hypfs failed with rc=%i\n" , rc);return rc; }device_initcall (hypfs_init)
drivers/acpi/thermal.c +0 -2
@@ -1098,8 +1098,6 @@ static int acpi_thermal_resume(struct device *dev)return -EINVAL ;for (i =0 ; i <ACPI_THERMAL_MAX_ACTIVE ; i++) { -if (!(&tz->trips.active[i])) -break ;if (!tz->trips.active[i].flags.valid)break ; tz->trips.active[i].flags.enabled =1 ;
drivers/android/binder_alloc.c +8 -1
@@ -315,12 +315,19 @@ static inline void binder_alloc_set_vma(struct binder_alloc *alloc, {unsigned long vm_start =0 ; +/* +* Allow clearing the vma with holding just the read lock to allow +* munmapping downgrade of the write lock before freeing and closing the +* file using binder_alloc_vma_close(). +*/ if (vma) { vm_start = vma->vm_start; alloc->vma_vm_mm = vma->vm_mm; +mmap_assert_write_locked (alloc->vma_vm_mm); + }else { +mmap_assert_locked (alloc->vma_vm_mm); } -mmap_assert_write_locked (alloc->vma_vm_mm); alloc->vma_addr = vm_start; }
drivers/dma-buf/udmabuf.c +17 -1
@@ -368,7 +368,23 @@ static struct miscdevice udmabuf_misc = {static int __init udmabuf_dev_init (void ) { -return misc_register (&udmabuf_misc); +int ret; + + ret =misc_register (&udmabuf_misc); +if (ret <0 ) { +pr_err ("Could not initialize udmabuf device\n" ); +return ret; + } + + ret =dma_coerce_mask_and_coherent (udmabuf_misc.this_device, +DMA_BIT_MASK (64 )); +if (ret <0 ) { +pr_err ("Could not setup DMA mask for udmabuf device\n" ); +misc_deregister (&udmabuf_misc); +return ret; + } + +return 0 ; } static void __exit udmabuf_dev_exit(void)
drivers/firmware/tegra/bpmp.c +3 -3
@@ -201,7 +201,7 @@ static ssize_t __tegra_bpmp_channel_read(struct tegra_bpmp_channel *channel,int err;if (data && size >0 ) -memcpy (data, channel->ib->data, size); +memcpy_fromio (data, channel->ib->data, size); err =tegra_bpmp_ack_response (channel);if (err <0 )
@@ -245,7 +245,7 @@ static ssize_t __tegra_bpmp_channel_write(struct tegra_bpmp_channel *channel, channel->ob->flags = flags;if (data && size >0 ) -memcpy (channel->ob->data, data, size); +memcpy_toio (channel->ob->data, data, size);return tegra_bpmp_post_request (channel); }
@@ -420,7 +420,7 @@ void tegra_bpmp_mrq_return(struct tegra_bpmp_channel *channel, int code, channel->ob->code = code;if (data && size >0 ) -memcpy (channel->ob->data, data, size); +memcpy_toio (channel->ob->data, data, size); err =tegra_bpmp_post_response (channel);if (WARN_ON (err <0 ))
drivers/gpu/drm/amd/amdgpu/amdgpu.h +1 -1
@@ -312,7 +312,7 @@ enum amdgpu_kiq_irq {AMDGPU_CP_KIQ_IRQ_DRIVER0 =0 , AMDGPU_CP_KIQ_IRQ_LAST }; - +#define SRIOV_USEC_TIMEOUT 1200000/* wait 12 * 100ms for SRIOV */ #define MAX_KIQ_REG_WAIT 5000/* in usecs, 5ms */ #define MAX_KIQ_REG_BAILOUT_INTERVAL 5/* in msecs, 5ms */ #define MAX_KIQ_REG_TRY 1000
drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c +2 -1
@@ -414,6 +414,7 @@ static int gmc_v10_0_flush_gpu_tlb_pasid(struct amdgpu_device *adev,uint32_t seq;uint16_t queried_pasid;bool ret; +u32 usec_timeout =amdgpu_sriov_vf (adev) ?SRIOV_USEC_TIMEOUT : adev->usec_timeout;struct amdgpu_ring *ring = &adev->gfx.kiq.ring;struct amdgpu_kiq *kiq = &adev->gfx.kiq;
@@ -432,7 +433,7 @@ static int gmc_v10_0_flush_gpu_tlb_pasid(struct amdgpu_device *adev,amdgpu_ring_commit (ring);spin_unlock (&adev->gfx.kiq.ring_lock); - r =amdgpu_fence_wait_polling (ring, seq, adev->usec_timeout); + r =amdgpu_fence_wait_polling (ring, seq, usec_timeout);if (r <1 ) {dev_err (adev->dev,"wait for kiq fence error: %ld.\n" , r);return -ETIME ;
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c +2 -1
@@ -863,6 +863,7 @@ static int gmc_v9_0_flush_gpu_tlb_pasid(struct amdgpu_device *adev,uint32_t seq;uint16_t queried_pasid;bool ret; +u32 usec_timeout =amdgpu_sriov_vf (adev) ?SRIOV_USEC_TIMEOUT : adev->usec_timeout;struct amdgpu_ring *ring = &adev->gfx.kiq.ring;struct amdgpu_kiq *kiq = &adev->gfx.kiq;
@@ -902,7 +903,7 @@ static int gmc_v9_0_flush_gpu_tlb_pasid(struct amdgpu_device *adev,amdgpu_ring_commit (ring);spin_unlock (&adev->gfx.kiq.ring_lock); - r =amdgpu_fence_wait_polling (ring, seq, adev->usec_timeout); + r =amdgpu_fence_wait_polling (ring, seq, usec_timeout);if (r <1 ) {dev_err (adev->dev,"wait for kiq fence error: %ld.\n" , r);up_read (&adev->reset_sem);
drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c +2 -0
@@ -545,9 +545,11 @@ static void dce112_get_pix_clk_dividers_helper (switch (pix_clk_params->color_depth) {case COLOR_DEPTH_101010 : actual_pixel_clock_100hz = (actual_pixel_clock_100hz *5 ) >>2 ; + actual_pixel_clock_100hz -= actual_pixel_clock_100hz %10 ;break ;case COLOR_DEPTH_121212 : actual_pixel_clock_100hz = (actual_pixel_clock_100hz *6 ) >>2 ; + actual_pixel_clock_100hz -= actual_pixel_clock_100hz %10 ;break ;case COLOR_DEPTH_161616 : actual_pixel_clock_100hz = actual_pixel_clock_100hz *2 ;
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.c +6 -0
@@ -126,6 +126,12 @@ struct mpcc *mpc1_get_mpcc_for_dpp(struct mpc_tree *tree, int dpp_id)while (tmp_mpcc !=NULL ) {if (tmp_mpcc->dpp_id == dpp_id)return tmp_mpcc; + +/* avoid circular linked list */ +ASSERT (tmp_mpcc != tmp_mpcc->mpcc_bot); +if (tmp_mpcc == tmp_mpcc->mpcc_bot) +break ; + tmp_mpcc = tmp_mpcc->mpcc_bot; }return NULL ;
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_optc.c +5 -0
@@ -480,6 +480,11 @@ void optc1_enable_optc_clock(struct timing_generator *optc, bool enable)OTG_CLOCK_ON ,1 , 1, 1000); }else { + +//last chance to clear underflow, otherwise, it will always there due to clock is off. +if (optc->funcs->is_optc_underflow_occurred (optc) == true) + optc->funcs->clear_optc_underflow (optc); +REG_UPDATE_2 (OTG_CLOCK_CONTROL ,OTG_CLOCK_GATE_DIS ,0 ,OTG_CLOCK_EN ,0 );
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_mpc.c +6 -0
@@ -532,6 +532,12 @@ struct mpcc *mpc2_get_mpcc_for_dpp(struct mpc_tree *tree, int dpp_id)while (tmp_mpcc !=NULL ) {if (tmp_mpcc->dpp_id ==0xf || tmp_mpcc->dpp_id == dpp_id)return tmp_mpcc; + +/* avoid circular linked list */ +ASSERT (tmp_mpcc != tmp_mpcc->mpcc_bot); +if (tmp_mpcc == tmp_mpcc->mpcc_bot) +break ; + tmp_mpcc = tmp_mpcc->mpcc_bot; }return NULL ;
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hubbub.c +7 -1
@@ -67,9 +67,15 @@ static uint32_t convert_and_clamp(void dcn21_dchvm_init (struct hubbub *hubbub) {struct dcn20_hubbub *hubbub1 =TO_DCN20_HUBBUB (hubbub); -uint32_t riommu_active; +uint32_t riommu_active, prefetch_done;int i; +REG_GET (DCHVM_RIOMMU_STAT0 ,HOSTVM_PREFETCH_DONE , &prefetch_done); + +if (prefetch_done) { + hubbub->riommu_active = true; +return ; + }//Init DCHVM block REG_UPDATE (DCHVM_CTRL0 ,HOSTVM_INIT_REQ ,1 );
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hubp.c +1 -1
@@ -86,7 +86,7 @@ bool hubp3_program_surface_flip_and_addr( VMID, address->vmid);if (address->type ==PLN_ADDR_TYPE_GRPH_STEREO ) { -REG_UPDATE (DCSURF_FLIP_CONTROL ,SURFACE_FLIP_MODE_FOR_STEREOSYNC ,0x1 ); +REG_UPDATE (DCSURF_FLIP_CONTROL ,SURFACE_FLIP_MODE_FOR_STEREOSYNC ,0 );REG_UPDATE (DCSURF_FLIP_CONTROL ,SURFACE_FLIP_IN_STEREOSYNC ,0x1 ); }else {
drivers/gpu/drm/amd/display/modules/freesync/freesync.c +3 -12
@@ -567,10 +567,6 @@ static void build_vrr_infopacket_data_v1(const struct mod_vrr_params *vrr,* Note: We should never go above the field rate of the mode timing set. */ infopacket->sb[8 ] = (unsigned char )((vrr->max_refresh_in_uhz +500000 ) /1000000 ); - -/* FreeSync HDR */ - infopacket->sb[9 ] =0 ; - infopacket->sb[10 ] =0 ; } static void build_vrr_infopacket_data_v3(const struct mod_vrr_params *vrr,
@@ -638,10 +634,6 @@ static void build_vrr_infopacket_data_v3(const struct mod_vrr_params *vrr,/* PB16 : Reserved bits 7:1, FixedRate bit 0 */ infopacket->sb[16 ] = (vrr->state ==VRR_STATE_ACTIVE_FIXED ) ?1 :0 ; - -//FreeSync HDR - infopacket->sb[9 ] =0 ; - infopacket->sb[10 ] =0 ; } static void build_vrr_infopacket_fs2_data(enum color_transfer_func app_tf,
@@ -726,8 +718,7 @@ static void build_vrr_infopacket_header_v2(enum signal_type signal,/* HB2 = [Bits 7:5 = 0] [Bits 4:0 = Length = 0x09] */ infopacket->hb2 =0x09 ; - *payload_size =0x0A ; - + *payload_size =0x09 ; }else if (dc_is_dp_signal (signal)) {/* HEADER */
@@ -776,9 +767,9 @@ static void build_vrr_infopacket_header_v3(enum signal_type signal, infopacket->hb1 = version;/* HB2 = [Bits 7:5 = 0] [Bits 4:0 = Length] */ - *payload_size =0x10 ; - infopacket->hb2 = *payload_size -1 ;//-1 for checksum + infopacket->hb2 =0x10 ; + *payload_size =0x10 ; }else if (dc_is_dp_signal (signal)) {/* HEADER */
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c +1 -0
@@ -3915,6 +3915,7 @@ static const struct pptable_funcs sienna_cichlid_ppt_funcs = { .dump_pptable = sienna_cichlid_dump_pptable, .init_microcode = smu_v11_0_init_microcode, .load_microcode = smu_v11_0_load_microcode, + .fini_microcode = smu_v11_0_fini_microcode, .init_smc_tables = sienna_cichlid_init_smc_tables, .fini_smc_tables = smu_v11_0_fini_smc_tables, .init_power = smu_v11_0_init_power,
drivers/gpu/drm/i915/gt/intel_gt.c +3 -0
@@ -949,6 +949,9 @@ void intel_gt_invalidate_tlbs(struct intel_gt *gt)if (I915_SELFTEST_ONLY (gt->awake == -ENODEV ))return ; +if (intel_gt_is_wedged (gt)) +return ; +if (GRAPHICS_VER (i915) ==12 ) { regs = gen12_regs; num =ARRAY_SIZE (gen12_regs);
drivers/gpu/drm/vc4/Kconfig +1 -0
@@ -5,6 +5,7 @@ config DRM_VC4 depends on DRM depends on SND && SND_SOC depends on COMMON_CLK + depends on PM select DRM_KMS_HELPER select DRM_KMS_CMA_HELPER select DRM_GEM_CMA_HELPER
drivers/gpu/drm/vc4/vc4_hdmi.c +8 -9
@@ -2122,7 +2122,7 @@ static int vc5_hdmi_init_resources(struct vc4_hdmi *vc4_hdmi)return 0 ; } -static int __maybe_unused vc4_hdmi_runtime_suspend (struct device *dev) +static int vc4_hdmi_runtime_suspend (struct device *dev) {struct vc4_hdmi *vc4_hdmi =dev_get_drvdata (dev);
@@ -2219,17 +2219,15 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data)if (ret) goto err_put_ddc; +pm_runtime_enable (dev); +/* -* We need to have the device powered up at this point to call -* our reset hook and for the CEC init. +* We need to have the device powered up at this point to call +* our reset hook and for the CEC init. */ - ret =vc4_hdmi_runtime_resume (dev); + ret =pm_runtime_resume_and_get (dev);if (ret) - goto err_put_ddc; - -pm_runtime_get_noresume (dev); -pm_runtime_set_active (dev); -pm_runtime_enable (dev); + goto err_disable_runtime_pm;if (vc4_hdmi->variant->reset) vc4_hdmi->variant->reset (vc4_hdmi);
@@ -2278,6 +2276,7 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) err_destroy_encoder:drm_encoder_cleanup (encoder);pm_runtime_put_sync (dev); +err_disable_runtime_pm:pm_runtime_disable (dev); err_put_ddc:put_device (&vc4_hdmi->ddc->dev);
drivers/hid/amd-sfh-hid/amd_sfh_pcie.c +18 -0
@@ -281,11 +281,29 @@ static int amd_sfh_irq_init(struct amd_mp2_dev *privdata)return 0 ; } +static const struct dmi_system_id dmi_nodevs[] = { + { +/* +* Google Chromebooks use Chrome OS Embedded Controller Sensor +* Hub instead of Sensor Hub Fusion and leaves MP2 +* uninitialized, which disables all functionalities, even +* including the registers necessary for feature detections. +*/ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Google" ), + }, + }, + { } +}; +static int amd_mp2_pci_probe (struct pci_dev *pdev,const struct pci_device_id *id) {struct amd_mp2_dev *privdata;int rc; +if (dmi_first_match (dmi_nodevs)) +return -ENODEV ; + privdata =devm_kzalloc (&pdev->dev,sizeof (*privdata),GFP_KERNEL );if (!privdata)return -ENOMEM ;
drivers/hid/hid-asus.c +7 -0
@@ -1212,6 +1212,13 @@ static __u8 *asus_report_fixup(struct hid_device *hdev, __u8 *rdesc, rdesc = new_rdesc; } +if (drvdata->quirks &QUIRK_ROG_NKEY_KEYBOARD && + *rsize ==331 && rdesc[190 ] ==0x85 && rdesc[191 ] ==0x5a && + rdesc[204 ] ==0x95 && rdesc[205 ] ==0x05 ) { +hid_info (hdev,"Fixing up Asus N-KEY keyb report descriptor\n" ); + rdesc[205 ] =0x01 ; + } +return rdesc; }
drivers/hid/hid-ids.h +1 -0
@@ -399,6 +399,7 @@#define USB_DEVICE_ID_ASUS_UX550_TOUCHSCREEN 0x2706#define I2C_DEVICE_ID_SURFACE_GO_TOUCHSCREEN 0x261A#define I2C_DEVICE_ID_SURFACE_GO2_TOUCHSCREEN 0x2A1C +#define I2C_DEVICE_ID_LENOVO_YOGA_C630_TOUCHSCREEN 0x279F#define USB_VENDOR_ID_ELECOM 0x056e#define USB_DEVICE_ID_ELECOM_BM084 0x0061
drivers/hid/hid-input.c +2 -0
@@ -335,6 +335,8 @@ static const struct hid_device_id hid_battery_quirks[] = { HID_BATTERY_QUIRK_IGNORE }, {HID_I2C_DEVICE (USB_VENDOR_ID_ELAN ,I2C_DEVICE_ID_SURFACE_GO2_TOUCHSCREEN ), HID_BATTERY_QUIRK_IGNORE }, + { HID_I2C_DEVICE(USB_VENDOR_ID_ELAN, I2C_DEVICE_ID_LENOVO_YOGA_C630_TOUCHSCREEN), + HID_BATTERY_QUIRK_IGNORE }, {} };
drivers/hid/hid-steam.c +10 -0
@@ -134,6 +134,11 @@ static int steam_recv_report(struct steam_device *steam,int ret; r = steam->hdev->report_enum[HID_FEATURE_REPORT ].report_id_hash[0 ]; +if (!r) { +hid_err (steam->hdev,"No HID_FEATURE_REPORT submitted - nothing to read\n" ); +return -EINVAL ; + } +if (hid_report_len (r) <64 )return -EINVAL ;
@@ -165,6 +170,11 @@ static int steam_send_report(struct steam_device *steam,int ret; r = steam->hdev->report_enum[HID_FEATURE_REPORT ].report_id_hash[0 ]; +if (!r) { +hid_err (steam->hdev,"No HID_FEATURE_REPORT submitted - nothing to read\n" ); +return -EINVAL ; + } +if (hid_report_len (r) <64 )return -EINVAL ;
drivers/hid/hid-thrustmaster.c +2 -1
@@ -67,12 +67,13 @@ static const struct tm_wheel_info tm_wheels_infos[] = { {0x0200, 0x0005, "Thrustmaster T300RS (Missing Attachment)"}, {0x0206, 0x0005, "Thrustmaster T300RS"}, {0x0209, 0x0005, "Thrustmaster T300RS (Open Wheel Attachment)"}, + {0x020a, 0x0005, "Thrustmaster T300RS (Sparco R383 Mod)"}, {0x0204, 0x0005, "Thrustmaster T300 Ferrari Alcantara Edition"}, {0x0002, 0x0002, "Thrustmaster T500RS"} //{0x0407, 0x0001, "Thrustmaster TMX"} }; -static const uint8_t tm_wheels_infos_length =4 ; +static const uint8_t tm_wheels_infos_length =7 ;/* * This structs contains (in little endian) the response data
drivers/hid/hidraw.c +3 -0
@@ -346,10 +346,13 @@ static int hidraw_release(struct inode * inode, struct file * file)unsigned int minor =iminor (inode);struct hidraw_list *list = file->private_data;unsigned long flags; +int i;mutex_lock (&minors_lock);spin_lock_irqsave (&hidraw_table[minor]->list_lock, flags); +for (i = list->tail; i < list->head; i++) +kfree (list->buffer[i].value);list_del (&list->node);spin_unlock_irqrestore (&hidraw_table[minor]->list_lock, flags);kfree (list);
drivers/hv/hv_balloon.c +10 -3
@@ -17,6 +17,7 @@#include <linux/slab.h> #include <linux/kthread.h> #include <linux/completion.h> +#include <linux/count_zeros.h> #include <linux/memory_hotplug.h> #include <linux/memory.h> #include <linux/notifier.h>
@@ -1130,6 +1131,7 @@ static void post_status(struct hv_dynmem_device *dm)struct dm_status status;unsigned long now = jiffies;unsigned long last_post = last_post_time; +unsigned long num_pages_avail, num_pages_committed;if (pressure_report_delay >0 ) { --pressure_report_delay;
@@ -1154,16 +1156,21 @@ static void post_status(struct hv_dynmem_device *dm)* num_pages_onlined) as committed to the host, otherwise it can try * asking us to balloon them out. */ - status.num_avail =si_mem_available (); - status.num_committed =vm_memory_committed () + + num_pages_avail =si_mem_available (); + num_pages_committed =vm_memory_committed () + dm->num_pages_ballooned + (dm->num_pages_added > dm->num_pages_onlined ? dm->num_pages_added - dm->num_pages_onlined :0 ) +compute_balloon_floor (); -trace_balloon_status (status.num_avail, status.num_committed, +trace_balloon_status (num_pages_avail, num_pages_committed,vm_memory_committed (), dm->num_pages_ballooned, dm->num_pages_added, dm->num_pages_onlined); + +/* Convert numbers of pages into numbers of HV_HYP_PAGEs. */ + status.num_avail = num_pages_avail *NR_HV_HYP_PAGES_IN_PAGE ; + status.num_committed = num_pages_committed *NR_HV_HYP_PAGES_IN_PAGE ; +/* * If our transaction ID is no longer current, just don't * send the status. This can happen if we were interrupted
drivers/media/usb/pvrusb2/pvrusb2-hdw.c +1 -0
@@ -2610,6 +2610,7 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,del_timer_sync (&hdw->encoder_run_timer);del_timer_sync (&hdw->encoder_wait_timer);flush_work (&hdw->workpoll); +v4l2_device_unregister (&hdw->v4l2_dev);usb_free_urb (hdw->ctl_read_urb);usb_free_urb (hdw->ctl_write_urb);kfree (hdw->ctl_read_buffer);
drivers/mmc/host/mtk-sd.c +6 -0
@@ -2345,6 +2345,9 @@ static void msdc_cqe_disable(struct mmc_host *mmc, bool recovery)/* disable busy check */ sdr_clr_bits (host->base +MSDC_PATCH_BIT1 ,MSDC_PB1_BUSY_CHECK_SEL ); + val =readl (host->base +MSDC_INT ); +writel (val, host->base +MSDC_INT ); +if (recovery) {sdr_set_field (host->base +MSDC_DMA_CTRL ,MSDC_DMA_CTRL_STOP ,1 );
@@ -2785,11 +2788,14 @@ static int __maybe_unused msdc_suspend(struct device *dev) {struct mmc_host *mmc =dev_get_drvdata (dev);int ret; +u32 val;if (mmc->caps2 &MMC_CAP2_CQE ) { ret =cqhci_suspend (mmc);if (ret)return ret; + val =readl (((struct msdc_host *)mmc_priv (mmc))->base +MSDC_INT ); +writel (val, ((struct msdc_host *)mmc_priv (mmc))->base +MSDC_INT ); }return pm_runtime_force_suspend (dev);
drivers/mmc/host/sdhci-of-dwcmshc.c +62 -26
227 lines not on this page · raw message
drivers/pci/pcie/portdrv_core.c +8 -1
@@ -222,8 +222,15 @@ static int get_port_device_capability(struct pci_dev *dev)#ifdef CONFIG_PCIEAER if (dev->aer_cap &&pci_aer_available () && - (pcie_ports_native || host->native_aer)) + (pcie_ports_native || host->native_aer)) { services |=PCIE_PORT_SERVICE_AER ; + +/* +* Disable AER on this port in case it's been enabled by the +* BIOS (the AER service driver will enable it when necessary). +*/ +pci_disable_pcie_error_reporting (dev); + }#endif /* Root Ports and Root Complex Event Collectors may generate PMEs */
drivers/video/fbdev/pm2fb.c +5 -0
@@ -617,6 +617,11 @@ static int pm2fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)return -EINVAL ; } +if (!var->pixclock) { +DPRINTK ("pixclock is zero\n" ); +return -EINVAL ; + } +if (PICOS2KHZ (var->pixclock) >PM2_MAX_PIXCLOCK ) {DPRINTK ("pixclock too high (%ldKHz)\n" ,PICOS2KHZ (var->pixclock));
fs/btrfs/block-group.c +15 -32
88 lines not on this page · raw message
fs/btrfs/block-group.h +1 -3
@@ -251,9 +251,7 @@ void btrfs_dec_nocow_writers(struct btrfs_fs_info *fs_info, u64 bytenr);void btrfs_wait_nocow_writers (struct btrfs_block_group *bg);void btrfs_wait_block_group_cache_progress (struct btrfs_block_group *cache,u64 num_bytes); -int btrfs_wait_block_group_cache_done (struct btrfs_block_group *cache); -int btrfs_cache_block_group (struct btrfs_block_group *cache, -int load_cache_only); +int btrfs_cache_block_group (struct btrfs_block_group *cache,bool wait);void btrfs_put_caching_control (struct btrfs_caching_control *ctl);struct btrfs_caching_control *btrfs_get_caching_control (struct btrfs_block_group *cache);
fs/btrfs/ctree.c +3 -0
@@ -1938,6 +1938,9 @@ int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root *root,if (!p->skip_locking) { level =btrfs_header_level (b); + +btrfs_maybe_reset_lockdep_class (root, b); +if (level <= write_lock_level) {btrfs_tree_lock (b); p->locks[level] =BTRFS_WRITE_LOCK ;
fs/btrfs/ctree.h +2 -2
@@ -454,7 +454,6 @@ struct btrfs_free_cluster {enum btrfs_caching_type {BTRFS_CACHE_NO ,BTRFS_CACHE_STARTED , -BTRFS_CACHE_FAST ,BTRFS_CACHE_FINISHED ,BTRFS_CACHE_ERROR , };
@@ -1105,6 +1104,8 @@ enum {BTRFS_ROOT_QGROUP_FLUSHING ,/* This root has a drop operation that was started previously. */ BTRFS_ROOT_UNFINISHED_DROP , +/* This reloc root needs to have its buffers lockdep class reset. */ + BTRFS_ROOT_RESET_LOCKDEP_CLASS, };static inline void btrfs_wake_unfinished_drop (struct btrfs_fs_info *fs_info)
@@ -3166,7 +3167,6 @@ void __btrfs_del_delalloc_inode(struct btrfs_root *root,struct inode *btrfs_lookup_dentry (struct inode *dir,struct dentry *dentry);int btrfs_set_inode_index (struct btrfs_inode *dir,u64 *index);int btrfs_unlink_inode (struct btrfs_trans_handle *trans, -struct btrfs_root *root,struct btrfs_inode *dir,struct btrfs_inode *inode,const char *name,int name_len); int btrfs_add_link(struct btrfs_trans_handle *trans,
fs/btrfs/disk-io.c +0 -82
88 lines not on this page · raw message
fs/btrfs/disk-io.h +0 -10
@@ -140,14 +140,4 @@ int btrfs_init_root_free_objectid(struct btrfs_root *root);int __init btrfs_end_io_wq_init (void );void __cold btrfs_end_io_wq_exit (void ); -#ifdef CONFIG_DEBUG_LOCK_ALLOC -void btrfs_set_buffer_lockdep_class (u64 objectid, -struct extent_buffer *eb,int level); -#else -static inline void btrfs_set_buffer_lockdep_class (u64 objectid, -struct extent_buffer *eb,int level) -{ -} -#endif -#endif
fs/btrfs/extent-tree.c +23 -25
90 lines not on this page · raw message
fs/btrfs/extent_io.c +10 -1
@@ -6109,6 +6109,7 @@ struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info,struct extent_buffer *exists =NULL ;struct page *p;struct address_space *mapping = fs_info->btree_inode->i_mapping; +u64 lockdep_owner = owner_root;int uptodate =1 ;int ret;
@@ -6143,7 +6144,15 @@ struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info, eb =__alloc_extent_buffer (fs_info, start, len);if (!eb)return ERR_PTR (-ENOMEM ); -btrfs_set_buffer_lockdep_class (owner_root, eb, level); + +/* +* The reloc trees are just snapshots, so we need them to appear to be +* just like any other fs tree WRT lockdep. +*/ +if (lockdep_owner ==BTRFS_TREE_RELOC_OBJECTID ) + lockdep_owner =BTRFS_FS_TREE_OBJECTID ; + +btrfs_set_buffer_lockdep_class (lockdep_owner, eb, level); num_pages =num_extent_pages (eb);for (i =0 ; i < num_pages; i++, index++) {
fs/btrfs/inode.c +11 -14
@@ -4097,11 +4097,11 @@ int btrfs_update_inode_fallback(struct btrfs_trans_handle *trans,* also drops the back refs in the inode to the directory */ static int __btrfs_unlink_inode (struct btrfs_trans_handle *trans, -struct btrfs_root *root,struct btrfs_inode *dir,struct btrfs_inode *inode,const char *name,int name_len) { +struct btrfs_root *root = dir->root;struct btrfs_fs_info *fs_info = root->fs_info;struct btrfs_path *path;int ret =0 ;
@@ -4201,15 +4201,14 @@ static int __btrfs_unlink_inode(struct btrfs_trans_handle *trans, }int btrfs_unlink_inode (struct btrfs_trans_handle *trans, -struct btrfs_root *root,struct btrfs_inode *dir,struct btrfs_inode *inode,const char *name,int name_len) {int ret; - ret =__btrfs_unlink_inode (trans, root, dir, inode, name, name_len); + ret =__btrfs_unlink_inode (trans, dir, inode, name, name_len);if (!ret) {drop_nlink (&inode->vfs_inode); - ret =btrfs_update_inode (trans, root, inode); + ret =btrfs_update_inode (trans, inode->root, inode); }return ret; }
@@ -4238,7 +4237,6 @@ static struct btrfs_trans_handle *__unlink_start_trans(struct inode *dir)static int btrfs_unlink (struct inode *dir,struct dentry *dentry) { -struct btrfs_root *root =BTRFS_I (dir)->root;struct btrfs_trans_handle *trans;struct inode *inode =d_inode (dentry);int ret;
@@ -4250,7 +4248,7 @@ static int btrfs_unlink(struct inode *dir, struct dentry *dentry)btrfs_record_unlink_dir (trans,BTRFS_I (dir),BTRFS_I (d_inode (dentry)),0 ); - ret =btrfs_unlink_inode (trans, root,BTRFS_I (dir), + ret =btrfs_unlink_inode (trans,BTRFS_I (dir),BTRFS_I (d_inode (dentry)), dentry->d_name.name, dentry->d_name.len);if (ret)
@@ -4264,7 +4262,7 @@ static int btrfs_unlink(struct inode *dir, struct dentry *dentry) out:btrfs_end_transaction (trans); -btrfs_btree_balance_dirty (root->fs_info); +btrfs_btree_balance_dirty (BTRFS_I (dir)->root->fs_info);return ret; }
@@ -4622,7 +4620,6 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry) {struct inode *inode =d_inode (dentry);int err =0 ; -struct btrfs_root *root =BTRFS_I (dir)->root;struct btrfs_trans_handle *trans;u64 last_unlink_trans;
@@ -4647,7 +4644,7 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry) last_unlink_trans =BTRFS_I (inode)->last_unlink_trans;/* now the directory is empty */ - err =btrfs_unlink_inode (trans, root,BTRFS_I (dir), + err =btrfs_unlink_inode (trans,BTRFS_I (dir),BTRFS_I (d_inode (dentry)), dentry->d_name.name, dentry->d_name.len);if (!err) {
@@ -4668,7 +4665,7 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry) } out:btrfs_end_transaction (trans); -btrfs_btree_balance_dirty (root->fs_info); +btrfs_btree_balance_dirty (BTRFS_I (dir)->root->fs_info);return err; }
@@ -9571,7 +9568,7 @@ static int btrfs_rename_exchange(struct inode *old_dir,if (old_ino ==BTRFS_FIRST_FREE_OBJECTID ) { ret =btrfs_unlink_subvol (trans, old_dir, old_dentry); }else {/* src is an inode */ - ret =__btrfs_unlink_inode (trans, root,BTRFS_I (old_dir), + ret =__btrfs_unlink_inode (trans,BTRFS_I (old_dir),BTRFS_I (old_dentry->d_inode), old_dentry->d_name.name, old_dentry->d_name.len);
@@ -9587,7 +9584,7 @@ static int btrfs_rename_exchange(struct inode *old_dir,if (new_ino ==BTRFS_FIRST_FREE_OBJECTID ) { ret =btrfs_unlink_subvol (trans, new_dir, new_dentry); }else {/* dest is an inode */ - ret =__btrfs_unlink_inode (trans, dest,BTRFS_I (new_dir), + ret =__btrfs_unlink_inode (trans,BTRFS_I (new_dir),BTRFS_I (new_dentry->d_inode), new_dentry->d_name.name, new_dentry->d_name.len);
@@ -9862,7 +9859,7 @@ static int btrfs_rename(struct user_namespace *mnt_userns,*/ btrfs_pin_log_trans (root); log_pinned = true; - ret =__btrfs_unlink_inode (trans, root,BTRFS_I (old_dir), + ret =__btrfs_unlink_inode (trans,BTRFS_I (old_dir),BTRFS_I (d_inode (old_dentry)), old_dentry->d_name.name, old_dentry->d_name.len);
@@ -9882,7 +9879,7 @@ static int btrfs_rename(struct user_namespace *mnt_userns, ret =btrfs_unlink_subvol (trans, new_dir, new_dentry);BUG_ON (new_inode->i_nlink ==0 ); }else { - ret =btrfs_unlink_inode (trans, dest,BTRFS_I (new_dir), + ret =btrfs_unlink_inode (trans,BTRFS_I (new_dir),BTRFS_I (d_inode (new_dentry)), new_dentry->d_name.name, new_dentry->d_name.len);
fs/btrfs/locking.c +91 -0
109 lines not on this page · raw message
fs/btrfs/locking.h +14 -0
@@ -130,4 +130,18 @@ void btrfs_drew_write_unlock(struct btrfs_drew_lock *lock);void btrfs_drew_read_lock (struct btrfs_drew_lock *lock);void btrfs_drew_read_unlock (struct btrfs_drew_lock *lock); +#ifdef CONFIG_DEBUG_LOCK_ALLOC +void btrfs_set_buffer_lockdep_class (u64 objectid,struct extent_buffer *eb,int level); +void btrfs_maybe_reset_lockdep_class (struct btrfs_root *root,struct extent_buffer *eb); +#else +static inline void btrfs_set_buffer_lockdep_class (u64 objectid, +struct extent_buffer *eb,int level) +{ +} +static inline void btrfs_maybe_reset_lockdep_class (struct btrfs_root *root, +struct extent_buffer *eb) +{ +} +#endif +#endif
fs/btrfs/relocation.c +2 -0
@@ -1326,7 +1326,9 @@ int replace_path(struct btrfs_trans_handle *trans, struct reloc_control *rc,btrfs_release_path (path); path->lowest_level = level; +set_bit (BTRFS_ROOT_RESET_LOCKDEP_CLASS , &src->state); ret =btrfs_search_slot (trans, src, &key, path,0 ,1 ); +clear_bit (BTRFS_ROOT_RESET_LOCKDEP_CLASS , &src->state); path->lowest_level =0 ;if (ret) {if (ret >0 )
fs/btrfs/tree-checker.c +23 -2
@@ -1216,7 +1216,8 @@ static void extent_err(const struct extent_buffer *eb, int slot, }static int check_extent_item (struct extent_buffer *leaf, -struct btrfs_key *key,int slot) +struct btrfs_key *key,int slot, +struct btrfs_key *prev_key) {struct btrfs_fs_info *fs_info = leaf->fs_info;struct btrfs_extent_item *ei;
@@ -1436,6 +1437,26 @@ static int check_extent_item(struct extent_buffer *leaf, total_refs, inline_refs);return -EUCLEAN ; } + +if ((prev_key->type ==BTRFS_EXTENT_ITEM_KEY ) || + (prev_key->type ==BTRFS_METADATA_ITEM_KEY )) { +u64 prev_end = prev_key->objectid; + +if (prev_key->type ==BTRFS_METADATA_ITEM_KEY ) + prev_end += fs_info->nodesize; +else + prev_end += prev_key->offset; + +if (unlikely (prev_end > key->objectid)) { +extent_err (leaf, slot, +"previous extent [%llu %u %llu] overlaps current extent [%llu %u %llu]" , + prev_key->objectid, prev_key->type, + prev_key->offset, key->objectid, key->type, + key->offset); +return -EUCLEAN ; + } + } +return 0 ; }
@@ -1604,7 +1625,7 @@ static int check_leaf_item(struct extent_buffer *leaf,break ;case BTRFS_EXTENT_ITEM_KEY :case BTRFS_METADATA_ITEM_KEY : - ret =check_extent_item (leaf, key, slot); + ret =check_extent_item (leaf, key, slot, prev_key);break ;case BTRFS_TREE_BLOCK_REF_KEY :case BTRFS_SHARED_DATA_REF_KEY :
fs/btrfs/tree-log.c +91 -130
370 lines not on this page · raw message
fs/io_uring.c +347 -399
1,056 lines not on this page · raw message
fs/ksmbd/mgmt/tree_connect.c +1 -1
@@ -18,7 +18,7 @@struct ksmbd_tree_conn_status ksmbd_tree_conn_connect (struct ksmbd_session *sess,char *share_name) { -struct ksmbd_tree_conn_status status = {-EINVAL ,NULL }; +struct ksmbd_tree_conn_status status = {-ENOENT ,NULL };struct ksmbd_tree_connect_response *resp =NULL ;struct ksmbd_share_config *sc;struct ksmbd_tree_connect *tree_conn =NULL ;
fs/ksmbd/smb2pdu.c +11 -10
@@ -1932,8 +1932,9 @@ int smb2_tree_connect(struct ksmbd_work *work) rsp->hdr.Status =STATUS_SUCCESS ; rc =0 ;break ; +case -ENOENT :case KSMBD_TREE_CONN_STATUS_NO_SHARE : - rsp->hdr.Status =STATUS_BAD_NETWORK_PATH ; + rsp->hdr.Status =STATUS_BAD_NETWORK_NAME ;break ;case -ENOMEM :case KSMBD_TREE_CONN_STATUS_NOMEM :
@@ -2318,15 +2319,15 @@ static int smb2_remove_smb_xattrs(struct path *path) name += strlen(name) + 1) {ksmbd_debug (SMB ,"%s, len %zd\n" , name,strlen (name)); -if (strncmp (name,XATTR_USER_PREFIX ,XATTR_USER_PREFIX_LEN ) && -strncmp (&name[XATTR_USER_PREFIX_LEN ],DOS_ATTRIBUTE_PREFIX , -DOS_ATTRIBUTE_PREFIX_LEN ) && -strncmp (&name[XATTR_USER_PREFIX_LEN ],STREAM_PREFIX ,STREAM_PREFIX_LEN )) -continue ; - - err =ksmbd_vfs_remove_xattr (user_ns, path->dentry, name); -if (err) -ksmbd_debug (SMB ,"remove xattr failed : %s\n" , name); +if (!strncmp (name,XATTR_USER_PREFIX ,XATTR_USER_PREFIX_LEN ) && + !strncmp (&name[XATTR_USER_PREFIX_LEN ],STREAM_PREFIX , +STREAM_PREFIX_LEN )) { + err =ksmbd_vfs_remove_xattr (user_ns, path->dentry, + name); +if (err) +ksmbd_debug (SMB ,"remove xattr failed : %s\n" , + name); + } } out:kvfree (xattr_list);
fs/ntfs3/xattr.c +6 -1
@@ -118,7 +118,7 @@ static int ntfs_read_ea(struct ntfs_inode *ni, struct EA_FULL **ea,run_init (&run); - err =attr_load_runs (attr_ea, ni, &run,NULL ); + err =attr_load_runs_range (ni,ATTR_EA ,NULL ,0 , &run,0 , size);if (!err) err =ntfs_read_run_nb (sbi, &run,0 , ea_p, size,NULL );run_close (&run);
@@ -443,6 +443,11 @@ static noinline int ntfs_set_ea(struct inode *inode, const char *name,/* Delete xattr, ATTR_EA */ ni_remove_attr_le (ni, attr, mi, le); }else if (attr->non_res) { + err =attr_load_runs_range (ni,ATTR_EA ,NULL ,0 , &ea_run,0 , + size); +if (err) + goto out; + err =ntfs_sb_write_run (sbi, &ea_run,0 , ea_all, size,0 );if (err) goto out;
include/drm/drm_bridge.h +12 -1
@@ -911,9 +911,20 @@ struct drm_bridge *devm_drm_panel_bridge_add(struct device *dev,struct drm_bridge *devm_drm_panel_bridge_add_typed (struct device *dev,struct drm_panel *panel,u32 connector_type); +struct drm_connector *drm_panel_bridge_connector (struct drm_bridge *bridge); +#endif + +#if defined(CONFIG_OF ) && defined(CONFIG_DRM_PANEL_BRIDGE )struct drm_bridge *devm_drm_of_get_bridge (struct device *dev,struct device_node *node,u32 port,u32 endpoint); -struct drm_connector *drm_panel_bridge_connector (struct drm_bridge *bridge); +#else +static inline struct drm_bridge *devm_drm_of_get_bridge (struct device *dev, +struct device_node *node, +u32 port, +u32 endpoint) +{ +return ERR_PTR (-ENODEV ); +}#endif #endif
include/linux/rmap.h +5 -2
@@ -39,12 +39,15 @@ struct anon_vma {atomic_t refcount;/* -* Count of child anon_vmas and VMAs which points to this anon_vma. +* Count of child anon_vmas. Equals to the count of all anon_vmas that +* have ->parent pointing to this one, including itself. * * This counter is used for making decision about reusing anon_vma * instead of forking new one. See comments in function anon_vma_clone. */ -unsigned degree; +unsigned long num_children; +/* Count of VMAs whose ->anon_vma pointer points to this object. */ +unsigned long num_active_vmas;struct anon_vma *parent;/* Parent of this anon_vma */
include/linux/skbuff.h +8 -0
@@ -2328,6 +2328,14 @@ static inline void skb_set_tail_pointer(struct sk_buff *skb, const int offset)#endif /* NET_SKBUFF_DATA_USES_OFFSET */ +static inline void skb_assert_len (struct sk_buff *skb) +{ +#ifdef CONFIG_DEBUG_NET +if (WARN_ONCE (!skb->len,"%s\n" , __func__)) +DO_ONCE_LITE (skb_dump,KERN_ERR , skb, false); +#endif /* CONFIG_DEBUG_NET */ +} +/* * Add data to an sk_buff */
include/linux/skmsg.h +2 -1
@@ -283,7 +283,8 @@ static inline void sk_msg_sg_copy_clear(struct sk_msg *msg, u32 start)static inline struct sk_psock *sk_psock (const struct sock *sk) { -return rcu_dereference_sk_user_data (sk); +return __rcu_dereference_sk_user_data_with_flags (sk, +SK_USER_DATA_PSOCK ); } static inline void sk_psock_set_state(struct sk_psock *psock,
include/net/sock.h +48 -20
32 lines not on this page · raw message
tools/testing/selftests/netfilter/nft_flowtable.sh +128 -118
246 lines not on this page · 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.