1. 07 9月, 2013 4 次提交
  2. 04 9月, 2013 6 次提交
    • H
      s390/irq: rework irq subclass handling · 82003c3e
      Heiko Carstens 提交于
      Let's not add a function for every external interrupt subclass for
      which we need reference counting. Just have two register/unregister
      functions which have a subclass parameter:
      
      void irq_subclass_register(enum irq_subclass subclass);
      void irq_subclass_unregister(enum irq_subclass subclass);
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      82003c3e
    • H
      s390/irq: use hlists for external interrupt handler array · 50ce749d
      Heiko Carstens 提交于
      Use hlists for the hashed array of external interrupt handlers.
      Reduces the size of the array by 50% (2KB).
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      50ce749d
    • H
      s390/dumpstack: convert print_symbol to %pSR · 8237ac3c
      Heiko Carstens 提交于
      This is the same as what other architectures did.
      The change has also the advantage that there won't be any interleaving
      messages between printk() and print_symbol().
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      8237ac3c
    • H
    • H
      s390: update defconfig · 3b459c54
      Heiko Carstens 提交于
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      3b459c54
    • H
      s390/bpf,jit: fix address randomization · 4784955a
      Heiko Carstens 提交于
      Add misssing braces to hole calculation. This resulted in an addition
      instead of an substraction. Which in turn means that the jit compiler
      could try to write out of bounds of the allocated piece of memory.
      
      This bug was introduced with aa2d2c73 "s390/bpf,jit: address randomize
      and write protect jit code".
      
      Fixes this one:
      
      [   37.320956] Unable to handle kernel pointer dereference at virtual kernel address 000003ff80231000
      [   37.320984] Oops: 0011 [#1] PREEMPT SMP DEBUG_PAGEALLOC
      [   37.320993] Modules linked in: dm_multipath scsi_dh eadm_sch dm_mod ctcm fsm autofs4
      [   37.321007] CPU: 28 PID: 6443 Comm: multipathd Not tainted 3.10.9-61.x.20130829-s390xdefault #1
      [   37.321011] task: 0000004ada778000 ti: 0000004ae3304000 task.ti: 0000004ae3304000
      [   37.321014] Krnl PSW : 0704c00180000000 000000000012d1de (bpf_jit_compile+0x198e/0x23d0)
      [   37.321022]            R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:3 CC:0 PM:0 EA:3
                     Krnl GPRS: 000000004350207d 0000004a00000001 0000000000000007 000003ff80231002
      [   37.321029]            0000000000000007 000003ff80230ffe 00000000a7740000 000003ff80230f76
      [   37.321032]            000003ffffffffff 000003ff00000000 000003ff0000007d 000000000071e820
      [   37.321035]            0000004adbe99950 000000000071ea18 0000004af3d9e7c0 0000004ae3307b80
      [   37.321046] Krnl Code: 000000000012d1d0: 41305004            la      %r3,4(%r5)
                                000000000012d1d4: e330f0f80021        clg     %r3,248(%r15)
                               #000000000012d1da: a7240009            brc     2,12d1ec
                               >000000000012d1de: 50805000            st      %r8,0(%r5)
                                000000000012d1e2: e330f0f00004        lg      %r3,240(%r15)
                                000000000012d1e8: 41303004            la      %r3,4(%r3)
                                000000000012d1ec: e380f0e00004        lg      %r8,224(%r15)
                                000000000012d1f2: e330f0f00024        stg     %r3,240(%r15)
      [   37.321074] Call Trace:
      [   37.321077] ([<000000000012da78>] bpf_jit_compile+0x2228/0x23d0)
      [   37.321083]  [<00000000006007c2>] sk_attach_filter+0xfe/0x214
      [   37.321090]  [<00000000005d2d92>] sock_setsockopt+0x926/0xbdc
      [   37.321097]  [<00000000005cbfb6>] SyS_setsockopt+0x8a/0xe8
      [   37.321101]  [<00000000005ccaa8>] SyS_socketcall+0x264/0x364
      [   37.321106]  [<0000000000713f1c>] sysc_nr_ok+0x22/0x28
      [   37.321113]  [<000003fffce10ea8>] 0x3fffce10ea8
      [   37.321118] INFO: lockdep is turned off.
      [   37.321121] Last Breaking-Event-Address:
      [   37.321124]  [<000000000012d192>] bpf_jit_compile+0x1942/0x23d0
      [   37.321132]
      [   37.321135] Kernel panic - not syncing: Fatal exception: panic_on_oops
      
      Cc: stable@vger.kernel.org # v3.11
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      4784955a
  3. 30 8月, 2013 8 次提交
  4. 29 8月, 2013 1 次提交
    • M
      s390/mm: implement software referenced bits · 0944fe3f
      Martin Schwidefsky 提交于
      The last remaining use for the storage key of the s390 architecture
      is reference counting. The alternative is to make page table entries
      invalid while they are old. On access the fault handler marks the
      pte/pmd as young which makes the pte/pmd valid if the access rights
      allow read access. The pte/pmd invalidations required for software
      managed reference bits cost a bit of performance, on the other hand
      the RRBE/RRBM instructions to read and reset the referenced bits are
      quite expensive as well.
      Reviewed-by: NGerald Schaefer <gerald.schaefer@de.ibm.com>
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      0944fe3f
  5. 28 8月, 2013 3 次提交
  6. 22 8月, 2013 14 次提交
  7. 17 8月, 2013 1 次提交
    • G
      s390: Fix broken build · 215b28a5
      Guenter Roeck 提交于
      Fix this build error:
      
        In file included from fs/exec.c:61:0:
        arch/s390/include/asm/tlb.h:35:23: error: expected identifier or '(' before 'unsigned'
        arch/s390/include/asm/tlb.h:36:1: warning: no semicolon at end of struct or union [enabled by default]
        arch/s390/include/asm/tlb.h: In function 'tlb_gather_mmu':
        arch/s390/include/asm/tlb.h:57:5: error: 'struct mmu_gather' has no member named 'end'
      
      Broken due to commit 2b047252 ("Fix TLB gather virtual address range
      invalidation corner cases").
      
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: stable@vger.kernel.org
      Signed-off-by: NGuenter Roeck <linux@roeck-us.net>
      [ Oh well. We had build testing for ppc amd um, but no s390  - Linus ]
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      215b28a5
  8. 16 8月, 2013 1 次提交
    • L
      Fix TLB gather virtual address range invalidation corner cases · 2b047252
      Linus Torvalds 提交于
      Ben Tebulin reported:
      
       "Since v3.7.2 on two independent machines a very specific Git
        repository fails in 9/10 cases on git-fsck due to an SHA1/memory
        failures.  This only occurs on a very specific repository and can be
        reproduced stably on two independent laptops.  Git mailing list ran
        out of ideas and for me this looks like some very exotic kernel issue"
      
      and bisected the failure to the backport of commit 53a59fc6 ("mm:
      limit mmu_gather batching to fix soft lockups on !CONFIG_PREEMPT").
      
      That commit itself is not actually buggy, but what it does is to make it
      much more likely to hit the partial TLB invalidation case, since it
      introduces a new case in tlb_next_batch() that previously only ever
      happened when running out of memory.
      
      The real bug is that the TLB gather virtual memory range setup is subtly
      buggered.  It was introduced in commit 597e1c35 ("mm/mmu_gather:
      enable tlb flush range in generic mmu_gather"), and the range handling
      was already fixed at least once in commit e6c495a9 ("mm: fix the TLB
      range flushed when __tlb_remove_page() runs out of slots"), but that fix
      was not complete.
      
      The problem with the TLB gather virtual address range is that it isn't
      set up by the initial tlb_gather_mmu() initialization (which didn't get
      the TLB range information), but it is set up ad-hoc later by the
      functions that actually flush the TLB.  And so any such case that forgot
      to update the TLB range entries would potentially miss TLB invalidates.
      
      Rather than try to figure out exactly which particular ad-hoc range
      setup was missing (I personally suspect it's the hugetlb case in
      zap_huge_pmd(), which didn't have the same logic as zap_pte_range()
      did), this patch just gets rid of the problem at the source: make the
      TLB range information available to tlb_gather_mmu(), and initialize it
      when initializing all the other tlb gather fields.
      
      This makes the patch larger, but conceptually much simpler.  And the end
      result is much more understandable; even if you want to play games with
      partial ranges when invalidating the TLB contents in chunks, now the
      range information is always there, and anybody who doesn't want to
      bother with it won't introduce subtle bugs.
      
      Ben verified that this fixes his problem.
      Reported-bisected-and-tested-by: NBen Tebulin <tebulin@googlemail.com>
      Build-testing-by: NStephen Rothwell <sfr@canb.auug.org.au>
      Build-testing-by: NRichard Weinberger <richard.weinberger@gmail.com>
      Reviewed-by: NMichal Hocko <mhocko@suse.cz>
      Acked-by: NPeter Zijlstra <peterz@infradead.org>
      Cc: stable@vger.kernel.org
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      2b047252
  9. 29 7月, 2013 2 次提交