Skip to content

Commit 718056f

Browse files
hcahcaAlexander Gordeev
authored andcommitted
s390/uaccess: Remove __put_user_fn()/__get_user_fn() wrappers
The __put_user_fn() and __get_user_fn() wrappers are leftovers from the time where the kernel was compiled with or without mvcos support plus they were later used to workaround the problems that came with asm register constructs. Both reasons do not exist anymore, therefore remove the wrappers and shorten the code. Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
1 parent 5e680e2 commit 718056f

File tree

1 file changed

+32
-81
lines changed

1 file changed

+32
-81
lines changed

arch/s390/include/asm/uaccess.h

Lines changed: 32 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -128,60 +128,38 @@ DEFINE_PUT_USER(short);
128128
DEFINE_PUT_USER(int);
129129
DEFINE_PUT_USER(long);
130130

131-
static __always_inline int __put_user_fn(void *x, void __user *ptr, unsigned long size)
132-
{
133-
int rc;
134-
135-
switch (size) {
136-
case 1:
137-
rc = __put_user_char((unsigned char __user *)ptr,
138-
(unsigned char *)x,
139-
size);
140-
break;
141-
case 2:
142-
rc = __put_user_short((unsigned short __user *)ptr,
143-
(unsigned short *)x,
144-
size);
145-
break;
146-
case 4:
147-
rc = __put_user_int((unsigned int __user *)ptr,
148-
(unsigned int *)x,
149-
size);
150-
break;
151-
case 8:
152-
rc = __put_user_long((unsigned long __user *)ptr,
153-
(unsigned long *)x,
154-
size);
155-
break;
156-
default:
157-
__put_user_bad();
158-
break;
159-
}
160-
return rc;
161-
}
162-
163-
/*
164-
* These are the main single-value transfer routines. They automatically
165-
* use the right size if we just have the right pointer type.
166-
*/
167131
#define __put_user(x, ptr) \
168132
({ \
169133
__typeof__(*(ptr)) __x = (x); \
170-
int __pu_err = -EFAULT; \
134+
int __prc; \
171135
\
172136
__chk_user_ptr(ptr); \
173137
switch (sizeof(*(ptr))) { \
174138
case 1: \
139+
__prc = __put_user_char((unsigned char __user *)(ptr), \
140+
(unsigned char *)&__x, \
141+
sizeof(*(ptr))); \
142+
break; \
175143
case 2: \
144+
__prc = __put_user_short((unsigned short __user *)(ptr),\
145+
(unsigned short *)&__x, \
146+
sizeof(*(ptr))); \
147+
break; \
176148
case 4: \
149+
__prc = __put_user_int((unsigned int __user *)(ptr), \
150+
(unsigned int *)&__x, \
151+
sizeof(*(ptr))); \
152+
break; \
177153
case 8: \
178-
__pu_err = __put_user_fn(&__x, ptr, sizeof(*(ptr))); \
154+
__prc = __put_user_long((unsigned long __user *)(ptr), \
155+
(unsigned long *)&__x, \
156+
sizeof(*(ptr))); \
179157
break; \
180158
default: \
181-
__put_user_bad(); \
159+
__prc = __put_user_bad(); \
182160
break; \
183161
} \
184-
__builtin_expect(__pu_err, 0); \
162+
__builtin_expect(__prc, 0); \
185163
})
186164

187165
#define put_user(x, ptr) \
@@ -195,7 +173,7 @@ int __noreturn __get_user_bad(void);
195173
#define DEFINE_GET_USER(type) \
196174
static get_put_user_noinstr_attributes int \
197175
__get_user_##type##_noinstr(unsigned type *to, \
198-
unsigned type __user *from, \
176+
const unsigned type __user *from, \
199177
unsigned long size) \
200178
{ \
201179
union oac __oac_spec = { \
@@ -220,7 +198,7 @@ __get_user_##type##_noinstr(unsigned type *to, \
220198
} \
221199
\
222200
static __always_inline int \
223-
__get_user_##type(unsigned type *to, unsigned type __user *from, \
201+
__get_user_##type(unsigned type *to, const unsigned type __user *from, \
224202
unsigned long size) \
225203
{ \
226204
int rc; \
@@ -235,77 +213,50 @@ DEFINE_GET_USER(short);
235213
DEFINE_GET_USER(int);
236214
DEFINE_GET_USER(long);
237215

238-
static __always_inline int __get_user_fn(void *x, const void __user *ptr, unsigned long size)
239-
{
240-
int rc;
241-
242-
switch (size) {
243-
case 1:
244-
rc = __get_user_char((unsigned char *)x,
245-
(unsigned char __user *)ptr,
246-
size);
247-
break;
248-
case 2:
249-
rc = __get_user_short((unsigned short *)x,
250-
(unsigned short __user *)ptr,
251-
size);
252-
break;
253-
case 4:
254-
rc = __get_user_int((unsigned int *)x,
255-
(unsigned int __user *)ptr,
256-
size);
257-
break;
258-
case 8:
259-
rc = __get_user_long((unsigned long *)x,
260-
(unsigned long __user *)ptr,
261-
size);
262-
break;
263-
default:
264-
__get_user_bad();
265-
break;
266-
}
267-
return rc;
268-
}
269-
270216
#define __get_user(x, ptr) \
271217
({ \
272-
int __gu_err = -EFAULT; \
218+
const __user void *____guptr = (ptr); \
219+
int __grc; \
273220
\
274221
__chk_user_ptr(ptr); \
275222
switch (sizeof(*(ptr))) { \
276223
case 1: { \
224+
const unsigned char __user *__guptr = ____guptr; \
277225
unsigned char __x; \
278226
\
279-
__gu_err = __get_user_fn(&__x, ptr, sizeof(*(ptr))); \
227+
__grc = __get_user_char(&__x, __guptr, sizeof(*(ptr))); \
280228
(x) = *(__force __typeof__(*(ptr)) *)&__x; \
281229
break; \
282230
}; \
283231
case 2: { \
232+
const unsigned short __user *__guptr = ____guptr; \
284233
unsigned short __x; \
285234
\
286-
__gu_err = __get_user_fn(&__x, ptr, sizeof(*(ptr))); \
235+
__grc = __get_user_short(&__x, __guptr, sizeof(*(ptr)));\
287236
(x) = *(__force __typeof__(*(ptr)) *)&__x; \
288237
break; \
289238
}; \
290239
case 4: { \
240+
const unsigned int __user *__guptr = ____guptr; \
291241
unsigned int __x; \
292242
\
293-
__gu_err = __get_user_fn(&__x, ptr, sizeof(*(ptr))); \
243+
__grc = __get_user_int(&__x, __guptr, sizeof(*(ptr))); \
294244
(x) = *(__force __typeof__(*(ptr)) *)&__x; \
295245
break; \
296246
}; \
297247
case 8: { \
248+
const unsigned long __user *__guptr = ____guptr; \
298249
unsigned long __x; \
299250
\
300-
__gu_err = __get_user_fn(&__x, ptr, sizeof(*(ptr))); \
251+
__grc = __get_user_long(&__x, __guptr, sizeof(*(ptr))); \
301252
(x) = *(__force __typeof__(*(ptr)) *)&__x; \
302253
break; \
303254
}; \
304255
default: \
305-
__get_user_bad(); \
256+
__grc = __get_user_bad(); \
306257
break; \
307258
} \
308-
__builtin_expect(__gu_err, 0); \
259+
__builtin_expect(__grc, 0); \
309260
})
310261

311262
#define get_user(x, ptr) \

0 commit comments

Comments
 (0)