android_kernel_samsung_sm8650/mm/Kconfig
jianzhou 5eefc0e780 Merge keystone/android14-6.1-keystone-qcom-release.6.1.1 (925907e) into msm-pineapple
* refs/heads/tmp-925907e:
  ANDROID: GKI: Remove CONFIG_LOCALVERSION="-mainline" on 6.1 branch
  ANDROID: gki_defconfig: sample large page_alloc allocations with HW_TAGS KASAN
  FROMLIST: kasan: allow sampling page_alloc allocations for HW_TAGS
  ANDROID: fscrypt, blk-crypto: drop HW-wrapped key compatibility check
  ANDROID: GKI: Enable CONFIG_NF_CONNTRACK_PROCFS
  ANDROID: mm: arm64: Allow remapping logical mappings as uncached
  ANDROID: fuse-bpf: Fix crash from assuming iter is kvec
  ANDROID: fuse-bpf: Add /sys/fs flags for fuse-bpf version
  ANDROID: fuse-bpf: Make sure to declare functions
  ANDROID: fuse-bpf v1.1
  ANDROID: KVM: arm64: Add helper for pKVM modules addr conversion
  ANDROID: timer: Add vendor hook for timer calc index
  ANDROID: KVM: arm64: Fix calculation for number of relocs in .hyp.reloc
  ANDROID: KVM: arm64: Ignore modules with empty .hyp.text section
  Revert "ANDROID: KVM: arm64: Make gen-hyprel emit delimiters"
  ANDROID: KVM: arm64: Resolve hyp module addresses using ELF sections
  ANDROID: dma-buf: Add vendorhook to allow mmaping more memory than a DMA-BUF holds
  ANDROID: fips140: add fips140_lab_util program
  ANDROID: fips140: add kernel crypto module
  ANDROID: arm64: simd: omit capability check in may_use_simd()
  ANDROID: arm64: disable LSE when building the FIPS140 module
  ANDROID: arm64: only permit certain alternatives in the FIPS140 module
  ANDROID: jump_label: disable jump labels in fips140.ko
  ANDROID: crypto: define fips_enabled to 1 in fips140.ko
  ANDROID: crypto: lib/aes - add vendor hooks for AES library routines
  ANDROID: crypto: lib/sha256 - add vendor hook for sha256() routine
  ANDROID: kbuild: customize module linker script for fips140 module
  ANDROID: GKI: Remove usage of __GENKSYMS__ in vendor hooks source
  ANDROID: iommu: Add vendor hook to alloc_iova()
  ANDROID: iommu: Add vendor hook to select alloc_iova algorithm
  ANDROID: iommu: Add a vendor field in iova_domain
  ANDROID: usb: gadget: f_accessory: update SS/SSP descriptors
  ANDROID: kbuild: Search external devicetree path when running clean target
  Revert "ANDROID: KVM: arm64: Coalesce host stage2 entries on ownership reclaim"
  ANDROID: KVM: arm64: Keep the pKVM private range under 1GiB
  ANDROID: KVM: arm64: Specify stage-2-protected regions in DT
  ANDROID: KVM: arm64: Introduce concept of pKVM moveable regions
  ANDROID: KVM: arm64: Correctly flag MMIO pages as PKVM_PAGE_RESTRICTED_PROT
  ANDROID: KVM: arm64: Introduce default_host_prot()
  ANDROID: KVM: arm64: Introduce a hyp panic module notifier
  ANDROID: KVM: arm64: Expose linear map APIs to pKVM modules
  ANDROID: scheduler: add vendor-specific wake flag
  ANDROID: Add a vendor hook that allow a module to modify the wake flag
  ANDROID: futex: Add vendor hook for wait queue
  ANDROID: rwsem: Add vendor hook to the rw-semaphore
  FROMLIST: sched/pelt: Introduce PELT multiplier
  ANDROID: GKI: Export clocksource_mmio_init
  ANDROID: update "fscrypt: add support for hardware-wrapped keys" to v7
  ANDROID: update "dm: add support for passing through derive_sw_secret"
  ANDROID: update "block: add basic hardware-wrapped key support" to v7
  ANDROID: dm-default-key: update for blk-crypto changes
  UPSTREAM: blk-crypto: Add a missing include directive
  UPSTREAM: blk-crypto: move internal only declarations to blk-crypto-internal.h
  BACKPORT: blk-crypto: add a blk_crypto_config_supported_natively helper
  BACKPORT: blk-crypto: don't use struct request_queue for public interfaces
  f2fs: let's avoid panic if extent_tree is not created
  f2fs: should use a temp extent_info for lookup
  f2fs: don't mix to use union values in extent_info
  f2fs: initialize extent_cache parameter
  f2fs: fix to avoid NULL pointer dereference in f2fs_issue_flush()
  ANDROID: update the BRANCH constant
  ANDROID: inline isolate_and_split_free_page
  ANDROID: mm: compaction: fix isolate_and_split_free_page() redefinition
  ANDROID: implement wrapper for reverse migration
  ANDROID: KVM: Remove function_nocfi() leftover in pKVM modules
  ANDROID: KVM: arm64: Always declare pKVM module loading functions
  ANDROID: GKI: Source GKI_BUILD_CONFIG_FRAGMENT after setting all variables
  ANDROID: cpuidle: export cpuidle_driver_state_disabled
  UPSTREAM: mm/madvise: fix madvise_pageout for private file mappings
  ANDROID: KVM: arm64: Allow trap handling from pKVM modules
  ANDROID: KVM: arm64: Notify pKVM modules of PSCI events
  ANDROID: KVM: arm64: Allow handling illegal aborts from pKVM modules
  ANDROID: KVM: arm64: Allow SMC handling from pKVM modules
  fscrypt: add additional documentation for SM4 support
  fscrypt: remove unused Speck definitions
  fscrypt: Add SM4 XTS/CTS symmetric algorithm support
  blk-crypto: Add support for SM4-XTS blk crypto mode
  blk-crypto: pass a gendisk to blk_crypto_sysfs_{,un}register
  fscrypt: add comment for fscrypt_valid_enc_modes_v1()
  blk-crypto: Add a missing include directive
  blk-crypto: move internal only declarations to blk-crypto-internal.h
  blk-crypto: add a blk_crypto_config_supported_natively helper
  blk-crypto: don't use struct request_queue for public interfaces
  fscrypt: pass super_block to fscrypt_put_master_key_activeref()
  Linux 6.1.1
  KEYS: encrypted: fix key instantiation with user-provided data
  cifs: fix oops during encryption
  usb: dwc3: pci: Update PCIe device ID for USB3 controller on CPU sub-system for Raptor Lake
  usb: typec: ucsi: Resume in separate work
  igb: Initialize mailbox message for VF reset
  staging: r8188eu: fix led register settings
  xhci: Apply XHCI_RESET_TO_DEFAULT quirk to ADL-N
  ALSA: hda/realtek: fix mute/micmute LEDs for a HP ProBook
  USB: serial: f81534: fix division by zero on line-speed change
  USB: serial: f81232: fix division by zero on line-speed change
  USB: serial: cp210x: add Kamstrup RF sniffer PIDs
  USB: serial: option: add Quectel EM05-G modem
  usb: gadget: uvc: Prevent buffer overflow in setup handler
  udf: Fix extending file within last block
  udf: Do not bother looking for prealloc extents if i_lenExtents matches i_size
  udf: Fix preallocation discarding at indirect extent boundary
  udf: Discard preallocation before extending file with a hole
  irqchip/ls-extirq: Fix endianness detection
  mips: ralink: mt7621: do not use kzalloc too early
  mips: ralink: mt7621: soc queries and tests as functions
  mips: ralink: mt7621: define MT7621_SYSC_BASE with __iomem
  PCI: mt7621: Add sentinel to quirks table
  libbpf: Fix uninitialized warning in btf_dump_dump_type_data
  x86/vdso: Conditionally export __vdso_sgx_enter_enclave()
  Revert "ANDROID: GKI: remove CONFIG_CMDLINE_EXTEND from arm64 gki_defconfig"
  ANDROID: Revert "arm64: Drop support for CMDLINE_EXTEND"
  ANDROID: of: Support CONFIG_CMDLINE_EXTEND config option
  FROMGIT: asm-generic/io: Add _RET_IP_ to MMIO trace for more accurate debug info
  ANDROID: firmware_loader: Add support for customer firmware paths
  ANDROID: GKI: Enable CONFIG_RT_SOFTIRQ_AWARE_SCHED
  FROMLIST: trace: Add trace points for tasklet entry/exit
  FROMLIST: softirq: defer softirq processing to ksoftirqd if CPU is busy with RT
  FROMLIST: sched: Avoid placing RT threads on cores handling long softirqs
  FROMLIST: softirq: Add generic accessor to percpu softirq_pending data
  ANDROID: sched/cpuset: Add vendor hook to change tasks affinity
  ANDROID: cpuset: Make cpusets restore on hotplug
  fsverity: simplify fsverity_get_digest()
  fsverity: stop using PG_error to track error status
  f2fs: reset wait_ms to default if any of the victims have been selected
  f2fs: fix some format WARNING in debug.c and sysfs.c
  f2fs: don't call f2fs_issue_discard_timeout() when discard_cmd_cnt is 0 in f2fs_put_super()
  f2fs: fix iostat parameter for discard
  f2fs: Fix spelling mistake in label: free_bio_enrty_cache -> free_bio_entry_cache
  f2fs: add block_age-based extent cache
  f2fs: allocate the extent_cache by default
  f2fs: refactor extent_cache to support for read and more
  f2fs: remove unnecessary __init_extent_tree
  f2fs: move internal functions into extent_cache.c
  f2fs: specify extent cache for read explicitly
  f2fs: introduce f2fs_is_readonly() for readability
  f2fs: remove F2FS_SET_FEATURE() and F2FS_CLEAR_FEATURE() macro
  f2fs: do some cleanup for f2fs module init
  MAINTAINERS: Add f2fs bug tracker link
  f2fs: remove the unused flush argument to change_curseg
  f2fs: open code allocate_segment_by_default
  f2fs: remove struct segment_allocation default_salloc_ops
  f2fs: introduce discard_urgent_util sysfs node
  f2fs: define MIN_DISCARD_GRANULARITY macro
  f2fs: init discard policy after thread wakeup
  f2fs: avoid victim selection from previous victim section
  f2fs: truncate blocks in batch in __complete_revoke_list()
  f2fs: make __queue_discard_cmd() return void
  f2fs: fix description about discard_granularity node
  f2fs: move set_file_temperature into f2fs_new_inode
  f2fs: fix to enable compress for newly created file if extension matches
  f2fs: set zstd compress level correctly
  f2fs: change type for 'sbi->readdir_ra'
  f2fs: cleanup for 'f2fs_tuning_parameters' function
  f2fs: fix to alloc_mode changed after remount on a small volume device
  f2fs: remove submit label in __submit_discard_cmd()
  f2fs: fix to do sanity check on i_extra_isize in is_alive()
  f2fs: introduce F2FS_IOC_START_ATOMIC_REPLACE
  f2fs: fix to set flush_merge opt and show noflush_merge
  f2fs: initialize locks earlier in f2fs_fill_super()
  f2fs: optimize iteration over sparse directories
  f2fs: fix to avoid accessing uninitialized spinlock
  f2fs: correct i_size change for atomic writes
  f2fs: add proc entry to show discard_plist info
  f2fs: allow to read node block after shutdown
  f2fs: replace ternary operator with max()
  f2fs: replace gc_urgent_high_remaining with gc_remaining_trials
  f2fs: add missing bracket in doc
  f2fs: use sysfs_emit instead of sprintf
  f2fs: introduce gc_mode sysfs node
  f2fs: fix to destroy sbi->post_read_wq in error path of f2fs_fill_super()
  f2fs: fix return val in f2fs_start_ckpt_thread()
  f2fs: fix the msg data type
  f2fs: fix the assign logic of iocb
  f2fs: Fix typo in comments
  f2fs: introduce max_ordered_discard sysfs node
  f2fs: allow to set compression for inlined file
  f2fs: add barrier mount option
  f2fs: fix normal discard process
  f2fs: cleanup in f2fs_create_flush_cmd_control()
  f2fs: fix gc mode when gc_urgent_high_remaining is 1
  f2fs: remove batched_trim_sections node
  f2fs: support fault injection for f2fs_is_valid_blkaddr()
  f2fs: fix to invalidate dcc->f2fs_issue_discard in error path
  f2fs: Fix the race condition of resize flag between resizefs
  f2fs: let's avoid to get cp_rwsem twice by f2fs_evict_inode by d_invalidate
  f2fs: should put a page when checking the summary info
  ANDROID: GKI: Update GKI modules protected exports
  ANDROID: GKI: Add list of protected GKI modules
  ANDROID: GKI: Only protect exports if KMI symbols are present
  ANDROID: GKI: Protect exports of protected GKI modules
  UPSTREAM: crypto: algboss - compile out test-related code when tests disabled
  UPSTREAM: crypto: kdf - silence noisy self-test
  UPSTREAM: crypto: kdf - skip self-test when tests disabled
  UPSTREAM: crypto: api - compile out crypto_boot_test_finished when tests disabled
  UPSTREAM: crypto: algboss - optimize registration of internal algorithms
  UPSTREAM: crypto: api - optimize algorithm registration when self-tests disabled
  ANDROID: KVM: arm64: Add support for non-cacheable mappings
  ANDROID: KVM: arm64: Don't filter out KVM_FUNC_MMIO_GUARD_MAP hypercalls
  ANDROID: KVM: arm64: Coalesce host stage2 entries on ownership reclaim
  ANDROID: KVM: arm64: Move kvm_pte_table to the common header
  ANDROID: KVM: arm64: Have different callbacks for PTE manipulation
  ANDROID: KVM: arm64: Move PTE attributes definitions to the common header
  ANDROID: KVM: arm64: Split stage2_put_pte function
  ANDROID: KVM: arm64: Pass the pagetable struct as an argument to the freewalker
  ANDROID: KVM: arm64: Fix link with CONFIG_MODULES=n
  ANDROID: KVM: arm64: Fix build with CONFIG_MODULES=n
  ANDROID: KVM: arm64: Block module loading based on cmdline or HVC
  ANDROID: KVM: arm64: Support unaligned fixmap in the nVHE hyp
  ANDROID: KVM: arm64: Add support for custom hypercall registration
  ANDROID: KVM: arm64: Return a token for a pKVM module registration
  ANDROID: KVM: arm64: Introduce hyp_protect_host_page()
  ANDROID: KVM: arm64: Add a permission fault handler
  ANDROID: KVM: arm64: Introduce PKVM_PAGE_RESTRICTED_PROT
  ANDROID: KVM: arm64: Expose kvm_flush_dcache_to_poc() in module_ops
  ANDROID: KVM: arm64: Expose hyp fixmap helpers in module_ops
  ANDROID: KVM: arm64: Expose puts and putx64 in pKVM ABI
  ANDROID: KVM: arm64: Add serial framework for pKVM
  ANDROID: KVM: arm64: Expose __pkvm_create_private_mapping to pKVM modules
  ANDROID: KVM: arm64: Include .note.gnu.property in .hyp.rodata
  ANDROID: KVM: arm64: Allow loading modules to the pKVM hypervisor
  ANDROID: KVM: arm64: Refactor nvhe Makefile
  ANDROID: KVM: arm64: Make gen-hyprel emit delimiters
  ANDROID: KVM: arm64: Move gen-hyprel into a tool directory
  ANDROID: KVM: arm64: Add mapping removal interface for nVHE hyp
  ANDROID: arm64: patching: Add aarch64_addr_write()
  ANDROID: arm64: patching: Refactor __aarch64_insn_write()
  ANDROID: KVM: arm64: Use correct pkvm owners type
  ANDROID: KVM: arm64: s2mpu: S2MPU V9 code
  ANDROID: KVM: arm64: s2mpu: Add MMIO and defines for V9 S2MPU
  ANDROID: KVM: arm64: s2mpu: rename versions to match major arch
  ANDROID: KVM: arm64: s2mpu: Abstract register initialization with version_ops
  ANDROID: KVM: arm64: s2mpu: Pass driver version during init
  ANDROID: KVM: arm64: s2mpu: Add SMPT and MPT functions to pgtable abstraction
  ANDROID: KVM: arm64: s2mpu: Abstract page table ops
  ANDROID: KVM: arm64: iommu: Support dynamic driver registration in IOMMU layer
  ANDROID: KVM: arm64: Use 32-bit function ID for PSCI MEM_PROTECT call
  Revert "ANDROID: virtio_balloon: New module parameter "pkvm""
  ANDROID: KVM: arm64: s2mpu: Fix SYNC latency regression
  ANDROID: KVM: arm64: iommu: Add host_stage2_idmap_complete
  ANDROID: KVM: arm64: Don't update IOMMUs unnecessarily
  ANDROID: KVM: arm64: s2mpu: Add SysMMU_SYNC timeout
  ANDROID: KVM: arm64: s2mpu: Allow r/o access to control regs
  ANDROID: KVM: arm64: s2mpu: Allow reading MPTC entries
  ANDROID: KVM: arm64: s2mpu: Allow L1ENTRY_* r/o access
  ANDROID: KVM: arm64: s2mpu: Refactor DABT handler
  ANDROID: KVM: arm64: s2mpu: Extract L1ENTRY_* consts
  ANDROID: KVM: arm64: s2mpu: Initialize MPTs to PROT_RW
  ANDROID: KVM: arm64: iommu: Optimize snapshot_host_stage2
  ANDROID: KVM: arm64: iommu: Fix upper bound of PT walk
  ANDROID: KVM: arm64: iommu: Add pkvm_iommu_finalize
  ANDROID: KVM: arm64: iommu: No powered check in DABT handler
  ANDROID: KVM: arm64: s2mpu: Create SysMMU_SYNC driver
  ANDROID: KVM: arm64: iommu: Create parent/child relation
  ANDROID: KVM: arm64: iommu: Run validate() on struct pkvm_iommu
  ANDROID: KVM: arm64: iommu: Create private mapping last
  ANDROID: KVM: arm64: iommu: Free memory on registration error
  ANDROID: KVM: arm64: iommu: Harden __pkvm_iommu_pm_notify
  ANDROID: KVM: arm64: Remove unused IOMMU hooks, kvm_iommu_ops
  ANDROID: KVM: arm64: s2mpu: Implement host stage2 idmap callbacks
  ANDROID: KVM: arm64: s2mpu: Move mpt_update_flags into FMPT
  ANDROID: KVM: arm64: s2mpu: Replace DABT handler with callback
  ANDROID: KVM: arm64: s2mpu: Replace SMC handler with PM callbacks
  ANDROID: KVM: arm64: s2mpu: Add driver initializer
  ANDROID: KVM: arm64: s2mpu: Remove host_stage2_adjust_mmio_range
  ANDROID: KVM: arm64: s2mpu: Replace struct s2mpu with pkvm_iommu
  ANDROID: KVM: arm64: s2mpu: Remove all EL1 code
  ANDROID: KVM: arm64: s2mpu: Move SFR init to EL2
  ANDROID: KVM: arm64: iommu: Snapshot host stage-2 at driver init
  ANDROID: KVM: arm64: iommu: Host stage-2 idmap callbacks
  ANDROID: KVM: arm64: iommu: DABT handler callback
  ANDROID: KVM: arm64: iommu: Suspend/resume callbacks
  ANDROID: KVM: arm64: iommu: Register device hypcall
  ANDROID: KVM: arm64: iommu: Avoid mapping devices in host stage-2
  ANDROID: KVM: arm64: iommu: Driver initialization hypcall
  ANDROID: KVM: arm64: Fix host MMIO DABT handler IPA
  ANDROID: KVM: arm64: Wait on S2MPU.STATUS after invalidation
  ANDROID: KVM: arm64: Remove kernel-doc in S2MPU driver
  ANDROID: KVM: arm64: Initialize pkvm_pgtable.mm_ops earlier
  ANDROID: KVM: arm64: Mark select_iommu_ops static
  ANDROID: Enable KVM_S2MPU in gki_defconfig
  ANDROID: KVM: arm64: Unmap S2MPU MMIO registers from host stage-2
  ANDROID: KVM: arm64: Implement MMIO handler in S2MPU driver
  ANDROID: KVM: arm64: Modify S2MPU MPT in 'host_stage2_set_owner'
  ANDROID: KVM: arm64: Set up S2MPU Memory Protection Table
  ANDROID: KVM: arm64: Reprogram S2MPUs in 'host_smc_handler'
  ANDROID: KVM: arm64: Enable S2MPUs in __pkvm_init_stage2_iommu
  ANDROID: KVM: arm64: Copy S2MPU configuration to hyp
  ANDROID: KVM: arm64: Implement IRQ handler for S2MPU faults
  ANDROID: KVM: arm64: Allocate context IDs for valid VIDs
  ANDROID: KVM: arm64: Read and check S2MPU_VERSION
  ANDROID: KVM: arm64: Parse S2MPU MMIO region
  ANDROID: KVM: arm64: Create empty S2MPU driver
  ANDROID: KVM: arm64: Add 'host_stage2_adjust_mmio_range' to kvm_iommu_ops
  ANDROID: KVM: arm64: Add 'host_mmio_dabt_handler' to kvm_iommu_ops
  ANDROID: KVM: arm64: Add 'host_stage2_set_owner' to kvm_iommu_ops
  ANDROID: KVM: arm64: Add 'host_smc_handler' to kvm_iommu_ops
  ANDROID: KVM: arm64: Introduce IOMMU driver infrastructure
  ANDROID: KVM: arm64: Update pKVM hyp state series to v6
  ANDROID: KVM: arm64: Add protected_shared_mem statistic
  ANDROID: KVM: arm64: count KVM s2 mmu usage in nVHE protected mode
  ANDROID: KVM: arm64: Add protected_hyp_mem VM statistic
  ANDROID: KVM: arm64: Fix sparse __percpu warning
  ANDROID: KVM: arm64: Relax SMCCC version check during FF-A proxy init
  ANDROID: KVM: arm64: Increase size of FF-A buffer
  BACKPORT: FROMLIST: KVM: arm64: pkvm: Add support for fragmented FF-A descriptors
  FROMLIST: KVM: arm64: Handle FFA_MEM_LEND calls from the host
  FROMLIST: KVM: arm64: Handle FFA_MEM_RECLAIM calls from the host
  FROMLIST: KVM: arm64: Handle FFA_MEM_SHARE calls from the host
  BACKPORT: FROMLIST: KVM: arm64: Add FF-A helpers to share/unshare memory with secure world
  FROMLIST: KVM: arm64: Handle FFA_RXTX_MAP and FFA_RXTX_UNMAP calls from the host
  FROMLIST: KVM: arm64: Allocate pages for hypervisor FF-A mailboxes
  FROMLIST: KVM: arm64: Handle FFA_FEATURES call from the host
  BACKPORT: FROMLIST: KVM: arm64: Probe FF-A version and host/hyp partition ID during init
  FROMLIST: KVM: arm64: Block unsafe FF-A calls from the host
  FROMLIST: firmware: arm_ffa: Move comment before the field it is documenting
  FROMLIST: firmware: arm_ffa: Move constants to header file
  ANDROID: KVM: arm64: Issue CMOs when tearing down shadow pages
  ANDROID: KVM: arm64: Use PSCI MEM_PROTECT to zap guest pages on reset
  ANDROID: KVM: arm64: Check IPA range for pvmfw during guest donation
  ANDROID: KVM: arm64: Use fixmap when poisoning pvmfw pages
  ANDROID: KVM: arm64: Rename pkvm_clear_pvmfw_pages()
  ANDROID: KVM: arm64: Rename hyp_zero_page() and make available as helper
  ANDROID: KVM: arm64: Don't check for hyp_fixmap_map() returning NULL
  ANDROID: virtio_balloon: Do not clear VIRTIO_F_ACCESS_PLATFORM
  ANDROID: virtio_balloon: New module parameter "pkvm"
  ANDROID: KVM: arm64: Introduce kvm_has_memrelinquish_services
  ANDROID: KVM: arm64: Flush nVHE hyp_vcpu memcache
  ANDROID: KVM: arm64: Avoid unnecessary unmap walk in MEM_RELINQUISH hypercall
  ANDROID: KVM: arm64: Strictly check page type in MEM_RELINQUISH hypercall
  ANDROID: KVM: Include prototype for page_relinquish before definition
  ANDROID: arm64: ioremap/iounmap use stage-2 granule size
  ANDROID: arm64: Check if pfn is valid for all ioremap loop iterations
  ANDROID: arm64: Auto-enroll MMIO guard on protected vms
  ANDROID: KVM: arm64: Add some documentation for the MMIO guard feature
  ANDROID: KVM: arm64: Plumb MMIO checking into the fault handling
  ANDROID: KVM: arm64: pkvm: Wire MMIO guard hypercalls
  ANDROID: KVM: arm64: pkvm: Add MMIO guard infrastructure
  ANDROID: KVM: arm64: Introduce KVM_ARCH_FLAG_MMIO_GUARD flag
  ANDROID: KVM: arm64: Expose topup_hyp_memcache() to the rest of KVM
  ANDROID: KVM: arm64: Define MMIO guard hypercalls
  ANDROID: KVM: arm64: FAR_EL2 mask as a define
  ANDROID: KVM: arm64: Turn kvm_pgtable_stage2_set_owner into kvm_pgtable_stage2_annotate
  ANDROID: memory relinquish: Fix build dependencies
  ANDROID: KVM: arm64: Monitor Debug support for non-protected guests
  ANDROID: KVM: arm64: Factor out code for saving/restoring guest debug regs
  ANDROID: KVM: arm64: Flush the vcpu iflags for non-protected VMs
  ANDROID: virtio_balloon: Do not translate reported pages through DMA API
  ANDROID: KVM: arm64: balloon: Notify hyp before reporting free pages to host
  ANDROID: KVM: arm64: memory balloon: Notify hyp when ballooning
  ANDROID: Define mem_relinquish interface for releasing memory to a hypervisor.
  ANDROID: KVM: arm64: Implement MEM_RELINQUISH SMCCC hypercall
  ANDROID: KVM: arm64: Turn llist of pinned pages into an rb-tree
  FROMLIST: KVM: arm64: pkvm: Fixup boot mode to reflect that the kernel resumes from EL1
  ANDROID: KVM: arm64: Add .hyp.data section
  ANDROID: KVM: arm64: relay entropy requests from protected guests directly to secure
  ANDROID: KVM: arm64: Introduce KVM_CAP_ARM_PROTECTED_VM to set/query PVM firmware
  ANDROID: KVM: arm64: Reset primary vCPU according to PVM firmware boot protocol
  ANDROID: KVM: arm64: Copy pvmfw into guest pages during donation from the host
  ANDROID: KVM: arm64: Clear pvmfw pages on clean host shutdown
  ANDROID: KVM: arm64: Ignore length of 0 in kvm_flush_dcache_to_poc()
  ANDROID: KVM: arm64: Unmap PVM firmware from host stage-2 during de-privilege
  ANDROID: KVM: arm64: Parse reserved-memory node for pkvm guest firmware region
  ANDROID: Documentation: KVM: Add some documentation for Protected KVM on arm64
  ANDROID: BACKPORT: KVM: arm64: Introduce KVM_VM_TYPE_ARM_PROTECTED machine type for PVMs
  ANDROID: KVM: arm64: Expose memory sharing hypercalls to protected guests
  ANDROID: KVM: arm64: Reformat/beautify PTP hypercall documentation
  ANDROID: KVM: arm64: Document the KVM/arm64-specific calls in hypercalls.rst
  ANDROID: KVM: arm64: Rename firmware pseudo-register documentation file
  ANDROID: KVM: arm64: Extend memory sharing to allow guest-to-host transitions
  ANDROID: KVM: arm64: Avoid BBM when changing only s/w bits in Stage-2 PTE
  ANDROID: KVM: arm64: Support TLB invalidation in guest context
  ANDROID: KVM: arm64: Inject SIGSEGV on illegal accesses
  ANDROID: KVM: arm64: Refactor enter_exception64()
  ANDROID: KVM: arm64: Add is_pkvm_initialized() helper
  ANDROID: KVM: arm64: Don't expose TLBI hypercalls after de-privilege
  ANDROID: KVM: arm64: Handle PSCI for protected VMs in EL2
  ANDROID: KVM: arm64: Factor out vcpu_reset code for core registers and PSCI
  ANDROID: KVM: arm64: Move some kvm_psci functions to a shared header
  ANDROID: KVM: arm64: Move pstate reset values to kvm_arm.h
  ANDROID: KVM: arm64: Add HVC handling for protected guests at EL2
  ANDROID: KVM: arm64: Track the SVE state in the hypervisor vcpu structure
  ANDROID: KVM: arm64: Initialize hypervisor vm state at EL2
  ANDROID: KVM: arm64: Refactor kvm_vcpu_enable_ptrauth() for hyp use
  ANDROID: KVM: arm64: Do not update virtual timer state for protected VMs
  ANDROID: KVM: arm64: Move vgic state between host and hypervisor vcpu structures
  ANDROID: KVM: arm64: Add EL2 entry/exit handlers for pKVM guests
  ANDROID: KVM: arm64: Donate memory to protected guests
  ANDROID: KVM: arm64: Force injection of a data abort on NISV MMIO exit
  ANDROID: KVM: arm64: Advertise GICv3 sysreg interface to protected guests
  ANDROID: KVM: arm64: Fix initializing traps in protected mode
  ANDROID: KVM: arm64: Move pkvm_vcpu_init_traps to hyp vcpu init
  ANDROID: KVM: arm64: Reset sysregs for protected VMs
  ANDROID: KVM: arm64: Refactor reset_mpidr to extract its computation
  ANDROID: KVM: arm64: Do not support MTE for protected VMs
  ANDROID: KVM: arm64: Restrict protected VM capabilities
  ANDROID: KVM: arm64: Trap debug break and watch from guest
  ANDROID: KVM: arm64: Check directly whether the vcpu is protected
  ANDROID: KVM: arm64: Reduce host/hyp vcpu state copying
  ANDROID: KVM: arm64: Lazy host FP save/restore
  ANDROID: KVM: arm64: Reintroduce __sve_save_state
  ANDROID: KVM: arm64: Introduce lazy-ish state sync for non-protected VMs
  ANDROID: KVM: arm64: Introduce per-EC entry/exit handlers
  ANDROID: KVM: arm64: Ensure that TLBs and I-cache are private to each vcpu
  ANDROID: KVM: arm64: Add hyp per_cpu variable to track current physical cpu number
  ANDROID: KVM: arm64: Skip __kvm_adjust_pc() for protected vcpus
  ANDROID: KVM: arm64: Add current host and hyp vCPU lookup primitive
  ANDROID: KVM: arm64: Introduce the pkvm_vcpu_{load,put} hypercalls
  ANDROID: KVM: arm64: Add the {flush,sync}_hyp_timer_state() primitives
  ANDROID: KVM: arm64: Introduce predicates to check for protected state
  ANDROID: KVM: arm64: Add the {flush,sync}_hyp_vgic_state() primitives
  ANDROID: KVM: arm64: Simplify vgic-v3 hypercalls
  ANDROID: KVM: arm64: Make vcpu_{read,write}_sys_reg available to HYP code
  ANDROID: KVM: arm64: Split up nvhe/fixed_config.h
  ANDROID: KVM: arm64: Extend memory donation to allow host-to-guest transitions
  ANDROID: KVM: arm64: Handle guest stage-2 page-tables entirely at EL2
  ANDROID: KVM: arm64: Disallow dirty logging and RO memslots with pKVM
  ANDROID: KVM: arm64: Do not allow memslot changes after first VM run under pKVM
  ANDROID: KVM: arm64: Check for PTE validity when checking for executable/cacheable
  ANDROID: KVM: arm64: Extend memory sharing to allow host-to-guest transitions
  ANDROID: KVM: arm64: Provide a hypercall for the host to reclaim guest memory
  ANDROID: KVM: arm64: Add PC_UPDATE_REQ flags covering all PC updates
  ANDROID: KVM: arm64: Add vcpu flag copy primitive
  ANDROID: KVM: arm64: Repurpose a byte of 'order' for flags in 'struct hyp_page'
  FROMLIST: KVM: arm64: Use the pKVM hyp vCPU structure in handle___kvm_vcpu_run()
  FROMLIST: KVM: arm64: Don't unnecessarily map host kernel sections at EL2
  FROMLIST: KVM: arm64: Explicitly map 'kvm_vgic_global_state' at EL2
  FROMLIST: KVM: arm64: Maintain a copy of 'kvm_arm_vmid_bits' at EL2
  FROMLIST: KVM: arm64: Unmap 'kvm_arm_hyp_percpu_base' from the host
  FROMLIST: BACKPORT: KVM: arm64: Return guest memory from EL2 via dedicated teardown memcache
  FROMLIST: KVM: arm64: Instantiate guest stage-2 page-tables at EL2
  FROMLIST: KVM: arm64: Consolidate stage-2 initialisation into a single function
  FROMLIST: KVM: arm64: Add generic hyp_memcache helpers
  FROMLIST: KVM: arm64: Provide I-cache invalidation by virtual address at EL2
  FROMLIST: KVM: arm64: Initialise hypervisor copies of host symbols unconditionally
  FROMLIST: KVM: arm64: Add per-cpu fixmap infrastructure at EL2
  FROMLIST: KVM: arm64: Instantiate pKVM hypervisor VM and vCPU structures from EL1
  FROMLIST: KVM: arm64: Add infrastructure to create and track pKVM instances at EL2
  FROMLIST: KVM: arm64: Rename 'host_kvm' to 'host_mmu'
  FROMLIST: KVM: arm64: Add hyp_spinlock_t static initializer
  FROMLIST: KVM: arm64: Include asm/kvm_mmu.h in nvhe/mem_protect.h
  FROMLIST: KVM: arm64: Add helpers to pin memory shared with the hypervisor at EL2
  FROMLIST: KVM: arm64: Prevent the donation of no-map pages
  FROMLIST: KVM: arm64: Implement do_donate() helper for donating memory
  FROMLIST: KVM: arm64: Unify identifiers used to distinguish host and hypervisor
  FROMLIST: KVM: arm64: Fix-up hyp stage-1 refcounts for all pages mapped at EL2
  FROMLIST: KVM: arm64: Back the hypervisor 'struct hyp_page' array for all memory
  FROMLIST: KVM: arm64: Allow attaching of non-coalescable pages to a hyp pool
  FROMLIST: KVM: arm64: Move hyp refcount manipulation helpers to common header file
  ANDROID: arm64: Register earlycon fixmap with the MMIO guard
  ANDROID: arm64: Add a helper to retrieve the PTE of a fixmap
  ANDROID: BACKPORT: arm64: Enroll into KVM's MMIO guard if required
  ANDROID: BACKPORT: arm64: Implement ioremap/iounmap hooks calling into KVM's MMIO guard
  ANDROID: mm/vmalloc: Add arch-specific callbacks to track io{remap,unmap} physical pages
  ANDROID: BACKPORT: arm64: mm: Implement memory encryption API using KVM sharing hypercalls
  ANDROID: drivers: hv: Include memory encryption header
  FROMLIST: firmware/smccc: Call arch-specific hook on discovering KVM services
  ANDROID: GKI: Enable CONFIG_CFI_CLANG

 Conflicts:
	drivers/android/vendor_hooks.c
	include/linux/compaction.h
	include/trace/hooks/timer.h
	mm/compaction.c

Change-Id: Ie45fe12a1d6b67f4edb8c23ebb4409754b063385
Upstream-Build: ks_qcom-android14-6.1-keystone-qcom-release@9501271 UKQ2.230118.001
Signed-off-by: jianzhou <quic_jianzhou@quicinc.com>#
2023-02-21 21:29:07 -08:00

1180 lines
36 KiB
Plaintext

# SPDX-License-Identifier: GPL-2.0-only
menu "Memory Management options"
#
# For some reason microblaze and nios2 hard code SWAP=n. Hopefully we can
# add proper SWAP support to them, in which case this can be remove.
#
config ARCH_NO_SWAP
bool
config ZPOOL
bool
menuconfig SWAP
bool "Support for paging of anonymous memory (swap)"
depends on MMU && BLOCK && !ARCH_NO_SWAP
default y
help
This option allows you to choose whether you want to have support
for so called swap devices or swap files in your kernel that are
used to provide more virtual memory than the actual RAM present
in your computer. If unsure say Y.
config ZSWAP
bool "Compressed cache for swap pages"
depends on SWAP
select FRONTSWAP
select CRYPTO
select ZPOOL
help
A lightweight compressed cache for swap pages. It takes
pages that are in the process of being swapped out and attempts to
compress them into a dynamically allocated RAM-based memory pool.
This can result in a significant I/O reduction on swap device and,
in the case where decompressing from RAM is faster than swap device
reads, can also improve workload performance.
config ZSWAP_DEFAULT_ON
bool "Enable the compressed cache for swap pages by default"
depends on ZSWAP
help
If selected, the compressed cache for swap pages will be enabled
at boot, otherwise it will be disabled.
The selection made here can be overridden by using the kernel
command line 'zswap.enabled=' option.
choice
prompt "Default compressor"
depends on ZSWAP
default ZSWAP_COMPRESSOR_DEFAULT_LZO
help
Selects the default compression algorithm for the compressed cache
for swap pages.
For an overview what kind of performance can be expected from
a particular compression algorithm please refer to the benchmarks
available at the following LWN page:
https://lwn.net/Articles/751795/
If in doubt, select 'LZO'.
The selection made here can be overridden by using the kernel
command line 'zswap.compressor=' option.
config ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
bool "Deflate"
select CRYPTO_DEFLATE
help
Use the Deflate algorithm as the default compression algorithm.
config ZSWAP_COMPRESSOR_DEFAULT_LZO
bool "LZO"
select CRYPTO_LZO
help
Use the LZO algorithm as the default compression algorithm.
config ZSWAP_COMPRESSOR_DEFAULT_842
bool "842"
select CRYPTO_842
help
Use the 842 algorithm as the default compression algorithm.
config ZSWAP_COMPRESSOR_DEFAULT_LZ4
bool "LZ4"
select CRYPTO_LZ4
help
Use the LZ4 algorithm as the default compression algorithm.
config ZSWAP_COMPRESSOR_DEFAULT_LZ4HC
bool "LZ4HC"
select CRYPTO_LZ4HC
help
Use the LZ4HC algorithm as the default compression algorithm.
config ZSWAP_COMPRESSOR_DEFAULT_ZSTD
bool "zstd"
select CRYPTO_ZSTD
help
Use the zstd algorithm as the default compression algorithm.
endchoice
config ZSWAP_COMPRESSOR_DEFAULT
string
depends on ZSWAP
default "deflate" if ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
default "lzo" if ZSWAP_COMPRESSOR_DEFAULT_LZO
default "842" if ZSWAP_COMPRESSOR_DEFAULT_842
default "lz4" if ZSWAP_COMPRESSOR_DEFAULT_LZ4
default "lz4hc" if ZSWAP_COMPRESSOR_DEFAULT_LZ4HC
default "zstd" if ZSWAP_COMPRESSOR_DEFAULT_ZSTD
default ""
choice
prompt "Default allocator"
depends on ZSWAP
default ZSWAP_ZPOOL_DEFAULT_ZBUD
help
Selects the default allocator for the compressed cache for
swap pages.
The default is 'zbud' for compatibility, however please do
read the description of each of the allocators below before
making a right choice.
The selection made here can be overridden by using the kernel
command line 'zswap.zpool=' option.
config ZSWAP_ZPOOL_DEFAULT_ZBUD
bool "zbud"
select ZBUD
help
Use the zbud allocator as the default allocator.
config ZSWAP_ZPOOL_DEFAULT_Z3FOLD
bool "z3fold"
select Z3FOLD
help
Use the z3fold allocator as the default allocator.
config ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
bool "zsmalloc"
select ZSMALLOC
help
Use the zsmalloc allocator as the default allocator.
endchoice
config ZSWAP_ZPOOL_DEFAULT
string
depends on ZSWAP
default "zbud" if ZSWAP_ZPOOL_DEFAULT_ZBUD
default "z3fold" if ZSWAP_ZPOOL_DEFAULT_Z3FOLD
default "zsmalloc" if ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
default ""
config ZBUD
tristate "2:1 compression allocator (zbud)"
depends on ZSWAP
help
A special purpose allocator for storing compressed pages.
It is designed to store up to two compressed pages per physical
page. While this design limits storage density, it has simple and
deterministic reclaim properties that make it preferable to a higher
density approach when reclaim will be used.
config Z3FOLD
tristate "3:1 compression allocator (z3fold)"
depends on ZSWAP
help
A special purpose allocator for storing compressed pages.
It is designed to store up to three compressed pages per physical
page. It is a ZBUD derivative so the simplicity and determinism are
still there.
config ZSMALLOC
tristate
prompt "N:1 compression allocator (zsmalloc)" if ZSWAP
depends on MMU
help
zsmalloc is a slab-based memory allocator designed to store
pages of various compression levels efficiently. It achieves
the highest storage density with the least amount of fragmentation.
config ZSMALLOC_STAT
bool "Export zsmalloc statistics"
depends on ZSMALLOC
select DEBUG_FS
help
This option enables code in the zsmalloc to collect various
statistics about what's happening in zsmalloc and exports that
information to userspace via debugfs.
If unsure, say N.
menu "SLAB allocator options"
choice
prompt "Choose SLAB allocator"
default SLUB
help
This option allows to select a slab allocator.
config SLAB
bool "SLAB"
depends on !PREEMPT_RT
select HAVE_HARDENED_USERCOPY_ALLOCATOR
help
The regular slab allocator that is established and known to work
well in all environments. It organizes cache hot objects in
per cpu and per node queues.
config SLUB
bool "SLUB (Unqueued Allocator)"
select HAVE_HARDENED_USERCOPY_ALLOCATOR
help
SLUB is a slab allocator that minimizes cache line usage
instead of managing queues of cached objects (SLAB approach).
Per cpu caching is realized using slabs of objects instead
of queues of objects. SLUB can use memory efficiently
and has enhanced diagnostics. SLUB is the default choice for
a slab allocator.
config SLOB
depends on EXPERT
bool "SLOB (Simple Allocator)"
depends on !PREEMPT_RT
help
SLOB replaces the stock allocator with a drastically simpler
allocator. SLOB is generally more space efficient but
does not perform as well on large systems.
endchoice
config SLAB_MERGE_DEFAULT
bool "Allow slab caches to be merged"
default y
depends on SLAB || SLUB
help
For reduced kernel memory fragmentation, slab caches can be
merged when they share the same size and other characteristics.
This carries a risk of kernel heap overflows being able to
overwrite objects from merged caches (and more easily control
cache layout), which makes such heap attacks easier to exploit
by attackers. By keeping caches unmerged, these kinds of exploits
can usually only damage objects in the same cache. To disable
merging at runtime, "slab_nomerge" can be passed on the kernel
command line.
config SLAB_FREELIST_RANDOM
bool "Randomize slab freelist"
depends on SLAB || SLUB
help
Randomizes the freelist order used on creating new pages. This
security feature reduces the predictability of the kernel slab
allocator against heap overflows.
config SLAB_FREELIST_HARDENED
bool "Harden slab freelist metadata"
depends on SLAB || SLUB
help
Many kernel heap attacks try to target slab cache metadata and
other infrastructure. This options makes minor performance
sacrifices to harden the kernel slab allocator against common
freelist exploit methods. Some slab implementations have more
sanity-checking than others. This option is most effective with
CONFIG_SLUB.
config SLUB_STATS
default n
bool "Enable SLUB performance statistics"
depends on SLUB && SYSFS
help
SLUB statistics are useful to debug SLUBs allocation behavior in
order find ways to optimize the allocator. This should never be
enabled for production use since keeping statistics slows down
the allocator by a few percentage points. The slabinfo command
supports the determination of the most active slabs to figure
out which slabs are relevant to a particular load.
Try running: slabinfo -DA
config SLUB_CPU_PARTIAL
default y
depends on SLUB && SMP
bool "SLUB per cpu partial cache"
help
Per cpu partial caches accelerate objects allocation and freeing
that is local to a processor at the price of more indeterminism
in the latency of the free. On overflow these caches will be cleared
which requires the taking of locks that may cause latency spikes.
Typically one would choose no for a realtime system.
endmenu # SLAB allocator options
config SHUFFLE_PAGE_ALLOCATOR
bool "Page allocator randomization"
default SLAB_FREELIST_RANDOM && ACPI_NUMA
help
Randomization of the page allocator improves the average
utilization of a direct-mapped memory-side-cache. See section
5.2.27 Heterogeneous Memory Attribute Table (HMAT) in the ACPI
6.2a specification for an example of how a platform advertises
the presence of a memory-side-cache. There are also incidental
security benefits as it reduces the predictability of page
allocations to compliment SLAB_FREELIST_RANDOM, but the
default granularity of shuffling on the "MAX_ORDER - 1" i.e,
10th order of pages is selected based on cache utilization
benefits on x86.
While the randomization improves cache utilization it may
negatively impact workloads on platforms without a cache. For
this reason, by default, the randomization is enabled only
after runtime detection of a direct-mapped memory-side-cache.
Otherwise, the randomization may be force enabled with the
'page_alloc.shuffle' kernel command line parameter.
Say Y if unsure.
config COMPAT_BRK
bool "Disable heap randomization"
default y
help
Randomizing heap placement makes heap exploits harder, but it
also breaks ancient binaries (including anything libc5 based).
This option changes the bootup default to heap randomization
disabled, and can be overridden at runtime by setting
/proc/sys/kernel/randomize_va_space to 2.
On non-ancient distros (post-2000 ones) N is usually a safe choice.
config MMAP_ALLOW_UNINITIALIZED
bool "Allow mmapped anonymous memory to be uninitialized"
depends on EXPERT && !MMU
default n
help
Normally, and according to the Linux spec, anonymous memory obtained
from mmap() has its contents cleared before it is passed to
userspace. Enabling this config option allows you to request that
mmap() skip that if it is given an MAP_UNINITIALIZED flag, thus
providing a huge performance boost. If this option is not enabled,
then the flag will be ignored.
This is taken advantage of by uClibc's malloc(), and also by
ELF-FDPIC binfmt's brk and stack allocator.
Because of the obvious security issues, this option should only be
enabled on embedded devices where you control what is run in
userspace. Since that isn't generally a problem on no-MMU systems,
it is normally safe to say Y here.
See Documentation/admin-guide/mm/nommu-mmap.rst for more information.
config SELECT_MEMORY_MODEL
def_bool y
depends on ARCH_SELECT_MEMORY_MODEL
choice
prompt "Memory model"
depends on SELECT_MEMORY_MODEL
default SPARSEMEM_MANUAL if ARCH_SPARSEMEM_DEFAULT
default FLATMEM_MANUAL
help
This option allows you to change some of the ways that
Linux manages its memory internally. Most users will
only have one option here selected by the architecture
configuration. This is normal.
config FLATMEM_MANUAL
bool "Flat Memory"
depends on !ARCH_SPARSEMEM_ENABLE || ARCH_FLATMEM_ENABLE
help
This option is best suited for non-NUMA systems with
flat address space. The FLATMEM is the most efficient
system in terms of performance and resource consumption
and it is the best option for smaller systems.
For systems that have holes in their physical address
spaces and for features like NUMA and memory hotplug,
choose "Sparse Memory".
If unsure, choose this option (Flat Memory) over any other.
config SPARSEMEM_MANUAL
bool "Sparse Memory"
depends on ARCH_SPARSEMEM_ENABLE
help
This will be the only option for some systems, including
memory hot-plug systems. This is normal.
This option provides efficient support for systems with
holes is their physical address space and allows memory
hot-plug and hot-remove.
If unsure, choose "Flat Memory" over this option.
endchoice
config SPARSEMEM
def_bool y
depends on (!SELECT_MEMORY_MODEL && ARCH_SPARSEMEM_ENABLE) || SPARSEMEM_MANUAL
config FLATMEM
def_bool y
depends on !SPARSEMEM || FLATMEM_MANUAL
#
# SPARSEMEM_EXTREME (which is the default) does some bootmem
# allocations when sparse_init() is called. If this cannot
# be done on your architecture, select this option. However,
# statically allocating the mem_section[] array can potentially
# consume vast quantities of .bss, so be careful.
#
# This option will also potentially produce smaller runtime code
# with gcc 3.4 and later.
#
config SPARSEMEM_STATIC
bool
#
# Architecture platforms which require a two level mem_section in SPARSEMEM
# must select this option. This is usually for architecture platforms with
# an extremely sparse physical address space.
#
config SPARSEMEM_EXTREME
def_bool y
depends on SPARSEMEM && !SPARSEMEM_STATIC
config SPARSEMEM_VMEMMAP_ENABLE
bool
config SPARSEMEM_VMEMMAP
bool "Sparse Memory virtual memmap"
depends on SPARSEMEM && SPARSEMEM_VMEMMAP_ENABLE
default y
help
SPARSEMEM_VMEMMAP uses a virtually mapped memmap to optimise
pfn_to_page and page_to_pfn operations. This is the most
efficient option when sufficient kernel resources are available.
config HAVE_MEMBLOCK_PHYS_MAP
bool
config HAVE_FAST_GUP
depends on MMU
bool
# Don't discard allocated memory used to track "memory" and "reserved" memblocks
# after early boot, so it can still be used to test for validity of memory.
# Also, memblocks are updated with memory hot(un)plug.
config ARCH_KEEP_MEMBLOCK
bool
# Keep arch NUMA mapping infrastructure post-init.
config NUMA_KEEP_MEMINFO
bool
config MEMORY_ISOLATION
bool
# IORESOURCE_SYSTEM_RAM regions in the kernel resource tree that are marked
# IORESOURCE_EXCLUSIVE cannot be mapped to user space, for example, via
# /dev/mem.
config EXCLUSIVE_SYSTEM_RAM
def_bool y
depends on !DEVMEM || STRICT_DEVMEM
#
# Only be set on architectures that have completely implemented memory hotplug
# feature. If you are not sure, don't touch it.
#
config HAVE_BOOTMEM_INFO_NODE
def_bool n
config ARCH_ENABLE_MEMORY_HOTPLUG
bool
config ARCH_ENABLE_MEMORY_HOTREMOVE
bool
# eventually, we can have this option just 'select SPARSEMEM'
menuconfig MEMORY_HOTPLUG
bool "Memory hotplug"
select MEMORY_ISOLATION
depends on SPARSEMEM
depends on ARCH_ENABLE_MEMORY_HOTPLUG
depends on 64BIT
select NUMA_KEEP_MEMINFO if NUMA
if MEMORY_HOTPLUG
config MEMORY_HOTPLUG_DEFAULT_ONLINE
bool "Online the newly added memory blocks by default"
depends on MEMORY_HOTPLUG
help
This option sets the default policy setting for memory hotplug
onlining policy (/sys/devices/system/memory/auto_online_blocks) which
determines what happens to newly added memory regions. Policy setting
can always be changed at runtime.
See Documentation/admin-guide/mm/memory-hotplug.rst for more information.
Say Y here if you want all hot-plugged memory blocks to appear in
'online' state by default.
Say N here if you want the default policy to keep all hot-plugged
memory blocks in 'offline' state.
config MEMORY_HOTREMOVE
bool "Allow for memory hot remove"
select HAVE_BOOTMEM_INFO_NODE if (X86_64 || PPC64)
depends on MEMORY_HOTPLUG && ARCH_ENABLE_MEMORY_HOTREMOVE
depends on MIGRATION
config MHP_MEMMAP_ON_MEMORY
def_bool y
depends on MEMORY_HOTPLUG && SPARSEMEM_VMEMMAP
depends on ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE
config MEMORY_HOTPLUG_SUBSECTIONS
bool "Allow memory to be mapped at a subsection granularity"
depends on MEMORY_HOTPLUG
help
The default functions used for adding memory, add_memory(), only maps
memory at 128 MB chunks and has a 256 KB overhead in the page table
space it consumes (assuming the logical mapping is not using block
mappings). For low memory environments where we don't want to map
large amounts of memory, we add downstream functions that add and
remove memory on a subsection-size granularity.
If unsure, say N.
endif # MEMORY_HOTPLUG
# Heavily threaded applications may benefit from splitting the mm-wide
# page_table_lock, so that faults on different parts of the user address
# space can be handled with less contention: split it at this NR_CPUS.
# Default to 4 for wider testing, though 8 might be more appropriate.
# ARM's adjust_pte (unused if VIPT) depends on mm-wide page_table_lock.
# PA-RISC 7xxx's spinlock_t would enlarge struct page from 32 to 44 bytes.
# SPARC32 allocates multiple pte tables within a single page, and therefore
# a per-page lock leads to problems when multiple tables need to be locked
# at the same time (e.g. copy_page_range()).
# DEBUG_SPINLOCK and DEBUG_LOCK_ALLOC spinlock_t also enlarge struct page.
#
config SPLIT_PTLOCK_CPUS
int
default "999999" if !MMU
default "999999" if ARM && !CPU_CACHE_VIPT
default "999999" if PARISC && !PA20
default "999999" if SPARC32
default "4"
config ARCH_ENABLE_SPLIT_PMD_PTLOCK
bool
#
# support for memory balloon
config MEMORY_BALLOON
bool
#
# support for memory relinquish
config MEMORY_RELINQUISH
def_bool y
depends on ARCH_HAS_MEM_RELINQUISH
depends on MEMORY_BALLOON || PAGE_REPORTING
#
# support for memory balloon compaction
config BALLOON_COMPACTION
bool "Allow for balloon memory compaction/migration"
def_bool y
depends on COMPACTION && MEMORY_BALLOON
help
Memory fragmentation introduced by ballooning might reduce
significantly the number of 2MB contiguous memory blocks that can be
used within a guest, thus imposing performance penalties associated
with the reduced number of transparent huge pages that could be used
by the guest workload. Allowing the compaction & migration for memory
pages enlisted as being part of memory balloon devices avoids the
scenario aforementioned and helps improving memory defragmentation.
#
# support for memory compaction
config COMPACTION
bool "Allow for memory compaction"
def_bool y
select MIGRATION
depends on MMU
help
Compaction is the only memory management component to form
high order (larger physically contiguous) memory blocks
reliably. The page allocator relies on compaction heavily and
the lack of the feature can lead to unexpected OOM killer
invocations for high order memory requests. You shouldn't
disable this option unless there really is a strong reason for
it and then we would be really interested to hear about that at
linux-mm@kvack.org.
config COMPACT_UNEVICTABLE_DEFAULT
int
depends on COMPACTION
default 0 if PREEMPT_RT
default 1
#
# support for free page reporting
config PAGE_REPORTING
bool "Free page reporting"
def_bool n
help
Free page reporting allows for the incremental acquisition of
free pages from the buddy allocator for the purpose of reporting
those pages to another entity, such as a hypervisor, so that the
memory can be freed within the host for other uses.
#
# support for page migration
#
config MIGRATION
bool "Page migration"
def_bool y
depends on (NUMA || ARCH_ENABLE_MEMORY_HOTREMOVE || COMPACTION || CMA) && MMU
help
Allows the migration of the physical location of pages of processes
while the virtual addresses are not changed. This is useful in
two situations. The first is on NUMA systems to put pages nearer
to the processors accessing. The second is when allocating huge
pages as migration can relocate pages to satisfy a huge page
allocation instead of reclaiming.
config DEVICE_MIGRATION
def_bool MIGRATION && ZONE_DEVICE
config ARCH_ENABLE_HUGEPAGE_MIGRATION
bool
config ARCH_ENABLE_THP_MIGRATION
bool
config HUGETLB_PAGE_SIZE_VARIABLE
def_bool n
help
Allows the pageblock_order value to be dynamic instead of just standard
HUGETLB_PAGE_ORDER when there are multiple HugeTLB page sizes available
on a platform.
Note that the pageblock_order cannot exceed MAX_ORDER - 1 and will be
clamped down to MAX_ORDER - 1.
config CONTIG_ALLOC
def_bool (MEMORY_ISOLATION && COMPACTION) || CMA
config PHYS_ADDR_T_64BIT
def_bool 64BIT
config BOUNCE
bool "Enable bounce buffers"
default y
depends on BLOCK && MMU && HIGHMEM
help
Enable bounce buffers for devices that cannot access the full range of
memory available to the CPU. Enabled by default when HIGHMEM is
selected, but you may say n to override this.
config MMU_NOTIFIER
bool
select SRCU
select INTERVAL_TREE
config KSM
bool "Enable KSM for page merging"
depends on MMU
select XXHASH
help
Enable Kernel Samepage Merging: KSM periodically scans those areas
of an application's address space that an app has advised may be
mergeable. When it finds pages of identical content, it replaces
the many instances by a single page with that content, so
saving memory until one or another app needs to modify the content.
Recommended for use with KVM, or with other duplicative applications.
See Documentation/mm/ksm.rst for more information: KSM is inactive
until a program has madvised that an area is MADV_MERGEABLE, and
root has set /sys/kernel/mm/ksm/run to 1 (if CONFIG_SYSFS is set).
config DEFAULT_MMAP_MIN_ADDR
int "Low address space to protect from user allocation"
depends on MMU
default 4096
help
This is the portion of low virtual memory which should be protected
from userspace allocation. Keeping a user from writing to low pages
can help reduce the impact of kernel NULL pointer bugs.
For most ia64, ppc64 and x86 users with lots of address space
a value of 65536 is reasonable and should cause no problems.
On arm and other archs it should not be higher than 32768.
Programs which use vm86 functionality or have some need to map
this low address space will need CAP_SYS_RAWIO or disable this
protection by setting the value to 0.
This value can be changed after boot using the
/proc/sys/vm/mmap_min_addr tunable.
config ARCH_SUPPORTS_MEMORY_FAILURE
bool
config MEMORY_FAILURE
depends on MMU
depends on ARCH_SUPPORTS_MEMORY_FAILURE
bool "Enable recovery from hardware memory errors"
select MEMORY_ISOLATION
select RAS
help
Enables code to recover from some memory failures on systems
with MCA recovery. This allows a system to continue running
even when some of its memory has uncorrected errors. This requires
special hardware support and typically ECC memory.
config HWPOISON_INJECT
tristate "HWPoison pages injector"
depends on MEMORY_FAILURE && DEBUG_KERNEL && PROC_FS
select PROC_PAGE_MONITOR
config NOMMU_INITIAL_TRIM_EXCESS
int "Turn on mmap() excess space trimming before booting"
depends on !MMU
default 1
help
The NOMMU mmap() frequently needs to allocate large contiguous chunks
of memory on which to store mappings, but it can only ask the system
allocator for chunks in 2^N*PAGE_SIZE amounts - which is frequently
more than it requires. To deal with this, mmap() is able to trim off
the excess and return it to the allocator.
If trimming is enabled, the excess is trimmed off and returned to the
system allocator, which can cause extra fragmentation, particularly
if there are a lot of transient processes.
If trimming is disabled, the excess is kept, but not used, which for
long-term mappings means that the space is wasted.
Trimming can be dynamically controlled through a sysctl option
(/proc/sys/vm/nr_trim_pages) which specifies the minimum number of
excess pages there must be before trimming should occur, or zero if
no trimming is to occur.
This option specifies the initial value of this option. The default
of 1 says that all excess pages should be trimmed.
See Documentation/admin-guide/mm/nommu-mmap.rst for more information.
config ARCH_WANT_GENERAL_HUGETLB
bool
config ARCH_WANTS_THP_SWAP
def_bool n
menuconfig TRANSPARENT_HUGEPAGE
bool "Transparent Hugepage Support"
depends on HAVE_ARCH_TRANSPARENT_HUGEPAGE && !PREEMPT_RT
select COMPACTION
select XARRAY_MULTI
help
Transparent Hugepages allows the kernel to use huge pages and
huge tlb transparently to the applications whenever possible.
This feature can improve computing performance to certain
applications by speeding up page faults during memory
allocation, by reducing the number of tlb misses and by speeding
up the pagetable walking.
If memory constrained on embedded, you may want to say N.
if TRANSPARENT_HUGEPAGE
choice
prompt "Transparent Hugepage Support sysfs defaults"
depends on TRANSPARENT_HUGEPAGE
default TRANSPARENT_HUGEPAGE_ALWAYS
help
Selects the sysfs defaults for Transparent Hugepage Support.
config TRANSPARENT_HUGEPAGE_ALWAYS
bool "always"
help
Enabling Transparent Hugepage always, can increase the
memory footprint of applications without a guaranteed
benefit but it will work automatically for all applications.
config TRANSPARENT_HUGEPAGE_MADVISE
bool "madvise"
help
Enabling Transparent Hugepage madvise, will only provide a
performance improvement benefit to the applications using
madvise(MADV_HUGEPAGE) but it won't risk to increase the
memory footprint of applications without a guaranteed
benefit.
endchoice
config THP_SWAP
def_bool y
depends on TRANSPARENT_HUGEPAGE && ARCH_WANTS_THP_SWAP && SWAP
help
Swap transparent huge pages in one piece, without splitting.
XXX: For now, swap cluster backing transparent huge page
will be split after swapout.
For selection by architectures with reasonable THP sizes.
config READ_ONLY_THP_FOR_FS
bool "Read-only THP for filesystems (EXPERIMENTAL)"
depends on TRANSPARENT_HUGEPAGE && SHMEM
help
Allow khugepaged to put read-only file-backed pages in THP.
This is marked experimental because it is a new feature. Write
support of file THPs will be developed in the next few release
cycles.
endif # TRANSPARENT_HUGEPAGE
#
# UP and nommu archs use km based percpu allocator
#
config NEED_PER_CPU_KM
depends on !SMP || !MMU
bool
default y
config NEED_PER_CPU_EMBED_FIRST_CHUNK
bool
config NEED_PER_CPU_PAGE_FIRST_CHUNK
bool
config USE_PERCPU_NUMA_NODE_ID
bool
config HAVE_SETUP_PER_CPU_AREA
bool
config FRONTSWAP
bool
config CMA
bool "Contiguous Memory Allocator"
depends on MMU
select MIGRATION
select MEMORY_ISOLATION
help
This enables the Contiguous Memory Allocator which allows other
subsystems to allocate big physically-contiguous blocks of memory.
CMA reserves a region of memory and allows only movable pages to
be allocated from it. This way, the kernel can use the memory for
pagecache and when a subsystem requests for contiguous area, the
allocated pages are migrated away to serve the contiguous request.
If unsure, say "n".
config CMA_DEBUG
bool "CMA debug messages (DEVELOPMENT)"
depends on DEBUG_KERNEL && CMA
help
Turns on debug messages in CMA. This produces KERN_DEBUG
messages for every CMA call as well as various messages while
processing calls such as dma_alloc_from_contiguous().
This option does not affect warning and error messages.
config CMA_DEBUGFS
bool "CMA debugfs interface"
depends on CMA && DEBUG_FS
help
Turns on the DebugFS interface for CMA.
config CMA_SYSFS
bool "CMA information through sysfs interface"
depends on CMA && SYSFS
help
This option exposes some sysfs attributes to get information
from CMA.
config CMA_AREAS
int "Maximum count of the CMA areas"
depends on CMA
default 19 if NUMA
default 7
help
CMA allows to create CMA areas for particular purpose, mainly,
used as device private area. This parameter sets the maximum
number of CMA area in the system.
If unsure, leave the default value "7" in UMA and "19" in NUMA.
config MEM_SOFT_DIRTY
bool "Track memory changes"
depends on CHECKPOINT_RESTORE && HAVE_ARCH_SOFT_DIRTY && PROC_FS
select PROC_PAGE_MONITOR
help
This option enables memory changes tracking by introducing a
soft-dirty bit on pte-s. This bit it set when someone writes
into a page just as regular dirty bit, but unlike the latter
it can be cleared by hands.
See Documentation/admin-guide/mm/soft-dirty.rst for more details.
config GENERIC_EARLY_IOREMAP
bool
config STACK_MAX_DEFAULT_SIZE_MB
int "Default maximum user stack size for 32-bit processes (MB)"
default 100
range 8 2048
depends on STACK_GROWSUP && (!64BIT || COMPAT)
help
This is the maximum stack size in Megabytes in the VM layout of 32-bit
user processes when the stack grows upwards (currently only on parisc
arch) when the RLIMIT_STACK hard limit is unlimited.
A sane initial value is 100 MB.
config DEFERRED_STRUCT_PAGE_INIT
bool "Defer initialisation of struct pages to kthreads"
depends on SPARSEMEM
depends on !NEED_PER_CPU_KM
depends on 64BIT
select PADATA
help
Ordinarily all struct pages are initialised during early boot in a
single thread. On very large machines this can take a considerable
amount of time. If this option is set, large machines will bring up
a subset of memmap at boot and then initialise the rest in parallel.
This has a potential performance impact on tasks running early in the
lifetime of the system until these kthreads finish the
initialisation.
config PAGE_IDLE_FLAG
bool
select PAGE_EXTENSION if !64BIT
help
This adds PG_idle and PG_young flags to 'struct page'. PTE Accessed
bit writers can set the state of the bit in the flags so that PTE
Accessed bit readers may avoid disturbance.
config IDLE_PAGE_TRACKING
bool "Enable idle page tracking"
depends on SYSFS && MMU
select PAGE_IDLE_FLAG
help
This feature allows to estimate the amount of user pages that have
not been touched during a given period of time. This information can
be useful to tune memory cgroup limits and/or for job placement
within a compute cluster.
See Documentation/admin-guide/mm/idle_page_tracking.rst for
more details.
config ARCH_HAS_CACHE_LINE_SIZE
bool
config ARCH_HAS_CURRENT_STACK_POINTER
bool
help
In support of HARDENED_USERCOPY performing stack variable lifetime
checking, an architecture-agnostic way to find the stack pointer
is needed. Once an architecture defines an unsigned long global
register alias named "current_stack_pointer", this config can be
selected.
config ARCH_HAS_PTE_DEVMAP
bool
config ARCH_HAS_ZONE_DMA_SET
bool
config ZONE_DMA
bool "Support DMA zone" if ARCH_HAS_ZONE_DMA_SET
default y if ARM64 || X86
config ZONE_DMA32
bool "Support DMA32 zone" if ARCH_HAS_ZONE_DMA_SET
depends on !X86_32
default y if ARM64
config ZONE_DEVICE
bool "Device memory (pmem, HMM, etc...) hotplug support"
depends on MEMORY_HOTPLUG
depends on MEMORY_HOTREMOVE
depends on SPARSEMEM_VMEMMAP
depends on ARCH_HAS_PTE_DEVMAP
select XARRAY_MULTI
help
Device memory hotplug support allows for establishing pmem,
or other device driver discovered memory regions, in the
memmap. This allows pfn_to_page() lookups of otherwise
"device-physical" addresses which is needed for using a DAX
mapping in an O_DIRECT operation, among other things.
If FS_DAX is enabled, then say Y.
#
# Helpers to mirror range of the CPU page tables of a process into device page
# tables.
#
config HMM_MIRROR
bool
depends on MMU
config GET_FREE_REGION
depends on SPARSEMEM
bool
config DEVICE_PRIVATE
bool "Unaddressable device memory (GPU memory, ...)"
depends on ZONE_DEVICE
select GET_FREE_REGION
help
Allows creation of struct pages to represent unaddressable device
memory; i.e., memory that is only accessible from the device (or
group of devices). You likely also want to select HMM_MIRROR.
config VMAP_PFN
bool
config ARCH_USES_HIGH_VMA_FLAGS
bool
config ARCH_HAS_PKEYS
bool
config VM_EVENT_COUNTERS
default y
bool "Enable VM event counters for /proc/vmstat" if EXPERT
help
VM event counters are needed for event counts to be shown.
This option allows the disabling of the VM event counters
on EXPERT systems. /proc/vmstat will only show page counts
if VM event counters are disabled.
config PERCPU_STATS
bool "Collect percpu memory statistics"
help
This feature collects and exposes statistics via debugfs. The
information includes global and per chunk statistics, which can
be used to help understand percpu memory usage.
config GUP_TEST
bool "Enable infrastructure for get_user_pages()-related unit tests"
depends on DEBUG_FS
help
Provides /sys/kernel/debug/gup_test, which in turn provides a way
to make ioctl calls that can launch kernel-based unit tests for
the get_user_pages*() and pin_user_pages*() family of API calls.
These tests include benchmark testing of the _fast variants of
get_user_pages*() and pin_user_pages*(), as well as smoke tests of
the non-_fast variants.
There is also a sub-test that allows running dump_page() on any
of up to eight pages (selected by command line args) within the
range of user-space addresses. These pages are either pinned via
pin_user_pages*(), or pinned via get_user_pages*(), as specified
by other command line arguments.
See tools/testing/selftests/vm/gup_test.c
comment "GUP_TEST needs to have DEBUG_FS enabled"
depends on !GUP_TEST && !DEBUG_FS
config GUP_GET_PTE_LOW_HIGH
bool
config ARCH_HAS_PTE_SPECIAL
bool
#
# Some architectures require a special hugepage directory format that is
# required to support multiple hugepage sizes. For example a4fe3ce76
# "powerpc/mm: Allow more flexible layouts for hugepage pagetables"
# introduced it on powerpc. This allows for a more flexible hugepage
# pagetable layouts.
#
config ARCH_HAS_HUGEPD
bool
config MAPPING_DIRTY_HELPERS
bool
config KMAP_LOCAL
bool
config KMAP_LOCAL_NON_LINEAR_PTE_ARRAY
bool
# struct io_mapping based helper. Selected by drivers that need them
config IO_MAPPING
bool
# Some architectures want callbacks for all IO mappings in order to
# track the physical addresses that get used as devices.
config ARCH_HAS_IOREMAP_PHYS_HOOKS
bool
config SECRETMEM
def_bool ARCH_HAS_SET_DIRECT_MAP && !EMBEDDED
config ANON_VMA_NAME
bool "Anonymous VMA name support"
depends on PROC_FS && ADVISE_SYSCALLS && MMU
help
Allow naming anonymous virtual memory areas.
This feature allows assigning names to virtual memory areas. Assigned
names can be later retrieved from /proc/pid/maps and /proc/pid/smaps
and help identifying individual anonymous memory areas.
Assigning a name to anonymous virtual memory area might prevent that
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
Arch has userfaultfd write protection support
config HAVE_ARCH_USERFAULTFD_MINOR
bool
help
Arch has userfaultfd minor fault support
config PTE_MARKER
bool
help
Allows to create marker PTEs for file-backed memory.
config PTE_MARKER_UFFD_WP
bool "Userfaultfd write protection support for shmem/hugetlbfs"
default y
depends on HAVE_ARCH_USERFAULTFD_WP
select PTE_MARKER
help
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.
# multi-gen LRU {
config LRU_GEN
bool "Multi-Gen LRU"
depends on MMU
# make sure folio->flags has enough spare bits
depends on 64BIT || !SPARSEMEM || SPARSEMEM_VMEMMAP
help
A high performance LRU implementation to overcommit memory. See
Documentation/admin-guide/mm/multigen_lru.rst for details.
config LRU_GEN_ENABLED
bool "Enable by default"
depends on LRU_GEN
help
This option enables the multi-gen LRU by default.
config LRU_GEN_STATS
bool "Full stats for debugging"
depends on LRU_GEN
help
Do not enable this option unless you plan to look at historical stats
from evicted generations for debugging purpose.
This option has a per-memcg and per-node memory overhead.
# }
source "mm/damon/Kconfig"
endmenu