!C99Shell v. 1.0 pre-release build #13!

Software: Apache/2.0.54 (Unix) mod_perl/1.99_09 Perl/v5.8.0 mod_ssl/2.0.54 OpenSSL/0.9.7l DAV/2 FrontPage/5.0.2.2635 PHP/4.4.0 mod_gzip/2.0.26.1a 

uname -a: Linux snow.he.net 4.4.276-v2-mono-1 #1 SMP Wed Jul 21 11:21:17 PDT 2021 i686 

uid=99(nobody) gid=98(nobody) groups=98(nobody) 

Safe-mode: OFF (not secure)

/usr/src/linux-2.4.18-xfs-1.1/arch/sparc/lib/   drwxr-xr-x
Free 318.34 GB of 458.09 GB (69.49%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     debuglocks.c (4.36 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* $Id: debuglocks.c,v 1.11 2001/09/20 00:35:31 davem Exp $
 * debuglocks.c: Debugging versions of SMP locking primitives.
 *
 * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
 * Copyright (C) 1998-99 Anton Blanchard (anton@progsoc.uts.edu.au)
 */

#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/threads.h>    /* For NR_CPUS */
#include <linux/spinlock.h>
#include <asm/psr.h>
#include <asm/system.h>

/* To enable this code, just define SPIN_LOCK_DEBUG in asm/spinlock.h */
#ifdef SPIN_LOCK_DEBUG

/* Some notes on how these debugging routines work.  When a lock is acquired
 * an extra debugging member lock->owner_pc is set to the caller of the lock
 * acquisition routine.  Right before releasing a lock, the debugging program
 * counter is cleared to zero.
 *
 * Furthermore, since PC's are 4 byte aligned on Sparc, we stuff the CPU
 * number of the owner in the lowest two bits.
 */

#define STORE_CALLER(A) __asm__ __volatile__("mov %%i7, %0" : "=r" (A));

static inline void show(char *str, spinlock_t *lock, unsigned long caller)
{
    int cpu = smp_processor_id();

    printk("%s(%p) CPU#%d stuck at %08lx, owner PC(%08lx):CPU(%lx)\n",str,
        lock, cpu, caller, lock->owner_pc & ~3, lock->owner_pc & 3);
}

static inline void show_read(char *str, rwlock_t *lock, unsigned long caller)
{
    int cpu = smp_processor_id();

    printk("%s(%p) CPU#%d stuck at %08lx, owner PC(%08lx):CPU(%lx)\n", str,
        lock, cpu, caller, lock->owner_pc & ~3, lock->owner_pc & 3);
}

static inline void show_write(char *str, rwlock_t *lock, unsigned long caller)
{
    int cpu = smp_processor_id();
    int i;

    printk("%s(%p) CPU#%d stuck at %08lx, owner PC(%08lx):CPU(%lx)", str,
        lock, cpu, caller, lock->owner_pc & ~3, lock->owner_pc & 3);

    for(i = 0; i < NR_CPUS; i++)
        printk(" reader[%d]=%08lx", i, lock->reader_pc[i]);

    printk("\n");
}

#undef INIT_STUCK
#define INIT_STUCK 100000000

void _do_spin_lock(spinlock_t *lock, char *str)
{
    unsigned long caller;
    unsigned long val;
    int cpu = smp_processor_id();
    int stuck = INIT_STUCK;

    STORE_CALLER(caller);

again:
    __asm__ __volatile__("ldstub [%1], %0" : "=r" (val) : "r" (&(lock->lock)));
    if(val) {
        while(lock->lock) {
            if (!--stuck) {
                show(str, lock, caller);
                stuck = INIT_STUCK;
            }
            barrier();
        }
        goto again;
    }
    lock->owner_pc = (cpu & 3) | (caller & ~3);
}

int _spin_trylock(spinlock_t *lock)
{
    unsigned long val;
    unsigned long caller;
    int cpu = smp_processor_id();

    STORE_CALLER(caller);

    __asm__ __volatile__("ldstub [%1], %0" : "=r" (val) : "r" (&(lock->lock)));
    if(!val) {
        /* We got it, record our identity for debugging. */
        lock->owner_pc = (cpu & 3) | (caller & ~3);
    }
    return val == 0;
}

void _do_spin_unlock(spinlock_t *lock)
{
    lock->owner_pc = 0;
    barrier();
    lock->lock = 0;
}

void _do_read_lock(rwlock_t *rw, char *str)
{
    unsigned long caller;
    unsigned long val;
    int cpu = smp_processor_id();
    int stuck = INIT_STUCK;

    STORE_CALLER(caller);

wlock_again:
    __asm__ __volatile__("ldstub [%1 + 3], %0" : "=r" (val) : "r" (&(rw->lock)));
    if(val) {
        while(rw->lock & 0xff) {
            if (!--stuck) {
                show_read(str, rw, caller);
                stuck = INIT_STUCK;
            }
            barrier();
        }
        goto wlock_again;
    }

    rw->reader_pc[cpu] = caller;
    barrier();
    rw->lock++;
}

void _do_read_unlock(rwlock_t *rw, char *str)
{
    unsigned long caller;
    unsigned long val;
    int cpu = smp_processor_id();
    int stuck = INIT_STUCK;

    STORE_CALLER(caller);

wlock_again:
    __asm__ __volatile__("ldstub [%1 + 3], %0" : "=r" (val) : "r" (&(rw->lock)));
    if(val) {
        while(rw->lock & 0xff) {
            if (!--stuck) {
                show_read(str, rw, caller);
                stuck = INIT_STUCK;
            }
            barrier();
        }
        goto wlock_again;
    }

    rw->reader_pc[cpu] = 0;
    barrier();
    rw->lock -= 0x1ff;
}

void _do_write_lock(rwlock_t *rw, char *str)
{
    unsigned long caller;
    unsigned long val;
    int cpu = smp_processor_id();
    int stuck = INIT_STUCK;

    STORE_CALLER(caller);

wlock_again:
    __asm__ __volatile__("ldstub [%1 + 3], %0" : "=r" (val) : "r" (&(rw->lock)));
    if(val) {
wlock_wait:
        while(rw->lock) {
            if (!--stuck) {
                show_write(str, rw, caller);
                stuck = INIT_STUCK;
            }
            barrier();
        }
        goto wlock_again;
    }

    if (rw->lock & ~0xff) {
        *(((unsigned char *)&rw->lock)+3) = 0;
        barrier();
        goto wlock_wait;
    }

    barrier();
    rw->owner_pc = (cpu & 3) | (caller & ~3);
}

void _do_write_unlock(rwlock_t *rw)
{
    rw->owner_pc = 0;
    barrier();
    rw->lock = 0;
}

#endif /* SPIN_LOCK_DEBUG */

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #13 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0222 ]--