1. 02 8月, 2007 3 次提交
    • L
      Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev · b5625481
      Linus Torvalds 提交于
      * 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev:
        pata_sis: fix MWDMA for <= UDMA66 chipsets and UDMA for UDMA33 chipsets
        libata: blacklist SAMSUNG HD401LJ / ZZ100-15 for NCQ
        ata_piix: add Tecra M3 to broken suspend blacklist
        ata_piix: implement piix_borken_suspend()
        pci: rename __pci_reenable_device() to pci_reenable_device()
        libata-sff; Unbreak non DMA capable controllers again
        pata_cmd64x: Correct the speed ranges
      b5625481
    • T
      genirq: temporary fix for level-triggered IRQ resend · 0fc4969b
      Thomas Gleixner 提交于
      Marcin Slusarz reported a ne2k-pci "hung network interface" regression.
      
      delayed disable relies on the ability to re-trigger the interrupt in the
      case that a real interrupt happens after the software disable was set.
      In this case we actually disable the interrupt on the hardware level
      _after_ it occurred.
      
      On enable_irq, we need to re-trigger the interrupt. On i386 this relies
      on a hardware resend mechanism (send_IPI_self()).
      
      Actually we only need the resend for edge type interrupts. Level type
      interrupts come back once enable_irq() re-enables the interrupt line.
      
      I assume that the interrupt in question is level triggered because it is
      shared and above the legacy irqs 0-15:
      
      	17:         12   IO-APIC-fasteoi   eth1, eth0
      
      Looking into the IO_APIC code, the resend via send_IPI_self() happens
      unconditionally. So the resend is done for level and edge interrupts.
      This makes the problem more mysterious.
      
      The code in question lib8390.c does
      
      	disable_irq();
      	fiddle_with_the_network_card_hardware()
      	enable_irq();
      
      The fiddle_with_the_network_card_hardware() might cause interrupts,
      which are cleared in the same code path again,
      
      Marcin found that when he disables the irq line on the hardware level
      (removing the delayed disable) the card is kept alive.
      
      So the difference is that we can get a resend on enable_irq, when an
      interrupt happens during the time, where we are in the disabled region.
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      0fc4969b
    • H
      Fix WARN_ON() on bitfield ops for all other archs · fd0cbdd3
      Heiko Carstens 提交于
      Fixes WARN_ON() on bitfiels ops for all architectures that have
      been left out in 8d4fbcfb.
      
      Cc: Alexey Dobriyan <adobriyan@sw.ru>
      Cc: Herbert Xu <herbert@gondor.apana.org.au>
      Cc: Haavard Skinnemoen <hskinnemoen@atmel.com>
      Cc: Matthew Wilcox <matthew@wil.cx>
      Cc: Kyle McMartin <kyle@parisc-linux.org>
      Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
      Acked-by: NPaul Mundt <lethal@linux-sh.org>
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      fd0cbdd3
  2. 01 8月, 2007 37 次提交