modetest: allocate and commit atomic request around set_property()
Fixes #65 (closed)
Currently the atomic request is only assigned after set_property()
is
called, leaving dev.req
in its uninitialized state causing
drmModeAtomicAddProperty()
to return an error code, which is printed
as "Success"
because errno
is not set by libdrm
(but it would have
been when non-atomic drmModeObjectSetProperty()
called an IOCTL
immediately):
sony-akatsuki-row ~ $ modetest -M msm -a -w 81:ACTIVE:0
failed to set CRTC 81 property ACTIVE to 0: Success
Solve this by assigning a new atomic request object before calling
set_property()
, when there are properties to set. Likewise, commit
these properties after set_property()
so that it is applied if no
other operation (setting modes or planes) is specified.
Furthermore drmModeObjectSetProperty()
is implemented in terms of
DRM_IOCTL()
which already returns -errno
when ioctl()
returns
-1
, so we should instead pass ret
to strerror()
and get an
accurate error string out of drmModeAtomicAddProperty()
too.
Fixes: 93220283 ("tests/modetest: Add atomic support")