All of lore.kernel.org
 help / color / mirror / Atom feed
From: Baoquan He <bhe@redhat.com>
To: Vivek Goyal <vgoyal@redhat.com>
Cc: mjg59@srcf.ucam.org, greg@kroah.com, kexec@lists.infradead.org,
	linux-kernel@vger.kernel.org, ebiederm@xmission.com,
	hpa@zytor.com
Subject: Re: [PATCH 4/6] kexec: A new system call, kexec_file_load, for in kernel kexec
Date: Wed, 4 Dec 2013 09:56:57 +0800	[thread overview]
Message-ID: <20131204015657.GD3298@localhost.localdomain> (raw)
In-Reply-To: <1384969851-7251-5-git-send-email-vgoyal@redhat.com>

On 11/20/13 at 12:50pm, Vivek Goyal wrote:
> + * that kexec_mutex is held.
> + */

I think kexec_add_buffer is guaranteed to be called before allocating
control pages, why not updating image->control_page after each time
kexec_add_buffer is called. Then when control page is needed, effective
address in crash_kernel region can be given. This can be a little more
efficient.

> +int kexec_add_buffer(struct kimage *image, char *buffer,
> +		unsigned long bufsz, unsigned long memsz,
> +		unsigned long buf_align, unsigned long buf_min,
> +		unsigned long buf_max, int top_down, unsigned long *load_addr)
> +{
> +
> +	unsigned long nr_segments = image->nr_segments, new_nr_segments;
> +	struct kexec_segment *ksegment;
> +	struct kexec_buf *kbuf;
> +
> +	/* Currently adding segment this way is allowed only in file mode */
> +	if (!image->file_mode)
> +		return -EINVAL;
> +
> +	if (nr_segments >= KEXEC_SEGMENT_MAX)
> +		return -EINVAL;
> +
> +	/*
> +	 * Make sure we are not trying to add buffer after allocating
> +	 * control pages. All segments need to be placed first before
> +	 * any control pages are allocated. As control page allocation
> +	 * logic goes through list of segments to make sure there are
> +	 * no destination overlaps.
> +	 */
> +	WARN_ONCE(!list_empty(&image->control_pages), "Adding kexec buffer"
> +			" after allocating control pages\n");
> +
> +	kbuf = kzalloc(sizeof(struct kexec_buf), GFP_KERNEL);
> +	if (!kbuf)
> +		return -ENOMEM;
> +
> +	kbuf->image = image;
> +	kbuf->buffer = buffer;
> +	kbuf->bufsz = bufsz;
> +	/* Align memsz to next page boundary */
> +	kbuf->memsz = ALIGN(memsz, PAGE_SIZE);
> +
> +	/* Align to atleast page size boundary */
> +	kbuf->buf_align = max(buf_align, PAGE_SIZE);
> +	kbuf->buf_min = buf_min;
> +	kbuf->buf_max = buf_max;
> +	kbuf->top_down = top_down;
> +
> +	/* Walk the RAM ranges and allocate a suitable range for the buffer */
> +	walk_system_ram_res(0, -1, kbuf, walk_ram_range_callback);
> +
> +	kbuf->image = NULL;
> +	kfree(kbuf);
> +
> +	/*
> +	 * If range could be found successfully, it would have incremented
> +	 * the nr_segments value.
> +	 */
> +	new_nr_segments = image->nr_segments;
> +
> +	/* A suitable memory range could not be found for buffer */
> +	if (new_nr_segments == nr_segments)
> +		return -EADDRNOTAVAIL;
> +
> +	/* Found a suitable memory range */
> +
> +	ksegment = &image->segment[new_nr_segments - 1];
> +	*load_addr = ksegment->mem;
> +	return 0;
> +}
> +
> +


_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

WARNING: multiple messages have this Message-ID (diff)
From: Baoquan He <bhe@redhat.com>
To: Vivek Goyal <vgoyal@redhat.com>
Cc: linux-kernel@vger.kernel.org, kexec@lists.infradead.org,
	mjg59@srcf.ucam.org, greg@kroah.com, ebiederm@xmission.com,
	hpa@zytor.com
Subject: Re: [PATCH 4/6] kexec: A new system call, kexec_file_load, for in kernel kexec
Date: Wed, 4 Dec 2013 09:56:57 +0800	[thread overview]
Message-ID: <20131204015657.GD3298@localhost.localdomain> (raw)
In-Reply-To: <1384969851-7251-5-git-send-email-vgoyal@redhat.com>

On 11/20/13 at 12:50pm, Vivek Goyal wrote:
> + * that kexec_mutex is held.
> + */

I think kexec_add_buffer is guaranteed to be called before allocating
control pages, why not updating image->control_page after each time
kexec_add_buffer is called. Then when control page is needed, effective
address in crash_kernel region can be given. This can be a little more
efficient.

> +int kexec_add_buffer(struct kimage *image, char *buffer,
> +		unsigned long bufsz, unsigned long memsz,
> +		unsigned long buf_align, unsigned long buf_min,
> +		unsigned long buf_max, int top_down, unsigned long *load_addr)
> +{
> +
> +	unsigned long nr_segments = image->nr_segments, new_nr_segments;
> +	struct kexec_segment *ksegment;
> +	struct kexec_buf *kbuf;
> +
> +	/* Currently adding segment this way is allowed only in file mode */
> +	if (!image->file_mode)
> +		return -EINVAL;
> +
> +	if (nr_segments >= KEXEC_SEGMENT_MAX)
> +		return -EINVAL;
> +
> +	/*
> +	 * Make sure we are not trying to add buffer after allocating
> +	 * control pages. All segments need to be placed first before
> +	 * any control pages are allocated. As control page allocation
> +	 * logic goes through list of segments to make sure there are
> +	 * no destination overlaps.
> +	 */
> +	WARN_ONCE(!list_empty(&image->control_pages), "Adding kexec buffer"
> +			" after allocating control pages\n");
> +
> +	kbuf = kzalloc(sizeof(struct kexec_buf), GFP_KERNEL);
> +	if (!kbuf)
> +		return -ENOMEM;
> +
> +	kbuf->image = image;
> +	kbuf->buffer = buffer;
> +	kbuf->bufsz = bufsz;
> +	/* Align memsz to next page boundary */
> +	kbuf->memsz = ALIGN(memsz, PAGE_SIZE);
> +
> +	/* Align to atleast page size boundary */
> +	kbuf->buf_align = max(buf_align, PAGE_SIZE);
> +	kbuf->buf_min = buf_min;
> +	kbuf->buf_max = buf_max;
> +	kbuf->top_down = top_down;
> +
> +	/* Walk the RAM ranges and allocate a suitable range for the buffer */
> +	walk_system_ram_res(0, -1, kbuf, walk_ram_range_callback);
> +
> +	kbuf->image = NULL;
> +	kfree(kbuf);
> +
> +	/*
> +	 * If range could be found successfully, it would have incremented
> +	 * the nr_segments value.
> +	 */
> +	new_nr_segments = image->nr_segments;
> +
> +	/* A suitable memory range could not be found for buffer */
> +	if (new_nr_segments == nr_segments)
> +		return -EADDRNOTAVAIL;
> +
> +	/* Found a suitable memory range */
> +
> +	ksegment = &image->segment[new_nr_segments - 1];
> +	*load_addr = ksegment->mem;
> +	return 0;
> +}
> +
> +


  parent reply	other threads:[~2013-12-04  1:57 UTC|newest]

Thread overview: 180+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-20 17:50 [PATCH 0/6] kexec: A new system call to allow in kernel loading Vivek Goyal
2013-11-20 17:50 ` Vivek Goyal
2013-11-20 17:50 ` [PATCH 1/6] kexec: Export vmcoreinfo note size properly Vivek Goyal
2013-11-20 17:50   ` Vivek Goyal
2013-11-21 18:59   ` Greg KH
2013-11-21 18:59     ` Greg KH
2013-11-21 19:08     ` Vivek Goyal
2013-11-21 19:08       ` Vivek Goyal
2013-11-20 17:50 ` [PATCH 2/6] kexec: Move segment verification code in a separate function Vivek Goyal
2013-11-20 17:50   ` Vivek Goyal
2013-11-20 17:50 ` [PATCH 3/6] resource: Provide new functions to walk through resources Vivek Goyal
2013-11-20 17:50   ` Vivek Goyal
2013-11-20 17:50 ` [PATCH 4/6] kexec: A new system call, kexec_file_load, for in kernel kexec Vivek Goyal
2013-11-20 17:50   ` Vivek Goyal
2013-11-21 19:03   ` Greg KH
2013-11-21 19:03     ` Greg KH
2013-11-21 19:06     ` Matthew Garrett
2013-11-21 19:06       ` Matthew Garrett
2013-11-21 19:13       ` Vivek Goyal
2013-11-21 19:13         ` Vivek Goyal
2013-11-21 19:19         ` Matthew Garrett
2013-11-21 19:19           ` Matthew Garrett
2013-11-21 19:24           ` Vivek Goyal
2013-11-21 19:24             ` Vivek Goyal
2013-11-22 18:57           ` Vivek Goyal
2013-11-22 18:57             ` Vivek Goyal
2013-11-23  3:39             ` Eric W. Biederman
2013-11-23  3:39               ` Eric W. Biederman
2013-11-25 16:39               ` Vivek Goyal
2013-11-25 16:39                 ` Vivek Goyal
2013-11-26 12:23                 ` Eric W. Biederman
2013-11-26 12:23                   ` Eric W. Biederman
2013-11-26 14:27                   ` Vivek Goyal
2013-11-26 14:27                     ` Vivek Goyal
2013-12-19 12:54                     ` Torsten Duwe
2013-12-19 12:54                       ` Torsten Duwe
2013-12-20 14:19                       ` Vivek Goyal
2013-12-20 14:19                         ` Vivek Goyal
2013-12-20 23:11                         ` Eric W. Biederman
2013-12-20 23:11                           ` Eric W. Biederman
2013-12-20 23:20                           ` Kees Cook
2013-12-20 23:20                             ` Kees Cook
2013-12-21 11:38                             ` Torsten Duwe
2013-12-21 11:38                               ` Torsten Duwe
2014-01-02 20:39                             ` Vivek Goyal
2014-01-02 20:39                               ` Vivek Goyal
2014-01-02 20:56                               ` H. Peter Anvin
2014-01-02 20:56                                 ` H. Peter Anvin
2014-01-06 21:33                                 ` Josh Boyer
2014-01-06 21:33                                   ` Josh Boyer
2014-01-07  4:22                                   ` H. Peter Anvin
2014-01-07  4:22                                     ` H. Peter Anvin
2013-12-20 23:20                           ` H. Peter Anvin
2013-12-20 23:20                             ` H. Peter Anvin
2013-12-21  1:32                             ` Eric W. Biederman
2013-12-21  1:32                               ` Eric W. Biederman
2013-12-21  3:32                               ` H. Peter Anvin
2013-12-21  3:32                                 ` H. Peter Anvin
2013-12-21 12:15                                 ` Torsten Duwe
2013-12-21 12:15                                   ` Torsten Duwe
2013-11-21 19:16     ` Vivek Goyal
2013-11-21 19:16       ` Vivek Goyal
2013-11-22  1:03     ` Kees Cook
2013-11-22  1:03       ` Kees Cook
2013-11-22  2:13       ` Vivek Goyal
2013-11-22  2:13         ` Vivek Goyal
2013-11-22 20:42   ` Jiri Kosina
2013-11-22 20:42     ` Jiri Kosina
2014-01-17 19:17     ` Vivek Goyal
2014-01-17 19:17       ` Vivek Goyal
2013-11-29  3:10   ` Baoquan He
2013-11-29  3:10     ` Baoquan He
2013-12-02 15:27     ` WANG Chao
2013-12-02 15:27       ` WANG Chao
2013-12-02 15:44     ` Vivek Goyal
2013-12-02 15:44       ` Vivek Goyal
2013-12-04  1:35       ` Baoquan He
2013-12-04  1:35         ` Baoquan He
2013-12-04 17:19         ` Vivek Goyal
2013-12-04 17:19           ` Vivek Goyal
2013-12-04  1:56   ` Baoquan He [this message]
2013-12-04  1:56     ` Baoquan He
2013-12-04  8:19     ` Baoquan He
2013-12-04  8:19       ` Baoquan He
2013-12-04 17:32     ` Vivek Goyal
2013-12-04 17:32       ` Vivek Goyal
2013-11-20 17:50 ` [PATCH 5/6] kexec-bzImage: Support for loading bzImage using 64bit entry Vivek Goyal
2013-11-20 17:50   ` Vivek Goyal
2013-11-21 19:07   ` Greg KH
2013-11-21 19:07     ` Greg KH
2013-11-21 19:21     ` Vivek Goyal
2013-11-21 19:21       ` Vivek Goyal
2013-11-22 15:24       ` H. Peter Anvin
2013-11-22 15:24         ` H. Peter Anvin
2013-11-28 11:35   ` Baoquan He
2013-11-28 11:35     ` Baoquan He
2013-12-02 15:36     ` Vivek Goyal
2013-12-02 15:36       ` Vivek Goyal
2013-11-20 17:50 ` [PATCH 6/6] kexec: Support for Kexec on panic using new system call Vivek Goyal
2013-11-20 17:50   ` Vivek Goyal
2013-11-28 11:28   ` Baoquan He
2013-11-28 11:28     ` Baoquan He
2013-12-02 15:30     ` Vivek Goyal
2013-12-02 15:30       ` Vivek Goyal
2013-12-04  1:51       ` Baoquan He
2013-12-04  1:51         ` Baoquan He
2013-12-04 17:20         ` Vivek Goyal
2013-12-04 17:20           ` Vivek Goyal
2013-12-04  1:41   ` Baoquan He
2013-12-04  1:41     ` Baoquan He
2013-12-04 17:19     ` Vivek Goyal
2013-12-04 17:19       ` Vivek Goyal
2013-11-21 18:58 ` [PATCH 0/6] kexec: A new system call to allow in kernel loading Greg KH
2013-11-21 18:58   ` Greg KH
2013-11-21 19:07   ` Vivek Goyal
2013-11-21 19:07     ` Vivek Goyal
2013-11-21 19:46     ` Vivek Goyal
2013-11-21 19:46       ` Vivek Goyal
2013-11-21 19:06 ` Geert Uytterhoeven
2013-11-21 19:06   ` Geert Uytterhoeven
2013-11-21 19:14   ` Vivek Goyal
2013-11-21 19:14     ` Vivek Goyal
2013-11-21 23:07 ` Eric W. Biederman
2013-11-21 23:07   ` Eric W. Biederman
2013-11-22  1:28   ` H. Peter Anvin
2013-11-22  1:28     ` H. Peter Anvin
2013-11-22  2:35     ` Vivek Goyal
2013-11-22  2:35       ` Vivek Goyal
2013-11-22  2:40       ` H. Peter Anvin
2013-11-22  2:40         ` H. Peter Anvin
2013-11-22  1:55   ` Vivek Goyal
2013-11-22  1:55     ` Vivek Goyal
2013-11-22  9:09     ` Geert Uytterhoeven
2013-11-22  9:09       ` Geert Uytterhoeven
2013-11-22 13:30       ` Jiri Kosina
2013-11-22 13:30         ` Jiri Kosina
2013-11-22 13:46         ` Vivek Goyal
2013-11-22 13:46           ` Vivek Goyal
2013-11-22 13:50           ` Jiri Kosina
2013-11-22 13:50             ` Jiri Kosina
2013-11-22 15:33             ` Vivek Goyal
2013-11-22 15:33               ` Vivek Goyal
2013-11-22 17:45               ` Kees Cook
2013-11-22 17:45                 ` Kees Cook
2013-11-22 13:43       ` Vivek Goyal
2013-11-22 13:43         ` Vivek Goyal
2013-11-22 15:25         ` Geert Uytterhoeven
2013-11-22 15:25           ` Geert Uytterhoeven
2013-11-22 15:33           ` Jiri Kosina
2013-11-22 15:33             ` Jiri Kosina
2013-11-22 15:57             ` Eric Paris
2013-11-22 15:57               ` Eric Paris
2013-11-22 16:04               ` Jiri Kosina
2013-11-22 16:04                 ` Jiri Kosina
2013-11-22 16:08                 ` Vivek Goyal
2013-11-22 16:08                   ` Vivek Goyal
2013-11-22 13:34     ` Eric W. Biederman
2013-11-22 13:34       ` Eric W. Biederman
2013-11-22 14:19       ` Vivek Goyal
2013-11-22 14:19         ` Vivek Goyal
2013-11-22 19:48         ` Greg KH
2013-11-22 19:48           ` Greg KH
2013-11-23  3:23         ` Eric W. Biederman
2013-11-23  3:23           ` Eric W. Biederman
2013-12-04 19:34           ` Vivek Goyal
2013-12-04 19:34             ` Vivek Goyal
2013-12-05  4:10             ` Eric W. Biederman
2013-12-05  4:10               ` Eric W. Biederman
2013-11-25 10:04       ` Michael Holzheu
2013-11-25 10:04         ` Michael Holzheu
2013-11-25 15:36         ` Vivek Goyal
2013-11-25 15:36           ` Vivek Goyal
2013-11-25 16:15           ` Michael Holzheu
2013-11-25 16:15             ` Michael Holzheu
2013-11-22  0:55 ` HATAYAMA Daisuke
2013-11-22  0:55   ` HATAYAMA Daisuke
2013-11-22  2:03   ` Vivek Goyal
2013-11-22  2:03     ` Vivek Goyal
2013-12-03 13:23 ` Baoquan He
2013-12-03 13:23   ` Baoquan He

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20131204015657.GD3298@localhost.localdomain \
    --to=bhe@redhat.com \
    --cc=ebiederm@xmission.com \
    --cc=greg@kroah.com \
    --cc=hpa@zytor.com \
    --cc=kexec@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mjg59@srcf.ucam.org \
    --cc=vgoyal@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.