1. 17 2月, 2007 1 次提交
  2. 16 2月, 2007 1 次提交
  3. 14 2月, 2007 3 次提交
  4. 13 2月, 2007 2 次提交
    • O
      [POWERPC] Mark winbond IDE PCI resources with start 0 as unassigned · 2d99c41f
      Olaf Hering 提交于
      libata calls pci_request_regions to claim PCI BAR 0 - 5
      pci_request_regions fails if one of the regions cant be claimed.
      bar 5 has start == 0,  __request_resource will fail.
      
      Tested on a p630 in SMP mode with pata_sl82c105
      
       00:03.1 IDE interface: Symphony Labs SL82c105 (rev 05) (prog-if 8f [Master SecP SecO PriP PriO])
               Control: I/O+ Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr+ Stepping- SERR+ FastB2B-
               Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
               Interrupt: pin A routed to IRQ 86
               Region 0: I/O ports at 3fd3000f000 [size=8]
               Region 1: I/O ports at 3fd3000f010 [size=4]
               Region 2: I/O ports at 3fd3000f020 [size=8]
               Region 3: I/O ports at 3fd3000f030 [size=4]
               Region 4: I/O ports at 3fd3000f040 [size=16]
               Region 5: I/O ports at 3fd30000000 [size=16]
       00: ad 10 05 01 41 01 80 02 05 8f 01 01 08 48 80 00
       10: 01 f0 00 00 11 f0 00 00 21 f0 00 00 31 f0 00 00
       20: 41 f0 00 00 01 00 00 00 00 00 00 00 00 00 00 00
       30: 00 00 00 00 00 00 00 00 00 00 00 00 56 01 02 28
       40: b3 08 ff 00 09 09 00 00 09 09 00 00 09 09 00 00
       50: 09 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00
       60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
       70: 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 00 00
       80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
       90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
       a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
       b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
       c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
       d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
       e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
       f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      
       name             "ide"
       linux,phandle    00d5cdc0 (14011840)
       assigned-addresses 81001910 00000000 0000f000 00000000 00000008 81001914
                        00000000 0000f010 00000000 00000004 81001918 00000000
                        0000f020 00000000 00000008 8100191c 00000000 0000f030
                        00000000 00000004 81001920 00000000 0000f040 00000000
                        00000010 81001924 00000000 00000000 00000000 00000010
       interrupts       00000003
       built-in
       #size-cells      00000000
       #address-cells   00000001
       device_type      "ide"
       reg              00001900 00000000 00000000 00000000 00000000
                        41001910 00000000 00000000 00000000 00000008
                        41001914 00000000 00000000 00000000 00000004
                        41001918 00000000 00000000 00000000 00000008
                        4100191c 00000000 00000000 00000000 00000004
                        41001920 00000000 00000000 00000000 00000010
                        41001924 00000000 00000000 00000000 00000010
       compatible       "pci10ad,105"
                        "pciclass,01018f"
       ibm,fw-slot-number 00000000
       fast-back-to-back
       devsel-speed     00000001
       max-latency      00000028 (40)
       min-grant        00000002
       class-code       0001018f (65935)
       revision-id      00000005
       device-id        00000105 (261)
       vendor-id        000010ad (4269)
       ibm,loc-code     "U0.1-P1/Q6"
      Signed-off-by: NOlaf Hering <olaf@aepfle.de>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      2d99c41f
    • A
      [PATCH] mark struct file_operations const 2 · 5dfe4c96
      Arjan van de Ven 提交于
      Many struct file_operations in the kernel can be "const".  Marking them const
      moves these to the .rodata section, which avoids false sharing with potential
      dirty data.  In addition it'll catch accidental writes at compile time to
      these shared resources.
      
      [akpm@osdl.org: sparc64 fix]
      Signed-off-by: NArjan van de Ven <arjan@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      5dfe4c96
  5. 12 2月, 2007 1 次提交
  6. 08 2月, 2007 1 次提交
  7. 07 2月, 2007 2 次提交
    • P
      [POWERPC] Make pSeries use the H_BULK_REMOVE hypervisor call · f03e64f2
      Paul Mackerras 提交于
      H_BULK_REMOVE lets us remove 4 entries from the MMU hash table with one
      hypervisor call.  This uses it in pSeries_lpar_hpte_invalidate so we
      can tear down mappings with fewer hypervisor calls.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      f03e64f2
    • L
      [POWERPC] pSeries: EEH improperly enabled for some Power4 systems · 25c4a46f
      Linas Vepstas 提交于
      It appears that EEH is improperly enabled for some Power4 systems.
      On these systems, the ibm,set-eeh-option returns a value of success
      even when EEH is not supported on the given node. Thus, an explicit
      check for support is required.
      
      During boot, on power4, without this patch, one sees messages
      similar to:
      
      EEH: event on unsupported device, rc=0 dn=/pci@400000000110/IBM,sp@1
      EEH: event on unsupported device, rc=0 dn=/pci@400000000110/pci@2
      EEH: event on unsupported device, rc=0 dn=/pci@400000000110/pci@2,2
      etc.
      
      The patch makes these go away.
      
      Without this patch, EEH recovery does seem to work correctly for
      at least some devices (I tested ethernet e1000), but fails to
      recover others (the Emulex LightPulse LPFC, most notably).
      Off the top of my head, I don't remember why some devices are
      affected, but not others.
      
      The PAPR indicates that the correct way to test for EEH is as
      done in this patch; its not clear to me if this was in the PAPR
      all along, or recently added; if it was there all along, its not
      clear to me why this hadn't been fixed long ago. I suspect only
      certain firmware levels are affected.
      Signed-off-by: NLinas Vepstas <linas@austin.ibm.com>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      25c4a46f
  8. 24 1月, 2007 2 次提交
  9. 22 1月, 2007 1 次提交
    • L
      [POWERPC] Fix broken DMA on non-LPAR pSeries · 77319254
      Linas Vepstas 提交于
      It appears that the iommu table address is never stored, and thus
      never found, on non-lpar systems. Thus, for example, during boot:
      
      <7>[   93.067916] PCI: Scanning bus 0001:41
      <7>[   93.068542] PCI: Found 0001:41:01.0 [8086/100f] 000200 00
      <7>[   93.068550] PCI: Calling quirk c0000000007822e0 for 0001:41:01.0
      <7>[   93.069815] PCI: Fixups for bus 0001:41
      <4>[   93.070167] iommu: Device 0001:41:01.0 has no iommu table
      <7>[   93.070251] PCI: Bus scan for 0001:41 returning with max=41
      
      No iommu table? How can that be? Well, circa line 471 of
      arch/powerpc/platforms/pseries/iommu.c we see the code:
      
         while (dn && PCI_DN(dn) && PCI_DN(dn)->iommu_table == NULL)
            dn = dn->parent;
      
      and a few lines later is the surprising print statement about
      the missing table.  Seems that this loop ran unto the end, never
      once finding a non-null PCI_DN(dn)->iommu_table.
      
      The problem can be found a few lines earlier: it sems that the
      value of PCI_DN(dn)->iommu_table is never ever set. Thus, the
      patch sets it.
      
      The patch was tested on a Power4 system running in full system
      partition mode, which is where I saw the problem. It works; I've
      not done any wider testing. Had a brief discussion on this on irc.
      Signed-off-by: NLinas Vepstas <linas@austin.ibm.com>
      Acked-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      77319254
  10. 09 1月, 2007 3 次提交
  11. 14 12月, 2006 1 次提交
    • R
      [PATCH] getting rid of all casts of k[cmz]alloc() calls · 5cbded58
      Robert P. J. Day 提交于
      Run this:
      
      	#!/bin/sh
      	for f in $(grep -Erl "\([^\)]*\) *k[cmz]alloc" *) ; do
      	  echo "De-casting $f..."
      	  perl -pi -e "s/ ?= ?\([^\)]*\) *(k[cmz]alloc) *\(/ = \1\(/" $f
      	done
      
      And then go through and reinstate those cases where code is casting pointers
      to non-pointers.
      
      And then drop a few hunks which conflicted with outstanding work.
      
      Cc: Russell King <rmk@arm.linux.org.uk>, Ian Molton <spyro@f2s.com>
      Cc: Mikael Starvik <starvik@axis.com>
      Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
      Cc: Roman Zippel <zippel@linux-m68k.org>
      Cc: Geert Uytterhoeven <geert@linux-m68k.org>
      Cc: Ralf Baechle <ralf@linux-mips.org>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Kyle McMartin <kyle@mcmartin.ca>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
      Cc: "David S. Miller" <davem@davemloft.net>
      Cc: Jeff Dike <jdike@addtoit.com>
      Cc: Greg KH <greg@kroah.com>
      Cc: Jens Axboe <jens.axboe@oracle.com>
      Cc: Paul Fulghum <paulkf@microgate.com>
      Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
      Cc: Karsten Keil <kkeil@suse.de>
      Cc: Mauro Carvalho Chehab <mchehab@infradead.org>
      Cc: Jeff Garzik <jeff@garzik.org>
      Cc: James Bottomley <James.Bottomley@steeleye.com>
      Cc: Ian Kent <raven@themaw.net>
      Cc: Steven French <sfrench@us.ibm.com>
      Cc: David Woodhouse <dwmw2@infradead.org>
      Cc: Neil Brown <neilb@cse.unsw.edu.au>
      Cc: Jaroslav Kysela <perex@suse.cz>
      Cc: Takashi Iwai <tiwai@suse.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      5cbded58
  12. 09 12月, 2006 3 次提交
  13. 08 12月, 2006 6 次提交
  14. 04 12月, 2006 6 次提交
    • Y
      [POWERPC] Replace kmalloc+memset with kzalloc · f8485350
      Yan Burman 提交于
      Replace kmalloc+memset with kzalloc.
      Signed-off-by: NYan Burman <burman.yan@gmail.com>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      f8485350
    • M
      [POWERPC] pSeries/kexec: Fix for interrupt distribution · a5715d6d
      Mohan Kumar M 提交于
      This allows any secondary CPU thread also to become boot cpu for
      POWER5.  The patch is required to solve kdump boot issue when the
      kdump kernel is booted with parameter "maxcpus=1".  XICS init code
      tries to match the current boot cpu id with "reg" property in each CPU
      node in the device tree.  But CPU node is created only for primary
      thread CPU ids and "reg" property only reflects primary CPU ids.  So
      when a kernel is booted on a secondary cpu thread above condition will
      never meet and the default distribution server is left as zero.  This
      leads to route the interrupts to CPU 0, but which is not online at
      this time.
      
      We use ibm,ppc-interrupt-server#s to check for both primary and
      secondary CPU ids.  Accordingly default distribution server value is
      initialized from "ibm,ppc-interrupt-gserver#s" property.  We loop
      through ibm,ppc-interrupt-gserver#s property to find the global
      distribution server from the last entry that matches with boot cpuid.
      Signed-off-by: NMohan Kumar M <mohan@in.ibm.com>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      a5715d6d
    • L
      [POWERPC] Wrap cpu_die() with CONFIG_HOTPLUG_CPU · 088df4d2
      Linas Vepstas 提交于
      Per email discussion, it appears that rtas_stop_self()
      and pSeries_mach_cpu_die() should not be compiled if
      CONFIG_HOTPLUG_CPU is not defined. This patch adds
      #ifdefs around these bits of code.
      Signed-off-by: NLinas Vepstas <linas@austin.ibm.com>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      088df4d2
    • B
      [POWERPC] Generic OF platform driver for PCI host bridges. · 4c9d2800
      Benjamin Herrenschmidt 提交于
      When enabled in Kconfig, it will pick up any of_platform_device
      matching it's match list (currently type "pci", "pcix", "pcie",
      or "ht" and setup a PHB for it.
      
      Platform must provide a ppc_md.pci_setup_phb() for it to work
      (for doing the necessary initialisations specific to a given PHB
      like setting up the config space ops).
      
      It's currently only available on 64 bits as the 32 bits PCI code
      can't quite cope with it in it's current form. I will fix that
      later.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      4c9d2800
    • B
      [POWERPC] Refactor 64 bits DMA operations · 12d04eef
      Benjamin Herrenschmidt 提交于
      This patch completely refactors DMA operations for 64 bits powerpc. 32 bits
      is untouched for now.
      
      We use the new dev_archdata structure to add the dma operations pointer
      and associated data to struct device. While at it, we also add the OF node
      pointer and numa node. In the future, we might want to look into merging
      that with pci_dn as well.
      
      The old vio, pci-iommu and pci-direct DMA ops are gone. They are now replaced
      by a set of generic iommu and direct DMA ops (non PCI specific) that can be
      used by bus types. The toplevel implementation is now inline.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      12d04eef
    • B
      [POWERPC] Make pci_read_irq_line the default · f90bb153
      Benjamin Herrenschmidt 提交于
      This patch reworks the way IRQs are fixed up on PCI for arch powerpc.
      
      It makes pci_read_irq_line() called by default in the PCI code for
      devices that are probed, and add an optional per-device fixup in
      ppc_md for platforms that really need to correct what they obtain
      from pci_read_irq_line().
      
      It also removes ppc_md.irq_bus_setup which was only used by pSeries
      and should not be needed anymore.
      
      I've also removed the pSeries s7a workaround as it can't work with
      the current interrupt code anyway. I'm trying to get one of these
      machines working so I can test a proper fix for that problem.
      
      I also haven't updated the old-style fixup code from 85xx_cds.c
      because it's actually buggy :) It assigns pci_dev->irq hard coded
      numbers which is no good with the new IRQ mapping code. It should
      at least use irq_create_mapping(NULL, hard_coded_number); and possibly
      also set_irq_type() to set them as level low.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      f90bb153
  15. 22 11月, 2006 1 次提交
  16. 01 11月, 2006 1 次提交
    • L
      [POWERPC] Use 4kB iommu pages even on 64kB-page systems · 5d2efba6
      Linas Vepstas 提交于
      The 10Gigabit ethernet device drivers appear to be able to chew
      up all 256MB of TCE mappings on pSeries systems, as evidenced by
      numerous error messages:
      
       iommu_alloc failed, tbl c0000000010d5c48 vaddr c0000000d875eff0 npages 1
      
      Some experimentation indicates that this is essentially because
      one 1500 byte ethernet MTU gets mapped as a 64K DMA region when
      the large 64K pages are enabled. Thus, it doesn't take much to
      exhaust all of the available DMA mappings for a high-speed card.
      
      This patch changes the iommu allocator to work with its own
      unique, distinct page size. Although the patch is long, its
      actually quite simple: it just #defines a distinct IOMMU_PAGE_SIZE
      and then uses this in all the places that matter.
      
      As a side effect, it also dramatically improves network performance
      on platforms with H-calls on iommu translation inserts/removes (since
      we no longer call it 16 times for a 1500 bytes packet when the iommu HW
      is still 4k).
      
      In the future, we might want to make the IOMMU_PAGE_SIZE a variable
      in the iommu_table instance, thus allowing support for different HW
      page sizes in the iommu itself.
      Signed-off-by: NLinas Vepstas <linas@austin.ibm.com>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Acked-by: NOlof Johansson <olof@lixom.net>
      Acked-by: NStephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      5d2efba6
  17. 16 10月, 2006 1 次提交
  18. 07 10月, 2006 1 次提交
  19. 06 10月, 2006 1 次提交
    • N
      [POWERPC] linux,tce-size property is 32 bits · 9938c474
      Nathan Lynch 提交于
      The "linux,tce-size" property is only 32 bits (see
      prom_initialize_tce_table() in arch/powerpc/kernel/prom_init.c).
      Treating it as an unsigned long in iommu_table_setparms() leads to
      access beyond the end of the property's buffer, so we pass garbage to
      the memset() in that function.
      
      [boot]0020 XICS Init
      i8259 legacy interrupt controller initialized
      [boot]0021 XICS Done
      PID hash table entries: 4096 (order: 12, 32768 bytes)
      cpu 0x0: Vector: 300 (Data Access) at [c0000000fe783850]
          pc: c000000000035e90: .memset+0x60/0xfc
          lr: c000000000044fa4: .iommu_table_setparms+0xb0/0x158
          sp: c0000000fe783ad0
         msr: 9000000000009032
         dar: c000000100000000
       dsisr: 42010000
        current = 0xc00000000450e810
        paca    = 0xc000000000411580
          pid   = 1, comm = swapper
      enter ? for help
      [link register   ] c000000000044fa4 .iommu_table_setparms+0xb0/0x158
      [c0000000fe783ad0] c000000000044f4c .iommu_table_setparms+0x58/0x158
      (unreliable)
      [c0000000fe783b70] c00000000004529c
      .iommu_bus_setup_pSeries+0x1c4/0x254
      [c0000000fe783c00] c00000000002b8ac .do_bus_setup+0x3c/0xe4
      [c0000000fe783c80] c00000000002c924 .pcibios_fixup_bus+0x64/0xd8
      [c0000000fe783d00] c0000000001a2d5c .pci_scan_child_bus+0x6c/0x10c
      [c0000000fe783da0] c00000000002be28 .scan_phb+0x17c/0x1b4
      [c0000000fe783e40] c0000000003cfa00 .pcibios_init+0x58/0x19c
      [c0000000fe783ec0] c0000000000094b4 .init+0x1e8/0x3d8
      [c0000000fe783f90] c000000000026e54 .kernel_thread+0x4c/0x68
      Signed-off-by: NNathan Lynch <ntl@pobox.com>
      Acked-by: NOlof Johansson <olof@lixom.net>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      9938c474
  20. 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
  21. 04 10月, 2006 1 次提交