Doc, metadata, plugin and testing updates for 6.1-rc1:
- git ignore some file editor detritus - add overview on device emulation terminology - remove needless if leg in configure custom devices logic - numerous gitdm/mailmap updates - fix plugin_exit race for linux-user - fix a few bugs in cache modelling plugin - fix plugin calculation of physical address - handle pure assembler/linker tcg tests outside of docker - add tricore build to gitlab - remove superfluous MacOSX task - generalise the OpenBSI gitlab rules -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEZoWumedRZ7yvyN81+9DbCVqeKkQFAmD67ioACgkQ+9DbCVqe KkTKcwf/UlEl2wlYrvymoJy7caasD/UrlNwpaK90zRTxuofJjG2bXX/58EGBlgxe cjbX3841702HXAFDxzswmWX3yeXQVgNiXrEy5FapB7L3h/qC/BDVS4pz987TITNW b4lw/d05bQVGavcdJXPnX0CdV8IK4hpieDkdh/LGj5+CSAC39jvyVGTYBpfLKl8D cps5qcJcJuQjz4hatB1haZOV1WHLyw8KI0srfcEqkh3IImZFZ09frs3qqAxrYRqE Y62d7SIN5TX1XgWuTaf1mmaMVmbNi9DTdCxWpGYr4ZBLhhzKeljQvKbF45ZGQ0z9 eBVBdxGJTX/WAKrimcbHxLo43pCo2Q== =7vzj -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/stsquad/tags/pull-for-6.1-rc1-230721-1' into staging Doc, metadata, plugin and testing updates for 6.1-rc1: - git ignore some file editor detritus - add overview on device emulation terminology - remove needless if leg in configure custom devices logic - numerous gitdm/mailmap updates - fix plugin_exit race for linux-user - fix a few bugs in cache modelling plugin - fix plugin calculation of physical address - handle pure assembler/linker tcg tests outside of docker - add tricore build to gitlab - remove superfluous MacOSX task - generalise the OpenBSI gitlab rules # gpg: Signature made Fri 23 Jul 2021 17:28:26 BST # gpg: using RSA key 6685AE99E75167BCAFC8DF35FBD0DB095A9E2A44 # gpg: Good signature from "Alex Bennée (Master Work Key) <alex.bennee@linaro.org>" [full] # Primary key fingerprint: 6685 AE99 E751 67BC AFC8 DF35 FBD0 DB09 5A9E 2A44 * remotes/stsquad/tags/pull-for-6.1-rc1-230721-1: (28 commits) gitlab-ci: Extract OpenSBI job rules to reusable section gitlab-ci: Remove the second superfluous macos task gitlab: enable a very minimal build with the tricore container tests/tcg/configure.sh: add handling for assembler only builds plugins: Fix physical address calculation for IO regions plugins/cache: Fixed "function decl. is not a prototype" warnings plugins/cache: limited the scope of a mutex lock plugins/cache: Fixed a bug with destroying FIFO metadata tcg/plugins: implement a qemu_plugin_user_exit helper contrib/gitdm: add more individual contributor entries. contrib/gitdm: add a new interns group-map for GSoC/Outreachy work contrib/gitdm: add an explicit academic entry for BU contrib/gitdm: add group-map for Netflix contrib/gitdm: add domain-map for NVIDIA contrib/gitdm: add domain-map for Crudebyte contrib/gitdm: un-ironically add a mapping for LWN contrib/gitdm: add domain-map/group-map for Wind River contrib/gitdm: add domain-map for Eldorado contrib/gitdm: add domain-map/group-map mappings for Samsung gitdm.config: sort the corporate GroupMap entries ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
34fd92ab41
2
.gitignore
vendored
2
.gitignore
vendored
@ -13,3 +13,5 @@ GTAGS
|
||||
*~
|
||||
*.ast_raw
|
||||
*.depend_raw
|
||||
*.swp
|
||||
*.patch
|
||||
|
@ -354,6 +354,17 @@ build-some-softmmu:
|
||||
TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
|
||||
MAKE_CHECK_ARGS: check-tcg
|
||||
|
||||
# We build tricore in a very minimal tricore only container
|
||||
build-tricore-softmmu:
|
||||
extends: .native_build_job_template
|
||||
needs:
|
||||
job: tricore-debian-cross-container
|
||||
variables:
|
||||
IMAGE: debian-tricore-cross
|
||||
CONFIGURE_ARGS: --disable-tools --disable-fdt --enable-debug
|
||||
TARGETS: tricore-softmmu
|
||||
MAKE_CHECK_ARGS: check-tcg
|
||||
|
||||
clang-system:
|
||||
extends: .native_build_job_template
|
||||
needs:
|
||||
|
@ -85,18 +85,3 @@ x64-macos-11-base-build:
|
||||
PATH_EXTRA: /usr/local/opt/ccache/libexec:/usr/local/opt/gettext/bin
|
||||
PKG_CONFIG_PATH: /usr/local/opt/curl/lib/pkgconfig:/usr/local/opt/ncurses/lib/pkgconfig:/usr/local/opt/readline/lib/pkgconfig
|
||||
TEST_TARGETS: check-unit check-block check-qapi-schema check-softfloat check-qtest-x86_64
|
||||
|
||||
x64-macos-11-xcode-build:
|
||||
extends: .cirrus_build_job
|
||||
variables:
|
||||
NAME: macos-11
|
||||
CIRRUS_VM_INSTANCE_TYPE: osx_instance
|
||||
CIRRUS_VM_IMAGE_SELECTOR: image
|
||||
CIRRUS_VM_IMAGE_NAME: big-sur-xcode
|
||||
CIRRUS_VM_CPUS: 12
|
||||
CIRRUS_VM_RAM: 24G
|
||||
UPDATE_COMMAND: brew update
|
||||
INSTALL_COMMAND: brew install
|
||||
PATH_EXTRA: /usr/local/opt/ccache/libexec:/usr/local/opt/gettext/bin
|
||||
PKG_CONFIG_PATH: /usr/local/opt/curl/lib/pkgconfig:/usr/local/opt/ncurses/lib/pkgconfig:/usr/local/opt/readline/lib/pkgconfig
|
||||
TEST_TARGETS: check-unit check-block check-qapi-schema check-softfloat check-qtest-x86_64
|
||||
|
@ -1,10 +1,23 @@
|
||||
docker-opensbi:
|
||||
stage: containers
|
||||
rules: # Only run this job when the Dockerfile is modified
|
||||
# All jobs needing docker-opensbi must use the same rules it uses.
|
||||
.opensbi_job_rules:
|
||||
rules: # Only run this job when ...
|
||||
- changes:
|
||||
# this file is modified
|
||||
- .gitlab-ci.d/opensbi.yml
|
||||
# or the Dockerfile is modified
|
||||
- .gitlab-ci.d/opensbi/Dockerfile
|
||||
when: always
|
||||
- changes: # or roms/opensbi/ is modified (submodule updated)
|
||||
- roms/opensbi/*
|
||||
when: always
|
||||
- if: '$CI_COMMIT_REF_NAME =~ /^opensbi/' # or the branch/tag starts with 'opensbi'
|
||||
when: always
|
||||
- if: '$CI_COMMIT_MESSAGE =~ /opensbi/i' # or last commit description contains 'OpenSBI'
|
||||
when: always
|
||||
|
||||
docker-opensbi:
|
||||
extends: .opensbi_job_rules
|
||||
stage: containers
|
||||
image: docker:19.03.1
|
||||
services:
|
||||
- docker:19.03.1-dind
|
||||
@ -24,16 +37,9 @@ docker-opensbi:
|
||||
- docker push $IMAGE_TAG
|
||||
|
||||
build-opensbi:
|
||||
extends: .opensbi_job_rules
|
||||
stage: build
|
||||
needs: ['docker-opensbi']
|
||||
rules: # Only run this job when ...
|
||||
- changes: # ... roms/opensbi/ is modified (submodule updated)
|
||||
- roms/opensbi/*
|
||||
when: always
|
||||
- if: '$CI_COMMIT_REF_NAME =~ /^opensbi/' # or the branch/tag starts with 'opensbi'
|
||||
when: always
|
||||
- if: '$CI_COMMIT_MESSAGE =~ /opensbi/i' # or last commit description contains 'OpenSBI'
|
||||
when: always
|
||||
artifacts:
|
||||
paths: # 'artifacts.zip' will contains the following files:
|
||||
- pc-bios/opensbi-riscv32-generic-fw_dynamic.bin
|
||||
|
4
.mailmap
4
.mailmap
@ -27,6 +27,10 @@ Paul Brook <paul@codesourcery.com> pbrook <pbrook@c046a42c-6fe2-441c-8c8c-714662
|
||||
Thiemo Seufer <ths@networkno.de> ths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>
|
||||
malc <av1474@comtv.ru> malc <malc@c046a42c-6fe2-441c-8c8c-71466251a162>
|
||||
|
||||
# Corrupted Author fields
|
||||
Marek Dolata <mkdolata@us.ibm.com> mkdolata@us.ibm.com <mkdolata@us.ibm.com>
|
||||
Nick Hudson <hnick@vmware.com> hnick@vmware.com <hnick@vmware.com>
|
||||
|
||||
# There is also a:
|
||||
# (no author) <(no author)@c046a42c-6fe2-441c-8c8c-71466251a162>
|
||||
# for the cvs2svn initialization commit e63c3dc74bf.
|
||||
|
@ -335,7 +335,7 @@ abi_long do_freebsd_syscall(void *cpu_env, int num, abi_long arg1,
|
||||
_mcleanup();
|
||||
#endif
|
||||
gdb_exit(arg1);
|
||||
qemu_plugin_atexit_cb();
|
||||
qemu_plugin_user_exit();
|
||||
/* XXX: should free thread stack and CPU env */
|
||||
_exit(arg1);
|
||||
ret = 0; /* avoid warning */
|
||||
@ -437,7 +437,7 @@ abi_long do_netbsd_syscall(void *cpu_env, int num, abi_long arg1,
|
||||
_mcleanup();
|
||||
#endif
|
||||
gdb_exit(arg1);
|
||||
qemu_plugin_atexit_cb();
|
||||
qemu_plugin_user_exit();
|
||||
/* XXX: should free thread stack and CPU env */
|
||||
_exit(arg1);
|
||||
ret = 0; /* avoid warning */
|
||||
@ -516,7 +516,7 @@ abi_long do_openbsd_syscall(void *cpu_env, int num, abi_long arg1,
|
||||
_mcleanup();
|
||||
#endif
|
||||
gdb_exit(arg1);
|
||||
qemu_plugin_atexit_cb();
|
||||
qemu_plugin_user_exit();
|
||||
/* XXX: should free thread stack and CPU env */
|
||||
_exit(arg1);
|
||||
ret = 0; /* avoid warning */
|
||||
|
10
configure
vendored
10
configure
vendored
@ -5103,12 +5103,10 @@ if test "$skip_meson" = no; then
|
||||
echo "[properties]" >> $cross
|
||||
|
||||
# unroll any custom device configs
|
||||
if test -n "$device_archs"; then
|
||||
for a in $device_archs; do
|
||||
eval "c=\$devices_${a}"
|
||||
echo "${a}-softmmu = '$c'" >> $cross
|
||||
done
|
||||
fi
|
||||
for a in $device_archs; do
|
||||
eval "c=\$devices_${a}"
|
||||
echo "${a}-softmmu = '$c'" >> $cross
|
||||
done
|
||||
|
||||
test -z "$cxx" && echo "link_language = 'c'" >> $cross
|
||||
echo "[built-in options]" >> $cross
|
||||
|
@ -31,6 +31,12 @@ pbrook@c046a42c-6fe2-441c-8c8c-71466251a162 paul@codesourcery.com
|
||||
ths@c046a42c-6fe2-441c-8c8c-71466251a162 ths@networkno.de
|
||||
malc@c046a42c-6fe2-441c-8c8c-71466251a162 av1474@comtv.ru
|
||||
|
||||
# canonical emails
|
||||
liq3ea@163.com liq3ea@gmail.com
|
||||
|
||||
# some broken tags
|
||||
yuval.shaia.ml.gmail.com yuval.shaia.ml@gmail.com
|
||||
|
||||
# There is also a:
|
||||
# (no author) <(no author)@c046a42c-6fe2-441c-8c8c-71466251a162>
|
||||
# for the cvs2svn initialization commit e63c3dc74bf.
|
||||
|
@ -9,6 +9,8 @@ baidu.com Baidu
|
||||
bytedance.com ByteDance
|
||||
cmss.chinamobile.com China Mobile
|
||||
citrix.com Citrix
|
||||
crudebyte.com Crudebyte
|
||||
eldorado.org.br Instituto de Pesquisas Eldorado
|
||||
fujitsu.com Fujitsu
|
||||
google.com Google
|
||||
greensocs.com GreenSocs
|
||||
@ -17,20 +19,25 @@ ibm.com IBM
|
||||
igalia.com Igalia
|
||||
intel.com Intel
|
||||
linaro.org Linaro
|
||||
lwn.net LWN
|
||||
microsoft.com Microsoft
|
||||
mvista.com MontaVista
|
||||
nokia.com Nokia
|
||||
nuviainc.com NUVIA
|
||||
nvidia.com NVIDIA
|
||||
oracle.com Oracle
|
||||
proxmox.com Proxmox
|
||||
quicinc.com Qualcomm Innovation Center
|
||||
redhat.com Red Hat
|
||||
rt-rk.com RT-RK
|
||||
samsung.com Samsung
|
||||
siemens.com Siemens
|
||||
sifive.com SiFive
|
||||
suse.com SUSE
|
||||
suse.de SUSE
|
||||
virtuozzo.com Virtuozzo
|
||||
wdc.com Western Digital
|
||||
windriver.com Wind River
|
||||
xilinx.com Xilinx
|
||||
yadro.com YADRO
|
||||
yandex-team.ru Yandex
|
||||
|
@ -16,3 +16,6 @@ cota@braap.org
|
||||
uni-paderborn.de
|
||||
edu
|
||||
edu.cn
|
||||
|
||||
# Boston University
|
||||
bu.edu
|
||||
|
@ -29,3 +29,8 @@ mrolnik@gmail.com
|
||||
huth@tuxfamily.org
|
||||
jhogan@kernel.org
|
||||
atar4qemu@gmail.com
|
||||
minwoo.im.dev@gmail.com
|
||||
bmeng.cn@gmail.com
|
||||
liq3ea@gmail.com
|
||||
chetan4windows@gmail.com
|
||||
akihiko.odaki@gmail.com
|
||||
|
13
contrib/gitdm/group-map-interns
Normal file
13
contrib/gitdm/group-map-interns
Normal file
@ -0,0 +1,13 @@
|
||||
#
|
||||
# Group together everyone working as an intern via one of the various
|
||||
# outreach programs.
|
||||
#
|
||||
|
||||
# GSoC 2020 Virtual FIDO/U2F security key
|
||||
cesar.belley@lse.epita.fr
|
||||
|
||||
# GSoC 2020 TCG performance
|
||||
ahmedkhaledkaraman@gmail.com
|
||||
|
||||
# GSoC 2021 TCG plugins
|
||||
ma.mandourr@gmail.com
|
5
contrib/gitdm/group-map-netflix
Normal file
5
contrib/gitdm/group-map-netflix
Normal file
@ -0,0 +1,5 @@
|
||||
#
|
||||
# Netflix contributors using their personal emails
|
||||
#
|
||||
|
||||
imp@bsdimp.com
|
7
contrib/gitdm/group-map-robots
Normal file
7
contrib/gitdm/group-map-robots
Normal file
@ -0,0 +1,7 @@
|
||||
#
|
||||
# There are various automatic robots that occasionally scan and report
|
||||
# bugs. Let's group them together here.
|
||||
#
|
||||
|
||||
# Euler Robot
|
||||
euler.robot@huawei.com
|
@ -200,7 +200,7 @@ static void fifo_destroy(Cache *cache)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < cache->assoc; i++) {
|
||||
for (i = 0; i < cache->num_sets; i++) {
|
||||
g_queue_free(cache->sets[i].fifo_queue);
|
||||
}
|
||||
}
|
||||
@ -355,15 +355,14 @@ static void vcpu_mem_access(unsigned int vcpu_index, qemu_plugin_meminfo_t info,
|
||||
struct qemu_plugin_hwaddr *hwaddr;
|
||||
InsnData *insn;
|
||||
|
||||
g_mutex_lock(&mtx);
|
||||
hwaddr = qemu_plugin_get_hwaddr(info, vaddr);
|
||||
if (hwaddr && qemu_plugin_hwaddr_is_io(hwaddr)) {
|
||||
g_mutex_unlock(&mtx);
|
||||
return;
|
||||
}
|
||||
|
||||
effective_addr = hwaddr ? qemu_plugin_hwaddr_phys_addr(hwaddr) : vaddr;
|
||||
|
||||
g_mutex_lock(&mtx);
|
||||
if (!access_cache(dcache, effective_addr)) {
|
||||
insn = (InsnData *) userdata;
|
||||
insn->dmisses++;
|
||||
@ -470,7 +469,7 @@ static int icmp(gconstpointer a, gconstpointer b)
|
||||
return insn_a->imisses < insn_b->imisses ? 1 : -1;
|
||||
}
|
||||
|
||||
static void log_stats()
|
||||
static void log_stats(void)
|
||||
{
|
||||
g_autoptr(GString) rep = g_string_new("");
|
||||
g_string_append_printf(rep,
|
||||
@ -488,7 +487,7 @@ static void log_stats()
|
||||
qemu_plugin_outs(rep->str);
|
||||
}
|
||||
|
||||
static void log_top_insns()
|
||||
static void log_top_insns(void)
|
||||
{
|
||||
int i;
|
||||
GList *curr, *miss_insns;
|
||||
@ -537,7 +536,7 @@ static void plugin_exit(qemu_plugin_id_t id, void *p)
|
||||
g_hash_table_destroy(miss_ht);
|
||||
}
|
||||
|
||||
static void policy_init()
|
||||
static void policy_init(void)
|
||||
{
|
||||
switch (policy) {
|
||||
case LRU:
|
||||
|
@ -1,3 +1,5 @@
|
||||
.. _vhost_user_proto:
|
||||
|
||||
===================
|
||||
Vhost-user Protocol
|
||||
===================
|
||||
|
90
docs/system/device-emulation.rst
Normal file
90
docs/system/device-emulation.rst
Normal file
@ -0,0 +1,90 @@
|
||||
.. _device-emulation:
|
||||
|
||||
Device Emulation
|
||||
----------------
|
||||
|
||||
QEMU supports the emulation of a large number of devices from
|
||||
peripherals such network cards and USB devices to integrated systems
|
||||
on a chip (SoCs). Configuration of these is often a source of
|
||||
confusion so it helps to have an understanding of some of the terms
|
||||
used to describes devices within QEMU.
|
||||
|
||||
Common Terms
|
||||
~~~~~~~~~~~~
|
||||
|
||||
Device Front End
|
||||
================
|
||||
|
||||
A device front end is how a device is presented to the guest. The type
|
||||
of device presented should match the hardware that the guest operating
|
||||
system is expecting to see. All devices can be specified with the
|
||||
``--device`` command line option. Running QEMU with the command line
|
||||
options ``--device help`` will list all devices it is aware of. Using
|
||||
the command line ``--device foo,help`` will list the additional
|
||||
configuration options available for that device.
|
||||
|
||||
A front end is often paired with a back end, which describes how the
|
||||
host's resources are used in the emulation.
|
||||
|
||||
Device Buses
|
||||
============
|
||||
|
||||
Most devices will exist on a BUS of some sort. Depending on the
|
||||
machine model you choose (``-M foo``) a number of buses will have been
|
||||
automatically created. In most cases the BUS a device is attached to
|
||||
can be inferred, for example PCI devices are generally automatically
|
||||
allocated to the next free address of first PCI bus found. However in
|
||||
complicated configurations you can explicitly specify what bus
|
||||
(``bus=ID``) a device is attached to along with its address
|
||||
(``addr=N``).
|
||||
|
||||
Some devices, for example a PCI SCSI host controller, will add an
|
||||
additional buses to the system that other devices can be attached to.
|
||||
A hypothetical chain of devices might look like:
|
||||
|
||||
--device foo,bus=pci.0,addr=0,id=foo
|
||||
--device bar,bus=foo.0,addr=1,id=baz
|
||||
|
||||
which would be a bar device (with the ID of baz) which is attached to
|
||||
the first foo bus (foo.0) at address 1. The foo device which provides
|
||||
that bus is itself is attached to the first PCI bus (pci.0).
|
||||
|
||||
|
||||
Device Back End
|
||||
===============
|
||||
|
||||
The back end describes how the data from the emulated device will be
|
||||
processed by QEMU. The configuration of the back end is usually
|
||||
specific to the class of device being emulated. For example serial
|
||||
devices will be backed by a ``--chardev`` which can redirect the data
|
||||
to a file or socket or some other system. Storage devices are handled
|
||||
by ``--blockdev`` which will specify how blocks are handled, for
|
||||
example being stored in a qcow2 file or accessing a raw host disk
|
||||
partition. Back ends can sometimes be stacked to implement features
|
||||
like snapshots.
|
||||
|
||||
While the choice of back end is generally transparent to the guest,
|
||||
there are cases where features will not be reported to the guest if
|
||||
the back end is unable to support it.
|
||||
|
||||
Device Pass Through
|
||||
===================
|
||||
|
||||
Device pass through is where the device is actually given access to
|
||||
the underlying hardware. This can be as simple as exposing a single
|
||||
USB device on the host system to the guest or dedicating a video card
|
||||
in a PCI slot to the exclusive use of the guest.
|
||||
|
||||
|
||||
Emulated Devices
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
devices/ivshmem.rst
|
||||
devices/net.rst
|
||||
devices/nvme.rst
|
||||
devices/usb.rst
|
||||
devices/vhost-user.rst
|
||||
devices/virtio-pmem.rst
|
59
docs/system/devices/vhost-user.rst
Normal file
59
docs/system/devices/vhost-user.rst
Normal file
@ -0,0 +1,59 @@
|
||||
.. _vhost_user:
|
||||
|
||||
vhost-user back ends
|
||||
--------------------
|
||||
|
||||
vhost-user back ends are way to service the request of VirtIO devices
|
||||
outside of QEMU itself. To do this there are a number of things
|
||||
required.
|
||||
|
||||
vhost-user device
|
||||
===================
|
||||
|
||||
These are simple stub devices that ensure the VirtIO device is visible
|
||||
to the guest. The code is mostly boilerplate although each device has
|
||||
a ``chardev`` option which specifies the ID of the ``--chardev``
|
||||
device that connects via a socket to the vhost-user *daemon*.
|
||||
|
||||
vhost-user daemon
|
||||
=================
|
||||
|
||||
This is a separate process that is connected to by QEMU via a socket
|
||||
following the :ref:`vhost_user_proto`. There are a number of daemons
|
||||
that can be built when enabled by the project although any daemon that
|
||||
meets the specification for a given device can be used.
|
||||
|
||||
Shared memory object
|
||||
====================
|
||||
|
||||
In order for the daemon to access the VirtIO queues to process the
|
||||
requests it needs access to the guest's address space. This is
|
||||
achieved via the ``memory-backend-file`` or ``memory-backend-memfd``
|
||||
objects. A reference to a file-descriptor which can access this object
|
||||
will be passed via the socket as part of the protocol negotiation.
|
||||
|
||||
Currently the shared memory object needs to match the size of the main
|
||||
system memory as defined by the ``-m`` argument.
|
||||
|
||||
Example
|
||||
=======
|
||||
|
||||
First start you daemon.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
$ virtio-foo --socket-path=/var/run/foo.sock $OTHER_ARGS
|
||||
|
||||
The you start your QEMU instance specifying the device, chardev and
|
||||
memory objects.
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
$ |qemu_system| \\
|
||||
-m 4096 \\
|
||||
-chardev socket,id=ba1,path=/var/run/foo.sock \\
|
||||
-device vhost-user-foo,chardev=ba1,$OTHER_ARGS \\
|
||||
-object memory-backend-memfd,id=mem,size=4G,share=on \\
|
||||
-numa node,memdev=mem \\
|
||||
...
|
||||
|
@ -11,15 +11,12 @@ or Hypervisor.Framework.
|
||||
|
||||
quickstart
|
||||
invocation
|
||||
device-emulation
|
||||
keys
|
||||
mux-chardev
|
||||
monitor
|
||||
images
|
||||
net
|
||||
virtio-net-failover
|
||||
usb
|
||||
nvme
|
||||
ivshmem
|
||||
linuxboot
|
||||
generic-loader
|
||||
guest-loader
|
||||
@ -30,7 +27,6 @@ or Hypervisor.Framework.
|
||||
gdb
|
||||
managed-startup
|
||||
cpu-hotplug
|
||||
virtio-pmem
|
||||
pr-manager
|
||||
targets
|
||||
security
|
||||
|
13
gitdm.config
13
gitdm.config
@ -28,20 +28,25 @@ EmailMap contrib/gitdm/domain-map
|
||||
#
|
||||
# Use GroupMap to map a file full of addresses to the
|
||||
# same employer. This is used for people that don't post from easily
|
||||
# identifiable corporate emails.
|
||||
# identifiable corporate emails. Please keep this list sorted.
|
||||
#
|
||||
|
||||
GroupMap contrib/gitdm/group-map-redhat Red Hat
|
||||
GroupMap contrib/gitdm/group-map-wavecomp Wave Computing
|
||||
GroupMap contrib/gitdm/group-map-cadence Cadence Design Systems
|
||||
GroupMap contrib/gitdm/group-map-codeweavers CodeWeavers
|
||||
GroupMap contrib/gitdm/group-map-ibm IBM
|
||||
GroupMap contrib/gitdm/group-map-janustech Janus Technologies
|
||||
GroupMap contrib/gitdm/group-map-netflix Netflix
|
||||
GroupMap contrib/gitdm/group-map-redhat Red Hat
|
||||
GroupMap contrib/gitdm/group-map-wavecomp Wave Computing
|
||||
|
||||
# Also group together our prolific individual contributors
|
||||
# and those working under academic auspices
|
||||
# and those working under academic or intern auspices
|
||||
GroupMap contrib/gitdm/group-map-individuals (None)
|
||||
GroupMap contrib/gitdm/group-map-academics Academics (various)
|
||||
GroupMap contrib/gitdm/group-map-interns GSoC/Outreachy Interns
|
||||
|
||||
# Group together robots and other auto-reporters
|
||||
GroupMap contrib/gitdm/group-map-robots Robots (various)
|
||||
|
||||
#
|
||||
#
|
||||
|
@ -190,6 +190,16 @@ void qemu_plugin_add_dyn_cb_arr(GArray *arr);
|
||||
|
||||
void qemu_plugin_disable_mem_helpers(CPUState *cpu);
|
||||
|
||||
/**
|
||||
* qemu_plugin_user_exit(): clean-up callbacks before calling exit callbacks
|
||||
*
|
||||
* This is a user-mode only helper that ensure we have fully cleared
|
||||
* callbacks from all threads before calling the exit callbacks. This
|
||||
* is so the plugins themselves don't have to jump through hoops to
|
||||
* guard against race conditions.
|
||||
*/
|
||||
void qemu_plugin_user_exit(void);
|
||||
|
||||
#else /* !CONFIG_PLUGIN */
|
||||
|
||||
static inline void qemu_plugin_add_opts(void)
|
||||
@ -250,6 +260,8 @@ void qemu_plugin_add_dyn_cb_arr(GArray *arr)
|
||||
static inline void qemu_plugin_disable_mem_helpers(CPUState *cpu)
|
||||
{ }
|
||||
|
||||
static inline void qemu_plugin_user_exit(void)
|
||||
{ }
|
||||
#endif /* !CONFIG_PLUGIN */
|
||||
|
||||
#endif /* QEMU_PLUGIN_H */
|
||||
|
@ -549,6 +549,19 @@ void qemu_plugin_vcpu_for_each(qemu_plugin_id_t id,
|
||||
void qemu_plugin_register_flush_cb(qemu_plugin_id_t id,
|
||||
qemu_plugin_simple_cb_t cb);
|
||||
|
||||
/**
|
||||
* qemu_plugin_register_atexit_cb() - register exit callback
|
||||
* @id: plugin ID
|
||||
* @cb: callback
|
||||
* @userdata: user data for callback
|
||||
*
|
||||
* The @cb function is called once execution has finished. Plugins
|
||||
* should be able to free all their resources at this point much like
|
||||
* after a reset/uninstall callback is called.
|
||||
*
|
||||
* In user-mode it is possible a few un-instrumented instructions from
|
||||
* child threads may run before the host kernel reaps the threads.
|
||||
*/
|
||||
void qemu_plugin_register_atexit_cb(qemu_plugin_id_t id,
|
||||
qemu_plugin_udata_cb_t cb, void *userdata);
|
||||
|
||||
|
@ -35,5 +35,5 @@ void preexit_cleanup(CPUArchState *env, int code)
|
||||
__gcov_dump();
|
||||
#endif
|
||||
gdb_exit(code);
|
||||
qemu_plugin_atexit_cb();
|
||||
qemu_plugin_user_exit();
|
||||
}
|
||||
|
@ -319,7 +319,7 @@ uint64_t qemu_plugin_hwaddr_phys_addr(const struct qemu_plugin_hwaddr *haddr)
|
||||
return block->offset + offset + block->mr->addr;
|
||||
} else {
|
||||
MemoryRegionSection *mrs = haddr->v.io.section;
|
||||
return haddr->v.io.offset + mrs->mr->addr;
|
||||
return mrs->offset_within_address_space + haddr->v.io.offset;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -487,6 +487,45 @@ void qemu_plugin_register_atexit_cb(qemu_plugin_id_t id,
|
||||
plugin_register_cb_udata(id, QEMU_PLUGIN_EV_ATEXIT, cb, udata);
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle exit from linux-user. Unlike the normal atexit() mechanism
|
||||
* we need to handle the clean-up manually as it's possible threads
|
||||
* are still running. We need to remove all callbacks from code
|
||||
* generation, flush the current translations and then we can safely
|
||||
* trigger the exit callbacks.
|
||||
*/
|
||||
|
||||
void qemu_plugin_user_exit(void)
|
||||
{
|
||||
enum qemu_plugin_event ev;
|
||||
CPUState *cpu;
|
||||
|
||||
QEMU_LOCK_GUARD(&plugin.lock);
|
||||
|
||||
start_exclusive();
|
||||
|
||||
/* un-register all callbacks except the final AT_EXIT one */
|
||||
for (ev = 0; ev < QEMU_PLUGIN_EV_MAX; ev++) {
|
||||
if (ev != QEMU_PLUGIN_EV_ATEXIT) {
|
||||
struct qemu_plugin_ctx *ctx;
|
||||
QTAILQ_FOREACH(ctx, &plugin.ctxs, entry) {
|
||||
plugin_unregister_cb__locked(ctx, ev);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tb_flush(current_cpu);
|
||||
|
||||
CPU_FOREACH(cpu) {
|
||||
qemu_plugin_disable_mem_helpers(cpu);
|
||||
}
|
||||
|
||||
end_exclusive();
|
||||
|
||||
/* now it's safe to handle the exit case */
|
||||
qemu_plugin_atexit_cb();
|
||||
}
|
||||
|
||||
/*
|
||||
* Call this function after longjmp'ing to the main loop. It's possible that the
|
||||
* last instruction of a TB might have used helpers, and therefore the
|
||||
|
@ -1,23 +1,47 @@
|
||||
#
|
||||
# Docker TriCore cross-compiler target
|
||||
#
|
||||
# This docker target builds on the debian Stretch base image.
|
||||
# This docker target builds on the Debian Buster base image but
|
||||
# doesn't inherit from the common one to avoid bringing in unneeded
|
||||
# dependencies.
|
||||
#
|
||||
# Copyright (c) 2018 Philippe Mathieu-Daudé
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
#
|
||||
FROM qemu/debian10
|
||||
FROM docker.io/library/debian:buster-slim
|
||||
|
||||
MAINTAINER Philippe Mathieu-Daudé <f4bug@amsat.org>
|
||||
|
||||
RUN apt update && \
|
||||
DEBIAN_FRONTEND=noninteractive apt install -yy eatmydata && \
|
||||
DEBIAN_FRONTEND=noninteractive eatmydata apt install -yy \
|
||||
bzip2 \
|
||||
ca-certificates \
|
||||
ccache \
|
||||
g++ \
|
||||
gcc \
|
||||
git \
|
||||
libglib2.0-dev \
|
||||
libpixman-1-dev \
|
||||
libtest-harness-perl \
|
||||
locales \
|
||||
make \
|
||||
ninja-build \
|
||||
perl-base \
|
||||
pkgconf \
|
||||
python3-pip \
|
||||
python3-setuptools \
|
||||
python3-wheel
|
||||
|
||||
RUN git clone --single-branch \
|
||||
https://github.com/bkoppelmann/tricore-binutils.git \
|
||||
/usr/src/binutils && \
|
||||
cd /usr/src/binutils && chmod +x missing && \
|
||||
CFLAGS=-w ./configure --prefix=/usr --disable-nls --target=tricore && \
|
||||
CFLAGS=-w ./configure --prefix=/usr/local --disable-nls --target=tricore && \
|
||||
make && make install && \
|
||||
rm -rf /usr/src/binutils
|
||||
|
||||
# This image isn't designed for building QEMU but building tests
|
||||
ENV QEMU_CONFIGURE_OPTS --disable-system --disable-user
|
||||
# This image can only build a very minimal QEMU as well as the tests
|
||||
ENV DEF_TARGET_LIST tricore-softmmu
|
||||
ENV QEMU_CONFIGURE_OPTS --disable-user --disable-tools --disable-fdt
|
||||
|
@ -72,6 +72,10 @@ fi
|
||||
: ${cross_cc_x86_64="x86_64-linux-gnu-gcc"}
|
||||
: ${cross_cc_cflags_x86_64="-m64"}
|
||||
|
||||
# tricore is special as it doesn't have a compiler
|
||||
: ${cross_as_tricore="tricore-as"}
|
||||
: ${cross_ld_tricore="tricore-ld"}
|
||||
|
||||
for target in $target_list; do
|
||||
arch=${target%%-*}
|
||||
|
||||
@ -247,6 +251,20 @@ for target in $target_list; do
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Special handling for assembler only tests
|
||||
eval "target_as=\"\${cross_as_$arch}\""
|
||||
eval "target_ld=\"\${cross_ld_$arch}\""
|
||||
if has $target_as && has $target_ld; then
|
||||
case $target in
|
||||
tricore-softmmu)
|
||||
echo "CROSS_CC_GUEST=$target_as" >> $config_target_mak
|
||||
echo "CROSS_AS_GUEST=$target_as" >> $config_target_mak
|
||||
echo "CROSS_LD_GUEST=$target_ld" >> $config_target_mak
|
||||
got_cross_cc=yes
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
if test $got_cross_cc = yes; then
|
||||
|
Loading…
Reference in New Issue
Block a user