diff options
author | Emmanuel Ackaouy <ack@xensource.com> | 2007-01-05 17:34:29 +0000 |
---|---|---|
committer | Emmanuel Ackaouy <ack@xensource.com> | 2007-01-05 17:34:29 +0000 |
commit | fa5b1a1d19aed783a5461e4ea9c0bd6a23f9d863 (patch) | |
tree | b30f57e0f20a6a5b52e621ed967a0d9004a74d5d /xen/include/xen/shared.h | |
parent | 8589463a257a56c0316b002b7d8affc5709e4672 (diff) | |
download | xen-fa5b1a1d19aed783a5461e4ea9c0bd6a23f9d863.tar.gz xen-fa5b1a1d19aed783a5461e4ea9c0bd6a23f9d863.tar.bz2 xen-fa5b1a1d19aed783a5461e4ea9c0bd6a23f9d863.zip |
Handle shared info (having different layout for native and compatibility
mode guests) accesses.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Diffstat (limited to 'xen/include/xen/shared.h')
-rw-r--r-- | xen/include/xen/shared.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/xen/include/xen/shared.h b/xen/include/xen/shared.h new file mode 100644 index 0000000000..ee0510cf67 --- /dev/null +++ b/xen/include/xen/shared.h @@ -0,0 +1,54 @@ +#ifndef __XEN_SHARED_H__ +#define __XEN_SHARED_H__ + +#include <xen/config.h> + +#ifdef CONFIG_COMPAT + +#include <compat/xen.h> + +typedef union { + struct shared_info native; + struct compat_shared_info compat; +} shared_info_t; + +#define __shared_info(d, s, field) (*(!IS_COMPAT(d) ? \ + &(s)->native.field : \ + &(s)->compat.field)) +#define __shared_info_addr(d, s, field) (!IS_COMPAT(d) ? \ + (void *)&(s)->native.field : \ + (void *)&(s)->compat.field) + +#define shared_info(d, field) __shared_info(d, (d)->shared_info, field) +#define shared_info_addr(d, field) __shared_info_addr(d, (d)->shared_info, field) + +typedef union { + struct vcpu_info native; + struct compat_vcpu_info compat; +} vcpu_info_t; + +#define vcpu_info(v, field) (*(!IS_COMPAT((v)->domain) ? \ + &(v)->vcpu_info->native.field : \ + &(v)->vcpu_info->compat.field)) +#define vcpu_info_addr(v, field) (!IS_COMPAT((v)->domain) ? \ + (void *)&(v)->vcpu_info->native.field : \ + (void *)&(v)->vcpu_info->compat.field) + +#else + +typedef struct shared_info shared_info_t; + +#define __shared_info(d, s, field) ((s)->field) +#define __shared_info_addr(d, s, field) ((void *)&(s)->field) + +#define shared_info(d, field) ((d)->shared_info->field) +#define shared_info_addr(d, field) ((void *)&(d)->shared_info->field) + +typedef struct vcpu_info vcpu_info_t; + +#define vcpu_info(v, field) ((v)->vcpu_info->field) +#define vcpu_info_addr(v, field) ((void *)&(v)->vcpu_info->field) + +#endif + +#endif /* __XEN_SHARED_H__ */ |