This is the start of the stable review cycle for the 6.1.69 release.
There are 106 patches in this series, all will be posted as a response
to this one. If anyone has any issues with these being applied, please
let me know.
Responses should be made by Wed, 20 Dec 2023 13:50:31 +0000.
Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.69-rc1…
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.1.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <gregkh(a)linuxfoundation.org>
Linux 6.1.69-rc1
Hayes Wang <hayeswang(a)realtek.com>
r8152: fix the autosuspend doesn't work
Hayes Wang <hayeswang(a)realtek.com>
r8152: remove rtl_vendor_mode function
Hayes Wang <hayeswang(a)realtek.com>
r8152: avoid to change cfg for all devices
John Fastabend <john.fastabend(a)gmail.com>
net: tls, update curr on splice as well
Steven Rostedt (Google) <rostedt(a)goodmis.org>
ring-buffer: Have rb_time_cmpxchg() set the msb counter too
Steven Rostedt (Google) <rostedt(a)goodmis.org>
ring-buffer: Do not try to put back write_stamp
Steven Rostedt (Google) <rostedt(a)goodmis.org>
ring-buffer: Fix a race in rb_time_cmpxchg() for 32 bit archs
Steven Rostedt (Google) <rostedt(a)goodmis.org>
ring-buffer: Fix writing to the buffer with max_data_size
Steven Rostedt (Google) <rostedt(a)goodmis.org>
ring-buffer: Have saved event hold the entire event
Steven Rostedt (Google) <rostedt(a)goodmis.org>
ring-buffer: Do not update before stamp when switching sub-buffers
Steven Rostedt (Google) <rostedt(a)goodmis.org>
tracing: Update snapshot buffer on resize if it is allocated
Steven Rostedt (Google) <rostedt(a)goodmis.org>
ring-buffer: Fix memory leak of free page
Paulo Alcantara <pc(a)manguebit.com>
smb: client: fix OOB in smb2_query_reparse_point()
Paulo Alcantara <pc(a)manguebit.com>
smb: client: fix NULL deref in asn1_ber_decoder()
Paulo Alcantara <pc(a)manguebit.com>
smb: client: fix OOB in receive_encrypted_standard()
Ville Syrjälä <ville.syrjala(a)linux.intel.com>
drm/i915: Fix remapped stride with CCS on ADL+
Mario Limonciello <mario.limonciello(a)amd.com>
drm/amd/display: Disable PSR-SU on Parade 0803 TCON again
Christian König <christian.koenig(a)amd.com>
drm/amdgpu: fix tear down order in amdgpu_vm_pt_free
Boris Burkov <boris(a)bur.io>
btrfs: don't clear qgroup reserved bit in release_folio
Boris Burkov <boris(a)bur.io>
btrfs: free qgroup reserve when ORDERED_IOERR is set
David Stevens <stevensd(a)chromium.org>
mm/shmem: fix race in shmem_undo_range w/THP
Yu Zhao <yuzhao(a)google.com>
mm/mglru: fix underprotected page cache
Amelie Delaunay <amelie.delaunay(a)foss.st.com>
dmaengine: stm32-dma: avoid bitfield overflow assertion
Alex Deucher <alexander.deucher(a)amd.com>
drm/amdgpu/sdma5.2: add begin/end_use ring callbacks
Florent Revest <revest(a)chromium.org>
team: Fix use-after-free when an option instance allocation fails
James Houghton <jthoughton(a)google.com>
arm64: mm: Always make sw-dirty PTEs hw-dirty in pte_modify
Baokun Li <libaokun1(a)huawei.com>
ext4: prevent the normalized size from exceeding EXT_MAX_BLOCKS
Krzysztof Kozlowski <krzysztof.kozlowski(a)linaro.org>
soundwire: stream: fix NULL pointer dereference for multi_link
Josef Bacik <josef(a)toxicpanda.com>
btrfs: do not allow non subvolume root targets for snapshot
Mark Rutland <mark.rutland(a)arm.com>
perf: Fix perf_event_validate_size() lockdep splat
Denis Benato <benato.denis96(a)gmail.com>
HID: hid-asus: add const to read-only outgoing usb buffer
Masahiro Yamada <masahiroy(a)kernel.org>
arm64: add dependency between vmlinuz.efi and Image
Lech Perczak <lech.perczak(a)gmail.com>
net: usb: qmi_wwan: claim interface 4 for ZTE MF290
Linus Torvalds <torvalds(a)linux-foundation.org>
asm-generic: qspinlock: fix queued_spin_value_unlocked() implementation
Aoba K <nexp_0x17(a)outlook.com>
HID: multitouch: Add quirk for HONOR GLO-GXXX touchpad
Denis Benato <benato.denis96(a)gmail.com>
HID: hid-asus: reset the backlight brightness level on resume
Li Nan <linan122(a)huawei.com>
nbd: pass nbd_sock to nbd_read_reply() instead of index
Oliver Neukum <oneukum(a)suse.com>
HID: add ALWAYS_POLL quirk for Apple kb
Brett Raye <braye(a)fastmail.com>
HID: glorious: fix Glorious Model I HID report
Andy Shevchenko <andriy.shevchenko(a)linux.intel.com>
platform/x86: intel_telemetry: Fix kernel doc descriptions
Bibo Mao <maobibo(a)loongson.cn>
LoongArch: Implement constant timer shutdown interface
Masahiro Yamada <masahiroy(a)kernel.org>
LoongArch: Add dependency between vmlinuz.efi and vmlinux.efi
Eduard Zingerman <eddyz87(a)gmail.com>
selftests/bpf: fix bpf_loop_bench for new callback verification scheme
Hannes Reinecke <hare(a)suse.de>
nvme: catch errors from nvme_configure_metadata()
Mark O'Donovan <shiftee(a)posteo.net>
nvme-auth: set explanation code for failure2 msgs
Li Nan <linan122(a)huawei.com>
nbd: fold nbd config initialization into nbd_alloc_config()
Coly Li <colyli(a)suse.de>
bcache: avoid NULL checking to c->root in run_cache_set()
Coly Li <colyli(a)suse.de>
bcache: add code comments for bch_btree_node_get() and __bch_btree_node_alloc()
Colin Ian King <colin.i.king(a)gmail.com>
bcache: remove redundant assignment to variable cur_idx
Coly Li <colyli(a)suse.de>
bcache: avoid oversize memory allocation by small stripe_size
Ming Lei <ming.lei(a)redhat.com>
blk-cgroup: bypass blkcg_deactivate_policy after destroying
Ming Lei <ming.lei(a)redhat.com>
blk-throttle: fix lockdep warning of "cgroup_mutex or RCU read lock required!"
Jean Delvare <jdelvare(a)suse.de>
stmmac: dwmac-loongson: Add architecture dependency
Oliver Neukum <oneukum(a)suse.com>
usb: aqc111: check packet for fixup for true limit
Saurabh Sengar <ssengar(a)linux.microsoft.com>
x86/hyperv: Fix the detection of E820_TYPE_PRAM in a Gen2 VM
Jason-JH.Lin <jason-jh.lin(a)mediatek.com>
drm/mediatek: Add spinlock for setting vblank event in atomic_begin
Namjae Jeon <linkinjeon(a)kernel.org>
ksmbd: fix wrong name of SMB2_CREATE_ALLOCATION_SIZE
Jiaxun Yang <jiaxun.yang(a)flygoat.com>
PCI: loongson: Limit MRRS to 256
Bjorn Helgaas <bhelgaas(a)google.com>
Revert "PCI: acpiphp: Reassign resources on bridge if necessary"
Hartmut Knaack <knaack.h(a)gmx.de>
ALSA: hda/realtek: Apply mute LED quirk for HP15-db
Kai Vehmanen <kai.vehmanen(a)linux.intel.com>
ALSA: hda/hdmi: add force-connect quirks for ASUSTeK Z170 variants
Kai Vehmanen <kai.vehmanen(a)linux.intel.com>
ALSA: hda/hdmi: add force-connect quirk for NUC5CPYB
Hangyu Hua <hbh25y(a)gmail.com>
fuse: dax: set fc->dax to NULL in fuse_dax_conn_free()
Jens Axboe <axboe(a)kernel.dk>
cred: switch to using atomic_long_t
Igor Russkikh <irusskikh(a)marvell.com>
net: atlantic: fix double free in ring reinit logic
Hyunwoo Kim <v4bel(a)theori.io>
appletalk: Fix Use-After-Free in atalk_ioctl
Andrew Halaney <ahalaney(a)redhat.com>
net: stmmac: Handle disabled MDIO busses from devicetree
Ioana Ciornei <ioana.ciornei(a)nxp.com>
dpaa2-switch: do not ask for MDB, VLAN and FDB replay
Ioana Ciornei <ioana.ciornei(a)nxp.com>
dpaa2-switch: fix size of the dma_unmap
Nikolay Kuratov <kniv(a)yandex-team.ru>
vsock/virtio: Fix unsigned integer wrap around in virtio_transport_has_space()
Yusong Gao <a869920004(a)gmail.com>
sign-file: Fix incorrect return values check
Yanteng Si <siyanteng(a)loongson.cn>
stmmac: dwmac-loongson: Make sure MDIO is initialized before use
David Arinzon <darinzon(a)amazon.com>
net: ena: Fix XDP redirection error
David Arinzon <darinzon(a)amazon.com>
net: ena: Fix xdp drops handling due to multibuf packets
David Arinzon <darinzon(a)amazon.com>
net: ena: Destroy correct number of xdp queues upon failure
Dong Chenchen <dongchenchen2(a)huawei.com>
net: Remove acked SYN flag from packet in the transmit queue correctly
Dinghao Liu <dinghao.liu(a)zju.edu.cn>
qed: Fix a potential use-after-free in qed_cxt_tables_alloc
Piotr Gardocki <piotrx.gardocki(a)intel.com>
iavf: Handle ntuple on/off based on new state machines for flow director
Piotr Gardocki <piotrx.gardocki(a)intel.com>
iavf: Introduce new state machines for flow director
Hyunwoo Kim <v4bel(a)theori.io>
net/rose: Fix Use-After-Free in rose_ioctl
Hyunwoo Kim <v4bel(a)theori.io>
atm: Fix Use-After-Free in do_vcc_ioctl
Hariprasad Kelam <hkelam(a)marvell.com>
octeontx2-af: Update RSS algorithm index
Hariprasad Kelam <hkelam(a)marvell.com>
octeontx2-pf: Fix promisc mcam entry action
Zhipeng Lu <alexious(a)zju.edu.cn>
octeontx2-af: fix a use-after-free in rvu_nix_register_reporters
Radu Bulie <radu-andrei.bulie(a)nxp.com>
net: fec: correct queue selection
Vladimir Oltean <vladimir.oltean(a)nxp.com>
net: vlan: introduce skb_vlan_eth_hdr()
Chengfeng Ye <dg573847474(a)gmail.com>
atm: solos-pci: Fix potential deadlock on &tx_queue_lock
Chengfeng Ye <dg573847474(a)gmail.com>
atm: solos-pci: Fix potential deadlock on &cli_queue_lock
Michael Chan <michael.chan(a)broadcom.com>
bnxt_en: Fix HWTSTAMP_FILTER_ALL packet timestamp logic
Kalesh AP <kalesh-anakkur.purayil(a)broadcom.com>
bnxt_en: Fix wrong return value check in bnxt_close_nic()
Michael Chan <michael.chan(a)broadcom.com>
bnxt_en: Save ring error counters across reset
Somnath Kotur <somnath.kotur(a)broadcom.com>
bnxt_en: Clear resource reservation during resume
Stefan Wahren <wahrenst(a)gmx.net>
qca_spi: Fix reset behavior
Stefan Wahren <wahrenst(a)gmx.net>
qca_debug: Fix ethtool -G iface tx behavior
Stefan Wahren <wahrenst(a)gmx.net>
qca_debug: Prevent crash on TX ring changes
Maciej Żenczykowski <maze(a)google.com>
net: ipv6: support reporting otherwise unknown prefix flags in RTM_NEWPREFIX
Moshe Shemesh <moshe(a)nvidia.com>
net/mlx5e: Fix possible deadlock on mlx5e_tx_timeout_work
Mikhail Khvainitski <me(a)khvoinitsky.org>
HID: lenovo: Restrict detection of patched firmware only to USB cptkbd
David Howells <dhowells(a)redhat.com>
afs: Fix refcount underflow from error handling race
Zizhi Wo <wozizhi(a)huawei.com>
ksmbd: fix memory leak in smb2_lock()
Jan Kara <jack(a)suse.cz>
ext4: fix warning in ext4_dio_write_end_io()
Naveen N Rao <naveen(a)kernel.org>
powerpc/ftrace: Fix stack teardown in ftrace_no_trace
Kelly Kane <kelly(a)hawknetworks.com>
r8152: add vendor/device ID pair for ASUS USB-C2500
Antonio Napolitano <anton(a)polit.no>
r8152: add vendor/device ID pair for D-Link DUB-E250
Bjørn Mork <bjorn(a)mork.no>
r8152: add USB device driver for config selection
Kan Liang <kan.liang(a)linux.intel.com>
perf/x86/uncore: Don't WARN_ON_ONCE() for a broken discovery table
-------------
Diffstat:
Makefile | 4 +-
arch/arm64/Makefile | 2 +-
arch/arm64/include/asm/pgtable.h | 6 +
arch/loongarch/Makefile | 2 +
arch/loongarch/kernel/time.c | 27 ++--
arch/powerpc/kernel/trace/ftrace_mprofile.S | 4 +-
arch/x86/events/intel/uncore_discovery.c | 18 ++-
arch/x86/hyperv/hv_init.c | 25 ++-
block/blk-cgroup.c | 13 ++
block/blk-throttle.c | 2 +
drivers/atm/solos-pci.c | 8 +-
drivers/block/nbd.c | 76 +++++----
drivers/dma/stm32-dma.c | 8 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c | 3 +-
drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c | 28 ++++
.../drm/amd/display/modules/power/power_helpers.c | 2 +
drivers/gpu/drm/i915/display/intel_fb.c | 16 +-
drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 5 +
drivers/hid/hid-asus.c | 27 +++-
drivers/hid/hid-glorious.c | 16 +-
drivers/hid/hid-ids.h | 11 +-
drivers/hid/hid-lenovo.c | 3 +-
drivers/hid/hid-multitouch.c | 5 +
drivers/hid/hid-quirks.c | 1 +
drivers/md/bcache/bcache.h | 1 +
drivers/md/bcache/btree.c | 7 +
drivers/md/bcache/super.c | 4 +-
drivers/md/bcache/writeback.c | 2 +-
drivers/net/ethernet/amazon/ena/ena_eth_com.c | 3 -
drivers/net/ethernet/amazon/ena/ena_netdev.c | 30 ++--
drivers/net/ethernet/aquantia/atlantic/aq_ring.c | 5 +-
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 3 +-
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 67 ++++++--
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 25 ++-
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 11 +-
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 19 +--
drivers/net/ethernet/broadcom/bnxt/bnxt_ptp.c | 5 +-
drivers/net/ethernet/emulex/benet/be_main.c | 2 +-
.../ethernet/freescale/dpaa2/dpaa2-switch-flower.c | 7 +-
.../net/ethernet/freescale/dpaa2/dpaa2-switch.c | 11 +-
drivers/net/ethernet/freescale/fec_main.c | 27 ++--
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 2 +-
drivers/net/ethernet/intel/i40e/i40e_txrx.c | 2 +-
drivers/net/ethernet/intel/iavf/iavf.h | 1 +
drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 27 ++--
drivers/net/ethernet/intel/iavf/iavf_fdir.h | 15 +-
drivers/net/ethernet/intel/iavf/iavf_main.c | 107 +++++++++++--
drivers/net/ethernet/intel/iavf/iavf_virtchnl.c | 71 ++++++++-
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 2 +-
.../ethernet/marvell/octeontx2/af/rvu_devlink.c | 5 +-
.../net/ethernet/marvell/octeontx2/af/rvu_npc.c | 55 +++++--
.../net/ethernet/marvell/octeontx2/nic/otx2_pf.c | 25 ++-
drivers/net/ethernet/mellanox/mlx5/core/en.h | 1 +
drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 27 +++-
.../net/ethernet/qlogic/netxen/netxen_nic_main.c | 2 +-
drivers/net/ethernet/qlogic/qed/qed_cxt.c | 1 +
drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c | 4 +-
drivers/net/ethernet/qualcomm/qca_debug.c | 17 +-
drivers/net/ethernet/qualcomm/qca_spi.c | 20 ++-
drivers/net/ethernet/sfc/tx_tso.c | 2 +-
drivers/net/ethernet/stmicro/stmmac/Kconfig | 2 +-
.../net/ethernet/stmicro/stmmac/dwmac-loongson.c | 14 +-
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 7 +-
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 6 +-
drivers/net/team/team.c | 4 +-
drivers/net/usb/aqc111.c | 8 +-
drivers/net/usb/qmi_wwan.c | 1 +
drivers/net/usb/r8152.c | 177 ++++++++++++---------
drivers/nvme/host/auth.c | 2 +
drivers/nvme/host/core.c | 19 ++-
drivers/pci/controller/pci-loongson.c | 46 +++++-
drivers/pci/hotplug/acpiphp_glue.c | 9 +-
drivers/platform/x86/intel/telemetry/core.c | 4 +-
drivers/soundwire/stream.c | 7 +-
drivers/staging/gdm724x/gdm_lte.c | 4 +-
fs/afs/rxrpc.c | 2 +-
fs/btrfs/extent_io.c | 3 +-
fs/btrfs/ioctl.c | 9 ++
fs/btrfs/ordered-data.c | 4 +-
fs/ext4/file.c | 14 +-
fs/ext4/mballoc.c | 4 +
fs/fuse/dax.c | 1 +
fs/smb/client/smb2misc.c | 26 ++-
fs/smb/client/smb2ops.c | 40 +++--
fs/smb/common/smb2pdu.h | 2 +-
fs/smb/server/smb2pdu.c | 1 +
include/asm-generic/qspinlock.h | 2 +-
include/linux/cred.h | 8 +-
include/linux/if_vlan.h | 12 +-
include/linux/mm_inline.h | 23 +--
include/linux/usb/r8152.h | 2 +
include/net/addrconf.h | 12 +-
include/net/if_inet6.h | 4 -
kernel/cred.c | 64 ++++----
kernel/events/core.c | 10 ++
kernel/trace/ring_buffer.c | 58 +++----
kernel/trace/trace.c | 4 +-
mm/shmem.c | 19 ++-
mm/vmscan.c | 2 +-
mm/workingset.c | 6 +-
net/appletalk/ddp.c | 9 +-
net/atm/ioctl.c | 7 +-
net/batman-adv/soft-interface.c | 2 +-
net/ipv4/tcp_output.c | 6 +
net/ipv6/addrconf.c | 6 +-
net/rose/af_rose.c | 4 +-
net/tls/tls_sw.c | 2 +
net/vmw_vsock/virtio_transport_common.c | 2 +-
scripts/sign-file.c | 12 +-
sound/pci/hda/patch_hdmi.c | 3 +
sound/pci/hda/patch_realtek.c | 1 +
tools/testing/selftests/bpf/progs/bpf_loop_bench.c | 13 +-
112 files changed, 1122 insertions(+), 514 deletions(-)
From: Ville Syrjälä <ville.syrjala(a)linux.intel.com>
If we get a deadlock after the fb lookup in drm_mode_page_flip_ioctl()
we proceed to unref the fb and then retry the whole thing from the top.
But we forget to reset the fb pointer back to NULL, and so if we then
get another error during the retry, before the fb lookup, we proceed
the unref the same fb again without having gotten another reference.
The end result is that the fb will (eventually) end up being freed
while it's still in use.
Reset fb to NULL once we've unreffed it to avoid doing it again
until we've done another fb lookup.
This turned out to be pretty easy to hit on a DG2 when doing async
flips (and CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y). The first symptom I
saw that drm_closefb() simply got stuck in a busy loop while walking
the framebuffer list. Fortunately I was able to convince it to oops
instead, and from there it was easier to track down the culprit.
Cc: stable(a)vger.kernel.org
Signed-off-by: Ville Syrjälä <ville.syrjala(a)linux.intel.com>
---
drivers/gpu/drm/drm_plane.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
index 9e8e4c60983d..672c655c7a8e 100644
--- a/drivers/gpu/drm/drm_plane.c
+++ b/drivers/gpu/drm/drm_plane.c
@@ -1503,6 +1503,7 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
out:
if (fb)
drm_framebuffer_put(fb);
+ fb = NULL;
if (plane->old_fb)
drm_framebuffer_put(plane->old_fb);
plane->old_fb = NULL;
--
2.41.0
Hi Everyone,
Please find the KernelCI report for stable-rc/linux-6.1.y for this week.
## stable-rc HEAD for linux-6.1.y:
Date: 2023-12-18
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git/…
## Build failures:
No build failures seen for the stable-rc/linux-6.1.y commit head \o/
## Boot failures:
No **new** boot failures seen for the stable-rc/linux-6.1.y commit head \o/
Tested-by: kernelci.org bot <bot(a)kernelci.org>
Thanks,
Shreeya Patel
After updating bb_free in mb_free_blocks, it is possible to return without
updating bb_fragments because the block being freed is found to have
already been freed, which leads to inconsistency between bb_free and
bb_fragments.
Since the group may be unlocked in ext4_grp_locked_error(), this can lead
to problems such as dividing by zero when calculating the average fragment
length. Therefore, to ensure consistency, move the update of bb_free to
after the block double-free check.
Fixes: eabe0444df90 ("ext4: speed-up releasing blocks on commit")
CC: stable(a)vger.kernel.org # 3.10
Signed-off-by: Baokun Li <libaokun1(a)huawei.com>
---
fs/ext4/mballoc.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
index a95fa6e2b0f9..2fbee0f0f5c3 100644
--- a/fs/ext4/mballoc.c
+++ b/fs/ext4/mballoc.c
@@ -1892,11 +1892,6 @@ static void mb_free_blocks(struct inode *inode, struct ext4_buddy *e4b,
mb_check_buddy(e4b);
mb_free_blocks_double(inode, e4b, first, count);
- this_cpu_inc(discard_pa_seq);
- e4b->bd_info->bb_free += count;
- if (first < e4b->bd_info->bb_first_free)
- e4b->bd_info->bb_first_free = first;
-
/* access memory sequentially: check left neighbour,
* clear range and then check right neighbour
*/
@@ -1922,9 +1917,14 @@ static void mb_free_blocks(struct inode *inode, struct ext4_buddy *e4b,
sb, e4b->bd_group,
EXT4_GROUP_INFO_BBITMAP_CORRUPT);
}
- goto done;
+ return;
}
+ this_cpu_inc(discard_pa_seq);
+ e4b->bd_info->bb_free += count;
+ if (first < e4b->bd_info->bb_first_free)
+ e4b->bd_info->bb_first_free = first;
+
/* let's maintain fragments counter */
if (left_is_free && right_is_free)
e4b->bd_info->bb_fragments--;
@@ -1949,7 +1949,6 @@ static void mb_free_blocks(struct inode *inode, struct ext4_buddy *e4b,
if (first <= last)
mb_buddy_mark_free(e4b, first >> 1, last >> 1);
-done:
mb_set_largest_free_order(sb, e4b->bd_info);
mb_update_avg_fragment_size(sb, e4b->bd_info);
mb_check_buddy(e4b);
--
2.31.1
The patch titled
Subject: mm: migrate high-order folios in swap cache correctly
has been added to the -mm mm-hotfixes-unstable branch. Its filename is
mm-migrate-high-order-folios-in-swap-cache-correctly.patch
This patch will shortly appear at
https://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new.git/tree/patche…
This patch will later appear in the mm-hotfixes-unstable branch at
git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
Before you just go and hit "reply", please:
a) Consider who else should be cc'ed
b) Prefer to cc a suitable mailing list as well
c) Ideally: find the original patch on the mailing list and do a
reply-to-all to that, adding suitable additional cc's
*** Remember to use Documentation/process/submit-checklist.rst when testing your code ***
The -mm tree is included into linux-next via the mm-everything
branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
and is updated there every 2-3 working days
------------------------------------------------------
From: Charan Teja Kalla <quic_charante(a)quicinc.com>
Subject: mm: migrate high-order folios in swap cache correctly
Date: Thu, 14 Dec 2023 04:58:41 +0000
Large folios occupy N consecutive entries in the swap cache instead of
using multi-index entries like the page cache. However, if a large folio
is re-added to the LRU list, it can be migrated. The migration code was
not aware of the difference between the swap cache and the page cache and
assumed that a single xas_store() would be sufficient.
This leaves potentially many stale pointers to the now-migrated folio in
the swap cache, which can lead to almost arbitrary data corruption in the
future. This can also manifest as infinite loops with the RCU read lock
held.
[willy(a)infradead.org: modifications to the changelog & tweaked the fix]
Fixes: 3417013e0d183be ("mm/migrate: Add folio_migrate_mapping()")
Link: https://lkml.kernel.org/r/20231214045841.961776-1-willy@infradead.org
Signed-off-by: Charan Teja Kalla <quic_charante(a)quicinc.com>
Signed-off-by: Matthew Wilcox (Oracle) <willy(a)infradead.org>
Reported-by: Charan Teja Kalla <quic_charante(a)quicinc.com>
Closes: https://lkml.kernel.org/r/1700569840-17327-1-git-send-email-quic_charante@q…
Cc: David Hildenbrand <david(a)redhat.com>
Cc: Johannes Weiner <hannes(a)cmpxchg.org>
Cc: Kirill A. Shutemov <kirill.shutemov(a)linux.intel.com>
Cc: Naoya Horiguchi <n-horiguchi(a)ah.jp.nec.com>
Cc: Shakeel Butt <shakeelb(a)google.com>
Cc: <stable(a)vger.kernel.org>
Signed-off-by: Andrew Morton <akpm(a)linux-foundation.org>
---
mm/migrate.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
--- a/mm/migrate.c~mm-migrate-high-order-folios-in-swap-cache-correctly
+++ a/mm/migrate.c
@@ -405,6 +405,7 @@ int folio_migrate_mapping(struct address
int dirty;
int expected_count = folio_expected_refs(mapping, folio) + extra_count;
long nr = folio_nr_pages(folio);
+ long entries, i;
if (!mapping) {
/* Anonymous page without mapping */
@@ -442,8 +443,10 @@ int folio_migrate_mapping(struct address
folio_set_swapcache(newfolio);
newfolio->private = folio_get_private(folio);
}
+ entries = nr;
} else {
VM_BUG_ON_FOLIO(folio_test_swapcache(folio), folio);
+ entries = 1;
}
/* Move dirty while page refs frozen and newpage not yet exposed */
@@ -453,7 +456,11 @@ int folio_migrate_mapping(struct address
folio_set_dirty(newfolio);
}
- xas_store(&xas, newfolio);
+ /* Swap cache still stores N entries instead of a high-order entry */
+ for (i = 0; i < entries; i++) {
+ xas_store(&xas, newfolio);
+ xas_next(&xas);
+ }
/*
* Drop cache reference from old page by unfreezing
_
Patches currently in -mm which might be from quic_charante(a)quicinc.com are
mm-sparsemem-fix-race-in-accessing-memory_section-usage.patch
mm-sparsemem-fix-race-in-accessing-memory_section-usage-v2.patch
mm-migrate-high-order-folios-in-swap-cache-correctly.patch
From: Jason Gerecke <jason.gerecke(a)wacom.com>
There appear to be a few different ways that Wacom devices can deal with
confidence:
1. If the device looses confidence in a touch, it will first clear
the tipswitch flag in one report, and then clear the confidence
flag in a second report. This behavior is used by e.g. DTH-2452.
2. If the device looses confidence in a touch, it will clear both
the tipswitch and confidence flags within the same report. This
behavior is used by some AES devices.
3. If the device looses confidence in a touch, it will clear *only*
the confidence bit. The tipswitch bit will remain set so long as
the touch is tracked. This behavior may be used in future devices.
The driver does not currently handle situation 3 properly. Touches that
loose confidence will remain "in prox" and essentially frozen in place
until the tipswitch bit is finally cleared. Not only does this result
in userspace seeing a stuck touch, but it also prevents pen arbitration
from working properly (the pen won't send events until all touches are
up, but we don't currently process events from non-confident touches).
This commit centralizes the checking of the confidence bit in the
wacom_wac_finger_slot() function and has 'prox' depend on it. In the
case where situation 3 is encountered, the treat the touch as though
it was removed, allowing both userspace and the pen arbitration to
act normally.
Signed-off-by: Tatsunosuke Tobita <tatsunosuke.tobita(a)wacom.com>
Signed-off-by: Ping Cheng <ping.cheng(a)wacom.com>
Signed-off-by: Jason Gerecke <jason.gerecke(a)wacom.com>
Fixes: 7fb0413baa7f ("HID: wacom: Use "Confidence" flag to prevent reporting invalid contacts")
Cc: stable(a)vger.kernel.org
---
drivers/hid/wacom_wac.c | 32 ++++----------------------------
1 file changed, 4 insertions(+), 28 deletions(-)
diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
index 471db78dbbf0..8289ce763704 100644
--- a/drivers/hid/wacom_wac.c
+++ b/drivers/hid/wacom_wac.c
@@ -2649,8 +2649,8 @@ static void wacom_wac_finger_slot(struct wacom_wac *wacom_wac,
{
struct hid_data *hid_data = &wacom_wac->hid_data;
bool mt = wacom_wac->features.touch_max > 1;
- bool prox = hid_data->tipswitch &&
- report_touch_events(wacom_wac);
+ bool touch_down = hid_data->tipswitch && hid_data->confidence;
+ bool prox = touch_down && report_touch_events(wacom_wac);
if (touch_is_muted(wacom_wac)) {
if (!wacom_wac->shared->touch_down)
@@ -2700,24 +2700,6 @@ static void wacom_wac_finger_slot(struct wacom_wac *wacom_wac,
}
}
-static bool wacom_wac_slot_is_active(struct input_dev *dev, int key)
-{
- struct input_mt *mt = dev->mt;
- struct input_mt_slot *s;
-
- if (!mt)
- return false;
-
- for (s = mt->slots; s != mt->slots + mt->num_slots; s++) {
- if (s->key == key &&
- input_mt_get_value(s, ABS_MT_TRACKING_ID) >= 0) {
- return true;
- }
- }
-
- return false;
-}
-
static void wacom_wac_finger_event(struct hid_device *hdev,
struct hid_field *field, struct hid_usage *usage, __s32 value)
{
@@ -2768,14 +2750,8 @@ static void wacom_wac_finger_event(struct hid_device *hdev,
}
if (usage->usage_index + 1 == field->report_count) {
- if (equivalent_usage == wacom_wac->hid_data.last_slot_field) {
- bool touch_removed = wacom_wac_slot_is_active(wacom_wac->touch_input,
- wacom_wac->hid_data.id) && !wacom_wac->hid_data.tipswitch;
-
- if (wacom_wac->hid_data.confidence || touch_removed) {
- wacom_wac_finger_slot(wacom_wac, wacom_wac->touch_input);
- }
- }
+ if (equivalent_usage == wacom_wac->hid_data.last_slot_field)
+ wacom_wac_finger_slot(wacom_wac, wacom_wac->touch_input);
}
}
--
2.43.0