tools headers UAPI: update linux/fs.h with the kernel sources
authorMuhammad Usama Anjum <usama.anjum@collabora.com>
Mon, 21 Aug 2023 14:15:16 +0000 (19:15 +0500)
committerAndrew Morton <akpm@linux-foundation.org>
Wed, 18 Oct 2023 21:34:13 +0000 (14:34 -0700)
New IOCTL and macros has been added in the kernel sources. Update the
tools header file as well.

Link: https://lkml.kernel.org/r/20230821141518.870589-5-usama.anjum@collabora.com
Signed-off-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
Cc: Alex Sierra <alex.sierra@amd.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Andrei Vagin <avagin@gmail.com>
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: Michał Mirosław <mirq-linux@rere.qmqm.pl>
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: Andrew Morton <akpm@linux-foundation.org>
tools/include/uapi/linux/fs.h

index b7b56871029c58148cace2e383249cd193e29151..da43810b74856b5c9d34d57ecd10058732801921 100644 (file)
@@ -305,4 +305,63 @@ typedef int __bitwise __kernel_rwf_t;
 #define RWF_SUPPORTED  (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT |\
                         RWF_APPEND)
 
+/* Pagemap ioctl */
+#define PAGEMAP_SCAN   _IOWR('f', 16, struct pm_scan_arg)
+
+/* Bitmasks provided in pm_scan_args masks and reported in page_region.categories. */
+#define PAGE_IS_WPALLOWED      (1 << 0)
+#define PAGE_IS_WRITTEN                (1 << 1)
+#define PAGE_IS_FILE           (1 << 2)
+#define PAGE_IS_PRESENT                (1 << 3)
+#define PAGE_IS_SWAPPED                (1 << 4)
+#define PAGE_IS_PFNZERO                (1 << 5)
+#define PAGE_IS_HUGE           (1 << 6)
+
+/*
+ * struct page_region - Page region with flags
+ * @start:     Start of the region
+ * @end:       End of the region (exclusive)
+ * @categories:        PAGE_IS_* category bitmask for the region
+ */
+struct page_region {
+       __u64 start;
+       __u64 end;
+       __u64 categories;
+};
+
+/* Flags for PAGEMAP_SCAN ioctl */
+#define PM_SCAN_WP_MATCHING    (1 << 0)        /* Write protect the pages matched. */
+#define PM_SCAN_CHECK_WPASYNC  (1 << 1)        /* Abort the scan when a non-WP-enabled page is found. */
+
+/*
+ * struct pm_scan_arg - Pagemap ioctl argument
+ * @size:              Size of the structure
+ * @flags:             Flags for the IOCTL
+ * @start:             Starting address of the region
+ * @end:               Ending address of the region
+ * @walk_end           Address where the scan stopped (written by kernel).
+ *                     walk_end == end (address tags cleared) informs that the scan completed on entire range.
+ * @vec:               Address of page_region struct array for output
+ * @vec_len:           Length of the page_region struct array
+ * @max_pages:         Optional limit for number of returned pages (0 = disabled)
+ * @category_inverted: PAGE_IS_* categories which values match if 0 instead of 1
+ * @category_mask:     Skip pages for which any category doesn't match
+ * @category_anyof_mask: Skip pages for which no category matches
+ * @return_mask:       PAGE_IS_* categories that are to be reported in `page_region`s returned
+ */
+struct pm_scan_arg {
+       __u64 size;
+       __u64 flags;
+       __u64 start;
+       __u64 end;
+       __u64 walk_end;
+       __u64 vec;
+       __u64 vec_len;
+       __u64 max_pages;
+       __u64 category_inverted;
+       __u64 category_mask;
+       __u64 category_anyof_mask;
+       __u64 return_mask;
+};
+
 #endif /* _UAPI_LINUX_FS_H */