Re: [Intel-gfx] [PATCH v3] drm/i915/query: Split out query item checks

2019-02-26 Thread Chris Wilson
Quoting Tvrtko Ursulin (2019-02-11 17:49:11)
> 
> On 11/02/2019 17:32, Abdiel Janulgue wrote:
> > This simplifies adding new query item objects.
> > 
> > v2: Use query_hdr (Tvrtko, Chris).
> >  int instead of u32 in return (Tvrtko)
> > v3: More naming fixes (Tvrtko)
> > 
> > Signed-off-by: Abdiel Janulgue 
> > Cc: Joonas Lahtinen 
[snip]
> Reviewed-by: Tvrtko Ursulin 

And pushed. Thanks for the patch and review,
-Chris
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Re: [Intel-gfx] [PATCH v3] drm/i915/query: Split out query item checks

2019-02-11 Thread Tvrtko Ursulin


On 11/02/2019 17:32, Abdiel Janulgue wrote:

This simplifies adding new query item objects.

v2: Use query_hdr (Tvrtko, Chris).
 int instead of u32 in return (Tvrtko)
v3: More naming fixes (Tvrtko)

Signed-off-by: Abdiel Janulgue 
Cc: Joonas Lahtinen 
---
  drivers/gpu/drm/i915/i915_query.c | 39 ---
  1 file changed, 26 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_query.c 
b/drivers/gpu/drm/i915/i915_query.c
index cbcb957b7141..782183b78f49 100644
--- a/drivers/gpu/drm/i915/i915_query.c
+++ b/drivers/gpu/drm/i915/i915_query.c
@@ -10,12 +10,34 @@
  #include "i915_query.h"
  #include 
  
+static int copy_query_item(void *query_hdr, size_t query_sz,

+  u32 total_length,
+  struct drm_i915_query_item *query_item)
+{
+   if (query_item->length == 0)
+   return total_length;
+
+   if (query_item->length < total_length)
+   return -EINVAL;
+
+   if (copy_from_user(query_hdr, u64_to_user_ptr(query_item->data_ptr),
+  query_sz))
+   return -EFAULT;
+
+   if (!access_ok(u64_to_user_ptr(query_item->data_ptr),
+  total_length))
+   return -EFAULT;
+
+   return 0;
+}
+
  static int query_topology_info(struct drm_i915_private *dev_priv,
   struct drm_i915_query_item *query_item)
  {
const struct sseu_dev_info *sseu = &RUNTIME_INFO(dev_priv)->sseu;
struct drm_i915_query_topology_info topo;
u32 slice_length, subslice_length, eu_length, total_length;
+   int ret;
  
  	if (query_item->flags != 0)

return -EINVAL;
@@ -33,23 +55,14 @@ static int query_topology_info(struct drm_i915_private 
*dev_priv,
  
  	total_length = sizeof(topo) + slice_length + subslice_length + eu_length;
  
-	if (query_item->length == 0)

-   return total_length;
-
-   if (query_item->length < total_length)
-   return -EINVAL;
-
-   if (copy_from_user(&topo, u64_to_user_ptr(query_item->data_ptr),
-  sizeof(topo)))
-   return -EFAULT;
+   ret = copy_query_item(&topo, sizeof(topo), total_length,
+ query_item);
+   if (ret != 0)
+   return ret;
  
  	if (topo.flags != 0)

return -EINVAL;
  
-	if (!access_ok(u64_to_user_ptr(query_item->data_ptr),

-  total_length))
-   return -EFAULT;
-
memset(&topo, 0, sizeof(topo));
topo.max_slices = sseu->max_slices;
topo.max_subslices = sseu->max_subslices;



Reviewed-by: Tvrtko Ursulin 

Regards,

Tvrtko
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] [PATCH v3] drm/i915/query: Split out query item checks

2019-02-11 Thread Abdiel Janulgue
This simplifies adding new query item objects.

v2: Use query_hdr (Tvrtko, Chris).
int instead of u32 in return (Tvrtko)
v3: More naming fixes (Tvrtko)

Signed-off-by: Abdiel Janulgue 
Cc: Joonas Lahtinen 
---
 drivers/gpu/drm/i915/i915_query.c | 39 ---
 1 file changed, 26 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_query.c 
b/drivers/gpu/drm/i915/i915_query.c
index cbcb957b7141..782183b78f49 100644
--- a/drivers/gpu/drm/i915/i915_query.c
+++ b/drivers/gpu/drm/i915/i915_query.c
@@ -10,12 +10,34 @@
 #include "i915_query.h"
 #include 
 
+static int copy_query_item(void *query_hdr, size_t query_sz,
+  u32 total_length,
+  struct drm_i915_query_item *query_item)
+{
+   if (query_item->length == 0)
+   return total_length;
+
+   if (query_item->length < total_length)
+   return -EINVAL;
+
+   if (copy_from_user(query_hdr, u64_to_user_ptr(query_item->data_ptr),
+  query_sz))
+   return -EFAULT;
+
+   if (!access_ok(u64_to_user_ptr(query_item->data_ptr),
+  total_length))
+   return -EFAULT;
+
+   return 0;
+}
+
 static int query_topology_info(struct drm_i915_private *dev_priv,
   struct drm_i915_query_item *query_item)
 {
const struct sseu_dev_info *sseu = &RUNTIME_INFO(dev_priv)->sseu;
struct drm_i915_query_topology_info topo;
u32 slice_length, subslice_length, eu_length, total_length;
+   int ret;
 
if (query_item->flags != 0)
return -EINVAL;
@@ -33,23 +55,14 @@ static int query_topology_info(struct drm_i915_private 
*dev_priv,
 
total_length = sizeof(topo) + slice_length + subslice_length + 
eu_length;
 
-   if (query_item->length == 0)
-   return total_length;
-
-   if (query_item->length < total_length)
-   return -EINVAL;
-
-   if (copy_from_user(&topo, u64_to_user_ptr(query_item->data_ptr),
-  sizeof(topo)))
-   return -EFAULT;
+   ret = copy_query_item(&topo, sizeof(topo), total_length,
+ query_item);
+   if (ret != 0)
+   return ret;
 
if (topo.flags != 0)
return -EINVAL;
 
-   if (!access_ok(u64_to_user_ptr(query_item->data_ptr),
-  total_length))
-   return -EFAULT;
-
memset(&topo, 0, sizeof(topo));
topo.max_slices = sseu->max_slices;
topo.max_subslices = sseu->max_subslices;
-- 
2.19.1

___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx