]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
powerpc/64s: Fix unnecessary copy to 0 when kernel is booted at address 0
authorJinglin Wen <jinglin.wen@shingroup.cn>
Thu, 20 Jun 2024 02:41:50 +0000 (10:41 +0800)
committerMichael Ellerman <mpe@ellerman.id.au>
Sun, 23 Jun 2024 01:54:13 +0000 (11:54 +1000)
According to the code logic, when the kernel is loaded at address 0, no
copying operation should be performed, but it is currently being done.

This patch fixes the issue where the kernel code was incorrectly
duplicated to address 0 when booting from address 0.

Fixes: b270bebd34e3 ("powerpc/64s: Run at the kernel virtual address earlier in boot")
Cc: stable@vger.kernel.org # v6.4+
Signed-off-by: Jinglin Wen <jinglin.wen@shingroup.cn>
Suggested-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20240620024150.14857-1-jinglin.wen@shingroup.cn
arch/powerpc/kernel/head_64.S

index 4690c219bfa4dfe72e65ec509acc0bf8841ee6e1..63432a33ec49ac43d4bd12f97d9df120cc3d9ec3 100644 (file)
@@ -647,8 +647,9 @@ __after_prom_start:
  * Note: This process overwrites the OF exception vectors.
  */
        LOAD_REG_IMMEDIATE(r3, PAGE_OFFSET)
-       mr.     r4,r26                  /* In some cases the loader may  */
-       beq     9f                      /* have already put us at zero */
+       mr      r4,r26                  /* Load the virtual source address into r4 */
+       cmpld   r3,r4                   /* Check if source == dest */
+       beq     9f                      /* If so skip the copy  */
        li      r6,0x100                /* Start offset, the first 0x100 */
                                        /* bytes were copied earlier.    */