Lines Matching refs:mdevice

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