From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933422AbcFQRZI (ORCPT ); Fri, 17 Jun 2016 13:25:08 -0400 Received: from foss.arm.com ([217.140.101.70]:52132 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755588AbcFQRZF (ORCPT ); Fri, 17 Jun 2016 13:25:05 -0400 Subject: Re: [PATCH 6/6] arm64: trap userspace "dc cvau" cache operation on errata-affected core To: Andre Przywara , Will Deacon , Catalin Marinas References: <1462812590-4494-1-git-send-email-andre.przywara@arm.com> <1462812590-4494-7-git-send-email-andre.przywara@arm.com> <57602DF2.1040501@arm.com> Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org From: Suzuki K Poulose Message-ID: <5764326E.1080702@arm.com> Date: Fri, 17 Jun 2016 18:25:02 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 17/06/16 18:20, Andre Przywara wrote: > Hi Suzuki, > > thanks for having a look! > > On 14/06/16 17:16, Suzuki K Poulose wrote: >> On 09/05/16 17:49, Andre Przywara wrote: >>> The ARM errata 819472, 826319, 827319 and 824069 for affected >>> Cortex-A53 cores demand to promote "dc cvau" instructions to >>> "dc civac". Since we allow userspace to also emit those instructions, >>> we should make sure that "dc cvau" gets promoted there too. >>> So lets grasp the nettle here and actually trap every userland cache >>> maintenance instruction once we detect at least one affected core in >>> the system. __user_cache_maint("dc civac", address, ret); >>> + break; >>> + case 10: /* DC CVAC, gets promoted */ >>> + __user_cache_maint("dc civac", address, ret); >>> + break; >>> + case 14: /* DC CIVAC */ >>> + __user_cache_maint("dc civac", address, ret); >>> + break; >>> + case 5: /* IC IVAU */ >>> + __user_cache_maint("ic ivau", address, ret); >>> + break; >>> + default: >>> + force_signal_inject(SIGILL, ILL_ILLOPC, regs, 0); >>> + return; >>> + } >>> + } else { >>> + force_signal_inject(SIGILL, ILL_ILLOPC, regs, 0); >>> + return; >> >> Correct me if I am wrong, I think we should handle DC ZVA and emulate >> the same ? >> Thats the only EL0 accessible instruction we don't handle above. > > Mmmh, but why should we care? > 1) DC ZVA is not trapped by setting SCTLR.UCI - instead it has its own > bit (SCTLR.DZE). You are right. I was thinking that UCI traps all DC operations. It only traps DC CVAU, DC CIVAC, DC CVAC, and IC IVAU. Cheers Suzuki