* [PATCHv1 0/3] x86/xen: fixes and improvements to linear p2m
@ 2015-01-07 14:47 David Vrabel
2015-01-07 14:47 ` [PATCH 1/3] x86/xen: don't count how many PFNs are identity mapped David Vrabel
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: David Vrabel @ 2015-01-07 14:47 UTC (permalink / raw)
To: xen-devel; +Cc: Juergen Gross, Boris Ostrovsky, David Vrabel
The linear p2m changes in 3.19-rc1 is broken with some dom0
configurations. While trying to fix it I also noticed that
get_phys_to_machine() could be optimized for the common case.
David
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH 1/3] x86/xen: don't count how many PFNs are identity mapped 2015-01-07 14:47 [PATCHv1 0/3] x86/xen: fixes and improvements to linear p2m David Vrabel @ 2015-01-07 14:47 ` David Vrabel 2015-01-07 15:10 ` Juergen Gross 2015-01-07 14:47 ` [PATCH 2/3] x86/xen: add extra memory for remapped frames during setup David Vrabel 2015-01-07 14:47 ` [PATCH 3/3] x86/xen: optimize get_phys_to_machine() David Vrabel 2 siblings, 1 reply; 8+ messages in thread From: David Vrabel @ 2015-01-07 14:47 UTC (permalink / raw) To: xen-devel; +Cc: Juergen Gross, Boris Ostrovsky, David Vrabel This accounting is just used to print a diagnostic message that isn't very useful. Signed-off-by: David Vrabel <david.vrabel@citrix.com> --- arch/x86/xen/setup.c | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c index dfd77de..664dffc 100644 --- a/arch/x86/xen/setup.c +++ b/arch/x86/xen/setup.c @@ -229,15 +229,14 @@ static int __init xen_free_mfn(unsigned long mfn) * as a fallback if the remapping fails. */ 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 *released) + unsigned long end_pfn, unsigned long nr_pages, unsigned long *released) { - unsigned long len = 0; unsigned long pfn, end; int ret; WARN_ON(start_pfn > end_pfn); + /* Release pages first. */ end = min(end_pfn, nr_pages); for (pfn = start_pfn; pfn < end; pfn++) { unsigned long mfn = pfn_to_mfn(pfn); @@ -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); if (ret == 1) { + (*released)++; if (!__set_phys_to_machine(pfn, INVALID_P2M_ENTRY)) break; - len++; } else break; } - /* Need to release pages first */ - *released += len; - *identity += set_phys_range_identity(start_pfn, end_pfn); + set_phys_range_identity(start_pfn, end_pfn); } /* @@ -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_end_pfn = start_pfn + size; unsigned long left = size; - unsigned long ident_cnt = 0; unsigned int i, chunk; WARN_ON(size == 0); @@ -347,8 +343,7 @@ static void __init xen_do_set_identity_and_remap_chunk( xen_remap_mfn = mfn; /* Set identity map */ - ident_cnt += set_phys_range_identity(ident_pfn_iter, - ident_pfn_iter + chunk); + set_phys_range_identity(ident_pfn_iter, ident_pfn_iter + chunk); left -= chunk; } @@ -371,7 +366,7 @@ static void __init xen_do_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, 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 i = 0; @@ -386,8 +381,7 @@ static unsigned long __init xen_set_identity_and_remap_chunk( /* Do not remap pages beyond the current allocation */ if (cur_pfn >= nr_pages) { /* Identity map remaining pages */ - *identity += set_phys_range_identity(cur_pfn, - cur_pfn + size); + set_phys_range_identity(cur_pfn, cur_pfn + size); break; } if (cur_pfn + size > nr_pages) @@ -398,7 +392,7 @@ static unsigned long __init xen_set_identity_and_remap_chunk( if (!remap_range_size) { pr_warning("Unable to find available pfn range, not remapping identity pages\n"); xen_set_identity_and_release_chunk(cur_pfn, - cur_pfn + left, nr_pages, identity, released); + cur_pfn + left, nr_pages, released); break; } /* Adjust size to fit in current e820 RAM region */ @@ -410,7 +404,6 @@ static unsigned long __init xen_set_identity_and_remap_chunk( /* Update variables to reflect new mappings. */ i += size; remap_pfn += size; - *identity += size; } /* @@ -430,7 +423,6 @@ static void __init xen_set_identity_and_remap( unsigned long *released) { phys_addr_t start = 0; - unsigned long identity = 0; unsigned long last_pfn = nr_pages; const struct e820entry *entry; unsigned long num_released = 0; @@ -460,14 +452,13 @@ static void __init xen_set_identity_and_remap( last_pfn = xen_set_identity_and_remap_chunk( list, map_size, start_pfn, end_pfn, nr_pages, last_pfn, - &identity, &num_released); + &num_released); start = end; } } *released = num_released; - pr_info("Set %ld page(s) to 1-1 mapping\n", identity); pr_info("Released %ld page(s)\n", num_released); } -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] x86/xen: don't count how many PFNs are identity mapped 2015-01-07 14:47 ` [PATCH 1/3] x86/xen: don't count how many PFNs are identity mapped David Vrabel @ 2015-01-07 15:10 ` Juergen Gross 0 siblings, 0 replies; 8+ messages in thread From: Juergen Gross @ 2015-01-07 15:10 UTC (permalink / raw) To: David Vrabel, xen-devel; +Cc: Boris Ostrovsky On 01/07/2015 03:47 PM, David Vrabel wrote: > This accounting is just used to print a diagnostic message that isn't > very useful. > > Signed-off-by: David Vrabel <david.vrabel@citrix.com> Reviewed-by: Juergen Gross <jgross@suse.com> > --- > arch/x86/xen/setup.c | 27 +++++++++------------------ > 1 file changed, 9 insertions(+), 18 deletions(-) > > diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c > index dfd77de..664dffc 100644 > --- a/arch/x86/xen/setup.c > +++ b/arch/x86/xen/setup.c > @@ -229,15 +229,14 @@ static int __init xen_free_mfn(unsigned long mfn) > * as a fallback if the remapping fails. > */ > 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 *released) > + unsigned long end_pfn, unsigned long nr_pages, unsigned long *released) > { > - unsigned long len = 0; > unsigned long pfn, end; > int ret; > > WARN_ON(start_pfn > end_pfn); > > + /* Release pages first. */ > end = min(end_pfn, nr_pages); > for (pfn = start_pfn; pfn < end; pfn++) { > unsigned long mfn = pfn_to_mfn(pfn); > @@ -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); > > if (ret == 1) { > + (*released)++; > if (!__set_phys_to_machine(pfn, INVALID_P2M_ENTRY)) > break; > - len++; > } else > break; > } > > - /* Need to release pages first */ > - *released += len; > - *identity += set_phys_range_identity(start_pfn, end_pfn); > + set_phys_range_identity(start_pfn, end_pfn); > } > > /* > @@ -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_end_pfn = start_pfn + size; > unsigned long left = size; > - unsigned long ident_cnt = 0; > unsigned int i, chunk; > > WARN_ON(size == 0); > @@ -347,8 +343,7 @@ static void __init xen_do_set_identity_and_remap_chunk( > xen_remap_mfn = mfn; > > /* Set identity map */ > - ident_cnt += set_phys_range_identity(ident_pfn_iter, > - ident_pfn_iter + chunk); > + set_phys_range_identity(ident_pfn_iter, ident_pfn_iter + chunk); > > left -= chunk; > } > @@ -371,7 +366,7 @@ static void __init xen_do_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, > 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 i = 0; > @@ -386,8 +381,7 @@ static unsigned long __init xen_set_identity_and_remap_chunk( > /* Do not remap pages beyond the current allocation */ > if (cur_pfn >= nr_pages) { > /* Identity map remaining pages */ > - *identity += set_phys_range_identity(cur_pfn, > - cur_pfn + size); > + set_phys_range_identity(cur_pfn, cur_pfn + size); > break; > } > if (cur_pfn + size > nr_pages) > @@ -398,7 +392,7 @@ static unsigned long __init xen_set_identity_and_remap_chunk( > if (!remap_range_size) { > pr_warning("Unable to find available pfn range, not remapping identity pages\n"); > xen_set_identity_and_release_chunk(cur_pfn, > - cur_pfn + left, nr_pages, identity, released); > + cur_pfn + left, nr_pages, released); > break; > } > /* Adjust size to fit in current e820 RAM region */ > @@ -410,7 +404,6 @@ static unsigned long __init xen_set_identity_and_remap_chunk( > /* Update variables to reflect new mappings. */ > i += size; > remap_pfn += size; > - *identity += size; > } > > /* > @@ -430,7 +423,6 @@ static void __init xen_set_identity_and_remap( > unsigned long *released) > { > phys_addr_t start = 0; > - unsigned long identity = 0; > unsigned long last_pfn = nr_pages; > const struct e820entry *entry; > unsigned long num_released = 0; > @@ -460,14 +452,13 @@ static void __init xen_set_identity_and_remap( > last_pfn = xen_set_identity_and_remap_chunk( > list, map_size, start_pfn, > end_pfn, nr_pages, last_pfn, > - &identity, &num_released); > + &num_released); > start = end; > } > } > > *released = num_released; > > - pr_info("Set %ld page(s) to 1-1 mapping\n", identity); > pr_info("Released %ld page(s)\n", num_released); > } > > ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/3] x86/xen: add extra memory for remapped frames during setup 2015-01-07 14:47 [PATCHv1 0/3] x86/xen: fixes and improvements to linear p2m David Vrabel 2015-01-07 14:47 ` [PATCH 1/3] x86/xen: don't count how many PFNs are identity mapped David Vrabel @ 2015-01-07 14:47 ` David Vrabel 2015-01-07 15:12 ` Juergen Gross 2015-01-07 14:47 ` [PATCH 3/3] x86/xen: optimize get_phys_to_machine() David Vrabel 2 siblings, 1 reply; 8+ messages in thread From: David Vrabel @ 2015-01-07 14:47 UTC (permalink / raw) To: xen-devel; +Cc: Juergen Gross, Boris Ostrovsky, David Vrabel If the non-RAM regions in the e820 memory map are larger than the size of the initial balloon, a BUG was triggered as the frames are remaped beyond the limit of the linear p2m. The frames are remapped into the initial balloon area (xen_extra_mem) but not enough of this is available. Ensure enough extra memory regions are added for these remapped frames. Signed-off-by: David Vrabel <david.vrabel@citrix.com> --- arch/x86/xen/setup.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c index 664dffc..feb6d86 100644 --- a/arch/x86/xen/setup.c +++ b/arch/x86/xen/setup.c @@ -366,7 +366,7 @@ static void __init xen_do_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, unsigned long end_pfn, unsigned long nr_pages, unsigned long remap_pfn, - unsigned long *released) + unsigned long *released, unsigned long *remapped) { unsigned long pfn; unsigned long i = 0; @@ -404,6 +404,7 @@ static unsigned long __init xen_set_identity_and_remap_chunk( /* Update variables to reflect new mappings. */ i += size; remap_pfn += size; + *remapped += size; } /* @@ -420,12 +421,13 @@ static unsigned long __init xen_set_identity_and_remap_chunk( static void __init xen_set_identity_and_remap( const struct e820entry *list, size_t map_size, unsigned long nr_pages, - unsigned long *released) + unsigned long *released, unsigned long *remapped) { phys_addr_t start = 0; unsigned long last_pfn = nr_pages; const struct e820entry *entry; unsigned long num_released = 0; + unsigned long num_remapped = 0; int i; /* @@ -452,12 +454,13 @@ static void __init xen_set_identity_and_remap( last_pfn = xen_set_identity_and_remap_chunk( list, map_size, start_pfn, end_pfn, nr_pages, last_pfn, - &num_released); + &num_released, &num_remapped); start = end; } } *released = num_released; + *remapped = num_remapped; pr_info("Released %ld page(s)\n", num_released); } @@ -577,6 +580,7 @@ char * __init xen_memory_setup(void) struct xen_memory_map memmap; unsigned long max_pages; unsigned long extra_pages = 0; + unsigned long remapped_pages; int i; int op; @@ -626,9 +630,10 @@ char * __init xen_memory_setup(void) * underlying RAM. */ xen_set_identity_and_remap(map, memmap.nr_entries, max_pfn, - &xen_released_pages); + &xen_released_pages, &remapped_pages); extra_pages += xen_released_pages; + extra_pages += remapped_pages; /* * Clamp the amount of extra memory to a EXTRA_MEM_RATIO -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/3] x86/xen: add extra memory for remapped frames during setup 2015-01-07 14:47 ` [PATCH 2/3] x86/xen: add extra memory for remapped frames during setup David Vrabel @ 2015-01-07 15:12 ` Juergen Gross 0 siblings, 0 replies; 8+ messages in thread From: Juergen Gross @ 2015-01-07 15:12 UTC (permalink / raw) To: David Vrabel, xen-devel; +Cc: Boris Ostrovsky On 01/07/2015 03:47 PM, David Vrabel wrote: > If the non-RAM regions in the e820 memory map are larger than the size > of the initial balloon, a BUG was triggered as the frames are remaped > beyond the limit of the linear p2m. The frames are remapped into the > initial balloon area (xen_extra_mem) but not enough of this is > available. > > Ensure enough extra memory regions are added for these remapped > frames. > > Signed-off-by: David Vrabel <david.vrabel@citrix.com> Reviewed-by: Juergen Gross <jgross@suse.com> > --- > arch/x86/xen/setup.c | 13 +++++++++---- > 1 file changed, 9 insertions(+), 4 deletions(-) > > diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c > index 664dffc..feb6d86 100644 > --- a/arch/x86/xen/setup.c > +++ b/arch/x86/xen/setup.c > @@ -366,7 +366,7 @@ static void __init xen_do_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, > unsigned long end_pfn, unsigned long nr_pages, unsigned long remap_pfn, > - unsigned long *released) > + unsigned long *released, unsigned long *remapped) > { > unsigned long pfn; > unsigned long i = 0; > @@ -404,6 +404,7 @@ static unsigned long __init xen_set_identity_and_remap_chunk( > /* Update variables to reflect new mappings. */ > i += size; > remap_pfn += size; > + *remapped += size; > } > > /* > @@ -420,12 +421,13 @@ static unsigned long __init xen_set_identity_and_remap_chunk( > > static void __init xen_set_identity_and_remap( > const struct e820entry *list, size_t map_size, unsigned long nr_pages, > - unsigned long *released) > + unsigned long *released, unsigned long *remapped) > { > phys_addr_t start = 0; > unsigned long last_pfn = nr_pages; > const struct e820entry *entry; > unsigned long num_released = 0; > + unsigned long num_remapped = 0; > int i; > > /* > @@ -452,12 +454,13 @@ static void __init xen_set_identity_and_remap( > last_pfn = xen_set_identity_and_remap_chunk( > list, map_size, start_pfn, > end_pfn, nr_pages, last_pfn, > - &num_released); > + &num_released, &num_remapped); > start = end; > } > } > > *released = num_released; > + *remapped = num_remapped; > > pr_info("Released %ld page(s)\n", num_released); > } > @@ -577,6 +580,7 @@ char * __init xen_memory_setup(void) > struct xen_memory_map memmap; > unsigned long max_pages; > unsigned long extra_pages = 0; > + unsigned long remapped_pages; > int i; > int op; > > @@ -626,9 +630,10 @@ char * __init xen_memory_setup(void) > * underlying RAM. > */ > xen_set_identity_and_remap(map, memmap.nr_entries, max_pfn, > - &xen_released_pages); > + &xen_released_pages, &remapped_pages); > > extra_pages += xen_released_pages; > + extra_pages += remapped_pages; > > /* > * Clamp the amount of extra memory to a EXTRA_MEM_RATIO > ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/3] x86/xen: optimize get_phys_to_machine() 2015-01-07 14:47 [PATCHv1 0/3] x86/xen: fixes and improvements to linear p2m David Vrabel 2015-01-07 14:47 ` [PATCH 1/3] x86/xen: don't count how many PFNs are identity mapped David Vrabel 2015-01-07 14:47 ` [PATCH 2/3] x86/xen: add extra memory for remapped frames during setup David Vrabel @ 2015-01-07 14:47 ` David Vrabel 2015-01-07 15:18 ` Juergen Gross 2 siblings, 1 reply; 8+ messages in thread From: David Vrabel @ 2015-01-07 14:47 UTC (permalink / raw) To: xen-devel; +Cc: Juergen Gross, Boris Ostrovsky, David Vrabel The page table walk is only needed to distinguish between identity and missing, both of which have INVALID_P2M_ENTRY. Signed-off-by: David Vrabel <david.vrabel@citrix.com> --- arch/x86/xen/p2m.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c index edbc7a6..a848201 100644 --- a/arch/x86/xen/p2m.c +++ b/arch/x86/xen/p2m.c @@ -405,8 +405,7 @@ void __init xen_vmalloc_p2m_tree(void) unsigned long get_phys_to_machine(unsigned long pfn) { - pte_t *ptep; - unsigned int level; + unsigned long mfn; if (unlikely(pfn >= xen_p2m_size)) { if (pfn < xen_max_p2m_pfn) @@ -414,19 +413,26 @@ unsigned long get_phys_to_machine(unsigned long pfn) return IDENTITY_FRAME(pfn); } + + mfn = xen_p2m_addr[pfn]; - ptep = lookup_address((unsigned long)(xen_p2m_addr + pfn), &level); - BUG_ON(!ptep || level != PG_LEVEL_4K); + if (unlikely(mfn == INVALID_P2M_ENTRY)) { + pte_t *ptep; + unsigned int level; - /* - * The INVALID_P2M_ENTRY is filled in both p2m_*identity - * and in p2m_*missing, so returning the INVALID_P2M_ENTRY - * would be wrong. - */ - if (pte_pfn(*ptep) == PFN_DOWN(__pa(p2m_identity))) - return IDENTITY_FRAME(pfn); + ptep = lookup_address((unsigned long)(xen_p2m_addr + pfn), &level); + BUG_ON(!ptep || level != PG_LEVEL_4K); + + /* + * The INVALID_P2M_ENTRY is filled in both p2m_*identity + * and in p2m_*missing, so returning the INVALID_P2M_ENTRY + * would be wrong. + */ + if (pte_pfn(*ptep) == PFN_DOWN(__pa(p2m_identity))) + return IDENTITY_FRAME(pfn); + } - return xen_p2m_addr[pfn]; + return mfn; } EXPORT_SYMBOL_GPL(get_phys_to_machine); -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 3/3] x86/xen: optimize get_phys_to_machine() 2015-01-07 14:47 ` [PATCH 3/3] x86/xen: optimize get_phys_to_machine() David Vrabel @ 2015-01-07 15:18 ` Juergen Gross 2015-01-07 15:24 ` David Vrabel 0 siblings, 1 reply; 8+ messages in thread From: Juergen Gross @ 2015-01-07 15:18 UTC (permalink / raw) To: David Vrabel, xen-devel; +Cc: Boris Ostrovsky On 01/07/2015 03:47 PM, David Vrabel wrote: > The page table walk is only needed to distinguish between identity and > missing, both of which have INVALID_P2M_ENTRY. As get_phys_to_machine is called by __pfn_to_mfn() only which already checks for mfn == INVALID_P2M_ENTRY this optimization will have an effect only in the early boot case with pfn >= xen_p2m_size. I doubt this is necessary. Juergen > > Signed-off-by: David Vrabel <david.vrabel@citrix.com> > --- > arch/x86/xen/p2m.c | 30 ++++++++++++++++++------------ > 1 file changed, 18 insertions(+), 12 deletions(-) > > diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c > index edbc7a6..a848201 100644 > --- a/arch/x86/xen/p2m.c > +++ b/arch/x86/xen/p2m.c > @@ -405,8 +405,7 @@ void __init xen_vmalloc_p2m_tree(void) > > unsigned long get_phys_to_machine(unsigned long pfn) > { > - pte_t *ptep; > - unsigned int level; > + unsigned long mfn; > > if (unlikely(pfn >= xen_p2m_size)) { > if (pfn < xen_max_p2m_pfn) > @@ -414,19 +413,26 @@ unsigned long get_phys_to_machine(unsigned long pfn) > > return IDENTITY_FRAME(pfn); > } > + > + mfn = xen_p2m_addr[pfn]; > > - ptep = lookup_address((unsigned long)(xen_p2m_addr + pfn), &level); > - BUG_ON(!ptep || level != PG_LEVEL_4K); > + if (unlikely(mfn == INVALID_P2M_ENTRY)) { > + pte_t *ptep; > + unsigned int level; > > - /* > - * The INVALID_P2M_ENTRY is filled in both p2m_*identity > - * and in p2m_*missing, so returning the INVALID_P2M_ENTRY > - * would be wrong. > - */ > - if (pte_pfn(*ptep) == PFN_DOWN(__pa(p2m_identity))) > - return IDENTITY_FRAME(pfn); > + ptep = lookup_address((unsigned long)(xen_p2m_addr + pfn), &level); > + BUG_ON(!ptep || level != PG_LEVEL_4K); > + > + /* > + * The INVALID_P2M_ENTRY is filled in both p2m_*identity > + * and in p2m_*missing, so returning the INVALID_P2M_ENTRY > + * would be wrong. > + */ > + if (pte_pfn(*ptep) == PFN_DOWN(__pa(p2m_identity))) > + return IDENTITY_FRAME(pfn); > + } > > - return xen_p2m_addr[pfn]; > + return mfn; > } > EXPORT_SYMBOL_GPL(get_phys_to_machine); > > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/3] x86/xen: optimize get_phys_to_machine() 2015-01-07 15:18 ` Juergen Gross @ 2015-01-07 15:24 ` David Vrabel 0 siblings, 0 replies; 8+ messages in thread From: David Vrabel @ 2015-01-07 15:24 UTC (permalink / raw) To: Juergen Gross, xen-devel; +Cc: Boris Ostrovsky On 07/01/15 15:18, Juergen Gross wrote: > On 01/07/2015 03:47 PM, David Vrabel wrote: >> The page table walk is only needed to distinguish between identity and >> missing, both of which have INVALID_P2M_ENTRY. > > As get_phys_to_machine is called by __pfn_to_mfn() only which already > checks for mfn == INVALID_P2M_ENTRY this optimization will have an > effect only in the early boot case with pfn >= xen_p2m_size. > > I doubt this is necessary. Doh. Now I remember suggesting this "optimization" before and getting the same answer from you. I'll drop this patch. David ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2015-01-07 15:24 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-01-07 14:47 [PATCHv1 0/3] x86/xen: fixes and improvements to linear p2m David Vrabel 2015-01-07 14:47 ` [PATCH 1/3] x86/xen: don't count how many PFNs are identity mapped David Vrabel 2015-01-07 15:10 ` Juergen Gross 2015-01-07 14:47 ` [PATCH 2/3] x86/xen: add extra memory for remapped frames during setup David Vrabel 2015-01-07 15:12 ` Juergen Gross 2015-01-07 14:47 ` [PATCH 3/3] x86/xen: optimize get_phys_to_machine() David Vrabel 2015-01-07 15:18 ` Juergen Gross 2015-01-07 15:24 ` David Vrabel
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.