* [PATCH] KVM/MIPS32: Export min_low_pfn. @ 2013-05-17 21:06 Sanjay Lal 2013-05-17 21:42 ` David Daney 0 siblings, 1 reply; 6+ messages in thread From: Sanjay Lal @ 2013-05-17 21:06 UTC (permalink / raw) To: linux-mips; +Cc: kvm, ralf, gleb, mtosatti, Sanjay Lal The KVM module uses the standard MIPS cache management routines, which use min_low_pfn. This creates and indirect dependency, requiring min_low_pfn to be exported. Signed-off-by: Sanjay Lal <sanjayl@kymasys.com> --- arch/mips/kernel/mips_ksyms.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/mips/kernel/mips_ksyms.c b/arch/mips/kernel/mips_ksyms.c index 6e58e97..0299472 100644 --- a/arch/mips/kernel/mips_ksyms.c +++ b/arch/mips/kernel/mips_ksyms.c @@ -14,6 +14,7 @@ #include <linux/mm.h> #include <asm/uaccess.h> #include <asm/ftrace.h> +#include <linux/bootmem.h> extern void *__bzero(void *__s, size_t __count); extern long __strncpy_from_user_nocheck_asm(char *__to, @@ -60,3 +61,8 @@ EXPORT_SYMBOL(invalid_pte_table); /* _mcount is defined in arch/mips/kernel/mcount.S */ EXPORT_SYMBOL(_mcount); #endif + +/* The KVM module uses the standard MIPS cache functions which use + * min_low_pfn, requiring it to be exported. + */ +EXPORT_SYMBOL(min_low_pfn); -- 1.7.11.3 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] KVM/MIPS32: Export min_low_pfn. 2013-05-17 21:06 [PATCH] KVM/MIPS32: Export min_low_pfn Sanjay Lal @ 2013-05-17 21:42 ` David Daney 2013-05-18 6:36 ` Gleb Natapov 2013-05-19 9:22 ` Ralf Baechle 0 siblings, 2 replies; 6+ messages in thread From: David Daney @ 2013-05-17 21:42 UTC (permalink / raw) To: Sanjay Lal; +Cc: linux-mips, kvm, ralf, gleb, mtosatti On 05/17/2013 02:06 PM, Sanjay Lal wrote: > The KVM module uses the standard MIPS cache management routines, which use min_low_pfn. > This creates and indirect dependency, requiring min_low_pfn to be exported. > > Signed-off-by: Sanjay Lal <sanjayl@kymasys.com> > --- > arch/mips/kernel/mips_ksyms.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/arch/mips/kernel/mips_ksyms.c b/arch/mips/kernel/mips_ksyms.c > index 6e58e97..0299472 100644 > --- a/arch/mips/kernel/mips_ksyms.c > +++ b/arch/mips/kernel/mips_ksyms.c > @@ -14,6 +14,7 @@ > #include <linux/mm.h> > #include <asm/uaccess.h> > #include <asm/ftrace.h> > +#include <linux/bootmem.h> > > extern void *__bzero(void *__s, size_t __count); > extern long __strncpy_from_user_nocheck_asm(char *__to, > @@ -60,3 +61,8 @@ EXPORT_SYMBOL(invalid_pte_table); > /* _mcount is defined in arch/mips/kernel/mcount.S */ > EXPORT_SYMBOL(_mcount); > #endif > + > +/* The KVM module uses the standard MIPS cache functions which use > + * min_low_pfn, requiring it to be exported. > + */ > +EXPORT_SYMBOL(min_low_pfn); I think I asked this before, but I don't remember the answer: Why not put EXPORT_SYMBOL(min_low_pfn) in mm/bootmem.c adjacent to where the symbol is defined? Cluttering up the kernel with multiple architectures all doing architecture specific exports of the same symbol is not a clean way of doing things. The second time something needs to be done, it should be factored out into common code. David Daney > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] KVM/MIPS32: Export min_low_pfn. 2013-05-17 21:42 ` David Daney @ 2013-05-18 6:36 ` Gleb Natapov 2013-05-19 9:22 ` Ralf Baechle 1 sibling, 0 replies; 6+ messages in thread From: Gleb Natapov @ 2013-05-18 6:36 UTC (permalink / raw) To: David Daney; +Cc: Sanjay Lal, linux-mips, kvm, ralf, mtosatti On Fri, May 17, 2013 at 02:42:48PM -0700, David Daney wrote: > On 05/17/2013 02:06 PM, Sanjay Lal wrote: > >The KVM module uses the standard MIPS cache management routines, which use min_low_pfn. > >This creates and indirect dependency, requiring min_low_pfn to be exported. > > > >Signed-off-by: Sanjay Lal <sanjayl@kymasys.com> > >--- > > arch/mips/kernel/mips_ksyms.c | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > >diff --git a/arch/mips/kernel/mips_ksyms.c b/arch/mips/kernel/mips_ksyms.c > >index 6e58e97..0299472 100644 > >--- a/arch/mips/kernel/mips_ksyms.c > >+++ b/arch/mips/kernel/mips_ksyms.c > >@@ -14,6 +14,7 @@ > > #include <linux/mm.h> > > #include <asm/uaccess.h> > > #include <asm/ftrace.h> > >+#include <linux/bootmem.h> > > > > extern void *__bzero(void *__s, size_t __count); > > extern long __strncpy_from_user_nocheck_asm(char *__to, > >@@ -60,3 +61,8 @@ EXPORT_SYMBOL(invalid_pte_table); > > /* _mcount is defined in arch/mips/kernel/mcount.S */ > > EXPORT_SYMBOL(_mcount); > > #endif > >+ > >+/* The KVM module uses the standard MIPS cache functions which use > >+ * min_low_pfn, requiring it to be exported. > >+ */ > >+EXPORT_SYMBOL(min_low_pfn); > > I think I asked this before, but I don't remember the answer: > > Why not put EXPORT_SYMBOL(min_low_pfn) in mm/bootmem.c adjacent to > where the symbol is defined? > He did answered here: http://permalink.gmane.org/gmane.comp.emulators.kvm.devel/109895. I suggested mips_ksyms.c solution as an option. > Cluttering up the kernel with multiple architectures all doing > architecture specific exports of the same symbol is not a clean way > of doing things. > > The second time something needs to be done, it should be factored > out into common code. > Exports are different. You define interface between the kernel and modules here, exporting the symbol may not be desirable for some arch. And min_low_pfn is not the only example. Anything in arch _ksyms files is like that: exported by some archs but not the others. -- Gleb. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] KVM/MIPS32: Export min_low_pfn. @ 2013-05-19 9:22 ` Ralf Baechle 0 siblings, 0 replies; 6+ messages in thread From: Ralf Baechle @ 2013-05-19 9:22 UTC (permalink / raw) To: David Daney, David Howells, Tony Luck, Fenghua Yu, linux-ia64, James Hogan, Michal Simek, microblaze-uclinux, Chen Liqin, Paul Mundt, linux-sh, linux-mm, Arnd Bergmann, linux-arch Cc: Sanjay Lal, linux-mips, kvm, gleb, mtosatti On Fri, May 17, 2013 at 02:42:48PM -0700, David Daney wrote: > On 05/17/2013 02:06 PM, Sanjay Lal wrote: > >The KVM module uses the standard MIPS cache management routines, which use min_low_pfn. > >This creates and indirect dependency, requiring min_low_pfn to be exported. > > > >Signed-off-by: Sanjay Lal <sanjayl@kymasys.com> > >--- > > arch/mips/kernel/mips_ksyms.c | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > >diff --git a/arch/mips/kernel/mips_ksyms.c b/arch/mips/kernel/mips_ksyms.c > >index 6e58e97..0299472 100644 > >--- a/arch/mips/kernel/mips_ksyms.c > >+++ b/arch/mips/kernel/mips_ksyms.c > >@@ -14,6 +14,7 @@ > > #include <linux/mm.h> > > #include <asm/uaccess.h> > > #include <asm/ftrace.h> > >+#include <linux/bootmem.h> > > > > extern void *__bzero(void *__s, size_t __count); > > extern long __strncpy_from_user_nocheck_asm(char *__to, > >@@ -60,3 +61,8 @@ EXPORT_SYMBOL(invalid_pte_table); > > /* _mcount is defined in arch/mips/kernel/mcount.S */ > > EXPORT_SYMBOL(_mcount); > > #endif > >+ > >+/* The KVM module uses the standard MIPS cache functions which use > >+ * min_low_pfn, requiring it to be exported. The comment is wrong. min_low_pfn is being referenced by pfn_valid() which is implemented (simplified for purposes of this discussion) like: int pfn_valid(unsigned long pfn) { return pfn >= min_low_pfn && pfn < max_mapnr; } > >+ */ > >+EXPORT_SYMBOL(min_low_pfn); > > I think I asked this before, but I don't remember the answer: > > Why not put EXPORT_SYMBOL(min_low_pfn) in mm/bootmem.c adjacent to > where the symbol is defined? > > Cluttering up the kernel with multiple architectures all doing > architecture specific exports of the same symbol is not a clean way > of doing things. > > The second time something needs to be done, it should be factored > out into common code. pfn_valid() should return 1 if for the pfn passed as the argment a struct page exists in mem_map[] - this only affects the flatmem case. However it is possible that min_low_pfn is bigger than ARCH_PFN_OFFSET in which case pfn_valid might return 0 even though it should have returned 1. So I fixed the issue like: static inline int pfn_valid(unsigned long pfn) { return pfn >= ARCH_PFN_OFFSET && pfn < max_mapnr; } frv, ia64, metag, microblaze, score and sh are also implementing pfn_valid referencing min_low_pfn. Time to move pfn_valid() to asm-generic, fix the min_low_pfn / ARCH_PFN_OFFSET issue and while at it, harden it against multiple evaluation of its arguments? Ralf -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a> ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] KVM/MIPS32: Export min_low_pfn. @ 2013-05-19 9:22 ` Ralf Baechle 0 siblings, 0 replies; 6+ messages in thread From: Ralf Baechle @ 2013-05-19 9:22 UTC (permalink / raw) To: David Daney, David Howells, Tony Luck, Fenghua Yu, linux-ia64, James Hogan, Michal Simek, microblaze-uclinux, Chen Liqin, Paul Mundt, linux-sh, linux-mm, Arnd Bergmann, linux-arch Cc: Sanjay Lal, linux-mips, kvm, gleb, mtosatti On Fri, May 17, 2013 at 02:42:48PM -0700, David Daney wrote: > On 05/17/2013 02:06 PM, Sanjay Lal wrote: > >The KVM module uses the standard MIPS cache management routines, which use min_low_pfn. > >This creates and indirect dependency, requiring min_low_pfn to be exported. > > > >Signed-off-by: Sanjay Lal <sanjayl@kymasys.com> > >--- > > arch/mips/kernel/mips_ksyms.c | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > >diff --git a/arch/mips/kernel/mips_ksyms.c b/arch/mips/kernel/mips_ksyms.c > >index 6e58e97..0299472 100644 > >--- a/arch/mips/kernel/mips_ksyms.c > >+++ b/arch/mips/kernel/mips_ksyms.c > >@@ -14,6 +14,7 @@ > > #include <linux/mm.h> > > #include <asm/uaccess.h> > > #include <asm/ftrace.h> > >+#include <linux/bootmem.h> > > > > extern void *__bzero(void *__s, size_t __count); > > extern long __strncpy_from_user_nocheck_asm(char *__to, > >@@ -60,3 +61,8 @@ EXPORT_SYMBOL(invalid_pte_table); > > /* _mcount is defined in arch/mips/kernel/mcount.S */ > > EXPORT_SYMBOL(_mcount); > > #endif > >+ > >+/* The KVM module uses the standard MIPS cache functions which use > >+ * min_low_pfn, requiring it to be exported. The comment is wrong. min_low_pfn is being referenced by pfn_valid() which is implemented (simplified for purposes of this discussion) like: int pfn_valid(unsigned long pfn) { return pfn >= min_low_pfn && pfn < max_mapnr; } > >+ */ > >+EXPORT_SYMBOL(min_low_pfn); > > I think I asked this before, but I don't remember the answer: > > Why not put EXPORT_SYMBOL(min_low_pfn) in mm/bootmem.c adjacent to > where the symbol is defined? > > Cluttering up the kernel with multiple architectures all doing > architecture specific exports of the same symbol is not a clean way > of doing things. > > The second time something needs to be done, it should be factored > out into common code. pfn_valid() should return 1 if for the pfn passed as the argment a struct page exists in mem_map[] - this only affects the flatmem case. However it is possible that min_low_pfn is bigger than ARCH_PFN_OFFSET in which case pfn_valid might return 0 even though it should have returned 1. So I fixed the issue like: static inline int pfn_valid(unsigned long pfn) { return pfn >= ARCH_PFN_OFFSET && pfn < max_mapnr; } frv, ia64, metag, microblaze, score and sh are also implementing pfn_valid referencing min_low_pfn. Time to move pfn_valid() to asm-generic, fix the min_low_pfn / ARCH_PFN_OFFSET issue and while at it, harden it against multiple evaluation of its arguments? Ralf ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] KVM/MIPS32: Export min_low_pfn. @ 2013-05-19 9:22 ` Ralf Baechle 0 siblings, 0 replies; 6+ messages in thread From: Ralf Baechle @ 2013-05-19 9:22 UTC (permalink / raw) To: David Daney, David Howells, Tony Luck, Fenghua Yu, linux-ia64, James Hogan, Michal Simek, microblaze-uclinux, Chen Liqin, Paul Mundt, linux-sh, linux-mm, Arnd Bergmann, linux-arch Cc: Sanjay Lal, linux-mips, kvm, gleb, mtosatti On Fri, May 17, 2013 at 02:42:48PM -0700, David Daney wrote: > On 05/17/2013 02:06 PM, Sanjay Lal wrote: > >The KVM module uses the standard MIPS cache management routines, which use min_low_pfn. > >This creates and indirect dependency, requiring min_low_pfn to be exported. > > > >Signed-off-by: Sanjay Lal <sanjayl@kymasys.com> > >--- > > arch/mips/kernel/mips_ksyms.c | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > >diff --git a/arch/mips/kernel/mips_ksyms.c b/arch/mips/kernel/mips_ksyms.c > >index 6e58e97..0299472 100644 > >--- a/arch/mips/kernel/mips_ksyms.c > >+++ b/arch/mips/kernel/mips_ksyms.c > >@@ -14,6 +14,7 @@ > > #include <linux/mm.h> > > #include <asm/uaccess.h> > > #include <asm/ftrace.h> > >+#include <linux/bootmem.h> > > > > extern void *__bzero(void *__s, size_t __count); > > extern long __strncpy_from_user_nocheck_asm(char *__to, > >@@ -60,3 +61,8 @@ EXPORT_SYMBOL(invalid_pte_table); > > /* _mcount is defined in arch/mips/kernel/mcount.S */ > > EXPORT_SYMBOL(_mcount); > > #endif > >+ > >+/* The KVM module uses the standard MIPS cache functions which use > >+ * min_low_pfn, requiring it to be exported. The comment is wrong. min_low_pfn is being referenced by pfn_valid() which is implemented (simplified for purposes of this discussion) like: int pfn_valid(unsigned long pfn) { return pfn >= min_low_pfn && pfn < max_mapnr; } > >+ */ > >+EXPORT_SYMBOL(min_low_pfn); > > I think I asked this before, but I don't remember the answer: > > Why not put EXPORT_SYMBOL(min_low_pfn) in mm/bootmem.c adjacent to > where the symbol is defined? > > Cluttering up the kernel with multiple architectures all doing > architecture specific exports of the same symbol is not a clean way > of doing things. > > The second time something needs to be done, it should be factored > out into common code. pfn_valid() should return 1 if for the pfn passed as the argment a struct page exists in mem_map[] - this only affects the flatmem case. However it is possible that min_low_pfn is bigger than ARCH_PFN_OFFSET in which case pfn_valid might return 0 even though it should have returned 1. So I fixed the issue like: static inline int pfn_valid(unsigned long pfn) { return pfn >= ARCH_PFN_OFFSET && pfn < max_mapnr; } frv, ia64, metag, microblaze, score and sh are also implementing pfn_valid referencing min_low_pfn. Time to move pfn_valid() to asm-generic, fix the min_low_pfn / ARCH_PFN_OFFSET issue and while at it, harden it against multiple evaluation of its arguments? Ralf ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2013-05-19 9:22 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-05-17 21:06 [PATCH] KVM/MIPS32: Export min_low_pfn Sanjay Lal 2013-05-17 21:42 ` David Daney 2013-05-18 6:36 ` Gleb Natapov 2013-05-19 9:22 ` Ralf Baechle 2013-05-19 9:22 ` Ralf Baechle 2013-05-19 9:22 ` Ralf Baechle
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.