From mboxrd@z Thu Jan 1 00:00:00 1970 From: Greg Kroah-Hartman Subject: [PATCH 4.1 162/267] drm: Provide compat ioctl for addfb2.1 Date: Fri, 31 Jul 2015 12:40:13 -0700 Message-ID: <20150731194007.355617982@linuxfoundation.org> References: <20150731194001.933895871@linuxfoundation.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) by gabe.freedesktop.org (Postfix) with ESMTPS id 389756E3C2 for ; Fri, 31 Jul 2015 12:52:53 -0700 (PDT) In-Reply-To: <20150731194001.933895871@linuxfoundation.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-kernel@vger.kernel.org Cc: Daniel Stone , Tvrtko Ursulin , Daniel Vetter , dri-devel@lists.freedesktop.org, stable@vger.kernel.org, Greg Kroah-Hartman , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org NC4xLXN0YWJsZSByZXZpZXcgcGF0Y2guICBJZiBhbnlvbmUgaGFzIGFueSBvYmplY3Rpb25zLCBw bGVhc2UgbGV0IG1lIGtub3cuCgotLS0tLS0tLS0tLS0tLS0tLS0KCkZyb206IFR2cnRrbyBVcnN1 bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cgpjb21taXQgYzYzMWQ1ZjkwZTdlZTI0NjUz NmM3MmY4MGFkZTg2ZTllZjRkMmYxMyB1cHN0cmVhbS4KCkZyYW1lIGJ1ZmZlciBtb2RpZmllcnMg ZXh0ZW5zaW9ucyBwcm92aWRlZCBpbjsKCiAgY29tbWl0IGUzZWIzMjUwZDg0ZWY5N2I3NjYzMTIz NDU3NzQzNjdiNmEzMTBkYjgKICBBdXRob3I6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWlsLmNv bT4KICBEYXRlOiAgIFRodSBGZWIgNSAxNDo0MTo1MiAyMDE1ICswMDAwCgogICAgICBkcm06IGFk ZCBzdXBwb3J0IGZvciB0aWxlZC9jb21wcmVzc2VkL2V0YyBtb2RpZmllciBpbiBhZGRmYjIKCk1p c3NlZCB0aGUgc3RydWN0dXJlIHBhY2tpbmcvYWxpZ25tZW50IHByb2JsZW0gd2hlcmUgNjQtYml0 Cm1lbWJlcnMgd2VyZSBhZGRlZCBhZnRlciB0aGUgb2RkIG51bWJlciBvZiAzMi1iaXQgb25lcy4g VGhpcwptYWtlcyB0aGUgY29tcGlsZXIgcHJvZHVjZSBzdHJ1Y3R1cmVzIG9mIGRpZmZlcmVudCBz aXplcyB1bmRlcgozMi0gYW5kIDY0LWJpdCB4ODYgdGFyZ2V0cyBhbmQgbWFrZXMgdGhlIGlvY3Rs IG5lZWQgZXhwbGljaXQKY29tcGF0IGhhbmRsaW5nLgoKdjI6IFJlbW92ZWQgdGhlIHR5cGVkZWYu IChEYW5pZWwgVmV0dGVyKQoKU2lnbmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51 cnN1bGluQGludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0 ZXJAZmZ3bGwuY2g+CkNjOiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCkNjOiBSb2Ig Q2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+CkNjOiBEYW5pZWwgU3RvbmUgPGRhbmllbHNAY29s bGFib3JhLmNvbT4KQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAaW50ZWwuY29tPgpb ZGFudmV0OiBTcXVhc2ggaW4gY29tcGlsZSBmaXggZnJvbSBNaWthLl0KU2lnbmVkLW9mZi1ieTog RGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KU2lnbmVkLW9mZi1ieTogR3Jl ZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9yZz4KCi0tLQogZHJpdmVy cy9ncHUvZHJtL2RybV9pb2MzMi5jIHwgICA2MCArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDYwIGluc2VydGlvbnMoKykKCi0tLSBh L2RyaXZlcnMvZ3B1L2RybS9kcm1faW9jMzIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lv YzMyLmMKQEAgLTcwLDYgKzcwLDggQEAKIAogI2RlZmluZSBEUk1fSU9DVExfV0FJVF9WQkxBTksz MgkJRFJNX0lPV1IoMHgzYSwgZHJtX3dhaXRfdmJsYW5rMzJfdCkKIAorI2RlZmluZSBEUk1fSU9D VExfTU9ERV9BRERGQjIzMgkJRFJNX0lPV1IoMHhiOCwgZHJtX21vZGVfZmJfY21kMjMyX3QpCisK IHR5cGVkZWYgc3RydWN0IGRybV92ZXJzaW9uXzMyIHsKIAlpbnQgdmVyc2lvbl9tYWpvcjsJICAv Kio8IE1ham9yIHZlcnNpb24gKi8KIAlpbnQgdmVyc2lvbl9taW5vcjsJICAvKio8IE1pbm9yIHZl cnNpb24gKi8KQEAgLTEwMTYsNiArMTAxOCw2MyBAQCBzdGF0aWMgaW50IGNvbXBhdF9kcm1fd2Fp dF92Ymxhbmsoc3RydWN0CiAJcmV0dXJuIDA7CiB9CiAKK3R5cGVkZWYgc3RydWN0IGRybV9tb2Rl X2ZiX2NtZDIzMiB7CisJdTMyIGZiX2lkOworCXUzMiB3aWR0aDsKKwl1MzIgaGVpZ2h0OworCXUz MiBwaXhlbF9mb3JtYXQ7CisJdTMyIGZsYWdzOworCXUzMiBoYW5kbGVzWzRdOworCXUzMiBwaXRj aGVzWzRdOworCXUzMiBvZmZzZXRzWzRdOworCXU2NCBtb2RpZmllcls0XTsKK30gX19hdHRyaWJ1 dGVfXygocGFja2VkKSkgZHJtX21vZGVfZmJfY21kMjMyX3Q7CisKK3N0YXRpYyBpbnQgY29tcGF0 X2RybV9tb2RlX2FkZGZiMihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJ CQkgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyMzIgX191 c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCXN0cnVjdCBkcm1fbW9kZV9mYl9jbWQy MzIgcmVxMzI7CisJc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgX191c2VyICpyZXE2NDsKKwlpbnQg aTsKKwlpbnQgZXJyOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZyZXEzMiwgYXJncCwgc2l6ZW9m KHJlcTMyKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmVxNjQgPSBjb21wYXRfYWxsb2NfdXNl cl9zcGFjZShzaXplb2YoKnJlcTY0KSk7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUs IHJlcTY0LCBzaXplb2YoKnJlcTY0KSkKKwkgICAgfHwgX19wdXRfdXNlcihyZXEzMi53aWR0aCwg JnJlcTY0LT53aWR0aCkKKwkgICAgfHwgX19wdXRfdXNlcihyZXEzMi5oZWlnaHQsICZyZXE2NC0+ aGVpZ2h0KQorCSAgICB8fCBfX3B1dF91c2VyKHJlcTMyLnBpeGVsX2Zvcm1hdCwgJnJlcTY0LT5w aXhlbF9mb3JtYXQpCisJICAgIHx8IF9fcHV0X3VzZXIocmVxMzIuZmxhZ3MsICZyZXE2NC0+Zmxh Z3MpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJ aWYgKF9fcHV0X3VzZXIocmVxMzIuaGFuZGxlc1tpXSwgJnJlcTY0LT5oYW5kbGVzW2ldKSkKKwkJ CXJldHVybiAtRUZBVUxUOworCQlpZiAoX19wdXRfdXNlcihyZXEzMi5waXRjaGVzW2ldLCAmcmVx NjQtPnBpdGNoZXNbaV0pKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChfX3B1dF91c2VyKHJl cTMyLm9mZnNldHNbaV0sICZyZXE2NC0+b2Zmc2V0c1tpXSkpCisJCQlyZXR1cm4gLUVGQVVMVDsK KwkJaWYgKF9fcHV0X3VzZXIocmVxMzIubW9kaWZpZXJbaV0sICZyZXE2NC0+bW9kaWZpZXJbaV0p KQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJZXJyID0gZHJtX2lvY3RsKGZpbGUsIERSTV9J T0NUTF9NT0RFX0FEREZCMiwgKHVuc2lnbmVkIGxvbmcpcmVxNjQpOworCWlmIChlcnIpCisJCXJl dHVybiBlcnI7CisKKwlpZiAoX19nZXRfdXNlcihyZXEzMi5mYl9pZCwgJnJlcTY0LT5mYl9pZCkp CisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmcmVxMzIsIHNp emVvZihyZXEzMikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCiBzdGF0 aWMgZHJtX2lvY3RsX2NvbXBhdF90ICpkcm1fY29tcGF0X2lvY3Rsc1tdID0gewogCVtEUk1fSU9D VExfTlIoRFJNX0lPQ1RMX1ZFUlNJT04zMildID0gY29tcGF0X2RybV92ZXJzaW9uLAogCVtEUk1f SU9DVExfTlIoRFJNX0lPQ1RMX0dFVF9VTklRVUUzMildID0gY29tcGF0X2RybV9nZXR1bmlxdWUs CkBAIC0xMDQ4LDYgKzExMDcsNyBAQCBzdGF0aWMgZHJtX2lvY3RsX2NvbXBhdF90ICpkcm1fY29t cGF0X2lvCiAJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfVVBEQVRFX0RSQVczMildID0gY29tcGF0 X2RybV91cGRhdGVfZHJhdywKICNlbmRpZgogCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1dBSVRf VkJMQU5LMzIpXSA9IGNvbXBhdF9kcm1fd2FpdF92YmxhbmssCisJW0RSTV9JT0NUTF9OUihEUk1f SU9DVExfTU9ERV9BRERGQjIzMildID0gY29tcGF0X2RybV9tb2RlX2FkZGZiMiwKIH07CiAKIC8q KgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1k ZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754610AbbGaTw4 (ORCPT ); Fri, 31 Jul 2015 15:52:56 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:46473 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754575AbbGaTwx (ORCPT ); Fri, 31 Jul 2015 15:52:53 -0400 From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Tvrtko Ursulin , Daniel Vetter , dri-devel@lists.freedesktop.org, Rob Clark , Daniel Stone , Daniel Vetter Subject: [PATCH 4.1 162/267] drm: Provide compat ioctl for addfb2.1 Date: Fri, 31 Jul 2015 12:40:13 -0700 Message-Id: <20150731194007.355617982@linuxfoundation.org> X-Mailer: git-send-email 2.5.0 In-Reply-To: <20150731194001.933895871@linuxfoundation.org> References: <20150731194001.933895871@linuxfoundation.org> User-Agent: quilt/0.64 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.1-stable review patch. If anyone has any objections, please let me know. ------------------ From: Tvrtko Ursulin commit c631d5f90e7ee246536c72f80ade86e9ef4d2f13 upstream. Frame buffer modifiers extensions provided in; commit e3eb3250d84ef97b766312345774367b6a310db8 Author: Rob Clark Date: Thu Feb 5 14:41:52 2015 +0000 drm: add support for tiled/compressed/etc modifier in addfb2 Missed the structure packing/alignment problem where 64-bit members were added after the odd number of 32-bit ones. This makes the compiler produce structures of different sizes under 32- and 64-bit x86 targets and makes the ioctl need explicit compat handling. v2: Removed the typedef. (Daniel Vetter) Signed-off-by: Tvrtko Ursulin Reviewed-by: Daniel Vetter Cc: dri-devel@lists.freedesktop.org Cc: Rob Clark Cc: Daniel Stone Cc: Daniel Vetter [danvet: Squash in compile fix from Mika.] Signed-off-by: Daniel Vetter Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/drm_ioc32.c | 60 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) --- a/drivers/gpu/drm/drm_ioc32.c +++ b/drivers/gpu/drm/drm_ioc32.c @@ -70,6 +70,8 @@ #define DRM_IOCTL_WAIT_VBLANK32 DRM_IOWR(0x3a, drm_wait_vblank32_t) +#define DRM_IOCTL_MODE_ADDFB232 DRM_IOWR(0xb8, drm_mode_fb_cmd232_t) + typedef struct drm_version_32 { int version_major; /**< Major version */ int version_minor; /**< Minor version */ @@ -1016,6 +1018,63 @@ static int compat_drm_wait_vblank(struct return 0; } +typedef struct drm_mode_fb_cmd232 { + u32 fb_id; + u32 width; + u32 height; + u32 pixel_format; + u32 flags; + u32 handles[4]; + u32 pitches[4]; + u32 offsets[4]; + u64 modifier[4]; +} __attribute__((packed)) drm_mode_fb_cmd232_t; + +static int compat_drm_mode_addfb2(struct file *file, unsigned int cmd, + unsigned long arg) +{ + struct drm_mode_fb_cmd232 __user *argp = (void __user *)arg; + struct drm_mode_fb_cmd232 req32; + struct drm_mode_fb_cmd2 __user *req64; + int i; + int err; + + if (copy_from_user(&req32, argp, sizeof(req32))) + return -EFAULT; + + req64 = compat_alloc_user_space(sizeof(*req64)); + + if (!access_ok(VERIFY_WRITE, req64, sizeof(*req64)) + || __put_user(req32.width, &req64->width) + || __put_user(req32.height, &req64->height) + || __put_user(req32.pixel_format, &req64->pixel_format) + || __put_user(req32.flags, &req64->flags)) + return -EFAULT; + + for (i = 0; i < 4; i++) { + if (__put_user(req32.handles[i], &req64->handles[i])) + return -EFAULT; + if (__put_user(req32.pitches[i], &req64->pitches[i])) + return -EFAULT; + if (__put_user(req32.offsets[i], &req64->offsets[i])) + return -EFAULT; + if (__put_user(req32.modifier[i], &req64->modifier[i])) + return -EFAULT; + } + + err = drm_ioctl(file, DRM_IOCTL_MODE_ADDFB2, (unsigned long)req64); + if (err) + return err; + + if (__get_user(req32.fb_id, &req64->fb_id)) + return -EFAULT; + + if (copy_to_user(argp, &req32, sizeof(req32))) + return -EFAULT; + + return 0; +} + static drm_ioctl_compat_t *drm_compat_ioctls[] = { [DRM_IOCTL_NR(DRM_IOCTL_VERSION32)] = compat_drm_version, [DRM_IOCTL_NR(DRM_IOCTL_GET_UNIQUE32)] = compat_drm_getunique, @@ -1048,6 +1107,7 @@ static drm_ioctl_compat_t *drm_compat_io [DRM_IOCTL_NR(DRM_IOCTL_UPDATE_DRAW32)] = compat_drm_update_draw, #endif [DRM_IOCTL_NR(DRM_IOCTL_WAIT_VBLANK32)] = compat_drm_wait_vblank, + [DRM_IOCTL_NR(DRM_IOCTL_MODE_ADDFB232)] = compat_drm_mode_addfb2, }; /**