Lines Matching refs:resv_map

101 static struct resv_map *vma_resv_map(struct vm_area_struct *vma);
273 struct resv_map *resv_map = vma_resv_map(vma);
275 down_read(&resv_map->rw_sema);
286 struct resv_map *resv_map = vma_resv_map(vma);
288 up_read(&resv_map->rw_sema);
299 struct resv_map *resv_map = vma_resv_map(vma);
301 down_write(&resv_map->rw_sema);
312 struct resv_map *resv_map = vma_resv_map(vma);
314 up_write(&resv_map->rw_sema);
326 struct resv_map *resv_map = vma_resv_map(vma);
328 return down_write_trylock(&resv_map->rw_sema);
341 struct resv_map *resv_map = vma_resv_map(vma);
343 lockdep_assert_held(&resv_map->rw_sema);
377 struct resv_map *resv_map = vma_resv_map(vma);
380 up_write(&resv_map->rw_sema);
434 /* Helper that removes a struct file_region from the resv_map cache and returns
438 get_file_region_entry_from_cache(struct resv_map *resv, long from, long to)
468 struct resv_map *resv,
490 * a resv_map.
520 static void coalesce_file_region(struct resv_map *resv, struct file_region *rg)
548 hugetlb_resv_map_add(struct resv_map *map, struct list_head *rg, long from,
573 static long add_reservation_in_range(struct resv_map *resv, long f, long t,
635 static int allocate_file_region_entries(struct resv_map *resv,
706 static long region_add(struct resv_map *resv, long f, long t,
722 * than in_regions_needed, as the resv_map may have been modified since
773 static long region_chg(struct resv_map *resv, long f, long t,
798 * of the resv_map keeps track of the operations in progress between
809 static void region_abort(struct resv_map *resv, long f, long t,
832 static long region_del(struct resv_map *resv, long f, long t)
959 static long region_count(struct resv_map *resv, long f, long t)
1065 resv_map_set_hugetlb_cgroup_uncharge_info(struct resv_map *resv_map,
1071 resv_map->reservation_counter = NULL;
1072 resv_map->pages_per_hpage = 0;
1073 resv_map->css = NULL;
1075 resv_map->reservation_counter =
1077 resv_map->pages_per_hpage = pages_per_huge_page(h);
1078 resv_map->css = &h_cg->css;
1083 struct resv_map *resv_map_alloc(void)
1085 struct resv_map *resv_map = kmalloc(sizeof(*resv_map), GFP_KERNEL);
1088 if (!resv_map || !rg) {
1089 kfree(resv_map);
1094 kref_init(&resv_map->refs);
1095 spin_lock_init(&resv_map->lock);
1096 INIT_LIST_HEAD(&resv_map->regions);
1097 init_rwsem(&resv_map->rw_sema);
1099 resv_map->adds_in_progress = 0;
1106 resv_map_set_hugetlb_cgroup_uncharge_info(resv_map, NULL, NULL);
1108 INIT_LIST_HEAD(&resv_map->region_cache);
1109 list_add(&rg->link, &resv_map->region_cache);
1110 resv_map->region_cache_count = 1;
1112 return resv_map;
1117 struct resv_map *resv_map = container_of(ref, struct resv_map, refs);
1118 struct list_head *head = &resv_map->region_cache;
1122 region_del(resv_map, 0, LONG_MAX);
1130 VM_BUG_ON(resv_map->adds_in_progress);
1132 kfree(resv_map);
1135 static inline struct resv_map *inode_resv_map(struct inode *inode)
1140 * contains the pointer to the resv_map. So, always use the
1145 return (struct resv_map *)(&inode->i_data)->i_private_data;
1148 static struct resv_map *vma_resv_map(struct vm_area_struct *vma)
1158 return (struct resv_map *)(get_vma_private_data(vma) &
1163 static void set_vma_resv_map(struct vm_area_struct *vma, struct resv_map *map)
1232 * operation both new_vma and vma share a reference to the resv_map
1236 * ref here and remove the resv_map reference from this vma.
1238 struct resv_map *reservations = vma_resv_map(vma);
2806 struct resv_map *resv;
5175 struct resv_map *resv = vma_resv_map(vma);
5214 struct resv_map *resv;
7103 struct resv_map *resv_map;
7135 * resv_map can not be NULL as hugetlb_reserve_pages is only
7139 resv_map = inode_resv_map(inode);
7141 chg = region_chg(resv_map, from, to, &regions_needed);
7144 resv_map = resv_map_alloc();
7145 if (!resv_map)
7150 set_vma_resv_map(vma, resv_map);
7163 * of the resv_map.
7165 resv_map_set_hugetlb_cgroup_uncharge_info(resv_map, h_cg, h);
7196 add = region_add(resv_map, from, to, regions_needed, h, h_cg);
7247 region_abort(resv_map, from, to, regions_needed);
7249 kref_put(&resv_map->refs, resv_map_release);
7259 struct resv_map *resv_map = inode_resv_map(inode);
7266 * hugetlbfs inodes, resv_map could be NULL.
7268 if (resv_map) {
7269 chg = region_del(resv_map, start, end);
7287 * Note that !resv_map implies freed == 0. So (chg - freed)