linux/drivers
Liam R. Howlett d4af56c5c7 mm: start tracking VMAs with maple tree
Start tracking the VMAs with the new maple tree structure in parallel with
the rb_tree.  Add debug and trace events for maple tree operations and
duplicate the rb_tree that is created on forks into the maple tree.

The maple tree is added to the mm_struct including the mm_init struct,
added support in required mm/mmap functions, added tracking in kernel/fork
for process forking, and used to find the unmapped_area and checked
against what the rbtree finds.

This also moves the mmap_lock() in exit_mmap() since the oom reaper call
does walk the VMAs.  Otherwise lockdep will be unhappy if oom happens.

When splitting a vma fails due to allocations of the maple tree nodes,
the error path in __split_vma() calls new->vm_ops->close(new).  The page
accounting for hugetlb is actually in the close() operation,  so it
accounts for the removal of 1/2 of the VMA which was not adjusted.  This
results in a negative exit value.  To avoid the negative charge, set
vm_start = vm_end and vm_pgoff = 0.

There is also a potential accounting issue in special mappings from
insert_vm_struct() failing to allocate, so reverse the charge there in
the failure scenario.

Link: https://lkml.kernel.org/r/20220906194824.2110408-9-Liam.Howlett@oracle.com
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Tested-by: Yu Zhao <yuzhao@google.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: David Howells <dhowells@redhat.com>
Cc: Davidlohr Bueso <dave@stgolabs.net>
Cc: SeongJae Park <sj@kernel.org>
Cc: Sven Schnelle <svens@linux.ibm.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2022-09-26 19:46:14 -07:00
..
accessibility
acpi Merge branch 'acpi-processor' into acpi 2022-08-27 14:43:18 +02:00
amba
android binder_alloc: add missing mmap_lock calls when using the VMA 2022-08-28 14:02:44 -07:00
ata ata: libata-eh: Add missing command name 2022-08-16 05:42:51 +09:00
atm
auxdisplay
base mm: kill is_memblock_offlined() 2022-09-11 20:26:04 -07:00
bcma
block zram: don't retry compress incompressible page 2022-09-11 20:26:02 -07:00
bluetooth
bus
cdrom
char
clk
clocksource RISC-V: Add Sstc extension support 2022-08-11 14:41:52 -07:00
comedi
connector
counter
cpufreq cpufreq: check only freq_table in __resolve_freq() 2022-08-23 20:00:52 +02:00
cpuidle
crypto
cxl
dax mm/demotion/dax/kmem: set node's abstract distance to MEMTIER_DEFAULT_DAX_ADISTANCE 2022-09-26 19:46:11 -07:00
dca
devfreq
dio
dma
dma-buf
edac
eisa
extcon
firewire
firmware mm: start tracking VMAs with maple tree 2022-09-26 19:46:14 -07:00
fpga
fsi
gnss
gpio
gpu Merge tag 'amd-drm-fixes-6.0-2022-08-25' of https://gitlab.freedesktop.org/agd5f/linux into drm-fixes 2022-08-26 09:56:53 +10:00
greybus
hid
hsi
hte
hv
hwmon
hwspinlock
hwtracing
i2c i2c: imx: Make sure to unregister adapter on remove() 2022-08-21 10:27:33 +02:00
i3c
idle
iio
infiniband RDMA: Handle the return code from dma_resv_wait_timeout() properly 2022-08-16 17:13:23 +03:00
input
interconnect
iommu irqchip fixes for 6.0, take #1 2022-08-18 17:37:22 +02:00
ipack
irqchip irqchip fixes for 6.0, take #1 2022-08-18 17:37:22 +02:00
isdn
leds
macintosh
mailbox
mcb
md block-6.0-2022-08-26 2022-08-26 11:05:54 -07:00
media
memory
memstick
message
mfd
misc
mmc linux-kselftest-kunit-fixes-6.0-rc3 2022-08-23 13:23:07 -07:00
most
mtd
mux
net Including fixes from ipsec and netfilter (with one broken Fixes tag). 2022-08-25 14:03:58 -07:00
nfc nfc: pn533: Fix use-after-free bugs caused by pn532_cmd_timeout 2022-08-22 14:51:30 +01:00
ntb
nubus
nvdimm virtio: fatures, fixes 2022-08-12 09:50:34 -07:00
nvme block-6.0-2022-08-12 2022-08-13 13:37:36 -07:00
nvmem
of RISC-V Patches for the 5.20 Merge Window, Part 2 2022-08-12 18:39:43 -07:00
opp
parisc parisc: ccio-dma: Handle kmalloc failure in ccio_init_resources() 2022-08-22 11:09:17 +02:00
parport
pci Fix of heap data and clang warnings, support for a new Intel NTB device, 2022-08-13 14:00:45 -07:00
pcmcia
peci
perf perf: riscv legacy: fix kerneldoc comment warning 2022-08-18 14:19:26 -07:00
phy
pinctrl
platform sound fixes for 6.0-rc2 2022-08-19 09:46:11 -07:00
pnp
power power supply and reset changes for the v6.0 series 2022-08-12 09:37:33 -07:00
powercap
pps
ps3
ptp
pwm
rapidio
ras
regulator regulator: Fixes for v6.0 2022-08-16 11:36:38 -07:00
remoteproc virtio: Revert "virtio: find_vqs() add arg sizes" 2022-08-16 01:40:24 -04:00
reset
rpmsg
rtc
s390 s390 updates for 6.0-rc2 2022-08-20 11:29:01 -07:00
sbus
scsi scsi: sd: Revert "Rework asynchronous resume support" 2022-08-22 22:45:25 -04:00
sh
siox
slimbus
soc
soundwire
spi spi: Fixes for v6.0 2022-08-16 11:40:15 -07:00
spmi
ssb
staging
target SCSI misc on 20220813 2022-08-13 13:41:48 -07:00
tc
tee tee: add overflow check in register_shm_helper() 2022-08-18 09:20:27 -07:00
thermal Merge branch 'thermal-core' 2022-08-27 15:07:58 +02:00
thunderbolt
tty
ufs scsi: ufs: core: Reduce the power mode change timeout 2022-08-19 21:34:36 -04:00
uio
usb
vdpa
vfio
vhost virtio: fatures, fixes 2022-08-12 09:50:34 -07:00
video fbdev: fbcon: Properly revert changes when vc_resize() failed 2022-08-26 19:56:18 +02:00
virt
virtio virtio: kerneldocs fixes and enhancements 2022-08-16 01:40:24 -04:00
vlynq
w1
watchdog
xen xen: branch for v6.0-rc3 2022-08-27 15:38:00 -07:00
zorro
Kconfig
Makefile