Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1384369 > unrolled thread

[PATCH v12 0/2] staging/android: Sync ABI rework

Started byGustavo Padovan <gustavo@padovan.org>
First post2016-04-21 17:40 +0200
Last post2016-04-26 16:50 +0200
Articles 9 — 7 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH v12 0/2] staging/android: Sync ABI rework Gustavo Padovan <gustavo@padovan.org> - 2016-04-21 17:40 +0200
    [PATCH v12 1/2] kernel.h: add u64_to_user_ptr() Gustavo Padovan <gustavo@padovan.org> - 2016-04-21 17:40 +0200
      Re: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr() Daniel Vetter <daniel@ffwll.ch> - 2016-04-22 10:40 +0200
        Re: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr() Gustavo Padovan <gustavo@padovan.org> - 2016-04-22 16:40 +0200
      Re: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr() Rob Clark <robdclark@gmail.com> - 2016-04-22 17:20 +0200
        Re: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr() Maarten Lankhorst <maarten.lankhorst@linux.intel.com> - 2016-04-24 12:50 +0200
      Re: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr() Lucas Stach <l.stach@pengutronix.de> - 2016-04-26 11:30 +0200
        Re: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr() Gustavo Padovan <gustavo.padovan@collabora.co.uk> - 2016-04-26 16:30 +0200
          Re: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr() Joe Perches <joe@perches.com> - 2016-04-26 16:50 +0200

#1384369 — [PATCH v12 0/2] staging/android: Sync ABI rework

FromGustavo Padovan <gustavo@padovan.org>
Date2016-04-21 17:40 +0200
Subject[PATCH v12 0/2] staging/android: Sync ABI rework
Message-ID<rqoRX-2Wv-7@gated-at.bofh.it>
From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>

Hi,

Here we clean up the Sync ABI and then improve in to a more optimized version.
Also it is now less likely to need changes in the future. This is not
breaking any upstream user of the sync framework, as no driver wired support
for it, so far Android is the only user. A patch to AOSP will be provided
to fix it there.

We've made the changes in a way that userspace can figure out if the new
versions are present and if not fallback to the older ABI version. More
information on patch 2 description.

To accomplish that we had to create a u64_to_user_ptr() macro so
patch 1 adds that and also fixes some places in the kernel that
were using (void __user *)(uintptr_t) cast directly.

Patch 2 is the actual rework and has Ack from the people interested in it,
including Android folks.

Gustavo Padovan (2):
  kernel.h: add u64_to_user_ptr()
  staging/android: refactor SYNC IOCTLs

 drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 11 ++--
 drivers/gpu/drm/i915/i915_drv.h              |  5 --
 drivers/gpu/drm/i915/i915_gem.c              | 14 ++---
 drivers/gpu/drm/i915/i915_gem_execbuffer.c   | 14 ++---
 drivers/gpu/drm/msm/msm_gem_submit.c         | 11 ++--
 drivers/staging/android/sync.c               | 76 +++++++++++++++-------------
 drivers/staging/android/uapi/sync.h          | 36 +++++++++----
 include/linux/kernel.h                       |  7 +++
 8 files changed, 94 insertions(+), 80 deletions(-)

-- 
2.5.5

[toc] | [next] | [standalone]


#1384375 — [PATCH v12 1/2] kernel.h: add u64_to_user_ptr()

FromGustavo Padovan <gustavo@padovan.org>
Date2016-04-21 17:40 +0200
Subject[PATCH v12 1/2] kernel.h: add u64_to_user_ptr()
Message-ID<rqoRY-2Wv-39@gated-at.bofh.it>
In reply to#1384369
From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>

This function had copies in 3 different files. Unify them in kernel.h.

Cc: Joe Perches <joe@perches.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel.vetter@intel.com>
Cc: Rob Clark <robdclark@gmail.com>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>

---
v2: add typecheck() (comment from Maarten Lankhorst)

v3: make u64_to_user_ptr() a macro (comment from Joe Perches)
---
 drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 11 +++--------
 drivers/gpu/drm/i915/i915_drv.h              |  5 -----
 drivers/gpu/drm/i915/i915_gem.c              | 14 +++++++-------
 drivers/gpu/drm/i915/i915_gem_execbuffer.c   | 14 +++++++-------
 drivers/gpu/drm/msm/msm_gem_submit.c         | 11 +++--------
 include/linux/kernel.h                       |  7 +++++++
 6 files changed, 27 insertions(+), 35 deletions(-)

diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
index 236ada9..afdd55d 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
@@ -28,11 +28,6 @@
 #define BO_LOCKED   0x4000
 #define BO_PINNED   0x2000
 
-static inline void __user *to_user_ptr(u64 address)
-{
-	return (void __user *)(uintptr_t)address;
-}
-
 static struct etnaviv_gem_submit *submit_create(struct drm_device *dev,
 		struct etnaviv_gpu *gpu, size_t nr)
 {
@@ -347,21 +342,21 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data,
 	cmdbuf->exec_state = args->exec_state;
 	cmdbuf->ctx = file->driver_priv;
 
-	ret = copy_from_user(bos, to_user_ptr(args->bos),
+	ret = copy_from_user(bos, u64_to_user_ptr(args->bos),
 			     args->nr_bos * sizeof(*bos));
 	if (ret) {
 		ret = -EFAULT;
 		goto err_submit_cmds;
 	}
 
-	ret = copy_from_user(relocs, to_user_ptr(args->relocs),
+	ret = copy_from_user(relocs, u64_to_user_ptr(args->relocs),
 			     args->nr_relocs * sizeof(*relocs));
 	if (ret) {
 		ret = -EFAULT;
 		goto err_submit_cmds;
 	}
 
-	ret = copy_from_user(stream, to_user_ptr(args->stream),
+	ret = copy_from_user(stream, u64_to_user_ptr(args->stream),
 			     args->stream_size);
 	if (ret) {
 		ret = -EFAULT;
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 1048093..bb624cc 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -3576,11 +3576,6 @@ static inline i915_reg_t i915_vgacntrl_reg(struct drm_device *dev)
 		return VGACNTRL;
 }
 
-static inline void __user *to_user_ptr(u64 address)
-{
-	return (void __user *)(uintptr_t)address;
-}
-
 static inline unsigned long msecs_to_jiffies_timeout(const unsigned int m)
 {
 	unsigned long j = msecs_to_jiffies(m);
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index dabc089..2889716 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -324,7 +324,7 @@ i915_gem_phys_pwrite(struct drm_i915_gem_object *obj,
 {
 	struct drm_device *dev = obj->base.dev;
 	void *vaddr = obj->phys_handle->vaddr + args->offset;
-	char __user *user_data = to_user_ptr(args->data_ptr);
+	char __user *user_data = u64_to_user_ptr(args->data_ptr);
 	int ret = 0;
 
 	/* We manually control the domain here and pretend that it
@@ -605,7 +605,7 @@ i915_gem_shmem_pread(struct drm_device *dev,
 	int needs_clflush = 0;
 	struct sg_page_iter sg_iter;
 
-	user_data = to_user_ptr(args->data_ptr);
+	user_data = u64_to_user_ptr(args->data_ptr);
 	remain = args->size;
 
 	obj_do_bit17_swizzling = i915_gem_object_needs_bit17_swizzle(obj);
@@ -692,7 +692,7 @@ i915_gem_pread_ioctl(struct drm_device *dev, void *data,
 		return 0;
 
 	if (!access_ok(VERIFY_WRITE,
-		       to_user_ptr(args->data_ptr),
+		       u64_to_user_ptr(args->data_ptr),
 		       args->size))
 		return -EFAULT;
 
@@ -783,7 +783,7 @@ i915_gem_gtt_pwrite_fast(struct drm_device *dev,
 	if (ret)
 		goto out_unpin;
 
-	user_data = to_user_ptr(args->data_ptr);
+	user_data = u64_to_user_ptr(args->data_ptr);
 	remain = args->size;
 
 	offset = i915_gem_obj_ggtt_offset(obj) + args->offset;
@@ -907,7 +907,7 @@ i915_gem_shmem_pwrite(struct drm_device *dev,
 	int needs_clflush_before = 0;
 	struct sg_page_iter sg_iter;
 
-	user_data = to_user_ptr(args->data_ptr);
+	user_data = u64_to_user_ptr(args->data_ptr);
 	remain = args->size;
 
 	obj_do_bit17_swizzling = i915_gem_object_needs_bit17_swizzle(obj);
@@ -1036,12 +1036,12 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
 		return 0;
 
 	if (!access_ok(VERIFY_READ,
-		       to_user_ptr(args->data_ptr),
+		       u64_to_user_ptr(args->data_ptr),
 		       args->size))
 		return -EFAULT;
 
 	if (likely(!i915.prefault_disable)) {
-		ret = fault_in_multipages_readable(to_user_ptr(args->data_ptr),
+		ret = fault_in_multipages_readable(u64_to_user_ptr(args->data_ptr),
 						   args->size);
 		if (ret)
 			return -EFAULT;
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index 1328bc5..e60b4e7 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -514,7 +514,7 @@ i915_gem_execbuffer_relocate_vma(struct i915_vma *vma,
 	struct drm_i915_gem_exec_object2 *entry = vma->exec_entry;
 	int remain, ret;
 
-	user_relocs = to_user_ptr(entry->relocs_ptr);
+	user_relocs = u64_to_user_ptr(entry->relocs_ptr);
 
 	remain = entry->relocation_count;
 	while (remain) {
@@ -865,7 +865,7 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev,
 		u64 invalid_offset = (u64)-1;
 		int j;
 
-		user_relocs = to_user_ptr(exec[i].relocs_ptr);
+		user_relocs = u64_to_user_ptr(exec[i].relocs_ptr);
 
 		if (copy_from_user(reloc+total, user_relocs,
 				   exec[i].relocation_count * sizeof(*reloc))) {
@@ -1009,7 +1009,7 @@ validate_exec_list(struct drm_device *dev,
 		invalid_flags |= EXEC_OBJECT_NEEDS_GTT;
 
 	for (i = 0; i < count; i++) {
-		char __user *ptr = to_user_ptr(exec[i].relocs_ptr);
+		char __user *ptr = u64_to_user_ptr(exec[i].relocs_ptr);
 		int length; /* limited by fault_in_pages_readable() */
 
 		if (exec[i].flags & invalid_flags)
@@ -1696,7 +1696,7 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
 		return -ENOMEM;
 	}
 	ret = copy_from_user(exec_list,
-			     to_user_ptr(args->buffers_ptr),
+			     u64_to_user_ptr(args->buffers_ptr),
 			     sizeof(*exec_list) * args->buffer_count);
 	if (ret != 0) {
 		DRM_DEBUG("copy %d exec entries failed %d\n",
@@ -1732,7 +1732,7 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
 	ret = i915_gem_do_execbuffer(dev, data, file, &exec2, exec2_list);
 	if (!ret) {
 		struct drm_i915_gem_exec_object __user *user_exec_list =
-			to_user_ptr(args->buffers_ptr);
+			u64_to_user_ptr(args->buffers_ptr);
 
 		/* Copy the new buffer offsets back to the user's exec list. */
 		for (i = 0; i < args->buffer_count; i++) {
@@ -1786,7 +1786,7 @@ i915_gem_execbuffer2(struct drm_device *dev, void *data,
 		return -ENOMEM;
 	}
 	ret = copy_from_user(exec2_list,
-			     to_user_ptr(args->buffers_ptr),
+			     u64_to_user_ptr(args->buffers_ptr),
 			     sizeof(*exec2_list) * args->buffer_count);
 	if (ret != 0) {
 		DRM_DEBUG("copy %d exec entries failed %d\n",
@@ -1799,7 +1799,7 @@ i915_gem_execbuffer2(struct drm_device *dev, void *data,
 	if (!ret) {
 		/* Copy the new buffer offsets back to the user's exec list. */
 		struct drm_i915_gem_exec_object2 __user *user_exec_list =
-				   to_user_ptr(args->buffers_ptr);
+				   u64_to_user_ptr(args->buffers_ptr);
 		int i;
 
 		for (i = 0; i < args->buffer_count; i++) {
diff --git a/drivers/gpu/drm/msm/msm_gem_submit.c b/drivers/gpu/drm/msm/msm_gem_submit.c
index 43d2181..23d2528 100644
--- a/drivers/gpu/drm/msm/msm_gem_submit.c
+++ b/drivers/gpu/drm/msm/msm_gem_submit.c
@@ -28,11 +28,6 @@
 #define BO_LOCKED   0x4000
 #define BO_PINNED   0x2000
 
-static inline void __user *to_user_ptr(u64 address)
-{
-	return (void __user *)(uintptr_t)address;
-}
-
 static struct msm_gem_submit *submit_create(struct drm_device *dev,
 		struct msm_gpu *gpu, int nr)
 {
@@ -68,7 +63,7 @@ static int submit_lookup_objects(struct msm_gem_submit *submit,
 		struct drm_gem_object *obj;
 		struct msm_gem_object *msm_obj;
 		void __user *userptr =
-			to_user_ptr(args->bos + (i * sizeof(submit_bo)));
+			u64_to_user_ptr(args->bos + (i * sizeof(submit_bo)));
 
 		ret = copy_from_user(&submit_bo, userptr, sizeof(submit_bo));
 		if (ret) {
@@ -257,7 +252,7 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob
 	for (i = 0; i < nr_relocs; i++) {
 		struct drm_msm_gem_submit_reloc submit_reloc;
 		void __user *userptr =
-			to_user_ptr(relocs + (i * sizeof(submit_reloc)));
+			u64_to_user_ptr(relocs + (i * sizeof(submit_reloc)));
 		uint32_t iova, off;
 		bool valid;
 
@@ -356,7 +351,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
 	for (i = 0; i < args->nr_cmds; i++) {
 		struct drm_msm_gem_submit_cmd submit_cmd;
 		void __user *userptr =
-			to_user_ptr(args->cmds + (i * sizeof(submit_cmd)));
+			u64_to_user_ptr(args->cmds + (i * sizeof(submit_cmd)));
 		struct msm_gem_object *msm_obj;
 		uint32_t iova;
 
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index 2f7775e..f3e45cb 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -53,6 +53,13 @@
 
 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
 
+#define u64_to_user_ptr(x) (		\
+{					\
+	typecheck(u64, x);		\
+	(void __user *)(uintptr_t)x;	\
+}					\
+)
+
 /*
  * This looks more complex than it should be. But we need to
  * get the type for the ~ right in round_down (it needs to be
-- 
2.5.5

[toc] | [prev] | [next] | [standalone]


#1384789 — Re: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr()

FromDaniel Vetter <daniel@ffwll.ch>
Date2016-04-22 10:40 +0200
SubjectRe: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr()
Message-ID<rqEN3-7vo-11@gated-at.bofh.it>
In reply to#1384375
On Thu, Apr 21, 2016 at 12:38:49PM -0300, Gustavo Padovan wrote:
> From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
> 
> This function had copies in 3 different files. Unify them in kernel.h.
> 
> Cc: Joe Perches <joe@perches.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: David Airlie <airlied@linux.ie>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>

Ack for i915 parts for merging through any suitable tree. But since this
mostly touches drm I'd propose we pull this in through drm-misc. Joe?
-Daniel

> 
> ---
> v2: add typecheck() (comment from Maarten Lankhorst)
> 
> v3: make u64_to_user_ptr() a macro (comment from Joe Perches)
> ---
>  drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 11 +++--------
>  drivers/gpu/drm/i915/i915_drv.h              |  5 -----
>  drivers/gpu/drm/i915/i915_gem.c              | 14 +++++++-------
>  drivers/gpu/drm/i915/i915_gem_execbuffer.c   | 14 +++++++-------
>  drivers/gpu/drm/msm/msm_gem_submit.c         | 11 +++--------
>  include/linux/kernel.h                       |  7 +++++++
>  6 files changed, 27 insertions(+), 35 deletions(-)
> 
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
> index 236ada9..afdd55d 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
> @@ -28,11 +28,6 @@
>  #define BO_LOCKED   0x4000
>  #define BO_PINNED   0x2000
>  
> -static inline void __user *to_user_ptr(u64 address)
> -{
> -	return (void __user *)(uintptr_t)address;
> -}
> -
>  static struct etnaviv_gem_submit *submit_create(struct drm_device *dev,
>  		struct etnaviv_gpu *gpu, size_t nr)
>  {
> @@ -347,21 +342,21 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data,
>  	cmdbuf->exec_state = args->exec_state;
>  	cmdbuf->ctx = file->driver_priv;
>  
> -	ret = copy_from_user(bos, to_user_ptr(args->bos),
> +	ret = copy_from_user(bos, u64_to_user_ptr(args->bos),
>  			     args->nr_bos * sizeof(*bos));
>  	if (ret) {
>  		ret = -EFAULT;
>  		goto err_submit_cmds;
>  	}
>  
> -	ret = copy_from_user(relocs, to_user_ptr(args->relocs),
> +	ret = copy_from_user(relocs, u64_to_user_ptr(args->relocs),
>  			     args->nr_relocs * sizeof(*relocs));
>  	if (ret) {
>  		ret = -EFAULT;
>  		goto err_submit_cmds;
>  	}
>  
> -	ret = copy_from_user(stream, to_user_ptr(args->stream),
> +	ret = copy_from_user(stream, u64_to_user_ptr(args->stream),
>  			     args->stream_size);
>  	if (ret) {
>  		ret = -EFAULT;
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 1048093..bb624cc 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -3576,11 +3576,6 @@ static inline i915_reg_t i915_vgacntrl_reg(struct drm_device *dev)
>  		return VGACNTRL;
>  }
>  
> -static inline void __user *to_user_ptr(u64 address)
> -{
> -	return (void __user *)(uintptr_t)address;
> -}
> -
>  static inline unsigned long msecs_to_jiffies_timeout(const unsigned int m)
>  {
>  	unsigned long j = msecs_to_jiffies(m);
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index dabc089..2889716 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -324,7 +324,7 @@ i915_gem_phys_pwrite(struct drm_i915_gem_object *obj,
>  {
>  	struct drm_device *dev = obj->base.dev;
>  	void *vaddr = obj->phys_handle->vaddr + args->offset;
> -	char __user *user_data = to_user_ptr(args->data_ptr);
> +	char __user *user_data = u64_to_user_ptr(args->data_ptr);
>  	int ret = 0;
>  
>  	/* We manually control the domain here and pretend that it
> @@ -605,7 +605,7 @@ i915_gem_shmem_pread(struct drm_device *dev,
>  	int needs_clflush = 0;
>  	struct sg_page_iter sg_iter;
>  
> -	user_data = to_user_ptr(args->data_ptr);
> +	user_data = u64_to_user_ptr(args->data_ptr);
>  	remain = args->size;
>  
>  	obj_do_bit17_swizzling = i915_gem_object_needs_bit17_swizzle(obj);
> @@ -692,7 +692,7 @@ i915_gem_pread_ioctl(struct drm_device *dev, void *data,
>  		return 0;
>  
>  	if (!access_ok(VERIFY_WRITE,
> -		       to_user_ptr(args->data_ptr),
> +		       u64_to_user_ptr(args->data_ptr),
>  		       args->size))
>  		return -EFAULT;
>  
> @@ -783,7 +783,7 @@ i915_gem_gtt_pwrite_fast(struct drm_device *dev,
>  	if (ret)
>  		goto out_unpin;
>  
> -	user_data = to_user_ptr(args->data_ptr);
> +	user_data = u64_to_user_ptr(args->data_ptr);
>  	remain = args->size;
>  
>  	offset = i915_gem_obj_ggtt_offset(obj) + args->offset;
> @@ -907,7 +907,7 @@ i915_gem_shmem_pwrite(struct drm_device *dev,
>  	int needs_clflush_before = 0;
>  	struct sg_page_iter sg_iter;
>  
> -	user_data = to_user_ptr(args->data_ptr);
> +	user_data = u64_to_user_ptr(args->data_ptr);
>  	remain = args->size;
>  
>  	obj_do_bit17_swizzling = i915_gem_object_needs_bit17_swizzle(obj);
> @@ -1036,12 +1036,12 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
>  		return 0;
>  
>  	if (!access_ok(VERIFY_READ,
> -		       to_user_ptr(args->data_ptr),
> +		       u64_to_user_ptr(args->data_ptr),
>  		       args->size))
>  		return -EFAULT;
>  
>  	if (likely(!i915.prefault_disable)) {
> -		ret = fault_in_multipages_readable(to_user_ptr(args->data_ptr),
> +		ret = fault_in_multipages_readable(u64_to_user_ptr(args->data_ptr),
>  						   args->size);
>  		if (ret)
>  			return -EFAULT;
> diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> index 1328bc5..e60b4e7 100644
> --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> @@ -514,7 +514,7 @@ i915_gem_execbuffer_relocate_vma(struct i915_vma *vma,
>  	struct drm_i915_gem_exec_object2 *entry = vma->exec_entry;
>  	int remain, ret;
>  
> -	user_relocs = to_user_ptr(entry->relocs_ptr);
> +	user_relocs = u64_to_user_ptr(entry->relocs_ptr);
>  
>  	remain = entry->relocation_count;
>  	while (remain) {
> @@ -865,7 +865,7 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev,
>  		u64 invalid_offset = (u64)-1;
>  		int j;
>  
> -		user_relocs = to_user_ptr(exec[i].relocs_ptr);
> +		user_relocs = u64_to_user_ptr(exec[i].relocs_ptr);
>  
>  		if (copy_from_user(reloc+total, user_relocs,
>  				   exec[i].relocation_count * sizeof(*reloc))) {
> @@ -1009,7 +1009,7 @@ validate_exec_list(struct drm_device *dev,
>  		invalid_flags |= EXEC_OBJECT_NEEDS_GTT;
>  
>  	for (i = 0; i < count; i++) {
> -		char __user *ptr = to_user_ptr(exec[i].relocs_ptr);
> +		char __user *ptr = u64_to_user_ptr(exec[i].relocs_ptr);
>  		int length; /* limited by fault_in_pages_readable() */
>  
>  		if (exec[i].flags & invalid_flags)
> @@ -1696,7 +1696,7 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
>  		return -ENOMEM;
>  	}
>  	ret = copy_from_user(exec_list,
> -			     to_user_ptr(args->buffers_ptr),
> +			     u64_to_user_ptr(args->buffers_ptr),
>  			     sizeof(*exec_list) * args->buffer_count);
>  	if (ret != 0) {
>  		DRM_DEBUG("copy %d exec entries failed %d\n",
> @@ -1732,7 +1732,7 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
>  	ret = i915_gem_do_execbuffer(dev, data, file, &exec2, exec2_list);
>  	if (!ret) {
>  		struct drm_i915_gem_exec_object __user *user_exec_list =
> -			to_user_ptr(args->buffers_ptr);
> +			u64_to_user_ptr(args->buffers_ptr);
>  
>  		/* Copy the new buffer offsets back to the user's exec list. */
>  		for (i = 0; i < args->buffer_count; i++) {
> @@ -1786,7 +1786,7 @@ i915_gem_execbuffer2(struct drm_device *dev, void *data,
>  		return -ENOMEM;
>  	}
>  	ret = copy_from_user(exec2_list,
> -			     to_user_ptr(args->buffers_ptr),
> +			     u64_to_user_ptr(args->buffers_ptr),
>  			     sizeof(*exec2_list) * args->buffer_count);
>  	if (ret != 0) {
>  		DRM_DEBUG("copy %d exec entries failed %d\n",
> @@ -1799,7 +1799,7 @@ i915_gem_execbuffer2(struct drm_device *dev, void *data,
>  	if (!ret) {
>  		/* Copy the new buffer offsets back to the user's exec list. */
>  		struct drm_i915_gem_exec_object2 __user *user_exec_list =
> -				   to_user_ptr(args->buffers_ptr);
> +				   u64_to_user_ptr(args->buffers_ptr);
>  		int i;
>  
>  		for (i = 0; i < args->buffer_count; i++) {
> diff --git a/drivers/gpu/drm/msm/msm_gem_submit.c b/drivers/gpu/drm/msm/msm_gem_submit.c
> index 43d2181..23d2528 100644
> --- a/drivers/gpu/drm/msm/msm_gem_submit.c
> +++ b/drivers/gpu/drm/msm/msm_gem_submit.c
> @@ -28,11 +28,6 @@
>  #define BO_LOCKED   0x4000
>  #define BO_PINNED   0x2000
>  
> -static inline void __user *to_user_ptr(u64 address)
> -{
> -	return (void __user *)(uintptr_t)address;
> -}
> -
>  static struct msm_gem_submit *submit_create(struct drm_device *dev,
>  		struct msm_gpu *gpu, int nr)
>  {
> @@ -68,7 +63,7 @@ static int submit_lookup_objects(struct msm_gem_submit *submit,
>  		struct drm_gem_object *obj;
>  		struct msm_gem_object *msm_obj;
>  		void __user *userptr =
> -			to_user_ptr(args->bos + (i * sizeof(submit_bo)));
> +			u64_to_user_ptr(args->bos + (i * sizeof(submit_bo)));
>  
>  		ret = copy_from_user(&submit_bo, userptr, sizeof(submit_bo));
>  		if (ret) {
> @@ -257,7 +252,7 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob
>  	for (i = 0; i < nr_relocs; i++) {
>  		struct drm_msm_gem_submit_reloc submit_reloc;
>  		void __user *userptr =
> -			to_user_ptr(relocs + (i * sizeof(submit_reloc)));
> +			u64_to_user_ptr(relocs + (i * sizeof(submit_reloc)));
>  		uint32_t iova, off;
>  		bool valid;
>  
> @@ -356,7 +351,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
>  	for (i = 0; i < args->nr_cmds; i++) {
>  		struct drm_msm_gem_submit_cmd submit_cmd;
>  		void __user *userptr =
> -			to_user_ptr(args->cmds + (i * sizeof(submit_cmd)));
> +			u64_to_user_ptr(args->cmds + (i * sizeof(submit_cmd)));
>  		struct msm_gem_object *msm_obj;
>  		uint32_t iova;
>  
> diff --git a/include/linux/kernel.h b/include/linux/kernel.h
> index 2f7775e..f3e45cb 100644
> --- a/include/linux/kernel.h
> +++ b/include/linux/kernel.h
> @@ -53,6 +53,13 @@
>  
>  #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
>  
> +#define u64_to_user_ptr(x) (		\
> +{					\
> +	typecheck(u64, x);		\
> +	(void __user *)(uintptr_t)x;	\
> +}					\
> +)
> +
>  /*
>   * This looks more complex than it should be. But we need to
>   * get the type for the ~ right in round_down (it needs to be
> -- 
> 2.5.5
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

[toc] | [prev] | [next] | [standalone]


#1385233 — Re: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr()

FromGustavo Padovan <gustavo@padovan.org>
Date2016-04-22 16:40 +0200
SubjectRe: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr()
Message-ID<rqKps-3oW-13@gated-at.bofh.it>
In reply to#1384789
2016-04-22 Daniel Vetter <daniel@ffwll.ch>:

> On Thu, Apr 21, 2016 at 12:38:49PM -0300, Gustavo Padovan wrote:
> > From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
> > 
> > This function had copies in 3 different files. Unify them in kernel.h.
> > 
> > Cc: Joe Perches <joe@perches.com>
> > Cc: Andrew Morton <akpm@linux-foundation.org>
> > Cc: David Airlie <airlied@linux.ie>
> > Cc: Daniel Vetter <daniel.vetter@intel.com>
> > Cc: Rob Clark <robdclark@gmail.com>
> > Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
> 
> Ack for i915 parts for merging through any suitable tree. But since this
> mostly touches drm I'd propose we pull this in through drm-misc. Joe?

Patch 2 needs this change and it is meant to be applied against the
staging tree.

	Gustavo

[toc] | [prev] | [next] | [standalone]


#1385266 — Re: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr()

FromRob Clark <robdclark@gmail.com>
Date2016-04-22 17:20 +0200
SubjectRe: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr()
Message-ID<rqL2a-3VA-7@gated-at.bofh.it>
In reply to#1384375
On Thu, Apr 21, 2016 at 11:38 AM, Gustavo Padovan <gustavo@padovan.org> wrote:
> From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
>
> This function had copies in 3 different files. Unify them in kernel.h.
>
> Cc: Joe Perches <joe@perches.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: David Airlie <airlied@linux.ie>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>

Acked-by: Rob Clark <robdclark@gmail.com>

>
> ---
> v2: add typecheck() (comment from Maarten Lankhorst)
>
> v3: make u64_to_user_ptr() a macro (comment from Joe Perches)
> ---
>  drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 11 +++--------
>  drivers/gpu/drm/i915/i915_drv.h              |  5 -----
>  drivers/gpu/drm/i915/i915_gem.c              | 14 +++++++-------
>  drivers/gpu/drm/i915/i915_gem_execbuffer.c   | 14 +++++++-------
>  drivers/gpu/drm/msm/msm_gem_submit.c         | 11 +++--------
>  include/linux/kernel.h                       |  7 +++++++
>  6 files changed, 27 insertions(+), 35 deletions(-)
>
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
> index 236ada9..afdd55d 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
> @@ -28,11 +28,6 @@
>  #define BO_LOCKED   0x4000
>  #define BO_PINNED   0x2000
>
> -static inline void __user *to_user_ptr(u64 address)
> -{
> -       return (void __user *)(uintptr_t)address;
> -}
> -
>  static struct etnaviv_gem_submit *submit_create(struct drm_device *dev,
>                 struct etnaviv_gpu *gpu, size_t nr)
>  {
> @@ -347,21 +342,21 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data,
>         cmdbuf->exec_state = args->exec_state;
>         cmdbuf->ctx = file->driver_priv;
>
> -       ret = copy_from_user(bos, to_user_ptr(args->bos),
> +       ret = copy_from_user(bos, u64_to_user_ptr(args->bos),
>                              args->nr_bos * sizeof(*bos));
>         if (ret) {
>                 ret = -EFAULT;
>                 goto err_submit_cmds;
>         }
>
> -       ret = copy_from_user(relocs, to_user_ptr(args->relocs),
> +       ret = copy_from_user(relocs, u64_to_user_ptr(args->relocs),
>                              args->nr_relocs * sizeof(*relocs));
>         if (ret) {
>                 ret = -EFAULT;
>                 goto err_submit_cmds;
>         }
>
> -       ret = copy_from_user(stream, to_user_ptr(args->stream),
> +       ret = copy_from_user(stream, u64_to_user_ptr(args->stream),
>                              args->stream_size);
>         if (ret) {
>                 ret = -EFAULT;
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 1048093..bb624cc 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -3576,11 +3576,6 @@ static inline i915_reg_t i915_vgacntrl_reg(struct drm_device *dev)
>                 return VGACNTRL;
>  }
>
> -static inline void __user *to_user_ptr(u64 address)
> -{
> -       return (void __user *)(uintptr_t)address;
> -}
> -
>  static inline unsigned long msecs_to_jiffies_timeout(const unsigned int m)
>  {
>         unsigned long j = msecs_to_jiffies(m);
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index dabc089..2889716 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -324,7 +324,7 @@ i915_gem_phys_pwrite(struct drm_i915_gem_object *obj,
>  {
>         struct drm_device *dev = obj->base.dev;
>         void *vaddr = obj->phys_handle->vaddr + args->offset;
> -       char __user *user_data = to_user_ptr(args->data_ptr);
> +       char __user *user_data = u64_to_user_ptr(args->data_ptr);
>         int ret = 0;
>
>         /* We manually control the domain here and pretend that it
> @@ -605,7 +605,7 @@ i915_gem_shmem_pread(struct drm_device *dev,
>         int needs_clflush = 0;
>         struct sg_page_iter sg_iter;
>
> -       user_data = to_user_ptr(args->data_ptr);
> +       user_data = u64_to_user_ptr(args->data_ptr);
>         remain = args->size;
>
>         obj_do_bit17_swizzling = i915_gem_object_needs_bit17_swizzle(obj);
> @@ -692,7 +692,7 @@ i915_gem_pread_ioctl(struct drm_device *dev, void *data,
>                 return 0;
>
>         if (!access_ok(VERIFY_WRITE,
> -                      to_user_ptr(args->data_ptr),
> +                      u64_to_user_ptr(args->data_ptr),
>                        args->size))
>                 return -EFAULT;
>
> @@ -783,7 +783,7 @@ i915_gem_gtt_pwrite_fast(struct drm_device *dev,
>         if (ret)
>                 goto out_unpin;
>
> -       user_data = to_user_ptr(args->data_ptr);
> +       user_data = u64_to_user_ptr(args->data_ptr);
>         remain = args->size;
>
>         offset = i915_gem_obj_ggtt_offset(obj) + args->offset;
> @@ -907,7 +907,7 @@ i915_gem_shmem_pwrite(struct drm_device *dev,
>         int needs_clflush_before = 0;
>         struct sg_page_iter sg_iter;
>
> -       user_data = to_user_ptr(args->data_ptr);
> +       user_data = u64_to_user_ptr(args->data_ptr);
>         remain = args->size;
>
>         obj_do_bit17_swizzling = i915_gem_object_needs_bit17_swizzle(obj);
> @@ -1036,12 +1036,12 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
>                 return 0;
>
>         if (!access_ok(VERIFY_READ,
> -                      to_user_ptr(args->data_ptr),
> +                      u64_to_user_ptr(args->data_ptr),
>                        args->size))
>                 return -EFAULT;
>
>         if (likely(!i915.prefault_disable)) {
> -               ret = fault_in_multipages_readable(to_user_ptr(args->data_ptr),
> +               ret = fault_in_multipages_readable(u64_to_user_ptr(args->data_ptr),
>                                                    args->size);
>                 if (ret)
>                         return -EFAULT;
> diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> index 1328bc5..e60b4e7 100644
> --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> @@ -514,7 +514,7 @@ i915_gem_execbuffer_relocate_vma(struct i915_vma *vma,
>         struct drm_i915_gem_exec_object2 *entry = vma->exec_entry;
>         int remain, ret;
>
> -       user_relocs = to_user_ptr(entry->relocs_ptr);
> +       user_relocs = u64_to_user_ptr(entry->relocs_ptr);
>
>         remain = entry->relocation_count;
>         while (remain) {
> @@ -865,7 +865,7 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev,
>                 u64 invalid_offset = (u64)-1;
>                 int j;
>
> -               user_relocs = to_user_ptr(exec[i].relocs_ptr);
> +               user_relocs = u64_to_user_ptr(exec[i].relocs_ptr);
>
>                 if (copy_from_user(reloc+total, user_relocs,
>                                    exec[i].relocation_count * sizeof(*reloc))) {
> @@ -1009,7 +1009,7 @@ validate_exec_list(struct drm_device *dev,
>                 invalid_flags |= EXEC_OBJECT_NEEDS_GTT;
>
>         for (i = 0; i < count; i++) {
> -               char __user *ptr = to_user_ptr(exec[i].relocs_ptr);
> +               char __user *ptr = u64_to_user_ptr(exec[i].relocs_ptr);
>                 int length; /* limited by fault_in_pages_readable() */
>
>                 if (exec[i].flags & invalid_flags)
> @@ -1696,7 +1696,7 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
>                 return -ENOMEM;
>         }
>         ret = copy_from_user(exec_list,
> -                            to_user_ptr(args->buffers_ptr),
> +                            u64_to_user_ptr(args->buffers_ptr),
>                              sizeof(*exec_list) * args->buffer_count);
>         if (ret != 0) {
>                 DRM_DEBUG("copy %d exec entries failed %d\n",
> @@ -1732,7 +1732,7 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
>         ret = i915_gem_do_execbuffer(dev, data, file, &exec2, exec2_list);
>         if (!ret) {
>                 struct drm_i915_gem_exec_object __user *user_exec_list =
> -                       to_user_ptr(args->buffers_ptr);
> +                       u64_to_user_ptr(args->buffers_ptr);
>
>                 /* Copy the new buffer offsets back to the user's exec list. */
>                 for (i = 0; i < args->buffer_count; i++) {
> @@ -1786,7 +1786,7 @@ i915_gem_execbuffer2(struct drm_device *dev, void *data,
>                 return -ENOMEM;
>         }
>         ret = copy_from_user(exec2_list,
> -                            to_user_ptr(args->buffers_ptr),
> +                            u64_to_user_ptr(args->buffers_ptr),
>                              sizeof(*exec2_list) * args->buffer_count);
>         if (ret != 0) {
>                 DRM_DEBUG("copy %d exec entries failed %d\n",
> @@ -1799,7 +1799,7 @@ i915_gem_execbuffer2(struct drm_device *dev, void *data,
>         if (!ret) {
>                 /* Copy the new buffer offsets back to the user's exec list. */
>                 struct drm_i915_gem_exec_object2 __user *user_exec_list =
> -                                  to_user_ptr(args->buffers_ptr);
> +                                  u64_to_user_ptr(args->buffers_ptr);
>                 int i;
>
>                 for (i = 0; i < args->buffer_count; i++) {
> diff --git a/drivers/gpu/drm/msm/msm_gem_submit.c b/drivers/gpu/drm/msm/msm_gem_submit.c
> index 43d2181..23d2528 100644
> --- a/drivers/gpu/drm/msm/msm_gem_submit.c
> +++ b/drivers/gpu/drm/msm/msm_gem_submit.c
> @@ -28,11 +28,6 @@
>  #define BO_LOCKED   0x4000
>  #define BO_PINNED   0x2000
>
> -static inline void __user *to_user_ptr(u64 address)
> -{
> -       return (void __user *)(uintptr_t)address;
> -}
> -
>  static struct msm_gem_submit *submit_create(struct drm_device *dev,
>                 struct msm_gpu *gpu, int nr)
>  {
> @@ -68,7 +63,7 @@ static int submit_lookup_objects(struct msm_gem_submit *submit,
>                 struct drm_gem_object *obj;
>                 struct msm_gem_object *msm_obj;
>                 void __user *userptr =
> -                       to_user_ptr(args->bos + (i * sizeof(submit_bo)));
> +                       u64_to_user_ptr(args->bos + (i * sizeof(submit_bo)));
>
>                 ret = copy_from_user(&submit_bo, userptr, sizeof(submit_bo));
>                 if (ret) {
> @@ -257,7 +252,7 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob
>         for (i = 0; i < nr_relocs; i++) {
>                 struct drm_msm_gem_submit_reloc submit_reloc;
>                 void __user *userptr =
> -                       to_user_ptr(relocs + (i * sizeof(submit_reloc)));
> +                       u64_to_user_ptr(relocs + (i * sizeof(submit_reloc)));
>                 uint32_t iova, off;
>                 bool valid;
>
> @@ -356,7 +351,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
>         for (i = 0; i < args->nr_cmds; i++) {
>                 struct drm_msm_gem_submit_cmd submit_cmd;
>                 void __user *userptr =
> -                       to_user_ptr(args->cmds + (i * sizeof(submit_cmd)));
> +                       u64_to_user_ptr(args->cmds + (i * sizeof(submit_cmd)));
>                 struct msm_gem_object *msm_obj;
>                 uint32_t iova;
>
> diff --git a/include/linux/kernel.h b/include/linux/kernel.h
> index 2f7775e..f3e45cb 100644
> --- a/include/linux/kernel.h
> +++ b/include/linux/kernel.h
> @@ -53,6 +53,13 @@
>
>  #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
>
> +#define u64_to_user_ptr(x) (           \
> +{                                      \
> +       typecheck(u64, x);              \
> +       (void __user *)(uintptr_t)x;    \
> +}                                      \
> +)
> +
>  /*
>   * This looks more complex than it should be. But we need to
>   * get the type for the ~ right in round_down (it needs to be
> --
> 2.5.5
>

[toc] | [prev] | [next] | [standalone]


#1385794 — Re: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr()

FromMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Date2016-04-24 12:50 +0200
SubjectRe: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr()
Message-ID<rrpLY-31I-1@gated-at.bofh.it>
In reply to#1385266
Op 22-04-16 om 17:13 schreef Rob Clark:
> On Thu, Apr 21, 2016 at 11:38 AM, Gustavo Padovan <gustavo@padovan.org> wrote:
>> From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
>>
>> This function had copies in 3 different files. Unify them in kernel.h.
>>
>> Cc: Joe Perches <joe@perches.com>
>> Cc: Andrew Morton <akpm@linux-foundation.org>
>> Cc: David Airlie <airlied@linux.ie>
>> Cc: Daniel Vetter <daniel.vetter@intel.com>
>> Cc: Rob Clark <robdclark@gmail.com>
>> Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
> Acked-by: Rob Clark <robdclark@gmail.com>
>
Looking much better.
Acked-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>

[toc] | [prev] | [next] | [standalone]


#1387304 — Re: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr()

FromLucas Stach <l.stach@pengutronix.de>
Date2016-04-26 11:30 +0200
SubjectRe: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr()
Message-ID<rs7tF-57R-23@gated-at.bofh.it>
In reply to#1384375
Am Donnerstag, den 21.04.2016, 12:38 -0300 schrieb Gustavo Padovan:
> From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
> 
> This function had copies in 3 different files. Unify them in kernel.h.
> 
> Cc: Joe Perches <joe@perches.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: David Airlie <airlied@linux.ie>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Rob Clark <robdclark@gmail.com>
> Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
> 
Though I normally prefer static inline functions, I see the benefits of
using the macro form here.

For the etnaviv part:
Acked-by: Lucas Stach <l.stach@pengutronix.de>

[toc] | [prev] | [next] | [standalone]


#1387532 — Re: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr()

FromGustavo Padovan <gustavo.padovan@collabora.co.uk>
Date2016-04-26 16:30 +0200
SubjectRe: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr()
Message-ID<rsc9Y-OI-25@gated-at.bofh.it>
In reply to#1387304
2016-04-26 Lucas Stach <l.stach@pengutronix.de>:

> Am Donnerstag, den 21.04.2016, 12:38 -0300 schrieb Gustavo Padovan:
> > From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
> > 
> > This function had copies in 3 different files. Unify them in kernel.h.
> > 
> > Cc: Joe Perches <joe@perches.com>
> > Cc: Andrew Morton <akpm@linux-foundation.org>
> > Cc: David Airlie <airlied@linux.ie>
> > Cc: Daniel Vetter <daniel.vetter@intel.com>
> > Cc: Rob Clark <robdclark@gmail.com>
> > Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
> > 
> Though I normally prefer static inline functions, I see the benefits of
> using the macro form here.
> 
> For the etnaviv part:
> Acked-by: Lucas Stach <l.stach@pengutronix.de>

Thank you all! I'll collect the Acks and send a new version, so it is
easier for Greg to pick it up.

[toc] | [prev] | [next] | [standalone]


#1387566 — Re: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr()

FromJoe Perches <joe@perches.com>
Date2016-04-26 16:50 +0200
SubjectRe: [PATCH v12 1/2] kernel.h: add u64_to_user_ptr()
Message-ID<rsctl-Xx-37@gated-at.bofh.it>
In reply to#1387532
On Tue, 2016-04-26 at 11:29 -0300, Gustavo Padovan wrote:
> 2016-04-26 Lucas Stach <l.stach@pengutronix.de>:
> > Am Donnerstag, den 21.04.2016, 12:38 -0300 schrieb Gustavo Padovan:
> > > From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
> > > 
> > > This function had copies in 3 different files. Unify them in kernel.h.
> > > 
> > > Cc: Joe Perches <joe@perches.com>
> > > Cc: Andrew Morton <akpm@linux-foundation.org>
> > > Cc: David Airlie <airlied@linux.ie>
> > > Cc: Daniel Vetter <daniel.vetter@intel.com>
> > > Cc: Rob Clark <robdclark@gmail.com>
> > > Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
> > > 
> > Though I normally prefer static inline functions, I see the benefits of
> > using the macro form here.

An inline could still work
	static inline void __user *u64_to_user_ptr(u64 address)
	{
		return (void __user *)(uintptr_t)address;
	}
if the macro was
	#define u64_to_user_ptr(x)		\
	({					\
		typecheck(u64, x);		\
		(u64_to_user_ptr)(x);		\
	})

the parenthesis around the u64_to_user_ptr
in the macro should prevent expansion.

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web