mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2024-12-03 23:24:17 +08:00
9ef8af357d
The mechanism currently used to pass data from the dEQP child process executed in a crosvm guest environment towards the deqp-runner wrapper script that starts the crosvm instance is based on creating, writing and reading regular files. In addition to the main drawback of using the storage, this approach is potentially unreliable because the data cannot be transferred in real-time and there is no control on ending the transmission. It also requires a forced sleep for syncing the content, while the minimum amount of time necessary to wait cannot be easily and safely determined. Replace this with an IPC based on the virtio transport for virtual sockets (virtio-vsock). Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com> Reviewed-by: Daniel Stone <daniels@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14995>
43 lines
1.1 KiB
Bash
Executable File
43 lines
1.1 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
set -e
|
|
|
|
VSOCK_STDOUT=$1
|
|
VSOCK_STDERR=$2
|
|
VSOCK_TEMP_DIR=$3
|
|
|
|
mount -t proc none /proc
|
|
mount -t sysfs none /sys
|
|
mkdir -p /dev/pts
|
|
mount -t devpts devpts /dev/pts
|
|
mount -t tmpfs tmpfs /tmp
|
|
|
|
. ${VSOCK_TEMP_DIR}/crosvm-env.sh
|
|
|
|
# .gitlab-ci.yml script variable is using relative paths to install directory,
|
|
# so change to that dir before running `crosvm-script`
|
|
cd "${CI_PROJECT_DIR}"
|
|
|
|
# The exception is the dEQP binary, as it needs to run from its own directory
|
|
[ -z "${DEQP_BIN_DIR}" ] || cd "${DEQP_BIN_DIR}"
|
|
|
|
# Use a FIFO to collect relevant error messages
|
|
STDERR_FIFO=/tmp/crosvm-stderr.fifo
|
|
mkfifo -m 600 ${STDERR_FIFO}
|
|
|
|
dmesg --level crit,err,warn -w > ${STDERR_FIFO} &
|
|
DMESG_PID=$!
|
|
|
|
# Transfer the errors and crosvm-script output via a pair of virtio-vsocks
|
|
socat -d -u pipe:${STDERR_FIFO} vsock-listen:${VSOCK_STDERR} &
|
|
socat -d -U vsock-listen:${VSOCK_STDOUT} \
|
|
system:"stdbuf -eL sh ${VSOCK_TEMP_DIR}/crosvm-script.sh 2> ${STDERR_FIFO}; echo \$? > ${VSOCK_TEMP_DIR}/exit_code",nofork
|
|
|
|
kill ${DMESG_PID}
|
|
wait
|
|
|
|
sync
|
|
poweroff -d -n -f || true
|
|
|
|
sleep 1 # Just in case init would exit before the kernel shuts down the VM
|