Re: [PATCHv4 1/4] arm64: make phys_offset signed
On Fri, Jan 21, 2022 at 09:38:49AM +0800, Pingfan Liu wrote: > On Fri, Jan 21, 2022 at 2:09 AM Philipp Rudo wrote: > > > > Hi Pingfan, > > > > On Tue, 18 Jan 2022 15:48:09 +0800 > > Pingfan Liu wrote: > > > > > After kernel commit 7bc1a0f9e176 ("arm64: mm: use single quantity to > > > represent the PA to VA translation"), phys_offset can be negative if > > > running 52-bits kernel on 48-bits hardware. > > > > > > So changing phys_offset from unsigned to signed. > > > > > > Signed-off-by: Pingfan Liu > > > Cc: Kairui Song > > > Cc: Simon Horman > > > Cc: Philipp Rudo > > > To: kexec@lists.infradead.org > > > --- > > > kexec/arch/arm64/kexec-arm64.c | 12 ++-- > > > kexec/arch/arm64/kexec-arm64.h | 2 +- > > > util_lib/elf_info.c| 2 +- > > > util_lib/include/elf_info.h| 2 +- > > > 4 files changed, 9 insertions(+), 9 deletions(-) > > > > > > > [...] > > > > > diff --git a/kexec/arch/arm64/kexec-arm64.h > > > b/kexec/arch/arm64/kexec-arm64.h > > > index ed447ac..1844b67 100644 > > > --- a/kexec/arch/arm64/kexec-arm64.h > > > +++ b/kexec/arch/arm64/kexec-arm64.h > > > @@ -58,7 +58,7 @@ extern off_t initrd_size; > > > */ > > > > > > struct arm64_mem { > > > - uint64_t phys_offset; > > > + long phys_offset; > > > > I think this one should be int64_t as well. > > > Yes, you are right. Thanks for your careful review. > > @Simon, could you help to correct it or prefer my V5 to fix it. I think I can fix this while applying this patchset :) ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
Re: [PATCHv4 1/4] arm64: make phys_offset signed
On Fri, Jan 21, 2022 at 2:09 AM Philipp Rudo wrote: > > Hi Pingfan, > > On Tue, 18 Jan 2022 15:48:09 +0800 > Pingfan Liu wrote: > > > After kernel commit 7bc1a0f9e176 ("arm64: mm: use single quantity to > > represent the PA to VA translation"), phys_offset can be negative if > > running 52-bits kernel on 48-bits hardware. > > > > So changing phys_offset from unsigned to signed. > > > > Signed-off-by: Pingfan Liu > > Cc: Kairui Song > > Cc: Simon Horman > > Cc: Philipp Rudo > > To: kexec@lists.infradead.org > > --- > > kexec/arch/arm64/kexec-arm64.c | 12 ++-- > > kexec/arch/arm64/kexec-arm64.h | 2 +- > > util_lib/elf_info.c| 2 +- > > util_lib/include/elf_info.h| 2 +- > > 4 files changed, 9 insertions(+), 9 deletions(-) > > > > [...] > > > diff --git a/kexec/arch/arm64/kexec-arm64.h b/kexec/arch/arm64/kexec-arm64.h > > index ed447ac..1844b67 100644 > > --- a/kexec/arch/arm64/kexec-arm64.h > > +++ b/kexec/arch/arm64/kexec-arm64.h > > @@ -58,7 +58,7 @@ extern off_t initrd_size; > > */ > > > > struct arm64_mem { > > - uint64_t phys_offset; > > + long phys_offset; > > I think this one should be int64_t as well. > Yes, you are right. Thanks for your careful review. @Simon, could you help to correct it or prefer my V5 to fix it. Thanks, PIngfan ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
Re: [PATCHv4 1/4] arm64: make phys_offset signed
Hi Pingfan, On Tue, 18 Jan 2022 15:48:09 +0800 Pingfan Liu wrote: > After kernel commit 7bc1a0f9e176 ("arm64: mm: use single quantity to > represent the PA to VA translation"), phys_offset can be negative if > running 52-bits kernel on 48-bits hardware. > > So changing phys_offset from unsigned to signed. > > Signed-off-by: Pingfan Liu > Cc: Kairui Song > Cc: Simon Horman > Cc: Philipp Rudo > To: kexec@lists.infradead.org > --- > kexec/arch/arm64/kexec-arm64.c | 12 ++-- > kexec/arch/arm64/kexec-arm64.h | 2 +- > util_lib/elf_info.c| 2 +- > util_lib/include/elf_info.h| 2 +- > 4 files changed, 9 insertions(+), 9 deletions(-) > [...] > diff --git a/kexec/arch/arm64/kexec-arm64.h b/kexec/arch/arm64/kexec-arm64.h > index ed447ac..1844b67 100644 > --- a/kexec/arch/arm64/kexec-arm64.h > +++ b/kexec/arch/arm64/kexec-arm64.h > @@ -58,7 +58,7 @@ extern off_t initrd_size; > */ > > struct arm64_mem { > - uint64_t phys_offset; > + long phys_offset; I think this one should be int64_t as well. Other than that Reviewed-by: Philipp Rudo > uint64_t text_offset; > uint64_t image_size; > uint64_t vp_offset; ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
[PATCHv4 1/4] arm64: make phys_offset signed
After kernel commit 7bc1a0f9e176 ("arm64: mm: use single quantity to represent the PA to VA translation"), phys_offset can be negative if running 52-bits kernel on 48-bits hardware. So changing phys_offset from unsigned to signed. Signed-off-by: Pingfan Liu Cc: Kairui Song Cc: Simon Horman Cc: Philipp Rudo To: kexec@lists.infradead.org --- kexec/arch/arm64/kexec-arm64.c | 12 ++-- kexec/arch/arm64/kexec-arm64.h | 2 +- util_lib/elf_info.c| 2 +- util_lib/include/elf_info.h| 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/kexec/arch/arm64/kexec-arm64.c b/kexec/arch/arm64/kexec-arm64.c index 6f572ed..c6c67e8 100644 --- a/kexec/arch/arm64/kexec-arm64.c +++ b/kexec/arch/arm64/kexec-arm64.c @@ -859,7 +859,7 @@ void add_segment(struct kexec_info *info, const void *buf, size_t bufsz, add_segment_phys_virt(info, buf, bufsz, base, memsz, 1); } -static inline void set_phys_offset(uint64_t v, char *set_method) +static inline void set_phys_offset(int64_t v, char *set_method) { if (arm64_mem.phys_offset == arm64_mem_ngv || v < arm64_mem.phys_offset) { @@ -928,7 +928,7 @@ static int get_page_offset(void) * from VMCOREINFO note inside 'kcore'. */ -static int get_phys_offset_from_vmcoreinfo_pt_note(unsigned long *phys_offset) +static int get_phys_offset_from_vmcoreinfo_pt_note(long *phys_offset) { int fd, ret = 0; @@ -948,7 +948,7 @@ static int get_phys_offset_from_vmcoreinfo_pt_note(unsigned long *phys_offset) * from PT_LOADs inside 'kcore'. */ -int get_phys_base_from_pt_load(unsigned long *phys_offset) +int get_phys_base_from_pt_load(long *phys_offset) { int i, fd, ret; unsigned long long phys_start; @@ -997,7 +997,7 @@ static bool to_be_excluded(char *str) int get_memory_ranges(struct memory_range **range, int *ranges, unsigned long kexec_flags) { - unsigned long phys_offset = UINT64_MAX; + long phys_offset = -1; FILE *fp; const char *iomem = proc_iomem(); char line[MAX_LINE], *str; @@ -1019,7 +1019,7 @@ int get_memory_ranges(struct memory_range **range, int *ranges, */ ret = get_phys_offset_from_vmcoreinfo_pt_note(_offset); if (!ret) { - if (phys_offset != UINT64_MAX) + if (phys_offset != -1) set_phys_offset(phys_offset, "vmcoreinfo pt_note"); } else { @@ -1031,7 +1031,7 @@ int get_memory_ranges(struct memory_range **range, int *ranges, */ ret = get_phys_base_from_pt_load(_offset); if (!ret) - if (phys_offset != UINT64_MAX) + if (phys_offset != -1) set_phys_offset(phys_offset, "pt_load"); } diff --git a/kexec/arch/arm64/kexec-arm64.h b/kexec/arch/arm64/kexec-arm64.h index ed447ac..1844b67 100644 --- a/kexec/arch/arm64/kexec-arm64.h +++ b/kexec/arch/arm64/kexec-arm64.h @@ -58,7 +58,7 @@ extern off_t initrd_size; */ struct arm64_mem { - uint64_t phys_offset; + long phys_offset; uint64_t text_offset; uint64_t image_size; uint64_t vp_offset; diff --git a/util_lib/elf_info.c b/util_lib/elf_info.c index 51d8b92..5574c7f 100644 --- a/util_lib/elf_info.c +++ b/util_lib/elf_info.c @@ -1236,7 +1236,7 @@ int read_elf(int fd) return 0; } -int read_phys_offset_elf_kcore(int fd, unsigned long *phys_off) +int read_phys_offset_elf_kcore(int fd, long *phys_off) { int ret; diff --git a/util_lib/include/elf_info.h b/util_lib/include/elf_info.h index 4bc9279..f550d86 100644 --- a/util_lib/include/elf_info.h +++ b/util_lib/include/elf_info.h @@ -28,7 +28,7 @@ int get_pt_load(int idx, unsigned long long *phys_end, unsigned long long *virt_start, unsigned long long *virt_end); -int read_phys_offset_elf_kcore(int fd, unsigned long *phys_off); +int read_phys_offset_elf_kcore(int fd, long *phys_off); int read_elf(int fd); void dump_dmesg(int fd, void (*handler)(char*, unsigned int)); -- 2.31.1 ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec