>Hello Atsushi,
>
>On Thu, 30 Oct 2014 01:29:18 +0000
>Atsushi Kumagai <[email protected]> wrote:
>
>[snip]
>
>> Now I don't plan to use is_iomem_phys_addr() for non s390x architectures,
>> I prefer putting is_iomem_phys_addr() into arch/s390x.c as Baoquan
>> commented before.
>>
>> Could you modify the patch ? or any questions ?
>
>I modified the patch and moved the is_iomem_phys_addr() function to
>s390x.c. I did not add __pa() because currently I don't see the
>need for it (?).

OK, but I'll add a memorandum in case we export this code to other
architectures like:

  int is_iomem_phys_addr_s390x(unsigned long addr)
  {
+         /* Implicit VtoP conversion will be performed for addr here. */
          struct addr_check addr_check = {addr, 0};

>The updated patch below applies on top of our "Compile warnings on
>archs without get_versiondep_info()" patch.

Thanks for your work, I'll merge it into v1.5.8.


Thanks,
Atsushi Kumagai

>Michael
>---
>[PATCH] makedumpfile: Enable --mem-usage for s390x
>
>Replace is_vmalloc_addr() by is_phys_addr() and implement is_phys_addr()
>on s390x using /proc/iommem parsing to enable the new makedumpfile
>option "--mem-usage".
>
>Signed-off-by: Michael Holzheu <[email protected]>
>---
> arch/s390x.c   |   26 ++++++++++++++++++++++++++
> elf_info.c     |    4 ++--
> makedumpfile.h |   20 +++++++++++++-------
> 3 files changed, 41 insertions(+), 9 deletions(-)
>
>--- a/arch/s390x.c
>+++ b/arch/s390x.c
>@@ -308,4 +308,30 @@ vaddr_to_paddr_s390x(unsigned long vaddr
>       return paddr;
> }
>
>+struct addr_check {
>+      unsigned long addr;
>+      int found;
>+};
>+
>+static int phys_addr_callback(void *data, int nr, char *str,
>+                            unsigned long base, unsigned long length)
>+{
>+      struct addr_check *addr_check = data;
>+      unsigned long addr = addr_check->addr;
>+
>+      if (addr >= base && addr < base + length) {
>+              addr_check->found = 1;
>+              return -1;
>+      }
>+      return 0;
>+}
>+
>+int is_iomem_phys_addr_s390x(unsigned long addr)
>+{
>+      struct addr_check addr_check = {addr, 0};
>+
>+      iomem_for_each_line("System RAM\n", phys_addr_callback, &addr_check);
>+      return addr_check.found;
>+}
>+
> #endif /* __s390x__ */
>--- a/elf_info.c
>+++ b/elf_info.c
>@@ -854,7 +854,7 @@ int get_kcore_dump_loads(void)
>
>       for (i = 0; i < num_pt_loads; ++i) {
>               struct pt_load_segment *p = &pt_loads[i];
>-              if (is_vmalloc_addr(p->virt_start))
>+              if (!is_phys_addr(p->virt_start))
>                       continue;
>               loads++;
>       }
>@@ -874,7 +874,7 @@ int get_kcore_dump_loads(void)
>
>       for (i = 0, j = 0; i < num_pt_loads; ++i) {
>               struct pt_load_segment *p = &pt_loads[i];
>-              if (is_vmalloc_addr(p->virt_start))
>+              if (!is_phys_addr(p->virt_start))
>                       continue;
>               if (j >= loads)
>                       return FALSE;
>--- a/makedumpfile.h
>+++ b/makedumpfile.h
>@@ -767,7 +767,7 @@ unsigned long long vaddr_to_paddr_arm(un
> #define get_machdep_info()    get_machdep_info_arm()
> #define get_versiondep_info() stub_true()
> #define vaddr_to_paddr(X)     vaddr_to_paddr_arm(X)
>-#define is_vmalloc_addr(X)    stub_true_ul(X)
>+#define is_phys_addr(X)               stub_true_ul(X)
> #endif /* arm */
>
> #ifdef __x86__
>@@ -778,7 +778,7 @@ unsigned long long vaddr_to_paddr_x86(un
> #define get_machdep_info()    get_machdep_info_x86()
> #define get_versiondep_info() get_versiondep_info_x86()
> #define vaddr_to_paddr(X)     vaddr_to_paddr_x86(X)
>-#define is_vmalloc_addr(X)    stub_true_ul(X)
>+#define is_phys_addr(X)               stub_true_ul(X)
> #endif /* x86 */
>
> #ifdef __x86_64__
>@@ -791,7 +791,7 @@ unsigned long long vaddr_to_paddr_x86_64
> #define get_machdep_info()    get_machdep_info_x86_64()
> #define get_versiondep_info() get_versiondep_info_x86_64()
> #define vaddr_to_paddr(X)     vaddr_to_paddr_x86_64(X)
>-#define is_vmalloc_addr(X)    is_vmalloc_addr_x86_64(X)
>+#define is_phys_addr(X)               (!is_vmalloc_addr_x86_64(X))
> #endif /* x86_64 */
>
> #ifdef __powerpc64__ /* powerpc64 */
>@@ -802,7 +802,7 @@ unsigned long long vaddr_to_paddr_ppc64(
> #define get_machdep_info()    get_machdep_info_ppc64()
> #define get_versiondep_info() get_versiondep_info_ppc64()
> #define vaddr_to_paddr(X)     vaddr_to_paddr_ppc64(X)
>-#define is_vmalloc_addr(X)    stub_true_ul(X)
>+#define is_phys_addr(X)               stub_true_ul(X)
> #endif          /* powerpc64 */
>
> #ifdef __powerpc32__ /* powerpc32 */
>@@ -812,17 +812,18 @@ unsigned long long vaddr_to_paddr_ppc(un
> #define get_machdep_info()    get_machdep_info_ppc()
> #define get_versiondep_info() stub_true()
> #define vaddr_to_paddr(X)     vaddr_to_paddr_ppc(X)
>-#define is_vmalloc_addr(X)    stub_true_ul(X)
>+#define is_phys_addr(X)               stub_true_ul(X)
> #endif          /* powerpc32 */
>
> #ifdef __s390x__ /* s390x */
> int get_machdep_info_s390x(void);
> unsigned long long vaddr_to_paddr_s390x(unsigned long vaddr);
>+int is_iomem_phys_addr_s390x(unsigned long addr);
> #define get_phys_base()               stub_true()
> #define get_machdep_info()    get_machdep_info_s390x()
> #define get_versiondep_info() stub_true()
> #define vaddr_to_paddr(X)     vaddr_to_paddr_s390x(X)
>-#define is_vmalloc_addr(X)    stub_true_ul(X)
>+#define is_phys_addr(X)               is_iomem_phys_addr_s390x(X)
> #endif          /* s390x */
>
> #ifdef __ia64__ /* ia64 */
>@@ -834,7 +835,7 @@ unsigned long long vaddr_to_paddr_ia64(u
> #define get_versiondep_info() stub_true()
> #define vaddr_to_paddr(X)     vaddr_to_paddr_ia64(X)
> #define VADDR_REGION(X)               (((unsigned long)(X)) >> REGION_SHIFT)
>-#define is_vmalloc_addr(X)    stub_true_ul(X)
>+#define is_phys_addr(X)               stub_true_ul(X)
> #endif          /* ia64 */
>
> typedef unsigned long long mdf_pfn_t;
>@@ -1569,6 +1570,11 @@ int read_disk_dump_header(struct disk_du
> int read_kdump_sub_header(struct kdump_sub_header *kh, char *filename);
> void close_vmcoreinfo(void);
> int close_files_for_creating_dumpfile(void);
>+int iomem_for_each_line(char *match, int (*callback)(void *data, int nr,
>+                                                   char *str,
>+                                                   unsigned long base,
>+                                                   unsigned long length),
>+                      void *data);
>
>
> /*

_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to