Received: by 2002:a25:b794:0:0:0:0:0 with SMTP id n20csp5743735ybh; Wed, 7 Aug 2019 10:39:03 -0700 (PDT) X-Google-Smtp-Source: APXvYqxVMzoBJGvs7Al3UvXM5qnH3kXe4bKDot7FJqcAQ03BYdYeNZAqrpWw/fWTOWeHAIcDeXH7 X-Received: by 2002:aa7:9786:: with SMTP id o6mr10258747pfp.222.1565199543460; Wed, 07 Aug 2019 10:39:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565199543; cv=none; d=google.com; s=arc-20160816; b=W3C6/GE251vrfAUJkqmzRBijEzk5yQECjV7aWNLcdi6XjrMEdbgER+dYJSP9dv5zAh NoR3U1JjMpix4EoXB+X7pZHyjkVTCUhe8ILr1WqiN94v7l64Ffwa7z2SvXDNwBbGGdYR 6M9rJyG0g885YUSjKeAulsMffAlRf5Z60QncupLrNAKdoEMHnsb3TyNnWkcrbk/7kd7n L01m+NyDZFfwvcmOSz/bf45+aNiyjK179bIYM0i9lPuNlojPuKyOoTgzhe1SRzy2Qi5j QiAZnF4L3/DKXHKUP8YwYmQZCeoY/DLdwilCbA1Bu/x6E+QtclSl66w+cEXaheryi+k7 YifQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=T9TxAR8paySSeT6CjAJ9MfPW3W4wvH5nzS2j2u8FE/w=; b=pQnXOn7RdPIz+t+hqMM/jAPJ8LA4N5XCffS0HMSKuHOXrz8ku+KO5+q9xnjQm1BNJb 30DyrHzhFc87L8WpozSg+uvnWGLI2zyGFhlhfPjaLGtUYG1jyZHo0chY/oTagJeQfWVN c8bOUnW7xF+Ul1rctSwV/i3JiJoQ05yBgmUxEJjdmM0hK6ggTrm9pW8SwqajwJVeib2u 4vZu7HqB5cb/43XVWdL20gpZoNb9Kp1nCCzwGee/5XqThhKG8HHNgH4Ux5ihiXIaRmna XQQK4tlz1gOutq/RtEPq9tad7+gIY5cYKH6GvVPPKwuphDLgtQwEJNBaJRsxdkL4uAWL p6KA== ARC-Authentication-Results: i=1; mx.google.com; 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 c127si53615078pfa.20.2019.08.07.10.38.47; Wed, 07 Aug 2019 10:39:03 -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; 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 S2388826AbfHGQuH (ORCPT + 99 others); Wed, 7 Aug 2019 12:50:07 -0400 Received: from foss.arm.com ([217.140.110.172]:51976 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387967AbfHGQuH (ORCPT ); Wed, 7 Aug 2019 12:50:07 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7600C344; Wed, 7 Aug 2019 09:50:06 -0700 (PDT) Received: from lakrids.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 711623F694; Wed, 7 Aug 2019 09:50:04 -0700 (PDT) Date: Wed, 7 Aug 2019 17:49:59 +0100 From: Mark Rutland To: Rob Clark Cc: Christoph Hellwig , Rob Clark , dri-devel , Catalin Marinas , Will Deacon , Maarten Lankhorst , Maxime Ripard , Sean Paul , David Airlie , Daniel Vetter , Allison Randal , Greg Kroah-Hartman , Thomas Gleixner , linux-arm-kernel@lists.infradead.org, LKML Subject: Re: [PATCH 1/2] drm: add cache support for arm64 Message-ID: <20190807164958.GA44765@lakrids.cambridge.arm.com> References: <20190805211451.20176-1-robdclark@gmail.com> <20190806084821.GA17129@lst.de> <20190806143457.GF475@lakrids.cambridge.arm.com> <20190807123807.GD54191@lakrids.cambridge.arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.11.1+11 (2f07cb52) (2018-12-01) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Aug 07, 2019 at 09:15:54AM -0700, Rob Clark wrote: > On Wed, Aug 7, 2019 at 5:38 AM Mark Rutland wrote: > > > > On Tue, Aug 06, 2019 at 09:31:55AM -0700, Rob Clark wrote: > > > On Tue, Aug 6, 2019 at 7:35 AM Mark Rutland wrote: > > > > > > > > On Tue, Aug 06, 2019 at 07:11:41AM -0700, Rob Clark wrote: > > > > > On Tue, Aug 6, 2019 at 1:48 AM Christoph Hellwig wrote: > > > > > > > > > > > > This goes in the wrong direction. drm_cflush_* are a bad API we need to > > > > > > get rid of, not add use of it. The reason for that is two-fold: > > > > > > > > > > > > a) it doesn't address how cache maintaince actually works in most > > > > > > platforms. When talking about a cache we three fundamental operations: > > > > > > > > > > > > 1) write back - this writes the content of the cache back to the > > > > > > backing memory > > > > > > 2) invalidate - this remove the content of the cache > > > > > > 3) write back + invalidate - do both of the above > > > > > > > > > > Agreed that drm_cflush_* isn't a great API. In this particular case > > > > > (IIUC), I need wb+inv so that there aren't dirty cache lines that drop > > > > > out to memory later, and so that I don't get a cache hit on > > > > > uncached/wc mmap'ing. > > > > > > > > Is there a cacheable alias lying around (e.g. the linear map), or are > > > > these addresses only mapped uncached/wc? > > > > > > > > If there's a cacheable alias, performing an invalidate isn't sufficient, > > > > since a CPU can allocate a new (clean) entry at any point in time (e.g. > > > > as a result of prefetching or arbitrary speculation). > > > > > > I *believe* that there are not alias mappings (that I don't control > > > myself) for pages coming from > > > shmem_file_setup()/shmem_read_mapping_page().. > > > > AFAICT, that's regular anonymous memory, so there will be a cacheable > > alias in the linear/direct map. > > tbh, I'm not 100% sure whether there is a cacheable alias, or whether > any potential linear map is torn down. I'm fairly confident that the linear/direct map cacheable alias is not torn down when pages are allocated. The gneeric page allocation code doesn't do so, and I see nothing the shmem code to do so. For arm64, we can tear down portions of the linear map, but that has to be done explicitly, and this is only possible when using rodata_full. If not using rodata_full, it is not possible to dynamically tear down the cacheable alias. > My understanding is that a cacheable alias is "ok", with some > caveats.. ie. that the cacheable alias is not accessed. Unfortunately, that is not true. You'll often get away with it in practice, but that's a matter of probability rather than a guarantee. You cannot prevent a CPU from accessing a VA arbitrarily (e.g. as the result of wild speculation). The ARM ARM (ARM DDI 0487E.a) points this out explicitly: | Entries for addresses that are Normal Cacheable can be allocated to | the cache at any time, and so the cache invalidate instruction cannot | ensure that the address is not present in a cache. ... along with: | Caches introduce a number of potential problems, mainly because: | | * Memory accesses can occur at times other than when the programmer | would expect them. ;) > I'm not entirely sure about pre-fetch from access to adjacent pages. > We have been using shmem as a source for pages since the beginning, > and I haven't seen it cause any problems in the last 6 years. (This > is limited to armv7 and armv8, I'm not really sure what would happen > on armv6, but that is a combo I don't have to care about.) Over time, CPUs get more aggressive w.r.t. prefetching and speculation, so having not seen such issues in the past does not imply we won't in future. Anecdotally, we had an issue a few years ago that we were only able to reproduce under heavy stress testing. A CPU would make speculative instruction fetches from a read-destructive MMIO register, despite the PC never going near the corresponding VA, and despite that code having (apparently) caused no issue for years before that. See commit: b6ccb9803e90c16b ("ARM: 7954/1: mm: remove remaining domain support from ARMv6") ... which unfortunately lacks the full war story. Thanks, Mark.