From nobody Wed May 25 10:38:48 2022 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 69B751B4B74F; Wed, 25 May 2022 10:38:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4L7SGd1SC8z4kk4; Wed, 25 May 2022 10:38:49 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1653475129; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=vVkaZbGDntKcsqGVpUsFczmUy/NlrsQjrl5oKROJsqI=; b=sWEb2685clEPR10YK7qp2B1+H+GfPT6GZr+pMUdk+xMLuSNUZScXQbB0KSs4muSXATRFUO F7sCjmHRCn/7MY7comFRwuFDCooFv3Ug4KxMNS+imoq0zdr22kWaXzkZeeoP1QrwSA2FZn U1IQoexQHG+nFO0Rj2vhbng9URQjsmg8jxGFRhNF++6UDDzAqpJ47y2UiftvOOEahTgAgZ 0D3BdU32rJGMTRNbAmO5CyG0ty8afWi9fXPrc64gJ0WI2OtoPq8BHeTDGyZhos0K2z92Sg wcjoRG9xBYyU7l6IXd098r6EL06Ow3K4wkb/Usqd+LUXaMtBdF89AmzaIrVHCA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 02ED9176F0; Wed, 25 May 2022 10:38:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 24PAcmht042358; Wed, 25 May 2022 10:38:48 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 24PAcmuH042357; Wed, 25 May 2022 10:38:48 GMT (envelope-from git) Date: Wed, 25 May 2022 10:38:48 GMT Message-Id: <202205251038.24PAcmuH042357@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andrew Turner Subject: git: e605b87a9e75 - main - Save only callee-saved registers in pcb List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e605b87a9e75a7f693527f0aad8189ae9db20f16 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1653475129; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=vVkaZbGDntKcsqGVpUsFczmUy/NlrsQjrl5oKROJsqI=; b=NQ7Ri7MEdOtPXgNuAWB2iJbZ1QoruH06p0BAUNlKwyJgJqWuaKRbNtZM5D7FZIvuj8UPkp y2w/Ur79A9nW3wIFG/ea+8MRpyIr2IpyB4s6rlWRHEEip6fLk67P7l2TJJHTO9Gd7ZeYT7 Ha4+KBf+Rq0OSzd4ffUXZgg5YZT0vS26sWZt0XuAyVBp3tud70j4ElRHGdaelUNx5gV/NG UmUaOkGuw0RaOn34qt2xujVNByiffq4JJGSllOzfnZX8FHQJ7gN/LEtSMiRf+167o/SR/2 kp4zUOYv2kgDvUpHtqHzl4dazCp4+sNqfcbeEUyvljgKrNGX/HfREvVq2u/hoQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1653475129; a=rsa-sha256; cv=none; b=AT5ruiwe8NYC+L1qARamXJ+J+uwpf2TxvztSmr8/aiZf5eVnlrsj4oWPa7gHEGP71MIChP r4HENXL1yVB37QpRdIkHGQ7y2nUzxMa0fJmVuwI8ZnI7buVHHX83fpFfNZlL06URSwsGo8 351ENNL2LMreWiLfijWUuabVGhRDkx8EgjBlm0cNbO9FcfC3WObnOfejaDefMTjoFsudBZ EqQWzY1WEZT90x0fN0O/K0jzC0qxwi0gIv7yb4RUmQ2SAAekJTBh6yROetFQZM9nForqjr BwPyY7hKhrSUHjqP94Ss3CJ5tdGAuyNAfkO0PoZ9lBSk39fyvXVckQYoE3OAgQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=e605b87a9e75a7f693527f0aad8189ae9db20f16 commit e605b87a9e75a7f693527f0aad8189ae9db20f16 Author: Dapeng Gao AuthorDate: 2022-05-25 10:25:06 +0000 Commit: Andrew Turner CommitDate: 2022-05-25 10:26:30 +0000 Save only callee-saved registers in pcb On AArch64, registers x9-x18 are not callee-saved, yet they are preserved at many placed in swtch.S. This patch removes code that preserves these registers. --- sys/arm64/arm64/swtch.S | 76 +++++++++++++++----------------------------- sys/arm64/arm64/vm_machdep.c | 12 +++---- 2 files changed, 32 insertions(+), 56 deletions(-) diff --git a/sys/arm64/arm64/swtch.S b/sys/arm64/arm64/swtch.S index 081bdfe88126..d7f915a91946 100644 --- a/sys/arm64/arm64/swtch.S +++ b/sys/arm64/arm64/swtch.S @@ -94,18 +94,12 @@ ENTRY(cpu_throw) msr tpidr_el0, x6 ldr x6, [x4, #PCB_TPIDRRO] msr tpidrro_el0, x6 - ldp x8, x9, [x4, #PCB_REGS + 8 * 8] - ldp x10, x11, [x4, #PCB_REGS + 10 * 8] - ldp x12, x13, [x4, #PCB_REGS + 12 * 8] - ldp x14, x15, [x4, #PCB_REGS + 14 * 8] - ldp x16, x17, [x4, #PCB_REGS + 16 * 8] - ldr x19, [x4, #PCB_REGS + 19 * 8] - ldp x20, x21, [x4, #PCB_REGS + 20 * 8] - ldp x22, x23, [x4, #PCB_REGS + 22 * 8] - ldp x24, x25, [x4, #PCB_REGS + 24 * 8] - ldp x26, x27, [x4, #PCB_REGS + 26 * 8] - ldp x28, x29, [x4, #PCB_REGS + 28 * 8] - ldr lr, [x4, #PCB_LR] + ldp x19, x20, [x4, #PCB_REGS + 19 * 8] + ldp x21, x22, [x4, #PCB_REGS + 21 * 8] + ldp x23, x24, [x4, #PCB_REGS + 23 * 8] + ldp x25, x26, [x4, #PCB_REGS + 25 * 8] + ldp x27, x28, [x4, #PCB_REGS + 27 * 8] + ldp x29, lr, [x4, #PCB_REGS + 29 * 8] ret END(cpu_throw) @@ -125,18 +119,12 @@ ENTRY(cpu_switch) ldr x4, [x0, #TD_PCB] /* Store the callee-saved registers */ - stp x8, x9, [x4, #PCB_REGS + 8 * 8] - stp x10, x11, [x4, #PCB_REGS + 10 * 8] - stp x12, x13, [x4, #PCB_REGS + 12 * 8] - stp x14, x15, [x4, #PCB_REGS + 14 * 8] - stp x16, x17, [x4, #PCB_REGS + 16 * 8] - stp x18, x19, [x4, #PCB_REGS + 18 * 8] - stp x20, x21, [x4, #PCB_REGS + 20 * 8] - stp x22, x23, [x4, #PCB_REGS + 22 * 8] - stp x24, x25, [x4, #PCB_REGS + 24 * 8] - stp x26, x27, [x4, #PCB_REGS + 26 * 8] - stp x28, x29, [x4, #PCB_REGS + 28 * 8] - str lr, [x4, #PCB_LR] + stp x19, x20, [x4, #PCB_REGS + 19 * 8] + stp x21, x22, [x4, #PCB_REGS + 21 * 8] + stp x23, x24, [x4, #PCB_REGS + 23 * 8] + stp x25, x26, [x4, #PCB_REGS + 25 * 8] + stp x27, x28, [x4, #PCB_REGS + 27 * 8] + stp x29, lr, [x4, #PCB_REGS + 29 * 8] /* And the old stack pointer */ mov x5, sp mrs x6, tpidrro_el0 @@ -195,26 +183,20 @@ ENTRY(cpu_switch) msr tpidr_el0, x6 ldr x6, [x4, #PCB_TPIDRRO] msr tpidrro_el0, x6 - ldp x8, x9, [x4, #PCB_REGS + 8 * 8] - ldp x10, x11, [x4, #PCB_REGS + 10 * 8] - ldp x12, x13, [x4, #PCB_REGS + 12 * 8] - ldp x14, x15, [x4, #PCB_REGS + 14 * 8] - ldp x16, x17, [x4, #PCB_REGS + 16 * 8] - ldr x19, [x4, #PCB_REGS + 19 * 8] - ldp x20, x21, [x4, #PCB_REGS + 20 * 8] - ldp x22, x23, [x4, #PCB_REGS + 22 * 8] - ldp x24, x25, [x4, #PCB_REGS + 24 * 8] - ldp x26, x27, [x4, #PCB_REGS + 26 * 8] - ldp x28, x29, [x4, #PCB_REGS + 28 * 8] - ldr lr, [x4, #PCB_LR] + ldp x19, x20, [x4, #PCB_REGS + 19 * 8] + ldp x21, x22, [x4, #PCB_REGS + 21 * 8] + ldp x23, x24, [x4, #PCB_REGS + 23 * 8] + ldp x25, x26, [x4, #PCB_REGS + 25 * 8] + ldp x27, x28, [x4, #PCB_REGS + 27 * 8] + ldp x29, lr, [x4, #PCB_REGS + 29 * 8] str xzr, [x4, #PCB_REGS + 18 * 8] ret END(cpu_switch) ENTRY(fork_trampoline) - mov x0, x8 - mov x1, x9 + mov x0, x19 + mov x1, x20 mov x2, sp mov fp, #0 /* Stack traceback stops here. */ bl _C_LABEL(fork_exit) @@ -263,18 +245,12 @@ END(fork_trampoline) ENTRY(savectx) /* Store the callee-saved registers */ - stp x8, x9, [x0, #PCB_REGS + 8 * 8] - stp x10, x11, [x0, #PCB_REGS + 10 * 8] - stp x12, x13, [x0, #PCB_REGS + 12 * 8] - stp x14, x15, [x0, #PCB_REGS + 14 * 8] - stp x16, x17, [x0, #PCB_REGS + 16 * 8] - stp x18, x19, [x0, #PCB_REGS + 18 * 8] - stp x20, x21, [x0, #PCB_REGS + 20 * 8] - stp x22, x23, [x0, #PCB_REGS + 22 * 8] - stp x24, x25, [x0, #PCB_REGS + 24 * 8] - stp x26, x27, [x0, #PCB_REGS + 26 * 8] - stp x28, x29, [x0, #PCB_REGS + 28 * 8] - str lr, [x0, #PCB_LR] + stp x19, x20, [x0, #PCB_REGS + 19 * 8] + stp x21, x22, [x0, #PCB_REGS + 21 * 8] + stp x23, x24, [x0, #PCB_REGS + 23 * 8] + stp x25, x26, [x0, #PCB_REGS + 25 * 8] + stp x27, x28, [x0, #PCB_REGS + 27 * 8] + stp x29, lr, [x0, #PCB_REGS + 29 * 8] /* And the old stack pointer */ mov x5, sp mrs x6, tpidrro_el0 diff --git a/sys/arm64/arm64/vm_machdep.c b/sys/arm64/arm64/vm_machdep.c index c52a7e2fc5c1..feb439314f50 100644 --- a/sys/arm64/arm64/vm_machdep.c +++ b/sys/arm64/arm64/vm_machdep.c @@ -105,8 +105,8 @@ cpu_fork(struct thread *td1, struct proc *p2, struct thread *td2, int flags) td2->td_frame = tf; /* Set the return value registers for fork() */ - td2->td_pcb->pcb_x[8] = (uintptr_t)fork_return; - td2->td_pcb->pcb_x[9] = (uintptr_t)td2; + td2->td_pcb->pcb_x[19] = (uintptr_t)fork_return; + td2->td_pcb->pcb_x[20] = (uintptr_t)td2; td2->td_pcb->pcb_lr = (uintptr_t)fork_trampoline; td2->td_pcb->pcb_sp = (uintptr_t)td2->td_frame; td2->td_pcb->pcb_fpusaved = &td2->td_pcb->pcb_fpustate; @@ -183,8 +183,8 @@ cpu_copy_thread(struct thread *td, struct thread *td0) bcopy(td0->td_frame, td->td_frame, sizeof(struct trapframe)); bcopy(td0->td_pcb, td->td_pcb, sizeof(struct pcb)); - td->td_pcb->pcb_x[8] = (uintptr_t)fork_return; - td->td_pcb->pcb_x[9] = (uintptr_t)td; + td->td_pcb->pcb_x[19] = (uintptr_t)fork_return; + td->td_pcb->pcb_x[20] = (uintptr_t)td; td->td_pcb->pcb_lr = (uintptr_t)fork_trampoline; td->td_pcb->pcb_sp = (uintptr_t)td->td_frame; td->td_pcb->pcb_fpflags &= ~(PCB_FP_STARTED | PCB_FP_KERN | PCB_FP_NOSAVE); @@ -287,8 +287,8 @@ void cpu_fork_kthread_handler(struct thread *td, void (*func)(void *), void *arg) { - td->td_pcb->pcb_x[8] = (uintptr_t)func; - td->td_pcb->pcb_x[9] = (uintptr_t)arg; + td->td_pcb->pcb_x[19] = (uintptr_t)func; + td->td_pcb->pcb_x[20] = (uintptr_t)arg; } void