new ioctl cmd added to query zone device type. This will be
used once the test_hmm adds zone device coherent type.

Signed-off-by: Alex Sierra <alex.sie...@amd.com>
---
 lib/test_hmm.c      | 15 ++++++++++++++-
 lib/test_hmm_uapi.h |  7 +++++++
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/lib/test_hmm.c b/lib/test_hmm.c
index c259842f6d44..2daaa7b3710b 100644
--- a/lib/test_hmm.c
+++ b/lib/test_hmm.c
@@ -84,6 +84,7 @@ struct dmirror_chunk {
 struct dmirror_device {
        struct cdev             cdevice;
        struct hmm_devmem       *devmem;
+       unsigned int            zone_device_type;
 
        unsigned int            devmem_capacity;
        unsigned int            devmem_count;
@@ -470,6 +471,7 @@ static bool dmirror_allocate_chunk(struct dmirror_device 
*mdevice,
        if (IS_ERR(res))
                goto err_devmem;
 
+       mdevice->zone_device_type = HMM_DMIRROR_MEMORY_DEVICE_PRIVATE;
        devmem->pagemap.type = MEMORY_DEVICE_PRIVATE;
        devmem->pagemap.range.start = res->start;
        devmem->pagemap.range.end = res->end;
@@ -1025,6 +1027,15 @@ static int dmirror_snapshot(struct dmirror *dmirror,
        return ret;
 }
 
+static int dmirror_get_device_type(struct dmirror *dmirror,
+                           struct hmm_dmirror_cmd *cmd)
+{
+       mutex_lock(&dmirror->mutex);
+       cmd->zone_device_type = dmirror->mdevice->zone_device_type;
+       mutex_unlock(&dmirror->mutex);
+
+       return 0;
+}
 static long dmirror_fops_unlocked_ioctl(struct file *filp,
                                        unsigned int command,
                                        unsigned long arg)
@@ -1074,7 +1085,9 @@ static long dmirror_fops_unlocked_ioctl(struct file *filp,
        case HMM_DMIRROR_SNAPSHOT:
                ret = dmirror_snapshot(dmirror, &cmd);
                break;
-
+       case HMM_DMIRROR_GET_MEM_DEV_TYPE:
+               ret = dmirror_get_device_type(dmirror, &cmd);
+               break;
        default:
                return -EINVAL;
        }
diff --git a/lib/test_hmm_uapi.h b/lib/test_hmm_uapi.h
index f14dea5dcd06..c42e57a6a71e 100644
--- a/lib/test_hmm_uapi.h
+++ b/lib/test_hmm_uapi.h
@@ -26,6 +26,7 @@ struct hmm_dmirror_cmd {
        __u64           npages;
        __u64           cpages;
        __u64           faults;
+       __u64           zone_device_type;
 };
 
 /* Expose the address space of the calling process through hmm device file */
@@ -35,6 +36,7 @@ struct hmm_dmirror_cmd {
 #define HMM_DMIRROR_SNAPSHOT           _IOWR('H', 0x03, struct hmm_dmirror_cmd)
 #define HMM_DMIRROR_EXCLUSIVE          _IOWR('H', 0x04, struct hmm_dmirror_cmd)
 #define HMM_DMIRROR_CHECK_EXCLUSIVE    _IOWR('H', 0x05, struct hmm_dmirror_cmd)
+#define HMM_DMIRROR_GET_MEM_DEV_TYPE   _IOWR('H', 0x06, struct hmm_dmirror_cmd)
 
 /*
  * Values returned in hmm_dmirror_cmd.ptr for HMM_DMIRROR_SNAPSHOT.
@@ -62,4 +64,9 @@ enum {
        HMM_DMIRROR_PROT_DEV_PRIVATE_REMOTE     = 0x30,
 };
 
+enum {
+       /* 0 is reserved to catch uninitialized type fields */
+       HMM_DMIRROR_MEMORY_DEVICE_PRIVATE = 1,
+};
+
 #endif /* _LIB_TEST_HMM_UAPI_H */
-- 
2.32.0

Reply via email to