bool
        default y
 
-config RWSEM_GENERIC_SPINLOCK
-       bool
-       default y
-
 source "init/Kconfig"
 
 menu "Processor type and features"
 
        s32i    a7, a2, PT_AREG7
 
        movi    a7, 4                   # sizeof(unsigned int)
-       verify_area a3, a7, a0, a2, .Leac
+       access_ok a0, a3, a7, a2, .Leac
 
        _beqi   a6, SYSXTENSA_ATOMIC_SET, .Lset
        _beqi   a6, SYSXTENSA_ATOMIC_EXG_ADD, .Lexg
 
 
        if (act) {
                old_sigset_t mask;
-               if (verify_area(VERIFY_READ, act, sizeof(*act)) ||
+               if (!access_ok(VERIFY_READ, act, sizeof(*act)) ||
                    __get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
                    __get_user(new_ka.sa.sa_restorer, &act->sa_restorer))
                        return -EFAULT;
        ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
 
        if (!ret && oact) {
-               if (verify_area(VERIFY_WRITE, oact, sizeof(*oact)) ||
+               if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) ||
                    __put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
                    __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer))
                        return -EFAULT;
        err |= __copy_from_user (regs->areg, sc->sc_areg, XCHAL_NUM_AREGS*4);
        err |= __get_user(buf, &sc->sc_cpstate);
        if (buf) {
-               if (verify_area(VERIFY_READ, buf, sizeof(*buf)))
+               if (!access_ok(VERIFY_READ, buf, sizeof(*buf)))
                        goto badframe;
                err |= restore_cpextra(buf);
        }
        if (regs->depc > 64)
                panic ("Double exception sys_sigreturn\n");
 
-       if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
                goto badframe;
 
        if (__get_user(set.sig[0], &frame->sc.oldmask)
                return 0;
        }
 
-       if (verify_area(VERIFY_READ, frame, sizeof(*frame)))
+       if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
                goto badframe;
 
        if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
 
  *     Note: when you get a NULL pointer exception here this means someone
  *     passed in an incorrect kernel address to one of these functions.
  *
- *     If you use these functions directly please don't forget the
- *     verify_area().
+ *     If you use these functions directly please don't forget the access_ok().
  */
 static inline
 unsigned int csum_partial_copy_nocheck ( const char *src, char *dst,
 
        return atomic_add_return(delta, (atomic_t *)(&sem->count));
 }
 
-#endif /* _XTENSA_RWSEM_XADD_H */
+static inline int rwsem_is_locked(struct rw_semaphore *sem)
+{
+       return (sem->count != 0);
+}
+
+#endif /* _XTENSA_RWSEM_H */
 
 .Laccess_ok_\@:
        .endm
 
-/*
- * verify_area determines whether a memory access is allowed.  It's
- * mostly an unnecessary wrapper for access_ok, but we provide it as a
- * duplicate of the verify_area() C inline function below.  See the
- * equivalent C version below for clarity.
- *
- * On error, verify_area branches to a label indicated by parameter
- * <error>.  This implies that the macro falls through to the next
- * instruction on success.
- *
- * Note that we assume success is the common case, and we optimize the
- * branch fall-through case on success.
- *
- * On Entry:
- *     <aa>    register containing memory address
- *     <as>    register containing memory size
- *     <at>    temp register
- *     <error> label to branch to on error; implies fall-through
- *             macro on success
- * On Exit:
- *     <aa>    preserved
- *     <as>    preserved
- *     <at>    destroyed
- */
-       .macro  verify_area     aa, as, at, sp, error
-       access_ok  \at, \aa, \as, \sp, \error
-       .endm
-
-
 #else /* __ASSEMBLY__ not defined */
 
 #include <linux/sched.h>
 #define __access_ok(addr,size) (__kernel_ok || __user_ok((addr),(size)))
 #define access_ok(type,addr,size) __access_ok((unsigned long)(addr),(size))
 
-static inline int verify_area(int type, const void * addr, unsigned long size)
-{
-       return access_ok(type,addr,size) ? 0 : -EFAULT;
-}
-
 /*
  * These are the main single-value transfer routines.  They
  * automatically use the right size if we just have the right pointer