linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] kexec: Drop __weak attributes from functions
@ 2022-07-01  7:34 Naveen N. Rao
  2022-07-01  7:34 ` [PATCH 1/2] kexec_file: Drop weak attribute " Naveen N. Rao
  2022-07-01  7:34 ` [PATCH 2/2] kexec: " Naveen N. Rao
  0 siblings, 2 replies; 6+ messages in thread
From: Naveen N. Rao @ 2022-07-01  7:34 UTC (permalink / raw)
  To: Andrew Morton, Eric Biederman; +Cc: linux-kernel, kexec

As requested [1], this series converts weak functions in kexec to use 
the #ifdef approach. I have compile-tested this series on arm64, 
powerpc, s390 and x86_64.

- Naveen

[1] http://lkml.kernel.org/r/87ee0q7b92.fsf@email.froward.int.ebiederm.org


Naveen N. Rao (2):
  kexec_file: Drop weak attribute from functions
  kexec: Drop weak attribute from functions

 arch/arm64/include/asm/kexec.h   | 18 +++++++-
 arch/powerpc/include/asm/kexec.h | 14 ++++++
 arch/s390/include/asm/kexec.h    | 14 ++++++
 arch/x86/include/asm/kexec.h     | 12 +++++
 include/linux/kexec.h            | 76 +++++++++++++++++++++++++++-----
 kernel/kexec_core.c              | 27 ------------
 kernel/kexec_file.c              | 35 +--------------
 7 files changed, 124 insertions(+), 72 deletions(-)


base-commit: 13fa82df3449770de37197fa51b610ffc788f555
-- 
2.36.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/2] kexec_file: Drop weak attribute from functions
  2022-07-01  7:34 [PATCH 0/2] kexec: Drop __weak attributes from functions Naveen N. Rao
@ 2022-07-01  7:34 ` Naveen N. Rao
  2022-07-04  4:10   ` Baoquan He
  2022-07-01  7:34 ` [PATCH 2/2] kexec: " Naveen N. Rao
  1 sibling, 1 reply; 6+ messages in thread
From: Naveen N. Rao @ 2022-07-01  7:34 UTC (permalink / raw)
  To: Andrew Morton, Eric Biederman; +Cc: linux-kernel, kexec

Drop __weak attribute from functions in kexec_file.c:
- arch_kexec_kernel_image_probe()
- arch_kimage_file_post_load_cleanup()
- arch_kexec_kernel_image_load()
- arch_kexec_locate_mem_hole()
- arch_kexec_kernel_verify_sig()

arch_kexec_kernel_image_load() calls into kexec_image_load_default(), so
drop the static attribute for the latter.

arch_kexec_kernel_verify_sig() is not overridden by any architecture, so
drop the __weak attribute.

Suggested-by: Eric Biederman <ebiederm@xmission.com>
Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
---
 arch/arm64/include/asm/kexec.h   |  4 ++-
 arch/powerpc/include/asm/kexec.h |  9 +++++++
 arch/s390/include/asm/kexec.h    |  3 +++
 arch/x86/include/asm/kexec.h     |  6 +++++
 include/linux/kexec.h            | 44 +++++++++++++++++++++++++++-----
 kernel/kexec_file.c              | 35 ++-----------------------
 6 files changed, 61 insertions(+), 40 deletions(-)

diff --git a/arch/arm64/include/asm/kexec.h b/arch/arm64/include/asm/kexec.h
index 9839bfc163d714..78d272b26ebd11 100644
--- a/arch/arm64/include/asm/kexec.h
+++ b/arch/arm64/include/asm/kexec.h
@@ -115,7 +115,9 @@ extern const struct kexec_file_ops kexec_image_ops;
 
 struct kimage;
 
-extern int arch_kimage_file_post_load_cleanup(struct kimage *image);
+int arch_kimage_file_post_load_cleanup(struct kimage *image);
+#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup
+
 extern int load_other_segments(struct kimage *image,
 		unsigned long kernel_load_addr, unsigned long kernel_size,
 		char *initrd, unsigned long initrd_len,
diff --git a/arch/powerpc/include/asm/kexec.h b/arch/powerpc/include/asm/kexec.h
index 2aefe14e144229..1e5e9b6ec78d9d 100644
--- a/arch/powerpc/include/asm/kexec.h
+++ b/arch/powerpc/include/asm/kexec.h
@@ -120,6 +120,15 @@ int setup_purgatory(struct kimage *image, const void *slave_code,
 #ifdef CONFIG_PPC64
 struct kexec_buf;
 
+int arch_kexec_kernel_image_probe(struct kimage *image, void *buf, unsigned long buf_len);
+#define arch_kexec_kernel_image_probe arch_kexec_kernel_image_probe
+
+int arch_kimage_file_post_load_cleanup(struct kimage *image);
+#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup
+
+int arch_kexec_locate_mem_hole(struct kexec_buf *kbuf);
+#define arch_kexec_locate_mem_hole arch_kexec_locate_mem_hole
+
 int load_crashdump_segments_ppc64(struct kimage *image,
 				  struct kexec_buf *kbuf);
 int setup_purgatory_ppc64(struct kimage *image, const void *slave_code,
diff --git a/arch/s390/include/asm/kexec.h b/arch/s390/include/asm/kexec.h
index 649ecdcc873453..8886aadc11a3a6 100644
--- a/arch/s390/include/asm/kexec.h
+++ b/arch/s390/include/asm/kexec.h
@@ -92,5 +92,8 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
 				     const Elf_Shdr *relsec,
 				     const Elf_Shdr *symtab);
 #define arch_kexec_apply_relocations_add arch_kexec_apply_relocations_add
+
+int arch_kimage_file_post_load_cleanup(struct kimage *image);
+#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup
 #endif
 #endif /*_S390_KEXEC_H */
diff --git a/arch/x86/include/asm/kexec.h b/arch/x86/include/asm/kexec.h
index 6ad8d946cd3ebf..5ec359c1b50cb3 100644
--- a/arch/x86/include/asm/kexec.h
+++ b/arch/x86/include/asm/kexec.h
@@ -193,6 +193,12 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
 				     const Elf_Shdr *relsec,
 				     const Elf_Shdr *symtab);
 #define arch_kexec_apply_relocations_add arch_kexec_apply_relocations_add
+
+void *arch_kexec_kernel_image_load(struct kimage *image);
+#define arch_kexec_kernel_image_load arch_kexec_kernel_image_load
+
+int arch_kimage_file_post_load_cleanup(struct kimage *image);
+#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup
 #endif
 #endif
 
diff --git a/include/linux/kexec.h b/include/linux/kexec.h
index ce6536f1d26997..5e0bc3f9eac3e9 100644
--- a/include/linux/kexec.h
+++ b/include/linux/kexec.h
@@ -188,21 +188,53 @@ int kexec_purgatory_get_set_symbol(struct kimage *image, const char *name,
 				   void *buf, unsigned int size,
 				   bool get_value);
 void *kexec_purgatory_get_symbol_addr(struct kimage *image, const char *name);
+void *kexec_image_load_default(struct kimage *image);
+
+#ifndef arch_kexec_kernel_image_probe
+static inline int
+arch_kexec_kernel_image_probe(struct kimage *image, void *buf, unsigned long buf_len)
+{
+	return kexec_image_probe_default(image, buf, buf_len);
+}
+#endif
+
+#ifndef arch_kimage_file_post_load_cleanup
+static inline int arch_kimage_file_post_load_cleanup(struct kimage *image)
+{
+	return kexec_image_post_load_cleanup_default(image);
+}
+#endif
+
+#ifndef arch_kexec_kernel_image_load
+static inline void *arch_kexec_kernel_image_load(struct kimage *image)
+{
+	return kexec_image_load_default(image);
+}
+#endif
 
-/* Architectures may override the below functions */
-int arch_kexec_kernel_image_probe(struct kimage *image, void *buf,
-				  unsigned long buf_len);
-void *arch_kexec_kernel_image_load(struct kimage *image);
-int arch_kimage_file_post_load_cleanup(struct kimage *image);
 #ifdef CONFIG_KEXEC_SIG
 int arch_kexec_kernel_verify_sig(struct kimage *image, void *buf,
 				 unsigned long buf_len);
 #endif
-int arch_kexec_locate_mem_hole(struct kexec_buf *kbuf);
 
 extern int kexec_add_buffer(struct kexec_buf *kbuf);
 int kexec_locate_mem_hole(struct kexec_buf *kbuf);
 
+#ifndef arch_kexec_locate_mem_hole
+/**
+ * arch_kexec_locate_mem_hole - Find free memory to place the segments.
+ * @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.
+ */
+static inline int arch_kexec_locate_mem_hole(struct kexec_buf *kbuf)
+{
+	return kexec_locate_mem_hole(kbuf);
+}
+#endif
+
 /* Alignment required for elf header segment */
 #define ELF_CORE_HEADER_ALIGN   4096
 
diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c
index 9b2839775c837b..66e4ce29fc6961 100644
--- a/kernel/kexec_file.c
+++ b/kernel/kexec_file.c
@@ -56,14 +56,7 @@ int kexec_image_probe_default(struct kimage *image, void *buf,
 	return ret;
 }
 
-/* Architectures can provide this probe function */
-int __weak arch_kexec_kernel_image_probe(struct kimage *image, void *buf,
-					 unsigned long buf_len)
-{
-	return kexec_image_probe_default(image, buf, buf_len);
-}
-
-static void *kexec_image_load_default(struct kimage *image)
+void *kexec_image_load_default(struct kimage *image)
 {
 	if (!image->fops || !image->fops->load)
 		return ERR_PTR(-ENOEXEC);
@@ -74,11 +67,6 @@ static void *kexec_image_load_default(struct kimage *image)
 				 image->cmdline_buf_len);
 }
 
-void * __weak arch_kexec_kernel_image_load(struct kimage *image)
-{
-	return kexec_image_load_default(image);
-}
-
 int kexec_image_post_load_cleanup_default(struct kimage *image)
 {
 	if (!image->fops || !image->fops->cleanup)
@@ -87,11 +75,6 @@ int kexec_image_post_load_cleanup_default(struct kimage *image)
 	return image->fops->cleanup(image->image_loader_data);
 }
 
-int __weak arch_kimage_file_post_load_cleanup(struct kimage *image)
-{
-	return kexec_image_post_load_cleanup_default(image);
-}
-
 #ifdef CONFIG_KEXEC_SIG
 static int kexec_image_verify_sig_default(struct kimage *image, void *buf,
 					  unsigned long buf_len)
@@ -104,8 +87,7 @@ static int kexec_image_verify_sig_default(struct kimage *image, void *buf,
 	return image->fops->verify_sig(buf, buf_len);
 }
 
-int __weak arch_kexec_kernel_verify_sig(struct kimage *image, void *buf,
-					unsigned long buf_len)
+int arch_kexec_kernel_verify_sig(struct kimage *image, void *buf, unsigned long buf_len)
 {
 	return kexec_image_verify_sig_default(image, buf, buf_len);
 }
@@ -616,19 +598,6 @@ int kexec_locate_mem_hole(struct kexec_buf *kbuf)
 	return ret == 1 ? 0 : -EADDRNOTAVAIL;
 }
 
-/**
- * arch_kexec_locate_mem_hole - Find free memory to place the segments.
- * @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 __weak arch_kexec_locate_mem_hole(struct kexec_buf *kbuf)
-{
-	return kexec_locate_mem_hole(kbuf);
-}
-
 /**
  * kexec_add_buffer - place a buffer in a kexec segment
  * @kbuf:	Buffer contents and memory parameters.
-- 
2.36.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/2] kexec: Drop weak attribute from functions
  2022-07-01  7:34 [PATCH 0/2] kexec: Drop __weak attributes from functions Naveen N. Rao
  2022-07-01  7:34 ` [PATCH 1/2] kexec_file: Drop weak attribute " Naveen N. Rao
@ 2022-07-01  7:34 ` Naveen N. Rao
  1 sibling, 0 replies; 6+ messages in thread
From: Naveen N. Rao @ 2022-07-01  7:34 UTC (permalink / raw)
  To: Andrew Morton, Eric Biederman; +Cc: linux-kernel, kexec

Drop __weak attribute from functions in kexec_core.c:
- machine_kexec_post_load()
- arch_kexec_protect_crashkres()
- arch_kexec_unprotect_crashkres()
- crash_free_reserved_phys_range()

Suggested-by: Eric Biederman <ebiederm@xmission.com>
Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
---
 arch/arm64/include/asm/kexec.h   | 16 ++++++++++++++--
 arch/powerpc/include/asm/kexec.h |  5 +++++
 arch/s390/include/asm/kexec.h    | 11 +++++++++++
 arch/x86/include/asm/kexec.h     |  6 ++++++
 include/linux/kexec.h            | 32 ++++++++++++++++++++++++++++----
 kernel/kexec_core.c              | 27 ---------------------------
 6 files changed, 64 insertions(+), 33 deletions(-)

diff --git a/arch/arm64/include/asm/kexec.h b/arch/arm64/include/asm/kexec.h
index 78d272b26ebd11..559bfae267153d 100644
--- a/arch/arm64/include/asm/kexec.h
+++ b/arch/arm64/include/asm/kexec.h
@@ -84,16 +84,30 @@ static inline void crash_setup_regs(struct pt_regs *newregs,
 extern bool crash_is_nosave(unsigned long pfn);
 extern void crash_prepare_suspend(void);
 extern void crash_post_resume(void);
+
+void crash_free_reserved_phys_range(unsigned long begin, unsigned long end);
+#define crash_free_reserved_phys_range crash_free_reserved_phys_range
 #else
 static inline bool crash_is_nosave(unsigned long pfn) {return false; }
 static inline void crash_prepare_suspend(void) {}
 static inline void crash_post_resume(void) {}
 #endif
 
+struct kimage;
+
 #if defined(CONFIG_KEXEC_CORE)
 void cpu_soft_restart(unsigned long el2_switch, unsigned long entry,
 		      unsigned long arg0, unsigned long arg1,
 		      unsigned long arg2);
+
+int machine_kexec_post_load(struct kimage *image);
+#define machine_kexec_post_load machine_kexec_post_load
+
+void arch_kexec_protect_crashkres(void);
+#define arch_kexec_protect_crashkres arch_kexec_protect_crashkres
+
+void arch_kexec_unprotect_crashkres(void);
+#define arch_kexec_unprotect_crashkres arch_kexec_unprotect_crashkres
 #endif
 
 #define ARCH_HAS_KIMAGE_ARCH
@@ -113,8 +127,6 @@ struct kimage_arch {
 #ifdef CONFIG_KEXEC_FILE
 extern const struct kexec_file_ops kexec_image_ops;
 
-struct kimage;
-
 int arch_kimage_file_post_load_cleanup(struct kimage *image);
 #define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup
 
diff --git a/arch/powerpc/include/asm/kexec.h b/arch/powerpc/include/asm/kexec.h
index 1e5e9b6ec78d9d..d6f4edfe4737ba 100644
--- a/arch/powerpc/include/asm/kexec.h
+++ b/arch/powerpc/include/asm/kexec.h
@@ -98,6 +98,11 @@ void relocate_new_kernel(unsigned long indirection_page, unsigned long reboot_co
 
 void kexec_copy_flush(struct kimage *image);
 
+#if defined(CONFIG_CRASH_DUMP) && defined(CONFIG_PPC_RTAS)
+void crash_free_reserved_phys_range(unsigned long begin, unsigned long end);
+#define crash_free_reserved_phys_range crash_free_reserved_phys_range
+#endif
+
 #ifdef CONFIG_KEXEC_FILE
 extern const struct kexec_file_ops kexec_elf64_ops;
 
diff --git a/arch/s390/include/asm/kexec.h b/arch/s390/include/asm/kexec.h
index 8886aadc11a3a6..1bd08eb56d5fc7 100644
--- a/arch/s390/include/asm/kexec.h
+++ b/arch/s390/include/asm/kexec.h
@@ -85,6 +85,17 @@ struct kimage_arch {
 extern const struct kexec_file_ops s390_kexec_image_ops;
 extern const struct kexec_file_ops s390_kexec_elf_ops;
 
+#ifdef CONFIG_CRASH_DUMP
+void crash_free_reserved_phys_range(unsigned long begin, unsigned long end);
+#define crash_free_reserved_phys_range crash_free_reserved_phys_range
+
+void arch_kexec_protect_crashkres(void);
+#define arch_kexec_protect_crashkres arch_kexec_protect_crashkres
+
+void arch_kexec_unprotect_crashkres(void);
+#define arch_kexec_unprotect_crashkres arch_kexec_unprotect_crashkres
+#endif
+
 #ifdef CONFIG_KEXEC_FILE
 struct purgatory_info;
 int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
diff --git a/arch/x86/include/asm/kexec.h b/arch/x86/include/asm/kexec.h
index 5ec359c1b50cb3..a3760ca796aa24 100644
--- a/arch/x86/include/asm/kexec.h
+++ b/arch/x86/include/asm/kexec.h
@@ -186,6 +186,12 @@ extern int arch_kexec_post_alloc_pages(void *vaddr, unsigned int pages,
 extern void arch_kexec_pre_free_pages(void *vaddr, unsigned int pages);
 #define arch_kexec_pre_free_pages arch_kexec_pre_free_pages
 
+void arch_kexec_protect_crashkres(void);
+#define arch_kexec_protect_crashkres arch_kexec_protect_crashkres
+
+void arch_kexec_unprotect_crashkres(void);
+#define arch_kexec_unprotect_crashkres arch_kexec_unprotect_crashkres
+
 #ifdef CONFIG_KEXEC_FILE
 struct purgatory_info;
 int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
diff --git a/include/linux/kexec.h b/include/linux/kexec.h
index 5e0bc3f9eac3e9..c358c51c10708d 100644
--- a/include/linux/kexec.h
+++ b/include/linux/kexec.h
@@ -390,7 +390,10 @@ extern void machine_kexec_cleanup(struct kimage *image);
 extern int kernel_kexec(void);
 extern struct page *kimage_alloc_control_pages(struct kimage *image,
 						unsigned int order);
-int machine_kexec_post_load(struct kimage *image);
+
+#ifndef machine_kexec_post_load
+static inline int machine_kexec_post_load(struct kimage *image) { return 0; }
+#endif
 
 extern void __crash_kexec(struct pt_regs *);
 extern void crash_kexec(struct pt_regs *);
@@ -423,10 +426,21 @@ extern bool kexec_in_progress;
 
 int crash_shrink_memory(unsigned long new_size);
 size_t crash_get_memory_size(void);
-void crash_free_reserved_phys_range(unsigned long begin, unsigned long end);
 
-void arch_kexec_protect_crashkres(void);
-void arch_kexec_unprotect_crashkres(void);
+#ifndef arch_kexec_protect_crashkres
+/*
+ * Protection mechanism for crashkernel reserved memory after
+ * the kdump kernel is loaded.
+ *
+ * Provide an empty default implementation here -- architecture
+ * code may override this
+ */
+static inline void arch_kexec_protect_crashkres(void) { }
+#endif
+
+#ifndef arch_kexec_unprotect_crashkres
+static inline void arch_kexec_unprotect_crashkres(void) { }
+#endif
 
 #ifndef page_to_boot_pfn
 static inline unsigned long page_to_boot_pfn(struct page *page)
@@ -456,6 +470,16 @@ static inline phys_addr_t boot_phys_to_phys(unsigned long boot_phys)
 }
 #endif
 
+#ifndef crash_free_reserved_phys_range
+static inline void crash_free_reserved_phys_range(unsigned long begin, unsigned long end)
+{
+	unsigned long addr;
+
+	for (addr = begin; addr < end; addr += PAGE_SIZE)
+		free_reserved_page(boot_pfn_to_page(addr >> PAGE_SHIFT));
+}
+#endif
+
 static inline unsigned long virt_to_boot_phys(void *addr)
 {
 	return phys_to_boot_phys(__pa((unsigned long)addr));
diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c
index 4d34c78334ce41..acd029b307e42d 100644
--- a/kernel/kexec_core.c
+++ b/kernel/kexec_core.c
@@ -591,11 +591,6 @@ static void kimage_free_extra_pages(struct kimage *image)
 
 }
 
-int __weak machine_kexec_post_load(struct kimage *image)
-{
-	return 0;
-}
-
 void kimage_terminate(struct kimage *image)
 {
 	if (*image->entry != 0)
@@ -1020,15 +1015,6 @@ size_t crash_get_memory_size(void)
 	return size;
 }
 
-void __weak crash_free_reserved_phys_range(unsigned long begin,
-					   unsigned long end)
-{
-	unsigned long addr;
-
-	for (addr = begin; addr < end; addr += PAGE_SIZE)
-		free_reserved_page(boot_pfn_to_page(addr >> PAGE_SHIFT));
-}
-
 int crash_shrink_memory(unsigned long new_size)
 {
 	int ret = 0;
@@ -1225,16 +1211,3 @@ int kernel_kexec(void)
 	mutex_unlock(&kexec_mutex);
 	return error;
 }
-
-/*
- * Protection mechanism for crashkernel reserved memory after
- * the kdump kernel is loaded.
- *
- * Provide an empty default implementation here -- architecture
- * code may override this
- */
-void __weak arch_kexec_protect_crashkres(void)
-{}
-
-void __weak arch_kexec_unprotect_crashkres(void)
-{}
-- 
2.36.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] kexec_file: Drop weak attribute from functions
  2022-07-01  7:34 ` [PATCH 1/2] kexec_file: Drop weak attribute " Naveen N. Rao
@ 2022-07-04  4:10   ` Baoquan He
  2022-07-06  1:53     ` Coiby Xu
  0 siblings, 1 reply; 6+ messages in thread
From: Baoquan He @ 2022-07-04  4:10 UTC (permalink / raw)
  To: Naveen N. Rao, coxu; +Cc: Andrew Morton, Eric Biederman, linux-kernel, kexec

On 07/01/22 at 01:04pm, Naveen N. Rao wrote:
> Drop __weak attribute from functions in kexec_file.c:
> - arch_kexec_kernel_image_probe()
> - arch_kimage_file_post_load_cleanup()
> - arch_kexec_kernel_image_load()
> - arch_kexec_locate_mem_hole()
> - arch_kexec_kernel_verify_sig()
> 
> arch_kexec_kernel_image_load() calls into kexec_image_load_default(), so
> drop the static attribute for the latter.
> 
> arch_kexec_kernel_verify_sig() is not overridden by any architecture, so
> drop the __weak attribute.

The dropping of arch_kexec_kernel_verify_sig() conflicts with patch 1 of
anotherpatchset, and the other patches in the patchset depends on the
patch 1.

[PATCH v9 0/4] unify the keyrings of arm64 and s390 with x86 to verify kexec'ed kernel signature

Hi, Naveen, Coiby, 

Please negotiate how to solve the conflict.

Thanks
Baoquan

> 
> Suggested-by: Eric Biederman <ebiederm@xmission.com>
> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
> ---
>  arch/arm64/include/asm/kexec.h   |  4 ++-
>  arch/powerpc/include/asm/kexec.h |  9 +++++++
>  arch/s390/include/asm/kexec.h    |  3 +++
>  arch/x86/include/asm/kexec.h     |  6 +++++
>  include/linux/kexec.h            | 44 +++++++++++++++++++++++++++-----
>  kernel/kexec_file.c              | 35 ++-----------------------
>  6 files changed, 61 insertions(+), 40 deletions(-)
> 
> diff --git a/arch/arm64/include/asm/kexec.h b/arch/arm64/include/asm/kexec.h
> index 9839bfc163d714..78d272b26ebd11 100644
> --- a/arch/arm64/include/asm/kexec.h
> +++ b/arch/arm64/include/asm/kexec.h
> @@ -115,7 +115,9 @@ extern const struct kexec_file_ops kexec_image_ops;
>  
>  struct kimage;
>  
> -extern int arch_kimage_file_post_load_cleanup(struct kimage *image);
> +int arch_kimage_file_post_load_cleanup(struct kimage *image);
> +#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup
> +
>  extern int load_other_segments(struct kimage *image,
>  		unsigned long kernel_load_addr, unsigned long kernel_size,
>  		char *initrd, unsigned long initrd_len,
> diff --git a/arch/powerpc/include/asm/kexec.h b/arch/powerpc/include/asm/kexec.h
> index 2aefe14e144229..1e5e9b6ec78d9d 100644
> --- a/arch/powerpc/include/asm/kexec.h
> +++ b/arch/powerpc/include/asm/kexec.h
> @@ -120,6 +120,15 @@ int setup_purgatory(struct kimage *image, const void *slave_code,
>  #ifdef CONFIG_PPC64
>  struct kexec_buf;
>  
> +int arch_kexec_kernel_image_probe(struct kimage *image, void *buf, unsigned long buf_len);
> +#define arch_kexec_kernel_image_probe arch_kexec_kernel_image_probe
> +
> +int arch_kimage_file_post_load_cleanup(struct kimage *image);
> +#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup
> +
> +int arch_kexec_locate_mem_hole(struct kexec_buf *kbuf);
> +#define arch_kexec_locate_mem_hole arch_kexec_locate_mem_hole
> +
>  int load_crashdump_segments_ppc64(struct kimage *image,
>  				  struct kexec_buf *kbuf);
>  int setup_purgatory_ppc64(struct kimage *image, const void *slave_code,
> diff --git a/arch/s390/include/asm/kexec.h b/arch/s390/include/asm/kexec.h
> index 649ecdcc873453..8886aadc11a3a6 100644
> --- a/arch/s390/include/asm/kexec.h
> +++ b/arch/s390/include/asm/kexec.h
> @@ -92,5 +92,8 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
>  				     const Elf_Shdr *relsec,
>  				     const Elf_Shdr *symtab);
>  #define arch_kexec_apply_relocations_add arch_kexec_apply_relocations_add
> +
> +int arch_kimage_file_post_load_cleanup(struct kimage *image);
> +#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup
>  #endif
>  #endif /*_S390_KEXEC_H */
> diff --git a/arch/x86/include/asm/kexec.h b/arch/x86/include/asm/kexec.h
> index 6ad8d946cd3ebf..5ec359c1b50cb3 100644
> --- a/arch/x86/include/asm/kexec.h
> +++ b/arch/x86/include/asm/kexec.h
> @@ -193,6 +193,12 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
>  				     const Elf_Shdr *relsec,
>  				     const Elf_Shdr *symtab);
>  #define arch_kexec_apply_relocations_add arch_kexec_apply_relocations_add
> +
> +void *arch_kexec_kernel_image_load(struct kimage *image);
> +#define arch_kexec_kernel_image_load arch_kexec_kernel_image_load
> +
> +int arch_kimage_file_post_load_cleanup(struct kimage *image);
> +#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup
>  #endif
>  #endif
>  
> diff --git a/include/linux/kexec.h b/include/linux/kexec.h
> index ce6536f1d26997..5e0bc3f9eac3e9 100644
> --- a/include/linux/kexec.h
> +++ b/include/linux/kexec.h
> @@ -188,21 +188,53 @@ int kexec_purgatory_get_set_symbol(struct kimage *image, const char *name,
>  				   void *buf, unsigned int size,
>  				   bool get_value);
>  void *kexec_purgatory_get_symbol_addr(struct kimage *image, const char *name);
> +void *kexec_image_load_default(struct kimage *image);
> +
> +#ifndef arch_kexec_kernel_image_probe
> +static inline int
> +arch_kexec_kernel_image_probe(struct kimage *image, void *buf, unsigned long buf_len)
> +{
> +	return kexec_image_probe_default(image, buf, buf_len);
> +}
> +#endif
> +
> +#ifndef arch_kimage_file_post_load_cleanup
> +static inline int arch_kimage_file_post_load_cleanup(struct kimage *image)
> +{
> +	return kexec_image_post_load_cleanup_default(image);
> +}
> +#endif
> +
> +#ifndef arch_kexec_kernel_image_load
> +static inline void *arch_kexec_kernel_image_load(struct kimage *image)
> +{
> +	return kexec_image_load_default(image);
> +}
> +#endif
>  
> -/* Architectures may override the below functions */
> -int arch_kexec_kernel_image_probe(struct kimage *image, void *buf,
> -				  unsigned long buf_len);
> -void *arch_kexec_kernel_image_load(struct kimage *image);
> -int arch_kimage_file_post_load_cleanup(struct kimage *image);
>  #ifdef CONFIG_KEXEC_SIG
>  int arch_kexec_kernel_verify_sig(struct kimage *image, void *buf,
>  				 unsigned long buf_len);
>  #endif
> -int arch_kexec_locate_mem_hole(struct kexec_buf *kbuf);
>  
>  extern int kexec_add_buffer(struct kexec_buf *kbuf);
>  int kexec_locate_mem_hole(struct kexec_buf *kbuf);
>  
> +#ifndef arch_kexec_locate_mem_hole
> +/**
> + * arch_kexec_locate_mem_hole - Find free memory to place the segments.
> + * @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.
> + */
> +static inline int arch_kexec_locate_mem_hole(struct kexec_buf *kbuf)
> +{
> +	return kexec_locate_mem_hole(kbuf);
> +}
> +#endif
> +
>  /* Alignment required for elf header segment */
>  #define ELF_CORE_HEADER_ALIGN   4096
>  
> diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c
> index 9b2839775c837b..66e4ce29fc6961 100644
> --- a/kernel/kexec_file.c
> +++ b/kernel/kexec_file.c
> @@ -56,14 +56,7 @@ int kexec_image_probe_default(struct kimage *image, void *buf,
>  	return ret;
>  }
>  
> -/* Architectures can provide this probe function */
> -int __weak arch_kexec_kernel_image_probe(struct kimage *image, void *buf,
> -					 unsigned long buf_len)
> -{
> -	return kexec_image_probe_default(image, buf, buf_len);
> -}
> -
> -static void *kexec_image_load_default(struct kimage *image)
> +void *kexec_image_load_default(struct kimage *image)
>  {
>  	if (!image->fops || !image->fops->load)
>  		return ERR_PTR(-ENOEXEC);
> @@ -74,11 +67,6 @@ static void *kexec_image_load_default(struct kimage *image)
>  				 image->cmdline_buf_len);
>  }
>  
> -void * __weak arch_kexec_kernel_image_load(struct kimage *image)
> -{
> -	return kexec_image_load_default(image);
> -}
> -
>  int kexec_image_post_load_cleanup_default(struct kimage *image)
>  {
>  	if (!image->fops || !image->fops->cleanup)
> @@ -87,11 +75,6 @@ int kexec_image_post_load_cleanup_default(struct kimage *image)
>  	return image->fops->cleanup(image->image_loader_data);
>  }
>  
> -int __weak arch_kimage_file_post_load_cleanup(struct kimage *image)
> -{
> -	return kexec_image_post_load_cleanup_default(image);
> -}
> -
>  #ifdef CONFIG_KEXEC_SIG
>  static int kexec_image_verify_sig_default(struct kimage *image, void *buf,
>  					  unsigned long buf_len)
> @@ -104,8 +87,7 @@ static int kexec_image_verify_sig_default(struct kimage *image, void *buf,
>  	return image->fops->verify_sig(buf, buf_len);
>  }
>  
> -int __weak arch_kexec_kernel_verify_sig(struct kimage *image, void *buf,
> -					unsigned long buf_len)
> +int arch_kexec_kernel_verify_sig(struct kimage *image, void *buf, unsigned long buf_len)
>  {
>  	return kexec_image_verify_sig_default(image, buf, buf_len);
>  }
> @@ -616,19 +598,6 @@ int kexec_locate_mem_hole(struct kexec_buf *kbuf)
>  	return ret == 1 ? 0 : -EADDRNOTAVAIL;
>  }
>  
> -/**
> - * arch_kexec_locate_mem_hole - Find free memory to place the segments.
> - * @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 __weak arch_kexec_locate_mem_hole(struct kexec_buf *kbuf)
> -{
> -	return kexec_locate_mem_hole(kbuf);
> -}
> -
>  /**
>   * kexec_add_buffer - place a buffer in a kexec segment
>   * @kbuf:	Buffer contents and memory parameters.
> -- 
> 2.36.1
> 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] kexec_file: Drop weak attribute from functions
  2022-07-04  4:10   ` Baoquan He
@ 2022-07-06  1:53     ` Coiby Xu
  2022-07-06 11:00       ` Naveen N. Rao
  0 siblings, 1 reply; 6+ messages in thread
From: Coiby Xu @ 2022-07-06  1:53 UTC (permalink / raw)
  To: Baoquan He, Naveen N. Rao
  Cc: Andrew Morton, Eric Biederman, linux-kernel, kexec

Hi Baoquan and Naveen,

On Mon, Jul 04, 2022 at 12:10:00PM +0800, Baoquan He wrote:
>On 07/01/22 at 01:04pm, Naveen N. Rao wrote:
>> Drop __weak attribute from functions in kexec_file.c:
>> - arch_kexec_kernel_image_probe()
>> - arch_kimage_file_post_load_cleanup()
>> - arch_kexec_kernel_image_load()
>> - arch_kexec_locate_mem_hole()
>> - arch_kexec_kernel_verify_sig()
>>
>> arch_kexec_kernel_image_load() calls into kexec_image_load_default(), so
>> drop the static attribute for the latter.
>>
>> arch_kexec_kernel_verify_sig() is not overridden by any architecture, so
>> drop the __weak attribute.
>
>The dropping of arch_kexec_kernel_verify_sig() conflicts with patch 1 of
>anotherpatchset, and the other patches in the patchset depends on the
>patch 1.
>
>[PATCH v9 0/4] unify the keyrings of arm64 and s390 with x86 to verify kexec'ed kernel signature
>
>Hi, Naveen, Coiby,
>
>Please negotiate how to solve the conflict.

Thanks Baoquan for letting me know of this conflict. Naveen, how about
resolving the conflict based on which patch is merged first? If your
patch set is going to be merged early, I will resolve the conflict in my
patch set, and vice versa.

>
>Thanks
>Baoquan
>
>>
>> Suggested-by: Eric Biederman <ebiederm@xmission.com>
>> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
>> ---
>>  arch/arm64/include/asm/kexec.h   |  4 ++-
>>  arch/powerpc/include/asm/kexec.h |  9 +++++++
>>  arch/s390/include/asm/kexec.h    |  3 +++
>>  arch/x86/include/asm/kexec.h     |  6 +++++
>>  include/linux/kexec.h            | 44 +++++++++++++++++++++++++++-----
>>  kernel/kexec_file.c              | 35 ++-----------------------
>>  6 files changed, 61 insertions(+), 40 deletions(-)
>>
>> diff --git a/arch/arm64/include/asm/kexec.h b/arch/arm64/include/asm/kexec.h
>> index 9839bfc163d714..78d272b26ebd11 100644
>> --- a/arch/arm64/include/asm/kexec.h
>> +++ b/arch/arm64/include/asm/kexec.h
>> @@ -115,7 +115,9 @@ extern const struct kexec_file_ops kexec_image_ops;
>>
>>  struct kimage;
>>
>> -extern int arch_kimage_file_post_load_cleanup(struct kimage *image);
>> +int arch_kimage_file_post_load_cleanup(struct kimage *image);
>> +#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup
>> +
>>  extern int load_other_segments(struct kimage *image,
>>  		unsigned long kernel_load_addr, unsigned long kernel_size,
>>  		char *initrd, unsigned long initrd_len,
>> diff --git a/arch/powerpc/include/asm/kexec.h b/arch/powerpc/include/asm/kexec.h
>> index 2aefe14e144229..1e5e9b6ec78d9d 100644
>> --- a/arch/powerpc/include/asm/kexec.h
>> +++ b/arch/powerpc/include/asm/kexec.h
>> @@ -120,6 +120,15 @@ int setup_purgatory(struct kimage *image, const void *slave_code,
>>  #ifdef CONFIG_PPC64
>>  struct kexec_buf;
>>
>> +int arch_kexec_kernel_image_probe(struct kimage *image, void *buf, unsigned long buf_len);
>> +#define arch_kexec_kernel_image_probe arch_kexec_kernel_image_probe
>> +
>> +int arch_kimage_file_post_load_cleanup(struct kimage *image);
>> +#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup
>> +
>> +int arch_kexec_locate_mem_hole(struct kexec_buf *kbuf);
>> +#define arch_kexec_locate_mem_hole arch_kexec_locate_mem_hole
>> +
>>  int load_crashdump_segments_ppc64(struct kimage *image,
>>  				  struct kexec_buf *kbuf);
>>  int setup_purgatory_ppc64(struct kimage *image, const void *slave_code,
>> diff --git a/arch/s390/include/asm/kexec.h b/arch/s390/include/asm/kexec.h
>> index 649ecdcc873453..8886aadc11a3a6 100644
>> --- a/arch/s390/include/asm/kexec.h
>> +++ b/arch/s390/include/asm/kexec.h
>> @@ -92,5 +92,8 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
>>  				     const Elf_Shdr *relsec,
>>  				     const Elf_Shdr *symtab);
>>  #define arch_kexec_apply_relocations_add arch_kexec_apply_relocations_add
>> +
>> +int arch_kimage_file_post_load_cleanup(struct kimage *image);
>> +#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup
>>  #endif
>>  #endif /*_S390_KEXEC_H */
>> diff --git a/arch/x86/include/asm/kexec.h b/arch/x86/include/asm/kexec.h
>> index 6ad8d946cd3ebf..5ec359c1b50cb3 100644
>> --- a/arch/x86/include/asm/kexec.h
>> +++ b/arch/x86/include/asm/kexec.h
>> @@ -193,6 +193,12 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
>>  				     const Elf_Shdr *relsec,
>>  				     const Elf_Shdr *symtab);
>>  #define arch_kexec_apply_relocations_add arch_kexec_apply_relocations_add
>> +
>> +void *arch_kexec_kernel_image_load(struct kimage *image);
>> +#define arch_kexec_kernel_image_load arch_kexec_kernel_image_load
>> +
>> +int arch_kimage_file_post_load_cleanup(struct kimage *image);
>> +#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup
>>  #endif
>>  #endif
>>
>> diff --git a/include/linux/kexec.h b/include/linux/kexec.h
>> index ce6536f1d26997..5e0bc3f9eac3e9 100644
>> --- a/include/linux/kexec.h
>> +++ b/include/linux/kexec.h
>> @@ -188,21 +188,53 @@ int kexec_purgatory_get_set_symbol(struct kimage *image, const char *name,
>>  				   void *buf, unsigned int size,
>>  				   bool get_value);
>>  void *kexec_purgatory_get_symbol_addr(struct kimage *image, const char *name);
>> +void *kexec_image_load_default(struct kimage *image);
>> +
>> +#ifndef arch_kexec_kernel_image_probe
>> +static inline int
>> +arch_kexec_kernel_image_probe(struct kimage *image, void *buf, unsigned long buf_len)
>> +{
>> +	return kexec_image_probe_default(image, buf, buf_len);
>> +}
>> +#endif
>> +
>> +#ifndef arch_kimage_file_post_load_cleanup
>> +static inline int arch_kimage_file_post_load_cleanup(struct kimage *image)
>> +{
>> +	return kexec_image_post_load_cleanup_default(image);
>> +}
>> +#endif
>> +
>> +#ifndef arch_kexec_kernel_image_load
>> +static inline void *arch_kexec_kernel_image_load(struct kimage *image)
>> +{
>> +	return kexec_image_load_default(image);
>> +}
>> +#endif
>>
>> -/* Architectures may override the below functions */
>> -int arch_kexec_kernel_image_probe(struct kimage *image, void *buf,
>> -				  unsigned long buf_len);
>> -void *arch_kexec_kernel_image_load(struct kimage *image);
>> -int arch_kimage_file_post_load_cleanup(struct kimage *image);
>>  #ifdef CONFIG_KEXEC_SIG
>>  int arch_kexec_kernel_verify_sig(struct kimage *image, void *buf,
>>  				 unsigned long buf_len);
>>  #endif
>> -int arch_kexec_locate_mem_hole(struct kexec_buf *kbuf);
>>
>>  extern int kexec_add_buffer(struct kexec_buf *kbuf);
>>  int kexec_locate_mem_hole(struct kexec_buf *kbuf);
>>
>> +#ifndef arch_kexec_locate_mem_hole
>> +/**
>> + * arch_kexec_locate_mem_hole - Find free memory to place the segments.
>> + * @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.
>> + */
>> +static inline int arch_kexec_locate_mem_hole(struct kexec_buf *kbuf)
>> +{
>> +	return kexec_locate_mem_hole(kbuf);
>> +}
>> +#endif
>> +
>>  /* Alignment required for elf header segment */
>>  #define ELF_CORE_HEADER_ALIGN   4096
>>
>> diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c
>> index 9b2839775c837b..66e4ce29fc6961 100644
>> --- a/kernel/kexec_file.c
>> +++ b/kernel/kexec_file.c
>> @@ -56,14 +56,7 @@ int kexec_image_probe_default(struct kimage *image, void *buf,
>>  	return ret;
>>  }
>>
>> -/* Architectures can provide this probe function */
>> -int __weak arch_kexec_kernel_image_probe(struct kimage *image, void *buf,
>> -					 unsigned long buf_len)
>> -{
>> -	return kexec_image_probe_default(image, buf, buf_len);
>> -}
>> -
>> -static void *kexec_image_load_default(struct kimage *image)
>> +void *kexec_image_load_default(struct kimage *image)
>>  {
>>  	if (!image->fops || !image->fops->load)
>>  		return ERR_PTR(-ENOEXEC);
>> @@ -74,11 +67,6 @@ static void *kexec_image_load_default(struct kimage *image)
>>  				 image->cmdline_buf_len);
>>  }
>>
>> -void * __weak arch_kexec_kernel_image_load(struct kimage *image)
>> -{
>> -	return kexec_image_load_default(image);
>> -}
>> -
>>  int kexec_image_post_load_cleanup_default(struct kimage *image)
>>  {
>>  	if (!image->fops || !image->fops->cleanup)
>> @@ -87,11 +75,6 @@ int kexec_image_post_load_cleanup_default(struct kimage *image)
>>  	return image->fops->cleanup(image->image_loader_data);
>>  }
>>
>> -int __weak arch_kimage_file_post_load_cleanup(struct kimage *image)
>> -{
>> -	return kexec_image_post_load_cleanup_default(image);
>> -}
>> -
>>  #ifdef CONFIG_KEXEC_SIG
>>  static int kexec_image_verify_sig_default(struct kimage *image, void *buf,
>>  					  unsigned long buf_len)
>> @@ -104,8 +87,7 @@ static int kexec_image_verify_sig_default(struct kimage *image, void *buf,
>>  	return image->fops->verify_sig(buf, buf_len);
>>  }
>>
>> -int __weak arch_kexec_kernel_verify_sig(struct kimage *image, void *buf,
>> -					unsigned long buf_len)
>> +int arch_kexec_kernel_verify_sig(struct kimage *image, void *buf, unsigned long buf_len)
>>  {
>>  	return kexec_image_verify_sig_default(image, buf, buf_len);
>>  }
>> @@ -616,19 +598,6 @@ int kexec_locate_mem_hole(struct kexec_buf *kbuf)
>>  	return ret == 1 ? 0 : -EADDRNOTAVAIL;
>>  }
>>
>> -/**
>> - * arch_kexec_locate_mem_hole - Find free memory to place the segments.
>> - * @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 __weak arch_kexec_locate_mem_hole(struct kexec_buf *kbuf)
>> -{
>> -	return kexec_locate_mem_hole(kbuf);
>> -}
>> -
>>  /**
>>   * kexec_add_buffer - place a buffer in a kexec segment
>>   * @kbuf:	Buffer contents and memory parameters.
>> --
>> 2.36.1
>>
>

-- 
Best regards,
Coiby


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] kexec_file: Drop weak attribute from functions
  2022-07-06  1:53     ` Coiby Xu
@ 2022-07-06 11:00       ` Naveen N. Rao
  0 siblings, 0 replies; 6+ messages in thread
From: Naveen N. Rao @ 2022-07-06 11:00 UTC (permalink / raw)
  To: Baoquan He, Coiby Xu; +Cc: Andrew Morton, Eric Biederman, kexec, linux-kernel

Hi Coiby,

Coiby Xu wrote:
> Hi Baoquan and Naveen,
> 
> On Mon, Jul 04, 2022 at 12:10:00PM +0800, Baoquan He wrote:
>>On 07/01/22 at 01:04pm, Naveen N. Rao wrote:
>>> Drop __weak attribute from functions in kexec_file.c:
>>> - arch_kexec_kernel_image_probe()
>>> - arch_kimage_file_post_load_cleanup()
>>> - arch_kexec_kernel_image_load()
>>> - arch_kexec_locate_mem_hole()
>>> - arch_kexec_kernel_verify_sig()
>>>
>>> arch_kexec_kernel_image_load() calls into kexec_image_load_default(), so
>>> drop the static attribute for the latter.
>>>
>>> arch_kexec_kernel_verify_sig() is not overridden by any architecture, so
>>> drop the __weak attribute.
>>
>>The dropping of arch_kexec_kernel_verify_sig() conflicts with patch 1 of
>>anotherpatchset, and the other patches in the patchset depends on the
>>patch 1.
>>
>>[PATCH v9 0/4] unify the keyrings of arm64 and s390 with x86 to verify kexec'ed kernel signature
>>
>>Hi, Naveen, Coiby,
>>
>>Please negotiate how to solve the conflict.
> 
> Thanks Baoquan for letting me know of this conflict. Naveen, how about
> resolving the conflict based on which patch is merged first? If your
> patch set is going to be merged early, I will resolve the conflict in my
> patch set, and vice versa.

Sure, that's fair. It looks like Andrew has queued up this series 
though:
https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git/log/?h=mm-nonmm-unstable

The conflict itself is trivial, so it should be straightforward to 
address it.


Thanks,
Naveen


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-07-06 11:01 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-01  7:34 [PATCH 0/2] kexec: Drop __weak attributes from functions Naveen N. Rao
2022-07-01  7:34 ` [PATCH 1/2] kexec_file: Drop weak attribute " Naveen N. Rao
2022-07-04  4:10   ` Baoquan He
2022-07-06  1:53     ` Coiby Xu
2022-07-06 11:00       ` Naveen N. Rao
2022-07-01  7:34 ` [PATCH 2/2] kexec: " Naveen N. Rao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).