mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2024-12-29 09:13:38 +00:00
31 hotfixes. 10 of these address pre-6.6 issues and are marked cc:stable.
The remainder address post-6.6 issues or aren't considered serious enough to justify backporting. -----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQTTMBEPP41GrTpTJgfdBJ7gKXxAjgUCZXKEfwAKCRDdBJ7gKXxA jlRpAQCiAp1nSqIz/fOKTzoQRaTDXU/m+C+6ZAXdKLDfvQBhpwEAnxxjZ8IgF+8Z Klz/GirHX5w5o7jE2wb8iObo1nR75Qo= =omRq -----END PGP SIGNATURE----- Merge tag 'mm-hotfixes-stable-2023-12-07-18-47' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm Pull misc fixes from Andrew Morton: "31 hotfixes. Ten of these address pre-6.6 issues and are marked cc:stable. The remainder address post-6.6 issues or aren't considered serious enough to justify backporting" * tag 'mm-hotfixes-stable-2023-12-07-18-47' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm: (31 commits) mm/madvise: add cond_resched() in madvise_cold_or_pageout_pte_range() nilfs2: prevent WARNING in nilfs_sufile_set_segment_usage() mm/hugetlb: have CONFIG_HUGETLB_PAGE select CONFIG_XARRAY_MULTI scripts/gdb: fix lx-device-list-bus and lx-device-list-class MAINTAINERS: drop Antti Palosaari highmem: fix a memory copy problem in memcpy_from_folio nilfs2: fix missing error check for sb_set_blocksize call kernel/Kconfig.kexec: drop select of KEXEC for CRASH_DUMP units: add missing header drivers/base/cpu: crash data showing should depends on KEXEC_CORE mm/damon/sysfs-schemes: add timeout for update_schemes_tried_regions scripts/gdb/tasks: fix lx-ps command error mm/Kconfig: make userfaultfd a menuconfig selftests/mm: prevent duplicate runs caused by TEST_GEN_PROGS mm/damon/core: copy nr_accesses when splitting region lib/group_cpus.c: avoid acquiring cpu hotplug lock in group_cpus_evenly checkstack: fix printed address mm/memory_hotplug: fix error handling in add_memory_resource() mm/memory_hotplug: add missing mem_hotplug_lock .mailmap: add a new address mapping for Chester Lin ...
This commit is contained in:
commit
8e819a7623
1
.mailmap
1
.mailmap
@ -117,6 +117,7 @@ Changbin Du <changbin.du@intel.com> <changbin.du@gmail.com>
|
||||
Changbin Du <changbin.du@intel.com> <changbin.du@intel.com>
|
||||
Chao Yu <chao@kernel.org> <chao2.yu@samsung.com>
|
||||
Chao Yu <chao@kernel.org> <yuchao0@huawei.com>
|
||||
Chester Lin <chester62515@gmail.com> <clin@suse.com>
|
||||
Chris Chiu <chris.chiu@canonical.com> <chiu@endlessm.com>
|
||||
Chris Chiu <chris.chiu@canonical.com> <chiu@endlessos.org>
|
||||
Chris Lew <quic_clew@quicinc.com> <clew@codeaurora.org>
|
||||
|
8
CREDITS
8
CREDITS
@ -2944,6 +2944,14 @@ D: IPX development and support
|
||||
N: Venkatesh Pallipadi (Venki)
|
||||
D: x86/HPET
|
||||
|
||||
N: Antti Palosaari
|
||||
E: crope@iki.fi
|
||||
D: Various DVB drivers
|
||||
W: https://palosaari.fi/linux/
|
||||
S: Yliopistokatu 1 D 513
|
||||
S: FI-90570 Oulu
|
||||
S: FINLAND
|
||||
|
||||
N: Kyungmin Park
|
||||
E: kyungmin.park@samsung.com
|
||||
D: Samsung S5Pv210 and Exynos4210 mobile platforms
|
||||
|
186
MAINTAINERS
186
MAINTAINERS
@ -171,13 +171,10 @@ S: Supported
|
||||
F: drivers/soc/fujitsu/a64fx-diag.c
|
||||
|
||||
A8293 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/dvb-frontends/a8293*
|
||||
|
||||
AACRAID SCSI RAID DRIVER
|
||||
@ -576,23 +573,17 @@ F: drivers/iio/accel/adxl372_i2c.c
|
||||
F: drivers/iio/accel/adxl372_spi.c
|
||||
|
||||
AF9013 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/dvb-frontends/af9013*
|
||||
|
||||
AF9033 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/dvb-frontends/af9033*
|
||||
|
||||
AFFS FILE SYSTEM
|
||||
@ -650,13 +641,10 @@ F: fs/aio.c
|
||||
F: include/linux/*aio*.h
|
||||
|
||||
AIRSPY MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/usb/airspy/
|
||||
|
||||
ALACRITECH GIGABIT ETHERNET DRIVER
|
||||
@ -5604,13 +5592,10 @@ F: Documentation/driver-api/media/drivers/cx88*
|
||||
F: drivers/media/pci/cx88/
|
||||
|
||||
CXD2820R MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/dvb-frontends/cxd2820r*
|
||||
|
||||
CXGB3 ETHERNET DRIVER (CXGB3)
|
||||
@ -5723,13 +5708,10 @@ F: Documentation/devicetree/bindings/input/cypress-sf.yaml
|
||||
F: drivers/input/keyboard/cypress-sf.c
|
||||
|
||||
CYPRESS_FIRMWARE MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/common/cypress_firmware*
|
||||
|
||||
CYTTSP TOUCHSCREEN DRIVER
|
||||
@ -7319,53 +7301,38 @@ T: git git://linuxtv.org/media_tree.git
|
||||
F: drivers/media/pci/dt3155/
|
||||
|
||||
DVB_USB_AF9015 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/usb/dvb-usb-v2/af9015*
|
||||
|
||||
DVB_USB_AF9035 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/usb/dvb-usb-v2/af9035*
|
||||
|
||||
DVB_USB_ANYSEE MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/usb/dvb-usb-v2/anysee*
|
||||
|
||||
DVB_USB_AU6610 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/usb/dvb-usb-v2/au6610*
|
||||
|
||||
DVB_USB_CE6230 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/usb/dvb-usb-v2/ce6230*
|
||||
|
||||
DVB_USB_CXUSB MEDIA DRIVER
|
||||
@ -7379,22 +7346,17 @@ T: git git://linuxtv.org/media_tree.git
|
||||
F: drivers/media/usb/dvb-usb/cxusb*
|
||||
|
||||
DVB_USB_EC168 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/usb/dvb-usb-v2/ec168*
|
||||
|
||||
DVB_USB_GL861 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/usb/dvb-usb-v2/gl861*
|
||||
|
||||
DVB_USB_MXL111SF MEDIA DRIVER
|
||||
@ -7408,23 +7370,18 @@ T: git git://linuxtv.org/mkrufky/mxl111sf.git
|
||||
F: drivers/media/usb/dvb-usb-v2/mxl111sf*
|
||||
|
||||
DVB_USB_RTL28XXU MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/usb/dvb-usb-v2/rtl28xxu*
|
||||
|
||||
DVB_USB_V2 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/usb/dvb-usb-v2/dvb_usb*
|
||||
F: drivers/media/usb/dvb-usb-v2/usb_urb.c
|
||||
|
||||
@ -7466,13 +7423,10 @@ F: Documentation/devicetree/bindings/input/e3x0-button.txt
|
||||
F: drivers/input/misc/e3x0-button.c
|
||||
|
||||
E4000 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/tuners/e4000*
|
||||
|
||||
EARTH_PT1 MEDIA DRIVER
|
||||
@ -7488,13 +7442,10 @@ S: Odd Fixes
|
||||
F: drivers/media/pci/pt3/
|
||||
|
||||
EC100 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/dvb-frontends/ec100*
|
||||
|
||||
ECRYPT FILE SYSTEM
|
||||
@ -8112,13 +8063,10 @@ F: drivers/media/tuners/fc0011.c
|
||||
F: drivers/media/tuners/fc0011.h
|
||||
|
||||
FC2580 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/tuners/fc2580*
|
||||
|
||||
FCOE SUBSYSTEM (libfc, libfcoe, fcoe)
|
||||
@ -9248,13 +9196,10 @@ F: include/trace/events/habanalabs.h
|
||||
F: include/uapi/drm/habanalabs_accel.h
|
||||
|
||||
HACKRF MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/usb/hackrf/
|
||||
|
||||
HANDSHAKE UPCALL FOR TRANSPORT LAYER SECURITY
|
||||
@ -11327,13 +11272,10 @@ F: Documentation/hwmon/it87.rst
|
||||
F: drivers/hwmon/it87.c
|
||||
|
||||
IT913X MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/tuners/it913x*
|
||||
|
||||
ITE IT66121 HDMI BRIDGE DRIVER
|
||||
@ -12206,6 +12148,13 @@ F: include/linux/nd.h
|
||||
F: include/uapi/linux/ndctl.h
|
||||
F: tools/testing/nvdimm/
|
||||
|
||||
LIBRARY CODE
|
||||
M: Andrew Morton <akpm@linux-foundation.org>
|
||||
L: linux-kernel@vger.kernel.org
|
||||
S: Supported
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-nonmm-unstable
|
||||
F: lib/*
|
||||
|
||||
LICENSES and SPDX stuff
|
||||
M: Thomas Gleixner <tglx@linutronix.de>
|
||||
M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
@ -12685,13 +12634,10 @@ W: http://www.tazenda.demon.co.uk/phil/linux-hp
|
||||
F: arch/m68k/hp300/
|
||||
|
||||
M88DS3103 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/dvb-frontends/m88ds3103*
|
||||
|
||||
M88RS2000 MEDIA DRIVER
|
||||
@ -14585,20 +14531,16 @@ F: include/asm-generic/tlb.h
|
||||
F: mm/mmu_gather.c
|
||||
|
||||
MN88472 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
F: drivers/media/dvb-frontends/mn88472*
|
||||
|
||||
MN88473 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
F: drivers/media/dvb-frontends/mn88473*
|
||||
|
||||
@ -14686,23 +14628,17 @@ S: Orphan
|
||||
F: drivers/platform/x86/msi-wmi.c
|
||||
|
||||
MSI001 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/tuners/msi001*
|
||||
|
||||
MSI2500 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/usb/msi2500/
|
||||
|
||||
MSTAR INTERRUPT CONTROLLER DRIVER
|
||||
@ -17774,13 +17710,10 @@ F: drivers/bus/fsl-mc/
|
||||
F: include/uapi/linux/fsl_mc.h
|
||||
|
||||
QT1010 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/tuners/qt1010*
|
||||
|
||||
QUALCOMM ATH12K WIRELESS DRIVER
|
||||
@ -18835,33 +18768,24 @@ S: Maintained
|
||||
F: drivers/tty/rpmsg_tty.c
|
||||
|
||||
RTL2830 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/dvb-frontends/rtl2830*
|
||||
|
||||
RTL2832 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/dvb-frontends/rtl2832*
|
||||
|
||||
RTL2832_SDR MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/dvb-frontends/rtl2832_sdr*
|
||||
|
||||
RTL8180 WIRELESS DRIVER
|
||||
@ -19671,13 +19595,10 @@ F: drivers/media/platform/renesas/sh_vou.c
|
||||
F: include/media/drv-intf/sh_vou.h
|
||||
|
||||
SI2157 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/tuners/si2157*
|
||||
|
||||
SI2165 MEDIA DRIVER
|
||||
@ -19689,13 +19610,10 @@ Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
F: drivers/media/dvb-frontends/si2165*
|
||||
|
||||
SI2168 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/dvb-frontends/si2168*
|
||||
|
||||
SI470X FM RADIO RECEIVER I2C DRIVER
|
||||
@ -21197,33 +21115,24 @@ W: http://tcp-lp-mod.sourceforge.net/
|
||||
F: net/ipv4/tcp_lp.c
|
||||
|
||||
TDA10071 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/dvb-frontends/tda10071*
|
||||
|
||||
TDA18212 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/tuners/tda18212*
|
||||
|
||||
TDA18218 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/tuners/tda18218*
|
||||
|
||||
TDA18250 MEDIA DRIVER
|
||||
@ -22159,13 +22068,10 @@ F: include/uapi/linux/serial_core.h
|
||||
F: include/uapi/linux/tty.h
|
||||
|
||||
TUA9001 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: http://patchwork.linuxtv.org/project/linux-media/list/
|
||||
T: git git://linuxtv.org/anttip/media_tree.git
|
||||
F: drivers/media/tuners/tua9001*
|
||||
|
||||
TULIP NETWORK DRIVERS
|
||||
@ -24110,20 +24016,16 @@ S: Orphan
|
||||
F: drivers/net/wireless/zydas/zd1211rw/
|
||||
|
||||
ZD1301 MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org/
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: https://patchwork.linuxtv.org/project/linux-media/list/
|
||||
F: drivers/media/usb/dvb-usb-v2/zd1301*
|
||||
|
||||
ZD1301_DEMOD MEDIA DRIVER
|
||||
M: Antti Palosaari <crope@iki.fi>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
W: https://linuxtv.org/
|
||||
W: http://palosaari.fi/linux/
|
||||
Q: https://patchwork.linuxtv.org/project/linux-media/list/
|
||||
F: drivers/media/dvb-frontends/zd1301_demod*
|
||||
|
||||
|
@ -2,8 +2,6 @@
|
||||
#ifndef _ARM_KEXEC_H
|
||||
#define _ARM_KEXEC_H
|
||||
|
||||
#ifdef CONFIG_KEXEC
|
||||
|
||||
/* Maximum physical address we can use pages from */
|
||||
#define KEXEC_SOURCE_MEMORY_LIMIT (-1UL)
|
||||
/* Maximum address we can reach in physical address mode */
|
||||
@ -82,6 +80,4 @@ static inline struct page *boot_pfn_to_page(unsigned long boot_pfn)
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#endif /* CONFIG_KEXEC */
|
||||
|
||||
#endif /* _ARM_KEXEC_H */
|
||||
|
@ -59,7 +59,7 @@ obj-$(CONFIG_FUNCTION_TRACER) += entry-ftrace.o
|
||||
obj-$(CONFIG_DYNAMIC_FTRACE) += ftrace.o insn.o patch.o
|
||||
obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o insn.o patch.o
|
||||
obj-$(CONFIG_JUMP_LABEL) += jump_label.o insn.o patch.o
|
||||
obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o
|
||||
obj-$(CONFIG_KEXEC_CORE) += machine_kexec.o relocate_kernel.o
|
||||
# Main staffs in KPROBES are in arch/arm/probes/ .
|
||||
obj-$(CONFIG_KPROBES) += patch.o insn.o
|
||||
obj-$(CONFIG_OABI_COMPAT) += sys_oabi-compat.o
|
||||
|
@ -144,7 +144,7 @@ static DEVICE_ATTR(release, S_IWUSR, NULL, cpu_release_store);
|
||||
#endif /* CONFIG_ARCH_CPU_PROBE_RELEASE */
|
||||
#endif /* CONFIG_HOTPLUG_CPU */
|
||||
|
||||
#ifdef CONFIG_KEXEC
|
||||
#ifdef CONFIG_KEXEC_CORE
|
||||
#include <linux/kexec.h>
|
||||
|
||||
static ssize_t crash_notes_show(struct device *dev,
|
||||
@ -189,14 +189,14 @@ static const struct attribute_group crash_note_cpu_attr_group = {
|
||||
#endif
|
||||
|
||||
static const struct attribute_group *common_cpu_attr_groups[] = {
|
||||
#ifdef CONFIG_KEXEC
|
||||
#ifdef CONFIG_KEXEC_CORE
|
||||
&crash_note_cpu_attr_group,
|
||||
#endif
|
||||
NULL
|
||||
};
|
||||
|
||||
static const struct attribute_group *hotplugable_cpu_attr_groups[] = {
|
||||
#ifdef CONFIG_KEXEC
|
||||
#ifdef CONFIG_KEXEC_CORE
|
||||
&crash_note_cpu_attr_group,
|
||||
#endif
|
||||
NULL
|
||||
|
@ -180,6 +180,9 @@ static inline unsigned long memblk_nr_poison(struct memory_block *mem)
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Must acquire mem_hotplug_lock in write mode.
|
||||
*/
|
||||
static int memory_block_online(struct memory_block *mem)
|
||||
{
|
||||
unsigned long start_pfn = section_nr_to_pfn(mem->start_section_nr);
|
||||
@ -204,10 +207,11 @@ static int memory_block_online(struct memory_block *mem)
|
||||
if (mem->altmap)
|
||||
nr_vmemmap_pages = mem->altmap->free;
|
||||
|
||||
mem_hotplug_begin();
|
||||
if (nr_vmemmap_pages) {
|
||||
ret = mhp_init_memmap_on_memory(start_pfn, nr_vmemmap_pages, zone);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = online_pages(start_pfn + nr_vmemmap_pages,
|
||||
@ -215,7 +219,7 @@ static int memory_block_online(struct memory_block *mem)
|
||||
if (ret) {
|
||||
if (nr_vmemmap_pages)
|
||||
mhp_deinit_memmap_on_memory(start_pfn, nr_vmemmap_pages);
|
||||
return ret;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -227,9 +231,14 @@ static int memory_block_online(struct memory_block *mem)
|
||||
nr_vmemmap_pages);
|
||||
|
||||
mem->zone = zone;
|
||||
out:
|
||||
mem_hotplug_done();
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Must acquire mem_hotplug_lock in write mode.
|
||||
*/
|
||||
static int memory_block_offline(struct memory_block *mem)
|
||||
{
|
||||
unsigned long start_pfn = section_nr_to_pfn(mem->start_section_nr);
|
||||
@ -247,6 +256,7 @@ static int memory_block_offline(struct memory_block *mem)
|
||||
if (mem->altmap)
|
||||
nr_vmemmap_pages = mem->altmap->free;
|
||||
|
||||
mem_hotplug_begin();
|
||||
if (nr_vmemmap_pages)
|
||||
adjust_present_page_count(pfn_to_page(start_pfn), mem->group,
|
||||
-nr_vmemmap_pages);
|
||||
@ -258,13 +268,15 @@ static int memory_block_offline(struct memory_block *mem)
|
||||
if (nr_vmemmap_pages)
|
||||
adjust_present_page_count(pfn_to_page(start_pfn),
|
||||
mem->group, nr_vmemmap_pages);
|
||||
return ret;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (nr_vmemmap_pages)
|
||||
mhp_deinit_memmap_on_memory(start_pfn, nr_vmemmap_pages);
|
||||
|
||||
mem->zone = NULL;
|
||||
out:
|
||||
mem_hotplug_done();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -268,6 +268,7 @@ config HUGETLBFS
|
||||
|
||||
config HUGETLB_PAGE
|
||||
def_bool HUGETLBFS
|
||||
select XARRAY_MULTI
|
||||
|
||||
config HUGETLB_PAGE_OPTIMIZE_VMEMMAP
|
||||
def_bool HUGETLB_PAGE
|
||||
|
@ -501,15 +501,38 @@ int nilfs_sufile_mark_dirty(struct inode *sufile, __u64 segnum)
|
||||
|
||||
down_write(&NILFS_MDT(sufile)->mi_sem);
|
||||
ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 0, &bh);
|
||||
if (!ret) {
|
||||
mark_buffer_dirty(bh);
|
||||
nilfs_mdt_mark_dirty(sufile);
|
||||
kaddr = kmap_atomic(bh->b_page);
|
||||
su = nilfs_sufile_block_get_segment_usage(sufile, segnum, bh, kaddr);
|
||||
nilfs_segment_usage_set_dirty(su);
|
||||
if (ret)
|
||||
goto out_sem;
|
||||
|
||||
kaddr = kmap_atomic(bh->b_page);
|
||||
su = nilfs_sufile_block_get_segment_usage(sufile, segnum, bh, kaddr);
|
||||
if (unlikely(nilfs_segment_usage_error(su))) {
|
||||
struct the_nilfs *nilfs = sufile->i_sb->s_fs_info;
|
||||
|
||||
kunmap_atomic(kaddr);
|
||||
brelse(bh);
|
||||
if (nilfs_segment_is_active(nilfs, segnum)) {
|
||||
nilfs_error(sufile->i_sb,
|
||||
"active segment %llu is erroneous",
|
||||
(unsigned long long)segnum);
|
||||
} else {
|
||||
/*
|
||||
* Segments marked erroneous are never allocated by
|
||||
* nilfs_sufile_alloc(); only active segments, ie,
|
||||
* the segments indexed by ns_segnum or ns_nextnum,
|
||||
* can be erroneous here.
|
||||
*/
|
||||
WARN_ON_ONCE(1);
|
||||
}
|
||||
ret = -EIO;
|
||||
} else {
|
||||
nilfs_segment_usage_set_dirty(su);
|
||||
kunmap_atomic(kaddr);
|
||||
mark_buffer_dirty(bh);
|
||||
nilfs_mdt_mark_dirty(sufile);
|
||||
brelse(bh);
|
||||
}
|
||||
out_sem:
|
||||
up_write(&NILFS_MDT(sufile)->mi_sem);
|
||||
return ret;
|
||||
}
|
||||
@ -536,9 +559,14 @@ int nilfs_sufile_set_segment_usage(struct inode *sufile, __u64 segnum,
|
||||
|
||||
kaddr = kmap_atomic(bh->b_page);
|
||||
su = nilfs_sufile_block_get_segment_usage(sufile, segnum, bh, kaddr);
|
||||
WARN_ON(nilfs_segment_usage_error(su));
|
||||
if (modtime)
|
||||
if (modtime) {
|
||||
/*
|
||||
* Check segusage error and set su_lastmod only when updating
|
||||
* this entry with a valid timestamp, not for cancellation.
|
||||
*/
|
||||
WARN_ON_ONCE(nilfs_segment_usage_error(su));
|
||||
su->su_lastmod = cpu_to_le64(modtime);
|
||||
}
|
||||
su->su_nblocks = cpu_to_le32(nblocks);
|
||||
kunmap_atomic(kaddr);
|
||||
|
||||
|
@ -716,7 +716,11 @@ int init_nilfs(struct the_nilfs *nilfs, struct super_block *sb, char *data)
|
||||
goto failed_sbh;
|
||||
}
|
||||
nilfs_release_super_block(nilfs);
|
||||
sb_set_blocksize(sb, blocksize);
|
||||
if (!sb_set_blocksize(sb, blocksize)) {
|
||||
nilfs_err(sb, "bad blocksize %d", blocksize);
|
||||
err = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = nilfs_load_super_block(nilfs, sb, blocksize, &sbp);
|
||||
if (err)
|
||||
|
@ -1982,15 +1982,31 @@ static int pagemap_scan_test_walk(unsigned long start, unsigned long end,
|
||||
struct pagemap_scan_private *p = walk->private;
|
||||
struct vm_area_struct *vma = walk->vma;
|
||||
unsigned long vma_category = 0;
|
||||
bool wp_allowed = userfaultfd_wp_async(vma) &&
|
||||
userfaultfd_wp_use_markers(vma);
|
||||
|
||||
if (userfaultfd_wp_async(vma) && userfaultfd_wp_use_markers(vma))
|
||||
vma_category |= PAGE_IS_WPALLOWED;
|
||||
else if (p->arg.flags & PM_SCAN_CHECK_WPASYNC)
|
||||
return -EPERM;
|
||||
if (!wp_allowed) {
|
||||
/* User requested explicit failure over wp-async capability */
|
||||
if (p->arg.flags & PM_SCAN_CHECK_WPASYNC)
|
||||
return -EPERM;
|
||||
/*
|
||||
* User requires wr-protect, and allows silently skipping
|
||||
* unsupported vmas.
|
||||
*/
|
||||
if (p->arg.flags & PM_SCAN_WP_MATCHING)
|
||||
return 1;
|
||||
/*
|
||||
* Then the request doesn't involve wr-protects at all,
|
||||
* fall through to the rest checks, and allow vma walk.
|
||||
*/
|
||||
}
|
||||
|
||||
if (vma->vm_flags & VM_PFNMAP)
|
||||
return 1;
|
||||
|
||||
if (wp_allowed)
|
||||
vma_category |= PAGE_IS_WPALLOWED;
|
||||
|
||||
if (!pagemap_scan_is_interesting_vma(vma_category, p))
|
||||
return 1;
|
||||
|
||||
@ -2140,7 +2156,7 @@ static int pagemap_scan_pmd_entry(pmd_t *pmd, unsigned long start,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!p->vec_out) {
|
||||
if ((p->arg.flags & PM_SCAN_WP_MATCHING) && !p->vec_out) {
|
||||
/* Fast path for performing exclusive WP */
|
||||
for (addr = start; addr != end; pte++, addr += PAGE_SIZE) {
|
||||
if (pte_uffd_wp(ptep_get(pte)))
|
||||
|
@ -321,7 +321,7 @@ int squashfs_read_data(struct super_block *sb, u64 index, int length,
|
||||
TRACE("Block @ 0x%llx, %scompressed size %d\n", index - 2,
|
||||
compressed ? "" : "un", length);
|
||||
}
|
||||
if (length < 0 || length > output->length ||
|
||||
if (length <= 0 || length > output->length ||
|
||||
(index + length) > msblk->bytes_used) {
|
||||
res = -EIO;
|
||||
goto out;
|
||||
|
@ -454,7 +454,7 @@ static inline void memcpy_from_folio(char *to, struct folio *folio,
|
||||
memcpy(to, from, chunk);
|
||||
kunmap_local(from);
|
||||
|
||||
from += chunk;
|
||||
to += chunk;
|
||||
offset += chunk;
|
||||
len -= chunk;
|
||||
} while (len > 0);
|
||||
|
@ -1268,10 +1268,7 @@ static inline bool __vma_shareable_lock(struct vm_area_struct *vma)
|
||||
return (vma->vm_flags & VM_MAYSHARE) && vma->vm_private_data;
|
||||
}
|
||||
|
||||
static inline bool __vma_private_lock(struct vm_area_struct *vma)
|
||||
{
|
||||
return (!(vma->vm_flags & VM_MAYSHARE)) && vma->vm_private_data;
|
||||
}
|
||||
bool __vma_private_lock(struct vm_area_struct *vma);
|
||||
|
||||
/*
|
||||
* Safe version of huge_pte_offset() to check the locks. See comments
|
||||
|
@ -2,6 +2,7 @@
|
||||
#ifndef _LINUX_UNITS_H
|
||||
#define _LINUX_UNITS_H
|
||||
|
||||
#include <linux/bits.h>
|
||||
#include <linux/math.h>
|
||||
|
||||
/* Metric prefixes in accordance with Système international (d'unités) */
|
||||
|
@ -97,7 +97,6 @@ config CRASH_DUMP
|
||||
depends on ARCH_SUPPORTS_KEXEC
|
||||
select CRASH_CORE
|
||||
select KEXEC_CORE
|
||||
select KEXEC
|
||||
help
|
||||
Generate crash dump after being started by kexec.
|
||||
This should be normally only set in special crash dump kernels
|
||||
|
@ -366,13 +366,25 @@ struct cpumask *group_cpus_evenly(unsigned int numgrps)
|
||||
if (!masks)
|
||||
goto fail_node_to_cpumask;
|
||||
|
||||
/* Stabilize the cpumasks */
|
||||
cpus_read_lock();
|
||||
build_node_to_cpumask(node_to_cpumask);
|
||||
|
||||
/*
|
||||
* Make a local cache of 'cpu_present_mask', so the two stages
|
||||
* spread can observe consistent 'cpu_present_mask' without holding
|
||||
* cpu hotplug lock, then we can reduce deadlock risk with cpu
|
||||
* hotplug code.
|
||||
*
|
||||
* Here CPU hotplug may happen when reading `cpu_present_mask`, and
|
||||
* we can live with the case because it only affects that hotplug
|
||||
* CPU is handled in the 1st or 2nd stage, and either way is correct
|
||||
* from API user viewpoint since 2-stage spread is sort of
|
||||
* optimization.
|
||||
*/
|
||||
cpumask_copy(npresmsk, data_race(cpu_present_mask));
|
||||
|
||||
/* grouping present CPUs first */
|
||||
ret = __group_cpus_evenly(curgrp, numgrps, node_to_cpumask,
|
||||
cpu_present_mask, nmsk, masks);
|
||||
npresmsk, nmsk, masks);
|
||||
if (ret < 0)
|
||||
goto fail_build_affinity;
|
||||
nr_present = ret;
|
||||
@ -387,15 +399,13 @@ struct cpumask *group_cpus_evenly(unsigned int numgrps)
|
||||
curgrp = 0;
|
||||
else
|
||||
curgrp = nr_present;
|
||||
cpumask_andnot(npresmsk, cpu_possible_mask, cpu_present_mask);
|
||||
cpumask_andnot(npresmsk, cpu_possible_mask, npresmsk);
|
||||
ret = __group_cpus_evenly(curgrp, numgrps, node_to_cpumask,
|
||||
npresmsk, nmsk, masks);
|
||||
if (ret >= 0)
|
||||
nr_others = ret;
|
||||
|
||||
fail_build_affinity:
|
||||
cpus_read_unlock();
|
||||
|
||||
if (ret >= 0)
|
||||
WARN_ON(nr_present + nr_others < numgrps);
|
||||
|
||||
|
16
mm/Kconfig
16
mm/Kconfig
@ -1201,13 +1201,6 @@ config ANON_VMA_NAME
|
||||
area from being merged with adjacent virtual memory areas due to the
|
||||
difference in their name.
|
||||
|
||||
config USERFAULTFD
|
||||
bool "Enable userfaultfd() system call"
|
||||
depends on MMU
|
||||
help
|
||||
Enable the userfaultfd() system call that allows to intercept and
|
||||
handle page faults in userland.
|
||||
|
||||
config HAVE_ARCH_USERFAULTFD_WP
|
||||
bool
|
||||
help
|
||||
@ -1218,6 +1211,14 @@ config HAVE_ARCH_USERFAULTFD_MINOR
|
||||
help
|
||||
Arch has userfaultfd minor fault support
|
||||
|
||||
menuconfig USERFAULTFD
|
||||
bool "Enable userfaultfd() system call"
|
||||
depends on MMU
|
||||
help
|
||||
Enable the userfaultfd() system call that allows to intercept and
|
||||
handle page faults in userland.
|
||||
|
||||
if USERFAULTFD
|
||||
config PTE_MARKER_UFFD_WP
|
||||
bool "Userfaultfd write protection support for shmem/hugetlbfs"
|
||||
default y
|
||||
@ -1227,6 +1228,7 @@ config PTE_MARKER_UFFD_WP
|
||||
Allows to create marker PTEs for userfaultfd write protection
|
||||
purposes. It is required to enable userfaultfd write protection on
|
||||
file-backed memory types like shmem and hugetlbfs.
|
||||
endif # USERFAULTFD
|
||||
|
||||
# multi-gen LRU {
|
||||
config LRU_GEN
|
||||
|
@ -1225,6 +1225,7 @@ static void damon_split_region_at(struct damon_target *t,
|
||||
new->age = r->age;
|
||||
new->last_nr_accesses = r->last_nr_accesses;
|
||||
new->nr_accesses_bp = r->nr_accesses_bp;
|
||||
new->nr_accesses = r->nr_accesses;
|
||||
|
||||
damon_insert_region(new, r, damon_next_region(r), t);
|
||||
}
|
||||
|
@ -139,6 +139,13 @@ static const struct kobj_type damon_sysfs_scheme_region_ktype = {
|
||||
* damon_sysfs_before_damos_apply() understands the situation by showing the
|
||||
* 'finished' status and do nothing.
|
||||
*
|
||||
* If DAMOS is not applied to any region due to any reasons including the
|
||||
* access pattern, the watermarks, the quotas, and the filters,
|
||||
* ->before_damos_apply() will not be called back. Until the situation is
|
||||
* changed, the update will not be finished. To avoid this,
|
||||
* damon_sysfs_after_sampling() set the status as 'finished' if more than two
|
||||
* apply intervals of the scheme is passed while the state is 'idle'.
|
||||
*
|
||||
* Finally, the tried regions request handling finisher function
|
||||
* (damon_sysfs_schemes_update_regions_stop()) unregisters the callbacks.
|
||||
*/
|
||||
@ -154,6 +161,7 @@ struct damon_sysfs_scheme_regions {
|
||||
int nr_regions;
|
||||
unsigned long total_bytes;
|
||||
enum damos_sysfs_regions_upd_status upd_status;
|
||||
unsigned long upd_timeout_jiffies;
|
||||
};
|
||||
|
||||
static struct damon_sysfs_scheme_regions *
|
||||
@ -1854,7 +1862,9 @@ static int damon_sysfs_after_sampling(struct damon_ctx *ctx)
|
||||
for (i = 0; i < sysfs_schemes->nr; i++) {
|
||||
sysfs_regions = sysfs_schemes->schemes_arr[i]->tried_regions;
|
||||
if (sysfs_regions->upd_status ==
|
||||
DAMOS_TRIED_REGIONS_UPD_STARTED)
|
||||
DAMOS_TRIED_REGIONS_UPD_STARTED ||
|
||||
time_after(jiffies,
|
||||
sysfs_regions->upd_timeout_jiffies))
|
||||
sysfs_regions->upd_status =
|
||||
DAMOS_TRIED_REGIONS_UPD_FINISHED;
|
||||
}
|
||||
@ -1885,14 +1895,41 @@ int damon_sysfs_schemes_clear_regions(
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct damos *damos_sysfs_nth_scheme(int n, struct damon_ctx *ctx)
|
||||
{
|
||||
struct damos *scheme;
|
||||
int i = 0;
|
||||
|
||||
damon_for_each_scheme(scheme, ctx) {
|
||||
if (i == n)
|
||||
return scheme;
|
||||
i++;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void damos_tried_regions_init_upd_status(
|
||||
struct damon_sysfs_schemes *sysfs_schemes)
|
||||
struct damon_sysfs_schemes *sysfs_schemes,
|
||||
struct damon_ctx *ctx)
|
||||
{
|
||||
int i;
|
||||
struct damos *scheme;
|
||||
struct damon_sysfs_scheme_regions *sysfs_regions;
|
||||
|
||||
for (i = 0; i < sysfs_schemes->nr; i++)
|
||||
sysfs_schemes->schemes_arr[i]->tried_regions->upd_status =
|
||||
DAMOS_TRIED_REGIONS_UPD_IDLE;
|
||||
for (i = 0; i < sysfs_schemes->nr; i++) {
|
||||
sysfs_regions = sysfs_schemes->schemes_arr[i]->tried_regions;
|
||||
scheme = damos_sysfs_nth_scheme(i, ctx);
|
||||
if (!scheme) {
|
||||
sysfs_regions->upd_status =
|
||||
DAMOS_TRIED_REGIONS_UPD_FINISHED;
|
||||
continue;
|
||||
}
|
||||
sysfs_regions->upd_status = DAMOS_TRIED_REGIONS_UPD_IDLE;
|
||||
sysfs_regions->upd_timeout_jiffies = jiffies +
|
||||
2 * usecs_to_jiffies(scheme->apply_interval_us ?
|
||||
scheme->apply_interval_us :
|
||||
ctx->attrs.sample_interval);
|
||||
}
|
||||
}
|
||||
|
||||
/* Called from damon_sysfs_cmd_request_callback under damon_sysfs_lock */
|
||||
@ -1902,7 +1939,7 @@ int damon_sysfs_schemes_update_regions_start(
|
||||
{
|
||||
damon_sysfs_schemes_clear_regions(sysfs_schemes, ctx);
|
||||
damon_sysfs_schemes_for_damos_callback = sysfs_schemes;
|
||||
damos_tried_regions_init_upd_status(sysfs_schemes);
|
||||
damos_tried_regions_init_upd_status(sysfs_schemes, ctx);
|
||||
damos_regions_upd_total_bytes_only = total_bytes_only;
|
||||
ctx->callback.before_damos_apply = damon_sysfs_before_damos_apply;
|
||||
ctx->callback.after_sampling = damon_sysfs_after_sampling;
|
||||
|
@ -3371,7 +3371,7 @@ static bool filemap_map_pmd(struct vm_fault *vmf, struct folio *folio,
|
||||
}
|
||||
}
|
||||
|
||||
if (pmd_none(*vmf->pmd))
|
||||
if (pmd_none(*vmf->pmd) && vmf->prealloc_pte)
|
||||
pmd_install(mm, vmf->pmd, &vmf->prealloc_pte);
|
||||
|
||||
return false;
|
||||
|
@ -1182,6 +1182,13 @@ static int is_vma_resv_set(struct vm_area_struct *vma, unsigned long flag)
|
||||
return (get_vma_private_data(vma) & flag) != 0;
|
||||
}
|
||||
|
||||
bool __vma_private_lock(struct vm_area_struct *vma)
|
||||
{
|
||||
return !(vma->vm_flags & VM_MAYSHARE) &&
|
||||
get_vma_private_data(vma) & ~HPAGE_RESV_MASK &&
|
||||
is_vma_resv_set(vma, HPAGE_RESV_OWNER);
|
||||
}
|
||||
|
||||
void hugetlb_dup_vma_private(struct vm_area_struct *vma)
|
||||
{
|
||||
VM_BUG_ON_VMA(!is_vm_hugetlb_page(vma), vma);
|
||||
|
@ -642,32 +642,16 @@ static struct kmemleak_object *__alloc_object(gfp_t gfp)
|
||||
if (!object) {
|
||||
pr_warn("Cannot allocate a kmemleak_object structure\n");
|
||||
kmemleak_disable();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
static int __link_object(struct kmemleak_object *object, unsigned long ptr,
|
||||
size_t size, int min_count, bool is_phys)
|
||||
{
|
||||
|
||||
struct kmemleak_object *parent;
|
||||
struct rb_node **link, *rb_parent;
|
||||
unsigned long untagged_ptr;
|
||||
unsigned long untagged_objp;
|
||||
|
||||
INIT_LIST_HEAD(&object->object_list);
|
||||
INIT_LIST_HEAD(&object->gray_list);
|
||||
INIT_HLIST_HEAD(&object->area_list);
|
||||
raw_spin_lock_init(&object->lock);
|
||||
atomic_set(&object->use_count, 1);
|
||||
object->flags = OBJECT_ALLOCATED | (is_phys ? OBJECT_PHYS : 0);
|
||||
object->pointer = ptr;
|
||||
object->size = kfence_ksize((void *)ptr) ?: size;
|
||||
object->excess_ref = 0;
|
||||
object->min_count = min_count;
|
||||
object->count = 0; /* white color initially */
|
||||
object->jiffies = jiffies;
|
||||
object->checksum = 0;
|
||||
object->del_state = 0;
|
||||
|
||||
@ -692,6 +676,24 @@ static int __link_object(struct kmemleak_object *object, unsigned long ptr,
|
||||
/* kernel backtrace */
|
||||
object->trace_handle = set_track_prepare();
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
static int __link_object(struct kmemleak_object *object, unsigned long ptr,
|
||||
size_t size, int min_count, bool is_phys)
|
||||
{
|
||||
|
||||
struct kmemleak_object *parent;
|
||||
struct rb_node **link, *rb_parent;
|
||||
unsigned long untagged_ptr;
|
||||
unsigned long untagged_objp;
|
||||
|
||||
object->flags = OBJECT_ALLOCATED | (is_phys ? OBJECT_PHYS : 0);
|
||||
object->pointer = ptr;
|
||||
object->size = kfence_ksize((void *)ptr) ?: size;
|
||||
object->min_count = min_count;
|
||||
object->jiffies = jiffies;
|
||||
|
||||
untagged_ptr = (unsigned long)kasan_reset_tag((void *)ptr);
|
||||
/*
|
||||
* Only update min_addr and max_addr with object
|
||||
@ -1150,6 +1152,7 @@ EXPORT_SYMBOL_GPL(kmemleak_free_percpu);
|
||||
void __ref kmemleak_update_trace(const void *ptr)
|
||||
{
|
||||
struct kmemleak_object *object;
|
||||
depot_stack_handle_t trace_handle;
|
||||
unsigned long flags;
|
||||
|
||||
pr_debug("%s(0x%px)\n", __func__, ptr);
|
||||
@ -1166,8 +1169,9 @@ void __ref kmemleak_update_trace(const void *ptr)
|
||||
return;
|
||||
}
|
||||
|
||||
trace_handle = set_track_prepare();
|
||||
raw_spin_lock_irqsave(&object->lock, flags);
|
||||
object->trace_handle = set_track_prepare();
|
||||
object->trace_handle = trace_handle;
|
||||
raw_spin_unlock_irqrestore(&object->lock, flags);
|
||||
|
||||
put_object(object);
|
||||
|
11
mm/madvise.c
11
mm/madvise.c
@ -335,6 +335,7 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd,
|
||||
struct folio *folio = NULL;
|
||||
LIST_HEAD(folio_list);
|
||||
bool pageout_anon_only_filter;
|
||||
unsigned int batch_count = 0;
|
||||
|
||||
if (fatal_signal_pending(current))
|
||||
return -EINTR;
|
||||
@ -416,6 +417,7 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd,
|
||||
regular_folio:
|
||||
#endif
|
||||
tlb_change_page_size(tlb, PAGE_SIZE);
|
||||
restart:
|
||||
start_pte = pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
|
||||
if (!start_pte)
|
||||
return 0;
|
||||
@ -424,6 +426,15 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd,
|
||||
for (; addr < end; pte++, addr += PAGE_SIZE) {
|
||||
ptent = ptep_get(pte);
|
||||
|
||||
if (++batch_count == SWAP_CLUSTER_MAX) {
|
||||
batch_count = 0;
|
||||
if (need_resched()) {
|
||||
pte_unmap_unlock(start_pte, ptl);
|
||||
cond_resched();
|
||||
goto restart;
|
||||
}
|
||||
}
|
||||
|
||||
if (pte_none(ptent))
|
||||
continue;
|
||||
|
||||
|
@ -3166,6 +3166,7 @@ __always_inline struct obj_cgroup *current_obj_cgroup(void)
|
||||
return NULL;
|
||||
|
||||
from_memcg:
|
||||
objcg = NULL;
|
||||
for (; !mem_cgroup_is_root(memcg); memcg = parent_mem_cgroup(memcg)) {
|
||||
/*
|
||||
* Memcg pointer is protected by scope (see set_active_memcg())
|
||||
@ -3176,7 +3177,6 @@ __always_inline struct obj_cgroup *current_obj_cgroup(void)
|
||||
objcg = rcu_dereference_check(memcg->objcg, 1);
|
||||
if (likely(objcg))
|
||||
break;
|
||||
objcg = NULL;
|
||||
}
|
||||
|
||||
return objcg;
|
||||
|
@ -1517,6 +1517,7 @@ static unsigned long zap_pte_range(struct mmu_gather *tlb,
|
||||
continue;
|
||||
} else {
|
||||
/* We should have covered all the swap entry types */
|
||||
pr_alert("unrecognized swap entry 0x%lx\n", entry.val);
|
||||
WARN_ON_ONCE(1);
|
||||
}
|
||||
pte_clear_not_present_full(mm, addr, pte, tlb->fullmm);
|
||||
|
@ -1129,6 +1129,9 @@ void mhp_deinit_memmap_on_memory(unsigned long pfn, unsigned long nr_pages)
|
||||
kasan_remove_zero_shadow(__va(PFN_PHYS(pfn)), PFN_PHYS(nr_pages));
|
||||
}
|
||||
|
||||
/*
|
||||
* Must be called with mem_hotplug_lock in write mode.
|
||||
*/
|
||||
int __ref online_pages(unsigned long pfn, unsigned long nr_pages,
|
||||
struct zone *zone, struct memory_group *group)
|
||||
{
|
||||
@ -1149,7 +1152,6 @@ int __ref online_pages(unsigned long pfn, unsigned long nr_pages,
|
||||
!IS_ALIGNED(pfn + nr_pages, PAGES_PER_SECTION)))
|
||||
return -EINVAL;
|
||||
|
||||
mem_hotplug_begin();
|
||||
|
||||
/* associate pfn range with the zone */
|
||||
move_pfn_range_to_zone(zone, pfn, nr_pages, NULL, MIGRATE_ISOLATE);
|
||||
@ -1208,7 +1210,6 @@ int __ref online_pages(unsigned long pfn, unsigned long nr_pages,
|
||||
writeback_set_ratelimit();
|
||||
|
||||
memory_notify(MEM_ONLINE, &arg);
|
||||
mem_hotplug_done();
|
||||
return 0;
|
||||
|
||||
failed_addition:
|
||||
@ -1217,7 +1218,6 @@ int __ref online_pages(unsigned long pfn, unsigned long nr_pages,
|
||||
(((unsigned long long) pfn + nr_pages) << PAGE_SHIFT) - 1);
|
||||
memory_notify(MEM_CANCEL_ONLINE, &arg);
|
||||
remove_pfn_range_from_zone(zone, pfn, nr_pages);
|
||||
mem_hotplug_done();
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -1458,7 +1458,7 @@ int __ref add_memory_resource(int nid, struct resource *res, mhp_t mhp_flags)
|
||||
/* create memory block devices after memory was added */
|
||||
ret = create_memory_block_devices(start, size, params.altmap, group);
|
||||
if (ret) {
|
||||
arch_remove_memory(start, size, NULL);
|
||||
arch_remove_memory(start, size, params.altmap);
|
||||
goto error_free;
|
||||
}
|
||||
|
||||
@ -1863,6 +1863,9 @@ static int count_system_ram_pages_cb(unsigned long start_pfn,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Must be called with mem_hotplug_lock in write mode.
|
||||
*/
|
||||
int __ref offline_pages(unsigned long start_pfn, unsigned long nr_pages,
|
||||
struct zone *zone, struct memory_group *group)
|
||||
{
|
||||
@ -1885,8 +1888,6 @@ int __ref offline_pages(unsigned long start_pfn, unsigned long nr_pages,
|
||||
!IS_ALIGNED(start_pfn + nr_pages, PAGES_PER_SECTION)))
|
||||
return -EINVAL;
|
||||
|
||||
mem_hotplug_begin();
|
||||
|
||||
/*
|
||||
* Don't allow to offline memory blocks that contain holes.
|
||||
* Consequently, memory blocks with holes can never get onlined
|
||||
@ -2031,7 +2032,6 @@ int __ref offline_pages(unsigned long start_pfn, unsigned long nr_pages,
|
||||
|
||||
memory_notify(MEM_OFFLINE, &arg);
|
||||
remove_pfn_range_from_zone(zone, start_pfn, nr_pages);
|
||||
mem_hotplug_done();
|
||||
return 0;
|
||||
|
||||
failed_removal_isolated:
|
||||
@ -2046,7 +2046,6 @@ int __ref offline_pages(unsigned long start_pfn, unsigned long nr_pages,
|
||||
(unsigned long long) start_pfn << PAGE_SHIFT,
|
||||
((unsigned long long) end_pfn << PAGE_SHIFT) - 1,
|
||||
reason);
|
||||
mem_hotplug_done();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -138,15 +138,11 @@ $total_size = 0;
|
||||
while (my $line = <STDIN>) {
|
||||
if ($line =~ m/$funcre/) {
|
||||
$func = $1;
|
||||
next if $line !~ m/^($xs*)/;
|
||||
next if $line !~ m/^($x*)/;
|
||||
if ($total_size > $min_stack) {
|
||||
push @stack, "$intro$total_size\n";
|
||||
}
|
||||
|
||||
$addr = $1;
|
||||
$addr =~ s/ /0/g;
|
||||
$addr = "0x$addr";
|
||||
|
||||
$addr = "0x$1";
|
||||
$intro = "$addr $func [$file]:";
|
||||
my $padlen = 56 - length($intro);
|
||||
while ($padlen > 0) {
|
||||
|
@ -36,26 +36,26 @@ def for_each_bus():
|
||||
for kobj in kset_for_each_object(gdb.parse_and_eval('bus_kset')):
|
||||
subsys = container_of(kobj, kset_type.get_type().pointer(), 'kobj')
|
||||
subsys_priv = container_of(subsys, subsys_private_type.get_type().pointer(), 'subsys')
|
||||
yield subsys_priv['bus']
|
||||
yield subsys_priv
|
||||
|
||||
|
||||
def for_each_class():
|
||||
for kobj in kset_for_each_object(gdb.parse_and_eval('class_kset')):
|
||||
subsys = container_of(kobj, kset_type.get_type().pointer(), 'kobj')
|
||||
subsys_priv = container_of(subsys, subsys_private_type.get_type().pointer(), 'subsys')
|
||||
yield subsys_priv['class']
|
||||
yield subsys_priv
|
||||
|
||||
|
||||
def get_bus_by_name(name):
|
||||
for item in for_each_bus():
|
||||
if item['name'].string() == name:
|
||||
if item['bus']['name'].string() == name:
|
||||
return item
|
||||
raise gdb.GdbError("Can't find bus type {!r}".format(name))
|
||||
|
||||
|
||||
def get_class_by_name(name):
|
||||
for item in for_each_class():
|
||||
if item['name'].string() == name:
|
||||
if item['class']['name'].string() == name:
|
||||
return item
|
||||
raise gdb.GdbError("Can't find device class {!r}".format(name))
|
||||
|
||||
@ -70,13 +70,13 @@ def klist_for_each(klist):
|
||||
|
||||
|
||||
def bus_for_each_device(bus):
|
||||
for kn in klist_for_each(bus['p']['klist_devices']):
|
||||
for kn in klist_for_each(bus['klist_devices']):
|
||||
dp = container_of(kn, device_private_type.get_type().pointer(), 'knode_bus')
|
||||
yield dp['device']
|
||||
|
||||
|
||||
def class_for_each_device(cls):
|
||||
for kn in klist_for_each(cls['p']['klist_devices']):
|
||||
for kn in klist_for_each(cls['klist_devices']):
|
||||
dp = container_of(kn, device_private_type.get_type().pointer(), 'knode_class')
|
||||
yield dp['device']
|
||||
|
||||
@ -103,7 +103,7 @@ class LxDeviceListBus(gdb.Command):
|
||||
def invoke(self, arg, from_tty):
|
||||
if not arg:
|
||||
for bus in for_each_bus():
|
||||
gdb.write('bus {}:\t{}\n'.format(bus['name'].string(), bus))
|
||||
gdb.write('bus {}:\t{}\n'.format(bus['bus']['name'].string(), bus))
|
||||
for dev in bus_for_each_device(bus):
|
||||
_show_device(dev, level=1)
|
||||
else:
|
||||
@ -123,7 +123,7 @@ class LxDeviceListClass(gdb.Command):
|
||||
def invoke(self, arg, from_tty):
|
||||
if not arg:
|
||||
for cls in for_each_class():
|
||||
gdb.write("class {}:\t{}\n".format(cls['name'].string(), cls))
|
||||
gdb.write("class {}:\t{}\n".format(cls['class']['name'].string(), cls))
|
||||
for dev in class_for_each_device(cls):
|
||||
_show_device(dev, level=1)
|
||||
else:
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
import gdb
|
||||
|
||||
from linux import utils
|
||||
from linux import utils, lists
|
||||
|
||||
|
||||
task_type = utils.CachedType("struct task_struct")
|
||||
@ -22,19 +22,15 @@ task_type = utils.CachedType("struct task_struct")
|
||||
def task_lists():
|
||||
task_ptr_type = task_type.get_type().pointer()
|
||||
init_task = gdb.parse_and_eval("init_task").address
|
||||
t = g = init_task
|
||||
t = init_task
|
||||
|
||||
while True:
|
||||
while True:
|
||||
yield t
|
||||
thread_head = t['signal']['thread_head']
|
||||
for thread in lists.list_for_each_entry(thread_head, task_ptr_type, 'thread_node'):
|
||||
yield thread
|
||||
|
||||
t = utils.container_of(t['thread_group']['next'],
|
||||
task_ptr_type, "thread_group")
|
||||
if t == g:
|
||||
break
|
||||
|
||||
t = g = utils.container_of(g['tasks']['next'],
|
||||
task_ptr_type, "tasks")
|
||||
t = utils.container_of(t['tasks']['next'],
|
||||
task_ptr_type, "tasks")
|
||||
if t == init_task:
|
||||
return
|
||||
|
||||
|
@ -60,7 +60,7 @@ TEST_GEN_FILES += mrelease_test
|
||||
TEST_GEN_FILES += mremap_dontunmap
|
||||
TEST_GEN_FILES += mremap_test
|
||||
TEST_GEN_FILES += on-fault-limit
|
||||
TEST_GEN_PROGS += pagemap_ioctl
|
||||
TEST_GEN_FILES += pagemap_ioctl
|
||||
TEST_GEN_FILES += thuge-gen
|
||||
TEST_GEN_FILES += transhuge-stress
|
||||
TEST_GEN_FILES += uffd-stress
|
||||
@ -72,7 +72,7 @@ TEST_GEN_FILES += mdwe_test
|
||||
TEST_GEN_FILES += hugetlb_fault_after_madv
|
||||
|
||||
ifneq ($(ARCH),arm64)
|
||||
TEST_GEN_PROGS += soft-dirty
|
||||
TEST_GEN_FILES += soft-dirty
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),x86_64)
|
||||
|
@ -36,6 +36,7 @@ int pagemap_fd;
|
||||
int uffd;
|
||||
int page_size;
|
||||
int hpage_size;
|
||||
const char *progname;
|
||||
|
||||
#define LEN(region) ((region.end - region.start)/page_size)
|
||||
|
||||
@ -1149,11 +1150,11 @@ int sanity_tests(void)
|
||||
munmap(mem, mem_size);
|
||||
|
||||
/* 9. Memory mapped file */
|
||||
fd = open(__FILE__, O_RDONLY);
|
||||
fd = open(progname, O_RDONLY);
|
||||
if (fd < 0)
|
||||
ksft_exit_fail_msg("%s Memory mapped file\n", __func__);
|
||||
|
||||
ret = stat(__FILE__, &sbuf);
|
||||
ret = stat(progname, &sbuf);
|
||||
if (ret < 0)
|
||||
ksft_exit_fail_msg("error %d %d %s\n", ret, errno, strerror(errno));
|
||||
|
||||
@ -1472,12 +1473,14 @@ static void transact_test(int page_size)
|
||||
extra_thread_faults);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int mem_size, shmid, buf_size, fd, i, ret;
|
||||
char *mem, *map, *fmem;
|
||||
struct stat sbuf;
|
||||
|
||||
progname = argv[0];
|
||||
|
||||
ksft_print_header();
|
||||
|
||||
if (init_uffd())
|
||||
|
Loading…
Reference in New Issue
Block a user