Hi Rob and Ville, 2013/11/21 Rob Clark <robdclark@xxxxxxxxx>: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > 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@xxxxxxxxxxxxxxx> > --- > 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 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel