diff mbox series

drm/i915/perf: Avoid polluting the i915_oa_config with error pointers

Message ID 20191013095211.2922-1-chris@chris-wilson.co.uk (mailing list archive)
State New, archived
Headers show
Series drm/i915/perf: Avoid polluting the i915_oa_config with error pointers | expand

Commit Message

Chris Wilson Oct. 13, 2019, 9:52 a.m. UTC
Use a local variable to track the allocation errors to avoid polluting
the struct and keep the free simple.

Reported-by: kbuild test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
---
 drivers/gpu/drm/i915/i915_perf.c | 52 +++++++++++++++-----------------
 1 file changed, 25 insertions(+), 27 deletions(-)

Comments

Lionel Landwerlin Oct. 13, 2019, 11:33 a.m. UTC | #1
On 13/10/2019 12:52, Chris Wilson wrote:
> Use a local variable to track the allocation errors to avoid polluting
> the struct and keep the free simple.
>
> Reported-by: kbuild test robot <lkp@intel.com>
> Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
> ---
>   drivers/gpu/drm/i915/i915_perf.c | 52 +++++++++++++++-----------------
>   1 file changed, 25 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_perf.c b/drivers/gpu/drm/i915/i915_perf.c
> index b4e2332d35cb..366580701ba2 100644
> --- a/drivers/gpu/drm/i915/i915_perf.c
> +++ b/drivers/gpu/drm/i915/i915_perf.c
> @@ -384,12 +384,9 @@ void i915_oa_config_release(struct kref *ref)
>   	struct i915_oa_config *oa_config =
>   		container_of(ref, typeof(*oa_config), ref);
>   
> -	if (!PTR_ERR(oa_config->flex_regs))
> -		kfree(oa_config->flex_regs);
> -	if (!PTR_ERR(oa_config->b_counter_regs))
> -		kfree(oa_config->b_counter_regs);
> -	if (!PTR_ERR(oa_config->mux_regs))
> -		kfree(oa_config->mux_regs);
> +	kfree(oa_config->flex_regs);
> +	kfree(oa_config->b_counter_regs);
> +	kfree(oa_config->mux_regs);
>   
>   	kfree_rcu(oa_config, rcu);
>   }
> @@ -3631,6 +3628,7 @@ int i915_perf_add_config_ioctl(struct drm_device *dev, void *data,
>   	struct i915_perf *perf = &to_i915(dev)->perf;
>   	struct drm_i915_perf_oa_config *args = data;
>   	struct i915_oa_config *oa_config, *tmp;
> +	static struct i915_oa_reg *regs;
>   	int err, id;
>   
>   	if (!perf->i915) {
> @@ -3676,30 +3674,30 @@ int i915_perf_add_config_ioctl(struct drm_device *dev, void *data,
>   	memcpy(oa_config->uuid, args->uuid, sizeof(args->uuid));
>   
>   	oa_config->mux_regs_len = args->n_mux_regs;
> -	oa_config->mux_regs =
> -		alloc_oa_regs(perf,
> -			      perf->ops.is_valid_mux_reg,
> -			      u64_to_user_ptr(args->mux_regs_ptr),
> -			      args->n_mux_regs);
> +	regs = alloc_oa_regs(perf,
> +			     perf->ops.is_valid_mux_reg,
> +			     u64_to_user_ptr(args->mux_regs_ptr),
> +			     args->n_mux_regs);
>   
> -	if (IS_ERR(oa_config->mux_regs)) {
> +	if (IS_ERR(regs)) {
>   		DRM_DEBUG("Failed to create OA config for mux_regs\n");
> -		err = PTR_ERR(oa_config->mux_regs);
> +		err = PTR_ERR(regs);
>   		goto reg_err;
>   	}
> +	oa_config->mux_regs = regs;
>   
>   	oa_config->b_counter_regs_len = args->n_boolean_regs;
> -	oa_config->b_counter_regs =
> -		alloc_oa_regs(perf,
> -			      perf->ops.is_valid_b_counter_reg,
> -			      u64_to_user_ptr(args->boolean_regs_ptr),
> -			      args->n_boolean_regs);
> +	regs = alloc_oa_regs(perf,
> +			     perf->ops.is_valid_b_counter_reg,
> +			     u64_to_user_ptr(args->boolean_regs_ptr),
> +			     args->n_boolean_regs);
>   
> -	if (IS_ERR(oa_config->b_counter_regs)) {
> +	if (IS_ERR(regs)) {
>   		DRM_DEBUG("Failed to create OA config for b_counter_regs\n");
> -		err = PTR_ERR(oa_config->b_counter_regs);
> +		err = PTR_ERR(regs);
>   		goto reg_err;
>   	}
> +	oa_config->b_counter_regs = regs;
>   
>   	if (INTEL_GEN(perf->i915) < 8) {
>   		if (args->n_flex_regs != 0) {
> @@ -3708,17 +3706,17 @@ int i915_perf_add_config_ioctl(struct drm_device *dev, void *data,
>   		}
>   	} else {
>   		oa_config->flex_regs_len = args->n_flex_regs;
> -		oa_config->flex_regs =
> -			alloc_oa_regs(perf,
> -				      perf->ops.is_valid_flex_reg,
> -				      u64_to_user_ptr(args->flex_regs_ptr),
> -				      args->n_flex_regs);
> +		regs = alloc_oa_regs(perf,
> +				     perf->ops.is_valid_flex_reg,
> +				     u64_to_user_ptr(args->flex_regs_ptr),
> +				     args->n_flex_regs);
>   
> -		if (IS_ERR(oa_config->flex_regs)) {
> +		if (IS_ERR(regs)) {
>   			DRM_DEBUG("Failed to create OA config for flex_regs\n");
> -			err = PTR_ERR(oa_config->flex_regs);
> +			err = PTR_ERR(regs);
>   			goto reg_err;
>   		}
> +		oa_config->flex_regs = regs;
>   	}
>   
>   	err = mutex_lock_interruptible(&perf->metrics_lock);
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/i915_perf.c b/drivers/gpu/drm/i915/i915_perf.c
index b4e2332d35cb..366580701ba2 100644
--- a/drivers/gpu/drm/i915/i915_perf.c
+++ b/drivers/gpu/drm/i915/i915_perf.c
@@ -384,12 +384,9 @@  void i915_oa_config_release(struct kref *ref)
 	struct i915_oa_config *oa_config =
 		container_of(ref, typeof(*oa_config), ref);
 
-	if (!PTR_ERR(oa_config->flex_regs))
-		kfree(oa_config->flex_regs);
-	if (!PTR_ERR(oa_config->b_counter_regs))
-		kfree(oa_config->b_counter_regs);
-	if (!PTR_ERR(oa_config->mux_regs))
-		kfree(oa_config->mux_regs);
+	kfree(oa_config->flex_regs);
+	kfree(oa_config->b_counter_regs);
+	kfree(oa_config->mux_regs);
 
 	kfree_rcu(oa_config, rcu);
 }
@@ -3631,6 +3628,7 @@  int i915_perf_add_config_ioctl(struct drm_device *dev, void *data,
 	struct i915_perf *perf = &to_i915(dev)->perf;
 	struct drm_i915_perf_oa_config *args = data;
 	struct i915_oa_config *oa_config, *tmp;
+	static struct i915_oa_reg *regs;
 	int err, id;
 
 	if (!perf->i915) {
@@ -3676,30 +3674,30 @@  int i915_perf_add_config_ioctl(struct drm_device *dev, void *data,
 	memcpy(oa_config->uuid, args->uuid, sizeof(args->uuid));
 
 	oa_config->mux_regs_len = args->n_mux_regs;
-	oa_config->mux_regs =
-		alloc_oa_regs(perf,
-			      perf->ops.is_valid_mux_reg,
-			      u64_to_user_ptr(args->mux_regs_ptr),
-			      args->n_mux_regs);
+	regs = alloc_oa_regs(perf,
+			     perf->ops.is_valid_mux_reg,
+			     u64_to_user_ptr(args->mux_regs_ptr),
+			     args->n_mux_regs);
 
-	if (IS_ERR(oa_config->mux_regs)) {
+	if (IS_ERR(regs)) {
 		DRM_DEBUG("Failed to create OA config for mux_regs\n");
-		err = PTR_ERR(oa_config->mux_regs);
+		err = PTR_ERR(regs);
 		goto reg_err;
 	}
+	oa_config->mux_regs = regs;
 
 	oa_config->b_counter_regs_len = args->n_boolean_regs;
-	oa_config->b_counter_regs =
-		alloc_oa_regs(perf,
-			      perf->ops.is_valid_b_counter_reg,
-			      u64_to_user_ptr(args->boolean_regs_ptr),
-			      args->n_boolean_regs);
+	regs = alloc_oa_regs(perf,
+			     perf->ops.is_valid_b_counter_reg,
+			     u64_to_user_ptr(args->boolean_regs_ptr),
+			     args->n_boolean_regs);
 
-	if (IS_ERR(oa_config->b_counter_regs)) {
+	if (IS_ERR(regs)) {
 		DRM_DEBUG("Failed to create OA config for b_counter_regs\n");
-		err = PTR_ERR(oa_config->b_counter_regs);
+		err = PTR_ERR(regs);
 		goto reg_err;
 	}
+	oa_config->b_counter_regs = regs;
 
 	if (INTEL_GEN(perf->i915) < 8) {
 		if (args->n_flex_regs != 0) {
@@ -3708,17 +3706,17 @@  int i915_perf_add_config_ioctl(struct drm_device *dev, void *data,
 		}
 	} else {
 		oa_config->flex_regs_len = args->n_flex_regs;
-		oa_config->flex_regs =
-			alloc_oa_regs(perf,
-				      perf->ops.is_valid_flex_reg,
-				      u64_to_user_ptr(args->flex_regs_ptr),
-				      args->n_flex_regs);
+		regs = alloc_oa_regs(perf,
+				     perf->ops.is_valid_flex_reg,
+				     u64_to_user_ptr(args->flex_regs_ptr),
+				     args->n_flex_regs);
 
-		if (IS_ERR(oa_config->flex_regs)) {
+		if (IS_ERR(regs)) {
 			DRM_DEBUG("Failed to create OA config for flex_regs\n");
-			err = PTR_ERR(oa_config->flex_regs);
+			err = PTR_ERR(regs);
 			goto reg_err;
 		}
+		oa_config->flex_regs = regs;
 	}
 
 	err = mutex_lock_interruptible(&perf->metrics_lock);