Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1329871 > unrolled thread
| Started by | David Gibson <david@gibson.dropbear.id.au> |
|---|---|
| First post | 2016-02-09 04:40 +0100 |
| Last post | 2016-02-10 10:00 +0100 |
| Articles | 3 — 2 participants |
Back to article view | Back to linux.kernel
[PATCH 0/4] powerpc/mm: Cleanups to hotplug memory path David Gibson <david@gibson.dropbear.id.au> - 2016-02-09 04:40 +0100
[PATCH 1/4] powerpc/mm: Clean up error handling for htab_remove_mapping David Gibson <david@gibson.dropbear.id.au> - 2016-02-09 04:40 +0100
Re: [PATCH 1/4] powerpc/mm: Clean up error handling for htab_remove_mapping "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> - 2016-02-10 10:00 +0100
| From | David Gibson <david@gibson.dropbear.id.au> |
|---|---|
| Date | 2016-02-09 04:40 +0100 |
| Subject | [PATCH 0/4] powerpc/mm: Cleanups to hotplug memory path |
| Message-ID | <r07jI-6AS-9@gated-at.bofh.it> |
The cleanups to the (guest side) memory hotplug paths came up in the context of allowing hash page table resizing for PAPR guests. However, they stand on their own and can improve reporting of several error conditions that could already happen. Please apply. David Gibson (4): powerpc/mm: Clean up error handling for htab_remove_mapping powerpc/mm: Handle removing maybe-present bolted HPTEs powerpc/mm: Clean up memory hotplug failure paths powerpc/mm: Split hash page table sizing heuristic into a helper arch/powerpc/include/asm/machdep.h | 2 +- arch/powerpc/include/asm/mmu-hash64.h | 3 ++ arch/powerpc/mm/hash_utils_64.c | 73 ++++++++++++++++++++++------------- arch/powerpc/mm/init_64.c | 47 ++++++++++++++-------- arch/powerpc/mm/mem.c | 10 ++++- arch/powerpc/platforms/pseries/lpar.c | 9 +++-- 6 files changed, 96 insertions(+), 48 deletions(-) -- 2.5.0
[toc] | [next] | [standalone]
| From | David Gibson <david@gibson.dropbear.id.au> |
|---|---|
| Date | 2016-02-09 04:40 +0100 |
| Subject | [PATCH 1/4] powerpc/mm: Clean up error handling for htab_remove_mapping |
| Message-ID | <r07jJ-6AS-33@gated-at.bofh.it> |
| In reply to | #1329871 |
Currently, the only error that htab_remove_mapping() can report is -EINVAL,
if removal of bolted HPTEs isn't implemeted for this platform. We make
a few clean ups to the handling of this:
* EINVAL isn't really the right code - there's nothing wrong with the
function's arguments - use ENODEV instead
* We were also printing a warning message, but that's a decision better
left up to the callers, so remove it
* One caller is vmemmap_remove_mapping(), which will just BUG_ON() on
error, making the warning message redundant, so no change is needed
there.
* The other caller is remove_section_mapping(). This is called in the
memory hot remove path at a point after vmemmap_remove_mapping() so
if hpte_removebolted isn't implemented, we'd expect to have already
BUG()ed anyway. Put a WARN_ON() here, in lieu of a printk() since this
really shouldn't be happening.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
arch/powerpc/mm/hash_utils_64.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
index ba59d59..9f7d727 100644
--- a/arch/powerpc/mm/hash_utils_64.c
+++ b/arch/powerpc/mm/hash_utils_64.c
@@ -273,11 +273,8 @@ int htab_remove_mapping(unsigned long vstart, unsigned long vend,
shift = mmu_psize_defs[psize].shift;
step = 1 << shift;
- if (!ppc_md.hpte_removebolted) {
- printk(KERN_WARNING "Platform doesn't implement "
- "hpte_removebolted\n");
- return -EINVAL;
- }
+ if (!ppc_md.hpte_removebolted)
+ return -ENODEV;
for (vaddr = vstart; vaddr < vend; vaddr += step)
ppc_md.hpte_removebolted(vaddr, psize, ssize);
@@ -641,8 +638,10 @@ int create_section_mapping(unsigned long start, unsigned long end)
int remove_section_mapping(unsigned long start, unsigned long end)
{
- return htab_remove_mapping(start, end, mmu_linear_psize,
- mmu_kernel_ssize);
+ int rc = htab_remove_mapping(start, end, mmu_linear_psize,
+ mmu_kernel_ssize);
+ WARN_ON(rc < 0);
+ return rc;
}
#endif /* CONFIG_MEMORY_HOTPLUG */
--
2.5.0
[toc] | [prev] | [next] | [standalone]
| From | "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> |
|---|---|
| Date | 2016-02-10 10:00 +0100 |
| Subject | Re: [PATCH 1/4] powerpc/mm: Clean up error handling for htab_remove_mapping |
| Message-ID | <r0yMV-8kM-3@gated-at.bofh.it> |
| In reply to | #1329872 |
David Gibson <david@gibson.dropbear.id.au> writes:
> Currently, the only error that htab_remove_mapping() can report is -EINVAL,
> if removal of bolted HPTEs isn't implemeted for this platform. We make
> a few clean ups to the handling of this:
>
> * EINVAL isn't really the right code - there's nothing wrong with the
> function's arguments - use ENODEV instead
> * We were also printing a warning message, but that's a decision better
> left up to the callers, so remove it
> * One caller is vmemmap_remove_mapping(), which will just BUG_ON() on
> error, making the warning message redundant, so no change is needed
> there.
> * The other caller is remove_section_mapping(). This is called in the
> memory hot remove path at a point after vmemmap_remove_mapping() so
> if hpte_removebolted isn't implemented, we'd expect to have already
> BUG()ed anyway. Put a WARN_ON() here, in lieu of a printk() since this
> really shouldn't be happening.
>
Reviewed-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
> ---
> arch/powerpc/mm/hash_utils_64.c | 13 ++++++-------
> 1 file changed, 6 insertions(+), 7 deletions(-)
>
> diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
> index ba59d59..9f7d727 100644
> --- a/arch/powerpc/mm/hash_utils_64.c
> +++ b/arch/powerpc/mm/hash_utils_64.c
> @@ -273,11 +273,8 @@ int htab_remove_mapping(unsigned long vstart, unsigned long vend,
> shift = mmu_psize_defs[psize].shift;
> step = 1 << shift;
>
> - if (!ppc_md.hpte_removebolted) {
> - printk(KERN_WARNING "Platform doesn't implement "
> - "hpte_removebolted\n");
> - return -EINVAL;
> - }
> + if (!ppc_md.hpte_removebolted)
> + return -ENODEV;
>
> for (vaddr = vstart; vaddr < vend; vaddr += step)
> ppc_md.hpte_removebolted(vaddr, psize, ssize);
> @@ -641,8 +638,10 @@ int create_section_mapping(unsigned long start, unsigned long end)
>
> int remove_section_mapping(unsigned long start, unsigned long end)
> {
> - return htab_remove_mapping(start, end, mmu_linear_psize,
> - mmu_kernel_ssize);
> + int rc = htab_remove_mapping(start, end, mmu_linear_psize,
> + mmu_kernel_ssize);
> + WARN_ON(rc < 0);
> + return rc;
> }
> #endif /* CONFIG_MEMORY_HOTPLUG */
>
> --
> 2.5.0
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web