1. 22 11月, 2006 1 次提交
    • D
      WorkStruct: Pass the work_struct pointer instead of context data · 65f27f38
      David Howells 提交于
      Pass the work_struct pointer to the work function rather than context data.
      The work function can use container_of() to work out the data.
      
      For the cases where the container of the work_struct may go away the moment the
      pending bit is cleared, it is made possible to defer the release of the
      structure by deferring the clearing of the pending bit.
      
      To make this work, an extra flag is introduced into the management side of the
      work_struct.  This governs auto-release of the structure upon execution.
      
      Ordinarily, the work queue executor would release the work_struct for further
      scheduling or deallocation by clearing the pending bit prior to jumping to the
      work function.  This means that, unless the driver makes some guarantee itself
      that the work_struct won't go away, the work function may not access anything
      else in the work_struct or its container lest they be deallocated..  This is a
      problem if the auxiliary data is taken away (as done by the last patch).
      
      However, if the pending bit is *not* cleared before jumping to the work
      function, then the work function *may* access the work_struct and its container
      with no problems.  But then the work function must itself release the
      work_struct by calling work_release().
      
      In most cases, automatic release is fine, so this is the default.  Special
      initiators exist for the non-auto-release case (ending in _NAR).
      Signed-Off-By: NDavid Howells <dhowells@redhat.com>
      65f27f38
  2. 15 11月, 2006 1 次提交
  3. 13 11月, 2006 1 次提交
    • D
      [PATCH] pci: don't try to remove sysfs files before they are setup. · d67afe5e
      David Miller 提交于
      The PCI sysfs attributes are created after the initial PCI bus scan.  With
      the addition of more return value checking and assertions in the device and
      sysfs layers we now can get dumps like this on sparc64:
      
      [   20.135032] Call Trace:
      [   20.135042]  [0000000000537f88] pci_remove_bus_device+0x30/0xc0
      [   20.135076]  [000000000078f890] pci_fill_in_pbm_cookies+0x98/0x440
      [   20.135109]  [000000000042e828] sabre_scan_bus+0x230/0x400
      [   20.135139]  [000000000078c710] pcibios_init+0x58/0xa0
      [   20.135159]  [0000000000416f14] init+0x9c/0x2e0
      [   20.135190]  [0000000000417a50] kernel_thread+0x38/0x60
      [   20.135211]  [0000000000417170] rest_init+0x18/0x40
      [   20.135514] PCI0(PBMB): Bus running at 33MHz
      
      It's triggering because removal of the "config" PCI sysfs file for the
      device fails.
      
      On sparc64, after probing the device, we'll delete the PCI device via
      pci_remove_bus_device() if we cannot find the firmware device tree node
      corresponding to it.
      
      This is fine, but at this point the sysfs files for the PCI device won't be
      setup yet.
      
      So we should not try to do anything in pci_remove_sysfs_dev_files() if
      pci_sysfs_init() has not run yet.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      Acked-by: NGreg Kroah-Hartman <gregkh@suse.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      d67afe5e
  4. 09 11月, 2006 2 次提交
  5. 04 11月, 2006 1 次提交
    • A
      PCI: Let PCI_MULTITHREAD_PROBE depend on BROKEN · bb44c308
      Adrian Bunk 提交于
      PCI_MULTITHREAD_PROBE is an interesting feature, but in its current state
      it seems to be more of a trap for users who accidentally enable it.
      
      This patch lets PCI_MULTITHREAD_PROBE depend on BROKEN for 2.6.19.
      
      The intention is to get this patch reversed in -mm as soon as it's in
      Linus' tree, and reverse it for 2.6.20 or 2.6.21 after the fallout of
      in-kernel problems PCI_MULTITHREAD_PROBE causes got fixed.
      
      (akpm: I get enough bug reports already)
      Signed-off-by: NAdrian Bunk <bunk@stusta.de>
      Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      bb44c308
  6. 28 10月, 2006 4 次提交
  7. 24 10月, 2006 1 次提交
    • L
      Revert unintentional and bogus change to drivers/pci/quirks.c · 0c0e4668
      Linus Torvalds 提交于
      In commit 4e8a5201 ("[PKT_SCHED] netem:
      Orphan SKB when adding to queue.") Davem mistakenly also included a
      temporary diff in his tree that disabled the pci_fixup_video VGA quirk,
      which broke sparc64.
      
      This reverts that part of the commit. Sayeth Davem:
      
        "Greg KH has a patch coming to you soon which will move that VGA code
         back into x86/x86_64/IA64 specific areas and will fix the sparc64
         problem properly."
      
      Special thanks to Claudio Martins <ctpm@ist.utl.pt> for noticing the
      error in the first place.
      
      Cc: Claudio Martins <ctpm@ist.utl.pt>
      Cc: David Miller <davem@davemloft.net>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      0c0e4668
  8. 23 10月, 2006 1 次提交
  9. 21 10月, 2006 1 次提交
  10. 19 10月, 2006 20 次提交
  11. 12 10月, 2006 1 次提交
    • A
      [PATCH] HT_IRQ must depend on PCI · fbab41cc
      Adrian Bunk 提交于
      CONFIG_PCI=n, CONFIG_HT_IRQ=y results in the following compile error:
      
      ...
        LD      vmlinux
      arch/i386/mach-generic/built-in.o: In function `apicid_to_node':
      summit.c:(.text+0x53): undefined reference to `apicid_2_node'
      arch/i386/kernel/built-in.o: In function `arch_setup_ht_irq':
      (.text+0xcf79): undefined reference to `write_ht_irq_low'
      arch/i386/kernel/built-in.o: In function `arch_setup_ht_irq':
      (.text+0xcf85): undefined reference to `write_ht_irq_high'
      arch/i386/kernel/built-in.o: In function `k7nops':
      alternative.c:(.data+0x1358): undefined reference to `mask_ht_irq'
      alternative.c:(.data+0x1360): undefined reference to `unmask_ht_irq'
      make[1]: *** [vmlinux] Error 1
      
      Bug report by Jesper Juhl.
      Signed-off-by: NAdrian Bunk <bunk@stusta.de>
      Cc: "Eric W. Biederman" <ebiederm@xmission.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      fbab41cc
  12. 05 10月, 2006 1 次提交
    • D
      IRQ: Maintain regs pointer globally rather than passing to IRQ handlers · 7d12e780
      David Howells 提交于
      Maintain a per-CPU global "struct pt_regs *" variable which can be used instead
      of passing regs around manually through all ~1800 interrupt handlers in the
      Linux kernel.
      
      The regs pointer is used in few places, but it potentially costs both stack
      space and code to pass it around.  On the FRV arch, removing the regs parameter
      from all the genirq function results in a 20% speed up of the IRQ exit path
      (ie: from leaving timer_interrupt() to leaving do_IRQ()).
      
      Where appropriate, an arch may override the generic storage facility and do
      something different with the variable.  On FRV, for instance, the address is
      maintained in GR28 at all times inside the kernel as part of general exception
      handling.
      
      Having looked over the code, it appears that the parameter may be handed down
      through up to twenty or so layers of functions.  Consider a USB character
      device attached to a USB hub, attached to a USB controller that posts its
      interrupts through a cascaded auxiliary interrupt controller.  A character
      device driver may want to pass regs to the sysrq handler through the input
      layer which adds another few layers of parameter passing.
      
      I've build this code with allyesconfig for x86_64 and i386.  I've runtested the
      main part of the code on FRV and i386, though I can't test most of the drivers.
      I've also done partial conversion for powerpc and MIPS - these at least compile
      with minimal configurations.
      
      This will affect all archs.  Mostly the changes should be relatively easy.
      Take do_IRQ(), store the regs pointer at the beginning, saving the old one:
      
      	struct pt_regs *old_regs = set_irq_regs(regs);
      
      And put the old one back at the end:
      
      	set_irq_regs(old_regs);
      
      Don't pass regs through to generic_handle_irq() or __do_IRQ().
      
      In timer_interrupt(), this sort of change will be necessary:
      
      	-	update_process_times(user_mode(regs));
      	-	profile_tick(CPU_PROFILING, regs);
      	+	update_process_times(user_mode(get_irq_regs()));
      	+	profile_tick(CPU_PROFILING);
      
      I'd like to move update_process_times()'s use of get_irq_regs() into itself,
      except that i386, alone of the archs, uses something other than user_mode().
      
      Some notes on the interrupt handling in the drivers:
      
       (*) input_dev() is now gone entirely.  The regs pointer is no longer stored in
           the input_dev struct.
      
       (*) finish_unlinks() in drivers/usb/host/ohci-q.c needs checking.  It does
           something different depending on whether it's been supplied with a regs
           pointer or not.
      
       (*) Various IRQ handler function pointers have been moved to type
           irq_handler_t.
      Signed-Off-By: NDavid Howells <dhowells@redhat.com>
      (cherry picked from 1b16e7ac850969f38b375e511e3fa2f474a33867 commit)
      7d12e780
  13. 04 10月, 2006 5 次提交
    • E
      [PATCH] htirq: tidy up the htirq code · 95d77884
      Eric W. Biederman 提交于
      This moves the declarations for the architecture helpers into
      include/linux/htirq.h from the generic include/linux/pci.h.  Hopefully this
      will make this distinction clearer.
      
      htirq.h is included where it is needed.
      
      The dependency on the msi code is fixed and removed.
      
      The Makefile is tidied up.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: Andi Kleen <ak@suse.de>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Greg KH <greg@kroah.com>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      95d77884
    • E
      [PATCH] msi: move the ia64 code into arch/ia64 · 03571e11
      Eric W. Biederman 提交于
      This is just a few makefile tweaks and some file renames.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: Andi Kleen <ak@suse.de>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Greg KH <greg@kroah.com>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      03571e11
    • E
      [PATCH] msi: refactor and move the msi irq_chip into the arch code · 3b7d1921
      Eric W. Biederman 提交于
      It turns out msi_ops was simply not enough to abstract the architecture
      specific details of msi.  So I have moved the resposibility of constructing
      the struct irq_chip to the architectures, and have two architecture specific
      functions arch_setup_msi_irq, and arch_teardown_msi_irq.
      
      For simple architectures those functions can do all of the work.  For
      architectures with platform dependencies they can call into the appropriate
      platform code.
      
      With this msi.c is finally free of assuming you have an apic, and this
      actually takes less code.
      
      The helpers for the architecture specific code are declared in the linux/msi.h
      to keep them separate from the msi functions used by drivers in linux/pci.h
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: Andi Kleen <ak@suse.de>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Greg KH <greg@kroah.com>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      3b7d1921
    • E
      [PATCH] msi: only use a single irq_chip for msi interrupts · 277bc33b
      Eric W. Biederman 提交于
      The logic works like this.
      
      Since we no longer track the state logic by hand in msi.c startup and shutdown
      are no longer needed.
      
      By updating msi_set_mask_bit to work on msi devices that do not implement a
      mask bit we can always call the mask/unmask functions.
      
      What we really have are mask and unmask so we use them to implement the .mask
      and .unmask functions instead of .enable and .disable.
      
      By switching to the handle_edge_irq handler we only need an ack function that
      moves the irq if necessary.  Which removes the old end and ack functions and
      their peculiar logic of sometimes disabling an irq.
      
      This removes the reliance on pre genirq irq handling methods.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: Andi Kleen <ak@suse.de>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Greg KH <greg@kroah.com>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      277bc33b
    • E
      [PATCH] msi: simplify msi sanity checks by adding with generic irq code · 1f80025e
      Eric W. Biederman 提交于
      Currently msi.c is doing sanity checks that make certain before an irq is
      destroyed it has no more users.
      
      By adding irq_has_action I can perform the test is a generic way, instead of
      relying on a msi specific data structure.
      
      By performing the core check in dynamic_irq_cleanup I ensure every user of
      dynamic irqs has a test present and we don't free resources that are in use.
      
      In msi.c this allows me to kill the attrib.state member of msi_desc and all of
      the assciated code to maintain it.
      
      To keep from freeing data structures when irq cleanup code is called to soon
      changing dyanamic_irq_cleanup is insufficient because there are msi specific
      data structures that are also not safe to free.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: Andi Kleen <ak@suse.de>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Greg KH <greg@kroah.com>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      1f80025e