| 1 |
|
| 2 |
|
| 3 |
|
| 4 |
|
| 5 |
|
| 6 |
|
| 7 |
|
| 8 | LOCAL_HDRS += $(selfdir)/mm/local_config.h_gen $(top_srcdir)/mm/gup_test.h
|
| 9 | LOCAL_HDRS += $(selfdir)/mm/mseal_helpers.h
|
| 10 |
|
| 11 | include local_config.mk
|
| 12 |
|
| 13 | ifeq ($(ARCH),)
|
| 14 |
|
| 15 | ifeq ($(CROSS_COMPILE),)
|
| 16 | uname_M := $(shell uname -m 2>/dev/null || echo not)
|
| 17 | else
|
| 18 | uname_M := $(shell echo $(CROSS_COMPILE) | grep -o '^[a-z0-9]\+')
|
| 19 | endif
|
| 20 | ARCH ?= $(shell echo $(uname_M) | sed -e 's/aarch64.*/arm64/' -e 's/ppc64.*/powerpc/')
|
| 21 | endif
|
| 22 |
|
| 23 |
|
| 24 |
|
| 25 |
|
| 26 | .DELETE_ON_ERROR:
|
| 27 |
|
| 28 |
|
| 29 |
|
| 30 |
|
| 31 |
|
| 32 |
|
| 33 |
|
| 34 |
|
| 35 |
|
| 36 |
|
| 37 |
|
| 38 | MAKEFLAGS += --no-builtin-rules
|
| 39 |
|
| 40 | CFLAGS = -Wall -O2 -I $(top_srcdir) $(EXTRA_CFLAGS) $(KHDR_INCLUDES) $(TOOLS_INCLUDES)
|
| 41 | CFLAGS += -Wunreachable-code
|
| 42 | LDLIBS = -lrt -lpthread -lm
|
| 43 |
|
| 44 |
|
| 45 |
|
| 46 |
|
| 47 |
|
| 48 |
|
| 49 | CFLAGS += -U_FORTIFY_SOURCE
|
| 50 |
|
| 51 | KDIR ?= $(if $(O),$(O),$(realpath ../../../..))
|
| 52 | ifneq (,$(wildcard $(KDIR)/Module.symvers))
|
| 53 | TEST_GEN_MODS_DIR := page_frag
|
| 54 | else
|
| 55 | PAGE_FRAG_WARNING = "missing Module.symvers, please have the kernel built first"
|
| 56 | endif
|
| 57 |
|
| 58 | TEST_GEN_FILES = cow
|
| 59 | TEST_GEN_FILES += compaction_test
|
| 60 | TEST_GEN_FILES += gup_longterm
|
| 61 | TEST_GEN_FILES += gup_test
|
| 62 | TEST_GEN_FILES += hmm-tests
|
| 63 | TEST_GEN_FILES += hugetlb-madvise
|
| 64 | TEST_GEN_FILES += hugetlb-mmap
|
| 65 | TEST_GEN_FILES += hugetlb-mremap
|
| 66 | TEST_GEN_FILES += hugetlb-read-hwpoison
|
| 67 | TEST_GEN_FILES += hugetlb-shm
|
| 68 | TEST_GEN_FILES += hugetlb-soft-offline
|
| 69 | TEST_GEN_FILES += khugepaged
|
| 70 | TEST_GEN_FILES += madv_populate
|
| 71 | TEST_GEN_FILES += map_fixed_noreplace
|
| 72 | TEST_GEN_FILES += map_populate
|
| 73 | ifneq (,$(filter $(ARCH),arm64 riscv riscv64 x86 x86_64 loongarch32 loongarch64))
|
| 74 | TEST_GEN_FILES += memfd_secret
|
| 75 | endif
|
| 76 | TEST_GEN_FILES += memory-failure
|
| 77 | TEST_GEN_FILES += migration
|
| 78 | TEST_GEN_FILES += mkdirty
|
| 79 | TEST_GEN_FILES += mlock-random-test
|
| 80 | TEST_GEN_FILES += mlock2-tests
|
| 81 | TEST_GEN_FILES += mrelease_test
|
| 82 | TEST_GEN_FILES += mremap_dontunmap
|
| 83 | TEST_GEN_FILES += mremap_test
|
| 84 | TEST_GEN_FILES += mseal_test
|
| 85 | TEST_GEN_FILES += on-fault-limit
|
| 86 | TEST_GEN_FILES += pagemap_ioctl
|
| 87 | TEST_GEN_FILES += pfnmap
|
| 88 | TEST_GEN_FILES += process_madv
|
| 89 | TEST_GEN_FILES += prctl_thp_disable
|
| 90 | TEST_GEN_FILES += thuge-gen
|
| 91 | TEST_GEN_FILES += transhuge-stress
|
| 92 | TEST_GEN_FILES += uffd-stress
|
| 93 | TEST_GEN_FILES += uffd-unit-tests
|
| 94 | TEST_GEN_FILES += uffd-wp-mremap
|
| 95 | TEST_GEN_FILES += split_huge_page_test
|
| 96 | TEST_GEN_FILES += ksm_tests
|
| 97 | TEST_GEN_FILES += ksm_functional_tests
|
| 98 | TEST_GEN_FILES += mdwe_test
|
| 99 | TEST_GEN_FILES += hugetlb_fault_after_madv
|
| 100 | TEST_GEN_FILES += hugetlb_madv_vs_map
|
| 101 | TEST_GEN_FILES += hugetlb_dio
|
| 102 | TEST_GEN_FILES += droppable
|
| 103 | TEST_GEN_FILES += guard-regions
|
| 104 | TEST_GEN_FILES += merge
|
| 105 | TEST_GEN_FILES += rmap
|
| 106 | TEST_GEN_FILES += folio_split_race_test
|
| 107 |
|
| 108 | ifneq ($(ARCH),arm64)
|
| 109 | TEST_GEN_FILES += soft-dirty
|
| 110 | endif
|
| 111 |
|
| 112 | ifeq ($(ARCH),x86_64)
|
| 113 | CAN_BUILD_I386 := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_32bit_program.c -m32)
|
| 114 | CAN_BUILD_X86_64 := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_64bit_program.c)
|
| 115 | CAN_BUILD_WITH_NOPIE := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_program.c -no-pie)
|
| 116 |
|
| 117 | VMTARGETS := protection_keys
|
| 118 | VMTARGETS += pkey_sighandler_tests
|
| 119 | BINARIES_32 := $(VMTARGETS:%=%_32)
|
| 120 | BINARIES_64 := $(VMTARGETS:%=%_64)
|
| 121 |
|
| 122 | ifeq ($(CAN_BUILD_WITH_NOPIE),1)
|
| 123 | CFLAGS += -no-pie
|
| 124 | endif
|
| 125 |
|
| 126 | ifeq ($(CAN_BUILD_I386),1)
|
| 127 | TEST_GEN_FILES += $(BINARIES_32)
|
| 128 | endif
|
| 129 |
|
| 130 | ifeq ($(CAN_BUILD_X86_64),1)
|
| 131 | TEST_GEN_FILES += $(BINARIES_64)
|
| 132 | endif
|
| 133 |
|
| 134 | else ifeq ($(ARCH),arm64)
|
| 135 | TEST_GEN_FILES += protection_keys
|
| 136 | TEST_GEN_FILES += pkey_sighandler_tests
|
| 137 | else ifeq ($(ARCH),powerpc)
|
| 138 | TEST_GEN_FILES += protection_keys
|
| 139 | endif
|
| 140 |
|
| 141 | ifneq (,$(filter $(ARCH),arm64 mips64 parisc64 powerpc riscv64 s390x sparc64 x86_64 s390))
|
| 142 | TEST_GEN_FILES += va_high_addr_switch
|
| 143 | TEST_GEN_FILES += write_to_hugetlbfs
|
| 144 | endif
|
| 145 |
|
| 146 | TEST_PROGS += ksft_compaction.sh
|
| 147 | TEST_PROGS += ksft_cow.sh
|
| 148 | TEST_PROGS += ksft_gup_test.sh
|
| 149 | TEST_PROGS += ksft_hmm.sh
|
| 150 | TEST_PROGS += ksft_hugetlb.sh
|
| 151 | TEST_PROGS += ksft_hugevm.sh
|
| 152 | TEST_PROGS += ksft_kmemleak_confirm.sh
|
| 153 | TEST_PROGS += ksft_kmemleak_dedup.sh
|
| 154 | TEST_PROGS += ksft_ksm.sh
|
| 155 | TEST_PROGS += ksft_ksm_numa.sh
|
| 156 | TEST_PROGS += ksft_madv_guard.sh
|
| 157 | TEST_PROGS += ksft_madv_populate.sh
|
| 158 | TEST_PROGS += ksft_memfd_secret.sh
|
| 159 | TEST_PROGS += ksft_memory_failure.sh
|
| 160 | TEST_PROGS += ksft_migration.sh
|
| 161 | TEST_PROGS += ksft_mkdirty.sh
|
| 162 | TEST_PROGS += ksft_mlock.sh
|
| 163 | TEST_PROGS += ksft_mmap.sh
|
| 164 | TEST_PROGS += ksft_mremap.sh
|
| 165 | TEST_PROGS += ksft_pagemap.sh
|
| 166 | TEST_PROGS += ksft_pfnmap.sh
|
| 167 | TEST_PROGS += ksft_pkey.sh
|
| 168 | TEST_PROGS += ksft_process_madv.sh
|
| 169 | TEST_PROGS += ksft_process_mrelease.sh
|
| 170 | TEST_PROGS += ksft_rmap.sh
|
| 171 | TEST_PROGS += ksft_soft_dirty.sh
|
| 172 | TEST_PROGS += ksft_thp.sh
|
| 173 | TEST_PROGS += ksft_userfaultfd.sh
|
| 174 | TEST_PROGS += ksft_vma_merge.sh
|
| 175 | TEST_PROGS += ksft_vmalloc.sh
|
| 176 |
|
| 177 | TEST_FILES := test_vmalloc.sh
|
| 178 | TEST_FILES += test_hmm.sh
|
| 179 | TEST_FILES += va_high_addr_switch.sh
|
| 180 | TEST_FILES += charge_reserved_hugetlb.sh
|
| 181 | TEST_FILES += hugetlb_reparenting_test.sh
|
| 182 | TEST_FILES += test_page_frag.sh
|
| 183 | TEST_FILES += run_vmtests.sh
|
| 184 |
|
| 185 |
|
| 186 | TEST_FILES += write_hugetlb_memory.sh
|
| 187 |
|
| 188 | include ../lib.mk
|
| 189 |
|
| 190 | $(TEST_GEN_PROGS): vm_util.c hugepage_settings.c
|
| 191 | $(TEST_GEN_FILES): vm_util.c hugepage_settings.c
|
| 192 |
|
| 193 | $(OUTPUT)/uffd-stress: uffd-common.c
|
| 194 | $(OUTPUT)/uffd-unit-tests: uffd-common.c
|
| 195 | $(OUTPUT)/uffd-wp-mremap: uffd-common.c
|
| 196 | $(OUTPUT)/protection_keys: pkey_util.c
|
| 197 | $(OUTPUT)/pkey_sighandler_tests: pkey_util.c
|
| 198 |
|
| 199 | ifeq ($(ARCH),x86_64)
|
| 200 | BINARIES_32 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_32))
|
| 201 | BINARIES_64 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64))
|
| 202 |
|
| 203 | $(BINARIES_32) $(BINARIES_64): pkey_util.c
|
| 204 |
|
| 205 | define gen-target-rule-32
|
| 206 | $(1) $(1)_32: $(OUTPUT)/$(1)_32
|
| 207 | .PHONY: $(1) $(1)_32
|
| 208 | endef
|
| 209 |
|
| 210 | define gen-target-rule-64
|
| 211 | $(1) $(1)_64: $(OUTPUT)/$(1)_64
|
| 212 | .PHONY: $(1) $(1)_64
|
| 213 | endef
|
| 214 |
|
| 215 | ifeq ($(CAN_BUILD_I386),1)
|
| 216 | $(BINARIES_32): CFLAGS += -m32 -mxsave
|
| 217 | $(BINARIES_32): LDLIBS += -lrt -ldl -lm
|
| 218 | $(BINARIES_32): $(OUTPUT)/%_32: %.c
|
| 219 | $(call msg,CC,,$@)
|
| 220 | $(Q)$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@
|
| 221 | $(foreach t,$(VMTARGETS),$(eval $(call gen-target-rule-32,$(t))))
|
| 222 | endif
|
| 223 |
|
| 224 | ifeq ($(CAN_BUILD_X86_64),1)
|
| 225 | $(BINARIES_64): CFLAGS += -m64 -mxsave
|
| 226 | $(BINARIES_64): LDLIBS += -lrt -ldl
|
| 227 | $(BINARIES_64): $(OUTPUT)/%_64: %.c
|
| 228 | $(call msg,CC,,$@)
|
| 229 | $(Q)$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@
|
| 230 | $(foreach t,$(VMTARGETS),$(eval $(call gen-target-rule-64,$(t))))
|
| 231 | endif
|
| 232 |
|
| 233 |
|
| 234 | ifeq ($(CAN_BUILD_I386)$(CAN_BUILD_X86_64),01)
|
| 235 | all: warn_32bit_failure
|
| 236 |
|
| 237 | warn_32bit_failure:
|
| 238 | @echo "Warning: you seem to have a broken 32-bit build" 2>&1; \
|
| 239 | echo "environment. This will reduce test coverage of 64-bit" 2>&1; \
|
| 240 | echo "kernels. If you are using a Debian-like distribution," 2>&1; \
|
| 241 | echo "try:"; 2>&1; \
|
| 242 | echo ""; \
|
| 243 | echo " apt-get install gcc-multilib libc6-i386 libc6-dev-i386"; \
|
| 244 | echo ""; \
|
| 245 | echo "If you are using a Fedora-like distribution, try:"; \
|
| 246 | echo ""; \
|
| 247 | echo " yum install glibc-devel.*i686"; \
|
| 248 | exit 0;
|
| 249 | endif
|
| 250 | endif
|
| 251 |
|
| 252 |
|
| 253 | $(OUTPUT)/cow: LDLIBS += $(IOURING_EXTRA_LIBS)
|
| 254 |
|
| 255 | $(OUTPUT)/gup_longterm: LDLIBS += $(IOURING_EXTRA_LIBS)
|
| 256 |
|
| 257 | $(OUTPUT)/mlock-random-test $(OUTPUT)/memfd_secret: LDLIBS += -lcap
|
| 258 |
|
| 259 | $(OUTPUT)/ksm_tests: LDLIBS += -lnuma
|
| 260 |
|
| 261 | $(OUTPUT)/migration: LDLIBS += -lnuma
|
| 262 |
|
| 263 | $(OUTPUT)/rmap: LDLIBS += -lnuma
|
| 264 |
|
| 265 | local_config.mk local_config.h_gen: check_config.sh
|
| 266 | $(call msg,CHK,config,$@)
|
| 267 | $(Q)CC="$(CC)" CFLAGS="$(CFLAGS)" ./check_config.sh
|
| 268 |
|
| 269 | EXTRA_CLEAN += local_config.mk local_config.h_gen
|
| 270 |
|
| 271 | ifeq ($(IOURING_EXTRA_LIBS),)
|
| 272 | all: warn_missing_liburing
|
| 273 |
|
| 274 | warn_missing_liburing:
|
| 275 | @echo ; \
|
| 276 | echo "Warning: missing liburing support. Some tests will be skipped." ; \
|
| 277 | echo
|
| 278 | endif
|
| 279 |
|
| 280 | ifneq ($(PAGE_FRAG_WARNING),)
|
| 281 | all: warn_missing_page_frag
|
| 282 |
|
| 283 | warn_missing_page_frag:
|
| 284 | @echo ; \
|
| 285 | echo "Warning: $(PAGE_FRAG_WARNING). page_frag test will be skipped." ; \
|
| 286 | echo
|
| 287 | endif
|