Lines Matching defs:resv_map
100 static struct resv_map *vma_resv_map(struct vm_area_struct *vma);
272 struct resv_map *resv_map = vma_resv_map(vma);
274 down_read(&resv_map->rw_sema);
285 struct resv_map *resv_map = vma_resv_map(vma);
287 up_read(&resv_map->rw_sema);
298 struct resv_map *resv_map = vma_resv_map(vma);
300 down_write(&resv_map->rw_sema);
311 struct resv_map *resv_map = vma_resv_map(vma);
313 up_write(&resv_map->rw_sema);
325 struct resv_map *resv_map = vma_resv_map(vma);
327 return down_write_trylock(&resv_map->rw_sema);
340 struct resv_map *resv_map = vma_resv_map(vma);
342 lockdep_assert_held(&resv_map->rw_sema);
376 struct resv_map *resv_map = vma_resv_map(vma);
379 up_write(&resv_map->rw_sema);
433 /* Helper that removes a struct file_region from the resv_map cache and returns
437 get_file_region_entry_from_cache(struct resv_map *resv, long from, long to)
467 struct resv_map *resv,
489 * a resv_map.
519 static void coalesce_file_region(struct resv_map *resv, struct file_region *rg)
547 hugetlb_resv_map_add(struct resv_map *map, struct list_head *rg, long from,
572 static long add_reservation_in_range(struct resv_map *resv, long f, long t,
634 static int allocate_file_region_entries(struct resv_map *resv,
705 static long region_add(struct resv_map *resv, long f, long t,
721 * than in_regions_needed, as the resv_map may have been modified since
772 static long region_chg(struct resv_map *resv, long f, long t,
797 * of the resv_map keeps track of the operations in progress between
808 static void region_abort(struct resv_map *resv, long f, long t,
831 static long region_del(struct resv_map *resv, long f, long t)
958 static long region_count(struct resv_map *resv, long f, long t)
1071 resv_map_set_hugetlb_cgroup_uncharge_info(struct resv_map *resv_map,
1077 resv_map->reservation_counter = NULL;
1078 resv_map->pages_per_hpage = 0;
1079 resv_map->css = NULL;
1081 resv_map->reservation_counter =
1083 resv_map->pages_per_hpage = pages_per_huge_page(h);
1084 resv_map->css = &h_cg->css;
1089 struct resv_map *resv_map_alloc(void)
1091 struct resv_map *resv_map = kmalloc(sizeof(*resv_map), GFP_KERNEL);
1094 if (!resv_map || !rg) {
1095 kfree(resv_map);
1100 kref_init(&resv_map->refs);
1101 spin_lock_init(&resv_map->lock);
1102 INIT_LIST_HEAD(&resv_map->regions);
1103 init_rwsem(&resv_map->rw_sema);
1105 resv_map->adds_in_progress = 0;
1112 resv_map_set_hugetlb_cgroup_uncharge_info(resv_map, NULL, NULL);
1114 INIT_LIST_HEAD(&resv_map->region_cache);
1115 list_add(&rg->link, &resv_map->region_cache);
1116 resv_map->region_cache_count = 1;
1118 return resv_map;
1123 struct resv_map *resv_map = container_of(ref, struct resv_map, refs);
1124 struct list_head *head = &resv_map->region_cache;
1128 region_del(resv_map, 0, LONG_MAX);
1136 VM_BUG_ON(resv_map->adds_in_progress);
1138 kfree(resv_map);
1141 static inline struct resv_map *inode_resv_map(struct inode *inode)
1146 * contains the pointer to the resv_map. So, always use the
1151 return (struct resv_map *)(&inode->i_data)->private_data;
1154 static struct resv_map *vma_resv_map(struct vm_area_struct *vma)
1164 return (struct resv_map *)(get_vma_private_data(vma) &
1169 static void set_vma_resv_map(struct vm_area_struct *vma, struct resv_map *map)
1238 * operation both new_vma and vma share a reference to the resv_map
1242 * ref here and remove the resv_map reference from this vma.
1244 struct resv_map *reservations = vma_resv_map(vma);
2718 struct resv_map *resv;
4840 struct resv_map *resv = vma_resv_map(vma);
4879 struct resv_map *resv;
6718 struct resv_map *resv_map;
6750 * resv_map can not be NULL as hugetlb_reserve_pages is only
6754 resv_map = inode_resv_map(inode);
6756 chg = region_chg(resv_map, from, to, ®ions_needed);
6759 resv_map = resv_map_alloc();
6760 if (!resv_map)
6765 set_vma_resv_map(vma, resv_map);
6778 * of the resv_map.
6780 resv_map_set_hugetlb_cgroup_uncharge_info(resv_map, h_cg, h);
6811 add = region_add(resv_map, from, to, regions_needed, h, h_cg);
6862 region_abort(resv_map, from, to, regions_needed);
6864 kref_put(&resv_map->refs, resv_map_release);
6874 struct resv_map *resv_map = inode_resv_map(inode);
6881 * hugetlbfs inodes, resv_map could be NULL.
6883 if (resv_map) {
6884 chg = region_del(resv_map, start, end);
6902 * Note that !resv_map implies freed == 0. So (chg - freed)