* [PATCH] drm: Fix GETCONNECTOR regression
@ 2017-06-20 9:16 Daniel Vetter
2017-06-20 9:32 ` Jani Nikula
` (3 more replies)
0 siblings, 4 replies; 12+ messages in thread
From: Daniel Vetter @ 2017-06-20 9:16 UTC (permalink / raw)
To: DRI Development
Cc: H.J. Lu, Daniel Vetter, Intel Graphics Development, Daniel Vetter
In
commit 91eefc05f0ac71902906b2058360e61bd25137fe
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date: Wed Dec 14 00:08:10 2016 +0100
drm: Tighten locking in drm_mode_getconnector
I reordered the logic a bit in that IOCTL, but that broke userspace
since it'll get the new mode list, but not the new property values.
Fix that again.
Fixes: 91eefc05f0ac ("drm: Tighten locking in drm_mode_getconnector")
Cc: Sean Paul <seanpaul@chromium.org>
Cc: Daniel Vetter <daniel.vetter@intel.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: David Airlie <airlied@linux.ie>
Cc: dri-devel@lists.freedesktop.org
Reported-by: "H.J. Lu" <hjl.tools@gmail.com>
Cc: "H.J. Lu" <hjl.tools@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/drm_connector.c | 33 ++++++++++++++++++---------------
1 file changed, 18 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index 5cd61aff7857..e0fd8168a178 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -1293,21 +1293,6 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
if (!connector)
return -ENOENT;
- drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
- encoder = drm_connector_get_encoder(connector);
- if (encoder)
- out_resp->encoder_id = encoder->base.id;
- else
- out_resp->encoder_id = 0;
-
- ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
- (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
- (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
- &out_resp->count_props);
- drm_modeset_unlock(&dev->mode_config.connection_mutex);
- if (ret)
- goto out_unref;
-
for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++)
if (connector->encoder_ids[i] != 0)
encoders_count++;
@@ -1372,6 +1357,24 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
out_resp->count_modes = mode_count;
out:
mutex_unlock(&dev->mode_config.mutex);
+
+ drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
+ encoder = drm_connector_get_encoder(connector);
+ if (encoder)
+ out_resp->encoder_id = encoder->base.id;
+ else
+ out_resp->encoder_id = 0;
+
+ /* Only grab properties after probing, to make sure EDID and other
+ * properties reflect the latest status. */
+ ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
+ (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
+ (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
+ &out_resp->count_props);
+ drm_modeset_unlock(&dev->mode_config.connection_mutex);
+ if (ret)
+ goto out_unref;
+
out_unref:
drm_connector_put(connector);
--
2.11.0
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH] drm: Fix GETCONNECTOR regression
2017-06-20 9:16 [PATCH] drm: Fix GETCONNECTOR regression Daniel Vetter
@ 2017-06-20 9:32 ` Jani Nikula
2017-06-20 16:24 ` H.J. Lu
2017-06-20 9:35 ` ✓ Fi.CI.BAT: success for " Patchwork
` (2 subsequent siblings)
3 siblings, 1 reply; 12+ messages in thread
From: Jani Nikula @ 2017-06-20 9:32 UTC (permalink / raw)
To: DRI Development
Cc: H.J. Lu, David Airlie, Daniel Vetter, Intel Graphics Development,
Daniel Vetter
On Tue, 20 Jun 2017, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> In
>
> commit 91eefc05f0ac71902906b2058360e61bd25137fe
> Author: Daniel Vetter <daniel.vetter@ffwll.ch>
> Date: Wed Dec 14 00:08:10 2016 +0100
>
> drm: Tighten locking in drm_mode_getconnector
>
> I reordered the logic a bit in that IOCTL, but that broke userspace
> since it'll get the new mode list, but not the new property values.
> Fix that again.
>
> Fixes: 91eefc05f0ac ("drm: Tighten locking in drm_mode_getconnector")
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Jani Nikula <jani.nikula@linux.intel.com>
> Cc: David Airlie <airlied@linux.ie>
> Cc: dri-devel@lists.freedesktop.org
> Reported-by: "H.J. Lu" <hjl.tools@gmail.com>
> Cc: "H.J. Lu" <hjl.tools@gmail.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Possibly
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100576
> ---
> drivers/gpu/drm/drm_connector.c | 33 ++++++++++++++++++---------------
> 1 file changed, 18 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> index 5cd61aff7857..e0fd8168a178 100644
> --- a/drivers/gpu/drm/drm_connector.c
> +++ b/drivers/gpu/drm/drm_connector.c
> @@ -1293,21 +1293,6 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
> if (!connector)
> return -ENOENT;
>
> - drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
> - encoder = drm_connector_get_encoder(connector);
> - if (encoder)
> - out_resp->encoder_id = encoder->base.id;
> - else
> - out_resp->encoder_id = 0;
> -
> - ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
> - (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
> - (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
> - &out_resp->count_props);
> - drm_modeset_unlock(&dev->mode_config.connection_mutex);
> - if (ret)
> - goto out_unref;
> -
> for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++)
> if (connector->encoder_ids[i] != 0)
> encoders_count++;
> @@ -1372,6 +1357,24 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
> out_resp->count_modes = mode_count;
> out:
> mutex_unlock(&dev->mode_config.mutex);
> +
> + drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
> + encoder = drm_connector_get_encoder(connector);
> + if (encoder)
> + out_resp->encoder_id = encoder->base.id;
> + else
> + out_resp->encoder_id = 0;
> +
> + /* Only grab properties after probing, to make sure EDID and other
> + * properties reflect the latest status. */
> + ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
> + (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
> + (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
> + &out_resp->count_props);
> + drm_modeset_unlock(&dev->mode_config.connection_mutex);
> + if (ret)
> + goto out_unref;
> +
> out_unref:
> drm_connector_put(connector);
--
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] 12+ messages in thread
* ✓ Fi.CI.BAT: success for drm: Fix GETCONNECTOR regression
2017-06-20 9:16 [PATCH] drm: Fix GETCONNECTOR regression Daniel Vetter
2017-06-20 9:32 ` Jani Nikula
@ 2017-06-20 9:35 ` Patchwork
2017-06-20 18:50 ` [PATCH] " Daniel Vetter
2017-06-20 19:32 ` [Intel-gfx] " Pandiyan, Dhinakaran
3 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2017-06-20 9:35 UTC (permalink / raw)
To: Daniel Vetter; +Cc: intel-gfx
== Series Details ==
Series: drm: Fix GETCONNECTOR regression
URL : https://patchwork.freedesktop.org/series/26034/
State : success
== Summary ==
Series 26034v1 drm: Fix GETCONNECTOR regression
https://patchwork.freedesktop.org/api/1.0/series/26034/revisions/1/mbox/
Test gem_exec_suspend:
Subgroup basic-s4-devices:
dmesg-warn -> PASS (fi-kbl-r) fdo#100125
Test kms_cursor_legacy:
Subgroup basic-busy-flip-before-cursor-atomic:
pass -> FAIL (fi-snb-2600) fdo#100215
fdo#100125 https://bugs.freedesktop.org/show_bug.cgi?id=100125
fdo#100215 https://bugs.freedesktop.org/show_bug.cgi?id=100215
fi-bdw-5557u total:278 pass:267 dwarn:0 dfail:0 fail:0 skip:11 time:462s
fi-bdw-gvtdvm total:278 pass:256 dwarn:8 dfail:0 fail:0 skip:14 time:494s
fi-bsw-n3050 total:278 pass:242 dwarn:0 dfail:0 fail:0 skip:36 time:587s
fi-bxt-j4205 total:278 pass:259 dwarn:0 dfail:0 fail:0 skip:19 time:553s
fi-byt-j1900 total:278 pass:254 dwarn:0 dfail:0 fail:0 skip:24 time:494s
fi-byt-n2820 total:278 pass:250 dwarn:0 dfail:0 fail:0 skip:28 time:486s
fi-glk-2a total:278 pass:259 dwarn:0 dfail:0 fail:0 skip:19 time:582s
fi-hsw-4770 total:278 pass:262 dwarn:0 dfail:0 fail:0 skip:16 time:436s
fi-hsw-4770r total:278 pass:261 dwarn:0 dfail:0 fail:0 skip:16 time:418s
fi-ilk-650 total:278 pass:227 dwarn:0 dfail:0 fail:0 skip:50 time:463s
fi-ivb-3520m total:278 pass:259 dwarn:0 dfail:0 fail:0 skip:18 time:497s
fi-ivb-3770 total:278 pass:259 dwarn:0 dfail:0 fail:0 skip:18 time:518s
fi-kbl-7500u total:278 pass:260 dwarn:0 dfail:0 fail:0 skip:18 time:477s
fi-kbl-7560u total:278 pass:268 dwarn:0 dfail:0 fail:0 skip:10 time:571s
fi-kbl-r total:278 pass:260 dwarn:0 dfail:0 fail:0 skip:18 time:574s
fi-skl-6260u total:278 pass:268 dwarn:0 dfail:0 fail:0 skip:10 time:474s
fi-skl-6700k total:278 pass:256 dwarn:4 dfail:0 fail:0 skip:18 time:518s
fi-skl-6770hq total:278 pass:268 dwarn:0 dfail:0 fail:0 skip:10 time:497s
fi-skl-gvtdvm total:278 pass:265 dwarn:0 dfail:0 fail:0 skip:13 time:506s
fi-snb-2520m total:278 pass:249 dwarn:0 dfail:0 fail:0 skip:28 time:625s
fi-snb-2600 total:278 pass:246 dwarn:0 dfail:0 fail:2 skip:29 time:410s
fi-skl-6700hq failed to connect after reboot
7fd750f0441e3445a3d783b3bb6b4d92be20780c drm-tip: 2017y-06m-20d-08h-32m-41s UTC integration manifest
60e2f01 drm: Fix GETCONNECTOR regression
== Logs ==
For more details see: https://intel-gfx-ci.01.org/CI/Patchwork_4992/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] drm: Fix GETCONNECTOR regression
2017-06-20 9:32 ` Jani Nikula
@ 2017-06-20 16:24 ` H.J. Lu
0 siblings, 0 replies; 12+ messages in thread
From: H.J. Lu @ 2017-06-20 16:24 UTC (permalink / raw)
To: Jani Nikula
Cc: David Airlie, Daniel Vetter, Intel Graphics Development,
DRI Development, Daniel Vetter
On Tue, Jun 20, 2017 at 2:32 AM, Jani Nikula
<jani.nikula@linux.intel.com> wrote:
> On Tue, 20 Jun 2017, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
>> In
>>
>> commit 91eefc05f0ac71902906b2058360e61bd25137fe
>> Author: Daniel Vetter <daniel.vetter@ffwll.ch>
>> Date: Wed Dec 14 00:08:10 2016 +0100
>>
>> drm: Tighten locking in drm_mode_getconnector
>>
>> I reordered the logic a bit in that IOCTL, but that broke userspace
>> since it'll get the new mode list, but not the new property values.
>> Fix that again.
>>
>> Fixes: 91eefc05f0ac ("drm: Tighten locking in drm_mode_getconnector")
>> Cc: Sean Paul <seanpaul@chromium.org>
>> Cc: Daniel Vetter <daniel.vetter@intel.com>
>> Cc: Jani Nikula <jani.nikula@linux.intel.com>
>> Cc: David Airlie <airlied@linux.ie>
>> Cc: dri-devel@lists.freedesktop.org
>> Reported-by: "H.J. Lu" <hjl.tools@gmail.com>
>> Cc: "H.J. Lu" <hjl.tools@gmail.com>
>> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
>
> Possibly
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100576
>
>> ---
>> drivers/gpu/drm/drm_connector.c | 33 ++++++++++++++++++---------------
>> 1 file changed, 18 insertions(+), 15 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
>> index 5cd61aff7857..e0fd8168a178 100644
>> --- a/drivers/gpu/drm/drm_connector.c
>> +++ b/drivers/gpu/drm/drm_connector.c
>> @@ -1293,21 +1293,6 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
>> if (!connector)
>> return -ENOENT;
>>
>> - drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
>> - encoder = drm_connector_get_encoder(connector);
>> - if (encoder)
>> - out_resp->encoder_id = encoder->base.id;
>> - else
>> - out_resp->encoder_id = 0;
>> -
>> - ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
>> - (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
>> - (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
>> - &out_resp->count_props);
>> - drm_modeset_unlock(&dev->mode_config.connection_mutex);
>> - if (ret)
>> - goto out_unref;
>> -
>> for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++)
>> if (connector->encoder_ids[i] != 0)
>> encoders_count++;
>> @@ -1372,6 +1357,24 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
>> out_resp->count_modes = mode_count;
>> out:
>> mutex_unlock(&dev->mode_config.mutex);
>> +
>> + drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
>> + encoder = drm_connector_get_encoder(connector);
>> + if (encoder)
>> + out_resp->encoder_id = encoder->base.id;
>> + else
>> + out_resp->encoder_id = 0;
>> +
>> + /* Only grab properties after probing, to make sure EDID and other
>> + * properties reflect the latest status. */
>> + ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
>> + (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
>> + (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
>> + &out_resp->count_props);
>> + drm_modeset_unlock(&dev->mode_config.connection_mutex);
>> + if (ret)
>> + goto out_unref;
>> +
>> out_unref:
>> drm_connector_put(connector);
>
Yes, it fixed my issue.
Thanks.
--
H.J.
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] drm: Fix GETCONNECTOR regression
2017-06-20 9:16 [PATCH] drm: Fix GETCONNECTOR regression Daniel Vetter
2017-06-20 9:32 ` Jani Nikula
2017-06-20 9:35 ` ✓ Fi.CI.BAT: success for " Patchwork
@ 2017-06-20 18:50 ` Daniel Vetter
2017-06-20 19:32 ` [Intel-gfx] " Pandiyan, Dhinakaran
3 siblings, 0 replies; 12+ messages in thread
From: Daniel Vetter @ 2017-06-20 18:50 UTC (permalink / raw)
To: DRI Development
Cc: H.J. Lu, David Airlie, Daniel Vetter, Intel Graphics Development,
Daniel Vetter
On Tue, Jun 20, 2017 at 11:16 AM, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> In
>
> commit 91eefc05f0ac71902906b2058360e61bd25137fe
> Author: Daniel Vetter <daniel.vetter@ffwll.ch>
> Date: Wed Dec 14 00:08:10 2016 +0100
>
> drm: Tighten locking in drm_mode_getconnector
>
> I reordered the logic a bit in that IOCTL, but that broke userspace
> since it'll get the new mode list, but not the new property values.
> Fix that again.
>
> Fixes: 91eefc05f0ac ("drm: Tighten locking in drm_mode_getconnector")
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Jani Nikula <jani.nikula@linux.intel.com>
> Cc: David Airlie <airlied@linux.ie>
> Cc: dri-devel@lists.freedesktop.org
> Reported-by: "H.J. Lu" <hjl.tools@gmail.com>
> Cc: "H.J. Lu" <hjl.tools@gmail.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Some dim fixes failed me, also needs:
Cc: <stable@vger.kernel.org> # v4.11+
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - 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] 12+ messages in thread
* Re: [Intel-gfx] [PATCH] drm: Fix GETCONNECTOR regression
2017-06-20 9:16 [PATCH] drm: Fix GETCONNECTOR regression Daniel Vetter
` (2 preceding siblings ...)
2017-06-20 18:50 ` [PATCH] " Daniel Vetter
@ 2017-06-20 19:32 ` Pandiyan, Dhinakaran
2017-06-20 20:29 ` Daniel Vetter
3 siblings, 1 reply; 12+ messages in thread
From: Pandiyan, Dhinakaran @ 2017-06-20 19:32 UTC (permalink / raw)
To: daniel.vetter@ffwll.ch
Cc: hjl.tools@gmail.com, intel-gfx@lists.freedesktop.org,
dri-devel@lists.freedesktop.org, Vetter, Daniel
On Tue, 2017-06-20 at 11:16 +0200, Daniel Vetter wrote:
> In
>
> commit 91eefc05f0ac71902906b2058360e61bd25137fe
> Author: Daniel Vetter <daniel.vetter@ffwll.ch>
> Date: Wed Dec 14 00:08:10 2016 +0100
>
> drm: Tighten locking in drm_mode_getconnector
>
> I reordered the logic a bit in that IOCTL, but that broke userspace
> since it'll get the new mode list, but not the new property values.
> Fix that again.
>
> Fixes: 91eefc05f0ac ("drm: Tighten locking in drm_mode_getconnector")
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Jani Nikula <jani.nikula@linux.intel.com>
> Cc: David Airlie <airlied@linux.ie>
> Cc: dri-devel@lists.freedesktop.org
> Reported-by: "H.J. Lu" <hjl.tools@gmail.com>
> Cc: "H.J. Lu" <hjl.tools@gmail.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> ---
> drivers/gpu/drm/drm_connector.c | 33 ++++++++++++++++++---------------
> 1 file changed, 18 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> index 5cd61aff7857..e0fd8168a178 100644
> --- a/drivers/gpu/drm/drm_connector.c
> +++ b/drivers/gpu/drm/drm_connector.c
> @@ -1293,21 +1293,6 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
> if (!connector)
> return -ENOENT;
>
> - drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
> - encoder = drm_connector_get_encoder(connector);
> - if (encoder)
> - out_resp->encoder_id = encoder->base.id;
> - else
> - out_resp->encoder_id = 0;
> -
> - ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
> - (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
> - (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
> - &out_resp->count_props);
> - drm_modeset_unlock(&dev->mode_config.connection_mutex);
> - if (ret)
> - goto out_unref;
> -
> for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++)
> if (connector->encoder_ids[i] != 0)
> encoders_count++;
> @@ -1372,6 +1357,24 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
> out_resp->count_modes = mode_count;
> out:
> mutex_unlock(&dev->mode_config.mutex);
> +
> + drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
> + encoder = drm_connector_get_encoder(connector);
> + if (encoder)
> + out_resp->encoder_id = encoder->base.id;
> + else
> + out_resp->encoder_id = 0;
> +
> + /* Only grab properties after probing, to make sure EDID and other
> + * properties reflect the latest status. */
> + ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
> + (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
> + (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
> + &out_resp->count_props);
Isn't this overwriting the -EFAULT return in case copy_to_user() failed
while copying the modes ?
> + drm_modeset_unlock(&dev->mode_config.connection_mutex);
> + if (ret)
> + goto out_unref;
> +
> out_unref:
> drm_connector_put(connector);
>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH] drm: Fix GETCONNECTOR regression
@ 2017-06-20 20:28 ` Daniel Vetter
0 siblings, 0 replies; 12+ messages in thread
From: Daniel Vetter @ 2017-06-20 20:28 UTC (permalink / raw)
To: DRI Development, Intel Graphics Development
Cc: H.J. Lu, David Airlie, Daniel Vetter, # v4 . 11+, Daniel Vetter,
Pandiyan, Dhinakaran
In
commit 91eefc05f0ac71902906b2058360e61bd25137fe
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date: Wed Dec 14 00:08:10 2016 +0100
drm: Tighten locking in drm_mode_getconnector
I reordered the logic a bit in that IOCTL, but that broke userspace
since it'll get the new mode list, but not the new property values.
Fix that again.
v2: Fix up the error path handling when copy_to_user for the modes
failes (Dhinakaran).
Fixes: 91eefc05f0ac ("drm: Tighten locking in drm_mode_getconnector")
Cc: Sean Paul <seanpaul@chromium.org>
Cc: Daniel Vetter <daniel.vetter@intel.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: David Airlie <airlied@linux.ie>
Cc: dri-devel@lists.freedesktop.org
Reported-by: "H.J. Lu" <hjl.tools@gmail.com>
Tested-by: "H.J. Lu" <hjl.tools@gmail.com>
Cc: <stable@vger.kernel.org> # v4.11+
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100576
Cc: "H.J. Lu" <hjl.tools@gmail.com>
Cc: "Pandiyan, Dhinakaran" <dhinakaran.pandiyan@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/drm_connector.c | 38 ++++++++++++++++++++------------------
1 file changed, 20 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index 5cd61aff7857..8072e6e4c62c 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -1293,21 +1293,6 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
if (!connector)
return -ENOENT;
- drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
- encoder = drm_connector_get_encoder(connector);
- if (encoder)
- out_resp->encoder_id = encoder->base.id;
- else
- out_resp->encoder_id = 0;
-
- ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
- (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
- (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
- &out_resp->count_props);
- drm_modeset_unlock(&dev->mode_config.connection_mutex);
- if (ret)
- goto out_unref;
-
for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++)
if (connector->encoder_ids[i] != 0)
encoders_count++;
@@ -1320,7 +1305,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
if (put_user(connector->encoder_ids[i],
encoder_ptr + copied)) {
ret = -EFAULT;
- goto out_unref;
+ goto out;
}
copied++;
}
@@ -1364,15 +1349,32 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
if (copy_to_user(mode_ptr + copied,
&u_mode, sizeof(u_mode))) {
ret = -EFAULT;
+ mutex_unlock(&dev->mode_config.mutex);
+
goto out;
}
copied++;
}
}
out_resp->count_modes = mode_count;
-out:
mutex_unlock(&dev->mode_config.mutex);
-out_unref:
+
+ drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
+ encoder = drm_connector_get_encoder(connector);
+ if (encoder)
+ out_resp->encoder_id = encoder->base.id;
+ else
+ out_resp->encoder_id = 0;
+
+ /* Only grab properties after probing, to make sure EDID and other
+ * properties reflect the latest status. */
+ ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
+ (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
+ (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
+ &out_resp->count_props);
+ drm_modeset_unlock(&dev->mode_config.connection_mutex);
+
+out:
drm_connector_put(connector);
return ret;
--
2.11.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH] drm: Fix GETCONNECTOR regression
@ 2017-06-20 20:28 ` Daniel Vetter
0 siblings, 0 replies; 12+ messages in thread
From: Daniel Vetter @ 2017-06-20 20:28 UTC (permalink / raw)
To: DRI Development, Intel Graphics Development
Cc: Daniel Vetter, Sean Paul, Daniel Vetter, Jani Nikula,
David Airlie, # v4 . 11+, H.J. Lu, Pandiyan, Dhinakaran
In
commit 91eefc05f0ac71902906b2058360e61bd25137fe
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date: Wed Dec 14 00:08:10 2016 +0100
drm: Tighten locking in drm_mode_getconnector
I reordered the logic a bit in that IOCTL, but that broke userspace
since it'll get the new mode list, but not the new property values.
Fix that again.
v2: Fix up the error path handling when copy_to_user for the modes
failes (Dhinakaran).
Fixes: 91eefc05f0ac ("drm: Tighten locking in drm_mode_getconnector")
Cc: Sean Paul <seanpaul@chromium.org>
Cc: Daniel Vetter <daniel.vetter@intel.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: David Airlie <airlied@linux.ie>
Cc: dri-devel@lists.freedesktop.org
Reported-by: "H.J. Lu" <hjl.tools@gmail.com>
Tested-by: "H.J. Lu" <hjl.tools@gmail.com>
Cc: <stable@vger.kernel.org> # v4.11+
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100576
Cc: "H.J. Lu" <hjl.tools@gmail.com>
Cc: "Pandiyan, Dhinakaran" <dhinakaran.pandiyan@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/drm_connector.c | 38 ++++++++++++++++++++------------------
1 file changed, 20 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index 5cd61aff7857..8072e6e4c62c 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -1293,21 +1293,6 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
if (!connector)
return -ENOENT;
- drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
- encoder = drm_connector_get_encoder(connector);
- if (encoder)
- out_resp->encoder_id = encoder->base.id;
- else
- out_resp->encoder_id = 0;
-
- ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
- (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
- (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
- &out_resp->count_props);
- drm_modeset_unlock(&dev->mode_config.connection_mutex);
- if (ret)
- goto out_unref;
-
for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++)
if (connector->encoder_ids[i] != 0)
encoders_count++;
@@ -1320,7 +1305,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
if (put_user(connector->encoder_ids[i],
encoder_ptr + copied)) {
ret = -EFAULT;
- goto out_unref;
+ goto out;
}
copied++;
}
@@ -1364,15 +1349,32 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
if (copy_to_user(mode_ptr + copied,
&u_mode, sizeof(u_mode))) {
ret = -EFAULT;
+ mutex_unlock(&dev->mode_config.mutex);
+
goto out;
}
copied++;
}
}
out_resp->count_modes = mode_count;
-out:
mutex_unlock(&dev->mode_config.mutex);
-out_unref:
+
+ drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
+ encoder = drm_connector_get_encoder(connector);
+ if (encoder)
+ out_resp->encoder_id = encoder->base.id;
+ else
+ out_resp->encoder_id = 0;
+
+ /* Only grab properties after probing, to make sure EDID and other
+ * properties reflect the latest status. */
+ ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
+ (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
+ (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
+ &out_resp->count_props);
+ drm_modeset_unlock(&dev->mode_config.connection_mutex);
+
+out:
drm_connector_put(connector);
return ret;
--
2.11.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [Intel-gfx] [PATCH] drm: Fix GETCONNECTOR regression
2017-06-20 19:32 ` [Intel-gfx] " Pandiyan, Dhinakaran
@ 2017-06-20 20:29 ` Daniel Vetter
0 siblings, 0 replies; 12+ messages in thread
From: Daniel Vetter @ 2017-06-20 20:29 UTC (permalink / raw)
To: Pandiyan, Dhinakaran
Cc: hjl.tools@gmail.com, intel-gfx@lists.freedesktop.org,
dri-devel@lists.freedesktop.org, Vetter, Daniel
On Tue, Jun 20, 2017 at 9:32 PM, Pandiyan, Dhinakaran
<dhinakaran.pandiyan@intel.com> wrote:
> Isn't this overwriting the -EFAULT return in case copy_to_user() failed
> while copying the modes ?
Indeed, thanks for spotting this. New patch in-flight.
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] drm: Fix GETCONNECTOR regression
2017-06-20 20:28 ` Daniel Vetter
(?)
@ 2017-06-20 21:40 ` Sean Paul
2017-06-21 7:51 ` Daniel Vetter
-1 siblings, 1 reply; 12+ messages in thread
From: Sean Paul @ 2017-06-20 21:40 UTC (permalink / raw)
To: Daniel Vetter
Cc: DRI Development, Intel Graphics Development, Sean Paul,
Daniel Vetter, Jani Nikula, David Airlie, # v4 . 11+, H.J. Lu,
Pandiyan, Dhinakaran
On Tue, Jun 20, 2017 at 10:28:37PM +0200, Daniel Vetter wrote:
> In
>
> commit 91eefc05f0ac71902906b2058360e61bd25137fe
> Author: Daniel Vetter <daniel.vetter@ffwll.ch>
> Date: Wed Dec 14 00:08:10 2016 +0100
>
> drm: Tighten locking in drm_mode_getconnector
>
> I reordered the logic a bit in that IOCTL, but that broke userspace
> since it'll get the new mode list, but not the new property values.
> Fix that again.
>
> v2: Fix up the error path handling when copy_to_user for the modes
> failes (Dhinakaran).
>
> Fixes: 91eefc05f0ac ("drm: Tighten locking in drm_mode_getconnector")
> Cc: Sean Paul <seanpaul@chromium.org>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Jani Nikula <jani.nikula@linux.intel.com>
> Cc: David Airlie <airlied@linux.ie>
> Cc: dri-devel@lists.freedesktop.org
> Reported-by: "H.J. Lu" <hjl.tools@gmail.com>
> Tested-by: "H.J. Lu" <hjl.tools@gmail.com>
> Cc: <stable@vger.kernel.org> # v4.11+
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100576
> Cc: "H.J. Lu" <hjl.tools@gmail.com>
> Cc: "Pandiyan, Dhinakaran" <dhinakaran.pandiyan@intel.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Yep, lgtm
Reviewed-by: Sean Paul <seanpaul@chromium.org>
> ---
> drivers/gpu/drm/drm_connector.c | 38 ++++++++++++++++++++------------------
> 1 file changed, 20 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> index 5cd61aff7857..8072e6e4c62c 100644
> --- a/drivers/gpu/drm/drm_connector.c
> +++ b/drivers/gpu/drm/drm_connector.c
> @@ -1293,21 +1293,6 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
> if (!connector)
> return -ENOENT;
>
> - drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
> - encoder = drm_connector_get_encoder(connector);
> - if (encoder)
> - out_resp->encoder_id = encoder->base.id;
> - else
> - out_resp->encoder_id = 0;
> -
> - ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
> - (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
> - (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
> - &out_resp->count_props);
> - drm_modeset_unlock(&dev->mode_config.connection_mutex);
> - if (ret)
> - goto out_unref;
> -
> for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++)
> if (connector->encoder_ids[i] != 0)
> encoders_count++;
> @@ -1320,7 +1305,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
> if (put_user(connector->encoder_ids[i],
> encoder_ptr + copied)) {
> ret = -EFAULT;
> - goto out_unref;
> + goto out;
> }
> copied++;
> }
> @@ -1364,15 +1349,32 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
> if (copy_to_user(mode_ptr + copied,
> &u_mode, sizeof(u_mode))) {
> ret = -EFAULT;
> + mutex_unlock(&dev->mode_config.mutex);
> +
> goto out;
> }
> copied++;
> }
> }
> out_resp->count_modes = mode_count;
> -out:
> mutex_unlock(&dev->mode_config.mutex);
> -out_unref:
> +
> + drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
> + encoder = drm_connector_get_encoder(connector);
> + if (encoder)
> + out_resp->encoder_id = encoder->base.id;
> + else
> + out_resp->encoder_id = 0;
> +
> + /* Only grab properties after probing, to make sure EDID and other
> + * properties reflect the latest status. */
> + ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
> + (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
> + (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
> + &out_resp->count_props);
> + drm_modeset_unlock(&dev->mode_config.connection_mutex);
> +
> +out:
> drm_connector_put(connector);
>
> return ret;
> --
> 2.11.0
--
Sean Paul, Software Engineer, Google / Chromium OS
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] drm: Fix GETCONNECTOR regression
2017-06-20 21:40 ` Sean Paul
@ 2017-06-21 7:51 ` Daniel Vetter
0 siblings, 0 replies; 12+ messages in thread
From: Daniel Vetter @ 2017-06-21 7:51 UTC (permalink / raw)
To: Sean Paul
Cc: H.J. Lu, Daniel Vetter, Intel Graphics Development,
DRI Development, Daniel Vetter, # v4 . 11+, Pandiyan, Dhinakaran
On Tue, Jun 20, 2017 at 05:40:25PM -0400, Sean Paul wrote:
> On Tue, Jun 20, 2017 at 10:28:37PM +0200, Daniel Vetter wrote:
> > In
> >
> > commit 91eefc05f0ac71902906b2058360e61bd25137fe
> > Author: Daniel Vetter <daniel.vetter@ffwll.ch>
> > Date: Wed Dec 14 00:08:10 2016 +0100
> >
> > drm: Tighten locking in drm_mode_getconnector
> >
> > I reordered the logic a bit in that IOCTL, but that broke userspace
> > since it'll get the new mode list, but not the new property values.
> > Fix that again.
> >
> > v2: Fix up the error path handling when copy_to_user for the modes
> > failes (Dhinakaran).
> >
> > Fixes: 91eefc05f0ac ("drm: Tighten locking in drm_mode_getconnector")
> > Cc: Sean Paul <seanpaul@chromium.org>
> > Cc: Daniel Vetter <daniel.vetter@intel.com>
> > Cc: Jani Nikula <jani.nikula@linux.intel.com>
> > Cc: David Airlie <airlied@linux.ie>
> > Cc: dri-devel@lists.freedesktop.org
> > Reported-by: "H.J. Lu" <hjl.tools@gmail.com>
> > Tested-by: "H.J. Lu" <hjl.tools@gmail.com>
> > Cc: <stable@vger.kernel.org> # v4.11+
> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100576
> > Cc: "H.J. Lu" <hjl.tools@gmail.com>
> > Cc: "Pandiyan, Dhinakaran" <dhinakaran.pandiyan@intel.com>
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
>
> Yep, lgtm
>
>
> Reviewed-by: Sean Paul <seanpaul@chromium.org>
Pushed to -fixes, thanks for the review.
-Daniel
>
> > ---
> > drivers/gpu/drm/drm_connector.c | 38 ++++++++++++++++++++------------------
> > 1 file changed, 20 insertions(+), 18 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> > index 5cd61aff7857..8072e6e4c62c 100644
> > --- a/drivers/gpu/drm/drm_connector.c
> > +++ b/drivers/gpu/drm/drm_connector.c
> > @@ -1293,21 +1293,6 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
> > if (!connector)
> > return -ENOENT;
> >
> > - drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
> > - encoder = drm_connector_get_encoder(connector);
> > - if (encoder)
> > - out_resp->encoder_id = encoder->base.id;
> > - else
> > - out_resp->encoder_id = 0;
> > -
> > - ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
> > - (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
> > - (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
> > - &out_resp->count_props);
> > - drm_modeset_unlock(&dev->mode_config.connection_mutex);
> > - if (ret)
> > - goto out_unref;
> > -
> > for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++)
> > if (connector->encoder_ids[i] != 0)
> > encoders_count++;
> > @@ -1320,7 +1305,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
> > if (put_user(connector->encoder_ids[i],
> > encoder_ptr + copied)) {
> > ret = -EFAULT;
> > - goto out_unref;
> > + goto out;
> > }
> > copied++;
> > }
> > @@ -1364,15 +1349,32 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
> > if (copy_to_user(mode_ptr + copied,
> > &u_mode, sizeof(u_mode))) {
> > ret = -EFAULT;
> > + mutex_unlock(&dev->mode_config.mutex);
> > +
> > goto out;
> > }
> > copied++;
> > }
> > }
> > out_resp->count_modes = mode_count;
> > -out:
> > mutex_unlock(&dev->mode_config.mutex);
> > -out_unref:
> > +
> > + drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
> > + encoder = drm_connector_get_encoder(connector);
> > + if (encoder)
> > + out_resp->encoder_id = encoder->base.id;
> > + else
> > + out_resp->encoder_id = 0;
> > +
> > + /* Only grab properties after probing, to make sure EDID and other
> > + * properties reflect the latest status. */
> > + ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
> > + (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
> > + (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
> > + &out_resp->count_props);
> > + drm_modeset_unlock(&dev->mode_config.connection_mutex);
> > +
> > +out:
> > drm_connector_put(connector);
> >
> > return ret;
> > --
> > 2.11.0
>
> --
> Sean Paul, Software Engineer, Google / Chromium OS
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] drm: Fix GETCONNECTOR regression
@ 2017-06-21 7:51 ` Daniel Vetter
0 siblings, 0 replies; 12+ messages in thread
From: Daniel Vetter @ 2017-06-21 7:51 UTC (permalink / raw)
To: Sean Paul
Cc: Daniel Vetter, DRI Development, Intel Graphics Development,
Daniel Vetter, Jani Nikula, David Airlie, # v4 . 11+, H.J. Lu,
Pandiyan, Dhinakaran
On Tue, Jun 20, 2017 at 05:40:25PM -0400, Sean Paul wrote:
> On Tue, Jun 20, 2017 at 10:28:37PM +0200, Daniel Vetter wrote:
> > In
> >
> > commit 91eefc05f0ac71902906b2058360e61bd25137fe
> > Author: Daniel Vetter <daniel.vetter@ffwll.ch>
> > Date: Wed Dec 14 00:08:10 2016 +0100
> >
> > drm: Tighten locking in drm_mode_getconnector
> >
> > I reordered the logic a bit in that IOCTL, but that broke userspace
> > since it'll get the new mode list, but not the new property values.
> > Fix that again.
> >
> > v2: Fix up the error path handling when copy_to_user for the modes
> > failes (Dhinakaran).
> >
> > Fixes: 91eefc05f0ac ("drm: Tighten locking in drm_mode_getconnector")
> > Cc: Sean Paul <seanpaul@chromium.org>
> > Cc: Daniel Vetter <daniel.vetter@intel.com>
> > Cc: Jani Nikula <jani.nikula@linux.intel.com>
> > Cc: David Airlie <airlied@linux.ie>
> > Cc: dri-devel@lists.freedesktop.org
> > Reported-by: "H.J. Lu" <hjl.tools@gmail.com>
> > Tested-by: "H.J. Lu" <hjl.tools@gmail.com>
> > Cc: <stable@vger.kernel.org> # v4.11+
> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100576
> > Cc: "H.J. Lu" <hjl.tools@gmail.com>
> > Cc: "Pandiyan, Dhinakaran" <dhinakaran.pandiyan@intel.com>
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
>
> Yep, lgtm
>
>
> Reviewed-by: Sean Paul <seanpaul@chromium.org>
Pushed to -fixes, thanks for the review.
-Daniel
>
> > ---
> > drivers/gpu/drm/drm_connector.c | 38 ++++++++++++++++++++------------------
> > 1 file changed, 20 insertions(+), 18 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> > index 5cd61aff7857..8072e6e4c62c 100644
> > --- a/drivers/gpu/drm/drm_connector.c
> > +++ b/drivers/gpu/drm/drm_connector.c
> > @@ -1293,21 +1293,6 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
> > if (!connector)
> > return -ENOENT;
> >
> > - drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
> > - encoder = drm_connector_get_encoder(connector);
> > - if (encoder)
> > - out_resp->encoder_id = encoder->base.id;
> > - else
> > - out_resp->encoder_id = 0;
> > -
> > - ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
> > - (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
> > - (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
> > - &out_resp->count_props);
> > - drm_modeset_unlock(&dev->mode_config.connection_mutex);
> > - if (ret)
> > - goto out_unref;
> > -
> > for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++)
> > if (connector->encoder_ids[i] != 0)
> > encoders_count++;
> > @@ -1320,7 +1305,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
> > if (put_user(connector->encoder_ids[i],
> > encoder_ptr + copied)) {
> > ret = -EFAULT;
> > - goto out_unref;
> > + goto out;
> > }
> > copied++;
> > }
> > @@ -1364,15 +1349,32 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
> > if (copy_to_user(mode_ptr + copied,
> > &u_mode, sizeof(u_mode))) {
> > ret = -EFAULT;
> > + mutex_unlock(&dev->mode_config.mutex);
> > +
> > goto out;
> > }
> > copied++;
> > }
> > }
> > out_resp->count_modes = mode_count;
> > -out:
> > mutex_unlock(&dev->mode_config.mutex);
> > -out_unref:
> > +
> > + drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
> > + encoder = drm_connector_get_encoder(connector);
> > + if (encoder)
> > + out_resp->encoder_id = encoder->base.id;
> > + else
> > + out_resp->encoder_id = 0;
> > +
> > + /* Only grab properties after probing, to make sure EDID and other
> > + * properties reflect the latest status. */
> > + ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
> > + (uint32_t __user *)(unsigned long)(out_resp->props_ptr),
> > + (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr),
> > + &out_resp->count_props);
> > + drm_modeset_unlock(&dev->mode_config.connection_mutex);
> > +
> > +out:
> > drm_connector_put(connector);
> >
> > return ret;
> > --
> > 2.11.0
>
> --
> Sean Paul, Software Engineer, Google / Chromium OS
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2017-06-21 7:51 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-06-20 9:16 [PATCH] drm: Fix GETCONNECTOR regression Daniel Vetter
2017-06-20 9:32 ` Jani Nikula
2017-06-20 16:24 ` H.J. Lu
2017-06-20 9:35 ` ✓ Fi.CI.BAT: success for " Patchwork
2017-06-20 18:50 ` [PATCH] " Daniel Vetter
2017-06-20 19:32 ` [Intel-gfx] " Pandiyan, Dhinakaran
2017-06-20 20:29 ` Daniel Vetter
-- strict thread matches above, loose matches on Subject: below --
2017-06-20 20:28 Daniel Vetter
2017-06-20 20:28 ` Daniel Vetter
2017-06-20 21:40 ` Sean Paul
2017-06-21 7:51 ` Daniel Vetter
2017-06-21 7:51 ` Daniel Vetter
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.