irq.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:30k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * linux/arch/x86_64/kernel/irq.c
  3.  *
  4.  * Copyright (C) 1992, 1998 Linus Torvalds, Ingo Molnar
  5.  *
  6.  * This file contains the code used by various IRQ handling routines:
  7.  * asking for different IRQ's should be done through these routines
  8.  * instead of just grabbing them. Thus setups with different IRQ numbers
  9.  * shouldn't result in any weird surprises, and installing new handlers
  10.  * should be easier.
  11.  */
  12. /*
  13.  * (mostly architecture independent, will move to kernel/irq.c in 2.5.)
  14.  *
  15.  * IRQs are in fact implemented a bit like signal handlers for the kernel.
  16.  * Naturally it's not a 1:1 relation, but there are similarities.
  17.  */
  18. #include <linux/config.h>
  19. #include <linux/ptrace.h>
  20. #include <linux/errno.h>
  21. #include <linux/signal.h>
  22. #include <linux/sched.h>
  23. #include <linux/ioport.h>
  24. #include <linux/interrupt.h>
  25. #include <linux/timex.h>
  26. #include <linux/slab.h>
  27. #include <linux/random.h>
  28. #include <linux/smp_lock.h>
  29. #include <linux/init.h>
  30. #include <linux/kernel_stat.h>
  31. #include <linux/irq.h>
  32. #include <linux/proc_fs.h>
  33. #include <asm/atomic.h>
  34. #include <asm/io.h>
  35. #include <asm/smp.h>
  36. #include <asm/system.h>
  37. #include <asm/bitops.h>
  38. #include <asm/uaccess.h>
  39. #include <asm/pgalloc.h>
  40. #include <asm/delay.h>
  41. #include <asm/desc.h>
  42. #include <asm/irq.h>
  43. #include <asm/proto.h>
  44. #ifdef CONFIG_DEBUG_STACKOVERFLOW
  45. /* 
  46.  * Probalistic stack overflow check: 
  47.  * 
  48.  * Only check the stack in process context, because everything else
  49.  * runs on the big interrupt stacks. Checking reliably is too expensive,
  50.  * so we just check from interrupts. 
  51.  */ 
  52. static inline void stack_overflow_check(struct pt_regs *regs)
  53. u64 curbase = (u64) current;
  54. static unsigned long warned = -60*HZ; 
  55. if (regs->rsp >= curbase && regs->rsp <= curbase + THREAD_SIZE &&
  56.     regs->rsp <  curbase + sizeof(struct task_struct) + 128 && 
  57.     warned + 60*HZ >= jiffies) { 
  58. printk("do_IRQ: %s near stack overflow (cur:%Lx,rsp:%lx)n",
  59.        current->comm, curbase, regs->rsp); 
  60. show_stack(NULL);
  61. warned = jiffies;
  62. }
  63. }
  64. #endif
  65. /*
  66.  * Linux has a controller-independent x86 interrupt architecture.
  67.  * every controller has a 'controller-template', that is used
  68.  * by the main code to do the right thing. Each driver-visible
  69.  * interrupt source is transparently wired to the apropriate
  70.  * controller. Thus drivers need not be aware of the
  71.  * interrupt-controller.
  72.  *
  73.  * Various interrupt controllers we handle: 8259 PIC, SMP IO-APIC,
  74.  * PIIX4's internal 8259 PIC and SGI's Visual Workstation Cobalt (IO-)APIC.
  75.  * (IO-APICs assumed to be messaging to Pentium local-APICs)
  76.  *
  77.  * the code is designed to be easily extended with new/different
  78.  * interrupt controllers, without having to do assembly magic.
  79.  */
  80. /*
  81.  * Controller mappings for all interrupt sources:
  82.  */
  83. irq_desc_t irq_desc[NR_IRQS] __cacheline_aligned =
  84. { [0 ... NR_IRQS-1] = { 0, &no_irq_type, NULL, 0, SPIN_LOCK_UNLOCKED}};
  85. static void register_irq_proc (unsigned int irq);
  86. /*
  87.  * Special irq handlers.
  88.  */
  89. void no_action(int cpl, void *dev_id, struct pt_regs *regs) { }
  90. /*
  91.  * Generic no controller code
  92.  */
  93. static void enable_none(unsigned int irq) { }
  94. static unsigned int startup_none(unsigned int irq) { return 0; }
  95. static void disable_none(unsigned int irq) { }
  96. static void ack_none(unsigned int irq)
  97. {
  98. /*
  99.  * 'what should we do if we get a hw irq event on an illegal vector'.
  100.  * each architecture has to answer this themselves, it doesnt deserve
  101.  * a generic callback i think.
  102.  */
  103. #if CONFIG_X86
  104. printk("unexpected IRQ trap at vector %02xn", irq);
  105. #ifdef CONFIG_X86_LOCAL_APIC
  106. /*
  107.  * Currently unexpected vectors happen only on SMP and APIC.
  108.  * We _must_ ack these because every local APIC has only N
  109.  * irq slots per priority level, and a 'hanging, unacked' IRQ
  110.  * holds up an irq slot - in excessive cases (when multiple
  111.  * unexpected vectors occur) that might lock up the APIC
  112.  * completely.
  113.  */
  114. ack_APIC_irq();
  115. #endif
  116. #endif
  117. }
  118. /* startup is the same as "enable", shutdown is same as "disable" */
  119. #define shutdown_none disable_none
  120. #define end_none enable_none
  121. struct hw_interrupt_type no_irq_type = {
  122. "none",
  123. startup_none,
  124. shutdown_none,
  125. enable_none,
  126. disable_none,
  127. ack_none,
  128. end_none
  129. };
  130. atomic_t irq_err_count;
  131. #ifdef CONFIG_X86_IO_APIC
  132. #ifdef APIC_MISMATCH_DEBUG
  133. atomic_t irq_mis_count;
  134. #endif
  135. #endif
  136. /*
  137.  * Generic, controller-independent functions:
  138.  */
  139. int get_irq_list(char *buf)
  140. {
  141. int i, j;
  142. struct irqaction * action;
  143. char *p = buf;
  144. p += sprintf(p, "           ");
  145. for (j=0; j<smp_num_cpus; j++)
  146. p += sprintf(p, "CPU%d       ",j);
  147. *p++ = 'n';
  148. for (i = 0 ; i < NR_IRQS ; i++) {
  149. action = irq_desc[i].action;
  150. if (!action) 
  151. continue;
  152. p += sprintf(p, "%3d: ",i);
  153. #ifndef CONFIG_SMP
  154. p += sprintf(p, "%10u ", kstat_irqs(i));
  155. #else
  156. for (j = 0; j < smp_num_cpus; j++)
  157. p += sprintf(p, "%10u ",
  158. kstat.irqs[cpu_logical_map(j)][i]);
  159. #endif
  160. p += sprintf(p, " %14s", irq_desc[i].handler->typename);
  161. p += sprintf(p, "  %s", action->name);
  162. for (action=action->next; action; action = action->next)
  163. p += sprintf(p, ", %s", action->name);
  164. *p++ = 'n';
  165. }
  166. p += sprintf(p, "NMI: ");
  167. for (j = 0; j < smp_num_cpus; j++)
  168. p += sprintf(p, "%10u ",
  169. nmi_count(cpu_logical_map(j)));
  170. p += sprintf(p, "n");
  171. #if CONFIG_X86_LOCAL_APIC
  172. p += sprintf(p, "LOC: ");
  173. for (j = 0; j < smp_num_cpus; j++)
  174. p += sprintf(p, "%10u ",
  175. apic_timer_irqs[cpu_logical_map(j)]);
  176. p += sprintf(p, "n");
  177. #endif
  178. p += sprintf(p, "ERR: %10un", atomic_read(&irq_err_count));
  179. #ifdef CONFIG_X86_IO_APIC
  180. #ifdef APIC_MISMATCH_DEBUG
  181. p += sprintf(p, "MIS: %10un", atomic_read(&irq_mis_count));
  182. #endif
  183. #endif
  184. return p - buf;
  185. }
  186. /*
  187.  * Global interrupt locks for SMP. Allow interrupts to come in on any
  188.  * CPU, yet make cli/sti act globally to protect critical regions..
  189.  */
  190. #ifdef CONFIG_SMP
  191. unsigned char global_irq_holder = NO_PROC_ID;
  192. unsigned volatile long global_irq_lock; /* pendantic: long for set_bit --RR */
  193. extern void show_stack(unsigned long* esp);
  194. /* XXX: this unfortunately doesn't support irqs/exception stacks currently, 
  195.    should check the other PDAs */
  196. static void show(char * str)
  197. {
  198. int i;
  199. int cpu = smp_processor_id();
  200. printk("n%s, CPU %d:n", str, cpu);
  201. printk("irq:  %d [",irqs_running());
  202. for(i=0;i < smp_num_cpus;i++)
  203. printk(" %d",local_irq_count(i));
  204. printk(" ]nbh:   %d [",spin_is_locked(&global_bh_lock) ? 1 : 0);
  205. for(i=0;i < smp_num_cpus;i++)
  206. printk(" %d",local_bh_count(i));
  207. printk(" ]nStack dumps:");
  208. for(i = 0; i < smp_num_cpus; i++) {
  209. unsigned long esp;
  210. if (i == cpu)
  211. continue;
  212. printk("nCPU %d:",i);
  213. esp = init_tss[i].rsp0;
  214. if (!esp) {
  215. /* tss->esp0 is set to NULL in cpu_init(),
  216.  * it's initialized when the cpu returns to user
  217.  * space. -- manfreds
  218.  */
  219. printk(" <unknown> ");
  220. continue;
  221. }
  222. esp &= ~(THREAD_SIZE-1);
  223. esp += sizeof(struct task_struct);
  224. show_stack((void*)esp);
  225.   }
  226. printk("nCPU %d:",cpu);
  227. show_stack(NULL);
  228. printk("n");
  229. }
  230. #define MAXCOUNT 100000000
  231. /*
  232.  * I had a lockup scenario where a tight loop doing
  233.  * spin_unlock()/spin_lock() on CPU#1 was racing with
  234.  * spin_lock() on CPU#0. CPU#0 should have noticed spin_unlock(), but
  235.  * apparently the spin_unlock() information did not make it
  236.  * through to CPU#0 ... nasty, is this by design, do we have to limit
  237.  * 'memory update oscillation frequency' artificially like here?
  238.  *
  239.  * Such 'high frequency update' races can be avoided by careful design, but
  240.  * some of our major constructs like spinlocks use similar techniques,
  241.  * it would be nice to clarify this issue. Set this define to 0 if you
  242.  * want to check whether your system freezes.  I suspect the delay done
  243.  * by SYNC_OTHER_CORES() is in correlation with 'snooping latency', but
  244.  * i thought that such things are guaranteed by design, since we use
  245.  * the 'LOCK' prefix.
  246.  */
  247. #define SUSPECTED_CPU_OR_CHIPSET_BUG_WORKAROUND 0
  248. #if SUSPECTED_CPU_OR_CHIPSET_BUG_WORKAROUND
  249. # define SYNC_OTHER_CORES(x) udelay(x+1)
  250. #else
  251. /*
  252.  * We have to allow irqs to arrive between __sti and __cli
  253.  */
  254. # define SYNC_OTHER_CORES(x) __asm__ __volatile__ ("nop")
  255. #endif
  256. static inline void wait_on_irq(int cpu)
  257. {
  258. int count = MAXCOUNT;
  259. for (;;) {
  260. /*
  261.  * Wait until all interrupts are gone. Wait
  262.  * for bottom half handlers unless we're
  263.  * already executing in one..
  264.  */
  265. if (!irqs_running())
  266. if (local_bh_count(cpu) || !spin_is_locked(&global_bh_lock))
  267. break;
  268. /* Duh, we have to loop. Release the lock to avoid deadlocks */
  269. clear_bit(0,&global_irq_lock);
  270. for (;;) {
  271. if (!--count) {
  272. show("wait_on_irq");
  273. count = ~0;
  274. }
  275. __sti();
  276. SYNC_OTHER_CORES(cpu);
  277. __cli();
  278. if (irqs_running())
  279. continue;
  280. if (global_irq_lock)
  281. continue;
  282. if (!local_bh_count(cpu) && spin_is_locked(&global_bh_lock))
  283. continue;
  284. if (!test_and_set_bit(0,&global_irq_lock))
  285. break;
  286. }
  287. }
  288. }
  289. /*
  290.  * This is called when we want to synchronize with
  291.  * interrupts. We may for example tell a device to
  292.  * stop sending interrupts: but to make sure there
  293.  * are no interrupts that are executing on another
  294.  * CPU we need to call this function.
  295.  */
  296. void synchronize_irq(void)
  297. {
  298. if (irqs_running()) {
  299. /* Stupid approach */
  300. cli();
  301. sti();
  302. }
  303. }
  304. static inline void get_irqlock(int cpu)
  305. {
  306. if (test_and_set_bit(0,&global_irq_lock)) {
  307. /* do we already hold the lock? */
  308. if ((unsigned char) cpu == global_irq_holder)
  309. return;
  310. /* Uhhuh.. Somebody else got it. Wait.. */
  311. do {
  312. do {
  313. rep_nop();
  314. } while (test_bit(0,&global_irq_lock));
  315. } while (test_and_set_bit(0,&global_irq_lock));
  316. }
  317. /* 
  318.  * We also to make sure that nobody else is running
  319.  * in an interrupt context. 
  320.  */
  321. wait_on_irq(cpu);
  322. /*
  323.  * Ok, finally..
  324.  */
  325. global_irq_holder = cpu;
  326. }
  327. #define EFLAGS_IF_SHIFT 9
  328. /*
  329.  * A global "cli()" while in an interrupt context
  330.  * turns into just a local cli(). Interrupts
  331.  * should use spinlocks for the (very unlikely)
  332.  * case that they ever want to protect against
  333.  * each other.
  334.  *
  335.  * If we already have local interrupts disabled,
  336.  * this will not turn a local disable into a
  337.  * global one (problems with spinlocks: this makes
  338.  * save_flags+cli+sti usable inside a spinlock).
  339.  */
  340. void __global_cli(void)
  341. {
  342. unsigned long flags;
  343. __save_flags(flags);
  344. if (flags & (1U << EFLAGS_IF_SHIFT)) {
  345. int cpu = smp_processor_id();
  346. __cli();
  347. if (!local_irq_count(cpu))
  348. get_irqlock(cpu);
  349. }
  350. }
  351. void __global_sti(void)
  352. {
  353. int cpu = smp_processor_id();
  354. if (!local_irq_count(cpu))
  355. release_irqlock(cpu);
  356. __sti();
  357. }
  358. /*
  359.  * SMP flags value to restore to:
  360.  * 0 - global cli
  361.  * 1 - global sti
  362.  * 2 - local cli
  363.  * 3 - local sti
  364.  */
  365. unsigned long __global_save_flags(void)
  366. {
  367. int retval;
  368. int local_enabled;
  369. unsigned long flags;
  370. int cpu = smp_processor_id();
  371. __save_flags(flags);
  372. local_enabled = (flags >> EFLAGS_IF_SHIFT) & 1;
  373. /* default to local */
  374. retval = 2 + local_enabled;
  375. /* check for global flags if we're not in an interrupt */
  376. if (!local_irq_count(cpu)) {
  377. if (local_enabled)
  378. retval = 1;
  379. if (global_irq_holder == cpu)
  380. retval = 0;
  381. }
  382. return retval;
  383. }
  384. void __global_restore_flags(unsigned long flags)
  385. {
  386. switch (flags) {
  387. case 0:
  388. __global_cli();
  389. break;
  390. case 1:
  391. __global_sti();
  392. break;
  393. case 2:
  394. __cli();
  395. break;
  396. case 3:
  397. __sti();
  398. break;
  399. default:
  400. printk("global_restore_flags: %08lx (%08lx)n",
  401. flags, (&flags)[-1]);
  402. }
  403. }
  404. #endif
  405. /*
  406.  * This should really return information about whether
  407.  * we should do bottom half handling etc. Right now we
  408.  * end up _always_ checking the bottom half, which is a
  409.  * waste of time and is not what some drivers would
  410.  * prefer.
  411.  */
  412. int handle_IRQ_event(unsigned int irq, struct pt_regs * regs, struct irqaction * action)
  413. {
  414. int status;
  415. int cpu = smp_processor_id();
  416. irq_enter(cpu, irq);
  417. status = 1; /* Force the "do bottom halves" bit */
  418. if (!(action->flags & SA_INTERRUPT))
  419. __sti();
  420. do {
  421. status |= action->flags;
  422. action->handler(irq, action->dev_id, regs);
  423. action = action->next;
  424. } while (action);
  425. if (status & SA_SAMPLE_RANDOM)
  426. add_interrupt_randomness(irq);
  427. __cli();
  428. irq_exit(cpu, irq);
  429. return status;
  430. }
  431. /*
  432.  * Generic enable/disable code: this just calls
  433.  * down into the PIC-specific version for the actual
  434.  * hardware disable after having gotten the irq
  435.  * controller lock. 
  436.  */
  437.  
  438. /**
  439.  * disable_irq_nosync - disable an irq without waiting
  440.  * @irq: Interrupt to disable
  441.  *
  442.  * Disable the selected interrupt line.  Disables and Enables are
  443.  * nested.
  444.  * Unlike disable_irq(), this function does not ensure existing
  445.  * instances of the IRQ handler have completed before returning.
  446.  *
  447.  * This function may be called from IRQ context.
  448.  */
  449.  
  450. inline void disable_irq_nosync(unsigned int irq)
  451. {
  452. irq_desc_t *desc = irq_desc + irq;
  453. unsigned long flags;
  454. spin_lock_irqsave(&desc->lock, flags);
  455. if (!desc->depth++) {
  456. desc->status |= IRQ_DISABLED;
  457. desc->handler->disable(irq);
  458. }
  459. spin_unlock_irqrestore(&desc->lock, flags);
  460. }
  461. /**
  462.  * disable_irq - disable an irq and wait for completion
  463.  * @irq: Interrupt to disable
  464.  *
  465.  * Disable the selected interrupt line.  Enables and Disables are
  466.  * nested.
  467.  * This function waits for any pending IRQ handlers for this interrupt
  468.  * to complete before returning. If you use this function while
  469.  * holding a resource the IRQ handler may need you will deadlock.
  470.  *
  471.  * This function may be called - with care - from IRQ context.
  472.  */
  473.  
  474. void disable_irq(unsigned int irq)
  475. {
  476. disable_irq_nosync(irq);
  477. if (!local_irq_count(smp_processor_id())) {
  478. do {
  479. barrier();
  480. cpu_relax();
  481. } while (irq_desc[irq].status & IRQ_INPROGRESS);
  482. }
  483. }
  484. /**
  485.  * enable_irq - enable handling of an irq
  486.  * @irq: Interrupt to enable
  487.  *
  488.  * Undoes the effect of one call to disable_irq().  If this
  489.  * matches the last disable, processing of interrupts on this
  490.  * IRQ line is re-enabled.
  491.  *
  492.  * This function may be called from IRQ context.
  493.  */
  494.  
  495. void enable_irq(unsigned int irq)
  496. {
  497. irq_desc_t *desc = irq_desc + irq;
  498. unsigned long flags;
  499. spin_lock_irqsave(&desc->lock, flags);
  500. switch (desc->depth) {
  501. case 1: {
  502. unsigned int status = desc->status & ~IRQ_DISABLED;
  503. desc->status = status;
  504. if ((status & (IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING) {
  505. desc->status = status | IRQ_REPLAY;
  506. hw_resend_irq(desc->handler,irq);
  507. }
  508. desc->handler->enable(irq);
  509. /* fall-through */
  510. }
  511. default:
  512. desc->depth--;
  513. break;
  514. case 0:
  515. printk("enable_irq(%u) unbalanced from %pn", irq,
  516.        __builtin_return_address(0));
  517. }
  518. spin_unlock_irqrestore(&desc->lock, flags);
  519. }
  520. /*
  521.  * do_IRQ handles all normal device IRQ's (the special
  522.  * SMP cross-CPU interrupts have their own specific
  523.  * handlers).
  524.  */
  525. asmlinkage unsigned int do_IRQ(struct pt_regs *regs)
  526. {
  527. /* 
  528.  * We ack quickly, we don't want the irq controller
  529.  * thinking we're snobs just because some other CPU has
  530.  * disabled global interrupts (we have already done the
  531.  * INT_ACK cycles, it's too late to try to pretend to the
  532.  * controller that we aren't taking the interrupt).
  533.  *
  534.  * 0 return value means that this irq is already being
  535.  * handled by some other CPU. (or is disabled)
  536.  */
  537. int irq = regs->orig_rax & 0xff; /* high bits used in ret_from_ code  */
  538. int cpu = smp_processor_id();
  539. irq_desc_t *desc = irq_desc + irq;
  540. struct irqaction * action;
  541. unsigned int status;
  542. #ifdef CONFIG_DEBUG_STACKOVERFLOW
  543. stack_overflow_check(regs); 
  544. #endif
  545.        
  546. kstat.irqs[cpu][irq]++;
  547. spin_lock(&desc->lock);
  548. desc->handler->ack(irq);
  549. /*
  550.    REPLAY is when Linux resends an IRQ that was dropped earlier
  551.    WAITING is used by probe to mark irqs that are being tested */
  552. status = desc->status & ~(IRQ_REPLAY | IRQ_WAITING);
  553. status |= IRQ_PENDING; /* we _want_ to handle it */
  554. /*
  555.  * If the IRQ is disabled for whatever reason, we cannot
  556.  * use the action we have.
  557.  */
  558. action = NULL;
  559. if (!(status & (IRQ_DISABLED | IRQ_INPROGRESS))) {
  560. action = desc->action;
  561. status &= ~IRQ_PENDING; /* we commit to handling */
  562. status |= IRQ_INPROGRESS; /* we are handling it */
  563. }
  564. desc->status = status;
  565. /*
  566.  * If there is no IRQ handler or it was disabled, exit early.
  567.    Since we set PENDING, if another processor is handling
  568.    a different instance of this same irq, the other processor
  569.    will take care of it.
  570.  */
  571. if (!action)
  572. goto out;
  573. /*
  574.  * Edge triggered interrupts need to remember
  575.  * pending events.
  576.  * This applies to any hw interrupts that allow a second
  577.  * instance of the same irq to arrive while we are in do_IRQ
  578.  * or in the handler. But the code here only handles the _second_
  579.  * instance of the irq, not the third or fourth. So it is mostly
  580.  * useful for irq hardware that does not mask cleanly in an
  581.  * SMP environment.
  582.  */
  583. for (;;) {
  584. spin_unlock(&desc->lock);
  585. handle_IRQ_event(irq, regs, action);
  586. spin_lock(&desc->lock);
  587. if (!(desc->status & IRQ_PENDING))
  588. break;
  589. desc->status &= ~IRQ_PENDING;
  590. }
  591. desc->status &= ~IRQ_INPROGRESS;
  592. out:
  593. /*
  594.  * The ->end() handler has to deal with interrupts which got
  595.  * disabled while the handler was running.
  596.  */
  597. desc->handler->end(irq);
  598. spin_unlock(&desc->lock);
  599. if (softirq_pending(cpu))
  600. do_softirq();
  601. return 1;
  602. }
  603. /**
  604.  * request_irq - allocate an interrupt line
  605.  * @irq: Interrupt line to allocate
  606.  * @handler: Function to be called when the IRQ occurs
  607.  * @irqflags: Interrupt type flags
  608.  * @devname: An ascii name for the claiming device
  609.  * @dev_id: A cookie passed back to the handler function
  610.  *
  611.  * This call allocates interrupt resources and enables the
  612.  * interrupt line and IRQ handling. From the point this
  613.  * call is made your handler function may be invoked. Since
  614.  * your handler function must clear any interrupt the board 
  615.  * raises, you must take care both to initialise your hardware
  616.  * and to set up the interrupt handler in the right order.
  617.  *
  618.  * Dev_id must be globally unique. Normally the address of the
  619.  * device data structure is used as the cookie. Since the handler
  620.  * receives this value it makes sense to use it.
  621.  *
  622.  * If your interrupt is shared you must pass a non NULL dev_id
  623.  * as this is required when freeing the interrupt.
  624.  *
  625.  * Flags:
  626.  *
  627.  * SA_SHIRQ Interrupt is shared
  628.  *
  629.  * SA_INTERRUPT Disable local interrupts while processing
  630.  *
  631.  * SA_SAMPLE_RANDOM The interrupt can be used for entropy
  632.  *
  633.  */
  634.  
  635. int request_irq(unsigned int irq, 
  636. void (*handler)(int, void *, struct pt_regs *),
  637. unsigned long irqflags, 
  638. const char * devname,
  639. void *dev_id)
  640. {
  641. int retval;
  642. struct irqaction * action;
  643. #if 1
  644. /*
  645.  * Sanity-check: shared interrupts should REALLY pass in
  646.  * a real dev-ID, otherwise we'll have trouble later trying
  647.  * to figure out which interrupt is which (messes up the
  648.  * interrupt freeing logic etc).
  649.  */
  650. if (irqflags & SA_SHIRQ) {
  651. if (!dev_id)
  652. printk("Bad boy: %s (at 0x%x) called us without a dev_id!n", devname, (&irq)[-1]);
  653. }
  654. #endif
  655. if (irq >= NR_IRQS)
  656. return -EINVAL;
  657. if (!handler)
  658. return -EINVAL;
  659. action = (struct irqaction *)
  660. kmalloc(sizeof(struct irqaction), GFP_KERNEL);
  661. if (!action)
  662. return -ENOMEM;
  663. action->handler = handler;
  664. action->flags = irqflags;
  665. action->mask = 0;
  666. action->name = devname;
  667. action->next = NULL;
  668. action->dev_id = dev_id;
  669. retval = setup_irq(irq, action);
  670. if (retval)
  671. kfree(action);
  672. return retval;
  673. }
  674. /**
  675.  * free_irq - free an interrupt
  676.  * @irq: Interrupt line to free
  677.  * @dev_id: Device identity to free
  678.  *
  679.  * Remove an interrupt handler. The handler is removed and if the
  680.  * interrupt line is no longer in use by any driver it is disabled.
  681.  * On a shared IRQ the caller must ensure the interrupt is disabled
  682.  * on the card it drives before calling this function. The function
  683.  * does not return until any executing interrupts for this IRQ
  684.  * have completed.
  685.  *
  686.  * This function may be called from interrupt context. 
  687.  *
  688.  * Bugs: Attempting to free an irq in a handler for the same irq hangs
  689.  *       the machine.
  690.  */
  691.  
  692. void free_irq(unsigned int irq, void *dev_id)
  693. {
  694. irq_desc_t *desc;
  695. struct irqaction **p;
  696. unsigned long flags;
  697. if (irq >= NR_IRQS)
  698. return;
  699. desc = irq_desc + irq;
  700. spin_lock_irqsave(&desc->lock,flags);
  701. p = &desc->action;
  702. for (;;) {
  703. struct irqaction * action = *p;
  704. if (action) {
  705. struct irqaction **pp = p;
  706. p = &action->next;
  707. if (action->dev_id != dev_id)
  708. continue;
  709. /* Found it - now remove it from the list of entries */
  710. *pp = action->next;
  711. if (!desc->action) {
  712. desc->status |= IRQ_DISABLED;
  713. desc->handler->shutdown(irq);
  714. }
  715. spin_unlock_irqrestore(&desc->lock,flags);
  716. #ifdef CONFIG_SMP
  717. /* Wait to make sure it's not being used on another CPU */
  718. while (desc->status & IRQ_INPROGRESS) {
  719. barrier();
  720. cpu_relax();
  721. }
  722. #endif
  723. kfree(action);
  724. return;
  725. }
  726. printk("Trying to free free IRQ%dn",irq);
  727. spin_unlock_irqrestore(&desc->lock,flags);
  728. return;
  729. }
  730. }
  731. /*
  732.  * IRQ autodetection code..
  733.  *
  734.  * This depends on the fact that any interrupt that
  735.  * comes in on to an unassigned handler will get stuck
  736.  * with "IRQ_WAITING" cleared and the interrupt
  737.  * disabled.
  738.  */
  739. static DECLARE_MUTEX(probe_sem);
  740. /**
  741.  * probe_irq_on - begin an interrupt autodetect
  742.  *
  743.  * Commence probing for an interrupt. The interrupts are scanned
  744.  * and a mask of potential interrupt lines is returned.
  745.  *
  746.  */
  747.  
  748. unsigned long probe_irq_on(void)
  749. {
  750. unsigned int i;
  751. irq_desc_t *desc;
  752. unsigned long val;
  753. unsigned long delay;
  754. down(&probe_sem);
  755. /* 
  756.  * something may have generated an irq long ago and we want to
  757.  * flush such a longstanding irq before considering it as spurious. 
  758.  */
  759. for (i = NR_IRQS-1; i > 0; i--)  {
  760. desc = irq_desc + i;
  761. spin_lock_irq(&desc->lock);
  762. if (!irq_desc[i].action) 
  763. irq_desc[i].handler->startup(i);
  764. spin_unlock_irq(&desc->lock);
  765. }
  766. /* Wait for longstanding interrupts to trigger. */
  767. for (delay = jiffies + HZ/50; time_after(delay, jiffies); )
  768. /* about 20ms delay */ synchronize_irq();
  769. /*
  770.  * enable any unassigned irqs
  771.  * (we must startup again here because if a longstanding irq
  772.  * happened in the previous stage, it may have masked itself)
  773.  */
  774. for (i = NR_IRQS-1; i > 0; i--) {
  775. desc = irq_desc + i;
  776. spin_lock_irq(&desc->lock);
  777. if (!desc->action) {
  778. desc->status |= IRQ_AUTODETECT | IRQ_WAITING;
  779. if (desc->handler->startup(i))
  780. desc->status |= IRQ_PENDING;
  781. }
  782. spin_unlock_irq(&desc->lock);
  783. }
  784. /*
  785.  * Wait for spurious interrupts to trigger
  786.  */
  787. for (delay = jiffies + HZ/10; time_after(delay, jiffies); )
  788. /* about 100ms delay */ synchronize_irq();
  789. /*
  790.  * Now filter out any obviously spurious interrupts
  791.  */
  792. val = 0;
  793. for (i = 0; i < NR_IRQS; i++) {
  794. irq_desc_t *desc = irq_desc + i;
  795. unsigned int status;
  796. spin_lock_irq(&desc->lock);
  797. status = desc->status;
  798. if (status & IRQ_AUTODETECT) {
  799. /* It triggered already - consider it spurious. */
  800. if (!(status & IRQ_WAITING)) {
  801. desc->status = status & ~IRQ_AUTODETECT;
  802. desc->handler->shutdown(i);
  803. } else
  804. if (i < 32)
  805. val |= 1 << i;
  806. }
  807. spin_unlock_irq(&desc->lock);
  808. }
  809. return val;
  810. }
  811. /*
  812.  * Return a mask of triggered interrupts (this
  813.  * can handle only legacy ISA interrupts).
  814.  */
  815.  
  816. /**
  817.  * probe_irq_mask - scan a bitmap of interrupt lines
  818.  * @val: mask of interrupts to consider
  819.  *
  820.  * Scan the ISA bus interrupt lines and return a bitmap of
  821.  * active interrupts. The interrupt probe logic state is then
  822.  * returned to its previous value.
  823.  *
  824.  * Note: we need to scan all the irq's even though we will
  825.  * only return ISA irq numbers - just so that we reset them
  826.  * all to a known state.
  827.  */
  828. unsigned int probe_irq_mask(unsigned long val)
  829. {
  830. int i;
  831. unsigned int mask;
  832. mask = 0;
  833. for (i = 0; i < NR_IRQS; i++) {
  834. irq_desc_t *desc = irq_desc + i;
  835. unsigned int status;
  836. spin_lock_irq(&desc->lock);
  837. status = desc->status;
  838. if (status & IRQ_AUTODETECT) {
  839. if (i < 16 && !(status & IRQ_WAITING))
  840. mask |= 1 << i;
  841. desc->status = status & ~IRQ_AUTODETECT;
  842. desc->handler->shutdown(i);
  843. }
  844. spin_unlock_irq(&desc->lock);
  845. }
  846. up(&probe_sem);
  847. return mask & val;
  848. }
  849. /*
  850.  * Return the one interrupt that triggered (this can
  851.  * handle any interrupt source).
  852.  */
  853. /**
  854.  * probe_irq_off - end an interrupt autodetect
  855.  * @val: mask of potential interrupts (unused)
  856.  *
  857.  * Scans the unused interrupt lines and returns the line which
  858.  * appears to have triggered the interrupt. If no interrupt was
  859.  * found then zero is returned. If more than one interrupt is
  860.  * found then minus the first candidate is returned to indicate
  861.  * their is doubt.
  862.  *
  863.  * The interrupt probe logic state is returned to its previous
  864.  * value.
  865.  *
  866.  * BUGS: When used in a module (which arguably shouldnt happen)
  867.  * nothing prevents two IRQ probe callers from overlapping. The
  868.  * results of this are non-optimal.
  869.  */
  870.  
  871. int probe_irq_off(unsigned long val)
  872. {
  873. int i, irq_found, nr_irqs;
  874. nr_irqs = 0;
  875. irq_found = 0;
  876. for (i = 0; i < NR_IRQS; i++) {
  877. irq_desc_t *desc = irq_desc + i;
  878. unsigned int status;
  879. spin_lock_irq(&desc->lock);
  880. status = desc->status;
  881. if (status & IRQ_AUTODETECT) {
  882. if (!(status & IRQ_WAITING)) {
  883. if (!nr_irqs)
  884. irq_found = i;
  885. nr_irqs++;
  886. }
  887. desc->status = status & ~IRQ_AUTODETECT;
  888. desc->handler->shutdown(i);
  889. }
  890. spin_unlock_irq(&desc->lock);
  891. }
  892. up(&probe_sem);
  893. if (nr_irqs > 1)
  894. irq_found = -irq_found;
  895. return irq_found;
  896. }
  897. /* this was setup_x86_irq but it seems pretty generic */
  898. int setup_irq(unsigned int irq, struct irqaction * new)
  899. {
  900. int shared = 0;
  901. unsigned long flags;
  902. struct irqaction *old, **p;
  903. irq_desc_t *desc = irq_desc + irq;
  904. /*
  905.  * Some drivers like serial.c use request_irq() heavily,
  906.  * so we have to be careful not to interfere with a
  907.  * running system.
  908.  */
  909. if (new->flags & SA_SAMPLE_RANDOM) {
  910. /*
  911.  * This function might sleep, we want to call it first,
  912.  * outside of the atomic block.
  913.  * Yes, this might clear the entropy pool if the wrong
  914.  * driver is attempted to be loaded, without actually
  915.  * installing a new handler, but is this really a problem,
  916.  * only the sysadmin is able to do this.
  917.  */
  918. rand_initialize_irq(irq);
  919. }
  920. /*
  921.  * The following block of code has to be executed atomically
  922.  */
  923. spin_lock_irqsave(&desc->lock,flags);
  924. p = &desc->action;
  925. if ((old = *p) != NULL) {
  926. /* Can't share interrupts unless both agree to */
  927. if (!(old->flags & new->flags & SA_SHIRQ)) {
  928. spin_unlock_irqrestore(&desc->lock,flags);
  929. return -EBUSY;
  930. }
  931. /* add new interrupt at end of irq queue */
  932. do {
  933. p = &old->next;
  934. old = *p;
  935. } while (old);
  936. shared = 1;
  937. }
  938. *p = new;
  939. if (!shared) {
  940. desc->depth = 0;
  941. desc->status &= ~(IRQ_DISABLED | IRQ_AUTODETECT | IRQ_WAITING);
  942. desc->handler->startup(irq);
  943. }
  944. spin_unlock_irqrestore(&desc->lock,flags);
  945. register_irq_proc(irq);
  946. return 0;
  947. }
  948. static struct proc_dir_entry * root_irq_dir;
  949. static struct proc_dir_entry * irq_dir [NR_IRQS];
  950. #define HEX_DIGITS 8
  951. static unsigned int parse_hex_value (const char *buffer,
  952. unsigned long count, unsigned long *ret)
  953. {
  954. unsigned char hexnum [HEX_DIGITS];
  955. unsigned long value;
  956. int i;
  957. if (!count)
  958. return -EINVAL;
  959. if (count > HEX_DIGITS)
  960. count = HEX_DIGITS;
  961. if (copy_from_user(hexnum, buffer, count))
  962. return -EFAULT;
  963. /*
  964.  * Parse the first 8 characters as a hex string, any non-hex char
  965.  * is end-of-string. '00e1', 'e1', '00E1', 'E1' are all the same.
  966.  */
  967. value = 0;
  968. for (i = 0; i < count; i++) {
  969. unsigned int c = hexnum[i];
  970. switch (c) {
  971. case '0' ... '9': c -= '0'; break;
  972. case 'a' ... 'f': c -= 'a'-10; break;
  973. case 'A' ... 'F': c -= 'A'-10; break;
  974. default:
  975. goto out;
  976. }
  977. value = (value << 4) | c;
  978. }
  979. out:
  980. *ret = value;
  981. return 0;
  982. }
  983. #if CONFIG_SMP
  984. static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
  985. static unsigned long irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
  986. static int irq_affinity_read_proc (char *page, char **start, off_t off,
  987. int count, int *eof, void *data)
  988. {
  989. if (count < HEX_DIGITS+1)
  990. return -EINVAL;
  991. return sprintf (page, "%08lxn", irq_affinity[(long)data]);
  992. }
  993. static int irq_affinity_write_proc (struct file *file, const char *buffer,
  994. unsigned long count, void *data)
  995. {
  996. int irq = (long) data, full_count = count, err;
  997. unsigned long new_value;
  998. if (!irq_desc[irq].handler->set_affinity)
  999. return -EIO;
  1000. err = parse_hex_value(buffer, count, &new_value);
  1001. /*
  1002.  * Do not allow disabling IRQs completely - it's a too easy
  1003.  * way to make the system unusable accidentally :-) At least
  1004.  * one online CPU still has to be targeted.
  1005.  */
  1006. if (!(new_value & cpu_online_map))
  1007. return -EINVAL;
  1008. irq_affinity[irq] = new_value;
  1009. irq_desc[irq].handler->set_affinity(irq, new_value);
  1010. return full_count;
  1011. }
  1012. #endif
  1013. static int prof_cpu_mask_read_proc (char *page, char **start, off_t off,
  1014. int count, int *eof, void *data)
  1015. {
  1016. unsigned long *mask = (unsigned long *) data;
  1017. if (count < HEX_DIGITS+1)
  1018. return -EINVAL;
  1019. return sprintf (page, "%08lxn", *mask);
  1020. }
  1021. static int prof_cpu_mask_write_proc (struct file *file, const char *buffer,
  1022. unsigned long count, void *data)
  1023. {
  1024. unsigned long *mask = (unsigned long *) data, full_count = count, err;
  1025. unsigned long new_value;
  1026. err = parse_hex_value(buffer, count, &new_value);
  1027. if (err)
  1028. return err;
  1029. *mask = new_value;
  1030. return full_count;
  1031. }
  1032. #define MAX_NAMELEN 10
  1033. static void register_irq_proc (unsigned int irq)
  1034. {
  1035. char name [MAX_NAMELEN];
  1036. if (!root_irq_dir || (irq_desc[irq].handler == &no_irq_type) ||
  1037. irq_dir[irq])
  1038. return;
  1039. memset(name, 0, MAX_NAMELEN);
  1040. sprintf(name, "%d", irq);
  1041. /* create /proc/irq/1234 */
  1042. irq_dir[irq] = proc_mkdir(name, root_irq_dir);
  1043. #if CONFIG_SMP
  1044. {
  1045. struct proc_dir_entry *entry;
  1046. /* create /proc/irq/1234/smp_affinity */
  1047. entry = create_proc_entry("smp_affinity", 0600, irq_dir[irq]);
  1048. if (entry) {
  1049. entry->nlink = 1;
  1050. entry->data = (void *)(long)irq;
  1051. entry->read_proc = irq_affinity_read_proc;
  1052. entry->write_proc = irq_affinity_write_proc;
  1053. }
  1054. smp_affinity_entry[irq] = entry;
  1055. }
  1056. #endif
  1057. }
  1058. unsigned long prof_cpu_mask = -1;
  1059. void init_irq_proc (void)
  1060. {
  1061. struct proc_dir_entry *entry;
  1062. int i;
  1063. /* create /proc/irq */
  1064. root_irq_dir = proc_mkdir("irq", 0);
  1065. /* create /proc/irq/prof_cpu_mask */
  1066. entry = create_proc_entry("prof_cpu_mask", 0600, root_irq_dir);
  1067. if (!entry)
  1068.     return;
  1069. entry->nlink = 1;
  1070. entry->data = (void *)&prof_cpu_mask;
  1071. entry->read_proc = prof_cpu_mask_read_proc;
  1072. entry->write_proc = prof_cpu_mask_write_proc;
  1073. /*
  1074.  * Create entries for all existing IRQs.
  1075.  */
  1076. for (i = 0; i < NR_IRQS; i++)
  1077. register_irq_proc(i);
  1078. }