Explorar o código

Merge branch 'gma500-next' of git://github.com/patjak/drm-gma500 into drm-next

Only two patches this time around. One trivial and one locking fix.

* 'gma500-next' of git://github.com/patjak/drm-gma500:
  drm/gma500: Lock struct_mutex around cursor updates
  drivers: gpu: Mark function as static in cdv_intel_dp.c
Dave Airlie %!s(int64=11) %!d(string=hai) anos
pai
achega
5a0abe30be

+ 1 - 1
drivers/gpu/drm/gma500/cdv_intel_dp.c

@@ -678,7 +678,7 @@ cdv_intel_dp_i2c_init(struct gma_connector *connector,
 	return ret;
 	return ret;
 }
 }
 
 
-void cdv_intel_fixed_panel_mode(struct drm_display_mode *fixed_mode,
+static void cdv_intel_fixed_panel_mode(struct drm_display_mode *fixed_mode,
 	struct drm_display_mode *adjusted_mode)
 	struct drm_display_mode *adjusted_mode)
 {
 {
 	adjusted_mode->hdisplay = fixed_mode->hdisplay;
 	adjusted_mode->hdisplay = fixed_mode->hdisplay;

+ 10 - 2
drivers/gpu/drm/gma500/gma_display.c

@@ -349,6 +349,7 @@ int gma_crtc_cursor_set(struct drm_crtc *crtc,
 	/* If we didn't get a handle then turn the cursor off */
 	/* If we didn't get a handle then turn the cursor off */
 	if (!handle) {
 	if (!handle) {
 		temp = CURSOR_MODE_DISABLE;
 		temp = CURSOR_MODE_DISABLE;
+		mutex_lock(&dev->struct_mutex);
 
 
 		if (gma_power_begin(dev, false)) {
 		if (gma_power_begin(dev, false)) {
 			REG_WRITE(control, temp);
 			REG_WRITE(control, temp);
@@ -365,6 +366,7 @@ int gma_crtc_cursor_set(struct drm_crtc *crtc,
 			gma_crtc->cursor_obj = NULL;
 			gma_crtc->cursor_obj = NULL;
 		}
 		}
 
 
+		mutex_unlock(&dev->struct_mutex);
 		return 0;
 		return 0;
 	}
 	}
 
 
@@ -374,9 +376,12 @@ int gma_crtc_cursor_set(struct drm_crtc *crtc,
 		return -EINVAL;
 		return -EINVAL;
 	}
 	}
 
 
+	mutex_lock(&dev->struct_mutex);
 	obj = drm_gem_object_lookup(dev, file_priv, handle);
 	obj = drm_gem_object_lookup(dev, file_priv, handle);
-	if (!obj)
-		return -ENOENT;
+	if (!obj) {
+		ret = -ENOENT;
+		goto unlock;
+	}
 
 
 	if (obj->size < width * height * 4) {
 	if (obj->size < width * height * 4) {
 		dev_dbg(dev->dev, "Buffer is too small\n");
 		dev_dbg(dev->dev, "Buffer is too small\n");
@@ -440,10 +445,13 @@ int gma_crtc_cursor_set(struct drm_crtc *crtc,
 	}
 	}
 
 
 	gma_crtc->cursor_obj = obj;
 	gma_crtc->cursor_obj = obj;
+unlock:
+	mutex_unlock(&dev->struct_mutex);
 	return ret;
 	return ret;
 
 
 unref_cursor:
 unref_cursor:
 	drm_gem_object_unreference(obj);
 	drm_gem_object_unreference(obj);
+	mutex_unlock(&dev->struct_mutex);
 	return ret;
 	return ret;
 }
 }