Merge branch 'for-linus' of git://www.jni.nu/cris
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 23 Jun 2009 17:47:01 +0000 (10:47 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 23 Jun 2009 17:47:01 +0000 (10:47 -0700)
* 'for-linus' of git://www.jni.nu/cris:
  CRISv10: remove redundant tests on unsigned
  CRISv32: irq.c - Move end brace outside #endif
  CRISv32: Fix potential null reference in cryptocop driver.
  CRISv32: Add arch optimized strcmp.
  CRIS: assignment/is equal confusion

arch/cris/arch-v10/kernel/dma.c
arch/cris/arch-v32/drivers/cryptocop.c
arch/cris/arch-v32/kernel/irq.c
arch/cris/arch-v32/lib/Makefile
arch/cris/arch-v32/lib/strcmp.S [new file with mode: 0644]
arch/cris/include/arch-v32/arch/spinlock.h
arch/cris/include/asm/string.h

index 929e686..d31504b 100644 (file)
@@ -24,7 +24,7 @@ int cris_request_dma(unsigned int dmanr, const char * device_id,
        unsigned long int gens;
        int fail = -EINVAL;
 
-       if ((dmanr < 0) || (dmanr >= MAX_DMA_CHANNELS)) {
+       if (dmanr >= MAX_DMA_CHANNELS) {
                printk(KERN_CRIT "cris_request_dma: invalid DMA channel %u\n", dmanr);
                return -EINVAL;
        }
@@ -213,7 +213,7 @@ int cris_request_dma(unsigned int dmanr, const char * device_id,
 void cris_free_dma(unsigned int dmanr, const char * device_id)
 {
        unsigned long flags;
-       if ((dmanr < 0) || (dmanr >= MAX_DMA_CHANNELS)) {
+       if (dmanr >= MAX_DMA_CHANNELS) {
                printk(KERN_CRIT "cris_free_dma: invalid DMA channel %u\n", dmanr);
                return;
        }
index 67c61ea..fd529a0 100644 (file)
@@ -1395,7 +1395,7 @@ static int create_md5_pad(int alloc_flag, unsigned long long hashed_length, char
        if (padlen < MD5_MIN_PAD_LENGTH) padlen += MD5_BLOCK_LENGTH;
 
        p = kmalloc(padlen, alloc_flag);
-       if (!pad) return -ENOMEM;
+       if (!p) return -ENOMEM;
 
        *p = 0x80;
        memset(p+1, 0, padlen - 1);
@@ -1427,7 +1427,7 @@ static int create_sha1_pad(int alloc_flag, unsigned long long hashed_length, cha
        if (padlen < SHA1_MIN_PAD_LENGTH) padlen += SHA1_BLOCK_LENGTH;
 
        p = kmalloc(padlen, alloc_flag);
-       if (!pad) return -ENOMEM;
+       if (!p) return -ENOMEM;
 
        *p = 0x80;
        memset(p+1, 0, padlen - 1);
index d70b445..57668db 100644 (file)
@@ -430,8 +430,8 @@ crisv32_do_multiple(struct pt_regs* regs)
                         masked[i] &= ~TIMER_MASK;
                         do_IRQ(TIMER0_INTR_VECT, regs);
                }
-       }
 #endif
+       }
 
 #ifdef IGNORE_MASK
        /* Remove IRQs that can't be handled as multiple. */
index eb4aad1..dd296b9 100644 (file)
@@ -3,5 +3,5 @@
 #
 
 lib-y  = checksum.o checksumcopy.o string.o usercopy.o memset.o \
-       csumcpfruser.o spinlock.o delay.o
+       csumcpfruser.o spinlock.o delay.o strcmp.o
 
diff --git a/arch/cris/arch-v32/lib/strcmp.S b/arch/cris/arch-v32/lib/strcmp.S
new file mode 100644 (file)
index 0000000..8f7a1ee
--- /dev/null
@@ -0,0 +1,21 @@
+; strcmp.S -- CRISv32 version.
+; Copyright (C) 2008 AXIS Communications AB
+; Written by Edgar E. Iglesias
+;
+; This source code is licensed under the GNU General Public License,
+; Version 2.  See the file COPYING for more details.
+
+       .global strcmp
+       .type   strcmp,@function
+strcmp:
+1:
+       move.b  [$r10+], $r12
+       seq     $r13
+       sub.b   [$r11+], $r12
+       or.b    $r12, $r13
+       beq     1b
+       nop
+
+       ret
+       movs.b  $r12, $r10
+       .size   strcmp, . - strcmp
index 129756b..367a53e 100644 (file)
@@ -78,7 +78,7 @@ static  inline void __raw_write_lock(raw_rwlock_t *rw)
 {
        __raw_spin_lock(&rw->slock);
        while (rw->lock != RW_LOCK_BIAS);
-       rw->lock == 0;
+       rw->lock = 0;
        __raw_spin_unlock(&rw->slock);
 }
 
@@ -93,7 +93,7 @@ static  inline void __raw_write_unlock(raw_rwlock_t *rw)
 {
        __raw_spin_lock(&rw->slock);
        while (rw->lock != RW_LOCK_BIAS);
-       rw->lock == RW_LOCK_BIAS;
+       rw->lock = RW_LOCK_BIAS;
        __raw_spin_unlock(&rw->slock);
 }
 
@@ -114,7 +114,7 @@ static  inline int __raw_write_trylock(raw_rwlock_t *rw)
        int ret = 0;
        __raw_spin_lock(&rw->slock);
        if (rw->lock == RW_LOCK_BIAS) {
-               rw->lock == 0;
+               rw->lock = 0;
                ret = 1;
        }
        __raw_spin_unlock(&rw->slock);
index 691190e..d5db39f 100644 (file)
@@ -11,4 +11,10 @@ extern void *memcpy(void *, const void *, size_t);
 #define __HAVE_ARCH_MEMSET
 extern void *memset(void *, int, size_t);
 
+#ifdef CONFIG_ETRAX_ARCH_V32
+/* For v32 we provide strcmp.  */
+#define __HAVE_ARCH_STRCMP
+extern int strcmp(const char *s1, const char *s2);
+#endif
+
 #endif