All of lore.kernel.org
 help / color / mirror / Atom feed
From: Xunlei Pang <xlpang@redhat.com>
To: Minfei Huang <mhuang@redhat.com>
Cc: dyoung@redhat.com, akpm@linux-foundation.org,
	kexec@lists.infradead.org, linux-kernel@vger.kernel.org,
	ebiederm@xmission.com
Subject: Re: [PATCH] kexec: Move some memembers and definitions within the scope of CONFIG_KEXEC_FILE
Date: Tue, 22 Dec 2015 19:40:39 +0800	[thread overview]
Message-ID: <567936B7.5020702@redhat.com> (raw)
In-Reply-To: <20151222104704.GA28313@dhcp-128-25.nay.redhat.com>

On 12/22/2015 at 06:47 PM, Minfei Huang wrote:
> On 12/21/15 at 02:09pm, Xunlei Pang wrote:
>> diff --git a/include/linux/kexec.h b/include/linux/kexec.h
>> index 7b68d27..2cc643c 100644
>> --- a/include/linux/kexec.h
>> +++ b/include/linux/kexec.h
>> @@ -109,11 +109,7 @@ struct compat_kexec_segment {
>>  };
>>  #endif
>>  
>> -struct kexec_sha_region {
>> -	unsigned long start;
>> -	unsigned long len;
>> -};
>> -
>> +#ifdef CONFIG_KEXEC_FILE
>>  struct purgatory_info {
>>  	/* Pointer to elf header of read only purgatory */
>>  	Elf_Ehdr *ehdr;
>> @@ -130,6 +126,28 @@ struct purgatory_info {
>>  	unsigned long purgatory_load_addr;
>>  };
>>  
>> +typedef int (kexec_probe_t)(const char *kernel_buf, unsigned long kernel_size);
>> +typedef void *(kexec_load_t)(struct kimage *image, char *kernel_buf,
>> +			     unsigned long kernel_len, char *initrd,
>> +			     unsigned long initrd_len, char *cmdline,
>> +			     unsigned long cmdline_len);
>> +typedef int (kexec_cleanup_t)(void *loader_data);
>> +
>> +#ifdef CONFIG_KEXEC_VERIFY_SIG
>> +typedef int (kexec_verify_sig_t)(const char *kernel_buf,
>> +				 unsigned long kernel_len);
>> +#endif
>> +
>> +struct kexec_file_ops {
>> +	kexec_probe_t *probe;
>> +	kexec_load_t *load;
>> +	kexec_cleanup_t *cleanup;
>> +#ifdef CONFIG_KEXEC_VERIFY_SIG
>> +	kexec_verify_sig_t *verify_sig;
>> +#endif
>> +};
>> +#endif
>> +
>>  struct kimage {
>>  	kimage_entry_t head;
>>  	kimage_entry_t *entry;
>> @@ -161,6 +179,7 @@ struct kimage {
>>  	struct kimage_arch arch;
>>  #endif
>>  
>> +#ifdef CONFIG_KEXEC_FILE
>>  	/* Additional fields for file based kexec syscall */
>>  	void *kernel_buf;
>>  	unsigned long kernel_buf_len;
>> @@ -179,38 +198,7 @@ struct kimage {
>>  
>>  	/* Information for loading purgatory */
>>  	struct purgatory_info purgatory_info;
>> -};
>> -
>> -/*
>> - * Keeps track of buffer parameters as provided by caller for requesting
>> - * memory placement of buffer.
>> - */
>> -struct kexec_buf {
>> -	struct kimage *image;
>> -	char *buffer;
>> -	unsigned long bufsz;
>> -	unsigned long mem;
>> -	unsigned long memsz;
>> -	unsigned long buf_align;
>> -	unsigned long buf_min;
>> -	unsigned long buf_max;
>> -	bool top_down;		/* allocate from top of memory hole */
>> -};
>> -
>> -typedef int (kexec_probe_t)(const char *kernel_buf, unsigned long kernel_size);
>> -typedef void *(kexec_load_t)(struct kimage *image, char *kernel_buf,
>> -			     unsigned long kernel_len, char *initrd,
>> -			     unsigned long initrd_len, char *cmdline,
>> -			     unsigned long cmdline_len);
>> -typedef int (kexec_cleanup_t)(void *loader_data);
>> -typedef int (kexec_verify_sig_t)(const char *kernel_buf,
>> -				 unsigned long kernel_len);
>> -
>> -struct kexec_file_ops {
>> -	kexec_probe_t *probe;
>> -	kexec_load_t *load;
>> -	kexec_cleanup_t *cleanup;
>> -	kexec_verify_sig_t *verify_sig;
>> +#endif
>>  };
>>  
>>  /* kexec interface functions */
> Hi, Xunlei.
>
> Following functions will be used only in kexec_file. Please wrap them in
> CONFIG_KEXEC_FILE.
>
> int __weak arch_kexec_kernel_image_probe(struct kimage *image, void *buf,
> 					 unsigned long buf_len);
> void * __weak arch_kexec_kernel_image_load(struct kimage *image);
> int __weak arch_kimage_file_post_load_cleanup(struct kimage *image);
> int __weak arch_kexec_kernel_verify_sig(struct kimage *image, void *buf,
> 					unsigned long buf_len);
> int __weak arch_kexec_apply_relocations_add(const Elf_Ehdr *ehdr,
> 					Elf_Shdr *sechdrs, unsigned int relsec);
> int __weak arch_kexec_apply_relocations(const Elf_Ehdr *ehdr, Elf_Shdr *sechdrs,
> 					unsigned int relsec);

Thanks for the comment.

I noticed this as well, but seems for the function declarations we don't need do this,
since they don't consume the actual space.

For example, in the include/linux/timekeeping.h
/*  
 * RTC specific
 */ 
extern bool timekeeping_rtc_skipsuspend(void);
extern bool timekeeping_rtc_skipresume(void);

extern void timekeeping_inject_sleeptime64(struct timespec64 *delta);

also not embraced by the corresponding macros.

Regards,
Xunlei

>
> Thanks
> Minfei


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

WARNING: multiple messages have this Message-ID (diff)
From: Xunlei Pang <xlpang@redhat.com>
To: Minfei Huang <mhuang@redhat.com>
Cc: linux-kernel@vger.kernel.org, kexec@lists.infradead.org,
	akpm@linux-foundation.org, dyoung@redhat.com,
	ebiederm@xmission.com
Subject: Re: [PATCH] kexec: Move some memembers and definitions within the scope of CONFIG_KEXEC_FILE
Date: Tue, 22 Dec 2015 19:40:39 +0800	[thread overview]
Message-ID: <567936B7.5020702@redhat.com> (raw)
In-Reply-To: <20151222104704.GA28313@dhcp-128-25.nay.redhat.com>

On 12/22/2015 at 06:47 PM, Minfei Huang wrote:
> On 12/21/15 at 02:09pm, Xunlei Pang wrote:
>> diff --git a/include/linux/kexec.h b/include/linux/kexec.h
>> index 7b68d27..2cc643c 100644
>> --- a/include/linux/kexec.h
>> +++ b/include/linux/kexec.h
>> @@ -109,11 +109,7 @@ struct compat_kexec_segment {
>>  };
>>  #endif
>>  
>> -struct kexec_sha_region {
>> -	unsigned long start;
>> -	unsigned long len;
>> -};
>> -
>> +#ifdef CONFIG_KEXEC_FILE
>>  struct purgatory_info {
>>  	/* Pointer to elf header of read only purgatory */
>>  	Elf_Ehdr *ehdr;
>> @@ -130,6 +126,28 @@ struct purgatory_info {
>>  	unsigned long purgatory_load_addr;
>>  };
>>  
>> +typedef int (kexec_probe_t)(const char *kernel_buf, unsigned long kernel_size);
>> +typedef void *(kexec_load_t)(struct kimage *image, char *kernel_buf,
>> +			     unsigned long kernel_len, char *initrd,
>> +			     unsigned long initrd_len, char *cmdline,
>> +			     unsigned long cmdline_len);
>> +typedef int (kexec_cleanup_t)(void *loader_data);
>> +
>> +#ifdef CONFIG_KEXEC_VERIFY_SIG
>> +typedef int (kexec_verify_sig_t)(const char *kernel_buf,
>> +				 unsigned long kernel_len);
>> +#endif
>> +
>> +struct kexec_file_ops {
>> +	kexec_probe_t *probe;
>> +	kexec_load_t *load;
>> +	kexec_cleanup_t *cleanup;
>> +#ifdef CONFIG_KEXEC_VERIFY_SIG
>> +	kexec_verify_sig_t *verify_sig;
>> +#endif
>> +};
>> +#endif
>> +
>>  struct kimage {
>>  	kimage_entry_t head;
>>  	kimage_entry_t *entry;
>> @@ -161,6 +179,7 @@ struct kimage {
>>  	struct kimage_arch arch;
>>  #endif
>>  
>> +#ifdef CONFIG_KEXEC_FILE
>>  	/* Additional fields for file based kexec syscall */
>>  	void *kernel_buf;
>>  	unsigned long kernel_buf_len;
>> @@ -179,38 +198,7 @@ struct kimage {
>>  
>>  	/* Information for loading purgatory */
>>  	struct purgatory_info purgatory_info;
>> -};
>> -
>> -/*
>> - * Keeps track of buffer parameters as provided by caller for requesting
>> - * memory placement of buffer.
>> - */
>> -struct kexec_buf {
>> -	struct kimage *image;
>> -	char *buffer;
>> -	unsigned long bufsz;
>> -	unsigned long mem;
>> -	unsigned long memsz;
>> -	unsigned long buf_align;
>> -	unsigned long buf_min;
>> -	unsigned long buf_max;
>> -	bool top_down;		/* allocate from top of memory hole */
>> -};
>> -
>> -typedef int (kexec_probe_t)(const char *kernel_buf, unsigned long kernel_size);
>> -typedef void *(kexec_load_t)(struct kimage *image, char *kernel_buf,
>> -			     unsigned long kernel_len, char *initrd,
>> -			     unsigned long initrd_len, char *cmdline,
>> -			     unsigned long cmdline_len);
>> -typedef int (kexec_cleanup_t)(void *loader_data);
>> -typedef int (kexec_verify_sig_t)(const char *kernel_buf,
>> -				 unsigned long kernel_len);
>> -
>> -struct kexec_file_ops {
>> -	kexec_probe_t *probe;
>> -	kexec_load_t *load;
>> -	kexec_cleanup_t *cleanup;
>> -	kexec_verify_sig_t *verify_sig;
>> +#endif
>>  };
>>  
>>  /* kexec interface functions */
> Hi, Xunlei.
>
> Following functions will be used only in kexec_file. Please wrap them in
> CONFIG_KEXEC_FILE.
>
> int __weak arch_kexec_kernel_image_probe(struct kimage *image, void *buf,
> 					 unsigned long buf_len);
> void * __weak arch_kexec_kernel_image_load(struct kimage *image);
> int __weak arch_kimage_file_post_load_cleanup(struct kimage *image);
> int __weak arch_kexec_kernel_verify_sig(struct kimage *image, void *buf,
> 					unsigned long buf_len);
> int __weak arch_kexec_apply_relocations_add(const Elf_Ehdr *ehdr,
> 					Elf_Shdr *sechdrs, unsigned int relsec);
> int __weak arch_kexec_apply_relocations(const Elf_Ehdr *ehdr, Elf_Shdr *sechdrs,
> 					unsigned int relsec);

Thanks for the comment.

I noticed this as well, but seems for the function declarations we don't need do this,
since they don't consume the actual space.

For example, in the include/linux/timekeeping.h
/*  
 * RTC specific
 */ 
extern bool timekeeping_rtc_skipsuspend(void);
extern bool timekeeping_rtc_skipresume(void);

extern void timekeeping_inject_sleeptime64(struct timespec64 *delta);

also not embraced by the corresponding macros.

Regards,
Xunlei

>
> Thanks
> Minfei


  reply	other threads:[~2015-12-22 11:41 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-21  6:09 [PATCH] kexec: Move some memembers and definitions within the scope of CONFIG_KEXEC_FILE Xunlei Pang
2015-12-21  6:09 ` Xunlei Pang
2015-12-22 10:47 ` Minfei Huang
2015-12-22 10:47   ` Minfei Huang
2015-12-22 11:40   ` Xunlei Pang [this message]
2015-12-22 11:40     ` Xunlei Pang
2015-12-22 12:05     ` Minfei Huang
2015-12-22 12:05       ` Minfei Huang
2015-12-22 21:14     ` Andrew Morton
2015-12-22 21:14       ` Andrew Morton

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=567936B7.5020702@redhat.com \
    --to=xlpang@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=dyoung@redhat.com \
    --cc=ebiederm@xmission.com \
    --cc=kexec@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhuang@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.