Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1313973 > unrolled thread

[PATCH kernel] powerpc: Make vmalloc_to_phys() public

Started byAlexey Kardashevskiy <aik@ozlabs.ru>
First post2016-01-21 08:40 +0100
Last post2016-01-27 04:30 +0100
Articles 5 — 4 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH kernel] powerpc: Make vmalloc_to_phys() public Alexey Kardashevskiy <aik@ozlabs.ru> - 2016-01-21 08:40 +0100
    Re: [kernel] powerpc: Make vmalloc_to_phys() public Michael Ellerman <mpe@ellerman.id.au> - 2016-01-25 06:50 +0100
      Re: [kernel] powerpc: Make vmalloc_to_phys() public Anshuman Khandual <khandual@linux.vnet.ibm.com> - 2016-01-25 07:30 +0100
      Re: [kernel] powerpc: Make vmalloc_to_phys() public Paul Mackerras <paulus@ozlabs.org> - 2016-01-25 11:10 +0100
        Re: [kernel] powerpc: Make vmalloc_to_phys() public Alexey Kardashevskiy <aik@ozlabs.ru> - 2016-01-27 04:30 +0100

#1313973 — [PATCH kernel] powerpc: Make vmalloc_to_phys() public

FromAlexey Kardashevskiy <aik@ozlabs.ru>
Date2016-01-21 08:40 +0100
Subject[PATCH kernel] powerpc: Make vmalloc_to_phys() public
Message-ID<qTi0x-20y-1@gated-at.bofh.it>
This makes vmalloc_to_phys() public as there will be another user
(in-kernel VFIO acceleration) for it soon.

As a part of future little optimization, this changes the helper to call
vmalloc_to_pfn() instead of vmalloc_to_page() as the size of the
struct page may not be power-of-two aligned which will make gcc use
multiply instructions instead of shifts.

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
---

A couple of notes:

1. real_vmalloc_addr() will be reworked later by Paul separately;

2. the optimization note it not valid at the moment as
vmalloc_to_pfn() calls vmalloc_to_page() which does the actual
search; these helpers functionality will be swapped later
(also, by Paul).

---
 arch/powerpc/include/asm/pgtable.h | 3 +++
 arch/powerpc/mm/pgtable.c          | 8 ++++++++
 arch/powerpc/perf/hv-24x7.c        | 8 --------
 3 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/arch/powerpc/include/asm/pgtable.h b/arch/powerpc/include/asm/pgtable.h
index ac9fb11..47897a3 100644
--- a/arch/powerpc/include/asm/pgtable.h
+++ b/arch/powerpc/include/asm/pgtable.h
@@ -78,6 +78,9 @@ static inline pte_t *find_linux_pte_or_hugepte(pgd_t *pgdir, unsigned long ea,
 	}
 	return __find_linux_pte_or_hugepte(pgdir, ea, is_thp, shift);
 }
+
+unsigned long vmalloc_to_phys(void *vmalloc_addr);
+
 #endif /* __ASSEMBLY__ */
 
 #endif /* _ASM_POWERPC_PGTABLE_H */
diff --git a/arch/powerpc/mm/pgtable.c b/arch/powerpc/mm/pgtable.c
index 83dfd79..de37ff4 100644
--- a/arch/powerpc/mm/pgtable.c
+++ b/arch/powerpc/mm/pgtable.c
@@ -243,3 +243,11 @@ void assert_pte_locked(struct mm_struct *mm, unsigned long addr)
 }
 #endif /* CONFIG_DEBUG_VM */
 
+unsigned long vmalloc_to_phys(void *va)
+{
+	unsigned long pfn = vmalloc_to_pfn(va);
+
+	BUG_ON(!pfn);
+	return __pa(pfn_to_kaddr(pfn)) + offset_in_page(va);
+}
+EXPORT_SYMBOL_GPL(vmalloc_to_phys);
diff --git a/arch/powerpc/perf/hv-24x7.c b/arch/powerpc/perf/hv-24x7.c
index 9f9dfda..3b09ecf 100644
--- a/arch/powerpc/perf/hv-24x7.c
+++ b/arch/powerpc/perf/hv-24x7.c
@@ -493,14 +493,6 @@ static size_t event_to_attr_ct(struct hv_24x7_event_data *event)
 	}
 }
 
-static unsigned long vmalloc_to_phys(void *v)
-{
-	struct page *p = vmalloc_to_page(v);
-
-	BUG_ON(!p);
-	return page_to_phys(p) + offset_in_page(v);
-}
-
 /* */
 struct event_uniq {
 	struct rb_node node;
-- 
2.5.0.rc3

[toc] | [next] | [standalone]


#1316212 — Re: [kernel] powerpc: Make vmalloc_to_phys() public

FromMichael Ellerman <mpe@ellerman.id.au>
Date2016-01-25 06:50 +0100
SubjectRe: [kernel] powerpc: Make vmalloc_to_phys() public
Message-ID<qUIci-7Me-3@gated-at.bofh.it>
In reply to#1313973
On Thu, 2016-21-01 at 07:35:08 UTC, Alexey Kardashevskiy wrote:
> This makes vmalloc_to_phys() public as there will be another user
> (in-kernel VFIO acceleration) for it soon.
> 
> As a part of future little optimization, this changes the helper to call
> vmalloc_to_pfn() instead of vmalloc_to_page() as the size of the
> struct page may not be power-of-two aligned which will make gcc use
> multiply instructions instead of shifts.

You should also mention why you need to export it, presumably because whatever
new user you have in mind can be built as a module.

Acked-by: Michael Ellerman <mpe@ellerman.id.au>

cheers

[toc] | [prev] | [next] | [standalone]


#1316244 — Re: [kernel] powerpc: Make vmalloc_to_phys() public

FromAnshuman Khandual <khandual@linux.vnet.ibm.com>
Date2016-01-25 07:30 +0100
SubjectRe: [kernel] powerpc: Make vmalloc_to_phys() public
Message-ID<qUIP0-8jH-17@gated-at.bofh.it>
In reply to#1316212
On 01/25/2016 11:16 AM, Michael Ellerman wrote:
> On Thu, 2016-21-01 at 07:35:08 UTC, Alexey Kardashevskiy wrote:
>> > This makes vmalloc_to_phys() public as there will be another user
>> > (in-kernel VFIO acceleration) for it soon.
>> > 
>> > As a part of future little optimization, this changes the helper to call
>> > vmalloc_to_pfn() instead of vmalloc_to_page() as the size of the
>> > struct page may not be power-of-two aligned which will make gcc use
>> > multiply instructions instead of shifts.
> You should also mention why you need to export it, presumably because whatever
> new user you have in mind can be built as a module.

Unless the change specifically mentions about the use case, there
are a tons of static helper functions which can be exported to public
for module usage. Ideally this change should be part of the series
which actually needs the helper function to be available in public
not a stand alone one.

[toc] | [prev] | [next] | [standalone]


#1316397 — Re: [kernel] powerpc: Make vmalloc_to_phys() public

FromPaul Mackerras <paulus@ozlabs.org>
Date2016-01-25 11:10 +0100
SubjectRe: [kernel] powerpc: Make vmalloc_to_phys() public
Message-ID<qUMfW-2lm-45@gated-at.bofh.it>
In reply to#1316212
On Mon, Jan 25, 2016 at 04:46:03PM +1100, Michael Ellerman wrote:
> On Thu, 2016-21-01 at 07:35:08 UTC, Alexey Kardashevskiy wrote:
> > This makes vmalloc_to_phys() public as there will be another user
> > (in-kernel VFIO acceleration) for it soon.
> > 
> > As a part of future little optimization, this changes the helper to call
> > vmalloc_to_pfn() instead of vmalloc_to_page() as the size of the
> > struct page may not be power-of-two aligned which will make gcc use
> > multiply instructions instead of shifts.
> 
> You should also mention why you need to export it, presumably because whatever
> new user you have in mind can be built as a module.

If I remember correctly, it's the *existing* user in hv-24x7.c that
needs the export.

Paul.

[toc] | [prev] | [next] | [standalone]


#1318581 — Re: [kernel] powerpc: Make vmalloc_to_phys() public

FromAlexey Kardashevskiy <aik@ozlabs.ru>
Date2016-01-27 04:30 +0100
SubjectRe: [kernel] powerpc: Make vmalloc_to_phys() public
Message-ID<qVoXU-5Jw-1@gated-at.bofh.it>
In reply to#1316397
On 01/25/2016 09:06 PM, Paul Mackerras wrote:
> On Mon, Jan 25, 2016 at 04:46:03PM +1100, Michael Ellerman wrote:
>> On Thu, 2016-21-01 at 07:35:08 UTC, Alexey Kardashevskiy wrote:
>>> This makes vmalloc_to_phys() public as there will be another user
>>> (in-kernel VFIO acceleration) for it soon.
>>>
>>> As a part of future little optimization, this changes the helper to call
>>> vmalloc_to_pfn() instead of vmalloc_to_page() as the size of the
>>> struct page may not be power-of-two aligned which will make gcc use
>>> multiply instructions instead of shifts.
>>
>> You should also mention why you need to export it, presumably because whatever
>> new user you have in mind can be built as a module.
>
> If I remember correctly, it's the *existing* user in hv-24x7.c that
> needs the export.

No, CONFIG_HV_PERF_CTRS (which controls hv-24x7.c) is "bool" so today 
hv-24x7.c cannot compile as a module.

This exports the vmalloc_to_phys() symbol as a new user is going to be KVM 
which can compile as a module.


-- 
Alexey

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web