Hi,

On 10/08/17 08:30, Jan Beulich wrote:
On 09.08.17 at 23:39, <volodymyr_babc...@epam.com> wrote:
On 09.08.17 14:58, Jan Beulich wrote:
On 09.08.17 at 12:10, <julien.gr...@arm.com> wrote:
On 08/08/17 21:08, Volodymyr Babchuk wrote:
+#ifndef __XEN_PUBLIC_ARCH_ARM_SMC_H__
+#define __XEN_PUBLIC_ARCH_ARM_SMC_H__
+
+typedef struct {
+    uint32_t a[4];
+} xen_arm_smccc_uid;

This is not the normal way of encoding a UID type.
Just to be clear: you are proposing to store UID in such struct
struct uuid_t {
     unsigned32  time_low;
     unsigned16  time_mid;
     unsigned16  time_hi_and_version;
     unsigned8   clock_seq_hi_and_reserved;
     unsigned8   clock_seq_low;
     byte        node[6];
};
right?

Type-wise yes; the names of the fields look uncommon to me.

+#define XEN_ARM_SMCCC_UID(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7)      \
+    ((xen_arm_smccc_uid) {{(a), ((b) << 16 | (c) ),                     \

This is not C89 compatible.
Oops, sorry. Didn't knew that XEN should be C89 compatible.
Is there any guide for novices? I didn't found anything useful in docs/
(not even coding style document). On wiki I have found only
"Submitting_Xen_Project_Patches" page, which is very helpful, but it
does not cover topics like which C standard to use.

The public headers are required to the C89 compatible; Xen
code in general is fine to use extensions.

+        ((d0) << 24 | (d1) << 16 | (d2) << 8 | (d3) << 0),              \
+        ((d4) << 24 | (d5) << 16 | (d6) << 8 | (d7) << 0)}})
+
+/*
+ * Hypervisor Service version.
+ *
+ * We can't use XEN version here, because of SMCCC requirements:
+ * Major revision should change every time SMC/HVC function is removed.
+ * Minor revision should change every time SMC/HVC function is added.
+ * So, it is SMCCC protocol revision code, not XEN version.

I don't understand this explanation - how is the situation here
different from some arbitrary, non-toolstack-only hypercall?
Because this is generic interface that should be supported by all
hypervisors, including XEN. Think about this as a way for a guest to
determine under which hypervisor it operates, and which functions it
provides.

In which case - why the XEN_ prefixes?

Because the version depends on the interface implemented which is Xen specific.

You have to match the UID (Xen Specific) and the version to know what is actually supported.

Cheers,

--
Julien Grall

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

Reply via email to