Source: trafficserver
Version: 3.3.0-1
Severity: important
Tags: patch
https://buildd.debian.org/status/logs.php?pkg=trafficserver&arch=armel
...
{standard input}: Assembler messages:
{standard input}:1649: Error: selected processor does not support `dmb' in ARM
mode
{standard input}:6365: Error: selected processor does not support `dmb' in ARM
mode
The upstream fix is attached.
>From 2c0e048c8445a4d6dc70d3b93133aeae5ae0f539 Mon Sep 17 00:00:00 2001
From: Phil Sorber <[email protected]>
Date: Thu, 5 Oct 2017 13:36:43 -0600
Subject: Remove custom memory barriers from header_rewrite and replace with
std::atomic
---
plugins/header_rewrite/conditions.cc | 3 ++-
plugins/header_rewrite/lulu.h | 33 ---------------------------------
2 files changed, 2 insertions(+), 34 deletions(-)
diff --git a/plugins/header_rewrite/conditions.cc
b/plugins/header_rewrite/conditions.cc
index f2f81cbe8..b316fca1c 100644
--- a/plugins/header_rewrite/conditions.cc
+++ b/plugins/header_rewrite/conditions.cc
@@ -25,5 +25,6 @@
#include <cctype>
#include <sstream>
+#include <atomic>
#include "ts/ts.h"
@@ -175,7 +176,7 @@ ConditionAccess::eval(const Resources & /* res ATS_UNUSED
*/)
bool check = !access(_qualifier.c_str(), R_OK);
tv.tv_sec += 2;
- mb();
+ std::atomic_thread_fence(std::memory_order_seq_cst);
_next = tv.tv_sec; // I hope this is an atomic "set"...
_last = check; // This sure ought to be
}
diff --git a/plugins/header_rewrite/lulu.h b/plugins/header_rewrite/lulu.h
index 555ef2e2c..43ac22348 100644
--- a/plugins/header_rewrite/lulu.h
+++ b/plugins/header_rewrite/lulu.h
@@ -34,39 +34,6 @@ std::string getIP(sockaddr const *s_sockaddr);
char *getIP(sockaddr const *s_sockaddr, char res[INET6_ADDRSTRLEN]);
uint16_t getPort(sockaddr const *s_sockaddr);
-// Memory barriers
-#if defined(__i386__)
-#define mb() __asm__ __volatile__("lock; addl $0,0(%%esp)" : : : "memory")
-#define rmb() __asm__ __volatile__("lock; addl $0,0(%%esp)" : : : "memory")
-#define wmb() __asm__ __volatile__("" : : : "memory")
-#elif defined(__x86_64__)
-#define mb() __asm__ __volatile__("mfence" : : : "memory")
-#define rmb() __asm__ __volatile__("lfence" : : : "memory")
-#define wmb() __asm__ __volatile__("" : : : "memory")
-#elif defined(__mips__)
-#define mb() __asm__ __volatile__("sync" : : : "memory")
-#define rmb() __asm__ __volatile__("sync" : : : "memory")
-#define wmb() __asm__ __volatile__("" : : : "memory")
-#elif defined(__arm__)
-#define mb() __asm__ __volatile__("dmb" : : : "memory")
-#define rmb() __asm__ __volatile__("dmb" : : : "memory")
-#define wmb() __asm__ __volatile__("" : : : "memory")
-#elif defined(__mips__)
-#define mb() __asm__ __volatile__("sync" : : : "memory")
-#define rmb() __asm__ __volatile__("sync" : : : "memory")
-#define wmb() __asm__ __volatile__("" : : : "memory")
-#elif defined(__powerpc64__)
-#define mb() __asm__ __volatile__("sync" : : : "memory")
-#define rmb() __asm__ __volatile__("sync" : : : "memory")
-#define wmb() __asm__ __volatile__("sync" : : : "memory")
-#elif defined(__aarch64__)
-#define mb() __asm__ __volatile__("dsb sy" : : : "memory")
-#define rmb() __asm__ __volatile__("dsb ld" : : : "memory")
-#define wmb() __asm__ __volatile__("dsb st" : : : "memory")
-#else
-#error "Define barriers"
-#endif
-
extern const char PLUGIN_NAME[];
extern const char PLUGIN_NAME_DBG[];
--
2.11.0