forked from pool/systemd
9fc3254595
- Update of patch 0001-detect-s390-virt.patch (bnc#880438) - Shut up stupid check scripts crying for not mentioned systemd-mini-rpmlintrc - Add upstream patchs 0001-core-use-correct-format-string-for-UIDs.patch 0002-core-transaction-fix-cycle-break-attempts-outside-tr.patch 0003-fsck-consider-a-fsck-implementation-linked-to-bin-tr.patch - Add upstream patch 0001-units-order-network-online.target-after-network.targ.patch to make sure that etwork-online.target follows network.target - rules: re-enable dev_id conditionally in persistent rules (bnc#884403 and bnc#882714). Add 1040-re-enable-dev_id-conditionally-in-persistent-rules.patch - Add upstream patches 0001-vconsole-also-copy-character-maps-not-just-fonts-fro.patch 0002-core-make-sure-Environment-fields-passed-in-for-tran.patch 0003-core-You-can-not-put-the-cached-result-of-use_smack-.patch 0004-cryptsetup-don-t-add-unit-dependency-on-dev-null-dev.patch 0005-man-fix-path-in-crypttab-5.patch - Add upstream patch 1039-udevadm-settle-fixed-return-code-for-empty-queue.patch it fixes udevadm settle exit code which may had roken dracut scripts (bnc#884271 comment#18) - Temporary disable patch 1022 (bnc#884271 and bnc#882714). OBS-URL: https://build.opensuse.org/request/show/238853 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/systemd?expand=0&rev=190
80 lines
2.9 KiB
Diff
80 lines
2.9 KiB
Diff
From 37287585b6ba9a55065c8f94458f6db3c0abe0af Mon Sep 17 00:00:00 2001
|
|
From: Thomas Blume <Thomas.Blume@suse.com>
|
|
Date: Fri, 6 Jun 2014 16:36:45 +0200
|
|
Subject: [PATCH] systemd-detect-virt: only discover Xen domU
|
|
|
|
The current vm detection lacks the distinction between Xen dom0 and Xen domU.
|
|
Both, dom0 and domU are running inside the hypervisor.
|
|
Therefore systemd-detect-virt and the ConditionVirtualization directive detect
|
|
dom0 as a virtual machine.
|
|
|
|
dom0 is not using virtual devices but is accessing the real hardware.
|
|
Therefore dom0 should be considered the virtualisation host and not a virtual
|
|
machine.
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=77271
|
|
---
|
|
src/shared/virt.c | 34 +++++++++++++++++++++++++++-------
|
|
1 file changed, 27 insertions(+), 7 deletions(-)
|
|
|
|
diff --git src/shared/virt.c src/shared/virt.c
|
|
index 1e227c5..774915f 100644
|
|
--- src/shared/virt.c
|
|
+++ src/shared/virt.c
|
|
@@ -148,7 +148,7 @@ static int detect_vm_dmi(const char **_id) {
|
|
|
|
/* Returns a short identifier for the various VM implementations */
|
|
int detect_vm(const char **id) {
|
|
- _cleanup_free_ char *hvtype = NULL, *cpuinfo_contents = NULL;
|
|
+ _cleanup_free_ char *domcap = NULL, *cpuinfo_contents = NULL;
|
|
static thread_local int cached_found = -1;
|
|
static thread_local const char *cached_id = NULL;
|
|
const char *_id = NULL;
|
|
@@ -162,17 +162,37 @@ int detect_vm(const char **id) {
|
|
return cached_found;
|
|
}
|
|
|
|
- /* Try high-level hypervisor sysfs file first:
|
|
+ /* Try xen capabilities file first, if not found try high-level hypervisor sysfs file:
|
|
*
|
|
- * https://bugs.freedesktop.org/show_bug.cgi?id=61491 */
|
|
- r = read_one_line_file("/sys/hypervisor/type", &hvtype);
|
|
+ * https://bugs.freedesktop.org/show_bug.cgi?id=77271 */
|
|
+ r = read_one_line_file("/proc/xen/capabilities", &domcap);
|
|
if (r >= 0) {
|
|
- if (streq(hvtype, "xen")) {
|
|
+ char *cap, *i = domcap;
|
|
+
|
|
+ while ((cap = strsep(&i, ",")))
|
|
+ if (streq(cap, "control_d"))
|
|
+ break;
|
|
+
|
|
+ if (!i) {
|
|
_id = "xen";
|
|
r = 1;
|
|
- goto finish;
|
|
}
|
|
- } else if (r != -ENOENT)
|
|
+
|
|
+ goto finish;
|
|
+
|
|
+ } else if (r == -ENOENT) {
|
|
+ _cleanup_free_ char *hvtype = NULL;
|
|
+
|
|
+ r = read_one_line_file("/sys/hypervisor/type", &hvtype);
|
|
+ if (r >= 0) {
|
|
+ if (streq(hvtype, "xen")) {
|
|
+ _id = "xen";
|
|
+ r = 1;
|
|
+ goto finish;
|
|
+ }
|
|
+ } else if (r != -ENOENT)
|
|
+ return r;
|
|
+ } else
|
|
return r;
|
|
|
|
/* this will set _id to "other" and return 0 for unknown hypervisors */
|
|
--
|
|
1.7.9.2
|
|
|