commit | 9ae90ce75478e49844cf984562db0dc1a074462f | [log] [tgz] |
---|---|---|
author | Laurent Pinchart <[email protected]> | Tue Nov 14 21:30:36 2023 +0200 |
committer | Tomi Valkeinen <[email protected]> | Wed Nov 15 08:52:57 2023 +0200 |
tree | 008ac36df12bcc75c1498796300cdef78860f55c | |
parent | c23e7548ee317c043660f9b992388257e99f1776 [diff] |
testpat: Fix memory mapping in threaded drawing The IFramebuffer::map() function is not thread-safe, which is why the threaded implementation of draw_test_pattern_impl() maps all planes before starting to draw. A typo slipped in the code, resulting in only plane 0 being mapped. This didn't result in an immediate segfault, as drawing operations in the worker threads map the remaining planes. However, due to the implementation of DumbFramebuffer::map(), this can result in the same plane being mapped multiple times, with only one of the mapping recorded in the mapping cache. The other mappings are then leaked, leading not only to extra memory consumption, but also to the DRM device never being released even after the destruction of the Card object. Fix this. Fixes: 40d96062a37c ("Revert "testpat: remove threaded drawing"") Signed-off-by: Laurent Pinchart <[email protected]> Signed-off-by: Tomi Valkeinen <[email protected]>
kms++ is a C++17 library for kernel mode setting.
Also included are some simple utilities for KMS and python bindings for kms++.
meson setup build ninja -C build
meson build --cross-file=<path-to-meson-cross-file> ninja -C build
Here is my cross file for arm32 (where ${BROOT} is path to my buildroot output dir):
[binaries] c = ['ccache', '${BROOT}/host/bin/arm-buildroot-linux-gnueabihf-gcc'] cpp = ['ccache', '${BROOT}/host/bin/arm-buildroot-linux-gnueabihf-g++'] ar = '${BROOT}/host/bin/arm-buildroot-linux-gnueabihf-ar' strip = '${BROOT}/host/bin/arm-buildroot-linux-gnueabihf-strip' pkgconfig = '${BROOT}/host/bin/pkg-config' [host_machine] system = 'linux' cpu_family = 'arm' cpu = 'arm' endian = 'little'
You can use meson options to configure the build. E.g.
meson build -Dbuildtype=debug -Dkmscube=true
Use meson configure build
to see all the configuration options and their current values.
kms++ specific build options are:
Option name | Values | Default | Notes |
---|---|---|---|
pykms | true, false | true | Python bindings |
kmscube | true, false | false | GLES kmscube |
omap | enabled, disabled, auto | auto | libdrm-omap support |
You can use the following runtime environmental variables to control the behavior of kms++.
Variable | Description |
---|---|
KMSXX_DISABLE_UNIVERSAL_PLANES | Set to disable the use of universal planes |
KMSXX_DISABLE_ATOMIC | Set to disable the use of atomic modesetting |
KMSXX_DEVICE | Path to the card device node to use |
KMSXX_DRIVER | Name of the driver to use. The format is either “drvname” or “drvname:idx” |
You can run the python code directly from the build dir by defining PYTHONPATH env variable. For example:
PYTHONPATH=build/py py/tests/hpd.py