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