|
@@ -117,10 +117,18 @@ static int vc4_atomic_commit(struct drm_device *dev,
|
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
|
|
|
|
|
|
/* Make sure that any outstanding modesets have finished. */
|
|
/* Make sure that any outstanding modesets have finished. */
|
|
|
- ret = down_interruptible(&vc4->async_modeset);
|
|
|
|
|
- if (ret) {
|
|
|
|
|
- kfree(c);
|
|
|
|
|
- return ret;
|
|
|
|
|
|
|
+ if (nonblock) {
|
|
|
|
|
+ ret = down_trylock(&vc4->async_modeset);
|
|
|
|
|
+ if (ret) {
|
|
|
|
|
+ kfree(c);
|
|
|
|
|
+ return -EBUSY;
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ ret = down_interruptible(&vc4->async_modeset);
|
|
|
|
|
+ if (ret) {
|
|
|
|
|
+ kfree(c);
|
|
|
|
|
+ return ret;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
ret = drm_atomic_helper_prepare_planes(dev, state);
|
|
ret = drm_atomic_helper_prepare_planes(dev, state);
|