On 29.05.20 10:34, Jan Beulich wrote:
On 19.05.2020 09:21, Juergen Gross wrote:
@@ -373,6 +374,52 @@ void __init do_initcalls(void)
(*call)();
}
+#ifdef CONFIG_HYPFS
+static unsigned int __read_mostly major_version;
+static unsigned int __read_mostly minor_version;
+
+static HYPFS_DIR_INIT(buildinfo, "buildinfo");
+static HYPFS_DIR_INIT(compileinfo, "compileinfo");
+static HYPFS_DIR_INIT(version, "version");
+static HYPFS_UINT_INIT(major, "major", major_version);
+static HYPFS_UINT_INIT(minor, "minor", minor_version);
These two lines fail to build with gcc 4.1 ("unknown field 'content'
specified in initializer"), which I've deliberately tried as a last
minute post-commit, pre-push check. I therefore reverted this change
before pushing.
Paul, Jürgen - please advise how to proceed, considering today's
deadline. I'd accept pushing the rest of the series, if a fix for
the issue will then still be permitted in later. Otherwise I'd have
to wait for a fixed (incremental) version
The attached patch should fix this problem (assuming the anonymous
union is to blame).
Could you verify that, please?
In case the patch is fine, I'll resend the rest of the series with
that patch included, as there are adaptions in later patches needed.
Juergen
>From 1b56440bd50a523bbdbd96f0e1e96c85793108db Mon Sep 17 00:00:00 2001
From: Juergen Gross <jgr...@suse.com>
Date: Fri, 29 May 2020 11:09:43 +0200
Subject: [PATCH] xen/hypfs: make struct hypfs_entry_leaf initializers work
with gcc 4.1
gcc 4.1 has problems with static initializers for anonymous unions.
Fix this by naming the union in struct hypfs_entry_leaf.
Signed-off-by: Juergen Gross <jgr...@suse.com>
---
xen/common/hypfs.c | 8 ++++----
xen/include/xen/hypfs.h | 6 +++---
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/xen/common/hypfs.c b/xen/common/hypfs.c
index 9c2213a068..a111c2f86d 100644
--- a/xen/common/hypfs.c
+++ b/xen/common/hypfs.c
@@ -126,7 +126,7 @@ int hypfs_add_leaf(struct hypfs_entry_dir *parent,
{
int ret;
- if ( !leaf->content )
+ if ( !leaf->u.content )
ret = -EINVAL;
else
ret = add_entry(parent, &leaf->e);
@@ -255,7 +255,7 @@ int hypfs_read_leaf(const struct hypfs_entry *entry,
l = container_of(entry, const struct hypfs_entry_leaf, e);
- return copy_to_guest(uaddr, l->content, entry->size) ? -EFAULT: 0;
+ return copy_to_guest(uaddr, l->u.content, entry->size) ? -EFAULT: 0;
}
static int hypfs_read(const struct hypfs_entry *entry,
@@ -317,7 +317,7 @@ int hypfs_write_leaf(struct hypfs_entry_leaf *leaf,
goto out;
ret = 0;
- memcpy(leaf->write_ptr, buf, ulen);
+ memcpy(leaf->u.write_ptr, buf, ulen);
leaf->e.size = ulen;
out:
@@ -341,7 +341,7 @@ int hypfs_write_bool(struct hypfs_entry_leaf *leaf,
if ( copy_from_guest(&buf, uaddr, ulen) )
return -EFAULT;
- *(bool *)leaf->write_ptr = buf;
+ *(bool *)leaf->u.write_ptr = buf;
return 0;
}
diff --git a/xen/include/xen/hypfs.h b/xen/include/xen/hypfs.h
index 5c6a0ccece..39845ec5ae 100644
--- a/xen/include/xen/hypfs.h
+++ b/xen/include/xen/hypfs.h
@@ -26,7 +26,7 @@ struct hypfs_entry_leaf {
union {
const void *content;
void *write_ptr;
- };
+ } u;
};
struct hypfs_entry_dir {
@@ -68,7 +68,7 @@ struct hypfs_entry_dir {
static inline void hypfs_string_set_reference(struct hypfs_entry_leaf *leaf,
const char *str)
{
- leaf->content = str;
+ leaf->u.content = str;
leaf->e.size = strlen(str) + 1;
}
@@ -81,7 +81,7 @@ static inline void hypfs_string_set_reference(struct hypfs_entry_leaf *leaf,
.e.max_size = (wr) ? sizeof(contvar) : 0, \
.e.read = hypfs_read_leaf, \
.e.write = (wr), \
- .content = &(contvar), \
+ .u.content = &(contvar), \
}
#define HYPFS_UINT_INIT(var, nam, contvar) \
--
2.26.2