diff mbox

[v2,05/10] ARM: idmap: add header file for identity mapping functions

Message ID 1307635142-11312-6-git-send-email-will.deacon@arm.com (mailing list archive)
State New, archived
Headers show

Commit Message

Will Deacon June 9, 2011, 3:58 p.m. UTC
The identity mappings functions are useful outside of SMP booting, so
expose them through their own header file.

Signed-off-by: Will Deacon <will.deacon@arm.com>
---
 arch/arm/include/asm/idmap.h   |   16 ++++++++++++++++
 arch/arm/include/asm/pgtable.h |    3 ---
 arch/arm/kernel/process.c      |    3 +--
 arch/arm/kernel/smp.c          |    1 +
 arch/arm/mm/idmap.c            |    1 +
 5 files changed, 19 insertions(+), 5 deletions(-)
 create mode 100644 arch/arm/include/asm/idmap.h

Comments

Frank Hofmann June 10, 2011, 9:13 a.m. UTC | #1
Hi Will,

I'm wondering why identity_mapping_del() is restricted to SMP.

Yes have seen that the only current _user_ is SMP initialization, but does 
that mean it has to be restricted to that ?

I'd want to use it in hibernation resume code, to "cleanse" swapper_pg_dir 
of the identity mappings _after_ resume. That task doesn't depend on SMP 
or not.

Thanks,
FrankH.


On Thu, 9 Jun 2011, Will Deacon wrote:

> The identity mappings functions are useful outside of SMP booting, so
> expose them through their own header file.
>
> Signed-off-by: Will Deacon <will.deacon@arm.com>
> ---
> arch/arm/include/asm/idmap.h   |   16 ++++++++++++++++
> arch/arm/include/asm/pgtable.h |    3 ---
> arch/arm/kernel/process.c      |    3 +--
> arch/arm/kernel/smp.c          |    1 +
> arch/arm/mm/idmap.c            |    1 +
> 5 files changed, 19 insertions(+), 5 deletions(-)
> create mode 100644 arch/arm/include/asm/idmap.h
>
> diff --git a/arch/arm/include/asm/idmap.h b/arch/arm/include/asm/idmap.h
> new file mode 100644
> index 0000000..ea9517e
> --- /dev/null
> +++ b/arch/arm/include/asm/idmap.h
> @@ -0,0 +1,16 @@
> +#ifndef _ARM_IDMAP_H
> +#define _ARM_IDMAP_H
> +
> +#include <asm/page.h>
> +
> +void identity_mapping_add(pgd_t *pgd, unsigned long addr, unsigned long end);
> +
> +#ifdef CONFIG_SMP
> +void identity_mapping_del(pgd_t *pgd, unsigned long addr, unsigned long end);
> +#else
> +void identity_mapping_del(pgd_t *pgd, unsigned long addr, unsigned long end) {};
> +#endif
> +
> +void setup_mm_for_reboot(char mode);
> +
> +#endif	/* _ARM_IDMAP_H */
> diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h
> index 5750704..9d559a8 100644
> --- a/arch/arm/include/asm/pgtable.h
> +++ b/arch/arm/include/asm/pgtable.h
> @@ -474,9 +474,6 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
>
> #define pgtable_cache_init() do { } while (0)
>
> -void identity_mapping_add(pgd_t *, unsigned long, unsigned long);
> -void identity_mapping_del(pgd_t *, unsigned long, unsigned long);
> -
> #endif /* !__ASSEMBLY__ */
>
> #endif /* CONFIG_MMU */
> diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
> index 5e1e541..8bd9d94 100644
> --- a/arch/arm/kernel/process.c
> +++ b/arch/arm/kernel/process.c
> @@ -32,6 +32,7 @@
> #include <linux/hw_breakpoint.h>
>
> #include <asm/cacheflush.h>
> +#include <asm/idmap.h>
> #include <asm/leds.h>
> #include <asm/processor.h>
> #include <asm/system.h>
> @@ -56,8 +57,6 @@ static const char *isa_modes[] = {
>   "ARM" , "Thumb" , "Jazelle", "ThumbEE"
> };
>
> -extern void setup_mm_for_reboot(char mode);
> -
> static volatile int hlt_counter;
>
> #include <mach/system.h>
> diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
> index 344e52b..dfc76aa 100644
> --- a/arch/arm/kernel/smp.c
> +++ b/arch/arm/kernel/smp.c
> @@ -39,6 +39,7 @@
> #include <asm/tlbflush.h>
> #include <asm/ptrace.h>
> #include <asm/localtimer.h>
> +#include <asm/idmap.h>
>
> /*
>  * as from 2.5, kernels no longer have an init_tasks structure
> diff --git a/arch/arm/mm/idmap.c b/arch/arm/mm/idmap.c
> index 2be9139..4ae0f09 100644
> --- a/arch/arm/mm/idmap.c
> +++ b/arch/arm/mm/idmap.c
> @@ -1,6 +1,7 @@
> #include <linux/kernel.h>
>
> #include <asm/cputype.h>
> +#include <asm/idmap.h>
> #include <asm/pgalloc.h>
> #include <asm/pgtable.h>
>
> -- 
> 1.7.0.4
>
>
diff mbox

Patch

diff --git a/arch/arm/include/asm/idmap.h b/arch/arm/include/asm/idmap.h
new file mode 100644
index 0000000..ea9517e
--- /dev/null
+++ b/arch/arm/include/asm/idmap.h
@@ -0,0 +1,16 @@ 
+#ifndef _ARM_IDMAP_H
+#define _ARM_IDMAP_H
+
+#include <asm/page.h>
+
+void identity_mapping_add(pgd_t *pgd, unsigned long addr, unsigned long end);
+
+#ifdef CONFIG_SMP
+void identity_mapping_del(pgd_t *pgd, unsigned long addr, unsigned long end);
+#else
+void identity_mapping_del(pgd_t *pgd, unsigned long addr, unsigned long end) {};
+#endif
+
+void setup_mm_for_reboot(char mode);
+
+#endif	/* _ARM_IDMAP_H */
diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h
index 5750704..9d559a8 100644
--- a/arch/arm/include/asm/pgtable.h
+++ b/arch/arm/include/asm/pgtable.h
@@ -474,9 +474,6 @@  static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
 
 #define pgtable_cache_init() do { } while (0)
 
-void identity_mapping_add(pgd_t *, unsigned long, unsigned long);
-void identity_mapping_del(pgd_t *, unsigned long, unsigned long);
-
 #endif /* !__ASSEMBLY__ */
 
 #endif /* CONFIG_MMU */
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
index 5e1e541..8bd9d94 100644
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -32,6 +32,7 @@ 
 #include <linux/hw_breakpoint.h>
 
 #include <asm/cacheflush.h>
+#include <asm/idmap.h>
 #include <asm/leds.h>
 #include <asm/processor.h>
 #include <asm/system.h>
@@ -56,8 +57,6 @@  static const char *isa_modes[] = {
   "ARM" , "Thumb" , "Jazelle", "ThumbEE"
 };
 
-extern void setup_mm_for_reboot(char mode);
-
 static volatile int hlt_counter;
 
 #include <mach/system.h>
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 344e52b..dfc76aa 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -39,6 +39,7 @@ 
 #include <asm/tlbflush.h>
 #include <asm/ptrace.h>
 #include <asm/localtimer.h>
+#include <asm/idmap.h>
 
 /*
  * as from 2.5, kernels no longer have an init_tasks structure
diff --git a/arch/arm/mm/idmap.c b/arch/arm/mm/idmap.c
index 2be9139..4ae0f09 100644
--- a/arch/arm/mm/idmap.c
+++ b/arch/arm/mm/idmap.c
@@ -1,6 +1,7 @@ 
 #include <linux/kernel.h>
 
 #include <asm/cputype.h>
+#include <asm/idmap.h>
 #include <asm/pgalloc.h>
 #include <asm/pgtable.h>