unsigned long prev;
switch (size) {
case 1:
- asm volatile("lock cmpxchgb %b1,%2"
+ asm volatile("lock; cmpxchgb %b1,%2"
: "=a"(prev)
: "q"(new), "m"(*__xg(ptr)), "0"(old)
: "memory");
return prev;
case 2:
- asm volatile("lock cmpxchgw %w1,%2"
+ asm volatile("lock; cmpxchgw %w1,%2"
: "=a"(prev)
: "r"(new), "m"(*__xg(ptr)), "0"(old)
: "memory");
return prev;
case 4:
- asm volatile("lock cmpxchgl %k1,%2"
+ asm volatile("lock; cmpxchgl %k1,%2"
: "=a"(prev)
: "r"(new), "m"(*__xg(ptr)), "0"(old)
: "memory");
return prev;
case 8:
- asm volatile("lock cmpxchgq %1,%2"
+ asm volatile("lock; cmpxchgq %1,%2"
: "=a"(prev)
: "r"(new), "m"(*__xg(ptr)), "0"(old)
: "memory");
/* TRACE CLOCK */
+//ust// static inline u64 trace_clock_read64(void)
+//ust// {
+//ust// uint32_t low;
+//ust// uint32_t high;
+//ust// uint64_t retval;
+//ust// __asm__ volatile ("rdtsc\n" : "=a" (low), "=d" (high));
+//ust//
+//ust// retval = high;
+//ust// retval <<= 32;
+//ust// return retval | low;
+//ust// }
+
static inline u64 trace_clock_read64(void)
{
- return 0LL;
+ struct timeval tv;
+ u64 retval;
+
+ gettimeofday(&tv, NULL);
+ retval = tv.tv_sec;
+ retval *= 1000000;
+ retval += tv.tv_usec;
+
+ return retval;
}
-static inline unsigned int trace_clock_frequency(void)
+static inline u64 trace_clock_frequency(void)
{
- return 0LL;
+ return 1000000LL;
}
static inline u32 trace_clock_freq_scale(void)
{
- return 0;
+ return 1;
}