Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp982580pxk; Thu, 3 Sep 2020 19:04:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzTtZkQ9gVcZJ2VHQlquelpJM7nI2TgY6VE0Zs9synwbQlPN75m2mFFCG+BM/wCvei/VO60 X-Received: by 2002:a17:907:214e:: with SMTP id rk14mr5372618ejb.171.1599185068339; Thu, 03 Sep 2020 19:04:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1599185068; cv=none; d=google.com; s=arc-20160816; b=tb3WuwGTxJwr3OFXC2zgnM9OwpqtqJw7VnriKaoyPboXlGAnRUp2H3iZqopafMq4yU Bok5LqPcTN49/ecOin8XDBVoNsD2U2g7jm3e446r70LZSTxzVs3eFl5xo6OltvD2XDJB Q9LUvD8e3sKciQ7mijjnjSnuWesYFmOdfL/CmREvDwwYxX0lCLANNH31tc1haaqigfhk alW+b0mg7pWKxosBUnR3ETU+NR/bKpKbueOzdkakzPTexbQu4X5+ASQboUVrboBEgJou njtJ/nUyQqdrKJCBhbfQQWDz77U4DjbEZwUZHUtqe8nPNtnOySP9lYgOHH+z+hunYIeg g1jg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dmarc-filter:dkim-signature; bh=R5koSp1TQhYlp1uOwdFEuOPb+yndppKWgSrSbtX3c/Y=; b=Q6LGlYFf+TCDuUkU0f3D5LQrM3qHeiniGiahoyKMxZ+NthwuYhGtc+x7VhoQ6CAuKa 0Am734tb63k3llqmXRnGSi2atgNt/FZSMQbw+8yoWI5BeC0k3PeCI/KDYOpeAqMGn4yp XFbIO9YTOGuqpS2tXbA/GJ7vWyHNjYH4hbRoC5+hqKwFYTOr8c8C+rBz8yQgKzDJ37oK Qxgqup2Rv0GdVrqhH2ACzaaFiOaleblaUdIOVUP+LUK8Bgg5dbE7TcGyY3JJNfnPE2K2 d9Mia1jkB188/hK0SGOUmDAADP7rS2X23dxFe597mYChdv/NpKmaKND3r3oitKEwIZ+z UloA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@mg.codeaurora.org header.s=smtp header.b=g769euq3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f12si3099012ejf.82.2020.09.03.19.04.05; Thu, 03 Sep 2020 19:04:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail header.i=@mg.codeaurora.org header.s=smtp header.b=g769euq3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729598AbgIDCD2 (ORCPT + 99 others); Thu, 3 Sep 2020 22:03:28 -0400 Received: from m43-7.mailgun.net ([69.72.43.7]:17966 "EHLO m43-7.mailgun.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729581AbgIDCD0 (ORCPT ); Thu, 3 Sep 2020 22:03:26 -0400 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1599185005; h=Content-Transfer-Encoding: MIME-Version: References: In-Reply-To: Message-Id: Date: Subject: Cc: To: From: Sender; bh=R5koSp1TQhYlp1uOwdFEuOPb+yndppKWgSrSbtX3c/Y=; b=g769euq3bBj7YhNe+3I53fWvOpm28ki27geoqUiDrlUEuJP4dZeRmV6d/9BPljOlqcA1Usph m9pGPy7mzw0KIiu9ybNHYUoRoUy58x7ILPVGX/cSJV7VDDDiRAL9C9UtB8MBT15pquhg9ini b6X5u5BZ58EZLRKoHI1eEtRmpLo= X-Mailgun-Sending-Ip: 69.72.43.7 X-Mailgun-Sid: WyI0MWYwYSIsICJsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnIiwgImJlOWU0YSJd Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by smtp-out-n04.prod.us-east-1.postgun.com with SMTP id 5f51a06c9f3347551fcf4a03 (version=TLS1.2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256); Fri, 04 Sep 2020 02:03:24 GMT Received: by smtp.codeaurora.org (Postfix, from userid 1001) id 1EBEFC43387; Fri, 4 Sep 2020 02:03:24 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-caf-mail-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=2.0 tests=ALL_TRUSTED,SPF_NONE, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from jordan-laptop.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: jcrouse) by smtp.codeaurora.org (Postfix) with ESMTPSA id AEDCAC43391; Fri, 4 Sep 2020 02:03:21 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org AEDCAC43391 Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: aws-us-west-2-caf-mail-1.web.codeaurora.org; spf=none smtp.mailfrom=jcrouse@codeaurora.org From: Jordan Crouse To: linux-arm-msm@vger.kernel.org Cc: stable@vger.kernel.org, Daniel Vetter , David Airlie , Greg Kroah-Hartman , Rob Clark , Sean Paul , Wambui Karuga , dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/4] drm/msm: Split the a5xx preemption record Date: Thu, 3 Sep 2020 20:03:10 -0600 Message-Id: <20200904020313.1810988-2-jcrouse@codeaurora.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200904020313.1810988-1-jcrouse@codeaurora.org> References: <20200904020313.1810988-1-jcrouse@codeaurora.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The main a5xx preemption record can be marked as privileged to protect it from user access but the counters storage needs to be remain unprivileged. Split the buffers and mark the critical memory as privileged. Cc: stable@vger.kernel.org Signed-off-by: Jordan Crouse --- drivers/gpu/drm/msm/adreno/a5xx_gpu.h | 1 + drivers/gpu/drm/msm/adreno/a5xx_preempt.c | 25 ++++++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a5xx_gpu.h b/drivers/gpu/drm/msm/adreno/a5xx_gpu.h index 54868d4e3958..1e5b1a15a70f 100644 --- a/drivers/gpu/drm/msm/adreno/a5xx_gpu.h +++ b/drivers/gpu/drm/msm/adreno/a5xx_gpu.h @@ -31,6 +31,7 @@ struct a5xx_gpu { struct msm_ringbuffer *next_ring; struct drm_gem_object *preempt_bo[MSM_GPU_MAX_RINGS]; + struct drm_gem_object *preempt_counters_bo[MSM_GPU_MAX_RINGS]; struct a5xx_preempt_record *preempt[MSM_GPU_MAX_RINGS]; uint64_t preempt_iova[MSM_GPU_MAX_RINGS]; diff --git a/drivers/gpu/drm/msm/adreno/a5xx_preempt.c b/drivers/gpu/drm/msm/adreno/a5xx_preempt.c index 9cf9353a7ff1..9f3fe177b00e 100644 --- a/drivers/gpu/drm/msm/adreno/a5xx_preempt.c +++ b/drivers/gpu/drm/msm/adreno/a5xx_preempt.c @@ -226,19 +226,31 @@ static int preempt_init_ring(struct a5xx_gpu *a5xx_gpu, struct adreno_gpu *adreno_gpu = &a5xx_gpu->base; struct msm_gpu *gpu = &adreno_gpu->base; struct a5xx_preempt_record *ptr; - struct drm_gem_object *bo = NULL; - u64 iova = 0; + void *counters; + struct drm_gem_object *bo = NULL, *counters_bo = NULL; + u64 iova = 0, counters_iova = 0; ptr = msm_gem_kernel_new(gpu->dev, A5XX_PREEMPT_RECORD_SIZE + A5XX_PREEMPT_COUNTER_SIZE, - MSM_BO_UNCACHED, gpu->aspace, &bo, &iova); + MSM_BO_UNCACHED | MSM_BO_MAP_PRIV, gpu->aspace, &bo, &iova); if (IS_ERR(ptr)) return PTR_ERR(ptr); + /* The buffer to store counters needs to be unprivileged */ + counters = msm_gem_kernel_new(gpu->dev, + A5XX_PREEMPT_COUNTER_SIZE, + MSM_BO_UNCACHED, gpu->aspace, &counters_bo, &counters_iova); + if (IS_ERR(counters)) { + msm_gem_kernel_put(bo, gpu->aspace, true); + return PTR_ERR(counters); + } + msm_gem_object_set_name(bo, "preempt"); + msm_gem_object_set_name(counters_bo, "preempt_counters"); a5xx_gpu->preempt_bo[ring->id] = bo; + a5xx_gpu->preempt_counters_bo[ring->id] = counters_bo; a5xx_gpu->preempt_iova[ring->id] = iova; a5xx_gpu->preempt[ring->id] = ptr; @@ -249,7 +261,7 @@ static int preempt_init_ring(struct a5xx_gpu *a5xx_gpu, ptr->data = 0; ptr->cntl = MSM_GPU_RB_CNTL_DEFAULT; ptr->rptr_addr = rbmemptr(ring, rptr); - ptr->counter = iova + A5XX_PREEMPT_RECORD_SIZE; + ptr->counter = counters_iova; return 0; } @@ -260,8 +272,11 @@ void a5xx_preempt_fini(struct msm_gpu *gpu) struct a5xx_gpu *a5xx_gpu = to_a5xx_gpu(adreno_gpu); int i; - for (i = 0; i < gpu->nr_rings; i++) + for (i = 0; i < gpu->nr_rings; i++) { msm_gem_kernel_put(a5xx_gpu->preempt_bo[i], gpu->aspace, true); + msm_gem_kernel_put(a5xx_gpu->preempt_counters_bo[i], + gpu->aspace, true); + } } void a5xx_preempt_init(struct msm_gpu *gpu) -- 2.25.1