s390: remove 31 bit support
Remove the 31 bit support in order to reduce maintenance cost and
effectively remove dead code. Since a couple of years there is no
distribution left that comes with a 31 bit kernel.
The 31 bit kernel also has been broken since more than a year before
anybody noticed. In addition I added a removal warning to the kernel
shown at ipl for 5 minutes: a960062e58 ("s390: add 31 bit warning
message") which let everybody know about the plan to remove 31 bit
code. We didn't get any response.
Given that the last 31 bit only machine was introduced in 1999 let's
remove the code.
Anybody with 31 bit user space code can still use the compat mode.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
	
	
This commit is contained in:
		
					parent
					
						
							
								1833c9f647
							
						
					
				
			
			
				commit
				
					
						5a79859ae0
					
				
			
		
					 97 changed files with 170 additions and 6016 deletions
				
			
		| 
						 | 
				
			
			@ -15,20 +15,6 @@
 | 
			
		|||
#include <asm/mmu_context.h>
 | 
			
		||||
#include <asm/facility.h>
 | 
			
		||||
 | 
			
		||||
#ifndef CONFIG_64BIT
 | 
			
		||||
#define AHI	"ahi"
 | 
			
		||||
#define ALR	"alr"
 | 
			
		||||
#define CLR	"clr"
 | 
			
		||||
#define LHI	"lhi"
 | 
			
		||||
#define SLR	"slr"
 | 
			
		||||
#else
 | 
			
		||||
#define AHI	"aghi"
 | 
			
		||||
#define ALR	"algr"
 | 
			
		||||
#define CLR	"clgr"
 | 
			
		||||
#define LHI	"lghi"
 | 
			
		||||
#define SLR	"slgr"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static struct static_key have_mvcos = STATIC_KEY_INIT_FALSE;
 | 
			
		||||
 | 
			
		||||
static inline unsigned long copy_from_user_mvcos(void *x, const void __user *ptr,
 | 
			
		||||
| 
						 | 
				
			
			@ -41,29 +27,29 @@ static inline unsigned long copy_from_user_mvcos(void *x, const void __user *ptr
 | 
			
		|||
	asm volatile(
 | 
			
		||||
		"0: .insn ss,0xc80000000000,0(%0,%2),0(%1),0\n"
 | 
			
		||||
		"9: jz    7f\n"
 | 
			
		||||
		"1:"ALR"  %0,%3\n"
 | 
			
		||||
		"  "SLR"  %1,%3\n"
 | 
			
		||||
		"  "SLR"  %2,%3\n"
 | 
			
		||||
		"1: algr  %0,%3\n"
 | 
			
		||||
		"   slgr  %1,%3\n"
 | 
			
		||||
		"   slgr  %2,%3\n"
 | 
			
		||||
		"   j     0b\n"
 | 
			
		||||
		"2: la    %4,4095(%1)\n"/* %4 = ptr + 4095 */
 | 
			
		||||
		"   nr    %4,%3\n"	/* %4 = (ptr + 4095) & -4096 */
 | 
			
		||||
		"  "SLR"  %4,%1\n"
 | 
			
		||||
		"  "CLR"  %0,%4\n"	/* copy crosses next page boundary? */
 | 
			
		||||
		"   slgr  %4,%1\n"
 | 
			
		||||
		"   clgr  %0,%4\n"	/* copy crosses next page boundary? */
 | 
			
		||||
		"   jnh   4f\n"
 | 
			
		||||
		"3: .insn ss,0xc80000000000,0(%4,%2),0(%1),0\n"
 | 
			
		||||
		"10:"SLR"  %0,%4\n"
 | 
			
		||||
		"  "ALR"  %2,%4\n"
 | 
			
		||||
		"4:"LHI"  %4,-1\n"
 | 
			
		||||
		"  "ALR"  %4,%0\n"	/* copy remaining size, subtract 1 */
 | 
			
		||||
		"10:slgr  %0,%4\n"
 | 
			
		||||
		"   algr  %2,%4\n"
 | 
			
		||||
		"4: lghi  %4,-1\n"
 | 
			
		||||
		"   algr  %4,%0\n"	/* copy remaining size, subtract 1 */
 | 
			
		||||
		"   bras  %3,6f\n"	/* memset loop */
 | 
			
		||||
		"   xc    0(1,%2),0(%2)\n"
 | 
			
		||||
		"5: xc    0(256,%2),0(%2)\n"
 | 
			
		||||
		"   la    %2,256(%2)\n"
 | 
			
		||||
		"6:"AHI"  %4,-256\n"
 | 
			
		||||
		"6: aghi  %4,-256\n"
 | 
			
		||||
		"   jnm   5b\n"
 | 
			
		||||
		"   ex    %4,0(%3)\n"
 | 
			
		||||
		"   j     8f\n"
 | 
			
		||||
		"7:"SLR"  %0,%0\n"
 | 
			
		||||
		"7:slgr  %0,%0\n"
 | 
			
		||||
		"8:\n"
 | 
			
		||||
		EX_TABLE(0b,2b) EX_TABLE(3b,4b) EX_TABLE(9b,2b) EX_TABLE(10b,4b)
 | 
			
		||||
		: "+a" (size), "+a" (ptr), "+a" (x), "+a" (tmp1), "=a" (tmp2)
 | 
			
		||||
| 
						 | 
				
			
			@ -82,32 +68,32 @@ static inline unsigned long copy_from_user_mvcp(void *x, const void __user *ptr,
 | 
			
		|||
		"   sacf  0\n"
 | 
			
		||||
		"0: mvcp  0(%0,%2),0(%1),%3\n"
 | 
			
		||||
		"10:jz    8f\n"
 | 
			
		||||
		"1:"ALR"  %0,%3\n"
 | 
			
		||||
		"1: algr  %0,%3\n"
 | 
			
		||||
		"   la    %1,256(%1)\n"
 | 
			
		||||
		"   la    %2,256(%2)\n"
 | 
			
		||||
		"2: mvcp  0(%0,%2),0(%1),%3\n"
 | 
			
		||||
		"11:jnz   1b\n"
 | 
			
		||||
		"   j     8f\n"
 | 
			
		||||
		"3: la    %4,255(%1)\n"	/* %4 = ptr + 255 */
 | 
			
		||||
		"  "LHI"  %3,-4096\n"
 | 
			
		||||
		"   lghi  %3,-4096\n"
 | 
			
		||||
		"   nr    %4,%3\n"	/* %4 = (ptr + 255) & -4096 */
 | 
			
		||||
		"  "SLR"  %4,%1\n"
 | 
			
		||||
		"  "CLR"  %0,%4\n"	/* copy crosses next page boundary? */
 | 
			
		||||
		"   slgr  %4,%1\n"
 | 
			
		||||
		"   clgr  %0,%4\n"	/* copy crosses next page boundary? */
 | 
			
		||||
		"   jnh   5f\n"
 | 
			
		||||
		"4: mvcp  0(%4,%2),0(%1),%3\n"
 | 
			
		||||
		"12:"SLR"  %0,%4\n"
 | 
			
		||||
		"  "ALR"  %2,%4\n"
 | 
			
		||||
		"5:"LHI"  %4,-1\n"
 | 
			
		||||
		"  "ALR"  %4,%0\n"	/* copy remaining size, subtract 1 */
 | 
			
		||||
		"12:slgr  %0,%4\n"
 | 
			
		||||
		"   algr  %2,%4\n"
 | 
			
		||||
		"5: lghi  %4,-1\n"
 | 
			
		||||
		"   algr  %4,%0\n"	/* copy remaining size, subtract 1 */
 | 
			
		||||
		"   bras  %3,7f\n"	/* memset loop */
 | 
			
		||||
		"   xc    0(1,%2),0(%2)\n"
 | 
			
		||||
		"6: xc    0(256,%2),0(%2)\n"
 | 
			
		||||
		"   la    %2,256(%2)\n"
 | 
			
		||||
		"7:"AHI"  %4,-256\n"
 | 
			
		||||
		"7: aghi  %4,-256\n"
 | 
			
		||||
		"   jnm   6b\n"
 | 
			
		||||
		"   ex    %4,0(%3)\n"
 | 
			
		||||
		"   j     9f\n"
 | 
			
		||||
		"8:"SLR"  %0,%0\n"
 | 
			
		||||
		"8:slgr  %0,%0\n"
 | 
			
		||||
		"9: sacf  768\n"
 | 
			
		||||
		EX_TABLE(0b,3b) EX_TABLE(2b,3b) EX_TABLE(4b,5b)
 | 
			
		||||
		EX_TABLE(10b,3b) EX_TABLE(11b,3b) EX_TABLE(12b,5b)
 | 
			
		||||
| 
						 | 
				
			
			@ -134,19 +120,19 @@ static inline unsigned long copy_to_user_mvcos(void __user *ptr, const void *x,
 | 
			
		|||
	asm volatile(
 | 
			
		||||
		"0: .insn ss,0xc80000000000,0(%0,%1),0(%2),0\n"
 | 
			
		||||
		"6: jz    4f\n"
 | 
			
		||||
		"1:"ALR"  %0,%3\n"
 | 
			
		||||
		"  "SLR"  %1,%3\n"
 | 
			
		||||
		"  "SLR"  %2,%3\n"
 | 
			
		||||
		"1: algr  %0,%3\n"
 | 
			
		||||
		"   slgr  %1,%3\n"
 | 
			
		||||
		"   slgr  %2,%3\n"
 | 
			
		||||
		"   j     0b\n"
 | 
			
		||||
		"2: la    %4,4095(%1)\n"/* %4 = ptr + 4095 */
 | 
			
		||||
		"   nr    %4,%3\n"	/* %4 = (ptr + 4095) & -4096 */
 | 
			
		||||
		"  "SLR"  %4,%1\n"
 | 
			
		||||
		"  "CLR"  %0,%4\n"	/* copy crosses next page boundary? */
 | 
			
		||||
		"   slgr  %4,%1\n"
 | 
			
		||||
		"   clgr  %0,%4\n"	/* copy crosses next page boundary? */
 | 
			
		||||
		"   jnh   5f\n"
 | 
			
		||||
		"3: .insn ss,0xc80000000000,0(%4,%1),0(%2),0\n"
 | 
			
		||||
		"7:"SLR"  %0,%4\n"
 | 
			
		||||
		"7: slgr  %0,%4\n"
 | 
			
		||||
		"   j     5f\n"
 | 
			
		||||
		"4:"SLR"  %0,%0\n"
 | 
			
		||||
		"4: slgr  %0,%0\n"
 | 
			
		||||
		"5:\n"
 | 
			
		||||
		EX_TABLE(0b,2b) EX_TABLE(3b,5b) EX_TABLE(6b,2b) EX_TABLE(7b,5b)
 | 
			
		||||
		: "+a" (size), "+a" (ptr), "+a" (x), "+a" (tmp1), "=a" (tmp2)
 | 
			
		||||
| 
						 | 
				
			
			@ -165,22 +151,22 @@ static inline unsigned long copy_to_user_mvcs(void __user *ptr, const void *x,
 | 
			
		|||
		"   sacf  0\n"
 | 
			
		||||
		"0: mvcs  0(%0,%1),0(%2),%3\n"
 | 
			
		||||
		"7: jz    5f\n"
 | 
			
		||||
		"1:"ALR"  %0,%3\n"
 | 
			
		||||
		"1: algr  %0,%3\n"
 | 
			
		||||
		"   la    %1,256(%1)\n"
 | 
			
		||||
		"   la    %2,256(%2)\n"
 | 
			
		||||
		"2: mvcs  0(%0,%1),0(%2),%3\n"
 | 
			
		||||
		"8: jnz   1b\n"
 | 
			
		||||
		"   j     5f\n"
 | 
			
		||||
		"3: la    %4,255(%1)\n" /* %4 = ptr + 255 */
 | 
			
		||||
		"  "LHI"  %3,-4096\n"
 | 
			
		||||
		"   lghi  %3,-4096\n"
 | 
			
		||||
		"   nr    %4,%3\n"	/* %4 = (ptr + 255) & -4096 */
 | 
			
		||||
		"  "SLR"  %4,%1\n"
 | 
			
		||||
		"  "CLR"  %0,%4\n"	/* copy crosses next page boundary? */
 | 
			
		||||
		"   slgr  %4,%1\n"
 | 
			
		||||
		"   clgr  %0,%4\n"	/* copy crosses next page boundary? */
 | 
			
		||||
		"   jnh   6f\n"
 | 
			
		||||
		"4: mvcs  0(%4,%1),0(%2),%3\n"
 | 
			
		||||
		"9:"SLR"  %0,%4\n"
 | 
			
		||||
		"9: slgr  %0,%4\n"
 | 
			
		||||
		"   j     6f\n"
 | 
			
		||||
		"5:"SLR"  %0,%0\n"
 | 
			
		||||
		"5: slgr  %0,%0\n"
 | 
			
		||||
		"6: sacf  768\n"
 | 
			
		||||
		EX_TABLE(0b,3b) EX_TABLE(2b,3b) EX_TABLE(4b,6b)
 | 
			
		||||
		EX_TABLE(7b,3b) EX_TABLE(8b,3b) EX_TABLE(9b,6b)
 | 
			
		||||
| 
						 | 
				
			
			@ -208,11 +194,11 @@ static inline unsigned long copy_in_user_mvcos(void __user *to, const void __use
 | 
			
		|||
	asm volatile(
 | 
			
		||||
		"0: .insn ss,0xc80000000000,0(%0,%1),0(%2),0\n"
 | 
			
		||||
		"   jz	  2f\n"
 | 
			
		||||
		"1:"ALR"  %0,%3\n"
 | 
			
		||||
		"  "SLR"  %1,%3\n"
 | 
			
		||||
		"  "SLR"  %2,%3\n"
 | 
			
		||||
		"1: algr  %0,%3\n"
 | 
			
		||||
		"   slgr  %1,%3\n"
 | 
			
		||||
		"   slgr  %2,%3\n"
 | 
			
		||||
		"   j	  0b\n"
 | 
			
		||||
		"2:"SLR"  %0,%0\n"
 | 
			
		||||
		"2:slgr  %0,%0\n"
 | 
			
		||||
		"3: \n"
 | 
			
		||||
		EX_TABLE(0b,3b)
 | 
			
		||||
		: "+a" (size), "+a" (to), "+a" (from), "+a" (tmp1), "=a" (tmp2)
 | 
			
		||||
| 
						 | 
				
			
			@ -228,23 +214,23 @@ static inline unsigned long copy_in_user_mvc(void __user *to, const void __user
 | 
			
		|||
	load_kernel_asce();
 | 
			
		||||
	asm volatile(
 | 
			
		||||
		"   sacf  256\n"
 | 
			
		||||
		"  "AHI"  %0,-1\n"
 | 
			
		||||
		"   aghi  %0,-1\n"
 | 
			
		||||
		"   jo	  5f\n"
 | 
			
		||||
		"   bras  %3,3f\n"
 | 
			
		||||
		"0:"AHI"  %0,257\n"
 | 
			
		||||
		"0: aghi  %0,257\n"
 | 
			
		||||
		"1: mvc	  0(1,%1),0(%2)\n"
 | 
			
		||||
		"   la	  %1,1(%1)\n"
 | 
			
		||||
		"   la	  %2,1(%2)\n"
 | 
			
		||||
		"  "AHI"  %0,-1\n"
 | 
			
		||||
		"   aghi  %0,-1\n"
 | 
			
		||||
		"   jnz	  1b\n"
 | 
			
		||||
		"   j	  5f\n"
 | 
			
		||||
		"2: mvc	  0(256,%1),0(%2)\n"
 | 
			
		||||
		"   la	  %1,256(%1)\n"
 | 
			
		||||
		"   la	  %2,256(%2)\n"
 | 
			
		||||
		"3:"AHI"  %0,-256\n"
 | 
			
		||||
		"3: aghi  %0,-256\n"
 | 
			
		||||
		"   jnm	  2b\n"
 | 
			
		||||
		"4: ex	  %0,1b-0b(%3)\n"
 | 
			
		||||
		"5: "SLR"  %0,%0\n"
 | 
			
		||||
		"5: slgr  %0,%0\n"
 | 
			
		||||
		"6: sacf  768\n"
 | 
			
		||||
		EX_TABLE(1b,6b) EX_TABLE(2b,0b) EX_TABLE(4b,0b)
 | 
			
		||||
		: "+a" (size), "+a" (to), "+a" (from), "=a" (tmp1)
 | 
			
		||||
| 
						 | 
				
			
			@ -269,18 +255,18 @@ static inline unsigned long clear_user_mvcos(void __user *to, unsigned long size
 | 
			
		|||
	asm volatile(
 | 
			
		||||
		"0: .insn ss,0xc80000000000,0(%0,%1),0(%4),0\n"
 | 
			
		||||
		"   jz	  4f\n"
 | 
			
		||||
		"1:"ALR"  %0,%2\n"
 | 
			
		||||
		"  "SLR"  %1,%2\n"
 | 
			
		||||
		"1: algr  %0,%2\n"
 | 
			
		||||
		"   slgr  %1,%2\n"
 | 
			
		||||
		"   j	  0b\n"
 | 
			
		||||
		"2: la	  %3,4095(%1)\n"/* %4 = to + 4095 */
 | 
			
		||||
		"   nr	  %3,%2\n"	/* %4 = (to + 4095) & -4096 */
 | 
			
		||||
		"  "SLR"  %3,%1\n"
 | 
			
		||||
		"  "CLR"  %0,%3\n"	/* copy crosses next page boundary? */
 | 
			
		||||
		"   slgr  %3,%1\n"
 | 
			
		||||
		"   clgr  %0,%3\n"	/* copy crosses next page boundary? */
 | 
			
		||||
		"   jnh	  5f\n"
 | 
			
		||||
		"3: .insn ss,0xc80000000000,0(%3,%1),0(%4),0\n"
 | 
			
		||||
		"  "SLR"  %0,%3\n"
 | 
			
		||||
		"   slgr  %0,%3\n"
 | 
			
		||||
		"   j	  5f\n"
 | 
			
		||||
		"4:"SLR"  %0,%0\n"
 | 
			
		||||
		"4:slgr  %0,%0\n"
 | 
			
		||||
		"5:\n"
 | 
			
		||||
		EX_TABLE(0b,2b) EX_TABLE(3b,5b)
 | 
			
		||||
		: "+a" (size), "+a" (to), "+a" (tmp1), "=a" (tmp2)
 | 
			
		||||
| 
						 | 
				
			
			@ -295,28 +281,28 @@ static inline unsigned long clear_user_xc(void __user *to, unsigned long size)
 | 
			
		|||
	load_kernel_asce();
 | 
			
		||||
	asm volatile(
 | 
			
		||||
		"   sacf  256\n"
 | 
			
		||||
		"  "AHI"  %0,-1\n"
 | 
			
		||||
		"   aghi  %0,-1\n"
 | 
			
		||||
		"   jo    5f\n"
 | 
			
		||||
		"   bras  %3,3f\n"
 | 
			
		||||
		"   xc    0(1,%1),0(%1)\n"
 | 
			
		||||
		"0:"AHI"  %0,257\n"
 | 
			
		||||
		"0: aghi  %0,257\n"
 | 
			
		||||
		"   la    %2,255(%1)\n" /* %2 = ptr + 255 */
 | 
			
		||||
		"   srl   %2,12\n"
 | 
			
		||||
		"   sll   %2,12\n"	/* %2 = (ptr + 255) & -4096 */
 | 
			
		||||
		"  "SLR"  %2,%1\n"
 | 
			
		||||
		"  "CLR"  %0,%2\n"	/* clear crosses next page boundary? */
 | 
			
		||||
		"   slgr  %2,%1\n"
 | 
			
		||||
		"   clgr  %0,%2\n"	/* clear crosses next page boundary? */
 | 
			
		||||
		"   jnh   5f\n"
 | 
			
		||||
		"  "AHI"  %2,-1\n"
 | 
			
		||||
		"   aghi  %2,-1\n"
 | 
			
		||||
		"1: ex    %2,0(%3)\n"
 | 
			
		||||
		"  "AHI"  %2,1\n"
 | 
			
		||||
		"  "SLR"  %0,%2\n"
 | 
			
		||||
		"   aghi  %2,1\n"
 | 
			
		||||
		"   slgr  %0,%2\n"
 | 
			
		||||
		"   j     5f\n"
 | 
			
		||||
		"2: xc    0(256,%1),0(%1)\n"
 | 
			
		||||
		"   la    %1,256(%1)\n"
 | 
			
		||||
		"3:"AHI"  %0,-256\n"
 | 
			
		||||
		"3: aghi  %0,-256\n"
 | 
			
		||||
		"   jnm   2b\n"
 | 
			
		||||
		"4: ex    %0,0(%3)\n"
 | 
			
		||||
		"5: "SLR"  %0,%0\n"
 | 
			
		||||
		"5: slgr  %0,%0\n"
 | 
			
		||||
		"6: sacf  768\n"
 | 
			
		||||
		EX_TABLE(1b,6b) EX_TABLE(2b,0b) EX_TABLE(4b,0b)
 | 
			
		||||
		: "+a" (size), "+a" (to), "=a" (tmp1), "=a" (tmp2)
 | 
			
		||||
| 
						 | 
				
			
			@ -341,12 +327,12 @@ static inline unsigned long strnlen_user_srst(const char __user *src,
 | 
			
		|||
	asm volatile(
 | 
			
		||||
		"   la    %2,0(%1)\n"
 | 
			
		||||
		"   la    %3,0(%0,%1)\n"
 | 
			
		||||
		"  "SLR"  %0,%0\n"
 | 
			
		||||
		"   slgr  %0,%0\n"
 | 
			
		||||
		"   sacf  256\n"
 | 
			
		||||
		"0: srst  %3,%2\n"
 | 
			
		||||
		"   jo    0b\n"
 | 
			
		||||
		"   la    %0,1(%3)\n"	/* strnlen_user results includes \0 */
 | 
			
		||||
		"  "SLR"  %0,%1\n"
 | 
			
		||||
		"   slgr  %0,%1\n"
 | 
			
		||||
		"1: sacf  768\n"
 | 
			
		||||
		EX_TABLE(0b,1b)
 | 
			
		||||
		: "+a" (size), "+a" (src), "=a" (tmp1), "=a" (tmp2)
 | 
			
		||||
| 
						 | 
				
			
			@ -399,7 +385,7 @@ early_param("uaccess_primary", parse_uaccess_pt);
 | 
			
		|||
 | 
			
		||||
static int __init uaccess_init(void)
 | 
			
		||||
{
 | 
			
		||||
	if (IS_ENABLED(CONFIG_64BIT) && !uaccess_primary && test_facility(27))
 | 
			
		||||
	if (!uaccess_primary && test_facility(27))
 | 
			
		||||
		static_key_slow_inc(&have_mvcos);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue