1
0
Fork 0

drm: Pass struct drm_file * to __drm_mode_object_find [v2]

This will allow __drm_mode_object_file to be extended to perform
access control checks based on the file in use.

v2: Also fix up vboxvideo driver in staging

[airlied: merging early as this is an API change]

Suggested-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
(cherry picked from commit 418da17214)
pull/10/head
Keith Packard 2017-03-14 23:25:07 -07:00 committed by Jason Liu
parent 78e05f5ae0
commit b65bdf9c68
37 changed files with 85 additions and 73 deletions

View File

@ -224,7 +224,7 @@ amdgpu_connector_update_scratch_regs(struct drm_connector *connector,
if (connector->encoder_ids[i] == 0) if (connector->encoder_ids[i] == 0)
break; break;
encoder = drm_encoder_find(connector->dev, encoder = drm_encoder_find(connector->dev, NULL,
connector->encoder_ids[i]); connector->encoder_ids[i]);
if (!encoder) if (!encoder)
continue; continue;
@ -249,7 +249,7 @@ amdgpu_connector_find_encoder(struct drm_connector *connector,
for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
if (connector->encoder_ids[i] == 0) if (connector->encoder_ids[i] == 0)
break; break;
encoder = drm_encoder_find(connector->dev, encoder = drm_encoder_find(connector->dev, NULL,
connector->encoder_ids[i]); connector->encoder_ids[i]);
if (!encoder) if (!encoder)
continue; continue;
@ -367,7 +367,7 @@ amdgpu_connector_best_single_encoder(struct drm_connector *connector)
/* pick the encoder ids */ /* pick the encoder ids */
if (enc_id) if (enc_id)
return drm_encoder_find(connector->dev, enc_id); return drm_encoder_find(connector->dev, NULL, enc_id);
return NULL; return NULL;
} }
@ -1084,7 +1084,7 @@ amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force)
if (connector->encoder_ids[i] == 0) if (connector->encoder_ids[i] == 0)
break; break;
encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]); encoder = drm_encoder_find(connector->dev, NULL, connector->encoder_ids[i]);
if (!encoder) if (!encoder)
continue; continue;
@ -1143,7 +1143,7 @@ amdgpu_connector_dvi_encoder(struct drm_connector *connector)
if (connector->encoder_ids[i] == 0) if (connector->encoder_ids[i] == 0)
break; break;
encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]); encoder = drm_encoder_find(connector->dev, NULL, connector->encoder_ids[i]);
if (!encoder) if (!encoder)
continue; continue;
@ -1162,7 +1162,7 @@ amdgpu_connector_dvi_encoder(struct drm_connector *connector)
/* then check use digitial */ /* then check use digitial */
/* pick the first one */ /* pick the first one */
if (enc_id) if (enc_id)
return drm_encoder_find(connector->dev, enc_id); return drm_encoder_find(connector->dev, NULL, enc_id);
return NULL; return NULL;
} }
@ -1303,7 +1303,7 @@ u16 amdgpu_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *conn
if (connector->encoder_ids[i] == 0) if (connector->encoder_ids[i] == 0)
break; break;
encoder = drm_encoder_find(connector->dev, encoder = drm_encoder_find(connector->dev, NULL,
connector->encoder_ids[i]); connector->encoder_ids[i]);
if (!encoder) if (!encoder)
continue; continue;
@ -1332,7 +1332,7 @@ static bool amdgpu_connector_encoder_is_hbr2(struct drm_connector *connector)
for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
if (connector->encoder_ids[i] == 0) if (connector->encoder_ids[i] == 0)
break; break;
encoder = drm_encoder_find(connector->dev, encoder = drm_encoder_find(connector->dev, NULL,
connector->encoder_ids[i]); connector->encoder_ids[i]);
if (!encoder) if (!encoder)
continue; continue;

View File

@ -288,7 +288,7 @@ dce_virtual_encoder(struct drm_connector *connector)
if (connector->encoder_ids[i] == 0) if (connector->encoder_ids[i] == 0)
break; break;
encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]); encoder = drm_encoder_find(connector->dev, NULL, connector->encoder_ids[i]);
if (!encoder) if (!encoder)
continue; continue;
@ -298,7 +298,7 @@ dce_virtual_encoder(struct drm_connector *connector)
/* pick the first one */ /* pick the first one */
if (enc_id) if (enc_id)
return drm_encoder_find(connector->dev, enc_id); return drm_encoder_find(connector->dev, NULL, enc_id);
return NULL; return NULL;
} }

View File

@ -714,7 +714,7 @@ static struct drm_encoder *ast_best_single_encoder(struct drm_connector *connect
int enc_id = connector->encoder_ids[0]; int enc_id = connector->encoder_ids[0];
/* pick the encoder ids */ /* pick the encoder ids */
if (enc_id) if (enc_id)
return drm_encoder_find(connector->dev, enc_id); return drm_encoder_find(connector->dev, NULL, enc_id);
return NULL; return NULL;
} }

View File

@ -213,7 +213,7 @@ bochs_connector_best_encoder(struct drm_connector *connector)
int enc_id = connector->encoder_ids[0]; int enc_id = connector->encoder_ids[0];
/* pick the encoder ids */ /* pick the encoder ids */
if (enc_id) if (enc_id)
return drm_encoder_find(connector->dev, enc_id); return drm_encoder_find(connector->dev, NULL, enc_id);
return NULL; return NULL;
} }

View File

@ -463,7 +463,7 @@ static struct drm_encoder *cirrus_connector_best_encoder(struct drm_connector
int enc_id = connector->encoder_ids[0]; int enc_id = connector->encoder_ids[0];
/* pick the encoder ids */ /* pick the encoder ids */
if (enc_id) if (enc_id)
return drm_encoder_find(connector->dev, enc_id); return drm_encoder_find(connector->dev, NULL, enc_id);
return NULL; return NULL;
} }

View File

@ -729,7 +729,7 @@ static int drm_atomic_plane_set_property(struct drm_plane *plane,
struct drm_mode_config *config = &dev->mode_config; struct drm_mode_config *config = &dev->mode_config;
if (property == config->prop_fb_id) { if (property == config->prop_fb_id) {
struct drm_framebuffer *fb = drm_framebuffer_lookup(dev, val); struct drm_framebuffer *fb = drm_framebuffer_lookup(dev, NULL, val);
drm_atomic_set_fb_for_plane(state, fb); drm_atomic_set_fb_for_plane(state, fb);
if (fb) if (fb)
drm_framebuffer_put(fb); drm_framebuffer_put(fb);
@ -745,7 +745,7 @@ static int drm_atomic_plane_set_property(struct drm_plane *plane,
return -EINVAL; return -EINVAL;
} else if (property == config->prop_crtc_id) { } else if (property == config->prop_crtc_id) {
struct drm_crtc *crtc = drm_crtc_find(dev, val); struct drm_crtc *crtc = drm_crtc_find(dev, NULL, val);
return drm_atomic_set_crtc_for_plane(state, crtc); return drm_atomic_set_crtc_for_plane(state, crtc);
} else if (property == config->prop_crtc_x) { } else if (property == config->prop_crtc_x) {
state->crtc_x = U642I64(val); state->crtc_x = U642I64(val);
@ -1160,7 +1160,7 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector,
struct drm_mode_config *config = &dev->mode_config; struct drm_mode_config *config = &dev->mode_config;
if (property == config->prop_crtc_id) { if (property == config->prop_crtc_id) {
struct drm_crtc *crtc = drm_crtc_find(dev, val); struct drm_crtc *crtc = drm_crtc_find(dev, NULL, val);
return drm_atomic_set_crtc_for_connector(state, crtc); return drm_atomic_set_crtc_for_connector(state, crtc);
} else if (property == config->dpms_property) { } else if (property == config->dpms_property) {
/* setting DPMS property requires special handling, which /* setting DPMS property requires special handling, which
@ -2272,7 +2272,7 @@ retry:
goto out; goto out;
} }
obj = drm_mode_object_find(dev, obj_id, DRM_MODE_OBJECT_ANY); obj = drm_mode_object_find(dev, file_priv, obj_id, DRM_MODE_OBJECT_ANY);
if (!obj) { if (!obj) {
ret = -ENOENT; ret = -ENOENT;
goto out; goto out;

View File

@ -3115,7 +3115,7 @@ struct drm_encoder *
drm_atomic_helper_best_encoder(struct drm_connector *connector) drm_atomic_helper_best_encoder(struct drm_connector *connector)
{ {
WARN_ON(connector->encoder_ids[1]); WARN_ON(connector->encoder_ids[1]);
return drm_encoder_find(connector->dev, connector->encoder_ids[0]); return drm_encoder_find(connector->dev, NULL, connector->encoder_ids[0]);
} }
EXPORT_SYMBOL(drm_atomic_helper_best_encoder); EXPORT_SYMBOL(drm_atomic_helper_best_encoder);

View File

@ -230,7 +230,7 @@ int drm_mode_gamma_set_ioctl(struct drm_device *dev,
if (!drm_core_check_feature(dev, DRIVER_MODESET)) if (!drm_core_check_feature(dev, DRIVER_MODESET))
return -EINVAL; return -EINVAL;
crtc = drm_crtc_find(dev, crtc_lut->crtc_id); crtc = drm_crtc_find(dev, file_priv, crtc_lut->crtc_id);
if (!crtc) if (!crtc)
return -ENOENT; return -ENOENT;
@ -308,7 +308,7 @@ int drm_mode_gamma_get_ioctl(struct drm_device *dev,
if (!drm_core_check_feature(dev, DRIVER_MODESET)) if (!drm_core_check_feature(dev, DRIVER_MODESET))
return -EINVAL; return -EINVAL;
crtc = drm_crtc_find(dev, crtc_lut->crtc_id); crtc = drm_crtc_find(dev, file_priv, crtc_lut->crtc_id);
if (!crtc) if (!crtc)
return -ENOENT; return -ENOENT;

View File

@ -1288,7 +1288,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
memset(&u_mode, 0, sizeof(struct drm_mode_modeinfo)); memset(&u_mode, 0, sizeof(struct drm_mode_modeinfo));
connector = drm_connector_lookup(dev, out_resp->connector_id); connector = drm_connector_lookup(dev, file_priv, out_resp->connector_id);
if (!connector) if (!connector)
return -ENOENT; return -ENOENT;

View File

@ -402,7 +402,7 @@ int drm_mode_getcrtc(struct drm_device *dev,
if (!drm_core_check_feature(dev, DRIVER_MODESET)) if (!drm_core_check_feature(dev, DRIVER_MODESET))
return -EINVAL; return -EINVAL;
crtc = drm_crtc_find(dev, crtc_resp->crtc_id); crtc = drm_crtc_find(dev, file_priv, crtc_resp->crtc_id);
if (!crtc) if (!crtc)
return -ENOENT; return -ENOENT;
@ -569,7 +569,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
if (crtc_req->x & 0xffff0000 || crtc_req->y & 0xffff0000) if (crtc_req->x & 0xffff0000 || crtc_req->y & 0xffff0000)
return -ERANGE; return -ERANGE;
crtc = drm_crtc_find(dev, crtc_req->crtc_id); crtc = drm_crtc_find(dev, file_priv, crtc_req->crtc_id);
if (!crtc) { if (!crtc) {
DRM_DEBUG_KMS("Unknown CRTC ID %d\n", crtc_req->crtc_id); DRM_DEBUG_KMS("Unknown CRTC ID %d\n", crtc_req->crtc_id);
return -ENOENT; return -ENOENT;
@ -595,7 +595,7 @@ retry:
/* Make refcounting symmetric with the lookup path. */ /* Make refcounting symmetric with the lookup path. */
drm_framebuffer_get(fb); drm_framebuffer_get(fb);
} else { } else {
fb = drm_framebuffer_lookup(dev, crtc_req->fb_id); fb = drm_framebuffer_lookup(dev, file_priv, crtc_req->fb_id);
if (!fb) { if (!fb) {
DRM_DEBUG_KMS("Unknown FB ID%d\n", DRM_DEBUG_KMS("Unknown FB ID%d\n",
crtc_req->fb_id); crtc_req->fb_id);
@ -680,7 +680,7 @@ retry:
goto out; goto out;
} }
connector = drm_connector_lookup(dev, out_id); connector = drm_connector_lookup(dev, file_priv, out_id);
if (!connector) { if (!connector) {
DRM_DEBUG_KMS("Connector id %d unknown\n", DRM_DEBUG_KMS("Connector id %d unknown\n",
out_id); out_id);

View File

@ -106,6 +106,7 @@ int drm_mode_object_add(struct drm_device *dev, struct drm_mode_object *obj,
void drm_mode_object_register(struct drm_device *dev, void drm_mode_object_register(struct drm_device *dev,
struct drm_mode_object *obj); struct drm_mode_object *obj);
struct drm_mode_object *__drm_mode_object_find(struct drm_device *dev, struct drm_mode_object *__drm_mode_object_find(struct drm_device *dev,
struct drm_file *file_priv,
uint32_t id, uint32_t type); uint32_t id, uint32_t type);
void drm_mode_object_unregister(struct drm_device *dev, void drm_mode_object_unregister(struct drm_device *dev,
struct drm_mode_object *object); struct drm_mode_object *object);

View File

@ -220,7 +220,7 @@ int drm_mode_getencoder(struct drm_device *dev, void *data,
if (!drm_core_check_feature(dev, DRIVER_MODESET)) if (!drm_core_check_feature(dev, DRIVER_MODESET))
return -EINVAL; return -EINVAL;
encoder = drm_encoder_find(dev, enc_resp->encoder_id); encoder = drm_encoder_find(dev, file_priv, enc_resp->encoder_id);
if (!encoder) if (!encoder)
return -ENOENT; return -ENOENT;

View File

@ -385,7 +385,7 @@ int drm_mode_rmfb(struct drm_device *dev,
if (!drm_core_check_feature(dev, DRIVER_MODESET)) if (!drm_core_check_feature(dev, DRIVER_MODESET))
return -EINVAL; return -EINVAL;
fb = drm_framebuffer_lookup(dev, *id); fb = drm_framebuffer_lookup(dev, file_priv, *id);
if (!fb) if (!fb)
return -ENOENT; return -ENOENT;
@ -454,7 +454,7 @@ int drm_mode_getfb(struct drm_device *dev,
if (!drm_core_check_feature(dev, DRIVER_MODESET)) if (!drm_core_check_feature(dev, DRIVER_MODESET))
return -EINVAL; return -EINVAL;
fb = drm_framebuffer_lookup(dev, r->fb_id); fb = drm_framebuffer_lookup(dev, file_priv, r->fb_id);
if (!fb) if (!fb)
return -ENOENT; return -ENOENT;
@ -526,7 +526,7 @@ int drm_mode_dirtyfb_ioctl(struct drm_device *dev,
if (!drm_core_check_feature(dev, DRIVER_MODESET)) if (!drm_core_check_feature(dev, DRIVER_MODESET))
return -EINVAL; return -EINVAL;
fb = drm_framebuffer_lookup(dev, r->fb_id); fb = drm_framebuffer_lookup(dev, file_priv, r->fb_id);
if (!fb) if (!fb)
return -ENOENT; return -ENOENT;
@ -699,12 +699,13 @@ EXPORT_SYMBOL(drm_framebuffer_init);
* again, using drm_framebuffer_put(). * again, using drm_framebuffer_put().
*/ */
struct drm_framebuffer *drm_framebuffer_lookup(struct drm_device *dev, struct drm_framebuffer *drm_framebuffer_lookup(struct drm_device *dev,
struct drm_file *file_priv,
uint32_t id) uint32_t id)
{ {
struct drm_mode_object *obj; struct drm_mode_object *obj;
struct drm_framebuffer *fb = NULL; struct drm_framebuffer *fb = NULL;
obj = __drm_mode_object_find(dev, id, DRM_MODE_OBJECT_FB); obj = __drm_mode_object_find(dev, file_priv, id, DRM_MODE_OBJECT_FB);
if (obj) if (obj)
fb = obj_to_fb(obj); fb = obj_to_fb(obj);
return fb; return fb;

View File

@ -105,6 +105,7 @@ void drm_mode_object_unregister(struct drm_device *dev,
} }
struct drm_mode_object *__drm_mode_object_find(struct drm_device *dev, struct drm_mode_object *__drm_mode_object_find(struct drm_device *dev,
struct drm_file *file_priv,
uint32_t id, uint32_t type) uint32_t id, uint32_t type)
{ {
struct drm_mode_object *obj = NULL; struct drm_mode_object *obj = NULL;
@ -127,7 +128,7 @@ struct drm_mode_object *__drm_mode_object_find(struct drm_device *dev,
/** /**
* drm_mode_object_find - look up a drm object with static lifetime * drm_mode_object_find - look up a drm object with static lifetime
* @dev: drm device * @file_priv: drm file
* @id: id of the mode object * @id: id of the mode object
* @type: type of the mode object * @type: type of the mode object
* *
@ -136,11 +137,12 @@ struct drm_mode_object *__drm_mode_object_find(struct drm_device *dev,
* by callind drm_mode_object_put(). * by callind drm_mode_object_put().
*/ */
struct drm_mode_object *drm_mode_object_find(struct drm_device *dev, struct drm_mode_object *drm_mode_object_find(struct drm_device *dev,
struct drm_file *file_priv,
uint32_t id, uint32_t type) uint32_t id, uint32_t type)
{ {
struct drm_mode_object *obj = NULL; struct drm_mode_object *obj = NULL;
obj = __drm_mode_object_find(dev, id, type); obj = __drm_mode_object_find(dev, file_priv, id, type);
return obj; return obj;
} }
EXPORT_SYMBOL(drm_mode_object_find); EXPORT_SYMBOL(drm_mode_object_find);
@ -358,7 +360,7 @@ int drm_mode_obj_get_properties_ioctl(struct drm_device *dev, void *data,
drm_modeset_lock_all(dev); drm_modeset_lock_all(dev);
obj = drm_mode_object_find(dev, arg->obj_id, arg->obj_type); obj = drm_mode_object_find(dev, file_priv, arg->obj_id, arg->obj_type);
if (!obj) { if (!obj) {
ret = -ENOENT; ret = -ENOENT;
goto out; goto out;
@ -480,7 +482,7 @@ int drm_mode_obj_set_property_ioctl(struct drm_device *dev, void *data,
if (!drm_core_check_feature(dev, DRIVER_MODESET)) if (!drm_core_check_feature(dev, DRIVER_MODESET))
return -EINVAL; return -EINVAL;
arg_obj = drm_mode_object_find(dev, arg->obj_id, arg->obj_type); arg_obj = drm_mode_object_find(dev, file_priv, arg->obj_id, arg->obj_type);
if (!arg_obj) if (!arg_obj)
return -ENOENT; return -ENOENT;

View File

@ -513,7 +513,7 @@ int drm_mode_getplane(struct drm_device *dev, void *data,
if (!drm_core_check_feature(dev, DRIVER_MODESET)) if (!drm_core_check_feature(dev, DRIVER_MODESET))
return -EINVAL; return -EINVAL;
plane = drm_plane_find(dev, plane_resp->plane_id); plane = drm_plane_find(dev, file_priv, plane_resp->plane_id);
if (!plane) if (!plane)
return -ENOENT; return -ENOENT;
@ -702,7 +702,7 @@ int drm_mode_setplane(struct drm_device *dev, void *data,
* First, find the plane, crtc, and fb objects. If not available, * First, find the plane, crtc, and fb objects. If not available,
* we don't bother to call the driver. * we don't bother to call the driver.
*/ */
plane = drm_plane_find(dev, plane_req->plane_id); plane = drm_plane_find(dev, file_priv, plane_req->plane_id);
if (!plane) { if (!plane) {
DRM_DEBUG_KMS("Unknown plane ID %d\n", DRM_DEBUG_KMS("Unknown plane ID %d\n",
plane_req->plane_id); plane_req->plane_id);
@ -710,14 +710,14 @@ int drm_mode_setplane(struct drm_device *dev, void *data,
} }
if (plane_req->fb_id) { if (plane_req->fb_id) {
fb = drm_framebuffer_lookup(dev, plane_req->fb_id); fb = drm_framebuffer_lookup(dev, file_priv, plane_req->fb_id);
if (!fb) { if (!fb) {
DRM_DEBUG_KMS("Unknown framebuffer ID %d\n", DRM_DEBUG_KMS("Unknown framebuffer ID %d\n",
plane_req->fb_id); plane_req->fb_id);
return -ENOENT; return -ENOENT;
} }
crtc = drm_crtc_find(dev, plane_req->crtc_id); crtc = drm_crtc_find(dev, file_priv, plane_req->crtc_id);
if (!crtc) { if (!crtc) {
drm_framebuffer_put(fb); drm_framebuffer_put(fb);
DRM_DEBUG_KMS("Unknown crtc ID %d\n", DRM_DEBUG_KMS("Unknown crtc ID %d\n",
@ -828,7 +828,7 @@ static int drm_mode_cursor_common(struct drm_device *dev,
if (!req->flags || (~DRM_MODE_CURSOR_FLAGS & req->flags)) if (!req->flags || (~DRM_MODE_CURSOR_FLAGS & req->flags))
return -EINVAL; return -EINVAL;
crtc = drm_crtc_find(dev, req->crtc_id); crtc = drm_crtc_find(dev, file_priv, req->crtc_id);
if (!crtc) { if (!crtc) {
DRM_DEBUG_KMS("Unknown CRTC ID %d\n", req->crtc_id); DRM_DEBUG_KMS("Unknown CRTC ID %d\n", req->crtc_id);
return -ENOENT; return -ENOENT;
@ -942,7 +942,7 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
if ((page_flip->flags & DRM_MODE_PAGE_FLIP_ASYNC) && !dev->mode_config.async_page_flip) if ((page_flip->flags & DRM_MODE_PAGE_FLIP_ASYNC) && !dev->mode_config.async_page_flip)
return -EINVAL; return -EINVAL;
crtc = drm_crtc_find(dev, page_flip->crtc_id); crtc = drm_crtc_find(dev, file_priv, page_flip->crtc_id);
if (!crtc) if (!crtc)
return -ENOENT; return -ENOENT;
@ -1003,7 +1003,7 @@ retry:
goto out; goto out;
} }
fb = drm_framebuffer_lookup(dev, page_flip->fb_id); fb = drm_framebuffer_lookup(dev, file_priv, page_flip->fb_id);
if (!fb) { if (!fb) {
ret = -ENOENT; ret = -ENOENT;
goto out; goto out;

View File

@ -99,7 +99,7 @@ drm_mode_validate_pipeline(struct drm_display_mode *mode,
/* Step 2: Validate against encoders and crtcs */ /* Step 2: Validate against encoders and crtcs */
for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
struct drm_encoder *encoder = drm_encoder_find(dev, ids[i]); struct drm_encoder *encoder = drm_encoder_find(dev, NULL, ids[i]);
struct drm_crtc *crtc; struct drm_crtc *crtc;
if (!encoder) if (!encoder)

View File

@ -450,7 +450,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
if (!drm_core_check_feature(dev, DRIVER_MODESET)) if (!drm_core_check_feature(dev, DRIVER_MODESET))
return -EINVAL; return -EINVAL;
property = drm_property_find(dev, out_resp->prop_id); property = drm_property_find(dev, file_priv, out_resp->prop_id);
if (!property) if (!property)
return -ENOENT; return -ENOENT;
@ -634,7 +634,7 @@ struct drm_property_blob *drm_property_lookup_blob(struct drm_device *dev,
struct drm_mode_object *obj; struct drm_mode_object *obj;
struct drm_property_blob *blob = NULL; struct drm_property_blob *blob = NULL;
obj = __drm_mode_object_find(dev, id, DRM_MODE_OBJECT_BLOB); obj = __drm_mode_object_find(dev, NULL, id, DRM_MODE_OBJECT_BLOB);
if (obj) if (obj)
blob = obj_to_blob(obj); blob = obj_to_blob(obj);
return blob; return blob;
@ -897,7 +897,7 @@ bool drm_property_change_valid_get(struct drm_property *property,
if (value == 0) if (value == 0)
return true; return true;
*ref = __drm_mode_object_find(property->dev, value, *ref = __drm_mode_object_find(property->dev, NULL, value,
property->values[0]); property->values[0]);
return *ref != NULL; return *ref != NULL;
} }

View File

@ -36,7 +36,7 @@ static int hibmc_connector_mode_valid(struct drm_connector *connector,
static struct drm_encoder * static struct drm_encoder *
hibmc_connector_best_encoder(struct drm_connector *connector) hibmc_connector_best_encoder(struct drm_connector *connector)
{ {
return drm_encoder_find(connector->dev, connector->encoder_ids[0]); return drm_encoder_find(connector->dev, NULL, connector->encoder_ids[0]);
} }
static const struct drm_connector_helper_funcs static const struct drm_connector_helper_funcs

View File

@ -13533,7 +13533,7 @@ int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
struct drm_crtc *drmmode_crtc; struct drm_crtc *drmmode_crtc;
struct intel_crtc *crtc; struct intel_crtc *crtc;
drmmode_crtc = drm_crtc_find(dev, pipe_from_crtc_id->crtc_id); drmmode_crtc = drm_crtc_find(dev, file, pipe_from_crtc_id->crtc_id);
if (!drmmode_crtc) if (!drmmode_crtc)
return -ENOENT; return -ENOENT;

View File

@ -1134,7 +1134,7 @@ int intel_overlay_put_image_ioctl(struct drm_device *dev, void *data,
if (!params) if (!params)
return -ENOMEM; return -ENOMEM;
drmmode_crtc = drm_crtc_find(dev, put_image_rec->crtc_id); drmmode_crtc = drm_crtc_find(dev, file_priv, put_image_rec->crtc_id);
if (!drmmode_crtc) { if (!drmmode_crtc) {
ret = -ENOENT; ret = -ENOENT;
goto out_free; goto out_free;

View File

@ -1118,7 +1118,7 @@ int intel_sprite_set_colorkey(struct drm_device *dev, void *data,
set->flags & I915_SET_COLORKEY_DESTINATION) set->flags & I915_SET_COLORKEY_DESTINATION)
return -EINVAL; return -EINVAL;
plane = drm_plane_find(dev, set->plane_id); plane = drm_plane_find(dev, file_priv, set->plane_id);
if (!plane || plane->type != DRM_PLANE_TYPE_OVERLAY) if (!plane || plane->type != DRM_PLANE_TYPE_OVERLAY)
return -ENOENT; return -ENOENT;

View File

@ -1670,7 +1670,7 @@ static struct drm_encoder *mga_connector_best_encoder(struct drm_connector
int enc_id = connector->encoder_ids[0]; int enc_id = connector->encoder_ids[0];
/* pick the encoder ids */ /* pick the encoder ids */
if (enc_id) if (enc_id)
return drm_encoder_find(connector->dev, enc_id); return drm_encoder_find(connector->dev, NULL, enc_id);
return NULL; return NULL;
} }

View File

@ -373,7 +373,7 @@ find_encoder(struct drm_connector *connector, int type)
if (!id) if (!id)
break; break;
enc = drm_encoder_find(dev, id); enc = drm_encoder_find(dev, NULL, id);
if (!enc) if (!enc)
continue; continue;
nv_encoder = nouveau_encoder(enc); nv_encoder = nouveau_encoder(enc);
@ -441,7 +441,7 @@ nouveau_connector_ddc_detect(struct drm_connector *connector)
if (id == 0) if (id == 0)
break; break;
encoder = drm_encoder_find(dev, id); encoder = drm_encoder_find(dev, NULL, id);
if (!encoder) if (!encoder)
continue; continue;
nv_encoder = nouveau_encoder(encoder); nv_encoder = nouveau_encoder(encoder);

View File

@ -1456,7 +1456,7 @@ 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 = R100_CP_PACKET0_GET_REG(header); reg = R100_CP_PACKET0_GET_REG(header);
crtc = drm_crtc_find(p->rdev->ddev, crtc_id); crtc = drm_crtc_find(p->rdev->ddev, p->filp, crtc_id);
if (!crtc) { if (!crtc) {
DRM_ERROR("cannot find crtc %d\n", crtc_id); DRM_ERROR("cannot find crtc %d\n", crtc_id);
return -ENOENT; return -ENOENT;

View File

@ -887,7 +887,7 @@ int r600_cs_common_vline_parse(struct radeon_cs_parser *p,
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 = R600_CP_PACKET0_GET_REG(header); reg = R600_CP_PACKET0_GET_REG(header);
crtc = drm_crtc_find(p->rdev->ddev, crtc_id); crtc = drm_crtc_find(p->rdev->ddev, p->filp, crtc_id);
if (!crtc) { if (!crtc) {
DRM_ERROR("cannot find crtc %d\n", crtc_id); DRM_ERROR("cannot find crtc %d\n", crtc_id);
return -ENOENT; return -ENOENT;

View File

@ -256,7 +256,7 @@ radeon_connector_update_scratch_regs(struct drm_connector *connector, enum drm_c
if (connector->encoder_ids[i] == 0) if (connector->encoder_ids[i] == 0)
break; break;
encoder = drm_encoder_find(connector->dev, encoder = drm_encoder_find(connector->dev, NULL,
connector->encoder_ids[i]); connector->encoder_ids[i]);
if (!encoder) if (!encoder)
continue; continue;
@ -283,7 +283,7 @@ static struct drm_encoder *radeon_find_encoder(struct drm_connector *connector,
if (connector->encoder_ids[i] == 0) if (connector->encoder_ids[i] == 0)
break; break;
encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]); encoder = drm_encoder_find(connector->dev, NULL, connector->encoder_ids[i]);
if (!encoder) if (!encoder)
continue; continue;
@ -397,7 +397,7 @@ static struct drm_encoder *radeon_best_single_encoder(struct drm_connector *conn
int enc_id = connector->encoder_ids[0]; int enc_id = connector->encoder_ids[0];
/* pick the encoder ids */ /* pick the encoder ids */
if (enc_id) if (enc_id)
return drm_encoder_find(connector->dev, enc_id); return drm_encoder_find(connector->dev, NULL, enc_id);
return NULL; return NULL;
} }
@ -1379,7 +1379,7 @@ radeon_dvi_detect(struct drm_connector *connector, bool force)
if (connector->encoder_ids[i] == 0) if (connector->encoder_ids[i] == 0)
break; break;
encoder = drm_encoder_find(connector->dev, encoder = drm_encoder_find(connector->dev, NULL,
connector->encoder_ids[i]); connector->encoder_ids[i]);
if (!encoder) if (!encoder)
continue; continue;
@ -1467,7 +1467,7 @@ static struct drm_encoder *radeon_dvi_encoder(struct drm_connector *connector)
if (connector->encoder_ids[i] == 0) if (connector->encoder_ids[i] == 0)
break; break;
encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]); encoder = drm_encoder_find(connector->dev, NULL, connector->encoder_ids[i]);
if (!encoder) if (!encoder)
continue; continue;
@ -1486,7 +1486,7 @@ static struct drm_encoder *radeon_dvi_encoder(struct drm_connector *connector)
/* then check use digitial */ /* then check use digitial */
/* pick the first one */ /* pick the first one */
if (enc_id) if (enc_id)
return drm_encoder_find(connector->dev, enc_id); return drm_encoder_find(connector->dev, NULL, enc_id);
return NULL; return NULL;
} }
@ -1633,7 +1633,7 @@ u16 radeon_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *conn
if (connector->encoder_ids[i] == 0) if (connector->encoder_ids[i] == 0)
break; break;
encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]); encoder = drm_encoder_find(connector->dev, NULL, connector->encoder_ids[i]);
if (!encoder) if (!encoder)
continue; continue;
@ -1662,7 +1662,7 @@ static bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector)
if (connector->encoder_ids[i] == 0) if (connector->encoder_ids[i] == 0)
break; break;
encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]); encoder = drm_encoder_find(connector->dev, NULL, connector->encoder_ids[i]);
if (!encoder) if (!encoder)
continue; continue;

View File

@ -105,7 +105,7 @@ static struct drm_encoder*
udl_best_single_encoder(struct drm_connector *connector) udl_best_single_encoder(struct drm_connector *connector)
{ {
int enc_id = connector->encoder_ids[0]; int enc_id = connector->encoder_ids[0];
return drm_encoder_find(connector->dev, enc_id); return drm_encoder_find(connector->dev, NULL, enc_id);
} }
static int udl_connector_set_property(struct drm_connector *connector, static int udl_connector_set_property(struct drm_connector *connector,

View File

@ -286,7 +286,7 @@ int vmw_present_ioctl(struct drm_device *dev, void *data,
drm_modeset_lock_all(dev); drm_modeset_lock_all(dev);
fb = drm_framebuffer_lookup(dev, arg->fb_id); fb = drm_framebuffer_lookup(dev, file_priv, arg->fb_id);
if (!fb) { if (!fb) {
DRM_ERROR("Invalid framebuffer id.\n"); DRM_ERROR("Invalid framebuffer id.\n");
ret = -ENOENT; ret = -ENOENT;
@ -369,7 +369,7 @@ int vmw_present_readback_ioctl(struct drm_device *dev, void *data,
drm_modeset_lock_all(dev); drm_modeset_lock_all(dev);
fb = drm_framebuffer_lookup(dev, arg->fb_id); fb = drm_framebuffer_lookup(dev, file_priv, arg->fb_id);
if (!fb) { if (!fb) {
DRM_ERROR("Invalid framebuffer id.\n"); DRM_ERROR("Invalid framebuffer id.\n");
ret = -ENOENT; ret = -ENOENT;

View File

@ -1719,7 +1719,7 @@ int vmw_kms_cursor_bypass_ioctl(struct drm_device *dev, void *data,
return 0; return 0;
} }
crtc = drm_crtc_find(dev, arg->crtc_id); crtc = drm_crtc_find(dev, file_priv, arg->crtc_id);
if (!crtc) { if (!crtc) {
ret = -ENOENT; ret = -ENOENT;
goto out; goto out;

View File

@ -377,7 +377,7 @@ static struct drm_encoder *vbox_best_single_encoder(struct drm_connector
/* pick the encoder ids */ /* pick the encoder ids */
if (enc_id) if (enc_id)
return drm_encoder_find(connector->dev, enc_id); return drm_encoder_find(connector->dev, NULL, enc_id);
return NULL; return NULL;
} }

View File

@ -933,10 +933,11 @@ static inline unsigned drm_connector_index(struct drm_connector *connector)
* add takes a reference to it. * add takes a reference to it.
*/ */
static inline struct drm_connector *drm_connector_lookup(struct drm_device *dev, static inline struct drm_connector *drm_connector_lookup(struct drm_device *dev,
struct drm_file *file_priv,
uint32_t id) uint32_t id)
{ {
struct drm_mode_object *mo; struct drm_mode_object *mo;
mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_CONNECTOR); mo = drm_mode_object_find(dev, file_priv, id, DRM_MODE_OBJECT_CONNECTOR);
return mo ? obj_to_connector(mo) : NULL; return mo ? obj_to_connector(mo) : NULL;
} }

View File

@ -944,10 +944,11 @@ struct drm_crtc *drm_crtc_from_index(struct drm_device *dev, int idx);
* userspace interface should be done using &drm_property. * userspace interface should be done using &drm_property.
*/ */
static inline struct drm_crtc *drm_crtc_find(struct drm_device *dev, static inline struct drm_crtc *drm_crtc_find(struct drm_device *dev,
uint32_t id) struct drm_file *file_priv,
uint32_t id)
{ {
struct drm_mode_object *mo; struct drm_mode_object *mo;
mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_CRTC); mo = drm_mode_object_find(dev, file_priv, id, DRM_MODE_OBJECT_CRTC);
return mo ? obj_to_crtc(mo) : NULL; return mo ? obj_to_crtc(mo) : NULL;
} }

View File

@ -214,11 +214,12 @@ static inline bool drm_encoder_crtc_ok(struct drm_encoder *encoder,
* drm_mode_object_find(). * drm_mode_object_find().
*/ */
static inline struct drm_encoder *drm_encoder_find(struct drm_device *dev, static inline struct drm_encoder *drm_encoder_find(struct drm_device *dev,
struct drm_file *file_priv,
uint32_t id) uint32_t id)
{ {
struct drm_mode_object *mo; struct drm_mode_object *mo;
mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_ENCODER); mo = drm_mode_object_find(dev, file_priv, id, DRM_MODE_OBJECT_ENCODER);
return mo ? obj_to_encoder(mo) : NULL; return mo ? obj_to_encoder(mo) : NULL;
} }

View File

@ -205,6 +205,7 @@ int drm_framebuffer_init(struct drm_device *dev,
struct drm_framebuffer *fb, struct drm_framebuffer *fb,
const struct drm_framebuffer_funcs *funcs); const struct drm_framebuffer_funcs *funcs);
struct drm_framebuffer *drm_framebuffer_lookup(struct drm_device *dev, struct drm_framebuffer *drm_framebuffer_lookup(struct drm_device *dev,
struct drm_file *file_priv,
uint32_t id); uint32_t id);
void drm_framebuffer_remove(struct drm_framebuffer *fb); void drm_framebuffer_remove(struct drm_framebuffer *fb);
void drm_framebuffer_cleanup(struct drm_framebuffer *fb); void drm_framebuffer_cleanup(struct drm_framebuffer *fb);

View File

@ -27,6 +27,7 @@
struct drm_object_properties; struct drm_object_properties;
struct drm_property; struct drm_property;
struct drm_device; struct drm_device;
struct drm_file;
/** /**
* struct drm_mode_object - base structure for modeset objects * struct drm_mode_object - base structure for modeset objects
@ -113,6 +114,7 @@ struct drm_object_properties {
} }
struct drm_mode_object *drm_mode_object_find(struct drm_device *dev, struct drm_mode_object *drm_mode_object_find(struct drm_device *dev,
struct drm_file *file_priv,
uint32_t id, uint32_t type); uint32_t id, uint32_t type);
void drm_mode_object_get(struct drm_mode_object *obj); void drm_mode_object_get(struct drm_mode_object *obj);
void drm_mode_object_put(struct drm_mode_object *obj); void drm_mode_object_put(struct drm_mode_object *obj);

View File

@ -589,10 +589,11 @@ int drm_mode_plane_set_obj_prop(struct drm_plane *plane,
* drm_mode_object_find(). * drm_mode_object_find().
*/ */
static inline struct drm_plane *drm_plane_find(struct drm_device *dev, static inline struct drm_plane *drm_plane_find(struct drm_device *dev,
struct drm_file *file_priv,
uint32_t id) uint32_t id)
{ {
struct drm_mode_object *mo; struct drm_mode_object *mo;
mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_PLANE); mo = drm_mode_object_find(dev, file_priv, id, DRM_MODE_OBJECT_PLANE);
return mo ? obj_to_plane(mo) : NULL; return mo ? obj_to_plane(mo) : NULL;
} }

View File

@ -312,10 +312,11 @@ drm_property_unreference_blob(struct drm_property_blob *blob)
* This function looks up the property object specified by id and returns it. * This function looks up the property object specified by id and returns it.
*/ */
static inline struct drm_property *drm_property_find(struct drm_device *dev, static inline struct drm_property *drm_property_find(struct drm_device *dev,
struct drm_file *file_priv,
uint32_t id) uint32_t id)
{ {
struct drm_mode_object *mo; struct drm_mode_object *mo;
mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_PROPERTY); mo = drm_mode_object_find(dev, file_priv, id, DRM_MODE_OBJECT_PROPERTY);
return mo ? obj_to_property(mo) : NULL; return mo ? obj_to_property(mo) : NULL;
} }