Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp2342946imm; Thu, 11 Oct 2018 08:48:57 -0700 (PDT) X-Google-Smtp-Source: ACcGV61hXUNmq7CvJaN+XqodNCkyy4eTwsWK33A2Mw5ijWPRp1K0crUjWKrRMcZGocbT5LQhLG/K X-Received: by 2002:a17:902:b28b:: with SMTP id u11-v6mr2066659plr.326.1539272937567; Thu, 11 Oct 2018 08:48:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539272937; cv=none; d=google.com; s=arc-20160816; b=KOs/I8FBCk7rNd1g4QDlwhhUn/VfR2ONB0ea2pMuULB3Bcx7Shs0rJln2MmDmB/nVn DjMqwA2ZMJ9HPqBqzLnQuOUsGDh/pNECQcGALiV0R8DspIQ+8MlPb+eEwHuQiZQzYQgA uKCRXpWKEvxEfgea0706Vo6LQmdagcPkQ9aSCe7Dk04u7ltcpdKNOSiBavP3UyviQPPw P1J9zDOtHMH7HRwJPulUOMZLHX73ZdXaUp91NC2JiDzGxKLl90sWuP2QeHrpePUdwL1R L+naSJmALdibBrPUtP2SbbAezkIBTMYtz8c96r5dLiSuxGbjWRiwhYhGGQKzzn2R7Hp5 OX9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=/udIXsSuE5wOZkjKIer8M40bT4udovg5j03f6rFwo5A=; b=aZvYI6JdfCG2t+7NhzoLGmA+JQ8YeP/dv794ALpHIzf0L+HWTL0F5Hi/m57Vs4tDAm MpcWzgdfmYV06s3nTYEn1bTtJCzKA2OPzBwT3Vn/KoukzTZY/WB8/r8noXWbdeKcUkba +qvwoszGBy+xI6UEgFUSkcUamx5Gkt0UPh/nTnfCb0CeEFQjkPRon9Lbm9bSBWa4kYjh Iw/QaLNvV6czotYslovE4vRH9MMCTxzvgnbCUwd5pO1Lv6Uu809RWsJkTA5SuhtiUo9c KCUC13POIaAfBz0TzQ/0RHC9mai4kMETAYLNTylxCesAGZef6r0TbeMYcVJSXh/fqqib YVJw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=rtDF0jIC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u38-v6si26814517pgn.106.2018.10.11.08.48.43; Thu, 11 Oct 2018 08:48:57 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=rtDF0jIC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731526AbeJKXOB (ORCPT + 99 others); Thu, 11 Oct 2018 19:14:01 -0400 Received: from mail.kernel.org ([198.145.29.99]:46842 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726700AbeJKXOA (ORCPT ); Thu, 11 Oct 2018 19:14:00 -0400 Received: from localhost (ip-213-127-77-176.ip.prioritytelecom.net [213.127.77.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 4A45C2085B; Thu, 11 Oct 2018 15:46:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1539272774; bh=9Ml3iNPT1TotYWP7bTmpSA9Wsp4Gn8KUUdkNbsE5xq4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rtDF0jIClnZ0Y+AgO0zp/6Pklz+ZHOaVv4w/HZVg+40ChmVOUttDK+Y0hk74B2A6T SH0SHEvoIzAb8zGbGjVyljlEU9GBK1INv1ildgNoN3C3tg9o8aNFhRy5BRxtxbL9pe 3bkI9+NstedxLr4YfViS530U2ZDCz+F5sKSwAVew= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Christophe Leroy , Balbir Singh , Michael Ellerman Subject: [PATCH 4.14 33/45] powerpc/lib/code-patching: refactor patch_instruction() Date: Thu, 11 Oct 2018 17:40:00 +0200 Message-Id: <20181011152510.361835278@linuxfoundation.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181011152508.885515042@linuxfoundation.org> References: <20181011152508.885515042@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Christophe Leroy commit 8cf4c05712f04a405f0dacebcca8f042b391694a upstream. patch_instruction() uses almost the same sequence as __patch_instruction() This patch refactor it so that patch_instruction() uses __patch_instruction() instead of duplicating code. Signed-off-by: Christophe Leroy Acked-by: Balbir Singh Signed-off-by: Michael Ellerman Signed-off-by: Greg Kroah-Hartman --- arch/powerpc/lib/code-patching.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) --- a/arch/powerpc/lib/code-patching.c +++ b/arch/powerpc/lib/code-patching.c @@ -23,19 +23,26 @@ #include #include -static int __patch_instruction(unsigned int *addr, unsigned int instr) +static int __patch_instruction(unsigned int *exec_addr, unsigned int instr, + unsigned int *patch_addr) { int err; - __put_user_size(instr, addr, 4, err); + __put_user_size(instr, patch_addr, 4, err); if (err) return err; - asm ("dcbst 0, %0; sync; icbi 0,%0; sync; isync" :: "r" (addr)); + asm ("dcbst 0, %0; sync; icbi 0,%1; sync; isync" :: "r" (patch_addr), + "r" (exec_addr)); return 0; } +static int raw_patch_instruction(unsigned int *addr, unsigned int instr) +{ + return __patch_instruction(addr, instr, addr); +} + #ifdef CONFIG_STRICT_KERNEL_RWX static DEFINE_PER_CPU(struct vm_struct *, text_poke_area); @@ -138,7 +145,7 @@ static inline int unmap_patch_area(unsig int patch_instruction(unsigned int *addr, unsigned int instr) { int err; - unsigned int *dest = NULL; + unsigned int *patch_addr = NULL; unsigned long flags; unsigned long text_poke_addr; unsigned long kaddr = (unsigned long)addr; @@ -149,7 +156,7 @@ int patch_instruction(unsigned int *addr * to allow patching. We just do the plain old patching */ if (!this_cpu_read(*PTRRELOC(&text_poke_area))) - return __patch_instruction(addr, instr); + return raw_patch_instruction(addr, instr); local_irq_save(flags); @@ -159,17 +166,10 @@ int patch_instruction(unsigned int *addr goto out; } - dest = (unsigned int *)(text_poke_addr) + + patch_addr = (unsigned int *)(text_poke_addr) + ((kaddr & ~PAGE_MASK) / sizeof(unsigned int)); - /* - * We use __put_user_size so that we can handle faults while - * writing to dest and return err to handle faults gracefully - */ - __put_user_size(instr, dest, 4, err); - if (!err) - asm ("dcbst 0, %0; sync; icbi 0,%0; icbi 0,%1; sync; isync" - ::"r" (dest), "r"(addr)); + __patch_instruction(addr, instr, patch_addr); err = unmap_patch_area(text_poke_addr); if (err) @@ -184,7 +184,7 @@ out: int patch_instruction(unsigned int *addr, unsigned int instr) { - return __patch_instruction(addr, instr); + return raw_patch_instruction(addr, instr); } #endif /* CONFIG_STRICT_KERNEL_RWX */