From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com ([134.134.136.20]:17156 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753970AbbGOJR7 (ORCPT ); Wed, 15 Jul 2015 05:17:59 -0400 From: Tvrtko Ursulin To: Intel-gfx@lists.freedesktop.org Cc: Tvrtko Ursulin , dri-devel@lists.freedesktop.org, Rob Clark , Daniel Stone , Daniel Vetter , stable@vger.kernel.org Subject: [PATCH 2/2 v3] drm: Provide compat ioctl for addfb2.1 Date: Wed, 15 Jul 2015 10:17:54 +0100 Message-Id: <1436951874-895-1-git-send-email-tvrtko.ursulin@linux.intel.com> In-Reply-To: <1436868788-31721-2-git-send-email-tvrtko.ursulin@linux.intel.com> References: <1436868788-31721-2-git-send-email-tvrtko.ursulin@linux.intel.com> Sender: stable-owner@vger.kernel.org List-ID: From: Tvrtko Ursulin 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) v3: Failed to git add all changes when sending v2. (0day) Signed-off-by: Tvrtko Ursulin Reviewed-by: Daniel Vetter Reported-by: Fengguang Wu Cc: dri-devel@lists.freedesktop.org Cc: Rob Clark Cc: Daniel Stone Cc: Daniel Vetter Cc: stable@vger.kernel.org --- drivers/gpu/drm/drm_ioc32.c | 60 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/drivers/gpu/drm/drm_ioc32.c b/drivers/gpu/drm/drm_ioc32.c index 8dcfa76b09e6..7fdec8d1e059 100644 --- 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, struct drm_mode_fb_cmd232) + typedef struct drm_version_32 { int version_major; /**< Major version */ int version_minor; /**< Minor version */ @@ -1013,6 +1015,63 @@ static int compat_drm_wait_vblank(struct file *file, unsigned int cmd, return 0; } +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)); + +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, @@ -1045,6 +1104,7 @@ static drm_ioctl_compat_t *drm_compat_ioctls[] = { [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, }; /** -- 2.4.2 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH 2/2 v3] drm: Provide compat ioctl for addfb2.1 Date: Wed, 15 Jul 2015 10:17:54 +0100 Message-ID: <1436951874-895-1-git-send-email-tvrtko.ursulin@linux.intel.com> References: <1436868788-31721-2-git-send-email-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1436868788-31721-2-git-send-email-tvrtko.ursulin@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-gfx@lists.freedesktop.org Cc: Daniel Stone , stable@vger.kernel.org, dri-devel@lists.freedesktop.org, Daniel Vetter List-Id: dri-devel@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkZyYW1lIGJ1 ZmZlciBtb2RpZmllcnMgZXh0ZW5zaW9ucyBwcm92aWRlZCBpbjsKCiAgY29tbWl0IGUzZWIzMjUw ZDg0ZWY5N2I3NjYzMTIzNDU3NzQzNjdiNmEzMTBkYjgKICBBdXRob3I6IFJvYiBDbGFyayA8cm9i ZGNsYXJrQGdtYWlsLmNvbT4KICBEYXRlOiAgIFRodSBGZWIgNSAxNDo0MTo1MiAyMDE1ICswMDAw CgogICAgICBkcm06IGFkZCBzdXBwb3J0IGZvciB0aWxlZC9jb21wcmVzc2VkL2V0YyBtb2RpZmll ciBpbiBhZGRmYjIKCk1pc3NlZCB0aGUgc3RydWN0dXJlIHBhY2tpbmcvYWxpZ25tZW50IHByb2Js ZW0gd2hlcmUgNjQtYml0Cm1lbWJlcnMgd2VyZSBhZGRlZCBhZnRlciB0aGUgb2RkIG51bWJlciBv ZiAzMi1iaXQgb25lcy4gVGhpcwptYWtlcyB0aGUgY29tcGlsZXIgcHJvZHVjZSBzdHJ1Y3R1cmVz IG9mIGRpZmZlcmVudCBzaXplcyB1bmRlcgozMi0gYW5kIDY0LWJpdCB4ODYgdGFyZ2V0cyBhbmQg bWFrZXMgdGhlIGlvY3RsIG5lZWQgZXhwbGljaXQKY29tcGF0IGhhbmRsaW5nLgoKdjI6IFJlbW92 ZWQgdGhlIHR5cGVkZWYuIChEYW5pZWwgVmV0dGVyKQp2MzogRmFpbGVkIHRvIGdpdCBhZGQgYWxs IGNoYW5nZXMgd2hlbiBzZW5kaW5nIHYyLiAoMGRheSkKClNpZ25lZC1vZmYtYnk6IFR2cnRrbyBV cnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+ClJldmlld2VkLWJ5OiBEYW5pZWwgVmV0 dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgpSZXBvcnRlZC1ieTogRmVuZ2d1YW5nIFd1IDxm ZW5nZ3Vhbmcud3VAaW50ZWwuY29tPgpDYzogZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpDYzogUm9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgpDYzogRGFuaWVsIFN0b25lIDxk YW5pZWxzQGNvbGxhYm9yYS5jb20+CkNjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGlu dGVsLmNvbT4KQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcKLS0tCiBkcml2ZXJzL2dwdS9kcm0v ZHJtX2lvYzMyLmMgfCA2MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIDEgZmlsZSBjaGFuZ2VkLCA2MCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2RybV9pb2MzMi5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pb2MzMi5jCmlu ZGV4IDhkY2ZhNzZiMDllNi4uN2ZkZWM4ZDFlMDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vZHJtX2lvYzMyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pb2MzMi5jCkBAIC03MCw2 ICs3MCw4IEBACiAKICNkZWZpbmUgRFJNX0lPQ1RMX1dBSVRfVkJMQU5LMzIJCURSTV9JT1dSKDB4 M2EsIGRybV93YWl0X3ZibGFuazMyX3QpCiAKKyNkZWZpbmUgRFJNX0lPQ1RMX01PREVfQURERkIy MzIJCURSTV9JT1dSKDB4YjgsIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyMzIpCisKIHR5cGVkZWYg c3RydWN0IGRybV92ZXJzaW9uXzMyIHsKIAlpbnQgdmVyc2lvbl9tYWpvcjsJICAvKio8IE1ham9y IHZlcnNpb24gKi8KIAlpbnQgdmVyc2lvbl9taW5vcjsJICAvKio8IE1pbm9yIHZlcnNpb24gKi8K QEAgLTEwMTMsNiArMTAxNSw2MyBAQCBzdGF0aWMgaW50IGNvbXBhdF9kcm1fd2FpdF92Ymxhbmso c3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiAJcmV0dXJuIDA7CiB9CiAKK3N0 cnVjdCBkcm1fbW9kZV9mYl9jbWQyMzIgeworCXUzMiBmYl9pZDsKKwl1MzIgd2lkdGg7CisJdTMy IGhlaWdodDsKKwl1MzIgcGl4ZWxfZm9ybWF0OworCXUzMiBmbGFnczsKKwl1MzIgaGFuZGxlc1s0 XTsKKwl1MzIgcGl0Y2hlc1s0XTsKKwl1MzIgb2Zmc2V0c1s0XTsKKwl1NjQgbW9kaWZpZXJbNF07 Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IGNvbXBhdF9kcm1fbW9k ZV9hZGRmYjIoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkJICB1bnNp Z25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMjMyIF9fdXNlciAqYXJn cCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMjMyIHJlcTMy OworCXN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyIF9fdXNlciAqcmVxNjQ7CisJaW50IGk7CisJaW50 IGVycjsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmcmVxMzIsIGFyZ3AsIHNpemVvZihyZXEzMikp KQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJlcTY0ID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uo c2l6ZW9mKCpyZXE2NCkpOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCByZXE2NCwg c2l6ZW9mKCpyZXE2NCkpCisJICAgIHx8IF9fcHV0X3VzZXIocmVxMzIud2lkdGgsICZyZXE2NC0+ d2lkdGgpCisJICAgIHx8IF9fcHV0X3VzZXIocmVxMzIuaGVpZ2h0LCAmcmVxNjQtPmhlaWdodCkK KwkgICAgfHwgX19wdXRfdXNlcihyZXEzMi5waXhlbF9mb3JtYXQsICZyZXE2NC0+cGl4ZWxfZm9y bWF0KQorCSAgICB8fCBfX3B1dF91c2VyKHJlcTMyLmZsYWdzLCAmcmVxNjQtPmZsYWdzKSkKKwkJ cmV0dXJuIC1FRkFVTFQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWlmIChfX3B1 dF91c2VyKHJlcTMyLmhhbmRsZXNbaV0sICZyZXE2NC0+aGFuZGxlc1tpXSkpCisJCQlyZXR1cm4g LUVGQVVMVDsKKwkJaWYgKF9fcHV0X3VzZXIocmVxMzIucGl0Y2hlc1tpXSwgJnJlcTY0LT5waXRj aGVzW2ldKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoX19wdXRfdXNlcihyZXEzMi5vZmZz ZXRzW2ldLCAmcmVxNjQtPm9mZnNldHNbaV0pKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChf X3B1dF91c2VyKHJlcTMyLm1vZGlmaWVyW2ldLCAmcmVxNjQtPm1vZGlmaWVyW2ldKSkKKwkJCXJl dHVybiAtRUZBVUxUOworCX0KKworCWVyciA9IGRybV9pb2N0bChmaWxlLCBEUk1fSU9DVExfTU9E RV9BRERGQjIsICh1bnNpZ25lZCBsb25nKXJlcTY0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJy OworCisJaWYgKF9fZ2V0X3VzZXIocmVxMzIuZmJfaWQsICZyZXE2NC0+ZmJfaWQpKQorCQlyZXR1 cm4gLUVGQVVMVDsKKworCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnJlcTMyLCBzaXplb2YocmVx MzIpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGRybV9p b2N0bF9jb21wYXRfdCAqZHJtX2NvbXBhdF9pb2N0bHNbXSA9IHsKIAlbRFJNX0lPQ1RMX05SKERS TV9JT0NUTF9WRVJTSU9OMzIpXSA9IGNvbXBhdF9kcm1fdmVyc2lvbiwKIAlbRFJNX0lPQ1RMX05S KERSTV9JT0NUTF9HRVRfVU5JUVVFMzIpXSA9IGNvbXBhdF9kcm1fZ2V0dW5pcXVlLApAQCAtMTA0 NSw2ICsxMTA0LDcgQEAgc3RhdGljIGRybV9pb2N0bF9jb21wYXRfdCAqZHJtX2NvbXBhdF9pb2N0 bHNbXSA9IHsKIAlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9VUERBVEVfRFJBVzMyKV0gPSBjb21w YXRfZHJtX3VwZGF0ZV9kcmF3LAogI2VuZGlmCiAJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfV0FJ VF9WQkxBTkszMildID0gY29tcGF0X2RybV93YWl0X3ZibGFuaywKKwlbRFJNX0lPQ1RMX05SKERS TV9JT0NUTF9NT0RFX0FEREZCMjMyKV0gPSBjb21wYXRfZHJtX21vZGVfYWRkZmIyLAogfTsKIAog LyoqCi0tIAoyLjQuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n ZngK