1. 27 4月, 2011 1 次提交
  2. 10 3月, 2011 1 次提交
    • B
      powerpc/iseries: Fix early init access to lppaca · f2f6dad6
      Benjamin Herrenschmidt 提交于
      The combination of commit
      
      8154c5d2 and
      93c22703
      
      Broke boot on iSeries.
      
      The problem is that iSeries very early boot code, which generates
      the device-tree and runs before our normal early initializations
      does need access the lppaca's very early, before the PACA array is
      initialized, and in fact even before the boot PACA has been
      initialized (it contains all 0's at this stage).
      
      However, the first patch above makes that code use the new
      llpaca_of(cpu) accessor, which itself is changed by the second patch to
      use the PACA array.
      
      We fix that by reverting iSeries to directly dereferencing the array. In
      addition, we fix all iterators in the iSeries code to always skip CPU
      whose number is above 63 which is the maximum size of that array and
      the maximum number of supported CPUs on these machines.
      
      Additionally, we make sure the boot_paca is properly initialized
      in our early startup code.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      f2f6dad6
  3. 09 2月, 2010 1 次提交
  4. 11 3月, 2009 1 次提交
  5. 08 1月, 2009 1 次提交
  6. 19 7月, 2008 1 次提交
    • T
      nohz: prevent tick stop outside of the idle loop · b8f8c3cf
      Thomas Gleixner 提交于
      Jack Ren and Eric Miao tracked down the following long standing
      problem in the NOHZ code:
      
      	scheduler switch to idle task
      	enable interrupts
      
      Window starts here
      
      	----> interrupt happens (does not set NEED_RESCHED)
      	      	irq_exit() stops the tick
      
      	----> interrupt happens (does set NEED_RESCHED)
      
      	return from schedule()
      	
      	cpu_idle(): preempt_disable();
      
      Window ends here
      
      The interrupts can happen at any point inside the race window. The
      first interrupt stops the tick, the second one causes the scheduler to
      rerun and switch away from idle again and we end up with the tick
      disabled.
      
      The fact that it needs two interrupts where the first one does not set
      NEED_RESCHED and the second one does made the bug obscure and extremly
      hard to reproduce and analyse. Kudos to Jack and Eric.
      
      Solution: Limit the NOHZ functionality to the idle loop to make sure
      that we can not run into such a situation ever again.
      
      cpu_idle()
      {
      	preempt_disable();
      
      	while(1) {
      		 tick_nohz_stop_sched_tick(1); <- tell NOHZ code that we
      		 			          are in the idle loop
      
      		 while (!need_resched())
      		       halt();
      
      		 tick_nohz_restart_sched_tick(); <- disables NOHZ mode
      		 preempt_enable_no_resched();
      		 schedule();
      		 preempt_disable();
      	}
      }
      
      In hindsight we should have done this forever, but ... 
      
      /me grabs a large brown paperbag.
      
      Debugged-by: Jack Ren <jack.ren@marvell.com>, 
      Debugged-by: Neric miao <eric.y.miao@gmail.com>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      b8f8c3cf
  7. 20 12月, 2007 1 次提交
    • B
      [POWERPC] fix iSeries PCI resource management · 50c9bc2f
      Benjamin Herrenschmidt 提交于
      The way iSeries manages PCI IO and Memory resources is a bit strange
      and is based on overriding the content of those resources with home
      cooked ones afterward.
      
      This changes it a bit to better integrate with the new resource handling
      so that the "virtual" tokens that iSeries replaces resources with are
      done from the proper per-device fixup hook, and bridge resources are
      set to enclose that token space.  This fixes various things such as
      the output of /proc/iomem & ioports, among others.  This also fixes up
      various boot messages as well.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      50c9bc2f
  8. 11 12月, 2007 1 次提交
  9. 03 12月, 2007 2 次提交
    • S
      [POWERPC] iSeries: Fix sparse warnings in setup.c · 5db9abd9
      Stephen Rothwell 提交于
      arch/powerpc/platforms/iseries/setup.c:111:27: warning: constant 0x100000000 is so big it is long
      arch/powerpc/platforms/iseries/setup.c:113:23: warning: constant 0x100000000 is so big it is long
      arch/powerpc/platforms/iseries/setup.c:117:27: warning: constant 0x000fffffffffffff is so big it is long
      arch/powerpc/platforms/iseries/setup.c:127:28: warning: constant 0x100000000 is so big it is long
      arch/powerpc/platforms/iseries/setup.c:129:24: warning: constant 0x100000000 is so big it is long
      arch/powerpc/platforms/iseries/setup.c:233:5: warning: constant 0x000fffffffffffff is so big it is long
      arch/powerpc/platforms/iseries/setup.c:235:5: warning: constant 0x000fffffffffffff is so big it is long
      arch/powerpc/platforms/iseries/setup.c:319:6: warning: symbol 'mschunks_alloc' was not declared. Should it be static?
      arch/powerpc/platforms/iseries/setup.c:661:6: warning: symbol 'iSeries_early_setup' was not declared. Should it be static?
      Signed-off-by: NStephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      5db9abd9
    • S
      [POWERPC] iSeries: Declare iSeries_pci_final_fixup in pci.h · 26b6d5b1
      Stephen Rothwell 提交于
      Fixes sparse warning:
      arch/powerpc/platforms/iseries/pci.c:169:13: warning: symbol 'iSeries_pci_final_fixup' was not declared. Should it be static?
      Signed-off-by: NStephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      26b6d5b1
  10. 08 11月, 2007 1 次提交
  11. 03 10月, 2007 1 次提交
  12. 17 8月, 2007 1 次提交
  13. 28 6月, 2007 1 次提交
    • T
      [POWERPC] Move iSeries_tb_recal into its own late_initcall. · 71712b45
      Tony Breeds 提交于
      Currently iSeries will recalibrate the cputime_factors in the first
      settimeofday() call.
      
      It seems the reason for doing this is to ensure a resaonable time delta after
      time_init().  On current kernels (with udev), this call is made 40-60 seconds
      into the boot process, by moving it to a late initcall it is called
      approximately 5 seconds after time_init() is called.  This is sufficient to
      recalibrate the timebase.
      Signed-off-by: NTony Breeds <tony@bakeyournoodle.com>
      CC: Stephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      71712b45
  14. 27 4月, 2007 1 次提交
  15. 09 1月, 2007 1 次提交
  16. 04 12月, 2006 4 次提交
    • S
      [POWERPC] Fix cputable.h for combined build · 0470466d
      Stephen Rothwell 提交于
      Remove CPU_FTR_16M_PAGE from the cupfeatures mask at runtime on iSeries.
      Signed-off-by: NStephen Rothwell <sfr@canb.auug.org.au>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      0470466d
    • P
      [POWERPC] Distinguish POWER6 partition modes and tell userspace · 974a76f5
      Paul Mackerras 提交于
      This adds code to look at the properties firmware puts in the device
      tree to determine what compatibility mode the partition is in on
      POWER6 machines, and set the ELF aux vector AT_HWCAP and AT_PLATFORM
      entries appropriately.
      
      Specifically, we look at the cpu-version property in the cpu node(s).
      If that contains a "logical" PVR value (of the form 0x0f00000x), we
      call identify_cpu again with this PVR value.  A value of 0x0f000001
      indicates the partition is in POWER5+ compatibility mode, and a value
      of 0x0f000002 indicates "POWER6 architected" mode, with various
      extensions disabled.  We also look for various other properties:
      ibm,dfp, ibm,purr and ibm,spurr.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      974a76f5
    • B
      [POWERPC] Merge 32 and 64 bits asm-powerpc/io.h · 68a64357
      Benjamin Herrenschmidt 提交于
      powerpc: Merge 32 and 64 bits asm-powerpc/io.h
      
      The rework on io.h done for the new hookable accessors made it easier,
      so I just finished the work and merged 32 and 64 bits io.h for arch/powerpc.
      
      arch/ppc still uses the old version in asm-ppc, there is just too much gunk
      in there that I really can't be bothered trying to cleanup.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      68a64357
    • B
      [POWERPC] Allow hooking of PCI MMIO & PIO accessors on 64 bits · 4cb3cee0
      Benjamin Herrenschmidt 提交于
      This patch reworks the way iSeries hooks on PCI IO operations (both MMIO
      and PIO) and provides a generic way for other platforms to do so (we
      have need to do that for various other platforms).
      
      While reworking the IO ops, I ended up doing some spring cleaning in
      io.h and eeh.h which I might want to split into 2 or 3 patches (among
      others, eeh.h had a lot of useless stuff in it).
      
      A side effect is that EEH for PIO should work now (it used to pass IO
      ports down to the eeh address check functions which is bogus).
      
      Also, new are MMIO "repeat" ops, which other archs like ARM already had,
      and that we have too now: readsb, readsw, readsl, writesb, writesw,
      writesl.
      
      In the long run, I might also make EEH use the hooks instead
      of wrapping at the toplevel, which would make things even cleaner and
      relegate EEH completely in platforms/iseries, but we have to measure the
      performance impact there (though it's really only on MMIO reads)
      
      Since I also need to hook on ioremap, I shuffled the functions a bit
      there. I introduced ioremap_flags() to use by drivers who want to pass
      explicit flags to ioremap (and it can be hooked). The old __ioremap() is
      still there as a low level and cannot be hooked, thus drivers who use it
      should migrate unless they know they want the low level version.
      
      The patch "arch provides generic iomap missing accessors" (should be
      number 4 in this series) is a pre-requisite to provide full iomap
      API support with this patch.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      4cb3cee0
  17. 25 10月, 2006 1 次提交
  18. 24 10月, 2006 1 次提交
    • M
      [POWERPC] Move iSeries initrd logic into device tree · 41999295
      Michael Ellerman 提交于
      Remove the iSeries initrd logic, instead just store the initrd location and
      size in the device tree so generic code can do the rest for us.
      
      The iSeries code had a "feature" which the generic code lacks, ie. if the
      compressed initrd is bigger than the configured ram disk size, we make
      the ram disk size bigger. That's bogus, as the compressed size of the initrd
      tells us nothing about how big the ram disk needs to be. If the ram disk
      isn't big enough you just need to make CONFIG_BLK_DEV_RAM_SIZE larger.
      Signed-off-by: NMichael Ellerman <michael@ellerman.id.au>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      41999295
  19. 03 10月, 2006 1 次提交
  20. 25 9月, 2006 1 次提交
  21. 13 7月, 2006 2 次提交
  22. 03 7月, 2006 1 次提交
    • B
      [POWERPC] Add new interrupt mapping core and change platforms to use it · 0ebfff14
      Benjamin Herrenschmidt 提交于
      This adds the new irq remapper core and removes the old one.  Because
      there are some fundamental conflicts with the old code, like the value
      of NO_IRQ which I'm now setting to 0 (as per discussions with Linus),
      etc..., this commit also changes the relevant platform and driver code
      over to use the new remapper (so as not to cause difficulties later
      in bisecting).
      
      This patch removes the old pre-parsing of the open firmware interrupt
      tree along with all the bogus assumptions it made to try to renumber
      interrupts according to the platform. This is all to be handled by the
      new code now.
      
      For the pSeries XICS interrupt controller, a single remapper host is
      created for the whole machine regardless of how many interrupt
      presentation and source controllers are found, and it's set to match
      any device node that isn't a 8259.  That works fine on pSeries and
      avoids having to deal with some of the complexities of split source
      controllers vs. presentation controllers in the pSeries device trees.
      
      The powerpc i8259 PIC driver now always requests the legacy interrupt
      range. It also has the feature of being able to match any device node
      (including NULL) if passed no device node as an input. That will help
      porting over platforms with broken device-trees like Pegasos who don't
      have a proper interrupt tree.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      0ebfff14
  23. 01 7月, 2006 1 次提交
  24. 28 6月, 2006 2 次提交
  25. 24 5月, 2006 5 次提交
  26. 19 5月, 2006 5 次提交