Lines Matching refs:mdevice

65 	struct dmirror_device		*mdevice;  member
76 struct dmirror_device *mdevice; member
128 dmirror->mdevice = container_of(cdev, struct dmirror_device, cdevice); in dmirror_fops_open()
157 pagemap)->mdevice; in dmirror_page_to_device()
221 range->migrate_pgmap_owner == dmirror->mdevice) in dmirror_interval_invalidate()
292 .dev_private_owner = dmirror->mdevice, in dmirror_fault()
452 static bool dmirror_allocate_chunk(struct dmirror_device *mdevice, in dmirror_allocate_chunk() argument
476 devmem->pagemap.owner = mdevice; in dmirror_allocate_chunk()
478 mutex_lock(&mdevice->devmem_lock); in dmirror_allocate_chunk()
480 if (mdevice->devmem_count == mdevice->devmem_capacity) { in dmirror_allocate_chunk()
484 new_capacity = mdevice->devmem_capacity + in dmirror_allocate_chunk()
486 new_chunks = krealloc(mdevice->devmem_chunks, in dmirror_allocate_chunk()
491 mdevice->devmem_capacity = new_capacity; in dmirror_allocate_chunk()
492 mdevice->devmem_chunks = new_chunks; in dmirror_allocate_chunk()
499 devmem->mdevice = mdevice; in dmirror_allocate_chunk()
502 mdevice->devmem_chunks[mdevice->devmem_count++] = devmem; in dmirror_allocate_chunk()
504 mutex_unlock(&mdevice->devmem_lock); in dmirror_allocate_chunk()
508 mdevice->devmem_count, in dmirror_allocate_chunk()
509 mdevice->devmem_count * (DEVMEM_CHUNK_SIZE / (1024 * 1024)), in dmirror_allocate_chunk()
512 spin_lock(&mdevice->lock); in dmirror_allocate_chunk()
516 page->zone_device_data = mdevice->free_pages; in dmirror_allocate_chunk()
517 mdevice->free_pages = page; in dmirror_allocate_chunk()
520 *ppage = mdevice->free_pages; in dmirror_allocate_chunk()
521 mdevice->free_pages = (*ppage)->zone_device_data; in dmirror_allocate_chunk()
522 mdevice->calloc++; in dmirror_allocate_chunk()
524 spin_unlock(&mdevice->lock); in dmirror_allocate_chunk()
529 mutex_unlock(&mdevice->devmem_lock); in dmirror_allocate_chunk()
537 static struct page *dmirror_devmem_alloc_page(struct dmirror_device *mdevice) in dmirror_devmem_alloc_page() argument
550 spin_lock(&mdevice->lock); in dmirror_devmem_alloc_page()
552 if (mdevice->free_pages) { in dmirror_devmem_alloc_page()
553 dpage = mdevice->free_pages; in dmirror_devmem_alloc_page()
554 mdevice->free_pages = dpage->zone_device_data; in dmirror_devmem_alloc_page()
555 mdevice->calloc++; in dmirror_devmem_alloc_page()
556 spin_unlock(&mdevice->lock); in dmirror_devmem_alloc_page()
558 spin_unlock(&mdevice->lock); in dmirror_devmem_alloc_page()
559 if (!dmirror_allocate_chunk(mdevice, &dpage)) in dmirror_devmem_alloc_page()
576 struct dmirror_device *mdevice = dmirror->mdevice; in dmirror_migrate_alloc_and_copy() local
596 dpage = dmirror_devmem_alloc_page(mdevice); in dmirror_migrate_alloc_and_copy()
704 args.pgmap_owner = dmirror->mdevice; in dmirror_migrate()
757 if (dmirror->mdevice == dmirror_page_to_device(page)) in dmirror_mkentry()
872 .dev_private_owner = dmirror->mdevice, in dmirror_snapshot()
1003 struct dmirror_device *mdevice; in dmirror_devmem_free() local
1008 mdevice = dmirror_page_to_device(page); in dmirror_devmem_free()
1010 spin_lock(&mdevice->lock); in dmirror_devmem_free()
1011 mdevice->cfree++; in dmirror_devmem_free()
1012 page->zone_device_data = mdevice->free_pages; in dmirror_devmem_free()
1013 mdevice->free_pages = page; in dmirror_devmem_free()
1014 spin_unlock(&mdevice->lock); in dmirror_devmem_free()
1072 args.pgmap_owner = dmirror->mdevice; in dmirror_devmem_fault()
1096 static int dmirror_device_init(struct dmirror_device *mdevice, int id) in dmirror_device_init() argument
1102 mutex_init(&mdevice->devmem_lock); in dmirror_device_init()
1103 spin_lock_init(&mdevice->lock); in dmirror_device_init()
1105 cdev_init(&mdevice->cdevice, &dmirror_fops); in dmirror_device_init()
1106 mdevice->cdevice.owner = THIS_MODULE; in dmirror_device_init()
1107 ret = cdev_add(&mdevice->cdevice, dev, 1); in dmirror_device_init()
1112 dmirror_allocate_chunk(mdevice, NULL); in dmirror_device_init()
1117 static void dmirror_device_remove(struct dmirror_device *mdevice) in dmirror_device_remove() argument
1121 if (mdevice->devmem_chunks) { in dmirror_device_remove()
1122 for (i = 0; i < mdevice->devmem_count; i++) { in dmirror_device_remove()
1124 mdevice->devmem_chunks[i]; in dmirror_device_remove()
1131 kfree(mdevice->devmem_chunks); in dmirror_device_remove()
1134 cdev_del(&mdevice->cdevice); in dmirror_device_remove()