From ef425519db29812024c52ca19fd431a002a96c92 Mon Sep 17 00:00:00 2001 From: Florian Pose Date: Wed, 15 Jul 2026 12:54:34 +0200 Subject: [PATCH] Moved definition of smp macros to globals. --- master/fsm_master.c | 2 +- master/globals.h | 24 ++++++++++++++++++++++++ master/master.c | 17 ----------------- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/master/fsm_master.c b/master/fsm_master.c index 23ef6bdb..36a29e2f 100644 --- a/master/fsm_master.c +++ b/master/fsm_master.c @@ -174,7 +174,7 @@ int ec_fsm_master_exec( ec_fsm_master_t *fsm /**< Master state machine. */ ) { - ec_datagram_state_t state = smp_load_acquire(&datagram->state); + ec_datagram_state_t state = smp_load_acquire(&fsm->datagram->state); if (state == EC_DATAGRAM_SENT || state == EC_DATAGRAM_QUEUED) { // datagram was not sent or received yet. diff --git a/master/globals.h b/master/globals.h index da738e8b..4343a9ed 100644 --- a/master/globals.h +++ b/master/globals.h @@ -30,6 +30,8 @@ #include "../globals.h" #include "../include/ecrt.h" +#include + /***************************************************************************** * EtherCAT master ****************************************************************************/ @@ -252,6 +254,28 @@ extern const char *ec_device_names[2]; // only main and backup! /****************************************************************************/ +/* Define SMP macros on kernel versions where they did not exist yet. + */ + +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 12, 47) + +#define smp_store_release(p, v) \ +do { \ + smp_mb(); \ + ACCESS_ONCE(*p) = (v); \ +} while (0) + +#define smp_load_acquire(p) \ +({ \ + typeof(*p) ___p1 = ACCESS_ONCE(*p); \ + smp_mb(); \ + ___p1; \ +}) + +#endif + +/****************************************************************************/ + extern char *ec_master_version_str; /****************************************************************************/ diff --git a/master/master.c b/master/master.c index cbed0043..f92f1869 100644 --- a/master/master.c +++ b/master/master.c @@ -62,23 +62,6 @@ rt_mutex_lock_interruptible(lock, 0) #endif -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 12, 47) - -#define smp_store_release(p, v) \ -do { \ - smp_mb(); \ - ACCESS_ONCE(*p) = (v); \ -} while (0) - -#define smp_load_acquire(p) \ -({ \ - typeof(*p) ___p1 = ACCESS_ONCE(*p); \ - smp_mb(); \ - ___p1; \ -}) - -#endif - #include "master.h" /****************************************************************************/