Hi,
On 22/04/2020 10:20, Jan Beulich wrote:
Even if it was possible to use the sub-structs defined in the header
that way, keep in mind that we also wrote:
/* dummy member to force sizeof(struct xen_pvcalls_request)
* to match across archs */
struct xen_pvcalls_dummy {
uint8_t dummy[56];
} dummy;
This has nothing to do with how a consumer may use the structs.
And the spec also clarifies that the size of each specific request is
always 56 bytes.
Sure, and I didn't mean to imply that a consumer would be allowed
to break this requirement. Still something like this
int pvcall_new_socket(struct xen_pvcalls_socket *s) {
struct xen_pvcalls_request req = {
.req_id = REQ_ID,
.cmd = PVCALLS_SOCKET,
.u.socket = *s,
};
return pvcall(&req);
}
may break.
I think I understand your concern now. So yes I agree this would break
32-bit consumer.
As the padding is at the end of the structure, I think a 32-bit frontend
and 64-bit backend (or vice-versa) should currently work without any
trouble. The problem would come later if we decide to extend a command.
I will document the padding only for non 32-bit x86 guest and rework the
documentation.
Cheers,
--
Julien Grall