Instead of open-coding the struct type in viridian_synic_deliver_timer_msg(). Additionally expand the union field in hv_message struct to contain the timer payload, this way the memcpy in viridian_synic_deliver_timer_msg() can be replaced with a struct assign.
No functional change intended. Signed-off-by: Roger Pau Monné <[email protected]> --- xen/arch/x86/hvm/viridian/synic.c | 17 ++++++---------- xen/arch/x86/include/asm/guest/hyperv-tlfs.h | 21 ++++++++++---------- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/xen/arch/x86/hvm/viridian/synic.c b/xen/arch/x86/hvm/viridian/synic.c index e6cba7548f1b..6d7b6bd0eda2 100644 --- a/xen/arch/x86/hvm/viridian/synic.c +++ b/xen/arch/x86/hvm/viridian/synic.c @@ -327,15 +327,10 @@ bool viridian_synic_deliver_timer_msg(struct vcpu *v, unsigned int sintx, struct viridian_vcpu *vv = v->arch.hvm.viridian; const union hv_synic_sint *vs = &vv->sint[sintx]; struct hv_message *msg = vv->simp.ptr; - struct { - uint32_t TimerIndex; - uint32_t Reserved; - uint64_t ExpirationTime; - uint64_t DeliveryTime; - } payload = { - .TimerIndex = index, - .ExpirationTime = expiration, - .DeliveryTime = delivery, + const struct hv_timer_message_payload payload = { + .timer_index = index, + .expiration_time = expiration, + .delivery_time = delivery, }; /* Don't assume SIM page to be mapped. */ @@ -359,8 +354,8 @@ bool viridian_synic_deliver_timer_msg(struct vcpu *v, unsigned int sintx, msg->header.message_flags.msg_pending = 0; msg->header.payload_size = sizeof(payload); - BUILD_BUG_ON(sizeof(payload) > sizeof(msg->u.payload)); - memcpy(msg->u.payload, &payload, sizeof(payload)); + BUILD_BUG_ON(sizeof(msg->payload.timer) > sizeof(msg->payload.raw)); + msg->payload.timer = payload; if ( !vs->masked && vlapic_enabled(vcpu_vlapic(v)) ) vlapic_set_irq(vcpu_vlapic(v), vs->vector, 0); diff --git a/xen/arch/x86/include/asm/guest/hyperv-tlfs.h b/xen/arch/x86/include/asm/guest/hyperv-tlfs.h index 79cfc90dd8ec..18da73c74e03 100644 --- a/xen/arch/x86/include/asm/guest/hyperv-tlfs.h +++ b/xen/arch/x86/include/asm/guest/hyperv-tlfs.h @@ -527,12 +527,21 @@ struct hv_message_header { }; }; +/* Define timer message payload structure. */ +struct hv_timer_message_payload { + uint32_t timer_index; + uint32_t reserved; + uint64_t expiration_time; /* When the timer expired */ + uint64_t delivery_time; /* When the message was delivered */ +}; + /* Define synthetic interrupt controller message format. */ struct hv_message { struct hv_message_header header; union { - uint64_t payload[HV_MESSAGE_PAYLOAD_QWORD_COUNT]; - } u; + struct hv_timer_message_payload timer; + uint64_t raw[HV_MESSAGE_PAYLOAD_QWORD_COUNT]; + } payload; }; /* Define the synthetic interrupt message page layout. */ @@ -540,14 +549,6 @@ struct hv_message_page { struct hv_message sint_message[HV_SYNIC_SINT_COUNT]; }; -/* Define timer message payload structure. */ -struct hv_timer_message_payload { - uint32_t timer_index; - uint32_t reserved; - uint64_t expiration_time; /* When the timer expired */ - uint64_t delivery_time; /* When the message was delivered */ -}; - struct hv_nested_enlightenments_control { struct { uint32_t directhypercall:1; -- 2.51.0
