Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 6 Aug 2010 16:30:52 +0000 (09:30 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 6 Aug 2010 16:30:52 +0000 (09:30 -0700)
* 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (162 commits)
  tracing/kprobes: unregister_trace_probe needs to be called under mutex
  perf: expose event__process function
  perf events: Fix mmap offset determination
  perf, powerpc: fsl_emb: Restore setting perf_sample_data.period
  perf, powerpc: Convert the FSL driver to use local64_t
  perf tools: Don't keep unreferenced maps when unmaps are detected
  perf session: Invalidate last_match when removing threads from rb_tree
  perf session: Free the ref_reloc_sym memory at the right place
  x86,mmiotrace: Add support for tracing STOS instruction
  perf, sched migration: Librarize task states and event headers helpers
  perf, sched migration: Librarize the GUI class
  perf, sched migration: Make the GUI class client agnostic
  perf, sched migration: Make it vertically scrollable
  perf, sched migration: Parameterize cpu height and spacing
  perf, sched migration: Fix key bindings
  perf, sched migration: Ignore unhandled task states
  perf, sched migration: Handle ignored migrate out events
  perf: New migration tool overview
  tracing: Drop cpparg() macro
  perf: Use tracepoint_synchronize_unregister() to flush any pending tracepoint call
  ...

Fix up trivial conflicts in Makefile and drivers/cpufreq/cpufreq.c

13 files changed:
1  2 
Documentation/kernel-parameters.txt
MAINTAINERS
Makefile
include/asm-generic/vmlinux.lds.h
include/linux/kernel.h
init/main.c
kernel/hw_breakpoint.c
kernel/timer.c
kernel/trace/Makefile
kernel/trace/trace.c
kernel/trace/trace.h
lib/Kconfig.debug
mm/slob.c

index f72ba727441faa8dd6f06ba78931052aeb62a2b5,c45a3548537a9e23b326e5d529fbd2ab5adaabca..f20c7abc0329ca520d524a5c135a5597a8484086
@@@ -93,7 -93,6 +93,7 @@@ parameter is applicable
                        Documentation/scsi/.
        SECURITY Different security models are enabled.
        SELINUX SELinux support is enabled.
 +      APPARMOR AppArmor support is enabled.
        SERIAL  Serial support is enabled.
        SH      SuperH architecture is enabled.
        SMP     The kernel is an SMP kernel.
                        More X86-64 boot options can be found in
                        Documentation/x86/x86_64/boot-options.txt .
        X86     Either 32bit or 64bit x86 (same as X86-32+X86-64)
 +      XEN     Xen support is enabled
  
  In addition, the following text indicates that the option:
  
@@@ -1145,12 -1143,9 +1145,12 @@@ and is between 256 and 4096 characters
        kgdboc=         [KGDB,HW] kgdb over consoles.
                        Requires a tty driver that supports console polling,
                        or a supported polling keyboard driver (non-usb).
 -                      Serial only format: <serial_device>[,baud]
 -                      keyboard only format: kbd
 -                      keyboard and serial format: kbd,<serial_device>[,baud]
 +                       Serial only format: <serial_device>[,baud]
 +                       keyboard only format: kbd
 +                       keyboard and serial format: kbd,<serial_device>[,baud]
 +                      Optional Kernel mode setting:
 +                       kms, kbd format: kms,kbd
 +                       kms, kbd and serial format: kms,kbd,<ser_dev>[,baud]
  
        kgdbwait        [KGDB] Stop kernel execution and enter the
                        kernel debugger at the earliest opportunity.
                        [NETFILTER] Enable connection tracking flow accounting
                        0 to disable accounting
                        1 to enable accounting
 -                      Default value depends on CONFIG_NF_CT_ACCT that is
 -                      going to be removed in 2.6.29.
 +                      Default value is 0.
  
        nfsaddrs=       [NFS]
                        See Documentation/filesystems/nfs/nfsroot.txt.
  
        nousb           [USB] Disable the USB subsystem
  
+       nowatchdog      [KNL] Disable the lockup detector.
        nowb            [ARM]
  
        nox2apic        [X86-64,APIC] Do not enable x2APIC mode.
                        If enabled at boot time, /selinux/disable can be used
                        later to disable prior to initial policy load.
  
 +      apparmor=       [APPARMOR] Disable or enable AppArmor at boot time
 +                      Format: { "0" | "1" }
 +                      See security/apparmor/Kconfig help text
 +                      0 -- disable.
 +                      1 -- enable.
 +                      Default value is set via kernel config option.
 +
        serialnumber    [BUGS=X86-32]
  
        shapers=        [NET]
        xd=             [HW,XT] Original XT pre-IDE (RLL encoded) disks.
        xd_geo=         See header of drivers/block/xd.c.
  
 +      xen_emul_unplug=                [HW,X86,XEN]
 +                      Unplug Xen emulated devices
 +                      Format: [unplug0,][unplug1]
 +                      ide-disks -- unplug primary master IDE devices
 +                      aux-ide-disks -- unplug non-primary-master IDE devices
 +                      nics -- unplug network devices
 +                      all -- unplug all emulated devices (NICs and IDE disks)
 +                      ignore -- continue loading the Xen platform PCI driver even
 +                              if the version check failed
 +
        xirc2ps_cs=     [NET,PCMCIA]
                        Format:
                        <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
diff --combined MAINTAINERS
index 11e34d5272b8aa7f1912af8b07e71a66269ddf03,5d5f9e2617fcd34f3d4a1a214bb32d2e8abe6c47..100a3f535c9f579be993d6833b1a5939cc158b91
@@@ -313,9 -313,11 +313,9 @@@ S:        Maintaine
  F:    drivers/hwmon/adm1029.c
  
  ADM8211 WIRELESS DRIVER
 -M:    Michael Wu <flamingice@sourmilk.net>
  L:    linux-wireless@vger.kernel.org
  W:    http://linuxwireless.org/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mwu/mac80211-drivers.git
 -S:    Maintained
 +S:    Orphan
  F:    drivers/net/wireless/adm8211.*
  
  ADT746X FAN DRIVER
@@@ -1367,7 -1369,7 +1367,7 @@@ BROADCOM BNX2X 10 GIGABIT ETHERNET DRIV
  M:    Eilon Greenstein <eilong@broadcom.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/bnx2x*
 +F:    drivers/net/bnx2x/
  
  BROADCOM TG3 GIGABIT ETHERNET DRIVER
  M:    Matt Carlson <mcarlson@broadcom.com>
@@@ -1569,16 -1571,6 +1569,16 @@@ L:    platform-driver-x86@vger.kernel.or
  S:    Supported
  F:    drivers/platform/x86/classmate-laptop.c
  
 +COCCINELLE/Semantic Patches (SmPL)
 +M:    Julia Lawall <julia@diku.dk>
 +M:    Gilles Muller <Gilles.Muller@lip6.fr>
 +M:    Nicolas Palix <npalix@diku.dk>
 +L:    cocci@diku.dk (moderated for non-subscribers)
 +W:    http://coccinelle.lip6.fr/
 +S:    Supported
 +F:    scripts/coccinelle/
 +F:    scripts/coccicheck
 +
  CODA FILE SYSTEM
  M:    Jan Harkes <jaharkes@cs.cmu.edu>
  M:    coda@cs.cmu.edu
@@@ -1779,13 -1771,6 +1779,13 @@@ W:    http://www.openfabrics.or
  S:    Supported
  F:    drivers/infiniband/hw/cxgb4/
  
 +CXGB4VF ETHERNET DRIVER (CXGB4VF)
 +M:    Casey Leedom <leedom@chelsio.com>
 +L:    netdev@vger.kernel.org
 +W:    http://www.chelsio.com
 +S:    Supported
 +F:    drivers/net/cxgb4vf/
 +
  CYBERPRO FB DRIVER
  M:    Russell King <linux@arm.linux.org.uk>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -2635,14 -2620,6 +2635,14 @@@ S:    Maintaine
  F:    Documentation/blockdev/cpqarray.txt
  F:    drivers/block/cpqarray.*
  
 +HEWLETT-PACKARD SMART ARRAY RAID DRIVER (hpsa)
 +M:    Stephen M. Cameron <scameron@beardog.cce.hp.com>
 +L:    iss_storagedev@hp.com
 +S:    Supported
 +F:    Documentation/scsi/hpsa.txt
 +F:    drivers/scsi/hpsa*.[ch]
 +F:    include/linux/cciss*.h
 +
  HEWLETT-PACKARD SMART CISS RAID DRIVER (cciss)
  M:    Mike Miller <mike.miller@hp.com>
  L:    iss_storagedev@hp.com
@@@ -3276,8 -3253,8 +3276,8 @@@ F:      fs/autofs4
  
  KERNEL BUILD + files below scripts/ (unless maintained elsewhere)
  M:    Michal Marek <mmarek@suse.cz>
 -T:    git git://repo.or.cz/linux-kbuild.git for-next
 -T:    git git://repo.or.cz/linux-kbuild.git for-linus
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6.git for-next
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6.git rc-fixes
  L:    linux-kbuild@vger.kernel.org
  S:    Maintained
  F:    Documentation/kbuild/
@@@ -3403,13 -3380,6 +3403,6 @@@ F:     include/linux/kmemleak.
  F:    mm/kmemleak.c
  F:    mm/kmemleak-test.c
  
- KMEMTRACE
- M:    Eduard - Gabriel Munteanu <eduard.munteanu@linux360.ro>
- S:    Maintained
- F:    Documentation/trace/kmemtrace.txt
- F:    include/linux/kmemtrace.h
- F:    kernel/trace/kmemtrace.c
  KPROBES
  M:    Ananth N Mavinakayanahalli <ananth@in.ibm.com>
  M:    Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
@@@ -3709,7 -3679,7 +3702,7 @@@ F:      include/linux/mv643xx.
  MARVELL MWL8K WIRELESS DRIVER
  M:    Lennert Buytenhek <buytenh@wantstofly.org>
  L:    linux-wireless@vger.kernel.org
 -S:    Maintained
 +S:    Odd Fixes
  F:    drivers/net/wireless/mwl8k.c
  
  MARVELL SOC MMC/SD/SDIO CONTROLLER DRIVER
@@@ -3938,19 -3908,17 +3931,19 @@@ L:   netem@lists.linux-foundation.or
  S:    Maintained
  F:    net/sched/sch_netem.c
  
 -NETERION (S2IO) 10GbE DRIVER (xframe/vxge)
 -M:    Ramkrishna Vepa <ram.vepa@neterion.com>
 -M:    Rastapur Santosh <santosh.rastapur@neterion.com>
 -M:    Sivakumar Subramani <sivakumar.subramani@neterion.com>
 -M:    Sreenivasa Honnur <sreenivasa.honnur@neterion.com>
 +NETERION 10GbE DRIVERS (s2io/vxge)
 +M:    Ramkrishna Vepa <ramkrishna.vepa@exar.com>
 +M:    Sivakumar Subramani <sivakumar.subramani@exar.com>
 +M:    Sreenivasa Honnur <sreenivasa.honnur@exar.com>
 +M:    Jon Mason <jon.mason@exar.com>
  L:    netdev@vger.kernel.org
  W:    http://trac.neterion.com/cgi-bin/trac.cgi/wiki/Linux?Anonymous
  W:    http://trac.neterion.com/cgi-bin/trac.cgi/wiki/X3100Linux?Anonymous
  S:    Supported
  F:    Documentation/networking/s2io.txt
  F:    drivers/net/s2io*
 +F:    Documentation/networking/vxge.txt
 +F:    drivers/net/vxge/
  
  NETFILTER/IPTABLES/IPCHAINS
  P:    Rusty Russell
@@@ -4297,9 -4265,10 +4290,9 @@@ F:     include/scsi/osd_
  F:    fs/exofs/
  
  P54 WIRELESS DRIVER
 -M:    Michael Wu <flamingice@sourmilk.net>
 +M:    Christian Lamparter <chunkeey@googlemail.com>
  L:    linux-wireless@vger.kernel.org
 -W:    http://prism54.org
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mwu/mac80211-drivers.git
 +W:    http://wireless.kernel.org/en/users/Drivers/p54
  S:    Maintained
  F:    drivers/net/wireless/p54/
  
@@@ -4561,7 -4530,7 +4554,7 @@@ PRISM54 WIRELESS DRIVE
  M:    "Luis R. Rodriguez" <mcgrof@gmail.com>
  L:    linux-wireless@vger.kernel.org
  W:    http://prism54.org
 -S:    Maintained
 +S:    Obsolete
  F:    drivers/net/wireless/prism54/
  
  PROMISE DC4030 CACHING DISK CONTROLLER DRIVER
@@@ -4741,7 -4710,7 +4734,7 @@@ T:      git git://git.kernel.org/pub/scm/lin
  F:    drivers/net/wireless/rt2x00/
  
  RAMDISK RAM BLOCK DEVICE DRIVER
 -M:    Nick Piggin <npiggin@suse.de>
 +M:    Nick Piggin <npiggin@kernel.dk>
  S:    Maintained
  F:    Documentation/blockdev/ramdisk.txt
  F:    drivers/block/brd.c
@@@ -4757,8 -4726,9 +4750,8 @@@ S:      Maintaine
  F:    drivers/rapidio/
  
  RAYLINK/WEBGEAR 802.11 WIRELESS LAN DRIVER
 -M:    Corey Thomas <coreythomas@charter.net>
  L:    linux-wireless@vger.kernel.org
 -S:    Maintained
 +S:    Orphan
  F:    drivers/net/wireless/ray*
  
  RCUTORTURE MODULE
@@@ -5084,14 -5054,6 +5077,14 @@@ S:    Supporte
  F:    include/linux/selinux*
  F:    security/selinux/
  
 +APPARMOR SECURITY MODULE
 +M:    John Johansen <john.johansen@canonical.com>
 +L:    apparmor@lists.ubuntu.com (subscribers-only, general discussion)
 +W:    apparmor.wiki.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jj/apparmor-dev.git
 +S:    Supported
 +F:    security/apparmor/
 +
  SENSABLE PHANTOM
  M:    Jiri Slaby <jirislaby@gmail.com>
  S:    Maintained
@@@ -5367,7 -5329,7 +5360,7 @@@ T:      git git://git.kernel.org/pub/scm/lin
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6.git
  S:    Maintained
  F:    arch/sparc/
 -F:    drivers/sbus
 +F:    drivers/sbus/
  
  SPARC SERIAL DRIVERS
  M:    "David S. Miller" <davem@davemloft.net>
@@@ -5636,7 -5598,7 +5629,7 @@@ L:      tomoyo-users-en@lists.sourceforge.j
  L:    tomoyo-dev@lists.sourceforge.jp (subscribers-only, for developers in Japanese)
  L:    tomoyo-users@lists.sourceforge.jp (subscribers-only, for users in Japanese)
  W:    http://tomoyo.sourceforge.jp/
 -T:    quilt http://svn.sourceforge.jp/svnroot/tomoyo/trunk/2.2.x/tomoyo-lsm/patches/
 +T:    quilt http://svn.sourceforge.jp/svnroot/tomoyo/trunk/2.3.x/tomoyo-lsm/patches/
  S:    Maintained
  F:    security/tomoyo/
  
@@@ -5685,7 -5647,7 +5678,7 @@@ TRACIN
  M:    Steven Rostedt <rostedt@goodmis.org>
  M:    Frederic Weisbecker <fweisbec@gmail.com>
  M:    Ingo Molnar <mingo@redhat.com>
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git tracing/core
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git perf/core
  S:    Maintained
  F:    Documentation/trace/ftrace.txt
  F:    arch/*/*/*/ftrace.h
@@@ -6091,9 -6053,10 +6084,9 @@@ F:     Documentation/video4linux/zc0301.tx
  F:    drivers/media/video/zc0301/
  
  USB ZD1201 DRIVER
 -M:    Jeroen Vreeken <pe1rxq@amsat.org>
 -L:    linux-usb@vger.kernel.org
 +L:    linux-wireless@vger.kernel.org
  W:    http://linux-lc100020.sourceforge.net
 -S:    Maintained
 +S:    Orphan
  F:    drivers/net/wireless/zd1201.*
  
  USB ZR364XX DRIVER
@@@ -6281,6 -6244,14 +6274,6 @@@ F:     Documentation/watchdog
  F:    drivers/watchdog/
  F:    include/linux/watchdog.h
  
 -WAVELAN NETWORK DRIVER & WIRELESS EXTENSIONS
 -M:    Jean Tourrilhes <jt@hpl.hp.com>
 -L:    linux-wireless@vger.kernel.org
 -W:    http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/
 -S:    Maintained
 -F:    Documentation/networking/wavelan.txt
 -F:    drivers/staging/wavelan/
 -
  WD7000 SCSI DRIVER
  M:    Miroslav Zagorac <zaga@fly.cc.fer.hr>
  L:    linux-scsi@vger.kernel.org
diff --combined Makefile
index 66c94aad36651e723898749f94c163a72bf90705,85a14f5b74e971825e344b80bb1a4129c82d7167..7431c283f15b3efaed73050a0c33d721a9fc8a57
+++ b/Makefile
@@@ -332,9 -332,10 +332,9 @@@ CHECK             = spars
  
  CHECKFLAGS     := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
                  -Wbitwise -Wno-return-void $(CF)
 -MODFLAGS      = -DMODULE
 -CFLAGS_MODULE   = $(MODFLAGS)
 -AFLAGS_MODULE   = $(MODFLAGS)
 -LDFLAGS_MODULE  = -T $(srctree)/scripts/module-common.lds
 +CFLAGS_MODULE   =
 +AFLAGS_MODULE   =
 +LDFLAGS_MODULE  =
  CFLAGS_KERNEL =
  AFLAGS_KERNEL =
  CFLAGS_GCOV   = -fprofile-arcs -ftest-coverage
@@@ -353,12 -354,7 +353,12 @@@ KBUILD_CFLAGS   := -Wall -Wundef -Wstri
                   -Werror-implicit-function-declaration \
                   -Wno-format-security \
                   -fno-delete-null-pointer-checks
 +KBUILD_AFLAGS_KERNEL :=
 +KBUILD_CFLAGS_KERNEL :=
  KBUILD_AFLAGS   := -D__ASSEMBLY__
 +KBUILD_AFLAGS_MODULE  := -DMODULE
 +KBUILD_CFLAGS_MODULE  := -DMODULE
 +KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds
  
  # Read KERNELRELEASE from include/config/kernel.release (if it exists)
  KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
@@@ -373,8 -369,6 +373,8 @@@ export HOSTCXX HOSTCXXFLAGS LDFLAGS_MOD
  export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS
  export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE CFLAGS_GCOV
  export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
 +export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
 +export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
  
  # When compiling out-of-tree modules, put MODVERDIR in the module
  # tree rather than in the kernel tree. The kernel tree might
@@@ -418,9 -412,9 +418,9 @@@ endi
  # of make so .config is not included in this case either (for *config).
  
  no-dot-config-targets := clean mrproper distclean \
 -                       cscope TAGS tags help %docs check% \
 +                       cscope TAGS tags help %docs check% coccicheck \
                         include/linux/version.h headers_% \
-                        kernelversion
 -                       kernelrelease kernelversion %src-pkg
++                       kernelversion %src-pkg
  
  config-targets := 0
  mixed-targets  := 0
@@@ -532,7 -526,7 +532,7 @@@ endif # $(dot-config
  # The all: target is the default when no target is given on the
  # command line.
  # This allow a user to issue only 'make' to build a kernel including modules
 -# Defaults vmlinux but it is usually overridden in the arch makefile
 +# Defaults to vmlinux, but the arch makefile usually adds further targets
  all: vmlinux
  
  ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
@@@ -563,10 -557,6 +563,10 @@@ KBUILD_CFLAGS    += -
  KBUILD_AFLAGS += -gdwarf-2
  endif
  
 +ifdef CONFIG_DEBUG_INFO_REDUCED
 +KBUILD_CFLAGS         += $(call cc-option, -femit-struct-debug-baseonly)
 +endif
 +
  ifdef CONFIG_FUNCTION_TRACER
  KBUILD_CFLAGS += -pg
  endif
@@@ -613,7 -603,7 +613,7 @@@ endi
  # Use --build-id when available.
  LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\
                              $(call cc-ldoption, -Wl$(comma)--build-id,))
 -LDFLAGS_MODULE += $(LDFLAGS_BUILD_ID)
 +KBUILD_LDFLAGS_MODULE += $(LDFLAGS_BUILD_ID)
  LDFLAGS_vmlinux += $(LDFLAGS_BUILD_ID)
  
  ifeq ($(CONFIG_STRIP_ASM_SYMS),y)
@@@ -1168,6 -1158,8 +1168,8 @@@ distclean: mrprope
  # rpm target kept for backward compatibility
  package-dir   := $(srctree)/scripts/package
  
+ %src-pkg: FORCE
+       $(Q)$(MAKE) $(build)=$(package-dir) $@
  %pkg: include/config/kernel.release FORCE
        $(Q)$(MAKE) $(build)=$(package-dir) $@
  rpm: include/config/kernel.release FORCE
@@@ -1219,9 -1211,8 +1221,9 @@@ help
        @echo  '  includecheck    - Check for duplicate included header files'
        @echo  '  export_report   - List the usages of all exported symbols'
        @echo  '  headers_check   - Sanity check on exported headers'
 -      @echo  '  headerdep       - Detect inclusion cycles in headers'; \
 -       echo  ''
 +      @echo  '  headerdep       - Detect inclusion cycles in headers'
 +      @$(MAKE) -f $(srctree)/scripts/Makefile.help checker-help
 +      @echo  ''
        @echo  'Kernel packaging:'
        @$(MAKE) $(build)=$(package-dir) help
        @echo  ''
@@@ -1380,9 -1371,6 +1382,9 @@@ versioncheck
                -name '*.[hcS]' -type f -print | sort \
                | xargs $(PERL) -w $(srctree)/scripts/checkversion.pl
  
 +coccicheck:
 +      $(Q)$(CONFIG_SHELL) $(srctree)/scripts/$@
 +
  namespacecheck:
        $(PERL) $(srctree)/scripts/namespace.pl
  
@@@ -1407,9 -1395,9 +1409,9 @@@ checkstack
        $(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
        $(PERL) $(src)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
  
 -kernelrelease:
 -      $(if $(wildcard include/config/kernel.release), $(Q)echo $(KERNELRELEASE), \
 -      $(error kernelrelease not valid - run 'make prepare' to update it))
 +kernelrelease: include/config/kernel.release
 +      @echo $(KERNELRELEASE)
 +
  kernelversion:
        @echo $(KERNELVERSION)
  
@@@ -1486,7 -1474,6 +1488,7 @@@ cmd_crmodverdir = $(Q)mkdir -p $(MODVER
                    $(if $(KBUILD_MODULES),; rm -f $(MODVERDIR)/*)
  
  a_flags = -Wp,-MD,$(depfile) $(KBUILD_AFLAGS) $(AFLAGS_KERNEL) \
 +        $(KBUILD_AFLAGS_KERNEL)                              \
          $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(KBUILD_CPPFLAGS) \
          $(modkern_aflags) $(EXTRA_AFLAGS) $(AFLAGS_$(basetarget).o)
  
index 4e7ae6002056b0913c4d98e060bb0f7d129dfbf4,853aa871fc6cac42bc183b1f539d7d73a1e986fc..8a92a170fb7dfd87710bb26b3c7f384dd6801363
        CPU_KEEP(exit.data)                                             \
        MEM_KEEP(init.data)                                             \
        MEM_KEEP(exit.data)                                             \
-       . = ALIGN(8);                                                   \
-       VMLINUX_SYMBOL(__start___markers) = .;                          \
-       *(__markers)                                                    \
-       VMLINUX_SYMBOL(__stop___markers) = .;                           \
        . = ALIGN(32);                                                  \
        VMLINUX_SYMBOL(__start___tracepoints) = .;                      \
        *(__tracepoints)                                                \
        EXIT_DATA                                                       \
        EXIT_CALL                                                       \
        *(.discard)                                                     \
 +      *(.discard.*)                                                   \
        }
  
  /**
diff --combined include/linux/kernel.h
index 5de838b0fc1a62afb20fb75eda44089937f87eea,adee958b59895d185b7650a96a88708b42b03a05..38e462e00594f43dc5094b63bb52706cb7abb95f
@@@ -171,11 -171,6 +171,11 @@@ static inline void might_fault(void
  }
  #endif
  
 +struct va_format {
 +      const char *fmt;
 +      va_list *va;
 +};
 +
  extern struct atomic_notifier_head panic_notifier_list;
  extern long (*panic_blink)(long time);
  NORET_TYPE void panic(const char * fmt, ...)
@@@ -513,9 -508,6 +513,6 @@@ extern void tracing_start(void)
  extern void tracing_stop(void);
  extern void ftrace_off_permanent(void);
  
- extern void
- ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3);
  static inline void __attribute__ ((format (printf, 1, 2)))
  ____trace_printk_check_format(const char *fmt, ...)
  {
@@@ -591,8 -583,6 +588,6 @@@ __ftrace_vprintk(unsigned long ip, cons
  
  extern void ftrace_dump(enum ftrace_dump_mode oops_dump_mode);
  #else
- static inline void
- ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3) { }
  static inline int
  trace_printk(const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
  
@@@ -733,6 -723,12 +728,6 @@@ extern int do_sysinfo(struct sysinfo *i
  
  #endif /* __KERNEL__ */
  
 -#ifndef __EXPORTED_HEADERS__
 -#ifndef __KERNEL__
 -#warning Attempt to use kernel headers from user space, see http://kernelnewbies.org/KernelHeaders
 -#endif /* __KERNEL__ */
 -#endif /* __EXPORTED_HEADERS__ */
 -
  #define SI_LOAD_SHIFT 16
  struct sysinfo {
        long uptime;                    /* Seconds since boot */
diff --combined init/main.c
index 4ddb53f04f2acb0aefb84df89efc105e8f1ba90e,4ab5124a29520d6cf35614ab58ab302cf3253939..b03a4c1f69fa4f163a208783c7d9b4079ca541a0
  #include <linux/ftrace.h>
  #include <linux/async.h>
  #include <linux/kmemcheck.h>
- #include <linux/kmemtrace.h>
  #include <linux/sfi.h>
  #include <linux/shmem_fs.h>
  #include <linux/slab.h>
- #include <trace/boot.h>
  
  #include <asm/io.h>
  #include <asm/bugs.h>
@@@ -532,7 -530,6 +530,7 @@@ static void __init mm_init(void
        page_cgroup_init_flatmem();
        mem_init();
        kmem_cache_init();
 +      percpu_init_late();
        pgtable_cache_init();
        vmalloc_init();
  }
@@@ -664,7 -661,6 +662,6 @@@ asmlinkage void __init start_kernel(voi
  #endif
        page_cgroup_init();
        enable_debug_pagealloc();
-       kmemtrace_init();
        kmemleak_init();
        debug_objects_mem_init();
        idr_init_cache();
@@@ -726,38 -722,33 +723,33 @@@ int initcall_debug
  core_param(initcall_debug, initcall_debug, bool, 0644);
  
  static char msgbuf[64];
- static struct boot_trace_call call;
- static struct boot_trace_ret ret;
  
  int do_one_initcall(initcall_t fn)
  {
        int count = preempt_count();
        ktime_t calltime, delta, rettime;
+       unsigned long long duration;
+       int ret;
  
        if (initcall_debug) {
-               call.caller = task_pid_nr(current);
-               printk("calling  %pF @ %i\n", fn, call.caller);
+               printk("calling  %pF @ %i\n", fn, task_pid_nr(current));
                calltime = ktime_get();
-               trace_boot_call(&call, fn);
-               enable_boot_trace();
        }
  
-       ret.result = fn();
+       ret = fn();
  
        if (initcall_debug) {
-               disable_boot_trace();
                rettime = ktime_get();
                delta = ktime_sub(rettime, calltime);
-               ret.duration = (unsigned long long) ktime_to_ns(delta) >> 10;
-               trace_boot_ret(&ret, fn);
-               printk("initcall %pF returned %d after %Ld usecs\n", fn,
-                       ret.result, ret.duration);
+               duration = (unsigned long long) ktime_to_ns(delta) >> 10;
+               printk("initcall %pF returned %d after %lld usecs\n", fn,
+                       ret, duration);
        }
  
        msgbuf[0] = 0;
  
-       if (ret.result && ret.result != -ENODEV && initcall_debug)
-               sprintf(msgbuf, "error code %d ", ret.result);
+       if (ret && ret != -ENODEV && initcall_debug)
+               sprintf(msgbuf, "error code %d ", ret);
  
        if (preempt_count() != count) {
                strlcat(msgbuf, "preemption imbalance ", sizeof(msgbuf));
                printk("initcall %pF returned with %s\n", fn, msgbuf);
        }
  
-       return ret.result;
+       return ret;
  }
  
  
@@@ -895,7 -886,6 +887,6 @@@ static int __init kernel_init(void * un
        smp_prepare_cpus(setup_max_cpus);
  
        do_pre_smp_initcalls();
-       start_boot_trace();
  
        smp_init();
        sched_init_smp();
diff --combined kernel/hw_breakpoint.c
index 71ed3ce29e12e7d2dbe25d9e4b92e8d46a71fecd,e34d94d50924676c7395e59748fbf15adffd3362..d71a987fd2bf2ba5e698f9b69fccb59db4a1bb30
@@@ -41,6 -41,7 +41,7 @@@
  #include <linux/sched.h>
  #include <linux/init.h>
  #include <linux/slab.h>
+ #include <linux/list.h>
  #include <linux/cpu.h>
  #include <linux/smp.h>
  
@@@ -62,6 -63,9 +63,9 @@@ static DEFINE_PER_CPU(unsigned int, nr_
  
  static int nr_slots[TYPE_MAX];
  
+ /* Keep track of the breakpoints attached to tasks */
+ static LIST_HEAD(bp_task_head);
  static int constraints_initialized;
  
  /* Gather the number of total pinned and un-pinned bp in a cpuset */
@@@ -103,33 -107,21 +107,21 @@@ static unsigned int max_task_bp_pinned(
        return 0;
  }
  
- static int task_bp_pinned(struct task_struct *tsk, enum bp_type_idx type)
+ /*
+  * Count the number of breakpoints of the same type and same task.
+  * The given event must be not on the list.
+  */
+ static int task_bp_pinned(struct perf_event *bp, enum bp_type_idx type)
  {
-       struct perf_event_context *ctx = tsk->perf_event_ctxp;
-       struct list_head *list;
-       struct perf_event *bp;
-       unsigned long flags;
+       struct perf_event_context *ctx = bp->ctx;
+       struct perf_event *iter;
        int count = 0;
  
-       if (WARN_ONCE(!ctx, "No perf context for this task"))
-               return 0;
-       list = &ctx->event_list;
-       raw_spin_lock_irqsave(&ctx->lock, flags);
-       /*
-        * The current breakpoint counter is not included in the list
-        * at the open() callback time
-        */
-       list_for_each_entry(bp, list, event_entry) {
-               if (bp->attr.type == PERF_TYPE_BREAKPOINT)
-                       if (find_slot_idx(bp) == type)
-                               count += hw_breakpoint_weight(bp);
+       list_for_each_entry(iter, &bp_task_head, hw.bp_list) {
+               if (iter->ctx == ctx && find_slot_idx(iter) == type)
+                       count += hw_breakpoint_weight(iter);
        }
  
-       raw_spin_unlock_irqrestore(&ctx->lock, flags);
        return count;
  }
  
@@@ -149,7 -141,7 +141,7 @@@ fetch_bp_busy_slots(struct bp_busy_slot
                if (!tsk)
                        slots->pinned += max_task_bp_pinned(cpu, type);
                else
-                       slots->pinned += task_bp_pinned(tsk, type);
+                       slots->pinned += task_bp_pinned(bp, type);
                slots->flexible = per_cpu(nr_bp_flexible[type], cpu);
  
                return;
                if (!tsk)
                        nr += max_task_bp_pinned(cpu, type);
                else
-                       nr += task_bp_pinned(tsk, type);
+                       nr += task_bp_pinned(bp, type);
  
                if (nr > slots->pinned)
                        slots->pinned = nr;
@@@ -188,7 -180,7 +180,7 @@@ fetch_this_slot(struct bp_busy_slots *s
  /*
   * Add a pinned breakpoint for the given task in our constraint table
   */
- static void toggle_bp_task_slot(struct task_struct *tsk, int cpu, bool enable,
+ static void toggle_bp_task_slot(struct perf_event *bp, int cpu, bool enable,
                                enum bp_type_idx type, int weight)
  {
        unsigned int *tsk_pinned;
        int old_idx = 0;
        int idx = 0;
  
-       old_count = task_bp_pinned(tsk, type);
+       old_count = task_bp_pinned(bp, type);
        old_idx = old_count - 1;
        idx = old_idx + weight;
  
+       /* tsk_pinned[n] is the number of tasks having n breakpoints */
        tsk_pinned = per_cpu(nr_task_bp_pinned[type], cpu);
        if (enable) {
                tsk_pinned[idx]++;
@@@ -222,36 -215,32 +215,43 @@@ toggle_bp_slot(struct perf_event *bp, b
        int cpu = bp->cpu;
        struct task_struct *tsk = bp->ctx->task;
  
+       /* Pinned counter cpu profiling */
+       if (!tsk) {
+               if (enable)
+                       per_cpu(nr_cpu_bp_pinned[type], bp->cpu) += weight;
+               else
+                       per_cpu(nr_cpu_bp_pinned[type], bp->cpu) -= weight;
+               return;
+       }
        /* Pinned counter task profiling */
-       if (tsk) {
-               if (cpu >= 0) {
-                       toggle_bp_task_slot(tsk, cpu, enable, type, weight);
-                       return;
-               }
  
+       if (!enable)
+               list_del(&bp->hw.bp_list);
+       if (cpu >= 0) {
+               toggle_bp_task_slot(bp, cpu, enable, type, weight);
+       } else {
                for_each_online_cpu(cpu)
-                       toggle_bp_task_slot(tsk, cpu, enable, type, weight);
-               return;
+                       toggle_bp_task_slot(bp, cpu, enable, type, weight);
        }
  
-       /* Pinned counter cpu profiling */
        if (enable)
-               per_cpu(nr_cpu_bp_pinned[type], bp->cpu) += weight;
-       else
-               per_cpu(nr_cpu_bp_pinned[type], bp->cpu) -= weight;
+               list_add_tail(&bp->hw.bp_list, &bp_task_head);
  }
  
 +/*
 + * Function to perform processor-specific cleanup during unregistration
 + */
 +__weak void arch_unregister_hw_breakpoint(struct perf_event *bp)
 +{
 +      /*
 +       * A weak stub function here for those archs that don't define
 +       * it inside arch/.../kernel/hw_breakpoint.c
 +       */
 +}
 +
  /*
   * Contraints to check before allowing this new breakpoint counter:
   *
@@@ -312,6 -301,10 +312,10 @@@ static int __reserve_bp_slot(struct per
        weight = hw_breakpoint_weight(bp);
  
        fetch_bp_busy_slots(&slots, bp, type);
+       /*
+        * Simulate the addition of this breakpoint to the constraints
+        * and see the result.
+        */
        fetch_this_slot(&slots, weight);
  
        /* Flexible counters need to keep at least one slot */
@@@ -350,7 -343,6 +354,7 @@@ void release_bp_slot(struct perf_event 
  {
        mutex_lock(&nr_bp_mutex);
  
 +      arch_unregister_hw_breakpoint(bp);
        __release_bp_slot(bp);
  
        mutex_unlock(&nr_bp_mutex);
diff --combined kernel/timer.c
index efde11e197c4d40f2abd8badd13459e159fdb5cb,c29e2d4d2a665f921b3c3b5bf1177462962770e3..6aa6f7e69ad5d59b35d1e266092a709e75f98dee
@@@ -577,19 -577,6 +577,19 @@@ static void __init_timer(struct timer_l
        lockdep_init_map(&timer->lockdep_map, name, key, 0);
  }
  
 +void setup_deferrable_timer_on_stack_key(struct timer_list *timer,
 +                                       const char *name,
 +                                       struct lock_class_key *key,
 +                                       void (*function)(unsigned long),
 +                                       unsigned long data)
 +{
 +      timer->function = function;
 +      timer->data = data;
 +      init_timer_on_stack_key(timer, name, key);
 +      timer_set_deferrable(timer);
 +}
 +EXPORT_SYMBOL_GPL(setup_deferrable_timer_on_stack_key);
 +
  /**
   * init_timer_key - initialize a timer
   * @timer: the timer to be initialized
@@@ -1302,7 -1289,6 +1302,6 @@@ void run_local_timers(void
  {
        hrtimer_run_queues();
        raise_softirq(TIMER_SOFTIRQ);
-       softlockup_tick();
  }
  
  /*
diff --combined kernel/trace/Makefile
index 4215530b490b8659e2169ddb5e06bc91b5a7046d,438e84a56ab37cdbf2018686495b12774cae9deb..53f338190b260df929d3ef6020d2bad817fcc73f
@@@ -30,7 -30,6 +30,6 @@@ obj-$(CONFIG_TRACING) += trace_output.
  obj-$(CONFIG_TRACING) += trace_stat.o
  obj-$(CONFIG_TRACING) += trace_printk.o
  obj-$(CONFIG_CONTEXT_SWITCH_TRACER) += trace_sched_switch.o
- obj-$(CONFIG_SYSPROF_TRACER) += trace_sysprof.o
  obj-$(CONFIG_FUNCTION_TRACER) += trace_functions.o
  obj-$(CONFIG_IRQSOFF_TRACER) += trace_irqsoff.o
  obj-$(CONFIG_PREEMPT_TRACER) += trace_irqsoff.o
@@@ -38,10 -37,8 +37,8 @@@ obj-$(CONFIG_SCHED_TRACER) += trace_sch
  obj-$(CONFIG_NOP_TRACER) += trace_nop.o
  obj-$(CONFIG_STACK_TRACER) += trace_stack.o
  obj-$(CONFIG_MMIOTRACE) += trace_mmiotrace.o
- obj-$(CONFIG_BOOT_TRACER) += trace_boot.o
  obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += trace_functions_graph.o
  obj-$(CONFIG_TRACE_BRANCH_PROFILING) += trace_branch.o
- obj-$(CONFIG_KMEMTRACE) += kmemtrace.o
  obj-$(CONFIG_WORKQUEUE_TRACER) += trace_workqueue.o
  obj-$(CONFIG_BLK_DEV_IO_TRACE) += blktrace.o
  ifeq ($(CONFIG_BLOCK),y)
@@@ -55,10 -52,6 +52,9 @@@ obj-$(CONFIG_EVENT_TRACING) += trace_ev
  endif
  obj-$(CONFIG_EVENT_TRACING) += trace_events_filter.o
  obj-$(CONFIG_KPROBE_EVENT) += trace_kprobe.o
- obj-$(CONFIG_KSYM_TRACER) += trace_ksym.o
  obj-$(CONFIG_EVENT_TRACING) += power-traces.o
 +ifeq ($(CONFIG_TRACING),y)
 +obj-$(CONFIG_KGDB_KDB) += trace_kdb.o
 +endif
  
  libftrace-y := ftrace.o
diff --combined kernel/trace/trace.c
index d6736b93dc2aed0a1934165cf945012306a2f516,4b1122d0df37fb02087e160b624d63dc4415c383..ed1032d6f81de5afd35f4c017a849394d4d9615f
@@@ -101,7 -101,10 +101,7 @@@ static inline void ftrace_enable_cpu(vo
        preempt_enable();
  }
  
 -static cpumask_var_t __read_mostly    tracing_buffer_mask;
 -
 -#define for_each_tracing_cpu(cpu)     \
 -      for_each_cpu(cpu, tracing_buffer_mask)
 +cpumask_var_t __read_mostly   tracing_buffer_mask;
  
  /*
   * ftrace_dump_on_oops - variable to dump ftrace buffer on oops
@@@ -341,7 -344,7 +341,7 @@@ static DECLARE_WAIT_QUEUE_HEAD(trace_wa
  /* trace_flags holds trace_options default values */
  unsigned long trace_flags = TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK |
        TRACE_ITER_ANNOTATE | TRACE_ITER_CONTEXT_INFO | TRACE_ITER_SLEEP_TIME |
-       TRACE_ITER_GRAPH_TIME;
+       TRACE_ITER_GRAPH_TIME | TRACE_ITER_RECORD_CMD;
  
  static int trace_stop_count;
  static DEFINE_SPINLOCK(tracing_start_lock);
@@@ -425,6 -428,7 +425,7 @@@ static const char *trace_options[] = 
        "latency-format",
        "sleep-time",
        "graph-time",
+       "record-cmd",
        NULL
  };
  
@@@ -656,6 -660,10 +657,10 @@@ update_max_tr(struct trace_array *tr, s
                return;
  
        WARN_ON_ONCE(!irqs_disabled());
+       if (!current_trace->use_max_tr) {
+               WARN_ON_ONCE(1);
+               return;
+       }
        arch_spin_lock(&ftrace_max_lock);
  
        tr->buffer = max_tr.buffer;
@@@ -682,6 -690,11 +687,11 @@@ update_max_tr_single(struct trace_arra
                return;
  
        WARN_ON_ONCE(!irqs_disabled());
+       if (!current_trace->use_max_tr) {
+               WARN_ON_ONCE(1);
+               return;
+       }
        arch_spin_lock(&ftrace_max_lock);
  
        ftrace_disable_cpu();
@@@ -726,7 -739,7 +736,7 @@@ __acquires(kernel_lock
                return -1;
        }
  
-       if (strlen(type->name) > MAX_TRACER_SIZE) {
+       if (strlen(type->name) >= MAX_TRACER_SIZE) {
                pr_info("Tracer has a name longer than %d\n", MAX_TRACER_SIZE);
                return -1;
        }
@@@ -1328,61 -1341,6 +1338,6 @@@ static void __trace_userstack(struct tr
  
  #endif /* CONFIG_STACKTRACE */
  
- static void
- ftrace_trace_special(void *__tr,
-                    unsigned long arg1, unsigned long arg2, unsigned long arg3,
-                    int pc)
- {
-       struct ftrace_event_call *call = &event_special;
-       struct ring_buffer_event *event;
-       struct trace_array *tr = __tr;
-       struct ring_buffer *buffer = tr->buffer;
-       struct special_entry *entry;
-       event = trace_buffer_lock_reserve(buffer, TRACE_SPECIAL,
-                                         sizeof(*entry), 0, pc);
-       if (!event)
-               return;
-       entry   = ring_buffer_event_data(event);
-       entry->arg1                     = arg1;
-       entry->arg2                     = arg2;
-       entry->arg3                     = arg3;
-       if (!filter_check_discard(call, entry, buffer, event))
-               trace_buffer_unlock_commit(buffer, event, 0, pc);
- }
- void
- __trace_special(void *__tr, void *__data,
-               unsigned long arg1, unsigned long arg2, unsigned long arg3)
- {
-       ftrace_trace_special(__tr, arg1, arg2, arg3, preempt_count());
- }
- void
- ftrace_special(unsigned long arg1, unsigned long arg2, unsigned long arg3)
- {
-       struct trace_array *tr = &global_trace;
-       struct trace_array_cpu *data;
-       unsigned long flags;
-       int cpu;
-       int pc;
-       if (tracing_disabled)
-               return;
-       pc = preempt_count();
-       local_irq_save(flags);
-       cpu = raw_smp_processor_id();
-       data = tr->data[cpu];
-       if (likely(atomic_inc_return(&data->disabled) == 1))
-               ftrace_trace_special(tr, arg1, arg2, arg3, pc);
-       atomic_dec(&data->disabled);
-       local_irq_restore(flags);
- }
  /**
   * trace_vbprintk - write binary msg to tracing buffer
   *
@@@ -1401,7 -1359,6 +1356,6 @@@ int trace_vbprintk(unsigned long ip, co
        struct bprint_entry *entry;
        unsigned long flags;
        int disable;
-       int resched;
        int cpu, len = 0, size, pc;
  
        if (unlikely(tracing_selftest_running || tracing_disabled))
        pause_graph_tracing();
  
        pc = preempt_count();
-       resched = ftrace_preempt_disable();
+       preempt_disable_notrace();
        cpu = raw_smp_processor_id();
        data = tr->data[cpu];
  
@@@ -1449,7 -1406,7 +1403,7 @@@ out_unlock
  
  out:
        atomic_dec_return(&data->disabled);
-       ftrace_preempt_enable(resched);
+       preempt_enable_notrace();
        unpause_graph_tracing();
  
        return len;
@@@ -1536,6 -1493,11 +1490,6 @@@ int trace_vprintk(unsigned long ip, con
  }
  EXPORT_SYMBOL_GPL(trace_vprintk);
  
 -enum trace_file_type {
 -      TRACE_FILE_LAT_FMT      = 1,
 -      TRACE_FILE_ANNOTATE     = 2,
 -};
 -
  static void trace_iterator_increment(struct trace_iterator *iter)
  {
        /* Don't allow ftrace to trace into the ring buffers */
@@@ -1633,7 -1595,7 +1587,7 @@@ struct trace_entry *trace_find_next_ent
  }
  
  /* Find the next real entry, and increment the iterator to the next entry */
 -static void *find_next_entry_inc(struct trace_iterator *iter)
 +void *trace_find_next_entry_inc(struct trace_iterator *iter)
  {
        iter->ent = __find_next_entry(iter, &iter->cpu,
                                      &iter->lost_events, &iter->ts);
@@@ -1668,19 -1630,19 +1622,19 @@@ static void *s_next(struct seq_file *m
                return NULL;
  
        if (iter->idx < 0)
 -              ent = find_next_entry_inc(iter);
 +              ent = trace_find_next_entry_inc(iter);
        else
                ent = iter;
  
        while (ent && iter->idx < i)
 -              ent = find_next_entry_inc(iter);
 +              ent = trace_find_next_entry_inc(iter);
  
        iter->pos = *pos;
  
        return ent;
  }
  
 -static void tracing_iter_reset(struct trace_iterator *iter, int cpu)
 +void tracing_iter_reset(struct trace_iterator *iter, int cpu)
  {
        struct trace_array *tr = iter->tr;
        struct ring_buffer_event *event;
@@@ -2041,7 -2003,7 +1995,7 @@@ int trace_empty(struct trace_iterator *
  }
  
  /*  Called with trace_event_read_lock() held. */
 -static enum print_line_t print_trace_line(struct trace_iterator *iter)
 +enum print_line_t print_trace_line(struct trace_iterator *iter)
  {
        enum print_line_t ret;
  
@@@ -2386,6 -2348,7 +2340,7 @@@ static const struct file_operations sho
        .open           = show_traces_open,
        .read           = seq_read,
        .release        = seq_release,
+       .llseek         = seq_lseek,
  };
  
  /*
@@@ -2479,6 -2442,7 +2434,7 @@@ static const struct file_operations tra
        .open           = tracing_open_generic,
        .read           = tracing_cpumask_read,
        .write          = tracing_cpumask_write,
+       .llseek         = generic_file_llseek,
  };
  
  static int tracing_trace_options_show(struct seq_file *m, void *v)
@@@ -2554,6 -2518,9 +2510,9 @@@ static void set_tracer_flags(unsigned i
                trace_flags |= mask;
        else
                trace_flags &= ~mask;
+       if (mask == TRACE_ITER_RECORD_CMD)
+               trace_event_enable_cmd_record(enabled);
  }
  
  static ssize_t
@@@ -2645,6 -2612,7 +2604,7 @@@ tracing_readme_read(struct file *filp, 
  static const struct file_operations tracing_readme_fops = {
        .open           = tracing_open_generic,
        .read           = tracing_readme_read,
+       .llseek         = generic_file_llseek,
  };
  
  static ssize_t
@@@ -2695,6 -2663,7 +2655,7 @@@ tracing_saved_cmdlines_read(struct fil
  static const struct file_operations tracing_saved_cmdlines_fops = {
      .open       = tracing_open_generic,
      .read       = tracing_saved_cmdlines_read,
+     .llseek   = generic_file_llseek,
  };
  
  static ssize_t
@@@ -2790,6 -2759,9 +2751,9 @@@ static int tracing_resize_ring_buffer(u
        if (ret < 0)
                return ret;
  
+       if (!current_trace->use_max_tr)
+               goto out;
        ret = ring_buffer_resize(max_tr.buffer, size);
        if (ret < 0) {
                int r;
                return ret;
        }
  
+       max_tr.entries = size;
+  out:
        global_trace.entries = size;
  
        return ret;
  }
  
  /**
   * tracing_update_buffers - used by tracing facility to expand ring buffers
   *
@@@ -2882,12 -2857,26 +2849,26 @@@ static int tracing_set_tracer(const cha
        trace_branch_disable();
        if (current_trace && current_trace->reset)
                current_trace->reset(tr);
+       if (current_trace && current_trace->use_max_tr) {
+               /*
+                * We don't free the ring buffer. instead, resize it because
+                * The max_tr ring buffer has some state (e.g. ring->clock) and
+                * we want preserve it.
+                */
+               ring_buffer_resize(max_tr.buffer, 1);
+               max_tr.entries = 1;
+       }
        destroy_trace_option_files(topts);
  
        current_trace = t;
  
        topts = create_trace_option_files(current_trace);
+       if (current_trace->use_max_tr) {
+               ret = ring_buffer_resize(max_tr.buffer, global_trace.entries);
+               if (ret < 0)
+                       goto out;
+               max_tr.entries = global_trace.entries;
+       }
  
        if (t->init) {
                ret = tracer_init(t, tr);
@@@ -3024,6 -3013,7 +3005,7 @@@ static int tracing_open_pipe(struct ino
        if (iter->trace->pipe_open)
                iter->trace->pipe_open(iter);
  
+       nonseekable_open(inode, filp);
  out:
        mutex_unlock(&trace_types_lock);
        return ret;
@@@ -3203,7 -3193,7 +3185,7 @@@ waitagain
  
        trace_event_read_lock();
        trace_access_lock(iter->cpu_file);
 -      while (find_next_entry_inc(iter) != NULL) {
 +      while (trace_find_next_entry_inc(iter) != NULL) {
                enum print_line_t ret;
                int len = iter->seq.len;
  
@@@ -3286,7 -3276,7 +3268,7 @@@ tracing_fill_pipe_page(size_t rem, stru
                if (ret != TRACE_TYPE_NO_CONSUME)
                        trace_consume(iter);
                rem -= count;
 -              if (!find_next_entry_inc(iter)) {
 +              if (!trace_find_next_entry_inc(iter))   {
                        rem = 0;
                        iter->ent = NULL;
                        break;
@@@ -3342,7 -3332,7 +3324,7 @@@ static ssize_t tracing_splice_read_pipe
        if (ret <= 0)
                goto out_err;
  
 -      if (!iter->ent && !find_next_entry_inc(iter)) {
 +      if (!iter->ent && !trace_find_next_entry_inc(iter)) {
                ret = -EFAULT;
                goto out_err;
        }
@@@ -3469,7 -3459,6 +3451,6 @@@ tracing_entries_write(struct file *filp
        }
  
        tracing_start();
-       max_tr.entries = global_trace.entries;
        mutex_unlock(&trace_types_lock);
  
        return cnt;
@@@ -3582,18 -3571,21 +3563,21 @@@ static const struct file_operations tra
        .open           = tracing_open_generic,
        .read           = tracing_max_lat_read,
        .write          = tracing_max_lat_write,
+       .llseek         = generic_file_llseek,
  };
  
  static const struct file_operations tracing_ctrl_fops = {
        .open           = tracing_open_generic,
        .read           = tracing_ctrl_read,
        .write          = tracing_ctrl_write,
+       .llseek         = generic_file_llseek,
  };
  
  static const struct file_operations set_tracer_fops = {
        .open           = tracing_open_generic,
        .read           = tracing_set_trace_read,
        .write          = tracing_set_trace_write,
+       .llseek         = generic_file_llseek,
  };
  
  static const struct file_operations tracing_pipe_fops = {
        .read           = tracing_read_pipe,
        .splice_read    = tracing_splice_read_pipe,
        .release        = tracing_release_pipe,
+       .llseek         = no_llseek,
  };
  
  static const struct file_operations tracing_entries_fops = {
        .open           = tracing_open_generic,
        .read           = tracing_entries_read,
        .write          = tracing_entries_write,
+       .llseek         = generic_file_llseek,
  };
  
  static const struct file_operations tracing_mark_fops = {
        .open           = tracing_open_generic,
        .write          = tracing_mark_write,
+       .llseek         = generic_file_llseek,
  };
  
  static const struct file_operations trace_clock_fops = {
@@@ -3918,6 -3913,7 +3905,7 @@@ tracing_stats_read(struct file *filp, c
  static const struct file_operations tracing_stats_fops = {
        .open           = tracing_open_generic,
        .read           = tracing_stats_read,
+       .llseek         = generic_file_llseek,
  };
  
  #ifdef CONFIG_DYNAMIC_FTRACE
@@@ -3954,6 -3950,7 +3942,7 @@@ tracing_read_dyn_info(struct file *filp
  static const struct file_operations tracing_dyn_info_fops = {
        .open           = tracing_open_generic,
        .read           = tracing_read_dyn_info,
+       .llseek         = generic_file_llseek,
  };
  #endif
  
@@@ -4107,6 -4104,7 +4096,7 @@@ static const struct file_operations tra
        .open = tracing_open_generic,
        .read = trace_options_read,
        .write = trace_options_write,
+       .llseek = generic_file_llseek,
  };
  
  static ssize_t
@@@ -4158,6 -4156,7 +4148,7 @@@ static const struct file_operations tra
        .open = tracing_open_generic,
        .read = trace_options_core_read,
        .write = trace_options_core_write,
+       .llseek = generic_file_llseek,
  };
  
  struct dentry *trace_create_file(const char *name,
@@@ -4347,9 -4346,6 +4338,6 @@@ static __init int tracer_init_debugfs(v
        trace_create_file("dyn_ftrace_total_info", 0444, d_tracer,
                        &ftrace_update_tot_cnt, &tracing_dyn_info_fops);
  #endif
- #ifdef CONFIG_SYSPROF_TRACER
-       init_tracer_sysprof_debugfs(d_tracer);
- #endif
  
        create_trace_options_dir();
  
@@@ -4406,7 -4402,7 +4394,7 @@@ static struct notifier_block trace_die_
   */
  #define KERN_TRACE            KERN_EMERG
  
 -static void
 +void
  trace_printk_seq(struct trace_seq *s)
  {
        /* Probably should print a warning here. */
        trace_seq_init(s);
  }
  
 +void trace_init_global_iter(struct trace_iterator *iter)
 +{
 +      iter->tr = &global_trace;
 +      iter->trace = current_trace;
 +      iter->cpu_file = TRACE_PIPE_ALL_CPU;
 +}
 +
  static void
  __ftrace_dump(bool disable_tracing, enum ftrace_dump_mode oops_dump_mode)
  {
        if (disable_tracing)
                ftrace_kill();
  
 +      trace_init_global_iter(&iter);
 +
        for_each_tracing_cpu(cpu) {
 -              atomic_inc(&global_trace.data[cpu]->disabled);
 +              atomic_inc(&iter.tr->data[cpu]->disabled);
        }
  
        old_userobj = trace_flags & TRACE_ITER_SYM_USEROBJ;
                iter.iter_flags |= TRACE_FILE_LAT_FMT;
                iter.pos = -1;
  
 -              if (find_next_entry_inc(&iter) != NULL) {
 +              if (trace_find_next_entry_inc(&iter) != NULL) {
                        int ret;
  
                        ret = print_trace_line(&iter);
                trace_flags |= old_userobj;
  
                for_each_tracing_cpu(cpu) {
 -                      atomic_dec(&global_trace.data[cpu]->disabled);
 +                      atomic_dec(&iter.tr->data[cpu]->disabled);
                }
                tracing_on();
        }
@@@ -4576,16 -4563,14 +4564,14 @@@ __init static int tracer_alloc_buffers(
  
  
  #ifdef CONFIG_TRACER_MAX_TRACE
-       max_tr.buffer = ring_buffer_alloc(ring_buf_size,
-                                            TRACE_BUFFER_FLAGS);
+       max_tr.buffer = ring_buffer_alloc(1, TRACE_BUFFER_FLAGS);
        if (!max_tr.buffer) {
                printk(KERN_ERR "tracer: failed to allocate max ring buffer!\n");
                WARN_ON(1);
                ring_buffer_free(global_trace.buffer);
                goto out_free_cpumask;
        }
-       max_tr.entries = ring_buffer_size(max_tr.buffer);
-       WARN_ON(max_tr.entries != global_trace.entries);
+       max_tr.entries = 1;
  #endif
  
        /* Allocate the first page for all buffers */
  
        register_tracer(&nop_trace);
        current_trace = &nop_trace;
- #ifdef CONFIG_BOOT_TRACER
-       register_tracer(&boot_tracer);
- #endif
        /* All seems OK, enable tracing */
        tracing_disabled = 0;
  
diff --combined kernel/trace/trace.h
index 0605fc00c17696800e9bf2271d115beb031f4b55,d05c873dd4b2bffa0103d95cdd521efbc903dbba..d39b3c5454a5e684b8c720e0791894b36529f1cf
@@@ -9,10 -9,7 +9,7 @@@
  #include <linux/mmiotrace.h>
  #include <linux/tracepoint.h>
  #include <linux/ftrace.h>
- #include <trace/boot.h>
- #include <linux/kmemtrace.h>
  #include <linux/hw_breakpoint.h>
  #include <linux/trace_seq.h>
  #include <linux/ftrace_event.h>
  
@@@ -25,30 -22,17 +22,17 @@@ enum trace_type 
        TRACE_STACK,
        TRACE_PRINT,
        TRACE_BPRINT,
-       TRACE_SPECIAL,
        TRACE_MMIO_RW,
        TRACE_MMIO_MAP,
        TRACE_BRANCH,
-       TRACE_BOOT_CALL,
-       TRACE_BOOT_RET,
        TRACE_GRAPH_RET,
        TRACE_GRAPH_ENT,
        TRACE_USER_STACK,
-       TRACE_KMEM_ALLOC,
-       TRACE_KMEM_FREE,
        TRACE_BLK,
-       TRACE_KSYM,
  
        __TRACE_LAST_TYPE,
  };
  
- enum kmemtrace_type_id {
-       KMEMTRACE_TYPE_KMALLOC = 0,     /* kmalloc() or kfree(). */
-       KMEMTRACE_TYPE_CACHE,           /* kmem_cache_*(). */
-       KMEMTRACE_TYPE_PAGES,           /* __get_free_pages() and friends. */
- };
- extern struct tracer boot_tracer;
  
  #undef __field
  #define __field(type, item)           type    item;
@@@ -204,23 -188,15 +188,15 @@@ extern void __ftrace_bad_type(void)
                IF_ASSIGN(var, ent, struct userstack_entry, TRACE_USER_STACK);\
                IF_ASSIGN(var, ent, struct print_entry, TRACE_PRINT);   \
                IF_ASSIGN(var, ent, struct bprint_entry, TRACE_BPRINT); \
-               IF_ASSIGN(var, ent, struct special_entry, 0);           \
                IF_ASSIGN(var, ent, struct trace_mmiotrace_rw,          \
                          TRACE_MMIO_RW);                               \
                IF_ASSIGN(var, ent, struct trace_mmiotrace_map,         \
                          TRACE_MMIO_MAP);                              \
-               IF_ASSIGN(var, ent, struct trace_boot_call, TRACE_BOOT_CALL);\
-               IF_ASSIGN(var, ent, struct trace_boot_ret, TRACE_BOOT_RET);\
                IF_ASSIGN(var, ent, struct trace_branch, TRACE_BRANCH); \
                IF_ASSIGN(var, ent, struct ftrace_graph_ent_entry,      \
                          TRACE_GRAPH_ENT);             \
                IF_ASSIGN(var, ent, struct ftrace_graph_ret_entry,      \
                          TRACE_GRAPH_RET);             \
-               IF_ASSIGN(var, ent, struct kmemtrace_alloc_entry,       \
-                         TRACE_KMEM_ALLOC);    \
-               IF_ASSIGN(var, ent, struct kmemtrace_free_entry,        \
-                         TRACE_KMEM_FREE);     \
-               IF_ASSIGN(var, ent, struct ksym_trace_entry, TRACE_KSYM);\
                __ftrace_bad_type();                                    \
        } while (0)
  
@@@ -298,6 -274,7 +274,7 @@@ struct tracer 
        struct tracer           *next;
        int                     print_max;
        struct tracer_flags     *flags;
+       int                     use_max_tr;
  };
  
  
@@@ -318,7 -295,6 +295,6 @@@ struct dentry *trace_create_file(const 
                                 const struct file_operations *fops);
  
  struct dentry *tracing_init_dentry(void);
- void init_tracer_sysprof_debugfs(struct dentry *d_tracer);
  
  struct ring_buffer_event;
  
@@@ -338,14 -314,6 +314,14 @@@ struct trace_entry *tracing_get_trace_e
  struct trace_entry *trace_find_next_entry(struct trace_iterator *iter,
                                          int *ent_cpu, u64 *ent_ts);
  
 +int trace_empty(struct trace_iterator *iter);
 +
 +void *trace_find_next_entry_inc(struct trace_iterator *iter);
 +
 +void trace_init_global_iter(struct trace_iterator *iter);
 +
 +void tracing_iter_reset(struct trace_iterator *iter, int cpu);
 +
  void default_wait_pipe(struct trace_iterator *iter);
  void poll_wait_pipe(struct trace_iterator *iter);
  
@@@ -363,11 -331,6 +339,6 @@@ void tracing_sched_wakeup_trace(struct 
                                struct task_struct *wakee,
                                struct task_struct *cur,
                                unsigned long flags, int pc);
- void trace_special(struct trace_array *tr,
-                  struct trace_array_cpu *data,
-                  unsigned long arg1,
-                  unsigned long arg2,
-                  unsigned long arg3, int pc);
  void trace_function(struct trace_array *tr,
                    unsigned long ip,
                    unsigned long parent_ip,
@@@ -388,18 -351,7 +359,16 @@@ void tracing_start_sched_switch_record(
  int register_tracer(struct tracer *type);
  void unregister_tracer(struct tracer *type);
  int is_tracing_stopped(void);
 +enum trace_file_type {
 +      TRACE_FILE_LAT_FMT      = 1,
 +      TRACE_FILE_ANNOTATE     = 2,
 +};
 +
 +extern cpumask_var_t __read_mostly tracing_buffer_mask;
 +
 +#define for_each_tracing_cpu(cpu)     \
 +      for_each_cpu(cpu, tracing_buffer_mask)
  
- extern int process_new_ksym_entry(char *ksymname, int op, unsigned long addr);
  extern unsigned long nsecs_to_usecs(unsigned long nsecs);
  
  extern unsigned long tracing_thresh;
@@@ -469,12 -421,8 +438,8 @@@ extern int trace_selftest_startup_nop(s
                                         struct trace_array *tr);
  extern int trace_selftest_startup_sched_switch(struct tracer *trace,
                                               struct trace_array *tr);
- extern int trace_selftest_startup_sysprof(struct tracer *trace,
-                                              struct trace_array *tr);
  extern int trace_selftest_startup_branch(struct tracer *trace,
                                         struct trace_array *tr);
- extern int trace_selftest_startup_ksym(struct tracer *trace,
-                                        struct trace_array *tr);
  #endif /* CONFIG_FTRACE_STARTUP_TEST */
  
  extern void *head_page(struct trace_array_cpu *data);
@@@ -488,8 -436,6 +453,8 @@@ trace_array_vprintk(struct trace_array 
                    unsigned long ip, const char *fmt, va_list args);
  int trace_array_printk(struct trace_array *tr,
                       unsigned long ip, const char *fmt, ...);
 +void trace_printk_seq(struct trace_seq *s);
 +enum print_line_t print_trace_line(struct trace_iterator *iter);
  
  extern unsigned long trace_flags;
  
@@@ -636,6 -582,7 +601,7 @@@ enum trace_iterator_flags 
        TRACE_ITER_LATENCY_FMT          = 0x20000,
        TRACE_ITER_SLEEP_TIME           = 0x40000,
        TRACE_ITER_GRAPH_TIME           = 0x80000,
+       TRACE_ITER_RECORD_CMD           = 0x100000,
  };
  
  /*
  
  extern struct tracer nop_trace;
  
- /**
-  * ftrace_preempt_disable - disable preemption scheduler safe
-  *
-  * When tracing can happen inside the scheduler, there exists
-  * cases that the tracing might happen before the need_resched
-  * flag is checked. If this happens and the tracer calls
-  * preempt_enable (after a disable), a schedule might take place
-  * causing an infinite recursion.
-  *
-  * To prevent this, we read the need_resched flag before
-  * disabling preemption. When we want to enable preemption we
-  * check the flag, if it is set, then we call preempt_enable_no_resched.
-  * Otherwise, we call preempt_enable.
-  *
-  * The rational for doing the above is that if need_resched is set
-  * and we have yet to reschedule, we are either in an atomic location
-  * (where we do not need to check for scheduling) or we are inside
-  * the scheduler and do not want to resched.
-  */
- static inline int ftrace_preempt_disable(void)
- {
-       int resched;
-       resched = need_resched();
-       preempt_disable_notrace();
-       return resched;
- }
- /**
-  * ftrace_preempt_enable - enable preemption scheduler safe
-  * @resched: the return value from ftrace_preempt_disable
-  *
-  * This is a scheduler safe way to enable preemption and not miss
-  * any preemption checks. The disabled saved the state of preemption.
-  * If resched is set, then we are either inside an atomic or
-  * are inside the scheduler (we would have already scheduled
-  * otherwise). In this case, we do not want to call normal
-  * preempt_enable, but preempt_enable_no_resched instead.
-  */
- static inline void ftrace_preempt_enable(int resched)
- {
-       if (resched)
-               preempt_enable_no_resched_notrace();
-       else
-               preempt_enable_notrace();
- }
  #ifdef CONFIG_BRANCH_TRACER
  extern int enable_branch_tracing(struct trace_array *tr);
  extern void disable_branch_tracing(void);
@@@ -785,6 -684,8 +703,8 @@@ struct filter_pred 
        int                     pop_n;
  };
  
+ extern struct list_head ftrace_common_fields;
  extern enum regex_type
  filter_parse_regex(char *buff, int len, char **search, int *not);
  extern void print_event_filter(struct ftrace_event_call *call,
@@@ -814,6 -715,8 +734,8 @@@ filter_check_discard(struct ftrace_even
        return 0;
  }
  
+ extern void trace_event_enable_cmd_record(bool enable);
  extern struct mutex event_mutex;
  extern struct list_head ftrace_events;
  
diff --combined lib/Kconfig.debug
index e80d6bf1c43d39050ab09fe55198073e4a585b3c,e2cd7fbf31c05cf6e6bed6a54781e2ad1c99c70b..ff87ddc4cbd55309e48eb0114b231f4a6b8df7c7
@@@ -152,28 -152,33 +152,33 @@@ config DEBUG_SHIR
          Drivers ought to be able to handle interrupts coming in at those
          points; some don't and need to be caught.
  
- config DETECT_SOFTLOCKUP
-       bool "Detect Soft Lockups"
+ config LOCKUP_DETECTOR
+       bool "Detect Hard and Soft Lockups"
        depends on DEBUG_KERNEL && !S390
-       default y
        help
-         Say Y here to enable the kernel to detect "soft lockups",
-         which are bugs that cause the kernel to loop in kernel
+         Say Y here to enable the kernel to act as a watchdog to detect
+         hard and soft lockups.
+         Softlockups are bugs that cause the kernel to loop in kernel
          mode for more than 60 seconds, without giving other tasks a
-         chance to run.
+         chance to run.  The current stack trace is displayed upon
+         detection and the system will stay locked up.
  
-         When a soft-lockup is detected, the kernel will print the
-         current stack trace (which you should report), but the
-         system will stay locked up. This feature has negligible
-         overhead.
+         Hardlockups are bugs that cause the CPU to loop in kernel mode
+         for more than 60 seconds, without letting other interrupts have a
+         chance to run.  The current stack trace is displayed upon detection
+         and the system will stay locked up.
+         The overhead should be minimal.  A periodic hrtimer runs to
+         generate interrupts and kick the watchdog task every 10-12 seconds.
+         An NMI is generated every 60 seconds or so to check for hardlockups.
  
-         (Note that "hard lockups" are separate type of bugs that
-          can be detected via the NMI-watchdog, on platforms that
-          support it.)
+ config HARDLOCKUP_DETECTOR
+       def_bool LOCKUP_DETECTOR && PERF_EVENTS && HAVE_PERF_EVENTS_NMI
  
  config BOOTPARAM_SOFTLOCKUP_PANIC
        bool "Panic (Reboot) On Soft Lockups"
-       depends on DETECT_SOFTLOCKUP
+       depends on LOCKUP_DETECTOR
        help
          Say Y here to enable the kernel to panic on "soft lockups",
          which are bugs that cause the kernel to loop in kernel
  
  config BOOTPARAM_SOFTLOCKUP_PANIC_VALUE
        int
-       depends on DETECT_SOFTLOCKUP
+       depends on LOCKUP_DETECTOR
        range 0 1
        default 0 if !BOOTPARAM_SOFTLOCKUP_PANIC
        default 1 if BOOTPARAM_SOFTLOCKUP_PANIC
@@@ -307,12 -312,6 +312,12 @@@ config DEBUG_OBJECTS_WOR
          work queue routines to track the life time of work objects and
          validate the work operations.
  
 +config DEBUG_OBJECTS_RCU_HEAD
 +      bool "Debug RCU callbacks objects"
 +      depends on DEBUG_OBJECTS && PREEMPT
 +      help
 +        Enable this to turn on debugging of RCU list heads (call_rcu() usage).
 +
  config DEBUG_OBJECTS_ENABLE_DEFAULT
        int "debug_objects bootup default value (0-1)"
          range 0 1
@@@ -534,7 -533,7 +539,7 @@@ config LOCKDE
        bool
        depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT
        select STACKTRACE
 -      select FRAME_POINTER if !MIPS && !PPC && !ARM_UNWIND && !S390
 +      select FRAME_POINTER if !MIPS && !PPC && !ARM_UNWIND && !S390 && !MICROBLAZE
        select KALLSYMS
        select KALLSYMS_ALL
  
@@@ -634,19 -633,6 +639,19 @@@ config DEBUG_INF
  
          If unsure, say N.
  
 +config DEBUG_INFO_REDUCED
 +      bool "Reduce debugging information"
 +      depends on DEBUG_INFO
 +      help
 +        If you say Y here gcc is instructed to generate less debugging
 +        information for structure types. This means that tools that
 +        need full debugging information (like kgdb or systemtap) won't
 +        be happy. But if you merely need debugging information to
 +        resolve line numbers there is no loss. Advantage is that
 +        build directory object sizes shrink dramatically over a full
 +        DEBUG_INFO build and compile times are reduced too.
 +        Only works with newer gcc versions.
 +
  config DEBUG_VM
        bool "Debug VM"
        depends on DEBUG_KERNEL
@@@ -956,7 -942,7 +961,7 @@@ config FAIL_MAKE_REQUES
          Provide fault-injection capability for disk IO.
  
  config FAIL_IO_TIMEOUT
 -      bool "Faul-injection capability for faking disk interrupts"
 +      bool "Fault-injection capability for faking disk interrupts"
        depends on FAULT_INJECTION && BLOCK
        help
          Provide fault-injection capability on end IO handling. This
@@@ -977,13 -963,13 +982,13 @@@ config FAULT_INJECTION_STACKTRACE_FILTE
        depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT
        depends on !X86_64
        select STACKTRACE
 -      select FRAME_POINTER if !PPC && !S390
 +      select FRAME_POINTER if !PPC && !S390 && !MICROBLAZE
        help
          Provide stacktrace filter for fault-injection capabilities
  
  config LATENCYTOP
        bool "Latency measuring infrastructure"
 -      select FRAME_POINTER if !MIPS && !PPC && !S390
 +      select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE
        select KALLSYMS
        select KALLSYMS_ALL
        select STACKTRACE
diff --combined mm/slob.c
index 19d2e5d46724824864055612ddcda295f9871d4c,a82ab5811bd928e4c419be3233bf7e7e0249b9f9..3f19a347dabf1f9373f3f16b99351ef8f6151612
+++ b/mm/slob.c
  #include <linux/module.h>
  #include <linux/rcupdate.h>
  #include <linux/list.h>
- #include <linux/kmemtrace.h>
  #include <linux/kmemleak.h>
+ #include <trace/events/kmem.h>
  #include <asm/atomic.h>
  
  /*
@@@ -639,6 -641,7 +641,6 @@@ void kmem_cache_free(struct kmem_cache 
        if (unlikely(c->flags & SLAB_DESTROY_BY_RCU)) {
                struct slob_rcu *slob_rcu;
                slob_rcu = b + (c->size - sizeof(struct slob_rcu));
 -              INIT_RCU_HEAD(&slob_rcu->head);
                slob_rcu->size = c->size;
                call_rcu(&slob_rcu->head, kmem_rcu_free);
        } else {