Lines Matching refs:mdevice
67 struct dmirror_device *mdevice; member
78 struct dmirror_device *mdevice; member
130 dmirror->mdevice = container_of(cdev, struct dmirror_device, cdevice); in dmirror_fops_open()
159 pagemap)->mdevice; in dmirror_page_to_device()
223 range->owner == dmirror->mdevice) in dmirror_interval_invalidate()
294 .dev_private_owner = dmirror->mdevice, in dmirror_fault()
454 static bool dmirror_allocate_chunk(struct dmirror_device *mdevice, in dmirror_allocate_chunk() argument
478 devmem->pagemap.owner = mdevice; in dmirror_allocate_chunk()
480 mutex_lock(&mdevice->devmem_lock); in dmirror_allocate_chunk()
482 if (mdevice->devmem_count == mdevice->devmem_capacity) { in dmirror_allocate_chunk()
486 new_capacity = mdevice->devmem_capacity + in dmirror_allocate_chunk()
488 new_chunks = krealloc(mdevice->devmem_chunks, in dmirror_allocate_chunk()
493 mdevice->devmem_capacity = new_capacity; in dmirror_allocate_chunk()
494 mdevice->devmem_chunks = new_chunks; in dmirror_allocate_chunk()
501 devmem->mdevice = mdevice; in dmirror_allocate_chunk()
504 mdevice->devmem_chunks[mdevice->devmem_count++] = devmem; in dmirror_allocate_chunk()
506 mutex_unlock(&mdevice->devmem_lock); in dmirror_allocate_chunk()
510 mdevice->devmem_count, in dmirror_allocate_chunk()
511 mdevice->devmem_count * (DEVMEM_CHUNK_SIZE / (1024 * 1024)), in dmirror_allocate_chunk()
514 spin_lock(&mdevice->lock); in dmirror_allocate_chunk()
518 page->zone_device_data = mdevice->free_pages; in dmirror_allocate_chunk()
519 mdevice->free_pages = page; in dmirror_allocate_chunk()
522 *ppage = mdevice->free_pages; in dmirror_allocate_chunk()
523 mdevice->free_pages = (*ppage)->zone_device_data; in dmirror_allocate_chunk()
524 mdevice->calloc++; in dmirror_allocate_chunk()
526 spin_unlock(&mdevice->lock); in dmirror_allocate_chunk()
531 mutex_unlock(&mdevice->devmem_lock); in dmirror_allocate_chunk()
539 static struct page *dmirror_devmem_alloc_page(struct dmirror_device *mdevice) in dmirror_devmem_alloc_page() argument
552 spin_lock(&mdevice->lock); in dmirror_devmem_alloc_page()
554 if (mdevice->free_pages) { in dmirror_devmem_alloc_page()
555 dpage = mdevice->free_pages; in dmirror_devmem_alloc_page()
556 mdevice->free_pages = dpage->zone_device_data; in dmirror_devmem_alloc_page()
557 mdevice->calloc++; in dmirror_devmem_alloc_page()
558 spin_unlock(&mdevice->lock); in dmirror_devmem_alloc_page()
560 spin_unlock(&mdevice->lock); in dmirror_devmem_alloc_page()
561 if (!dmirror_allocate_chunk(mdevice, &dpage)) in dmirror_devmem_alloc_page()
578 struct dmirror_device *mdevice = dmirror->mdevice; in dmirror_migrate_alloc_and_copy() local
598 dpage = dmirror_devmem_alloc_page(mdevice); in dmirror_migrate_alloc_and_copy()
817 args.pgmap_owner = dmirror->mdevice; in dmirror_migrate()
870 if (dmirror->mdevice == dmirror_page_to_device(page)) in dmirror_mkentry()
985 .dev_private_owner = dmirror->mdevice, in dmirror_snapshot()
1101 struct dmirror_device *mdevice; in dmirror_devmem_free() local
1106 mdevice = dmirror_page_to_device(page); in dmirror_devmem_free()
1108 spin_lock(&mdevice->lock); in dmirror_devmem_free()
1109 mdevice->cfree++; in dmirror_devmem_free()
1110 page->zone_device_data = mdevice->free_pages; in dmirror_devmem_free()
1111 mdevice->free_pages = page; in dmirror_devmem_free()
1112 spin_unlock(&mdevice->lock); in dmirror_devmem_free()
1170 args.pgmap_owner = dmirror->mdevice; in dmirror_devmem_fault()
1194 static int dmirror_device_init(struct dmirror_device *mdevice, int id) in dmirror_device_init() argument
1200 mutex_init(&mdevice->devmem_lock); in dmirror_device_init()
1201 spin_lock_init(&mdevice->lock); in dmirror_device_init()
1203 cdev_init(&mdevice->cdevice, &dmirror_fops); in dmirror_device_init()
1204 mdevice->cdevice.owner = THIS_MODULE; in dmirror_device_init()
1205 ret = cdev_add(&mdevice->cdevice, dev, 1); in dmirror_device_init()
1210 dmirror_allocate_chunk(mdevice, NULL); in dmirror_device_init()
1215 static void dmirror_device_remove(struct dmirror_device *mdevice) in dmirror_device_remove() argument
1219 if (mdevice->devmem_chunks) { in dmirror_device_remove()
1220 for (i = 0; i < mdevice->devmem_count; i++) { in dmirror_device_remove()
1222 mdevice->devmem_chunks[i]; in dmirror_device_remove()
1229 kfree(mdevice->devmem_chunks); in dmirror_device_remove()
1232 cdev_del(&mdevice->cdevice); in dmirror_device_remove()