Loading arch/x86/xen/setup.c +9 −18 Original line number Original line Diff line number Diff line Loading @@ -229,15 +229,14 @@ static int __init xen_free_mfn(unsigned long mfn) * as a fallback if the remapping fails. * as a fallback if the remapping fails. */ */ static void __init xen_set_identity_and_release_chunk(unsigned long start_pfn, static void __init xen_set_identity_and_release_chunk(unsigned long start_pfn, unsigned long end_pfn, unsigned long nr_pages, unsigned long *identity, unsigned long end_pfn, unsigned long nr_pages, unsigned long *released) unsigned long *released) { { unsigned long len = 0; unsigned long pfn, end; unsigned long pfn, end; int ret; int ret; WARN_ON(start_pfn > end_pfn); WARN_ON(start_pfn > end_pfn); /* Release pages first. */ end = min(end_pfn, nr_pages); end = min(end_pfn, nr_pages); for (pfn = start_pfn; pfn < end; pfn++) { for (pfn = start_pfn; pfn < end; pfn++) { unsigned long mfn = pfn_to_mfn(pfn); unsigned long mfn = pfn_to_mfn(pfn); Loading @@ -250,16 +249,14 @@ static void __init xen_set_identity_and_release_chunk(unsigned long start_pfn, WARN(ret != 1, "Failed to release pfn %lx err=%d\n", pfn, ret); WARN(ret != 1, "Failed to release pfn %lx err=%d\n", pfn, ret); if (ret == 1) { if (ret == 1) { (*released)++; if (!__set_phys_to_machine(pfn, INVALID_P2M_ENTRY)) if (!__set_phys_to_machine(pfn, INVALID_P2M_ENTRY)) break; break; len++; } else } else break; break; } } /* Need to release pages first */ set_phys_range_identity(start_pfn, end_pfn); *released += len; *identity += set_phys_range_identity(start_pfn, end_pfn); } } /* /* Loading Loading @@ -318,7 +315,6 @@ static void __init xen_do_set_identity_and_remap_chunk( unsigned long ident_pfn_iter, remap_pfn_iter; unsigned long ident_pfn_iter, remap_pfn_iter; unsigned long ident_end_pfn = start_pfn + size; unsigned long ident_end_pfn = start_pfn + size; unsigned long left = size; unsigned long left = size; unsigned long ident_cnt = 0; unsigned int i, chunk; unsigned int i, chunk; WARN_ON(size == 0); WARN_ON(size == 0); Loading Loading @@ -347,8 +343,7 @@ static void __init xen_do_set_identity_and_remap_chunk( xen_remap_mfn = mfn; xen_remap_mfn = mfn; /* Set identity map */ /* Set identity map */ ident_cnt += set_phys_range_identity(ident_pfn_iter, set_phys_range_identity(ident_pfn_iter, ident_pfn_iter + chunk); ident_pfn_iter + chunk); left -= chunk; left -= chunk; } } Loading @@ -371,7 +366,7 @@ static void __init xen_do_set_identity_and_remap_chunk( static unsigned long __init xen_set_identity_and_remap_chunk( static unsigned long __init xen_set_identity_and_remap_chunk( const struct e820entry *list, size_t map_size, unsigned long start_pfn, const struct e820entry *list, size_t map_size, unsigned long start_pfn, unsigned long end_pfn, unsigned long nr_pages, unsigned long remap_pfn, unsigned long end_pfn, unsigned long nr_pages, unsigned long remap_pfn, unsigned long *identity, unsigned long *released) unsigned long *released) { { unsigned long pfn; unsigned long pfn; unsigned long i = 0; unsigned long i = 0; Loading @@ -386,8 +381,7 @@ static unsigned long __init xen_set_identity_and_remap_chunk( /* Do not remap pages beyond the current allocation */ /* Do not remap pages beyond the current allocation */ if (cur_pfn >= nr_pages) { if (cur_pfn >= nr_pages) { /* Identity map remaining pages */ /* Identity map remaining pages */ *identity += set_phys_range_identity(cur_pfn, set_phys_range_identity(cur_pfn, cur_pfn + size); cur_pfn + size); break; break; } } if (cur_pfn + size > nr_pages) if (cur_pfn + size > nr_pages) Loading @@ -398,7 +392,7 @@ static unsigned long __init xen_set_identity_and_remap_chunk( if (!remap_range_size) { if (!remap_range_size) { pr_warning("Unable to find available pfn range, not remapping identity pages\n"); pr_warning("Unable to find available pfn range, not remapping identity pages\n"); xen_set_identity_and_release_chunk(cur_pfn, xen_set_identity_and_release_chunk(cur_pfn, cur_pfn + left, nr_pages, identity, released); cur_pfn + left, nr_pages, released); break; break; } } /* Adjust size to fit in current e820 RAM region */ /* Adjust size to fit in current e820 RAM region */ Loading @@ -410,7 +404,6 @@ static unsigned long __init xen_set_identity_and_remap_chunk( /* Update variables to reflect new mappings. */ /* Update variables to reflect new mappings. */ i += size; i += size; remap_pfn += size; remap_pfn += size; *identity += size; } } /* /* Loading @@ -430,7 +423,6 @@ static void __init xen_set_identity_and_remap( unsigned long *released) unsigned long *released) { { phys_addr_t start = 0; phys_addr_t start = 0; unsigned long identity = 0; unsigned long last_pfn = nr_pages; unsigned long last_pfn = nr_pages; const struct e820entry *entry; const struct e820entry *entry; unsigned long num_released = 0; unsigned long num_released = 0; Loading Loading @@ -460,14 +452,13 @@ static void __init xen_set_identity_and_remap( last_pfn = xen_set_identity_and_remap_chunk( last_pfn = xen_set_identity_and_remap_chunk( list, map_size, start_pfn, list, map_size, start_pfn, end_pfn, nr_pages, last_pfn, end_pfn, nr_pages, last_pfn, &identity, &num_released); &num_released); start = end; start = end; } } } } *released = num_released; *released = num_released; pr_info("Set %ld page(s) to 1-1 mapping\n", identity); pr_info("Released %ld page(s)\n", num_released); pr_info("Released %ld page(s)\n", num_released); } } Loading Loading
arch/x86/xen/setup.c +9 −18 Original line number Original line Diff line number Diff line Loading @@ -229,15 +229,14 @@ static int __init xen_free_mfn(unsigned long mfn) * as a fallback if the remapping fails. * as a fallback if the remapping fails. */ */ static void __init xen_set_identity_and_release_chunk(unsigned long start_pfn, static void __init xen_set_identity_and_release_chunk(unsigned long start_pfn, unsigned long end_pfn, unsigned long nr_pages, unsigned long *identity, unsigned long end_pfn, unsigned long nr_pages, unsigned long *released) unsigned long *released) { { unsigned long len = 0; unsigned long pfn, end; unsigned long pfn, end; int ret; int ret; WARN_ON(start_pfn > end_pfn); WARN_ON(start_pfn > end_pfn); /* Release pages first. */ end = min(end_pfn, nr_pages); end = min(end_pfn, nr_pages); for (pfn = start_pfn; pfn < end; pfn++) { for (pfn = start_pfn; pfn < end; pfn++) { unsigned long mfn = pfn_to_mfn(pfn); unsigned long mfn = pfn_to_mfn(pfn); Loading @@ -250,16 +249,14 @@ static void __init xen_set_identity_and_release_chunk(unsigned long start_pfn, WARN(ret != 1, "Failed to release pfn %lx err=%d\n", pfn, ret); WARN(ret != 1, "Failed to release pfn %lx err=%d\n", pfn, ret); if (ret == 1) { if (ret == 1) { (*released)++; if (!__set_phys_to_machine(pfn, INVALID_P2M_ENTRY)) if (!__set_phys_to_machine(pfn, INVALID_P2M_ENTRY)) break; break; len++; } else } else break; break; } } /* Need to release pages first */ set_phys_range_identity(start_pfn, end_pfn); *released += len; *identity += set_phys_range_identity(start_pfn, end_pfn); } } /* /* Loading Loading @@ -318,7 +315,6 @@ static void __init xen_do_set_identity_and_remap_chunk( unsigned long ident_pfn_iter, remap_pfn_iter; unsigned long ident_pfn_iter, remap_pfn_iter; unsigned long ident_end_pfn = start_pfn + size; unsigned long ident_end_pfn = start_pfn + size; unsigned long left = size; unsigned long left = size; unsigned long ident_cnt = 0; unsigned int i, chunk; unsigned int i, chunk; WARN_ON(size == 0); WARN_ON(size == 0); Loading Loading @@ -347,8 +343,7 @@ static void __init xen_do_set_identity_and_remap_chunk( xen_remap_mfn = mfn; xen_remap_mfn = mfn; /* Set identity map */ /* Set identity map */ ident_cnt += set_phys_range_identity(ident_pfn_iter, set_phys_range_identity(ident_pfn_iter, ident_pfn_iter + chunk); ident_pfn_iter + chunk); left -= chunk; left -= chunk; } } Loading @@ -371,7 +366,7 @@ static void __init xen_do_set_identity_and_remap_chunk( static unsigned long __init xen_set_identity_and_remap_chunk( static unsigned long __init xen_set_identity_and_remap_chunk( const struct e820entry *list, size_t map_size, unsigned long start_pfn, const struct e820entry *list, size_t map_size, unsigned long start_pfn, unsigned long end_pfn, unsigned long nr_pages, unsigned long remap_pfn, unsigned long end_pfn, unsigned long nr_pages, unsigned long remap_pfn, unsigned long *identity, unsigned long *released) unsigned long *released) { { unsigned long pfn; unsigned long pfn; unsigned long i = 0; unsigned long i = 0; Loading @@ -386,8 +381,7 @@ static unsigned long __init xen_set_identity_and_remap_chunk( /* Do not remap pages beyond the current allocation */ /* Do not remap pages beyond the current allocation */ if (cur_pfn >= nr_pages) { if (cur_pfn >= nr_pages) { /* Identity map remaining pages */ /* Identity map remaining pages */ *identity += set_phys_range_identity(cur_pfn, set_phys_range_identity(cur_pfn, cur_pfn + size); cur_pfn + size); break; break; } } if (cur_pfn + size > nr_pages) if (cur_pfn + size > nr_pages) Loading @@ -398,7 +392,7 @@ static unsigned long __init xen_set_identity_and_remap_chunk( if (!remap_range_size) { if (!remap_range_size) { pr_warning("Unable to find available pfn range, not remapping identity pages\n"); pr_warning("Unable to find available pfn range, not remapping identity pages\n"); xen_set_identity_and_release_chunk(cur_pfn, xen_set_identity_and_release_chunk(cur_pfn, cur_pfn + left, nr_pages, identity, released); cur_pfn + left, nr_pages, released); break; break; } } /* Adjust size to fit in current e820 RAM region */ /* Adjust size to fit in current e820 RAM region */ Loading @@ -410,7 +404,6 @@ static unsigned long __init xen_set_identity_and_remap_chunk( /* Update variables to reflect new mappings. */ /* Update variables to reflect new mappings. */ i += size; i += size; remap_pfn += size; remap_pfn += size; *identity += size; } } /* /* Loading @@ -430,7 +423,6 @@ static void __init xen_set_identity_and_remap( unsigned long *released) unsigned long *released) { { phys_addr_t start = 0; phys_addr_t start = 0; unsigned long identity = 0; unsigned long last_pfn = nr_pages; unsigned long last_pfn = nr_pages; const struct e820entry *entry; const struct e820entry *entry; unsigned long num_released = 0; unsigned long num_released = 0; Loading Loading @@ -460,14 +452,13 @@ static void __init xen_set_identity_and_remap( last_pfn = xen_set_identity_and_remap_chunk( last_pfn = xen_set_identity_and_remap_chunk( list, map_size, start_pfn, list, map_size, start_pfn, end_pfn, nr_pages, last_pfn, end_pfn, nr_pages, last_pfn, &identity, &num_released); &num_released); start = end; start = end; } } } } *released = num_released; *released = num_released; pr_info("Set %ld page(s) to 1-1 mapping\n", identity); pr_info("Released %ld page(s)\n", num_released); pr_info("Released %ld page(s)\n", num_released); } } Loading