Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp591052img; Fri, 22 Mar 2019 04:42:31 -0700 (PDT) X-Google-Smtp-Source: APXvYqwR4BbDf00yA7fFj5tfu0ve2NLUBP4/HhR9csXsRVGnMifaOeyf8Cqx7jj9GTITOeV/hcH4 X-Received: by 2002:a17:902:9683:: with SMTP id n3mr9151118plp.333.1553254951711; Fri, 22 Mar 2019 04:42:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553254951; cv=none; d=google.com; s=arc-20160816; b=SVJ4XxXYQSagHMn58APbtF/AeA25hPnxi2Al635smQUt2ZEFwLNZwUgKQGzJCRedFq 0XnUKrkgCiCf+nkGRCzH1RJQJx2DajTYFXHL1JxnFwMzz9+BTgC45KZp2V57O1TyQ2GO HJD99luPl17/l2lSisAMOJ2GyUMpkBzaigeap01A0mEvIfanMK+Yzi7fxtc5EAUkB+2s qCzoa8QYygeBTodkgSUPYWtjZIV3fhUowZ7kHP2AB7kJr3FhEReufFf0UpvvpTkG6mQO my1h6RxeVHQZoc/hK2RsmEjBfy2gedo+I8a4SHXbymbWXZPzxks3lAnT9ok3168sguyS 10vA== 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=KOMLxg0p3AApClHL7tpoiOSplQXv/qGz0/F0aNTFAUc=; b=ztL96taLCMa5x07gtY5C5j+7IY7JSmpg4+BR3nnY6xTjolREggU6BVe7MnnzbEsNG+ izycBXkCwvjEP0U66MprqAxaAPlDj6K4G6tK1LIaAsYrpbbJ1bjKojkiMqxeWMZMWzq7 d5yM0At4euqKn6LkAjxddeRDub2tR21bv9tt0EGy2K3haMczzRHsA4M0hiVSBkJCtRWn /LPIZQPZ9wOq8DiBPxKa1yIJst8BKXZQxD4rJR8RM6mdzC9H2PweM8Solxc5vKb3qQZF YoXGfOfdZetxoKhPEd5ZdvsYhKpz/pXFUrHqpMHrIUBt9CRJlYOgWeaYs1oyhSarWBVE fxpw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=tPdnaD0m; 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 c127si6503397pfc.256.2019.03.22.04.42.16; Fri, 22 Mar 2019 04:42:31 -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=tPdnaD0m; 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 S1731352AbfCVLlB (ORCPT + 99 others); Fri, 22 Mar 2019 07:41:01 -0400 Received: from mail.kernel.org ([198.145.29.99]:43020 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731342AbfCVLlA (ORCPT ); Fri, 22 Mar 2019 07:41:00 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (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 F0F8A218B0; Fri, 22 Mar 2019 11:40:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553254859; bh=lFmSGhlZQTaOw3fM4AANBxMQOtobeXywLCg7OdJox0s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tPdnaD0m50AnzgfDLZsTy6bPEcke16KFtmFTaqaCjjMswuyGS/fz2+Uqa04P1rp0G HiQNODr1Zz2FtZrf6Jw4JRlJCok7AxbVc3UDyfzi6yZJfApE75oSImA+s7kliZG7Bt VKVFhrwEjXH5bFQ/Y0lme7bRWHiYO5KbfSHA7BZ8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Eugeniy Paltsev , Vineet Gupta , Sasha Levin Subject: [PATCH 4.9 033/118] ARCv2: lib: memcpy: fix doing prefetchw outside of buffer Date: Fri, 22 Mar 2019 12:15:05 +0100 Message-Id: <20190322111218.512422098@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190322111215.873964544@linuxfoundation.org> References: <20190322111215.873964544@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore 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.9-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit f8a15f97664178f27dfbf86a38f780a532cb6df0 ] ARCv2 optimized memcpy uses PREFETCHW instruction for prefetching the next cache line but doesn't ensure that the line is not past the end of the buffer. PRETECHW changes the line ownership and marks it dirty, which can cause data corruption if this area is used for DMA IO. Fix the issue by avoiding the PREFETCHW. This leads to performance degradation but it is OK as we'll introduce new memcpy implementation optimized for unaligned memory access using. We also cut off all PREFETCH instructions at they are quite useless here: * we call PREFETCH right before LOAD instruction call. * we copy 16 or 32 bytes of data (depending on CONFIG_ARC_HAS_LL64) in a main logical loop. so we call PREFETCH 4 times (or 2 times) for each L1 cache line (in case of 64B L1 cache Line which is default case). Obviously this is not optimal. Signed-off-by: Eugeniy Paltsev Signed-off-by: Vineet Gupta Signed-off-by: Sasha Levin --- arch/arc/lib/memcpy-archs.S | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/arch/arc/lib/memcpy-archs.S b/arch/arc/lib/memcpy-archs.S index d61044dd8b58..ea14b0bf3116 100644 --- a/arch/arc/lib/memcpy-archs.S +++ b/arch/arc/lib/memcpy-archs.S @@ -25,15 +25,11 @@ #endif #ifdef CONFIG_ARC_HAS_LL64 -# define PREFETCH_READ(RX) prefetch [RX, 56] -# define PREFETCH_WRITE(RX) prefetchw [RX, 64] # define LOADX(DST,RX) ldd.ab DST, [RX, 8] # define STOREX(SRC,RX) std.ab SRC, [RX, 8] # define ZOLSHFT 5 # define ZOLAND 0x1F #else -# define PREFETCH_READ(RX) prefetch [RX, 28] -# define PREFETCH_WRITE(RX) prefetchw [RX, 32] # define LOADX(DST,RX) ld.ab DST, [RX, 4] # define STOREX(SRC,RX) st.ab SRC, [RX, 4] # define ZOLSHFT 4 @@ -41,8 +37,6 @@ #endif ENTRY_CFI(memcpy) - prefetch [r1] ; Prefetch the read location - prefetchw [r0] ; Prefetch the write location mov.f 0, r2 ;;; if size is zero jz.d [blink] @@ -72,8 +66,6 @@ ENTRY_CFI(memcpy) lpnz @.Lcopy32_64bytes ;; LOOP START LOADX (r6, r1) - PREFETCH_READ (r1) - PREFETCH_WRITE (r3) LOADX (r8, r1) LOADX (r10, r1) LOADX (r4, r1) @@ -117,9 +109,7 @@ ENTRY_CFI(memcpy) lpnz @.Lcopy8bytes_1 ;; LOOP START ld.ab r6, [r1, 4] - prefetch [r1, 28] ;Prefetch the next read location ld.ab r8, [r1,4] - prefetchw [r3, 32] ;Prefetch the next write location SHIFT_1 (r7, r6, 24) or r7, r7, r5 @@ -162,9 +152,7 @@ ENTRY_CFI(memcpy) lpnz @.Lcopy8bytes_2 ;; LOOP START ld.ab r6, [r1, 4] - prefetch [r1, 28] ;Prefetch the next read location ld.ab r8, [r1,4] - prefetchw [r3, 32] ;Prefetch the next write location SHIFT_1 (r7, r6, 16) or r7, r7, r5 @@ -204,9 +192,7 @@ ENTRY_CFI(memcpy) lpnz @.Lcopy8bytes_3 ;; LOOP START ld.ab r6, [r1, 4] - prefetch [r1, 28] ;Prefetch the next read location ld.ab r8, [r1,4] - prefetchw [r3, 32] ;Prefetch the next write location SHIFT_1 (r7, r6, 8) or r7, r7, r5 -- 2.19.1