[v6,12/30] drivers/event: replace packed attributes

Message ID 1732668761-5556-13-git-send-email-andremue@linux.microsoft.com (mailing list archive)
State Superseded
Delegated to: David Marchand
Headers
Series fix packing of structs when building with MSVC |

Checks

Context Check Description
ci/checkpatch warning coding style issues

Commit Message

Andre Muezerie Nov. 27, 2024, 12:52 a.m. UTC
MSVC struct packing is not compatible with GCC. Replace macro
__rte_packed with __rte_packed_begin to push existing pack value
and set packing to 1-byte and macro __rte_packed_end to restore
the pack value prior to the push.

Macro __rte_packed_end is deliberately utilized to trigger a
MSVC compiler warning if no existing packing has been pushed allowing
easy identification of locations where the __rte_packed_begin is
missing.

Signed-off-by: Andre Muezerie <andremue@linux.microsoft.com>
---
 drivers/event/octeontx/timvf_evdev.c |  4 ++--
 drivers/event/octeontx/timvf_evdev.h | 12 ++++++------
 2 files changed, 8 insertions(+), 8 deletions(-)
  

Comments

Tyler Retzlaff Dec. 5, 2024, 12:28 a.m. UTC | #1
On Tue, Nov 26, 2024 at 04:52:23PM -0800, Andre Muezerie wrote:
> MSVC struct packing is not compatible with GCC. Replace macro
> __rte_packed with __rte_packed_begin to push existing pack value
> and set packing to 1-byte and macro __rte_packed_end to restore
> the pack value prior to the push.
> 
> Macro __rte_packed_end is deliberately utilized to trigger a
> MSVC compiler warning if no existing packing has been pushed allowing
> easy identification of locations where the __rte_packed_begin is
> missing.
> 
> Signed-off-by: Andre Muezerie <andremue@linux.microsoft.com>
> ---

Reviewed-by: Tyler Retzlaff <roretzla@linux.microsoft.com>
  

Patch

diff --git a/drivers/event/octeontx/timvf_evdev.c b/drivers/event/octeontx/timvf_evdev.c
index 82f17144a6..9339b13941 100644
--- a/drivers/event/octeontx/timvf_evdev.c
+++ b/drivers/event/octeontx/timvf_evdev.c
@@ -9,10 +9,10 @@  RTE_LOG_REGISTER_SUFFIX(otx_logtype_timvf, timer, NOTICE);
 
 static struct rte_eventdev *event_dev;
 
-struct __rte_packed timvf_mbox_dev_info {
+__rte_packed_begin struct timvf_mbox_dev_info {
 	uint64_t ring_active[4];
 	uint64_t clk_freq;
-};
+} __rte_packed_end;
 
 /* Response messages */
 enum {
diff --git a/drivers/event/octeontx/timvf_evdev.h b/drivers/event/octeontx/timvf_evdev.h
index 44a4ee41c4..0dd3734773 100644
--- a/drivers/event/octeontx/timvf_evdev.h
+++ b/drivers/event/octeontx/timvf_evdev.h
@@ -123,7 +123,7 @@  enum timvf_clk_src {
 };
 
 /* TIM_MEM_BUCKET */
-struct __rte_aligned(8) tim_mem_bucket {
+__rte_packed_begin struct __rte_aligned(8) tim_mem_bucket {
 	uint64_t first_chunk;
 	union {
 		RTE_ATOMIC(uint64_t) w1;
@@ -139,19 +139,19 @@  struct __rte_aligned(8) tim_mem_bucket {
 	};
 	uint64_t current_chunk;
 	uint64_t pad;
-} __rte_packed;
+} __rte_packed_end;
 
-struct tim_mem_entry {
+__rte_packed_begin struct tim_mem_entry {
 	uint64_t w0;
 	uint64_t wqe;
-} __rte_packed;
+} __rte_packed_end;
 
-struct timvf_ctrl_reg {
+__rte_packed_begin struct timvf_ctrl_reg {
 	uint64_t rctrl0;
 	uint64_t rctrl1;
 	uint64_t rctrl2;
 	uint8_t use_pmu;
-} __rte_packed;
+} __rte_packed_end;
 
 struct timvf_ring;