1. 09 May, 2012 5 commits
    • Linus Torvalds's avatar
      Merge tag 'regmap-3.4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap · 22b6dd78
      Linus Torvalds authored
      Pull last minute regman bug fix from Mark Brown:
       "This is a last minute bug fix that was only just noticed since the
        code path that's being exercised here is one that is fairly rarely
        used.  The changelog for the change itself is extremely clear and the
        code itself is obvious to inspection so should be pretty safe."
      
      * tag 'regmap-3.4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap:
        regmap: fix possible memory corruption in regmap_bulk_read()
      22b6dd78
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/virt/kvm/kvm · 63f4711a
      Linus Torvalds authored
      Pull KVM fixes from Avi Kivity:
       "Two asynchronous page fault fixes (one guest, one host), a powerpc
        page refcount fix, and an ia64 build fix."
      
      * git://git.kernel.org/pub/scm/virt/kvm/kvm:
        KVM: ia64: fix build due to typo
        KVM: PPC: Book3S HV: Fix refcounting of hugepages
        KVM: Do not take reference to mm during async #PF
        KVM: ensure async PF event wakes up vcpu from halt
      63f4711a
    • Linus Torvalds's avatar
      Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc · 6a5beacc
      Linus Torvalds authored
      Pull powerpc fixes from Benjamin Herrenschmidt:
       "Here are a couple of last minute fixes for 3.4 for regressions
        introduced by my rewrite of the lazy irq masking code."
      
      * 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
        powerpc/irq: Make alignment & program interrupt behave the same
        powerpc/irq: Fix bug with new lazy IRQ handling code
      6a5beacc
    • Laxman Dewangan's avatar
      regmap: fix possible memory corruption in regmap_bulk_read() · 6560ffd1
      Laxman Dewangan authored
      The function regmap_bulk_read() calls the regmap_read() for
      each register if set of register has volatile and cache is
      enabled. In this case, last few register read makes the memory
      corruption if the register size is not the size of unsigned int.
      The regam_read() takes argument as unsigned int for returning
      value and it update the value as
      	*val = map->format.parse_val(map->work_buf);
      This causes complete 4 bytes (size of unsigned int) to get written.
      Now if client pass the memory pointer for value which is equal to the
      required size of register count in regmap_bulk_read() then last few
      register read actually update the memory beyond passed pointer size.
      
      Avoid this by using local variable for read and then do memcpy()
      for actual byte copy to passed pointer based on register size.
      
      I allocated one pointer ptr and take first 16 bytes dump of that
      pointer then call regmap_bulk_read() with pointer which is just
      on top of this allocated pointer and register count of 128. Here
      register size is 1 byte.
      The memory trace of last 5 register read are as follows:
      
      [    5.438589] regmap_bulk_read after regamp_read() for register 122
      [    5.447421] 0xef993c20 0xef993c00 0x00000000 0x00000001
      [    5.467535] regmap_bulk_read after regamp_read() for register 123
      [    5.476374] 0xef993c20 0xef993c00 0x00000000 0x00000001
      [    5.496425] regmap_bulk_read after regamp_read() for register 124
      [    5.505260] 0xef993c20 0xef993c00 0x00000000 0x00000001
      [    5.525372] regmap_bulk_read after regamp_read() for register 125
      [    5.534205] 0xef993c00 0xef993c00 0x00000000 0x00000001
      [    5.554258] regmap_bulk_read after regamp_read() for register 126
      [    5.563100] 0xef990000 0xef993c00 0x00000000 0x00000001
      [    5.554258] regmap_bulk_read after regamp_read() for register 127
      [    5.587108] 0xef000000 0xef993c00 0x00000000 0x00000001
      
      Here it is observed that the memory content at first word started changing
      on last 3 regmap_read() and so corruption happened.
      Signed-off-by: default avatarLaxman Dewangan <ldewangan@nvidia.com>
      Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
      6560ffd1
    • Avi Kivity's avatar
      KVM: ia64: fix build due to typo · 331b646d
      Avi Kivity authored
      s/kcm/kvm/.
      Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
      Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
      331b646d
  2. 08 May, 2012 9 commits
    • Benjamin Herrenschmidt's avatar
      powerpc/irq: Make alignment & program interrupt behave the same · a3512b2d
      Benjamin Herrenschmidt authored
      Alignment was the last user of the ENABLE_INTS macro, which we can
      now remove. All non-syscall exceptions now disable interrupts on
      entry, they get re-enabled conditionally from C code. Don't
      unconditionally re-enable in program check either, check the
      original context.
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      a3512b2d
    • Benjamin Herrenschmidt's avatar
      powerpc/irq: Fix bug with new lazy IRQ handling code · 56dfa7fa
      Benjamin Herrenschmidt authored
      We had a case where we could turn on hard interrupts while
      leaving the PACA_IRQ_HARD_DIS bit set in the PACA. This can
      in turn cause a BUG_ON() to hit in __check_irq_replay() due
      to interrupt state getting out of sync.
      
      The assembly code was also way too convoluted. Instead, we
      now leave it to the C code to do the right thing which ends
      up being smaller and more readable.
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      56dfa7fa
    • Linus Torvalds's avatar
      Merge tag 'regulator-3.4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator · 1eef1600
      Linus Torvalds authored
      Pull regulator fixes from Mark Brown:
       "One small fix for an edge condition in the max8997 driver and a fix
        for a surprise in the devres API which caused devm_regulator_put() to
        not actually put the regulator - a nicer version of this based on an
        improvement of the devres API is queued for 3.5."
      
      * tag 'regulator-3.4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator:
        regulator: Actually free the regulator in devm_regulator_put()
        regulator: Fix the logic to ensure new voltage setting in valid range
      1eef1600
    • Linus Torvalds's avatar
      Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux · 789505b0
      Linus Torvalds authored
      Pull drm fixes from Dave Airlie:
       "Two fixes from Intel, one a regression, one because I merged an early
        version of a fix.
      
        Also the nouveau revert of the i2c code that was tested on the list."
      
      * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
        drm/nouveau/i2c: resume use of i2c-algo-bit, rather than custom stack
        drm/i915: Do no set Stencil Cache eviction LRA w/a on gen7+
        drm/i915: disable sdvo hotplug on i945g/gm
      789505b0
    • Linus Torvalds's avatar
      Merge tag 'stable/for-linus-3.4-rc6-tag' of... · 4ed6cede
      Linus Torvalds authored
      Merge tag 'stable/for-linus-3.4-rc6-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen
      
      Pull xen fixes from Konrad Rzeszutek Wilk:
       - fix to Kconfig to make it fit within 80 line characters,
       - two bootup fixes (AMD 8-core and with PCI BIOS),
       - cleanup code in a Xen PV fb driver,
       - and a crash fix when trying to see non-existent PTE's
      
      * tag 'stable/for-linus-3.4-rc6-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
        xen/Kconfig: fix Kconfig layout
        xen/pci: don't use PCI BIOS service for configuration space accesses
        xen/pte: Fix crashes when trying to see non-existent PGD/PMD/PUD/PTEs
        xen/apic: Return the APIC ID (and version) for CPU 0.
        drivers/video/xen-fbfront.c: add missing cleanup code
      4ed6cede
    • Linus Torvalds's avatar
      Merge branch 'for-3.4-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu · e9b19cd4
      Linus Torvalds authored
      Pull two percpu fixes from Tejun Heo:
       "One adds missing KERN_CONT on split printk()s and the other makes
        the percpu allocator avoid using PMD_SIZE as atom_size on x86_32.
      
        Using PMD_SIZE led to vmalloc area exhaustion on certain
        configurations (x86_32 android) and the only cost of using PAGE_SIZE
        instead is static percpu area not being aligned to large page
        mapping."
      
      * 'for-3.4-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu:
        percpu, x86: don't use PMD_SIZE as embedded atom_size on 32bit
        percpu: use KERN_CONT in pcpu_dump_alloc_info()
      e9b19cd4
    • Linus Torvalds's avatar
      Merge branch 'fixes' of git://git.linaro.org/people/rmk/linux-arm · 301cdf5c
      Linus Torvalds authored
      Pull ARM fixes from Russell King:
       "This is mainly audit fixes, found by folks who happened to enable this
        feature and then found it broke their user applications."
      
      * 'fixes' of git://git.linaro.org/people/rmk/linux-arm:
        ARM: 7414/1: SMP: prevent use of the console when using idmap_pgd
        ARM: 7412/1: audit: use only AUDIT_ARCH_ARM regardless of endianness
        ARM: 7411/1: audit: fix treatment of saved ip register during syscall tracing
        ARM: 7410/1: Add extra clobber registers for assembly in kernel_execve
      301cdf5c
    • Tejun Heo's avatar
      percpu, x86: don't use PMD_SIZE as embedded atom_size on 32bit · d5e28005
      Tejun Heo authored
      With the embed percpu first chunk allocator, x86 uses either PAGE_SIZE
      or PMD_SIZE for atom_size.  PMD_SIZE is used when CPU supports PSE so
      that percpu areas are aligned to PMD mappings and possibly allow using
      PMD mappings in vmalloc areas in the future.  Using larger atom_size
      doesn't waste actual memory; however, it does require larger vmalloc
      space allocation later on for !first chunks.
      
      With reasonably sized vmalloc area, PMD_SIZE shouldn't be a problem
      but x86_32 at this point is anything but reasonable in terms of
      address space and using larger atom_size reportedly leads to frequent
      percpu allocation failures on certain setups.
      
      As there is no reason to not use PMD_SIZE on x86_64 as vmalloc space
      is aplenty and most x86_64 configurations support PSE, fix the issue
      by always using PMD_SIZE on x86_64 and PAGE_SIZE on x86_32.
      
      v2: drop cpu_has_pse test and make x86_64 always use PMD_SIZE and
          x86_32 PAGE_SIZE as suggested by hpa.
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Reported-by: default avatarYanmin Zhang <yanmin.zhang@intel.com>
      Reported-by: default avatarShuoX Liu <shuox.liu@intel.com>
      Acked-by: default avatarH. Peter Anvin <hpa@zytor.com>
      LKML-Reference: <4F97BA98.6010001@intel.com>
      Cc: stable@vger.kernel.org
      d5e28005
    • David Gibson's avatar
      KVM: PPC: Book3S HV: Fix refcounting of hugepages · de6c0b02
      David Gibson authored
      The H_REGISTER_VPA hcall implementation in HV Power KVM needs to pin some
      guest memory pages into host memory so that they can be safely accessed
      from usermode.  It does this used get_user_pages_fast().  When the VPA is
      unregistered, or the VCPUs are cleaned up, these pages are released using
      put_page().
      
      However, the get_user_pages() is invoked on the specific memory are of the
      VPA which could lie within hugepages.  In case the pinned page is huge,
      we explicitly find the head page of the compound page before calling
      put_page() on it.
      
      At least with the latest kernel, this is not correct.  put_page() already
      handles finding the correct head page of a compound, and also deals with
      various counts on the individual tail page which are important for
      transparent huge pages.  We don't support transparent hugepages on Power,
      but even so, bypassing this count maintenance can lead (when the VM ends)
      to a hugepage being released back to the pool with a non-zero mapcount on
      one of the tail pages.  This can then lead to a bad_page() when the page
      is released from the hugepage pool.
      
      This removes the explicit compound_head() call to correct this bug.
      Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
      Acked-by: default avatarAlexander Graf <agraf@suse.de>
      Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
      de6c0b02
  3. 07 May, 2012 11 commits
  4. 06 May, 2012 8 commits
    • Linus Torvalds's avatar
      Linux 3.4-rc6 · d48b97b4
      Linus Torvalds authored
      d48b97b4
    • Linus Torvalds's avatar
      Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 18b15fcd
      Linus Torvalds authored
      Pull x86 fixes form Peter Anvin
      
      * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        intel_mid_powerbtn: mark irq as IRQF_NO_SUSPEND
        arch/x86/platform/geode/net5501.c: change active_low to 0 for LED driver
        x86, relocs: Remove an unused variable
        asm-generic: Use __BITS_PER_LONG in statfs.h
        x86/amd: Re-enable CPU topology extensions in case BIOS has disabled it
      18b15fcd
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs · 271fd5d7
      Linus Torvalds authored
      Pull btrfs fixes from Chris Mason:
       "The big ones here are a memory leak we introduced in rc1, and a
        scheduling while atomic if the transid on disk doesn't match the
        transid we expected.  This happens for corrupt blocks, or out of date
        disks.
      
        It also fixes up the ioctl definition for our ioctl to resolve logical
        inode numbers.  The __u32 was a merging error and doesn't match what
        we ship in the progs."
      
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs:
        Btrfs: avoid sleeping in verify_parent_transid while atomic
        Btrfs: fix crash in scrub repair code when device is missing
        btrfs: Fix mismatching struct members in ioctl.h
        Btrfs: fix page leak when allocing extent buffers
        Btrfs: Add properly locking around add_root_to_dirty_list
      271fd5d7
    • Al Viro's avatar
      x86: fix broken TASK_SIZE for ia32_aout · ce7e5d2d
      Al Viro authored
      Setting TIF_IA32 in load_aout_binary() used to be enough; these days
      TASK_SIZE is controlled by TIF_ADDR32 and that one doesn't get set
      there.  Switch to use of set_personality_ia32()...
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      ce7e5d2d
    • Gleb Natapov's avatar
      KVM: Do not take reference to mm during async #PF · 62c49cc9
      Gleb Natapov authored
      It turned to be totally unneeded. The reason the code was introduced is
      so that KVM can prefault swapped in page, but prefault can fail even
      if mm is pinned since page table can change anyway. KVM handles this
      situation correctly though and does not inject spurious page faults.
      
      Fixes:
       "INFO: SOFTIRQ-safe -> SOFTIRQ-unsafe lock order detected" warning while
       running LTP inside a KVM guest using the recent -next kernel.
      Reported-by: default avatarSasha Levin <levinsasha928@gmail.com>
      Signed-off-by: default avatarGleb Natapov <gleb@redhat.com>
      Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
      62c49cc9
    • Gleb Natapov's avatar
      KVM: ensure async PF event wakes up vcpu from halt · a4fa1635
      Gleb Natapov authored
      If vcpu executes hlt instruction while async PF is waiting to be delivered
      vcpu can block and deliver async PF only after another even wakes it
      up. This happens because kvm_check_async_pf_completion() will remove
      completion event from vcpu->async_pf.done before entering kvm_vcpu_block()
      and this will make kvm_arch_vcpu_runnable() return false. The solution
      is to make vcpu runnable when processing completion.
      Signed-off-by: default avatarGleb Natapov <gleb@redhat.com>
      Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
      a4fa1635
    • Chris Mason's avatar
      Btrfs: avoid sleeping in verify_parent_transid while atomic · b9fab919
      Chris Mason authored
      verify_parent_transid needs to lock the extent range to make
      sure no IO is underway, and so it can safely clear the
      uptodate bits if our checks fail.
      
      But, a few callers are using it with spinlocks held.  Most
      of the time, the generation numbers are going to match, and
      we don't want to switch to a blocking lock just for the error
      case.  This adds an atomic flag to verify_parent_transid,
      and changes it to return EAGAIN if it needs to block to
      properly verifiy things.
      Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
      b9fab919
    • Colin Cross's avatar
      ARM: 7414/1: SMP: prevent use of the console when using idmap_pgd · fde165b2
      Colin Cross authored
      Commit 4e8ee7de (ARM: SMP: use
      idmap_pgd for mapping MMU enable during secondary booting)
      switched secondary boot to use idmap_pgd, which is initialized
      during early_initcall, instead of a page table initialized during
      __cpu_up.  This causes idmap_pgd to contain the static mappings
      but be missing all dynamic mappings.
      
      If a console is registered that creates a dynamic mapping, the
      printk in secondary_start_kernel will trigger a data abort on
      the missing mapping before the exception handlers have been
      initialized, leading to a hang.  Initial boot is not affected
      because no consoles have been registered, and resume is usually
      not affected because the offending console is suspended.
      Onlining a cpu with hotplug triggers the problem.
      
      A workaround is to the printk in secondary_start_kernel until
      after the page tables have been switched back to init_mm.
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarColin Cross <ccross@android.com>
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      fde165b2
  5. 05 May, 2012 7 commits