diff --git a/include/linux/measuremore.h b/include/linux/measuremore.h index 9a88781070ae1a09fa6c3144f24c983a34ebfbac..7dff071fae1942e817764e8bb9a9bb6023635918 100644 --- a/include/linux/measuremore.h +++ b/include/linux/measuremore.h @@ -36,6 +36,8 @@ extern struct checkpoint_record *current_cpr; extern struct checkpoint_record *current_cpr_limit; static __always_inline void memo_checkpoint(const char *name) { + asm volatile("" ::: "memory"); + /* The following catches both the case when no run hast been started * (both are NULL) and when we are attempting to record too many * checkpoints. */ @@ -43,7 +45,6 @@ static __always_inline void memo_checkpoint(const char *name) { return; } - asm volatile("" ::: "memory"); #ifdef CONFIG_MEASUREMORE_TIMESTAMP_TYPE_PMCCNTR pmccntr_read(current_cpr->pmccntr_ts.value); #endif @@ -56,7 +57,6 @@ static __always_inline void memo_checkpoint(const char *name) { #ifdef CONFIG_MEASUREMORE_TIMESTAMP_TYPE_NSTIMEOFDAY getnstimeofday(¤t_cpr->nstimeofday); #endif - asm volatile("" ::: "memory"); current_cpr->name_blob.data = (void *) name; @@ -66,6 +66,8 @@ static __always_inline void memo_checkpoint(const char *name) { * so we can simply drop the rows where a checkpoint is missing in our * scripts. */ current_cpr++; + + asm volatile("" ::: "memory"); } #endif /* MEASUREMORE_H */