1. 08 Mar, 2014 9 commits
    • Linus Torvalds's avatar
      Merge tag 'pm+acpi-3.14-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm · abfba60c
      Linus Torvalds authored
      Pull ACPI and power management fixes from Rafael Wysocki:
      
       - ACPI tables in some BIOSes list device resources with size equal to
         0, which doesn't make sense, so we should ignore them, but instead we
         try to use them and mangle things completely.  Fix from Zhang Rui.
      
       - Several models of Samsung laptops accumulate EC events when they are
         in sleep states which leads to EC buffer overflows that prevent new
         events from being signaled after system resume or reboot.  This has
         been affecting many users for quite a while and may be addressed by
         clearing the EC buffer during system resume and system startup on
         those machines.  From Kieran Clancy.
      
       - If the ACPI sleep control and status registers are not present (which
         happens if the Hardware Reduced ACPI mode bit is set in the ACPI
         tables, but also may result from BIOS bugs), we should not try to use
         ACPI to power off the system and ACPI S5 should not be listed as
         supported.  Fix from Aubrey Li.
      
       - There's a race condition in cpufreq_get() that leads to a kernel
         crash if that function is called at a wrong time.  Fix from Aaron
         Plattner.
      
       - cpufreq policy objects have to be initialized entirely before they
         are first accessed by their users which isn't the case currently and
         that potentially leads to various kinds of breakage that is difficult
         to debug.  Fix from Viresh Kumar.
      
       - Locking is missing in __cpufreq_add_dev() which leads to a race
         condition that may trigger a kernel crash.  Fix from Viresh Kumar.
      
      * tag 'pm+acpi-3.14-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
        ACPI / EC: Clear stale EC events on Samsung systems
        cpufreq: Initialize governor for a new policy under policy->rwsem
        cpufreq: Initialize policy before making it available for others to use
        cpufreq: use cpufreq_cpu_get() to avoid cpufreq_get() race conditions
        ACPI / sleep: pm_power_off needs more sanity checks to be installed
        ACPI / resources: ignore invalid ACPI device resources
      abfba60c
    • Linus Torvalds's avatar
      x86: fix compile error due to X86_TRAP_NMI use in asm files · b01d4e68
      Linus Torvalds authored
      It's an enum, not a #define, you can't use it in asm files.
      
      Introduced in commit 5fa10196 ("x86: Ignore NMIs that come in during
      early boot"), and sadly I didn't compile-test things like I should have
      before pushing out.
      
      My weak excuse is that the x86 tree generally doesn't introduce stupid
      things like this (and the ARM pull afterwards doesn't cause me to do a
      compile-test either, since I don't cross-compile).
      
      Cc: Don Zickus <dzickus@redhat.com>
      Cc: H. Peter Anvin <hpa@linux.intel.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      b01d4e68
    • Linus Torvalds's avatar
      Merge branch 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm · 4d7eaa12
      Linus Torvalds authored
      Pull ARM fixes from Russell King:
       "A number of ARM updates for -rc, covering mostly ARM specific code,
        but with one change to modpost.c to allow Thumb section mismatches to
        be detected.
      
        ARM changes include reporting when an attempt is made to boot a LPAE
        kernel on hardware which does not support LPAE, rather than just being
        silent about it.
      
        A number of other minor fixes are included too"
      
      * 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm:
        ARM: 7992/1: boot: compressed: ignore bswapsdi2.S
        ARM: 7991/1: sa1100: fix compile problem on Collie
        ARM: fix noMMU kallsyms symbol filtering
        ARM: 7980/1: kernel: improve error message when LPAE config doesn't match CPU
        ARM: 7964/1: Detect section mismatches in thumb relocations
        ARM: 7963/1: mm: report both sections from PMD
      4d7eaa12
    • Linus Torvalds's avatar
      Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 95648c0e
      Linus Torvalds authored
      Pull x86 fixes from Peter Anvin:
       "A small collection of minor fixes.  The FPU stuff is still pending, I
        fear.  I haven't heard anything from Suresh so I suspect I'm going to
        have to dig into the init specifics myself and fix up the patchset"
      
      * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86: Ignore NMIs that come in during early boot
        x86, trace: Further robustify CR2 handling vs tracing
        x86, trace: Fix CR2 corruption when tracing page faults
        x86/efi: Quirk out SGI UV
      95648c0e
    • Linus Torvalds's avatar
      Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc · 9579f10d
      Linus Torvalds authored
      Pull power fixes from Ben Herrenschmidt:
       "Here are a couple of powerpc fixes for 3.14.
      
        One is (another!) nasty TM problem, we can crash the kernel by forking
        inside a transaction.  The other one is a simple fix for an alignment
        issue which can hurt in LE mode"
      
      * 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
        powerpc: Align p_dyn, p_rela and p_st symbols
        powerpc/tm: Fix crash when forking inside a transaction
      9579f10d
    • Linus Torvalds's avatar
      Merge tag 'trace-fixes-v3.14-rc5' of... · 721f0c12
      Linus Torvalds authored
      Merge tag 'trace-fixes-v3.14-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace
      
      Pull tracing fix from Steven Rostedt:
       "In the past, I've had lots of reports about trace events not working.
        Developers would say they put a trace_printk() before and after the
        trace event but when they enable it (and the trace event said it was
        enabled) they would see the trace_printks but not the trace event.
      
        I was not able to reproduce this, but that's because I wasn't looking
        at the right location.  Recently, another bug came up that showed the
        issue.
      
        If your kernel supports signed modules but allows for non-signed
        modules to be loaded, then when one is, the kernel will silently set
        the MODULE_FORCED taint on the module.  Although, this taint happens
        without the need for insmod --force or anything of the kind, it labels
        the module with that taint anyway.
      
        If this tainted module has tracepoints, the tracepoints will be
        ignored because of the MODULE_FORCED taint.  But no error message will
        be displayed.  Worse yet, the event infrastructure will still be
        created letting users enable the trace event represented by the
        tracepoint, although that event will never actually be enabled.  This
        is because the tracepoint infrastructure allows for non-existing
        tracepoints to be enabled for new modules to arrive and have their
        tracepoints set.
      
        Although there are several things wrong with the above, this change
        only addresses the creation of the trace event files for tracepoints
        that are not created when a module is loaded and is tainted.  This
        change will print an error message about the module being tainted and
        not the trace events will not be created, and it does not create the
        trace event infrastructure"
      
      * tag 'trace-fixes-v3.14-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace:
        tracing: Do not add event files for modules that fail tracepoints
      721f0c12
    • Linus Torvalds's avatar
      Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 27ea0f78
      Linus Torvalds authored
      Pull irq fixes from Thomas Gleixner:
       - a bugfix for a long standing waitqueue race
       - a trivial fix for a missing include
      
      * 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        genirq: Include missing header file in irqdomain.c
        genirq: Remove racy waitqueue_active check
      27ea0f78
    • Rafael J. Wysocki's avatar
      Merge branch 'pm-cpufreq' · 19bc45a5
      Rafael J. Wysocki authored
      * pm-cpufreq:
        cpufreq: Initialize governor for a new policy under policy->rwsem
        cpufreq: Initialize policy before making it available for others to use
        cpufreq: use cpufreq_cpu_get() to avoid cpufreq_get() race conditions
      19bc45a5
    • Rafael J. Wysocki's avatar
      Merge branches 'acpi-resources', 'acpi-ec' and 'acpi-sleep' · beb0082e
      Rafael J. Wysocki authored
      * acpi-resources:
        ACPI / resources: ignore invalid ACPI device resources
      
      * acpi-ec:
        ACPI / EC: Clear stale EC events on Samsung systems
      
      * acpi-sleep:
        ACPI / sleep: pm_power_off needs more sanity checks to be installed
      beb0082e
  2. 07 Mar, 2014 16 commits
    • Linus Torvalds's avatar
      Merge tag 'dm-3.14-fixes-3' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm · 2ef176f1
      Linus Torvalds authored
      Pull device mapper fixes from Mike Snitzer:
      
       - dm-cache memory allocation failure fix
       - fix DM's Kconfig identation
       - dm-snapshot metadata corruption fix for bug introduced in 3.14-rc1
       - important refcount < 0 fix for the DM persistent data library's space
         map metadata interface which fixes corruption reported by a few
         dm-thinp users
      
      and last but not least:
      
       - more extensive fixes than ideal for dm-thinp's data resize capability
         (which has had growing pain much like we've seen from -ENOSPC
         handling of filesystems that mature).
      
         The end result is dm-thinp now handles metadata operation failure and
         no data space error conditions much better than before.
      
      * tag 'dm-3.14-fixes-3' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm:
        dm space map metadata: fix refcount decrement below 0 which caused corruption
        dm thin: fix Documentation for held metadata root feature
        dm thin: fix noflush suspend IO queueing
        dm thin: fix deadlock in __requeue_bio_list
        dm thin: fix out of data space handling
        dm thin: ensure user takes action to validate data and metadata consistency
        dm thin: synchronize the pool mode during suspend
        dm snapshot: fix metadata corruption
        dm: fix Kconfig indentation
        dm cache mq: fix memory allocation failure for large cache devices
      2ef176f1
    • H. Peter Anvin's avatar
      x86: Ignore NMIs that come in during early boot · 5fa10196
      H. Peter Anvin authored
      Don Zickus reports:
      
      A customer generated an external NMI using their iLO to test kdump
      worked.  Unfortunately, the machine hung.  Disabling the nmi_watchdog
      made things work.
      
      I speculated the external NMI fired, caused the machine to panic (as
      expected) and the perf NMI from the watchdog came in and was latched.
      My guess was this somehow caused the hang.
      
         ----
      
      It appears that the latched NMI stays latched until the early page
      table generation on 64 bits, which causes exceptions to happen which
      end in IRET, which re-enable NMI.  Therefore, ignore NMIs that come in
      during early execution, until we have proper exception handling.
      Reported-and-tested-by: default avatarDon Zickus <dzickus@redhat.com>
      Link: http://lkml.kernel.org/r/1394221143-29713-1-git-send-email-dzickus@redhat.comSigned-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
      Cc: <stable@vger.kernel.org> # v3.5+, older with some backport effort
      5fa10196
    • Mark Rutland's avatar
      ARM: 7992/1: boot: compressed: ignore bswapsdi2.S · 38e0b088
      Mark Rutland authored
      Commit 017f161a (ARM: 7877/1: use built-in byte swap function) added
      bswapsdi2.{o,S} to arch/arm/boot/compressed/Makefile, but didn't update
      the .gitignore. Thus after a a build git status shows bswapsdi2.S as a
      new file, which is a little annoying.
      
      This patch updates arch/arm/boot/compressed/.gitignore to ignore
      bswapsdi2.S, as we already do for ashldi3.S and others.
      Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
      Acked-by: default avatarNicolas Pitre <nico@linaro.org>
      Acked-by: default avatarKim Phillips <kim.phillips@freescale.com>
      Cc: David Woodhouse <David.Woodhouse@intel.com>
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      38e0b088
    • Linus Walleij's avatar
      ARM: 7991/1: sa1100: fix compile problem on Collie · 052450fd
      Linus Walleij authored
      Due to a problem in the MFD Kconfig it was not possible to
      compile the UCB battery driver for the Collie SA1100 system,
      in turn making it impossible to compile in the battery driver.
      (See patch "mfd: include all drivers in subsystem menu".)
      
      After fixing the MFD Kconfig (separate patch) a compile error
      appears in the Collie battery driver due to the <mach/collie.h>
      implicitly requiring <mach/hardware.h> through <linux/gpio.h>
      via <mach/gpio.h> prior to commit
      40ca061b "ARM: 7841/1: sa1100: remove complex GPIO interface".
      
      Fix this up by including the required header into
      <mach/collie.h>.
      
      Cc: stable@vger.kernel.org
      Cc: Andrea Adami <andrea.adami@gmail.com>
      Cc: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      052450fd
    • Russell King's avatar
      ARM: fix noMMU kallsyms symbol filtering · 006fa259
      Russell King authored
      With noMMU, CONFIG_PAGE_OFFSET was not being set correctly.  As there's
      no MMU, PAGE_OFFSET should be equal to PHYS_OFFSET in all cases.  This
      commit makes that explicit.
      
      Since we do this, we don't need to mess around in asm/memory.h with
      ifdefs to sort this out, so let's get rid of that, and there's no point
      offering the "Memory split" option for noMMU as that's meaningless
      there.
      
      Fixes: b9b32bf7 ("ARM: use linker magic for vectors and vector stubs")
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      006fa259
    • Vineet Gupta's avatar
      ARC: Use correct PTAG register for icache flush · b053940d
      Vineet Gupta authored
      This fixes a subtle issue with cache flush which could potentially cause
      random userspace crashes because of stale icache lines.
      
      This error crept in when consolidating the cache flush code
      
      Fixes: bd12976c (ARC: cacheflush refactor #3: Unify the {d,i}cache)
      Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
      Cc: linux-kernel@vger.kernel.org
      Cc: stable@vger.kernel.org  # 3.13
      Cc: arc-linux-dev@synopsys.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      b053940d
    • Linus Torvalds's avatar
      Merge tag 'sound-3.14-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound · e1aa17c7
      Linus Torvalds authored
      Pull sound fixes from Takashi Iwai:
       "Just a few device-specific quirks for HD-audio and USB-audio, most of
        which are one-liners"
      
      * tag 'sound-3.14-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
        ALSA: usb-audio: Add quirk for Logitech Webcam C500
        ALSA: hda - Use analog beep for Thinkpads with AD1984 codecs
        ALSA: hda - Add missing loopback merge path for AD1884/1984 codecs
        ALSA: hda - add automute fix for another dell AIO model
        ALSA: hda - Added inverted digital-mic handling for Acer TravelMate 8371
      e1aa17c7
    • Linus Torvalds's avatar
      Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux · 3bf7706b
      Linus Torvalds authored
      Pull drm fixes from Dave Airlie:
       "Mostly intel and radeon fixes, one tda998x, one kconfig dep fix and
        two more MAINTAINERS updates,
      
        All pretty run of the mill for this stage"
      
      * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
        drm/radeon/atom: select the proper number of lanes in transmitter setup
        MAINTAINERS: add maintainer entry for TDA998x driver
        drm: fix bochs kconfig dependencies
        drm/radeon/dpm: fix typo in EVERGREEN_SMC_FIRMWARE_HEADER_softRegisters
        drm/radeon/cik: fix typo in documentation
        drm/radeon: silence GCC warning on 32 bit
        drm/radeon: resume old pm late
        drm/radeon: TTM must be init with cpu-visible VRAM, v2
        DRM: armada: fix use of kfifo_put()
        drm/i915: Reject >165MHz modes w/ DVI monitors
        drm/i915: fix assert_cursor on BDW
        drm/i915: vlv: reserve GT power context early
        drm/i915: fix pch pci device enumeration
        drm/i915: Resolving the memory region conflict for Stolen area
        drm/i915: use backlight legacy combination mode also for i915gm/i945gm
        MAINTAINERS: update AGP tree to point at drm tree
      3bf7706b
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.dk/linux-block · 2a75184d
      Linus Torvalds authored
      Pull block fixes from Jens Axboe:
       "Small collection of fixes for 3.14-rc. It contains:
      
         - Three minor update to blk-mq from Christoph.
      
         - Reduce number of unaligned (< 4kb) in-flight writes on mtip32xx to
           two.  From Micron.
      
         - Make the blk-mq CPU notify spinlock raw, since it can't be a
           sleeper spinlock on RT.  From Mike Galbraith.
      
         - Drop now bogus BUG_ON() for bio iteration with blk integrity.  From
           Nic Bellinger.
      
         - Properly propagate the SYNC flag on requests. From Shaohua"
      
      * 'for-linus' of git://git.kernel.dk/linux-block:
        blk-mq: add REQ_SYNC early
        rt,blk,mq: Make blk_mq_cpu_notify_lock a raw spinlock
        bio-integrity: Drop bio_integrity_verify BUG_ON in post bip->bip_iter world
        blk-mq: support partial I/O completions
        blk-mq: merge blk_mq_insert_request and blk_mq_run_request
        blk-mq: remove blk_mq_alloc_rq
        mtip32xx: Reduce the number of unaligned writes to 2
      2a75184d
    • Linus Torvalds's avatar
      Merge tag 'pinctrl-v3.14-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl · 8ab47d3e
      Linus Torvalds authored
      Pull pin control fixes from Linus Walleij:
       "This is a set of pin control fixes I have collected over the last few
        days.  Some have rotated more than others in linux-next, but they were
        rebased on v3.14-rc5 due to sloppy commit messages.  I am quite
        convinced that they are all good fixes that only hit this or that
        individual driver and not the entire subsystem.
      
         - Fix chained interrupts, interrupt masking and register offset
           calculation for the sunxi driver
      
         - Make MSM a bool rather than a tristate to stop build problems to
           happen - chained interrupt controllers cannot currently be defined
           in modules
      
         - Fix a clock in the PFC driver
      
         - Fix a kernel panic in the sirf driver"
      
      * tag 'pinctrl-v3.14-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl:
        pinctrl: sirf: fix kernel panic in gpio_lock_as_irq
        pinctrl: sh-pfc: r8a7791: SD1_CLK fix
        pinctrl: msm: make PINCTRL_MSM bool instead of tristate
        pinctrl: sunxi: Fix interrupt register offset calculation
        pinctrl: sunxi: Fix masking when setting irq type
        pinctrl: sunxi: use chained_irq_{enter, exit} for GIC compatibility
      8ab47d3e
    • Linus Torvalds's avatar
      Merge tag 'stable/for-linus-3.14-rc5-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip · ee693507
      Linus Torvalds authored
      Pull Xen fix from Konrad Rzeszutek Wilk:
       "This has exactly one patch for Xen ARM.  It sets the dependency to
        compile the kernel with MMU enabled - otherwise - the guest won't work
        very well"
      
      * tag 'stable/for-linus-3.14-rc5-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip:
        ARM: XEN depends on having a MMU
      ee693507
    • Linus Torvalds's avatar
      Merge tag 'for-linus' of git://linux-c6x.org/git/projects/linux-c6x-upstreaming · 31481401
      Linus Torvalds authored
      Pull c6x build fix from Mark Salter:
       "Build fix for c6x"
      
      * tag 'for-linus' of git://linux-c6x.org/git/projects/linux-c6x-upstreaming:
        c6x: fix build failure caused by cache.h
      31481401
    • Joe Thornber's avatar
      dm space map metadata: fix refcount decrement below 0 which caused corruption · cebc2de4
      Joe Thornber authored
      This has been a relatively long-standing issue that wasn't nailed down
      until Teng-Feng Yang's meticulous bug report to dm-devel on 3/7/2014,
      see: http://www.redhat.com/archives/dm-devel/2014-March/msg00021.html
      
      From that report:
        "When decreasing the reference count of a metadata block with its
        reference count equals 3, we will call dm_btree_remove() to remove
        this enrty from the B+tree which keeps the reference count info in
        metadata device.
      
        The B+tree will try to rebalance the entry of the child nodes in each
        node it traversed, and the rebalance process contains the following
        steps.
      
        (1) Finding the corresponding children in current node (shadow_current(s))
        (2) Shadow the children block (issue BOP_INC)
        (3) redistribute keys among children, and free children if necessary (issue BOP_DEC)
      
        Since the update of a metadata block's reference count could be
        recursive, we will stash these reference count update operations in
        smm->uncommitted and then process them in a FILO fashion.
      
        The problem is that step(3) could free the children which is created
        in step(2), so the BOP_DEC issued in step(3) will be carried out
        before the BOP_INC issued in step(2) since these BOPs will be
        processed in FILO fashion. Once the BOP_DEC from step(3) tries to
        decrease the reference count of newly shadow block, it will report
        failure for its reference equals 0 before decreasing. It looks like we
        can solve this issue by processing these BOPs in a FIFO fashion
        instead of FILO."
      
      Commit 5b564d80 ("dm space map: disallow decrementing a reference count
      below zero") changed the code to report an error for this temporary
      refcount decrement below zero.  So what was previously a harmless
      invalid refcount became a hard failure due to the new error path:
      
       device-mapper: space map common: unable to decrement a reference count below 0
       device-mapper: thin: 253:6: dm_thin_insert_block() failed: error = -22
       device-mapper: thin: 253:6: switching pool to read-only mode
      
      This bug is in dm persistent-data code that is common to the DM thin and
      cache targets.  So any users of those targets should apply this fix.
      
      Fix this by applying recursive space map operations in FIFO order rather
      than FILO.
      
      Resolves: https://bugzilla.kernel.org/show_bug.cgi?id=68801Reported-by: default avatarApollon Oikonomopoulos <apoikos@debian.org>
      Reported-by: edwillam1007@gmail.com
      Reported-by: default avatarTeng-Feng Yang <shinrairis@gmail.com>
      Signed-off-by: default avatarJoe Thornber <ejt@redhat.com>
      Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
      Cc: stable@vger.kernel.org # 3.13+
      cebc2de4
    • Shaohua Li's avatar
      blk-mq: add REQ_SYNC early · 739c3eea
      Shaohua Li authored
      Add REQ_SYNC early, so rq_dispatched[] in blk_mq_rq_ctx_init
      is set correctly.
      
      Signed-off-by: Shaohua Li<shli@fusionio.com>
      Signed-off-by: default avatarJens Axboe <axboe@fb.com>
      739c3eea
    • Anton Blanchard's avatar
      powerpc: Align p_dyn, p_rela and p_st symbols · a5b2cf5b
      Anton Blanchard authored
      The 64bit relocation code places a few symbols in the text segment.
      These symbols are only 4 byte aligned where they need to be 8 byte
      aligned. Add an explicit alignment.
      Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
      Cc: stable@vger.kernel.org
      Tested-by: default avatarLaurent Dufour <ldufour@linux.vnet.ibm.com>
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      a5b2cf5b
    • Michael Neuling's avatar
      powerpc/tm: Fix crash when forking inside a transaction · 621b5060
      Michael Neuling authored
      When we fork/clone we currently don't copy any of the TM state to the new
      thread.  This results in a TM bad thing (program check) when the new process is
      switched in as the kernel does a tmrechkpt with TEXASR FS not set.  Also, since
      R1 is from userspace, we trigger the bad kernel stack pointer detection.  So we
      end up with something like this:
      
         Bad kernel stack pointer 0 at c0000000000404fc
         cpu 0x2: Vector: 700 (Program Check) at [c00000003ffefd40]
             pc: c0000000000404fc: restore_gprs+0xc0/0x148
             lr: 0000000000000000
             sp: 0
            msr: 9000000100201030
           current = 0xc000001dd1417c30
           paca    = 0xc00000000fe00800   softe: 0        irq_happened: 0x01
             pid   = 0, comm = swapper/2
         WARNING: exception is not recoverable, can't continue
      
      The below fixes this by flushing the TM state before we copy the task_struct to
      the clone.  To do this we go through the tmreclaim patch, which removes the
      checkpointed registers from the CPU and transitions the CPU out of TM suspend
      mode.  Hence we need to call tmrechkpt after to restore the checkpointed state
      and the TM mode for the current task.
      
      To make this fail from userspace is simply:
      	tbegin
      	li	r0, 2
      	sc
      	<boom>
      
      Kudos to Adhemerval Zanella Neto for finding this.
      Signed-off-by: default avatarMichael Neuling <mikey@neuling.org>
      cc: Adhemerval Zanella Neto <azanella@br.ibm.com>
      cc: stable@vger.kernel.org
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      621b5060
  3. 06 Mar, 2014 15 commits