struct pvcalls_data_intf { PVCALLS_RING_IDX in_cons; /* 0 4 */ PVCALLS_RING_IDX in_prod; /* 4 4 */ int32_t in_error; /* 8 4 */ uint8_t pad[52]; /* 12 52 */ /* --- cacheline 1 boundary (64 bytes) --- */ PVCALLS_RING_IDX out_cons; /* 64 4 */ PVCALLS_RING_IDX out_prod; /* 68 4 */ int32_t out_error; /* 72 4 */ uint32_t ring_order; /* 76 4 */ uint16_t ref[0]; /* 80 0 */ /* size: 80, cachelines: 2, members: 9 */ /* last cacheline: 16 bytes */ }; struct xen_pvcalls_socket { uint64_t id; /* 0 8 */ uint32_t domain; /* 8 4 */ uint32_t type; /* 12 4 */ uint32_t protocol; /* 16 4 */ /* size: 24, cachelines: 1, members: 4 */ /* padding: 4 */ /* last cacheline: 24 bytes */ }; struct xen_pvcalls_connect { uint64_t id; /* 0 8 */ uint8_t addr[28]; /* 8 28 */ uint32_t len; /* 36 4 */ uint32_t flags; /* 40 4 */ uint16_t ref; /* 44 2 */ /* XXX 2 bytes hole, try to pack */ uint32_t evtchn; /* 48 4 */ /* size: 56, cachelines: 1, members: 6 */ /* sum members: 50, holes: 1, sum holes: 2 */ /* padding: 4 */ /* last cacheline: 56 bytes */ }; struct xen_pvcalls_release { uint64_t id; /* 0 8 */ uint8_t reuse; /* 8 1 */ /* size: 16, cachelines: 1, members: 2 */ /* padding: 7 */ /* last cacheline: 16 bytes */ }; struct xen_pvcalls_bind { uint64_t id; /* 0 8 */ uint8_t addr[28]; /* 8 28 */ uint32_t len; /* 36 4 */ /* size: 40, cachelines: 1, members: 3 */ /* last cacheline: 40 bytes */ }; struct xen_pvcalls_listen { uint64_t id; /* 0 8 */ uint32_t backlog; /* 8 4 */ /* size: 16, cachelines: 1, members: 2 */ /* padding: 4 */ /* last cacheline: 16 bytes */ }; struct xen_pvcalls_accept { uint64_t id; /* 0 8 */ uint64_t id_new; /* 8 8 */ uint16_t ref; /* 16 2 */ /* XXX 2 bytes hole, try to pack */ uint32_t evtchn; /* 20 4 */ /* size: 24, cachelines: 1, members: 4 */ /* sum members: 22, holes: 1, sum holes: 2 */ /* last cacheline: 24 bytes */ }; struct xen_pvcalls_poll { uint64_t id; /* 0 8 */ /* size: 8, cachelines: 1, members: 1 */ /* last cacheline: 8 bytes */ }; struct xen_pvcalls_dummy { uint8_t dummy[56]; /* 0 56 */ /* size: 56, cachelines: 1, members: 1 */ /* last cacheline: 56 bytes */ }; struct xen_pvcalls_request { uint32_t req_id; /* 0 4 */ uint32_t cmd; /* 4 4 */ union { struct xen_pvcalls_socket socket; /* 24 */ struct xen_pvcalls_connect connect; /* 56 */ struct xen_pvcalls_release release; /* 16 */ struct xen_pvcalls_bind bind; /* 40 */ struct xen_pvcalls_listen listen; /* 16 */ struct xen_pvcalls_accept accept; /* 24 */ struct xen_pvcalls_poll poll; /* 8 */ struct xen_pvcalls_dummy dummy; /* 56 */ } u; /* 8 56 */ /* --- cacheline 1 boundary (64 bytes) --- */ /* size: 64, cachelines: 1, members: 3 */ }; struct _xen_pvcalls_socket { uint64_t id; /* 0 8 */ /* size: 8, cachelines: 1, members: 1 */ /* last cacheline: 8 bytes */ }; struct _xen_pvcalls_connect { uint64_t id; /* 0 8 */ /* size: 8, cachelines: 1, members: 1 */ /* last cacheline: 8 bytes */ }; struct _xen_pvcalls_release { uint64_t id; /* 0 8 */ /* size: 8, cachelines: 1, members: 1 */ /* last cacheline: 8 bytes */ }; struct _xen_pvcalls_bind { uint64_t id; /* 0 8 */ /* size: 8, cachelines: 1, members: 1 */ /* last cacheline: 8 bytes */ }; struct _xen_pvcalls_listen { uint64_t id; /* 0 8 */ /* size: 8, cachelines: 1, members: 1 */ /* last cacheline: 8 bytes */ }; struct _xen_pvcalls_accept { uint64_t id; /* 0 8 */ /* size: 8, cachelines: 1, members: 1 */ /* last cacheline: 8 bytes */ }; struct _xen_pvcalls_poll { uint64_t id; /* 0 8 */ /* size: 8, cachelines: 1, members: 1 */ /* last cacheline: 8 bytes */ }; struct _xen_pvcalls_dummy { uint8_t dummy[8]; /* 0 8 */ /* size: 8, cachelines: 1, members: 1 */ /* last cacheline: 8 bytes */ }; struct xen_pvcalls_response { uint32_t req_id; /* 0 4 */ uint32_t cmd; /* 4 4 */ int32_t ret; /* 8 4 */ uint32_t pad; /* 12 4 */ union { struct _xen_pvcalls_socket socket; /* 8 */ struct _xen_pvcalls_connect connect; /* 8 */ struct _xen_pvcalls_release release; /* 8 */ struct _xen_pvcalls_bind bind; /* 8 */ struct _xen_pvcalls_listen listen; /* 8 */ struct _xen_pvcalls_accept accept; /* 8 */ struct _xen_pvcalls_poll poll; /* 8 */ struct _xen_pvcalls_dummy dummy; /* 8 */ } u; /* 16 8 */ /* size: 24, cachelines: 1, members: 5 */ /* last cacheline: 24 bytes */ };