Lines Matching refs:mdevice
91 struct dmirror_device *mdevice;
102 struct dmirror_device *mdevice;
140 static bool dmirror_is_private_zone(struct dmirror_device *mdevice)
142 return (mdevice->zone_device_type ==
149 return (dmirror->mdevice->zone_device_type ==
171 dmirror->mdevice = container_of(cdev, struct dmirror_device, cdevice);
204 return dmirror_page_to_chunk(page)->mdevice;
268 range->owner == dmirror->mdevice)
339 .dev_private_owner = dmirror->mdevice,
493 static int dmirror_allocate_chunk(struct dmirror_device *mdevice,
508 switch (mdevice->zone_device_type) {
519 devmem->pagemap.range.start = (MINOR(mdevice->cdevice.dev) - 2) ?
533 devmem->pagemap.owner = mdevice;
535 mutex_lock(&mdevice->devmem_lock);
537 if (mdevice->devmem_count == mdevice->devmem_capacity) {
541 new_capacity = mdevice->devmem_capacity +
543 new_chunks = krealloc(mdevice->devmem_chunks,
548 mdevice->devmem_capacity = new_capacity;
549 mdevice->devmem_chunks = new_chunks;
560 devmem->mdevice = mdevice;
563 mdevice->devmem_chunks[mdevice->devmem_count++] = devmem;
565 mutex_unlock(&mdevice->devmem_lock);
569 mdevice->devmem_count,
570 mdevice->devmem_count * (DEVMEM_CHUNK_SIZE / (1024 * 1024)),
573 spin_lock(&mdevice->lock);
577 page->zone_device_data = mdevice->free_pages;
578 mdevice->free_pages = page;
581 *ppage = mdevice->free_pages;
582 mdevice->free_pages = (*ppage)->zone_device_data;
583 mdevice->calloc++;
585 spin_unlock(&mdevice->lock);
590 mutex_unlock(&mdevice->devmem_lock);
600 static struct page *dmirror_devmem_alloc_page(struct dmirror_device *mdevice)
611 if (dmirror_is_private_zone(mdevice)) {
616 spin_lock(&mdevice->lock);
618 if (mdevice->free_pages) {
619 dpage = mdevice->free_pages;
620 mdevice->free_pages = dpage->zone_device_data;
621 mdevice->calloc++;
622 spin_unlock(&mdevice->lock);
624 spin_unlock(&mdevice->lock);
625 if (dmirror_allocate_chunk(mdevice, &dpage))
642 struct dmirror_device *mdevice = dmirror->mdevice;
666 dpage = dmirror_devmem_alloc_page(mdevice);
939 args.pgmap_owner = dmirror->mdevice;
999 args.pgmap_owner = dmirror->mdevice;
1056 if (dmirror->mdevice == dmirror_page_to_device(page))
1062 if (dmirror->mdevice == dmirror_page_to_device(page))
1177 .dev_private_owner = dmirror->mdevice,
1260 struct dmirror_device *mdevice = devmem->mdevice;
1263 for (page = mdevice->free_pages; page; page = page->zone_device_data)
1265 mdevice->free_pages = page->zone_device_data;
1268 static void dmirror_device_remove_chunks(struct dmirror_device *mdevice)
1272 mutex_lock(&mdevice->devmem_lock);
1273 if (mdevice->devmem_chunks) {
1274 for (i = 0; i < mdevice->devmem_count; i++) {
1276 mdevice->devmem_chunks[i];
1278 spin_lock(&mdevice->lock);
1281 spin_unlock(&mdevice->lock);
1290 mdevice->devmem_count = 0;
1291 mdevice->devmem_capacity = 0;
1292 mdevice->free_pages = NULL;
1293 kfree(mdevice->devmem_chunks);
1294 mdevice->devmem_chunks = NULL;
1296 mutex_unlock(&mdevice->devmem_lock);
1354 dmirror_device_remove_chunks(dmirror->mdevice);
1405 struct dmirror_device *mdevice;
1410 mdevice = dmirror_page_to_device(page);
1411 spin_lock(&mdevice->lock);
1415 mdevice->cfree++;
1416 page->zone_device_data = mdevice->free_pages;
1417 mdevice->free_pages = page;
1419 spin_unlock(&mdevice->lock);
1445 args.pgmap_owner = dmirror->mdevice;
1470 static int dmirror_device_init(struct dmirror_device *mdevice, int id)
1476 mutex_init(&mdevice->devmem_lock);
1477 spin_lock_init(&mdevice->lock);
1479 cdev_init(&mdevice->cdevice, &dmirror_fops);
1480 mdevice->cdevice.owner = THIS_MODULE;
1481 device_initialize(&mdevice->device);
1482 mdevice->device.devt = dev;
1484 ret = dev_set_name(&mdevice->device, "hmm_dmirror%u", id);
1488 ret = cdev_device_add(&mdevice->cdevice, &mdevice->device);
1493 return dmirror_allocate_chunk(mdevice, NULL);
1496 static void dmirror_device_remove(struct dmirror_device *mdevice)
1498 dmirror_device_remove_chunks(mdevice);
1499 cdev_device_del(&mdevice->cdevice, &mdevice->device);