5.10.118-rc1 review
Greg Kroah-Hartman
maintainercover 5.10.118-rc1 review
This is the start of the stable review cycle for the 5.10.118 release. There are 97 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, 25 May 2022 16:56:55 +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/v5.x/stable-review/patch-5.10.118-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-5.10.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 5.10.118-rc1
Jessica Yu <[email protected]>
module: check for exit sections in layout_sections() instead of module_init_section()
Eugene Syromiatnikov <[email protected]>
include/uapi/linux/xfrm.h: Fix XFRM_MSG_MAPPING ABI breakage
David Howells <[email protected]>
afs: Fix afs_getattr() to refetch file status if callback break occurred
Yang Yingliang <[email protected]>
i2c: mt7621: fix missing clk_disable_unprepare() on error in mtk_i2c_probe()
Jessica Yu <[email protected]>
module: treat exit sections the same as init sections when !CONFIG_MODULE_UNLOAD
Jae Hyun Yoo <[email protected]>
dt-bindings: pinctrl: aspeed-g6: remove FWQSPID group
Marek Vasut <[email protected]>
Input: ili210x - fix reset timing
Shreyas K K <[email protected]>
arm64: Enable repeat tlbi workaround on KRYO4XX gold CPUs
Grant Grundler <[email protected]>
net: atlantic: verify hw_head_ lies within TX buffer ring
Grant Grundler <[email protected]>
net: atlantic: add check for MAX_SKB_FRAGS
Grant Grundler <[email protected]>
net: atlantic: reduce scope of is_rsc_complete
Grant Grundler <[email protected]>
net: atlantic: fix "frag[0] not initialized"
Yang Yingliang <[email protected]>
net: stmmac: fix missing pci_disable_device() on error in stmmac_pci_probe()
Yang Yingliang <[email protected]>
ethernet: tulip: fix missing pci_disable_device() on error in tulip_init_one()
Johannes Berg <[email protected]>
nl80211: fix locking in nl80211_set_tx_bitrate_mask()
Nicolas Dichtel <[email protected]>
selftests: add ping test with ping_group_range tuned
Kieran Frewen <[email protected]>
nl80211: validate S1G channel width
Felix Fietkau <[email protected]>
mac80211: fix rx reordering with non explicit / psmp ack policy
Gleb Chesnokov <[email protected]>
scsi: qla2xxx: Fix missed DMA unmap for aborted commands
Thomas Richter <[email protected]>
perf bench numa: Address compiler error on s390
Kan Liang <[email protected]>
perf regs x86: Fix arch__intr_reg_mask() for the hybrid platform
Uwe Kleine-König <[email protected]>
gpio: mvebu/pwm: Refuse requests with inverted polarity
Haibo Chen <[email protected]>
gpio: gpio-vf610: do not touch other bits when set the target bit
Krzysztof Kozlowski <[email protected]>
riscv: dts: sifive: fu540-c000: align dma node name with dtschema
Andrew Lunn <[email protected]>
net: bridge: Clear offload_fwd_mark when passing frame up bridge interface.
Kevin Mitchell <[email protected]>
igb: skip phy status check where unavailable
Ard Biesheuvel <[email protected]>
ARM: 9197/1: spectre-bhb: fix loop8 sequence for Thumb2
Ard Biesheuvel <[email protected]>
ARM: 9196/1: spectre-bhb: enable for Cortex-A15
Jiasheng Jiang <[email protected]>
net: af_key: add check for pfkey_broadcast in function pfkey_process
Maxim Mikityanskiy <[email protected]>
net/mlx5e: Properly block LRO when XDP is enabled
Duoming Zhou <[email protected]>
NFC: nci: fix sleep in atomic context bugs caused by nci_skb_alloc
Christophe JAILLET <[email protected]>
net/qla3xxx: Fix a test in ql_reset_work()
Codrin Ciubotariu <[email protected]>
clk: at91: generated: consider range when calculating best rate
Paul Greenwalt <[email protected]>
ice: fix possible under reporting of ethtool Tx and Rx statistics
Zixuan Fu <[email protected]>
net: vmxnet3: fix possible NULL pointer dereference in vmxnet3_rq_cleanup()
Zixuan Fu <[email protected]>
net: vmxnet3: fix possible use-after-free bugs in vmxnet3_rq_alloc_rx_buf()
Christophe JAILLET <[email protected]>
net: systemport: Fix an error handling path in bcm_sysport_probe()
Paolo Abeni <[email protected]>
net/sched: act_pedit: sanitize shift argument before usage
Eyal Birger <[email protected]>
xfrm: fix "disable_policy" flag use when arriving from different devices
Nicolas Dichtel <[email protected]>
xfrm: rework default policy structure
Nicolas Dichtel <[email protected]>
xfrm: fix dflt policy check when there is no policy configured
Nicolas Dichtel <[email protected]>
xfrm: notify default policy on update
Nicolas Dichtel <[email protected]>
xfrm: make user policy API complete
Pavel Skripkin <[email protected]>
net: xfrm: fix shift-out-of-bounce
Steffen Klassert <[email protected]>
xfrm: Add possibility to set the default to block if we have no policy
Vincent Bernat <[email protected]>
net: evaluate net.ipvX.conf.all.disable_policy and disable_xfrm
Harini Katakam <[email protected]>
net: macb: Increment rx bd head after allocating skb and buffer
Alex Elder <[email protected]>
net: ipa: record proper RX transaction count
Jae Hyun Yoo <[email protected]>
ARM: dts: aspeed-g6: fix SPI1/SPI2 quad pin group
Jae Hyun Yoo <[email protected]>
pinctrl: pinctrl-aspeed-g6: remove FWQSPID group in pinctrl
Jae Hyun Yoo <[email protected]>
ARM: dts: aspeed-g6: remove FWQSPID group in pinctrl dtsi
Jérôme Pouiller <[email protected]>
dma-buf: fix use of DMA_BUF_SET_NAME_{A,B} in userspace
Hangyu Hua <[email protected]>
drm/dp/mst: fix a possible memory leak in fetch_monitor_name()
Ilya Dryomov <[email protected]>
libceph: fix potential use-after-free on linger ping and resends
Ondrej Mosnacek <[email protected]>
crypto: qcom-rng - fix infinite loop on requests not multiple of WORD_SZ
Catalin Marinas <[email protected]>
arm64: mte: Ensure the cleared tags are visible before setting the PTE
Prakruthi Deepak Heragu <[email protected]>
arm64: paravirt: Use RCU read locks to guard stolen_time
Sean Christopherson <[email protected]>
KVM: x86/mmu: Update number of zapped pages even if page list is stable
Rafael J. Wysocki <[email protected]>
PCI/PM: Avoid putting Elo i2 PCIe Ports in D3cold
Al Viro <[email protected]>
Fix double fget() in vhost_net_set_backend()
Ondrej Mosnacek <[email protected]>
selinux: fix bad cleanup on error in hashtab_duplicate()
Peter Zijlstra <[email protected]>
perf: Fix sys_perf_event_open() race against self
Werner Sembach <[email protected]>
ALSA: hda/realtek: Add quirk for TongFang devices with pop noise
Takashi Iwai <[email protected]>
ALSA: wavefront: Proper check of get_user() error
Takashi Iwai <[email protected]>
ALSA: usb-audio: Restore Rane SL-1 quirk
Linus Torvalds <[email protected]>
Reinstate some of "swiotlb: rework "fix info leak with DMA_FROM_DEVICE""
Sasha Levin <[email protected]>
Revert "swiotlb: fix info leak with DMA_FROM_DEVICE"
Ryusuke Konishi <[email protected]>
nilfs2: fix lockdep warnings during disk space reclamation
Ryusuke Konishi <[email protected]>
nilfs2: fix lockdep warnings in page operations for btree nodes
linyujun <[email protected]>
ARM: 9191/1: arm/stacktrace, kasan: Silence KASAN warnings in unwind_frame()
Tzung-Bi Shih <[email protected]>
platform/chrome: cros_ec_debugfs: detach log reader wq from devm
Jakob Koschel <[email protected]>
drbd: remove usage of list iterator variable after loop
Xiaoke Wang <[email protected]>
MIPS: lantiq: check the return value of kzalloc()
Guo Xuenan <[email protected]>
fs: fix an infinite loop in iomap_fiemap
Mario Limonciello <[email protected]>
rtc: mc146818-lib: Fix the AltCentury for AMD platforms
Anton Eidelman <[email protected]>
nvme-multipath: fix hang when disk goes live over reconnect
Michael S. Tsirkin <[email protected]>
tools/virtio: compile with -pthread
Zhu Lingshan <[email protected]>
vhost_vdpa: don't setup irq offloading when irq_num < 0
Niklas Schnelle <[email protected]>
s390/pci: improve zpci_dev reference counting
Kai-Heng Feng <[email protected]>
ALSA: hda/realtek: Enable headset mic on Lenovo P360
Peter Zijlstra <[email protected]>
crypto: x86/chacha20 - Avoid spurious jumps to other functions
Zheng Yongjun <[email protected]>
crypto: stm32 - fix reference leak in stm32_crc_remove
Andre Przywara <[email protected]>
rtc: sun6i: Fix time overflow handling
Andreas Gruenbacher <[email protected]>
gfs2: Disable page faults during lockless buffered reads
Monish Kumar R <[email protected]>
nvme-pci: add quirks for Samsung X5 SSDs
Zheng Yongjun <[email protected]>
Input: stmfts - fix reference leak in stmfts_input_open
Jeff LaBundy <[email protected]>
Input: add bounds checking to input_set_capability()
David Gow <[email protected]>
um: Cleanup syscall_handler_t definition/cast, fix warning
Hugo Villeneuve <[email protected]>
rtc: pcf2127: fix bug when reading alarm registers
Vincent Whitchurch <[email protected]>
rtc: fix use-after-free on device removal
Sasha Neftin <[email protected]>
igc: Update I226_K device ID
Sasha Neftin <[email protected]>
igc: Remove phy->type checking
Sasha Neftin <[email protected]>
igc: Remove _I_PHY_ID checking
Greg Thelen <[email protected]>
Revert "drm/i915/opregion: check port number bounds for SWSCI display power state"
Willy Tarreau <[email protected]>
floppy: use a statically allocated error counter
Jens Axboe <[email protected]>
io_uring: always grab file table for deferred statx
Schspa Shi <[email protected]>
usb: gadget: fix race when gadget driver register via ioctl
-------------
Diffstat:
Documentation/arm64/silicon-errata.rst | 3 + Documentation/core-api/dma-attributes.rst | 8 - .../bindings/pinctrl/aspeed,ast2600-pinctrl.yaml | 2 +- Makefile | 4 +- arch/arm/boot/dts/aspeed-g6-pinctrl.dtsi | 9 +- arch/arm/kernel/entry-armv.S | 2 +- arch/arm/kernel/stacktrace.c | 10 +- arch/arm/mm/proc-v7-bugs.c | 1 + arch/arm64/kernel/cpu_errata.c | 2 + arch/arm64/kernel/mte.c | 3 + arch/arm64/kernel/paravirt.c | 29 +- arch/mips/lantiq/falcon/sysctrl.c | 2 + arch/mips/lantiq/xway/gptu.c | 2 + arch/mips/lantiq/xway/sysctrl.c | 46 ++-- arch/riscv/boot/dts/sifive/fu540-c000.dtsi | 2 +- arch/s390/pci/pci.c | 1 + arch/s390/pci/pci_bus.h | 3 +- arch/s390/pci/pci_clp.c | 9 +- arch/s390/pci/pci_event.c | 7 +- arch/x86/crypto/chacha-avx512vl-x86_64.S | 4 +- arch/x86/kvm/mmu/mmu.c | 10 +- arch/x86/um/shared/sysdep/syscalls_64.h | 5 +- drivers/block/drbd/drbd_main.c | 7 +- drivers/block/floppy.c | 20 +- drivers/clk/at91/clk-generated.c | 4 + drivers/crypto/qcom-rng.c | 1 + drivers/crypto/stm32/stm32-crc32.c | 4 +- drivers/gpio/gpio-mvebu.c | 3 + drivers/gpio/gpio-vf610.c | 8 +- drivers/gpu/drm/drm_dp_mst_topology.c | 1 + drivers/gpu/drm/i915/display/intel_opregion.c | 15 - drivers/i2c/busses/i2c-mt7621.c | 10 +- drivers/input/input.c | 19 ++ drivers/input/touchscreen/ili210x.c | 4 +- drivers/input/touchscreen/stmfts.c | 8 +- drivers/net/ethernet/aquantia/atlantic/aq_ring.c | 20 +- .../ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c | 7 + drivers/net/ethernet/broadcom/bcmsysport.c | 6 +- drivers/net/ethernet/cadence/macb_main.c | 2 +- drivers/net/ethernet/dec/tulip/tulip_core.c | 5 +- drivers/net/ethernet/intel/ice/ice_main.c | 7 +- drivers/net/ethernet/intel/igb/igb_main.c | 3 +- drivers/net/ethernet/intel/igc/igc_base.c | 10 +- drivers/net/ethernet/intel/igc/igc_hw.h | 1 + drivers/net/ethernet/intel/igc/igc_main.c | 18 +- drivers/net/ethernet/intel/igc/igc_phy.c | 6 +- drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 7 + drivers/net/ethernet/qlogic/qla3xxx.c | 3 +- drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c | 4 +- drivers/net/ipa/gsi.c | 6 +- drivers/net/vmxnet3/vmxnet3_drv.c | 6 + drivers/nvme/host/core.c | 1 + drivers/nvme/host/multipath.c | 25 +- drivers/nvme/host/nvme.h | 4 + drivers/nvme/host/pci.c | 5 +- drivers/pci/pci.c | 10 + drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c | 14 +- drivers/platform/chrome/cros_ec_debugfs.c | 12 +- drivers/rtc/class.c | 9 + drivers/rtc/rtc-mc146818-lib.c | 16 +- drivers/rtc/rtc-pcf2127.c | 3 +- drivers/rtc/rtc-sun6i.c | 14 +- drivers/scsi/qla2xxx/qla_target.c | 3 + drivers/usb/gadget/legacy/raw_gadget.c | 2 + drivers/vhost/net.c | 15 +- drivers/vhost/vdpa.c | 5 +- fs/afs/inode.c | 14 +- fs/gfs2/file.c | 4 +- fs/io_uring.c | 6 +- fs/ioctl.c | 2 +- fs/nilfs2/btnode.c | 23 +- fs/nilfs2/btnode.h | 1 + fs/nilfs2/btree.c | 27 +- fs/nilfs2/dat.c | 4 +- fs/nilfs2/gcinode.c | 7 +- fs/nilfs2/inode.c | 159 ++++++++++- fs/nilfs2/mdt.c | 43 ++- fs/nilfs2/mdt.h | 6 +- fs/nilfs2/nilfs.h | 16 +- fs/nilfs2/page.c | 7 +- fs/nilfs2/segment.c | 9 +- fs/nilfs2/super.c | 5 +- include/linux/ceph/osd_client.h | 3 + include/linux/dma-mapping.h | 8 - include/linux/mc146818rtc.h | 2 + include/net/ip.h | 1 + include/net/netns/xfrm.h | 3 + include/net/xfrm.h | 36 ++- include/uapi/linux/dma-buf.h | 4 +- include/uapi/linux/xfrm.h | 14 + kernel/dma/swiotlb.c | 12 +- kernel/events/core.c | 14 + kernel/module.c | 18 +- net/bridge/br_input.c | 7 + net/ceph/osd_client.c | 302 ++++++++------------- net/ipv4/route.c | 29 +- net/key/af_key.c | 6 +- net/mac80211/rx.c | 3 +- net/nfc/nci/data.c | 2 +- net/nfc/nci/hci.c | 4 +- net/sched/act_pedit.c | 4 + net/wireless/nl80211.c | 18 +- net/xfrm/xfrm_policy.c | 20 ++ net/xfrm/xfrm_user.c | 88 ++++++ security/selinux/nlmsgtab.c | 4 +- security/selinux/ss/hashtab.c | 3 +- sound/isa/wavefront/wavefront_synth.c | 3 +- sound/pci/hda/patch_realtek.c | 9 + sound/usb/quirks-table.h | 9 + tools/perf/arch/x86/util/perf_regs.c | 12 + tools/perf/bench/numa.c | 2 +- tools/testing/selftests/net/fcnal-test.sh | 12 + tools/virtio/Makefile | 3 +- 113 files changed, 1010 insertions(+), 495 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/97 usb: gadget: fix race when gadget driver register via ioctl
From: Schspa Shi <[email protected]>
commit 5f0b5f4d50fa0faa8c76ef9d42a42e8d43f98b44 upstream.
The usb_gadget_register_driver can be called multi time by to threads via USB_RAW_IOCTL_RUN ioctl syscall, which will lead to multiple registrations.
Call trace:
driver_register+0x220/0x3a0 drivers/base/driver.c:171
usb_gadget_register_driver_owner+0xfb/0x1e0
drivers/usb/gadget/udc/core.c:1546
raw_ioctl_run drivers/usb/gadget/legacy/raw_gadget.c:513 [inline]
raw_ioctl+0x1883/0x2730 drivers/usb/gadget/legacy/raw_gadget.c:1220
ioctl USB_RAW_IOCTL_RUNThis routine allows two processes to register the same driver instance via ioctl syscall. which lead to a race condition.
Please refer to the following scenarios.
T1 T2
------------------------------------------------------------------usb_gadget_register_driver_owner
driver_register driver_register
driver_find driver_find
bus_add_driver bus_add_driver
priv alloced <context switch>
drv->p = priv;
<schedule out>
kobject_init_and_add // refcount = 1;
//couldn't find an available UDC or it's busy
<context switch>
priv alloced
drv->priv = priv;
kobject_init_and_add
---> refcount = 1 <------
// register success
<context switch>
===================== another ioctl/process ======================
driver_register
driver_find
k = kset_find_obj()
---> refcount = 2 <------
<context out>
driver_unregister
// drv->p become T2's priv
---> refcount = 1 <------
<context switch>
kobject_put(k)
---> refcount = 0 <------
return priv->driver;
--------UAF here----------There will be UAF in this scenario.
We can fix it by adding a new STATE_DEV_REGISTERING device state to avoid double register.
--- drivers/usb/gadget/legacy/raw_gadget.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/usb/gadget/legacy/raw_gadget.c +2 -0
@@ -144,6 +144,7 @@ enum dev_state {STATE_DEV_INVALID =0 ,STATE_DEV_OPENED ,STATE_DEV_INITIALIZED , +STATE_DEV_REGISTERING ,STATE_DEV_RUNNING ,STATE_DEV_CLOSED ,STATE_DEV_FAILED
@@ -507,6 +508,7 @@ static int raw_ioctl_run(struct raw_dev ret = -EINVAL ; goto out_unlock; } + dev->state =STATE_DEV_REGISTERING ;spin_unlock_irqrestore (&dev->lock, flags); ret =usb_gadget_probe_driver (&dev->driver);
Greg Kroah-Hartman
maintainerPATCH 2/97 io_uring: always grab file table for deferred statx
In reply to Greg Kroah-HartmanFrom: Jens Axboe <[email protected]>
Lee reports that there's a use-after-free of the process file table. There's an assumption that we don't need the file table for some variants of statx invocation, but that turns out to be false and we end up with not grabbing a reference for the request even if the deferred execution uses it.
Get rid of the REQ_F_NO_FILE_TABLE optimization for statx, and always grab that reference.
This issues doesn't exist upstream since the native workers got introduced with 5.12.
--- fs/io_uring.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)
fs/io_uring.c +1 -5
@@ -4252,12 +4252,8 @@ static int io_statx(struct io_kiocb *reqstruct io_statx *ctx = &req->statx;int ret; -if (force_nonblock) { -/* only need file table for an actual valid fd */ -if (ctx->dfd ==-1 || ctx->dfd ==AT_FDCWD ) - req->flags |=REQ_F_NO_FILE_TABLE ; +if (force_nonblock)return -EAGAIN ; - } ret =do_statx (ctx->dfd, ctx->filename, ctx->flags, ctx->mask, ctx->buffer);
Greg Kroah-Hartman
maintainerPATCH 3/97 floppy: use a statically allocated error counter
In reply to Greg Kroah-HartmanFrom: Willy Tarreau <[email protected]>
commit f71f01394f742fc4558b3f9f4c7ef4c4cf3b07c8 upstream.
Interrupt handler bad_flp_intr() may cause a UAF on the recently freed request just to increment the error count. There's no point keeping that one in the request anyway, and since the interrupt handler uses a static pointer to the error which cannot be kept in sync with the pending request, better make it use a static error counter that's reset for each new request. This reset now happens when entering redo_fd_request() for a new request via set_next_request().
One initial concern about a single error counter was that errors on one floppy drive could be reported on another one, but this problem is not real given that the driver uses a single drive at a time, as that PC-compatible controllers also have this limitation by using shared signals. As such the error count is always for the "current" drive.
--- drivers/block/floppy.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-)
drivers/block/floppy.c +9 -11
@@ -509,8 +509,8 @@ static unsigned long fdc_busy;static DECLARE_WAIT_QUEUE_HEAD (fdc_wait);static DECLARE_WAIT_QUEUE_HEAD (command_done); -/* Errors during formatting are counted here. */ -static int format_errors; +/* errors encountered on the current (or last) request */ +static int floppy_errors;/* Format request descriptor. */ static struct format_descr format_req;
@@ -530,7 +530,6 @@ static struct format_descr format_req;static char *floppy_track_buffer;static int max_buffer_sectors; -static int *errors;typedef void (*done_f )(int ); static const struct cont_t { void (*interrupt)(void);
@@ -1455,7 +1454,7 @@ static int interpret_errors(void)if (drive_params[current_drive].flags &FTD_MSG )DPRINT ("Over/Underrun - retrying\n" ); bad =0 ; - }else if (*errors >= drive_params[current_drive].max_errors.reporting) { + }else if (floppy_errors >= drive_params[current_drive].max_errors.reporting) {print_errors (); }if (reply_buffer[ST2 ] &ST2_WC || reply_buffer[ST2 ] &ST2_BC )
@@ -2095,7 +2094,7 @@ static void bad_flp_intr(void)if (!next_valid_format (current_drive))return ; } - err_count = ++(*errors); + err_count = ++floppy_errors;INFBOUND (write_errors[current_drive].badness, err_count);if (err_count > drive_params[current_drive].max_errors.abort) cont->done (0 );
@@ -2240,9 +2239,8 @@ static int do_format(int drive, struct freturn -EINVAL ; } format_req = *tmp_format_req; - format_errors =0 ; cont = &format_cont; - errors = &format_errors; + floppy_errors =0 ; ret =wait_til_done (redo_format, true);if (ret == -EINTR )return -EINTR ;
@@ -2721,7 +2719,7 @@ static int make_raw_rw_request(void)*/ if (!direct || (indirect *2 > direct *3 && - *errors < drive_params[current_drive].max_errors.read_track && + floppy_errors < drive_params[current_drive].max_errors.read_track && ((!probing || (drive_params[current_drive].read_track & (1 << drive_state[current_drive].probed_format)))))) { max_size =blk_rq_sectors (current_req);
@@ -2846,10 +2844,11 @@ static int set_next_request(void) current_req = list_first_entry_or_null(&floppy_reqs, struct request, queuelist);if (current_req) { - current_req->error_count =0 ; + floppy_errors =0 ;list_del_init (¤t_req->queuelist); +return 1 ; } -return current_req !=NULL ; +return 0 ; }/* Starts or continues processing request. Will automatically unlock the
@@ -2908,7 +2907,6 @@ do_request: _floppy = floppy_type + drive_params[current_drive].autodetect[drive_state[current_drive].probed_format]; }else probing =0 ; - errors = &(current_req->error_count); tmp =make_raw_rw_request ();if (tmp <2 ) {request_done (tmp);
Greg Kroah-Hartman
maintainerPATCH 4/97 Revert "drm/i915/opregion: check port number bounds for SWSCI display power state"
In reply to Greg Kroah-HartmanFrom: Greg Thelen <[email protected]>
This reverts commit b84857c06ef9e72d09fadafdbb3ce9af64af954f.
5.10 stable contains 2 identical commits:
1. commit eb7bf11e8ef1 ("drm/i915/opregion: check port number bounds for SWSCI display power state")
2. commit b84857c06ef9 ("drm/i915/opregion: check port number bounds for SWSCI display power state")
Both commits add separate checks for the same condition. Revert the 2nd redundant check to match upstream, which only has one check.
--- drivers/gpu/drm/i915/display/intel_opregion.c | 15 --------------- 1 file changed, 15 deletions(-)
drivers/gpu/drm/i915/display/intel_opregion.c +0 -15
@@ -376,21 +376,6 @@ int intel_opregion_notify_encoder(structreturn -EINVAL ; } -/* -* The port numbering and mapping here is bizarre. The now-obsolete -* swsci spec supports ports numbered [0..4]. Port E is handled as a -* special case, but port F and beyond are not. The functionality is -* supposed to be obsolete for new platforms. Just bail out if the port -* number is out of bounds after mapping. -*/ -if (port >4 ) { -drm_dbg_kms (&dev_priv->drm, -"[ENCODER:%d:%s] port %c (index %u) out of bounds for display power state notification\n" , - intel_encoder->base.base.id, intel_encoder->base.name, -port_name (intel_encoder->port), port); -return -EINVAL ; - } -if (!enable) parm |=4 <<8 ;
Greg Kroah-Hartman
maintainerPATCH 5/97 igc: Remove _I_PHY_ID checking
In reply to Greg Kroah-HartmanFrom: Sasha Neftin <[email protected]>
commit 7c496de538eebd8212dc2a3c9a468386b264d0d4 upstream.
i225 devices have only one PHY vendor. There is no point checking _I_PHY_ID during the link establishment and auto-negotiation process. This patch comes to clean up these pointless checkings.
--- drivers/net/ethernet/intel/igc/igc_base.c | 10 +--------- drivers/net/ethernet/intel/igc/igc_main.c | 3 +-- drivers/net/ethernet/intel/igc/igc_phy.c | 6 ++---- 3 files changed, 4 insertions(+), 15 deletions(-)
drivers/net/ethernet/intel/igc/igc_base.c +1 -9
@@ -187,15 +187,7 @@ static s32 igc_init_phy_params_base(struigc_check_for_copper_link (hw); -/* Verify phy id and set remaining function pointers */ -switch (phy->id) { -case I225_I_PHY_ID : - phy->type = igc_phy_i225; -break ; -default : - ret_val = -IGC_ERR_PHY ; - goto out; - } + phy->type = igc_phy_i225; out:return ret_val;
drivers/net/ethernet/intel/igc/igc_main.c +1 -2
@@ -4189,8 +4189,7 @@ bool igc_has_link(struct igc_adapter *adbreak ; } -if (hw->mac.type == igc_i225 && - hw->phy.id ==I225_I_PHY_ID ) { +if (hw->mac.type == igc_i225) {if (!netif_carrier_ok (adapter->netdev)) { adapter->flags &= ~IGC_FLAG_NEED_LINK_UPDATE ; }else if (!(adapter->flags &IGC_FLAG_NEED_LINK_UPDATE )) {
drivers/net/ethernet/intel/igc/igc_phy.c +2 -4
@@ -249,8 +249,7 @@ static s32 igc_phy_setup_autoneg(structreturn ret_val; } -if ((phy->autoneg_mask &ADVERTISE_2500_FULL ) && - hw->phy.id ==I225_I_PHY_ID ) { +if (phy->autoneg_mask &ADVERTISE_2500_FULL ) {/* Read the MULTI GBT AN Control Register - reg 7.32 */ ret_val = phy->ops.read_reg(hw, (STANDARD_AN_REG_MASK << MMD_DEVADDR_SHIFT) |
@@ -390,8 +389,7 @@ static s32 igc_phy_setup_autoneg(struct ret_val = phy->ops.write_reg (hw,PHY_1000T_CTRL , mii_1000t_ctrl_reg); -if ((phy->autoneg_mask &ADVERTISE_2500_FULL ) && - hw->phy.id ==I225_I_PHY_ID ) +if (phy->autoneg_mask &ADVERTISE_2500_FULL ) ret_val = phy->ops.write_reg(hw, (STANDARD_AN_REG_MASK << MMD_DEVADDR_SHIFT) |
Greg Kroah-Hartman
maintainerPATCH 6/97 igc: Remove phy->type checking
In reply to Greg Kroah-HartmanFrom: Sasha Neftin <[email protected]>
commit 47bca7de6a4fb8dcb564c7ca14d885c91ed19e03 upstream.
i225 devices have only one phy->type: copper. There is no point checking phy->type during the igc_has_link method from the watchdog that invoked every 2 seconds.
This patch comes to clean up these pointless checkings.
--- drivers/net/ethernet/intel/igc/igc_main.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-)
drivers/net/ethernet/intel/igc/igc_main.c +4 -11
@@ -4177,17 +4177,10 @@ bool igc_has_link(struct igc_adapter *ad* false until the igc_check_for_link establishes link * for copper adapters ONLY */ -switch (hw->phy.media_type) { -case igc_media_type_copper: -if (!hw->mac.get_link_status) -return true; - hw->mac.ops.check_for_link (hw); - link_active = !hw->mac.get_link_status; -break ; -default : -case igc_media_type_unknown: -break ; - } +if (!hw->mac.get_link_status) +return true; + hw->mac.ops.check_for_link (hw); + link_active = !hw->mac.get_link_status;if (hw->mac.type == igc_i225) {if (!netif_carrier_ok (adapter->netdev)) {
Greg Kroah-Hartman
maintainerPATCH 7/97 igc: Update I226_K device ID
In reply to Greg Kroah-HartmanFrom: Sasha Neftin <[email protected]>
commit 79cc8322b6d82747cb63ea464146c0bf5b5a6bc1 upstream.
The device ID for I226_K was incorrectly assigned, update the device ID to the correct one.
--- drivers/net/ethernet/intel/igc/igc_hw.h | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/intel/igc/igc_hw.h +1 -0
@@ -22,6 +22,7 @@#define IGC_DEV_ID_I220_V 0x15F7#define IGC_DEV_ID_I225_K 0x3100#define IGC_DEV_ID_I225_K2 0x3101 +#define IGC_DEV_ID_I226_K 0x3102#define IGC_DEV_ID_I225_LMVP 0x5502#define IGC_DEV_ID_I225_IT 0x0D9F#define IGC_DEV_ID_I226_LM 0x125B
Re: [PATCH 5.10 07/97] igc: Update I226_K device ID
Hi!
Quoted 8 lines
From: Sasha Neftin <[email protected]>
commit
79cc8322b6d82747cb63ea464146c0bf5b5a6bc1upstream.The device ID for
I226_Kwas incorrectly assigned, update the device ID to the correct one.Fixes bfa5e98c9de4 ("igc: Add new device ID")
I don't see updating the ID, I see adding an unused define. I don't think this is suitable for stable. Same thing goes for previous two patches, they don't really fix anything.
5106 O Greg Kroah ├─>[PATCH 5.10 05/97] igc: Remove _I_PHY_ID checking 5107 O Greg Kroah ├─>[PATCH 5.10 06/97] igc: Remove phy->type checking 5108 Greg Kroah ├─>[PATCH 5.10 07/97] igc: Update I226_K device ID
Best regards,
Pavel
Quoted 10 lines
+++
b/drivers/net/ethernet/intel/igc/igc_hw.hdrivers/net/ethernet/intel/igc/igc_hw.h +1
-0@@ -22,6 +22,7 @@#define IGC_DEV_ID_I220_V 0x15F7#define IGC_DEV_ID_I225_K 0x3100#define IGC_DEV_ID_I225_K2 0x3101 +#define IGC_DEV_ID_I226_K 0x3102#define IGC_DEV_ID_I225_LMVP 0x5502#define IGC_DEV_ID_I225_IT 0x0D9F#define IGC_DEV_ID_I226_LM 0x125B
Signature · 1 line
People of Russia, stop Putin before his war on Ukraine escalates.
Re: [PATCH 5.10 07/97] igc: Update I226_K device ID
Quoted 6 lines · Pavel Machek
Hi!
Quoted 4 lines
From: Sasha Neftin <[email protected]>
commit
79cc8322b6d82747cb63ea464146c0bf5b5a6bc1upstream.
Quoted 8 lines
Quoted 4 lines
The device ID for
I226_Kwas incorrectly assigned, update the device ID to the correct one.Fixes bfa5e98c9de4 ("igc: Add new device ID")I don't see updating the ID, I see adding an unused define. I don't think this is suitable for stable. Same thing goes for previous two patches, they don't really fix anything.
Pavel,
1. Commit bfa5e98c9de4 added new device ID for i225/226 parts. Commit 79cc8322b6d8 just fixed number for IGC_DEV_ID_I226_K. This number comes from NVM and PCIe configuration space initialized with this number. (In case you will use wrong number SW won't work)
2. Regards PHY_ID: here is two things:
i225/i226 parts have only one PHY (there is no option for another PHY)
some unit upon specific power up condition could wrong represent PHY ID and we do not want block SW.
3. phy->type - just clean. you indeed can skip it.
Quoted 8 lines
5106 O Greg Kroah ├─>[PATCH 5.10 05/97] igc: Remove _I_PHY_ID checking 5107 O Greg Kroah ├─>[PATCH 5.10 06/97] igc: Remove phy->type checking 5108 Greg Kroah ├─>[PATCH 5.10 07/97] igc: Update I226_K device IDBest regards,
Pavel
Quoted 11 lines
drivers/net/ethernet/intel/igc/igc_hw.h line 28
Quoted 10 lines
+++
b/drivers/net/ethernet/intel/igc/igc_hw.hdrivers/net/ethernet/intel/igc/igc_hw.h +1
-0@@ -22,6 +22,7 @@#define IGC_DEV_ID_I220_V 0x15F7#define IGC_DEV_ID_I225_K 0x3100#define IGC_DEV_ID_I225_K2 0x3101 +#define IGC_DEV_ID_I226_K 0x3102#define IGC_DEV_ID_I225_LMVP 0x5502#define IGC_DEV_ID_I225_IT 0x0D9F#define IGC_DEV_ID_I226_LM 0x125B
Thanks, Sasha
Greg Kroah-Hartman
maintainerPATCH 8/97 rtc: fix use-after-free on device removal
In reply to Greg Kroah-HartmanFrom: Vincent Whitchurch <[email protected]>
[ Upstream commit c8fa17d9f08a448184f03d352145099b5beb618e ]
If the irqwork is still scheduled or running while the RTC device is removed, a use-after-free occurs in rtc_timer_do_work(). Cleanup the timerqueue and ensure the work is stopped to fix this.
BUG: KASAN: use-after-free in mutex_lock+0x94/0x110 Write of size 8 at addr ffffff801d846338 by task kworker/3:1/41 Workqueue: events rtc_timer_do_work Call trace: mutex_lock+0x94/0x110 rtc_timer_do_work+0xec/0x630 process_one_work+0x5fc/0x1344 ... Allocated by task 551: kmem_cache_alloc_trace+0x384/0x6e0 devm_rtc_allocate_device+0xf0/0x574 devm_rtc_device_register+0x2c/0x12c ... Freed by task 572: kfree+0x114/0x4d0 rtc_device_release+0x64/0x80 device_release+0x8c/0x1f4 kobject_put+0x1c4/0x4b0 put_device+0x20/0x30 devm_rtc_release_device+0x1c/0x30 devm_action_release+0x54/0x90 release_nodes+0x124/0x310 devres_release_group+0x170/0x240 i2c_device_remove+0xd8/0x314 ... Last potentially related work creation: insert_work+0x5c/0x330 queue_work_on+0xcc/0x154 rtc_set_time+0x188/0x5bc rtc_dev_ioctl+0x2ac/0xbd0 ...
--- drivers/rtc/class.c | 9 +++++++++ 1 file changed, 9 insertions(+)
drivers/rtc/class.c +9 -0
@@ -26,6 +26,15 @@ struct class *rtc_class;static void rtc_device_release (struct device *dev) {struct rtc_device *rtc =to_rtc_device (dev); +struct timerqueue_head *head = &rtc->timerqueue; +struct timerqueue_node *node; + +mutex_lock (&rtc->ops_lock); +while ((node =timerqueue_getnext (head))) +timerqueue_del (head, node); +mutex_unlock (&rtc->ops_lock); + +cancel_work_sync (&rtc->irqwork);ida_simple_remove (&rtc_ida, rtc->id);kfree (rtc);
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 9/97 rtc: pcf2127: fix bug when reading alarm registers
In reply to Greg Kroah-HartmanFrom: Hugo Villeneuve <[email protected]>
[ Upstream commit 73ce05302007eece23a6acb7dc124c92a2209087 ]
The first bug is that reading the 5 alarm registers results in a read operation of 20 bytes. The reason is because the destination buffer is defined as an array of "unsigned int", and we use the sizeof() operator on this array to define the bulk read count.
The second bug is that the read value is invalid, because we are indexing the destination buffer as integers (4 bytes), instead of indexing it as u8.
Changing the destination buffer type to u8 fixes both problems.
--- drivers/rtc/rtc-pcf2127.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/rtc/rtc-pcf2127.c +2 -1
@@ -366,7 +366,8 @@ static int pcf2127_watchdog_init(struct device *dev, struct pcf2127 *pcf2127)static int pcf2127_rtc_read_alarm (struct device *dev,struct rtc_wkalrm *alrm) {struct pcf2127 *pcf2127 =dev_get_drvdata (dev); -unsigned int buf[5 ], ctrl2; +u8 buf[5 ]; +unsigned int ctrl2;int ret; ret =regmap_read (pcf2127->regmap,PCF2127_REG_CTRL2 , &ctrl2);
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 10/97 um: Cleanup syscall_handler_t definition/cast, fix warning
In reply to Greg Kroah-HartmanFrom: David Gow <[email protected]>
[ Upstream commit f4f03f299a56ce4d73c5431e0327b3b6cb55ebb9 ]
The syscall_handler_t type for x86_64 was defined as 'long (*)(void)', but always cast to 'long (*)(long, long, long, long, long, long)' before use. This now triggers a warning (see below).
Define syscall_handler_t as the latter instead, and remove the cast. This simplifies the code, and fixes the warning.
Warning:
In file included from ../arch/um/include/asm/processor-generic.h:13
from ../arch/x86/um/asm/processor.h:41
from ../include/linux/rcupdate.h:30
from ../include/linux/rculist.h:11
from ../include/linux/pid.h:5
from ../include/linux/sched.h:14
from ../include/linux/ptrace.h:6
from ../arch/um/kernel/skas/syscall.c:7:../arch/um/kernel/skas/syscall.c: In function ‘handle_syscall’:../arch/x86/um/shared/sysdep/syscalls_64.h:18:11: warning: cast between incompatible function types from ‘long int (*)(void)’ to ‘long int (*)(long int, long int, long int, long int, long int, long int)’ [ -Wcast-function-type]
18 | (((long (*)(long, long, long, long, long, long)) \
| ^../arch/x86/um/asm/ptrace.h:36:62: note: in definition of macro ‘PT_REGS_SET_SYSCALL_RETURN’
36 | #define PT_REGS_SET_SYSCALL_RETURN(r, res) (PT_REGS_AX(r) = (res))
| ^~~../arch/um/kernel/skas/syscall.c:46:33: note: in expansion of macro ‘EXECUTE_SYSCALL’
46 | EXECUTE_SYSCALL(syscall, regs));
| ^~~~~~~~~~~~~~~--- arch/x86/um/shared/sysdep/syscalls_64.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
arch/x86/um/shared/sysdep/syscalls_64.h +2 -3
@@ -10,13 +10,12 @@#include <linux/msg.h> #include <linux/shm.h> -typedef long syscall_handler_t (void ); +typedef long syscall_handler_t (long ,long ,long ,long ,long ,long );extern syscall_handler_t *sys_call_table[];#define EXECUTE_SYSCALL (syscall, regs) \ - (((long (*)(long, long, long, long, long, long)) \ - (*sys_call_table[syscall]))(UPT_SYSCALL_ARG1(®s->regs), \ + (((*sys_call_table[syscall]))(UPT_SYSCALL_ARG1(®s->regs), \ UPT_SYSCALL_ARG2(®s->regs), \ UPT_SYSCALL_ARG3(®s->regs), \ UPT_SYSCALL_ARG4(®s->regs), \
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 11/97 Input: add bounds checking to input_set_capability()
In reply to Greg Kroah-HartmanFrom: Jeff LaBundy <[email protected]>
[ Upstream commit 409353cbe9fe48f6bc196114c442b1cff05a39bc ]
Update input_set_capability() to prevent kernel panic in case the event code exceeds the bitmap for the given event type.
--- drivers/input/input.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)
drivers/input/input.c +19 -0
@@ -47,6 +47,17 @@ static DEFINE_MUTEX(input_mutex);static const struct input_value input_value_sync = {EV_SYN ,SYN_REPORT ,1 }; +static const unsigned int input_max_code[EV_CNT ] = { + [EV_KEY ] =KEY_MAX , + [EV_REL ] =REL_MAX , + [EV_ABS ] =ABS_MAX , + [EV_MSC ] =MSC_MAX , + [EV_SW ] =SW_MAX , + [EV_LED ] =LED_MAX , + [EV_SND ] =SND_MAX , + [EV_FF ] =FF_MAX , +}; +static inline int is_event_supported (unsigned int code,unsigned long *bm,unsigned int max) {
@@ -1976,6 +1987,14 @@ EXPORT_SYMBOL(input_get_timestamp);*/ void input_set_capability (struct input_dev *dev,unsigned int type,unsigned int code) { +if (type <EV_CNT && input_max_code[type] && + code > input_max_code[type]) { +pr_err ("%s: invalid code %u for type %u\n" , __func__, code, + type); +dump_stack (); +return ; + } +switch (type) {case EV_KEY :__set_bit (code, dev->keybit);
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 12/97 Input: stmfts - fix reference leak in stmfts_input_open
In reply to Greg Kroah-HartmanFrom: Zheng Yongjun <[email protected]>
[ Upstream commit 26623eea0da3476446909af96c980768df07bbd9 ]
pm_runtime_get_sync() will increment pm usage counter even it failed. Forgetting to call pm_runtime_put_noidle will result in reference leak in stmfts_input_open, so we should fix it.
--- drivers/input/touchscreen/stmfts.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
drivers/input/touchscreen/stmfts.c +5 -3
@@ -339,11 +339,11 @@ static int stmfts_input_open(struct input_dev *dev) err =pm_runtime_get_sync (&sdata->client->dev);if (err <0 ) -return err; + goto out; err =i2c_smbus_write_byte (sdata->client,STMFTS_MS_MT_SENSE_ON );if (err) -return err; + goto out;mutex_lock (&sdata->mutex); sdata->running = true;
@@ -366,7 +366,9 @@ static int stmfts_input_open(struct input_dev *dev) "failed to enable touchkey\n"); } -return 0 ; +out: +pm_runtime_put_noidle (&sdata->client->dev); +return err; }static void stmfts_input_close (struct input_dev *dev)
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 13/97 nvme-pci: add quirks for Samsung X5 SSDs
In reply to Greg Kroah-HartmanFrom: Monish Kumar R <[email protected]>
[ Upstream commit bc360b0b1611566e1bd47384daf49af6a1c51837 ]
Add quirks to not fail the initialization and to have quick resume latency after cold/warm reboot.
--- drivers/nvme/host/pci.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/nvme/host/pci.c +4 -1
@@ -3265,7 +3265,10 @@ static const struct pci_device_id nvme_id_table[] = { NVME_QUIRK_128_BYTES_SQES | NVME_QUIRK_SHARED_TAGS | NVME_QUIRK_SKIP_CID_GEN }, - + { PCI_DEVICE(0x144d, 0xa808), /* Samsung X5 */ + .driver_data =NVME_QUIRK_DELAY_BEFORE_CHK_RDY | +NVME_QUIRK_NO_DEEPEST_PS | + NVME_QUIRK_IGNORE_DEV_SUBNQN, }, { PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_EXPRESS, 0xffffff) }, { 0, } };
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 14/97 gfs2: Disable page faults during lockless buffered reads
In reply to Greg Kroah-HartmanFrom: Andreas Gruenbacher <[email protected]>
[ Upstream commit 52f3f033a5dbd023307520af1ff551cadfd7f037 ]
During lockless buffered reads, filemap_read() holds page cache page references while trying to copy data to the user-space buffer. The calling process isn't holding the inode glock, but the page references it holds prevent those pages from being removed from the page cache, and that prevents the underlying inode glock from being moved to another node. Thus, we can end up in the same kinds of distributed deadlock situations as with normal (non-lockless) buffered reads.
Fix that by disabling page faults during lockless reads as well.
--- fs/gfs2/file.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
fs/gfs2/file.c +3 -1
@@ -858,14 +858,16 @@ static ssize_t gfs2_file_read_iter(struct kiocb *iocb, struct iov_iter *to)return ret; iocb->ki_flags &= ~IOCB_DIRECT ; } +pagefault_disable (); iocb->ki_flags |=IOCB_NOIO ; ret =generic_file_read_iter (iocb, to); iocb->ki_flags &= ~IOCB_NOIO ; +pagefault_enable ();if (ret >=0 ) {if (!iov_iter_count (to))return ret; written = ret; - }else { + }else if (ret != -EFAULT ) {if (ret != -EAGAIN )return ret;if (iocb->ki_flags &IOCB_NOWAIT )
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 15/97 rtc: sun6i: Fix time overflow handling
In reply to Greg Kroah-HartmanFrom: Andre Przywara <[email protected]>
[ Upstream commit 9f6cd82eca7e91a0d0311242a87c6aa3c2737968 ]
Using "unsigned long" for UNIX timestamps is never a good idea, and comparing the value of such a variable against U32_MAX does not do anything useful on 32-bit systems.
Use the proper time64_t type when dealing with timestamps, and avoid cutting down the time range unnecessarily. This also fixes the flawed check for the alarm time being too far into the future.
The check for this condition is actually somewhat theoretical, as the RTC counts till 2033 only anyways, and 2^32 seconds from now is not before the year 2157 - at which point I hope nobody will be using this hardware anymore.
--- drivers/rtc/rtc-sun6i.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-)
drivers/rtc/rtc-sun6i.c +5 -9
@@ -138,7 +138,7 @@ struct sun6i_rtc_dev {const struct sun6i_rtc_clk_data *data;void __iomem *base;int irq; -unsigned long alarm; +time64_t alarm;struct clk_hw hw;struct clk_hw *int_osc;
@@ -510,10 +510,8 @@ static int sun6i_rtc_setalarm(struct device *dev, struct rtc_wkalrm *wkalrm)struct sun6i_rtc_dev *chip =dev_get_drvdata (dev);struct rtc_time *alrm_tm = &wkalrm->time;struct rtc_time tm_now; -unsigned long time_now =0 ; -unsigned long time_set =0 ; -unsigned long time_gap =0 ; -int ret =0 ; +time64_t time_now, time_set; +int ret; ret =sun6i_rtc_gettime (dev, &tm_now);if (ret <0 ) {
@@ -528,9 +526,7 @@ static int sun6i_rtc_setalarm(struct device *dev, struct rtc_wkalrm *wkalrm)return -EINVAL ; } - time_gap = time_set - time_now; - -if (time_gap >U32_MAX ) { +if ((time_set - time_now) >U32_MAX ) {dev_err (dev,"Date too far in the future\n" );return -EINVAL ; }
@@ -539,7 +535,7 @@ static int sun6i_rtc_setalarm(struct device *dev, struct rtc_wkalrm *wkalrm)writel (0 , chip->base +SUN6I_ALRM_COUNTER );usleep_range (100 ,300 ); -writel (time_gap, chip->base +SUN6I_ALRM_COUNTER ); +writel (time_set - time_now, chip->base +SUN6I_ALRM_COUNTER ); chip->alarm = time_set;sun6i_rtc_setaie (wkalrm->enabled, chip);
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 16/97 crypto: stm32 - fix reference leak in stm32_crc_remove
In reply to Greg Kroah-HartmanFrom: Zheng Yongjun <[email protected]>
[ Upstream commit e9a36feecee0ee5845f2e0656f50f9942dd0bed3 ]
pm_runtime_get_sync() will increment pm usage counter even it failed. Forgetting to call pm_runtime_put_noidle will result in reference leak in stm32_crc_remove, so we should fix it.
--- drivers/crypto/stm32/stm32-crc32.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/crypto/stm32/stm32-crc32.c +3 -1
@@ -384,8 +384,10 @@ static int stm32_crc_remove(struct platform_device *pdev)struct stm32_crc *crc =platform_get_drvdata (pdev);int ret =pm_runtime_get_sync (crc->dev); -if (ret <0 ) +if (ret <0 ) { +pm_runtime_put_noidle (crc->dev);return ret; + }spin_lock (&crc_list.lock);list_del (&crc->list);
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 17/97 crypto: x86/chacha20 - Avoid spurious jumps to other functions
In reply to Greg Kroah-HartmanFrom: Peter Zijlstra <[email protected]>
[ Upstream commit 4327d168515fd8b5b92fa1efdf1d219fb6514460 ]
The chacha_Nblock_xor_avx512vl() functions all have their own, identical, .LdoneN label, however in one particular spot {2,4} jump to the 8 version instead of their own. Resulting in:
arch/x86/crypto/chacha-x86_64.o: warning: objtool: chacha_2block_xor_avx512vl() falls through to next function chacha_8block_xor_avx512vl() arch/x86/crypto/chacha-x86_64.o: warning: objtool: chacha_4block_xor_avx512vl() falls through to next function chacha_8block_xor_avx512vl()
Make each function consistently use its own done label.
--- arch/x86/crypto/chacha-avx512vl-x86_64.S | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/x86/crypto/chacha-avx512vl-x86_64.S +2 -2
@@ -172,7 +172,7 @@ SYM_FUNC_START(chacha_2block_xor_avx512vl) # xor remaining bytes from partial register into output mov %rcx,%rax and $0xf,%rcx - jz .Ldone8 + jz .Ldone2 mov %rax,%r9 and $~0xf,%r9
@@ -438,7 +438,7 @@ SYM_FUNC_START(chacha_4block_xor_avx512vl) # xor remaining bytes from partial register into output mov %rcx,%rax and $0xf,%rcx - jz .Ldone8 + jz .Ldone4 mov %rax,%r9 and $~0xf,%r9
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 18/97 ALSA: hda/realtek: Enable headset mic on Lenovo P360
In reply to Greg Kroah-HartmanFrom: Kai-Heng Feng <[email protected]>
[ Upstream commit 5a8738571747c1e275a40b69a608657603867b7e ]
Lenovo P360 is another platform equipped with ALC897, and it needs ALC897_FIXUP_HEADSET_MIC_PIN quirk to make its headset mic work.
--- sound/pci/hda/patch_realtek.c | 1 + 1 file changed, 1 insertion(+)
sound/pci/hda/patch_realtek.c +1 -0
@@ -10876,6 +10876,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {SND_PCI_QUIRK (0x144d ,0xc051 ,"Samsung R720" ,ALC662_FIXUP_IDEAPAD ),SND_PCI_QUIRK (0x14cd ,0x5003 ,"USI" ,ALC662_FIXUP_USI_HEADSET_MODE ),SND_PCI_QUIRK (0x17aa ,0x1036 ,"Lenovo P520" ,ALC662_FIXUP_LENOVO_MULTI_CODECS ), +SND_PCI_QUIRK (0x17aa ,0x1057 ,"Lenovo P360" ,ALC897_FIXUP_HEADSET_MIC_PIN ),SND_PCI_QUIRK (0x17aa ,0x32ca ,"Lenovo ThinkCentre M80" ,ALC897_FIXUP_HEADSET_MIC_PIN ),SND_PCI_QUIRK (0x17aa ,0x32cb ,"Lenovo ThinkCentre M70" ,ALC897_FIXUP_HEADSET_MIC_PIN ), SND_PCI_QUIRK(0x17aa, 0x32cf, "Lenovo ThinkCentre M950", ALC897_FIXUP_HEADSET_MIC_PIN),
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 19/97 s390/pci: improve zpci_dev reference counting
In reply to Greg Kroah-HartmanFrom: Niklas Schnelle <[email protected]>
[ Upstream commit c122383d221dfa2f41cfe5e672540595de986fde ]
Currently zpci_dev uses kref based reference counting but only accounts for one original reference plus one reference from an added pci_dev to its underlying zpci_dev. Counting just the original reference worked until the pci_dev reference was added in commit 2a671f77ee49 ("s390/pci:
fix use after free of zpci_dev") because once a zpci_dev goes away, i.e. enters the reserved state, it would immediately get released. However with the pci_dev reference this is no longer the case and the zpci_dev may still appear in multiple availability events indicating that it was reserved. This was solved by detecting when the zpci_dev is already on its way out but still hanging around. This has however shown some light on how unusual our zpci_dev reference counting is.
Improve upon this by modelling zpci_dev reference counting on pci_dev. Analogous to pci_get_slot() increment the reference count in get_zdev_by_fid(). Thus all users of get_zdev_by_fid() must drop the reference once they are done with the zpci_dev.
Similar to pci_scan_single_device(), zpci_create_device() returns the device with an initial count of 1 and the device added to the zpci_list (analogous to the PCI bus' device_list). In turn users of zpci_create_device() must only drop the reference once the device is gone from the point of view of the zPCI subsystem, it might still be referenced by the common PCI subsystem though.
--- arch/s390/pci/pci.c | 1 + arch/s390/pci/pci_bus.h | 3 ++- arch/s390/pci/pci_clp.c | 9 +++++++-- arch/s390/pci/pci_event.c | 7 ++++++- 4 files changed, 16 insertions(+), 4 deletions(-)
arch/s390/pci/pci.c +1 -0
@@ -69,6 +69,7 @@ struct zpci_dev *get_zdev_by_fid(u32 fid)list_for_each_entry (tmp, &zpci_list, entry) {if (tmp->fid == fid) { zdev = tmp; +zpci_zdev_get (zdev);break ; } }
arch/s390/pci/pci_bus.h +2 -1
@@ -13,7 +13,8 @@ void zpci_bus_device_unregister(struct zpci_dev *zdev);void zpci_release_device (struct kref *kref);static inline void zpci_zdev_put (struct zpci_dev *zdev) { -kref_put (&zdev->kref, zpci_release_device); +if (zdev) +kref_put (&zdev->kref, zpci_release_device); }static inline void zpci_zdev_get (struct zpci_dev *zdev)
arch/s390/pci/pci_clp.c +7 -2
@@ -22,6 +22,8 @@#include <asm/clp.h> #include <uapi/asm/clp.h> +#include "pci_bus.h" +bool zpci_unique_uid;void update_uid_checking (bool new)
@@ -372,8 +374,11 @@ static void __clp_add(struct clp_fh_list_entry *entry, void *data)return ; zdev =get_zdev_by_fid (entry->fid); -if (!zdev) -zpci_create_device (entry->fid, entry->fh, entry->config_state); +if (zdev) { +zpci_zdev_put (zdev); +return ; + } +zpci_create_device (entry->fid, entry->fh, entry->config_state); }int clp_scan_pci_devices (void )
arch/s390/pci/pci_event.c +6 -1
@@ -61,10 +61,12 @@ static void __zpci_event_error(struct zpci_ccdf_err *ccdf) pdev ? pci_name(pdev) : "n/a", ccdf->pec, ccdf->fid);if (!pdev) -return ; + goto no_pdev; pdev->error_state = pci_channel_io_perm_failure;pci_dev_put (pdev); +no_pdev: +zpci_zdev_put (zdev); }void zpci_event_error (void *data)
@@ -76,6 +78,7 @@ void zpci_event_error(void *data)static void __zpci_event_availability (struct zpci_ccdf_avail *ccdf) {struct zpci_dev *zdev =get_zdev_by_fid (ccdf->fid); +bool existing_zdev = !!zdev;enum zpci_state state;struct pci_dev *pdev;int ret;
@@ -161,6 +164,8 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)default :break ; } +if (existing_zdev) +zpci_zdev_put (zdev); }void zpci_event_availability (void *data)
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 20/97 vhost_vdpa: dont setup irq offloading when irq_num < 0
In reply to Greg Kroah-HartmanFrom: Zhu Lingshan <[email protected]>
[ Upstream commit cce0ab2b2a39072d81f98017f7b076f3410ef740 ]
When irq number is negative(e.g., -EINVAL), the virtqueue may be disabled or the virtqueues are sharing a device irq. In such case, we should not setup irq offloading for a virtqueue.
--- drivers/vhost/vdpa.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/vhost/vdpa.c +4 -1
@@ -97,8 +97,11 @@ static void vhost_vdpa_setup_vq_irq(struct vhost_vdpa *v, u16 qid)return ; irq = ops->get_vq_irq (vdpa, qid); +if (irq <0 ) +return ; +irq_bypass_unregister_producer (&vq->call_ctx.producer); -if (!vq->call_ctx.ctx || irq <0 ) +if (!vq->call_ctx.ctx)return ; vq->call_ctx.producer.token = vq->call_ctx.ctx;
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 21/97 tools/virtio: compile with -pthread
In reply to Greg Kroah-HartmanFrom: Michael S. Tsirkin <[email protected]>
[ Upstream commit f03560a57c1f60db6ac23ffd9714e1c69e2f95c7 ]
When using pthreads, one has to compile and link with -lpthread, otherwise e.g. glibc is not guaranteed to be reentrant.
This replaces -lpthread.
--- tools/virtio/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
tools/virtio/Makefile +2 -1
@@ -5,7 +5,8 @@ virtio_test: virtio_ring.o virtio_test.o vringh_test: vringh_test.o vringh.o virtio_ring.o CFLAGS += -g -O2 -Werror -Wno-maybe-uninitialized -Wall -I. -I../include/ -I ../../usr/include/ -Wno-pointer-sign -fno-strict-overflow -fno-strict-aliasing -fno-common -MMD -U_FORTIFY_SOURCE -include ../../include/linux/kconfig.h -LDFLAGS += -lpthread +CFLAGS += -pthread +LDFLAGS += -pthread vpath %.c ../../drivers/virtio ../../drivers/vhost mod: ${MAKE} -C `pwd`/../.. M=`pwd`/vhost_test V=${V}
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 22/97 nvme-multipath: fix hang when disk goes live over reconnect
In reply to Greg Kroah-HartmanFrom: Anton Eidelman <[email protected]>
[ Upstream commit a4a6f3c8f61c3cfbda4998ad94596059ad7e4332 ]
nvme_mpath_init_identify() invoked from nvme_init_identify() fetches a fresh ANA log from the ctrl. This is essential to have an up to date path states for both existing namespaces and for those scan_work may discover once the ctrl is up.
This happens in the following cases:
1) A new ctrl is being connected.
2) An existing ctrl is successfully reconnected.
3) An existing ctrl is being reset.
While in (1) ctrl->namespaces is empty, (2 & 3) may have namespaces, and nvme_read_ana_log() may call nvme_update_ns_ana_state().
This result in a hang when the ANA state of an existing namespace changes and makes the disk live: nvme_mpath_set_live() issues IO to the namespace through the ctrl, which does NOT have IO queues yet.
See sample hang below.
Solution:
- nvme_update_ns_ana_state() to call set_live only if ctrl is live
- nvme_read_ana_log() call from nvme_mpath_init_identify() therefore only fetches and parses the ANA log;
any erros in this process will fail the ctrl setup as appropriate;
- a separate function nvme_mpath_update()
is called in nvme_start_ctrl();
this parses the ANA log without fetching it.
At this point the ctrl is live,
therefore, disks can be set live normally.
Sample failure:
nvme nvme0: starting error recovery
nvme nvme0: Reconnecting in 10 seconds...
block nvme0n6: no usable path - requeuing I/O
INFO: task kworker/u8:3:312 blocked for more than 122 seconds.
Tainted: G E 5.14.5-1.el7.elrepo.x86_64 #1
Workqueue: nvme-wq nvme_tcp_reconnect_ctrl_work [nvme_tcp]
Call Trace:
__schedule+0x2a2/0x7e0
schedule+0x4e/0xb0
io_schedule+0x16/0x40
wait_on_page_bit_common+0x15c/0x3e0
do_read_cache_page+0x1e0/0x410
read_cache_page+0x12/0x20
read_part_sector+0x46/0x100
read_lba+0x121/0x240
efi_partition+0x1d2/0x6a0
bdev_disk_changed.part.0+0x1df/0x430
bdev_disk_changed+0x18/0x20
blkdev_get_whole+0x77/0xe0
blkdev_get_by_dev+0xd2/0x3a0
__device_add_disk+0x1ed/0x310
device_add_disk+0x13/0x20
nvme_mpath_set_live+0x138/0x1b0 [nvme_core]
nvme_update_ns_ana_state+0x2b/0x30 [nvme_core]
nvme_update_ana_state+0xca/0xe0 [nvme_core]
nvme_parse_ana_log+0xac/0x170 [nvme_core]
nvme_read_ana_log+0x7d/0xe0 [nvme_core]
nvme_mpath_init_identify+0x105/0x150 [nvme_core]
nvme_init_identify+0x2df/0x4d0 [nvme_core]
nvme_init_ctrl_finish+0x8d/0x3b0 [nvme_core]
nvme_tcp_setup_ctrl+0x337/0x390 [nvme_tcp]
nvme_tcp_reconnect_ctrl_work+0x24/0x40 [nvme_tcp]
process_one_work+0x1bd/0x360
worker_thread+0x50/0x3d0--- drivers/nvme/host/core.c | 1 + drivers/nvme/host/multipath.c | 25 +++++++++++++++++++++++-- drivers/nvme/host/nvme.h | 4 ++++ 3 files changed, 28 insertions(+), 2 deletions(-)
drivers/nvme/host/core.c +1 -0
@@ -4420,6 +4420,7 @@ void nvme_start_ctrl(struct nvme_ctrl *ctrl)if (ctrl->queue_count >1 ) {nvme_queue_scan (ctrl);nvme_start_queues (ctrl); +nvme_mpath_update (ctrl); } }EXPORT_SYMBOL_GPL (nvme_start_ctrl);
drivers/nvme/host/multipath.c +23 -2
@@ -484,8 +484,17 @@ static void nvme_update_ns_ana_state(struct nvme_ana_group_desc *desc, ns->ana_grpid =le32_to_cpu (desc->grpid); ns->ana_state = desc->state;clear_bit (NVME_NS_ANA_PENDING , &ns->flags); - -if (nvme_state_is_live (ns->ana_state)) +/* +* nvme_mpath_set_live() will trigger I/O to the multipath path device +* and in turn to this path device. However we cannot accept this I/O +* if the controller is not live. This may deadlock if called from +* nvme_mpath_init_identify() and the ctrl will never complete +* initialization, preventing I/O from completing. For this case we +* will reprocess the ANA log page in nvme_mpath_update() once the +* controller is ready. +*/ +if (nvme_state_is_live (ns->ana_state) && + ns->ctrl->state ==NVME_CTRL_LIVE )nvme_mpath_set_live (ns); }
@@ -572,6 +581,18 @@ static void nvme_ana_work(struct work_struct *work)nvme_read_ana_log (ctrl); } +void nvme_mpath_update (struct nvme_ctrl *ctrl) +{ +u32 nr_change_groups =0 ; + +if (!ctrl->ana_log_buf) +return ; + +mutex_lock (&ctrl->ana_lock); +nvme_parse_ana_log (ctrl, &nr_change_groups, nvme_update_ana_state); +mutex_unlock (&ctrl->ana_lock); +} +static void nvme_anatt_timeout (struct timer_list *t) {struct nvme_ctrl *ctrl =from_timer (ctrl, t, anatt_timer);
drivers/nvme/host/nvme.h +4 -0
@@ -712,6 +712,7 @@ void nvme_mpath_add_disk(struct nvme_ns *ns, struct nvme_id_ns *id);void nvme_mpath_remove_disk (struct nvme_ns_head *head);int nvme_mpath_init_identify (struct nvme_ctrl *ctrl,struct nvme_id_ctrl *id);void nvme_mpath_init_ctrl (struct nvme_ctrl *ctrl); +void nvme_mpath_update (struct nvme_ctrl *ctrl);void nvme_mpath_uninit (struct nvme_ctrl *ctrl);void nvme_mpath_stop (struct nvme_ctrl *ctrl);bool nvme_mpath_clear_current_path (struct nvme_ns *ns);
@@ -798,6 +799,9 @@ static inline int nvme_mpath_init_identify(struct nvme_ctrl *ctrl, "Please enable CONFIG_NVME_MULTIPATH for full support of multi-port devices.\n");return 0 ; } +static inline void nvme_mpath_update (struct nvme_ctrl *ctrl) +{ +}static inline void nvme_mpath_uninit (struct nvme_ctrl *ctrl) { }
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 23/97 rtc: mc146818-lib: Fix the AltCentury for AMD platforms
In reply to Greg Kroah-HartmanFrom: Mario Limonciello <[email protected]>
[ Upstream commit 3ae8fd41573af4fb3a490c9ed947fc936ba87190 ]
Setting the century forward has been failing on AMD platforms. There was a previous attempt at fixing this for family 0x17 as part of commit 7ad295d5196a ("rtc: Fix the AltCentury value on AMD/Hygon platform") but this was later reverted due to some problems reported that appeared to stem from an FW bug on a family 0x17 desktop system.
The same comments mentioned in the previous commit continue to apply to the newer platforms as well.
``` MC146818 driver use function mc146818_set_time() to set register RTC_FREQ_SELECT(RTC_REG_A)'s bit4-bit6 field which means divider stage reset value on Intel platform to 0x7. While AMD/Hygon RTC_REG_A(0Ah)'s bit4 is defined as DV0 [Reference]: DV0 = 0 selects Bank 0, DV0 = 1 selects Bank 1. Bit5-bit6 is defined as reserved. DV0 is set to 1, it will select Bank 1, which will disable AltCentury register(0x32) access. As UEFI pass acpi_gbl_FADT.century 0x32 (AltCentury), the CMOS write will be failed on code: CMOS_WRITE(century, acpi_gbl_FADT.century). Correct RTC_REG_A bank select bit(DV0) to 0 on AMD/Hygon CPUs, it will enable AltCentury(0x32) register writing and finally setup century as expected. ```
However in closer examination the change previously submitted was also modifying bits 5 & 6 which are declared reserved in the AMD documentation. So instead modify just the DV0 bank selection bit.
Being cognizant that there was a failure reported before, split the code change out to a static function that can also be used for exclusions if any regressions such as Mikhail's pop up again.
--- drivers/rtc/rtc-mc146818-lib.c | 16 +++++++++++++++- include/linux/mc146818rtc.h | 2 ++ 2 files changed, 17 insertions(+), 1 deletion(-)
drivers/rtc/rtc-mc146818-lib.c +15 -1
@@ -99,6 +99,17 @@ unsigned int mc146818_get_time(struct rtc_time *time) }EXPORT_SYMBOL_GPL (mc146818_get_time); +/* AMD systems don't allow access to AltCentury with DV1 */ +static bool apply_amd_register_a_behavior (void ) +{ +#ifdef CONFIG_X86 +if (boot_cpu_data.x86_vendor ==X86_VENDOR_AMD || + boot_cpu_data.x86_vendor ==X86_VENDOR_HYGON ) +return true; +#endif +return false; +} +/* Set the current date and time in the real time clock. */ int mc146818_set_time (struct rtc_time *time) {
@@ -172,7 +183,10 @@ int mc146818_set_time(struct rtc_time *time) save_control =CMOS_READ (RTC_CONTROL );CMOS_WRITE ((save_control|RTC_SET ),RTC_CONTROL ); save_freq_select =CMOS_READ (RTC_FREQ_SELECT ); -CMOS_WRITE ((save_freq_select|RTC_DIV_RESET2 ),RTC_FREQ_SELECT ); +if (apply_amd_register_a_behavior ()) +CMOS_WRITE ((save_freq_select & ~RTC_AMD_BANK_SELECT ),RTC_FREQ_SELECT ); +else +CMOS_WRITE ((save_freq_select|RTC_DIV_RESET2 ),RTC_FREQ_SELECT );#ifdef CONFIG_MACH_DECSTATION CMOS_WRITE (real_yrs,RTC_DEC_YEAR );
include/linux/mc146818rtc.h +2 -0
@@ -86,6 +86,8 @@ struct cmos_rtc_board_info {/* 2 values for divider stage reset, others for "testing purposes only" */ # define RTC_DIV_RESET1 0x60# define RTC_DIV_RESET2 0x70 +/* In AMD BKDG bit 5 and 6 are reserved, bit 4 is for select dv0 bank */ +# define RTC_AMD_BANK_SELECT 0x10/* Periodic intr. / Square wave rate select. 0=none, 1=32.8kHz,... 15=2Hz */ # define RTC_RATE_SELECT 0x0F
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 24/97 fs: fix an infinite loop in iomap_fiemap
In reply to Greg Kroah-HartmanFrom: Guo Xuenan <[email protected]>
[ Upstream commit 49df34221804cfd6384135b28b03c9461a31d024 ]
when get fiemap starting from MAX_LFS_FILESIZE, (maxbytes - *len) < start will always true , then *len set zero. because of start offset is beyond file size, for erofs filesystem it will always return iomap.length with zero,iomap iterate will enter infinite loop. it is necessary cover this corner case to avoid this situation.
------------[ cut here ]------------ WARNING: CPU: 7 PID: 905 at fs/iomap/iter.c:35 iomap_iter+0x97f/0xc70 Modules linked in: xfs erofs CPU: 7 PID: 905 Comm: iomap Tainted: G W 5.17.0-rc8 #27 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1ubuntu1.1 04/01/2014 RIP: 0010:iomap_iter+0x97f/0xc70 Code: 85 a1 fc ff ff e8 71 be 9c ff 0f 1f 44 00 00 e9 92 fc ff ff e8 62 be 9c ff 0f 0b b8 fb ff ff ff e9 fc f8 ff ff e8 51 be 9c ff <0f> 0b e9 2b fc ff ff e8 45 be 9c ff 0f 0b e9 e1 fb ff ff e8 39 be RSP: 0018:ffff888060a37ab0 EFLAGS: 00010293 RAX: 0000000000000000 RBX: ffff888060a37bb0 RCX: 0000000000000000 RDX: ffff88807e19a900 RSI: ffffffff81a7da7f RDI: ffff888060a37be0 RBP: 7fffffffffffffff R08: 0000000000000000 R09: ffff888060a37c20 R10: ffff888060a37c67 R11: ffffed100c146f8c R12: 7fffffffffffffff R13: 0000000000000000 R14: ffff888060a37bd8 R15: ffff888060a37c20 FS: 00007fd3cca01540(0000) GS:ffff888108780000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000020010820 CR3: 0000000054b92000 CR4: 00000000000006e0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: <TASK> iomap_fiemap+0x1c9/0x2f0 erofs_fiemap+0x64/0x90 [erofs] do_vfs_ioctl+0x40d/0x12e0 __x64_sys_ioctl+0xaa/0x1c0 do_syscall_64+0x35/0x80 entry_SYSCALL_64_after_hwframe+0x44/0xae </TASK> ---[ end trace 0000000000000000 ]--- watchdog: BUG: soft lockup - CPU#7 stuck for 26s! [iomap:905]
--- fs/ioctl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/ioctl.c +1 -1
@@ -170,7 +170,7 @@ int fiemap_prep(struct inode *inode, struct fiemap_extent_info *fieinfo,if (*len ==0 )return -EINVAL ; -if (start > maxbytes) +if (start >= maxbytes)return -EFBIG ;/*
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 25/97 MIPS: lantiq: check the return value of kzalloc()
In reply to Greg Kroah-HartmanFrom: Xiaoke Wang <[email protected]>
[ Upstream commit 34123208bbcc8c884a0489f543a23fe9eebb5514 ]
kzalloc() is a memory allocation function which can return NULL when some internal memory errors happen. So it is better to check the return value of it to prevent potential wrong memory access or memory leak.
--- arch/mips/lantiq/falcon/sysctrl.c | 2 ++ arch/mips/lantiq/xway/gptu.c | 2 ++ arch/mips/lantiq/xway/sysctrl.c | 46 ++++++++++++++++++++----------- 3 files changed, 34 insertions(+), 16 deletions(-)
arch/mips/lantiq/falcon/sysctrl.c +2 -0
@@ -167,6 +167,8 @@ static inline void clkdev_add_sys(const char *dev, unsigned int module, {struct clk *clk =kzalloc (sizeof (struct clk ),GFP_KERNEL ); +if (!clk) +return ; clk->cl.dev_id = dev; clk->cl.con_id =NULL ; clk->cl.clk = clk;
arch/mips/lantiq/xway/gptu.c +2 -0
@@ -122,6 +122,8 @@ static inline void clkdev_add_gptu(struct device *dev, const char *con, {struct clk *clk =kzalloc (sizeof (struct clk ),GFP_KERNEL ); +if (!clk) +return ; clk->cl.dev_id =dev_name (dev); clk->cl.con_id = con; clk->cl.clk = clk;
arch/mips/lantiq/xway/sysctrl.c +30 -16
75 lines not on this page · raw message
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 26/97 drbd: remove usage of list iterator variable after loop
In reply to Greg Kroah-HartmanFrom: Jakob Koschel <[email protected]>
[ Upstream commit 901aeda62efa21f2eae937bccb71b49ae531be06 ]
In preparation to limit the scope of a list iterator to the list traversal loop, use a dedicated pointer to iterate through the list [1].
Since that variable should not be used past the loop iteration, a separate variable is used to 'remember the current location within the loop'.
To either continue iterating from that position or skip the iteration (if the previous iteration was complete) list_prepare_entry() is used.
--- drivers/block/drbd/drbd_main.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/block/drbd/drbd_main.c +5 -2
@@ -184,7 +184,7 @@ void tl_release(struct drbd_connection *connection, unsigned int barrier_nr, unsigned int set_size) {struct drbd_request *r; -struct drbd_request *req =NULL ; +struct drbd_request *req =NULL , *tmp =NULL ;int expect_epoch =0 ;int expect_size =0 ;
@@ -238,8 +238,11 @@ void tl_release(struct drbd_connection *connection, unsigned int barrier_nr,* to catch requests being barrier-acked "unexpectedly". * It usually should find the same req again, or some READ preceding it. */ list_for_each_entry (req, &connection->transfer_log, tl_requests) -if (req->epoch == expect_epoch) +if (req->epoch == expect_epoch) { + tmp = req;break ; + } + req =list_prepare_entry (tmp, &connection->transfer_log, tl_requests);list_for_each_entry_safe_from (req, r, &connection->transfer_log, tl_requests) {if (req->epoch != expect_epoch)break ;
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 27/97 platform/chrome: cros_ec_debugfs: detach log reader wq from devm
In reply to Greg Kroah-HartmanFrom: Tzung-Bi Shih <[email protected]>
[ Upstream commit 0e8eb5e8acbad19ac2e1856b2fb2320184299b33 ]
Debugfs console_log uses devm memory (e.g. debug_info in cros_ec_console_log_poll()). However, lifecycles of device and debugfs are independent. An use-after-free issue is observed if userland program operates the debugfs after the memory has been freed.
The call trace:
do_raw_spin_lock
_raw_spin_lock_irqsave
remove_wait_queue
ep_unregister_pollwait
ep_remove
do_epoll_ctl
A Python example to reproduce the issue:
... import select
... p = select.epoll()
... f = open('/sys/kernel/debug/cros_scp/console_log') ... p.register(f, select.POLLIN)
... p.poll(1)
[(4, 1)] # 4=fd, 1=select.POLLIN
[ shutdown cros_scp at the point ]
... p.poll(1)
[(4, 16)] # 4=fd, 16=select.POLLHUP
... p.unregister(f)
An use-after-free issue raises here. It called epoll_ctl with EPOLL_CTL_DEL which in turn to use the workqueue in the devm (i.e. log_wq).
Detaches log reader's workqueue from devm to make sure it is persistent even if the device has been removed.
--- drivers/platform/chrome/cros_ec_debugfs.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/platform/chrome/cros_ec_debugfs.c +6 -6
@@ -25,6 +25,9 @@#define CIRC_ADD (idx, size, value) (((idx) + (value)) & ((size) - 1)) +/* waitqueue for log readers */ +static DECLARE_WAIT_QUEUE_HEAD (cros_ec_debugfs_log_wq); +/** * struct cros_ec_debugfs - EC debugging information. *
@@ -33,7 +36,6 @@* @log_buffer: circular buffer for console log information * @read_msg: preallocated EC command and buffer to read console log * @log_mutex: mutex to protect circular buffer -* @log_wq: waitqueue for log readers * @log_poll_work: recurring task to poll EC for new console log data * @panicinfo_blob: panicinfo debugfs blob */
@@ -44,7 +46,6 @@ struct cros_ec_debugfs {struct circ_buf log_buffer;struct cros_ec_command *read_msg;struct mutex log_mutex; -wait_queue_head_t log_wq;struct delayed_work log_poll_work;/* EC panicinfo */ struct debugfs_blob_wrapper panicinfo_blob;
@@ -107,7 +108,7 @@ static void cros_ec_console_log_work(struct work_struct *__work) buf_space--; } -wake_up (&debug_info->log_wq); +wake_up (&cros_ec_debugfs_log_wq); }mutex_unlock (&debug_info->log_mutex);
@@ -141,7 +142,7 @@ static ssize_t cros_ec_console_log_read(struct file *file, char __user *buf,mutex_unlock (&debug_info->log_mutex); - ret =wait_event_interruptible (debug_info->log_wq, + ret =wait_event_interruptible (cros_ec_debugfs_log_wq,CIRC_CNT (cb->head, cb->tail,LOG_SIZE ));if (ret <0 )return ret;
@@ -173,7 +174,7 @@ static __poll_t cros_ec_console_log_poll(struct file *file,struct cros_ec_debugfs *debug_info = file->private_data;__poll_t mask =0 ; -poll_wait (file, &debug_info->log_wq, wait); +poll_wait (file, &cros_ec_debugfs_log_wq, wait);mutex_lock (&debug_info->log_mutex); if (CIRC_CNT(debug_info->log_buffer.head,
@@ -377,7 +378,6 @@ static int cros_ec_create_console_log(struct cros_ec_debugfs *debug_info) debug_info->log_buffer.tail =0 ;mutex_init (&debug_info->log_mutex); -init_waitqueue_head (&debug_info->log_wq);debugfs_create_file ("console_log" ,S_IFREG |0444 , debug_info->dir, debug_info, &cros_ec_console_log_fops);
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 28/97 ARM: 9191/1: arm/stacktrace, kasan: Silence KASAN warnings in unwind_frame()
In reply to Greg Kroah-HartmanFrom: linyujun <[email protected]>
[ Upstream commit 9be4c88bb7924f68f88cfd47d925c2d046f51a73 ]
The following KASAN warning is detected by QEMU.
==================================================================
BUG: KASAN: stack-out-of-bounds in unwind_frame+0x508/0x870 Read of size 4 at addr c36bba90 by task cat/163 CPU: 1 PID: 163 Comm: cat Not tainted 5.10.0-rc1 #40 Hardware name: ARM-Versatile Express [<c0113fac>] (unwind_backtrace) from [<c010e71c>] (show_stack+0x10/0x14) [<c010e71c>] (show_stack) from [<c0b805b4>] (dump_stack+0x98/0xb0) [<c0b805b4>] (dump_stack) from [<c0b7d658>] (print_address_description.constprop.0+0x58/0x4bc) [<c0b7d658>] (print_address_description.constprop.0) from [<c031435c>] (kasan_report+0x154/0x170) [<c031435c>] (kasan_report) from [<c0113c44>] (unwind_frame+0x508/0x870) [<c0113c44>] (unwind_frame) from [<c010e298>] (__save_stack_trace+0x110/0x134) [<c010e298>] (__save_stack_trace) from [<c01ce0d8>] (stack_trace_save+0x8c/0xb4) [<c01ce0d8>] (stack_trace_save) from [<c0313520>] (kasan_set_track+0x38/0x60) [<c0313520>] (kasan_set_track) from [<c0314cb8>] (kasan_set_free_info+0x20/0x2c) [<c0314cb8>] (kasan_set_free_info) from [<c0313474>] (__kasan_slab_free+0xec/0x120) [<c0313474>] (__kasan_slab_free) from [<c0311e20>] (kmem_cache_free+0x7c/0x334) [<c0311e20>] (kmem_cache_free) from [<c01c35dc>] (rcu_core+0x390/0xccc) [<c01c35dc>] (rcu_core) from [<c01013a8>] (__do_softirq+0x180/0x518) [<c01013a8>] (__do_softirq) from [<c0135214>] (irq_exit+0x9c/0xe0) [<c0135214>] (irq_exit) from [<c01a40e4>] (__handle_domain_irq+0xb0/0x110) [<c01a40e4>] (__handle_domain_irq) from [<c0691248>] (gic_handle_irq+0xa0/0xb8) [<c0691248>] (gic_handle_irq) from [<c0100b0c>] (__irq_svc+0x6c/0x94) Exception stack(0xc36bb928 to 0xc36bb970)
b920: c36bb9c0 00000000 c0126919 c0101228 c36bb9c0 b76d7730
b940: c36b8000 c36bb9a0 c3335b00 c01ce0d8 00000003 c36bba3c c36bb940 c36bb978
b960: c010e298 c011373c 60000013 ffffffff
[<c0100b0c>] (__irq_svc) from [<c011373c>] (unwind_frame+0x0/0x870) [<c011373c>] (unwind_frame) from [<00000000>] (0x0)
The buggy address belongs to the page: page:(ptrval) refcount:0 mapcount:0 mapping:00000000 index:0x0 pfn:0x636bb flags: 0x0() raw: 00000000 00000000 ef867764 00000000 00000000 00000000 ffffffff 00000000 page dumped because: kasan: bad access detected
addr c36bba90 is located in stack of task cat/163 at offset 48 in frame:
stack_trace_save+0x0/0xb4
this frame has 1 object:
[32, 48) 'trace'
Memory state around the buggy address:
c36bb980: f1 f1 f1 f1 00 04 f2 f2 00 00 f3 f3 00 00 00 00
c36bba00: 00 00 00 00 00 00 00 00 00 00 00 00 f1 f1 f1 f1
>c36bba80: 00 00 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
^
c36bbb00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c36bbb80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
==================================================================There is a same issue on x86 and has been resolved by the commit f7d27c35ddff ("x86/mm, kasan: Silence KASAN warnings in get_wchan()").
The solution could be applied to arm architecture too.
--- arch/arm/kernel/stacktrace.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
arch/arm/kernel/stacktrace.c +5 -5
@@ -53,17 +53,17 @@ int notrace unwind_frame(struct stackframe *frame)return -EINVAL ; frame->sp = frame->fp; - frame->fp = *(unsigned long *)(fp); - frame->pc = *(unsigned long *)(fp +4 ); + frame->fp =READ_ONCE_NOCHECK (*(unsigned long *)(fp)); + frame->pc =READ_ONCE_NOCHECK (*(unsigned long *)(fp +4 ));#else /* check current frame pointer is within bounds */ if (fp < low +12 || fp > high -4 )return -EINVAL ;/* restore the registers from the stack frame */ - frame->fp = *(unsigned long *)(fp -12 ); - frame->sp = *(unsigned long *)(fp -8 ); - frame->pc = *(unsigned long *)(fp -4 ); + frame->fp =READ_ONCE_NOCHECK (*(unsigned long *)(fp -12 )); + frame->sp =READ_ONCE_NOCHECK (*(unsigned long *)(fp -8 )); + frame->pc =READ_ONCE_NOCHECK (*(unsigned long *)(fp -4 ));#endif return 0 ;
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 29/97 nilfs2: fix lockdep warnings in page operations for btree nodes
In reply to Greg Kroah-HartmanFrom: Ryusuke Konishi <[email protected]>
[ Upstream commit e897be17a441fa637cd166fc3de1445131e57692 ]
Patch series "nilfs2 lockdep warning fixes".
The first two are to resolve the lockdep warning issue, and the last one is the accompanying cleanup and low priority.
Based on your comment, this series solves the issue by separating inode object as needed. Since I was worried about the impact of the object composition changes, I tested the series carefully not to cause regressions especially for delicate functions such like disk space reclamation and snapshots.
This patch (of 3):
If CONFIG_LOCKDEP is enabled, nilfs2 hits lockdep warnings at inode_to_wb() during page/folio operations for btree nodes:
WARNING: CPU: 0 PID: 6575 at include/linux/backing-dev.h:269 inode_to_wb include/linux/backing-dev.h:269 [inline]
WARNING: CPU: 0 PID: 6575 at include/linux/backing-dev.h:269 folio_account_dirtied mm/page-writeback.c:2460 [inline]
WARNING: CPU: 0 PID: 6575 at include/linux/backing-dev.h:269 __folio_mark_dirty+0xa7c/0xe30 mm/page-writeback.c:2509
Modules linked in:
...
RIP: 0010:inode_to_wb include/linux/backing-dev.h:269 [inline]
RIP: 0010:folio_account_dirtied mm/page-writeback.c:2460 [inline]
RIP: 0010:__folio_mark_dirty+0xa7c/0xe30 mm/page-writeback.c:2509
...
Call Trace:
__set_page_dirty include/linux/pagemap.h:834 [inline]
mark_buffer_dirty+0x4e6/0x650 fs/buffer.c:1145
nilfs_btree_propagate_p fs/nilfs2/btree.c:1889 [inline]
nilfs_btree_propagate+0x4ae/0xea0 fs/nilfs2/btree.c:2085
nilfs_bmap_propagate+0x73/0x170 fs/nilfs2/bmap.c:337
nilfs_collect_dat_data+0x45/0xd0 fs/nilfs2/segment.c:625
nilfs_segctor_apply_buffers+0x14a/0x470 fs/nilfs2/segment.c:1009
nilfs_segctor_scan_file+0x47a/0x700 fs/nilfs2/segment.c:1048
nilfs_segctor_collect_blocks fs/nilfs2/segment.c:1224 [inline]
nilfs_segctor_collect fs/nilfs2/segment.c:1494 [inline]
nilfs_segctor_do_construct+0x14f3/0x6c60 fs/nilfs2/segment.c:2036
nilfs_segctor_construct+0x7a7/0xb30 fs/nilfs2/segment.c:2372
nilfs_segctor_thread_construct fs/nilfs2/segment.c:2480 [inline]
nilfs_segctor_thread+0x3c3/0xf90 fs/nilfs2/segment.c:2563
kthread+0x405/0x4f0 kernel/kthread.c:327
ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:295This is because nilfs2 uses two page caches for each inode and inode->i_mapping never points to one of them, the btree node cache.
This causes inode_to_wb(inode) to refer to a different page cache than the caller page/folio operations such like __folio_start_writeback(), __folio_end_writeback(), or __folio_mark_dirty() acquired the lock.
This patch resolves the issue by allocating and using an additional inode to hold the page cache of btree nodes. The inode is attached one-to-one to the traditional nilfs2 inode if it requires a block mapping with b-tree. This setup change is in memory only and does not affect the disk format.
--- fs/nilfs2/btnode.c | 23 ++++++++-- fs/nilfs2/btnode.h | 1 + fs/nilfs2/btree.c | 27 ++++++++---- fs/nilfs2/gcinode.c | 7 +-- fs/nilfs2/inode.c | 104 ++++++++++++++++++++++++++++++++++++++------ fs/nilfs2/mdt.c | 7 +-- fs/nilfs2/nilfs.h | 14 +++--- fs/nilfs2/page.c | 7 ++- fs/nilfs2/segment.c | 9 ++-- fs/nilfs2/super.c | 5 +-- 10 files changed, 154 insertions(+), 50 deletions(-)
fs/nilfs2/btnode.c +20 -3
@@ -20,6 +20,23 @@#include "page.h" #include "btnode.h" + +/** +* nilfs_init_btnc_inode - initialize B-tree node cache inode +* @btnc_inode: inode to be initialized +* +* nilfs_init_btnc_inode() sets up an inode for B-tree node cache. +*/ +void nilfs_init_btnc_inode (struct inode *btnc_inode) +{ +struct nilfs_inode_info *ii =NILFS_I (btnc_inode); + + btnc_inode->i_mode =S_IFREG ; + ii->i_flags =0 ; +memset (&ii->i_bmap_data,0 ,sizeof (struct nilfs_bmap )); +mapping_set_gfp_mask (btnc_inode->i_mapping,GFP_NOFS ); +} +void nilfs_btnode_cache_clear (struct address_space *btnc) {invalidate_mapping_pages (btnc,0 ,-1 );
@@ -29,7 +46,7 @@ void nilfs_btnode_cache_clear(struct address_space *btnc)struct buffer_head *nilfs_btnode_create_block (struct address_space *btnc,__u64 blocknr) { -struct inode *inode =NILFS_BTNC_I (btnc); +struct inode *inode = btnc->host;struct buffer_head *bh; bh =nilfs_grab_buffer (inode, btnc, blocknr,BIT (BH_NILFS_Node));
@@ -57,7 +74,7 @@ int nilfs_btnode_submit_block(struct address_space *btnc, __u64 blocknr, struct buffer_head **pbh, sector_t *submit_ptr) { struct buffer_head *bh; -struct inode *inode =NILFS_BTNC_I (btnc); +struct inode *inode = btnc->host;struct page *page;int err;
@@ -157,7 +174,7 @@ int nilfs_btnode_prepare_change_key(struct address_space *btnc, struct nilfs_btnode_chkey_ctxt *ctxt) {struct buffer_head *obh, *nbh; -struct inode *inode =NILFS_BTNC_I (btnc); +struct inode *inode = btnc->host;__u64 oldkey = ctxt->oldkey, newkey = ctxt->newkey;int err;
fs/nilfs2/btnode.h +1 -0
@@ -30,6 +30,7 @@ struct nilfs_btnode_chkey_ctxt {struct buffer_head *newbh; }; +void nilfs_init_btnc_inode (struct inode *btnc_inode);void nilfs_btnode_cache_clear (struct address_space *);struct buffer_head *nilfs_btnode_create_block (struct address_space *btnc,__u64 blocknr);
fs/nilfs2/btree.c +19 -8
@@ -58,7 +58,8 @@ static void nilfs_btree_free_path(struct nilfs_btree_path *path)static int nilfs_btree_get_new_block (const struct nilfs_bmap *btree,__u64 ptr,struct buffer_head **bhp) { -struct address_space *btnc = &NILFS_BMAP_I (btree)->i_btnode_cache; +struct inode *btnc_inode =NILFS_BMAP_I (btree)->i_assoc_inode; +struct address_space *btnc = btnc_inode->i_mapping;struct buffer_head *bh; bh =nilfs_btnode_create_block (btnc, ptr);
@@ -470,7 +471,8 @@ static int __nilfs_btree_get_block(const struct nilfs_bmap *btree, __u64 ptr,struct buffer_head **bhp, const struct nilfs_btree_readahead_info *ra) { - struct address_space *btnc = &NILFS_BMAP_I(btree)->i_btnode_cache; + struct inode *btnc_inode = NILFS_BMAP_I(btree)->i_assoc_inode; +struct address_space *btnc = btnc_inode->i_mapping;struct buffer_head *bh, *ra_bh;sector_t submit_ptr =0 ;int ret;
@@ -1742,6 +1744,10 @@ nilfs_btree_prepare_convert_and_insert(struct nilfs_bmap *btree, __u64 key, dat =nilfs_bmap_get_dat (btree); } + ret =nilfs_attach_btree_node_cache (&NILFS_BMAP_I (btree)->vfs_inode); +if (ret <0 ) +return ret; + ret =nilfs_bmap_prepare_alloc_ptr (btree, dreq, dat);if (ret <0 )return ret;
@@ -1914,7 +1920,7 @@ static int nilfs_btree_prepare_update_v(struct nilfs_bmap *btree, path[level].bp_ctxt.newkey = path[level].bp_newreq.bpr_ptr; path[level].bp_ctxt.bh = path[level].bp_bh; ret =nilfs_btnode_prepare_change_key ( - &NILFS_BMAP_I (btree)->i_btnode_cache, +NILFS_BMAP_I (btree)->i_assoc_inode->i_mapping, &path[level].bp_ctxt);if (ret <0 ) { nilfs_dat_abort_update(dat,
@@ -1940,7 +1946,7 @@ static void nilfs_btree_commit_update_v(struct nilfs_bmap *btree,if (buffer_nilfs_node (path[level].bp_bh)) {nilfs_btnode_commit_change_key ( - &NILFS_BMAP_I (btree)->i_btnode_cache, +NILFS_BMAP_I (btree)->i_assoc_inode->i_mapping, &path[level].bp_ctxt); path[level].bp_bh = path[level].bp_ctxt.bh; }
@@ -1959,7 +1965,7 @@ static void nilfs_btree_abort_update_v(struct nilfs_bmap *btree, &path[level].bp_newreq.bpr_req);if (buffer_nilfs_node (path[level].bp_bh))nilfs_btnode_abort_change_key ( - &NILFS_BMAP_I (btree)->i_btnode_cache, +NILFS_BMAP_I (btree)->i_assoc_inode->i_mapping, &path[level].bp_ctxt); }
@@ -2135,7 +2141,8 @@ static void nilfs_btree_add_dirty_buffer(struct nilfs_bmap *btree,static void nilfs_btree_lookup_dirty_buffers (struct nilfs_bmap *btree,struct list_head *listp) { -struct address_space *btcache = &NILFS_BMAP_I (btree)->i_btnode_cache; +struct inode *btnc_inode =NILFS_BMAP_I (btree)->i_assoc_inode; +struct address_space *btcache = btnc_inode->i_mapping;struct list_head lists[NILFS_BTREE_LEVEL_MAX ];struct pagevec pvec;struct buffer_head *bh, *head;
@@ -2189,12 +2196,12 @@ static int nilfs_btree_assign_p(struct nilfs_bmap *btree, path[level].bp_ctxt.newkey = blocknr; path[level].bp_ctxt.bh = *bh; ret =nilfs_btnode_prepare_change_key ( - &NILFS_BMAP_I (btree)->i_btnode_cache, +NILFS_BMAP_I (btree)->i_assoc_inode->i_mapping, &path[level].bp_ctxt);if (ret <0 )return ret;nilfs_btnode_commit_change_key ( - &NILFS_BMAP_I (btree)->i_btnode_cache, +NILFS_BMAP_I (btree)->i_assoc_inode->i_mapping, &path[level].bp_ctxt); *bh = path[level].bp_ctxt.bh; }
@@ -2399,6 +2406,10 @@ int nilfs_btree_init(struct nilfs_bmap *bmap)if (nilfs_btree_root_broken (nilfs_btree_get_root (bmap), bmap->b_inode)) ret = -EIO ; +else + ret =nilfs_attach_btree_node_cache ( + &NILFS_BMAP_I (bmap)->vfs_inode); +return ret; }
fs/nilfs2/gcinode.c +4 -3
@@ -126,9 +126,10 @@ int nilfs_gccache_submit_read_data(struct inode *inode, sector_t blkoff,int nilfs_gccache_submit_read_node (struct inode *inode,sector_t pbn,__u64 vbn,struct buffer_head **out_bh) { +struct inode *btnc_inode =NILFS_I (inode)->i_assoc_inode;int ret; - ret =nilfs_btnode_submit_block (&NILFS_I (inode)->i_btnode_cache, + ret =nilfs_btnode_submit_block (btnc_inode->i_mapping, vbn ? : pbn, pbn,REQ_OP_READ ,0 , out_bh, &pbn);if (ret == -EEXIST )/* internal code (cache hit) */
@@ -170,7 +171,7 @@ int nilfs_init_gcinode(struct inode *inode) ii->i_flags =0 ;nilfs_bmap_init_gc (ii->i_bmap); -return 0 ; +return nilfs_attach_btree_node_cache (inode); }/**
@@ -185,7 +186,7 @@ void nilfs_remove_all_gcinodes(struct the_nilfs *nilfs) ii = list_first_entry(head, struct nilfs_inode_info, i_dirty);list_del_init (&ii->i_dirty);truncate_inode_pages (&ii->vfs_inode.i_data,0 ); -nilfs_btnode_cache_clear (&ii->i_btnode_cache); +nilfs_btnode_cache_clear (ii->i_assoc_inode->i_mapping);iput (&ii->vfs_inode); } }
fs/nilfs2/inode.c +90 -14
164 lines not on this page · raw message
fs/nilfs2/mdt.c +4 -3
@@ -531,7 +531,7 @@ int nilfs_mdt_save_to_shadow_map(struct inode *inode) goto out; ret =nilfs_copy_dirty_pages (&shadow->frozen_btnodes, - &ii->i_btnode_cache); + ii->i_assoc_inode->i_mapping);if (ret) goto out;
@@ -622,8 +622,9 @@ void nilfs_mdt_restore_from_shadow_map(struct inode *inode)nilfs_clear_dirty_pages (inode->i_mapping, true);nilfs_copy_back_pages (inode->i_mapping, &shadow->frozen_data); -nilfs_clear_dirty_pages (&ii->i_btnode_cache, true); -nilfs_copy_back_pages (&ii->i_btnode_cache, &shadow->frozen_btnodes); +nilfs_clear_dirty_pages (ii->i_assoc_inode->i_mapping, true); +nilfs_copy_back_pages (ii->i_assoc_inode->i_mapping, + &shadow->frozen_btnodes);nilfs_bmap_restore (ii->i_bmap, &shadow->bmap_store);
fs/nilfs2/nilfs.h +5 -9
@@ -28,7 +28,7 @@* @i_xattr: <TODO> * @i_dir_start_lookup: page index of last successful search * @i_cno: checkpoint number for GC inode -* @i_btnode_cache: cached pages of b-tree nodes +* @i_assoc_inode: associated inode (B-tree node cache holder or back pointer) * @i_dirty: list for connecting dirty files * @xattr_sem: semaphore for extended attributes processing * @i_bh: buffer contains disk inode
@@ -43,7 +43,7 @@ struct nilfs_inode_info {__u64 i_xattr;/* sector_t ??? */ __u32 i_dir_start_lookup;__u64 i_cno;/* check point number for GC inode */ -struct address_space i_btnode_cache; +struct inode *i_assoc_inode;struct list_head i_dirty;/* List for connecting dirty files */ #ifdef CONFIG_NILFS_XATTR
@@ -75,13 +75,6 @@ NILFS_BMAP_I(const struct nilfs_bmap *bmap) return container_of(bmap, struct nilfs_inode_info, i_bmap_data); } -static inline struct inode *NILFS_BTNC_I (struct address_space *btnc) -{ -struct nilfs_inode_info *ii = - container_of(btnc, struct nilfs_inode_info, i_btnode_cache); -return &ii->vfs_inode; -} -/* * Dynamic state flags of NILFS on-memory inode (i_state) */
@@ -98,6 +91,7 @@ enum {NILFS_I_INODE_SYNC ,/* dsync is not allowed for inode */ NILFS_I_BMAP ,/* has bmap and btnode_cache */ NILFS_I_GCINODE ,/* inode for GC, on memory only */ + NILFS_I_BTNC, /* inode for btree node cache */ };/*
@@ -264,6 +258,8 @@ struct inode *nilfs_iget(struct super_block *sb, struct nilfs_root *root, unsigned long ino);extern struct inode *nilfs_iget_for_gc (struct super_block *sb,unsigned long ino,__u64 cno); +int nilfs_attach_btree_node_cache (struct inode *inode); +void nilfs_detach_btree_node_cache (struct inode *inode);extern void nilfs_update_inode (struct inode *,struct buffer_head *,int );extern void nilfs_truncate (struct inode *);extern void nilfs_evict_inode (struct inode *);
fs/nilfs2/page.c +3 -4
@@ -448,10 +448,9 @@ void nilfs_mapping_init(struct address_space *mapping, struct inode *inode)/* * NILFS2 needs clear_page_dirty() in the following two cases: * -* 1) For B-tree node pages and data pages of the dat/gcdat, NILFS2 clears -* page dirty flags when it copies back pages from the shadow cache -* (gcdat->{i_mapping,i_btnode_cache}) to its original cache -* (dat->{i_mapping,i_btnode_cache}). +* 1) For B-tree node pages and data pages of DAT file, NILFS2 clears dirty +* flag of pages when it copies back pages from shadow cache to the +* original cache. * * 2) Some B-tree operations like insertion or deletion may dispose buffers * in dirty state, and this needs to cancel the dirty state of their pages.
fs/nilfs2/segment.c +6 -3
@@ -738,15 +738,18 @@ static void nilfs_lookup_dirty_node_buffers(struct inode *inode, struct list_head *listp) {struct nilfs_inode_info *ii =NILFS_I (inode); -struct address_space *mapping = &ii->i_btnode_cache; +struct inode *btnc_inode = ii->i_assoc_inode;struct pagevec pvec;struct buffer_head *bh, *head;unsigned int i;pgoff_t index =0 ; +if (!btnc_inode) +return ; +pagevec_init (&pvec); -while (pagevec_lookup_tag (&pvec, mapping, &index, +while (pagevec_lookup_tag (&pvec, btnc_inode->i_mapping, &index,PAGECACHE_TAG_DIRTY )) {for (i =0 ; i <pagevec_count (&pvec); i++) { bh = head =page_buffers (pvec.pages[i]);
@@ -2415,7 +2418,7 @@ nilfs_remove_written_gcinodes(struct the_nilfs *nilfs, struct list_head *head)continue ;list_del_init (&ii->i_dirty);truncate_inode_pages (&ii->vfs_inode.i_data,0 ); -nilfs_btnode_cache_clear (&ii->i_btnode_cache); +nilfs_btnode_cache_clear (ii->i_assoc_inode->i_mapping);iput (&ii->vfs_inode); } }
fs/nilfs2/super.c +2 -3
@@ -157,7 +157,8 @@ struct inode *nilfs_alloc_inode(struct super_block *sb) ii->i_bh =NULL ; ii->i_state =0 ; ii->i_cno =0 ; -nilfs_mapping_init (&ii->i_btnode_cache, &ii->vfs_inode); + ii->i_assoc_inode =NULL ; + ii->i_bmap = &ii->i_bmap_data;return &ii->vfs_inode; }
@@ -1377,8 +1378,6 @@ static void nilfs_inode_init_once(void *obj)#ifdef CONFIG_NILFS_XATTR init_rwsem (&ii->xattr_sem);#endif -address_space_init_once (&ii->i_btnode_cache); - ii->i_bmap = &ii->i_bmap_data;inode_init_once (&ii->vfs_inode); }
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 30/97 nilfs2: fix lockdep warnings during disk space reclamation
In reply to Greg Kroah-HartmanFrom: Ryusuke Konishi <[email protected]>
[ Upstream commit 6e211930f79aa45d422009a5f2e5467d2369ffe5 ]
During disk space reclamation, nilfs2 still emits the following lockdep warning due to page/folio operations on shadowed page caches that nilfs2 uses to get a snapshot of DAT file in memory:
WARNING: CPU: 0 PID: 2643 at include/linux/backing-dev.h:272 __folio_mark_dirty+0x645/0x670
...
RIP: 0010:__folio_mark_dirty+0x645/0x670
...
Call Trace:
filemap_dirty_folio+0x74/0xd0
__set_page_dirty_nobuffers+0x85/0xb0
nilfs_copy_dirty_pages+0x288/0x510 [nilfs2]
nilfs_mdt_save_to_shadow_map+0x50/0xe0 [nilfs2]
nilfs_clean_segments+0xee/0x5d0 [nilfs2]
nilfs_ioctl_clean_segments.isra.19+0xb08/0xf40 [nilfs2]
nilfs_ioctl+0xc52/0xfb0 [nilfs2]
__x64_sys_ioctl+0x11d/0x170This fixes the remaining warning by using inode objects to hold those page caches.
--- fs/nilfs2/dat.c | 4 ++- fs/nilfs2/inode.c | 63 ++++++++++++++++++++++++++++++++++++++++++++--- fs/nilfs2/mdt.c | 38 +++++++++++++++++++--------- fs/nilfs2/mdt.h | 6 ++--- fs/nilfs2/nilfs.h | 2 ++ 5 files changed, 92 insertions(+), 21 deletions(-)
fs/nilfs2/dat.c +3 -1
@@ -497,7 +497,9 @@ int nilfs_dat_read(struct super_block *sb, size_t entry_size, di =NILFS_DAT_I (dat);lockdep_set_class (&di->mi.mi_sem, &dat_lock_key);nilfs_palloc_setup_cache (dat, &di->palloc_cache); -nilfs_mdt_setup_shadow_map (dat, &di->shadow); + err =nilfs_mdt_setup_shadow_map (dat, &di->shadow); +if (err) + goto failed; err =nilfs_read_inode_common (dat, raw_inode);if (err)
fs/nilfs2/inode.c +59 -4
123 lines not on this page · raw message
fs/nilfs2/mdt.c +26 -12
@@ -469,9 +469,18 @@ int nilfs_mdt_init(struct inode *inode, gfp_t gfp_mask, size_t objsz)void nilfs_mdt_clear (struct inode *inode) {struct nilfs_mdt_info *mdi =NILFS_MDT (inode); +struct nilfs_shadow_map *shadow = mdi->mi_shadow;if (mdi->mi_palloc_cache)nilfs_palloc_destroy_cache (inode); + +if (shadow) { +struct inode *s_inode = shadow->inode; + + shadow->inode =NULL ; +iput (s_inode); + mdi->mi_shadow =NULL ; + } }/**
@@ -505,12 +514,15 @@ int nilfs_mdt_setup_shadow_map(struct inode *inode, struct nilfs_shadow_map *shadow) {struct nilfs_mdt_info *mi =NILFS_MDT (inode); +struct inode *s_inode;INIT_LIST_HEAD (&shadow->frozen_buffers); -address_space_init_once (&shadow->frozen_data); -nilfs_mapping_init (&shadow->frozen_data, inode); -address_space_init_once (&shadow->frozen_btnodes); -nilfs_mapping_init (&shadow->frozen_btnodes, inode); + + s_inode =nilfs_iget_for_shadow (inode); +if (IS_ERR (s_inode)) +return PTR_ERR (s_inode); + + shadow->inode = s_inode; mi->mi_shadow = shadow;return 0 ; }
@@ -524,13 +536,14 @@ int nilfs_mdt_save_to_shadow_map(struct inode *inode)struct nilfs_mdt_info *mi =NILFS_MDT (inode);struct nilfs_inode_info *ii =NILFS_I (inode);struct nilfs_shadow_map *shadow = mi->mi_shadow; +struct inode *s_inode = shadow->inode;int ret; - ret =nilfs_copy_dirty_pages (&shadow->frozen_data, inode->i_mapping); + ret =nilfs_copy_dirty_pages (s_inode->i_mapping, inode->i_mapping);if (ret) goto out; - ret =nilfs_copy_dirty_pages (&shadow->frozen_btnodes, + ret =nilfs_copy_dirty_pages (NILFS_I (s_inode)->i_assoc_inode->i_mapping, ii->i_assoc_inode->i_mapping);if (ret) goto out;
@@ -547,7 +560,7 @@ int nilfs_mdt_freeze_buffer(struct inode *inode, struct buffer_head *bh)struct page *page;int blkbits = inode->i_blkbits; - page =grab_cache_page (&shadow->frozen_data, bh->b_page->index); + page =grab_cache_page (shadow->inode->i_mapping, bh->b_page->index);if (!page)return -ENOMEM ;
@@ -579,7 +592,7 @@ nilfs_mdt_get_frozen_buffer(struct inode *inode, struct buffer_head *bh)struct page *page;int n; - page =find_lock_page (&shadow->frozen_data, bh->b_page->index); + page =find_lock_page (shadow->inode->i_mapping, bh->b_page->index);if (page) {if (page_has_buffers (page)) { n =bh_offset (bh) >> inode->i_blkbits;
@@ -620,11 +633,11 @@ void nilfs_mdt_restore_from_shadow_map(struct inode *inode)nilfs_palloc_clear_cache (inode);nilfs_clear_dirty_pages (inode->i_mapping, true); -nilfs_copy_back_pages (inode->i_mapping, &shadow->frozen_data); +nilfs_copy_back_pages (inode->i_mapping, shadow->inode->i_mapping);nilfs_clear_dirty_pages (ii->i_assoc_inode->i_mapping, true);nilfs_copy_back_pages (ii->i_assoc_inode->i_mapping, - &shadow->frozen_btnodes); +NILFS_I (shadow->inode)->i_assoc_inode->i_mapping);nilfs_bmap_restore (ii->i_bmap, &shadow->bmap_store);
@@ -639,10 +652,11 @@ void nilfs_mdt_clear_shadow_map(struct inode *inode) {struct nilfs_mdt_info *mi =NILFS_MDT (inode);struct nilfs_shadow_map *shadow = mi->mi_shadow; +struct inode *shadow_btnc_inode =NILFS_I (shadow->inode)->i_assoc_inode;down_write (&mi->mi_sem);nilfs_release_frozen_buffers (shadow); -truncate_inode_pages (&shadow->frozen_data,0 ); -truncate_inode_pages (&shadow->frozen_btnodes,0 ); +truncate_inode_pages (shadow->inode->i_mapping,0 ); +truncate_inode_pages (shadow_btnc_inode->i_mapping,0 );up_write (&mi->mi_sem); }
fs/nilfs2/mdt.h +2 -4
@@ -18,14 +18,12 @@/** * struct nilfs_shadow_map - shadow mapping of meta data file * @bmap_store: shadow copy of bmap state -* @frozen_data: shadowed dirty data pages -* @frozen_btnodes: shadowed dirty b-tree nodes' pages +* @inode: holder of page caches used in shadow mapping * @frozen_buffers: list of frozen buffers */ struct nilfs_shadow_map {struct nilfs_bmap_store bmap_store; -struct address_space frozen_data; -struct address_space frozen_btnodes; +struct inode *inode;struct list_head frozen_buffers; };
fs/nilfs2/nilfs.h +2 -0
@@ -92,6 +92,7 @@ enum {NILFS_I_BMAP ,/* has bmap and btnode_cache */ NILFS_I_GCINODE ,/* inode for GC, on memory only */ NILFS_I_BTNC ,/* inode for btree node cache */ + NILFS_I_SHADOW, /* inode for shadowed page cache */ };/*
@@ -260,6 +261,7 @@ extern struct inode *nilfs_iget_for_gc(struct super_block *sb, unsigned long ino, __u64 cno);int nilfs_attach_btree_node_cache (struct inode *inode);void nilfs_detach_btree_node_cache (struct inode *inode); +struct inode *nilfs_iget_for_shadow (struct inode *inode);extern void nilfs_update_inode (struct inode *,struct buffer_head *,int );extern void nilfs_truncate (struct inode *);extern void nilfs_evict_inode (struct inode *);
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 31/97 Revert "swiotlb: fix info leak with DMA_FROM_DEVICE"
In reply to Greg Kroah-HartmanThis reverts commit d4d975e7921079f877f828099bb8260af335508f.
Upstream had a follow-up fix, revert, and a semi-reverted-revert. Instead of going through this chain which is more painful to backport, I'm just going to revert this original commit and pick the final one.
--- Documentation/core-api/dma-attributes.rst | 8 -------- include/linux/dma-mapping.h | 8 -------- kernel/dma/swiotlb.c | 3 +-- 3 files changed, 1 insertion(+), 18 deletions(-)
Documentation/core-api/dma-attributes.rst +0 -8
@@ -130,11 +130,3 @@ accesses to DMA buffers in both privileged "supervisor" and unprivileged subsystem that the buffer is fully accessible at the elevated privilege level (and ideally inaccessible or at least read-only at the lesser-privileged levels). - -DMA_ATTR_OVERWRITE ------------------- - -This is a hint to the DMA-mapping subsystem that the device is expected to -overwrite the entire mapped size, thus the caller does not require any of the -previous buffer contents to be preserved. This allows bounce-buffering -implementations to optimise DMA_FROM_DEVICE transfers.
include/linux/dma-mapping.h +0 -8
@@ -61,14 +61,6 @@*/ #define DMA_ATTR_PRIVILEGED (1UL << 9) -/* -* This is a hint to the DMA-mapping subsystem that the device is expected -* to overwrite the entire mapped size, thus the caller does not require any -* of the previous buffer contents to be preserved. This allows -* bounce-buffering implementations to optimise DMA_FROM_DEVICE transfers. -*/ -#define DMA_ATTR_OVERWRITE (1UL << 10) -/* * A dma_addr_t can hold any valid DMA or bus address for the platform. It can * be given to a device to use as a DMA source or target. It is specific to a
kernel/dma/swiotlb.c +1 -2
@@ -598,8 +598,7 @@ phys_addr_t swiotlb_tbl_map_single(struct device *dev, phys_addr_t orig_addr, tlb_addr =slot_addr (io_tlb_start, index) + offset;if (!(attrs &DMA_ATTR_SKIP_CPU_SYNC ) && - (!(attrs &DMA_ATTR_OVERWRITE ) || dir ==DMA_TO_DEVICE || - dir ==DMA_BIDIRECTIONAL )) + (dir ==DMA_TO_DEVICE || dir ==DMA_BIDIRECTIONAL ))swiotlb_bounce (orig_addr, tlb_addr, mapping_size,DMA_TO_DEVICE );return tlb_addr; }
Signature · 1 line
2.35.1
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.118 release. There are 97 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, 25 May 2022 16:56:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.10.118-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.10.y
and the diffstat can be found below.thanks,
greg k-h
On ARCH_BRCMSTB using 32-bit and 64-bit ARM kernels:
Signature · 1 line
Florian
Hello!
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.118 release. There are 97 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, 25 May 2022 16:56:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.10.118-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.10.y
and the diffstat can be found below.thanks,
greg k-h
We see a build failure with Perf on x86_64 and i386, with bisection pointing to:
Quoted 2 lines
Kan Liang <[email protected]>
perf regs x86: Fixarch__intr_reg_mask()for the hybrid platform
The error message is:
arch/x86/util/perf_regs.c:13:10: fatal error: ../../../util/pmu-hybrid.h: No such file or directory
13 | #include "../../../util/pmu-hybrid.h"
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~compilation terminated.
Greetings!
Daniel Díaz
[email protected]
Greg Kroah-Hartman
maintainerQuoted 26 lines · Daniel Díaz
Hello!
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.118 release. There are 97 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, 25 May 2022 16:56:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.10.118-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.10.y
and the diffstat can be found below.thanks,
greg k-h
We see a build failure with Perf on
x86_64and i386, with bisection pointing to:Quoted 2 lines
Kan Liang <[email protected]>
perf regs x86: Fixarch__intr_reg_mask()for the hybrid platform
Quoted 8 lines
The error message is:
arch/x86/util/perf_regs.c:13:10: fatal error:../../../util/pmu-hybrid.h: No such file or directory13 | #include "../../../util/pmu-hybrid.h" | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~compilation terminated.
Commit is now dropped, thanks.
greg k-h
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.118 release. There are 97 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, 25 May 2022 16:56:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.10.118-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.10.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.118 release. There are 97 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, 25 May 2022 16:56:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.10.118-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.10.y
and the diffstat can be found below.thanks,
greg k-h
5.10.118-rc1 Successfully Compiled and booted on my Raspberry PI 4b (8g) (bcm2711)
Hi Greg,
Quoted 7 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.118 release. There are 97 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, 25 May 2022 16:56:55 +0000. Anything received after that time might be too late.
Build test:
mips (gcc version 11.3.1 20220517): 63 configs -> no failure arm (gcc version 11.3.1 20220517): 105 configs -> no new failure arm64 (gcc version 11.3.1 20220517): 3 configs -> no failure x86_64 (gcc version 11.3.1 20220517): 4 configs -> no failure
Boot test:x86_64: Booted on my test laptop. No regression.x86_64: Booted on qemu. No regression. [1]
arm64: Booted on rpi4b (4GB model). No regression. [2]
[1]. https://openqa.qa.codethink.co.uk/tests/1198
[2]. https://openqa.qa.codethink.co.uk/tests/1201
--
Regards
Sudip
Hi!
Quoted 4 lines
This is the start of the stable review cycle for the 5.10.118 release. There are 97 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.
CIP testing did not find any problems here:
https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/tree/linux-5.10.y
Best regards,
Pavel
Signature · 2 lines
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.118 release. There are 97 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, 25 May 2022 16:56:55 +0000. Anything received after that time might be too late.
Build results:
total: 161 pass: 159 fail: 2 Failed builds: i386:tools/perf x86_64:tools/perf Qemu test results: total: 477 pass: 477 fail: 0
Failures as already reported.
Guenter
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.118 release. There are 97 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, 25 May 2022 16:56:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.10.118-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.10.y
and the diffstat can be found below.thanks,
greg k-h
Tested on arm64 and x86 for 5.10.118-rc1,
Kernel repo:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Branch: linux-5.10.y
Version: 5.10.118-rc1
Commit: f237fceb230cdf4e67886ab7a4edd8b34c0bb6c0
Compiler: gcc version 7.3.0 (GCC)
arm64:
--------------------------------------------------------------------
Testcase Result Summary:
total: 9033
passed: 9033
failed: 0
timeout: 0
--------------------------------------------------------------------
x86:
--------------------------------------------------------------------
Testcase Result Summary:
total: 9033
passed: 9033
failed: 0
timeout: 0
--------------------------------------------------------------------