Commit 59766edc authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-2.6-mn10300

* 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-2.6-mn10300:
  MN10300: atomic_read() should ensure it emits a load
  MN10300: The SMP_ICACHE_INV_FLUSH_RANGE IPI command does not exist
  MN10300: Proper use of macros get_user() in the case of incremented pointers
parents 2990821d af794206
...@@ -139,7 +139,7 @@ static inline unsigned long __cmpxchg(volatile unsigned long *m, ...@@ -139,7 +139,7 @@ static inline unsigned long __cmpxchg(volatile unsigned long *m,
* Atomically reads the value of @v. Note that the guaranteed * Atomically reads the value of @v. Note that the guaranteed
* useful range of an atomic_t is only 24 bits. * useful range of an atomic_t is only 24 bits.
*/ */
#define atomic_read(v) ((v)->counter) #define atomic_read(v) (ACCESS_ONCE((v)->counter))
/** /**
* atomic_set - set atomic variable * atomic_set - set atomic variable
......
...@@ -160,9 +160,10 @@ struct __large_struct { unsigned long buf[100]; }; ...@@ -160,9 +160,10 @@ struct __large_struct { unsigned long buf[100]; };
#define __get_user_check(x, ptr, size) \ #define __get_user_check(x, ptr, size) \
({ \ ({ \
const __typeof__(ptr) __guc_ptr = (ptr); \
int _e; \ int _e; \
if (likely(__access_ok((unsigned long) (ptr), (size)))) \ if (likely(__access_ok((unsigned long) __guc_ptr, (size)))) \
_e = __get_user_nocheck((x), (ptr), (size)); \ _e = __get_user_nocheck((x), __guc_ptr, (size)); \
else { \ else { \
_e = -EFAULT; \ _e = -EFAULT; \
(x) = (__typeof__(x))0; \ (x) = (__typeof__(x))0; \
......
...@@ -69,7 +69,7 @@ static void flush_icache_page_range(unsigned long start, unsigned long end) ...@@ -69,7 +69,7 @@ static void flush_icache_page_range(unsigned long start, unsigned long end)
/* invalidate the icache coverage on that region */ /* invalidate the icache coverage on that region */
mn10300_local_icache_inv_range2(addr + off, size); mn10300_local_icache_inv_range2(addr + off, size);
smp_cache_call(SMP_ICACHE_INV_FLUSH_RANGE, start, end); smp_cache_call(SMP_ICACHE_INV_RANGE, start, end);
} }
/** /**
...@@ -101,7 +101,7 @@ void flush_icache_range(unsigned long start, unsigned long end) ...@@ -101,7 +101,7 @@ void flush_icache_range(unsigned long start, unsigned long end)
* directly */ * directly */
start_page = (start >= 0x80000000UL) ? start : 0x80000000UL; start_page = (start >= 0x80000000UL) ? start : 0x80000000UL;
mn10300_icache_inv_range(start_page, end); mn10300_icache_inv_range(start_page, end);
smp_cache_call(SMP_ICACHE_INV_FLUSH_RANGE, start, end); smp_cache_call(SMP_ICACHE_INV_RANGE, start, end);
if (start_page == start) if (start_page == start)
goto done; goto done;
end = start_page; end = start_page;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment