* [PATCH 0/4] Cleanup vmlinux.lds.S
@ 2024-03-13 7:58 Wei Yang
2024-03-13 7:58 ` [PATCH 1/4] vmlinux.lds.h: fix a typo in comment Wei Yang
` (3 more replies)
0 siblings, 4 replies; 19+ messages in thread
From: Wei Yang @ 2024-03-13 7:58 UTC (permalink / raw)
To: tglx, mingo, bp, dave.hansen; +Cc: x86, linux-kernel, Wei Yang
To support 32/64 bits system, we have some definition conditionally. while
some definition is duplicated:
* __PHYSICAL_START has the same definition as LOAD_PHYSICAL_ADDR
* LOAD_OFFSET could be defined directly to __START_KERNEL_map
After these cleanup, we could reduce some complexity of vmlinux.lds.S.
Wei Yang (4):
vmlinux.lds.h: fix a typo in comment
x86/boot: replace __PHYSICAL_START with LOAD_PHYSICAL_ADDR
x86/vmlinux.lds.S: remove conditional definition of LOAD_OFFSET
x86/vmlinux.lds.S: take __START_KERNEL out conditional definition
arch/x86/include/asm/boot.h | 5 -----
arch/x86/include/asm/page_types.h | 8 +++++---
arch/x86/kernel/vmlinux.lds.S | 7 +------
include/asm-generic/vmlinux.lds.h | 2 +-
4 files changed, 7 insertions(+), 15 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH 1/4] vmlinux.lds.h: fix a typo in comment
2024-03-13 7:58 [PATCH 0/4] Cleanup vmlinux.lds.S Wei Yang
@ 2024-03-13 7:58 ` Wei Yang
2024-03-13 10:39 ` [tip: x86/build] vmlinux.lds.h: Fix " tip-bot2 for Wei Yang
2024-03-13 7:58 ` [PATCH 2/4] x86/boot: replace __PHYSICAL_START with LOAD_PHYSICAL_ADDR Wei Yang
` (2 subsequent siblings)
3 siblings, 1 reply; 19+ messages in thread
From: Wei Yang @ 2024-03-13 7:58 UTC (permalink / raw)
To: tglx, mingo, bp, dave.hansen; +Cc: x86, linux-kernel, Wei Yang
One extra 'i' is used.
Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
---
include/asm-generic/vmlinux.lds.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 5dd3a61d673d..514d3002ad8a 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -3,7 +3,7 @@
* linker scripts.
*
* A minimal linker scripts has following content:
- * [This is a sample, architectures may have special requiriements]
+ * [This is a sample, architectures may have special requirements]
*
* OUTPUT_FORMAT(...)
* OUTPUT_ARCH(...)
--
2.34.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 2/4] x86/boot: replace __PHYSICAL_START with LOAD_PHYSICAL_ADDR
2024-03-13 7:58 [PATCH 0/4] Cleanup vmlinux.lds.S Wei Yang
2024-03-13 7:58 ` [PATCH 1/4] vmlinux.lds.h: fix a typo in comment Wei Yang
@ 2024-03-13 7:58 ` Wei Yang
2024-03-13 10:29 ` Ingo Molnar
` (2 more replies)
2024-03-13 7:58 ` [PATCH 3/4] x86/vmlinux.lds.S: remove conditional definition of LOAD_OFFSET Wei Yang
2024-03-13 7:58 ` [PATCH 4/4] x86/vmlinux.lds.S: take __START_KERNEL out conditional definition Wei Yang
3 siblings, 3 replies; 19+ messages in thread
From: Wei Yang @ 2024-03-13 7:58 UTC (permalink / raw)
To: tglx, mingo, bp, dave.hansen; +Cc: x86, linux-kernel, Wei Yang
Both __PHYSICAL_START and LOAD_PHYSICAL_ADDR are defined to get aligned
CONFIG_PHYSICAL_START, so we can replace __PHYSICAL_START with
LOAD_PHYSICAL_ADDR. And then remove the definition of __PHYSICAL_START,
which is only used to define __START_KERNEL.
Since <asm/boot.h> includes <asm/pgtable_types.h>, which includes
<asm/page_types.h>, it is fine to move definition from <asm/boot.h> to
<asm/page_types.h>.
Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
---
arch/x86/include/asm/boot.h | 5 -----
arch/x86/include/asm/page_types.h | 8 +++++---
2 files changed, 5 insertions(+), 8 deletions(-)
diff --git a/arch/x86/include/asm/boot.h b/arch/x86/include/asm/boot.h
index a38cc0afc90a..12cbc57d0128 100644
--- a/arch/x86/include/asm/boot.h
+++ b/arch/x86/include/asm/boot.h
@@ -6,11 +6,6 @@
#include <asm/pgtable_types.h>
#include <uapi/asm/boot.h>
-/* Physical address where kernel should be loaded. */
-#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
- + (CONFIG_PHYSICAL_ALIGN - 1)) \
- & ~(CONFIG_PHYSICAL_ALIGN - 1))
-
/* Minimum kernel alignment, as a power of two */
#ifdef CONFIG_X86_64
# define MIN_KERNEL_ALIGN_LG2 PMD_SHIFT
diff --git a/arch/x86/include/asm/page_types.h b/arch/x86/include/asm/page_types.h
index 86bd4311daf8..acc1620fd121 100644
--- a/arch/x86/include/asm/page_types.h
+++ b/arch/x86/include/asm/page_types.h
@@ -31,10 +31,12 @@
#define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC
-#define __PHYSICAL_START ALIGN(CONFIG_PHYSICAL_START, \
- CONFIG_PHYSICAL_ALIGN)
+/* Physical address where kernel should be loaded. */
+#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
+ + (CONFIG_PHYSICAL_ALIGN - 1)) \
+ & ~(CONFIG_PHYSICAL_ALIGN - 1))
-#define __START_KERNEL (__START_KERNEL_map + __PHYSICAL_START)
+#define __START_KERNEL (__START_KERNEL_map + LOAD_PHYSICAL_ADDR)
#ifdef CONFIG_X86_64
#include <asm/page_64_types.h>
--
2.34.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 3/4] x86/vmlinux.lds.S: remove conditional definition of LOAD_OFFSET
2024-03-13 7:58 [PATCH 0/4] Cleanup vmlinux.lds.S Wei Yang
2024-03-13 7:58 ` [PATCH 1/4] vmlinux.lds.h: fix a typo in comment Wei Yang
2024-03-13 7:58 ` [PATCH 2/4] x86/boot: replace __PHYSICAL_START with LOAD_PHYSICAL_ADDR Wei Yang
@ 2024-03-13 7:58 ` Wei Yang
2024-03-13 10:39 ` [tip: x86/build] x86/vmlinux.lds.S: Remove " tip-bot2 for Wei Yang
2024-03-13 7:58 ` [PATCH 4/4] x86/vmlinux.lds.S: take __START_KERNEL out conditional definition Wei Yang
3 siblings, 1 reply; 19+ messages in thread
From: Wei Yang @ 2024-03-13 7:58 UTC (permalink / raw)
To: tglx, mingo, bp, dave.hansen; +Cc: x86, linux-kernel, Wei Yang
In vmlinux.lds.S, we define LOAD_OFFSET conditionally to __PAGE_OFFSET
or __START_KERNEL_map. While __START_KERNEL_map is already defined to
the same value with the same condition.
So it is fine to define LOAD_OFFSET to __START_KERNEL_map directly.
Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
---
arch/x86/kernel/vmlinux.lds.S | 4 ----
1 file changed, 4 deletions(-)
diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
index 56451fd2099e..88dcf9366949 100644
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -15,11 +15,7 @@
* put it inside the section definition.
*/
-#ifdef CONFIG_X86_32
-#define LOAD_OFFSET __PAGE_OFFSET
-#else
#define LOAD_OFFSET __START_KERNEL_map
-#endif
#define RUNTIME_DISCARD_EXIT
#define EMITS_PT_NOTE
--
2.34.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [PATCH 4/4] x86/vmlinux.lds.S: take __START_KERNEL out conditional definition
2024-03-13 7:58 [PATCH 0/4] Cleanup vmlinux.lds.S Wei Yang
` (2 preceding siblings ...)
2024-03-13 7:58 ` [PATCH 3/4] x86/vmlinux.lds.S: remove conditional definition of LOAD_OFFSET Wei Yang
@ 2024-03-13 7:58 ` Wei Yang
2024-03-13 10:39 ` [tip: x86/build] x86/vmlinux.lds.S: Take " tip-bot2 for Wei Yang
3 siblings, 1 reply; 19+ messages in thread
From: Wei Yang @ 2024-03-13 7:58 UTC (permalink / raw)
To: tglx, mingo, bp, dave.hansen; +Cc: x86, linux-kernel, Wei Yang
If CONFIG_X86_32, the section start address is defined to be
"LOAD_OFFSET + LOAD_PHYSICAL_ADDR", which is the same as
__START_KERNEL_map.
Let's take it out to remove the complexity.
Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
---
arch/x86/kernel/vmlinux.lds.S | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
index 88dcf9366949..a20409b0a3f2 100644
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -110,11 +110,10 @@ PHDRS {
SECTIONS
{
+ . = __START_KERNEL;
#ifdef CONFIG_X86_32
- . = LOAD_OFFSET + LOAD_PHYSICAL_ADDR;
phys_startup_32 = ABSOLUTE(startup_32 - LOAD_OFFSET);
#else
- . = __START_KERNEL;
phys_startup_64 = ABSOLUTE(startup_64 - LOAD_OFFSET);
#endif
--
2.34.1
^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH 2/4] x86/boot: replace __PHYSICAL_START with LOAD_PHYSICAL_ADDR
2024-03-13 7:58 ` [PATCH 2/4] x86/boot: replace __PHYSICAL_START with LOAD_PHYSICAL_ADDR Wei Yang
@ 2024-03-13 10:29 ` Ingo Molnar
2024-03-14 0:54 ` Wei Yang
2024-03-14 3:23 ` Wei Yang
2024-03-13 10:29 ` Nikolay Borisov
2024-03-22 10:59 ` [tip: x86/build] x86/boot: Replace " tip-bot2 for Wei Yang
2 siblings, 2 replies; 19+ messages in thread
From: Ingo Molnar @ 2024-03-13 10:29 UTC (permalink / raw)
To: Wei Yang; +Cc: tglx, mingo, bp, dave.hansen, x86, linux-kernel
* Wei Yang <richard.weiyang@gmail.com> wrote:
> Both __PHYSICAL_START and LOAD_PHYSICAL_ADDR are defined to get aligned
> CONFIG_PHYSICAL_START, so we can replace __PHYSICAL_START with
> LOAD_PHYSICAL_ADDR. And then remove the definition of __PHYSICAL_START,
> which is only used to define __START_KERNEL.
>
> Since <asm/boot.h> includes <asm/pgtable_types.h>, which includes
> <asm/page_types.h>, it is fine to move definition from <asm/boot.h> to
> <asm/page_types.h>.
>
> Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
> ---
> arch/x86/include/asm/boot.h | 5 -----
> arch/x86/include/asm/page_types.h | 8 +++++---
> 2 files changed, 5 insertions(+), 8 deletions(-)
>
> diff --git a/arch/x86/include/asm/boot.h b/arch/x86/include/asm/boot.h
> index a38cc0afc90a..12cbc57d0128 100644
> --- a/arch/x86/include/asm/boot.h
> +++ b/arch/x86/include/asm/boot.h
> @@ -6,11 +6,6 @@
> #include <asm/pgtable_types.h>
> #include <uapi/asm/boot.h>
>
> -/* Physical address where kernel should be loaded. */
> -#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
> - + (CONFIG_PHYSICAL_ALIGN - 1)) \
> - & ~(CONFIG_PHYSICAL_ALIGN - 1))
> -
> /* Minimum kernel alignment, as a power of two */
> #ifdef CONFIG_X86_64
> # define MIN_KERNEL_ALIGN_LG2 PMD_SHIFT
> diff --git a/arch/x86/include/asm/page_types.h b/arch/x86/include/asm/page_types.h
> index 86bd4311daf8..acc1620fd121 100644
> --- a/arch/x86/include/asm/page_types.h
> +++ b/arch/x86/include/asm/page_types.h
> @@ -31,10 +31,12 @@
>
> #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC
>
> -#define __PHYSICAL_START ALIGN(CONFIG_PHYSICAL_START, \
> - CONFIG_PHYSICAL_ALIGN)
> +/* Physical address where kernel should be loaded. */
> +#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
> + + (CONFIG_PHYSICAL_ALIGN - 1)) \
> + & ~(CONFIG_PHYSICAL_ALIGN - 1))
I agree with this simplification, but the ALIGN() expression is far easier
to read, so please keep that one instead of the open-coded version.
Thanks,
Ingo
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/4] x86/boot: replace __PHYSICAL_START with LOAD_PHYSICAL_ADDR
2024-03-13 7:58 ` [PATCH 2/4] x86/boot: replace __PHYSICAL_START with LOAD_PHYSICAL_ADDR Wei Yang
2024-03-13 10:29 ` Ingo Molnar
@ 2024-03-13 10:29 ` Nikolay Borisov
2024-03-14 0:54 ` Wei Yang
2024-03-22 10:59 ` [tip: x86/build] x86/boot: Replace " tip-bot2 for Wei Yang
2 siblings, 1 reply; 19+ messages in thread
From: Nikolay Borisov @ 2024-03-13 10:29 UTC (permalink / raw)
To: Wei Yang, tglx, mingo, bp, dave.hansen; +Cc: x86, linux-kernel
On 13.03.24 г. 9:58 ч., Wei Yang wrote:
> Both __PHYSICAL_START and LOAD_PHYSICAL_ADDR are defined to get aligned
> CONFIG_PHYSICAL_START, so we can replace __PHYSICAL_START with
> LOAD_PHYSICAL_ADDR. And then remove the definition of __PHYSICAL_START,
> which is only used to define __START_KERNEL.
>
> Since <asm/boot.h> includes <asm/pgtable_types.h>, which includes
> <asm/page_types.h>, it is fine to move definition from <asm/boot.h> to
> <asm/page_types.h>.
>
> Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
> ---
> arch/x86/include/asm/boot.h | 5 -----
> arch/x86/include/asm/page_types.h | 8 +++++---
> 2 files changed, 5 insertions(+), 8 deletions(-)
>
> diff --git a/arch/x86/include/asm/boot.h b/arch/x86/include/asm/boot.h
> index a38cc0afc90a..12cbc57d0128 100644
> --- a/arch/x86/include/asm/boot.h
> +++ b/arch/x86/include/asm/boot.h
> @@ -6,11 +6,6 @@
> #include <asm/pgtable_types.h>
> #include <uapi/asm/boot.h>
>
> -/* Physical address where kernel should be loaded. */
> -#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
> - + (CONFIG_PHYSICAL_ALIGN - 1)) \
> - & ~(CONFIG_PHYSICAL_ALIGN - 1))
> -
> /* Minimum kernel alignment, as a power of two */
> #ifdef CONFIG_X86_64
> # define MIN_KERNEL_ALIGN_LG2 PMD_SHIFT
> diff --git a/arch/x86/include/asm/page_types.h b/arch/x86/include/asm/page_types.h
> index 86bd4311daf8..acc1620fd121 100644
> --- a/arch/x86/include/asm/page_types.h
> +++ b/arch/x86/include/asm/page_types.h
> @@ -31,10 +31,12 @@
>
> #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC
>
> -#define __PHYSICAL_START ALIGN(CONFIG_PHYSICAL_START, \
> - CONFIG_PHYSICAL_ALIGN)
> +/* Physical address where kernel should be loaded. */
> +#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
> + + (CONFIG_PHYSICAL_ALIGN - 1)) \
> + & ~(CONFIG_PHYSICAL_ALIGN - 1))
Why don't you simply define LOAD_PHYSICAL_ADDR via
ALIGN(CONFIG_PHYSICAL_START, CONFIG_PHYSICAL_ALING) it's way more readable.
>
> -#define __START_KERNEL (__START_KERNEL_map + __PHYSICAL_START)
> +#define __START_KERNEL (__START_KERNEL_map + LOAD_PHYSICAL_ADDR)
>
> #ifdef CONFIG_X86_64
> #include <asm/page_64_types.h>
^ permalink raw reply [flat|nested] 19+ messages in thread
* [tip: x86/build] x86/vmlinux.lds.S: Take __START_KERNEL out conditional definition
2024-03-13 7:58 ` [PATCH 4/4] x86/vmlinux.lds.S: take __START_KERNEL out conditional definition Wei Yang
@ 2024-03-13 10:39 ` tip-bot2 for Wei Yang
0 siblings, 0 replies; 19+ messages in thread
From: tip-bot2 for Wei Yang @ 2024-03-13 10:39 UTC (permalink / raw)
To: linux-tip-commits; +Cc: Wei Yang, Ingo Molnar, x86, linux-kernel
The following commit has been merged into the x86/build branch of tip:
Commit-ID: 9b67ce2c121fbf11c0c7b6216c08200fda23c9af
Gitweb: https://git.kernel.org/tip/9b67ce2c121fbf11c0c7b6216c08200fda23c9af
Author: Wei Yang <richard.weiyang@gmail.com>
AuthorDate: Wed, 13 Mar 2024 07:58:39
Committer: Ingo Molnar <mingo@kernel.org>
CommitterDate: Wed, 13 Mar 2024 11:29:11 +01:00
x86/vmlinux.lds.S: Take __START_KERNEL out conditional definition
If CONFIG_X86_32=y, the section start address is defined to be
"LOAD_OFFSET + LOAD_PHYSICAL_ADDR", which is the same as
__START_KERNEL_map.
Unify it with the 64-bit definition to simplify the code.
Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/20240313075839.8321-5-richard.weiyang@gmail.com
---
arch/x86/kernel/vmlinux.lds.S | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
index 88dcf93..a20409b 100644
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -110,11 +110,10 @@ PHDRS {
SECTIONS
{
+ . = __START_KERNEL;
#ifdef CONFIG_X86_32
- . = LOAD_OFFSET + LOAD_PHYSICAL_ADDR;
phys_startup_32 = ABSOLUTE(startup_32 - LOAD_OFFSET);
#else
- . = __START_KERNEL;
phys_startup_64 = ABSOLUTE(startup_64 - LOAD_OFFSET);
#endif
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [tip: x86/build] x86/vmlinux.lds.S: Remove conditional definition of LOAD_OFFSET
2024-03-13 7:58 ` [PATCH 3/4] x86/vmlinux.lds.S: remove conditional definition of LOAD_OFFSET Wei Yang
@ 2024-03-13 10:39 ` tip-bot2 for Wei Yang
2024-03-13 13:18 ` Borislav Petkov
0 siblings, 1 reply; 19+ messages in thread
From: tip-bot2 for Wei Yang @ 2024-03-13 10:39 UTC (permalink / raw)
To: linux-tip-commits; +Cc: Wei Yang, Ingo Molnar, x86, linux-kernel
The following commit has been merged into the x86/build branch of tip:
Commit-ID: a5cffd056ef52280c07a7f6a3b3faacf6b318e8e
Gitweb: https://git.kernel.org/tip/a5cffd056ef52280c07a7f6a3b3faacf6b318e8e
Author: Wei Yang <richard.weiyang@gmail.com>
AuthorDate: Wed, 13 Mar 2024 07:58:38
Committer: Ingo Molnar <mingo@kernel.org>
CommitterDate: Wed, 13 Mar 2024 11:29:10 +01:00
x86/vmlinux.lds.S: Remove conditional definition of LOAD_OFFSET
In vmlinux.lds.S, we define LOAD_OFFSET conditionally to __PAGE_OFFSET
or __START_KERNEL_map. While __START_KERNEL_map is already defined to
the same value with the same condition.
So it is fine to define LOAD_OFFSET to __START_KERNEL_map directly.
Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/20240313075839.8321-4-richard.weiyang@gmail.com
---
arch/x86/kernel/vmlinux.lds.S | 4 ----
1 file changed, 4 deletions(-)
diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
index 56451fd..88dcf93 100644
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -15,11 +15,7 @@
* put it inside the section definition.
*/
-#ifdef CONFIG_X86_32
-#define LOAD_OFFSET __PAGE_OFFSET
-#else
#define LOAD_OFFSET __START_KERNEL_map
-#endif
#define RUNTIME_DISCARD_EXIT
#define EMITS_PT_NOTE
^ permalink raw reply related [flat|nested] 19+ messages in thread
* [tip: x86/build] vmlinux.lds.h: Fix a typo in comment
2024-03-13 7:58 ` [PATCH 1/4] vmlinux.lds.h: fix a typo in comment Wei Yang
@ 2024-03-13 10:39 ` tip-bot2 for Wei Yang
0 siblings, 0 replies; 19+ messages in thread
From: tip-bot2 for Wei Yang @ 2024-03-13 10:39 UTC (permalink / raw)
To: linux-tip-commits; +Cc: Wei Yang, Ingo Molnar, x86, linux-kernel
The following commit has been merged into the x86/build branch of tip:
Commit-ID: 1793f69326266269a8117d3f5324ac78db18931c
Gitweb: https://git.kernel.org/tip/1793f69326266269a8117d3f5324ac78db18931c
Author: Wei Yang <richard.weiyang@gmail.com>
AuthorDate: Wed, 13 Mar 2024 07:58:36
Committer: Ingo Molnar <mingo@kernel.org>
CommitterDate: Wed, 13 Mar 2024 11:29:10 +01:00
vmlinux.lds.h: Fix a typo in comment
Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/20240313075839.8321-2-richard.weiyang@gmail.com
---
include/asm-generic/vmlinux.lds.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 5dd3a61..514d300 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -3,7 +3,7 @@
* linker scripts.
*
* A minimal linker scripts has following content:
- * [This is a sample, architectures may have special requiriements]
+ * [This is a sample, architectures may have special requirements]
*
* OUTPUT_FORMAT(...)
* OUTPUT_ARCH(...)
^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [tip: x86/build] x86/vmlinux.lds.S: Remove conditional definition of LOAD_OFFSET
2024-03-13 10:39 ` [tip: x86/build] x86/vmlinux.lds.S: Remove " tip-bot2 for Wei Yang
@ 2024-03-13 13:18 ` Borislav Petkov
2024-03-14 0:59 ` Wei Yang
0 siblings, 1 reply; 19+ messages in thread
From: Borislav Petkov @ 2024-03-13 13:18 UTC (permalink / raw)
To: linux-kernel; +Cc: linux-tip-commits, Wei Yang, Ingo Molnar, x86
On Wed, Mar 13, 2024 at 10:39:58AM -0000, tip-bot2 for Wei Yang wrote:
> -#ifdef CONFIG_X86_32
> -#define LOAD_OFFSET __PAGE_OFFSET
> -#else
> #define LOAD_OFFSET __START_KERNEL_map
> -#endif
And, as a next step, you can get rid of LOAD_OFFSET completely and use
__START_KERNEL_map everywhere.
Even less ifdeffery.
--
Regards/Gruss,
Boris.
https://people.kernel.org/tglx/notes-about-netiquette
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/4] x86/boot: replace __PHYSICAL_START with LOAD_PHYSICAL_ADDR
2024-03-13 10:29 ` Ingo Molnar
@ 2024-03-14 0:54 ` Wei Yang
2024-03-14 3:23 ` Wei Yang
1 sibling, 0 replies; 19+ messages in thread
From: Wei Yang @ 2024-03-14 0:54 UTC (permalink / raw)
To: Ingo Molnar; +Cc: Wei Yang, tglx, mingo, bp, dave.hansen, x86, linux-kernel
On Wed, Mar 13, 2024 at 11:29:33AM +0100, Ingo Molnar wrote:
>
>* Wei Yang <richard.weiyang@gmail.com> wrote:
>
>> Both __PHYSICAL_START and LOAD_PHYSICAL_ADDR are defined to get aligned
>> CONFIG_PHYSICAL_START, so we can replace __PHYSICAL_START with
>> LOAD_PHYSICAL_ADDR. And then remove the definition of __PHYSICAL_START,
>> which is only used to define __START_KERNEL.
>>
>> Since <asm/boot.h> includes <asm/pgtable_types.h>, which includes
>> <asm/page_types.h>, it is fine to move definition from <asm/boot.h> to
>> <asm/page_types.h>.
>>
>> Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
>> ---
>> arch/x86/include/asm/boot.h | 5 -----
>> arch/x86/include/asm/page_types.h | 8 +++++---
>> 2 files changed, 5 insertions(+), 8 deletions(-)
>>
>> diff --git a/arch/x86/include/asm/boot.h b/arch/x86/include/asm/boot.h
>> index a38cc0afc90a..12cbc57d0128 100644
>> --- a/arch/x86/include/asm/boot.h
>> +++ b/arch/x86/include/asm/boot.h
>> @@ -6,11 +6,6 @@
>> #include <asm/pgtable_types.h>
>> #include <uapi/asm/boot.h>
>>
>> -/* Physical address where kernel should be loaded. */
>> -#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
>> - + (CONFIG_PHYSICAL_ALIGN - 1)) \
>> - & ~(CONFIG_PHYSICAL_ALIGN - 1))
>> -
>> /* Minimum kernel alignment, as a power of two */
>> #ifdef CONFIG_X86_64
>> # define MIN_KERNEL_ALIGN_LG2 PMD_SHIFT
>> diff --git a/arch/x86/include/asm/page_types.h b/arch/x86/include/asm/page_types.h
>> index 86bd4311daf8..acc1620fd121 100644
>> --- a/arch/x86/include/asm/page_types.h
>> +++ b/arch/x86/include/asm/page_types.h
>> @@ -31,10 +31,12 @@
>>
>> #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC
>>
>> -#define __PHYSICAL_START ALIGN(CONFIG_PHYSICAL_START, \
>> - CONFIG_PHYSICAL_ALIGN)
>> +/* Physical address where kernel should be loaded. */
>> +#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
>> + + (CONFIG_PHYSICAL_ALIGN - 1)) \
>> + & ~(CONFIG_PHYSICAL_ALIGN - 1))
>
>I agree with this simplification, but the ALIGN() expression is far easier
>to read, so please keep that one instead of the open-coded version.
Sure, will send v2.
>
>Thanks,
>
> Ingo
--
Wei Yang
Help you, Help me
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/4] x86/boot: replace __PHYSICAL_START with LOAD_PHYSICAL_ADDR
2024-03-13 10:29 ` Nikolay Borisov
@ 2024-03-14 0:54 ` Wei Yang
0 siblings, 0 replies; 19+ messages in thread
From: Wei Yang @ 2024-03-14 0:54 UTC (permalink / raw)
To: Nikolay Borisov; +Cc: Wei Yang, tglx, mingo, bp, dave.hansen, x86, linux-kernel
On Wed, Mar 13, 2024 at 12:29:37PM +0200, Nikolay Borisov wrote:
>
>
>On 13.03.24 г. 9:58 ч., Wei Yang wrote:
>> Both __PHYSICAL_START and LOAD_PHYSICAL_ADDR are defined to get aligned
>> CONFIG_PHYSICAL_START, so we can replace __PHYSICAL_START with
>> LOAD_PHYSICAL_ADDR. And then remove the definition of __PHYSICAL_START,
>> which is only used to define __START_KERNEL.
>>
>> Since <asm/boot.h> includes <asm/pgtable_types.h>, which includes
>> <asm/page_types.h>, it is fine to move definition from <asm/boot.h> to
>> <asm/page_types.h>.
>>
>> Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
>> ---
>> arch/x86/include/asm/boot.h | 5 -----
>> arch/x86/include/asm/page_types.h | 8 +++++---
>> 2 files changed, 5 insertions(+), 8 deletions(-)
>>
>> diff --git a/arch/x86/include/asm/boot.h b/arch/x86/include/asm/boot.h
>> index a38cc0afc90a..12cbc57d0128 100644
>> --- a/arch/x86/include/asm/boot.h
>> +++ b/arch/x86/include/asm/boot.h
>> @@ -6,11 +6,6 @@
>> #include <asm/pgtable_types.h>
>> #include <uapi/asm/boot.h>
>> -/* Physical address where kernel should be loaded. */
>> -#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
>> - + (CONFIG_PHYSICAL_ALIGN - 1)) \
>> - & ~(CONFIG_PHYSICAL_ALIGN - 1))
>> -
>> /* Minimum kernel alignment, as a power of two */
>> #ifdef CONFIG_X86_64
>> # define MIN_KERNEL_ALIGN_LG2 PMD_SHIFT
>> diff --git a/arch/x86/include/asm/page_types.h b/arch/x86/include/asm/page_types.h
>> index 86bd4311daf8..acc1620fd121 100644
>> --- a/arch/x86/include/asm/page_types.h
>> +++ b/arch/x86/include/asm/page_types.h
>> @@ -31,10 +31,12 @@
>> #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC
>> -#define __PHYSICAL_START ALIGN(CONFIG_PHYSICAL_START, \
>> - CONFIG_PHYSICAL_ALIGN)
>> +/* Physical address where kernel should be loaded. */
>> +#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
>> + + (CONFIG_PHYSICAL_ALIGN - 1)) \
>> + & ~(CONFIG_PHYSICAL_ALIGN - 1))
>
>Why don't you simply define LOAD_PHYSICAL_ADDR via
>ALIGN(CONFIG_PHYSICAL_START, CONFIG_PHYSICAL_ALING) it's way more readable.
>
Sure, will do it.
>> -#define __START_KERNEL (__START_KERNEL_map + __PHYSICAL_START)
>> +#define __START_KERNEL (__START_KERNEL_map + LOAD_PHYSICAL_ADDR)
>> #ifdef CONFIG_X86_64
>> #include <asm/page_64_types.h>
--
Wei Yang
Help you, Help me
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [tip: x86/build] x86/vmlinux.lds.S: Remove conditional definition of LOAD_OFFSET
2024-03-13 13:18 ` Borislav Petkov
@ 2024-03-14 0:59 ` Wei Yang
0 siblings, 0 replies; 19+ messages in thread
From: Wei Yang @ 2024-03-14 0:59 UTC (permalink / raw)
To: Borislav Petkov
Cc: linux-kernel, linux-tip-commits, Wei Yang, Ingo Molnar, x86
On Wed, Mar 13, 2024 at 02:18:33PM +0100, Borislav Petkov wrote:
>On Wed, Mar 13, 2024 at 10:39:58AM -0000, tip-bot2 for Wei Yang wrote:
>> -#ifdef CONFIG_X86_32
>> -#define LOAD_OFFSET __PAGE_OFFSET
>> -#else
>> #define LOAD_OFFSET __START_KERNEL_map
>> -#endif
>
>And, as a next step, you can get rid of LOAD_OFFSET completely and use
>__START_KERNEL_map everywhere.
>
>Even less ifdeffery.
You mean remove the definition of LOAD_OFFSET?
I have tried this, but I found this is used in vmlinux.lds.h. So I don't
figure out a way to get rid of it.
>
>--
>Regards/Gruss,
> Boris.
>
>https://people.kernel.org/tglx/notes-about-netiquette
--
Wei Yang
Help you, Help me
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/4] x86/boot: replace __PHYSICAL_START with LOAD_PHYSICAL_ADDR
2024-03-13 10:29 ` Ingo Molnar
2024-03-14 0:54 ` Wei Yang
@ 2024-03-14 3:23 ` Wei Yang
2024-03-14 9:25 ` Ingo Molnar
1 sibling, 1 reply; 19+ messages in thread
From: Wei Yang @ 2024-03-14 3:23 UTC (permalink / raw)
To: Ingo Molnar; +Cc: Wei Yang, tglx, mingo, bp, dave.hansen, x86, linux-kernel
On Wed, Mar 13, 2024 at 11:29:33AM +0100, Ingo Molnar wrote:
>
>* Wei Yang <richard.weiyang@gmail.com> wrote:
>
>> Both __PHYSICAL_START and LOAD_PHYSICAL_ADDR are defined to get aligned
>> CONFIG_PHYSICAL_START, so we can replace __PHYSICAL_START with
>> LOAD_PHYSICAL_ADDR. And then remove the definition of __PHYSICAL_START,
>> which is only used to define __START_KERNEL.
>>
>> Since <asm/boot.h> includes <asm/pgtable_types.h>, which includes
>> <asm/page_types.h>, it is fine to move definition from <asm/boot.h> to
>> <asm/page_types.h>.
>>
>> Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
>> ---
>> arch/x86/include/asm/boot.h | 5 -----
>> arch/x86/include/asm/page_types.h | 8 +++++---
>> 2 files changed, 5 insertions(+), 8 deletions(-)
>>
>> diff --git a/arch/x86/include/asm/boot.h b/arch/x86/include/asm/boot.h
>> index a38cc0afc90a..12cbc57d0128 100644
>> --- a/arch/x86/include/asm/boot.h
>> +++ b/arch/x86/include/asm/boot.h
>> @@ -6,11 +6,6 @@
>> #include <asm/pgtable_types.h>
>> #include <uapi/asm/boot.h>
>>
>> -/* Physical address where kernel should be loaded. */
>> -#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
>> - + (CONFIG_PHYSICAL_ALIGN - 1)) \
>> - & ~(CONFIG_PHYSICAL_ALIGN - 1))
>> -
>> /* Minimum kernel alignment, as a power of two */
>> #ifdef CONFIG_X86_64
>> # define MIN_KERNEL_ALIGN_LG2 PMD_SHIFT
>> diff --git a/arch/x86/include/asm/page_types.h b/arch/x86/include/asm/page_types.h
>> index 86bd4311daf8..acc1620fd121 100644
>> --- a/arch/x86/include/asm/page_types.h
>> +++ b/arch/x86/include/asm/page_types.h
>> @@ -31,10 +31,12 @@
>>
>> #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC
>>
>> -#define __PHYSICAL_START ALIGN(CONFIG_PHYSICAL_START, \
>> - CONFIG_PHYSICAL_ALIGN)
>> +/* Physical address where kernel should be loaded. */
>> +#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
>> + + (CONFIG_PHYSICAL_ALIGN - 1)) \
>> + & ~(CONFIG_PHYSICAL_ALIGN - 1))
>
>I agree with this simplification, but the ALIGN() expression is far easier
>to read, so please keep that one instead of the open-coded version.
>
I just tried to define LOAD_PHYSICAL_ADDR by ALIGN, but face a compile error
on compressed/head_[32|64].o.
$ make arch/x86/boot/compressed/head_64.o
CALL scripts/checksyscalls.sh
DESCEND objtool
INSTALL libsubcmd_headers
AS arch/x86/boot/compressed/head_64.o
arch/x86/boot/compressed/head_64.S: Assembler messages:
arch/x86/boot/compressed/head_64.S:154: Error: junk (0x1000000,0x200000)' after expression
arch/x86/boot/compressed/head_64.S:154: Error: number of operands mismatch for 16' after expression
arch/x86/boot/compressed/head_64.S:157: Error: junk mov'
arch/x86/boot/compressed/head_64.S:330: Error: junk (0x1000000,0x200000)' after expression
arch/x86/boot/compressed/head_64.S:330: Error: number of operands mismatch for 16' after expression
arch/x86/boot/compressed/head_64.S:333: Error: junk movq'
If my understanding is correct, the reason is linkage.h defines ALIGN, which
is ".balign xxx". Maybe this is why original LOAD_PHYSICAL_ADDR doesn't use
ALIGN.
So is this ok to keep the open-coded definition?
>Thanks,
>
> Ingo
--
Wei Yang
Help you, Help me
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/4] x86/boot: replace __PHYSICAL_START with LOAD_PHYSICAL_ADDR
2024-03-14 3:23 ` Wei Yang
@ 2024-03-14 9:25 ` Ingo Molnar
2024-03-15 0:57 ` Wei Yang
0 siblings, 1 reply; 19+ messages in thread
From: Ingo Molnar @ 2024-03-14 9:25 UTC (permalink / raw)
To: Wei Yang; +Cc: tglx, mingo, bp, dave.hansen, x86, linux-kernel
* Wei Yang <richard.weiyang@gmail.com> wrote:
> On Wed, Mar 13, 2024 at 11:29:33AM +0100, Ingo Molnar wrote:
> >
> >* Wei Yang <richard.weiyang@gmail.com> wrote:
> >
> >> Both __PHYSICAL_START and LOAD_PHYSICAL_ADDR are defined to get aligned
> >> CONFIG_PHYSICAL_START, so we can replace __PHYSICAL_START with
> >> LOAD_PHYSICAL_ADDR. And then remove the definition of __PHYSICAL_START,
> >> which is only used to define __START_KERNEL.
> >>
> >> Since <asm/boot.h> includes <asm/pgtable_types.h>, which includes
> >> <asm/page_types.h>, it is fine to move definition from <asm/boot.h> to
> >> <asm/page_types.h>.
> >>
> >> Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
> >> ---
> >> arch/x86/include/asm/boot.h | 5 -----
> >> arch/x86/include/asm/page_types.h | 8 +++++---
> >> 2 files changed, 5 insertions(+), 8 deletions(-)
> >>
> >> diff --git a/arch/x86/include/asm/boot.h b/arch/x86/include/asm/boot.h
> >> index a38cc0afc90a..12cbc57d0128 100644
> >> --- a/arch/x86/include/asm/boot.h
> >> +++ b/arch/x86/include/asm/boot.h
> >> @@ -6,11 +6,6 @@
> >> #include <asm/pgtable_types.h>
> >> #include <uapi/asm/boot.h>
> >>
> >> -/* Physical address where kernel should be loaded. */
> >> -#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
> >> - + (CONFIG_PHYSICAL_ALIGN - 1)) \
> >> - & ~(CONFIG_PHYSICAL_ALIGN - 1))
> >> -
> >> /* Minimum kernel alignment, as a power of two */
> >> #ifdef CONFIG_X86_64
> >> # define MIN_KERNEL_ALIGN_LG2 PMD_SHIFT
> >> diff --git a/arch/x86/include/asm/page_types.h b/arch/x86/include/asm/page_types.h
> >> index 86bd4311daf8..acc1620fd121 100644
> >> --- a/arch/x86/include/asm/page_types.h
> >> +++ b/arch/x86/include/asm/page_types.h
> >> @@ -31,10 +31,12 @@
> >>
> >> #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC
> >>
> >> -#define __PHYSICAL_START ALIGN(CONFIG_PHYSICAL_START, \
> >> - CONFIG_PHYSICAL_ALIGN)
> >> +/* Physical address where kernel should be loaded. */
> >> +#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
> >> + + (CONFIG_PHYSICAL_ALIGN - 1)) \
> >> + & ~(CONFIG_PHYSICAL_ALIGN - 1))
> >
> >I agree with this simplification, but the ALIGN() expression is far easier
> >to read, so please keep that one instead of the open-coded version.
> >
>
> I just tried to define LOAD_PHYSICAL_ADDR by ALIGN, but face a compile error
> on compressed/head_[32|64].o.
>
> $ make arch/x86/boot/compressed/head_64.o
> CALL scripts/checksyscalls.sh
> DESCEND objtool
> INSTALL libsubcmd_headers
> AS arch/x86/boot/compressed/head_64.o
> arch/x86/boot/compressed/head_64.S: Assembler messages:
> arch/x86/boot/compressed/head_64.S:154: Error: junk (0x1000000,0x200000)' after expression
> arch/x86/boot/compressed/head_64.S:154: Error: number of operands mismatch for 16' after expression
> arch/x86/boot/compressed/head_64.S:157: Error: junk mov'
> arch/x86/boot/compressed/head_64.S:330: Error: junk (0x1000000,0x200000)' after expression
> arch/x86/boot/compressed/head_64.S:330: Error: number of operands mismatch for 16' after expression
> arch/x86/boot/compressed/head_64.S:333: Error: junk movq'
>
> If my understanding is correct, the reason is linkage.h defines ALIGN, which
> is ".balign xxx". Maybe this is why original LOAD_PHYSICAL_ADDR doesn't use
> ALIGN.
linkage.h defines __ALIGN, which is different from ALIGN().
Also, a number of .S files seem to be using some sort of ALIGN() method
within arch/x86/, according to:
git grep 'ALIGN(' -- 'arch/x86/*.S'
> So is this ok to keep the open-coded definition?
It would be nice to figure out why ALIGN() appears to be working in other
cases in .S files, while not in this case.
Thanks,
Ingo
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/4] x86/boot: replace __PHYSICAL_START with LOAD_PHYSICAL_ADDR
2024-03-14 9:25 ` Ingo Molnar
@ 2024-03-15 0:57 ` Wei Yang
2024-03-16 17:44 ` Wei Yang
0 siblings, 1 reply; 19+ messages in thread
From: Wei Yang @ 2024-03-15 0:57 UTC (permalink / raw)
To: Ingo Molnar; +Cc: Wei Yang, tglx, mingo, bp, dave.hansen, x86, linux-kernel
On Thu, Mar 14, 2024 at 10:25:53AM +0100, Ingo Molnar wrote:
>
>* Wei Yang <richard.weiyang@gmail.com> wrote:
>
>> On Wed, Mar 13, 2024 at 11:29:33AM +0100, Ingo Molnar wrote:
>> >
>> >* Wei Yang <richard.weiyang@gmail.com> wrote:
>> >
>> >> Both __PHYSICAL_START and LOAD_PHYSICAL_ADDR are defined to get aligned
>> >> CONFIG_PHYSICAL_START, so we can replace __PHYSICAL_START with
>> >> LOAD_PHYSICAL_ADDR. And then remove the definition of __PHYSICAL_START,
>> >> which is only used to define __START_KERNEL.
>> >>
>> >> Since <asm/boot.h> includes <asm/pgtable_types.h>, which includes
>> >> <asm/page_types.h>, it is fine to move definition from <asm/boot.h> to
>> >> <asm/page_types.h>.
>> >>
>> >> Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
>> >> ---
>> >> arch/x86/include/asm/boot.h | 5 -----
>> >> arch/x86/include/asm/page_types.h | 8 +++++---
>> >> 2 files changed, 5 insertions(+), 8 deletions(-)
>> >>
>> >> diff --git a/arch/x86/include/asm/boot.h b/arch/x86/include/asm/boot.h
>> >> index a38cc0afc90a..12cbc57d0128 100644
>> >> --- a/arch/x86/include/asm/boot.h
>> >> +++ b/arch/x86/include/asm/boot.h
>> >> @@ -6,11 +6,6 @@
>> >> #include <asm/pgtable_types.h>
>> >> #include <uapi/asm/boot.h>
>> >>
>> >> -/* Physical address where kernel should be loaded. */
>> >> -#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
>> >> - + (CONFIG_PHYSICAL_ALIGN - 1)) \
>> >> - & ~(CONFIG_PHYSICAL_ALIGN - 1))
>> >> -
>> >> /* Minimum kernel alignment, as a power of two */
>> >> #ifdef CONFIG_X86_64
>> >> # define MIN_KERNEL_ALIGN_LG2 PMD_SHIFT
>> >> diff --git a/arch/x86/include/asm/page_types.h b/arch/x86/include/asm/page_types.h
>> >> index 86bd4311daf8..acc1620fd121 100644
>> >> --- a/arch/x86/include/asm/page_types.h
>> >> +++ b/arch/x86/include/asm/page_types.h
>> >> @@ -31,10 +31,12 @@
>> >>
>> >> #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC
>> >>
>> >> -#define __PHYSICAL_START ALIGN(CONFIG_PHYSICAL_START, \
>> >> - CONFIG_PHYSICAL_ALIGN)
>> >> +/* Physical address where kernel should be loaded. */
>> >> +#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
>> >> + + (CONFIG_PHYSICAL_ALIGN - 1)) \
>> >> + & ~(CONFIG_PHYSICAL_ALIGN - 1))
>> >
>> >I agree with this simplification, but the ALIGN() expression is far easier
>> >to read, so please keep that one instead of the open-coded version.
>> >
>>
>> I just tried to define LOAD_PHYSICAL_ADDR by ALIGN, but face a compile error
>> on compressed/head_[32|64].o.
>>
>> $ make arch/x86/boot/compressed/head_64.o
>> CALL scripts/checksyscalls.sh
>> DESCEND objtool
>> INSTALL libsubcmd_headers
>> AS arch/x86/boot/compressed/head_64.o
>> arch/x86/boot/compressed/head_64.S: Assembler messages:
>> arch/x86/boot/compressed/head_64.S:154: Error: junk (0x1000000,0x200000)' after expression
>> arch/x86/boot/compressed/head_64.S:154: Error: number of operands mismatch for 16' after expression
>> arch/x86/boot/compressed/head_64.S:157: Error: junk mov'
>> arch/x86/boot/compressed/head_64.S:330: Error: junk (0x1000000,0x200000)' after expression
>> arch/x86/boot/compressed/head_64.S:330: Error: number of operands mismatch for 16' after expression
>> arch/x86/boot/compressed/head_64.S:333: Error: junk movq'
>>
>> If my understanding is correct, the reason is linkage.h defines ALIGN, which
>> is ".balign xxx". Maybe this is why original LOAD_PHYSICAL_ADDR doesn't use
>> ALIGN.
>
>linkage.h defines __ALIGN, which is different from ALIGN().
>
linkage.h defines ALIGN to __ALIGN which is different from what we expect.
>Also, a number of .S files seem to be using some sort of ALIGN() method
>within arch/x86/, according to:
>
> git grep 'ALIGN(' -- 'arch/x86/*.S'
I tried below command by append '\<' to ALIGN
git grep '\<ALIGN(' -- 'arch/x86/*.S'
>
>> So is this ok to keep the open-coded definition?
>
>It would be nice to figure out why ALIGN() appears to be working in other
>cases in .S files, while not in this case.
>
Here is grep result
arch/x86/boot/compressed/vmlinux.lds.S: .data : ALIGN(0x1000) {
arch/x86/boot/compressed/vmlinux.lds.S: . = ALIGN(. + 4, 0x200);
arch/x86/boot/compressed/vmlinux.lds.S: . = ALIGN(L1_CACHE_BYTES);
arch/x86/boot/compressed/vmlinux.lds.S: . = ALIGN(8); /* For convenience during zeroing */
arch/x86/boot/compressed/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
arch/x86/boot/compressed/vmlinux.lds.S: . = ALIGN(PAGE_SIZE); /* keep ZO size page aligned */
arch/x86/kernel/vmlinux.lds.S:#define X86_ALIGN_RODATA_BEGIN . = ALIGN(HPAGE_SIZE);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(HPAGE_SIZE); \
arch/x86/kernel/vmlinux.lds.S:#define ALIGN_ENTRY_TEXT_BEGIN . = ALIGN(PMD_SIZE);
arch/x86/kernel/vmlinux.lds.S:#define ALIGN_ENTRY_TEXT_END . = ALIGN(PMD_SIZE);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PMD_SIZE); \
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE); \
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PMD_SIZE); \
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE); \
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(__vvar_page + PAGE_SIZE, PAGE_SIZE);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(8);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(8);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(8);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(8);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(8);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(8);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(8);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(8);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE); /* keep VO_INIT_SIZE page aligned */
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(HPAGE_SIZE);
arch/x86/kernel/vmlinux.lds.S: . = ALIGN(HPAGE_SIZE);
arch/x86/realmode/rm/realmode.lds.S: . = ALIGN(4);
arch/x86/realmode/rm/realmode.lds.S: . = ALIGN(16);
arch/x86/realmode/rm/realmode.lds.S: . = ALIGN(PAGE_SIZE);
arch/x86/realmode/rm/realmode.lds.S: . = ALIGN(PAGE_SIZE);
arch/x86/realmode/rm/realmode.lds.S: . = ALIGN(128);
arch/x86/realmode/rm/realmode.lds.S: . = ALIGN(4);
arch/x86/um/vdso/vdso-layout.lds.S: . = ALIGN(0x100);
It looks all happens in link script, not assembly source code.
And other grep result with "ALIGN" are:
SYM_CODE_START_NOALIGN
SYM_CODE_START_LOCAL_NOALIGN
SYM_FUNC_START_NOALIGN
SYM_FUNC_START_LOCAL_NOALIGN
SYM_INNER_LABEL_ALIGN
which are defined in linkage.h.
>Thanks,
>
> Ingo
--
Wei Yang
Help you, Help me
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/4] x86/boot: replace __PHYSICAL_START with LOAD_PHYSICAL_ADDR
2024-03-15 0:57 ` Wei Yang
@ 2024-03-16 17:44 ` Wei Yang
0 siblings, 0 replies; 19+ messages in thread
From: Wei Yang @ 2024-03-16 17:44 UTC (permalink / raw)
To: Ingo Molnar; +Cc: tglx, mingo, bp, dave.hansen, x86, linux-kernel
On Fri, Mar 15, 2024 at 12:57:37AM +0000, Wei Yang wrote:
>On Thu, Mar 14, 2024 at 10:25:53AM +0100, Ingo Molnar wrote:
>>
>>* Wei Yang <richard.weiyang@gmail.com> wrote:
>>
>>> On Wed, Mar 13, 2024 at 11:29:33AM +0100, Ingo Molnar wrote:
>>> >
>>> >* Wei Yang <richard.weiyang@gmail.com> wrote:
>>> >
>>> >> Both __PHYSICAL_START and LOAD_PHYSICAL_ADDR are defined to get aligned
>>> >> CONFIG_PHYSICAL_START, so we can replace __PHYSICAL_START with
>>> >> LOAD_PHYSICAL_ADDR. And then remove the definition of __PHYSICAL_START,
>>> >> which is only used to define __START_KERNEL.
>>> >>
>>> >> Since <asm/boot.h> includes <asm/pgtable_types.h>, which includes
>>> >> <asm/page_types.h>, it is fine to move definition from <asm/boot.h> to
>>> >> <asm/page_types.h>.
>>> >>
>>> >> Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
>>> >> ---
>>> >> arch/x86/include/asm/boot.h | 5 -----
>>> >> arch/x86/include/asm/page_types.h | 8 +++++---
>>> >> 2 files changed, 5 insertions(+), 8 deletions(-)
>>> >>
>>> >> diff --git a/arch/x86/include/asm/boot.h b/arch/x86/include/asm/boot.h
>>> >> index a38cc0afc90a..12cbc57d0128 100644
>>> >> --- a/arch/x86/include/asm/boot.h
>>> >> +++ b/arch/x86/include/asm/boot.h
>>> >> @@ -6,11 +6,6 @@
>>> >> #include <asm/pgtable_types.h>
>>> >> #include <uapi/asm/boot.h>
>>> >>
>>> >> -/* Physical address where kernel should be loaded. */
>>> >> -#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
>>> >> - + (CONFIG_PHYSICAL_ALIGN - 1)) \
>>> >> - & ~(CONFIG_PHYSICAL_ALIGN - 1))
>>> >> -
>>> >> /* Minimum kernel alignment, as a power of two */
>>> >> #ifdef CONFIG_X86_64
>>> >> # define MIN_KERNEL_ALIGN_LG2 PMD_SHIFT
>>> >> diff --git a/arch/x86/include/asm/page_types.h b/arch/x86/include/asm/page_types.h
>>> >> index 86bd4311daf8..acc1620fd121 100644
>>> >> --- a/arch/x86/include/asm/page_types.h
>>> >> +++ b/arch/x86/include/asm/page_types.h
>>> >> @@ -31,10 +31,12 @@
>>> >>
>>> >> #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC
>>> >>
>>> >> -#define __PHYSICAL_START ALIGN(CONFIG_PHYSICAL_START, \
>>> >> - CONFIG_PHYSICAL_ALIGN)
>>> >> +/* Physical address where kernel should be loaded. */
>>> >> +#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
>>> >> + + (CONFIG_PHYSICAL_ALIGN - 1)) \
>>> >> + & ~(CONFIG_PHYSICAL_ALIGN - 1))
>>> >
>>> >I agree with this simplification, but the ALIGN() expression is far easier
>>> >to read, so please keep that one instead of the open-coded version.
>>> >
>>>
>>> I just tried to define LOAD_PHYSICAL_ADDR by ALIGN, but face a compile error
>>> on compressed/head_[32|64].o.
>>>
>>> $ make arch/x86/boot/compressed/head_64.o
>>> CALL scripts/checksyscalls.sh
>>> DESCEND objtool
>>> INSTALL libsubcmd_headers
>>> AS arch/x86/boot/compressed/head_64.o
>>> arch/x86/boot/compressed/head_64.S: Assembler messages:
>>> arch/x86/boot/compressed/head_64.S:154: Error: junk (0x1000000,0x200000)' after expression
>>> arch/x86/boot/compressed/head_64.S:154: Error: number of operands mismatch for 16' after expression
>>> arch/x86/boot/compressed/head_64.S:157: Error: junk mov'
>>> arch/x86/boot/compressed/head_64.S:330: Error: junk (0x1000000,0x200000)' after expression
>>> arch/x86/boot/compressed/head_64.S:330: Error: number of operands mismatch for 16' after expression
>>> arch/x86/boot/compressed/head_64.S:333: Error: junk movq'
>>>
>>> If my understanding is correct, the reason is linkage.h defines ALIGN, which
>>> is ".balign xxx". Maybe this is why original LOAD_PHYSICAL_ADDR doesn't use
>>> ALIGN.
>>
>>linkage.h defines __ALIGN, which is different from ALIGN().
>>
>
>linkage.h defines ALIGN to __ALIGN which is different from what we expect.
>
>>Also, a number of .S files seem to be using some sort of ALIGN() method
>>within arch/x86/, according to:
>>
>> git grep 'ALIGN(' -- 'arch/x86/*.S'
>
>I tried below command by append '\<' to ALIGN
>
> git grep '\<ALIGN(' -- 'arch/x86/*.S'
>
>>
>>> So is this ok to keep the open-coded definition?
>>
>>It would be nice to figure out why ALIGN() appears to be working in other
>>cases in .S files, while not in this case.
>>
>
>Here is grep result
>
>arch/x86/boot/compressed/vmlinux.lds.S: .data : ALIGN(0x1000) {
>arch/x86/boot/compressed/vmlinux.lds.S: . = ALIGN(. + 4, 0x200);
>arch/x86/boot/compressed/vmlinux.lds.S: . = ALIGN(L1_CACHE_BYTES);
>arch/x86/boot/compressed/vmlinux.lds.S: . = ALIGN(8); /* For convenience during zeroing */
>arch/x86/boot/compressed/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
>arch/x86/boot/compressed/vmlinux.lds.S: . = ALIGN(PAGE_SIZE); /* keep ZO size page aligned */
>arch/x86/kernel/vmlinux.lds.S:#define X86_ALIGN_RODATA_BEGIN . = ALIGN(HPAGE_SIZE);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(HPAGE_SIZE); \
>arch/x86/kernel/vmlinux.lds.S:#define ALIGN_ENTRY_TEXT_BEGIN . = ALIGN(PMD_SIZE);
>arch/x86/kernel/vmlinux.lds.S:#define ALIGN_ENTRY_TEXT_END . = ALIGN(PMD_SIZE);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PMD_SIZE); \
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE); \
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PMD_SIZE); \
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE); \
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(__vvar_page + PAGE_SIZE, PAGE_SIZE);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(8);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(8);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(8);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(8);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(8);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(8);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(8);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(8);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(PAGE_SIZE); /* keep VO_INIT_SIZE page aligned */
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(HPAGE_SIZE);
>arch/x86/kernel/vmlinux.lds.S: . = ALIGN(HPAGE_SIZE);
>arch/x86/realmode/rm/realmode.lds.S: . = ALIGN(4);
>arch/x86/realmode/rm/realmode.lds.S: . = ALIGN(16);
>arch/x86/realmode/rm/realmode.lds.S: . = ALIGN(PAGE_SIZE);
>arch/x86/realmode/rm/realmode.lds.S: . = ALIGN(PAGE_SIZE);
>arch/x86/realmode/rm/realmode.lds.S: . = ALIGN(128);
>arch/x86/realmode/rm/realmode.lds.S: . = ALIGN(4);
>arch/x86/um/vdso/vdso-layout.lds.S: . = ALIGN(0x100);
>
>It looks all happens in link script, not assembly source code.
>
>And other grep result with "ALIGN" are:
>
> SYM_CODE_START_NOALIGN
> SYM_CODE_START_LOCAL_NOALIGN
> SYM_FUNC_START_NOALIGN
> SYM_FUNC_START_LOCAL_NOALIGN
> SYM_INNER_LABEL_ALIGN
>
>which are defined in linkage.h.
>
Hi, Ingo
Take another look into the usage.
In linkage.h, we have following definition:
#ifdef __ASSEMBLY__
#ifndef LINKER_SCRIPT
#define ALIGN __ALIGN
#endif
#endif
We would include linkage.h from .S and .lds.S. We both define __ASSEMBLY__ in
command line when building these target, but we would define LINKER_SCRIPT
when building .lds from .lds.S. This introduces the different behavior of
ALIGN.
* For .S, ALING is replaced by __ALIGN and then to .balign xxx
* For .lds, ALIGN is is not expanded, which is a lds keyword
Also linkage.h may be included in .c, e.g. head64.c. But we don't define
__ASSEMBLY__ in command line, which leads the ALIGN undefined until kernel.h
is included.
>>Thanks,
>>
>> Ingo
>
>--
>Wei Yang
>Help you, Help me
--
Wei Yang
Help you, Help me
^ permalink raw reply [flat|nested] 19+ messages in thread
* [tip: x86/build] x86/boot: Replace __PHYSICAL_START with LOAD_PHYSICAL_ADDR
2024-03-13 7:58 ` [PATCH 2/4] x86/boot: replace __PHYSICAL_START with LOAD_PHYSICAL_ADDR Wei Yang
2024-03-13 10:29 ` Ingo Molnar
2024-03-13 10:29 ` Nikolay Borisov
@ 2024-03-22 10:59 ` tip-bot2 for Wei Yang
2 siblings, 0 replies; 19+ messages in thread
From: tip-bot2 for Wei Yang @ 2024-03-22 10:59 UTC (permalink / raw)
To: linux-tip-commits; +Cc: Wei Yang, Ingo Molnar, x86, linux-kernel
The following commit has been merged into the x86/build branch of tip:
Commit-ID: 29b0aab841da3cade64c7e41e99e9f4645e65fb1
Gitweb: https://git.kernel.org/tip/29b0aab841da3cade64c7e41e99e9f4645e65fb1
Author: Wei Yang <richard.weiyang@gmail.com>
AuthorDate: Wed, 13 Mar 2024 07:58:37
Committer: Ingo Molnar <mingo@kernel.org>
CommitterDate: Fri, 22 Mar 2024 11:36:45 +01:00
x86/boot: Replace __PHYSICAL_START with LOAD_PHYSICAL_ADDR
Both __PHYSICAL_START and LOAD_PHYSICAL_ADDR are defined to get aligned
CONFIG_PHYSICAL_START, so we can replace __PHYSICAL_START with
LOAD_PHYSICAL_ADDR. And then remove the definition of __PHYSICAL_START,
which is only used to define __START_KERNEL.
Since <asm/boot.h> includes <asm/pgtable_types.h>, which includes
<asm/page_types.h>, it is fine to move definition from <asm/boot.h> to
<asm/page_types.h>.
Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/20240313075839.8321-3-richard.weiyang@gmail.com
---
arch/x86/include/asm/boot.h | 5 -----
arch/x86/include/asm/page_types.h | 8 +++++---
2 files changed, 5 insertions(+), 8 deletions(-)
diff --git a/arch/x86/include/asm/boot.h b/arch/x86/include/asm/boot.h
index a38cc0a..12cbc57 100644
--- a/arch/x86/include/asm/boot.h
+++ b/arch/x86/include/asm/boot.h
@@ -6,11 +6,6 @@
#include <asm/pgtable_types.h>
#include <uapi/asm/boot.h>
-/* Physical address where kernel should be loaded. */
-#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
- + (CONFIG_PHYSICAL_ALIGN - 1)) \
- & ~(CONFIG_PHYSICAL_ALIGN - 1))
-
/* Minimum kernel alignment, as a power of two */
#ifdef CONFIG_X86_64
# define MIN_KERNEL_ALIGN_LG2 PMD_SHIFT
diff --git a/arch/x86/include/asm/page_types.h b/arch/x86/include/asm/page_types.h
index 86bd431..acc1620 100644
--- a/arch/x86/include/asm/page_types.h
+++ b/arch/x86/include/asm/page_types.h
@@ -31,10 +31,12 @@
#define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC
-#define __PHYSICAL_START ALIGN(CONFIG_PHYSICAL_START, \
- CONFIG_PHYSICAL_ALIGN)
+/* Physical address where kernel should be loaded. */
+#define LOAD_PHYSICAL_ADDR ((CONFIG_PHYSICAL_START \
+ + (CONFIG_PHYSICAL_ALIGN - 1)) \
+ & ~(CONFIG_PHYSICAL_ALIGN - 1))
-#define __START_KERNEL (__START_KERNEL_map + __PHYSICAL_START)
+#define __START_KERNEL (__START_KERNEL_map + LOAD_PHYSICAL_ADDR)
#ifdef CONFIG_X86_64
#include <asm/page_64_types.h>
^ permalink raw reply related [flat|nested] 19+ messages in thread
end of thread, other threads:[~2024-03-22 10:59 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-13 7:58 [PATCH 0/4] Cleanup vmlinux.lds.S Wei Yang
2024-03-13 7:58 ` [PATCH 1/4] vmlinux.lds.h: fix a typo in comment Wei Yang
2024-03-13 10:39 ` [tip: x86/build] vmlinux.lds.h: Fix " tip-bot2 for Wei Yang
2024-03-13 7:58 ` [PATCH 2/4] x86/boot: replace __PHYSICAL_START with LOAD_PHYSICAL_ADDR Wei Yang
2024-03-13 10:29 ` Ingo Molnar
2024-03-14 0:54 ` Wei Yang
2024-03-14 3:23 ` Wei Yang
2024-03-14 9:25 ` Ingo Molnar
2024-03-15 0:57 ` Wei Yang
2024-03-16 17:44 ` Wei Yang
2024-03-13 10:29 ` Nikolay Borisov
2024-03-14 0:54 ` Wei Yang
2024-03-22 10:59 ` [tip: x86/build] x86/boot: Replace " tip-bot2 for Wei Yang
2024-03-13 7:58 ` [PATCH 3/4] x86/vmlinux.lds.S: remove conditional definition of LOAD_OFFSET Wei Yang
2024-03-13 10:39 ` [tip: x86/build] x86/vmlinux.lds.S: Remove " tip-bot2 for Wei Yang
2024-03-13 13:18 ` Borislav Petkov
2024-03-14 0:59 ` Wei Yang
2024-03-13 7:58 ` [PATCH 4/4] x86/vmlinux.lds.S: take __START_KERNEL out conditional definition Wei Yang
2024-03-13 10:39 ` [tip: x86/build] x86/vmlinux.lds.S: Take " tip-bot2 for Wei Yang
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).