Skip to content

Commit

Permalink
drm/plane: drop num_overlay_planes (v3)
Browse files Browse the repository at this point in the history
In order to implement plane leasing we need to count things,
just make the code consistent with the counting code currently
used for counting crtcs/encoders/connectors and drop the need
for num_overlay_planes.

v2: don't forget to assign plane_ptr. (keithp)
v3: use correct bounds check, found by igt.

Reviewed-by: Daniel Vetter <[email protected]>
Reviewed-by: Sean Paul <[email protected]>
Signed-off-by: Dave Airlie <[email protected]>
  • Loading branch information
airlied committed Oct 17, 2017
1 parent f8d4710 commit 40d8670
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 44 deletions.
1 change: 0 additions & 1 deletion drivers/gpu/drm/drm_mode_config.c
Original file line number Diff line number Diff line change
Expand Up @@ -385,7 +385,6 @@ void drm_mode_config_init(struct drm_device *dev)
dev->mode_config.num_connector = 0;
dev->mode_config.num_crtc = 0;
dev->mode_config.num_encoder = 0;
dev->mode_config.num_overlay_plane = 0;
dev->mode_config.num_total_plane = 0;
}
EXPORT_SYMBOL(drm_mode_config_init);
Expand Down
46 changes: 16 additions & 30 deletions drivers/gpu/drm/drm_plane.c
Original file line number Diff line number Diff line change
Expand Up @@ -241,8 +241,6 @@ int drm_universal_plane_init(struct drm_device *dev, struct drm_plane *plane,

list_add_tail(&plane->head, &config->plane_list);
plane->index = config->num_total_plane++;
if (plane->type == DRM_PLANE_TYPE_OVERLAY)
config->num_overlay_plane++;

drm_object_attach_property(&plane->base,
config->plane_type_property,
Expand Down Expand Up @@ -353,8 +351,6 @@ void drm_plane_cleanup(struct drm_plane *plane)

list_del(&plane->head);
dev->mode_config.num_total_plane--;
if (plane->type == DRM_PLANE_TYPE_OVERLAY)
dev->mode_config.num_overlay_plane--;

WARN_ON(plane->state && !plane->funcs->atomic_destroy_state);
if (plane->state && plane->funcs->atomic_destroy_state)
Expand Down Expand Up @@ -462,43 +458,33 @@ int drm_mode_getplane_res(struct drm_device *dev, void *data,
struct drm_mode_config *config;
struct drm_plane *plane;
uint32_t __user *plane_ptr;
int copied = 0;
unsigned num_planes;
int count = 0;

if (!drm_core_check_feature(dev, DRIVER_MODESET))
return -EINVAL;

config = &dev->mode_config;

if (file_priv->universal_planes)
num_planes = config->num_total_plane;
else
num_planes = config->num_overlay_plane;
plane_ptr = u64_to_user_ptr(plane_resp->plane_id_ptr);

/*
* This ioctl is called twice, once to determine how much space is
* needed, and the 2nd time to fill it.
*/
if (num_planes &&
(plane_resp->count_planes >= num_planes)) {
plane_ptr = (uint32_t __user *)(unsigned long)plane_resp->plane_id_ptr;

/* Plane lists are invariant, no locking needed. */
drm_for_each_plane(plane, dev) {
/*
* Unless userspace set the 'universal planes'
* capability bit, only advertise overlays.
*/
if (plane->type != DRM_PLANE_TYPE_OVERLAY &&
!file_priv->universal_planes)
continue;

if (put_user(plane->base.id, plane_ptr + copied))
return -EFAULT;
copied++;
}
drm_for_each_plane(plane, dev) {
/*
* Unless userspace set the 'universal planes'
* capability bit, only advertise overlays.
*/
if (plane->type != DRM_PLANE_TYPE_OVERLAY &&
!file_priv->universal_planes)
continue;

if (count < plane_resp->count_planes &&
put_user(plane->base.id, plane_ptr + count))
return -EFAULT;
count++;
}
plane_resp->count_planes = num_planes;
plane_resp->count_planes = count;

return 0;
}
Expand Down
13 changes: 0 additions & 13 deletions include/drm/drm_mode_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -429,19 +429,6 @@ struct drm_mode_config {
*/
struct list_head encoder_list;

/**
* @num_overlay_plane:
*
* Number of overlay planes on this device, excluding primary and cursor
* planes.
*
* Track number of overlay planes separately from number of total
* planes. By default we only advertise overlay planes to userspace; if
* userspace sets the "universal plane" capability bit, we'll go ahead
* and expose all planes. This is invariant over the lifetime of a
* device and hence doesn't need any locks.
*/
int num_overlay_plane;
/**
* @num_total_plane:
*
Expand Down

0 comments on commit 40d8670

Please sign in to comment.