1. 23 2月, 2012 9 次提交
    • M
      fadump: Register for firmware assisted dump. · 3ccc00a7
      Mahesh Salgaonkar 提交于
      On 2012-02-20 11:02:51 Mon, Paul Mackerras wrote:
      > On Thu, Feb 16, 2012 at 04:44:30PM +0530, Mahesh J Salgaonkar wrote:
      >
      > If I have read the code correctly, we are going to get this printk on
      > non-pSeries machines or on older pSeries machines, even if the user
      > has not put the fadump=on option on the kernel command line.  The
      > printk will be annoying since there is no actual error condition.  It
      > seems to me that the condition for the printk should include
      > fw_dump.fadump_enabled.  In other words you should probably add
      >
      > 	if (!fw_dump.fadump_enabled)
      > 		return 0;
      >
      > at the beginning of the function.
      
      Hi Paul,
      
      Thanks for pointing it out. Please find the updated patch below.
      
      The existing patches above this (4/10 through 10/10) cleanly applies
      on this update.
      
      Thanks,
      -Mahesh.
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      3ccc00a7
    • M
      fadump: Reserve the memory for firmware assisted dump. · eb39c880
      Mahesh Salgaonkar 提交于
      Reserve the memory during early boot to preserve CPU state data, HPTE region
      and RMA (real mode area) region data in case of kernel crash. At the time of
      crash, powerpc firmware will store CPU state data, HPTE region data and move
      RMA region data to the reserved memory area.
      
      If the firmware-assisted dump fails to reserve the memory, then fallback
      to existing kexec-based kdump.
      
      Most of the code implementation to reserve memory has been
      adapted from phyp assisted dump implementation written by Linas Vepstas
      and Manish Ahuja
      
      This patch also introduces a config option CONFIG_FA_DUMP for firmware
      assisted dump feature on Powerpc (ppc64) architecture.
      Signed-off-by: NMahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      eb39c880
    • M
      fadump: Add documentation for firmware-assisted dump. · 8e0aa6d4
      Mahesh Salgaonkar 提交于
      Documentation for firmware-assisted dump. This document is based on the
      original documentation written for phyp assisted dump by Linas Vepstas
      and Manish Ahuja, with few changes to reflect the current implementation.
      Signed-off-by: NMahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      8e0aa6d4
    • K
      powerpc/mpic: Remove duplicate MPIC_WANTS_RESET flag · e55d7f73
      Kyle Moffett 提交于
      There are two separate flags controlling whether or not the MPIC is
      reset during initialization, which is completely unnecessary, and only
      one of them can be specified in the device tree.
      
      Also, most platforms in-tree right now do actually want to reset the
      MPIC during initialization anyways, which means lots of duplicate code
      passing the MPIC_WANTS_RESET flag.
      
      Fix all of the callers which currently do not pass the MPIC_WANTS_RESET
      flag to pass the MPIC_NO_RESET flag, then remove the MPIC_WANTS_RESET
      flag and make the code reset the MPIC by default.
      Signed-off-by: NKyle Moffett <Kyle.D.Moffett@boeing.com>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      e55d7f73
    • K
      powerpc/mpic: Add "last-interrupt-source" property to override hardware · c1b8d45d
      Kyle Moffett 提交于
      The FreeScale PowerQUICC-III-compatible (mpc85xx/mpc86xx) MPICs do not
      correctly report the number of hardware interrupt sources, so software
      needs to override the detected value with "256".
      
      To avoid needing to write custom board-specific code to detect that
      scenario, allow it to be easily overridden in the device-tree.
      Signed-off-by: NKyle Moffett <Kyle.D.Moffett@boeing.com>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      c1b8d45d
    • K
      powerpc/mpic: Remove MPIC_BROKEN_FRR_NIRQS and duplicate irq_count · 5019609f
      Kyle Moffett 提交于
      The mpic->irq_count variable is only used as a software error-checking
      limit to determine whether or not an IRQ number is valid.  In board code
      which does not manually specify an IRQ count to mpic_alloc(), i.e. 0, it
      is automatically detected from the number of ISUs and the ISU size.
      
      In practice, all hardware ends up with irq_count == num_sources, so all
      of the runtime checks on mpic->irq_count should just check the value of
      mpic->num_sources instead.
      
      When platform hardware does not correctly report the number of IRQs,
      which only happens on the MPC85xx/MPC86xx, the MPIC_BROKEN_FRR_NIRQS
      flag is used to override the detected value of num_sources with the
      manual irq_count parameter.  Since there's no need to manually specify
      the number of IRQs except in this case, the extra flag can be eliminated
      and the test changed to "irq_count != 0".
      Signed-off-by: NKyle Moffett <Kyle.D.Moffett@boeing.com>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      5019609f
    • K
      fsl/mpic: Create and document the "single-cpu-affinity" device-tree flag · 9ca163c8
      Kyle Moffett 提交于
      The Freescale MPIC (and perhaps others in the future) is incapable of
      routing non-IPI interrupts to more than once CPU at a time.  Currently
      all of the Freescale boards msut pass the MPIC_SINGLE_DEST_CPU flag to
      mpic_alloc(), but that information should really be present in the
      device-tree.
      
      Older board code can't rely on the device-tree having the property set,
      but newer platforms won't need it manually specified in the code.
      
      [BenH: Remove unrelated changes, folded in a different patch]
      Signed-off-by: NKyle Moffett <Kyle.D.Moffett@boeing.com>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      9ca163c8
    • K
      fsl/mpic: Document and use the "big-endian" device-tree flag · 98cca250
      Kyle Moffett 提交于
      The MPIC code checks for a "big-endian" property and sets the flag
      MPIC_BIG_ENDIAN if one is present, although prior to the "mpic->flags"
      fixup that would never have worked anways.
      
      Unfortunately, even now that it works properly, the Freescale mpic
      device-node (the "PowerQUICC-III"-compatible one) does not specify it,
      so all of the board ports need to manually pass it to mpic_alloc().
      
      Document the flag and add it to the pq3 device tree.  Existing code will
      still need to pass the MPIC_BIG_ENDIAN flag because their dtb may not
      have this property, but new platforms shouldn't need to do so.
      Signed-off-by: NKyle Moffett <Kyle.D.Moffett@boeing.com>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      98cca250
    • K
      powerpc/mpic: Fix use of "flags" variable in mpic_alloc() · 3a7a7176
      Kyle Moffett 提交于
      The mpic_alloc() function takes a "flags" parameter and assigns it into
      the mpic->flags variable fairly early on, but several later pieces of
      code detect various device-tree properties and save them into the
      "mpic->flags" variable (EG: "big-endian" => MPIC_BIG_ENDIAN).
      
      Unfortunately, a number of codepaths (including several which test the
      flag MPIC_BIG_ENDIAN!) test "flags" instead of "mpic->flags", and get
      wrong answers as a result.
      
      Consolidate the device-tree flag tests early in mpic_alloc() and change
      all of the checks after "mpic->flags" is init'ed to use "mpic->flags".
      
      [BenH: Fixed up use of mpic->node before it's initialized]
      Signed-off-by: NKyle Moffett <Kyle.D.Moffett@boeing.com>
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      3a7a7176
  2. 21 2月, 2012 7 次提交
    • L
      i387: export 'fpu_owner_task' per-cpu variable · 27e74da9
      Linus Torvalds 提交于
      (And define it properly for x86-32, which had its 'current_task'
      declaration in separate from x86-64)
      
      Bitten by my dislike for modules on the machines I use, and the fact
      that apparently nobody else actually wanted to test the patches I sent
      out.
      
      Snif. Nobody else cares.
      
      Anyway, we probably should uninline the 'kernel_fpu_begin()' function
      that is what modules actually use and that references this, but this is
      the minimal fix for now.
      Reported-by: NJosh Boyer <jwboyer@gmail.com>
      Reported-and-tested-by: NJongman Heo <jongman.heo@samsung.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      27e74da9
    • L
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs · 8ebbfb49
      Linus Torvalds 提交于
      Assorted fixes, sat in -next for a week or so...
      
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
        ocfs2: deal with wraparounds of i_nlink in ocfs2_rename()
        vfs: fix compat_sys_stat() handling of overflows in st_nlink
        quota: Fix deadlock with suspend and quotas
        vfs: Provide function to get superblock and wait for it to thaw
        vfs: fix panic in __d_lookup() with high dentry hashtable counts
        autofs4 - fix lockdep splat in autofs
        vfs: fix d_inode_lookup() dentry ref leak
      8ebbfb49
    • L
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux · 39e255da
      Linus Torvalds 提交于
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
        [S390] correct ktime to tod clock comparator conversion
        [S390] 3215 deadlock with tty_wakeup
        [S390] incorrect PageTables counter for kvm page tables
        [S390] idle: avoid RCU usage in extended quiescent state
      39e255da
    • L
    • L
      i387: support lazy restore of FPU state · 7e16838d
      Linus Torvalds 提交于
      This makes us recognize when we try to restore FPU state that matches
      what we already have in the FPU on this CPU, and avoids the restore
      entirely if so.
      
      To do this, we add two new data fields:
      
       - a percpu 'fpu_owner_task' variable that gets written any time we
         update the "has_fpu" field, and thus acts as a kind of back-pointer
         to the task that owns the CPU.  The exception is when we save the FPU
         state as part of a context switch - if the save can keep the FPU
         state around, we leave the 'fpu_owner_task' variable pointing at the
         task whose FP state still remains on the CPU.
      
       - a per-thread 'last_cpu' field, that indicates which CPU that thread
         used its FPU on last.  We update this on every context switch
         (writing an invalid CPU number if the last context switch didn't
         leave the FPU in a lazily usable state), so we know that *that*
         thread has done nothing else with the FPU since.
      
      These two fields together can be used when next switching back to the
      task to see if the CPU still matches: if 'fpu_owner_task' matches the
      task we are switching to, we know that no other task (or kernel FPU
      usage) touched the FPU on this CPU in the meantime, and if the current
      CPU number matches the 'last_cpu' field, we know that this thread did no
      other FP work on any other CPU, so the FPU state on the CPU must match
      what was saved on last context switch.
      
      In that case, we can avoid the 'f[x]rstor' entirely, and just clear the
      CR0.TS bit.
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      7e16838d
    • L
      i387: use 'restore_fpu_checking()' directly in task switching code · 80ab6f1e
      Linus Torvalds 提交于
      This inlines what is usually just a couple of instructions, but more
      importantly it also fixes the theoretical error case (can that FPU
      restore really ever fail? Maybe we should remove the checking).
      
      We can't start sending signals from within the scheduler, we're much too
      deep in the kernel and are holding the runqueue lock etc.  So don't
      bother even trying.
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      80ab6f1e
    • L
      i387: fix up some fpu_counter confusion · cea20ca3
      Linus Torvalds 提交于
      This makes sure we clear the FPU usage counter for newly created tasks,
      just so that we start off in a known state (for example, don't try to
      preload the FPU state on the first task switch etc).
      
      It also fixes a thinko in when we increment the fpu_counter at task
      switch time, introduced by commit 34ddc81a ("i387: re-introduce FPU
      state preloading at context switch time").  We should increment the
      *new* task fpu_counter, not the old task, and only if we decide to use
      that state (whether lazily or preloaded).
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      cea20ca3
  3. 20 2月, 2012 1 次提交
  4. 19 2月, 2012 12 次提交
    • L
      Linux 3.3-rc4 · b01543df
      Linus Torvalds 提交于
      b01543df
    • L
      Merge tag 'fixes-3.3-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc · be2874cb
      Linus Torvalds 提交于
      These are the bug fixes that have accumulated since 3.3-rc3 in arm-soc.
      The majority of them are regression fixes for stuff that broke during
      the merge 3.3 window.
      
      The notable ones are:
      
      * The at91 ata drivers both broke because of an earlier cleanup patch that
        some other patches were based on. Jean-Christophe decided to remove
        the legacy at91_ide driver and fix the new-style at91-pata driver while
        keeping the cleanup patch. I almost rejected the patches for being too
        late and too big but in the end decided to accept them because they
        fix a regression.
      
      * A patch fixing build breakage from the sysdev-to-device conversion
        colliding with other changes touches a number of mach-s3c files.
      
      * b0654037 "ARM: orion: Fix Orion5x GPIO regression from MPP cleanup"
        is a mechanical change that unfortunately touches a lot of lines
        that should up in the diffstat.
      
      * tag 'fixes-3.3-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (28 commits)
        ARM: at91: drop ide driver in favor of the pata one
        pata/at91: use newly introduced SMC accessors
        ARM: at91: add accessor to manage SMC
        ARM: at91:rtc/rtc-at91sam9: ioremap register bank
        ARM: at91: USB AT91 gadget registration for module
        ep93xx: fix build of vision_ep93xx.c
        ARM: OMAP2xxx: PM: fix OMAP2xxx-specific UART idle bug in v3.3
        ARM: orion: Fix USB phy for orion5x.
        ARM: orion: Fix Orion5x GPIO regression from MPP cleanup
        ARM: EXYNOS: Add cpu-offset property in gic device tree node
        ARM: EXYNOS: Bring exynos4-dt up to date
        ARM: OMAP3: cm-t35: fix section mismatch warning
        ARM: OMAP2: Fix the OMAP2 only build break seen with 2011+ ARM tool-chains
        ARM: tegra: paz00: fix wrong UART port on mini-pcie plug
        ARM: tegra: paz00: fix wrong SD1 power gpio
        i2c: tegra: Add devexit_p() for remove
        ARM: EXYNOS: Correct M-5MOLS sensor clock frequency on Universal C210 board
        ARM: EXYNOS: Correct framebuffer window size on Nuri board
        ARM: SAMSUNG: Fix missing api-change from subsys_interface change
        ARM: EXYNOS: Fix "warning: initialization from incompatible pointer type"
        ...
      be2874cb
    • L
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net · 584216b7
      Linus Torvalds 提交于
      1) VETH_INFO_PEER netlink attribute needs to have it's size validated,
         from Thomas Graf.
      
      2) 'poll' module option of bnx2x driver crashes the machine, just remove
         it.  From Michal Schmidt.
      
      3) ks8851_mll driver reads the irq number from two places, but only
         initializes one of them, oops.  Use only one location and fix this
         problem, from Jan Weitzel.
      
      4) Fix buffer overrun and unicast sterring bugs in mellanox mlx4 driver,
         from Eugenia Emantayev.
      
      5) Swapped kcalloc() args in RxRPC and mlx4, from Axel Lin.
      
      6) PHY MDIO device name regression fixes from Florian Fainelli.
      
      7) If the wake event IRQ line is different from the netdevice one, we
         have to properly route it to the stmmac interrupt handler.  From
         Francesco Virlinzi.
      
      8) Fix rwlock lock initialization ordering bug in mac80211, from
         Mohammed Shafi Shajakhan.
      
      9) TCP lost_cnt can get out of sync, and in fact go negative, in certain
         circumstances.  Fix the way we specify what sequence range to operate
         on in tcp_sacktag_one() to fix this bug.  From Neal Cardwell.
      
      * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (27 commits)
        net/ethernet: ks8851_mll fix irq handling
        veth: Enforce minimum size of VETH_INFO_PEER
        stmmac: update the driver version to Feb 2012 (v2)
        stmmac: move hw init in the probe (v2)
        stmmac: request_irq when use an ext wake irq line (v2)
        stmmac: do not discard frame on dribbling bit assert
        ipheth: Add iPhone 4S
        mlx4: add unicast steering entries to resource_tracker
        mlx4: fix QP tree trashing
        mlx4: fix buffer overrun
        3c59x: shorten timer period for slave devices
        netpoll: netpoll_poll_dev() should access dev->flags
        RxRPC: Fix kcalloc parameters swapped
        bnx2x: remove the 'poll' module option
        tcp: fix tcp_shifted_skb() adjustment of lost_cnt_hint for FACK
        ks8851: Fix NOHZ local_softirq_pending 08 warning
        bnx2x: fix bnx2x_storm_stats_update() on big endian
        ixp4xx-eth: fix PHY name to match MDIO bus name
        octeon: fix PHY name to match MDIO bus name
        fec: fix PHY name to match fixed MDIO bus name
        ...
      584216b7
    • L
      Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap · bff98bfc
      Linus Torvalds 提交于
      Fixes a bootstrapping issue for some registers when a less commonly used
      method for register cache initialisation is used.  Only affects a fairly
      small proportion of users that both don't use explicit register defaults
      and do use the cache.
      
      * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap:
        regmap: Fix cache defaults initialization from raw cache defaults
      bff98bfc
    • L
      Merge tag 'ecryptfs-3.3-rc4-fixes' of... · 46860666
      Linus Torvalds 提交于
      Merge tag 'ecryptfs-3.3-rc4-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tyhicks/ecryptfs
      
      Fixes maximum filename length and filesystem type reporting in statfs() calls
      and also fixes stale inode mode bits on eCryptfs inodes after a POSIX ACL was
      set on the lower filesystem's inode.
      
      * tag 'ecryptfs-3.3-rc4-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tyhicks/ecryptfs:
        ecryptfs: remove the second argument of k[un]map_atomic()
        eCryptfs: Copy up lower inode attrs after setting lower xattr
        eCryptfs: Improve statfs reporting
      46860666
    • L
      Merge tag 'pinctrl' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl · 7857b996
      Linus Torvalds 提交于
      pinctrl fixes for v3.3
      
      * tag 'pinctrl-for-torvalds-20120216' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl:
        pinctrl: restore pin naming
      7857b996
    • L
      Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc · 06ca7c43
      Linus Torvalds 提交于
      Here are a few more fixes for powerpc.  Some are regressions, the rest
      is simple/obvious/nasty enough that I deemed it good to go now.
      
      Here's also step one of deprecating legacy iSeries support: we are
      removing it from the main defconfig.
      
      Nobody seems to be using it anymore and the code is nasty to maintain,
      (involves horrible hacks in various low level areas of the kernel) so we
      plan to actually rip it out at some point.  For now let's just avoid
      building it by default.  Stephen will proceed to do the actual removal
      later (probably 3.4 or 3.5).
      
      * 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
        powerpc/perf: power_pmu_start restores incorrect values, breaking frequency events
        powerpc/adb: Use set_current_state()
        powerpc: Disable interrupts early in Program Check
        powerpc: Remove legacy iSeries from ppc64_defconfig
        powerpc/fsl/pci: Fix PCIe fixup regression
        powerpc: Fix kernel log of oops/panic instruction dump
      06ca7c43
    • L
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci · 7bcd5b46
      Linus Torvalds 提交于
      One regression fix for SR-IOV on PPC and a couple of misc fixes from
      Yinghai.
      
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci:
        PCI: Fix pci cardbus removal
        PCI: set pci sriov page size before reading SRIOV BAR
        PCI: workaround hard-wired bus number V2
      7bcd5b46
    • L
      Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux · 58e44baf
      Linus Torvalds 提交于
      3 radeon fixes, I have some exynos fixes to push later but I'll queue
      them separately once I've looked them over a bit.
      
      * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
        drm/radeon/kms: fix MSI re-arm on rv370+
        drm/radeon/kms/atom: bios scratch reg handling updates
        drm/radeon/kms: drop lock in return path of radeon_fence_count_emitted.
      58e44baf
    • L
    • L
      i387: re-introduce FPU state preloading at context switch time · 34ddc81a
      Linus Torvalds 提交于
      After all the FPU state cleanups and finally finding the problem that
      caused all our FPU save/restore problems, this re-introduces the
      preloading of FPU state that was removed in commit b3b0870e ("i387:
      do not preload FPU state at task switch time").
      
      However, instead of simply reverting the removal, this reimplements
      preloading with several fixes, most notably
      
       - properly abstracted as a true FPU state switch, rather than as
         open-coded save and restore with various hacks.
      
         In particular, implementing it as a proper FPU state switch allows us
         to optimize the CR0.TS flag accesses: there is no reason to set the
         TS bit only to then almost immediately clear it again.  CR0 accesses
         are quite slow and expensive, don't flip the bit back and forth for
         no good reason.
      
       - Make sure that the same model works for both x86-32 and x86-64, so
         that there are no gratuitous differences between the two due to the
         way they save and restore segment state differently due to
         architectural differences that really don't matter to the FPU state.
      
       - Avoid exposing the "preload" state to the context switch routines,
         and in particular allow the concept of lazy state restore: if nothing
         else has used the FPU in the meantime, and the process is still on
         the same CPU, we can avoid restoring state from memory entirely, just
         re-expose the state that is still in the FPU unit.
      
         That optimized lazy restore isn't actually implemented here, but the
         infrastructure is set up for it.  Of course, older CPU's that use
         'fnsave' to save the state cannot take advantage of this, since the
         state saving also trashes the state.
      
      In other words, there is now an actual _design_ to the FPU state saving,
      rather than just random historical baggage.  Hopefully it's easier to
      follow as a result.
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      34ddc81a
    • L
      i387: move TS_USEDFPU flag from thread_info to task_struct · f94edacf
      Linus Torvalds 提交于
      This moves the bit that indicates whether a thread has ownership of the
      FPU from the TS_USEDFPU bit in thread_info->status to a word of its own
      (called 'has_fpu') in task_struct->thread.has_fpu.
      
      This fixes two independent bugs at the same time:
      
       - changing 'thread_info->status' from the scheduler causes nasty
         problems for the other users of that variable, since it is defined to
         be thread-synchronous (that's what the "TS_" part of the naming was
         supposed to indicate).
      
         So perfectly valid code could (and did) do
      
      	ti->status |= TS_RESTORE_SIGMASK;
      
         and the compiler was free to do that as separate load, or and store
         instructions.  Which can cause problems with preemption, since a task
         switch could happen in between, and change the TS_USEDFPU bit. The
         change to TS_USEDFPU would be overwritten by the final store.
      
         In practice, this seldom happened, though, because the 'status' field
         was seldom used more than once, so gcc would generally tend to
         generate code that used a read-modify-write instruction and thus
         happened to avoid this problem - RMW instructions are naturally low
         fat and preemption-safe.
      
       - On x86-32, the current_thread_info() pointer would, during interrupts
         and softirqs, point to a *copy* of the real thread_info, because
         x86-32 uses %esp to calculate the thread_info address, and thus the
         separate irq (and softirq) stacks would cause these kinds of odd
         thread_info copy aliases.
      
         This is normally not a problem, since interrupts aren't supposed to
         look at thread information anyway (what thread is running at
         interrupt time really isn't very well-defined), but it confused the
         heck out of irq_fpu_usable() and the code that tried to squirrel
         away the FPU state.
      
         (It also caused untold confusion for us poor kernel developers).
      
      It also turns out that using 'task_struct' is actually much more natural
      for most of the call sites that care about the FPU state, since they
      tend to work with the task struct for other reasons anyway (ie
      scheduling).  And the FPU data that we are going to save/restore is
      found there too.
      
      Thanks to Arjan Van De Ven <arjan@linux.intel.com> for pointing us to
      the %esp issue.
      
      Cc: Arjan van de Ven <arjan@linux.intel.com>
      Reported-and-tested-by: NRaphael Prevost <raphael@buro.asia>
      Acked-and-tested-by: NSuresh Siddha <suresh.b.siddha@intel.com>
      Tested-by: NPeter Anvin <hpa@zytor.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      f94edacf
  5. 17 2月, 2012 11 次提交
    • M
      [S390] correct ktime to tod clock comparator conversion · cf1eb40f
      Martin Schwidefsky 提交于
      The conversion of the ktime to a value suitable for the clock comparator
      does not take changes to wall_to_monotonic into account. In fact the
      conversion just needs the boot clock (sched_clock_base_cc) and the
      total_sleep_time.
      
      This is applicable to 3.2+ kernels.
      
      CC: stable@vger.kernel.org
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      cf1eb40f
    • M
      [S390] 3215 deadlock with tty_wakeup · 656d9125
      Martin Schwidefsky 提交于
      The 3215 driver calls tty_wakeup from irq context while holding the
      device spinlock. If printk is called by any function on the callchain
      starting from tty_wakeup the system deadlocks on the device spinlock.
      Using a tasklet to call tty_wakup solves the problem.
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      656d9125
    • M
      [S390] incorrect PageTables counter for kvm page tables · 2320c579
      Martin Schwidefsky 提交于
      The page_table_free_pgste function is used for kvm processes to free page
      tables that have the pgste extension. It calls pgtable_page_ctor instead of
      pgtable_page_dtor which increases NR_PAGETABLE instead of decreasing it.
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      2320c579
    • H
      [S390] idle: avoid RCU usage in extended quiescent state · f3612304
      Heiko Carstens 提交于
      Avoid calling wake_up() from our NMI "bottom halve" from RCU extended
      quiescent state in idle. wake_up() has RCU read-side critical sections
      but this will be completely ignored by RCU if the cpu is in extended
      quiescent state.
      Which means that whatever object is being accessed from within the
      read-side critical section can be freed concurrently from a different
      cpu.
      So make sure we leave extended quiescent state before calling wake_up().
      Signed-off-by: NHeiko Carstens <heiko.carstens@de.ibm.com>
      Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
      f3612304
    • L
      i387: move AMD K7/K8 fpu fxsave/fxrstor workaround from save to restore · 4903062b
      Linus Torvalds 提交于
      The AMD K7/K8 CPUs don't save/restore FDP/FIP/FOP unless an exception is
      pending.  In order to not leak FIP state from one process to another, we
      need to do a floating point load after the fxsave of the old process,
      and before the fxrstor of the new FPU state.  That resets the state to
      the (uninteresting) kernel load, rather than some potentially sensitive
      user information.
      
      We used to do this directly after the FPU state save, but that is
      actually very inconvenient, since it
      
       (a) corrupts what is potentially perfectly good FPU state that we might
           want to lazy avoid restoring later and
      
       (b) on x86-64 it resulted in a very annoying ordering constraint, where
           "__unlazy_fpu()" in the task switch needs to be delayed until after
           the DS segment has been reloaded just to get the new DS value.
      
      Coupling it to the fxrstor instead of the fxsave automatically avoids
      both of these issues, and also ensures that we only do it when actually
      necessary (the FP state after a save may never actually get used).  It's
      simply a much more natural place for the leaked state cleanup.
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      4903062b
    • L
      i387: do not preload FPU state at task switch time · b3b0870e
      Linus Torvalds 提交于
      Yes, taking the trap to re-load the FPU/MMX state is expensive, but so
      is spending several days looking for a bug in the state save/restore
      code.  And the preload code has some rather subtle interactions with
      both paravirtualization support and segment state restore, so it's not
      nearly as simple as it should be.
      
      Also, now that we no longer necessarily depend on a single bit (ie
      TS_USEDFPU) for keeping track of the state of the FPU, we migth be able
      to do better.  If we are really switching between two processes that
      keep touching the FP state, save/restore is inevitable, but in the case
      of having one process that does most of the FPU usage, we may actually
      be able to do much better than the preloading.
      
      In particular, we may be able to keep track of which CPU the process ran
      on last, and also per CPU keep track of which process' FP state that CPU
      has.  For modern CPU's that don't destroy the FPU contents on save time,
      that would allow us to do a lazy restore by just re-enabling the
      existing FPU state - with no restore cost at all!
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      b3b0870e
    • C
      465c9343
    • T
      eCryptfs: Copy up lower inode attrs after setting lower xattr · 545d6809
      Tyler Hicks 提交于
      After passing through a ->setxattr() call, eCryptfs needs to copy the
      inode attributes from the lower inode to the eCryptfs inode, as they
      may have changed in the lower filesystem's ->setxattr() path.
      
      One example is if an extended attribute containing a POSIX Access
      Control List is being set. The new ACL may cause the lower filesystem to
      modify the mode of the lower inode and the eCryptfs inode would need to
      be updated to reflect the new mode.
      
      https://launchpad.net/bugs/926292Signed-off-by: NTyler Hicks <tyhicks@canonical.com>
      Reported-by: NSebastien Bacher <seb128@ubuntu.com>
      Cc: John Johansen <john.johansen@canonical.com>
      Cc: <stable@vger.kernel.org>
      545d6809
    • T
      eCryptfs: Improve statfs reporting · 4a26620d
      Tyler Hicks 提交于
      statfs() calls on eCryptfs files returned the wrong filesystem type and,
      when using filename encryption, the wrong maximum filename length.
      
      If mount-wide filename encryption is enabled, the cipher block size and
      the lower filesystem's max filename length will determine the max
      eCryptfs filename length. Pre-tested, known good lengths are used when
      the lower filesystem's namelen is 255 and a cipher with 8 or 16 byte
      block sizes is used. In other, less common cases, we fall back to a safe
      rounded-down estimate when determining the eCryptfs namelen.
      
      https://launchpad.net/bugs/885744Signed-off-by: NTyler Hicks <tyhicks@canonical.com>
      Reported-by: NKees Cook <keescook@chromium.org>
      Reviewed-by: NKees Cook <keescook@chromium.org>
      Reviewed-by: NJohn Johansen <john.johansen@canonical.com>
      4a26620d
    • L
      i387: don't ever touch TS_USEDFPU directly, use helper functions · 6d59d7a9
      Linus Torvalds 提交于
      This creates three helper functions that do the TS_USEDFPU accesses, and
      makes everybody that used to do it by hand use those helpers instead.
      
      In addition, there's a couple of helper functions for the "change both
      CR0.TS and TS_USEDFPU at the same time" case, and the places that do
      that together have been changed to use those.  That means that we have
      fewer random places that open-code this situation.
      
      The intent is partly to clarify the code without actually changing any
      semantics yet (since we clearly still have some hard to reproduce bug in
      this area), but also to make it much easier to use another approach
      entirely to caching the CR0.TS bit for software accesses.
      
      Right now we use a bit in the thread-info 'status' variable (this patch
      does not change that), but we might want to make it a full field of its
      own or even make it a per-cpu variable.
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      6d59d7a9
    • L
      i387: move TS_USEDFPU clearing out of __save_init_fpu and into callers · b6c66418
      Linus Torvalds 提交于
      Touching TS_USEDFPU without touching CR0.TS is confusing, so don't do
      it.  By moving it into the callers, we always do the TS_USEDFPU next to
      the CR0.TS accesses in the source code, and it's much easier to see how
      the two go hand in hand.
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      b6c66418