1. 30 Jul, 2010 1 commit
    • Suresh Siddha's avatar
      x86, mtrr: Use stop machine context to rendezvous all the cpu's · 68f202e4
      Suresh Siddha authored
      Use the stop machine context rather than IPI's to rendezvous all the cpus for
      MTRR initialization that happens during cpu bringup or for MTRR modifications
      during runtime.
      
      This avoids deadlock scenario (reported by Prarit) like:
      
      cpu A holds a read_lock (tasklist_lock for example) with irqs enabled
      cpu B waits for the same lock with irqs disabled using write_lock_irq
      cpu C doing set_mtrr() (during AP bringup for example), which will try to
      rendezvous all the cpus using IPI's
      
      This will result in C and A come to the rendezvous point and waiting
      for B. B is stuck forever waiting for the lock and thus not
      reaching the rendezvous point.
      
      Using stop cpu (run in the process context of per cpu based keventd) to do
      this rendezvous, avoids this deadlock scenario.
      
      Also make sure all the cpu's are in the rendezvous handler before we proceed
      with the local_irq_save() on each cpu. This lock step disabling irqs on all
      the cpus will avoid other deadlock scenarios (for example involving
      with the blocking smp_call_function's etc).
      
         [ This problem is very old. Marking -stable only for 2.6.35 as the
           stop_one_cpu_nowait() API is present only in 2.6.35. Any older
           kernel interested in this fix need to do some more work in backporting
           this patch. ]
      Reported-by: default avatarPrarit Bhargava <prarit@redhat.com>
      Signed-off-by: default avatarSuresh Siddha <suresh.b.siddha@intel.com>
      LKML-Reference: <1280515602.2682.10.camel@sbsiddha-MOBL3.sc.intel.com>
      Acked-by: default avatarPrarit Bhargava <prarit@redhat.com>
      Cc: stable@kernel.org	[2.6.35]
      Signed-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
      68f202e4
  2. 26 Jul, 2010 16 commits
  3. 25 Jul, 2010 2 commits
  4. 23 Jul, 2010 11 commits
    • Linus Torvalds's avatar
      Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc · 86c65a78
      Linus Torvalds authored
      * 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
        vmlinux.lds: fix .data..init_task output section (fix popwerpc boot)
        powerpc: Fix erroneous lmb->memblock conversions
        powerpc/mm: Add some debug output when hash insertion fails
        powerpc/mm: Fix bugs in huge page hashing
        powerpc/mm: Move around testing of _PAGE_PRESENT in hash code
        powerpc/mm: Handle hypervisor pte insert failure in __hash_page_huge
        powerpc/kexec: Fix boundary case for book-e kexec memory limits
      86c65a78
    • Linus Torvalds's avatar
      Merge branch 'rc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6 · 20a52d4f
      Linus Torvalds authored
      * 'rc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6:
        nconfig: Fix segfault when help contains special characters
        kbuild: Fix make rpm
        kbuild: Make the setlocalversion script POSIX-compliant
      20a52d4f
    • Linus Torvalds's avatar
      Merge branch 'perf-fixes-for-linus' of... · 339a2afc
      Linus Torvalds authored
      Merge branch 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
      
      * 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
        perf tools: Fix fallback to cplus_demangle() when bfd_demangle() is not available
        perf annotate: Fix handling of goto labels that are valid hex numbers
        tracing: Properly align linker defined symbols
        perf symbols: Fix directory descriptor leaking
        perf: Fix various display bugs with parent filtering
      339a2afc
    • Stephen Boyd's avatar
      nconfig: Fix segfault when help contains special characters · 58f915a3
      Stephen Boyd authored
      nconfig segfaults when help text contains the character '%'. For a quick
      example, navigate to the kernel compression options and get the help for
      bzip2. Doing so triggers a call to mvwprintw() with a string containing
      '%' and no extra arguments to fill in the specifier's value. Fix this
      case by printing the literal string retrieved from the kconfig.
      
       #0  0x00002b52b6b11d83 in vfprintf () from /lib/libc.so.6
       #1  0x00002b52b6bad010 in __vsnprintf_chk () from /lib/libc.so.6
       #2  0x00002b52b623991b in _nc_printf_string () from
       /lib/libncursesw.so.5
       #3  0x00002b52b6234cff in vwprintw () from /lib/libncursesw.so.5
       #4  0x00002b52b6234db9 in mvwprintw () from /lib/libncursesw.so.5
       #5  0x00000000004151d8 in fill_window (win=0x21b64c0,
           text=0x21b62b0 "CONFIG_KERNEL_BZIP2:\n\nIts compression ratio and
           speed is intermediate.\nDecompression speed is slowest among the
           three.  The kernel\nsize is about 10% smaller with bzip2, in
           comparison to gzip.\nBzip2 us"...)
           at scripts/kconfig/nconf.gui.c:229
       #6  0x0000000000416335 in show_scroll_win (main_window=0x21a5630,
               title=0x157fa30 "Bzip2",
       	    text=0x21b62b0 "CONFIG_KERNEL_BZIP2:\n\nIts compression
       	    ratio and speed is intermediate.\nDecompression speed is
       	    slowest among the three.  The kernel\nsize is about 10%
       	    smaller with bzip2, in comparison to gzip.\nBzip2 us"...)
           at scripts/kconfig/nconf.gui.c:535
       #7  0x00000000004055b2 in show_help (menu=0x157f9d0)
               at scripts/kconfig/nconf.c:1257
       #8  0x0000000000405897 in conf_choice (menu=0x157f130)
       	    at scripts/kconfig/nconf.c:1321
       #9  0x0000000000405326 in conf (menu=0x157d130) at
       	    scripts/kconfig/nconf.c:1208
       #10 0x00000000004052e8 in conf (menu=0xb434a0) at
       	    scripts/kconfig/nconf.c:1203
       #11 0x0000000000406092 in main (ac=2, av=0x7fff96a93c38)
      
      Cc: Michal Marek <mmarek@suse.cz>
      Cc: Nir Tzachar <nir.tzachar@gmail.com>
      Signed-off-by: default avatarStephen Boyd <bebarino@gmail.com>
      Signed-off-by: default avatarMichal Marek <mmarek@suse.cz>
      58f915a3
    • Avi Kivity's avatar
      KVM: Use kmalloc() instead of vmalloc() for KVM_[GS]ET_MSR · 7a73c028
      Avi Kivity authored
      We don't need more than a page, and vmalloc() is slower (much
      slower recently due to a regression).
      Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
      7a73c028
    • Xiao Guangrong's avatar
      KVM: MMU: fix conflict access permissions in direct sp · 6aa0b9de
      Xiao Guangrong authored
      In no-direct mapping, we mark sp is 'direct' when we mapping the
      guest's larger page, but its access is encoded form upper page-struct
      entire not include the last mapping, it will cause access conflict.
      
      For example, have this mapping:
              [W]
            / PDE1 -> |---|
        P[W]          |   | LPA
            \ PDE2 -> |---|
              [R]
      
      P have two children, PDE1 and PDE2, both PDE1 and PDE2 mapping the
      same lage page(LPA). The P's access is WR, PDE1's access is WR,
      PDE2's access is RO(just consider read-write permissions here)
      
      When guest access PDE1, we will create a direct sp for LPA, the sp's
      access is from P, is W, then we will mark the ptes is W in this sp.
      
      Then, guest access PDE2, we will find LPA's shadow page, is the same as
      PDE's, and mark the ptes is RO.
      
      So, if guest access PDE1, the incorrect #PF is occured.
      
      Fixed by encode the last mapping access into direct shadow page
      Signed-off-by: default avatarXiao Guangrong <xiaoguangrong@cn.fujitsu.com>
      Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
      Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
      6aa0b9de
    • Benjamin Herrenschmidt's avatar
      7ffb65f8
    • Sam Ravnborg's avatar
      vmlinux.lds: fix .data..init_task output section (fix popwerpc boot) · da5e37ef
      Sam Ravnborg authored
      The .data..init_task output section was missing
      a load offset causing a popwerpc target to fail to boot.
      
      Sean MacLennan tracked it down to the definition of
      INIT_TASK_DATA_SECTION().
      
      There are only two users of INIT_TASK_DATA_SECTION()
      in the kernel today: cris and popwerpc.
      cris do not support relocatable kernels and is thus not
      impacted by this change.
      
      Fix INIT_TASK_DATA_SECTION() to specify load offset like
      all other output sections.
      Reported-by: default avatarSean MacLennan <smaclennan@pikatech.com>
      Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      da5e37ef
    • Benjamin Herrenschmidt's avatar
      powerpc: Fix erroneous lmb->memblock conversions · 3fdfd990
      Benjamin Herrenschmidt authored
      Oooops... we missed these. We incorrectly converted strings
      used when parsing the device-tree on pseries, thus breaking
      access to drconf memory and hotplug memory.
      
      While at it, also revert some variable names that represent
      something the FW calls "lmb" and thus don't need to be converted
      to "memblock".
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      ---
      3fdfd990
    • Benjamin Herrenschmidt's avatar
      powerpc/mm: Add some debug output when hash insertion fails · 4b8692c0
      Benjamin Herrenschmidt authored
      This adds some debug output to our MMU hash code to print out some
      useful debug data if the hypervisor refuses the insertion (which
      should normally never happen).
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      ---
      4b8692c0
    • Benjamin Herrenschmidt's avatar
      powerpc/mm: Fix bugs in huge page hashing · 171aa2ca
      Benjamin Herrenschmidt authored
      There's a couple of nasty bugs lurking in our huge page hashing code.
      
      First, we don't check the access permission atomically with setting
      the _PAGE_BUSY bit, which means that the PTE value we end up using
      for the hashing might be different than the one we have checked
      the access permissions for.
      
      We've seen cases where that leads us to try to use an invalidated
      PTE for hashing, causing all sort of "interesting" issues.
      
      Then, we also failed to set _PAGE_DIRTY on a write access.
      
      Finally, a minor tweak but we should return 0 when we find the
      PTE busy, in order to just re-execute the access, rather than 1
      which means going to do_page_fault().
      Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      ---
      171aa2ca
  5. 22 Jul, 2010 10 commits