20 Nov, 2013

1 commit

  • Until now, the MSI architecture-specific functions could be overloaded
    using a fairly complex set of #define and compile-time
    conditionals. In order to prepare for the introduction of the msi_chip
    infrastructure, it is desirable to switch all those functions to use
    the 'weak' mechanism. This commit converts all the architectures that
    were overidding those MSI functions to use the new strategy.

    Note that we keep two separate, non-weak, functions
    default_teardown_msi_irqs() and default_restore_msi_irqs() for the
    default behavior of the arch_teardown_msi_irqs() and
    arch_restore_msi_irqs(), as the default behavior is needed by x86 PCI
    code.

    Signed-off-by: Thomas Petazzoni
    Acked-by: Bjorn Helgaas
    Acked-by: Benjamin Herrenschmidt
    Tested-by: Daniel Price
    Tested-by: Thierry Reding
    Cc: Benjamin Herrenschmidt
    Cc: Paul Mackerras
    Cc: linuxppc-dev@lists.ozlabs.org
    Cc: Martin Schwidefsky
    Cc: Heiko Carstens
    Cc: linux390@de.ibm.com
    Cc: linux-s390@vger.kernel.org
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Cc: H. Peter Anvin
    Cc: x86@kernel.org
    Cc: Russell King
    Cc: Tony Luck
    Cc: Fenghua Yu
    Cc: linux-ia64@vger.kernel.org
    Cc: Ralf Baechle
    Cc: linux-mips@linux-mips.org
    Cc: David S. Miller
    Cc: sparclinux@vger.kernel.org
    Cc: Chris Metcalf
    Signed-off-by: Jason Cooper

    Thomas Petazzoni
     

18 Oct, 2013

1 commit

  • commit 3f0116c3238a96bc18ad4b4acefe4e7be32fa861 upstream.

    Fengguang Wu, Oleg Nesterov and Peter Zijlstra tracked down
    a kernel crash to a GCC bug: GCC miscompiles certain 'asm goto'
    constructs, as outlined here:

    http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670

    Implement a workaround suggested by Jakub Jelinek.

    Reported-and-tested-by: Fengguang Wu
    Reported-by: Oleg Nesterov
    Reported-by: Peter Zijlstra
    Suggested-by: Jakub Jelinek
    Reviewed-by: Richard Henderson
    Cc: Linus Torvalds
    Cc: Andrew Morton
    Link: http://lkml.kernel.org/r/20131015062351.GA4666@gmail.com
    Signed-off-by: Ingo Molnar
    Signed-off-by: Greg Kroah-Hartman

    Ingo Molnar
     

14 Oct, 2013

1 commit

  • commit dbbfe487e5f3fc00c9fe5207d63309859704d12f upstream.

    Git commit 616498813b11ffef "s390: system call path micro optimization"
    introduced a regression in regard to system call restarting and inferior
    function calls via the ptrace interface. The pointer to the system call
    table needs to be loaded in sysc_sigpending if do_signal returns with
    TIF_SYSCALl set after it restored a system call context.

    Signed-off-by: Martin Schwidefsky
    Signed-off-by: Greg Kroah-Hartman

    Martin Schwidefsky
     

30 Aug, 2013

1 commit

  • commit 2b29a9fdcb92bfc6b6f4c412d71505869de61a56 upstream.

    Any uaccess between guest_enter and guest_exit could trigger a page fault,
    the page fault handler would handle it as a guest fault and translate a
    user address as guest address.

    Signed-off-by: Dominik Dingel
    Signed-off-by: Christian Borntraeger
    Signed-off-by: Paolo Bonzini
    Signed-off-by: Greg Kroah-Hartman

    Dominik Dingel
     

20 Aug, 2013

2 commits

  • commit 215b28a5308f3d332df2ee09ef11fda45d7e4a92 upstream.

    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 2b047252d0 ("Fix TLB gather virtual address range
    invalidation corner cases").

    Cc: Greg Kroah-Hartman
    Signed-off-by: Guenter Roeck
    [ Oh well. We had build testing for ppc amd um, but no s390 - Linus ]
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Guenter Roeck
     
  • commit 2b047252d087be7f2ba088b4933cd904f92e6fce upstream.

    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 53a59fc67f97 ("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 597e1c3580b7 ("mm/mmu_gather:
    enable tlb flush range in generic mmu_gather"), and the range handling
    was already fixed at least once in commit e6c495a96ce0 ("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: Ben Tebulin
    Build-testing-by: Stephen Rothwell
    Build-testing-by: Richard Weinberger
    Reviewed-by: Michal Hocko
    Acked-by: Peter Zijlstra
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Linus Torvalds
     

12 Aug, 2013

2 commits

  • commit 3b0040a47ad63f7147e9e7d2febb61a3b564bb90 upstream.

    The find_next_bit_left function is broken if used with an offset which
    is not a multiple of 64. The shift to mask the bits of a 64-bit word
    not to search is in the wrong direction, the result can be either a
    bit found smaller than the offset or failure to find a set bit.

    Signed-off-by: Martin Schwidefsky
    Signed-off-by: Greg Kroah-Hartman

    Martin Schwidefsky
     
  • commit 594712276e737961d30e11eae80d403b2b3815df upstream.

    Just add the new model number where appropiate.

    Signed-off-by: Heiko Carstens
    Signed-off-by: Martin Schwidefsky
    Signed-off-by: Greg Kroah-Hartman

    Heiko Carstens
     

24 Jun, 2013

1 commit

  • The following git commit changed the behavior of sscanf:

    commit 53809751ac230a3611b5cdd375f3389f3207d471
    Author: Jan Beulich
    Date: Mon Dec 17 16:01:31 2012 -0800
    sscanf: don't ignore field widths for numeric conversions

    This broke the WWPN and LUN sysfs attributes for s390 reipl and dump
    on panic.

    Example:

    $ echo 0x0123456701234567 > /sys/firmware/reipl/fcp/wwpn
    $ cat /sys/firmware/reipl/fcp/wwpn
    0x0001234567012345

    So fix this and use format strings that work also with the
    new sscanf implementation:

    $ echo 0x012345670123456789 > /sys/firmware/reipl/fcp/wwpn
    $ cat /sys/firmware/reipl/fcp/wwpn
    0x0123456701234567

    Cc: stable@vger.kernel.org # 3.8+
    Reviewed-by: Steffen Maier
    Signed-off-by: Michael Holzheu
    Signed-off-by: Martin Schwidefsky

    Michael Holzheu
     

19 Jun, 2013

4 commits

  • With git commit 996b4a7d "s390/mem_detect: remove artificial kdump
    memory types" the memory detection code got simplified.
    As a side effect the array that describes memory chunks may now
    contain empty (zeroed) entries.
    All call sites can handle this except for

    drivers/s390/char/zcore.c::zcore_memmap_open

    which has a really odd user space interface. The easiest fix is to
    change the memory hole handling code, so that no empty entries exist
    before the last valid entry is reached.

    Signed-off-by: Heiko Carstens
    Signed-off-by: Martin Schwidefsky

    Heiko Carstens
     
  • Without this patch drivers will get blamed (CONFIG_DMA_API_DEBUG=y)
    for not calling dma_mapping_error (even if they do).

    Signed-off-by: Sebastian Ott
    Acked-by: Gerald Schaefer
    Signed-off-by: Martin Schwidefsky

    Sebastian Ott
     
  • The map_page implementation of s390 returns DMA_ERROR_CODE in an error
    situation. Correctly test if a mapping was erroneous (DMA_ERROR_CODE is
    defined as ~0).

    Signed-off-by: Sebastian Ott
    Acked-by: Gerald Schaefer
    Signed-off-by: Martin Schwidefsky

    Sebastian Ott
     
  • In uniprocessor configurations, synchronize_irq() is defined in
    as a macro, and this function definition fails to
    compile.

    Reported-by: kbuild test robot
    Signed-off-by: Ben Hutchings
    Cc: stable@vger.kernel.org # 3.9
    Signed-off-by: Heiko Carstens
    Signed-off-by: Martin Schwidefsky

    Ben Hutchings
     

10 Jun, 2013

1 commit

  • All architectures must implement IRQ functions. Since various
    dependencies on !S390 were removed, there are various drivers that can
    be selected but will fail to link. Provide a dummy implementation of
    these functions for the !PCI case.

    Signed-off-by: Ben Hutchings
    Cc: stable@vger.kernel.org # 3.9
    Acked-by: David S. Miller
    Signed-off-by: Martin Schwidefsky

    Ben Hutchings
     

05 Jun, 2013

5 commits

  • When printing multi-line text using sclp_print, line endings are not
    correctly handled. The routine is expecting an EBCDIC new line character
    as line terminator while the input text is encoded in ASCII format.

    Fix this problem by modifying sclp_print to scan for ASCII new line
    characters.

    Signed-off-by: Peter Oberparleiter
    Signed-off-by: Martin Schwidefsky

    Peter Oberparleiter
     
  • Getting and Releasing the pgste lock has lock semantics. Make the
    code an explicit barrier.

    Signed-off-by: Christian Borntraeger
    Signed-off-by: Martin Schwidefsky

    Christian Borntraeger
     
  • In modify_prot_start we update the pgste value but never store it back
    into the original location. Lets save the calculated result, since
    modify_prot_commit will use the value of the pgste.

    Signed-off-by: Christian Borntraeger
    Signed-off-by: Martin Schwidefsky

    Christian Borntraeger
     
  • git commit dc7ee00d4771b321 "s390: lowcore stack pointer offsets"
    introduced a regression in regard to show_stack(). The stack pointer
    for the asynchronous and the panic stack in the lowcore now have an
    additional offset applied to them. This offset needs to be taken into
    account in the calculation for the low and high address for the stacks.

    Signed-off-by: Martin Schwidefsky

    Martin Schwidefsky
     
  • When doing the transition invalid->valid in the host page table for
    a guest, then the guest view of C/R is in the pgste. After validation
    the view is pgste OR real key. We must zero out the real key C/R to
    avoid guest over-indication for change (and reference).

    Touching the real key is ok also for the host: The change bit is
    tracked via write protection and the reference bit is also ok
    because set_pte_at was called and the page will be touched anyway
    soon. Furthermore architecture defines reference as "substantially
    accurate", over- and underindication are ok.

    Signed-off-by: Christian Borntraeger
    Signed-off-by: Martin Schwidefsky

    Christian Borntraeger
     

31 May, 2013

1 commit


28 May, 2013

2 commits


27 May, 2013

1 commit

  • IPIs might be lost when a cpu gets brought offline:

    When stop_machine executes its state machine there is a race window
    for the state STOPMACHINE_DISABLE_IRQ where the to be brought offline
    cpu might already have irqs disabled but a different cpu still may
    have irqs enabled.
    If the enabled cpu receives an interrupt and as a result sends an IPI
    to the to be offlined cpu in its bottom halve context, the IPI won't
    be noticed before the cpu is offline.

    In fact the race window is much larger since there is no guarantee
    when an IPI will be received.

    To fix this check for enqueued but not yet received IPIs in the
    cpu_disable() path and call the respective handlers before the cpu
    is marked offline.

    Reported-by: Juergen Doelle
    Signed-off-by: Heiko Carstens
    Signed-off-by: Martin Schwidefsky

    Heiko Carstens
     

22 May, 2013

3 commits

  • On s390 the prefix page and absolute zero pages are not correctly
    returned when reading /dev/mem. The reason is that the s390 asm/io.h
    file includes the asm-generic/io.h file which then defines
    xlate_dev_mem_ptr() and therefore overwrites the s390 specific
    version that does the correct swap operation for prefix and absolute
    zero pages. The problem is a regression that was introduced with git
    commit cd248341 (s390/pci: base support).

    To fix the problem add "#ifndef xlate_dev_mem_ptr" in asm-generic/io.h
    and "#define xlate_dev_mem_ptr" in asm/io.h. This ensures that the
    s390 version is used. For completeness also add the "#ifndef"
    construct for xlate_dev_kmem_ptr().

    Signed-off-by: Michael Holzheu
    Signed-off-by: Martin Schwidefsky

    Michael Holzheu
     
  • In dma_free_coherent call debug_dma_free_coherent before deallocating
    the memory to avoid a possible use after free.

    Reviewed-by: Gerald Schaefer
    Signed-off-by: Sebastian Ott
    Signed-off-by: Martin Schwidefsky

    Sebastian Ott
     
  • Pull s390 update from Martin Schwidefsky:
    "An additional sysfs attribute for channel paths and a couple of bux
    fixes"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
    s390/pgtable: fix ipte notify bit
    s390/xpram: mark xpram as non-rotational
    s390/smp: fix cpu re-scan vs. cpu state
    s390/cio: add channel ID sysfs attribute
    s390/ftrace: fix mcount adjustment
    s390: fix gmap_ipte_notifier vs. software dirty pages
    s390: disable pfmf for clear page instruction
    s390/disassembler: prevent endless loop in print_fn_code()
    s390: remove non existent reference to GENERIC_KERNEL_THREAD

    Linus Torvalds
     

17 May, 2013

2 commits


15 May, 2013

2 commits

  • Tony Jones reported that the ftrace self tests on s390 do not work:

    Testing dynamic ftrace ops #1: (0 0 0 0 0) FAILED!
    Testing tracer irqsoff:
    failed to start irqsoff tracer
    .. no entries found ..FAILED!
    Testing tracer wakeup:
    failed to start wakeup tracer
    .. no entries found ..FAILED!
    Testing tracer function_graph:
    Failed to init function_graph tracer, init returned -19
    FAILED!

    This happens because we forgot to adjust the instruction pointer that gets
    passed to the ftrace trace function by MCOUNT_INSN_SIZE.

    In addition change MCOUNT_INSN_SIZE to the correct value on 31 bit.
    It only worked so far because the to be patched instruction was identical.

    Reported-by: Tony Jones
    Signed-off-by: Heiko Carstens
    Signed-off-by: Martin Schwidefsky

    Heiko Carstens
     
  • On heavy paging load some guest cpus started to loop in gmap_ipte_notify.
    This was visible as stalled cpus inside the guest. The gmap_ipte_notifier
    tries to map a user page and then made sure that the pte is valid and
    writable. Turns out that with the software change bit tracking the pte
    can become read-only (and only software writable) if the page is clean.
    Since we loop in this code, the page would stay clean and, therefore,
    be never writable again.
    Let us just use fixup_user_fault, that guarantees to call handle_mm_fault.

    Signed-off-by: Christian Borntraeger
    Signed-off-by: Martin Schwidefsky

    Christian Borntraeger
     

11 May, 2013

1 commit


10 May, 2013

2 commits


08 May, 2013

1 commit

  • Faster kernel compiles by way of fewer unnecessary includes.

    [akpm@linux-foundation.org: fix fallout]
    [akpm@linux-foundation.org: fix build]
    Signed-off-by: Kent Overstreet
    Cc: Zach Brown
    Cc: Felipe Balbi
    Cc: Greg Kroah-Hartman
    Cc: Mark Fasheh
    Cc: Joel Becker
    Cc: Rusty Russell
    Cc: Jens Axboe
    Cc: Asai Thambi S P
    Cc: Selvan Mani
    Cc: Sam Bradshaw
    Cc: Jeff Moyer
    Cc: Al Viro
    Cc: Benjamin LaHaise
    Reviewed-by: "Theodore Ts'o"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Kent Overstreet
     

07 May, 2013

4 commits

  • Wit the introduction of large pages Linux also used pfmf for page
    clearing. The current implementation is not ideal, though:
    - currently we set usage intent=0, but cleared pages are often used
    directly after the clearing
    - z/VM does not yet provide EDAT
    - KVM does have to intercept PFMF even for resident pages

    Lets just the mvcl loop in all cases until we have a well defined
    pattern were pfmf is besser.

    Signed-off-by: Christian Borntraeger
    Signed-off-by: Martin Schwidefsky

    Christian Borntraeger
     
  • If the size of the opcode to be printed is larger than "len" we'll
    see an overflow of an unsigned long value, which means that the
    while loop within print_fn_code() will loop quite a long time until
    there is the next chance for an exit.
    So add an early exit check.

    Reported-by: Christian Ehrhardt
    Signed-off-by: Heiko Carstens
    Signed-off-by: Martin Schwidefsky

    Heiko Carstens
     
  • Signed-off-by: Alexander Shiyan
    Signed-off-by: Heiko Carstens
    Signed-off-by: Martin Schwidefsky

    Alexander Shiyan
     
  • Pull more s390 updates from Martin Schwidefsky:
    "This is the second batch of s390 patches for the 3.10 merge window.

    Heiko improved the memory detection, this fixes kdump for large memory
    sizes. Some kvm related memory management work, new ipldev/condev
    keywords in cio and bug fixes."

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
    s390/mem_detect: remove artificial kdump memory types
    s390/mm: add pte invalidation notifier for kvm
    s390/zcrypt: ap bus rescan problem when toggle crypto adapters on/off
    s390/memory hotplug,sclp: get rid of per memory increment usecount
    s390/memory hotplug: provide memory_block_size_bytes() function
    s390/mem_detect: limit memory detection loop to "mem=" parameter
    s390/kdump,bootmem: fix bootmem allocator bitmap size
    s390: get rid of odd global real_memory_size
    s390/kvm: Change the virtual memory mapping location for Virtio devices
    s390/zcore: calculate real memory size using own get_mem_size function
    s390/mem_detect: add DAT sanity check
    s390/mem_detect: fix lockdep irq tracing
    s390/mem_detect: move memory detection code to mm folder
    s390/zfcpdump: exploit new cio_ignore keywords
    s390/cio: add condev keyword to cio_ignore
    s390/cio: add ipldev keyword to cio_ignore
    s390/uaccess: add "fallthrough" comments

    Linus Torvalds
     

06 May, 2013

1 commit

  • Pull kvm updates from Gleb Natapov:
    "Highlights of the updates are:

    general:
    - new emulated device API
    - legacy device assignment is now optional
    - irqfd interface is more generic and can be shared between arches

    x86:
    - VMCS shadow support and other nested VMX improvements
    - APIC virtualization and Posted Interrupt hardware support
    - Optimize mmio spte zapping

    ppc:
    - BookE: in-kernel MPIC emulation with irqfd support
    - Book3S: in-kernel XICS emulation (incomplete)
    - Book3S: HV: migration fixes
    - BookE: more debug support preparation
    - BookE: e6500 support

    ARM:
    - reworking of Hyp idmaps

    s390:
    - ioeventfd for virtio-ccw

    And many other bug fixes, cleanups and improvements"

    * tag 'kvm-3.10-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (204 commits)
    kvm: Add compat_ioctl for device control API
    KVM: x86: Account for failing enable_irq_window for NMI window request
    KVM: PPC: Book3S: Add API for in-kernel XICS emulation
    kvm/ppc/mpic: fix missing unlock in set_base_addr()
    kvm/ppc: Hold srcu lock when calling kvm_io_bus_read/write
    kvm/ppc/mpic: remove users
    kvm/ppc/mpic: fix mmio region lists when multiple guests used
    kvm/ppc/mpic: remove default routes from documentation
    kvm: KVM_CAP_IOMMU only available with device assignment
    ARM: KVM: iterate over all CPUs for CPU compatibility check
    KVM: ARM: Fix spelling in error message
    ARM: KVM: define KVM_ARM_MAX_VCPUS unconditionally
    KVM: ARM: Fix API documentation for ONE_REG encoding
    ARM: KVM: promote vfp_host pointer to generic host cpu context
    ARM: KVM: add architecture specific hook for capabilities
    ARM: KVM: perform HYP initilization for hotplugged CPUs
    ARM: KVM: switch to a dual-step HYP init code
    ARM: KVM: rework HYP page table freeing
    ARM: KVM: enforce maximum size for identity mapped code
    ARM: KVM: move to a KVM provided HYP idmap
    ...

    Linus Torvalds
     

03 May, 2013

1 commit