Lines Matching refs:res
149 static void free_resource(struct resource *res) in free_resource() argument
151 if (!res) in free_resource()
154 if (!PageSlab(virt_to_head_page(res))) { in free_resource()
156 res->sibling = bootmem_resource_free; in free_resource()
157 bootmem_resource_free = res; in free_resource()
160 kfree(res); in free_resource()
166 struct resource *res = NULL; in alloc_resource() local
170 res = bootmem_resource_free; in alloc_resource()
171 bootmem_resource_free = res->sibling; in alloc_resource()
175 if (res) in alloc_resource()
176 memset(res, 0, sizeof(struct resource)); in alloc_resource()
178 res = kzalloc(sizeof(struct resource), flags); in alloc_resource()
180 return res; in alloc_resource()
340 struct resource *res) in find_next_iomem_res() argument
344 if (!res) in find_next_iomem_res()
374 *res = (struct resource) { in find_next_iomem_res()
392 struct resource res; in __walk_iomem_res_desc() local
396 !find_next_iomem_res(start, end, flags, desc, &res)) { in __walk_iomem_res_desc()
397 ret = (*func)(&res, arg); in __walk_iomem_res_desc()
401 start = res.end + 1; in __walk_iomem_res_desc()
470 struct resource res; in walk_system_ram_range() local
478 !find_next_iomem_res(start, end, flags, IORES_DESC_NONE, &res)) { in walk_system_ram_range()
479 pfn = PFN_UP(res.start); in walk_system_ram_range()
480 end_pfn = PFN_DOWN(res.end + 1); in walk_system_ram_range()
485 start = res.end + 1; in walk_system_ram_range()
508 struct resource res; in __region_intersects() local
512 res.start = start; in __region_intersects()
513 res.end = start + size - 1; in __region_intersects()
520 if (resource_overlaps(p, &res)) in __region_intersects()
578 static void resource_clip(struct resource *res, resource_size_t min, in resource_clip() argument
581 if (res->start < min) in resource_clip()
582 res->start = min; in resource_clip()
583 if (res->end > max) in resource_clip()
584 res->end = max; in resource_clip()
764 struct resource *res; in lookup_resource() local
767 for (res = root->child; res; res = res->sibling) { in lookup_resource()
768 if (res->start == start) in lookup_resource()
773 return res; in lookup_resource()
934 static int __adjust_resource(struct resource *res, resource_size_t start, in __adjust_resource() argument
937 struct resource *tmp, *parent = res->parent; in __adjust_resource()
947 if (res->sibling && (res->sibling->start <= end)) in __adjust_resource()
951 if (tmp != res) { in __adjust_resource()
952 while (tmp->sibling != res) in __adjust_resource()
959 for (tmp = res->child; tmp; tmp = tmp->sibling) in __adjust_resource()
963 res->start = start; in __adjust_resource()
964 res->end = end; in __adjust_resource()
981 int adjust_resource(struct resource *res, resource_size_t start, in adjust_resource() argument
987 result = __adjust_resource(res, start, size); in adjust_resource()
999 struct resource *res = alloc_resource(GFP_ATOMIC); in __reserve_region_with_split() local
1003 if (!res) in __reserve_region_with_split()
1006 res->name = name; in __reserve_region_with_split()
1007 res->start = start; in __reserve_region_with_split()
1008 res->end = end; in __reserve_region_with_split()
1009 res->flags = type | IORESOURCE_BUSY; in __reserve_region_with_split()
1010 res->desc = IORES_DESC_NONE; in __reserve_region_with_split()
1014 conflict = __request_resource(parent, res); in __reserve_region_with_split()
1018 res = next_res; in __reserve_region_with_split()
1024 if (conflict->start <= res->start && in __reserve_region_with_split()
1025 conflict->end >= res->end) { in __reserve_region_with_split()
1026 free_resource(res); in __reserve_region_with_split()
1032 if (conflict->start > res->start) { in __reserve_region_with_split()
1033 end = res->end; in __reserve_region_with_split()
1034 res->end = conflict->start - 1; in __reserve_region_with_split()
1038 free_resource(res); in __reserve_region_with_split()
1048 res->start = conflict->end + 1; in __reserve_region_with_split()
1089 resource_size_t resource_alignment(struct resource *res) in resource_alignment() argument
1091 switch (res->flags & (IORESOURCE_SIZEALIGN | IORESOURCE_STARTALIGN)) { in resource_alignment()
1093 return resource_size(res); in resource_alignment()
1095 return res->start; in resource_alignment()
1117 static void revoke_iomem(struct resource *res) in revoke_iomem() argument
1137 if (devmem_is_allowed(PHYS_PFN(res->start)) && in revoke_iomem()
1138 devmem_is_allowed(PHYS_PFN(res->end))) { in revoke_iomem()
1146 unmap_mapping_range(inode->i_mapping, res->start, resource_size(res), 1); in revoke_iomem()
1149 static void revoke_iomem(struct resource *res) {} in revoke_iomem() argument
1163 static int __request_region_locked(struct resource *res, struct resource *parent, in __request_region_locked() argument
1169 res->name = name; in __request_region_locked()
1170 res->start = start; in __request_region_locked()
1171 res->end = start + n - 1; in __request_region_locked()
1176 res->flags = resource_type(parent) | resource_ext_type(parent); in __request_region_locked()
1177 res->flags |= IORESOURCE_BUSY | flags; in __request_region_locked()
1178 res->desc = parent->desc; in __request_region_locked()
1180 conflict = __request_resource(parent, res); in __request_region_locked()
1190 conflict->name, conflict, res); in __request_region_locked()
1226 struct resource *res = alloc_resource(GFP_KERNEL); in __request_region() local
1229 if (!res) in __request_region()
1233 ret = __request_region_locked(res, parent, start, n, name, flags); in __request_region()
1237 free_resource(res); in __request_region()
1242 revoke_iomem(res); in __request_region()
1244 return res; in __request_region()
1268 struct resource *res = *p; in __release_region() local
1270 if (!res) in __release_region()
1272 if (res->start <= start && res->end >= end) { in __release_region()
1273 if (!(res->flags & IORESOURCE_BUSY)) { in __release_region()
1274 p = &res->child; in __release_region()
1277 if (res->start != start || res->end != end) in __release_region()
1279 *p = res->sibling; in __release_region()
1281 if (res->flags & IORESOURCE_MUXED) in __release_region()
1283 free_resource(res); in __release_region()
1286 p = &res->sibling; in __release_region()
1323 struct resource *res; in release_mem_region_adjustable() local
1343 while ((res = *p)) { in release_mem_region_adjustable()
1344 if (res->start >= end) in release_mem_region_adjustable()
1348 if (res->start > start || res->end < end) { in release_mem_region_adjustable()
1349 p = &res->sibling; in release_mem_region_adjustable()
1363 if (!(res->flags & IORESOURCE_SYSRAM)) { in release_mem_region_adjustable()
1367 if (!(res->flags & IORESOURCE_MEM)) in release_mem_region_adjustable()
1370 if (!(res->flags & IORESOURCE_BUSY)) { in release_mem_region_adjustable()
1371 p = &res->child; in release_mem_region_adjustable()
1376 if (res->start == start && res->end == end) { in release_mem_region_adjustable()
1378 *p = res->sibling; in release_mem_region_adjustable()
1379 free_resource(res); in release_mem_region_adjustable()
1380 } else if (res->start == start && res->end != end) { in release_mem_region_adjustable()
1382 WARN_ON_ONCE(__adjust_resource(res, end + 1, in release_mem_region_adjustable()
1383 res->end - end)); in release_mem_region_adjustable()
1384 } else if (res->start != start && res->end == end) { in release_mem_region_adjustable()
1386 WARN_ON_ONCE(__adjust_resource(res, res->start, in release_mem_region_adjustable()
1387 start - res->start)); in release_mem_region_adjustable()
1398 new_res->name = res->name; in release_mem_region_adjustable()
1400 new_res->end = res->end; in release_mem_region_adjustable()
1401 new_res->flags = res->flags; in release_mem_region_adjustable()
1402 new_res->desc = res->desc; in release_mem_region_adjustable()
1403 new_res->parent = res->parent; in release_mem_region_adjustable()
1404 new_res->sibling = res->sibling; in release_mem_region_adjustable()
1407 if (WARN_ON_ONCE(__adjust_resource(res, res->start, in release_mem_region_adjustable()
1408 start - res->start))) in release_mem_region_adjustable()
1410 res->sibling = new_res; in release_mem_region_adjustable()
1450 void merge_system_ram_resource(struct resource *res) in merge_system_ram_resource() argument
1455 if (WARN_ON_ONCE((res->flags & flags) != flags)) in merge_system_ram_resource()
1459 res->flags |= IORESOURCE_SYSRAM_MERGEABLE; in merge_system_ram_resource()
1462 cur = res->sibling; in merge_system_ram_resource()
1463 if (cur && system_ram_resources_mergeable(res, cur)) { in merge_system_ram_resource()
1464 res->end = cur->end; in merge_system_ram_resource()
1465 res->sibling = cur->sibling; in merge_system_ram_resource()
1470 cur = res->parent->child; in merge_system_ram_resource()
1471 while (cur && cur->sibling != res) in merge_system_ram_resource()
1473 if (cur && system_ram_resources_mergeable(cur, res)) { in merge_system_ram_resource()
1474 cur->end = res->end; in merge_system_ram_resource()
1475 cur->sibling = res->sibling; in merge_system_ram_resource()
1476 free_resource(res); in merge_system_ram_resource()
1534 static int devm_resource_match(struct device *dev, void *res, void *data) in devm_resource_match() argument
1536 struct resource **ptr = res; in devm_resource_match()
1561 static void devm_region_release(struct device *dev, void *res) in devm_region_release() argument
1563 struct region_devres *this = res; in devm_region_release()
1568 static int devm_region_match(struct device *dev, void *res, void *match_data) in devm_region_match() argument
1570 struct region_devres *this = res, *match = match_data; in devm_region_match()
1581 struct resource *res; in __devm_request_region() local
1592 res = __request_region(parent, start, n, name, 0); in __devm_request_region()
1593 if (res) in __devm_request_region()
1598 return res; in __devm_request_region()
1632 struct resource *res = reserve + x; in reserve_setup() local
1639 res->flags = IORESOURCE_IO; in reserve_setup()
1642 res->flags = IORESOURCE_MEM; in reserve_setup()
1645 res->name = "reserved"; in reserve_setup()
1646 res->start = io_start; in reserve_setup()
1647 res->end = io_start + io_num - 1; in reserve_setup()
1648 res->flags |= IORESOURCE_BUSY; in reserve_setup()
1649 res->desc = IORES_DESC_NONE; in reserve_setup()
1650 res->child = NULL; in reserve_setup()
1651 if (request_resource(parent, res) == 0) in reserve_setup()
1753 struct resource_entry *resource_list_create_entry(struct resource *res, in resource_list_create_entry() argument
1761 entry->res = res ? res : &entry->__res; in resource_list_create_entry()
1782 struct resource *res; in __request_free_mem_region() local
1789 res = alloc_resource(GFP_KERNEL); in __request_free_mem_region()
1790 if (!res) in __request_free_mem_region()
1797 free_resource(res); in __request_free_mem_region()
1808 if (__request_region_locked(res, &iomem_resource, addr, size, in __request_free_mem_region()
1819 res->desc = IORES_DESC_DEVICE_PRIVATE_MEMORY; in __request_free_mem_region()
1825 revoke_iomem(res); in __request_free_mem_region()
1826 return res; in __request_free_mem_region()
1830 free_resource(res); in __request_free_mem_region()