Commit 188f4826 authored by Alex Sierra's avatar Alex Sierra Committed by akpm

lib: test_hmm add ioctl to get zone device type

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

Link: https://lkml.kernel.org/r/20220715150521.18165-9-alex.sierra@amd.comSigned-off-by: default avatarAlex Sierra <alex.sierra@amd.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Acked-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: default avatarAlistair Poppple <apopple@nvidia.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Jason Gunthorpe <jgg@nvidia.com>
Cc: Jerome Glisse <jglisse@redhat.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Ralph Campbell <rcampbell@nvidia.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent c83dee9b
...@@ -87,6 +87,7 @@ struct dmirror_chunk { ...@@ -87,6 +87,7 @@ struct dmirror_chunk {
struct dmirror_device { struct dmirror_device {
struct cdev cdevice; struct cdev cdevice;
struct hmm_devmem *devmem; struct hmm_devmem *devmem;
unsigned int zone_device_type;
unsigned int devmem_capacity; unsigned int devmem_capacity;
unsigned int devmem_count; unsigned int devmem_count;
...@@ -1266,14 +1267,20 @@ static void dmirror_device_remove(struct dmirror_device *mdevice) ...@@ -1266,14 +1267,20 @@ static void dmirror_device_remove(struct dmirror_device *mdevice)
static int __init hmm_dmirror_init(void) static int __init hmm_dmirror_init(void)
{ {
int ret; int ret;
int id; int id = 0;
int ndevices = 0;
ret = alloc_chrdev_region(&dmirror_dev, 0, DMIRROR_NDEVICES, ret = alloc_chrdev_region(&dmirror_dev, 0, DMIRROR_NDEVICES,
"HMM_DMIRROR"); "HMM_DMIRROR");
if (ret) if (ret)
goto err_unreg; goto err_unreg;
for (id = 0; id < DMIRROR_NDEVICES; id++) { memset(dmirror_devices, 0, DMIRROR_NDEVICES * sizeof(dmirror_devices[0]));
dmirror_devices[ndevices++].zone_device_type =
HMM_DMIRROR_MEMORY_DEVICE_PRIVATE;
dmirror_devices[ndevices++].zone_device_type =
HMM_DMIRROR_MEMORY_DEVICE_PRIVATE;
for (id = 0; id < ndevices; id++) {
ret = dmirror_device_init(dmirror_devices + id, id); ret = dmirror_device_init(dmirror_devices + id, id);
if (ret) if (ret)
goto err_chrdev; goto err_chrdev;
......
...@@ -31,10 +31,11 @@ struct hmm_dmirror_cmd { ...@@ -31,10 +31,11 @@ struct hmm_dmirror_cmd {
/* Expose the address space of the calling process through hmm device file */ /* Expose the address space of the calling process through hmm device file */
#define HMM_DMIRROR_READ _IOWR('H', 0x00, struct hmm_dmirror_cmd) #define HMM_DMIRROR_READ _IOWR('H', 0x00, struct hmm_dmirror_cmd)
#define HMM_DMIRROR_WRITE _IOWR('H', 0x01, struct hmm_dmirror_cmd) #define HMM_DMIRROR_WRITE _IOWR('H', 0x01, struct hmm_dmirror_cmd)
#define HMM_DMIRROR_MIGRATE _IOWR('H', 0x02, struct hmm_dmirror_cmd) #define HMM_DMIRROR_MIGRATE_TO_DEV _IOWR('H', 0x02, struct hmm_dmirror_cmd)
#define HMM_DMIRROR_SNAPSHOT _IOWR('H', 0x03, struct hmm_dmirror_cmd) #define HMM_DMIRROR_MIGRATE_TO_SYS _IOWR('H', 0x03, struct hmm_dmirror_cmd)
#define HMM_DMIRROR_EXCLUSIVE _IOWR('H', 0x04, struct hmm_dmirror_cmd) #define HMM_DMIRROR_SNAPSHOT _IOWR('H', 0x04, struct hmm_dmirror_cmd)
#define HMM_DMIRROR_CHECK_EXCLUSIVE _IOWR('H', 0x05, struct hmm_dmirror_cmd) #define HMM_DMIRROR_EXCLUSIVE _IOWR('H', 0x05, struct hmm_dmirror_cmd)
#define HMM_DMIRROR_CHECK_EXCLUSIVE _IOWR('H', 0x06, struct hmm_dmirror_cmd)
/* /*
* Values returned in hmm_dmirror_cmd.ptr for HMM_DMIRROR_SNAPSHOT. * Values returned in hmm_dmirror_cmd.ptr for HMM_DMIRROR_SNAPSHOT.
...@@ -62,4 +63,9 @@ enum { ...@@ -62,4 +63,9 @@ enum {
HMM_DMIRROR_PROT_DEV_PRIVATE_REMOTE = 0x30, 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 */ #endif /* _LIB_TEST_HMM_UAPI_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment