Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp2483765imj; Mon, 18 Feb 2019 06:49:19 -0800 (PST) X-Google-Smtp-Source: AHgI3IZF9BqLMHUAUXyK5+p7R8jR3qUlKwak0sv3yBAEpQn1E/VDws+swQgkFb/wLtbt8eEmkLrs X-Received: by 2002:a63:9c1a:: with SMTP id f26mr19429361pge.381.1550501359441; Mon, 18 Feb 2019 06:49:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1550501359; cv=none; d=google.com; s=arc-20160816; b=zMQdv8YPQ2LBV5FXlvFmq9tLPbFxh5am4Z77bgSS2qYaDzbLz8pkWtqs93lSBAvPRr S+nKed0buAyPQCbgJVkfa0pLK7kpShp+RRHvlRCgWbBf2Kq3LVS32oYnJXFANzCWfIww y8VuQ6U1q49YnQDCeB37HxKuAe3C3HFNP3kHqhOpHALzgYoiXvgQ/j9W1AHQFGPkaqWE blBDJgaYdjO/hqxtGFe1yIp68Z3JLByAkb/0HAQw/hfT+6z62jBTuuvGuT+URuZWgSMg 4v0QjvHcCznKkxkvBH1ta0muKBz6C2AVdQ+/C9NtWUW8mjdOjPHvdRgdqsMF81HiXwiI ioBQ== 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=CN4MTwCf3Zc/8zPE0XiOX8X2o6mOZ3of9lbT/95yTV8=; b=S06bhrDVe9WTOy4B6EFG56WdMNji1yHLCKkju/EuQyMtNDXVXUbI1XI8YhiVqSYsC8 Mi1mGeOFq/ztnOYQE9uCtYDhTWRm2nv94XlG8HC3biGJLI2Jasa4zNBk1A8CGPgSB0S7 mH1EmWyWpDqajUitRnZgU3RznXmH6mGB6STWU/b7goenU4EIaJfV5kqVcsqCIpuRZdPh +hsFE/10z9oxiD9IYaAYqyxboofTNolfsan0fCUPF6fuoel/S795YJB5LdbigBDbnN26 sxcarXe7C9QCRGASwR4YYavGpPhM4DJHXuEmi7cffY0MZ4YCbEgjxDobyyIe6uMk2ZW8 +Fug== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="qmDD/toK"; 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 d1si13052577pgg.301.2019.02.18.06.49.03; Mon, 18 Feb 2019 06:49:19 -0800 (PST) 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="qmDD/toK"; 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 S1731278AbfBRNpO (ORCPT + 99 others); Mon, 18 Feb 2019 08:45:14 -0500 Received: from mail.kernel.org ([198.145.29.99]:51224 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731243AbfBRNpM (ORCPT ); Mon, 18 Feb 2019 08:45:12 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.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 E09FD217F5; Mon, 18 Feb 2019 13:45:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1550497511; bh=L8M+5IJoOEq18hgdKu9M+U9V/xVcKbGVFewY0k6TDZM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qmDD/toKsGvNEfuDRwcLNn/MfEStEIUyFQr0Y5rdsPDcy+4IGZ3rTFooJuJOcFt8Y W8AnDJzixkSn9h10a5q5+SBrdLiLmneH5JmnMSDO3XeP4Xb2G0fchPfy6LVvvjI2y+ CUGUjKdZ/PTg2iKCeujvishQqz3s4YrZIErXgMDw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Guo Ren , Lu Baoquan , Sasha Levin Subject: [PATCH 4.20 14/92] csky: fixup CACHEV1 store instruction fast retire Date: Mon, 18 Feb 2019 14:42:17 +0100 Message-Id: <20190218133455.977184903@linuxfoundation.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190218133454.668268457@linuxfoundation.org> References: <20190218133454.668268457@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.20-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit 96354ad79e2e59f9d620669c8e1ac2452440c260 ] For I/O access, 810/807 store instruction fast retire will cause wrong primitive. For example: stw (clear interrupt source) stw (unmask interrupt controller) enable interrupt stw is fast retire instruction. When PC is run at enable interrupt stage, the clear interrupt source hasn't finished. It will cause another wrong irq-enter. So use mb() to prevent above. Signed-off-by: Guo Ren Cc: Lu Baoquan Signed-off-by: Sasha Levin --- arch/csky/include/asm/io.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/arch/csky/include/asm/io.h b/arch/csky/include/asm/io.h index ecae6b358f95..c1dfa9c10e36 100644 --- a/arch/csky/include/asm/io.h +++ b/arch/csky/include/asm/io.h @@ -15,6 +15,31 @@ extern void iounmap(void *addr); extern int remap_area_pages(unsigned long address, phys_addr_t phys_addr, size_t size, unsigned long flags); +/* + * I/O memory access primitives. Reads are ordered relative to any + * following Normal memory access. Writes are ordered relative to any prior + * Normal memory access. + * + * For CACHEV1 (807, 810), store instruction could fast retire, so we need + * another mb() to prevent st fast retire. + * + * For CACHEV2 (860), store instruction with PAGE_ATTR_NO_BUFFERABLE won't + * fast retire. + */ +#define readb(c) ({ u8 __v = readb_relaxed(c); rmb(); __v; }) +#define readw(c) ({ u16 __v = readw_relaxed(c); rmb(); __v; }) +#define readl(c) ({ u32 __v = readl_relaxed(c); rmb(); __v; }) + +#ifdef CONFIG_CPU_HAS_CACHEV2 +#define writeb(v,c) ({ wmb(); writeb_relaxed((v),(c)); }) +#define writew(v,c) ({ wmb(); writew_relaxed((v),(c)); }) +#define writel(v,c) ({ wmb(); writel_relaxed((v),(c)); }) +#else +#define writeb(v,c) ({ wmb(); writeb_relaxed((v),(c)); mb(); }) +#define writew(v,c) ({ wmb(); writew_relaxed((v),(c)); mb(); }) +#define writel(v,c) ({ wmb(); writel_relaxed((v),(c)); mb(); }) +#endif + #define ioremap_nocache(phy, sz) ioremap(phy, sz) #define ioremap_wc ioremap_nocache #define ioremap_wt ioremap_nocache -- 2.19.1