public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
* [PATCH] drm: make drm_get_format_name thread-safe
@ 2016-08-15  0:02 Eric Engestrom
  2016-08-15  5:33 ` ✗ Ro.CI.BAT: failure for " Patchwork
                   ` (3 more replies)
  0 siblings, 4 replies; 13+ messages in thread
From: Eric Engestrom @ 2016-08-15  0:02 UTC (permalink / raw)
  To: linux-kernel
  Cc: Tom St Denis, Archit Taneja, David Airlie, dri-devel,
	Eric Engestrom, Michel Dänzer, Wei Yongjun, Junwei Zhang,
	Xinliang Liu, David Zhang, Xinwei Kong, Vitaly Prosyak, intel-gfx,
	Alex Deucher, Daniel Vetter, Flora Cui, Gustavo Padovan,
	Christian König

Signed-off-by: Eric Engestrom <eric@engestrom.ch>
---

I moved the main bits to be the first diffs, shouldn't affect anything
when applying the patch, but I wanted to ask:
I don't like the hard-coded `32` the appears in both kmalloc() and
snprintf(), what do you think? If you don't like it either, what would
you suggest? Should I #define it?

Second question is about the patch mail itself: should I send this kind
of patch separated by module, with a note requesting them to be squashed
when applying? It has to land as a single patch, but for review it might
be easier if people only see the bits they each care about, as well as
to collect ack's/r-b's.

Cheers,
  Eric

---
 drivers/gpu/drm/amd/amdgpu/dce_v10_0.c          |  6 ++--
 drivers/gpu/drm/amd/amdgpu/dce_v11_0.c          |  6 ++--
 drivers/gpu/drm/amd/amdgpu/dce_v8_0.c           |  6 ++--
 drivers/gpu/drm/drm_atomic.c                    |  5 ++--
 drivers/gpu/drm/drm_crtc.c                      | 21 ++++++++-----
 drivers/gpu/drm/drm_fourcc.c                    | 17 ++++++-----
 drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c |  6 ++--
 drivers/gpu/drm/i915/i915_debugfs.c             | 11 ++++++-
 drivers/gpu/drm/i915/intel_atomic_plane.c       |  6 ++--
 drivers/gpu/drm/i915/intel_display.c            | 39 ++++++++++++++++---------
 drivers/gpu/drm/radeon/atombios_crtc.c          | 12 +++++---
 include/drm/drm_fourcc.h                        |  2 +-
 12 files changed, 89 insertions(+), 48 deletions(-)

diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
index 0645c85..38216a1 100644
--- a/drivers/gpu/drm/drm_fourcc.c
+++ b/drivers/gpu/drm/drm_fourcc.c
@@ -39,16 +39,14 @@ static char printable_char(int c)
  * drm_get_format_name - return a string for drm fourcc format
  * @format: format to compute name of
  *
- * Note that the buffer used by this function is globally shared and owned by
- * the function itself.
- *
- * FIXME: This isn't really multithreading safe.
+ * Note that the buffer returned by this function is owned by the caller
+ * and will need to be freed.
  */
 const char *drm_get_format_name(uint32_t format)
 {
-	static char buf[32];
+	char *buf = kmalloc(32, GFP_KERNEL);
 
-	snprintf(buf, sizeof(buf),
+	snprintf(buf, 32,
 		 "%c%c%c%c %s-endian (0x%08x)",
 		 printable_char(format & 0xff),
 		 printable_char((format >> 8) & 0xff),
@@ -73,6 +71,8 @@ EXPORT_SYMBOL(drm_get_format_name);
 void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
 			  int *bpp)
 {
+	const char *format_name;
+
 	switch (format) {
 	case DRM_FORMAT_C8:
 	case DRM_FORMAT_RGB332:
@@ -127,8 +127,9 @@ void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
 		*bpp = 32;
 		break;
 	default:
-		DRM_DEBUG_KMS("unsupported pixel format %s\n",
-			      drm_get_format_name(format));
+		format_name = drm_get_format_name(format);
+		DRM_DEBUG_KMS("unsupported pixel format %s\n", format_name);
+		kfree(format_name);
 		*depth = 0;
 		*bpp = 0;
 		break;
diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h
index 7f90a39..030d22d 100644
--- a/include/drm/drm_fourcc.h
+++ b/include/drm/drm_fourcc.h
@@ -32,6 +32,6 @@ int drm_format_horz_chroma_subsampling(uint32_t format);
 int drm_format_vert_chroma_subsampling(uint32_t format);
 int drm_format_plane_width(int width, uint32_t format, int plane);
 int drm_format_plane_height(int height, uint32_t format, int plane);
-const char *drm_get_format_name(uint32_t format);
+const char *drm_get_format_name(uint32_t format) __malloc;
 
 #endif /* __DRM_FOURCC_H__ */
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
index c1b04e9..0bf8959 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
@@ -2071,6 +2071,7 @@ static int dce_v10_0_crtc_do_set_base(struct drm_crtc *crtc,
 	u32 tmp, viewport_w, viewport_h;
 	int r;
 	bool bypass_lut = false;
+	const char *format_name;
 
 	/* no fb bound */
 	if (!atomic && !crtc->primary->fb) {
@@ -2182,8 +2183,9 @@ static int dce_v10_0_crtc_do_set_base(struct drm_crtc *crtc,
 		bypass_lut = true;
 		break;
 	default:
-		DRM_ERROR("Unsupported screen format %s\n",
-			drm_get_format_name(target_fb->pixel_format));
+		format_name = drm_get_format_name(target_fb->pixel_format);
+		DRM_ERROR("Unsupported screen format %s\n", format_name);
+		kfree(format_name);
 		return -EINVAL;
 	}
 
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
index d4bf133..1558a97 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
@@ -2046,6 +2046,7 @@ static int dce_v11_0_crtc_do_set_base(struct drm_crtc *crtc,
 	u32 tmp, viewport_w, viewport_h;
 	int r;
 	bool bypass_lut = false;
+	const char *format_name;
 
 	/* no fb bound */
 	if (!atomic && !crtc->primary->fb) {
@@ -2157,8 +2158,9 @@ static int dce_v11_0_crtc_do_set_base(struct drm_crtc *crtc,
 		bypass_lut = true;
 		break;
 	default:
-		DRM_ERROR("Unsupported screen format %s\n",
-			drm_get_format_name(target_fb->pixel_format));
+		format_name = drm_get_format_name(target_fb->pixel_format);
+		DRM_ERROR("Unsupported screen format %s\n", format_name);
+		kfree(format_name);
 		return -EINVAL;
 	}
 
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
index 4fdfab1..71a0375 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
@@ -1952,6 +1952,7 @@ static int dce_v8_0_crtc_do_set_base(struct drm_crtc *crtc,
 	u32 viewport_w, viewport_h;
 	int r;
 	bool bypass_lut = false;
+	const char *format_name;
 
 	/* no fb bound */
 	if (!atomic && !crtc->primary->fb) {
@@ -2056,8 +2057,9 @@ static int dce_v8_0_crtc_do_set_base(struct drm_crtc *crtc,
 		bypass_lut = true;
 		break;
 	default:
-		DRM_ERROR("Unsupported screen format %s\n",
-			  drm_get_format_name(target_fb->pixel_format));
+		format_name = drm_get_format_name(target_fb->pixel_format);
+		DRM_ERROR("Unsupported screen format %s\n", format_name);
+		kfree(format_name);
 		return -EINVAL;
 	}
 
diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index fa39307..087391f 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -837,8 +837,9 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
 	/* Check whether this plane supports the fb pixel format. */
 	ret = drm_plane_check_pixel_format(plane, state->fb->pixel_format);
 	if (ret) {
-		DRM_DEBUG_ATOMIC("Invalid pixel format %s\n",
-				 drm_get_format_name(state->fb->pixel_format));
+		const char *format_name = drm_get_format_name(state->fb->pixel_format);
+		DRM_DEBUG_ATOMIC("Invalid pixel format %s\n", format_name);
+		kfree(format_name);
 		return ret;
 	}
 
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index b1dbb60..7da5d33 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -2592,8 +2592,9 @@ static int __setplane_internal(struct drm_plane *plane,
 	/* Check whether this plane supports the fb pixel format. */
 	ret = drm_plane_check_pixel_format(plane, fb->pixel_format);
 	if (ret) {
-		DRM_DEBUG_KMS("Invalid pixel format %s\n",
-			      drm_get_format_name(fb->pixel_format));
+		const char *format_name = drm_get_format_name(fb->pixel_format);
+		DRM_DEBUG_KMS("Invalid pixel format %s\n", format_name);
+		kfree(format_name);
 		goto out;
 	}
 
@@ -2902,8 +2903,9 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
 			ret = drm_plane_check_pixel_format(crtc->primary,
 							   fb->pixel_format);
 			if (ret) {
-				DRM_DEBUG_KMS("Invalid pixel format %s\n",
-					drm_get_format_name(fb->pixel_format));
+				const char *format_name = drm_get_format_name(fb->pixel_format);
+				DRM_DEBUG_KMS("Invalid pixel format %s\n", format_name);
+				kfree(format_name);
 				goto out;
 			}
 		}
@@ -3279,6 +3281,7 @@ int drm_mode_addfb(struct drm_device *dev,
 static int format_check(const struct drm_mode_fb_cmd2 *r)
 {
 	uint32_t format = r->pixel_format & ~DRM_FORMAT_BIG_ENDIAN;
+	const char *format_name;
 
 	switch (format) {
 	case DRM_FORMAT_C8:
@@ -3343,8 +3346,9 @@ static int format_check(const struct drm_mode_fb_cmd2 *r)
 	case DRM_FORMAT_YVU444:
 		return 0;
 	default:
-		DRM_DEBUG_KMS("invalid pixel format %s\n",
-			      drm_get_format_name(r->pixel_format));
+		format_name = drm_get_format_name(r->pixel_format);
+		DRM_DEBUG_KMS("invalid pixel format %s\n", format_name);
+		kfree(format_name);
 		return -EINVAL;
 	}
 }
@@ -3355,8 +3359,9 @@ static int framebuffer_check(const struct drm_mode_fb_cmd2 *r)
 
 	ret = format_check(r);
 	if (ret) {
-		DRM_DEBUG_KMS("bad framebuffer format %s\n",
-			      drm_get_format_name(r->pixel_format));
+		const char *format_name = drm_get_format_name(r->pixel_format);
+		DRM_DEBUG_KMS("bad framebuffer format %s\n", format_name);
+		kfree(format_name);
 		return ret;
 	}
 
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
index c3707d4..ac7fa02 100644
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
@@ -608,15 +608,17 @@ static void ade_rdma_set(void __iomem *base, struct drm_framebuffer *fb,
 			 u32 ch, u32 y, u32 in_h, u32 fmt)
 {
 	struct drm_gem_cma_object *obj = drm_fb_cma_get_gem_obj(fb, 0);
+	const char *format_name;
 	u32 reg_ctrl, reg_addr, reg_size, reg_stride, reg_space, reg_en;
 	u32 stride = fb->pitches[0];
 	u32 addr = (u32)obj->paddr + y * stride;
 
 	DRM_DEBUG_DRIVER("rdma%d: (y=%d, height=%d), stride=%d, paddr=0x%x\n",
 			 ch + 1, y, in_h, stride, (u32)obj->paddr);
+	format_name = drm_get_format_name(fb->pixel_format);
 	DRM_DEBUG_DRIVER("addr=0x%x, fb:%dx%d, pixel_format=%d(%s)\n",
-			 addr, fb->width, fb->height, fmt,
-			 drm_get_format_name(fb->pixel_format));
+			 addr, fb->width, fb->height, fmt, format_name);
+	kfree(format_name);
 
 	/* get reg offset */
 	reg_ctrl = RD_CH_CTRL(ch);
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 844fea7..904720b 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -3109,6 +3109,7 @@ static void intel_plane_info(struct seq_file *m, struct intel_crtc *intel_crtc)
 	for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) {
 		struct drm_plane_state *state;
 		struct drm_plane *plane = &intel_plane->base;
+		const char *format_name;
 
 		if (!plane->state) {
 			seq_puts(m, "plane->state is NULL!\n");
@@ -3117,6 +3118,12 @@ static void intel_plane_info(struct seq_file *m, struct intel_crtc *intel_crtc)
 
 		state = plane->state;
 
+		if (state->fb) {
+			format_name = drm_get_format_name(state->fb->pixel_format);
+		} else {
+			format_name = kstrdup("N/A", GFP_KERNEL);
+		}
+
 		seq_printf(m, "\t--Plane id %d: type=%s, crtc_pos=%4dx%4d, crtc_size=%4dx%4d, src_pos=%d.%04ux%d.%04u, src_size=%d.%04ux%d.%04u, format=%s, rotation=%s\n",
 			   plane->base.id,
 			   plane_type(intel_plane->base.type),
@@ -3130,8 +3137,10 @@ static void intel_plane_info(struct seq_file *m, struct intel_crtc *intel_crtc)
 			   ((state->src_w & 0xffff) * 15625) >> 10,
 			   (state->src_h >> 16),
 			   ((state->src_h & 0xffff) * 15625) >> 10,
-			   state->fb ? drm_get_format_name(state->fb->pixel_format) : "N/A",
+			   format_name,
 			   plane_rotation(state->rotation));
+
+		kfree(format_name);
 	}
 }
 
diff --git a/drivers/gpu/drm/i915/intel_atomic_plane.c b/drivers/gpu/drm/i915/intel_atomic_plane.c
index 7de7721..e06131a 100644
--- a/drivers/gpu/drm/i915/intel_atomic_plane.c
+++ b/drivers/gpu/drm/i915/intel_atomic_plane.c
@@ -157,6 +157,7 @@ static int intel_plane_atomic_check(struct drm_plane *plane,
 		crtc_state->base.enable ? crtc_state->pipe_src_h : 0;
 
 	if (state->fb && intel_rotation_90_or_270(state->rotation)) {
+		const char *format_name;
 		if (!(state->fb->modifier[0] == I915_FORMAT_MOD_Y_TILED ||
 			state->fb->modifier[0] == I915_FORMAT_MOD_Yf_TILED)) {
 			DRM_DEBUG_KMS("Y/Yf tiling required for 90/270!\n");
@@ -171,8 +172,9 @@ static int intel_plane_atomic_check(struct drm_plane *plane,
 		switch (state->fb->pixel_format) {
 		case DRM_FORMAT_C8:
 		case DRM_FORMAT_RGB565:
-			DRM_DEBUG_KMS("Unsupported pixel format %s for 90/270!\n",
-					drm_get_format_name(state->fb->pixel_format));
+			format_name = drm_get_format_name(state->fb->pixel_format);
+			DRM_DEBUG_KMS("Unsupported pixel format %s for 90/270!\n", format_name);
+			kfree(format_name);
 			return -EINVAL;
 
 		default:
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index c457eed..071399b 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -12282,6 +12282,7 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc,
 
 	DRM_DEBUG_KMS("planes on this crtc\n");
 	list_for_each_entry(plane, &dev->mode_config.plane_list, head) {
+		const char *format_name;
 		intel_plane = to_intel_plane(plane);
 		if (intel_plane->pipe != crtc->pipe)
 			continue;
@@ -12294,11 +12295,12 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc,
 			continue;
 		}
 
+		format_name = drm_get_format_name(fb->pixel_format);
+
 		DRM_DEBUG_KMS("[PLANE:%d:%s] enabled",
 			      plane->base.id, plane->name);
 		DRM_DEBUG_KMS("\tFB:%d, fb = %ux%u format = %s",
-			      fb->base.id, fb->width, fb->height,
-			      drm_get_format_name(fb->pixel_format));
+			      fb->base.id, fb->width, fb->height, format_name);
 		DRM_DEBUG_KMS("\tscaler:%d src %dx%d+%d+%d dst %dx%d+%d+%d\n",
 			      state->scaler_id,
 			      state->src.x1 >> 16, state->src.y1 >> 16,
@@ -12307,6 +12309,8 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc,
 			      state->dst.x1, state->dst.y1,
 			      drm_rect_width(&state->dst),
 			      drm_rect_height(&state->dst));
+
+		kfree(format_name);
 	}
 }
 
@@ -14936,6 +14940,7 @@ static int intel_framebuffer_init(struct drm_device *dev,
 	unsigned int aligned_height;
 	int ret;
 	u32 pitch_limit, stride_alignment;
+	const char *format_name;
 
 	WARN_ON(!mutex_is_locked(&dev->struct_mutex));
 
@@ -15009,16 +15014,18 @@ static int intel_framebuffer_init(struct drm_device *dev,
 		break;
 	case DRM_FORMAT_XRGB1555:
 		if (INTEL_INFO(dev)->gen > 3) {
-			DRM_DEBUG("unsupported pixel format: %s\n",
-				  drm_get_format_name(mode_cmd->pixel_format));
+			format_name = drm_get_format_name(mode_cmd->pixel_format);
+			DRM_DEBUG("unsupported pixel format: %s\n", format_name);
+			kfree(format_name);
 			return -EINVAL;
 		}
 		break;
 	case DRM_FORMAT_ABGR8888:
 		if (!IS_VALLEYVIEW(dev) && !IS_CHERRYVIEW(dev) &&
 		    INTEL_INFO(dev)->gen < 9) {
-			DRM_DEBUG("unsupported pixel format: %s\n",
-				  drm_get_format_name(mode_cmd->pixel_format));
+			format_name = drm_get_format_name(mode_cmd->pixel_format);
+			DRM_DEBUG("unsupported pixel format: %s\n", format_name);
+			kfree(format_name);
 			return -EINVAL;
 		}
 		break;
@@ -15026,15 +15033,17 @@ static int intel_framebuffer_init(struct drm_device *dev,
 	case DRM_FORMAT_XRGB2101010:
 	case DRM_FORMAT_XBGR2101010:
 		if (INTEL_INFO(dev)->gen < 4) {
-			DRM_DEBUG("unsupported pixel format: %s\n",
-				  drm_get_format_name(mode_cmd->pixel_format));
+			format_name = drm_get_format_name(mode_cmd->pixel_format);
+			DRM_DEBUG("unsupported pixel format: %s\n", format_name);
+			kfree(format_name);
 			return -EINVAL;
 		}
 		break;
 	case DRM_FORMAT_ABGR2101010:
 		if (!IS_VALLEYVIEW(dev) && !IS_CHERRYVIEW(dev)) {
-			DRM_DEBUG("unsupported pixel format: %s\n",
-				  drm_get_format_name(mode_cmd->pixel_format));
+			format_name = drm_get_format_name(mode_cmd->pixel_format);
+			DRM_DEBUG("unsupported pixel format: %s\n", format_name);
+			kfree(format_name);
 			return -EINVAL;
 		}
 		break;
@@ -15043,14 +15052,16 @@ static int intel_framebuffer_init(struct drm_device *dev,
 	case DRM_FORMAT_YVYU:
 	case DRM_FORMAT_VYUY:
 		if (INTEL_INFO(dev)->gen < 5) {
-			DRM_DEBUG("unsupported pixel format: %s\n",
-				  drm_get_format_name(mode_cmd->pixel_format));
+			format_name = drm_get_format_name(mode_cmd->pixel_format);
+			DRM_DEBUG("unsupported pixel format: %s\n", format_name);
+			kfree(format_name);
 			return -EINVAL;
 		}
 		break;
 	default:
-		DRM_DEBUG("unsupported pixel format: %s\n",
-			  drm_get_format_name(mode_cmd->pixel_format));
+		format_name = drm_get_format_name(mode_cmd->pixel_format);
+		DRM_DEBUG("unsupported pixel format: %s\n", format_name);
+		kfree(format_name);
 		return -EINVAL;
 	}
 
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
index a97abc8..981ca3f 100644
--- a/drivers/gpu/drm/radeon/atombios_crtc.c
+++ b/drivers/gpu/drm/radeon/atombios_crtc.c
@@ -1154,6 +1154,7 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
 	u32 tmp, viewport_w, viewport_h;
 	int r;
 	bool bypass_lut = false;
+	const char *format_name;
 
 	/* no fb bound */
 	if (!atomic && !crtc->primary->fb) {
@@ -1257,8 +1258,9 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
 		bypass_lut = true;
 		break;
 	default:
-		DRM_ERROR("Unsupported screen format %s\n",
-			  drm_get_format_name(target_fb->pixel_format));
+		format_name = drm_get_format_name(target_fb->pixel_format);
+		DRM_ERROR("Unsupported screen format %s\n", format_name);
+		kfree(format_name);
 		return -EINVAL;
 	}
 
@@ -1469,6 +1471,7 @@ static int avivo_crtc_do_set_base(struct drm_crtc *crtc,
 	u32 viewport_w, viewport_h;
 	int r;
 	bool bypass_lut = false;
+	const char *format_name;
 
 	/* no fb bound */
 	if (!atomic && !crtc->primary->fb) {
@@ -1558,8 +1561,9 @@ static int avivo_crtc_do_set_base(struct drm_crtc *crtc,
 		bypass_lut = true;
 		break;
 	default:
-		DRM_ERROR("Unsupported screen format %s\n",
-			  drm_get_format_name(target_fb->pixel_format));
+		format_name = drm_get_format_name(target_fb->pixel_format);
+		DRM_ERROR("Unsupported screen format %s\n", format_name);
+		kfree(format_name);
 		return -EINVAL;
 	}
 
-- 
2.9.3

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

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* ✗ Ro.CI.BAT: failure for drm: make drm_get_format_name thread-safe
  2016-08-15  0:02 [PATCH] drm: make drm_get_format_name thread-safe Eric Engestrom
@ 2016-08-15  5:33 ` Patchwork
  2016-08-15  9:54 ` [PATCH] " Jani Nikula
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2016-08-15  5:33 UTC (permalink / raw)
  To: Eric Engestrom; +Cc: intel-gfx

== Series Details ==

Series: drm: make drm_get_format_name thread-safe
URL   : https://patchwork.freedesktop.org/series/11069/
State : failure

== Summary ==

Applying: drm: make drm_get_format_name thread-safe
Using index info to reconstruct a base tree...
M	drivers/gpu/drm/drm_crtc.c
M	drivers/gpu/drm/i915/i915_debugfs.c
M	drivers/gpu/drm/i915/intel_atomic_plane.c
M	drivers/gpu/drm/i915/intel_display.c
Falling back to patching base and 3-way merge...
Auto-merging drivers/gpu/drm/i915/intel_display.c
CONFLICT (content): Merge conflict in drivers/gpu/drm/i915/intel_display.c
Auto-merging drivers/gpu/drm/i915/intel_atomic_plane.c
Auto-merging drivers/gpu/drm/i915/i915_debugfs.c
Auto-merging drivers/gpu/drm/drm_crtc.c
error: Failed to merge in the changes.
Patch failed at 0001 drm: make drm_get_format_name thread-safe
The copy of the patch that failed is found in: .git/rebase-apply/patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".

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

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] drm: make drm_get_format_name thread-safe
  2016-08-15  0:02 [PATCH] drm: make drm_get_format_name thread-safe Eric Engestrom
  2016-08-15  5:33 ` ✗ Ro.CI.BAT: failure for " Patchwork
@ 2016-08-15  9:54 ` Jani Nikula
  2016-08-15 12:59   ` Eric Engestrom
  2016-08-15 16:00 ` ✗ Ro.CI.BAT: failure for drm: make drm_get_format_name thread-safe (rev2) Patchwork
  2016-11-03 18:52 ` [Intel-gfx] [PATCH] drm: make drm_get_format_name thread-safe Rob Clark
  3 siblings, 1 reply; 13+ messages in thread
From: Jani Nikula @ 2016-08-15  9:54 UTC (permalink / raw)
  To: linux-kernel
  Cc: Tom St Denis, Archit Taneja, David Airlie, intel-gfx,
	Eric Engestrom, Michel Dänzer, Wei Yongjun, dri-devel,
	Junwei Zhang, Xinliang Liu, David Zhang, Xinwei Kong,
	Vitaly Prosyak, Alex Deucher, Daniel Vetter, Flora Cui,
	Gustavo Padovan, Christian König

On Mon, 15 Aug 2016, Eric Engestrom <eric@engestrom.ch> wrote:
> Signed-off-by: Eric Engestrom <eric@engestrom.ch>
> ---
>
> I moved the main bits to be the first diffs, shouldn't affect anything
> when applying the patch, but I wanted to ask:
> I don't like the hard-coded `32` the appears in both kmalloc() and
> snprintf(), what do you think? If you don't like it either, what would
> you suggest? Should I #define it?
>
> Second question is about the patch mail itself: should I send this kind
> of patch separated by module, with a note requesting them to be squashed
> when applying? It has to land as a single patch, but for review it might
> be easier if people only see the bits they each care about, as well as
> to collect ack's/r-b's.
>
> Cheers,
>   Eric
>
> ---
>  drivers/gpu/drm/amd/amdgpu/dce_v10_0.c          |  6 ++--
>  drivers/gpu/drm/amd/amdgpu/dce_v11_0.c          |  6 ++--
>  drivers/gpu/drm/amd/amdgpu/dce_v8_0.c           |  6 ++--
>  drivers/gpu/drm/drm_atomic.c                    |  5 ++--
>  drivers/gpu/drm/drm_crtc.c                      | 21 ++++++++-----
>  drivers/gpu/drm/drm_fourcc.c                    | 17 ++++++-----
>  drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c |  6 ++--
>  drivers/gpu/drm/i915/i915_debugfs.c             | 11 ++++++-
>  drivers/gpu/drm/i915/intel_atomic_plane.c       |  6 ++--
>  drivers/gpu/drm/i915/intel_display.c            | 39 ++++++++++++++++---------
>  drivers/gpu/drm/radeon/atombios_crtc.c          | 12 +++++---
>  include/drm/drm_fourcc.h                        |  2 +-
>  12 files changed, 89 insertions(+), 48 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
> index 0645c85..38216a1 100644
> --- a/drivers/gpu/drm/drm_fourcc.c
> +++ b/drivers/gpu/drm/drm_fourcc.c
> @@ -39,16 +39,14 @@ static char printable_char(int c)
>   * drm_get_format_name - return a string for drm fourcc format
>   * @format: format to compute name of
>   *
> - * Note that the buffer used by this function is globally shared and owned by
> - * the function itself.
> - *
> - * FIXME: This isn't really multithreading safe.
> + * Note that the buffer returned by this function is owned by the caller
> + * and will need to be freed.
>   */
>  const char *drm_get_format_name(uint32_t format)

I find it surprising that a function that allocates a buffer returns a
const pointer. Some userspace libraries have conventions about the
ownership based on constness.

(I also find it suprising that kfree() takes a const pointer; arguably
that call changes the memory.)

Is there precedent for this?

BR,
Jani.


>  {
> -	static char buf[32];
> +	char *buf = kmalloc(32, GFP_KERNEL);
>  
> -	snprintf(buf, sizeof(buf),
> +	snprintf(buf, 32,
>  		 "%c%c%c%c %s-endian (0x%08x)",
>  		 printable_char(format & 0xff),
>  		 printable_char((format >> 8) & 0xff),
> @@ -73,6 +71,8 @@ EXPORT_SYMBOL(drm_get_format_name);
>  void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
>  			  int *bpp)
>  {
> +	const char *format_name;
> +
>  	switch (format) {
>  	case DRM_FORMAT_C8:
>  	case DRM_FORMAT_RGB332:
> @@ -127,8 +127,9 @@ void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
>  		*bpp = 32;
>  		break;
>  	default:
> -		DRM_DEBUG_KMS("unsupported pixel format %s\n",
> -			      drm_get_format_name(format));
> +		format_name = drm_get_format_name(format);
> +		DRM_DEBUG_KMS("unsupported pixel format %s\n", format_name);
> +		kfree(format_name);
>  		*depth = 0;
>  		*bpp = 0;
>  		break;
> diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h
> index 7f90a39..030d22d 100644
> --- a/include/drm/drm_fourcc.h
> +++ b/include/drm/drm_fourcc.h
> @@ -32,6 +32,6 @@ int drm_format_horz_chroma_subsampling(uint32_t format);
>  int drm_format_vert_chroma_subsampling(uint32_t format);
>  int drm_format_plane_width(int width, uint32_t format, int plane);
>  int drm_format_plane_height(int height, uint32_t format, int plane);
> -const char *drm_get_format_name(uint32_t format);
> +const char *drm_get_format_name(uint32_t format) __malloc;
>  
>  #endif /* __DRM_FOURCC_H__ */
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> index c1b04e9..0bf8959 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> @@ -2071,6 +2071,7 @@ static int dce_v10_0_crtc_do_set_base(struct drm_crtc *crtc,
>  	u32 tmp, viewport_w, viewport_h;
>  	int r;
>  	bool bypass_lut = false;
> +	const char *format_name;
>  
>  	/* no fb bound */
>  	if (!atomic && !crtc->primary->fb) {
> @@ -2182,8 +2183,9 @@ static int dce_v10_0_crtc_do_set_base(struct drm_crtc *crtc,
>  		bypass_lut = true;
>  		break;
>  	default:
> -		DRM_ERROR("Unsupported screen format %s\n",
> -			drm_get_format_name(target_fb->pixel_format));
> +		format_name = drm_get_format_name(target_fb->pixel_format);
> +		DRM_ERROR("Unsupported screen format %s\n", format_name);
> +		kfree(format_name);
>  		return -EINVAL;
>  	}
>  
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> index d4bf133..1558a97 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> @@ -2046,6 +2046,7 @@ static int dce_v11_0_crtc_do_set_base(struct drm_crtc *crtc,
>  	u32 tmp, viewport_w, viewport_h;
>  	int r;
>  	bool bypass_lut = false;
> +	const char *format_name;
>  
>  	/* no fb bound */
>  	if (!atomic && !crtc->primary->fb) {
> @@ -2157,8 +2158,9 @@ static int dce_v11_0_crtc_do_set_base(struct drm_crtc *crtc,
>  		bypass_lut = true;
>  		break;
>  	default:
> -		DRM_ERROR("Unsupported screen format %s\n",
> -			drm_get_format_name(target_fb->pixel_format));
> +		format_name = drm_get_format_name(target_fb->pixel_format);
> +		DRM_ERROR("Unsupported screen format %s\n", format_name);
> +		kfree(format_name);
>  		return -EINVAL;
>  	}
>  
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> index 4fdfab1..71a0375 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> @@ -1952,6 +1952,7 @@ static int dce_v8_0_crtc_do_set_base(struct drm_crtc *crtc,
>  	u32 viewport_w, viewport_h;
>  	int r;
>  	bool bypass_lut = false;
> +	const char *format_name;
>  
>  	/* no fb bound */
>  	if (!atomic && !crtc->primary->fb) {
> @@ -2056,8 +2057,9 @@ static int dce_v8_0_crtc_do_set_base(struct drm_crtc *crtc,
>  		bypass_lut = true;
>  		break;
>  	default:
> -		DRM_ERROR("Unsupported screen format %s\n",
> -			  drm_get_format_name(target_fb->pixel_format));
> +		format_name = drm_get_format_name(target_fb->pixel_format);
> +		DRM_ERROR("Unsupported screen format %s\n", format_name);
> +		kfree(format_name);
>  		return -EINVAL;
>  	}
>  
> diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
> index fa39307..087391f 100644
> --- a/drivers/gpu/drm/drm_atomic.c
> +++ b/drivers/gpu/drm/drm_atomic.c
> @@ -837,8 +837,9 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
>  	/* Check whether this plane supports the fb pixel format. */
>  	ret = drm_plane_check_pixel_format(plane, state->fb->pixel_format);
>  	if (ret) {
> -		DRM_DEBUG_ATOMIC("Invalid pixel format %s\n",
> -				 drm_get_format_name(state->fb->pixel_format));
> +		const char *format_name = drm_get_format_name(state->fb->pixel_format);
> +		DRM_DEBUG_ATOMIC("Invalid pixel format %s\n", format_name);
> +		kfree(format_name);
>  		return ret;
>  	}
>  
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index b1dbb60..7da5d33 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -2592,8 +2592,9 @@ static int __setplane_internal(struct drm_plane *plane,
>  	/* Check whether this plane supports the fb pixel format. */
>  	ret = drm_plane_check_pixel_format(plane, fb->pixel_format);
>  	if (ret) {
> -		DRM_DEBUG_KMS("Invalid pixel format %s\n",
> -			      drm_get_format_name(fb->pixel_format));
> +		const char *format_name = drm_get_format_name(fb->pixel_format);
> +		DRM_DEBUG_KMS("Invalid pixel format %s\n", format_name);
> +		kfree(format_name);
>  		goto out;
>  	}
>  
> @@ -2902,8 +2903,9 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
>  			ret = drm_plane_check_pixel_format(crtc->primary,
>  							   fb->pixel_format);
>  			if (ret) {
> -				DRM_DEBUG_KMS("Invalid pixel format %s\n",
> -					drm_get_format_name(fb->pixel_format));
> +				const char *format_name = drm_get_format_name(fb->pixel_format);
> +				DRM_DEBUG_KMS("Invalid pixel format %s\n", format_name);
> +				kfree(format_name);
>  				goto out;
>  			}
>  		}
> @@ -3279,6 +3281,7 @@ int drm_mode_addfb(struct drm_device *dev,
>  static int format_check(const struct drm_mode_fb_cmd2 *r)
>  {
>  	uint32_t format = r->pixel_format & ~DRM_FORMAT_BIG_ENDIAN;
> +	const char *format_name;
>  
>  	switch (format) {
>  	case DRM_FORMAT_C8:
> @@ -3343,8 +3346,9 @@ static int format_check(const struct drm_mode_fb_cmd2 *r)
>  	case DRM_FORMAT_YVU444:
>  		return 0;
>  	default:
> -		DRM_DEBUG_KMS("invalid pixel format %s\n",
> -			      drm_get_format_name(r->pixel_format));
> +		format_name = drm_get_format_name(r->pixel_format);
> +		DRM_DEBUG_KMS("invalid pixel format %s\n", format_name);
> +		kfree(format_name);
>  		return -EINVAL;
>  	}
>  }
> @@ -3355,8 +3359,9 @@ static int framebuffer_check(const struct drm_mode_fb_cmd2 *r)
>  
>  	ret = format_check(r);
>  	if (ret) {
> -		DRM_DEBUG_KMS("bad framebuffer format %s\n",
> -			      drm_get_format_name(r->pixel_format));
> +		const char *format_name = drm_get_format_name(r->pixel_format);
> +		DRM_DEBUG_KMS("bad framebuffer format %s\n", format_name);
> +		kfree(format_name);
>  		return ret;
>  	}
>  
> diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> index c3707d4..ac7fa02 100644
> --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> @@ -608,15 +608,17 @@ static void ade_rdma_set(void __iomem *base, struct drm_framebuffer *fb,
>  			 u32 ch, u32 y, u32 in_h, u32 fmt)
>  {
>  	struct drm_gem_cma_object *obj = drm_fb_cma_get_gem_obj(fb, 0);
> +	const char *format_name;
>  	u32 reg_ctrl, reg_addr, reg_size, reg_stride, reg_space, reg_en;
>  	u32 stride = fb->pitches[0];
>  	u32 addr = (u32)obj->paddr + y * stride;
>  
>  	DRM_DEBUG_DRIVER("rdma%d: (y=%d, height=%d), stride=%d, paddr=0x%x\n",
>  			 ch + 1, y, in_h, stride, (u32)obj->paddr);
> +	format_name = drm_get_format_name(fb->pixel_format);
>  	DRM_DEBUG_DRIVER("addr=0x%x, fb:%dx%d, pixel_format=%d(%s)\n",
> -			 addr, fb->width, fb->height, fmt,
> -			 drm_get_format_name(fb->pixel_format));
> +			 addr, fb->width, fb->height, fmt, format_name);
> +	kfree(format_name);
>  
>  	/* get reg offset */
>  	reg_ctrl = RD_CH_CTRL(ch);
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index 844fea7..904720b 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -3109,6 +3109,7 @@ static void intel_plane_info(struct seq_file *m, struct intel_crtc *intel_crtc)
>  	for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) {
>  		struct drm_plane_state *state;
>  		struct drm_plane *plane = &intel_plane->base;
> +		const char *format_name;
>  
>  		if (!plane->state) {
>  			seq_puts(m, "plane->state is NULL!\n");
> @@ -3117,6 +3118,12 @@ static void intel_plane_info(struct seq_file *m, struct intel_crtc *intel_crtc)
>  
>  		state = plane->state;
>  
> +		if (state->fb) {
> +			format_name = drm_get_format_name(state->fb->pixel_format);
> +		} else {
> +			format_name = kstrdup("N/A", GFP_KERNEL);
> +		}
> +
>  		seq_printf(m, "\t--Plane id %d: type=%s, crtc_pos=%4dx%4d, crtc_size=%4dx%4d, src_pos=%d.%04ux%d.%04u, src_size=%d.%04ux%d.%04u, format=%s, rotation=%s\n",
>  			   plane->base.id,
>  			   plane_type(intel_plane->base.type),
> @@ -3130,8 +3137,10 @@ static void intel_plane_info(struct seq_file *m, struct intel_crtc *intel_crtc)
>  			   ((state->src_w & 0xffff) * 15625) >> 10,
>  			   (state->src_h >> 16),
>  			   ((state->src_h & 0xffff) * 15625) >> 10,
> -			   state->fb ? drm_get_format_name(state->fb->pixel_format) : "N/A",
> +			   format_name,
>  			   plane_rotation(state->rotation));
> +
> +		kfree(format_name);
>  	}
>  }
>  
> diff --git a/drivers/gpu/drm/i915/intel_atomic_plane.c b/drivers/gpu/drm/i915/intel_atomic_plane.c
> index 7de7721..e06131a 100644
> --- a/drivers/gpu/drm/i915/intel_atomic_plane.c
> +++ b/drivers/gpu/drm/i915/intel_atomic_plane.c
> @@ -157,6 +157,7 @@ static int intel_plane_atomic_check(struct drm_plane *plane,
>  		crtc_state->base.enable ? crtc_state->pipe_src_h : 0;
>  
>  	if (state->fb && intel_rotation_90_or_270(state->rotation)) {
> +		const char *format_name;
>  		if (!(state->fb->modifier[0] == I915_FORMAT_MOD_Y_TILED ||
>  			state->fb->modifier[0] == I915_FORMAT_MOD_Yf_TILED)) {
>  			DRM_DEBUG_KMS("Y/Yf tiling required for 90/270!\n");
> @@ -171,8 +172,9 @@ static int intel_plane_atomic_check(struct drm_plane *plane,
>  		switch (state->fb->pixel_format) {
>  		case DRM_FORMAT_C8:
>  		case DRM_FORMAT_RGB565:
> -			DRM_DEBUG_KMS("Unsupported pixel format %s for 90/270!\n",
> -					drm_get_format_name(state->fb->pixel_format));
> +			format_name = drm_get_format_name(state->fb->pixel_format);
> +			DRM_DEBUG_KMS("Unsupported pixel format %s for 90/270!\n", format_name);
> +			kfree(format_name);
>  			return -EINVAL;
>  
>  		default:
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index c457eed..071399b 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -12282,6 +12282,7 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc,
>  
>  	DRM_DEBUG_KMS("planes on this crtc\n");
>  	list_for_each_entry(plane, &dev->mode_config.plane_list, head) {
> +		const char *format_name;
>  		intel_plane = to_intel_plane(plane);
>  		if (intel_plane->pipe != crtc->pipe)
>  			continue;
> @@ -12294,11 +12295,12 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc,
>  			continue;
>  		}
>  
> +		format_name = drm_get_format_name(fb->pixel_format);
> +
>  		DRM_DEBUG_KMS("[PLANE:%d:%s] enabled",
>  			      plane->base.id, plane->name);
>  		DRM_DEBUG_KMS("\tFB:%d, fb = %ux%u format = %s",
> -			      fb->base.id, fb->width, fb->height,
> -			      drm_get_format_name(fb->pixel_format));
> +			      fb->base.id, fb->width, fb->height, format_name);
>  		DRM_DEBUG_KMS("\tscaler:%d src %dx%d+%d+%d dst %dx%d+%d+%d\n",
>  			      state->scaler_id,
>  			      state->src.x1 >> 16, state->src.y1 >> 16,
> @@ -12307,6 +12309,8 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc,
>  			      state->dst.x1, state->dst.y1,
>  			      drm_rect_width(&state->dst),
>  			      drm_rect_height(&state->dst));
> +
> +		kfree(format_name);
>  	}
>  }
>  
> @@ -14936,6 +14940,7 @@ static int intel_framebuffer_init(struct drm_device *dev,
>  	unsigned int aligned_height;
>  	int ret;
>  	u32 pitch_limit, stride_alignment;
> +	const char *format_name;
>  
>  	WARN_ON(!mutex_is_locked(&dev->struct_mutex));
>  
> @@ -15009,16 +15014,18 @@ static int intel_framebuffer_init(struct drm_device *dev,
>  		break;
>  	case DRM_FORMAT_XRGB1555:
>  		if (INTEL_INFO(dev)->gen > 3) {
> -			DRM_DEBUG("unsupported pixel format: %s\n",
> -				  drm_get_format_name(mode_cmd->pixel_format));
> +			format_name = drm_get_format_name(mode_cmd->pixel_format);
> +			DRM_DEBUG("unsupported pixel format: %s\n", format_name);
> +			kfree(format_name);
>  			return -EINVAL;
>  		}
>  		break;
>  	case DRM_FORMAT_ABGR8888:
>  		if (!IS_VALLEYVIEW(dev) && !IS_CHERRYVIEW(dev) &&
>  		    INTEL_INFO(dev)->gen < 9) {
> -			DRM_DEBUG("unsupported pixel format: %s\n",
> -				  drm_get_format_name(mode_cmd->pixel_format));
> +			format_name = drm_get_format_name(mode_cmd->pixel_format);
> +			DRM_DEBUG("unsupported pixel format: %s\n", format_name);
> +			kfree(format_name);
>  			return -EINVAL;
>  		}
>  		break;
> @@ -15026,15 +15033,17 @@ static int intel_framebuffer_init(struct drm_device *dev,
>  	case DRM_FORMAT_XRGB2101010:
>  	case DRM_FORMAT_XBGR2101010:
>  		if (INTEL_INFO(dev)->gen < 4) {
> -			DRM_DEBUG("unsupported pixel format: %s\n",
> -				  drm_get_format_name(mode_cmd->pixel_format));
> +			format_name = drm_get_format_name(mode_cmd->pixel_format);
> +			DRM_DEBUG("unsupported pixel format: %s\n", format_name);
> +			kfree(format_name);
>  			return -EINVAL;
>  		}
>  		break;
>  	case DRM_FORMAT_ABGR2101010:
>  		if (!IS_VALLEYVIEW(dev) && !IS_CHERRYVIEW(dev)) {
> -			DRM_DEBUG("unsupported pixel format: %s\n",
> -				  drm_get_format_name(mode_cmd->pixel_format));
> +			format_name = drm_get_format_name(mode_cmd->pixel_format);
> +			DRM_DEBUG("unsupported pixel format: %s\n", format_name);
> +			kfree(format_name);
>  			return -EINVAL;
>  		}
>  		break;
> @@ -15043,14 +15052,16 @@ static int intel_framebuffer_init(struct drm_device *dev,
>  	case DRM_FORMAT_YVYU:
>  	case DRM_FORMAT_VYUY:
>  		if (INTEL_INFO(dev)->gen < 5) {
> -			DRM_DEBUG("unsupported pixel format: %s\n",
> -				  drm_get_format_name(mode_cmd->pixel_format));
> +			format_name = drm_get_format_name(mode_cmd->pixel_format);
> +			DRM_DEBUG("unsupported pixel format: %s\n", format_name);
> +			kfree(format_name);
>  			return -EINVAL;
>  		}
>  		break;
>  	default:
> -		DRM_DEBUG("unsupported pixel format: %s\n",
> -			  drm_get_format_name(mode_cmd->pixel_format));
> +		format_name = drm_get_format_name(mode_cmd->pixel_format);
> +		DRM_DEBUG("unsupported pixel format: %s\n", format_name);
> +		kfree(format_name);
>  		return -EINVAL;
>  	}
>  
> diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
> index a97abc8..981ca3f 100644
> --- a/drivers/gpu/drm/radeon/atombios_crtc.c
> +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
> @@ -1154,6 +1154,7 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
>  	u32 tmp, viewport_w, viewport_h;
>  	int r;
>  	bool bypass_lut = false;
> +	const char *format_name;
>  
>  	/* no fb bound */
>  	if (!atomic && !crtc->primary->fb) {
> @@ -1257,8 +1258,9 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
>  		bypass_lut = true;
>  		break;
>  	default:
> -		DRM_ERROR("Unsupported screen format %s\n",
> -			  drm_get_format_name(target_fb->pixel_format));
> +		format_name = drm_get_format_name(target_fb->pixel_format);
> +		DRM_ERROR("Unsupported screen format %s\n", format_name);
> +		kfree(format_name);
>  		return -EINVAL;
>  	}
>  
> @@ -1469,6 +1471,7 @@ static int avivo_crtc_do_set_base(struct drm_crtc *crtc,
>  	u32 viewport_w, viewport_h;
>  	int r;
>  	bool bypass_lut = false;
> +	const char *format_name;
>  
>  	/* no fb bound */
>  	if (!atomic && !crtc->primary->fb) {
> @@ -1558,8 +1561,9 @@ static int avivo_crtc_do_set_base(struct drm_crtc *crtc,
>  		bypass_lut = true;
>  		break;
>  	default:
> -		DRM_ERROR("Unsupported screen format %s\n",
> -			  drm_get_format_name(target_fb->pixel_format));
> +		format_name = drm_get_format_name(target_fb->pixel_format);
> +		DRM_ERROR("Unsupported screen format %s\n", format_name);
> +		kfree(format_name);
>  		return -EINVAL;
>  	}

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] drm: make drm_get_format_name thread-safe
  2016-08-15  9:54 ` [PATCH] " Jani Nikula
@ 2016-08-15 12:59   ` Eric Engestrom
  2016-08-15 13:13     ` Jani Nikula
  0 siblings, 1 reply; 13+ messages in thread
From: Eric Engestrom @ 2016-08-15 12:59 UTC (permalink / raw)
  To: Jani Nikula
  Cc: Tom St Denis, intel-gfx, Eric Engestrom, Michel Dänzer,
	linux-kernel, dri-devel, Xinliang Liu, David Zhang, Wei Yongjun,
	Vitaly Prosyak, Daniel Vetter, Junwei Zhang, Alex Deucher,
	Flora Cui, Gustavo Padovan, Christian König

On Mon, Aug 15, 2016 at 12:54:01PM +0300, Jani Nikula wrote:
> On Mon, 15 Aug 2016, Eric Engestrom <eric@engestrom.ch> wrote:
> > Signed-off-by: Eric Engestrom <eric@engestrom.ch>
> > ---
> >
> > I moved the main bits to be the first diffs, shouldn't affect anything
> > when applying the patch, but I wanted to ask:
> > I don't like the hard-coded `32` the appears in both kmalloc() and
> > snprintf(), what do you think? If you don't like it either, what would
> > you suggest? Should I #define it?
> >
> > Second question is about the patch mail itself: should I send this kind
> > of patch separated by module, with a note requesting them to be squashed
> > when applying? It has to land as a single patch, but for review it might
> > be easier if people only see the bits they each care about, as well as
> > to collect ack's/r-b's.
> >
> > Cheers,
> >   Eric
> >
> > ---
> >  drivers/gpu/drm/amd/amdgpu/dce_v10_0.c          |  6 ++--
> >  drivers/gpu/drm/amd/amdgpu/dce_v11_0.c          |  6 ++--
> >  drivers/gpu/drm/amd/amdgpu/dce_v8_0.c           |  6 ++--
> >  drivers/gpu/drm/drm_atomic.c                    |  5 ++--
> >  drivers/gpu/drm/drm_crtc.c                      | 21 ++++++++-----
> >  drivers/gpu/drm/drm_fourcc.c                    | 17 ++++++-----
> >  drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c |  6 ++--
> >  drivers/gpu/drm/i915/i915_debugfs.c             | 11 ++++++-
> >  drivers/gpu/drm/i915/intel_atomic_plane.c       |  6 ++--
> >  drivers/gpu/drm/i915/intel_display.c            | 39 ++++++++++++++++---------
> >  drivers/gpu/drm/radeon/atombios_crtc.c          | 12 +++++---
> >  include/drm/drm_fourcc.h                        |  2 +-
> >  12 files changed, 89 insertions(+), 48 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
> > index 0645c85..38216a1 100644
> > --- a/drivers/gpu/drm/drm_fourcc.c
> > +++ b/drivers/gpu/drm/drm_fourcc.c
> > @@ -39,16 +39,14 @@ static char printable_char(int c)
> >   * drm_get_format_name - return a string for drm fourcc format
> >   * @format: format to compute name of
> >   *
> > - * Note that the buffer used by this function is globally shared and owned by
> > - * the function itself.
> > - *
> > - * FIXME: This isn't really multithreading safe.
> > + * Note that the buffer returned by this function is owned by the caller
> > + * and will need to be freed.
> >   */
> >  const char *drm_get_format_name(uint32_t format)
> 
> I find it surprising that a function that allocates a buffer returns a
> const pointer. Some userspace libraries have conventions about the
> ownership based on constness.
> 
> (I also find it suprising that kfree() takes a const pointer; arguably
> that call changes the memory.)
> 
> Is there precedent for this?
> 
> BR,
> Jani.

It's not a const pointer, it's a normal pointer to a const char, i.e.
you can do as you want with the pointer but you shouldn't change the
chars it points to.

Cheers,
  Eric
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] drm: make drm_get_format_name thread-safe
  2016-08-15 12:59   ` Eric Engestrom
@ 2016-08-15 13:13     ` Jani Nikula
  2016-08-15 13:52       ` Daniel Vetter
  0 siblings, 1 reply; 13+ messages in thread
From: Jani Nikula @ 2016-08-15 13:13 UTC (permalink / raw)
  To: Eric Engestrom
  Cc: Eric Engestrom, linux-kernel, Tom St Denis, intel-gfx,
	Michel Dänzer, Wei Yongjun, dri-devel, Junwei Zhang,
	Xinliang Liu, David Zhang, Vitaly Prosyak, Alex Deucher,
	Daniel Vetter, Flora Cui, Gustavo Padovan, Christian König

On Mon, 15 Aug 2016, Eric Engestrom <eric.engestrom@imgtec.com> wrote:
> On Mon, Aug 15, 2016 at 12:54:01PM +0300, Jani Nikula wrote:
>> On Mon, 15 Aug 2016, Eric Engestrom <eric@engestrom.ch> wrote:
>> > Signed-off-by: Eric Engestrom <eric@engestrom.ch>
>> > ---
>> >
>> > I moved the main bits to be the first diffs, shouldn't affect anything
>> > when applying the patch, but I wanted to ask:
>> > I don't like the hard-coded `32` the appears in both kmalloc() and
>> > snprintf(), what do you think? If you don't like it either, what would
>> > you suggest? Should I #define it?
>> >
>> > Second question is about the patch mail itself: should I send this kind
>> > of patch separated by module, with a note requesting them to be squashed
>> > when applying? It has to land as a single patch, but for review it might
>> > be easier if people only see the bits they each care about, as well as
>> > to collect ack's/r-b's.
>> >
>> > Cheers,
>> >   Eric
>> >
>> > ---
>> >  drivers/gpu/drm/amd/amdgpu/dce_v10_0.c          |  6 ++--
>> >  drivers/gpu/drm/amd/amdgpu/dce_v11_0.c          |  6 ++--
>> >  drivers/gpu/drm/amd/amdgpu/dce_v8_0.c           |  6 ++--
>> >  drivers/gpu/drm/drm_atomic.c                    |  5 ++--
>> >  drivers/gpu/drm/drm_crtc.c                      | 21 ++++++++-----
>> >  drivers/gpu/drm/drm_fourcc.c                    | 17 ++++++-----
>> >  drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c |  6 ++--
>> >  drivers/gpu/drm/i915/i915_debugfs.c             | 11 ++++++-
>> >  drivers/gpu/drm/i915/intel_atomic_plane.c       |  6 ++--
>> >  drivers/gpu/drm/i915/intel_display.c            | 39 ++++++++++++++++---------
>> >  drivers/gpu/drm/radeon/atombios_crtc.c          | 12 +++++---
>> >  include/drm/drm_fourcc.h                        |  2 +-
>> >  12 files changed, 89 insertions(+), 48 deletions(-)
>> >
>> > diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
>> > index 0645c85..38216a1 100644
>> > --- a/drivers/gpu/drm/drm_fourcc.c
>> > +++ b/drivers/gpu/drm/drm_fourcc.c
>> > @@ -39,16 +39,14 @@ static char printable_char(int c)
>> >   * drm_get_format_name - return a string for drm fourcc format
>> >   * @format: format to compute name of
>> >   *
>> > - * Note that the buffer used by this function is globally shared and owned by
>> > - * the function itself.
>> > - *
>> > - * FIXME: This isn't really multithreading safe.
>> > + * Note that the buffer returned by this function is owned by the caller
>> > + * and will need to be freed.
>> >   */
>> >  const char *drm_get_format_name(uint32_t format)
>> 
>> I find it surprising that a function that allocates a buffer returns a
>> const pointer. Some userspace libraries have conventions about the
>> ownership based on constness.
>> 
>> (I also find it suprising that kfree() takes a const pointer; arguably
>> that call changes the memory.)
>> 
>> Is there precedent for this?
>> 
>> BR,
>> Jani.
>
> It's not a const pointer, it's a normal pointer to a const char, i.e.
> you can do as you want with the pointer but you shouldn't change the
> chars it points to.

Ermh, that's what I meant even if I was sloppy in my reply. And arguably
freeing the bytes the pointer points at changes them, albeit subtly. And
having a function return a pointer to const data is often an indication
that the ownership of the data isn't transfered, i.e. you're not
supposed to free it yourself.

BR,
Jani.


-- 
Jani Nikula, Intel Open Source Technology Center

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] drm: make drm_get_format_name thread-safe
  2016-08-15 13:13     ` Jani Nikula
@ 2016-08-15 13:52       ` Daniel Vetter
  2016-08-15 15:07         ` Eric Engestrom
  2016-08-15 15:29         ` [FIXUP] drm: remove `const` attribute to hint at caller that they now own the memory Eric Engestrom
  0 siblings, 2 replies; 13+ messages in thread
From: Daniel Vetter @ 2016-08-15 13:52 UTC (permalink / raw)
  To: Jani Nikula
  Cc: Tom St Denis, Alex Deucher, Gustavo Padovan, intel-gfx,
	Eric Engestrom, Michel Dänzer, linux-kernel, dri-devel,
	Xinliang Liu, Junwei Zhang, Wei Yongjun, Vitaly Prosyak,
	David Zhang, Daniel Vetter, Flora Cui, Eric Engestrom,
	Christian König

On Mon, Aug 15, 2016 at 04:13:54PM +0300, Jani Nikula wrote:
> On Mon, 15 Aug 2016, Eric Engestrom <eric.engestrom@imgtec.com> wrote:
> > On Mon, Aug 15, 2016 at 12:54:01PM +0300, Jani Nikula wrote:
> >> On Mon, 15 Aug 2016, Eric Engestrom <eric@engestrom.ch> wrote:
> >> > Signed-off-by: Eric Engestrom <eric@engestrom.ch>
> >> > ---
> >> >
> >> > I moved the main bits to be the first diffs, shouldn't affect anything
> >> > when applying the patch, but I wanted to ask:
> >> > I don't like the hard-coded `32` the appears in both kmalloc() and
> >> > snprintf(), what do you think? If you don't like it either, what would
> >> > you suggest? Should I #define it?
> >> >
> >> > Second question is about the patch mail itself: should I send this kind
> >> > of patch separated by module, with a note requesting them to be squashed
> >> > when applying? It has to land as a single patch, but for review it might
> >> > be easier if people only see the bits they each care about, as well as
> >> > to collect ack's/r-b's.
> >> >
> >> > Cheers,
> >> >   Eric
> >> >
> >> > ---
> >> >  drivers/gpu/drm/amd/amdgpu/dce_v10_0.c          |  6 ++--
> >> >  drivers/gpu/drm/amd/amdgpu/dce_v11_0.c          |  6 ++--
> >> >  drivers/gpu/drm/amd/amdgpu/dce_v8_0.c           |  6 ++--
> >> >  drivers/gpu/drm/drm_atomic.c                    |  5 ++--
> >> >  drivers/gpu/drm/drm_crtc.c                      | 21 ++++++++-----
> >> >  drivers/gpu/drm/drm_fourcc.c                    | 17 ++++++-----
> >> >  drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c |  6 ++--
> >> >  drivers/gpu/drm/i915/i915_debugfs.c             | 11 ++++++-
> >> >  drivers/gpu/drm/i915/intel_atomic_plane.c       |  6 ++--
> >> >  drivers/gpu/drm/i915/intel_display.c            | 39 ++++++++++++++++---------
> >> >  drivers/gpu/drm/radeon/atombios_crtc.c          | 12 +++++---
> >> >  include/drm/drm_fourcc.h                        |  2 +-
> >> >  12 files changed, 89 insertions(+), 48 deletions(-)
> >> >
> >> > diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
> >> > index 0645c85..38216a1 100644
> >> > --- a/drivers/gpu/drm/drm_fourcc.c
> >> > +++ b/drivers/gpu/drm/drm_fourcc.c
> >> > @@ -39,16 +39,14 @@ static char printable_char(int c)
> >> >   * drm_get_format_name - return a string for drm fourcc format
> >> >   * @format: format to compute name of
> >> >   *
> >> > - * Note that the buffer used by this function is globally shared and owned by
> >> > - * the function itself.
> >> > - *
> >> > - * FIXME: This isn't really multithreading safe.
> >> > + * Note that the buffer returned by this function is owned by the caller
> >> > + * and will need to be freed.
> >> >   */
> >> >  const char *drm_get_format_name(uint32_t format)
> >> 
> >> I find it surprising that a function that allocates a buffer returns a
> >> const pointer. Some userspace libraries have conventions about the
> >> ownership based on constness.
> >> 
> >> (I also find it suprising that kfree() takes a const pointer; arguably
> >> that call changes the memory.)
> >> 
> >> Is there precedent for this?
> >> 
> >> BR,
> >> Jani.
> >
> > It's not a const pointer, it's a normal pointer to a const char, i.e.
> > you can do as you want with the pointer but you shouldn't change the
> > chars it points to.
> 
> Ermh, that's what I meant even if I was sloppy in my reply. And arguably
> freeing the bytes the pointer points at changes them, albeit subtly. And
> having a function return a pointer to const data is often an indication
> that the ownership of the data isn't transfered, i.e. you're not
> supposed to free it yourself.

I already applied the patch, but yes dropping the const would be a good
hint to callers that they now own that block of memory. Eric, can you pls
follow up with a fix up patch - drm-misc is non-rebasing?
-Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] drm: make drm_get_format_name thread-safe
  2016-08-15 13:52       ` Daniel Vetter
@ 2016-08-15 15:07         ` Eric Engestrom
  2016-08-15 15:29         ` [FIXUP] drm: remove `const` attribute to hint at caller that they now own the memory Eric Engestrom
  1 sibling, 0 replies; 13+ messages in thread
From: Eric Engestrom @ 2016-08-15 15:07 UTC (permalink / raw)
  To: Jani Nikula, Tom St Denis, intel-gfx, Eric Engestrom,
	Michel Dänzer, linux-kernel, dri-devel, Xinliang Liu,
	David Zhang, Wei Yongjun, Vitaly Prosyak, Daniel Vetter,
	Junwei Zhang, Alex Deucher, Flora Cui, Gustavo Padovan,
	Christian König

On Mon, Aug 15, 2016 at 03:52:07PM +0200, Daniel Vetter wrote:
> On Mon, Aug 15, 2016 at 04:13:54PM +0300, Jani Nikula wrote:
> > On Mon, 15 Aug 2016, Eric Engestrom <eric.engestrom@imgtec.com> wrote:
> > > On Mon, Aug 15, 2016 at 12:54:01PM +0300, Jani Nikula wrote:
> > >> On Mon, 15 Aug 2016, Eric Engestrom <eric@engestrom.ch> wrote:
> > >> > Signed-off-by: Eric Engestrom <eric@engestrom.ch>
> > >> > ---
> > >> >
> > >> > I moved the main bits to be the first diffs, shouldn't affect anything
> > >> > when applying the patch, but I wanted to ask:
> > >> > I don't like the hard-coded `32` the appears in both kmalloc() and
> > >> > snprintf(), what do you think? If you don't like it either, what would
> > >> > you suggest? Should I #define it?
> > >> >
> > >> > Second question is about the patch mail itself: should I send this kind
> > >> > of patch separated by module, with a note requesting them to be squashed
> > >> > when applying? It has to land as a single patch, but for review it might
> > >> > be easier if people only see the bits they each care about, as well as
> > >> > to collect ack's/r-b's.
> > >> >
> > >> > Cheers,
> > >> >   Eric
> > >> >
> > >> > ---
> > >> >  drivers/gpu/drm/amd/amdgpu/dce_v10_0.c          |  6 ++--
> > >> >  drivers/gpu/drm/amd/amdgpu/dce_v11_0.c          |  6 ++--
> > >> >  drivers/gpu/drm/amd/amdgpu/dce_v8_0.c           |  6 ++--
> > >> >  drivers/gpu/drm/drm_atomic.c                    |  5 ++--
> > >> >  drivers/gpu/drm/drm_crtc.c                      | 21 ++++++++-----
> > >> >  drivers/gpu/drm/drm_fourcc.c                    | 17 ++++++-----
> > >> >  drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c |  6 ++--
> > >> >  drivers/gpu/drm/i915/i915_debugfs.c             | 11 ++++++-
> > >> >  drivers/gpu/drm/i915/intel_atomic_plane.c       |  6 ++--
> > >> >  drivers/gpu/drm/i915/intel_display.c            | 39 ++++++++++++++++---------
> > >> >  drivers/gpu/drm/radeon/atombios_crtc.c          | 12 +++++---
> > >> >  include/drm/drm_fourcc.h                        |  2 +-
> > >> >  12 files changed, 89 insertions(+), 48 deletions(-)
> > >> >
> > >> > diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
> > >> > index 0645c85..38216a1 100644
> > >> > --- a/drivers/gpu/drm/drm_fourcc.c
> > >> > +++ b/drivers/gpu/drm/drm_fourcc.c
> > >> > @@ -39,16 +39,14 @@ static char printable_char(int c)
> > >> >   * drm_get_format_name - return a string for drm fourcc format
> > >> >   * @format: format to compute name of
> > >> >   *
> > >> > - * Note that the buffer used by this function is globally shared and owned by
> > >> > - * the function itself.
> > >> > - *
> > >> > - * FIXME: This isn't really multithreading safe.
> > >> > + * Note that the buffer returned by this function is owned by the caller
> > >> > + * and will need to be freed.
> > >> >   */
> > >> >  const char *drm_get_format_name(uint32_t format)
> > >> 
> > >> I find it surprising that a function that allocates a buffer returns a
> > >> const pointer. Some userspace libraries have conventions about the
> > >> ownership based on constness.
> > >> 
> > >> (I also find it suprising that kfree() takes a const pointer; arguably
> > >> that call changes the memory.)
> > >> 
> > >> Is there precedent for this?
> > >> 
> > >> BR,
> > >> Jani.
> > >
> > > It's not a const pointer, it's a normal pointer to a const char, i.e.
> > > you can do as you want with the pointer but you shouldn't change the
> > > chars it points to.
> > 
> > Ermh, that's what I meant even if I was sloppy in my reply. And arguably
> > freeing the bytes the pointer points at changes them, albeit subtly. And
> > having a function return a pointer to const data is often an indication
> > that the ownership of the data isn't transfered, i.e. you're not
> > supposed to free it yourself.
> 
> I already applied the patch, but yes dropping the const would be a good
> hint to callers that they now own that block of memory. Eric, can you pls
> follow up with a fix up patch - drm-misc is non-rebasing?
> -Daniel

I didn't know about that convention. I'll send a fixup patch, but it'll
have to wait until tomorrow night. I hope that's not an issue :(

Cheers,
  Eric

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [FIXUP] drm: remove `const` attribute to hint at caller that they now own the memory
  2016-08-15 13:52       ` Daniel Vetter
  2016-08-15 15:07         ` Eric Engestrom
@ 2016-08-15 15:29         ` Eric Engestrom
  2016-08-16 11:04           ` Jani Nikula
  1 sibling, 1 reply; 13+ messages in thread
From: Eric Engestrom @ 2016-08-15 15:29 UTC (permalink / raw)
  To: linux-kernel; +Cc: dri-devel, intel-gfx

Signed-off-by: Eric Engestrom <eric.engestrom@imgtec.com>
---
 drivers/gpu/drm/amd/amdgpu/dce_v10_0.c          | 2 +-
 drivers/gpu/drm/amd/amdgpu/dce_v11_0.c          | 2 +-
 drivers/gpu/drm/amd/amdgpu/dce_v8_0.c           | 2 +-
 drivers/gpu/drm/drm_atomic.c                    | 2 +-
 drivers/gpu/drm/drm_crtc.c                      | 8 ++++----
 drivers/gpu/drm/drm_fourcc.c                    | 4 ++--
 drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 2 +-
 drivers/gpu/drm/i915/i915_debugfs.c             | 2 +-
 drivers/gpu/drm/i915/intel_atomic_plane.c       | 2 +-
 drivers/gpu/drm/i915/intel_display.c            | 4 ++--
 drivers/gpu/drm/radeon/atombios_crtc.c          | 4 ++--
 include/drm/drm_fourcc.h                        | 2 +-
 12 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
index 0bf8959..741da36 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
@@ -2071,7 +2071,7 @@ static int dce_v10_0_crtc_do_set_base(struct drm_crtc *crtc,
 	u32 tmp, viewport_w, viewport_h;
 	int r;
 	bool bypass_lut = false;
-	const char *format_name;
+	char *format_name;
 
 	/* no fb bound */
 	if (!atomic && !crtc->primary->fb) {
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
index 1558a97..2282eb6 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
@@ -2046,7 +2046,7 @@ static int dce_v11_0_crtc_do_set_base(struct drm_crtc *crtc,
 	u32 tmp, viewport_w, viewport_h;
 	int r;
 	bool bypass_lut = false;
-	const char *format_name;
+	char *format_name;
 
 	/* no fb bound */
 	if (!atomic && !crtc->primary->fb) {
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
index 71a0375..8b7ad34 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
@@ -1952,7 +1952,7 @@ static int dce_v8_0_crtc_do_set_base(struct drm_crtc *crtc,
 	u32 viewport_w, viewport_h;
 	int r;
 	bool bypass_lut = false;
-	const char *format_name;
+	char *format_name;
 
 	/* no fb bound */
 	if (!atomic && !crtc->primary->fb) {
diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index 087391f..5cb2e22 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -837,7 +837,7 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
 	/* Check whether this plane supports the fb pixel format. */
 	ret = drm_plane_check_pixel_format(plane, state->fb->pixel_format);
 	if (ret) {
-		const char *format_name = drm_get_format_name(state->fb->pixel_format);
+		char *format_name = drm_get_format_name(state->fb->pixel_format);
 		DRM_DEBUG_ATOMIC("Invalid pixel format %s\n", format_name);
 		kfree(format_name);
 		return ret;
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 7da5d33..30ab28b 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -2592,7 +2592,7 @@ static int __setplane_internal(struct drm_plane *plane,
 	/* Check whether this plane supports the fb pixel format. */
 	ret = drm_plane_check_pixel_format(plane, fb->pixel_format);
 	if (ret) {
-		const char *format_name = drm_get_format_name(fb->pixel_format);
+		char *format_name = drm_get_format_name(fb->pixel_format);
 		DRM_DEBUG_KMS("Invalid pixel format %s\n", format_name);
 		kfree(format_name);
 		goto out;
@@ -2903,7 +2903,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
 			ret = drm_plane_check_pixel_format(crtc->primary,
 							   fb->pixel_format);
 			if (ret) {
-				const char *format_name = drm_get_format_name(fb->pixel_format);
+				char *format_name = drm_get_format_name(fb->pixel_format);
 				DRM_DEBUG_KMS("Invalid pixel format %s\n", format_name);
 				kfree(format_name);
 				goto out;
@@ -3281,7 +3281,7 @@ int drm_mode_addfb(struct drm_device *dev,
 static int format_check(const struct drm_mode_fb_cmd2 *r)
 {
 	uint32_t format = r->pixel_format & ~DRM_FORMAT_BIG_ENDIAN;
-	const char *format_name;
+	char *format_name;
 
 	switch (format) {
 	case DRM_FORMAT_C8:
@@ -3359,7 +3359,7 @@ static int framebuffer_check(const struct drm_mode_fb_cmd2 *r)
 
 	ret = format_check(r);
 	if (ret) {
-		const char *format_name = drm_get_format_name(r->pixel_format);
+		char *format_name = drm_get_format_name(r->pixel_format);
 		DRM_DEBUG_KMS("bad framebuffer format %s\n", format_name);
 		kfree(format_name);
 		return ret;
diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
index 38216a1..41d06d6 100644
--- a/drivers/gpu/drm/drm_fourcc.c
+++ b/drivers/gpu/drm/drm_fourcc.c
@@ -42,7 +42,7 @@ static char printable_char(int c)
  * Note that the buffer returned by this function is owned by the caller
  * and will need to be freed.
  */
-const char *drm_get_format_name(uint32_t format)
+char *drm_get_format_name(uint32_t format)
 {
 	char *buf = kmalloc(32, GFP_KERNEL);
 
@@ -71,7 +71,7 @@ EXPORT_SYMBOL(drm_get_format_name);
 void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
 			  int *bpp)
 {
-	const char *format_name;
+	char *format_name;
 
 	switch (format) {
 	case DRM_FORMAT_C8:
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
index ac7fa02..eaa3df7 100644
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
@@ -608,7 +608,7 @@ static void ade_rdma_set(void __iomem *base, struct drm_framebuffer *fb,
 			 u32 ch, u32 y, u32 in_h, u32 fmt)
 {
 	struct drm_gem_cma_object *obj = drm_fb_cma_get_gem_obj(fb, 0);
-	const char *format_name;
+	char *format_name;
 	u32 reg_ctrl, reg_addr, reg_size, reg_stride, reg_space, reg_en;
 	u32 stride = fb->pitches[0];
 	u32 addr = (u32)obj->paddr + y * stride;
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 904720b..e5cddea 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -3109,7 +3109,7 @@ static void intel_plane_info(struct seq_file *m, struct intel_crtc *intel_crtc)
 	for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) {
 		struct drm_plane_state *state;
 		struct drm_plane *plane = &intel_plane->base;
-		const char *format_name;
+		char *format_name;
 
 		if (!plane->state) {
 			seq_puts(m, "plane->state is NULL!\n");
diff --git a/drivers/gpu/drm/i915/intel_atomic_plane.c b/drivers/gpu/drm/i915/intel_atomic_plane.c
index e06131a..28fe00d 100644
--- a/drivers/gpu/drm/i915/intel_atomic_plane.c
+++ b/drivers/gpu/drm/i915/intel_atomic_plane.c
@@ -157,7 +157,7 @@ static int intel_plane_atomic_check(struct drm_plane *plane,
 		crtc_state->base.enable ? crtc_state->pipe_src_h : 0;
 
 	if (state->fb && intel_rotation_90_or_270(state->rotation)) {
-		const char *format_name;
+		char *format_name;
 		if (!(state->fb->modifier[0] == I915_FORMAT_MOD_Y_TILED ||
 			state->fb->modifier[0] == I915_FORMAT_MOD_Yf_TILED)) {
 			DRM_DEBUG_KMS("Y/Yf tiling required for 90/270!\n");
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index aaada15..b1d701f 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -12264,7 +12264,7 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc,
 
 	DRM_DEBUG_KMS("planes on this crtc\n");
 	list_for_each_entry(plane, &dev->mode_config.plane_list, head) {
-		const char *format_name;
+		char *format_name;
 		intel_plane = to_intel_plane(plane);
 		if (intel_plane->pipe != crtc->pipe)
 			continue;
@@ -14922,7 +14922,7 @@ static int intel_framebuffer_init(struct drm_device *dev,
 	unsigned int aligned_height;
 	int ret;
 	u32 pitch_limit, stride_alignment;
-	const char *format_name;
+	char *format_name;
 
 	WARN_ON(!mutex_is_locked(&dev->struct_mutex));
 
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
index 981ca3f..a89c480 100644
--- a/drivers/gpu/drm/radeon/atombios_crtc.c
+++ b/drivers/gpu/drm/radeon/atombios_crtc.c
@@ -1154,7 +1154,7 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
 	u32 tmp, viewport_w, viewport_h;
 	int r;
 	bool bypass_lut = false;
-	const char *format_name;
+	char *format_name;
 
 	/* no fb bound */
 	if (!atomic && !crtc->primary->fb) {
@@ -1471,7 +1471,7 @@ static int avivo_crtc_do_set_base(struct drm_crtc *crtc,
 	u32 viewport_w, viewport_h;
 	int r;
 	bool bypass_lut = false;
-	const char *format_name;
+	char *format_name;
 
 	/* no fb bound */
 	if (!atomic && !crtc->primary->fb) {
diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h
index 030d22d..b106337 100644
--- a/include/drm/drm_fourcc.h
+++ b/include/drm/drm_fourcc.h
@@ -32,6 +32,6 @@ int drm_format_horz_chroma_subsampling(uint32_t format);
 int drm_format_vert_chroma_subsampling(uint32_t format);
 int drm_format_plane_width(int width, uint32_t format, int plane);
 int drm_format_plane_height(int height, uint32_t format, int plane);
-const char *drm_get_format_name(uint32_t format) __malloc;
+char *drm_get_format_name(uint32_t format) __malloc;
 
 #endif /* __DRM_FOURCC_H__ */
-- 
2.9.2

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

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* ✗ Ro.CI.BAT: failure for drm: make drm_get_format_name thread-safe (rev2)
  2016-08-15  0:02 [PATCH] drm: make drm_get_format_name thread-safe Eric Engestrom
  2016-08-15  5:33 ` ✗ Ro.CI.BAT: failure for " Patchwork
  2016-08-15  9:54 ` [PATCH] " Jani Nikula
@ 2016-08-15 16:00 ` Patchwork
  2016-11-03 18:52 ` [Intel-gfx] [PATCH] drm: make drm_get_format_name thread-safe Rob Clark
  3 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2016-08-15 16:00 UTC (permalink / raw)
  To: Eric Engestrom; +Cc: intel-gfx

== Series Details ==

Series: drm: make drm_get_format_name thread-safe (rev2)
URL   : https://patchwork.freedesktop.org/series/11069/
State : failure

== Summary ==

Applying: drm: remove `const` attribute to hint at caller that they now own the memory
fatal: sha1 information is lacking or useless (drivers/gpu/drm/i915/intel_display.c).
error: could not build fake ancestor
Patch failed at 0001 drm: remove `const` attribute to hint at caller that they now own the memory
The copy of the patch that failed is found in: .git/rebase-apply/patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".

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

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [FIXUP] drm: remove `const` attribute to hint at caller that they now own the memory
  2016-08-15 15:29         ` [FIXUP] drm: remove `const` attribute to hint at caller that they now own the memory Eric Engestrom
@ 2016-08-16 11:04           ` Jani Nikula
  2016-08-16 12:07             ` Daniel Vetter
  0 siblings, 1 reply; 13+ messages in thread
From: Jani Nikula @ 2016-08-16 11:04 UTC (permalink / raw)
  To: Eric Engestrom, linux-kernel; +Cc: intel-gfx, dri-devel


Reviewed-by: Jani Nikula <jani.nikula@intel.com>


On Mon, 15 Aug 2016, Eric Engestrom <eric.engestrom@imgtec.com> wrote:
> Signed-off-by: Eric Engestrom <eric.engestrom@imgtec.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/dce_v10_0.c          | 2 +-
>  drivers/gpu/drm/amd/amdgpu/dce_v11_0.c          | 2 +-
>  drivers/gpu/drm/amd/amdgpu/dce_v8_0.c           | 2 +-
>  drivers/gpu/drm/drm_atomic.c                    | 2 +-
>  drivers/gpu/drm/drm_crtc.c                      | 8 ++++----
>  drivers/gpu/drm/drm_fourcc.c                    | 4 ++--
>  drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 2 +-
>  drivers/gpu/drm/i915/i915_debugfs.c             | 2 +-
>  drivers/gpu/drm/i915/intel_atomic_plane.c       | 2 +-
>  drivers/gpu/drm/i915/intel_display.c            | 4 ++--
>  drivers/gpu/drm/radeon/atombios_crtc.c          | 4 ++--
>  include/drm/drm_fourcc.h                        | 2 +-
>  12 files changed, 18 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> index 0bf8959..741da36 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> @@ -2071,7 +2071,7 @@ static int dce_v10_0_crtc_do_set_base(struct drm_crtc *crtc,
>  	u32 tmp, viewport_w, viewport_h;
>  	int r;
>  	bool bypass_lut = false;
> -	const char *format_name;
> +	char *format_name;
>  
>  	/* no fb bound */
>  	if (!atomic && !crtc->primary->fb) {
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> index 1558a97..2282eb6 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> @@ -2046,7 +2046,7 @@ static int dce_v11_0_crtc_do_set_base(struct drm_crtc *crtc,
>  	u32 tmp, viewport_w, viewport_h;
>  	int r;
>  	bool bypass_lut = false;
> -	const char *format_name;
> +	char *format_name;
>  
>  	/* no fb bound */
>  	if (!atomic && !crtc->primary->fb) {
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> index 71a0375..8b7ad34 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> @@ -1952,7 +1952,7 @@ static int dce_v8_0_crtc_do_set_base(struct drm_crtc *crtc,
>  	u32 viewport_w, viewport_h;
>  	int r;
>  	bool bypass_lut = false;
> -	const char *format_name;
> +	char *format_name;
>  
>  	/* no fb bound */
>  	if (!atomic && !crtc->primary->fb) {
> diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
> index 087391f..5cb2e22 100644
> --- a/drivers/gpu/drm/drm_atomic.c
> +++ b/drivers/gpu/drm/drm_atomic.c
> @@ -837,7 +837,7 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
>  	/* Check whether this plane supports the fb pixel format. */
>  	ret = drm_plane_check_pixel_format(plane, state->fb->pixel_format);
>  	if (ret) {
> -		const char *format_name = drm_get_format_name(state->fb->pixel_format);
> +		char *format_name = drm_get_format_name(state->fb->pixel_format);
>  		DRM_DEBUG_ATOMIC("Invalid pixel format %s\n", format_name);
>  		kfree(format_name);
>  		return ret;
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index 7da5d33..30ab28b 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -2592,7 +2592,7 @@ static int __setplane_internal(struct drm_plane *plane,
>  	/* Check whether this plane supports the fb pixel format. */
>  	ret = drm_plane_check_pixel_format(plane, fb->pixel_format);
>  	if (ret) {
> -		const char *format_name = drm_get_format_name(fb->pixel_format);
> +		char *format_name = drm_get_format_name(fb->pixel_format);
>  		DRM_DEBUG_KMS("Invalid pixel format %s\n", format_name);
>  		kfree(format_name);
>  		goto out;
> @@ -2903,7 +2903,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
>  			ret = drm_plane_check_pixel_format(crtc->primary,
>  							   fb->pixel_format);
>  			if (ret) {
> -				const char *format_name = drm_get_format_name(fb->pixel_format);
> +				char *format_name = drm_get_format_name(fb->pixel_format);
>  				DRM_DEBUG_KMS("Invalid pixel format %s\n", format_name);
>  				kfree(format_name);
>  				goto out;
> @@ -3281,7 +3281,7 @@ int drm_mode_addfb(struct drm_device *dev,
>  static int format_check(const struct drm_mode_fb_cmd2 *r)
>  {
>  	uint32_t format = r->pixel_format & ~DRM_FORMAT_BIG_ENDIAN;
> -	const char *format_name;
> +	char *format_name;
>  
>  	switch (format) {
>  	case DRM_FORMAT_C8:
> @@ -3359,7 +3359,7 @@ static int framebuffer_check(const struct drm_mode_fb_cmd2 *r)
>  
>  	ret = format_check(r);
>  	if (ret) {
> -		const char *format_name = drm_get_format_name(r->pixel_format);
> +		char *format_name = drm_get_format_name(r->pixel_format);
>  		DRM_DEBUG_KMS("bad framebuffer format %s\n", format_name);
>  		kfree(format_name);
>  		return ret;
> diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
> index 38216a1..41d06d6 100644
> --- a/drivers/gpu/drm/drm_fourcc.c
> +++ b/drivers/gpu/drm/drm_fourcc.c
> @@ -42,7 +42,7 @@ static char printable_char(int c)
>   * Note that the buffer returned by this function is owned by the caller
>   * and will need to be freed.
>   */
> -const char *drm_get_format_name(uint32_t format)
> +char *drm_get_format_name(uint32_t format)
>  {
>  	char *buf = kmalloc(32, GFP_KERNEL);
>  
> @@ -71,7 +71,7 @@ EXPORT_SYMBOL(drm_get_format_name);
>  void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
>  			  int *bpp)
>  {
> -	const char *format_name;
> +	char *format_name;
>  
>  	switch (format) {
>  	case DRM_FORMAT_C8:
> diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> index ac7fa02..eaa3df7 100644
> --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> @@ -608,7 +608,7 @@ static void ade_rdma_set(void __iomem *base, struct drm_framebuffer *fb,
>  			 u32 ch, u32 y, u32 in_h, u32 fmt)
>  {
>  	struct drm_gem_cma_object *obj = drm_fb_cma_get_gem_obj(fb, 0);
> -	const char *format_name;
> +	char *format_name;
>  	u32 reg_ctrl, reg_addr, reg_size, reg_stride, reg_space, reg_en;
>  	u32 stride = fb->pitches[0];
>  	u32 addr = (u32)obj->paddr + y * stride;
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index 904720b..e5cddea 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -3109,7 +3109,7 @@ static void intel_plane_info(struct seq_file *m, struct intel_crtc *intel_crtc)
>  	for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) {
>  		struct drm_plane_state *state;
>  		struct drm_plane *plane = &intel_plane->base;
> -		const char *format_name;
> +		char *format_name;
>  
>  		if (!plane->state) {
>  			seq_puts(m, "plane->state is NULL!\n");
> diff --git a/drivers/gpu/drm/i915/intel_atomic_plane.c b/drivers/gpu/drm/i915/intel_atomic_plane.c
> index e06131a..28fe00d 100644
> --- a/drivers/gpu/drm/i915/intel_atomic_plane.c
> +++ b/drivers/gpu/drm/i915/intel_atomic_plane.c
> @@ -157,7 +157,7 @@ static int intel_plane_atomic_check(struct drm_plane *plane,
>  		crtc_state->base.enable ? crtc_state->pipe_src_h : 0;
>  
>  	if (state->fb && intel_rotation_90_or_270(state->rotation)) {
> -		const char *format_name;
> +		char *format_name;
>  		if (!(state->fb->modifier[0] == I915_FORMAT_MOD_Y_TILED ||
>  			state->fb->modifier[0] == I915_FORMAT_MOD_Yf_TILED)) {
>  			DRM_DEBUG_KMS("Y/Yf tiling required for 90/270!\n");
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index aaada15..b1d701f 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -12264,7 +12264,7 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc,
>  
>  	DRM_DEBUG_KMS("planes on this crtc\n");
>  	list_for_each_entry(plane, &dev->mode_config.plane_list, head) {
> -		const char *format_name;
> +		char *format_name;
>  		intel_plane = to_intel_plane(plane);
>  		if (intel_plane->pipe != crtc->pipe)
>  			continue;
> @@ -14922,7 +14922,7 @@ static int intel_framebuffer_init(struct drm_device *dev,
>  	unsigned int aligned_height;
>  	int ret;
>  	u32 pitch_limit, stride_alignment;
> -	const char *format_name;
> +	char *format_name;
>  
>  	WARN_ON(!mutex_is_locked(&dev->struct_mutex));
>  
> diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
> index 981ca3f..a89c480 100644
> --- a/drivers/gpu/drm/radeon/atombios_crtc.c
> +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
> @@ -1154,7 +1154,7 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
>  	u32 tmp, viewport_w, viewport_h;
>  	int r;
>  	bool bypass_lut = false;
> -	const char *format_name;
> +	char *format_name;
>  
>  	/* no fb bound */
>  	if (!atomic && !crtc->primary->fb) {
> @@ -1471,7 +1471,7 @@ static int avivo_crtc_do_set_base(struct drm_crtc *crtc,
>  	u32 viewport_w, viewport_h;
>  	int r;
>  	bool bypass_lut = false;
> -	const char *format_name;
> +	char *format_name;
>  
>  	/* no fb bound */
>  	if (!atomic && !crtc->primary->fb) {
> diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h
> index 030d22d..b106337 100644
> --- a/include/drm/drm_fourcc.h
> +++ b/include/drm/drm_fourcc.h
> @@ -32,6 +32,6 @@ int drm_format_horz_chroma_subsampling(uint32_t format);
>  int drm_format_vert_chroma_subsampling(uint32_t format);
>  int drm_format_plane_width(int width, uint32_t format, int plane);
>  int drm_format_plane_height(int height, uint32_t format, int plane);
> -const char *drm_get_format_name(uint32_t format) __malloc;
> +char *drm_get_format_name(uint32_t format) __malloc;
>  
>  #endif /* __DRM_FOURCC_H__ */

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [FIXUP] drm: remove `const` attribute to hint at caller that they now own the memory
  2016-08-16 11:04           ` Jani Nikula
@ 2016-08-16 12:07             ` Daniel Vetter
  0 siblings, 0 replies; 13+ messages in thread
From: Daniel Vetter @ 2016-08-16 12:07 UTC (permalink / raw)
  To: Jani Nikula; +Cc: dri-devel, Eric Engestrom, linux-kernel, intel-gfx

On Tue, Aug 16, 2016 at 02:04:21PM +0300, Jani Nikula wrote:
> 
> Reviewed-by: Jani Nikula <jani.nikula@intel.com>

Applied to drm-misc, thanks.
-Daniel

> 
> 
> On Mon, 15 Aug 2016, Eric Engestrom <eric.engestrom@imgtec.com> wrote:
> > Signed-off-by: Eric Engestrom <eric.engestrom@imgtec.com>
> > ---
> >  drivers/gpu/drm/amd/amdgpu/dce_v10_0.c          | 2 +-
> >  drivers/gpu/drm/amd/amdgpu/dce_v11_0.c          | 2 +-
> >  drivers/gpu/drm/amd/amdgpu/dce_v8_0.c           | 2 +-
> >  drivers/gpu/drm/drm_atomic.c                    | 2 +-
> >  drivers/gpu/drm/drm_crtc.c                      | 8 ++++----
> >  drivers/gpu/drm/drm_fourcc.c                    | 4 ++--
> >  drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 2 +-
> >  drivers/gpu/drm/i915/i915_debugfs.c             | 2 +-
> >  drivers/gpu/drm/i915/intel_atomic_plane.c       | 2 +-
> >  drivers/gpu/drm/i915/intel_display.c            | 4 ++--
> >  drivers/gpu/drm/radeon/atombios_crtc.c          | 4 ++--
> >  include/drm/drm_fourcc.h                        | 2 +-
> >  12 files changed, 18 insertions(+), 18 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> > index 0bf8959..741da36 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> > @@ -2071,7 +2071,7 @@ static int dce_v10_0_crtc_do_set_base(struct drm_crtc *crtc,
> >  	u32 tmp, viewport_w, viewport_h;
> >  	int r;
> >  	bool bypass_lut = false;
> > -	const char *format_name;
> > +	char *format_name;
> >  
> >  	/* no fb bound */
> >  	if (!atomic && !crtc->primary->fb) {
> > diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> > index 1558a97..2282eb6 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> > @@ -2046,7 +2046,7 @@ static int dce_v11_0_crtc_do_set_base(struct drm_crtc *crtc,
> >  	u32 tmp, viewport_w, viewport_h;
> >  	int r;
> >  	bool bypass_lut = false;
> > -	const char *format_name;
> > +	char *format_name;
> >  
> >  	/* no fb bound */
> >  	if (!atomic && !crtc->primary->fb) {
> > diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> > index 71a0375..8b7ad34 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> > @@ -1952,7 +1952,7 @@ static int dce_v8_0_crtc_do_set_base(struct drm_crtc *crtc,
> >  	u32 viewport_w, viewport_h;
> >  	int r;
> >  	bool bypass_lut = false;
> > -	const char *format_name;
> > +	char *format_name;
> >  
> >  	/* no fb bound */
> >  	if (!atomic && !crtc->primary->fb) {
> > diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
> > index 087391f..5cb2e22 100644
> > --- a/drivers/gpu/drm/drm_atomic.c
> > +++ b/drivers/gpu/drm/drm_atomic.c
> > @@ -837,7 +837,7 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
> >  	/* Check whether this plane supports the fb pixel format. */
> >  	ret = drm_plane_check_pixel_format(plane, state->fb->pixel_format);
> >  	if (ret) {
> > -		const char *format_name = drm_get_format_name(state->fb->pixel_format);
> > +		char *format_name = drm_get_format_name(state->fb->pixel_format);
> >  		DRM_DEBUG_ATOMIC("Invalid pixel format %s\n", format_name);
> >  		kfree(format_name);
> >  		return ret;
> > diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> > index 7da5d33..30ab28b 100644
> > --- a/drivers/gpu/drm/drm_crtc.c
> > +++ b/drivers/gpu/drm/drm_crtc.c
> > @@ -2592,7 +2592,7 @@ static int __setplane_internal(struct drm_plane *plane,
> >  	/* Check whether this plane supports the fb pixel format. */
> >  	ret = drm_plane_check_pixel_format(plane, fb->pixel_format);
> >  	if (ret) {
> > -		const char *format_name = drm_get_format_name(fb->pixel_format);
> > +		char *format_name = drm_get_format_name(fb->pixel_format);
> >  		DRM_DEBUG_KMS("Invalid pixel format %s\n", format_name);
> >  		kfree(format_name);
> >  		goto out;
> > @@ -2903,7 +2903,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
> >  			ret = drm_plane_check_pixel_format(crtc->primary,
> >  							   fb->pixel_format);
> >  			if (ret) {
> > -				const char *format_name = drm_get_format_name(fb->pixel_format);
> > +				char *format_name = drm_get_format_name(fb->pixel_format);
> >  				DRM_DEBUG_KMS("Invalid pixel format %s\n", format_name);
> >  				kfree(format_name);
> >  				goto out;
> > @@ -3281,7 +3281,7 @@ int drm_mode_addfb(struct drm_device *dev,
> >  static int format_check(const struct drm_mode_fb_cmd2 *r)
> >  {
> >  	uint32_t format = r->pixel_format & ~DRM_FORMAT_BIG_ENDIAN;
> > -	const char *format_name;
> > +	char *format_name;
> >  
> >  	switch (format) {
> >  	case DRM_FORMAT_C8:
> > @@ -3359,7 +3359,7 @@ static int framebuffer_check(const struct drm_mode_fb_cmd2 *r)
> >  
> >  	ret = format_check(r);
> >  	if (ret) {
> > -		const char *format_name = drm_get_format_name(r->pixel_format);
> > +		char *format_name = drm_get_format_name(r->pixel_format);
> >  		DRM_DEBUG_KMS("bad framebuffer format %s\n", format_name);
> >  		kfree(format_name);
> >  		return ret;
> > diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
> > index 38216a1..41d06d6 100644
> > --- a/drivers/gpu/drm/drm_fourcc.c
> > +++ b/drivers/gpu/drm/drm_fourcc.c
> > @@ -42,7 +42,7 @@ static char printable_char(int c)
> >   * Note that the buffer returned by this function is owned by the caller
> >   * and will need to be freed.
> >   */
> > -const char *drm_get_format_name(uint32_t format)
> > +char *drm_get_format_name(uint32_t format)
> >  {
> >  	char *buf = kmalloc(32, GFP_KERNEL);
> >  
> > @@ -71,7 +71,7 @@ EXPORT_SYMBOL(drm_get_format_name);
> >  void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
> >  			  int *bpp)
> >  {
> > -	const char *format_name;
> > +	char *format_name;
> >  
> >  	switch (format) {
> >  	case DRM_FORMAT_C8:
> > diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> > index ac7fa02..eaa3df7 100644
> > --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> > +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> > @@ -608,7 +608,7 @@ static void ade_rdma_set(void __iomem *base, struct drm_framebuffer *fb,
> >  			 u32 ch, u32 y, u32 in_h, u32 fmt)
> >  {
> >  	struct drm_gem_cma_object *obj = drm_fb_cma_get_gem_obj(fb, 0);
> > -	const char *format_name;
> > +	char *format_name;
> >  	u32 reg_ctrl, reg_addr, reg_size, reg_stride, reg_space, reg_en;
> >  	u32 stride = fb->pitches[0];
> >  	u32 addr = (u32)obj->paddr + y * stride;
> > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> > index 904720b..e5cddea 100644
> > --- a/drivers/gpu/drm/i915/i915_debugfs.c
> > +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> > @@ -3109,7 +3109,7 @@ static void intel_plane_info(struct seq_file *m, struct intel_crtc *intel_crtc)
> >  	for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) {
> >  		struct drm_plane_state *state;
> >  		struct drm_plane *plane = &intel_plane->base;
> > -		const char *format_name;
> > +		char *format_name;
> >  
> >  		if (!plane->state) {
> >  			seq_puts(m, "plane->state is NULL!\n");
> > diff --git a/drivers/gpu/drm/i915/intel_atomic_plane.c b/drivers/gpu/drm/i915/intel_atomic_plane.c
> > index e06131a..28fe00d 100644
> > --- a/drivers/gpu/drm/i915/intel_atomic_plane.c
> > +++ b/drivers/gpu/drm/i915/intel_atomic_plane.c
> > @@ -157,7 +157,7 @@ static int intel_plane_atomic_check(struct drm_plane *plane,
> >  		crtc_state->base.enable ? crtc_state->pipe_src_h : 0;
> >  
> >  	if (state->fb && intel_rotation_90_or_270(state->rotation)) {
> > -		const char *format_name;
> > +		char *format_name;
> >  		if (!(state->fb->modifier[0] == I915_FORMAT_MOD_Y_TILED ||
> >  			state->fb->modifier[0] == I915_FORMAT_MOD_Yf_TILED)) {
> >  			DRM_DEBUG_KMS("Y/Yf tiling required for 90/270!\n");
> > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> > index aaada15..b1d701f 100644
> > --- a/drivers/gpu/drm/i915/intel_display.c
> > +++ b/drivers/gpu/drm/i915/intel_display.c
> > @@ -12264,7 +12264,7 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc,
> >  
> >  	DRM_DEBUG_KMS("planes on this crtc\n");
> >  	list_for_each_entry(plane, &dev->mode_config.plane_list, head) {
> > -		const char *format_name;
> > +		char *format_name;
> >  		intel_plane = to_intel_plane(plane);
> >  		if (intel_plane->pipe != crtc->pipe)
> >  			continue;
> > @@ -14922,7 +14922,7 @@ static int intel_framebuffer_init(struct drm_device *dev,
> >  	unsigned int aligned_height;
> >  	int ret;
> >  	u32 pitch_limit, stride_alignment;
> > -	const char *format_name;
> > +	char *format_name;
> >  
> >  	WARN_ON(!mutex_is_locked(&dev->struct_mutex));
> >  
> > diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
> > index 981ca3f..a89c480 100644
> > --- a/drivers/gpu/drm/radeon/atombios_crtc.c
> > +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
> > @@ -1154,7 +1154,7 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
> >  	u32 tmp, viewport_w, viewport_h;
> >  	int r;
> >  	bool bypass_lut = false;
> > -	const char *format_name;
> > +	char *format_name;
> >  
> >  	/* no fb bound */
> >  	if (!atomic && !crtc->primary->fb) {
> > @@ -1471,7 +1471,7 @@ static int avivo_crtc_do_set_base(struct drm_crtc *crtc,
> >  	u32 viewport_w, viewport_h;
> >  	int r;
> >  	bool bypass_lut = false;
> > -	const char *format_name;
> > +	char *format_name;
> >  
> >  	/* no fb bound */
> >  	if (!atomic && !crtc->primary->fb) {
> > diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h
> > index 030d22d..b106337 100644
> > --- a/include/drm/drm_fourcc.h
> > +++ b/include/drm/drm_fourcc.h
> > @@ -32,6 +32,6 @@ int drm_format_horz_chroma_subsampling(uint32_t format);
> >  int drm_format_vert_chroma_subsampling(uint32_t format);
> >  int drm_format_plane_width(int width, uint32_t format, int plane);
> >  int drm_format_plane_height(int height, uint32_t format, int plane);
> > -const char *drm_get_format_name(uint32_t format) __malloc;
> > +char *drm_get_format_name(uint32_t format) __malloc;
> >  
> >  #endif /* __DRM_FOURCC_H__ */
> 
> -- 
> Jani Nikula, Intel Open Source Technology Center

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Intel-gfx] [PATCH] drm: make drm_get_format_name thread-safe
  2016-08-15  0:02 [PATCH] drm: make drm_get_format_name thread-safe Eric Engestrom
                   ` (2 preceding siblings ...)
  2016-08-15 16:00 ` ✗ Ro.CI.BAT: failure for drm: make drm_get_format_name thread-safe (rev2) Patchwork
@ 2016-11-03 18:52 ` Rob Clark
  2016-11-08  8:43   ` Daniel Vetter
  3 siblings, 1 reply; 13+ messages in thread
From: Rob Clark @ 2016-11-03 18:52 UTC (permalink / raw)
  To: Eric Engestrom
  Cc: Tom St Denis, Flora Cui, Intel Graphics Development,
	Michel Dänzer, Linux Kernel Mailing List,
	dri-devel@lists.freedesktop.org, Xinliang Liu, David Zhang,
	Wei Yongjun, Vitaly Prosyak, Daniel Vetter, Junwei Zhang,
	Alex Deucher, Gustavo Padovan, Christian König

On Sun, Aug 14, 2016 at 8:02 PM, Eric Engestrom <eric@engestrom.ch> wrote:
> Signed-off-by: Eric Engestrom <eric@engestrom.ch>
> ---
>
> I moved the main bits to be the first diffs, shouldn't affect anything
> when applying the patch, but I wanted to ask:
> I don't like the hard-coded `32` the appears in both kmalloc() and
> snprintf(), what do you think? If you don't like it either, what would
> you suggest? Should I #define it?
>
> Second question is about the patch mail itself: should I send this kind
> of patch separated by module, with a note requesting them to be squashed
> when applying? It has to land as a single patch, but for review it might
> be easier if people only see the bits they each care about, as well as
> to collect ack's/r-b's.
>
> Cheers,
>   Eric
>
> ---
>  drivers/gpu/drm/amd/amdgpu/dce_v10_0.c          |  6 ++--
>  drivers/gpu/drm/amd/amdgpu/dce_v11_0.c          |  6 ++--
>  drivers/gpu/drm/amd/amdgpu/dce_v8_0.c           |  6 ++--
>  drivers/gpu/drm/drm_atomic.c                    |  5 ++--
>  drivers/gpu/drm/drm_crtc.c                      | 21 ++++++++-----
>  drivers/gpu/drm/drm_fourcc.c                    | 17 ++++++-----
>  drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c |  6 ++--
>  drivers/gpu/drm/i915/i915_debugfs.c             | 11 ++++++-
>  drivers/gpu/drm/i915/intel_atomic_plane.c       |  6 ++--
>  drivers/gpu/drm/i915/intel_display.c            | 39 ++++++++++++++++---------
>  drivers/gpu/drm/radeon/atombios_crtc.c          | 12 +++++---
>  include/drm/drm_fourcc.h                        |  2 +-
>  12 files changed, 89 insertions(+), 48 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
> index 0645c85..38216a1 100644
> --- a/drivers/gpu/drm/drm_fourcc.c
> +++ b/drivers/gpu/drm/drm_fourcc.c
> @@ -39,16 +39,14 @@ static char printable_char(int c)
>   * drm_get_format_name - return a string for drm fourcc format
>   * @format: format to compute name of
>   *
> - * Note that the buffer used by this function is globally shared and owned by
> - * the function itself.
> - *
> - * FIXME: This isn't really multithreading safe.
> + * Note that the buffer returned by this function is owned by the caller
> + * and will need to be freed.
>   */
>  const char *drm_get_format_name(uint32_t format)
>  {
> -       static char buf[32];
> +       char *buf = kmalloc(32, GFP_KERNEL);


hmm, I guess I wasn't paying attention at the time this patch came by,
but unfortunately this makes drm_get_format_name() no longer safe in
atomic contexts :-/

We should probably either revert this or have two variants of
drm_get_format_name()?  (ie. one that is not thread safe but is good
enough for debugging)

BR,
-R

> -       snprintf(buf, sizeof(buf),
> +       snprintf(buf, 32,
>                  "%c%c%c%c %s-endian (0x%08x)",
>                  printable_char(format & 0xff),
>                  printable_char((format >> 8) & 0xff),
> @@ -73,6 +71,8 @@ EXPORT_SYMBOL(drm_get_format_name);
>  void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
>                           int *bpp)
>  {
> +       const char *format_name;
> +
>         switch (format) {
>         case DRM_FORMAT_C8:
>         case DRM_FORMAT_RGB332:
> @@ -127,8 +127,9 @@ void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
>                 *bpp = 32;
>                 break;
>         default:
> -               DRM_DEBUG_KMS("unsupported pixel format %s\n",
> -                             drm_get_format_name(format));
> +               format_name = drm_get_format_name(format);
> +               DRM_DEBUG_KMS("unsupported pixel format %s\n", format_name);
> +               kfree(format_name);
>                 *depth = 0;
>                 *bpp = 0;
>                 break;
> diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h
> index 7f90a39..030d22d 100644
> --- a/include/drm/drm_fourcc.h
> +++ b/include/drm/drm_fourcc.h
> @@ -32,6 +32,6 @@ int drm_format_horz_chroma_subsampling(uint32_t format);
>  int drm_format_vert_chroma_subsampling(uint32_t format);
>  int drm_format_plane_width(int width, uint32_t format, int plane);
>  int drm_format_plane_height(int height, uint32_t format, int plane);
> -const char *drm_get_format_name(uint32_t format);
> +const char *drm_get_format_name(uint32_t format) __malloc;
>
>  #endif /* __DRM_FOURCC_H__ */
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> index c1b04e9..0bf8959 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> @@ -2071,6 +2071,7 @@ static int dce_v10_0_crtc_do_set_base(struct drm_crtc *crtc,
>         u32 tmp, viewport_w, viewport_h;
>         int r;
>         bool bypass_lut = false;
> +       const char *format_name;
>
>         /* no fb bound */
>         if (!atomic && !crtc->primary->fb) {
> @@ -2182,8 +2183,9 @@ static int dce_v10_0_crtc_do_set_base(struct drm_crtc *crtc,
>                 bypass_lut = true;
>                 break;
>         default:
> -               DRM_ERROR("Unsupported screen format %s\n",
> -                       drm_get_format_name(target_fb->pixel_format));
> +               format_name = drm_get_format_name(target_fb->pixel_format);
> +               DRM_ERROR("Unsupported screen format %s\n", format_name);
> +               kfree(format_name);
>                 return -EINVAL;
>         }
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> index d4bf133..1558a97 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> @@ -2046,6 +2046,7 @@ static int dce_v11_0_crtc_do_set_base(struct drm_crtc *crtc,
>         u32 tmp, viewport_w, viewport_h;
>         int r;
>         bool bypass_lut = false;
> +       const char *format_name;
>
>         /* no fb bound */
>         if (!atomic && !crtc->primary->fb) {
> @@ -2157,8 +2158,9 @@ static int dce_v11_0_crtc_do_set_base(struct drm_crtc *crtc,
>                 bypass_lut = true;
>                 break;
>         default:
> -               DRM_ERROR("Unsupported screen format %s\n",
> -                       drm_get_format_name(target_fb->pixel_format));
> +               format_name = drm_get_format_name(target_fb->pixel_format);
> +               DRM_ERROR("Unsupported screen format %s\n", format_name);
> +               kfree(format_name);
>                 return -EINVAL;
>         }
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> index 4fdfab1..71a0375 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> @@ -1952,6 +1952,7 @@ static int dce_v8_0_crtc_do_set_base(struct drm_crtc *crtc,
>         u32 viewport_w, viewport_h;
>         int r;
>         bool bypass_lut = false;
> +       const char *format_name;
>
>         /* no fb bound */
>         if (!atomic && !crtc->primary->fb) {
> @@ -2056,8 +2057,9 @@ static int dce_v8_0_crtc_do_set_base(struct drm_crtc *crtc,
>                 bypass_lut = true;
>                 break;
>         default:
> -               DRM_ERROR("Unsupported screen format %s\n",
> -                         drm_get_format_name(target_fb->pixel_format));
> +               format_name = drm_get_format_name(target_fb->pixel_format);
> +               DRM_ERROR("Unsupported screen format %s\n", format_name);
> +               kfree(format_name);
>                 return -EINVAL;
>         }
>
> diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
> index fa39307..087391f 100644
> --- a/drivers/gpu/drm/drm_atomic.c
> +++ b/drivers/gpu/drm/drm_atomic.c
> @@ -837,8 +837,9 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
>         /* Check whether this plane supports the fb pixel format. */
>         ret = drm_plane_check_pixel_format(plane, state->fb->pixel_format);
>         if (ret) {
> -               DRM_DEBUG_ATOMIC("Invalid pixel format %s\n",
> -                                drm_get_format_name(state->fb->pixel_format));
> +               const char *format_name = drm_get_format_name(state->fb->pixel_format);
> +               DRM_DEBUG_ATOMIC("Invalid pixel format %s\n", format_name);
> +               kfree(format_name);
>                 return ret;
>         }
>
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index b1dbb60..7da5d33 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -2592,8 +2592,9 @@ static int __setplane_internal(struct drm_plane *plane,
>         /* Check whether this plane supports the fb pixel format. */
>         ret = drm_plane_check_pixel_format(plane, fb->pixel_format);
>         if (ret) {
> -               DRM_DEBUG_KMS("Invalid pixel format %s\n",
> -                             drm_get_format_name(fb->pixel_format));
> +               const char *format_name = drm_get_format_name(fb->pixel_format);
> +               DRM_DEBUG_KMS("Invalid pixel format %s\n", format_name);
> +               kfree(format_name);
>                 goto out;
>         }
>
> @@ -2902,8 +2903,9 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
>                         ret = drm_plane_check_pixel_format(crtc->primary,
>                                                            fb->pixel_format);
>                         if (ret) {
> -                               DRM_DEBUG_KMS("Invalid pixel format %s\n",
> -                                       drm_get_format_name(fb->pixel_format));
> +                               const char *format_name = drm_get_format_name(fb->pixel_format);
> +                               DRM_DEBUG_KMS("Invalid pixel format %s\n", format_name);
> +                               kfree(format_name);
>                                 goto out;
>                         }
>                 }
> @@ -3279,6 +3281,7 @@ int drm_mode_addfb(struct drm_device *dev,
>  static int format_check(const struct drm_mode_fb_cmd2 *r)
>  {
>         uint32_t format = r->pixel_format & ~DRM_FORMAT_BIG_ENDIAN;
> +       const char *format_name;
>
>         switch (format) {
>         case DRM_FORMAT_C8:
> @@ -3343,8 +3346,9 @@ static int format_check(const struct drm_mode_fb_cmd2 *r)
>         case DRM_FORMAT_YVU444:
>                 return 0;
>         default:
> -               DRM_DEBUG_KMS("invalid pixel format %s\n",
> -                             drm_get_format_name(r->pixel_format));
> +               format_name = drm_get_format_name(r->pixel_format);
> +               DRM_DEBUG_KMS("invalid pixel format %s\n", format_name);
> +               kfree(format_name);
>                 return -EINVAL;
>         }
>  }
> @@ -3355,8 +3359,9 @@ static int framebuffer_check(const struct drm_mode_fb_cmd2 *r)
>
>         ret = format_check(r);
>         if (ret) {
> -               DRM_DEBUG_KMS("bad framebuffer format %s\n",
> -                             drm_get_format_name(r->pixel_format));
> +               const char *format_name = drm_get_format_name(r->pixel_format);
> +               DRM_DEBUG_KMS("bad framebuffer format %s\n", format_name);
> +               kfree(format_name);
>                 return ret;
>         }
>
> diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> index c3707d4..ac7fa02 100644
> --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> @@ -608,15 +608,17 @@ static void ade_rdma_set(void __iomem *base, struct drm_framebuffer *fb,
>                          u32 ch, u32 y, u32 in_h, u32 fmt)
>  {
>         struct drm_gem_cma_object *obj = drm_fb_cma_get_gem_obj(fb, 0);
> +       const char *format_name;
>         u32 reg_ctrl, reg_addr, reg_size, reg_stride, reg_space, reg_en;
>         u32 stride = fb->pitches[0];
>         u32 addr = (u32)obj->paddr + y * stride;
>
>         DRM_DEBUG_DRIVER("rdma%d: (y=%d, height=%d), stride=%d, paddr=0x%x\n",
>                          ch + 1, y, in_h, stride, (u32)obj->paddr);
> +       format_name = drm_get_format_name(fb->pixel_format);
>         DRM_DEBUG_DRIVER("addr=0x%x, fb:%dx%d, pixel_format=%d(%s)\n",
> -                        addr, fb->width, fb->height, fmt,
> -                        drm_get_format_name(fb->pixel_format));
> +                        addr, fb->width, fb->height, fmt, format_name);
> +       kfree(format_name);
>
>         /* get reg offset */
>         reg_ctrl = RD_CH_CTRL(ch);
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index 844fea7..904720b 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -3109,6 +3109,7 @@ static void intel_plane_info(struct seq_file *m, struct intel_crtc *intel_crtc)
>         for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) {
>                 struct drm_plane_state *state;
>                 struct drm_plane *plane = &intel_plane->base;
> +               const char *format_name;
>
>                 if (!plane->state) {
>                         seq_puts(m, "plane->state is NULL!\n");
> @@ -3117,6 +3118,12 @@ static void intel_plane_info(struct seq_file *m, struct intel_crtc *intel_crtc)
>
>                 state = plane->state;
>
> +               if (state->fb) {
> +                       format_name = drm_get_format_name(state->fb->pixel_format);
> +               } else {
> +                       format_name = kstrdup("N/A", GFP_KERNEL);
> +               }
> +
>                 seq_printf(m, "\t--Plane id %d: type=%s, crtc_pos=%4dx%4d, crtc_size=%4dx%4d, src_pos=%d.%04ux%d.%04u, src_size=%d.%04ux%d.%04u, format=%s, rotation=%s\n",
>                            plane->base.id,
>                            plane_type(intel_plane->base.type),
> @@ -3130,8 +3137,10 @@ static void intel_plane_info(struct seq_file *m, struct intel_crtc *intel_crtc)
>                            ((state->src_w & 0xffff) * 15625) >> 10,
>                            (state->src_h >> 16),
>                            ((state->src_h & 0xffff) * 15625) >> 10,
> -                          state->fb ? drm_get_format_name(state->fb->pixel_format) : "N/A",
> +                          format_name,
>                            plane_rotation(state->rotation));
> +
> +               kfree(format_name);
>         }
>  }
>
> diff --git a/drivers/gpu/drm/i915/intel_atomic_plane.c b/drivers/gpu/drm/i915/intel_atomic_plane.c
> index 7de7721..e06131a 100644
> --- a/drivers/gpu/drm/i915/intel_atomic_plane.c
> +++ b/drivers/gpu/drm/i915/intel_atomic_plane.c
> @@ -157,6 +157,7 @@ static int intel_plane_atomic_check(struct drm_plane *plane,
>                 crtc_state->base.enable ? crtc_state->pipe_src_h : 0;
>
>         if (state->fb && intel_rotation_90_or_270(state->rotation)) {
> +               const char *format_name;
>                 if (!(state->fb->modifier[0] == I915_FORMAT_MOD_Y_TILED ||
>                         state->fb->modifier[0] == I915_FORMAT_MOD_Yf_TILED)) {
>                         DRM_DEBUG_KMS("Y/Yf tiling required for 90/270!\n");
> @@ -171,8 +172,9 @@ static int intel_plane_atomic_check(struct drm_plane *plane,
>                 switch (state->fb->pixel_format) {
>                 case DRM_FORMAT_C8:
>                 case DRM_FORMAT_RGB565:
> -                       DRM_DEBUG_KMS("Unsupported pixel format %s for 90/270!\n",
> -                                       drm_get_format_name(state->fb->pixel_format));
> +                       format_name = drm_get_format_name(state->fb->pixel_format);
> +                       DRM_DEBUG_KMS("Unsupported pixel format %s for 90/270!\n", format_name);
> +                       kfree(format_name);
>                         return -EINVAL;
>
>                 default:
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index c457eed..071399b 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -12282,6 +12282,7 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc,
>
>         DRM_DEBUG_KMS("planes on this crtc\n");
>         list_for_each_entry(plane, &dev->mode_config.plane_list, head) {
> +               const char *format_name;
>                 intel_plane = to_intel_plane(plane);
>                 if (intel_plane->pipe != crtc->pipe)
>                         continue;
> @@ -12294,11 +12295,12 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc,
>                         continue;
>                 }
>
> +               format_name = drm_get_format_name(fb->pixel_format);
> +
>                 DRM_DEBUG_KMS("[PLANE:%d:%s] enabled",
>                               plane->base.id, plane->name);
>                 DRM_DEBUG_KMS("\tFB:%d, fb = %ux%u format = %s",
> -                             fb->base.id, fb->width, fb->height,
> -                             drm_get_format_name(fb->pixel_format));
> +                             fb->base.id, fb->width, fb->height, format_name);
>                 DRM_DEBUG_KMS("\tscaler:%d src %dx%d+%d+%d dst %dx%d+%d+%d\n",
>                               state->scaler_id,
>                               state->src.x1 >> 16, state->src.y1 >> 16,
> @@ -12307,6 +12309,8 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc,
>                               state->dst.x1, state->dst.y1,
>                               drm_rect_width(&state->dst),
>                               drm_rect_height(&state->dst));
> +
> +               kfree(format_name);
>         }
>  }
>
> @@ -14936,6 +14940,7 @@ static int intel_framebuffer_init(struct drm_device *dev,
>         unsigned int aligned_height;
>         int ret;
>         u32 pitch_limit, stride_alignment;
> +       const char *format_name;
>
>         WARN_ON(!mutex_is_locked(&dev->struct_mutex));
>
> @@ -15009,16 +15014,18 @@ static int intel_framebuffer_init(struct drm_device *dev,
>                 break;
>         case DRM_FORMAT_XRGB1555:
>                 if (INTEL_INFO(dev)->gen > 3) {
> -                       DRM_DEBUG("unsupported pixel format: %s\n",
> -                                 drm_get_format_name(mode_cmd->pixel_format));
> +                       format_name = drm_get_format_name(mode_cmd->pixel_format);
> +                       DRM_DEBUG("unsupported pixel format: %s\n", format_name);
> +                       kfree(format_name);
>                         return -EINVAL;
>                 }
>                 break;
>         case DRM_FORMAT_ABGR8888:
>                 if (!IS_VALLEYVIEW(dev) && !IS_CHERRYVIEW(dev) &&
>                     INTEL_INFO(dev)->gen < 9) {
> -                       DRM_DEBUG("unsupported pixel format: %s\n",
> -                                 drm_get_format_name(mode_cmd->pixel_format));
> +                       format_name = drm_get_format_name(mode_cmd->pixel_format);
> +                       DRM_DEBUG("unsupported pixel format: %s\n", format_name);
> +                       kfree(format_name);
>                         return -EINVAL;
>                 }
>                 break;
> @@ -15026,15 +15033,17 @@ static int intel_framebuffer_init(struct drm_device *dev,
>         case DRM_FORMAT_XRGB2101010:
>         case DRM_FORMAT_XBGR2101010:
>                 if (INTEL_INFO(dev)->gen < 4) {
> -                       DRM_DEBUG("unsupported pixel format: %s\n",
> -                                 drm_get_format_name(mode_cmd->pixel_format));
> +                       format_name = drm_get_format_name(mode_cmd->pixel_format);
> +                       DRM_DEBUG("unsupported pixel format: %s\n", format_name);
> +                       kfree(format_name);
>                         return -EINVAL;
>                 }
>                 break;
>         case DRM_FORMAT_ABGR2101010:
>                 if (!IS_VALLEYVIEW(dev) && !IS_CHERRYVIEW(dev)) {
> -                       DRM_DEBUG("unsupported pixel format: %s\n",
> -                                 drm_get_format_name(mode_cmd->pixel_format));
> +                       format_name = drm_get_format_name(mode_cmd->pixel_format);
> +                       DRM_DEBUG("unsupported pixel format: %s\n", format_name);
> +                       kfree(format_name);
>                         return -EINVAL;
>                 }
>                 break;
> @@ -15043,14 +15052,16 @@ static int intel_framebuffer_init(struct drm_device *dev,
>         case DRM_FORMAT_YVYU:
>         case DRM_FORMAT_VYUY:
>                 if (INTEL_INFO(dev)->gen < 5) {
> -                       DRM_DEBUG("unsupported pixel format: %s\n",
> -                                 drm_get_format_name(mode_cmd->pixel_format));
> +                       format_name = drm_get_format_name(mode_cmd->pixel_format);
> +                       DRM_DEBUG("unsupported pixel format: %s\n", format_name);
> +                       kfree(format_name);
>                         return -EINVAL;
>                 }
>                 break;
>         default:
> -               DRM_DEBUG("unsupported pixel format: %s\n",
> -                         drm_get_format_name(mode_cmd->pixel_format));
> +               format_name = drm_get_format_name(mode_cmd->pixel_format);
> +               DRM_DEBUG("unsupported pixel format: %s\n", format_name);
> +               kfree(format_name);
>                 return -EINVAL;
>         }
>
> diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
> index a97abc8..981ca3f 100644
> --- a/drivers/gpu/drm/radeon/atombios_crtc.c
> +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
> @@ -1154,6 +1154,7 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
>         u32 tmp, viewport_w, viewport_h;
>         int r;
>         bool bypass_lut = false;
> +       const char *format_name;
>
>         /* no fb bound */
>         if (!atomic && !crtc->primary->fb) {
> @@ -1257,8 +1258,9 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
>                 bypass_lut = true;
>                 break;
>         default:
> -               DRM_ERROR("Unsupported screen format %s\n",
> -                         drm_get_format_name(target_fb->pixel_format));
> +               format_name = drm_get_format_name(target_fb->pixel_format);
> +               DRM_ERROR("Unsupported screen format %s\n", format_name);
> +               kfree(format_name);
>                 return -EINVAL;
>         }
>
> @@ -1469,6 +1471,7 @@ static int avivo_crtc_do_set_base(struct drm_crtc *crtc,
>         u32 viewport_w, viewport_h;
>         int r;
>         bool bypass_lut = false;
> +       const char *format_name;
>
>         /* no fb bound */
>         if (!atomic && !crtc->primary->fb) {
> @@ -1558,8 +1561,9 @@ static int avivo_crtc_do_set_base(struct drm_crtc *crtc,
>                 bypass_lut = true;
>                 break;
>         default:
> -               DRM_ERROR("Unsupported screen format %s\n",
> -                         drm_get_format_name(target_fb->pixel_format));
> +               format_name = drm_get_format_name(target_fb->pixel_format);
> +               DRM_ERROR("Unsupported screen format %s\n", format_name);
> +               kfree(format_name);
>                 return -EINVAL;
>         }
>
> --
> 2.9.3
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Intel-gfx] [PATCH] drm: make drm_get_format_name thread-safe
  2016-11-03 18:52 ` [Intel-gfx] [PATCH] drm: make drm_get_format_name thread-safe Rob Clark
@ 2016-11-08  8:43   ` Daniel Vetter
  0 siblings, 0 replies; 13+ messages in thread
From: Daniel Vetter @ 2016-11-08  8:43 UTC (permalink / raw)
  To: Rob Clark
  Cc: Eric Engestrom, Tom St Denis, Archit Taneja, Flora Cui,
	David Airlie, Intel Graphics Development, Michel Dänzer,
	Linux Kernel Mailing List, dri-devel@lists.freedesktop.org,
	Xinliang Liu, David Zhang, Wei Yongjun, Vitaly Prosyak,
	Daniel Vetter, Junwei Zhang, Alex Deucher, Xinwei Kong

On Thu, Nov 03, 2016 at 02:52:00PM -0400, Rob Clark wrote:
> On Sun, Aug 14, 2016 at 8:02 PM, Eric Engestrom <eric@engestrom.ch> wrote:
> > Signed-off-by: Eric Engestrom <eric@engestrom.ch>
> > ---
> >
> > I moved the main bits to be the first diffs, shouldn't affect anything
> > when applying the patch, but I wanted to ask:
> > I don't like the hard-coded `32` the appears in both kmalloc() and
> > snprintf(), what do you think? If you don't like it either, what would
> > you suggest? Should I #define it?
> >
> > Second question is about the patch mail itself: should I send this kind
> > of patch separated by module, with a note requesting them to be squashed
> > when applying? It has to land as a single patch, but for review it might
> > be easier if people only see the bits they each care about, as well as
> > to collect ack's/r-b's.
> >
> > Cheers,
> >   Eric
> >
> > ---
> >  drivers/gpu/drm/amd/amdgpu/dce_v10_0.c          |  6 ++--
> >  drivers/gpu/drm/amd/amdgpu/dce_v11_0.c          |  6 ++--
> >  drivers/gpu/drm/amd/amdgpu/dce_v8_0.c           |  6 ++--
> >  drivers/gpu/drm/drm_atomic.c                    |  5 ++--
> >  drivers/gpu/drm/drm_crtc.c                      | 21 ++++++++-----
> >  drivers/gpu/drm/drm_fourcc.c                    | 17 ++++++-----
> >  drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c |  6 ++--
> >  drivers/gpu/drm/i915/i915_debugfs.c             | 11 ++++++-
> >  drivers/gpu/drm/i915/intel_atomic_plane.c       |  6 ++--
> >  drivers/gpu/drm/i915/intel_display.c            | 39 ++++++++++++++++---------
> >  drivers/gpu/drm/radeon/atombios_crtc.c          | 12 +++++---
> >  include/drm/drm_fourcc.h                        |  2 +-
> >  12 files changed, 89 insertions(+), 48 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
> > index 0645c85..38216a1 100644
> > --- a/drivers/gpu/drm/drm_fourcc.c
> > +++ b/drivers/gpu/drm/drm_fourcc.c
> > @@ -39,16 +39,14 @@ static char printable_char(int c)
> >   * drm_get_format_name - return a string for drm fourcc format
> >   * @format: format to compute name of
> >   *
> > - * Note that the buffer used by this function is globally shared and owned by
> > - * the function itself.
> > - *
> > - * FIXME: This isn't really multithreading safe.
> > + * Note that the buffer returned by this function is owned by the caller
> > + * and will need to be freed.
> >   */
> >  const char *drm_get_format_name(uint32_t format)
> >  {
> > -       static char buf[32];
> > +       char *buf = kmalloc(32, GFP_KERNEL);
> 
> 
> hmm, I guess I wasn't paying attention at the time this patch came by,
> but unfortunately this makes drm_get_format_name() no longer safe in
> atomic contexts :-/
> 
> We should probably either revert this or have two variants of
> drm_get_format_name()?  (ie. one that is not thread safe but is good
> enough for debugging)

Where do we need that for atomic contexts? I guess worst-case we could do
an auto-GFP trick using drm_can_sleep or something like that.
-Daniel

> 
> BR,
> -R
> 
> > -       snprintf(buf, sizeof(buf),
> > +       snprintf(buf, 32,
> >                  "%c%c%c%c %s-endian (0x%08x)",
> >                  printable_char(format & 0xff),
> >                  printable_char((format >> 8) & 0xff),
> > @@ -73,6 +71,8 @@ EXPORT_SYMBOL(drm_get_format_name);
> >  void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
> >                           int *bpp)
> >  {
> > +       const char *format_name;
> > +
> >         switch (format) {
> >         case DRM_FORMAT_C8:
> >         case DRM_FORMAT_RGB332:
> > @@ -127,8 +127,9 @@ void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
> >                 *bpp = 32;
> >                 break;
> >         default:
> > -               DRM_DEBUG_KMS("unsupported pixel format %s\n",
> > -                             drm_get_format_name(format));
> > +               format_name = drm_get_format_name(format);
> > +               DRM_DEBUG_KMS("unsupported pixel format %s\n", format_name);
> > +               kfree(format_name);
> >                 *depth = 0;
> >                 *bpp = 0;
> >                 break;
> > diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h
> > index 7f90a39..030d22d 100644
> > --- a/include/drm/drm_fourcc.h
> > +++ b/include/drm/drm_fourcc.h
> > @@ -32,6 +32,6 @@ int drm_format_horz_chroma_subsampling(uint32_t format);
> >  int drm_format_vert_chroma_subsampling(uint32_t format);
> >  int drm_format_plane_width(int width, uint32_t format, int plane);
> >  int drm_format_plane_height(int height, uint32_t format, int plane);
> > -const char *drm_get_format_name(uint32_t format);
> > +const char *drm_get_format_name(uint32_t format) __malloc;
> >
> >  #endif /* __DRM_FOURCC_H__ */
> > diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> > index c1b04e9..0bf8959 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> > @@ -2071,6 +2071,7 @@ static int dce_v10_0_crtc_do_set_base(struct drm_crtc *crtc,
> >         u32 tmp, viewport_w, viewport_h;
> >         int r;
> >         bool bypass_lut = false;
> > +       const char *format_name;
> >
> >         /* no fb bound */
> >         if (!atomic && !crtc->primary->fb) {
> > @@ -2182,8 +2183,9 @@ static int dce_v10_0_crtc_do_set_base(struct drm_crtc *crtc,
> >                 bypass_lut = true;
> >                 break;
> >         default:
> > -               DRM_ERROR("Unsupported screen format %s\n",
> > -                       drm_get_format_name(target_fb->pixel_format));
> > +               format_name = drm_get_format_name(target_fb->pixel_format);
> > +               DRM_ERROR("Unsupported screen format %s\n", format_name);
> > +               kfree(format_name);
> >                 return -EINVAL;
> >         }
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> > index d4bf133..1558a97 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> > @@ -2046,6 +2046,7 @@ static int dce_v11_0_crtc_do_set_base(struct drm_crtc *crtc,
> >         u32 tmp, viewport_w, viewport_h;
> >         int r;
> >         bool bypass_lut = false;
> > +       const char *format_name;
> >
> >         /* no fb bound */
> >         if (!atomic && !crtc->primary->fb) {
> > @@ -2157,8 +2158,9 @@ static int dce_v11_0_crtc_do_set_base(struct drm_crtc *crtc,
> >                 bypass_lut = true;
> >                 break;
> >         default:
> > -               DRM_ERROR("Unsupported screen format %s\n",
> > -                       drm_get_format_name(target_fb->pixel_format));
> > +               format_name = drm_get_format_name(target_fb->pixel_format);
> > +               DRM_ERROR("Unsupported screen format %s\n", format_name);
> > +               kfree(format_name);
> >                 return -EINVAL;
> >         }
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> > index 4fdfab1..71a0375 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> > @@ -1952,6 +1952,7 @@ static int dce_v8_0_crtc_do_set_base(struct drm_crtc *crtc,
> >         u32 viewport_w, viewport_h;
> >         int r;
> >         bool bypass_lut = false;
> > +       const char *format_name;
> >
> >         /* no fb bound */
> >         if (!atomic && !crtc->primary->fb) {
> > @@ -2056,8 +2057,9 @@ static int dce_v8_0_crtc_do_set_base(struct drm_crtc *crtc,
> >                 bypass_lut = true;
> >                 break;
> >         default:
> > -               DRM_ERROR("Unsupported screen format %s\n",
> > -                         drm_get_format_name(target_fb->pixel_format));
> > +               format_name = drm_get_format_name(target_fb->pixel_format);
> > +               DRM_ERROR("Unsupported screen format %s\n", format_name);
> > +               kfree(format_name);
> >                 return -EINVAL;
> >         }
> >
> > diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
> > index fa39307..087391f 100644
> > --- a/drivers/gpu/drm/drm_atomic.c
> > +++ b/drivers/gpu/drm/drm_atomic.c
> > @@ -837,8 +837,9 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
> >         /* Check whether this plane supports the fb pixel format. */
> >         ret = drm_plane_check_pixel_format(plane, state->fb->pixel_format);
> >         if (ret) {
> > -               DRM_DEBUG_ATOMIC("Invalid pixel format %s\n",
> > -                                drm_get_format_name(state->fb->pixel_format));
> > +               const char *format_name = drm_get_format_name(state->fb->pixel_format);
> > +               DRM_DEBUG_ATOMIC("Invalid pixel format %s\n", format_name);
> > +               kfree(format_name);
> >                 return ret;
> >         }
> >
> > diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> > index b1dbb60..7da5d33 100644
> > --- a/drivers/gpu/drm/drm_crtc.c
> > +++ b/drivers/gpu/drm/drm_crtc.c
> > @@ -2592,8 +2592,9 @@ static int __setplane_internal(struct drm_plane *plane,
> >         /* Check whether this plane supports the fb pixel format. */
> >         ret = drm_plane_check_pixel_format(plane, fb->pixel_format);
> >         if (ret) {
> > -               DRM_DEBUG_KMS("Invalid pixel format %s\n",
> > -                             drm_get_format_name(fb->pixel_format));
> > +               const char *format_name = drm_get_format_name(fb->pixel_format);
> > +               DRM_DEBUG_KMS("Invalid pixel format %s\n", format_name);
> > +               kfree(format_name);
> >                 goto out;
> >         }
> >
> > @@ -2902,8 +2903,9 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
> >                         ret = drm_plane_check_pixel_format(crtc->primary,
> >                                                            fb->pixel_format);
> >                         if (ret) {
> > -                               DRM_DEBUG_KMS("Invalid pixel format %s\n",
> > -                                       drm_get_format_name(fb->pixel_format));
> > +                               const char *format_name = drm_get_format_name(fb->pixel_format);
> > +                               DRM_DEBUG_KMS("Invalid pixel format %s\n", format_name);
> > +                               kfree(format_name);
> >                                 goto out;
> >                         }
> >                 }
> > @@ -3279,6 +3281,7 @@ int drm_mode_addfb(struct drm_device *dev,
> >  static int format_check(const struct drm_mode_fb_cmd2 *r)
> >  {
> >         uint32_t format = r->pixel_format & ~DRM_FORMAT_BIG_ENDIAN;
> > +       const char *format_name;
> >
> >         switch (format) {
> >         case DRM_FORMAT_C8:
> > @@ -3343,8 +3346,9 @@ static int format_check(const struct drm_mode_fb_cmd2 *r)
> >         case DRM_FORMAT_YVU444:
> >                 return 0;
> >         default:
> > -               DRM_DEBUG_KMS("invalid pixel format %s\n",
> > -                             drm_get_format_name(r->pixel_format));
> > +               format_name = drm_get_format_name(r->pixel_format);
> > +               DRM_DEBUG_KMS("invalid pixel format %s\n", format_name);
> > +               kfree(format_name);
> >                 return -EINVAL;
> >         }
> >  }
> > @@ -3355,8 +3359,9 @@ static int framebuffer_check(const struct drm_mode_fb_cmd2 *r)
> >
> >         ret = format_check(r);
> >         if (ret) {
> > -               DRM_DEBUG_KMS("bad framebuffer format %s\n",
> > -                             drm_get_format_name(r->pixel_format));
> > +               const char *format_name = drm_get_format_name(r->pixel_format);
> > +               DRM_DEBUG_KMS("bad framebuffer format %s\n", format_name);
> > +               kfree(format_name);
> >                 return ret;
> >         }
> >
> > diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> > index c3707d4..ac7fa02 100644
> > --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> > +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> > @@ -608,15 +608,17 @@ static void ade_rdma_set(void __iomem *base, struct drm_framebuffer *fb,
> >                          u32 ch, u32 y, u32 in_h, u32 fmt)
> >  {
> >         struct drm_gem_cma_object *obj = drm_fb_cma_get_gem_obj(fb, 0);
> > +       const char *format_name;
> >         u32 reg_ctrl, reg_addr, reg_size, reg_stride, reg_space, reg_en;
> >         u32 stride = fb->pitches[0];
> >         u32 addr = (u32)obj->paddr + y * stride;
> >
> >         DRM_DEBUG_DRIVER("rdma%d: (y=%d, height=%d), stride=%d, paddr=0x%x\n",
> >                          ch + 1, y, in_h, stride, (u32)obj->paddr);
> > +       format_name = drm_get_format_name(fb->pixel_format);
> >         DRM_DEBUG_DRIVER("addr=0x%x, fb:%dx%d, pixel_format=%d(%s)\n",
> > -                        addr, fb->width, fb->height, fmt,
> > -                        drm_get_format_name(fb->pixel_format));
> > +                        addr, fb->width, fb->height, fmt, format_name);
> > +       kfree(format_name);
> >
> >         /* get reg offset */
> >         reg_ctrl = RD_CH_CTRL(ch);
> > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> > index 844fea7..904720b 100644
> > --- a/drivers/gpu/drm/i915/i915_debugfs.c
> > +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> > @@ -3109,6 +3109,7 @@ static void intel_plane_info(struct seq_file *m, struct intel_crtc *intel_crtc)
> >         for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) {
> >                 struct drm_plane_state *state;
> >                 struct drm_plane *plane = &intel_plane->base;
> > +               const char *format_name;
> >
> >                 if (!plane->state) {
> >                         seq_puts(m, "plane->state is NULL!\n");
> > @@ -3117,6 +3118,12 @@ static void intel_plane_info(struct seq_file *m, struct intel_crtc *intel_crtc)
> >
> >                 state = plane->state;
> >
> > +               if (state->fb) {
> > +                       format_name = drm_get_format_name(state->fb->pixel_format);
> > +               } else {
> > +                       format_name = kstrdup("N/A", GFP_KERNEL);
> > +               }
> > +
> >                 seq_printf(m, "\t--Plane id %d: type=%s, crtc_pos=%4dx%4d, crtc_size=%4dx%4d, src_pos=%d.%04ux%d.%04u, src_size=%d.%04ux%d.%04u, format=%s, rotation=%s\n",
> >                            plane->base.id,
> >                            plane_type(intel_plane->base.type),
> > @@ -3130,8 +3137,10 @@ static void intel_plane_info(struct seq_file *m, struct intel_crtc *intel_crtc)
> >                            ((state->src_w & 0xffff) * 15625) >> 10,
> >                            (state->src_h >> 16),
> >                            ((state->src_h & 0xffff) * 15625) >> 10,
> > -                          state->fb ? drm_get_format_name(state->fb->pixel_format) : "N/A",
> > +                          format_name,
> >                            plane_rotation(state->rotation));
> > +
> > +               kfree(format_name);
> >         }
> >  }
> >
> > diff --git a/drivers/gpu/drm/i915/intel_atomic_plane.c b/drivers/gpu/drm/i915/intel_atomic_plane.c
> > index 7de7721..e06131a 100644
> > --- a/drivers/gpu/drm/i915/intel_atomic_plane.c
> > +++ b/drivers/gpu/drm/i915/intel_atomic_plane.c
> > @@ -157,6 +157,7 @@ static int intel_plane_atomic_check(struct drm_plane *plane,
> >                 crtc_state->base.enable ? crtc_state->pipe_src_h : 0;
> >
> >         if (state->fb && intel_rotation_90_or_270(state->rotation)) {
> > +               const char *format_name;
> >                 if (!(state->fb->modifier[0] == I915_FORMAT_MOD_Y_TILED ||
> >                         state->fb->modifier[0] == I915_FORMAT_MOD_Yf_TILED)) {
> >                         DRM_DEBUG_KMS("Y/Yf tiling required for 90/270!\n");
> > @@ -171,8 +172,9 @@ static int intel_plane_atomic_check(struct drm_plane *plane,
> >                 switch (state->fb->pixel_format) {
> >                 case DRM_FORMAT_C8:
> >                 case DRM_FORMAT_RGB565:
> > -                       DRM_DEBUG_KMS("Unsupported pixel format %s for 90/270!\n",
> > -                                       drm_get_format_name(state->fb->pixel_format));
> > +                       format_name = drm_get_format_name(state->fb->pixel_format);
> > +                       DRM_DEBUG_KMS("Unsupported pixel format %s for 90/270!\n", format_name);
> > +                       kfree(format_name);
> >                         return -EINVAL;
> >
> >                 default:
> > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> > index c457eed..071399b 100644
> > --- a/drivers/gpu/drm/i915/intel_display.c
> > +++ b/drivers/gpu/drm/i915/intel_display.c
> > @@ -12282,6 +12282,7 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc,
> >
> >         DRM_DEBUG_KMS("planes on this crtc\n");
> >         list_for_each_entry(plane, &dev->mode_config.plane_list, head) {
> > +               const char *format_name;
> >                 intel_plane = to_intel_plane(plane);
> >                 if (intel_plane->pipe != crtc->pipe)
> >                         continue;
> > @@ -12294,11 +12295,12 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc,
> >                         continue;
> >                 }
> >
> > +               format_name = drm_get_format_name(fb->pixel_format);
> > +
> >                 DRM_DEBUG_KMS("[PLANE:%d:%s] enabled",
> >                               plane->base.id, plane->name);
> >                 DRM_DEBUG_KMS("\tFB:%d, fb = %ux%u format = %s",
> > -                             fb->base.id, fb->width, fb->height,
> > -                             drm_get_format_name(fb->pixel_format));
> > +                             fb->base.id, fb->width, fb->height, format_name);
> >                 DRM_DEBUG_KMS("\tscaler:%d src %dx%d+%d+%d dst %dx%d+%d+%d\n",
> >                               state->scaler_id,
> >                               state->src.x1 >> 16, state->src.y1 >> 16,
> > @@ -12307,6 +12309,8 @@ static void intel_dump_pipe_config(struct intel_crtc *crtc,
> >                               state->dst.x1, state->dst.y1,
> >                               drm_rect_width(&state->dst),
> >                               drm_rect_height(&state->dst));
> > +
> > +               kfree(format_name);
> >         }
> >  }
> >
> > @@ -14936,6 +14940,7 @@ static int intel_framebuffer_init(struct drm_device *dev,
> >         unsigned int aligned_height;
> >         int ret;
> >         u32 pitch_limit, stride_alignment;
> > +       const char *format_name;
> >
> >         WARN_ON(!mutex_is_locked(&dev->struct_mutex));
> >
> > @@ -15009,16 +15014,18 @@ static int intel_framebuffer_init(struct drm_device *dev,
> >                 break;
> >         case DRM_FORMAT_XRGB1555:
> >                 if (INTEL_INFO(dev)->gen > 3) {
> > -                       DRM_DEBUG("unsupported pixel format: %s\n",
> > -                                 drm_get_format_name(mode_cmd->pixel_format));
> > +                       format_name = drm_get_format_name(mode_cmd->pixel_format);
> > +                       DRM_DEBUG("unsupported pixel format: %s\n", format_name);
> > +                       kfree(format_name);
> >                         return -EINVAL;
> >                 }
> >                 break;
> >         case DRM_FORMAT_ABGR8888:
> >                 if (!IS_VALLEYVIEW(dev) && !IS_CHERRYVIEW(dev) &&
> >                     INTEL_INFO(dev)->gen < 9) {
> > -                       DRM_DEBUG("unsupported pixel format: %s\n",
> > -                                 drm_get_format_name(mode_cmd->pixel_format));
> > +                       format_name = drm_get_format_name(mode_cmd->pixel_format);
> > +                       DRM_DEBUG("unsupported pixel format: %s\n", format_name);
> > +                       kfree(format_name);
> >                         return -EINVAL;
> >                 }
> >                 break;
> > @@ -15026,15 +15033,17 @@ static int intel_framebuffer_init(struct drm_device *dev,
> >         case DRM_FORMAT_XRGB2101010:
> >         case DRM_FORMAT_XBGR2101010:
> >                 if (INTEL_INFO(dev)->gen < 4) {
> > -                       DRM_DEBUG("unsupported pixel format: %s\n",
> > -                                 drm_get_format_name(mode_cmd->pixel_format));
> > +                       format_name = drm_get_format_name(mode_cmd->pixel_format);
> > +                       DRM_DEBUG("unsupported pixel format: %s\n", format_name);
> > +                       kfree(format_name);
> >                         return -EINVAL;
> >                 }
> >                 break;
> >         case DRM_FORMAT_ABGR2101010:
> >                 if (!IS_VALLEYVIEW(dev) && !IS_CHERRYVIEW(dev)) {
> > -                       DRM_DEBUG("unsupported pixel format: %s\n",
> > -                                 drm_get_format_name(mode_cmd->pixel_format));
> > +                       format_name = drm_get_format_name(mode_cmd->pixel_format);
> > +                       DRM_DEBUG("unsupported pixel format: %s\n", format_name);
> > +                       kfree(format_name);
> >                         return -EINVAL;
> >                 }
> >                 break;
> > @@ -15043,14 +15052,16 @@ static int intel_framebuffer_init(struct drm_device *dev,
> >         case DRM_FORMAT_YVYU:
> >         case DRM_FORMAT_VYUY:
> >                 if (INTEL_INFO(dev)->gen < 5) {
> > -                       DRM_DEBUG("unsupported pixel format: %s\n",
> > -                                 drm_get_format_name(mode_cmd->pixel_format));
> > +                       format_name = drm_get_format_name(mode_cmd->pixel_format);
> > +                       DRM_DEBUG("unsupported pixel format: %s\n", format_name);
> > +                       kfree(format_name);
> >                         return -EINVAL;
> >                 }
> >                 break;
> >         default:
> > -               DRM_DEBUG("unsupported pixel format: %s\n",
> > -                         drm_get_format_name(mode_cmd->pixel_format));
> > +               format_name = drm_get_format_name(mode_cmd->pixel_format);
> > +               DRM_DEBUG("unsupported pixel format: %s\n", format_name);
> > +               kfree(format_name);
> >                 return -EINVAL;
> >         }
> >
> > diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
> > index a97abc8..981ca3f 100644
> > --- a/drivers/gpu/drm/radeon/atombios_crtc.c
> > +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
> > @@ -1154,6 +1154,7 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
> >         u32 tmp, viewport_w, viewport_h;
> >         int r;
> >         bool bypass_lut = false;
> > +       const char *format_name;
> >
> >         /* no fb bound */
> >         if (!atomic && !crtc->primary->fb) {
> > @@ -1257,8 +1258,9 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
> >                 bypass_lut = true;
> >                 break;
> >         default:
> > -               DRM_ERROR("Unsupported screen format %s\n",
> > -                         drm_get_format_name(target_fb->pixel_format));
> > +               format_name = drm_get_format_name(target_fb->pixel_format);
> > +               DRM_ERROR("Unsupported screen format %s\n", format_name);
> > +               kfree(format_name);
> >                 return -EINVAL;
> >         }
> >
> > @@ -1469,6 +1471,7 @@ static int avivo_crtc_do_set_base(struct drm_crtc *crtc,
> >         u32 viewport_w, viewport_h;
> >         int r;
> >         bool bypass_lut = false;
> > +       const char *format_name;
> >
> >         /* no fb bound */
> >         if (!atomic && !crtc->primary->fb) {
> > @@ -1558,8 +1561,9 @@ static int avivo_crtc_do_set_base(struct drm_crtc *crtc,
> >                 bypass_lut = true;
> >                 break;
> >         default:
> > -               DRM_ERROR("Unsupported screen format %s\n",
> > -                         drm_get_format_name(target_fb->pixel_format));
> > +               format_name = drm_get_format_name(target_fb->pixel_format);
> > +               DRM_ERROR("Unsupported screen format %s\n", format_name);
> > +               kfree(format_name);
> >                 return -EINVAL;
> >         }
> >
> > --
> > 2.9.3
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2016-11-08  8:43 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-08-15  0:02 [PATCH] drm: make drm_get_format_name thread-safe Eric Engestrom
2016-08-15  5:33 ` ✗ Ro.CI.BAT: failure for " Patchwork
2016-08-15  9:54 ` [PATCH] " Jani Nikula
2016-08-15 12:59   ` Eric Engestrom
2016-08-15 13:13     ` Jani Nikula
2016-08-15 13:52       ` Daniel Vetter
2016-08-15 15:07         ` Eric Engestrom
2016-08-15 15:29         ` [FIXUP] drm: remove `const` attribute to hint at caller that they now own the memory Eric Engestrom
2016-08-16 11:04           ` Jani Nikula
2016-08-16 12:07             ` Daniel Vetter
2016-08-15 16:00 ` ✗ Ro.CI.BAT: failure for drm: make drm_get_format_name thread-safe (rev2) Patchwork
2016-11-03 18:52 ` [Intel-gfx] [PATCH] drm: make drm_get_format_name thread-safe Rob Clark
2016-11-08  8:43   ` Daniel Vetter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox