linux/lib/test_hmm_uapi.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
   2/*
   3 * This is a module to test the HMM (Heterogeneous Memory Management) API
   4 * of the kernel. It allows a userspace program to expose its entire address
   5 * space through the HMM test module device file.
   6 */
   7#ifndef _LIB_TEST_HMM_UAPI_H
   8#define _LIB_TEST_HMM_UAPI_H
   9
  10#include <linux/types.h>
  11#include <linux/ioctl.h>
  12
  13/*
  14 * Structure to pass to the HMM test driver to mimic a device accessing
  15 * system memory and ZONE_DEVICE private memory through device page tables.
  16 *
  17 * @addr: (in) user address the device will read/write
  18 * @ptr: (in) user address where device data is copied to/from
  19 * @npages: (in) number of pages to read/write
  20 * @cpages: (out) number of pages copied
  21 * @faults: (out) number of device page faults seen
  22 */
  23struct hmm_dmirror_cmd {
  24        __u64           addr;
  25        __u64           ptr;
  26        __u64           npages;
  27        __u64           cpages;
  28        __u64           faults;
  29};
  30
  31/* Expose the address space of the calling process through hmm device file */
  32#define HMM_DMIRROR_READ                _IOWR('H', 0x00, struct hmm_dmirror_cmd)
  33#define HMM_DMIRROR_WRITE               _IOWR('H', 0x01, struct hmm_dmirror_cmd)
  34#define HMM_DMIRROR_MIGRATE             _IOWR('H', 0x02, struct hmm_dmirror_cmd)
  35#define HMM_DMIRROR_SNAPSHOT            _IOWR('H', 0x03, struct hmm_dmirror_cmd)
  36#define HMM_DMIRROR_EXCLUSIVE           _IOWR('H', 0x04, struct hmm_dmirror_cmd)
  37#define HMM_DMIRROR_CHECK_EXCLUSIVE     _IOWR('H', 0x05, struct hmm_dmirror_cmd)
  38
  39/*
  40 * Values returned in hmm_dmirror_cmd.ptr for HMM_DMIRROR_SNAPSHOT.
  41 * HMM_DMIRROR_PROT_ERROR: no valid mirror PTE for this page
  42 * HMM_DMIRROR_PROT_NONE: unpopulated PTE or PTE with no access
  43 * HMM_DMIRROR_PROT_READ: read-only PTE
  44 * HMM_DMIRROR_PROT_WRITE: read/write PTE
  45 * HMM_DMIRROR_PROT_PMD: PMD sized page is fully mapped by same permissions
  46 * HMM_DMIRROR_PROT_PUD: PUD sized page is fully mapped by same permissions
  47 * HMM_DMIRROR_PROT_ZERO: special read-only zero page
  48 * HMM_DMIRROR_PROT_DEV_PRIVATE_LOCAL: Migrated device private page on the
  49 *                                      device the ioctl() is made
  50 * HMM_DMIRROR_PROT_DEV_PRIVATE_REMOTE: Migrated device private page on some
  51 *                                      other device
  52 */
  53enum {
  54        HMM_DMIRROR_PROT_ERROR                  = 0xFF,
  55        HMM_DMIRROR_PROT_NONE                   = 0x00,
  56        HMM_DMIRROR_PROT_READ                   = 0x01,
  57        HMM_DMIRROR_PROT_WRITE                  = 0x02,
  58        HMM_DMIRROR_PROT_PMD                    = 0x04,
  59        HMM_DMIRROR_PROT_PUD                    = 0x08,
  60        HMM_DMIRROR_PROT_ZERO                   = 0x10,
  61        HMM_DMIRROR_PROT_DEV_PRIVATE_LOCAL      = 0x20,
  62        HMM_DMIRROR_PROT_DEV_PRIVATE_REMOTE     = 0x30,
  63};
  64
  65#endif /* _LIB_TEST_HMM_UAPI_H */
  66