Annotation of Gnu-Mach/linux/src/kernel/softirq.c, revision 1.1

1.1     ! root        1: /*
        !             2:  *     linux/kernel/softirq.c
        !             3:  *
        !             4:  *     Copyright (C) 1992 Linus Torvalds
        !             5:  *
        !             6:  * do_bottom_half() runs at normal kernel priority: all interrupts
        !             7:  * enabled.  do_bottom_half() is atomic with respect to itself: a
        !             8:  * bottom_half handler need not be re-entrant.
        !             9:  */
        !            10: 
        !            11: #include <linux/ptrace.h>
        !            12: #include <linux/errno.h>
        !            13: #include <linux/kernel_stat.h>
        !            14: #include <linux/signal.h>
        !            15: #include <linux/sched.h>
        !            16: #include <linux/interrupt.h>
        !            17: #include <linux/mm.h>
        !            18: 
        !            19: #include <asm/system.h>
        !            20: #include <asm/io.h>
        !            21: #include <asm/irq.h>
        !            22: #include <asm/bitops.h>
        !            23: 
        !            24: unsigned long intr_count = 0;
        !            25: 
        !            26: int bh_mask_count[32];
        !            27: unsigned long bh_active = 0;
        !            28: unsigned long bh_mask = 0;
        !            29: void (*bh_base[32])(void);
        !            30: 
        !            31: 
        !            32: asmlinkage void do_bottom_half(void)
        !            33: {
        !            34:        unsigned long active;
        !            35:        unsigned long mask, left;
        !            36:        void (**bh)(void);
        !            37: 
        !            38:        sti();
        !            39:        bh = bh_base;
        !            40:        active = bh_active & bh_mask;
        !            41:        for (mask = 1, left = ~0 ; left & active ; bh++,mask += mask,left += left) {
        !            42:                if (mask & active) {
        !            43:                        void (*fn)(void);
        !            44:                        bh_active &= ~mask;
        !            45:                        fn = *bh;
        !            46:                        if (!fn)
        !            47:                                goto bad_bh;
        !            48:                        fn();
        !            49:                }
        !            50:        }
        !            51:        return;
        !            52: bad_bh:
        !            53:        printk ("irq.c:bad bottom half entry %08lx\n", mask);
        !            54: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.