• Muhammad Usama Anjum's avatar
    fs/proc/task_mmu: implement IOCTL to get and optionally clear info about PTEs · 52526ca7
    Muhammad Usama Anjum authored
    The PAGEMAP_SCAN IOCTL on the pagemap file can be used to get or optionally
    clear the info about page table entries. The following operations are
    supported in this IOCTL:
    - Scan the address range and get the memory ranges matching the provided
      criteria. This is performed when the output buffer is specified.
    - Write-protect the pages. The PM_SCAN_WP_MATCHING is used to write-protect
      the pages of interest. The PM_SCAN_CHECK_WPASYNC aborts the operation if
      non-Async Write Protected pages are found. The ``PM_SCAN_WP_MATCHING``
      can be used with or without PM_SCAN_CHECK_WPASYNC.
    - Both of those operations can be combined into one atomic operation where
      we can get and write protect the pages as well.
    
    Following flags about pages are currently supported:
    - PAGE_IS_WPALLOWED - Page has async-write-protection enabled
    - PAGE_IS_WRITTEN - Page has been written to from the time it was write protected
    - PAGE_IS_FILE - Page is file backed
    - PAGE_IS_PRESENT - Page is present in the memory
    - PAGE_IS_SWAPPED - Page is in swapped
    - PAGE_IS_PFNZERO - Page has zero PFN
    - PAGE_IS_HUGE - Page is THP or Hugetlb backed
    
    This IOCTL can be extended to get information about more PTE bits. The
    entire address range passed by user [start, end) is scanned until either
    the user provided buffer is full or max_pages have been found.
    
    [akpm@linux-foundation.org: update it for "mm: hugetlb: add huge page size param to set_huge_pte_at()"]
    [akpm@linux-foundation.org: fix CONFIG_HUGETLB_PAGE=n warning]
    [arnd@arndb.de: hide unused pagemap_scan_backout_range() function]
      Link: https://lkml.kernel.org/r/20230927060257.2975412-1-arnd@kernel.org
    [sfr@canb.auug.org.au: fix "fs/proc/task_mmu: hide unused pagemap_scan_backout_range() function"]
      Link: https://lkml.kernel.org/r/20230928092223.0625c6bf@canb.auug.org.au
    Link: https://lkml.kernel.org/r/20230821141518.870589-3-usama.anjum@collabora.comSigned-off-by: default avatarMuhammad Usama Anjum <usama.anjum@collabora.com>
    Signed-off-by: default avatarMichał Mirosław <mirq-linux@rere.qmqm.pl>
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
    Reviewed-by: default avatarAndrei Vagin <avagin@gmail.com>
    Reviewed-by: default avatarMichał Mirosław <mirq-linux@rere.qmqm.pl>
    Cc: Alex Sierra <alex.sierra@amd.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Axel Rasmussen <axelrasmussen@google.com>
    Cc: Christian Brauner <brauner@kernel.org>
    Cc: Cyrill Gorcunov <gorcunov@gmail.com>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Gustavo A. R. Silva <gustavoars@kernel.org>
    Cc: "Liam R. Howlett" <Liam.Howlett@oracle.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Michal Miroslaw <emmir@google.com>
    Cc: Mike Rapoport (IBM) <rppt@kernel.org>
    Cc: Nadav Amit <namit@vmware.com>
    Cc: Pasha Tatashin <pasha.tatashin@soleen.com>
    Cc: Paul Gofman <pgofman@codeweavers.com>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Yang Shi <shy828301@gmail.com>
    Cc: Yun Zhou <yun.zhou@windriver.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    52526ca7
hugetlb.c 208 KB