[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] x86/viridian: use hv_timer_message_payload struct


  • To: xen-devel@xxxxxxxxxxxxxxxxxxxx
  • From: Roger Pau Monne <roger.pau@xxxxxxxxxx>
  • Date: Thu, 13 Nov 2025 18:24:13 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=omjgH2/Ytr/JMzgk432l+AEgHftGK54jZmXwcwMUGj8=; b=wpndd5HDbvvONqta1VXaSiIug6IZBYX5aR2odNfrvAuunLCfcsaefXEOydaIFU5gbjBLX0XdKLMKxc5Qne5EVcFKQH/vehHBQ5chh3OJmTwCuIkzn487ryaTrCDlmXGtGeAyBg7l1skF9xtKHCcvSBp8HdGyYFlYZEtGrJ/II0nCv0W2NJxFWyH4VRnobsM1XTx3ylvMWvRfwwNL5E3UBO7JqjhEwJF8rCxwcvZzSn3Uvv4EKeNk4bymhgHpEYm/pYP62GpX3LfsQKRi8/JhR6FY/Hr1NeSdJhpTQA62OgkWvuPLhqxDxQKazJbvPFHnmqbJUK+krHvqUwnCH1eKtw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FfscAavuZgOzJtuj5GmhSMbRjAiiAAXuue9j9b6HrY5XIGlzx9AMgkn3gIHoDurgd/CvpWZJ2UDHeWOPwvk90kPJhEOpvPwKrtpbfSV34ttDqU/9lB6DrR40d5xQzane5GpCKvrKOmVRlKmq+nbvyHV28MHYTb3i1G4lyF7UrBYKYL18oNMwqpVi4hNSp47c9zq0JpxOMAFtaQ98ljqLeqDJS5mcmxhD1P0DLP1nt3NKM1tuXCLVLkTDrEiyTX2e8BGrCshRO+QJXsC59tyN23J7IUMNSGRtBykMTGnzi+NzrWbmU683kmAJ2SkuTOQYy7UlUoCuTN6J/AqUX++b/w==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Cc: Roger Pau Monne <roger.pau@xxxxxxxxxx>, Paul Durrant <paul@xxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • Delivery-date: Thu, 13 Nov 2025 17:24:37 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

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é <roger.pau@xxxxxxxxxx>
---
 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




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.