Lines Matching refs:asma

65  * @asma:	         The associated anonymous shared memory area.
76 struct ashmem_area *asma;
154 * @asma: The associated ashmem_area
155 * @prev_range: The previous ashmem_range in the sorted asma->unpinned list
164 static int range_alloc(struct ashmem_area *asma,
174 range->asma = asma;
235 struct ashmem_area *asma;
242 asma = kmem_cache_zalloc(ashmem_area_cachep, GFP_KERNEL);
243 if (unlikely(!asma))
246 INIT_LIST_HEAD(&asma->unpinned_list);
247 memcpy(asma->name, ASHMEM_NAME_PREFIX, ASHMEM_NAME_PREFIX_LEN);
248 asma->prot_mask = PROT_MASK;
249 file->private_data = asma;
264 struct ashmem_area *asma = file->private_data;
268 list_for_each_entry_safe(range, next, &asma->unpinned_list, unpinned)
272 if (asma->file)
273 fput(asma->file);
274 kmem_cache_free(ashmem_area_cachep, asma);
291 struct ashmem_area *asma = file->private_data;
297 if (asma->size == 0)
300 if (!asma->file) {
308 * asma and asma->file are used outside the lock here. We assume
309 * once asma->file is set it will never be changed, and will not
313 ret = asma->file->f_op->read(asma->file, buf, len, pos);
316 asma->file->f_pos = *pos;
327 struct ashmem_area *asma = file->private_data;
332 if (asma->size == 0) {
337 if (!asma->file) {
342 ret = vfs_llseek(asma->file, offset, origin);
347 file->f_pos = asma->file->f_pos;
363 struct ashmem_area *asma = file->private_data;
369 if (unlikely(!asma->size)) {
375 if (unlikely((vma->vm_flags & ~calc_vm_prot_bits(asma->prot_mask)) &
380 vma->vm_flags &= ~calc_vm_may_flags(~asma->prot_mask);
382 if (!asma->file) {
386 if (asma->name[ASHMEM_NAME_PREFIX_LEN] != '\0')
387 name = asma->name;
390 vmfile = shmem_file_setup(name, asma->size, vma->vm_flags);
395 asma->file = vmfile;
397 get_file(asma->file);
400 shmem_set_file(vma, asma->file);
404 vma->vm_file = asma->file;
443 range->asma->file->f_op->fallocate(range->asma->file,
478 static int set_prot_mask(struct ashmem_area *asma, unsigned long prot)
485 if (unlikely((asma->prot_mask & prot) != prot)) {
494 asma->prot_mask = prot;
501 static int set_name(struct ashmem_area *asma, void __user *name)
523 if (unlikely(asma->file))
526 strcpy(asma->name + ASHMEM_NAME_PREFIX_LEN, local_name);
532 static int get_name(struct ashmem_area *asma, void __user *name)
538 * from asma with the lock held. Later we can copy this to the user
545 if (asma->name[ASHMEM_NAME_PREFIX_LEN] != '\0') {
551 len = strlen(asma->name + ASHMEM_NAME_PREFIX_LEN) + 1;
552 memcpy(local_name, asma->name + ASHMEM_NAME_PREFIX_LEN, len);
574 static int ashmem_pin(struct ashmem_area *asma, size_t pgstart, size_t pgend)
579 list_for_each_entry_safe(range, next, &asma->unpinned_list, unpinned) {
625 range_alloc(asma, range, range->purged,
640 static int ashmem_unpin(struct ashmem_area *asma, size_t pgstart, size_t pgend)
646 list_for_each_entry_safe(range, next, &asma->unpinned_list, unpinned) {
666 return range_alloc(asma, range, purged, pgstart, pgend);
675 static int ashmem_get_pin_status(struct ashmem_area *asma, size_t pgstart,
681 list_for_each_entry(range, &asma->unpinned_list, unpinned) {
693 static int ashmem_pin_unpin(struct ashmem_area *asma, unsigned long cmd,
700 if (unlikely(!asma->file))
708 pin.len = PAGE_ALIGN(asma->size) - pin.offset;
716 if (unlikely(PAGE_ALIGN(asma->size) < pin.offset + pin.len))
726 ret = ashmem_pin(asma, pgstart, pgend);
729 ret = ashmem_unpin(asma, pgstart, pgend);
732 ret = ashmem_get_pin_status(asma, pgstart, pgend);
743 struct ashmem_area *asma = file->private_data;
748 ret = set_name(asma, (void __user *) arg);
751 ret = get_name(asma, (void __user *) arg);
755 if (!asma->file) {
757 asma->size = (size_t) arg;
761 ret = asma->size;
764 ret = set_prot_mask(asma, arg);
767 ret = asma->prot_mask;
772 ret = ashmem_pin_unpin(asma, cmd, (void __user *) arg);