From: Martin Schwidefsky <schwidefsky@de.ibm.com>

s390 core changes:
 - Make use of the ipte instruction for ptep_set_access_flags
 - Fix atomic64_inc_and_test primitive as well.
 - Fix return type handler for __copy_in_user.
 - New default configuration.

Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/arch/s390/defconfig        |    9 +++------
 25-akpm/include/asm-s390/atomic.h  |    2 +-
 25-akpm/include/asm-s390/pgtable.h |    4 ++++
 25-akpm/include/asm-s390/uaccess.h |    4 ++--
 4 files changed, 10 insertions(+), 9 deletions(-)

diff -puN arch/s390/defconfig~s390-1-4-core-s390 arch/s390/defconfig
--- 25/arch/s390/defconfig~s390-1-4-core-s390	Wed Jun  2 14:34:28 2004
+++ 25-akpm/arch/s390/defconfig	Wed Jun  2 14:34:28 2004
@@ -28,6 +28,7 @@ CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 CONFIG_IOSCHED_NOOP=y
@@ -112,7 +113,6 @@ CONFIG_CHR_DEV_SG=y
 # Some SCSI devices (e.g. CD jukebox) support multiple LUNs
 #
 CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_REPORT_LUNS is not set
 CONFIG_SCSI_CONSTANTS=y
 CONFIG_SCSI_LOGGING=y
 
@@ -126,6 +126,7 @@ CONFIG_SCSI_LOGGING=y
 # SCSI low-level drivers
 #
 # CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_DPT_I2O is not set
 # CONFIG_SCSI_SATA is not set
 # CONFIG_SCSI_EATA_PIO is not set
 # CONFIG_SCSI_DEBUG is not set
@@ -310,11 +311,7 @@ CONFIG_NET_ETHERNET=y
 # CONFIG_MII is not set
 
 #
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
+# Gigabit Ethernet (1000/10000 Mbit)
 #
 
 #
diff -puN include/asm-s390/atomic.h~s390-1-4-core-s390 include/asm-s390/atomic.h
--- 25/include/asm-s390/atomic.h~s390-1-4-core-s390	Wed Jun  2 14:34:28 2004
+++ 25-akpm/include/asm-s390/atomic.h	Wed Jun  2 14:34:28 2004
@@ -145,7 +145,7 @@ static __inline__ long long atomic64_inc
 }
 static __inline__ long long atomic64_inc_and_test(volatile atomic64_t * v)
 {
-	return __CSG_LOOP(v, 1, "agr") != 0;
+	return __CSG_LOOP(v, 1, "agr") == 0;
 }
 static __inline__ void atomic64_dec(volatile atomic64_t * v)
 {
diff -puN include/asm-s390/pgtable.h~s390-1-4-core-s390 include/asm-s390/pgtable.h
--- 25/include/asm-s390/pgtable.h~s390-1-4-core-s390	Wed Jun  2 14:34:28 2004
+++ 25-akpm/include/asm-s390/pgtable.h	Wed Jun  2 14:34:28 2004
@@ -587,6 +587,9 @@ ptep_establish(struct vm_area_struct *vm
 	set_pte(ptep, entry);
 }
 
+#define ptep_set_access_flags(__vma, __address, __ptep, __entry, __dirty) \
+	ptep_establish(__vma, __address, __ptep, __entry)
+
 /*
  * Test and clear dirty bit in storage key.
  * We can't clear the changed bit atomically. This is a potential
@@ -784,6 +787,7 @@ extern inline pte_t mk_swap_pte(unsigned
 #define pgtable_cache_init()	do { } while (0)
 
 #define __HAVE_ARCH_PTEP_ESTABLISH
+#define __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS
 #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
 #define __HAVE_ARCH_PTEP_CLEAR_YOUNG_FLUSH
 #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTY
diff -puN include/asm-s390/uaccess.h~s390-1-4-core-s390 include/asm-s390/uaccess.h
--- 25/include/asm-s390/uaccess.h~s390-1-4-core-s390	Wed Jun  2 14:34:28 2004
+++ 25-akpm/include/asm-s390/uaccess.h	Wed Jun  2 14:34:28 2004
@@ -326,12 +326,12 @@ copy_from_user(void *to, const void __us
 	return n;
 }
 
-extern long __copy_in_user_asm(const void *from, long n, void *to);
+extern unsigned long __copy_in_user_asm(const void *from, long n, void *to);
 
 static inline unsigned long
 __copy_in_user(void __user *to, const void __user *from, unsigned long n)
 {
-	__copy_in_user_asm(from, n, to);
+	return __copy_in_user_asm(from, n, to);
 }
 
 static inline unsigned long
_