From: Andy P. <at...@us...> - 2002-04-10 18:37:27
|
Update of /cvsroot/linux-vax/kernel-2.4/arch/alpha/lib In directory usw-pr-cvs1:/tmp/cvs-serv19209/alpha/lib Modified Files: Makefile io.c Added Files: dec_and_lock.c udelay.c Log Message: synch 2.4.15 commit 31 --- NEW FILE --- /* * arch/alpha/lib/dec_and_lock.c * * ll/sc version of atomic_dec_and_lock() * */ #include <linux/spinlock.h> #include <asm/atomic.h> asm (".text \n\ .global atomic_dec_and_lock \n\ .ent atomic_dec_and_lock \n\ .align 4 \n\ atomic_dec_and_lock: \n\ .prologue 0 \n\ 1: ldl_l $1, 0($16) \n\ subl $1, 1, $1 \n\ beq $1, 2f \n\ stl_c $1, 0($16) \n\ beq $1, 4f \n\ mb \n\ clr $0 \n\ ret \n\ 2: br $29, 3f \n\ 3: ldgp $29, 0($29) \n\ br $atomic_dec_and_lock_1..ng \n\ .subsection 2 \n\ 4: br 1b \n\ .end atomic_dec_and_lock"); static int __attribute__((unused)) atomic_dec_and_lock_1(atomic_t *atomic, spinlock_t *lock) { /* Slow path */ spin_lock(lock); if (atomic_dec_and_test(atomic)) return 1; spin_unlock(lock); return 0; } --- NEW FILE --- #include <linux/config.h> #include <linux/sched.h> /* for udelay's use of smp_processor_id */ #include <asm/param.h> #include <asm/smp.h> #include <linux/delay.h> /* * Copyright (C) 1993, 2000 Linus Torvalds * * Delay routines, using a pre-computed "loops_per_jiffy" value. */ /* * Use only for very small delays (< 1 msec). * * The active part of our cycle counter is only 32-bits wide, and * we're treating the difference between two marks as signed. On * a 1GHz box, that's about 2 seconds. */ void __delay(int loops) { int tmp; __asm__ __volatile__( " rpcc %0\n" " addl %1,%0,%1\n" "1: rpcc %0\n" " subl %1,%0,%0\n" " bgt %0,1b" : "=&r" (tmp), "=r" (loops) : "1"(loops)); } void __udelay(unsigned long usecs, unsigned long lpj) { usecs *= (((unsigned long)HZ << 32) / 1000000) * lpj; __delay((long)usecs >> 32); } void udelay(unsigned long usecs) { #ifdef CONFIG_SMP __udelay(usecs, cpu_data[smp_processor_id()].loops_per_jiffy); #else __udelay(usecs, loops_per_jiffy); #endif } Index: Makefile =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/alpha/lib/Makefile,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 --- Makefile 25 Feb 2001 23:15:16 -0000 1.1.1.2 +++ Makefile 10 Apr 2002 13:07:22 -0000 1.2 @@ -21,6 +21,7 @@ endif OBJS = __divqu.o __remqu.o __divlu.o __remlu.o \ + udelay.o \ $(ev6)memset.o \ $(ev6)memcpy.o \ memmove.o \ @@ -47,6 +48,10 @@ strcasecmp.o \ fpreg.o \ callback_srm.o srm_puts.o srm_printk.o + +ifeq ($(CONFIG_SMP),y) + OBJS += dec_and_lock.o +endif lib.a: $(OBJS) $(AR) rcs lib.a $(OBJS) Index: io.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/alpha/lib/io.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- io.c 14 Jan 2001 19:22:30 -0000 1.1.1.1 +++ io.c 10 Apr 2002 13:07:22 -0000 1.2 @@ -9,124 +9,124 @@ #include <asm/io.h> -unsigned int _inb(unsigned long addr) +u8 _inb(unsigned long addr) { return __inb(addr); } -unsigned int _inw(unsigned long addr) +u16 _inw(unsigned long addr) { return __inw(addr); } -unsigned int _inl(unsigned long addr) +u32 _inl(unsigned long addr) { return __inl(addr); } -void _outb(unsigned char b, unsigned long addr) +void _outb(u8 b, unsigned long addr) { __outb(b, addr); } -void _outw(unsigned short b, unsigned long addr) +void _outw(u16 b, unsigned long addr) { __outw(b, addr); } -void _outl(unsigned int b, unsigned long addr) +void _outl(u32 b, unsigned long addr) { __outl(b, addr); } -unsigned long ___raw_readb(unsigned long addr) +u8 ___raw_readb(unsigned long addr) { return __readb(addr); } -unsigned long ___raw_readw(unsigned long addr) +u16 ___raw_readw(unsigned long addr) { return __readw(addr); } -unsigned long ___raw_readl(unsigned long addr) +u32 ___raw_readl(unsigned long addr) { return __readl(addr); } -unsigned long ___raw_readq(unsigned long addr) +u64 ___raw_readq(unsigned long addr) { return __readq(addr); } -unsigned long _readb(unsigned long addr) +u8 _readb(unsigned long addr) { unsigned long r = __readb(addr); mb(); return r; } -unsigned long _readw(unsigned long addr) +u16 _readw(unsigned long addr) { unsigned long r = __readw(addr); mb(); return r; } -unsigned long _readl(unsigned long addr) +u32 _readl(unsigned long addr) { unsigned long r = __readl(addr); mb(); return r; } -unsigned long _readq(unsigned long addr) +u64 _readq(unsigned long addr) { unsigned long r = __readq(addr); mb(); return r; } -void ___raw_writeb(unsigned char b, unsigned long addr) +void ___raw_writeb(u8 b, unsigned long addr) { __writeb(b, addr); } -void ___raw_writew(unsigned short b, unsigned long addr) +void ___raw_writew(u16 b, unsigned long addr) { __writew(b, addr); } -void ___raw_writel(unsigned int b, unsigned long addr) +void ___raw_writel(u32 b, unsigned long addr) { __writel(b, addr); } -void ___raw_writeq(unsigned long b, unsigned long addr) +void ___raw_writeq(u64 b, unsigned long addr) { __writeq(b, addr); } -void _writeb(unsigned char b, unsigned long addr) +void _writeb(u8 b, unsigned long addr) { __writeb(b, addr); mb(); } -void _writew(unsigned short b, unsigned long addr) +void _writew(u16 b, unsigned long addr) { __writew(b, addr); mb(); } -void _writel(unsigned int b, unsigned long addr) +void _writel(u32 b, unsigned long addr) { __writel(b, addr); mb(); } -void _writeq(unsigned long b, unsigned long addr) +void _writeq(u64 b, unsigned long addr) { __writeq(b, addr); mb(); |