[libvirt PATCH] scripts: Fix meson-install-symlink.py overwriting existing links
by Erik Skultety
By default, symlink re-creation fails if the link already exists, more
specifically in case of meson-install-symlink.py:
Traceback (most recent call last):
File "/<path_to_libvirt_repo>/scripts/meson-install-symlink.py",
line 15, in <module>
os.symlink(target, link)
FileExistsError: File exists: '../default.xml' -> 'default.xml'
Unfortunately, Python can't mimic "ln -sf", so we have to fix this
differently - create a temporary name which is then going to be used
for the temporary link followed by a rename with the original link's
name.
Note that this solution is racy as mktemp() doesn't guarantee
atomicity in link creation, so theoretically another process could come
and create a file with the same name as the temporary link name, but
a proper solution would be longer and not as elegant.
Signed-off-by: Erik Skultety <eskultet(a)redhat.com>
---
scripts/meson-install-symlink.py | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/scripts/meson-install-symlink.py b/scripts/meson-install-symlink.py
index e38507072d..630dfc079f 100644
--- a/scripts/meson-install-symlink.py
+++ b/scripts/meson-install-symlink.py
@@ -2,6 +2,7 @@
import os
import sys
+import tempfile
destdir = os.environ.get('DESTDIR', os.sep)
dirname = sys.argv[1]
@@ -12,4 +13,7 @@ workdir = os.path.join(destdir, dirname.strip(os.sep))
os.makedirs(workdir, exist_ok=True)
os.chdir(workdir)
-os.symlink(target, link)
+
+templink = tempfile.mktemp(dir=workdir)
+os.symlink(target, templink)
+os.replace(templink, link)
--
2.26.2
4 years, 3 months
[libvirt PATCH] util: Fix logic in virFileSetCOW
by Jiri Denemark
When COW is not explicitly requested to be disabled or enabled, the
function is supposed to do nothing on non-BTRFS file systems.
Fixes commit 7230bc95aa78379c9ee20cf59394c5fc4305b75b.
https://bugzilla.redhat.com/show_bug.cgi?id=1866157
Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
---
src/util/virfile.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/util/virfile.c b/src/util/virfile.c
index 6ada3a708c..7f22884b07 100644
--- a/src/util/virfile.c
+++ b/src/util/virfile.c
@@ -4522,7 +4522,7 @@ virFileSetCOW(const char *path,
}
if (buf.f_type != BTRFS_SUPER_MAGIC) {
- if (state == VIR_TRISTATE_BOOL_ABSENT) {
+ if (state != VIR_TRISTATE_BOOL_ABSENT) {
virReportSystemError(ENOSYS,
_("unable to control COW flag on '%s', not btrfs"),
path);
--
2.27.0
4 years, 3 months
[libvirt PATCH 0/3] Random fixes
by Ján Tomko
I found that I forgot to send the bhyve patch
with the rest of the cppcheck patches.
And I also found some other patches.
Ján Tomko (3):
bhyve: fix NULL pointer check position
virbitmap: remove redundant mem_alloc
util: bitmap: use g_new0/g_free
src/bhyve/bhyve_parse_command.c | 14 +++++++-------
src/util/virbitmap.c | 32 +++++++++-----------------------
2 files changed, 16 insertions(+), 30 deletions(-)
--
2.26.2
4 years, 3 months
Re: [RFC v2 1/1] memory: Delete assertion in memory_region_unregister_iommu_notifier
by Jason Wang
On 2020/6/30 下午11:39, Peter Xu wrote:
> On Tue, Jun 30, 2020 at 10:41:10AM +0800, Jason Wang wrote:
>>> /* According to ATS spec table 2.4:
>>> * S = 0, bits 15:12 = xxxx range size: 4K
>>> * S = 1, bits 15:12 = xxx0 range size: 8K
>>> * S = 1, bits 15:12 = xx01 range size: 16K
>>> * S = 1, bits 15:12 = x011 range size: 32K
>>> * S = 1, bits 15:12 = 0111 range size: 64K
>>> * ...
>>> */
>>
>> Right, but the comment is probably misleading here, since it's for the PCI-E
>> transaction between IOMMU and device not for the device IOTLB invalidation
>> descriptor.
>>
>> For device IOTLB invalidation descriptor, spec allows a [0, ~0ULL]
>> invalidation:
>>
>> "
>>
>> 6.5.2.5 Device-TLB Invalidate Descriptor
>>
>> ...
>>
>> Size (S): The size field indicates the number of consecutive pages targeted
>> by this invalidation
>> request. If S field is zero, a single page at page address specified by
>> Address [63:12] is requested
>> to be invalidated. If S field is Set, the least significant bit in the
>> Address field with value 0b
>> indicates the invalidation address range. For example, if S field is Set and
>> Address[12] is Clear, it
>> indicates an 8KB invalidation address range with base address in Address
>> [63:13]. If S field and
>> Address[12] is Set and bit 13 is Clear, it indicates a 16KB invalidation
>> address range with base
>> address in Address [63:14], etc.
>>
>> "
>>
>> So if we receive an address whose [63] is 0 and the rest is all 1, it's then
>> a [0, ~0ULL] invalidation.
> Yes. I think invalidating the whole range is always fine. It's still not
> arbitrary, right? E.g., we can't even invalidate (0x1000, 0x3000) with
> device-iotlb because of the address mask, not to say sub-pages.
Yes.
>
>>
>>>>>> How about just convert to use a range [start, end] for any notifier and move
>>>>>> the checks (e.g the assert) into the actual notifier implemented (vhost or
>>>>>> vfio)?
>>>>> IOMMUTLBEntry itself is the abstraction layer of TLB entry. Hardware TLB entry
>>>>> is definitely not arbitrary range either (because AFAICT the hardware should
>>>>> only cache PFN rather than address, so at least PAGE_SIZE aligned).
>>>>> Introducing this flag will already make this trickier just to avoid introducing
>>>>> another similar struct to IOMMUTLBEntry, but I really don't want to make it a
>>>>> default option... Not to mention I probably have no reason to urge the rest
>>>>> iommu notifier users (tcg, vfio) to change their existing good code to suite
>>>>> any of the backend who can cooperate with arbitrary address ranges...
>>>> Ok, so it looks like we need a dedicated notifiers to device IOTLB.
>>> Or we can also make a new flag for device iotlb just like current UNMAP? Then
>>> we replace the vhost type from UNMAP to DEVICE_IOTLB. But IMHO using the
>>> ARBITRARY_LENGTH flag would work in a similar way. DEVICE_IOTLB flag could
>>> also allow virtio/vhost to only receive one invalidation (now IIUC it'll
>>> receive both iotlb and device-iotlb for unmapping a page when ats=on), but then
>>> ats=on will be a must and it could break some old (misconfiged) qemu because
>>> afaict previously virtio/vhost could even work with vIOMMU (accidentally) even
>>> without ats=on.
>>
>> That's a bug and I don't think we need to workaround mis-configurated qemu
>> :)
> IMHO it depends on the strictness we want on the qemu cmdline API. :)
>
> We should at least check libvirt to make sure it's using ats=on always, then I
> agree maybe we can avoid considering the rest...
>
> Thanks,
Cc libvirt list, but I think we should fix libvirt if they don't provide
"ats=on".
Thanks
4 years, 3 months
[PATCH 0/4] Xen: Add support for qemu commandline passthrough
by Jim Fehlig
This patch series introduces support for qemu commandline passthrough to
the xen driver. ATM it uses the same schema extension as the qemu driver,
but it could be changed to something like
xmlns:xen='http://libvirt.org/schemas/domain/xen/1.0' if desired. I didn't
see an immediate benefit to that, other than following the pattern used
by qemu, bhyve, and lxc. Using the same namespace and schema could be
a bit confusing to users, but on the other hand it is just qemu under the
covers. Since Xen does not support passing environment vars or adjusting
qemu's capabilities, the parser will flag attempts at setting those as
errors.
The patch to NEWS.rst is just a reminder for me to create a news entry
and will need rebased once 6.6.0 is out.
Thanks in advance for your comments!
Regards,
Jim
Jim Fehlig (4):
Expose virStringListCopy in libvirt_private.syms
Xen: Add support for qemu command-line passthrough
Xen: Add support for qemu commandline passthrough to config converter
news: Mention support for qemu commandline passthrough in Xen
NEWS.rst | 6 ++
docs/drvxen.html.in | 35 +++++++
src/libvirt_private.syms | 1 +
src/libxl/libxl_conf.c | 11 ++-
src/libxl/libxl_conf.h | 8 ++
src/libxl/libxl_domain.c | 99 ++++++++++++++++++++
src/libxl/libxl_domain.h | 1 +
src/libxl/xen_xl.c | 88 +++++++++++++++++
tests/xlconfigdata/test-qemu-passthrough.cfg | 26 +++++
tests/xlconfigdata/test-qemu-passthrough.xml | 53 +++++++++++
tests/xlconfigtest.c | 4 +
11 files changed, 331 insertions(+), 1 deletion(-)
create mode 100644 tests/xlconfigdata/test-qemu-passthrough.cfg
create mode 100644 tests/xlconfigdata/test-qemu-passthrough.xml
--
2.26.2
4 years, 3 months
[libvirt PATCH] docs: formatdomain: fyx a tipo
by Ján Tomko
s/hystorical/historical/
Signed-off-by: Ján Tomko <jtomko(a)redhat.com>
---
Pushed as trivial.
Sorry if this was an easter egg. It was too painful to look at.
docs/formatdomain.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
index 3275d1b39e..218f0c1718 100644
--- a/docs/formatdomain.rst
+++ b/docs/formatdomain.rst
@@ -6070,7 +6070,7 @@ below <#elementCharSerialAndConsole>`__.
Relationship between serial ports and consoles
''''''''''''''''''''''''''''''''''''''''''''''
-Due to hystorical reasons, the ``serial`` and ``console`` elements have
+Due to historical reasons, the ``serial`` and ``console`` elements have
partially overlapping scopes.
In general, both elements are used to configure one or more serial consoles to
--
2.26.2
4 years, 3 months
[libvirt PATCH] src: add G_GNUC_NO_INLINE annotations for mocked symbols
by Daniel P. Berrangé
We should prevent inlining of symbols from the driver .so files that are
mocked, as well as those in the main libvirt.so
This isn't fixing any currently known problem, just trying to prevent
future issues.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
scripts/mock-noinline.py | 2 +-
src/libxl/libxl_capabilities.h | 2 +-
src/qemu/qemu_command.h | 4 ++--
src/qemu/qemu_hotplug.h | 2 +-
src/qemu/qemu_interface.h | 2 +-
src/qemu/qemu_monitor.h | 2 +-
src/qemu/qemu_monitor_json.h | 2 +-
src/qemu/qemu_process.h | 4 ++--
8 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/scripts/mock-noinline.py b/scripts/mock-noinline.py
index a8b7680c11..69cf0b4b99 100644
--- a/scripts/mock-noinline.py
+++ b/scripts/mock-noinline.py
@@ -59,7 +59,7 @@ def scan_overrides(filename):
m = re.search(r'''^\w+\s*(?:\*\s*)?(\w+)\(''', line)
if m is not None:
name = m.group(1)
- if name.startswith("vir"):
+ if name.startswith("vir") or name.startswith("qemu") or name.startswith("libxl"):
mocked[name] = "%s:%d" % (filename, lineno)
diff --git a/src/libxl/libxl_capabilities.h b/src/libxl/libxl_capabilities.h
index 9efb836429..4e8e2bb59b 100644
--- a/src/libxl/libxl_capabilities.h
+++ b/src/libxl/libxl_capabilities.h
@@ -39,7 +39,7 @@
* by libvirt for Xen, and cannot be used for a persistent network name. */
#define LIBXL_GENERATED_PREFIX_XEN "vif"
-bool libxlCapsHasPVUSB(void);
+bool libxlCapsHasPVUSB(void) G_GNUC_NO_INLINE;
virCapsPtr
libxlMakeCapabilities(libxl_ctx *ctx);
diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h
index b579817b44..89d99b111f 100644
--- a/src/qemu/qemu_command.h
+++ b/src/qemu/qemu_command.h
@@ -82,7 +82,7 @@ int qemuBuildTLSx509BackendProps(const char *tlspath,
/* Open a UNIX socket for chardev FD passing */
int
-qemuOpenChrChardevUNIXSocket(const virDomainChrSourceDef *dev);
+qemuOpenChrChardevUNIXSocket(const virDomainChrSourceDef *dev) G_GNUC_NO_INLINE;
/* Generate '-device' string for chardev device */
int
@@ -254,4 +254,4 @@ qemuBuildTPMOpenBackendFDs(const char *tpmdev,
int *tpmfd,
int *cancelfd)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
- ATTRIBUTE_NONNULL(4);
+ ATTRIBUTE_NONNULL(4) G_GNUC_NO_INLINE;
diff --git a/src/qemu/qemu_hotplug.h b/src/qemu/qemu_hotplug.h
index 4a49e04a15..6287c5b5e8 100644
--- a/src/qemu/qemu_hotplug.h
+++ b/src/qemu/qemu_hotplug.h
@@ -151,7 +151,7 @@ int qemuDomainSetVcpuInternal(virQEMUDriverPtr driver,
virBitmapPtr vcpus,
bool state);
-unsigned long long qemuDomainGetUnplugTimeout(virDomainObjPtr vm);
+unsigned long long qemuDomainGetUnplugTimeout(virDomainObjPtr vm) G_GNUC_NO_INLINE;
int qemuHotplugAttachDBusVMState(virQEMUDriverPtr driver,
virDomainObjPtr vm,
diff --git a/src/qemu/qemu_interface.h b/src/qemu/qemu_interface.h
index 0464b903d7..3dcefc6a12 100644
--- a/src/qemu/qemu_interface.h
+++ b/src/qemu/qemu_interface.h
@@ -54,7 +54,7 @@ int qemuInterfaceBridgeConnect(virDomainDefPtr def,
int qemuInterfaceOpenVhostNet(virDomainDefPtr def,
virDomainNetDefPtr net,
int *vhostfd,
- size_t *vhostfdSize);
+ size_t *vhostfdSize) G_GNUC_NO_INLINE;
qemuSlirpPtr qemuInterfacePrepareSlirp(virQEMUDriverPtr driver,
virDomainNetDefPtr net);
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
index 1c1b0c9b89..d20a15c202 100644
--- a/src/qemu/qemu_monitor.h
+++ b/src/qemu/qemu_monitor.h
@@ -408,7 +408,7 @@ int qemuMonitorSetLink(qemuMonitorPtr mon,
/* These APIs are for use by the internal Text/JSON monitor impl code only */
char *qemuMonitorNextCommandID(qemuMonitorPtr mon);
int qemuMonitorSend(qemuMonitorPtr mon,
- qemuMonitorMessagePtr msg);
+ qemuMonitorMessagePtr msg) G_GNUC_NO_INLINE;
virJSONValuePtr qemuMonitorGetOptions(qemuMonitorPtr mon)
ATTRIBUTE_NONNULL(1);
void qemuMonitorSetOptions(qemuMonitorPtr mon, virJSONValuePtr options)
diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h
index 84fea25983..098ab857be 100644
--- a/src/qemu/qemu_monitor_json.h
+++ b/src/qemu/qemu_monitor_json.h
@@ -30,7 +30,7 @@
int qemuMonitorJSONIOProcessLine(qemuMonitorPtr mon,
const char *line,
- qemuMonitorMessagePtr msg);
+ qemuMonitorMessagePtr msg) G_GNUC_NO_INLINE;
int qemuMonitorJSONIOProcess(qemuMonitorPtr mon,
const char *data,
diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h
index 125508f9fe..dbd989c321 100644
--- a/src/qemu/qemu_process.h
+++ b/src/qemu/qemu_process.h
@@ -203,9 +203,9 @@ int qemuProcessRefreshDisks(virQEMUDriverPtr driver,
virDomainObjPtr vm,
qemuDomainAsyncJob asyncJob);
-int qemuProcessStartManagedPRDaemon(virDomainObjPtr vm);
+int qemuProcessStartManagedPRDaemon(virDomainObjPtr vm) G_GNUC_NO_INLINE;
-void qemuProcessKillManagedPRDaemon(virDomainObjPtr vm);
+void qemuProcessKillManagedPRDaemon(virDomainObjPtr vm) G_GNUC_NO_INLINE;
typedef struct _qemuProcessQMP qemuProcessQMP;
typedef qemuProcessQMP *qemuProcessQMPPtr;
--
2.26.2
4 years, 3 months
[PATCH] tests: qemublocktest: fix crashing with SIGBUS
by Roman Bogorodskiy
Commit bcbb026993 converted qemublocktest to use
g_autoptr for virQEMUCaps. To prevent it from crashing,
don't explicitly call virObjectUnref() on this object.
Signed-off-by: Roman Bogorodskiy <bogorodskiy(a)gmail.com>
---
tests/qemublocktest.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
index fb5319d7bd..0685b703a1 100644
--- a/tests/qemublocktest.c
+++ b/tests/qemublocktest.c
@@ -1394,7 +1394,6 @@ mymain(void)
cleanup:
qemuTestDriverFree(&driver);
VIR_FREE(capslatest_x86_64);
- virObjectUnref(caps_x86_64);
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
--
2.27.0
4 years, 3 months
[libvirt PATCH] docs: fix libvirt go-import metadata in pages
by Daniel P. Berrangé
The meson conversion lost the <meta> tags providing the go-import,
because the "$pagename" variable lost the .html suffix. Rather
than fix that, just change to using "$pagesrc" instead, as it is a
better fit.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
docs/newapi.xsl | 2 --
docs/page.xsl | 7 +++----
docs/site.xsl | 3 +--
docs/subsite.xsl | 1 -
scripts/meson-html-gen.py | 4 ----
5 files changed, 4 insertions(+), 13 deletions(-)
diff --git a/docs/newapi.xsl b/docs/newapi.xsl
index 0dc4f7ae52..7ac8caa35d 100644
--- a/docs/newapi.xsl
+++ b/docs/newapi.xsl
@@ -835,7 +835,6 @@
indent="yes"
encoding="UTF-8">
<xsl:apply-templates select="exsl:node-set($mainpage)" mode="page">
- <xsl:with-param name="pagename" select="concat($htmldir, '', $indexfile)"/>
<xsl:with-param name="timestamp" select="$timestamp"/>
</xsl:apply-templates>
</xsl:document>
@@ -851,7 +850,6 @@
indent="yes"
encoding="UTF-8">
<xsl:apply-templates select="exsl:node-set($subpage)" mode="page">
- <xsl:with-param name="pagename" select="concat($htmldir, '/libvirt-', @name, '.html')"/>
<xsl:with-param name="timestamp" select="$timestamp"/>
</xsl:apply-templates>
</xsl:document>
diff --git a/docs/page.xsl b/docs/page.xsl
index bdd57ba2e0..9ab8d3dd69 100644
--- a/docs/page.xsl
+++ b/docs/page.xsl
@@ -76,14 +76,13 @@
<!-- This is the master page structure -->
<xsl:template match="/" mode="page">
- <xsl:param name="pagename"/>
<xsl:param name="pagesrc"/>
<xsl:param name="timestamp"/>
<xsl:text disable-output-escaping="yes"><!DOCTYPE html>
</xsl:text>
<html>
<xsl:comment>
- This file is autogenerated from <xsl:value-of select="$pagename"/>.in
+ This file is autogenerated from <xsl:value-of select="$pagesrc"/>
Do not edit this file. Changes will be lost.
</xsl:comment>
<xsl:comment>
@@ -100,10 +99,10 @@
<meta name="theme-color" content="#ffffff"/>
<title>libvirt: <xsl:value-of select="html:html/html:body//html:h1"/></title>
<meta name="description" content="libvirt, virtualization, virtualization API"/>
- <xsl:if test="$pagename = 'libvirt-go.html'">
+ <xsl:if test="$pagesrc = 'docs/libvirt-go.rst'">
<meta name="go-import" content="libvirt.org/libvirt-go git https://libvirt.org/git/libvirt-go.git"/>
</xsl:if>
- <xsl:if test="$pagename = 'libvirt-go-xml.html'">
+ <xsl:if test="$pagesrc = 'docs/libvirt-go-xml.rst'">
<meta name="go-import" content="libvirt.org/libvirt-go-xml git https://libvirt.org/git/libvirt-go-xml.git"/>
</xsl:if>
<xsl:apply-templates select="/html:html/html:head/html:script" mode="content"/>
diff --git a/docs/site.xsl b/docs/site.xsl
index 73ddd8ca6b..931e26272f 100644
--- a/docs/site.xsl
+++ b/docs/site.xsl
@@ -15,7 +15,7 @@
<xsl:variable name="href_base">
<xsl:choose>
- <xsl:when test="$pagename = '404.html'">
+ <xsl:when test="$pagesrc = 'docs/404.html.in'">
<xsl:value-of select="'/'"/>
</xsl:when>
<xsl:otherwise>
@@ -26,7 +26,6 @@
<xsl:template match="/">
<xsl:apply-templates select="." mode="page">
- <xsl:with-param name="pagename" select="$pagename"/>
<xsl:with-param name="pagesrc" select="$pagesrc"/>
<xsl:with-param name="timestamp" select="$timestamp"/>
</xsl:apply-templates>
diff --git a/docs/subsite.xsl b/docs/subsite.xsl
index bfd34eebd2..2bdfcbb9b1 100644
--- a/docs/subsite.xsl
+++ b/docs/subsite.xsl
@@ -16,7 +16,6 @@
<xsl:template match="/">
<xsl:apply-templates select="." mode="page">
- <xsl:with-param name="pagename" select="$pagename"/>
<xsl:with-param name="pagesrc" select="$pagesrc"/>
<xsl:with-param name="timestamp" select="$timestamp"/>
</xsl:apply-templates>
diff --git a/scripts/meson-html-gen.py b/scripts/meson-html-gen.py
index dbf238de54..2731d734a7 100755
--- a/scripts/meson-html-gen.py
+++ b/scripts/meson-html-gen.py
@@ -1,7 +1,6 @@
#!/usr/bin/env python3
import argparse
-import os
import subprocess
parser = argparse.ArgumentParser()
@@ -15,12 +14,9 @@ parser.add_argument("htmlfile", type=str, help="path to generated HTML file")
parser.add_argument("pagesrc", type=str, default="", nargs='?', help="(optional) path to source file used for edit this page")
args = parser.parse_args()
-name = os.path.basename(args.htmlfile).replace('.html', '')
-
html_tmp = subprocess.run(
[
args.xsltproc,
- '--stringparam', 'pagename', name,
'--stringparam', 'pagesrc', args.pagesrc,
'--stringparam', 'builddir', args.builddir,
'--stringparam', 'timestamp', args.timestamp,
--
2.26.2
4 years, 3 months
[PATCH-for-5.1] .travis.yml: Deprecate it in favor of GitLab CI
by Philippe Mathieu-Daudé
As of QEMU 5.2 we prefer to focus our CI development on GitLab.
Mark Travis-CI as deprecated (adding a big warning).
Signed-off-by: Philippe Mathieu-Daudé <philmd(a)redhat.com>
---
docs/system/deprecated.rst | 11 +++++++++++
.travis.yml | 7 +++++++
2 files changed, 18 insertions(+)
diff --git a/docs/system/deprecated.rst b/docs/system/deprecated.rst
index 851dbdeb8a..c17a5b0896 100644
--- a/docs/system/deprecated.rst
+++ b/docs/system/deprecated.rst
@@ -17,6 +17,17 @@ they were first deprecated in the 2.10.0 release.
What follows is a list of all features currently marked as
deprecated.
+Build and test automation
+-------------------------
+
+``Travis-CI`` (Since 5.2)
+'''''''''''''''''''''''''
+
+``Travis-CI`` is deprecated in favor of GitLab-CI.
+
+The '.travis.yml' configuration should only be modified to remove jobs
+when equivalent exist on GitLab-CI. Adding new jobs is not allowed.
+
System emulator command line arguments
--------------------------------------
diff --git a/.travis.yml b/.travis.yml
index 6695c0620f..4ad243f511 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,3 +1,10 @@
+# WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
+#
+# As of QEMU 5.2, this file is now deprecated in favor of GitLab CI.
+# Do not modify, except to remove jobs ported to GitLab CI.
+#
+# WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
+
# The current Travis default is a VM based 16.04 Xenial on GCE
# Additional builds with specific requirements for a full VM need to
# be added as additional matrix: entries later on
--
2.21.3
4 years, 3 months