modetest: allocate and commit atomic request around set_property()
authorMarijn Suijten <marijn.suijten@somainline.org>
Tue, 13 Jun 2023 19:53:22 +0000 (21:53 +0200)
committerDmitry Baryshkov <dbaryshkov@gmail.com>
Sun, 10 Sep 2023 12:14:06 +0000 (12:14 +0000)
commitdfd00c6250e51e7327a1af5311eacb374b9bc8fb
tree4cb29dbebe7ebac380295a5ce7cb13c10392d0c7
parent7618a646330d2dda663d44ef9066994f28d7812f
modetest: allocate and commit atomic request around set_property()

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()` even if there is no other
operation (setting modes or planes) 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")
Signed-off-by: Marijn Suijten <marijn.suijten@somainline.org>
tests/modetest/modetest.c