[RFCv3 12/14] drm: Atomic modeset ioctl
Inki Dae
inki.dae at samsung.com
Fri Nov 22 00:35:02 PST 2013
Hi Rob and Ville,
2013/11/21 Rob Clark <robdclark at gmail.com>:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> The atomic modeset ioctl cna be used to push any number of new values
> for object properties. The driver can then check the full device
> configuration as single unit, and try to apply the changes atomically.
>
> The ioctl simply takes a list of object IDs and property IDs and their
> values. For setting values to blob properties, the property value
> indicates the length of the data, and the actual data is passed via
> another blob pointer.
>
> The caller can demand non-blocking operation from the ioctl, and if the
> driver can't satisfy that requirement an error will be returned.
>
> The caller can also request to receive asynchronous completion events
> after the operation has reached the hardware. An event is sent for each
> object specified by the caller, whether or not the actual state of
> that object changed. Each event also carries a framebuffer ID, which
> indicates to user space that the specified object is no longer
> accessing that framebuffer.
>
> TODO: detailed error reporting?
>
> v1: original
> v2: rebase on uapi changes, and drm state structs.. -- Rob Clark
> v3: rebase, missing padding in drm_event_atomic.. -- Rob Clark
> v4: drop atomic event, align flags w/ pageflip (atomic flags should be
> a strick superset of pageflip flags to keep things easier for the
> drivers)
>
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
> drivers/gpu/drm/drm_crtc.c | 157 +++++++++++++++++++++++++++++++++++++++++++-
> drivers/gpu/drm/drm_drv.c | 1 +
> include/drm/drmP.h | 6 ++
> include/drm/drm_crtc.h | 2 +
> include/uapi/drm/drm.h | 12 ++++
> include/uapi/drm/drm_mode.h | 21 ++++++
> 6 files changed, 198 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index 4b40a39..8368ef5 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -4037,7 +4037,8 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
> return -ENOENT;
> crtc = obj_to_crtc(obj);
>
> - state = dev->driver->atomic_begin(dev, page_flip->flags);
> + state = dev->driver->atomic_begin(dev,
> + page_flip->flags | DRM_MODE_ATOMIC_NONBLOCK);
> if (IS_ERR(state))
> return PTR_ERR(state);
>
> @@ -4451,3 +4452,157 @@ void drm_mode_config_cleanup(struct drm_device *dev)
> idr_destroy(&dev->mode_config.crtc_idr);
> }
> EXPORT_SYMBOL(drm_mode_config_cleanup);
> +
> +int drm_mode_atomic_ioctl(struct drm_device *dev,
> + void *data, struct drm_file *file_priv)
> +{
Build error at this function like below,
drivers/built-in.o: In function `drm_mode_atomic_ioctl':
of_iommu.c:(.text+0x6d854): undefined reference to `__get_user_bad'
of_iommu.c:(.text+0x6d940): undefined reference to `__get_user_bad'
And built correctly with the below change,
diff --git a/arch/arm/lib/getuser.S b/arch/arm/lib/getuser.S
index 9b06bb4..0f4f469 100644
--- a/arch/arm/lib/getuser.S
+++ b/arch/arm/lib/getuser.S
@@ -66,7 +66,7 @@ ENTRY(__get_user_4)
mov pc, lr
ENDPROC(__get_user_4)
-__get_user_bad:
+ENTRY(__get_user_bad)
mov r2, #0
mov r0, #-EFAULT
mov pc, lr
I guess __get_user_bad is not global but drm_mode_atomic_ioctl
function tries to refer this function as extern.
Is it build error only I can see?
Thanks,
Inki Dae
More information about the dri-devel
mailing list