Lines Matching refs:pmem
152 static struct pmem_info pmem[PMEM_MAX_DEVICES]; variable
155 #define PMEM_IS_FREE(id, index) !(pmem[id].bitmap[index].allocated)
156 #define PMEM_ORDER(id, index) pmem[id].bitmap[index].order
160 #define PMEM_START_ADDR(id, index) (PMEM_OFFSET(index) + pmem[id].base)
164 #define PMEM_START_VADDR(id, index) (PMEM_OFFSET(id, index) + pmem[id].vbase)
199 MKDEV(MISC_MAJOR, pmem[id].dev.minor))) in is_pmem_file()
241 if (pmem[id].no_allocator) { in pmem_free()
242 pmem[id].allocated = 0; in pmem_free()
246 pmem[id].bitmap[curr].allocated = 0; in pmem_free()
261 } while (curr < pmem[id].num_entries); in pmem_free()
276 down(&pmem[id].data_list_sem); in pmem_release()
281 list_for_each(elt, &pmem[id].data_list) { in pmem_release()
293 up(&pmem[id].data_list_sem); in pmem_release()
300 down_write(&pmem[id].bitmap_sem); in pmem_release()
302 up_write(&pmem[id].bitmap_sem); in pmem_release()
324 if (pmem[id].release) in pmem_release()
325 ret = pmem[id].release(inode, file); in pmem_release()
361 down(&pmem[id].data_list_sem); in pmem_open()
362 list_add(&data->list, &pmem[id].data_list); in pmem_open()
363 up(&pmem[id].data_list_sem); in pmem_open()
384 int end = pmem[id].num_entries; in pmem_allocate()
388 if (pmem[id].no_allocator) { in pmem_allocate()
390 if ((len > pmem[id].size) || pmem[id].allocated) in pmem_allocate()
392 pmem[id].allocated = 1; in pmem_allocate()
437 pmem[id].bitmap[best_fit].allocated = 1; in pmem_allocate()
445 if (pmem[id].cached == 0 || file->f_flags & O_SYNC) in phys_mem_access_prot()
449 else if (pmem[id].buffered) in phys_mem_access_prot()
457 if (pmem[id].no_allocator) in pmem_start_addr()
466 return pmem_start_addr(id, data) - pmem[id].base + pmem[id].vbase; in pmem_start_vaddr()
471 if (pmem[id].no_allocator) in pmem_len()
486 pmem[id].garbage_pfn)) in pmem_map_garbage()
609 down_write(&pmem[id].bitmap_sem); in pmem_mmap()
611 up_write(&pmem[id].bitmap_sem); in pmem_mmap()
774 pmem[id].dev.name, data->pid); in put_pmem_file()
798 if (!pmem[id].cached) in flush_pmem_file()
1133 region.len = pmem[id].size; in pmem_ioctl()
1152 if (pmem[id].ioctl) in pmem_ioctl()
1153 return pmem[id].ioctl(file, cmd, arg); in pmem_ioctl()
1181 down(&pmem[id].data_list_sem); in debug_read()
1182 list_for_each(elt, &pmem[id].data_list) { in debug_read()
1198 up(&pmem[id].data_list_sem); in debug_read()
1227 pmem[id].no_allocator = pdata->no_allocator; in pmem_setup()
1228 pmem[id].cached = pdata->cached; in pmem_setup()
1229 pmem[id].buffered = pdata->buffered; in pmem_setup()
1230 pmem[id].base = pdata->start; in pmem_setup()
1231 pmem[id].size = pdata->size; in pmem_setup()
1232 pmem[id].ioctl = ioctl; in pmem_setup()
1233 pmem[id].release = release; in pmem_setup()
1234 init_rwsem(&pmem[id].bitmap_sem); in pmem_setup()
1235 init_MUTEX(&pmem[id].data_list_sem); in pmem_setup()
1236 INIT_LIST_HEAD(&pmem[id].data_list); in pmem_setup()
1237 pmem[id].dev.name = pdata->name; in pmem_setup()
1238 pmem[id].dev.minor = id; in pmem_setup()
1239 pmem[id].dev.fops = &pmem_fops; in pmem_setup()
1242 err = misc_register(&pmem[id].dev); in pmem_setup()
1247 pmem[id].num_entries = pmem[id].size / PMEM_MIN_ALLOC; in pmem_setup()
1249 pmem[id].bitmap = kmalloc(pmem[id].num_entries * in pmem_setup()
1251 if (!pmem[id].bitmap) in pmem_setup()
1254 memset(pmem[id].bitmap, 0, sizeof(struct pmem_bits) * in pmem_setup()
1255 pmem[id].num_entries); in pmem_setup()
1257 for (i = sizeof(pmem[id].num_entries) * 8 - 1; i >= 0; i--) { in pmem_setup()
1258 if ((pmem[id].num_entries) & 1<<i) { in pmem_setup()
1264 if (pmem[id].cached) in pmem_setup()
1265 pmem[id].vbase = ioremap_cached(pmem[id].base, in pmem_setup()
1266 pmem[id].size); in pmem_setup()
1268 else if (pmem[id].buffered) in pmem_setup()
1269 pmem[id].vbase = ioremap_ext_buffered(pmem[id].base, in pmem_setup()
1270 pmem[id].size); in pmem_setup()
1273 pmem[id].vbase = ioremap(pmem[id].base, pmem[id].size); in pmem_setup()
1275 if (pmem[id].vbase == 0) in pmem_setup()
1278 pmem[id].garbage_pfn = page_to_pfn(alloc_page(GFP_KERNEL)); in pmem_setup()
1279 if (pmem[id].no_allocator) in pmem_setup()
1280 pmem[id].allocated = 0; in pmem_setup()
1288 kfree(pmem[id].bitmap); in pmem_setup()
1290 misc_deregister(&pmem[id].dev); in pmem_setup()
1311 __free_page(pfn_to_page(pmem[id].garbage_pfn)); in pmem_remove()
1312 misc_deregister(&pmem[id].dev); in pmem_remove()