Add a migrate_vma_*() self test for mmap(MAP_SHARED) to verify that !vma_anonymous() ranges won't be migrated.
Showing the changes to tools/testing (1 of 1 file). Show all
Unified · Split
| @@ -941,6 +941,41 @@ TEST_F(hmm, migrate_fault) · 940 unmodified lines | ||
| 941 | 941 | hmm_buffer_free(buffer); |
| 942 | 942 | } |
| 943 | 943 | |
| 944 | +/* | |
| 945 | + * Migrate anonymous shared memory to device private memory. | |
| 946 | + */ | |
| 947 | +TEST_F(hmm, migrate_shared) | |
| 948 | +{ | |
| 949 | + struct hmm_buffer *buffer; | |
| 950 | + unsigned long npages; | |
| 951 | + unsigned long size; | |
| 952 | + int ret; | |
| 953 | + | |
| 954 | + npages = ALIGN(HMM_BUFFER_SIZE, self->page_size) >> self->page_shift; | |
| 955 | + ASSERT_NE(npages, 0); | |
| 956 | + size = npages << self->page_shift; | |
| 957 | + | |
| 958 | + buffer = malloc(sizeof(*buffer)); | |
| 959 | + ASSERT_NE(buffer, NULL); | |
| 960 | + | |
| 961 | + buffer->fd = -1; | |
| 962 | + buffer->size = size; | |
| 963 | + buffer->mirror = malloc(size); | |
| 964 | + ASSERT_NE(buffer->mirror, NULL); | |
| 965 | + | |
| 966 | + buffer->ptr = mmap(NULL, size, | |
| 967 | + PROT_READ | PROT_WRITE, | |
| 968 | + MAP_SHARED | MAP_ANONYMOUS, | |
| 969 | + buffer->fd, 0); | |
| 970 | + ASSERT_NE(buffer->ptr, MAP_FAILED); | |
| 971 | + | |
| 972 | + /* Migrate memory to device. */ | |
| 973 | + ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_MIGRATE, buffer, npages); | |
| 974 | + ASSERT_EQ(ret, -ENOENT); | |
| 975 | + | |
| 976 | + hmm_buffer_free(buffer); | |
| 977 | +} | |
| 978 | + | |
| 944 | 979 | /* |
| 945 | 980 | * Try to migrate various memory types to device private memory. |
| 946 | 981 | */ |