drm/radeon/kms: drop taking lock around crtc lookup.
We only add/remove crtcs at driver load, you cannot remove when the GPU is running a CS packet since the fd is open, when GPU hotplugging on radeons actually is needed all this locking needs a review and I've started re-working kms core locking to deal with this better. But for now avoid long delays in CS processing when hotplug detect is happening in a different thread. this fixes a regression introduced with hotplug detection. Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Родитель
c42750b026
Коммит
29508eb66b
|
@ -333,7 +333,6 @@ static int evergreen_cs_packet_parse_vline(struct radeon_cs_parser *p)
|
||||||
header = radeon_get_ib_value(p, h_idx);
|
header = radeon_get_ib_value(p, h_idx);
|
||||||
crtc_id = radeon_get_ib_value(p, h_idx + 2 + 7 + 1);
|
crtc_id = radeon_get_ib_value(p, h_idx + 2 + 7 + 1);
|
||||||
reg = CP_PACKET0_GET_REG(header);
|
reg = CP_PACKET0_GET_REG(header);
|
||||||
mutex_lock(&p->rdev->ddev->mode_config.mutex);
|
|
||||||
obj = drm_mode_object_find(p->rdev->ddev, crtc_id, DRM_MODE_OBJECT_CRTC);
|
obj = drm_mode_object_find(p->rdev->ddev, crtc_id, DRM_MODE_OBJECT_CRTC);
|
||||||
if (!obj) {
|
if (!obj) {
|
||||||
DRM_ERROR("cannot find crtc %d\n", crtc_id);
|
DRM_ERROR("cannot find crtc %d\n", crtc_id);
|
||||||
|
@ -368,7 +367,6 @@ static int evergreen_cs_packet_parse_vline(struct radeon_cs_parser *p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
mutex_unlock(&p->rdev->ddev->mode_config.mutex);
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1230,7 +1230,6 @@ int r100_cs_packet_parse_vline(struct radeon_cs_parser *p)
|
||||||
header = radeon_get_ib_value(p, h_idx);
|
header = radeon_get_ib_value(p, h_idx);
|
||||||
crtc_id = radeon_get_ib_value(p, h_idx + 5);
|
crtc_id = radeon_get_ib_value(p, h_idx + 5);
|
||||||
reg = CP_PACKET0_GET_REG(header);
|
reg = CP_PACKET0_GET_REG(header);
|
||||||
mutex_lock(&p->rdev->ddev->mode_config.mutex);
|
|
||||||
obj = drm_mode_object_find(p->rdev->ddev, crtc_id, DRM_MODE_OBJECT_CRTC);
|
obj = drm_mode_object_find(p->rdev->ddev, crtc_id, DRM_MODE_OBJECT_CRTC);
|
||||||
if (!obj) {
|
if (!obj) {
|
||||||
DRM_ERROR("cannot find crtc %d\n", crtc_id);
|
DRM_ERROR("cannot find crtc %d\n", crtc_id);
|
||||||
|
@ -1264,7 +1263,6 @@ int r100_cs_packet_parse_vline(struct radeon_cs_parser *p)
|
||||||
ib[h_idx + 3] |= RADEON_ENG_DISPLAY_SELECT_CRTC1;
|
ib[h_idx + 3] |= RADEON_ENG_DISPLAY_SELECT_CRTC1;
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
mutex_unlock(&p->rdev->ddev->mode_config.mutex);
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -585,7 +585,7 @@ static int r600_cs_packet_parse_vline(struct radeon_cs_parser *p)
|
||||||
header = radeon_get_ib_value(p, h_idx);
|
header = radeon_get_ib_value(p, h_idx);
|
||||||
crtc_id = radeon_get_ib_value(p, h_idx + 2 + 7 + 1);
|
crtc_id = radeon_get_ib_value(p, h_idx + 2 + 7 + 1);
|
||||||
reg = CP_PACKET0_GET_REG(header);
|
reg = CP_PACKET0_GET_REG(header);
|
||||||
mutex_lock(&p->rdev->ddev->mode_config.mutex);
|
|
||||||
obj = drm_mode_object_find(p->rdev->ddev, crtc_id, DRM_MODE_OBJECT_CRTC);
|
obj = drm_mode_object_find(p->rdev->ddev, crtc_id, DRM_MODE_OBJECT_CRTC);
|
||||||
if (!obj) {
|
if (!obj) {
|
||||||
DRM_ERROR("cannot find crtc %d\n", crtc_id);
|
DRM_ERROR("cannot find crtc %d\n", crtc_id);
|
||||||
|
@ -620,7 +620,6 @@ static int r600_cs_packet_parse_vline(struct radeon_cs_parser *p)
|
||||||
ib[h_idx + 4] = AVIVO_D2MODE_VLINE_STATUS >> 2;
|
ib[h_idx + 4] = AVIVO_D2MODE_VLINE_STATUS >> 2;
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
mutex_unlock(&p->rdev->ddev->mode_config.mutex);
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче