Skip to content

Commit b952e97

Browse files
committed
Merge tag 'for-linus' of git://github.com/openrisc/linux
Pull OpenRISC fixes from Stafford Horne: "Fixes for compile issues pointed out by kbuild and one bug I found in initrd with the 5.9 patches" * tag 'for-linus' of git://github.com/openrisc/linux: openrisc: Fix issue with get_user for 64-bit values openrisc: Fix cache API compile issue when not inlining openrisc: Reserve memblock for initrd
2 parents ef2e9a5 + d877322 commit b952e97

File tree

3 files changed

+32
-13
lines changed

3 files changed

+32
-13
lines changed

arch/openrisc/include/asm/uaccess.h

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -165,19 +165,19 @@ struct __large_struct {
165165

166166
#define __get_user_nocheck(x, ptr, size) \
167167
({ \
168-
long __gu_err, __gu_val; \
169-
__get_user_size(__gu_val, (ptr), (size), __gu_err); \
170-
(x) = (__force __typeof__(*(ptr)))__gu_val; \
168+
long __gu_err; \
169+
__get_user_size((x), (ptr), (size), __gu_err); \
171170
__gu_err; \
172171
})
173172

174173
#define __get_user_check(x, ptr, size) \
175174
({ \
176-
long __gu_err = -EFAULT, __gu_val = 0; \
175+
long __gu_err = -EFAULT; \
177176
const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
178-
if (access_ok(__gu_addr, size)) \
179-
__get_user_size(__gu_val, __gu_addr, (size), __gu_err); \
180-
(x) = (__force __typeof__(*(ptr)))__gu_val; \
177+
if (access_ok(__gu_addr, size)) \
178+
__get_user_size((x), __gu_addr, (size), __gu_err); \
179+
else \
180+
(x) = (__typeof__(*(ptr))) 0; \
181181
__gu_err; \
182182
})
183183

@@ -191,11 +191,13 @@ do { \
191191
case 2: __get_user_asm(x, ptr, retval, "l.lhz"); break; \
192192
case 4: __get_user_asm(x, ptr, retval, "l.lwz"); break; \
193193
case 8: __get_user_asm2(x, ptr, retval); break; \
194-
default: (x) = __get_user_bad(); \
194+
default: (x) = (__typeof__(*(ptr)))__get_user_bad(); \
195195
} \
196196
} while (0)
197197

198198
#define __get_user_asm(x, addr, err, op) \
199+
{ \
200+
unsigned long __gu_tmp; \
199201
__asm__ __volatile__( \
200202
"1: "op" %1,0(%2)\n" \
201203
"2:\n" \
@@ -209,10 +211,14 @@ do { \
209211
" .align 2\n" \
210212
" .long 1b,3b\n" \
211213
".previous" \
212-
: "=r"(err), "=r"(x) \
213-
: "r"(addr), "i"(-EFAULT), "0"(err))
214+
: "=r"(err), "=r"(__gu_tmp) \
215+
: "r"(addr), "i"(-EFAULT), "0"(err)); \
216+
(x) = (__typeof__(*(addr)))__gu_tmp; \
217+
}
214218

215219
#define __get_user_asm2(x, addr, err) \
220+
{ \
221+
unsigned long long __gu_tmp; \
216222
__asm__ __volatile__( \
217223
"1: l.lwz %1,0(%2)\n" \
218224
"2: l.lwz %H1,4(%2)\n" \
@@ -229,8 +235,11 @@ do { \
229235
" .long 1b,4b\n" \
230236
" .long 2b,4b\n" \
231237
".previous" \
232-
: "=r"(err), "=&r"(x) \
233-
: "r"(addr), "i"(-EFAULT), "0"(err))
238+
: "=r"(err), "=&r"(__gu_tmp) \
239+
: "r"(addr), "i"(-EFAULT), "0"(err)); \
240+
(x) = (__typeof__(*(addr)))( \
241+
(__typeof__((x)-(x)))__gu_tmp); \
242+
}
234243

235244
/* more complex routines */
236245

arch/openrisc/kernel/setup.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,16 @@ static void __init setup_memory(void)
8080
*/
8181
memblock_reserve(__pa(_stext), _end - _stext);
8282

83+
#ifdef CONFIG_BLK_DEV_INITRD
84+
/* Then reserve the initrd, if any */
85+
if (initrd_start && (initrd_end > initrd_start)) {
86+
unsigned long aligned_start = ALIGN_DOWN(initrd_start, PAGE_SIZE);
87+
unsigned long aligned_end = ALIGN(initrd_end, PAGE_SIZE);
88+
89+
memblock_reserve(__pa(aligned_start), aligned_end - aligned_start);
90+
}
91+
#endif /* CONFIG_BLK_DEV_INITRD */
92+
8393
early_init_fdt_reserve_self();
8494
early_init_fdt_scan_reserved_mem();
8595

arch/openrisc/mm/cache.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
#include <asm/cacheflush.h>
1717
#include <asm/tlbflush.h>
1818

19-
static void cache_loop(struct page *page, const unsigned int reg)
19+
static __always_inline void cache_loop(struct page *page, const unsigned int reg)
2020
{
2121
unsigned long paddr = page_to_pfn(page) << PAGE_SHIFT;
2222
unsigned long line = paddr & ~(L1_CACHE_BYTES - 1);

0 commit comments

Comments
 (0)