1. 03 12月, 2007 1 次提交
  2. 20 11月, 2007 3 次提交
  3. 19 11月, 2007 1 次提交
  4. 13 11月, 2007 1 次提交
    • B
      [POWERPC] Avoid unpaired stwcx. on some processors · b64f87c1
      Becky Bruce 提交于
      The context switch code in the kernel issues a dummy stwcx. to clear the
      reservation, as recommended by the architecture.  However, some processors
      can have issues if this stwcx to address A occurs while the reservation
      is already held to a different address B.  To avoid this problem, the dummy
      stwcx. needs to be paired with a dummy lwarx to the same address.
      
      This adds the dummy lwarx, and creates a cpu feature bit to indicate
      which cpus are affected.  Tested on mpc8641_hpcn_defconfig in
      arch/powerpc; build tested in arch/ppc.
      Signed-off-by: NBecky Bruce <becky.bruce@freescale.com>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      b64f87c1
  5. 09 11月, 2007 1 次提交
  6. 08 11月, 2007 2 次提交
    • P
      [POWERPC] Change fallocate to match unistd.h on powerpc · f2205fbb
      Patrick Mansfield 提交于
      Fix the fallocate system call on powerpc to match its unistd.h.
      
      This implies none of these system calls are currently working with the
      unistd.h sys call values:
      	fallocate
      	signalfd
      	timerfd
      	eventfd
      	sync_file_range2
      Signed-off-by: NPatrick Mansfield <patmans@us.ibm.com>
      Acked-by: NAnton Blanchard <anton@samba.org>
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      f2205fbb
    • P
      [POWERPC] Fix off-by-one error in setting decrementer on Book E/4xx (v2) · 43875cc0
      Paul Mackerras 提交于
      The decrementer in Book E and 4xx processors interrupts on the
      transition from 1 to 0, rather than on the 0 to -1 transition as on
      64-bit server and 32-bit "classic" (6xx/7xx/7xxx) processors.  At the
      moment we subtract 1 from the count of how many decrementer ticks are
      required before the next interrupt before putting it into the
      decrementer, which is correct for server/classic processors, but could
      possibly cause the interrupt to happen too early on Book E and 4xx if
      the timebase/decrementer frequency is low.
      
      This fixes the problem by making set_dec subtract 1 from the count for
      server and classic processors, instead of having the callers subtract
      1.  Since set_dec already had a bunch of ifdefs to handle different
      processor types, there is no net increase in ugliness. :)
      
      Note that calling set_dec(0) may not generate an interrupt on some
      processors.  To make sure that decrementer_set_next_event always calls
      set_dec with an interval of at least 1 tick, we set min_delta_ns of
      the decrementer_clockevent to correspond to 2 ticks (2 rather than 1
      to compensate for truncations in the conversions between ticks and
      ns).
      
      This also removes a redundant call to set the decrementer to
      0x7fffffff - it was already set to that earlier in timer_interrupt.
      Signed-off-by: NPaul Mackerras <paulus@samba.org>
      43875cc0
  7. 06 11月, 2007 1 次提交
  8. 01 11月, 2007 2 次提交
    • B
      [POWERPC] 4xx: Deal with 44x virtually tagged icache · b98ac05d
      Benjamin Herrenschmidt 提交于
      The 44x family has an interesting "feature" which is a virtually
      tagged instruction cache (yuck !). So far, we haven't dealt with
      it properly, which means we've been mostly lucky or people didn't
      report the problems, unless people have been running custom patches
      in their distro...
      
      This is an attempt at fixing it properly. I chose to do it by
      setting a global flag whenever we change a PTE that was previously
      marked executable, and flush the entire instruction cache upon
      return to user space when that happens.
      
      This is a bit heavy handed, but it's hard to do more fine grained
      flushes as the icbi instruction, on those processor, for some very
      strange reasons (since the cache is virtually mapped) still requires
      a valid TLB entry for reading in the target address space, which
      isn't something I want to deal with.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NJosh Boyer <jwboyer@linux.vnet.ibm.com>
      b98ac05d
    • B
      [POWERPC] 4xx: Fix 4xx flush_tlb_page() · e701d269
      Benjamin Herrenschmidt 提交于
      On 4xx CPUs, the current implementation of flush_tlb_page() uses
      a low level _tlbie() assembly function that only works for the
      current PID. Thus, invalidations caused by, for example, a COW
      fault triggered by get_user_pages() from a different context will
      not work properly, causing among other things, gdb breakpoints
      to fail.
      
      This patch adds a "pid" argument to _tlbie() on 4xx processors,
      and uses it to flush entries in the right context. FSL BookE
      also gets the argument but it seems they don't need it (their
      tlbivax form ignores the PID when invalidating according to the
      document I have).
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Acked-by: NKumar Gala <galak@kernel.crashing.org>
      Signed-off-by: NJosh Boyer <jwboyer@linux.vnet.ibm.com>
      e701d269
  9. 23 10月, 2007 3 次提交
    • O
      powerpc: Fix fallout from sg_page() changes · 5edadbd0
      Olof Johansson 提交于
      Fix fallout from 18dabf47:
      
      In file included from include/linux/dma-mapping.h:52,
                       from drivers/base/dma-mapping.c:10:
      include/asm/dma-mapping.h: In function 'dma_map_sg':
      include/asm/dma-mapping.h:288: error: 'struct scatterlist' has no member named 'page'
      include/asm/dma-mapping.h:288: error: 'struct scatterlist' has no member named 'page'
      include/asm/dma-mapping.h:288: error: 'struct scatterlist' has no member named 'page'
      include/asm/dma-mapping.h:289: error: 'struct scatterlist' has no member named 'page'
      include/asm/dma-mapping.h:290: error: 'struct scatterlist' has no member named 'page'
      include/asm/dma-mapping.h: In function 'dma_sync_sg_for_cpu':
      include/asm/dma-mapping.h:331: error: 'struct scatterlist' has no member named 'page'
      
      drivers/scsi/ps3rom.c: In function 'fetch_to_dev_buffer':
      drivers/scsi/ps3rom.c:150: error: 'struct scatterlist' has no member named 'page'
      Signed-off-by: NOlof Johansson <olof@lixom.net>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      5edadbd0
    • J
      Add CONFIG_DEBUG_SG sg validation · d6ec0842
      Jens Axboe 提交于
      Add a Kconfig entry which will toggle some sanity checks on the sg
      entry and tables.
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      d6ec0842
    • J
      Change table chaining layout · 18dabf47
      Jens Axboe 提交于
      Change the page member of the scatterlist structure to be an unsigned
      long, and encode more stuff in the lower bits:
      
      - Bits 0 and 1 zero: this is a normal sg entry. Next sg entry is located
        at sg + 1.
      - Bit 0 set: this is a chain entry, the next real entry is at ->page_link
        with the two low bits masked off.
      - Bit 1 set: this is the final entry in the sg entry. sg_next() will return
        NULL when passed such an entry.
      
      It's thus important that sg table users use the proper accessors to get
      and set the page member.
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      18dabf47
  10. 22 10月, 2007 3 次提交
  11. 20 10月, 2007 7 次提交
  12. 19 10月, 2007 4 次提交
    • N
      powerpc: lock bitops · 66ffb04c
      Nick Piggin 提交于
      Add non-trivial lock bitops implementation for powerpc.
      Signed-off-by: NNick Piggin <npiggin@suse.de>
      Acked-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Paul Mackerras <paulus@samba.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      66ffb04c
    • N
      bitops: introduce lock ops · 26333576
      Nick Piggin 提交于
      Introduce test_and_set_bit_lock / clear_bit_unlock bitops with lock semantics.
      Convert all architectures to use the generic implementation.
      Signed-off-by: NNick Piggin <npiggin@suse.de>
      Acked-By: NDavid Howells <dhowells@redhat.com>
      Cc: Richard Henderson <rth@twiddle.net>
      Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
      Cc: Russell King <rmk@arm.linux.org.uk>
      Cc: Haavard Skinnemoen <hskinnemoen@atmel.com>
      Cc: Bryan Wu <bryan.wu@analog.com>
      Cc: Mikael Starvik <starvik@axis.com>
      Cc: David Howells <dhowells@redhat.com>
      Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
      Cc: "Luck, Tony" <tony.luck@intel.com>
      Cc: Hirokazu Takata <takata@linux-m32r.org>
      Cc: Geert Uytterhoeven <geert@linux-m68k.org>
      Cc: Roman Zippel <zippel@linux-m68k.org>
      Cc: Greg Ungerer <gerg@uclinux.org>
      Cc: Ralf Baechle <ralf@linux-mips.org>
      Cc: Kyle McMartin <kyle@mcmartin.ca>
      Cc: Matthew Wilcox <willy@debian.org>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
      Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
      Cc: Paul Mundt <lethal@linux-sh.org>
      Cc: Kazumoto Kojima <kkojima@rr.iij4u.or.jp>
      Cc: Richard Curnow <rc@rc0.org.uk>
      Cc: William Lee Irwin III <wli@holomorphy.com>
      Cc: "David S. Miller" <davem@davemloft.net>
      Cc: Jeff Dike <jdike@addtoit.com>
      Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
      Cc: Miles Bader <uclinux-v850@lsi.nec.co.jp>
      Cc: Andi Kleen <ak@muc.de>
      Cc: Chris Zankel <chris@zankel.net>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      26333576
    • M
      powerpc: add scaled time accounting · 4603ac18
      Michael Neuling 提交于
      This adds POWERPC specific hooks for scaled time accounting.
      
      POWER6 includes a SPURR register.  The SPURR is based off the PURR register
      but is scaled based on CPU frequency and issue rates.  This gives a more
      accurate account of the instructions used per task.  The PURR and timebase
      will be constant relative to the wall clock, irrespective of the CPU
      frequency.
      
      This implementation reads the SPURR register in account_system_vtime which
      is only call called on context witch and hard and soft irq entry and exit.
      The percentage of user and system time is then estimated using the ratio of
      these accounted by the PURR.  If the SPURR is not present, the PURR read.
      
      An earlier implementation of this patch read the SPURR whenever the PURR
      was read, which included the system call entry and exit path.
      Unfortunately this showed a performance regression on lmbench runs, so was
      re-implemented.
      
      I've included the lmbench results here when run bare metal on POWER6.  1st
      column is the unpatch results.  2nd column is the results using the below
      patch and the 3rd is the % diff of these results from the base.  4th and
      5th columns are the results and % differnce from the base using the older
      patch (SPURR read in syscall entry/exit path).
      
                                    Base        Scaled-Acct     SPURR-in-syscall
                                   Result      Result  % diff    Result % diff
      Simple syscall:              0.3086      0.3086  0.0000    0.3452 11.8600
      Simple read:                 0.4591      0.4671  1.7425    0.5044 9.86713
      Simple write:                0.4364      0.4366  0.0458    0.4731 8.40971
      Simple stat:                 2.0055      2.0295  1.1967    2.0669 3.06158
      Simple fstat:                0.5962      0.5876  -1.442    0.6368 6.80979
      Simple open/close:           3.1283      3.1009  -0.875    3.2088 2.57328
      Select on 10 fd's:           0.8554      0.8457  -1.133    0.8667 1.32101
      Select on 100 fd's:          3.5292      3.6329  2.9383    3.6664 3.88756
      Select on 250 fd's:          7.9097      8.1881  3.5197    8.2242 3.97613
      Select on 500 fd's:          15.2659     15.836  3.7357    15.873 3.97814
      Select on 10 tcp fd's:       0.9576      0.9416  -1.670    0.9752 1.83792
      Select on 100 tcp fd's:      7.248       7.2254  -0.311    7.2685 0.28283
      Select on 250 tcp fd's:      17.7742     17.707  -0.375    17.749 -0.1406
      Select on 500 tcp fd's:      35.4258     35.25   -0.496    35.286 -0.3929
      Signal handler installation: 0.6131      0.6075  -0.913    0.647  5.52927
      Signal handler overhead:     2.0919      2.1078  0.7600    2.1831 4.35967
      Protection fault:            0.7345      0.7478  1.8107    0.8031 9.33968
      Pipe latency:                33.006      16.398  -50.31    33.475 1.42368
      AF_UNIX sock stream latency: 14.5093     30.910  113.03    30.715 111.692
      Process fork+exit:           219.8       222.8   1.3648    229.37 4.35623
      Process fork+execve:         876.14      873.28  -0.32     868.66 -0.8533
      Process fork+/bin/sh -c:     2830        2876.5  1.6431    2958   4.52296
      File /var/tmp/XXX write bw:  1193497     1195536 0.1708    118657 -0.5799
      Pagefaults on /var/tmp/XXX:  3.1272      3.2117  2.7020    3.2521 3.99398
      
      Also, kernel compile times show no difference with this patch applied.
      
      [pbadari@us.ibm.com: Avoid unnecessary PURR reading]
      Signed-off-by: NMichael Neuling <mikey@neuling.org>
      Cc: Balbir Singh <balbir@in.ibm.com>
      Cc: Jay Lan <jlan@engr.sgi.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NBadari Pulavarty <pbadari@us.ibm.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      4603ac18
    • R
      PM: Rework struct platform_suspend_ops · e6c5eb95
      Rafael J. Wysocki 提交于
      There is no reason why the .prepare() and .finish() methods in 'struct
      platform_suspend_ops' should take any arguments, since architectures don't use
      these methods' argument in any practically meaningful way (ie.  either the
      target system sleep state is conveyed to the platform by .set_target(), or
      there is only one suspend state supported and it is indicated to the PM core
      by .valid(), or .prepare() and .finish() aren't defined at all).   There also
      is no reason why .finish() should return any result.
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      Acked-by: NPavel Machek <pavel@ucw.cz>
      Cc: Len Brown <lenb@kernel.org>
      Cc: Greg KH <greg@kroah.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      e6c5eb95
  13. 17 10月, 2007 11 次提交