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:
Peter Maydell 2021-07-26 11:00:14 +01:00
commit 34fd92ab41
32 changed files with 366 additions and 57 deletions

2
.gitignore vendored
View File

@ -13,3 +13,5 @@ GTAGS
*~ *~
*.ast_raw *.ast_raw
*.depend_raw *.depend_raw
*.swp
*.patch

View File

@ -354,6 +354,17 @@ build-some-softmmu:
TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu TARGETS: xtensa-softmmu arm-softmmu aarch64-softmmu alpha-softmmu
MAKE_CHECK_ARGS: check-tcg 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: clang-system:
extends: .native_build_job_template extends: .native_build_job_template
needs: needs:

View File

@ -85,18 +85,3 @@ x64-macos-11-base-build:
PATH_EXTRA: /usr/local/opt/ccache/libexec:/usr/local/opt/gettext/bin 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 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 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

View File

@ -1,10 +1,23 @@
docker-opensbi: # All jobs needing docker-opensbi must use the same rules it uses.
stage: containers .opensbi_job_rules:
rules: # Only run this job when the Dockerfile is modified rules: # Only run this job when ...
- changes: - changes:
# this file is modified
- .gitlab-ci.d/opensbi.yml - .gitlab-ci.d/opensbi.yml
# or the Dockerfile is modified
- .gitlab-ci.d/opensbi/Dockerfile - .gitlab-ci.d/opensbi/Dockerfile
when: always 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 image: docker:19.03.1
services: services:
- docker:19.03.1-dind - docker:19.03.1-dind
@ -24,16 +37,9 @@ docker-opensbi:
- docker push $IMAGE_TAG - docker push $IMAGE_TAG
build-opensbi: build-opensbi:
extends: .opensbi_job_rules
stage: build stage: build
needs: ['docker-opensbi'] 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: artifacts:
paths: # 'artifacts.zip' will contains the following files: paths: # 'artifacts.zip' will contains the following files:
- pc-bios/opensbi-riscv32-generic-fw_dynamic.bin - pc-bios/opensbi-riscv32-generic-fw_dynamic.bin

View File

@ -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> Thiemo Seufer <ths@networkno.de> ths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>
malc <av1474@comtv.ru> malc <malc@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: # There is also a:
# (no author) <(no author)@c046a42c-6fe2-441c-8c8c-71466251a162> # (no author) <(no author)@c046a42c-6fe2-441c-8c8c-71466251a162>
# for the cvs2svn initialization commit e63c3dc74bf. # for the cvs2svn initialization commit e63c3dc74bf.

View File

@ -335,7 +335,7 @@ abi_long do_freebsd_syscall(void *cpu_env, int num, abi_long arg1,
_mcleanup(); _mcleanup();
#endif #endif
gdb_exit(arg1); gdb_exit(arg1);
qemu_plugin_atexit_cb(); qemu_plugin_user_exit();
/* XXX: should free thread stack and CPU env */ /* XXX: should free thread stack and CPU env */
_exit(arg1); _exit(arg1);
ret = 0; /* avoid warning */ ret = 0; /* avoid warning */
@ -437,7 +437,7 @@ abi_long do_netbsd_syscall(void *cpu_env, int num, abi_long arg1,
_mcleanup(); _mcleanup();
#endif #endif
gdb_exit(arg1); gdb_exit(arg1);
qemu_plugin_atexit_cb(); qemu_plugin_user_exit();
/* XXX: should free thread stack and CPU env */ /* XXX: should free thread stack and CPU env */
_exit(arg1); _exit(arg1);
ret = 0; /* avoid warning */ ret = 0; /* avoid warning */
@ -516,7 +516,7 @@ abi_long do_openbsd_syscall(void *cpu_env, int num, abi_long arg1,
_mcleanup(); _mcleanup();
#endif #endif
gdb_exit(arg1); gdb_exit(arg1);
qemu_plugin_atexit_cb(); qemu_plugin_user_exit();
/* XXX: should free thread stack and CPU env */ /* XXX: should free thread stack and CPU env */
_exit(arg1); _exit(arg1);
ret = 0; /* avoid warning */ ret = 0; /* avoid warning */

10
configure vendored
View File

@ -5103,12 +5103,10 @@ if test "$skip_meson" = no; then
echo "[properties]" >> $cross echo "[properties]" >> $cross
# unroll any custom device configs # unroll any custom device configs
if test -n "$device_archs"; then for a in $device_archs; do
for a in $device_archs; do eval "c=\$devices_${a}"
eval "c=\$devices_${a}" echo "${a}-softmmu = '$c'" >> $cross
echo "${a}-softmmu = '$c'" >> $cross done
done
fi
test -z "$cxx" && echo "link_language = 'c'" >> $cross test -z "$cxx" && echo "link_language = 'c'" >> $cross
echo "[built-in options]" >> $cross echo "[built-in options]" >> $cross

View File

@ -31,6 +31,12 @@ pbrook@c046a42c-6fe2-441c-8c8c-71466251a162 paul@codesourcery.com
ths@c046a42c-6fe2-441c-8c8c-71466251a162 ths@networkno.de ths@c046a42c-6fe2-441c-8c8c-71466251a162 ths@networkno.de
malc@c046a42c-6fe2-441c-8c8c-71466251a162 av1474@comtv.ru 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: # There is also a:
# (no author) <(no author)@c046a42c-6fe2-441c-8c8c-71466251a162> # (no author) <(no author)@c046a42c-6fe2-441c-8c8c-71466251a162>
# for the cvs2svn initialization commit e63c3dc74bf. # for the cvs2svn initialization commit e63c3dc74bf.

View File

@ -9,6 +9,8 @@ baidu.com Baidu
bytedance.com ByteDance bytedance.com ByteDance
cmss.chinamobile.com China Mobile cmss.chinamobile.com China Mobile
citrix.com Citrix citrix.com Citrix
crudebyte.com Crudebyte
eldorado.org.br Instituto de Pesquisas Eldorado
fujitsu.com Fujitsu fujitsu.com Fujitsu
google.com Google google.com Google
greensocs.com GreenSocs greensocs.com GreenSocs
@ -17,20 +19,25 @@ ibm.com IBM
igalia.com Igalia igalia.com Igalia
intel.com Intel intel.com Intel
linaro.org Linaro linaro.org Linaro
lwn.net LWN
microsoft.com Microsoft microsoft.com Microsoft
mvista.com MontaVista
nokia.com Nokia nokia.com Nokia
nuviainc.com NUVIA nuviainc.com NUVIA
nvidia.com NVIDIA
oracle.com Oracle oracle.com Oracle
proxmox.com Proxmox proxmox.com Proxmox
quicinc.com Qualcomm Innovation Center quicinc.com Qualcomm Innovation Center
redhat.com Red Hat redhat.com Red Hat
rt-rk.com RT-RK rt-rk.com RT-RK
samsung.com Samsung
siemens.com Siemens siemens.com Siemens
sifive.com SiFive sifive.com SiFive
suse.com SUSE suse.com SUSE
suse.de SUSE suse.de SUSE
virtuozzo.com Virtuozzo virtuozzo.com Virtuozzo
wdc.com Western Digital wdc.com Western Digital
windriver.com Wind River
xilinx.com Xilinx xilinx.com Xilinx
yadro.com YADRO yadro.com YADRO
yandex-team.ru Yandex yandex-team.ru Yandex

View File

@ -16,3 +16,6 @@ cota@braap.org
uni-paderborn.de uni-paderborn.de
edu edu
edu.cn edu.cn
# Boston University
bu.edu

View File

@ -29,3 +29,8 @@ mrolnik@gmail.com
huth@tuxfamily.org huth@tuxfamily.org
jhogan@kernel.org jhogan@kernel.org
atar4qemu@gmail.com atar4qemu@gmail.com
minwoo.im.dev@gmail.com
bmeng.cn@gmail.com
liq3ea@gmail.com
chetan4windows@gmail.com
akihiko.odaki@gmail.com

View 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

View File

@ -0,0 +1,5 @@
#
# Netflix contributors using their personal emails
#
imp@bsdimp.com

View 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

View File

@ -200,7 +200,7 @@ static void fifo_destroy(Cache *cache)
{ {
int i; 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); 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; struct qemu_plugin_hwaddr *hwaddr;
InsnData *insn; InsnData *insn;
g_mutex_lock(&mtx);
hwaddr = qemu_plugin_get_hwaddr(info, vaddr); hwaddr = qemu_plugin_get_hwaddr(info, vaddr);
if (hwaddr && qemu_plugin_hwaddr_is_io(hwaddr)) { if (hwaddr && qemu_plugin_hwaddr_is_io(hwaddr)) {
g_mutex_unlock(&mtx);
return; return;
} }
effective_addr = hwaddr ? qemu_plugin_hwaddr_phys_addr(hwaddr) : vaddr; effective_addr = hwaddr ? qemu_plugin_hwaddr_phys_addr(hwaddr) : vaddr;
g_mutex_lock(&mtx);
if (!access_cache(dcache, effective_addr)) { if (!access_cache(dcache, effective_addr)) {
insn = (InsnData *) userdata; insn = (InsnData *) userdata;
insn->dmisses++; insn->dmisses++;
@ -470,7 +469,7 @@ static int icmp(gconstpointer a, gconstpointer b)
return insn_a->imisses < insn_b->imisses ? 1 : -1; 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_autoptr(GString) rep = g_string_new("");
g_string_append_printf(rep, g_string_append_printf(rep,
@ -488,7 +487,7 @@ static void log_stats()
qemu_plugin_outs(rep->str); qemu_plugin_outs(rep->str);
} }
static void log_top_insns() static void log_top_insns(void)
{ {
int i; int i;
GList *curr, *miss_insns; 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); g_hash_table_destroy(miss_ht);
} }
static void policy_init() static void policy_init(void)
{ {
switch (policy) { switch (policy) {
case LRU: case LRU:

View File

@ -1,3 +1,5 @@
.. _vhost_user_proto:
=================== ===================
Vhost-user Protocol Vhost-user Protocol
=================== ===================

View 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

View 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 \\
...

View File

@ -11,15 +11,12 @@ or Hypervisor.Framework.
quickstart quickstart
invocation invocation
device-emulation
keys keys
mux-chardev mux-chardev
monitor monitor
images images
net
virtio-net-failover virtio-net-failover
usb
nvme
ivshmem
linuxboot linuxboot
generic-loader generic-loader
guest-loader guest-loader
@ -30,7 +27,6 @@ or Hypervisor.Framework.
gdb gdb
managed-startup managed-startup
cpu-hotplug cpu-hotplug
virtio-pmem
pr-manager pr-manager
targets targets
security security

View File

@ -28,20 +28,25 @@ EmailMap contrib/gitdm/domain-map
# #
# Use GroupMap to map a file full of addresses to the # Use GroupMap to map a file full of addresses to the
# same employer. This is used for people that don't post from easily # 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-cadence Cadence Design Systems
GroupMap contrib/gitdm/group-map-codeweavers CodeWeavers GroupMap contrib/gitdm/group-map-codeweavers CodeWeavers
GroupMap contrib/gitdm/group-map-ibm IBM GroupMap contrib/gitdm/group-map-ibm IBM
GroupMap contrib/gitdm/group-map-janustech Janus Technologies 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 # 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-individuals (None)
GroupMap contrib/gitdm/group-map-academics Academics (various) 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)
# #
# #

View File

@ -190,6 +190,16 @@ void qemu_plugin_add_dyn_cb_arr(GArray *arr);
void qemu_plugin_disable_mem_helpers(CPUState *cpu); 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 */ #else /* !CONFIG_PLUGIN */
static inline void qemu_plugin_add_opts(void) 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_disable_mem_helpers(CPUState *cpu)
{ } { }
static inline void qemu_plugin_user_exit(void)
{ }
#endif /* !CONFIG_PLUGIN */ #endif /* !CONFIG_PLUGIN */
#endif /* QEMU_PLUGIN_H */ #endif /* QEMU_PLUGIN_H */

View File

@ -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, void qemu_plugin_register_flush_cb(qemu_plugin_id_t id,
qemu_plugin_simple_cb_t cb); 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, void qemu_plugin_register_atexit_cb(qemu_plugin_id_t id,
qemu_plugin_udata_cb_t cb, void *userdata); qemu_plugin_udata_cb_t cb, void *userdata);

View File

@ -35,5 +35,5 @@ void preexit_cleanup(CPUArchState *env, int code)
__gcov_dump(); __gcov_dump();
#endif #endif
gdb_exit(code); gdb_exit(code);
qemu_plugin_atexit_cb(); qemu_plugin_user_exit();
} }

View File

@ -319,7 +319,7 @@ uint64_t qemu_plugin_hwaddr_phys_addr(const struct qemu_plugin_hwaddr *haddr)
return block->offset + offset + block->mr->addr; return block->offset + offset + block->mr->addr;
} else { } else {
MemoryRegionSection *mrs = haddr->v.io.section; 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 #endif

View File

@ -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); 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 * 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 * last instruction of a TB might have used helpers, and therefore the

View File

@ -1,23 +1,47 @@
# #
# Docker TriCore cross-compiler target # 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é # Copyright (c) 2018 Philippe Mathieu-Daudé
# #
# SPDX-License-Identifier: GPL-2.0-or-later # 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> 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 \ RUN git clone --single-branch \
https://github.com/bkoppelmann/tricore-binutils.git \ https://github.com/bkoppelmann/tricore-binutils.git \
/usr/src/binutils && \ /usr/src/binutils && \
cd /usr/src/binutils && chmod +x missing && \ 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 && \ make && make install && \
rm -rf /usr/src/binutils rm -rf /usr/src/binutils
# This image isn't designed for building QEMU but building tests # This image can only build a very minimal QEMU as well as the tests
ENV QEMU_CONFIGURE_OPTS --disable-system --disable-user ENV DEF_TARGET_LIST tricore-softmmu
ENV QEMU_CONFIGURE_OPTS --disable-user --disable-tools --disable-fdt

View File

@ -72,6 +72,10 @@ fi
: ${cross_cc_x86_64="x86_64-linux-gnu-gcc"} : ${cross_cc_x86_64="x86_64-linux-gnu-gcc"}
: ${cross_cc_cflags_x86_64="-m64"} : ${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 for target in $target_list; do
arch=${target%%-*} arch=${target%%-*}
@ -247,6 +251,20 @@ for target in $target_list; do
fi fi
fi 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 fi
if test $got_cross_cc = yes; then if test $got_cross_cc = yes; then