From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753369AbcD1PXD (ORCPT ); Thu, 28 Apr 2016 11:23:03 -0400 Received: from asav22.altibox.net ([109.247.116.9]:55608 "EHLO asav22.altibox.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752840AbcD1PS6 (ORCPT ); Thu, 28 Apr 2016 11:18:58 -0400 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= To: dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org Cc: daniel@ffwll.ch, laurent.pinchart@ideasonboard.com, tomi.valkeinen@ti.com, linux-kernel@vger.kernel.org, =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [PATCH v4 4/7] fbdev: fb_defio: Export fb_deferred_io_mmap Date: Thu, 28 Apr 2016 17:18:34 +0200 Message-Id: <1461856717-6476-5-git-send-email-noralf@tronnes.org> X-Mailer: git-send-email 2.2.2 In-Reply-To: <1461856717-6476-1-git-send-email-noralf@tronnes.org> References: <1461856717-6476-1-git-send-email-noralf@tronnes.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-CMAE-Score: 0 X-CMAE-Analysis: v=2.1 cv=H7l7u7si c=1 sm=1 tr=0 a=gFHx44SYZz5JQKQKbGEAEQ==:117 a=gFHx44SYZz5JQKQKbGEAEQ==:17 a=L9H7d07YOLsA:10 a=9cW_t1CCXrUA:10 a=s5jvgZ67dGcA:10 a=IkcTkHD0fZMA:10 a=SJz97ENfAAAA:8 a=-4c9a0APCKQ1du7qJrgA:9 a=QEXdDO2ut3YA:10 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Export fb_deferred_io_mmap so drivers can change vma->vm_page_prot. When the framebuffer memory is allocated using dma_alloc_writecombine() instead of vmalloc(), I get cache syncing problems on ARM. This solves it: static int drm_fbdev_cma_deferred_io_mmap(struct fb_info *info, struct vm_area_struct *vma) { fb_deferred_io_mmap(info, vma); vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); return 0; } Could this have been done in the core? Drivers that don't set (struct fb_ops *)->fb_mmap, gets a call to fb_pgprotect() at the end of the default fb_mmap implementation (drivers/video/fbdev/core/fbmem.c). This is an architecture specific function that on many platforms uses pgprot_writecombine(), but not on all. And looking at some of the fb_mmap implementations, some of them sets vm_page_prot to nocache for instance, so I think the safest bet is to do this in the driver and not in the fbdev core. And we can't call fb_pgprotect() from fb_deferred_io_mmap() either because we don't have access to the file pointer that powerpc needs. Signed-off-by: Noralf Trønnes --- Changes since v1: - Expand commit message drivers/video/fbdev/core/fb_defio.c | 3 ++- include/linux/fb.h | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/video/fbdev/core/fb_defio.c b/drivers/video/fbdev/core/fb_defio.c index 57721c7..74b5bca 100644 --- a/drivers/video/fbdev/core/fb_defio.c +++ b/drivers/video/fbdev/core/fb_defio.c @@ -164,7 +164,7 @@ static const struct address_space_operations fb_deferred_io_aops = { .set_page_dirty = fb_deferred_io_set_page_dirty, }; -static int fb_deferred_io_mmap(struct fb_info *info, struct vm_area_struct *vma) +int fb_deferred_io_mmap(struct fb_info *info, struct vm_area_struct *vma) { vma->vm_ops = &fb_deferred_io_vm_ops; vma->vm_flags |= VM_DONTEXPAND | VM_DONTDUMP; @@ -173,6 +173,7 @@ static int fb_deferred_io_mmap(struct fb_info *info, struct vm_area_struct *vma) vma->vm_private_data = info; return 0; } +EXPORT_SYMBOL(fb_deferred_io_mmap); /* workqueue callback */ static void fb_deferred_io_work(struct work_struct *work) diff --git a/include/linux/fb.h b/include/linux/fb.h index dfe8835..a964d07 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -673,6 +673,7 @@ static inline void __fb_pad_aligned_buffer(u8 *dst, u32 d_pitch, } /* drivers/video/fb_defio.c */ +int fb_deferred_io_mmap(struct fb_info *info, struct vm_area_struct *vma); extern void fb_deferred_io_init(struct fb_info *info); extern void fb_deferred_io_open(struct fb_info *info, struct inode *inode, -- 2.2.2 From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Date: Thu, 28 Apr 2016 15:18:34 +0000 Subject: [PATCH v4 4/7] fbdev: fb_defio: Export fb_deferred_io_mmap Message-Id: <1461856717-6476-5-git-send-email-noralf@tronnes.org> List-Id: References: <1461856717-6476-1-git-send-email-noralf@tronnes.org> In-Reply-To: <1461856717-6476-1-git-send-email-noralf@tronnes.org> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable To: dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org Cc: tomi.valkeinen@ti.com, laurent.pinchart@ideasonboard.com, linux-kernel@vger.kernel.org Export fb_deferred_io_mmap so drivers can change vma->vm_page_prot. When the framebuffer memory is allocated using dma_alloc_writecombine() instead of vmalloc(), I get cache syncing problems on ARM. This solves it: static int drm_fbdev_cma_deferred_io_mmap(struct fb_info *info, struct vm_area_struct *vma) { fb_deferred_io_mmap(info, vma); vma->vm_page_prot =3D pgprot_writecombine(vma->vm_page_prot); return 0; } Could this have been done in the core? Drivers that don't set (struct fb_ops *)->fb_mmap, gets a call to fb_pgprotect() at the end of the default fb_mmap implementation (drivers/video/fbdev/core/fbmem.c). This is an architecture specific function that on many platforms uses pgprot_writecombine(), but not on all. And looking at some of the fb_mmap implementations, some of them sets vm_page_prot to nocache for instance, so I think the safest bet is to do this in the driver and not in the fbdev core. And we can't call fb_pgprotect() from fb_deferred_io_mmap() either because we don't have access to the file pointer that powerpc needs. Signed-off-by: Noralf Tr=C3=B8nnes --- Changes since v1: - Expand commit message drivers/video/fbdev/core/fb_defio.c | 3 ++- include/linux/fb.h | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/video/fbdev/core/fb_defio.c b/drivers/video/fbdev/core= /fb_defio.c index 57721c7..74b5bca 100644 --- a/drivers/video/fbdev/core/fb_defio.c +++ b/drivers/video/fbdev/core/fb_defio.c @@ -164,7 +164,7 @@ static const struct address_space_operations fb_deferre= d_io_aops =3D { .set_page_dirty =3D fb_deferred_io_set_page_dirty, }; -static int fb_deferred_io_mmap(struct fb_info *info, struct vm_area_struct= *vma) +int fb_deferred_io_mmap(struct fb_info *info, struct vm_area_struct *vma) { vma->vm_ops =3D &fb_deferred_io_vm_ops; vma->vm_flags |=3D VM_DONTEXPAND | VM_DONTDUMP; @@ -173,6 +173,7 @@ static int fb_deferred_io_mmap(struct fb_info *info, st= ruct vm_area_struct *vma) vma->vm_private_data =3D info; return 0; } +EXPORT_SYMBOL(fb_deferred_io_mmap); /* workqueue callback */ static void fb_deferred_io_work(struct work_struct *work) diff --git a/include/linux/fb.h b/include/linux/fb.h index dfe8835..a964d07 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -673,6 +673,7 @@ static inline void __fb_pad_aligned_buffer(u8 *dst, u32= d_pitch, } /* drivers/video/fb_defio.c */ +int fb_deferred_io_mmap(struct fb_info *info, struct vm_area_struct *vma); extern void fb_deferred_io_init(struct fb_info *info); extern void fb_deferred_io_open(struct fb_info *info, struct inode *inode, -- 2.2.2 From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [PATCH v4 4/7] fbdev: fb_defio: Export fb_deferred_io_mmap Date: Thu, 28 Apr 2016 17:18:34 +0200 Message-ID: <1461856717-6476-5-git-send-email-noralf@tronnes.org> References: <1461856717-6476-1-git-send-email-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from asav22.altibox.net (asav22.altibox.net [109.247.116.9]) by gabe.freedesktop.org (Postfix) with ESMTPS id 54B5A6ED5D for ; Thu, 28 Apr 2016 15:18:58 +0000 (UTC) In-Reply-To: <1461856717-6476-1-git-send-email-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org Cc: tomi.valkeinen@ti.com, laurent.pinchart@ideasonboard.com, linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org RXhwb3J0IGZiX2RlZmVycmVkX2lvX21tYXAgc28gZHJpdmVycyBjYW4gY2hhbmdlIHZtYS0+dm1f cGFnZV9wcm90LgpXaGVuIHRoZSBmcmFtZWJ1ZmZlciBtZW1vcnkgaXMgYWxsb2NhdGVkIHVzaW5n IGRtYV9hbGxvY193cml0ZWNvbWJpbmUoKQppbnN0ZWFkIG9mIHZtYWxsb2MoKSwgSSBnZXQgY2Fj aGUgc3luY2luZyBwcm9ibGVtcyBvbiBBUk0uClRoaXMgc29sdmVzIGl0OgoKc3RhdGljIGludCBk cm1fZmJkZXZfY21hX2RlZmVycmVkX2lvX21tYXAoc3RydWN0IGZiX2luZm8gKmluZm8sCgkJCQkJ ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKewoJZmJfZGVmZXJyZWRfaW9fbW1hcChpbmZv LCB2bWEpOwoJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYS0+dm1f cGFnZV9wcm90KTsKCglyZXR1cm4gMDsKfQoKQ291bGQgdGhpcyBoYXZlIGJlZW4gZG9uZSBpbiB0 aGUgY29yZT8KRHJpdmVycyB0aGF0IGRvbid0IHNldCAoc3RydWN0IGZiX29wcyAqKS0+ZmJfbW1h cCwgZ2V0cyBhIGNhbGwgdG8KZmJfcGdwcm90ZWN0KCkgYXQgdGhlIGVuZCBvZiB0aGUgZGVmYXVs dCBmYl9tbWFwIGltcGxlbWVudGF0aW9uCihkcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJtZW0u YykuIFRoaXMgaXMgYW4gYXJjaGl0ZWN0dXJlIHNwZWNpZmljCmZ1bmN0aW9uIHRoYXQgb24gbWFu eSBwbGF0Zm9ybXMgdXNlcyBwZ3Byb3Rfd3JpdGVjb21iaW5lKCksIGJ1dCBub3Qgb24KYWxsLiBB bmQgbG9va2luZyBhdCBzb21lIG9mIHRoZSBmYl9tbWFwIGltcGxlbWVudGF0aW9ucywgc29tZSBv ZiB0aGVtCnNldHMgdm1fcGFnZV9wcm90IHRvIG5vY2FjaGUgZm9yIGluc3RhbmNlLCBzbyBJIHRo aW5rIHRoZSBzYWZlc3QgYmV0IGlzCnRvIGRvIHRoaXMgaW4gdGhlIGRyaXZlciBhbmQgbm90IGlu IHRoZSBmYmRldiBjb3JlLiBBbmQgd2UgY2FuJ3QgY2FsbApmYl9wZ3Byb3RlY3QoKSBmcm9tIGZi X2RlZmVycmVkX2lvX21tYXAoKSBlaXRoZXIgYmVjYXVzZSB3ZSBkb24ndCBoYXZlCmFjY2VzcyB0 byB0aGUgZmlsZSBwb2ludGVyIHRoYXQgcG93ZXJwYyBuZWVkcy4KClNpZ25lZC1vZmYtYnk6IE5v cmFsZiBUcsO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgotLS0KCkNoYW5nZXMgc2luY2UgdjE6 Ci0gRXhwYW5kIGNvbW1pdCBtZXNzYWdlCgogZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiX2Rl ZmlvLmMgfCAzICsrLQogaW5jbHVkZS9saW51eC9mYi5oICAgICAgICAgICAgICAgICAgfCAxICsK IDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiX2RlZmlvLmMgYi9kcml2ZXJzL3ZpZGVv L2ZiZGV2L2NvcmUvZmJfZGVmaW8uYwppbmRleCA1NzcyMWM3Li43NGI1YmNhIDEwMDY0NAotLS0g YS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJfZGVmaW8uYworKysgYi9kcml2ZXJzL3ZpZGVv L2ZiZGV2L2NvcmUvZmJfZGVmaW8uYwpAQCAtMTY0LDcgKzE2NCw3IEBAIHN0YXRpYyBjb25zdCBz dHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGZiX2RlZmVycmVkX2lvX2FvcHMgPSB7CiAJ LnNldF9wYWdlX2RpcnR5ID0gZmJfZGVmZXJyZWRfaW9fc2V0X3BhZ2VfZGlydHksCiB9OwoKLXN0 YXRpYyBpbnQgZmJfZGVmZXJyZWRfaW9fbW1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEpCitpbnQgZmJfZGVmZXJyZWRfaW9fbW1hcChzdHJ1Y3QgZmJf aW5mbyAqaW5mbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJdm1hLT52bV9vcHMg PSAmZmJfZGVmZXJyZWRfaW9fdm1fb3BzOwogCXZtYS0+dm1fZmxhZ3MgfD0gVk1fRE9OVEVYUEFO RCB8IFZNX0RPTlREVU1QOwpAQCAtMTczLDYgKzE3Myw3IEBAIHN0YXRpYyBpbnQgZmJfZGVmZXJy ZWRfaW9fbW1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEpCiAJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBpbmZvOwogCXJldHVybiAwOwogfQorRVhQT1JU X1NZTUJPTChmYl9kZWZlcnJlZF9pb19tbWFwKTsKCiAvKiB3b3JrcXVldWUgY2FsbGJhY2sgKi8K IHN0YXRpYyB2b2lkIGZiX2RlZmVycmVkX2lvX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3Jr KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mYi5oIGIvaW5jbHVkZS9saW51eC9mYi5oCmlu ZGV4IGRmZTg4MzUuLmE5NjRkMDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmIuaAorKysg Yi9pbmNsdWRlL2xpbnV4L2ZiLmgKQEAgLTY3Myw2ICs2NzMsNyBAQCBzdGF0aWMgaW5saW5lIHZv aWQgX19mYl9wYWRfYWxpZ25lZF9idWZmZXIodTggKmRzdCwgdTMyIGRfcGl0Y2gsCiB9CgogLyog ZHJpdmVycy92aWRlby9mYl9kZWZpby5jICovCitpbnQgZmJfZGVmZXJyZWRfaW9fbW1hcChzdHJ1 Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogZXh0ZXJuIHZv aWQgZmJfZGVmZXJyZWRfaW9faW5pdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiBleHRlcm4gdm9p ZCBmYl9kZWZlcnJlZF9pb19vcGVuKHN0cnVjdCBmYl9pbmZvICppbmZvLAogCQkJCXN0cnVjdCBp bm9kZSAqaW5vZGUsCi0tCjIuMi4yCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWwK