summaryrefslogtreecommitdiff
path: root/server
AgeCommit message (Collapse)AuthorFilesLines
2023-06-01server: Make sure to always set the out_remote_fd valueCorentin Noël1-1/+5
Properly set it to -1 on failure. Signed-off-by: Corentin Noël <corentin.noel@collabora.com> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1133>
2023-03-15server: ensure clean exit after proxy socket lostRyan Neph1-0/+10
When server detects proxy socket lost, it kills all workers, and expects render_worker_jail_wait_workers() to reap render_worker instances one-by-one. Instead, waitid() produces `errno == ECHILD` and the server enters an infinite busy-loop with worker_count > 0, but never returning a worker to be reaped. The problem occurs if the parent process that `exec()`d virgl_render_server chose to ignore SIGCHLD, and that is inherited by the render server process. Signed-off-by: Ryan Neph <ryanneph@google.com> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1061>
2023-03-15render_protocol: avoid roundtrip for submit_cmdYiwei Zhang2-11/+1
vtest no longer requires it after deprecating globalFencing. Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1056>
2023-02-03server: set mesa envvar to override host driver configRyan Neph1-7/+8
Signed-off-by: Ryan Neph <ryanneph@google.com> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1027>
2023-02-01server/vkr: adjust blob flags args order and align namingYiwei Zhang3-5/+5
Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/973>
2023-02-01vkr: add vkr_renderer_callbacks to simplify server interfaceYiwei Zhang1-10/+7
Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/973>
2023-02-01vkr: remove legacy renderer interfacesYiwei Zhang1-2/+2
We no longer need the renderer defs without venus since venus has been moved behind the proxy and server. Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/973>
2023-01-25server: Always return false on creation failureCorentin Noël1-2/+4
Even if the reply got sent properly we are still failing to create the context. Signed-off-by: Corentin Noël <corentin.noel@collabora.com> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1025>
2023-01-18server: expand known context names for native driver configRyan Neph1-3/+24
Guest Linux kernel's virtgpu driver only gets 15 chars of the guest application name via get_task_comm(). While a better method is devised to send the full name, do host-side substring expansion for known apps that must have app-specific native driver configuration applied. Signed-off-by: Ryan Neph <ryanneph@google.com> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1021>
2023-01-18server: remove a false early return on ctx creation failure pathYiwei Zhang1-2/+0
render_client_create_context can only fail in the server process. When it fails, proxy is expecting a reply. Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1026>
2023-01-12server: generic render process names in release buildsRyan Neph1-1/+8
Signed-off-by: Ryan Neph <ryanneph@google.com> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1018>
2023-01-09server: refactor render_state to use scoped lockYiwei Zhang1-71/+49
Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/993>
2023-01-09server/vkr: align to use ring_idx instead of queue_idYiwei Zhang2-3/+3
This is to align with multiple timeline support recently landed. Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/993>
2023-01-09proxy/server/vkr: support opaque fd memory export in serverYiwei Zhang4-4/+9
Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/993>
2023-01-09server: go straight to vkr_rendererYiwei Zhang1-152/+32
Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/993>
2023-01-09server: internalize context tracking in render_stateYiwei Zhang3-17/+18
Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/993>
2023-01-09server: internalize state tracking in render_stateYiwei Zhang3-109/+110
Renderer init and fini have been protected by the state lock. Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/993>
2023-01-09server: relocate renderer interface into render_stateYiwei Zhang4-211/+295
Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/993>
2023-01-09server: rename render_virgl to render_stateYiwei Zhang5-60/+59
This is to prepare for virgl decouple. We need the state tracking only for threaded render worker. Removing the thread config makes the forwarding much cleaner but reduces debuggability. So I prefer to keep this shim layer but with the new naming. Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/993>
2023-01-09vrend/server: silence harmless format-truncation warningsYiwei Zhang1-0/+7
Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/993>
2023-01-09vkr: stop doing virgl init at clientYiwei Zhang1-13/+0
We always want tracing. Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/993>
2022-12-16virgl: replace uint64_t queue_id with uint32_t ring_idxRyan Neph1-2/+1
Update the context fencing API to match virtio-gpu's multi-ring per-context fencing support. Virtio-GPU supports 64 fencing rings per context, but uint32_t is used to maintain compatability with other potential users that require more. Signed-off-by: Ryan Neph <ryanneph@google.com> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/982>
2022-06-17server: set custom execname for mesa dri-conf matchingRyan Neph1-8/+20
Need this to get app-specific driver configurations with Venus. Without process isolation, Mesa's dri-conf matching still won't be correct, but there are other options that can be explored later when multiple venus contexts share a process. Signed-off-by: Ryan Neph <ryanneph@google.com> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/835>
2022-05-18virgl: pass uint64_t fence_id to context_create_fenceRyan Neph1-1/+1
Signed-off-by: Ryan Neph <ryanneph@google.com> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/806>
2022-05-18virgl: pass uint64_t fence_id to write_context_fenceRyan Neph1-2/+2
Signed-off-by: Ryan Neph <ryanneph@google.com> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/806>
2022-04-04meson: fix builds with percetto tracingRyan Neph1-0/+4
For Percetto builds that don't install to a distributions standard location, percetto.h cannot be found while building tests or the render server. Pkgconfig provides the right -I / -L args if meson dependencies are explicitly provided. Signed-off-by: Ryan Neph <ryanneph@google.com> Reviewed-by: John Bates <jbates@chromium.org> Part-of: <https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/775>
2022-02-11server: update render protocol to reflect the actual opsYiwei Zhang2-51/+61
This is mostly a naming change, along with more docs Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Ryan Neph <ryanneph@google.com>
2022-02-11proxy/server: attach resource at export_blobYiwei Zhang1-3/+5
server needs to persist the resource and attach to workaround a guest kernel out-of-order map and attach cmds. proxy needs to track and de-dup the attach request for the attached resources. Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Ryan Neph <ryanneph@google.com>
2022-02-11server: relocate resource attach into import_blobYiwei Zhang1-21/+25
Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Ryan Neph <ryanneph@google.com>
2022-02-11server: use the real hw res handle as res_idYiwei Zhang2-12/+2
The same res_id is also used for later resource attach of the same. Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Ryan Neph <ryanneph@google.com>
2022-02-11server: remove redundant render_context_resourceYiwei Zhang2-65/+12
Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Ryan Neph <ryanneph@google.com>
2022-02-11server: properly set map_info at blob exportYiwei Zhang1-1/+5
map_info might fail to be initialized if get_map_info failed. Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Ryan Neph <ryanneph@google.com>
2022-01-07server: listen to SIGCHLD to reap workersChia-I Wu3-6/+140
No more confusing zombie processes. Signed-off-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Ryan Neph <ryanneph@google.com>
2022-01-07server: rework worker apis and internalsChia-I Wu5-94/+110
Now that render_worker_jail tracks workers, the apis are simplified such that - render_worker_create forks a subprocess - render_worker_destroy kills a subprocess - render_worker_jail_reap_workers reaps all exited subprocesses Also add render_worker_jail_detach_workers that can be called by a forked subprocess to "detach" (free without killing/reaping) workers. v2: replace some checks for worker->{destroyed,reaped} by asserts (Ryan) Signed-off-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> (v1) Reviewed-by: Ryan Neph <ryanneph@google.com> (v1)
2022-01-07server: track workers in render_worker_jailChia-I Wu1-1/+7
Signed-off-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Ryan Neph <ryanneph@google.com>
2022-01-07server: move worker count to render_worker_jailChia-I Wu5-23/+42
Signed-off-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Ryan Neph <ryanneph@google.com>
2022-01-07server: add struct render_worker_jailChia-I Wu1-11/+28
It contains only struct minijail, but we plan to add more fields to it. Signed-off-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Ryan Neph <ryanneph@google.com>
2022-01-07server: destroy context records soon after forkChia-I Wu1-15/+26
Add render_client_detach_all_records to "detach" context records from the child process before returning from render_client_create_context. "Detaching" means destroying records without killing nor reaping the workers. This makes it clearer how context records are destroyed in subprocesses. Signed-off-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Ryan Neph <ryanneph@google.com>
2022-01-07server: fix a minijail worker build errorChia-I Wu1-1/+1
Signed-off-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Ryan Neph <ryanneph@google.com>
2021-12-16virgl: let proxy ignore iovs to allow classic 3d resource importYiwei Zhang2-0/+2
Use virgl_resource_get_size to fill the size so that supported classic 3d resource can have a valid size as well. This change also links venus .clang-format into server and proxy. Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
2021-12-14server: fine tune pre-initChia-I Wu1-5/+12
Pre-init virglrenderer only when tracing is disabled, otherwise perfetto might get confused. Do a vkEnumerateInstanceExtensionProperties to preload Vulkan ICDs. "time for i in `seq 100`; do vulkaninfo > /dev/null; done" goes from 0m5.895s to 0m5.535s. Signed-off-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Ryan Neph <ryanneph@google.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org>
2021-12-14server: set debug callbackChia-I Wu1-0/+9
This redirects virglrenderer logs to syslog. Signed-off-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Ryan Neph <ryanneph@google.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org>
2021-12-14server: log to syslog and stderrChia-I Wu3-6/+13
As a daemon, let's log to syslog (and stderr). Signed-off-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Ryan Neph <ryanneph@google.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org>
2021-12-10virgl: add render serverChia-I Wu17-0/+2326
The render server is a daemon that sits idle waiting for commands. When requested to create a context, it forks and creates the context in a subprocess. This isolates contexts from each other, from the server process, and from the client process. Because a context process can execute untrusted commands and depends on GPU drivers, the isolation should improve the security. There is also a multi-thread mode where each context is executed by a thread. This mode is used to ease debugging, but maybe someone will find a use case for it. Signed-off-by: Chia-I Wu <olvaffe@gmail.com> Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org> Reviewed-by: Ryan Neph <ryanneph@google.com>