From 6e52aafbac1d9f4eaa465ab4ec5d4327f2430832 Mon Sep 17 00:00:00 2001 From: Viresh Kumar Date: Wed, 21 Jul 2021 00:26:35 +0100 Subject: [PATCH 01/28] gitignore: Update with some filetypes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update .gitignore to ignore .swp and .patch files. Signed-off-by: Viresh Kumar Signed-off-by: Alex Bennée Reviewed-by: Alex Bennée Message-Id: <79262dbe1f7888eb02e1911501eebafa6f2f6400.1616583806.git.viresh.kumar@linaro.org> Message-Id: <20210720232703.10650-2-alex.bennee@linaro.org> --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 75a4be0724..eb2553026c 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ GTAGS *~ *.ast_raw *.depend_raw +*.swp +*.patch From 189c099f75f39da1c1a0f3e527109af2b169a8fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:26:36 +0100 Subject: [PATCH 02/28] docs: collect the disparate device emulation docs into one section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit While we are at it add a brief preamble that explains some of the common concepts in QEMU's device emulation which will hopefully lead to less confusing about our dizzying command line options. Signed-off-by: Alex Bennée Reviewed-by: Markus Armbruster Cc: Paolo Bonzini Cc: Daniel P. Berrangé Cc: Eduardo Habkost Message-Id: <20210720232703.10650-3-alex.bennee@linaro.org> --- docs/system/device-emulation.rst | 89 +++++++++++++++++++++++ docs/system/{ => devices}/ivshmem.rst | 0 docs/system/{ => devices}/net.rst | 0 docs/system/{ => devices}/nvme.rst | 0 docs/system/{ => devices}/usb.rst | 0 docs/system/{ => devices}/virtio-pmem.rst | 0 docs/system/index.rst | 6 +- 7 files changed, 90 insertions(+), 5 deletions(-) create mode 100644 docs/system/device-emulation.rst rename docs/system/{ => devices}/ivshmem.rst (100%) rename docs/system/{ => devices}/net.rst (100%) rename docs/system/{ => devices}/nvme.rst (100%) rename docs/system/{ => devices}/usb.rst (100%) rename docs/system/{ => devices}/virtio-pmem.rst (100%) diff --git a/docs/system/device-emulation.rst b/docs/system/device-emulation.rst new file mode 100644 index 0000000000..8adf05f606 --- /dev/null +++ b/docs/system/device-emulation.rst @@ -0,0 +1,89 @@ +.. _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/virtio-pmem.rst diff --git a/docs/system/ivshmem.rst b/docs/system/devices/ivshmem.rst similarity index 100% rename from docs/system/ivshmem.rst rename to docs/system/devices/ivshmem.rst diff --git a/docs/system/net.rst b/docs/system/devices/net.rst similarity index 100% rename from docs/system/net.rst rename to docs/system/devices/net.rst diff --git a/docs/system/nvme.rst b/docs/system/devices/nvme.rst similarity index 100% rename from docs/system/nvme.rst rename to docs/system/devices/nvme.rst diff --git a/docs/system/usb.rst b/docs/system/devices/usb.rst similarity index 100% rename from docs/system/usb.rst rename to docs/system/devices/usb.rst diff --git a/docs/system/virtio-pmem.rst b/docs/system/devices/virtio-pmem.rst similarity index 100% rename from docs/system/virtio-pmem.rst rename to docs/system/devices/virtio-pmem.rst diff --git a/docs/system/index.rst b/docs/system/index.rst index fda4b1b705..64a424ae99 100644 --- a/docs/system/index.rst +++ b/docs/system/index.rst @@ -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 From 15d9c3cef108f34874200785bf9970bf77dc378b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:26:37 +0100 Subject: [PATCH 03/28] docs: add a section on the generalities of vhost-user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit While we do mention some of this stuff in the various daemons and manuals the subtleties of the socket and memory sharing are sometimes missed. This document attempts to give some background on vhost-user daemons in general terms. Signed-off-by: Alex Bennée Reviewed-by: Stefan Hajnoczi Message-Id: <20210720232703.10650-4-alex.bennee@linaro.org> --- docs/interop/vhost-user.rst | 2 + docs/system/device-emulation.rst | 1 + docs/system/devices/vhost-user.rst | 59 ++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 docs/system/devices/vhost-user.rst diff --git a/docs/interop/vhost-user.rst b/docs/interop/vhost-user.rst index d6085f7045..7fc693521e 100644 --- a/docs/interop/vhost-user.rst +++ b/docs/interop/vhost-user.rst @@ -1,3 +1,5 @@ +.. _vhost_user_proto: + =================== Vhost-user Protocol =================== diff --git a/docs/system/device-emulation.rst b/docs/system/device-emulation.rst index 8adf05f606..7afcfd8064 100644 --- a/docs/system/device-emulation.rst +++ b/docs/system/device-emulation.rst @@ -86,4 +86,5 @@ Emulated Devices devices/net.rst devices/nvme.rst devices/usb.rst + devices/vhost-user.rst devices/virtio-pmem.rst diff --git a/docs/system/devices/vhost-user.rst b/docs/system/devices/vhost-user.rst new file mode 100644 index 0000000000..86128114fa --- /dev/null +++ b/docs/system/devices/vhost-user.rst @@ -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 \\ + ... + From 11bdcfcdd2ccad91dc3076c7de30803f32f7cdde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:26:38 +0100 Subject: [PATCH 04/28] configure: remove needless if leg MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It was pointed out in review of the previous patch that the if leg isn't needed as the for loop will not enter on an empty $device_archs. Fixes: d1d5e9eefd ("configure: allow the selection of alternate config in the build") Signed-off-by: Alex Bennée Reviewed-by: Richard Henderson Message-Id: <20210720232703.10650-5-alex.bennee@linaro.org> --- configure | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/configure b/configure index 0005cd140d..69cef68861 100755 --- a/configure +++ b/configure @@ -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 From fa3d60953c2d47c9829dd57b3e3900f2f620ce93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:26:39 +0100 Subject: [PATCH 05/28] contrib/gitdm: add some new aliases to fix up commits MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Alex Bennée Reviewed-by: Richard Henderson Cc: Yuval Shaia Message-Id: <20210720232703.10650-6-alex.bennee@linaro.org> --- contrib/gitdm/aliases | 3 +++ 1 file changed, 3 insertions(+) diff --git a/contrib/gitdm/aliases b/contrib/gitdm/aliases index c1e744312f..c6ed215e68 100644 --- a/contrib/gitdm/aliases +++ b/contrib/gitdm/aliases @@ -31,6 +31,9 @@ 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 +# 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. From 82585a3100286f8fbe08fed763b5229efee9a3f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:26:40 +0100 Subject: [PATCH 06/28] .mailmap: fix up some broken commit authors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: 49a6f3bffb ("target/arm: Correct the encoding of MDCCSR_EL0 and DBGDSCRint") Fixes: 5a07192a04 ("target/i386: Fix handling of k_gs_base register in 32-bit mode in gdbstub") Signed-off-by: Alex Bennée Cc: Nick Hudson Cc: Marek Dolata Message-Id: <20210720232703.10650-7-alex.bennee@linaro.org> --- .mailmap | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.mailmap b/.mailmap index a1bd659817..082ff893ab 100644 --- a/.mailmap +++ b/.mailmap @@ -27,6 +27,10 @@ Paul Brook pbrook ths malc malc +# Corrupted Author fields +Marek Dolata mkdolata@us.ibm.com +Nick Hudson hnick@vmware.com + # There is also a: # (no author) <(no author)@c046a42c-6fe2-441c-8c8c-71466251a162> # for the cvs2svn initialization commit e63c3dc74bf. From 0204e6482bcf063c1b5db488b7de8fc1d6bab603 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:26:41 +0100 Subject: [PATCH 07/28] contrib/gitdm: add domain-map for MontaVista MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Alex Bennée Acked-by: Corey Minyard Message-Id: <20210720232703.10650-8-alex.bennee@linaro.org> --- contrib/gitdm/domain-map | 1 + 1 file changed, 1 insertion(+) diff --git a/contrib/gitdm/domain-map b/contrib/gitdm/domain-map index 0074da618f..efbbb15643 100644 --- a/contrib/gitdm/domain-map +++ b/contrib/gitdm/domain-map @@ -18,6 +18,7 @@ igalia.com Igalia intel.com Intel linaro.org Linaro microsoft.com Microsoft +mvista.com MontaVista nokia.com Nokia nuviainc.com NUVIA oracle.com Oracle From 200a10279e5bace8b918c1fdc02215199e355b08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:26:42 +0100 Subject: [PATCH 08/28] contrib/gitdm: add a group mapping for robot scanners MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This mostly affects Reported-by: tags Signed-off-by: Alex Bennée Message-Id: <20210720232703.10650-9-alex.bennee@linaro.org> --- contrib/gitdm/group-map-robots | 7 +++++++ gitdm.config | 3 +++ 2 files changed, 10 insertions(+) create mode 100644 contrib/gitdm/group-map-robots diff --git a/contrib/gitdm/group-map-robots b/contrib/gitdm/group-map-robots new file mode 100644 index 0000000000..ffd956c2eb --- /dev/null +++ b/contrib/gitdm/group-map-robots @@ -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 diff --git a/gitdm.config b/gitdm.config index c01c219078..7378238c20 100644 --- a/gitdm.config +++ b/gitdm.config @@ -43,6 +43,9 @@ GroupMap contrib/gitdm/group-map-janustech Janus Technologies GroupMap contrib/gitdm/group-map-individuals (None) GroupMap contrib/gitdm/group-map-academics Academics (various) +# Group together robots and other auto-reporters +GroupMap contrib/gitdm/group-map-robots Robots (various) + # # # Use FileTypeMap to map a file types to file names using regular From 20ddc8ce9914b1889363ff3e8c8ff6ab72fba6b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:26:43 +0100 Subject: [PATCH 09/28] gitdm.config: sort the corporate GroupMap entries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Lets try and keep them that way. Signed-off-by: Alex Bennée Reviewed-by: Philippe Mathieu-Daudé Message-Id: <20210720232703.10650-10-alex.bennee@linaro.org> --- gitdm.config | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gitdm.config b/gitdm.config index 7378238c20..a3542d2fc7 100644 --- a/gitdm.config +++ b/gitdm.config @@ -28,15 +28,15 @@ 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-redhat Red Hat +GroupMap contrib/gitdm/group-map-wavecomp Wave Computing # Also group together our prolific individual contributors # and those working under academic auspices From 44114d3fda3c9b8d43f3af46608b402115dd6030 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:26:44 +0100 Subject: [PATCH 10/28] contrib/gitdm: add domain-map/group-map mappings for Samsung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Minwoo's work from their personal address are treated as personal contributions. Signed-off-by: Alex Bennée Acked-by: Klaus Jensen Cc: Gollu Appalanaidu Cc: Minwoo Im Message-Id: <20210720232703.10650-11-alex.bennee@linaro.org> --- contrib/gitdm/domain-map | 1 + contrib/gitdm/group-map-individuals | 1 + 2 files changed, 2 insertions(+) diff --git a/contrib/gitdm/domain-map b/contrib/gitdm/domain-map index efbbb15643..beeb24341e 100644 --- a/contrib/gitdm/domain-map +++ b/contrib/gitdm/domain-map @@ -26,6 +26,7 @@ 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 diff --git a/contrib/gitdm/group-map-individuals b/contrib/gitdm/group-map-individuals index 36bbb77c39..4ac2f98823 100644 --- a/contrib/gitdm/group-map-individuals +++ b/contrib/gitdm/group-map-individuals @@ -29,3 +29,4 @@ mrolnik@gmail.com huth@tuxfamily.org jhogan@kernel.org atar4qemu@gmail.com +minwoo.im.dev@gmail.com From 061a20d50a330ccd4d865513075deac25979067e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:26:45 +0100 Subject: [PATCH 11/28] contrib/gitdm: add domain-map for Eldorado MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Luis acked on IRC: #qemu@znc-oftc_2021-07-13.txt:[15:00:02] stsquad: "eldorado.org.br Eldorado" is fine Signed-off-by: Alex Bennée Acked-by: Luis Pires Message-Id: <20210720232703.10650-12-alex.bennee@linaro.org> --- contrib/gitdm/domain-map | 1 + 1 file changed, 1 insertion(+) diff --git a/contrib/gitdm/domain-map b/contrib/gitdm/domain-map index beeb24341e..41875c9e75 100644 --- a/contrib/gitdm/domain-map +++ b/contrib/gitdm/domain-map @@ -9,6 +9,7 @@ baidu.com Baidu bytedance.com ByteDance cmss.chinamobile.com China Mobile citrix.com Citrix +eldorado.org.br Instituto de Pesquisas Eldorado fujitsu.com Fujitsu google.com Google greensocs.com GreenSocs From 0e7933e31478519ba5d46a06d4a0f3ba31882f27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:26:46 +0100 Subject: [PATCH 12/28] contrib/gitdm: add domain-map/group-map for Wind River MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As per discussion at: http://patchwork.ozlabs.org/project/qemu-devel/patch/20201004180443.2035359-19-f4bug@amsat.org/ I've added Bin's personal email as an individual contributor. Signed-off-by: Alex Bennée Acked-by: Bin Meng Cc: Ruimei Yan Cc: Xuzhou Cheng Message-Id: <20210720232703.10650-13-alex.bennee@linaro.org> --- contrib/gitdm/domain-map | 1 + contrib/gitdm/group-map-individuals | 1 + 2 files changed, 2 insertions(+) diff --git a/contrib/gitdm/domain-map b/contrib/gitdm/domain-map index 41875c9e75..27b8fbdf8a 100644 --- a/contrib/gitdm/domain-map +++ b/contrib/gitdm/domain-map @@ -34,6 +34,7 @@ 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 diff --git a/contrib/gitdm/group-map-individuals b/contrib/gitdm/group-map-individuals index 4ac2f98823..9b6406e624 100644 --- a/contrib/gitdm/group-map-individuals +++ b/contrib/gitdm/group-map-individuals @@ -30,3 +30,4 @@ huth@tuxfamily.org jhogan@kernel.org atar4qemu@gmail.com minwoo.im.dev@gmail.com +bmeng.cn@gmail.com From a8d1095a10114e339665eef601ba615b6b673444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:26:47 +0100 Subject: [PATCH 13/28] contrib/gitdm: un-ironically add a mapping for LWN MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I think this mainly comes from kernel-doc stuff imported into the QEMU tree. Signed-off-by: Alex Bennée Cc: Jonathan Corbet Message-Id: <20210720232703.10650-14-alex.bennee@linaro.org> --- contrib/gitdm/domain-map | 1 + 1 file changed, 1 insertion(+) diff --git a/contrib/gitdm/domain-map b/contrib/gitdm/domain-map index 27b8fbdf8a..5ac8288716 100644 --- a/contrib/gitdm/domain-map +++ b/contrib/gitdm/domain-map @@ -18,6 +18,7 @@ ibm.com IBM igalia.com Igalia intel.com Intel linaro.org Linaro +lwn.net LWN microsoft.com Microsoft mvista.com MontaVista nokia.com Nokia From 3d4fcf4200f6b8957e4b3a64082b1f820279a476 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:26:48 +0100 Subject: [PATCH 14/28] contrib/gitdm: add domain-map for Crudebyte MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Alex Bennée Reviewed-by: Christian Schoenebeck Message-Id: <20210720232703.10650-15-alex.bennee@linaro.org> --- contrib/gitdm/domain-map | 1 + 1 file changed, 1 insertion(+) diff --git a/contrib/gitdm/domain-map b/contrib/gitdm/domain-map index 5ac8288716..e42861cd11 100644 --- a/contrib/gitdm/domain-map +++ b/contrib/gitdm/domain-map @@ -9,6 +9,7 @@ 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 From efe2165a0f0a92c1b9fb8d42f41dfccd2cfddd83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:26:49 +0100 Subject: [PATCH 15/28] contrib/gitdm: add domain-map for NVIDIA MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Alex Bennée Reviewed-by: Kirti Wankhede Cc: Yishai Hadas Message-Id: <20210720232703.10650-16-alex.bennee@linaro.org> --- contrib/gitdm/domain-map | 1 + 1 file changed, 1 insertion(+) diff --git a/contrib/gitdm/domain-map b/contrib/gitdm/domain-map index e42861cd11..2800d9f986 100644 --- a/contrib/gitdm/domain-map +++ b/contrib/gitdm/domain-map @@ -24,6 +24,7 @@ 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 From e061e481a63305365816c63a16ec314fc92ac856 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:26:50 +0100 Subject: [PATCH 16/28] contrib/gitdm: add group-map for Netflix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Warner confirmed he works for Netflix on IRC. Signed-off-by: Alex Bennée Reviewed-by: Warner Losh Message-Id: <20210720232703.10650-17-alex.bennee@linaro.org> --- contrib/gitdm/group-map-netflix | 5 +++++ gitdm.config | 1 + 2 files changed, 6 insertions(+) create mode 100644 contrib/gitdm/group-map-netflix diff --git a/contrib/gitdm/group-map-netflix b/contrib/gitdm/group-map-netflix new file mode 100644 index 0000000000..468f95dcb2 --- /dev/null +++ b/contrib/gitdm/group-map-netflix @@ -0,0 +1,5 @@ +# +# Netflix contributors using their personal emails +# + +imp@bsdimp.com diff --git a/gitdm.config b/gitdm.config index a3542d2fc7..5d5e70fe5f 100644 --- a/gitdm.config +++ b/gitdm.config @@ -35,6 +35,7 @@ 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 From a7659cd675c4c8fc59818008ad57e0f3dee5f148 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:26:51 +0100 Subject: [PATCH 17/28] contrib/gitdm: add an explicit academic entry for BU MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For some reason Alexander's contributions were not getting grouped from the plain "edu" mapping. Signed-off-by: Alex Bennée Reviewed-by: Alexander Bulekov Message-Id: <20210720232703.10650-18-alex.bennee@linaro.org> --- contrib/gitdm/group-map-academics | 3 +++ 1 file changed, 3 insertions(+) diff --git a/contrib/gitdm/group-map-academics b/contrib/gitdm/group-map-academics index bf3c894821..44745ca85b 100644 --- a/contrib/gitdm/group-map-academics +++ b/contrib/gitdm/group-map-academics @@ -16,3 +16,6 @@ cota@braap.org uni-paderborn.de edu edu.cn + +# Boston University +bu.edu From a10f373de4e983d7fc91db5733ff08e9ce30b248 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:26:52 +0100 Subject: [PATCH 18/28] contrib/gitdm: add a new interns group-map for GSoC/Outreachy work MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It makes sense to put our various interns in a group so we can see the overall impact of GSoC and Outreachy on the project. Signed-off-by: Alex Bennée Reviewed-by: Mahmoud Mandour Cc: Ahmed Karaman Cc: César Belley Message-Id: <20210720232703.10650-19-alex.bennee@linaro.org> --- contrib/gitdm/group-map-interns | 13 +++++++++++++ gitdm.config | 3 ++- 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 contrib/gitdm/group-map-interns diff --git a/contrib/gitdm/group-map-interns b/contrib/gitdm/group-map-interns new file mode 100644 index 0000000000..fe33a3231e --- /dev/null +++ b/contrib/gitdm/group-map-interns @@ -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 diff --git a/gitdm.config b/gitdm.config index 5d5e70fe5f..288b100d89 100644 --- a/gitdm.config +++ b/gitdm.config @@ -40,9 +40,10 @@ 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) From 094d278547dcb66ad222047ab9c325c452fe31e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:26:53 +0100 Subject: [PATCH 19/28] contrib/gitdm: add more individual contributor entries. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also ensure Li's canonical gmail address is used. Signed-off-by: Alex Bennée Acked-by: Li Qiang Acked-by: Chetan Pant Acked-by: Akihiko Odaki Message-Id: <20210720232703.10650-20-alex.bennee@linaro.org> --- contrib/gitdm/aliases | 3 +++ contrib/gitdm/group-map-individuals | 3 +++ 2 files changed, 6 insertions(+) diff --git a/contrib/gitdm/aliases b/contrib/gitdm/aliases index c6ed215e68..4792413ce7 100644 --- a/contrib/gitdm/aliases +++ b/contrib/gitdm/aliases @@ -31,6 +31,9 @@ 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 diff --git a/contrib/gitdm/group-map-individuals b/contrib/gitdm/group-map-individuals index 9b6406e624..f816aa8770 100644 --- a/contrib/gitdm/group-map-individuals +++ b/contrib/gitdm/group-map-individuals @@ -31,3 +31,6 @@ 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 From f7e68c9c99ad94f23d3ba3af1642c805b11c71c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:26:54 +0100 Subject: [PATCH 20/28] tcg/plugins: implement a qemu_plugin_user_exit helper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In user-mode emulation there is a small race between preexit_cleanup and exit_group() which means we may end up calling instrumented instructions before the kernel reaps child threads. To solve this we implement a new helper which ensures the callbacks are flushed along with any translations before we let the host do it's a thing. While we are at it make the documentation of qemu_plugin_register_atexit_cb clearer as to what the user can expect. Signed-off-by: Alex Bennée Reviewed-by: Mahmoud Mandour Acked-by: Warner Losh Message-Id: <20210720232703.10650-21-alex.bennee@linaro.org> --- bsd-user/syscall.c | 6 +++--- include/qemu/plugin.h | 12 ++++++++++++ include/qemu/qemu-plugin.h | 13 +++++++++++++ linux-user/exit.c | 2 +- plugins/core.c | 39 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 68 insertions(+), 4 deletions(-) diff --git a/bsd-user/syscall.c b/bsd-user/syscall.c index 7d986e9700..3f44311396 100644 --- a/bsd-user/syscall.c +++ b/bsd-user/syscall.c @@ -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 */ diff --git a/include/qemu/plugin.h b/include/qemu/plugin.h index 0fefbc6084..9a8438f683 100644 --- a/include/qemu/plugin.h +++ b/include/qemu/plugin.h @@ -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 */ diff --git a/include/qemu/qemu-plugin.h b/include/qemu/qemu-plugin.h index dc3496f36c..e6e815abc5 100644 --- a/include/qemu/qemu-plugin.h +++ b/include/qemu/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); diff --git a/linux-user/exit.c b/linux-user/exit.c index 70b344048c..527e29cbc1 100644 --- a/linux-user/exit.c +++ b/linux-user/exit.c @@ -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(); } diff --git a/plugins/core.c b/plugins/core.c index 474db287cb..6b2490f973 100644 --- a/plugins/core.c +++ b/plugins/core.c @@ -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 From de9fc40f36ab8e696d1c69727e80a80c46f20978 Mon Sep 17 00:00:00 2001 From: Mahmoud Mandour Date: Wed, 21 Jul 2021 00:26:55 +0100 Subject: [PATCH 21/28] plugins/cache: Fixed a bug with destroying FIFO metadata MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This manifests itself when associativity degree is greater than the number of sets and FIFO is used, otherwise it's also a memory leak whenever FIFO was used. Signed-off-by: Mahmoud Mandour Signed-off-by: Alex Bennée Reviewed-by: Alex Bennée Message-Id: <20210714172151.8494-2-ma.mandourr@gmail.com> Message-Id: <20210720232703.10650-22-alex.bennee@linaro.org> --- contrib/plugins/cache.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/plugins/cache.c b/contrib/plugins/cache.c index bf0d2f6097..4a71602639 100644 --- a/contrib/plugins/cache.c +++ b/contrib/plugins/cache.c @@ -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); } } From 072c444b0d948451771b0245b74d5310a00e3dd2 Mon Sep 17 00:00:00 2001 From: Mahmoud Mandour Date: Wed, 21 Jul 2021 00:26:56 +0100 Subject: [PATCH 22/28] plugins/cache: limited the scope of a mutex lock MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It's not necessary to lock the address translation portion of the vcpu_mem_access callback. Signed-off-by: Mahmoud Mandour Signed-off-by: Alex Bennée Reviewed-by: Alex Bennée Message-Id: <20210714172151.8494-3-ma.mandourr@gmail.com> Message-Id: <20210720232703.10650-23-alex.bennee@linaro.org> --- contrib/plugins/cache.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/contrib/plugins/cache.c b/contrib/plugins/cache.c index 4a71602639..695fb969dc 100644 --- a/contrib/plugins/cache.c +++ b/contrib/plugins/cache.c @@ -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++; From c2888a679d376baa2dc36a31e44ddb824f232d9c Mon Sep 17 00:00:00 2001 From: Mahmoud Mandour Date: Wed, 21 Jul 2021 00:26:57 +0100 Subject: [PATCH 23/28] plugins/cache: Fixed "function decl. is not a prototype" warnings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mahmoud Mandour Signed-off-by: Alex Bennée Reviewed-by: Alex Bennée Reviewed-by: Philippe Mathieu-Daudé Message-Id: <20210714172151.8494-7-ma.mandourr@gmail.com> Message-Id: <20210720232703.10650-24-alex.bennee@linaro.org> --- contrib/plugins/cache.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contrib/plugins/cache.c b/contrib/plugins/cache.c index 695fb969dc..066ea6d8ec 100644 --- a/contrib/plugins/cache.c +++ b/contrib/plugins/cache.c @@ -469,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, @@ -487,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; @@ -536,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: From 2da42253ef9af7a9c3a5e9e7fcfb1e7eb84a8bb6 Mon Sep 17 00:00:00 2001 From: Aaron Lindsay Date: Wed, 21 Jul 2021 00:26:58 +0100 Subject: [PATCH 24/28] plugins: Fix physical address calculation for IO regions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The address calculation for IO regions introduced by commit 787148bf928a54b5cc86f5b434f9399e9737679c Author: Aaron Lindsay plugins: Expose physical addresses instead of device offsets is not always accurate. Use the more correct MemoryRegionSection.offset_within_address_space. Signed-off-by: Aaron Lindsay Signed-off-by: Alex Bennée Reviewed-by: Philippe Mathieu-Daudé Message-Id: <20210720195735.3934473-1-aaron@os.amperecomputing.com> Message-Id: <20210720232703.10650-25-alex.bennee@linaro.org> --- plugins/api.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/api.c b/plugins/api.c index 78b563c5c5..2d521e6ba8 100644 --- a/plugins/api.c +++ b/plugins/api.c @@ -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 From c56f1ee668d504af62f09e041e584e725edfa4b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:27:00 +0100 Subject: [PATCH 25/28] tests/tcg/configure.sh: add handling for assembler only builds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Up until this point we only handled local compilers or assumed we had everything in the container. This falls down when we are building QEMU inside the container. This special handling only affects tricore for now but I put it in a case just in case we add any other "special" targets. Setting CROSS_CC_GUEST is a bit of a hack just to ensure the test runs as we gate on a detected compiler even though the Makefile won't actually use it. It also means we display something sane in the configure output. Signed-off-by: Alex Bennée Message-Id: <20210720232703.10650-27-alex.bennee@linaro.org> --- tests/tcg/configure.sh | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/tcg/configure.sh b/tests/tcg/configure.sh index aa7c24328a..1f985ccfc0 100755 --- a/tests/tcg/configure.sh +++ b/tests/tcg/configure.sh @@ -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 From 39ce92373283a3a3ff0aa2d381b87e930a9ab1a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Benn=C3=A9e?= Date: Wed, 21 Jul 2021 00:27:01 +0100 Subject: [PATCH 26/28] gitlab: enable a very minimal build with the tricore container MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rather than base of the shared Debian 10 container which would require us to bring in even more dependencies just bring in what is needed for building tricore-softmmu in GitLab. We don't even remove the container from the DOCKER_PARTIAL_IMAGES lest we cause more confusion. Signed-off-by: Alex Bennée Reviewed-by: Thomas Huth Reviewed-by: Willian Rampazzo Message-Id: <20210720232703.10650-28-alex.bennee@linaro.org> --- .gitlab-ci.d/buildtest.yml | 11 ++++++ .../dockerfiles/debian-tricore-cross.docker | 34 ++++++++++++++++--- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/.gitlab-ci.d/buildtest.yml b/.gitlab-ci.d/buildtest.yml index 89df51517c..48cb45a783 100644 --- a/.gitlab-ci.d/buildtest.yml +++ b/.gitlab-ci.d/buildtest.yml @@ -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: diff --git a/tests/docker/dockerfiles/debian-tricore-cross.docker b/tests/docker/dockerfiles/debian-tricore-cross.docker index 985925134c..d8df2c6117 100644 --- a/tests/docker/dockerfiles/debian-tricore-cross.docker +++ b/tests/docker/dockerfiles/debian-tricore-cross.docker @@ -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é +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 From e90c3c3c876454faf96d3f0917501846b9dd146c Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Wed, 21 Jul 2021 00:27:02 +0100 Subject: [PATCH 27/28] gitlab-ci: Remove the second superfluous macos task MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit While there might have been bigger differnces between the -base and the -xcode images in the beginning, they almost vanished in the current builds, e.g. when comparing the output of the "configure" step after cleaning up the differences due to temporary path names, I only get: $ diff -u /tmp/base.txt /tmp/xcode.txt --- /tmp/base.txt 2021-07-16 09:16:24.211427940 +0200 +++ /tmp/xcode.txt 2021-07-16 09:16:43.029684274 +0200 @@ -19,14 +19,14 @@ Build type: native build Project name: qemu Project version: 6.0.50 -C compiler for the host machine: cc (clang 12.0.0 "Apple clang version 12.0.0 (clang-1200.0.32.29)") +C compiler for the host machine: cc (clang 12.0.0 "Apple clang version 12.0.0 (clang-1200.0.32.28)") C linker for the host machine: cc ld64 609.8 Host machine cpu family: x86_64 Host machine cpu: x86_64 Program sh found: YES (/bin/sh) Program python3 found: YES (/usr/local/opt/python@3.9/bin/python3.9) Program bzip2 found: YES (/usr/bin/bzip2) -C++ compiler for the host machine: c++ (clang 12.0.0 "Apple clang version 12.0.0 (clang-1200.0.32.29)") +C++ compiler for the host machine: c++ (clang 12.0.0 "Apple clang version 12.0.0 (clang-1200.0.32.28)") C++ linker for the host machine: c++ ld64 609.8 Objective-C compiler for the host machine: clang (clang 12.0.0) Objective-C linker for the host machine: clang ld64 609.8 Since we're not using Xcode itself at all, it seems like it does not make much sense anymore to waste compute cycles with two images here. Thus let's delete the -xcode job now. [AJB: fix up commit formatting which trips up b4] Signed-off-by: Thomas Huth Signed-off-by: Alex Bennée Reviewed-by: Willian Rampazzo Reviewed-by: Daniel P. Berrangé Message-Id: <20210719073051.1559348-1-thuth@redhat.com> Message-Id: <20210720232703.10650-29-alex.bennee@linaro.org> --- .gitlab-ci.d/cirrus.yml | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/.gitlab-ci.d/cirrus.yml b/.gitlab-ci.d/cirrus.yml index 60b13ed83f..675db69622 100644 --- a/.gitlab-ci.d/cirrus.yml +++ b/.gitlab-ci.d/cirrus.yml @@ -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 From 0a9487d80af9ed6fa14d2696bc34a920b32e53e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Date: Wed, 21 Jul 2021 00:27:03 +0100 Subject: [PATCH 28/28] gitlab-ci: Extract OpenSBI job rules to reusable section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All jobs depending on 'docker-opensbi' job must use at most all the rules that triggers it. The simplest way to ensure that is to always use the same rules. Extract all the rules to a reusable section, and include this section (with the 'extends' keyword) in both 'docker-opensbi' and 'build-opensbi' jobs. The problem was introduced in commit c6fc0fc1a71 ("gitlab-ci.yml: Add jobs to build OpenSBI firmware binaries"), but was revealed in commit 91e9c47e50a ("docker: OpenSBI build job depends on OpenSBI container"). This fix is similar to the one used with the EDK2 firmware job in commit ac0595cf6b3 ("gitlab-ci: Extract EDK2 job rules to reusable section"). Reported-by: Daniel P. Berrangé Signed-off-by: Philippe Mathieu-Daudé Signed-off-by: Alex Bennée Reviewed-by: Daniel P. Berrangé Reviewed-by: Willian Rampazzo Message-Id: <20210720164829.3949558-1-philmd@redhat.com> Message-Id: <20210720232703.10650-30-alex.bennee@linaro.org> --- .gitlab-ci.d/opensbi.yml | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/.gitlab-ci.d/opensbi.yml b/.gitlab-ci.d/opensbi.yml index f66cd1d908..d8a0456679 100644 --- a/.gitlab-ci.d/opensbi.yml +++ b/.gitlab-ci.d/opensbi.yml @@ -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