Lines Matching refs:lm_file
17 struct pds_vfio_lm_file *lm_file = NULL; in pds_vfio_get_lm_file() local
27 lm_file = kzalloc(sizeof(*lm_file), GFP_KERNEL); in pds_vfio_get_lm_file()
28 if (!lm_file) in pds_vfio_get_lm_file()
32 lm_file->filep = in pds_vfio_get_lm_file()
33 anon_inode_getfile("pds_vfio_lm", fops, lm_file, flags); in pds_vfio_get_lm_file()
34 if (IS_ERR(lm_file->filep)) in pds_vfio_get_lm_file()
37 stream_open(lm_file->filep->f_inode, lm_file->filep); in pds_vfio_get_lm_file()
38 mutex_init(&lm_file->lock); in pds_vfio_get_lm_file()
41 get_file(lm_file->filep); in pds_vfio_get_lm_file()
66 if (sg_alloc_table_from_pages(&lm_file->sg_table, pages, npages, 0, in pds_vfio_get_lm_file()
70 lm_file->size = size; in pds_vfio_get_lm_file()
71 lm_file->pages = pages; in pds_vfio_get_lm_file()
72 lm_file->npages = npages; in pds_vfio_get_lm_file()
73 lm_file->page_mem = page_mem; in pds_vfio_get_lm_file()
74 lm_file->alloc_size = npages * PAGE_SIZE; in pds_vfio_get_lm_file()
76 return lm_file; in pds_vfio_get_lm_file()
83 fput(lm_file->filep); in pds_vfio_get_lm_file()
84 mutex_destroy(&lm_file->lock); in pds_vfio_get_lm_file()
86 kfree(lm_file); in pds_vfio_get_lm_file()
91 static void pds_vfio_put_lm_file(struct pds_vfio_lm_file *lm_file) in pds_vfio_put_lm_file() argument
93 mutex_lock(&lm_file->lock); in pds_vfio_put_lm_file()
95 lm_file->size = 0; in pds_vfio_put_lm_file()
96 lm_file->alloc_size = 0; in pds_vfio_put_lm_file()
99 sg_free_table(&lm_file->sg_table); in pds_vfio_put_lm_file()
101 kvfree(lm_file->page_mem); in pds_vfio_put_lm_file()
102 lm_file->page_mem = NULL; in pds_vfio_put_lm_file()
103 kfree(lm_file->pages); in pds_vfio_put_lm_file()
104 lm_file->pages = NULL; in pds_vfio_put_lm_file()
106 mutex_unlock(&lm_file->lock); in pds_vfio_put_lm_file()
109 fput(lm_file->filep); in pds_vfio_put_lm_file()
130 static struct page *pds_vfio_get_file_page(struct pds_vfio_lm_file *lm_file, in pds_vfio_get_file_page() argument
138 if (offset < lm_file->last_offset || !lm_file->last_offset_sg) { in pds_vfio_get_file_page()
139 lm_file->last_offset = 0; in pds_vfio_get_file_page()
140 lm_file->last_offset_sg = lm_file->sg_table.sgl; in pds_vfio_get_file_page()
141 lm_file->sg_last_entry = 0; in pds_vfio_get_file_page()
144 cur_offset = lm_file->last_offset; in pds_vfio_get_file_page()
146 for_each_sg(lm_file->last_offset_sg, sg, in pds_vfio_get_file_page()
147 lm_file->sg_table.orig_nents - lm_file->sg_last_entry, i) { in pds_vfio_get_file_page()
149 lm_file->last_offset_sg = sg; in pds_vfio_get_file_page()
150 lm_file->sg_last_entry += i; in pds_vfio_get_file_page()
151 lm_file->last_offset = cur_offset; in pds_vfio_get_file_page()
163 struct pds_vfio_lm_file *lm_file = filp->private_data; in pds_vfio_release_file() local
165 mutex_lock(&lm_file->lock); in pds_vfio_release_file()
166 lm_file->filep->f_pos = 0; in pds_vfio_release_file()
167 lm_file->size = 0; in pds_vfio_release_file()
168 mutex_unlock(&lm_file->lock); in pds_vfio_release_file()
169 mutex_destroy(&lm_file->lock); in pds_vfio_release_file()
170 kfree(lm_file); in pds_vfio_release_file()
178 struct pds_vfio_lm_file *lm_file = filp->private_data; in pds_vfio_save_read() local
185 mutex_lock(&lm_file->lock); in pds_vfio_save_read()
186 if (*pos > lm_file->size) { in pds_vfio_save_read()
191 len = min_t(size_t, lm_file->size - *pos, len); in pds_vfio_save_read()
200 page = pds_vfio_get_file_page(lm_file, *pos - page_offset); in pds_vfio_save_read()
222 mutex_unlock(&lm_file->lock); in pds_vfio_save_read()
236 struct pds_vfio_lm_file *lm_file; in pds_vfio_get_save_file() local
254 lm_file = pds_vfio_get_lm_file(&pds_vfio_save_fops, O_RDONLY, size); in pds_vfio_get_save_file()
255 if (!lm_file) { in pds_vfio_get_save_file()
261 lm_file->size, lm_file->alloc_size, lm_file->npages); in pds_vfio_get_save_file()
263 pds_vfio->save_file = lm_file; in pds_vfio_get_save_file()
271 struct pds_vfio_lm_file *lm_file = filp->private_data; in pds_vfio_restore_write() local
284 mutex_lock(&lm_file->lock); in pds_vfio_restore_write()
294 page = pds_vfio_get_file_page(lm_file, *pos - page_offset); in pds_vfio_restore_write()
313 lm_file->size += page_len; in pds_vfio_restore_write()
316 mutex_unlock(&lm_file->lock); in pds_vfio_restore_write()
330 struct pds_vfio_lm_file *lm_file; in pds_vfio_get_restore_file() local
341 lm_file = pds_vfio_get_lm_file(&pds_vfio_restore_fops, O_WRONLY, size); in pds_vfio_get_restore_file()
342 if (!lm_file) { in pds_vfio_get_restore_file()
346 pds_vfio->restore_file = lm_file; in pds_vfio_get_restore_file()