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
This commit is contained in:
@@ -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]; };
|
|||||||
|
|
||||||
#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)
|
|||||||
|
|
||||||
/* 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)
|
|||||||
* 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;
|
||||||
|
Reference in New Issue
Block a user