linux-old/kernel/softirq.c
<<
>>
Prefs
   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#define INCLUDE_INLINE_FUNCS
  25#include <linux/tqueue.h>
  26
  27unsigned long intr_count = 0;
  28
  29unsigned long bh_active = 0;
  30unsigned long bh_mask = 0;
  31struct bh_struct bh_base[32];
  32
  33
  34asmlinkage void do_bottom_half(void)
  35{
  36        unsigned long active;
  37        unsigned long mask, left;
  38        struct bh_struct *bh;
  39
  40        bh = bh_base;
  41        active = bh_active & bh_mask;
  42        for (mask = 1, left = ~0 ; left & active ; bh++,mask += mask,left += left) {
  43                if (mask & active) {
  44                        void (*fn)(void *);
  45                        bh_active &= ~mask;
  46                        fn = bh->routine;
  47                        if (!fn)
  48                                goto bad_bh;
  49                        fn(bh->data);
  50                }
  51        }
  52        return;
  53bad_bh:
  54        printk ("irq.c:bad bottom half entry %08lx\n", mask);
  55}
  56
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.