Message ID | 1467908615-18952-4-git-send-email-bauerman@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> writes: > kexec_locate_mem_hole will be used by the PowerPC kexec_file_load > implementation to find free memory for the purgatory stack. > > Signed-off-by: Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> > Cc: Eric Biederman <ebiederm@xmission.com> > Cc: Dave Young <dyoung@redhat.com> Dave are you happy with the first three patches? If so do you mind sending an ack? Given the series touches generic code, x86 and powerpc this might be one for Andrew to take. Or is there a kexec tree it should go through? cheers
On 07/10/16 at 04:11pm, Michael Ellerman wrote: > Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> writes: > > > kexec_locate_mem_hole will be used by the PowerPC kexec_file_load > > implementation to find free memory for the purgatory stack. > > > > Signed-off-by: Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> > > Cc: Eric Biederman <ebiederm@xmission.com> > > Cc: Dave Young <dyoung@redhat.com> > > Dave are you happy with the first three patches? If so do you mind > sending an ack? I reviewed the 3 patches, they look good to me. Will ack after a small test today. > > Given the series touches generic code, x86 and powerpc this might be one > for Andrew to take. Or is there a kexec tree it should go through? They should go Andrew's tree, but I'm not sure about the powerpc part. Thanks Dave
On 07/07/16 at 01:23pm, Thiago Jung Bauermann wrote: > kexec_locate_mem_hole will be used by the PowerPC kexec_file_load > implementation to find free memory for the purgatory stack. > > Signed-off-by: Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> > Cc: Eric Biederman <ebiederm@xmission.com> > Cc: Dave Young <dyoung@redhat.com> > --- > include/linux/kexec.h | 1 + > kernel/kexec_file.c | 25 ++++++++++++++++++++----- > 2 files changed, 21 insertions(+), 5 deletions(-) > > diff --git a/include/linux/kexec.h b/include/linux/kexec.h > index ff5fa7707bd7..803f563df81d 100644 > --- a/include/linux/kexec.h > +++ b/include/linux/kexec.h > @@ -174,6 +174,7 @@ struct kexec_buf { > int __weak arch_kexec_walk_mem(struct kexec_buf *kbuf, > int (*func)(u64, u64, void *)); > extern int kexec_add_buffer(struct kexec_buf *kbuf); > +int kexec_locate_mem_hole(struct kexec_buf *kbuf); > #endif /* CONFIG_KEXEC_FILE */ > > struct kimage { > diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c > index 82ccfc4ee97e..3125d1689712 100644 > --- a/kernel/kexec_file.c > +++ b/kernel/kexec_file.c > @@ -450,6 +450,23 @@ int __weak arch_kexec_walk_mem(struct kexec_buf *kbuf, > } > > /** > + * kexec_locate_mem_hole - find free memory for the purgatory or the next kernel > + * @kbuf: Parameters for the memory search. > + * > + * On success, kbuf->mem will have the start address of the memory region found. > + * > + * Return: 0 on success, negative errno on error. > + */ > +int kexec_locate_mem_hole(struct kexec_buf *kbuf) > +{ > + int ret; > + > + ret = arch_kexec_walk_mem(kbuf, locate_mem_hole_callback); > + > + return ret == 1 ? 0 : -EADDRNOTAVAIL; > +} > + > +/** > * kexec_add_buffer - place a buffer in a kexec segment > * @kbuf: Buffer contents and memory parameters. > * > @@ -489,11 +506,9 @@ int kexec_add_buffer(struct kexec_buf *kbuf) > kbuf->buf_align = max(kbuf->buf_align, PAGE_SIZE); > > /* Walk the RAM ranges and allocate a suitable range for the buffer */ > - ret = arch_kexec_walk_mem(kbuf, locate_mem_hole_callback); > - if (ret != 1) { > - /* A suitable memory range could not be found for buffer */ > - return -EADDRNOTAVAIL; > - } > + ret = kexec_locate_mem_hole(kbuf); > + if (ret) > + return ret; > > /* Found a suitable memory range */ > ksegment = &kbuf->image->segment[kbuf->image->nr_segments]; > -- > 1.9.1 > Acked-by: Dave Young <dyoung@redhat.com> Thanks Dave
diff --git a/include/linux/kexec.h b/include/linux/kexec.h index ff5fa7707bd7..803f563df81d 100644 --- a/include/linux/kexec.h +++ b/include/linux/kexec.h @@ -174,6 +174,7 @@ struct kexec_buf { int __weak arch_kexec_walk_mem(struct kexec_buf *kbuf, int (*func)(u64, u64, void *)); extern int kexec_add_buffer(struct kexec_buf *kbuf); +int kexec_locate_mem_hole(struct kexec_buf *kbuf); #endif /* CONFIG_KEXEC_FILE */ struct kimage { diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c index 82ccfc4ee97e..3125d1689712 100644 --- a/kernel/kexec_file.c +++ b/kernel/kexec_file.c @@ -450,6 +450,23 @@ int __weak arch_kexec_walk_mem(struct kexec_buf *kbuf, } /** + * kexec_locate_mem_hole - find free memory for the purgatory or the next kernel + * @kbuf: Parameters for the memory search. + * + * On success, kbuf->mem will have the start address of the memory region found. + * + * Return: 0 on success, negative errno on error. + */ +int kexec_locate_mem_hole(struct kexec_buf *kbuf) +{ + int ret; + + ret = arch_kexec_walk_mem(kbuf, locate_mem_hole_callback); + + return ret == 1 ? 0 : -EADDRNOTAVAIL; +} + +/** * kexec_add_buffer - place a buffer in a kexec segment * @kbuf: Buffer contents and memory parameters. * @@ -489,11 +506,9 @@ int kexec_add_buffer(struct kexec_buf *kbuf) kbuf->buf_align = max(kbuf->buf_align, PAGE_SIZE); /* Walk the RAM ranges and allocate a suitable range for the buffer */ - ret = arch_kexec_walk_mem(kbuf, locate_mem_hole_callback); - if (ret != 1) { - /* A suitable memory range could not be found for buffer */ - return -EADDRNOTAVAIL; - } + ret = kexec_locate_mem_hole(kbuf); + if (ret) + return ret; /* Found a suitable memory range */ ksegment = &kbuf->image->segment[kbuf->image->nr_segments];
kexec_locate_mem_hole will be used by the PowerPC kexec_file_load implementation to find free memory for the purgatory stack. Signed-off-by: Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> Cc: Eric Biederman <ebiederm@xmission.com> Cc: Dave Young <dyoung@redhat.com> --- include/linux/kexec.h | 1 + kernel/kexec_file.c | 25 ++++++++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-)