1. 25 11月, 2011 1 次提交
  2. 17 11月, 2011 7 次提交
  3. 16 11月, 2011 9 次提交
    • G
      powerpc/ps3: Fix SMP lockdep boot warning · 7eaf09ee
      Geoff Levand 提交于
      Move the PS3 IPI message setup from ps3_smp_setup_cpu() to ps3_smp_probe().
      
      Fixes startup warnings like these:
      
        ------------[ cut here ]------------
        WARNING: at kernel/lockdep.c:2649
        Modules linked in:
        ...
        ---[ end trace 31fd0ba7d8756001 ]---
      Signed-off-by: NGeoff Levand <geoff@infradead.org>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      7eaf09ee
    • G
      powerpc/ps3: Fix lost SMP IPIs · 72f3bea0
      Geoff Levand 提交于
      Fixes the PS3 bootup hang introduced in 3.0-rc1 by:
      
        commit 317f3941
        sched: Move the second half of ttwu() to the remote cpu
      
      Move the PS3's LV1 EOI call lv1_end_of_interrupt_ext() from ps3_chip_eoi()
      to ps3_get_irq() for IPI messages.
      
      If lv1_send_event_locally() is called between a previous call to
      lv1_send_event_locally() and the coresponding call to
      lv1_end_of_interrupt_ext() the second event will not be delivered to the
      target cpu.
      
      The PS3's SMP IPIs are implemented using lv1_send_event_locally(), so if two
      IPI messages of the same type are sent to the same target in a relatively
      short period of time the second IPI event can become lost when
      lv1_end_of_interrupt_ext() is called from ps3_chip_eoi().
      
      CC: stable@kernel.org
      Signed-off-by: NGeoff Levand <geoff@infradead.org>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      72f3bea0
    • M
      powerpc: Add hvcall.h include to book3s_hv.c · de1d9248
      Michael Neuling 提交于
      If you build with KVM and UP it fails with the following due to a
      missing include.
      
      /arch/powerpc/kvm/book3s_hv.c: In function 'do_h_register_vpa':
      arch/powerpc/kvm/book3s_hv.c:156:10: error: 'H_PARAMETER' undeclared (first use in this function)
      arch/powerpc/kvm/book3s_hv.c:156:10: note: each undeclared identifier is reported only once for each function it appears in
      arch/powerpc/kvm/book3s_hv.c:192:12: error: 'H_RESOURCE' undeclared (first use in this function)
      arch/powerpc/kvm/book3s_hv.c:222:9: error: 'H_SUCCESS' undeclared (first use in this function)
      arch/powerpc/kvm/book3s_hv.c: In function 'kvmppc_pseries_do_hcall':
      arch/powerpc/kvm/book3s_hv.c:228:30: error: 'H_SUCCESS' undeclared (first use in this function)
      arch/powerpc/kvm/book3s_hv.c:232:7: error: 'H_CEDE' undeclared (first use in this function)
      arch/powerpc/kvm/book3s_hv.c:234:7: error: 'H_PROD' undeclared (first use in this function)
      arch/powerpc/kvm/book3s_hv.c:238:10: error: 'H_PARAMETER' undeclared (first use in this function)
      arch/powerpc/kvm/book3s_hv.c:250:7: error: 'H_CONFER' undeclared (first use in this function)
      arch/powerpc/kvm/book3s_hv.c:252:7: error: 'H_REGISTER_VPA' undeclared (first use in this function)
      make[2]: *** [arch/powerpc/kvm/book3s_hv.o] Error 1
      Signed-off-by: NMichael Neuling <mikey@neuling.org>
      cc: stable@kernel.org (3.1 only)
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      de1d9248
    • K
      powerpc/trace: Add a dummy stack frame for trace_hardirqs_off · 2cd76629
      Kevin Hao 提交于
      The trace_hardirqs_off will use CALLER_ADDR0 and CALLER_ADDR1.
      If an exception occurs in user mode, there is only one stack frame
      on the stack and accessing the CALLER_ADDR1 will causes the following
      call trace. So we create a dummy stack frame to make
      trace_hardirqs_off happy.
      
      WARNING: at kernel/smp.c:459
      Modules linked in:
      NIP: c0093280 LR: c00930a0 CTR: c0010780
      REGS: edb87ae0 TRAP: 0700   Not tainted  (3.1.0)
      MSR: 00021002 <ME,CE>  CR: 28002888  XER: 00000000
      TASK = edce2ac0[17658] 'mthread-lock-on' THREAD: edb86000 CPU: 5
      GPR00: 00000001 edb87b90 edce2ac0 00000005 c0019594 edb87bd8 00000001 00000fe3
      GPR08: 00041000 c084138c 4e20120d edb87b90 48002888 1001aa7c 00000000 00000000
      GPR16: 48830000 10012a8c 00000000 10000af4 00000001 c0810000 00000000 00000000
      GPR24: ee9aa920 c0816a18 00000000 00000005 c0019594 edb87bd8 ee20178c edb87b90
      NIP [c0093280] smp_call_function_many+0x214/0x2b4
      LR [c00930a0] smp_call_function_many+0x34/0x2b4
      Call Trace:
      [edb87b90] [c00930a0] smp_call_function_many+0x34/0x2b4 (unreliable)
      [edb87bd0] [c00194ec] __flush_tlb_page+0xac/0x100
      [edb87c00] [c001957c] flush_tlb_page+0x3c/0x54
      [edb87c10] [c00180ac] ptep_set_access_flags+0x74/0x12c
      [edb87c40] [c0128068] handle_pte_fault+0x2f0/0x9ac
      [edb87cb0] [c0128c3c] handle_mm_fault+0x104/0x1dc
      [edb87ce0] [c05f40f4] do_page_fault+0x2dc/0x630
      [edb87e50] [c001078c] handle_page_fault+0xc/0x80
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      2cd76629
    • A
      powerpc: Copy down exception vectors after feature fixups · d715e433
      Anton Blanchard 提交于
      kdump fails because we try to execute an HV only instruction. Feature
      fixups are being applied after we copy the exception vectors down to 0
      so they miss out on any updates.
      
      We have always had this issue but it only became critical in v3.0
      when we added CFAR support (breaks POWER5) and v3.1 when we added
      POWERNV (breaks everyone).
      Signed-off-by: NAnton Blanchard <anton@samba.org>
      Cc: <stable@kernel.org> [v3.0+]
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      d715e433
    • A
      powerpc: panic if we can't instantiate RTAS · 6d1e2c6c
      Anton Blanchard 提交于
      I had to debug a strange situation where all manner of things were
      failing. SMT threads, storage and network were all completely broken.
      
      The root cause was we couldn't find enough memory to instantiate RTAS -
      this was a network install so the initrd was huge.
      
      Instead of limping along and failing in mysterious ways we should just
      panic up front if RTAS exists and we can't allocate space for it.
      Signed-off-by: NAnton Blanchard <anton@samba.org>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      6d1e2c6c
    • S
      powerpc/4xx: Fix typos in kexec config dependencies · bbc24a25
      Suzuki Poulose 提交于
      Kexec is not supported on 47x. 47x is a variant of 44x with slightly
      different MMU and SMP support. There was a typo in the config dependency
      for kexec. This patch fixes the same.
      Signed-off-by: NSuzuki K. Poulose <suzuki@in.ibm.com>
      Signed-off-by: NPaul Bolle <pebolle@tiscali.nl>
      Cc:	Kumar Gala <galak@kernel.crashing.org>
      Cc:	Josh Boyer <jwboyer@gmail.com>
      Cc:	linux ppc dev <linuxppc-dev@lists.ozlabs.org>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      bbc24a25
    • A
    • A
      powerpc: Fix build breakage in jump_label.c · 9c8b3907
      Al Viro 提交于
      Should do what other architectures do and wrap all that code into
      the appropriate ifdef
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      9c8b3907
  4. 15 11月, 2011 1 次提交
    • L
      fsl-rio: fix compile error · e0ce42e1
      Liu Gang 提交于
      The "#include <linux/module.h>" was replaced by "#include <linux/export.h>"
      in the patch "powerpc: various straight conversions from module.h --> export.h".
      This will cause the following compile problem:
      arch/powerpc/sysdev/fsl_rio.c: In function 'fsl_rio_mcheck_exception':
      arch/powerpc/sysdev/fsl_rio.c:296: error: implicit declaration of function 'search_exception_tables'.
      
      The file fsl_rio.c needs the declaration of function "search_exception_tables"
      in the header file "linux/module.h".
      Signed-off-by: NLiu Gang <Gang.Liu@freescale.com>
      Signed-off-by: NPaul Gortmaker <paul.gortmaker@windriver.com>
      e0ce42e1
  5. 08 11月, 2011 8 次提交
  6. 04 11月, 2011 6 次提交
  7. 03 11月, 2011 8 次提交
    • L
      arch/powerpc/sysdev/fsl_rio.c: release rapidio port I/O region resource if... · e80dd9a7
      Liu Gang 提交于
      arch/powerpc/sysdev/fsl_rio.c: release rapidio port I/O region resource if port failed to initialize
      
      The "struct rio_mport" contains a member of master port I/O memory
      resource structure "struct resource iores".  This resource will be read
      from device tree and be used for rapidio R/W transaction memory space.
      Rapidio requests the port I/O memory resource under the root resource
      "iomem_resource".
      
      			struct rio_mport *port;
      			port = kzalloc(sizeof(struct rio_mport), GFP_KERNEL);
      
      			request_resource(&iomem_resource, &port->iores);
      
      When port failed to initialize, allocated "rio_mport" structure memory
      will be freed, and the port I/O memory resource structure pointer
      "&port->iores" will be invalid.  If other requests resource under
      "iomem_resource", "&port->iores" node may be operated in the child
      resources list and this will cause the system to crash.
      
      So the requested port I/O memory resource should be released before
      freeing allocated "rio_mport" structure.
      Signed-off-by: NLiu Gang <Gang.Liu@freescale.com>
      Acked-by: NAlexandre Bounine <alexandre.bounine@idt.com>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Grant Likely <grant.likely@secretlab.ca>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      e80dd9a7
    • A
      thp: share get_huge_page_tail() · b35a35b5
      Andrea Arcangeli 提交于
      This avoids duplicating the function in every arch gup_fast.
      Signed-off-by: NAndrea Arcangeli <aarcange@redhat.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Hugh Dickins <hughd@google.com>
      Cc: Johannes Weiner <jweiner@redhat.com>
      Cc: Rik van Riel <riel@redhat.com>
      Cc: Mel Gorman <mgorman@suse.de>
      Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: David Gibson <david@gibson.dropbear.id.au>
      Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
      Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
      Cc: David Miller <davem@davemloft.net>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      b35a35b5
    • A
      powerpc: gup_huge_pmd() return 0 if pte changes · cf592bf7
      Andrea Arcangeli 提交于
      powerpc didn't return 0 in that case, if it's rolling back the *nr pointer
      it should also return zero to avoid adding pages to the array at the wrong
      offset.
      Signed-off-by: NAndrea Arcangeli <aarcange@redhat.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Hugh Dickins <hughd@google.com>
      Cc: Johannes Weiner <jweiner@redhat.com>
      Cc: Rik van Riel <riel@redhat.com>
      Cc: Mel Gorman <mgorman@suse.de>
      Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Acked-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
      Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
      Cc: David Miller <davem@davemloft.net>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      cf592bf7
    • A
      powerpc: gup_hugepte() support THP based tail recounting · 3526741f
      Andrea Arcangeli 提交于
      Up to this point the code assumed old refcounting for hugepages (pre-thp).
      This updates the code directly to the thp mapcount tail page refcounting.
      Signed-off-by: NAndrea Arcangeli <aarcange@redhat.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Hugh Dickins <hughd@google.com>
      Cc: Johannes Weiner <jweiner@redhat.com>
      Cc: Rik van Riel <riel@redhat.com>
      Cc: Mel Gorman <mgorman@suse.de>
      Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: David Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      3526741f
    • A
      powerpc: gup_hugepte() avoid freeing the head page too many times · 85964684
      Andrea Arcangeli 提交于
      We only taken "refs" pins on the head page not "*nr" pins.
      Signed-off-by: NAndrea Arcangeli <aarcange@redhat.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Hugh Dickins <hughd@google.com>
      Cc: Johannes Weiner <jweiner@redhat.com>
      Cc: Rik van Riel <riel@redhat.com>
      Cc: Mel Gorman <mgorman@suse.de>
      Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Acked-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      85964684
    • A
      powerpc: get_hugepte() don't put_page() the wrong page · 405e44f2
      Andrea Arcangeli 提交于
      "page" may have changed to point to the next hugepage after the loop
      completed, The references have been taken on the head page, so the
      put_page must happen there too.
      
      This is a longstanding issue pre-thp inclusion.
      
      It's totally unclear how these page_cache_add_speculative and
      pte_val(pte) != pte_val(*ptep) checks are necessary across all the
      powerpc gup_fast code, when x86 doesn't need any of that: there's no way
      the page can be freed with irq disabled so we're guaranteed the
      atomic_inc will happen on a page with page_count > 0 (so not needing the
      speculative check).
      
      The pte check is also meaningless on x86: no need to rollback on x86 if
      the pte changed, because the pte can still change a CPU tick after the
      check succeeded and it won't be rolled back in that case.  The important
      thing is we got a reference on a valid page that was mapped there a CPU
      tick ago.  So not knowing the soft tlb refill code of ppc64 in great
      detail I'm not removing the "speculative" page_count increase and the
      pte checks across all the code, but unless there's a strong reason for
      it they should be later cleaned up too.
      
      If a pte can change from huge to non-huge (like it could happen with
      THP) passing a pte_t *ptep to gup_hugepte() would also require to repeat
      the is_hugepd in gup_hugepte(), but that shouldn't happen with hugetlbfs
      only so I'm not altering that.
      Signed-off-by: NAndrea Arcangeli <aarcange@redhat.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Hugh Dickins <hughd@google.com>
      Cc: Johannes Weiner <jweiner@redhat.com>
      Cc: Rik van Riel <riel@redhat.com>
      Cc: Mel Gorman <mgorman@suse.de>
      Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Acked-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      405e44f2
    • A
      powerpc: remove superfluous PageTail checks on the pte gup_fast · 2839bdc1
      Andrea Arcangeli 提交于
      This part of gup_fast doesn't seem capable of handling hugetlbfs ptes,
      those should be handled by gup_hugepd only, so these checks are
      superfluous.
      
      Plus if this wasn't a noop, it would have oopsed because, the insistence
      of using the speculative refcounting would trigger a VM_BUG_ON if a tail
      page was encountered in the page_cache_get_speculative().
      Signed-off-by: NAndrea Arcangeli <aarcange@redhat.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Hugh Dickins <hughd@google.com>
      Cc: Johannes Weiner <jweiner@redhat.com>
      Cc: Rik van Riel <riel@redhat.com>
      Cc: Mel Gorman <mgorman@suse.de>
      Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Acked-by: NDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      2839bdc1
    • A
      mm: thp: tail page refcounting fix · 70b50f94
      Andrea Arcangeli 提交于
      Michel while working on the working set estimation code, noticed that
      calling get_page_unless_zero() on a random pfn_to_page(random_pfn)
      wasn't safe, if the pfn ended up being a tail page of a transparent
      hugepage under splitting by __split_huge_page_refcount().
      
      He then found the problem could also theoretically materialize with
      page_cache_get_speculative() during the speculative radix tree lookups
      that uses get_page_unless_zero() in SMP if the radix tree page is freed
      and reallocated and get_user_pages is called on it before
      page_cache_get_speculative has a chance to call get_page_unless_zero().
      
      So the best way to fix the problem is to keep page_tail->_count zero at
      all times.  This will guarantee that get_page_unless_zero() can never
      succeed on any tail page.  page_tail->_mapcount is guaranteed zero and
      is unused for all tail pages of a compound page, so we can simply
      account the tail page references there and transfer them to
      tail_page->_count in __split_huge_page_refcount() (in addition to the
      head_page->_mapcount).
      
      While debugging this s/_count/_mapcount/ change I also noticed get_page is
      called by direct-io.c on pages returned by get_user_pages.  That wasn't
      entirely safe because the two atomic_inc in get_page weren't atomic.  As
      opposed to other get_user_page users like secondary-MMU page fault to
      establish the shadow pagetables would never call any superflous get_page
      after get_user_page returns.  It's safer to make get_page universally safe
      for tail pages and to use get_page_foll() within follow_page (inside
      get_user_pages()).  get_page_foll() is safe to do the refcounting for tail
      pages without taking any locks because it is run within PT lock protected
      critical sections (PT lock for pte and page_table_lock for
      pmd_trans_huge).
      
      The standard get_page() as invoked by direct-io instead will now take
      the compound_lock but still only for tail pages.  The direct-io paths
      are usually I/O bound and the compound_lock is per THP so very
      finegrined, so there's no risk of scalability issues with it.  A simple
      direct-io benchmarks with all lockdep prove locking and spinlock
      debugging infrastructure enabled shows identical performance and no
      overhead.  So it's worth it.  Ideally direct-io should stop calling
      get_page() on pages returned by get_user_pages().  The spinlock in
      get_page() is already optimized away for no-THP builds but doing
      get_page() on tail pages returned by GUP is generally a rare operation
      and usually only run in I/O paths.
      
      This new refcounting on page_tail->_mapcount in addition to avoiding new
      RCU critical sections will also allow the working set estimation code to
      work without any further complexity associated to the tail page
      refcounting with THP.
      Signed-off-by: NAndrea Arcangeli <aarcange@redhat.com>
      Reported-by: NMichel Lespinasse <walken@google.com>
      Reviewed-by: NMichel Lespinasse <walken@google.com>
      Reviewed-by: NMinchan Kim <minchan.kim@gmail.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Hugh Dickins <hughd@google.com>
      Cc: Johannes Weiner <jweiner@redhat.com>
      Cc: Rik van Riel <riel@redhat.com>
      Cc: Mel Gorman <mgorman@suse.de>
      Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: David Gibson <david@gibson.dropbear.id.au>
      Cc: <stable@kernel.org>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      70b50f94