From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.8 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2D7C2C5AC81 for ; Fri, 18 Jan 2019 18:38:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id EABE220850 for ; Fri, 18 Jan 2019 18:38:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="l0xfzVJF"; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="IcbAiLnw" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729175AbfARSiG (ORCPT ); Fri, 18 Jan 2019 13:38:06 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:36122 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729126AbfARSiE (ORCPT ); Fri, 18 Jan 2019 13:38:04 -0500 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 75F5A608EA; Fri, 18 Jan 2019 18:38:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1547836682; bh=t2obj2KYN0yWx1JS1XYvQGTnqXCVaTHFozGLl/GXT1c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=l0xfzVJF2V2ZNjHP09urtk+t1zstnBVt9lI+lzj3qQ+kIsj/mKRrHrKEuEeM8FI5B 3zi5XDYb0g89hsVgBn/D0iGwLOS55uecbapPDfAGq/vqEdWutTkMx/dIKzq0gc+8Mn y+XHNEO0XsoSqXvSas0gsbrTi19Mz9SUml413lA8= Received: from lmark-linux.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: lmark@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 716BE6087D; Fri, 18 Jan 2019 18:38:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1547836681; bh=t2obj2KYN0yWx1JS1XYvQGTnqXCVaTHFozGLl/GXT1c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IcbAiLnweMFMJqHN3VgoNmdQ5Rk7v90GLk1FOKhs+0/ofS2R7VhqTvb3Xa+fSR7WV 4Fu7GnWBRxL0SSPsGyQhAOiYFzLLDVgfaXu42Nj3y+yJy8vhkY6Wj89eduXnHq2LhQ euW5cjP1mdTZXcUnL7+YnVkLAUqvvUa38pkEKD0A= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 716BE6087D Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=lmark@codeaurora.org From: Liam Mark To: labbott@redhat.com, sumit.semwal@linaro.org Cc: arve@android.com, tkjos@android.com, maco@android.com, joel@joelfernandes.org, christian@brauner.io, devel@driverdev.osuosl.org, dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, linux-kernel@vger.kernel.org, afd@ti.com, john.stultz@linaro.org, Liam Mark Subject: [PATCH 2/4] staging: android: ion: Restrict cache maintenance to dma mapped memory Date: Fri, 18 Jan 2019 10:37:45 -0800 Message-Id: <1547836667-13695-3-git-send-email-lmark@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1547836667-13695-1-git-send-email-lmark@codeaurora.org> References: <1547836667-13695-1-git-send-email-lmark@codeaurora.org> 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 The ION begin_cpu_access and end_cpu_access functions use the dma_sync_sg_for_cpu and dma_sync_sg_for_device APIs to perform cache maintenance. Currently it is possible to apply cache maintenance, via the begin_cpu_access and end_cpu_access APIs, to ION buffers which are not dma mapped. The dma sync sg APIs should not be called on sg lists which have not been dma mapped as this can result in cache maintenance being applied to the wrong address. If an sg list has not been dma mapped then its dma_address field has not been populated, some dma ops such as the swiotlb_dma_ops ops use the dma_address field to calculate the address onto which to apply cache maintenance. Also I don’t think we want CMOs to be applied to a buffer which is not dma mapped as the memory should already be coherent for access from the CPU. Any CMOs required for device access taken care of in the dma_buf_map_attachment and dma_buf_unmap_attachment calls. So really it only makes sense for begin_cpu_access and end_cpu_access to apply CMOs if the buffer is dma mapped. Fix the ION begin_cpu_access and end_cpu_access functions to only apply cache maintenance to buffers which are dma mapped. Fixes: 2a55e7b5e544 ("staging: android: ion: Call dma_map_sg for syncing and mapping") Signed-off-by: Liam Mark --- drivers/staging/android/ion/ion.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c index 6f5afab7c1a1..1fe633a7fdba 100644 --- a/drivers/staging/android/ion/ion.c +++ b/drivers/staging/android/ion/ion.c @@ -210,6 +210,7 @@ struct ion_dma_buf_attachment { struct device *dev; struct sg_table *table; struct list_head list; + bool dma_mapped; }; static int ion_dma_buf_attach(struct dma_buf *dmabuf, @@ -231,6 +232,7 @@ static int ion_dma_buf_attach(struct dma_buf *dmabuf, a->table = table; a->dev = attachment->dev; + a->dma_mapped = false; INIT_LIST_HEAD(&a->list); attachment->priv = a; @@ -261,12 +263,18 @@ static struct sg_table *ion_map_dma_buf(struct dma_buf_attachment *attachment, { struct ion_dma_buf_attachment *a = attachment->priv; struct sg_table *table; + struct ion_buffer *buffer = attachment->dmabuf->priv; table = a->table; + mutex_lock(&buffer->lock); if (!dma_map_sg(attachment->dev, table->sgl, table->nents, - direction)) + direction)) { + mutex_unlock(&buffer->lock); return ERR_PTR(-ENOMEM); + } + a->dma_mapped = true; + mutex_unlock(&buffer->lock); return table; } @@ -275,7 +283,13 @@ static void ion_unmap_dma_buf(struct dma_buf_attachment *attachment, struct sg_table *table, enum dma_data_direction direction) { + struct ion_dma_buf_attachment *a = attachment->priv; + struct ion_buffer *buffer = attachment->dmabuf->priv; + + mutex_lock(&buffer->lock); dma_unmap_sg(attachment->dev, table->sgl, table->nents, direction); + a->dma_mapped = false; + mutex_unlock(&buffer->lock); } static int ion_mmap(struct dma_buf *dmabuf, struct vm_area_struct *vma) @@ -346,8 +360,9 @@ static int ion_dma_buf_begin_cpu_access(struct dma_buf *dmabuf, mutex_lock(&buffer->lock); list_for_each_entry(a, &buffer->attachments, list) { - dma_sync_sg_for_cpu(a->dev, a->table->sgl, a->table->nents, - direction); + if (a->dma_mapped) + dma_sync_sg_for_cpu(a->dev, a->table->sgl, + a->table->nents, direction); } unlock: @@ -369,8 +384,9 @@ static int ion_dma_buf_end_cpu_access(struct dma_buf *dmabuf, mutex_lock(&buffer->lock); list_for_each_entry(a, &buffer->attachments, list) { - dma_sync_sg_for_device(a->dev, a->table->sgl, a->table->nents, - direction); + if (a->dma_mapped) + dma_sync_sg_for_device(a->dev, a->table->sgl, + a->table->nents, direction); } mutex_unlock(&buffer->lock); -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liam Mark Subject: [PATCH 2/4] staging: android: ion: Restrict cache maintenance to dma mapped memory Date: Fri, 18 Jan 2019 10:37:45 -0800 Message-ID: <1547836667-13695-3-git-send-email-lmark@codeaurora.org> References: <1547836667-13695-1-git-send-email-lmark@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1547836667-13695-1-git-send-email-lmark@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: "devel" To: labbott@redhat.com, sumit.semwal@linaro.org Cc: devel@driverdev.osuosl.org, tkjos@android.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, afd@ti.com, linaro-mm-sig@lists.linaro.org, arve@android.com, john.stultz@linaro.org, joel@joelfernandes.org, maco@android.com, christian@brauner.io List-Id: dri-devel@lists.freedesktop.org VGhlIElPTiBiZWdpbl9jcHVfYWNjZXNzIGFuZCBlbmRfY3B1X2FjY2VzcyBmdW5jdGlvbnMgdXNl IHRoZQpkbWFfc3luY19zZ19mb3JfY3B1IGFuZCBkbWFfc3luY19zZ19mb3JfZGV2aWNlIEFQSXMg dG8gcGVyZm9ybSBjYWNoZQptYWludGVuYW5jZS4KCkN1cnJlbnRseSBpdCBpcyBwb3NzaWJsZSB0 byBhcHBseSBjYWNoZSBtYWludGVuYW5jZSwgdmlhIHRoZQpiZWdpbl9jcHVfYWNjZXNzIGFuZCBl bmRfY3B1X2FjY2VzcyBBUElzLCB0byBJT04gYnVmZmVycyB3aGljaCBhcmUgbm90CmRtYSBtYXBw ZWQuCgpUaGUgZG1hIHN5bmMgc2cgQVBJcyBzaG91bGQgbm90IGJlIGNhbGxlZCBvbiBzZyBsaXN0 cyB3aGljaCBoYXZlIG5vdCBiZWVuCmRtYSBtYXBwZWQgYXMgdGhpcyBjYW4gcmVzdWx0IGluIGNh Y2hlIG1haW50ZW5hbmNlIGJlaW5nIGFwcGxpZWQgdG8gdGhlCndyb25nIGFkZHJlc3MuIElmIGFu IHNnIGxpc3QgaGFzIG5vdCBiZWVuIGRtYSBtYXBwZWQgdGhlbiBpdHMgZG1hX2FkZHJlc3MKZmll bGQgaGFzIG5vdCBiZWVuIHBvcHVsYXRlZCwgc29tZSBkbWEgb3BzIHN1Y2ggYXMgdGhlIHN3aW90 bGJfZG1hX29wcyBvcHMKdXNlIHRoZSBkbWFfYWRkcmVzcyBmaWVsZCB0byBjYWxjdWxhdGUgdGhl IGFkZHJlc3Mgb250byB3aGljaCB0byBhcHBseQpjYWNoZSBtYWludGVuYW5jZS4KCkFsc28gSSBk b27igJl0IHRoaW5rIHdlIHdhbnQgQ01PcyB0byBiZSBhcHBsaWVkIHRvIGEgYnVmZmVyIHdoaWNo IGlzIG5vdApkbWEgbWFwcGVkIGFzIHRoZSBtZW1vcnkgc2hvdWxkIGFscmVhZHkgYmUgY29oZXJl bnQgZm9yIGFjY2VzcyBmcm9tIHRoZQpDUFUuIEFueSBDTU9zIHJlcXVpcmVkIGZvciBkZXZpY2Ug YWNjZXNzIHRha2VuIGNhcmUgb2YgaW4gdGhlCmRtYV9idWZfbWFwX2F0dGFjaG1lbnQgYW5kIGRt YV9idWZfdW5tYXBfYXR0YWNobWVudCBjYWxscy4KU28gcmVhbGx5IGl0IG9ubHkgbWFrZXMgc2Vu c2UgZm9yIGJlZ2luX2NwdV9hY2Nlc3MgYW5kIGVuZF9jcHVfYWNjZXNzIHRvCmFwcGx5IENNT3Mg aWYgdGhlIGJ1ZmZlciBpcyBkbWEgbWFwcGVkLgoKRml4IHRoZSBJT04gYmVnaW5fY3B1X2FjY2Vz cyBhbmQgZW5kX2NwdV9hY2Nlc3MgZnVuY3Rpb25zIHRvIG9ubHkgYXBwbHkKY2FjaGUgbWFpbnRl bmFuY2UgdG8gYnVmZmVycyB3aGljaCBhcmUgZG1hIG1hcHBlZC4KCkZpeGVzOiAyYTU1ZTdiNWU1 NDQgKCJzdGFnaW5nOiBhbmRyb2lkOiBpb246IENhbGwgZG1hX21hcF9zZyBmb3Igc3luY2luZyBh bmQgbWFwcGluZyIpClNpZ25lZC1vZmYtYnk6IExpYW0gTWFyayA8bG1hcmtAY29kZWF1cm9yYS5v cmc+Ci0tLQogZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lvbi5jIHwgMjYgKysrKysrKysr KysrKysrKysrKysrLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCA1IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9pb24u YyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9pb24uYwppbmRleCA2ZjVhZmFiN2MxYTEu LjFmZTYzM2E3ZmRiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvaW9uL2lv bi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2lvbi9pb24uYwpAQCAtMjEwLDYgKzIx MCw3IEBAIHN0cnVjdCBpb25fZG1hX2J1Zl9hdHRhY2htZW50IHsKIAlzdHJ1Y3QgZGV2aWNlICpk ZXY7CiAJc3RydWN0IHNnX3RhYmxlICp0YWJsZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJ Ym9vbCBkbWFfbWFwcGVkOwogfTsKIAogc3RhdGljIGludCBpb25fZG1hX2J1Zl9hdHRhY2goc3Ry dWN0IGRtYV9idWYgKmRtYWJ1ZiwKQEAgLTIzMSw2ICsyMzIsNyBAQCBzdGF0aWMgaW50IGlvbl9k bWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAogCiAJYS0+dGFibGUgPSB0YWJs ZTsKIAlhLT5kZXYgPSBhdHRhY2htZW50LT5kZXY7CisJYS0+ZG1hX21hcHBlZCA9IGZhbHNlOwog CUlOSVRfTElTVF9IRUFEKCZhLT5saXN0KTsKIAogCWF0dGFjaG1lbnQtPnByaXYgPSBhOwpAQCAt MjYxLDEyICsyNjMsMTggQEAgc3RhdGljIHN0cnVjdCBzZ190YWJsZSAqaW9uX21hcF9kbWFfYnVm KHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsCiB7CiAJc3RydWN0IGlvbl9k bWFfYnVmX2F0dGFjaG1lbnQgKmEgPSBhdHRhY2htZW50LT5wcml2OwogCXN0cnVjdCBzZ190YWJs ZSAqdGFibGU7CisJc3RydWN0IGlvbl9idWZmZXIgKmJ1ZmZlciA9IGF0dGFjaG1lbnQtPmRtYWJ1 Zi0+cHJpdjsKIAogCXRhYmxlID0gYS0+dGFibGU7CiAKKwltdXRleF9sb2NrKCZidWZmZXItPmxv Y2spOwogCWlmICghZG1hX21hcF9zZyhhdHRhY2htZW50LT5kZXYsIHRhYmxlLT5zZ2wsIHRhYmxl LT5uZW50cywKLQkJCWRpcmVjdGlvbikpCisJCQlkaXJlY3Rpb24pKSB7CisJCW11dGV4X3VubG9j aygmYnVmZmVyLT5sb2NrKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCWEtPmRt YV9tYXBwZWQgPSB0cnVlOworCW11dGV4X3VubG9jaygmYnVmZmVyLT5sb2NrKTsKIAogCXJldHVy biB0YWJsZTsKIH0KQEAgLTI3NSw3ICsyODMsMTMgQEAgc3RhdGljIHZvaWQgaW9uX3VubWFwX2Rt YV9idWYoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCwKIAkJCSAgICAgIHN0 cnVjdCBzZ190YWJsZSAqdGFibGUsCiAJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBk aXJlY3Rpb24pCiB7CisJc3RydWN0IGlvbl9kbWFfYnVmX2F0dGFjaG1lbnQgKmEgPSBhdHRhY2ht ZW50LT5wcml2OworCXN0cnVjdCBpb25fYnVmZmVyICpidWZmZXIgPSBhdHRhY2htZW50LT5kbWFi dWYtPnByaXY7CisKKwltdXRleF9sb2NrKCZidWZmZXItPmxvY2spOwogCWRtYV91bm1hcF9zZyhh dHRhY2htZW50LT5kZXYsIHRhYmxlLT5zZ2wsIHRhYmxlLT5uZW50cywgZGlyZWN0aW9uKTsKKwlh LT5kbWFfbWFwcGVkID0gZmFsc2U7CisJbXV0ZXhfdW5sb2NrKCZidWZmZXItPmxvY2spOwogfQog CiBzdGF0aWMgaW50IGlvbl9tbWFwKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHN0cnVjdCB2bV9h cmVhX3N0cnVjdCAqdm1hKQpAQCAtMzQ2LDggKzM2MCw5IEBAIHN0YXRpYyBpbnQgaW9uX2RtYV9i dWZfYmVnaW5fY3B1X2FjY2VzcyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAogCiAJbXV0ZXhfbG9j aygmYnVmZmVyLT5sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGEsICZidWZmZXItPmF0dGFj aG1lbnRzLCBsaXN0KSB7Ci0JCWRtYV9zeW5jX3NnX2Zvcl9jcHUoYS0+ZGV2LCBhLT50YWJsZS0+ c2dsLCBhLT50YWJsZS0+bmVudHMsCi0JCQkJICAgIGRpcmVjdGlvbik7CisJCWlmIChhLT5kbWFf bWFwcGVkKQorCQkJZG1hX3N5bmNfc2dfZm9yX2NwdShhLT5kZXYsIGEtPnRhYmxlLT5zZ2wsCisJ CQkJCSAgICBhLT50YWJsZS0+bmVudHMsIGRpcmVjdGlvbik7CiAJfQogCiB1bmxvY2s6CkBAIC0z NjksOCArMzg0LDkgQEAgc3RhdGljIGludCBpb25fZG1hX2J1Zl9lbmRfY3B1X2FjY2VzcyhzdHJ1 Y3QgZG1hX2J1ZiAqZG1hYnVmLAogCiAJbXV0ZXhfbG9jaygmYnVmZmVyLT5sb2NrKTsKIAlsaXN0 X2Zvcl9lYWNoX2VudHJ5KGEsICZidWZmZXItPmF0dGFjaG1lbnRzLCBsaXN0KSB7Ci0JCWRtYV9z eW5jX3NnX2Zvcl9kZXZpY2UoYS0+ZGV2LCBhLT50YWJsZS0+c2dsLCBhLT50YWJsZS0+bmVudHMs Ci0JCQkJICAgICAgIGRpcmVjdGlvbik7CisJCWlmIChhLT5kbWFfbWFwcGVkKQorCQkJZG1hX3N5 bmNfc2dfZm9yX2RldmljZShhLT5kZXYsIGEtPnRhYmxlLT5zZ2wsCisJCQkJCSAgICAgICBhLT50 YWJsZS0+bmVudHMsIGRpcmVjdGlvbik7CiAJfQogCW11dGV4X3VubG9jaygmYnVmZmVyLT5sb2Nr KTsKIAotLSAKUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2Yg Q29kZSBBdXJvcmEgRm9ydW0sIAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9q ZWN0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkZXZl bCBtYWlsaW5nIGxpc3QKZGV2ZWxAbGludXhkcml2ZXJwcm9qZWN0Lm9yZwpodHRwOi8vZHJpdmVy ZGV2LmxpbnV4ZHJpdmVycHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcml2ZXJkZXYtZGV2 ZWwK