/* Suspend pages are alocated before the atomic copy is made, so we need to release them after the resume.  */
void swsusp_free(void)
/* Suspend pages are alocated before the atomic copy is made, so we need to release them after the resume.  */
void swsusp_free(void)
{
	struct zone *zone;
	unsigned long pfn, max_zone_pfn;
	for_each_populated_zone(zone) {
		max_zone_pfn = zone->zone_start_pfn + zone->spanned_pages;
		for (pfn = zone->zone_start_pfn; pfn < max_zone_pfn; pfn++)
			if (pfn_valid(pfn)) {
				struct page *page = pfn_to_page(pfn);
				if (swsusp_page_is_forbidden(page) &&
				    swsusp_page_is_free(page)) {
					swsusp_unset_page_forbidden(page);
					swsusp_unset_page_free(page);
					__free_page(page);
				}
			}
	}
	nr_copy_pages = 0;
	nr_meta_pages = 0;
	restore_pblist = NULL;
	buffer = NULL;
	alloc_normal = 0;
	alloc_highmem = 0;
}