)]}'
{
  "log": [
    {
      "commit": "f3cbd435b02fb45efc2c8a39c2ea19816669c412",
      "tree": "fc3cfda8b6bdbddedf0a0d3d41736bf9a049a7d9",
      "parents": [
        "7fe5e04292e71af34ae171b88caa2a139e0b6125"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Thu Feb 21 16:43:07 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Feb 21 17:22:20 2013 -0800"
      },
      "message": "sys_prctl(): coding-style cleanup\n\nRemove a tabstop from the switch statement, in the usual fashion.  A few\ninstances of weirdwrapping were removed as a result.\n\nCc: Chen Gang \u003cgang.chen@asianux.com\u003e\nCc: Cyrill Gorcunov \u003cgorcunov@openvz.org\u003e\nAcked-by: Kees Cook \u003ckeescook@chromium.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7fe5e04292e71af34ae171b88caa2a139e0b6125",
      "tree": "5bae0bf98e77442626c61ad57d3121440d599f09",
      "parents": [
        "242260fb858e99674289484bc2bfe3b41f9c4cbb"
      ],
      "author": {
        "name": "Chen Gang",
        "email": "gang.chen@asianux.com",
        "time": "Thu Feb 21 16:43:06 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Feb 21 17:22:20 2013 -0800"
      },
      "message": "sys_prctl(): arg2 is unsigned long which is never \u003c 0\n\narg2 will never \u003c 0, for its type is \u0027unsigned long\u0027\n\nAlso, use the provided macros.\n\nSigned-off-by: Chen Gang \u003cgang.chen@asianux.com\u003e\nReported-by: Cyrill Gorcunov \u003cgorcunov@openvz.org\u003e\nAcked-by: Kees Cook \u003ckeescook@chromium.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9a46ad6d6df3b547d057c39db13f69d7170a99e9",
      "tree": "684a14d248639c2411c46f53dc7acba4a81c357c",
      "parents": [
        "6d1c7ccae946f5c959f5c9236813d9c33ae48537"
      ],
      "author": {
        "name": "Shaohua Li",
        "email": "shli@kernel.org",
        "time": "Thu Feb 21 16:43:03 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Feb 21 17:22:20 2013 -0800"
      },
      "message": "smp: make smp_call_function_many() use logic similar to smp_call_function_single()\n\nI\u0027m testing swapout workload in a two-socket Xeon machine.  The workload\nhas 10 threads, each thread sequentially accesses separate memory\nregion.  TLB flush overhead is very big in the workload.  For each page,\npage reclaim need move it from active lru list and then unmap it.  Both\nneed a TLB flush.  And this is a multthread workload, TLB flush happens\nin 10 CPUs.  In X86, TLB flush uses generic smp_call)function.  So this\nworkload stress smp_call_function_many heavily.\n\nWithout patch, perf shows:\n+  24.49%  [k] generic_smp_call_function_interrupt\n-  21.72%  [k] _raw_spin_lock\n   - _raw_spin_lock\n      + 79.80% __page_check_address\n      + 6.42% generic_smp_call_function_interrupt\n      + 3.31% get_swap_page\n      + 2.37% free_pcppages_bulk\n      + 1.75% handle_pte_fault\n      + 1.54% put_super\n      + 1.41% grab_super_passive\n      + 1.36% __swap_duplicate\n      + 0.68% blk_flush_plug_list\n      + 0.62% swap_info_get\n+   6.55%  [k] flush_tlb_func\n+   6.46%  [k] smp_call_function_many\n+   5.09%  [k] call_function_interrupt\n+   4.75%  [k] default_send_IPI_mask_sequence_phys\n+   2.18%  [k] find_next_bit\n\nswapout throughput is around 1300M/s.\n\nWith the patch, perf shows:\n-  27.23%  [k] _raw_spin_lock\n   - _raw_spin_lock\n      + 80.53% __page_check_address\n      + 8.39% generic_smp_call_function_single_interrupt\n      + 2.44% get_swap_page\n      + 1.76% free_pcppages_bulk\n      + 1.40% handle_pte_fault\n      + 1.15% __swap_duplicate\n      + 1.05% put_super\n      + 0.98% grab_super_passive\n      + 0.86% blk_flush_plug_list\n      + 0.57% swap_info_get\n+   8.25%  [k] default_send_IPI_mask_sequence_phys\n+   7.55%  [k] call_function_interrupt\n+   7.47%  [k] smp_call_function_many\n+   7.25%  [k] flush_tlb_func\n+   3.81%  [k] _raw_spin_lock_irqsave\n+   3.78%  [k] generic_smp_call_function_single_interrupt\n\nswapout throughput is around 1400M/s.  So there is around a 7%\nimprovement, and total cpu utilization doesn\u0027t change.\n\nWithout the patch, cfd_data is shared by all CPUs.\ngeneric_smp_call_function_interrupt does read/write cfd_data several times\nwhich will create a lot of cache ping-pong.  With the patch, the data\nbecomes per-cpu.  The ping-pong is avoided.  And from the perf data, this\ndoesn\u0027t make call_single_queue lock contend.\n\nNext step is to remove generic_smp_call_function_interrupt() from arch\ncode.\n\nSigned-off-by: Shaohua Li \u003cshli@fusionio.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "af3b56289be1f65d5c9f28bb1775e01056a5a2de",
      "tree": "3f3991255ab0c97e387657749a31a7f3b93a586b",
      "parents": [
        "f3d8496e9c841874faf4f2c850d2322453c89e94"
      ],
      "author": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@linuxfoundation.org",
        "time": "Thu Feb 21 16:42:40 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Feb 21 17:22:19 2013 -0800"
      },
      "message": "time: don\u0027t inline EXPORT_SYMBOL functions\n\nHow is the compiler even handling exported functions that are marked\ninline? Anyway, these shouldn\u0027t be inline because of that, so remove\nthat marking.\n\nBased on a larger patch by Mark Charlebois to get LLVM to build the\nkernel.\n\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Mark Charlebois \u003cmcharleb@qualcomm.com\u003e\nCc: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\nCc: hank \u003cpyu@redhat.com\u003e\nCc: John Stultz \u003cjohn.stultz@linaro.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bffea77c08c361d174af7ad94887f6aecc3f340b",
      "tree": "ffe22fc5274c4398be4bd8597292a84ca7b9295d",
      "parents": [
        "9a8ab1c39970a4938a72d94e6fd13be88a797590"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "dan.carpenter@oracle.com",
        "time": "Thu Feb 21 16:41:57 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Feb 21 17:22:16 2013 -0800"
      },
      "message": "compat: return -EFAULT on error in waitid()\n\nThe copy_to_user() call returns the number of bytes remaining but we\nwant to return -EFAULT on error.\n\nFixes \"x32: fix waitid()\"\n\nSigned-off-by: Dan Carpenter \u003cdan.carpenter@oracle.com\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a0b1c42951dd06ec83cc1bc2c9788131d9fefcd8",
      "tree": "a572f1523cf904c93020c9cdb32f3bc84ec3ac16",
      "parents": [
        "8ec4942212a6d337982967778a3dc3b60aea782e",
        "ecd9883724b78cc72ed92c98bcb1a46c764fff21"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 20 18:58:50 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 20 18:58:50 2013 -0800"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next\n\nPull networking update from David Miller:\n\n 1) Checkpoint/restarted TCP sockets now can properly propagate the TCP\n    timestamp offset.  From Andrey Vagin.\n\n 2) VMWARE VM VSOCK layer, from Andy King.\n\n 3) Much improved support for virtual functions and SR-IOV in bnx2x,\n    from Ariel ELior.\n\n 4) All protocols on ipv4 and ipv6 are now network namespace aware, and\n    all the compatability checks for initial-namespace-only protocols is\n    removed.  Thanks to Tom Parkin for helping deal with the last major\n    holdout, L2TP.\n\n 5) IPV6 support in netpoll and network namespace support in pktgen,\n    from Cong Wang.\n\n 6) Multiple Registration Protocol (MRP) and Multiple VLAN Registration\n    Protocol (MVRP) support, from David Ward.\n\n 7) Compute packet lengths more accurately in the packet scheduler, from\n    Eric Dumazet.\n\n 8) Use per-task page fragment allocator in skb_append_datato_frags(),\n    also from Eric Dumazet.\n\n 9) Add support for connection tracking labels in netfilter, from\n    Florian Westphal.\n\n10) Fix default multicast group joining on ipv6, and add anti-spoofing\n    checks to 6to4 and 6rd.  From Hannes Frederic Sowa.\n\n11) Make ipv4/ipv6 fragmentation memory limits more reasonable in modern\n    times, rearrange inet frag datastructures for better cacheline\n    locality, and move more operations outside of locking.  From Jesper\n    Dangaard Brouer.\n\n12) Instead of strict master \u003c--\u003e slave relationships, allow arbitrary\n    scenerios with \"upper device lists\".  From Jiri Pirko.\n\n13) Improve rate limiting accuracy in TBF and act_police, also from Jiri\n    Pirko.\n\n14) Add a BPF filter netfilter match target, from Willem de Bruijn.\n\n15) Orphan and delete a bunch of pre-historic networking drivers from\n    Paul Gortmaker.\n\n16) Add TSO support for GRE tunnels, from Pravin B SHelar.  Although\n    this still needs some minor bug fixing before it\u0027s %100 correct in\n    all cases.\n\n17) Handle unresolved IPSEC states like ARP, with a resolution packet\n    queue.  From Steffen Klassert.\n\n18) Remove TCP Appropriate Byte Count support (ABC), from Stephen\n    Hemminger.  This was long overdue.\n\n19) Support SO_REUSEPORT, from Tom Herbert.\n\n20) Allow locking a socket BPF filter, so that it cannot change after a\n    process drops capabilities.\n\n21) Add VLAN filtering to bridge, from Vlad Yasevich.\n\n22) Bring ipv6 on-par with ipv4 and do not cache neighbour entries in\n    the ipv6 routes, from YOSHIFUJI Hideaki.\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1538 commits)\n  ipv6: fix race condition regarding dst-\u003eexpires and dst-\u003efrom.\n  net: fix a wrong assignment in skb_split()\n  ip_gre: remove an extra dst_release()\n  ppp: set qdisc_tx_busylock to avoid LOCKDEP splat\n  atl1c: restore buffer state\n  net: fix a build failure when !CONFIG_PROC_FS\n  net: ipv4: fix waring -Wunused-variable\n  net: proc: fix build failed when procfs is not configured\n  Revert \"xen: netback: remove redundant xenvif_put\"\n  net: move procfs code to net/core/net-procfs.c\n  qmi_wwan, cdc-ether: add ADU960S\n  bonding: set sysfs device_type to \u0027bond\u0027\n  bonding: fix bond_release_all inconsistencies\n  b44: use netdev_alloc_skb_ip_align()\n  xen: netback: remove redundant xenvif_put\n  net: fec: Do a sanity check on the gpio number\n  ip_gre: propogate target device GSO capability to the tunnel device\n  ip_gre: allow CSUM capable devices to handle packets\n  bonding: Fix initialize after use for 3ad machine state spinlock\n  bonding: Fix race condition between bond_enslave() and bond_3ad_update_lacp_rate()\n  ...\n"
    },
    {
      "commit": "8793422fd9ac5037f5047f80473007301df3689f",
      "tree": "f5aa3b3a564f053e1b5604c45db80193abc734a4",
      "parents": [
        "b3cdda2b4f541439ca4205793040aa2e1c852e3b",
        "10baf04e95fbf7eb6089410220a547211dd2ffa7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 20 11:26:56 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 20 11:26:56 2013 -0800"
      },
      "message": "Merge tag \u0027pm+acpi-3.9-rc1\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm\n\nPull ACPI and power management updates from Rafael Wysocki:\n\n - Rework of the ACPI namespace scanning code from Rafael J.  Wysocki\n   with contributions from Bjorn Helgaas, Jiang Liu, Mika Westerberg,\n   Toshi Kani, and Yinghai Lu.\n\n - ACPI power resources handling and ACPI device PM update from Rafael\n   J Wysocki.\n\n - ACPICA update to version 20130117 from Bob Moore and Lv Zheng with\n   contributions from Aaron Lu, Chao Guan, Jesper Juhl, and Tim Gardner.\n\n - Support for Intel Lynxpoint LPSS from Mika Westerberg.\n\n - cpuidle update from Len Brown including Intel Haswell support, C1\n   state for intel_idle, removal of global pm_idle.\n\n - cpuidle fixes and cleanups from Daniel Lezcano.\n\n - cpufreq fixes and cleanups from Viresh Kumar and Fabio Baltieri with\n   contributions from Stratos Karafotis and Rickard Andersson.\n\n - Intel P-states driver for Sandy Bridge processors from Dirk\n   Brandewie.\n\n - cpufreq driver for Marvell Kirkwood SoCs from Andrew Lunn.\n\n - cpufreq fixes related to ordering issues between acpi-cpufreq and\n   powernow-k8 from Borislav Petkov and Matthew Garrett.\n\n - cpufreq support for Calxeda Highbank processors from Mark Langsdorf\n   and Rob Herring.\n\n - cpufreq driver for the Freescale i.MX6Q SoC and cpufreq-cpu0 update\n   from Shawn Guo.\n\n - cpufreq Exynos fixes and cleanups from Jonghwan Choi, Sachin Kamat,\n   and Inderpal Singh.\n\n - Support for \"lightweight suspend\" from Zhang Rui.\n\n - Removal of the deprecated power trace API from Paul Gortmaker.\n\n - Assorted updates from Andreas Fleig, Colin Ian King, Davidlohr Bueso,\n   Joseph Salisbury, Kees Cook, Li Fei, Nishanth Menon, ShuoX Liu,\n   Srinivas Pandruvada, Tejun Heo, Thomas Renninger, and Yasuaki\n   Ishimatsu.\n\n* tag \u0027pm+acpi-3.9-rc1\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (267 commits)\n  PM idle: remove global declaration of pm_idle\n  unicore32 idle: delete stray pm_idle comment\n  openrisc idle: delete pm_idle\n  mn10300 idle: delete pm_idle\n  microblaze idle: delete pm_idle\n  m32r idle: delete pm_idle, and other dead idle code\n  ia64 idle: delete pm_idle\n  cris idle: delete idle and pm_idle\n  ARM64 idle: delete pm_idle\n  ARM idle: delete pm_idle\n  blackfin idle: delete pm_idle\n  sparc idle: rename pm_idle to sparc_idle\n  sh idle: rename global pm_idle to static sh_idle\n  x86 idle: rename global pm_idle to static x86_idle\n  APM idle: register apm_cpu_idle via cpuidle\n  cpufreq / intel_pstate: Add kernel command line option disable intel_pstate.\n  cpufreq / intel_pstate: Change to disallow module build\n  tools/power turbostat: display SMI count by default\n  intel_idle: export both C1 and C1E\n  ACPI / hotplug: Fix concurrency issues and memory leaks\n  ...\n"
    },
    {
      "commit": "9ae46e6702d98d22037368896298d05958ad5737",
      "tree": "019ce8ccff0a88fc7f5ebaf5c052daac5bac3860",
      "parents": [
        "502b24c23b44fbaa01cc2cbd86d8035845b7811f",
        "d127027baf98dce3ca31bec18c2c0e048ceda7c4"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 20 09:18:31 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 20 09:18:31 2013 -0800"
      },
      "message": "Merge branch \u0027for-3.9-cpuset\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup\n\nPull cpuset changes from Tejun Heo:\n\n - Synchornization has seen a lot of changes with focus on decoupling\n   cpuset synchronization from cgroup internal locking.\n\n   After this change, there only remain a couple of mostly trivial\n   dependencies on cgroup_lock outside cgroup core proper.  cgroup_lock\n   is scheduled to be unexported in this devel cycle.\n\n   This will finally remove the fragile locking order around cgroup\n   (cgroup locking wants to / should be one of the outermost but yet has\n   been acquired from deep inside individual controllers).\n\n - At this point, Li is most knowlegeable with cpuset and taking over\n   the maintainership of cpuset.\n\n* \u0027for-3.9-cpuset\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup:\n  cpuset: drop spurious retval assignment in proc_cpuset_show()\n  cpuset: fix RCU lockdep splat\n  cpuset: update MAINTAINERS\n  cpuset: remove cpuset-\u003eparent\n  cpuset: replace cpuset-\u003estack_list with cpuset_for_each_descendant_pre()\n  cpuset: replace cgroup_mutex locking with cpuset internal locking\n  cpuset: schedule hotplug propagation from cpuset_attach() if the cpuset is empty\n  cpuset: pin down cpus and mems while a task is being attached\n  cpuset: make CPU / memory hotplug propagation asynchronous\n  cpuset: drop async_rebuild_sched_domains()\n  cpuset: don\u0027t nest cgroup_mutex inside get_online_cpus()\n  cpuset: reorganize CPU / memory hotplug handling\n  cpuset: cleanup cpuset[_can]_attach()\n  cpuset: introduce cpuset_for_each_child()\n  cpuset: introduce CS_ONLINE\n  cpuset: introduce -\u003ecss_on/offline()\n  cpuset: remove fast exit path from remove_tasks_in_empty_cpuset()\n  cpuset: remove unused cpuset_unlock()\n"
    },
    {
      "commit": "502b24c23b44fbaa01cc2cbd86d8035845b7811f",
      "tree": "3096deeb99f6acc2d72ee33f145008ec5e2c68b3",
      "parents": [
        "ece8e0b2f9c980e5511fe8db2d68c6f1859b9d83",
        "f169007b2773f285e098cb84c74aac0154d65ff7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 20 09:16:21 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Feb 20 09:16:21 2013 -0800"
      },
      "message": "Merge branch \u0027for-3.9\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup\n\nPull cgroup changes from Tejun Heo:\n \"Nothing too drastic.\n\n   - Removal of synchronize_rcu() from userland visible paths.\n\n   - Various fixes and cleanups from Li.\n\n   - cgroup_rightmost_descendant() added which will be used by cpuset\n     changes (it will be a separate pull request).\"\n\n* \u0027for-3.9\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup:\n  cgroup: fail if monitored file and event_control are in different cgroup\n  cgroup: fix cgroup_rmdir() vs close(eventfd) race\n  cpuset: fix cpuset_print_task_mems_allowed() vs rename() race\n  cgroup: fix exit() vs rmdir() race\n  cgroup: remove bogus comments in cgroup_diput()\n  cgroup: remove synchronize_rcu() from cgroup_diput()\n  cgroup: remove duplicate RCU free on struct cgroup\n  sched: remove redundant NULL cgroup check in task_group_path()\n  sched: split out css_online/css_offline from tg creation/destruction\n  cgroup: initialize cgrp-\u003edentry before css_alloc()\n  cgroup: remove a NULL check in cgroup_exit()\n  cgroup: fix bogus kernel warnings when cgroup_create() failed\n  cgroup: remove synchronize_rcu() from rebind_subsystems()\n  cgroup: remove synchronize_rcu() from cgroup_attach_{task|proc}()\n  cgroup: use new hashtable implementation\n  cgroups: fix cgroup_event_listener error handling\n  cgroups: move cgroup_event_listener.c to tools/cgroup\n  cgroup: implement cgroup_rightmost_descendant()\n  cgroup: remove unused dummy cgroup_fork_callbacks()\n"
    },
    {
      "commit": "ece8e0b2f9c980e5511fe8db2d68c6f1859b9d83",
      "tree": "70f1e3363080884965686576d079d24da8863a58",
      "parents": [
        "67cb104b4c30bd52292b6a7f526349aab2dd5cbd",
        "a0327ff0eda915be623658babacef706099c11a8"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 22:10:26 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 22:10:26 2013 -0800"
      },
      "message": "Merge branch \u0027for-3.9-async\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq\n\nPull async changes from Tejun Heo:\n \"These are followups for the earlier deadlock issue involving async\n  ending up waiting for itself through block requesting module[1].  The\n  following changes are made by these commits.\n\n   - Instead of requesting default elevator on each request_queue init,\n     block now requests it once early during boot.\n\n   - Kmod triggers warning if invoked from an async worker.\n\n   - Async synchronization implementation has been reimplemented.  It\u0027s\n     a lot simpler now.\"\n\n* \u0027for-3.9-async\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq:\n  async: initialise list heads to fix crash\n  async: replace list of active domains with global list of pending items\n  async: keep pending tasks on async_domain and remove async_pending\n  async: use ULLONG_MAX for infinity cookie value\n  async: bring sanity to the use of words domain and running\n  async, kmod: warn on synchronous request_module() from async workers\n  block: don\u0027t request module during elevator init\n  init, block: try to load default elevator module early during boot\n"
    },
    {
      "commit": "67cb104b4c30bd52292b6a7f526349aab2dd5cbd",
      "tree": "b7d2659f9c7bfe676016680339c0ffe47ef29afd",
      "parents": [
        "1eaec8212e35aef6606a4e8b40aa9ad9ba87672a",
        "1438ade5670b56d5386c220e1ad4b5a824a1e585"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 22:01:33 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 22:01:33 2013 -0800"
      },
      "message": "Merge branch \u0027for-3.9\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq\n\nPull workqueue changes from Tejun Heo:\n \"A lot of reorganization is going on mostly to prepare for worker pools\n  with custom attributes so that workqueue can replace custom pool\n  implementations in places including writeback and btrfs and make CPU\n  assignment in crypto more flexible.\n\n  workqueue evolved from purely per-cpu design and implementation, so\n  there are a lot of assumptions regarding being bound to CPUs and even\n  unbound workqueues are implemented as an extension of the model -\n  workqueues running on the special unbound CPU.  Bulk of changes this\n  round are about promoting worker_pools as the top level abstraction\n  replacing global_cwq (global cpu workqueue).  At this point, I\u0027m\n  fairly confident about getting custom worker pools working pretty soon\n  and ready for the next merge window.\n\n  Lai\u0027s patches are replacing the convoluted mb() dancing workqueue has\n  been doing with much simpler mechanism which only depends on\n  assignment atomicity of long.  For details, please read the commit\n  message of 0b3dae68ac (\"workqueue: simplify is-work-item-queued-here\n  test\").  While the change ends up adding one pointer to struct\n  delayed_work, the inflation in percentage is less than five percent\n  and it decouples delayed_work logic a lot more cleaner from usual work\n  handling, removes the unusual memory barrier dancing, and allows for\n  further simplification, so I think the trade-off is acceptable.\n\n  There will be two more workqueue related pull requests and there are\n  some shared commits among them.  I\u0027ll write further pull requests\n  assuming this pull request is pulled first.\"\n\n* \u0027for-3.9\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq: (37 commits)\n  workqueue: un-GPL function delayed_work_timer_fn()\n  workqueue: rename cpu_workqueue to pool_workqueue\n  workqueue: reimplement is_chained_work() using current_wq_worker()\n  workqueue: fix is_chained_work() regression\n  workqueue: pick cwq instead of pool in __queue_work()\n  workqueue: make get_work_pool_id() cheaper\n  workqueue: move nr_running into worker_pool\n  workqueue: cosmetic update in try_to_grab_pending()\n  workqueue: simplify is-work-item-queued-here test\n  workqueue: make work-\u003edata point to pool after try_to_grab_pending()\n  workqueue: add delayed_work-\u003ewq to simplify reentrancy handling\n  workqueue: make work_busy() test WORK_STRUCT_PENDING first\n  workqueue: replace WORK_CPU_NONE/LAST with WORK_CPU_END\n  workqueue: post global_cwq removal cleanups\n  workqueue: rename nr_running variables\n  workqueue: remove global_cwq\n  workqueue: remove worker_pool-\u003egcwq\n  workqueue: replace for_each_worker_pool() with for_each_std_worker_pool()\n  workqueue: make freezing/thawing per-pool\n  workqueue: make hotplug processing per-pool\n  ...\n"
    },
    {
      "commit": "1eaec8212e35aef6606a4e8b40aa9ad9ba87672a",
      "tree": "aa0ae10e129d3642b5470bc430f0b174dc08a381",
      "parents": [
        "1a13c0b181f218bf56a1a6b8edbaf2876b22314b",
        "23663c873154f01220ef679558e1ca110c4c4ca4"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 21:58:52 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 21:58:52 2013 -0800"
      },
      "message": "Merge branch \u0027for-3.9-cleanups\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq\n\nPull workqueue [delayed_]work_pending() cleanups from Tejun Heo:\n \"This is part of on-going cleanups to remove / minimize usages of\n  workqueue interfaces which are deprecated and/or misleading.\n\n  This round drops a number of usages of [delayed_]work_pending(), which\n  are dangerous as they lack any form of synchronization and thus often\n  lead to buggy / unnecessary code.  There are a couple legitimate use\n  cases in kernel.  Hopefully, they can be converted and\n  [delayed_]work_pending() can be removed completely.  Even if not,\n  removing most of misuses should make it more difficult to find\n  examples of misuses and thus slow down growth of them.\n\n  These changes are independent from other workqueue changes.\"\n\n* \u0027for-3.9-cleanups\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq:\n  wimax/i2400m: fix i2400m-\u003ewake_tx_skb handling\n  kprobes: fix wait_for_kprobe_optimizer()\n  ipw2x00: simplify scan_event handling\n  video/exynos: don\u0027t use [delayed_]work_pending()\n  tty/max3100: don\u0027t use [delayed_]work_pending()\n  x86/mce: don\u0027t use [delayed_]work_pending()\n  rfkill: don\u0027t use [delayed_]work_pending()\n  wl1251: don\u0027t use [delayed_]work_pending()\n  thinkpad_acpi: don\u0027t use [delayed_]work_pending()\n  mwifiex: don\u0027t use [delayed_]work_pending()\n  sja1000: don\u0027t use [delayed_]work_pending()\n"
    },
    {
      "commit": "121027a7a64a12e9e5c0289f12473ff11678a812",
      "tree": "741dd57ee06d9607d9126a7ae9014cd087e54d32",
      "parents": [
        "5abcd76f5d896de014bd8d1486107c483659d40d",
        "63a3f603413ffe82ad775f2d62a5afff87fd94a0"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 19:12:03 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 19:12:03 2013 -0800"
      },
      "message": "Merge branch \u0027x86-build-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip\n\nPull two x86 kernel build changes from Ingo Molnar:\n \"The first change modifies how \u0027make oldconfig\u0027 works on cross-bitness\n  situations on x86.  It was felt the new behavior of preserving the\n  bitness of the .config is more logical.  This is a leftover of the\n  merge.\n\n  The second change eliminates a Perl warning.  (There\u0027s another, more\n  complete fix resulting of this warning fix, which second fix in flight\n  to you via the kbuild tree, which will remove the timeconst.pl script\n  altogether.)\"\n\n* \u0027x86-build-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:\n  timeconst.pl: Eliminate Perl warning\n  x86: Default to ARCH\u003dx86 to avoid overriding CONFIG_64BIT\n"
    },
    {
      "commit": "5800700f66678ea5c85e7d62b138416070bf7f60",
      "tree": "4aeff1edb0429eb222ddea97701d1ab1efbca2d0",
      "parents": [
        "266d7ad7f4fe2f44b91561f5b812115c1b3018ab",
        "af8d102f999a41c0189bd2cce488bac2ee88c29b"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 19:07:27 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 19:07:27 2013 -0800"
      },
      "message": "Merge branch \u0027x86-apic-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip\n\nPull x86/apic changes from Ingo Molnar:\n \"Main changes:\n\n   - Multiple MSI support added to the APIC, PCI and AHCI code - acked\n     by all relevant maintainers, by Alexander Gordeev.\n\n     The advantage is that multiple AHCI ports can have multiple MSI\n     irqs assigned, and can thus spread to multiple CPUs.\n\n     [ Drivers can make use of this new facility via the\n       pci_enable_msi_block_auto() method ]\n\n   - x86 IOAPIC code from interrupt remapping cleanups from Joerg\n     Roedel:\n\n     These patches move all interrupt remapping specific checks out of\n     the x86 core code and replaces the respective call-sites with\n     function pointers.  As a result the interrupt remapping code is\n     better abstraced from x86 core interrupt handling code.\n\n   - Various smaller improvements, fixes and cleanups.\"\n\n* \u0027x86-apic-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (26 commits)\n  x86/intel/irq_remapping: Clean up x2apic opt-out security warning mess\n  x86, kvm: Fix intialization warnings in kvm.c\n  x86, irq: Move irq_remapped out of x86 core code\n  x86, io_apic: Introduce eoi_ioapic_pin call-back\n  x86, msi: Introduce x86_msi.compose_msi_msg call-back\n  x86, irq: Introduce setup_remapped_irq()\n  x86, irq: Move irq_remapped() check into free_remapped_irq\n  x86, io-apic: Remove !irq_remapped() check from __target_IO_APIC_irq()\n  x86, io-apic: Move CONFIG_IRQ_REMAP code out of x86 core\n  x86, irq: Add data structure to keep AMD specific irq remapping information\n  x86, irq: Move irq_remapping_enabled declaration to iommu code\n  x86, io_apic: Remove irq_remapping_enabled check in setup_timer_IRQ0_pin\n  x86, io_apic: Move irq_remapping_enabled checks out of check_timer()\n  x86, io_apic: Convert setup_ioapic_entry to function pointer\n  x86, io_apic: Introduce set_affinity function pointer\n  x86, msi: Use IRQ remapping specific setup_msi_irqs routine\n  x86, hpet: Introduce x86_msi_ops.setup_hpet_msi\n  x86, io_apic: Introduce x86_io_apic_ops.print_entries for debugging\n  x86, io_apic: Introduce x86_io_apic_ops.disable()\n  x86, apic: Mask IO-APIC and PIC unconditionally on LAPIC resume\n  ...\n"
    },
    {
      "commit": "266d7ad7f4fe2f44b91561f5b812115c1b3018ab",
      "tree": "45acf12d5cb170205ccffe24b9f24672ff8bff2e",
      "parents": [
        "bcbd818c069b9e1bf82517401225b152a33968e2",
        "36dfbbf136db0d645bacfd42ce7d9d6928ea532d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 19:05:45 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 19:05:45 2013 -0800"
      },
      "message": "Merge branch \u0027timers-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip\n\nPull timer changes from Ingo Molnar:\n \"Main changes:\n\n   - ntp: Add CONFIG_RTC_SYSTOHC: a generic RTC driver facility\n     complementing the existing CONFIG_RTC_HCTOSYS, which uses NTP to\n     keep the hardware clock updated.\n\n   - posix-timers: Fix clock_adjtime to always return timex data on\n     success.  This is changing the ABI, but no breakage was expected\n     and found - caution is warranted nevertheless.\n\n   - platform persistent clock improvements/cleanups.\n\n   - clockevents: refactor timer broadcast handling to be more generic\n     and less duplicated with matching architecture code (mostly ARM\n     motivated.)\n\n   - various fixes and cleanups\"\n\n* \u0027timers-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:\n  timers/x86/hpet: Use HPET_COUNTER to specify the hpet counter in vread_hpet()\n  posix-cpu-timers: Fix nanosleep task_struct leak\n  clockevents: Fix generic broadcast for FEAT_C3STOP\n  time, Fix setting of hardware clock in NTP code\n  hrtimer: Prevent hrtimer_enqueue_reprogram race\n  clockevents: Add generic timer broadcast function\n  clockevents: Add generic timer broadcast receiver\n  timekeeping: Switch HAS_PERSISTENT_CLOCK to ALWAYS_USE_PERSISTENT_CLOCK\n  x86/time/rtc: Don\u0027t print extended CMOS year when reading RTC\n  x86: Select HAS_PERSISTENT_CLOCK on x86\n  timekeeping: Add CONFIG_HAS_PERSISTENT_CLOCK option\n  rtc: Skip the suspend/resume handling if persistent clock exist\n  timekeeping: Add persistent_clock_exist flag\n  posix-timers: Fix clock_adjtime to always return timex data on success\n  Round the calculated scale factor in set_cyc2ns_scale()\n  NTP: Add a CONFIG_RTC_SYSTOHC configuration\n  MAINTAINERS: Update John Stultz\u0027s email\n  time: create __getnstimeofday for WARNless calls\n"
    },
    {
      "commit": "bcbd818c069b9e1bf82517401225b152a33968e2",
      "tree": "3fcdcf02b15fdd77998589a6158d0e36ba137d1c",
      "parents": [
        "d652e1eb8e7b739fccbfb503a3da3e9f640fbf3d",
        "14e568e78f6f80ca1e27256641ddf524c7dbdc51"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 19:04:55 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 19:04:55 2013 -0800"
      },
      "message": "Merge branch \u0027smp-hotplug-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip\n\nPull preparatory smp/hotplug patches from Ingo Molnar:\n \"Some early preparatory changes for the WIP hotplug rework by Thomas\n  Gleixner.\"\n\n* \u0027smp-hotplug-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:\n  stop_machine: Use smpboot threads\n  stop_machine: Store task reference in a separate per cpu variable\n  smpboot: Allow selfparking per cpu threads\n"
    },
    {
      "commit": "d652e1eb8e7b739fccbfb503a3da3e9f640fbf3d",
      "tree": "55ab77bad0cbb045eac0b84b80d63f88f1ae09e6",
      "parents": [
        "8f55cea410dbc56114bb71a3742032070c8108d0",
        "77852fea6e2442a0e654a9292060489895de18c7"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 18:19:48 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 18:19:48 2013 -0800"
      },
      "message": "Merge branch \u0027sched-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip\n\nPull scheduler changes from Ingo Molnar:\n \"Main changes:\n\n   - scheduler side full-dynticks (user-space execution is undisturbed\n     and receives no timer IRQs) preparation changes that convert the\n     cputime accounting code to be full-dynticks ready, from Frederic\n     Weisbecker.\n\n   - Initial sched.h split-up changes, by Clark Williams\n\n   - select_idle_sibling() performance improvement by Mike Galbraith:\n\n        \" 1 tbench pair (worst case) in a 10 core + SMT package:\n\n          pre   15.22 MB/sec 1 procs\n          post 252.01 MB/sec 1 procs \"\n\n  - sched_rr_get_interval() ABI fix/change.  We think this detail is not\n    used by apps (so it\u0027s not an ABI in practice), but lets keep it\n    under observation.\n\n  - misc RT scheduling cleanups, optimizations\"\n\n* \u0027sched-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (24 commits)\n  sched/rt: Add \u003clinux/sched/rt.h\u003e header to \u003clinux/init_task.h\u003e\n  cputime: Remove irqsave from seqlock readers\n  sched, powerpc: Fix sched.h split-up build failure\n  cputime: Restore CPU_ACCOUNTING config defaults for PPC64\n  sched/rt: Move rt specific bits into new header file\n  sched/rt: Add a tuning knob to allow changing SCHED_RR timeslice\n  sched: Move sched.h sysctl bits into separate header\n  sched: Fix signedness bug in yield_to()\n  sched: Fix select_idle_sibling() bouncing cow syndrome\n  sched/rt: Further simplify pick_rt_task()\n  sched/rt: Do not account zero delta_exec in update_curr_rt()\n  cputime: Safely read cputime of full dynticks CPUs\n  kvm: Prepare to add generic guest entry/exit callbacks\n  cputime: Use accessors to read task cputime stats\n  cputime: Allow dynamic switch between tick/virtual based cputime accounting\n  cputime: Generic on-demand virtual cputime accounting\n  cputime: Move default nsecs_to_cputime() to jiffies based cputime file\n  cputime: Librarize per nsecs resolution cputime definitions\n  cputime: Avoid multiplication overflow on utime scaling\n  context_tracking: Export context state for generic vtime\n  ...\n\nFix up conflict in kernel/context_tracking.c due to comment additions.\n"
    },
    {
      "commit": "8f55cea410dbc56114bb71a3742032070c8108d0",
      "tree": "59605f0ee961274b22f91add33f5c32459471a83",
      "parents": [
        "b7133a9a103655cda254987a3c0975fd9d8c443f",
        "e259514eef764a5286873618e34c560ecb6cff13"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 17:49:41 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 17:49:41 2013 -0800"
      },
      "message": "Merge branch \u0027perf-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip\n\nPull perf changes from Ingo Molnar:\n \"There are lots of improvements, the biggest changes are:\n\n  Main kernel side changes:\n\n   - Improve uprobes performance by adding \u0027pre-filtering\u0027 support, by\n     Oleg Nesterov.\n\n   - Make some POWER7 events available in sysfs, equivalent to what was\n     done on x86, from Sukadev Bhattiprolu.\n\n   - tracing updates by Steve Rostedt - mostly misc fixes and smaller\n     improvements.\n\n   - Use perf/event tracing to report PCI Express advanced errors, by\n     Tony Luck.\n\n   - Enable northbridge performance counters on AMD family 15h, by Jacob\n     Shin.\n\n   - This tracing commit:\n\n        tracing: Remove the extra 4 bytes of padding in events\n\n     changes the ABI.  All involved parties (PowerTop in particular)\n     seem to agree that it\u0027s safe to do now with the introduction of\n     libtraceevent, but the devil is in the details ...\n\n  Main tooling side changes:\n\n   - Add \u0027event group view\u0027, from Namyung Kim:\n\n     To use it, \u0027perf record\u0027 should group events when recording.  And\n     then perf report parses the saved group relation from file header\n     and prints them together if --group option is provided.  You can\n     use the \u0027perf evlist\u0027 command to see event group information:\n\n        $ perf record -e \u0027{ref-cycles,cycles}\u0027 noploop 1\n        [ perf record: Woken up 2 times to write data ]\n        [ perf record: Captured and wrote 0.385 MB perf.data (~16807 samples) ]\n\n        $ perf evlist --group\n        {ref-cycles,cycles}\n\n     With this example, default perf report will show you each event\n     separately.\n\n     You can use --group option to enable event group view:\n\n        $ perf report --group\n        ...\n        # group: {ref-cycles,cycles}\n        # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n        # Samples: 7K of event \u0027anon group { ref-cycles, cycles }\u0027\n        # Event count (approx.): 6876107743\n        #\n        #         Overhead  Command      Shared Object                      Symbol\n        # ................  .......  .................  ..........................\n            99.84%  99.76%  noploop  noploop            [.] main\n             0.07%   0.00%  noploop  ld-2.15.so         [.] strcmp\n             0.03%   0.00%  noploop  [kernel.kallsyms]  [k] timerqueue_del\n             0.03%   0.03%  noploop  [kernel.kallsyms]  [k] sched_clock_cpu\n             0.02%   0.00%  noploop  [kernel.kallsyms]  [k] account_user_time\n             0.01%   0.00%  noploop  [kernel.kallsyms]  [k] __alloc_pages_nodemask\n             0.00%   0.00%  noploop  [kernel.kallsyms]  [k] native_write_msr_safe\n             0.00%   0.11%  noploop  [kernel.kallsyms]  [k] _raw_spin_lock\n             0.00%   0.06%  noploop  [kernel.kallsyms]  [k] find_get_page\n             0.00%   0.02%  noploop  [kernel.kallsyms]  [k] rcu_check_callbacks\n             0.00%   0.02%  noploop  [kernel.kallsyms]  [k] __current_kernel_time\n\n     As you can see the Overhead column now contains both of ref-cycles\n     and cycles and header line shows group information also - \u0027anon\n     group { ref-cycles, cycles }\u0027.  The output is sorted by period of\n     group leader first.\n\n   - Initial GTK+ annotate browser, from Namhyung Kim.\n\n   - Add option for runtime switching perf data file in perf report,\n     just press \u0027s\u0027 and a menu with the valid files found in the current\n     directory will be presented, from Feng Tang.\n\n   - Add support to display whole group data for raw columns, from Jiri\n     Olsa.\n\n   - Add per processor socket count aggregation in perf stat, from\n     Stephane Eranian.\n\n   - Add interval printing in \u0027perf stat\u0027, from Stephane Eranian.\n\n   - \u0027perf test\u0027 improvements\n\n   - Add support for wildcards in tracepoint system name, from Jiri\n     Olsa.\n\n   - Add anonymous huge page recognition, from Joshua Zhu.\n\n   - perf build-id cache now can show DSOs present in a perf.data file\n     that are not in the cache, to integrate with build-id servers being\n     put in place by organizations such as Fedora.\n\n   - perf top now shares more of the evsel config/creation routines with\n     \u0027record\u0027, paving the way for further integration like \u0027top\u0027\n     snapshots, etc.\n\n   - perf top now supports DWARF callchains.\n\n   - Fix mmap limitations on 32-bit, fix from David Miller.\n\n   - \u0027perf bench numa mem\u0027 NUMA performance measurement suite\n\n   - ... and lots of fixes, performance improvements, cleanups and other\n     improvements I failed to list - see the shortlog and git log for\n     details.\"\n\n* \u0027perf-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (270 commits)\n  perf/x86/amd: Enable northbridge performance counters on AMD family 15h\n  perf/hwbp: Fix cleanup in case of kzalloc failure\n  perf tools: Fix build with bison 2.3 and older.\n  perf tools: Limit unwind support to x86 archs\n  perf annotate: Make it to be able to skip unannotatable symbols\n  perf gtk/annotate: Fail early if it can\u0027t annotate\n  perf gtk/annotate: Show source lines with gray color\n  perf gtk/annotate: Support multiple event annotation\n  perf ui/gtk: Implement basic GTK2 annotation browser\n  perf annotate: Fix warning message on a missing vmlinux\n  perf buildid-cache: Add --update option\n  uprobes/perf: Avoid uprobe_apply() whenever possible\n  uprobes/perf: Teach trace_uprobe/perf code to use UPROBE_HANDLER_REMOVE\n  uprobes/perf: Teach trace_uprobe/perf code to pre-filter\n  uprobes/perf: Teach trace_uprobe/perf code to track the active perf_event\u0027s\n  uprobes: Introduce uprobe_apply()\n  perf: Introduce hw_perf_event-\u003etp_target and -\u003etp_list\n  uprobes/perf: Always increment trace_uprobe-\u003enhit\n  uprobes/tracing: Kill uprobe_trace_consumer, embed uprobe_consumer into trace_uprobe\n  uprobes/tracing: Introduce is_trace_uprobe_enabled()\n  ...\n"
    },
    {
      "commit": "b7133a9a103655cda254987a3c0975fd9d8c443f",
      "tree": "85422ad8c32f1782a2ed3b87b7264b1b3953c105",
      "parents": [
        "e84cf5d0fd53badf3a93c790e280cc92a69ed999",
        "36a5df85e9a3c218b73f6cf80098016ca3f0410d"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 17:47:58 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 17:47:58 2013 -0800"
      },
      "message": "Merge branch \u0027irq-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip\n\nPull irq core changes from Ingo Molnar:\n \"The biggest changes are the IRQ-work and printk changes from Frederic\n  Weisbecker, which prepare the code for \u0027full dynticks\u0027 (the ability to\n  stop or slow down the periodic tick arbitrarily, not just in idle time\n  as today):\n\n   - Don\u0027t stop tick with irq works pending.  This fix is generally\n     useful and concerns archs that can\u0027t raise self IPIs.\n\n   - Flush irq works before CPU offlining.\n\n   - Introduce \"lazy\" irq works that can wait for the next tick to be\n     executed, unless it\u0027s stopped.\n\n   - Implement klogd wake up using irq work.  This removes the ad-hoc\n     printk_tick()/printk_needs_cpu() hooks and make it working even in\n     dynticks mode.\n\n   - Cleanups and fixes.\"\n\n* \u0027irq-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:\n  genirq: Export enable/disable_percpu_irq()\n  arch Kconfig: Remove references to IRQ_PER_CPU\n  irq_work: Remove return value from the irq_work_queue() function\n  genirq: Avoid deadlock in spurious handling\n  printk: Wake up klogd using irq_work\n  irq_work: Make self-IPIs optable\n  irq_work: Warn if there\u0027s still work on cpu_down\n  irq_work: Flush work on CPU_DYING\n  irq_work: Don\u0027t stop the tick with pending works\n  nohz: Add API to check tick state\n  irq_work: Remove CONFIG_HAVE_IRQ_WORK\n  irq_work: Fix racy check on work pending flag\n  irq_work: Fix racy IRQ_WORK_BUSY flag setting\n"
    },
    {
      "commit": "e84cf5d0fd53badf3a93c790e280cc92a69ed999",
      "tree": "abc4d04bc31e5682794d1ea90c38cfeb4d5c9b97",
      "parents": [
        "19f949f52599ba7c3f67a5897ac6be14bfcb1200",
        "ac0e32024b8f40987b3db7d2defdc6b5153ba354"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 17:45:20 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 19 17:45:20 2013 -0800"
      },
      "message": "Merge branch \u0027core-rcu-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip\n\nPull RCU changes from Ingo Molnar:\n \"SRCU changes:\n\n   - These include debugging aids, updates that move towards the goal of\n     permitting srcu_read_lock() and srcu_read_unlock() to be used from\n     idle and offline CPUs, and a few small fixes.\n\n  Changes to rcutorture and to RCU documentation:\n\n   - Posted to LKML at https://lkml.org/lkml/2013/1/26/188\n\n  Enhancements to uniprocessor handling in tiny RCU:\n\n   - Posted to LKML at https://lkml.org/lkml/2013/1/27/2\n\n  Tag RCU callbacks with grace-period number to simplify callback\n  advancement:\n\n   - Posted to LKML at https://lkml.org/lkml/2013/1/26/203\n\n  Miscellaneous fixes:\n\n   - Posted to LKML at https://lkml.org/lkml/2013/1/26/204\"\n\n* \u0027core-rcu-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (27 commits)\n  srcu: use ACCESS_ONCE() to access sp-\u003ecompleted in srcu_read_lock()\n  srcu: Update synchronize_srcu_expedited()\u0027s comments\n  srcu: Update synchronize_srcu()\u0027s comments\n  srcu: Remove checks preventing idle CPUs from calling srcu_read_lock()\n  srcu: Remove checks preventing offline CPUs from calling srcu_read_lock()\n  srcu: Simple cleanup for cleanup_srcu_struct()\n  srcu: Add might_sleep() annotation to synchronize_srcu()\n  srcu: Simplify __srcu_read_unlock() via this_cpu_dec()\n  rcu: Allow rcutorture to be built at low optimization levels\n  rcu: Make rcutorture\u0027s shuffler task shuffle recently added tasks\n  rcu: Allow TREE_PREEMPT_RCU on UP systems\n  rcu: Provide RCU CPU stall warnings for tiny RCU\n  context_tracking: Add comments on interface and internals\n  rcu: Remove obsolete Kconfig option from comment\n  rcu: Remove unused code originally used for context tracking\n  rcu: Consolidate debugging Kconfig options\n  rcu: Correct \u0027optimized\u0027 to \u0027optimize\u0027 in header comment\n  rcu: Trace callback acceleration\n  rcu: Tag callback lists with corresponding grace-period number\n  rcutorture: Don\u0027t compare ptr with 0\n  ...\n"
    },
    {
      "commit": "1438ade5670b56d5386c220e1ad4b5a824a1e585",
      "tree": "3642109a131da8a00a39c409d746618b2c6db797",
      "parents": [
        "112202d9098aae2c36436e5178c0cf3ced423c7b"
      ],
      "author": {
        "name": "Konstantin Khlebnikov",
        "email": "khlebnikov@openvz.org",
        "time": "Thu Jan 24 16:36:31 2013 +0400"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Feb 19 10:09:13 2013 -0800"
      },
      "message": "workqueue: un-GPL function delayed_work_timer_fn()\n\ncommit d8e794dfd51c368ed3f686b7f4172830b60ae47b (\"workqueue: set\ndelayed_work-\u003etimer function on initialization\") exports function\ndelayed_work_timer_fn() only for GPL modules. This makes delayed-works\nunusable for non-GPL modules, because initialization macro now requires\nGPL symbol. For example schedule_delayed_work() available for non-GPL.\n\nSigned-off-by: Konstantin Khlebnikov \u003ckhlebnikov@openvz.org\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: stable@vger.kernel.org # 3.7\n"
    },
    {
      "commit": "cdc4e86b58a95005ef500916b4a8e91a0037a822",
      "tree": "208e5eaf42c25fae3dfe5d086687c2a2fa30418b",
      "parents": [
        "993db4b45fd99949d8f6e004a7744b523dca473a"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Fri Feb 15 23:47:07 2013 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@kernel.org",
        "time": "Tue Feb 19 08:05:53 2013 +0100"
      },
      "message": "cputime: Remove irqsave from seqlock readers\n\nThe reader side code has no requirement to disable interrupts while\nsampling data. The sequence counter is enough to ensure consistency.\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@kernel.org\u003e\n"
    },
    {
      "commit": "6338a53a2bd02d5878ab449371323364b7cc7694",
      "tree": "461c4acae130771b9856715bc2cfdc341b6e5964",
      "parents": [
        "8064b3cf750e71fdaf306abb4433a93d0f45f4c9",
        "18cf0d0784b4a634472ed24d0d7ca1c721d93e90"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Feb 18 23:32:49 2013 -0500"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Feb 18 23:34:21 2013 -0500"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net into net\n\nPull in \u0027net\u0027 to take in the bug fixes that didn\u0027t make it into\n3.8-final.\n\nAlso, deal with the semantic conflict of the change made to\nnet/ipv6/xfrm6_policy.c   A missing rt6-\u003en neighbour release\nwas added to \u0027net\u0027, but in \u0027net-next\u0027 we no longer cache the\nneighbour entries in the ipv6 routes so that change is not\nappropriate there.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "36a5df85e9a3c218b73f6cf80098016ca3f0410d",
      "tree": "83c8d0189615193b2d6111a48ec79097d1661f54",
      "parents": [
        "077931446b85e7858bf9dc0927cd116669b965d2"
      ],
      "author": {
        "name": "Chris Metcalf",
        "email": "cmetcalf@tilera.com",
        "time": "Fri Feb 01 15:04:26 2013 -0500"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon Feb 18 21:42:25 2013 +0100"
      },
      "message": "genirq: Export enable/disable_percpu_irq()\n\nThese functions are used by the tilegx onchip network driver, and it\u0027s\nuseful to be able to load that driver as a module.\n\nSigned-off-by: Chris Metcalf \u003ccmetcalf@tilera.com\u003e\nLink: http://lkml.kernel.org/r/201302012043.r11KhNZF024371@farm-0021.internal.tilera.com\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "f169007b2773f285e098cb84c74aac0154d65ff7",
      "tree": "6b295320c25b9fe8c1e4e94fcc35570134ebb8be",
      "parents": [
        "810cbee4fad570ff167132d4ecf247d99c48f71d"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Mon Feb 18 14:13:35 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 18 09:31:35 2013 -0800"
      },
      "message": "cgroup: fail if monitored file and event_control are in different cgroup\n\nIf we pass fd of memory.usage_in_bytes of cgroup A to cgroup.event_control\nof cgroup B, then we won\u0027t get memory usage notification from A but B!\n\nWhat\u0027s worse, if A and B are in different mount hierarchy, we\u0027ll end up\naccessing NULL pointer!\n\nDisallow this kind of invalid usage.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nAcked-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "810cbee4fad570ff167132d4ecf247d99c48f71d",
      "tree": "2806f56a033f43b17ad2c547b2153941c0e77f40",
      "parents": [
        "63f43f55c9bbc14f76b582644019b8a07dc8219a"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Mon Feb 18 18:56:14 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 18 09:17:24 2013 -0800"
      },
      "message": "cgroup: fix cgroup_rmdir() vs close(eventfd) race\n\ncommit 205a872bd6f9a9a09ef035ef1e90185a8245cc58 (\"cgroup: fix lockdep\nwarning for event_control\") solved a deadlock by introducing a new\nbug.\n\nMove cgrp-\u003eevent_list to a temporary list doesn\u0027t mean you can traverse\nthis list locklessly, because at the same time cgroup_event_wake() can\nbe called and remove the event from the list. The result of this race\nis disastrous.\n\nWe adopt the way how kvm irqfd code implements race-free event removal,\nwhich is now described in the comments in cgroup_event_wake().\n\nv3:\n- call eventfd_signal() no matter it\u0027s eventfd close or cgroup removal\nthat removes the cgroup event.\n\nAcked-by: Kirill A. Shutemov \u003ckirill@shutemov.name\u003e\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "63f43f55c9bbc14f76b582644019b8a07dc8219a",
      "tree": "c9ab6bbf633b6d441c67c3735782b6011afc5b17",
      "parents": [
        "71b5707e119653039e6e95213f00479668c79b75"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Fri Jan 25 16:08:01 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 18 09:08:15 2013 -0800"
      },
      "message": "cpuset: fix cpuset_print_task_mems_allowed() vs rename() race\n\nrename() will change dentry-\u003ed_name. The result of this race can\nbe worse than seeing partially rewritten name, but we might access\na stale pointer because rename() will re-allocate memory to hold\na longer name.\n\nIt\u0027s safe in the protection of dentry-\u003ed_lock.\n\nv2: check NULL dentry before acquiring dentry lock.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "71b5707e119653039e6e95213f00479668c79b75",
      "tree": "cb0dfe84c3b8ec46efce2aa4185342a3a75cc3a1",
      "parents": [
        "9ed8a659703876a9fe96ab86d1b296c2f0084242"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizefan@huawei.com",
        "time": "Thu Jan 24 14:43:28 2013 +0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Mon Feb 18 09:08:10 2013 -0800"
      },
      "message": "cgroup: fix exit() vs rmdir() race\n\nIn cgroup_exit() put_css_set_taskexit() is called without any lock,\nwhich might lead to accessing a freed cgroup:\n\nthread1                           thread2\n---------------------------------------------\nexit()\n  cgroup_exit()\n    put_css_set_taskexit()\n      atomic_dec(cgrp-\u003ecount);\n                                   rmdir();\n      /* not safe !! */\n      check_for_release(cgrp);\n\nrcu_read_lock() can be used to make sure the cgroup is alive.\n\nSigned-off-by: Li Zefan \u003clizefan@huawei.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: stable@vger.kernel.org\n"
    },
    {
      "commit": "7113fe74c10bc01abfdad2fe1f9ca023b0f83685",
      "tree": "6b301a39850b9d41acb4bf3084dde2f012a5affc",
      "parents": [
        "a68d35323b091f51e0957313f0f871f187879143",
        "957d1282bb8c07e682e142b9237cd9fcb8348a0b"
      ],
      "author": {
        "name": "Rafael J. Wysocki",
        "email": "rafael.j.wysocki@intel.com",
        "time": "Fri Feb 15 13:58:54 2013 +0100"
      },
      "committer": {
        "name": "Rafael J. Wysocki",
        "email": "rafael.j.wysocki@intel.com",
        "time": "Fri Feb 15 13:58:54 2013 +0100"
      },
      "message": "Merge branch \u0027pm-assorted\u0027\n\n* pm-assorted:\n  suspend: enable freeze timeout configuration through sys\n  ACPI: enable ACPI SCI during suspend\n  PM: Introduce suspend state PM_SUSPEND_FREEZE\n  PM / Runtime: Add new helper function: pm_runtime_active()\n  PM / tracing: remove deprecated power trace API\n  PM: don\u0027t use [delayed_]work_pending()\n  PM / Domains: don\u0027t use [delayed_]work_pending()\n"
    },
    {
      "commit": "e6c42c295e071dd74a66b5a9fcf4f44049888ed8",
      "tree": "7d417f64b7fa04511b4006eb4907ef41b7e401ed",
      "parents": [
        "9f4646d28362bc424b8a4c7d09ea1c2f1759371a"
      ],
      "author": {
        "name": "Stanislaw Gruszka",
        "email": "sgruszka@redhat.com",
        "time": "Fri Feb 15 11:08:11 2013 +0100"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Fri Feb 15 11:41:56 2013 +0100"
      },
      "message": "posix-cpu-timers: Fix nanosleep task_struct leak\n\nThe trinity fuzzer triggered a task_struct reference leak via\nclock_nanosleep with CPU_TIMERs. do_cpu_nanosleep() calls\nposic_cpu_timer_create(), but misses a corresponding\nposix_cpu_timer_del() which leads to the task_struct reference leak.\n\nReported-and-tested-by: Tommi Rantala \u003ctt.rantala@gmail.com\u003e\nSigned-off-by: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: John Stultz \u003cjohn.stultz@linaro.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: stable@vger.kernel.org\nLink: http://lkml.kernel.org/r/20130215100810.GF4392@redhat.com\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "02e176af92f3e2e9ec3a48792036566af2dcd534",
      "tree": "9d4dd00367eeb909edf4c1a30e2e8178efb9dc5a",
      "parents": [
        "85df3b3769222894e9692b383c7af124b7721086"
      ],
      "author": {
        "name": "Daniel Baluta",
        "email": "dbaluta@ixiacom.com",
        "time": "Wed Feb 06 23:29:20 2013 +0200"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Feb 14 17:06:39 2013 -0300"
      },
      "message": "perf/hwbp: Fix cleanup in case of kzalloc failure\n\nObviously this is a typo and could result in memory leaks if kzalloc\nfails on a given cpu.\n\nSigned-off-by: Daniel Baluta \u003cdbaluta@ixiacom.com\u003e\nAcked-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nLink: http://lkml.kernel.org/r/1360186160-7566-1-git-send-email-dbaluta@ixiacom.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "9f4646d28362bc424b8a4c7d09ea1c2f1759371a",
      "tree": "0ff9dc36f1ef598736725f3eb30e164128d39774",
      "parents": [
        "86c8ead593305915729a7b67f738832764fb4ba7",
        "84e345e4e209cbe796c88fa2ad1732d7121ec100"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Thu Feb 14 19:46:10 2013 +0100"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Thu Feb 14 19:46:10 2013 +0100"
      },
      "message": "Merge branch \u0027fortglx/3.9/time\u0027 of git://git.linaro.org/people/jstultz/linux into timers/core\n"
    },
    {
      "commit": "14e568e78f6f80ca1e27256641ddf524c7dbdc51",
      "tree": "1f75f09c7f8adfa6dd55ef9bd0b547fcaf700f45",
      "parents": [
        "860a0ffaa3e1a9cf0ebb5f43d6a2a2ce67463e93"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Thu Jan 31 12:11:14 2013 +0000"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Thu Feb 14 15:29:38 2013 +0100"
      },
      "message": "stop_machine: Use smpboot threads\n\nUse the smpboot thread infrastructure. Mark the stopper thread\nselfparking and park it after it has finished the take_cpu_down()\nwork.\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Paul McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: Srivatsa S. Bhat \u003csrivatsa.bhat@linux.vnet.ibm.com\u003e\nCc: Arjan van de Veen \u003carjan@infradead.org\u003e\nCc: Paul Turner \u003cpjt@google.com\u003e\nCc: Richard Weinberger \u003crw@linutronix.de\u003e\nCc: Magnus Damm \u003cmagnus.damm@gmail.com\u003e\nLink: http://lkml.kernel.org/r/20130131120741.686315164@linutronix.de\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "860a0ffaa3e1a9cf0ebb5f43d6a2a2ce67463e93",
      "tree": "004c5b928e59605276609459d92db21bb41204e3",
      "parents": [
        "7d7e499f7333f68b7e7f67d14b9c1480913b4afb"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Thu Jan 31 12:11:13 2013 +0000"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Thu Feb 14 15:29:37 2013 +0100"
      },
      "message": "stop_machine: Store task reference in a separate per cpu variable\n\nTo allow the stopper thread being managed by the smpboot thread\ninfrastructure separate out the task storage from the stopper data\nstructure.\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Paul McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: Srivatsa S. Bhat \u003csrivatsa.bhat@linux.vnet.ibm.com\u003e\nCc: Arjan van de Veen \u003carjan@infradead.org\u003e\nCc: Paul Turner \u003cpjt@google.com\u003e\nCc: Richard Weinberger \u003crw@linutronix.de\u003e\nCc: Magnus Damm \u003cmagnus.damm@gmail.com\u003e\nLink: http://lkml.kernel.org/r/20130131120741.626690384@linutronix.de\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "7d7e499f7333f68b7e7f67d14b9c1480913b4afb",
      "tree": "6924ef4eb2a08d7129dc1620d1a557e484df3680",
      "parents": [
        "211b0cdc7dc574e5e756bdf1cc2f4a16b7f6e07e"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Thu Jan 31 12:11:12 2013 +0000"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Thu Feb 14 15:29:37 2013 +0100"
      },
      "message": "smpboot: Allow selfparking per cpu threads\n\nThe stop machine threads are still killed when a cpu goes offline. The\nreason is that the thread is used to bring the cpu down, so it can\u0027t\nbe parked along with the other per cpu threads.\n\nAllow a per cpu thread to be excluded from automatic parking, so it\ncan park itself once it\u0027s done\n\nAdd a create callback function as well.\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Paul McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: Srivatsa S. Bhat \u003csrivatsa.bhat@linux.vnet.ibm.com\u003e\nCc: Arjan van de Veen \u003carjan@infradead.org\u003e\nCc: Paul Turner \u003cpjt@google.com\u003e\nCc: Richard Weinberger \u003crw@linutronix.de\u003e\nCc: Magnus Damm \u003cmagnus.damm@gmail.com\u003e\nLink: http://lkml.kernel.org/r/20130131120741.553993267@linutronix.de\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "112202d9098aae2c36436e5178c0cf3ced423c7b",
      "tree": "2297f17b2ba0c556173566560f33fe7a1b20a904",
      "parents": [
        "8d03ecfe471802d6afe97da97722b6924533aa82"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 13 19:29:12 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 13 19:29:12 2013 -0800"
      },
      "message": "workqueue: rename cpu_workqueue to pool_workqueue\n\nworkqueue has moved away from global_cwqs to worker_pools and with the\nscheduled custom worker pools, wforkqueues will be associated with\npools which don\u0027t have anything to do with CPUs.  The workqueue code\nwent through significant amount of changes recently and mass renaming\nisn\u0027t likely to hurt much additionally.  Let\u0027s replace \u0027cpu\u0027 with\n\u0027pool\u0027 so that it reflects the current design.\n\n* s/struct cpu_workqueue_struct/struct pool_workqueue/\n* s/cpu_wq/pool_wq/\n* s/cwq/pwq/\n\nThis patch is purely cosmetic.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "8d03ecfe471802d6afe97da97722b6924533aa82",
      "tree": "1178cacfdd36358665f9a4c6325329346b221dd0",
      "parents": [
        "1dd638149f1f9d7d7dbb32591d5c7c2a0ea36264"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 13 19:29:10 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 13 19:29:10 2013 -0800"
      },
      "message": "workqueue: reimplement is_chained_work() using current_wq_worker()\n\nis_chained_work() was added before current_wq_worker() and implemented\nits own ham-fisted way of finding out whether %current is a workqueue\nworker - it iterates through all possible workers.\n\nDrop the custom implementation and reimplement using\ncurrent_wq_worker().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "1dd638149f1f9d7d7dbb32591d5c7c2a0ea36264",
      "tree": "454399689b5d5016eefbd9f12e39b2674a8ebb33",
      "parents": [
        "8594fade39d3ad02ef856b8c53b5d7cc538a55f5"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 13 19:29:07 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 13 19:29:07 2013 -0800"
      },
      "message": "workqueue: fix is_chained_work() regression\n\nc9e7cf273f (\"workqueue: move busy_hash from global_cwq to\nworker_pool\") incorrectly converted is_chained_work() to use\nget_gcwq() inside for_each_gcwq_cpu() while removing get_gcwq().\n\nAs cwq might not exist for all possible workqueue CPUs, @cwq can be\nNULL and the following cwq deferences can lead to oops.\n\nFix it by using for_each_cwq_cpu() instead, which is the better one to\nuse anyway as we only need to check pools that the wq is associated\nwith.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "6e6668845fe593414a938b7726d6359b5570ac5a",
      "tree": "9cd88fc22e8f5eb8250fbd27466b526f57f8a3d4",
      "parents": [
        "4ba902b5741859a04fdb90d675b9a87721a3fd59"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Tue Feb 12 13:46:23 2013 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Feb 12 14:34:00 2013 -0800"
      },
      "message": "kernel/pid.c: reenable interrupts when alloc_pid() fails because init has exited\n\nWe\u0027re forgetting to reenable local interrupts on an error path.\n\nSigned-off-by: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nReported-by: Josh Boyer \u003cjwboyer@redhat.com\u003e\nCc: \u003cstable@vger.kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "86c8ead593305915729a7b67f738832764fb4ba7",
      "tree": "eb33b75076c2b50dc8ae8ec0e240de876d31cd45",
      "parents": [
        "b22affe0aef429d657bc6505aacb1c569340ddd2",
        "5d1d9a29bc0772abee765f09513779a2ef0ebbfd"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Tue Feb 12 20:22:56 2013 +0100"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Tue Feb 12 20:22:56 2013 +0100"
      },
      "message": "Merge branch \u0027timers/for-arm\u0027 into timers/core\n"
    },
    {
      "commit": "5d1d9a29bc0772abee765f09513779a2ef0ebbfd",
      "tree": "7905268873812518cf4f6196f2100e5224733f22",
      "parents": [
        "12ad10004645d38356b14d1fbba379c523a61916"
      ],
      "author": {
        "name": "Mark Rutland",
        "email": "mark.rutland@arm.com",
        "time": "Fri Feb 08 15:24:07 2013 +0000"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Tue Feb 12 20:22:28 2013 +0100"
      },
      "message": "clockevents: Fix generic broadcast for FEAT_C3STOP\n\nCommit 12ad100046: \"clockevents: Add generic timer broadcast function\"\nmade tick_device_uses_broadcast set up the generic broadcast function\nfor dummy devices (where !tick_device_is_functional(dev)), but neglected\nto set up the broadcast function for devices that stop in low power\nstates (with the CLOCK_EVT_FEAT_C3STOP flag).\n\nWhen these devices enter low power states they will not have the generic\nbroadcast function assigned, and will bring down the system when an\nattempt is made to broadcast to them.\n\nThis patch ensures that the broadcast function is also assigned for\ndevices which require broadcast in low power states.\n\nReported-by: Stephen Warren \u003cswarren@nvidia.com\u003e\nSigned-off-by: Mark Rutland \u003cmark.rutland@arm.com\u003e\nTested-by: Stephen Warren \u003cswarren@nvidia.com\u003e\nCc: linux-arm-kernel@lists.infradead.org\nCc: nico@linaro.org\nCc: Marc.Zyngier@arm.com\nCc: Will.Deacon@arm.com\nCc: santosh.shilimkar@ti.com\nCc: john.stultz@linaro.org\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "957d1282bb8c07e682e142b9237cd9fcb8348a0b",
      "tree": "a9b5690066c3268e7971c363b34f1a5deb664e2e",
      "parents": [
        "89a22dadb8810983868f5bbbc5530b27bf714a60"
      ],
      "author": {
        "name": "Li Fei",
        "email": "fei.li@intel.com",
        "time": "Fri Feb 01 08:56:03 2013 +0000"
      },
      "committer": {
        "name": "Rafael J. Wysocki",
        "email": "rafael.j.wysocki@intel.com",
        "time": "Sat Feb 09 22:32:48 2013 +0100"
      },
      "message": "suspend: enable freeze timeout configuration through sys\n\nAt present, the value of timeout for freezing is 20s, which is\nmeaningless in case that one thread is frozen with mutex locked\nand another thread is trying to lock the mutex, as this time of\nfreezing will fail unavoidably.\nAnd if there is no new wakeup event registered, the system will\nwaste at most 20s for such meaningless trying of freezing.\n\nWith this patch, the value of timeout can be configured to smaller\nvalue, so such meaningless trying of freezing will be aborted in\nearlier time, and later freezing can be also triggered in earlier\ntime. And more power will be saved.\nIn normal case on mobile phone, it costs real little time to freeze\nprocesses. On some platform, it only costs about 20ms to freeze\nuser space processes and 10ms to freeze kernel freezable threads.\n\nSigned-off-by: Liu Chuansheng \u003cchuansheng.liu@intel.com\u003e\nSigned-off-by: Li Fei \u003cfei.li@intel.com\u003e\nSigned-off-by: Rafael J. Wysocki \u003crafael.j.wysocki@intel.com\u003e\n"
    },
    {
      "commit": "7e73c5ae6e7991a6c01f6d096ff8afaef4458c36",
      "tree": "cd2df301d9ccda6d18f6cbe09f481f38cb78271a",
      "parents": [
        "fbadc58dd3a52c330c8f3926aa93011bf9d91fa0"
      ],
      "author": {
        "name": "Zhang Rui",
        "email": "rui.zhang@intel.com",
        "time": "Wed Feb 06 13:00:36 2013 +0100"
      },
      "committer": {
        "name": "Rafael J. Wysocki",
        "email": "rafael.j.wysocki@intel.com",
        "time": "Sat Feb 09 22:30:44 2013 +0100"
      },
      "message": "PM: Introduce suspend state PM_SUSPEND_FREEZE\n\nPM_SUSPEND_FREEZE state is a general state that\ndoes not need any platform specific support, it equals\nfrozen processes + suspended devices + idle processors.\n\nCompared with PM_SUSPEND_MEMORY,\nPM_SUSPEND_FREEZE saves less power\nbecause the system is still in a running state.\nPM_SUSPEND_FREEZE has less resume latency because it does not\ntouch BIOS, and the processors are in idle state.\n\nCompared with RTPM/idle,\nPM_SUSPEND_FREEZE saves more power as\n1. the processor has longer sleep time because processes are frozen.\n   The deeper c-state the processor supports, more power saving we can get.\n2. PM_SUSPEND_FREEZE uses system suspend code path, thus we can get\n   more power saving from the devices that does not have good RTPM support.\n\nThis state is useful for\n1) platforms that do not have STR, or have a broken STR.\n2) platforms that have an extremely low power idle state,\n   which can be used to replace STR.\n\nThe following describes how PM_SUSPEND_FREEZE state works.\n1. echo freeze \u003e /sys/power/state\n2. the processes are frozen.\n3. all the devices are suspended.\n4. all the processors are blocked by a wait queue\n5. all the processors idles and enters (Deep) c-state.\n6. an interrupt fires.\n7. a processor is woken up and handles the irq.\n8. if it is a general event,\n   a) the irq handler runs and quites.\n   b) goto step 4.\n9. if it is a real wake event, say, power button pressing, keyboard touch, mouse moving,\n   a) the irq handler runs and activate the wakeup source\n   b) wakeup_source_activate() notifies the wait queue.\n   c) system starts resuming from PM_SUSPEND_FREEZE\n10. all the devices are resumed.\n11. all the processes are unfrozen.\n12. system is back to working.\n\nKnown Issue:\nThe wakeup of this new PM_SUSPEND_FREEZE state may behave differently\nfrom the previous suspend state.\nTake ACPI platform for example, there are some GPEs that only enabled\nwhen the system is in sleep state, to wake the system backk from S3/S4.\nBut we are not touching these GPEs during transition to PM_SUSPEND_FREEZE.\nThis means we may lose some wake event.\nBut on the other hand, as we do not disable all the Interrupts during\nPM_SUSPEND_FREEZE, we may get some extra \"wakeup\" Interrupts, that are\nnot available for S3/S4.\n\nThe patches has been tested on an old Sony laptop, and here are the results:\n\nAverage Power:\n1. RPTM/idle for half an hour:\n   14.8W, 12.6W, 14.1W, 12.5W, 14.4W, 13.2W, 12.9W\n2. Freeze for half an hour:\n   11W, 10.4W, 9.4W, 11.3W 10.5W\n3. RTPM/idle for three hours:\n   11.6W\n4. Freeze for three hours:\n   10W\n5. Suspend to Memory:\n   0.5~0.9W\n\nAverage Resume Latency:\n1. RTPM/idle with a black screen: (From pressing keyboard to screen back)\n   Less than 0.2s\n2. Freeze: (From pressing power button to screen back)\n   2.50s\n3. Suspend to Memory: (From pressing power button to screen back)\n   4.33s\n\n\u003eFrom the results, we can see that all the platforms should benefit from\nthis patch, even if it does not have Low Power S0.\n\nSigned-off-by: Zhang Rui \u003crui.zhang@intel.com\u003e\nSigned-off-by: Rafael J. Wysocki \u003crafael.j.wysocki@intel.com\u003e\n"
    },
    {
      "commit": "ad72b3bea744b4db01c89af0f86f3e8920d354df",
      "tree": "8482593d6330783150e88ff7181a1484d3156265",
      "parents": [
        "7c99e0bf86fdc1dee238eb6e213b980f887b68f1"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Dec 21 17:57:00 2012 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Sat Feb 09 11:32:42 2013 -0800"
      },
      "message": "kprobes: fix wait_for_kprobe_optimizer()\n\nwait_for_kprobe_optimizer() seems largely broken.  It uses\noptimizer_comp which is never re-initialized, so\nwait_for_kprobe_optimizer() will never wait for anything once\nkprobe_optimizer() finishes all pending jobs for the first time.\n\nAlso, aside from completion, delayed_work_pending() is %false once\nkprobe_optimizer() starts execution and wait_for_kprobe_optimizer()\nwon\u0027t wait for it.\n\nReimplement it so that it flushes optimizing_work until\n[un]optimizing_lists are empty.  Note that this also makes\noptimizing_work execute immediately if someone\u0027s waiting for it, which\nis the nicer behavior.\n\nOnly compile tested.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Masami Hiramatsu \u003cmasami.hiramatsu.pt@hitachi.com\u003e\nCc: Ananth N Mavinakayanahalli \u003cananth@in.ibm.com\u003e\nCc: Anil S Keshavamurthy \u003canil.s.keshavamurthy@intel.com\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "84e345e4e209cbe796c88fa2ad1732d7121ec100",
      "tree": "f73f35d0e72a6c6f3e4b3ef430608aca3a5e8d54",
      "parents": [
        "6f16eebe1ff82176339a0439c98ebec9768b0ee2"
      ],
      "author": {
        "name": "Prarit Bhargava",
        "email": "prarit@redhat.com",
        "time": "Fri Feb 08 17:59:53 2013 -0500"
      },
      "committer": {
        "name": "John Stultz",
        "email": "john.stultz@linaro.org",
        "time": "Fri Feb 08 15:07:05 2013 -0800"
      },
      "message": "time, Fix setting of hardware clock in NTP code\n\nAt init time, if the system time is \"warped\" forward in warp_clock()\nit will differ from the hardware clock by sys_tz.tz_minuteswest.  This time\ndifference is not taken into account when ntp updates the hardware clock,\nand this causes the system time to jump forward by this offset every reboot.\n\nThe kernel must take this offset into account when writing the system time\nto the hardware clock in the ntp code.  This patch adds\npersistent_clock_is_local which indicates that an offset has been applied\nin warp_clock() and accounts for the \"warp\" before writing the hardware\nclock.\n\nx86 does not have this problem as rtc writes are software limited to a\n+/-15 minute window relative to the current rtc time.  Other arches, such\nas powerpc, however do a full synchronization of the system time to the\nrtc and will see this problem.\n\n[v2]: generated against tip/timers/core\n\nSigned-off-by: Prarit Bhargava \u003cprarit@redhat.com\u003e\nCc: John Stultz \u003cjohn.stultz@linaro.org\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: John Stultz \u003cjohn.stultz@linaro.org\u003e\n"
    },
    {
      "commit": "fd5023111cf720db890ef34f305ac5d427e690a0",
      "tree": "4d21e9a02bfbdafe5fc598af0755db791238dbe7",
      "parents": [
        "8b9a4d56866e0dca6ae886ed9bff777e50d0b70c",
        "836dc9e3fbbab0c30aa6e664417225f5c1fb1c39"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Fri Feb 08 18:02:14 2013 -0500"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Fri Feb 08 18:02:14 2013 -0500"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net\n\nSynchronize with \u0027net\u0027 in order to sort out some l2tp, wireless, and\nipv6 GRE fixes that will be built on top of in \u0027net-next\u0027.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "b2fe8ba674e8acbb9e8e63510b802c6d054d88a3",
      "tree": "1bd1defbfe3f285dfa7c77f94bc5523ac4a82679",
      "parents": [
        "f42d24a1d20d2e72d1e5d48930f18b138dfad117"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Feb 04 19:05:43 2013 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 18:28:08 2013 +0100"
      },
      "message": "uprobes/perf: Avoid uprobe_apply() whenever possible\n\nuprobe_perf_open/close call the costly uprobe_apply() every time,\nwe can avoid it if:\n\n\t- \"nr_systemwide !\u003d 0\" is not changed.\n\n\t- There is another process/thread with the same -\u003emm.\n\n\t- copy_proccess() does inherit_event(). dup_mmap() preserves the\n\t  inserted breakpoints.\n\n\t- event-\u003eattr.enable_on_exec \u003d\u003d T, we can rely on uprobe_mmap()\n\t  called by exec/mmap paths.\n\n\t- tp_target is exiting. Only _close() checks PF_EXITING, I don\u0027t\n\t  think TRACE_REG_PERF_OPEN can hit the dying task too often.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "f42d24a1d20d2e72d1e5d48930f18b138dfad117",
      "tree": "10696fc2f0a21d60a7fb1581efecd172435f0408",
      "parents": [
        "31ba334836c0ac0039084859f14a5b96858493dc"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Feb 04 17:48:34 2013 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 18:28:07 2013 +0100"
      },
      "message": "uprobes/perf: Teach trace_uprobe/perf code to use UPROBE_HANDLER_REMOVE\n\nChange uprobe_trace_func() and uprobe_perf_func() to return \"int\". Change\nuprobe_dispatcher() to return \"trace_ret | perf_ret\" although this is not\nneeded, currently TP_FLAG_TRACE/TP_FLAG_PROFILE are mutually exclusive.\n\nThe only functional change is that uprobe_perf_func() checks the filtering\ntoo and returns UPROBE_HANDLER_REMOVE if nobody wants to trace current.\n\nTesting:\n\n\t# perf probe -x /lib/libc.so.6 syscall\n\n\t# perf record -e probe_libc:syscall -i perl -e \u0027fork; syscall -1 for 1..10; wait\u0027\n\n\t# perf report --show-total-period\n\t\t100.00%            10     perl  libc-2.8.so    [.] syscall\n\nBefore this patch:\n\n\t# cat /sys/kernel/debug/tracing/uprobe_profile\n\t\t/lib/libc.so.6 syscall\t\t\t\t20\n\nA child process doesn\u0027t have a counter, but still it hits this breakoint\n\"copied\" by dup_mmap().\n\nAfter the patch:\n\n\t# cat /sys/kernel/debug/tracing/uprobe_profile\n\t\t/lib/libc.so.6 syscall\t\t\t\t11\n\nThe child process hits this int3 only once and does unapply_uprobe().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "31ba334836c0ac0039084859f14a5b96858493dc",
      "tree": "a6f8d72d58f165717481aae43fcabe25b326dce3",
      "parents": [
        "736288ba5016e255869c26296014eeff649971c2"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Feb 04 17:11:58 2013 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 18:28:07 2013 +0100"
      },
      "message": "uprobes/perf: Teach trace_uprobe/perf code to pre-filter\n\nFinally implement uprobe_perf_filter() which checks -\u003enr_systemwide or\n-\u003eperf_events to figure out whether we need to insert the breakpoint.\n\nuprobe_perf_open/close are changed to do uprobe_apply(true/false) when\nthe new perf event comes or goes away.\n\nNote that currently this is very suboptimal:\n\n\t- uprobe_register() called by TRACE_REG_PERF_REGISTER becomes a\n\t  heavy nop, consumer-\u003efilter() always returns F at this stage.\n\n\t  As it was already discussed we need uprobe_register_only() to\n\t  avoid the costly register_for_each_vma() when possible.\n\n\t- uprobe_apply() is oftenly overkill. Unless \"nr_systemwide !\u003d 0\"\n\t  changes we need uprobe_apply_mm(), unapply_uprobe() is almost\n\t  what we need.\n\n\t- uprobe_apply() can be simply avoided sometimes, see the next\n\t  changes.\n\nTesting:\n\n\t# perf probe -x /lib/libc.so.6 syscall\n\n\t# perl -e \u0027syscall -1 while 1\u0027 \u0026\n\t[1] 530\n\n\t# perf record -e probe_libc:syscall perl -e \u0027syscall -1 for 1..10; sleep 1\u0027\n\n\t# perf report --show-total-period\n\t\t100.00%            10     perl  libc-2.8.so    [.] syscall\n\nBefore this patch:\n\n\t# cat /sys/kernel/debug/tracing/uprobe_profile\n\t\t/lib/libc.so.6 syscall\t\t\t\t79291\n\nA huge -\u003enrhit \u003d\u003d 79291 reflects the fact that the background process\n530 constantly hits this breakpoint too, even if doesn\u0027t contribute to\nthe output.\n\nAfter the patch:\n\n\t# cat /sys/kernel/debug/tracing/uprobe_profile\n\t\t/lib/libc.so.6 syscall\t\t\t\t10\n\nThis shows that only the target process was punished by int3.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "736288ba5016e255869c26296014eeff649971c2",
      "tree": "235ab829ec63136e19d97a817489484f88ad3da8",
      "parents": [
        "bdf8647c44766590ed02f9a84a450a796558b753"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sun Feb 03 20:58:35 2013 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 18:28:06 2013 +0100"
      },
      "message": "uprobes/perf: Teach trace_uprobe/perf code to track the active perf_event\u0027s\n\nIntroduce \"struct trace_uprobe_filter\" which records the \"active\"\nperf_event\u0027s attached to ftrace_event_call. For the start we simply\nuse list_head, we can optimize this later if needed. For example, we\ndo not really need to record an event with -\u003eparent !\u003d NULL, we can\nrely on parent-\u003echild_list. And we can certainly do some optimizations\nfor the case when 2 events have the same -\u003etp_target or tp_target-\u003emm.\n\nChange trace_uprobe_register() to process TRACE_REG_PERF_OPEN/CLOSE\nand add/del this perf_event to the list.\n\nWe can probably avoid any locking, but lets start with the \"obvioulsy\ncorrect\" trace_uprobe_filter-\u003erwlock which protects everything.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "bdf8647c44766590ed02f9a84a450a796558b753",
      "tree": "fb3510335d4c1ce67e109df2f80eb26c67d8b589",
      "parents": [
        "f22c1bb6b4706be3502b378cb14564449b15f983"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sun Feb 03 19:21:12 2013 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 18:28:04 2013 +0100"
      },
      "message": "uprobes: Introduce uprobe_apply()\n\nCurrently it is not possible to change the filtering constraints after\nuprobe_register(), so a consumer can not, say, start to trace a task/mm\nwhich was previously filtered out, or remove the no longer needed bp\u0027s.\n\nIntroduce uprobe_apply() which simply does register_for_each_vma() again\nto consult uprobe_consumer-\u003efilter() and install/remove the breakpoints.\nThe only complication is that register_for_each_vma() can no longer\nassume that uprobe-\u003econsumers should be consulter if is_register \u003d\u003d T,\nso we change it to accept \"struct uprobe_consumer *new\" instead.\n\nUnlike uprobe_register(), uprobe_apply(true) doesn\u0027t do \"unregister\" if\nregister_for_each_vma() fails, it is up to caller to handle the error.\n\nNote: we probably need to cleanup the current interface, it is strange\nthat uprobe_apply/unregister need inode/offset. We should either change\nuprobe_register() to return \"struct uprobe *\", or add a private -\u003euprobe\nmember in uprobe_consumer. And in the long term uprobe_apply() should\ntake a single argument, uprobe or consumer, even \"bool add\" should go\naway.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "f22c1bb6b4706be3502b378cb14564449b15f983",
      "tree": "ac7d09e3d42f4ab77cac56b9cb7fba2d4bcabf06",
      "parents": [
        "1b47aefd9b6bd439a4be43c47acd22987ac22db8"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Feb 02 16:27:52 2013 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 18:28:02 2013 +0100"
      },
      "message": "perf: Introduce hw_perf_event-\u003etp_target and -\u003etp_list\n\nsys_perf_event_open()-\u003eperf_init_event(event) is called before\nfind_get_context(event), this means that event-\u003ectx \u003d\u003d NULL when\nclass-\u003ereg(TRACE_REG_PERF_REGISTER/OPEN) is called and thus it\ncan\u0027t know if this event is per-task or system-wide.\n\nThis patch adds hw_perf_event-\u003etp_target for PERF_TYPE_TRACEPOINT,\nthis is analogous to PERF_TYPE_BREAKPOINT/bp_target we already have.\nThe patch also moves -\u003ebp_target up so that it can overlap with the\nnew member, this can help the compiler to generate the better code.\n\ntrace_uprobe_register() will use it for prefiltering to avoid the\nunnecessary breakpoints in mm\u0027s we do not want to trace.\n\n-\u003etp_target doesn\u0027t have its own reference, but we can rely on the\nfact that either sys_perf_event_open() holds a reference, or it is\nequal to event-\u003ectx-\u003etask. So this pointer is always valid until\nfree_event().\n\nAlso add the \"struct list_head tp_list\" into this union. It is not\nstrictly necessary, but it can simplify the next changes and we can\nadd it for free.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "1b47aefd9b6bd439a4be43c47acd22987ac22db8",
      "tree": "a3d0a40ce94f7e57d4375a77a0c74c0001b4bb67",
      "parents": [
        "a932b7381f81235530c3d0acbd3ba2c7537d78e5"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Jan 31 19:55:27 2013 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 18:24:34 2013 +0100"
      },
      "message": "uprobes/perf: Always increment trace_uprobe-\u003enhit\n\nMove tu-\u003enhit++ from uprobe_trace_func() to uprobe_dispatcher().\n\n-\u003enhit counts how many time we hit the breakpoint inserted by this\nuprobe, we do not want to loose this info if uprobe was enabled by\nsys_perf_event_open().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "a932b7381f81235530c3d0acbd3ba2c7537d78e5",
      "tree": "01fb4bbdd21cb67c63b6302ffbbbda22fdcbebcd",
      "parents": [
        "b64b007797c1e6d6b745c93c296ba1d5f4d72d86"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Jan 31 19:47:23 2013 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 18:24:33 2013 +0100"
      },
      "message": "uprobes/tracing: Kill uprobe_trace_consumer, embed uprobe_consumer into trace_uprobe\n\ntrace_uprobe-\u003econsumer and \"struct uprobe_trace_consumer\" add the\nunnecessary indirection and complicate the code for no reason.\n\nThis patch simply embeds uprobe_consumer into \"struct trace_uprobe\",\nall other changes only fix the compilation errors.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "b64b007797c1e6d6b745c93c296ba1d5f4d72d86",
      "tree": "b2cfd860f68b421484d7992f354d62b8e6b7f1ce",
      "parents": [
        "7e4e28c53963e6cfa94d8109bb8f5233c5659048"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Jan 31 19:15:30 2013 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 18:24:30 2013 +0100"
      },
      "message": "uprobes/tracing: Introduce is_trace_uprobe_enabled()\n\nprobe_event_enable/disable() check tu-\u003econsumer !\u003d NULL to avoid the\nwrong uprobe_register/unregister().\n\nWe are going to kill this pointer and \"struct uprobe_trace_consumer\",\nso we add the new helper, is_trace_uprobe_enabled(), which can rely\non TP_FLAG_TRACE/TP_FLAG_PROFILE instead.\n\nNote: the current logic doesn\u0027t look optimal, it is not clear why\nTP_FLAG_TRACE/TP_FLAG_PROFILE are mutually exclusive, we will probably\nchange this later.\n\nAlso kill the unused TP_FLAG_UPROBE.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "7e4e28c53963e6cfa94d8109bb8f5233c5659048",
      "tree": "5405bc0552ef0f2d8c67bb9ef6b391f5a7a504b3",
      "parents": [
        "4161824f18ff4f56f46595a4016c7315dd0d24f1"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Jan 28 17:08:47 2013 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 18:24:14 2013 +0100"
      },
      "message": "uprobes/tracing: Ensure inode !\u003d NULL in create_trace_uprobe()\n\nprobe_event_enable/disable() check tu-\u003einode !\u003d NULL at the start.\nThis is ugly, if igrab() can fail create_trace_uprobe() should not\nsucceed and \"postpone\" the failure.\n\nAnd S_ISREG(inode-\u003ei_mode) check added by d24d7dbf is not safe.\n\nNote: alloc_uprobe() should probably check igrab() !\u003d NULL as well.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "4161824f18ff4f56f46595a4016c7315dd0d24f1",
      "tree": "0543311b70f8855f967fb41c3d7c3bf61c0c8a09",
      "parents": [
        "84d7ed799fd6c1366547d88ddb8188c65de3b94f"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sun Jan 27 18:36:24 2013 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 18:10:19 2013 +0100"
      },
      "message": "uprobes/tracing: Fully initialize uprobe_trace_consumer before uprobe_register()\n\nprobe_event_enable() does uprobe_register() and only after that sets\nutc-\u003etu and tu-\u003econsumer/flags. This can race with uprobe_dispatcher()\nwhich can miss these assignments or see them out of order. Nothing\nreally bad can happen, but this doesn\u0027t look clean/safe.\n\nAnd this does not allow to use uprobe_consumer-\u003efilter() we are going\nto add, it is called by uprobe_register() and it needs utc-\u003etu.\n\nChange this code to initialize everything before uprobe_register(), and\nreset tu-\u003econsumer/flags if it fails. We can\u0027t race with event_disable(),\nthe caller holds event_mutex, and if we could the code would be wrong\nanyway.\n\nIn fact I think uprobe_trace_consumer should die, it buys nothing but\ncomplicates the code. We can simply add uprobe_consumer into trace_uprobe.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "84d7ed799fd6c1366547d88ddb8188c65de3b94f",
      "tree": "a40db2f5e04c02d087a37c53182335fc46803ea3",
      "parents": [
        "e8440c1458ba571bc3fac8a6beb53ff604199f5b"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sun Jan 27 18:20:45 2013 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 18:10:17 2013 +0100"
      },
      "message": "uprobes/tracing: Fix dentry/mount leak in create_trace_uprobe()\n\ncreate_trace_uprobe() does kern_path() to find -\u003ed_inode, but forgets\nto do path_put(). We can do this right after igrab().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "e8440c1458ba571bc3fac8a6beb53ff604199f5b",
      "tree": "59abbd23435cd341250a028b4fa06826b7133fbe",
      "parents": [
        "af4355e91f15812df8608925738c91be57c580dd"
      ],
      "author": {
        "name": "Josh Stone",
        "email": "jistone@redhat.com",
        "time": "Sun Jan 13 19:03:34 2013 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:13 2013 +0100"
      },
      "message": "uprobes: Add exports for module use\n\nThe original pull message for uprobes (commit 654443e2) noted:\n\n  This tree includes uprobes support in \u0027perf probe\u0027 - but SystemTap\n  (and other tools) can take advantage of user probe points as well.\n\nIn order to actually be usable in module-based tools like SystemTap, the\ninterface needs to be exported.  This patch first adds the obvious\nexports for uprobe_register and uprobe_unregister.  Then it also adds\none for task_user_regset_view, which is necessary to get the correct\nstate of userspace registers.\n\nSigned-off-by: Josh Stone \u003cjistone@redhat.com\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "af4355e91f15812df8608925738c91be57c580dd",
      "tree": "d50a8fb2a2240f00e8d72a804de237552d7f1b36",
      "parents": [
        "608e7427c0a06de0d70374a9fd7defc8eb228b7e"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Dec 31 18:37:11 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:13 2013 +0100"
      },
      "message": "uprobes: Kill the bogus IS_ERR_VALUE(xol_vaddr) check\n\nutask-\u003exol_vaddr is either zero or valid, remove the bogus\nIS_ERR_VALUE() check in xol_free_insn_slot().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Anton Arapov \u003canton@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "608e7427c0a06de0d70374a9fd7defc8eb228b7e",
      "tree": "fa9d008fc34cd270613b63bbd9fd724c563daa44",
      "parents": [
        "aba51024e7159c93914557caaa2b8cda26331091"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Dec 31 18:20:42 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:12 2013 +0100"
      },
      "message": "uprobes: Do not allocate current-\u003eutask unnecessary\n\nhandle_swbp() does get_utask() before can_skip_sstep() for no reason,\nwe do not need -\u003eutask if can_skip_sstep() succeeds.\n\nMove get_utask() to pre_ssout() who actually starts to use it. Move\nthe initialization of utask-\u003eactive_uprobe/state as well. This way\nthe whole initialization is consolidated in pre_ssout().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Anton Arapov \u003canton@redhat.com\u003e\n"
    },
    {
      "commit": "aba51024e7159c93914557caaa2b8cda26331091",
      "tree": "9883f94fdefa1347040be590b336e809ba6d3300",
      "parents": [
        "a6cb3f6d51253e9cf21a38b17c025018117809d7"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Dec 31 18:12:48 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:12 2013 +0100"
      },
      "message": "uprobes: Fix utask-\u003exol_vaddr leak in pre_ssout()\n\npre_ssout() should do xol_free_insn_slot() if arch_uprobe_pre_xol()\nfails, otherwise nobody will free the allocated slot.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Anton Arapov \u003canton@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "a6cb3f6d51253e9cf21a38b17c025018117809d7",
      "tree": "f0ffafefd93cb97f550b0149b14e56a68c778576",
      "parents": [
        "5a2df662aafdabffb2cf3adb780a5adf66dfb3bc"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Dec 31 18:00:06 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:12 2013 +0100"
      },
      "message": "uprobes: Do not play with utask in xol_get_insn_slot()\n\npre_ssout()-\u003exol_get_insn_slot() path is confusing and buggy. This patch\ncleanups the code, the next one fixes the bug.\n\nChange xol_get_insn_slot() to only allocate the slot and do nothing more,\nmove the initialization of utask-\u003exol_vaddr/vaddr into pre_ssout().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Anton Arapov \u003canton@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "5a2df662aafdabffb2cf3adb780a5adf66dfb3bc",
      "tree": "758f73ec4d1a89c1e7ab416503732c59fd7839ee",
      "parents": [
        "9b545df809644912552360054c7bbe8b8a9e01fa"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Dec 31 17:03:32 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:12 2013 +0100"
      },
      "message": "uprobes: Turn add_utask() into get_utask()\n\nRename add_utask() into get_utask() and change it to allocate on\ndemand to simplify the caller. Like get_xol_area() it will have\nmore users.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Anton Arapov \u003canton@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "9b545df809644912552360054c7bbe8b8a9e01fa",
      "tree": "ca558fdf71d30ec0bc5ef2f821b06b45b13ff5b0",
      "parents": [
        "c8a82538001e1a68f4a319d5a75de90d1f284731"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Dec 31 16:39:49 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:11 2013 +0100"
      },
      "message": "uprobes: Fold xol_alloc_area() into get_xol_area()\n\nCurrently only xol_get_insn_slot() does get_xol_area() + xol_alloc_area(),\nbut this will have more users and we do not want to copy-and-paste this\ncode. This patch simply moves xol_alloc_area() into get_xol_area() to\nsimplify the current and future code.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Anton Arapov \u003canton@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "c8a82538001e1a68f4a319d5a75de90d1f284731",
      "tree": "8f6ad569a44b3fb9179442fd6b9d07d42ec28229",
      "parents": [
        "74e59dfc6b19e3472a7c16ad57bc831e6e647895"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sun Dec 30 17:40:39 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:11 2013 +0100"
      },
      "message": "uprobes: Move alloc_page() from xol_add_vma() to xol_alloc_area()\n\nMove alloc_page() from xol_add_vma() to xol_alloc_area() to cleanup\nthe code. This separates the memory allocations and consolidates the\n-EALREADY cleanups and the error handling.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Anton Arapov \u003canton@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "74e59dfc6b19e3472a7c16ad57bc831e6e647895",
      "tree": "5047f177b6c604f83d4b9f62614acf93a08d34bd",
      "parents": [
        "cf31ec3f7fece93f3fce3ee5964e27857141ea47"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sun Dec 30 15:54:08 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:11 2013 +0100"
      },
      "message": "uprobes: Change handle_swbp() to expose bp_vaddr to handler_chain()\n\nChange handle_swbp() to set regs-\u003eip \u003d bp_vaddr in advance, this is\nwhat consumer-\u003ehandler() needs but uprobe_get_swbp_addr() is not\nexported.\n\nThis also simplifies the code and makes it more consistent across\nthe supported architectures. handle_swbp() becomes the only caller\nof uprobe_get_swbp_addr().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Ananth N Mavinakayanahalli \u003cananth@in.ibm.com\u003e\n"
    },
    {
      "commit": "da1816b1caeccdff04531e763bb35d7caa3ed19f",
      "tree": "bbf3b1eda3f969a5115770f0aa1081feafd871cb",
      "parents": [
        "8a7f2fa0dea3b019500961b86d765e6fdd4bffb2"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Dec 29 17:49:11 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:11 2013 +0100"
      },
      "message": "uprobes: Teach handler_chain() to filter out the probed task\n\nCurrrently the are 2 problems with pre-filtering:\n\n1. It is not possible to add/remove a task (mm) after uprobe_register()\n\n2. A forked child inherits all breakpoints and uprobe_consumer can not\n   control this.\n\nThis patch does the first step to improve the filtering. handler_chain()\nremoves the breakpoints installed by this uprobe from current-\u003emm if all\nhandlers return UPROBE_HANDLER_REMOVE.\n\nNote that handler_chain() relies on -\u003eregister_rwsem to avoid the race\nwith uprobe_register/unregister which can add/del a consumer, or even\nremove and then insert the new uprobe at the same address.\n\nPerhaps we will add uprobe_apply_mm(uprobe, mm, is_register) and teach\ncopy_mm() to do filter(UPROBE_FILTER_FORK), but I think this change makes\nsense anyway.\n\nNote: instead of checking the retcode from uc-\u003ehandler, we could add\nuc-\u003efilter(UPROBE_FILTER_BPHIT). But I think this is not optimal to\ncall 2 hooks in a row. This buys nothing, and if handler/filter do\nsomething nontrivial they will probably do the same work twice.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "8a7f2fa0dea3b019500961b86d765e6fdd4bffb2",
      "tree": "c6c467e02da75a9e92f8541cf8889dbd0e2fe5fb",
      "parents": [
        "806a98bdf2a862fef0fc880399d677b35ba525ff"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Dec 28 17:58:38 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:10 2013 +0100"
      },
      "message": "uprobes: Reintroduce uprobe_consumer-\u003efilter()\n\nFinally add uprobe_consumer-\u003efilter() and change consumer_filter()\nto actually call this method.\n\nNote that -\u003efilter() accepts mm_struct, not task_struct. Because:\n\n\t1. We do not have for_each_mm_user(mm, task).\n\n\t2. Even if we implement for_each_mm_user(), -\u003efilter() can\n\t   use it itself.\n\n\t3. It is not clear who will actually need this interface to\n\t   do the \"nontrivial\" filtering.\n\nAnother argument is \"enum uprobe_filter_ctx\", consumer-\u003efilter() can\nuse it to figure out why/where it was called. For example, perhaps\nwe can add UPROBE_FILTER_PRE_REGISTER used by build_map_info() to\nquickly \"nack\" the unwanted mm\u0027s. In this case consumer should know\nthat it is called under -\u003ei_mmap_mutex.\n\nSee the previous discussion at http://marc.info/?t\u003d135214229700002\nPerhaps we should pass more arguments, vma/vaddr?\n\nNote: this patch obviously can\u0027t help to filter out the child created\nby fork(), this will be addressed later.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "806a98bdf2a862fef0fc880399d677b35ba525ff",
      "tree": "5b322a48c4d22d15e8d1a6c8a6a7e28d77ce62a7",
      "parents": [
        "66d06dffa5ef6f3544997440af63a91ef36a2171"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Dec 27 18:21:11 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:10 2013 +0100"
      },
      "message": "uprobes: Rationalize the usage of filter_chain()\n\nfilter_chain() was added into install_breakpoint/remove_breakpoint to\nsimplify the initial changes but this is sub-optimal.\n\nThis patch shifts the callsite to the callers, register_for_each_vma()\nand uprobe_mmap(). This way:\n\n- It will be easier to add the new arguments. This is the main reason,\n  we can do more optimizations later.\n\n- register_for_each_vma(is_register \u003d\u003e true) can be optimized, we only\n  need to consult the new consumer. The previous consumers were already\n  asked when they called uprobe_register().\n\nThis patch also moves the MMF_HAS_UPROBES check from remove_breakpoint(),\nthis allows to avoid the potentionally costly filter_chain(). Note that\nregister_for_each_vma(is_register \u003d\u003e false) doesn\u0027t really need to take\n-\u003econsumer_rwsem, but I don\u0027t think it makes sense to optimize this and\nintroduce filter_chain_lockless().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "66d06dffa5ef6f3544997440af63a91ef36a2171",
      "tree": "a95c81e492b5c714caa7f24f48fdb20fe0a33024",
      "parents": [
        "06b7bcd8cbd7eb1af331e437ec3d8f5182ae1b7e"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sun Nov 25 22:48:37 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:10 2013 +0100"
      },
      "message": "uprobes: Kill uprobes_mutex[], separate alloc_uprobe() and __uprobe_register()\n\nuprobe_register() and uprobe_unregister() are the only users of\nmutex_lock(uprobes_hash(inode)), and the only reason why we can\u0027t\nsimply remove it is that we need to ensure that delete_uprobe() is\nnot possible after alloc_uprobe() and before consumer_add().\n\nIOW, we need to ensure that when we take uprobe-\u003eregister_rwsem\nthis uprobe is still valid and we didn\u0027t race with _unregister()\nwhich called delete_uprobe() in between.\n\nWith this patch uprobe_register() simply checks uprobe_is_active()\nand retries if it hits this very unlikely race. uprobes_mutex[] is\nno longer needed and can be removed.\n\nThere is another reason for this change, prepare_uprobe() should be\nfolded into alloc_uprobe() and we do not want to hold the extra locks\naround read_mapping_page/etc.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Anton Arapov \u003canton@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "06b7bcd8cbd7eb1af331e437ec3d8f5182ae1b7e",
      "tree": "ad2fc6a39d2c5ecfa45f4cd13fd0140839894b52",
      "parents": [
        "441f1eb7db8babe2b6b4bc805f023739dbb70e33"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sun Nov 25 22:01:42 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:09 2013 +0100"
      },
      "message": "uprobes: Introduce uprobe_is_active()\n\nThe lifetime of uprobe-\u003erb_node and uprobe-\u003einode is not refcounted,\ndelete_uprobe() is called when we detect that uprobe has no consumers,\nand it would be deadly wrong to do this twice.\n\nChange delete_uprobe() to WARN() if it was already called. We use\nRB_CLEAR_NODE() to mark uprobe \"inactive\", then RB_EMPTY_NODE() can\nbe used to detect this case.\n\nRB_EMPTY_NODE() is not used directly, we add the trivial helper for\nthe next change.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Anton Arapov \u003canton@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "441f1eb7db8babe2b6b4bc805f023739dbb70e33",
      "tree": "4c57b4553ce1b325c677d3e7204a2444fe577a99",
      "parents": [
        "d4d3ccc6d1eb74bd315d49a3829c5ad6c48d21b0"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sun Nov 25 19:54:29 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:08 2013 +0100"
      },
      "message": "uprobes: Kill uprobe_events, use RB_EMPTY_ROOT() instead\n\nuprobe_events counts the number of uprobes in uprobes_tree but\nit is used as a boolean. We can use RB_EMPTY_ROOT() instead.\n\nProbably no_uprobe_events() added by this patch can have more\ncallers, say, mmf_recalc_uprobes().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Anton Arapov \u003canton@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "d4d3ccc6d1eb74bd315d49a3829c5ad6c48d21b0",
      "tree": "e8ccc45b9b9f8c72aaea150bf93d4d56cf9dc8d4",
      "parents": [
        "bb929284be40cbbdb347690742557d708fd504a9"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Nov 24 18:51:34 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:08 2013 +0100"
      },
      "message": "uprobes: Kill uprobe-\u003ecopy_mutex\n\nNow that -\u003eregister_rwsem is safe under -\u003emmap_sem we can kill\n-\u003ecopy_mutex and abuse down_write(\u0026uprobe-\u003econsumer_rwsem).\n\nThis makes prepare_uprobe() even more ugly, but we should kill\nit anyway.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "bb929284be40cbbdb347690742557d708fd504a9",
      "tree": "6f86aba2f415508fdccb88804bc03bdae3a0e160",
      "parents": [
        "1ff6fee5e62c57d5923b805bb4206acb7953f16e"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Nov 24 18:27:08 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:06 2013 +0100"
      },
      "message": "uprobes: Kill UPROBE_RUN_HANDLER flag\n\nSimply remove UPROBE_RUN_HANDLER and the corresponding code.\n\nIt can only help if uprobe has a single consumer, and in fact\nit is no longer needed after handler_chain() was changed to use\n-\u003eregister_rwsem, we simply can not race with uprobe_register().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "1ff6fee5e62c57d5923b805bb4206acb7953f16e",
      "tree": "1b573238a506824e34d19b7ae5cba604d00f7b5c",
      "parents": [
        "e591c8d78e49e6206935cf31c4d2b603bbb29166"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Nov 24 18:15:46 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:05 2013 +0100"
      },
      "message": "uprobes: Change filter_chain() to iterate -\u003econsumers list\n\nNow that it safe to use -\u003econsumer_rwsem under -\u003emmap_sem we can\nalmost finish the implementation of filter_chain(). It still lacks\nthe actual uc-\u003efilter(...) call but othewrwise it is ready, just\nit pretends that -\u003efilter() always returns true.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "e591c8d78e49e6206935cf31c4d2b603bbb29166",
      "tree": "fd454634604829933828e06849550dfbcfc37542",
      "parents": [
        "9a98e03cc145c994da824dac7602334f50feb670"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sat Nov 24 17:29:40 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:03 2013 +0100"
      },
      "message": "uprobes: Introduce uprobe-\u003eregister_rwsem\n\nIntroduce uprobe-\u003eregister_rwsem. It is taken for writing around\n__uprobe_register/unregister.\n\nChange handler_chain() to use this sem rather than consumer_rwsem.\n\nThe main reason for this change is that we have the nasty problem\nwith mmap_sem/consumer_rwsem dependency. filter_chain() needs to\nprotect uprobe-\u003econsumers like handler_chain(), but they can not\nuse the same lock. filter_chain() can be called under -\u003emmap_sem\n(currently this is always true), but we want to allow -\u003ehandler()\nto play with the probed task\u0027s memory, and this needs -\u003emmap_sem.\n\nAlternatively we could use srcu, but synchronize_srcu() is very\nslow and -\u003eregister_rwsem allows us to do more. In particular, we\ncan teach handler_chain() to do remove_breakpoint() if this bp is\n\"nacked\" by all consumers, we know that we can\u0027t race with the\nnew consumer which does uprobe_register().\n\nSee also the next patches. uprobes_mutex[] is almost ready to die.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "9a98e03cc145c994da824dac7602334f50feb670",
      "tree": "66ab8762b473ea81531aa17395e9678beae22f61",
      "parents": [
        "04aab9b2006bbdeff78dc162f206fdfebeca97d9"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Nov 23 20:15:17 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:03 2013 +0100"
      },
      "message": "uprobes: _register() should always do register_for_each_vma(true)\n\nTo support the filtering uprobe_register() should do\nregister_for_each_vma(true) every time the new consumer comes,\nwe need to install the previously nacked breakpoints.\n\nNote:\n\t- uprobes_mutex[] should die, what it actually protects is\n\t  alloc_uprobe().\n\n\t- UPROBE_RUN_HANDLER should die too, obviously it can\u0027t work\n\t  unless uprobe has a single consumer. The consumer should\n\t  serialize with _register/_unregister itself. Or this flag\n\t  should live in uprobe_consumer-\u003estate.\n\n\t- Perhaps we can do some optimizations later. For example, if\n\t  filter_chain() never returns false uprobe can record this\n\t  fact and avoid the unnecessary register_for_each_vma().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "04aab9b2006bbdeff78dc162f206fdfebeca97d9",
      "tree": "380a170734c6d850077e56848df0528f410247be",
      "parents": [
        "63633cbf82840d972248f11d2122b261d0d4779a"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Nov 23 19:43:50 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:03 2013 +0100"
      },
      "message": "uprobes: _unregister() should always do register_for_each_vma(false)\n\nuprobe_unregister() removes the breakpoints only if the last consumer\ngoes away. To support the filtering it should do this every time, we\nwant to remove the breakpoints which nobody else want to keep.\n\nNote: given that filter_chain() is not actually implemented, this patch\nitself doesn\u0027t change the behaviour yet, register_for_each_vma(false)\nis a heavy \"nop\" unless there are no more consumers.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "63633cbf82840d972248f11d2122b261d0d4779a",
      "tree": "e596a5f686ed4ac79ab95455622648bc0321a406",
      "parents": [
        "fe20d71f25400cccc8bffef865f79250be7dbc81"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Nov 22 18:30:15 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:02 2013 +0100"
      },
      "message": "uprobes: Introduce filter_chain()\n\nAdd the new helper filter_chain(). Currently it is only placeholder,\nthe comment explains what is should do. We will change it later to\nconsult every consumer to decide whether we need to install the swbp.\nUntil then it works as if any consumer returns true, this matches the\ncurrent behavior.\n\nChange install_breakpoint() to call filter_chain() instead of checking\nuprobe-\u003econsumers !\u003d NULL. We obviously need this, and this equally\ncloses the race with _unregister().\n\nChange remove_breakpoint() to call this helper too. Currently this is\npointless because remove_breakpoint() is only called when the last\nconsumer goes away, but we will change this.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "fe20d71f25400cccc8bffef865f79250be7dbc81",
      "tree": "97b5f757780ebf67359867c9493c4860b0cb4477",
      "parents": [
        "f0744af7d0fde190674064c54e2ff60b34ac71fe"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Nov 21 17:32:30 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:02 2013 +0100"
      },
      "message": "uprobes: Kill uprobe_consumer-\u003efilter()\n\nuprobe_consumer-\u003efilter() is pointless in its current form, kill it.\n\nWe will add it back, but with the different signature/semantics. Perhaps\nwe will even re-introduce the callsite in handler_chain(), but not to\njust skip uc-\u003ehandler().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "f0744af7d0fde190674064c54e2ff60b34ac71fe",
      "tree": "1fbe365e02f6d11c1a8837689578ef9b0874f0fa",
      "parents": [
        "bbc33d05930f870ea049eae5ed980f8b827d0813"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Nov 21 18:01:43 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:47:01 2013 +0100"
      },
      "message": "uprobes: Kill the pointless inode/uc checks in register/unregister\n\nregister/unregister verifies that inode/uc !\u003d NULL. For what?\nThis really looks like \"hide the potential problem\", the caller\nshould pass the valid data.\n\nregister() also checks uc-\u003enext \u003d\u003d NULL, probably to prevent the\ndouble-register but the caller can do other stupid/wrong things.\nIf we do this check, then we should document that uc-\u003enext should\nbe cleared before register() and add BUG_ON().\n\nAlso add the small comment about the i_size_read() check.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "bbc33d05930f870ea049eae5ed980f8b827d0813",
      "tree": "d954de9e4f6319bb3774721698144f3639e95dbf",
      "parents": [
        "661e591525ffbb0439270bf2a4d165c04f87543d"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Nov 21 16:55:38 2012 +0100"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 08 17:46:59 2013 +0100"
      },
      "message": "uprobes: Move __set_bit(UPROBE_SKIP_SSTEP) into alloc_uprobe()\n\nCosmetic. __set_bit(UPROBE_SKIP_SSTEP) is the part of initialization,\nit is not clear why it is set in insert_uprobe().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Srikar Dronamraju \u003csrikar@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "63a3f603413ffe82ad775f2d62a5afff87fd94a0",
      "tree": "fc348b136c1e3e5bb78d931a5ca9156eaa3ebb4a",
      "parents": [
        "ffee0de411fd4f74f3b788892eeb075abbf26c52"
      ],
      "author": {
        "name": "H. Peter Anvin",
        "email": "hpa@linux.intel.com",
        "time": "Thu Feb 07 17:14:08 2013 -0800"
      },
      "committer": {
        "name": "H. Peter Anvin",
        "email": "hpa@linux.intel.com",
        "time": "Thu Feb 07 17:14:08 2013 -0800"
      },
      "message": "timeconst.pl: Eliminate Perl warning\n\ndefined(@array) is deprecated in Perl and gives off a warning.\nRestructure the code to remove that warning.\n\n[ hpa: it would be interesting to revert to the timeconst.bc script.\n  It appears that the failures reported by akpm during testing of\n  that script was due to a known broken version of make, not a problem\n  with bc.  The Makefile rules could probably be restructured to avoid\n  the make bug, or it is probably old enough that it doesn\u0027t matter. ]\n\nReported-by: Andi Kleen \u003cak@linux.intel.com\u003e\nSigned-off-by: H. Peter Anvin \u003chpa@linux.intel.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: \u003cstable@vger.kernel.org\u003e\n"
    },
    {
      "commit": "7a6b55e7108b3476d13ee9501ec69dbe1605d774",
      "tree": "9712b0a5f7c3b5d90f2625af369774cdb1334e6f",
      "parents": [
        "49271ca60645d64197b28c0835fed39f74b1a2d7"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Thu Nov 29 16:46:09 2012 +0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Thu Feb 07 15:19:36 2013 -0800"
      },
      "message": "srcu: use ACCESS_ONCE() to access sp-\u003ecompleted in srcu_read_lock()\n\nThe old SRCU implementation loads sp-\u003ecompleted within an\nRCU-sched section, courtesy of preempt_disable().  This was required\ndue to the use of synchronize_sched() in the old implemenation\u0027s\nsynchronize_srcu().  However, the new implementation does not rely\non synchronize_sched(), so it in turn does not require the load of\nsp-\u003ecompleted and the -\u003ec[] counter to be in a single preempt-disabled\nregion of code.  This commit therefore moves the sp-\u003ecompleted access\noutside of the preempt-disabled region and applies ACCESS_ONCE().\n\nThe resulting code is almost as the same as before, but it removes the\nnow-misleading rcu_dereference_index_check() call.\n\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "49271ca60645d64197b28c0835fed39f74b1a2d7",
      "tree": "361a1243a600d76ab94b44c7a9dd1d9dcc97c6b2",
      "parents": [
        "34a64b6bb64b5cf193932e2b4394c5284732e008"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Thu Nov 29 16:46:08 2012 +0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Thu Feb 07 15:17:45 2013 -0800"
      },
      "message": "srcu: Update synchronize_srcu_expedited()\u0027s comments\n\nBecause synchronize_srcu_expedited() no longer uses\nsynchronize_rcu_sched_expedited(), synchronize_srcu_expedited() no longer\nindirectly acquires any CPU-hotplug-related locks.  This commit therefore\nupdates the comments accordingly.\n\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "34a64b6bb64b5cf193932e2b4394c5284732e008",
      "tree": "9a83d6cb769c4c21364f0ba0161ebd76ed03b512",
      "parents": [
        "511a0868bed6694512348fc177cdfaf3fd97d0bb"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Thu Nov 29 16:46:07 2012 +0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Thu Feb 07 15:17:01 2013 -0800"
      },
      "message": "srcu: Update synchronize_srcu()\u0027s comments\n\nThe core of SRCU is changed, but synchronize_srcu()\u0027s comments describe\nthe old algorithm.  This commit therefore updates them to match the\nnew algorithm.\n\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "ab4d2986e44c589aa1b647d7da5e21c2707babea",
      "tree": "e5400a89ca0f137125be973016c6391a701a790c",
      "parents": [
        "6e6f1b307e23201fb3e7aaf16322e80355d2a3d5"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Thu Nov 29 16:46:04 2012 +0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Thu Feb 07 15:10:10 2013 -0800"
      },
      "message": "srcu: Simple cleanup for cleanup_srcu_struct()\n\nPack six lines of code into two lines.\n\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "6e6f1b307e23201fb3e7aaf16322e80355d2a3d5",
      "tree": "1664a448ebf4d45c0aadf6fe186644ee5d8ebdce",
      "parents": [
        "5a41344a3d83ef2c08e40bfce1efa5795def9b82"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Thu Nov 29 16:46:03 2012 +0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Thu Feb 07 15:08:19 2013 -0800"
      },
      "message": "srcu: Add might_sleep() annotation to synchronize_srcu()\n\nAlthough synchronize_srcu() can sleep, it will not sleep if the fast\npath succeeds, which means that illegal use of synchronize_rcu()\nmight go unnoticed.  This commit therefore adds might_sleep(), which\nunconditionally catches illegal use of synchronize_rcu() from atomic\ncontext.\n\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "5a41344a3d83ef2c08e40bfce1efa5795def9b82",
      "tree": "123d0fa065a35bb7de384edb5e753ec28beee7b0",
      "parents": [
        "0351096eb0584ba927a00a37e18be7af135250c3"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Thu Nov 29 16:46:02 2012 +0800"
      },
      "committer": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Thu Feb 07 15:06:25 2013 -0800"
      },
      "message": "srcu: Simplify __srcu_read_unlock() via this_cpu_dec()\n\nThis commit replaces disabling of preemption and decrement of a per-CPU\nvariable with this_cpu_dec(), which avoids preemption disabling on x86\nand shortens the code on all platforms.\n\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\n"
    },
    {
      "commit": "8594fade39d3ad02ef856b8c53b5d7cc538a55f5",
      "tree": "7f14598186e3fbc5feb91b1c25905b51d106a104",
      "parents": [
        "54d5b7d079dffa74597715a892473b474babd5b5"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Thu Feb 07 13:14:20 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 07 13:17:51 2013 -0800"
      },
      "message": "workqueue: pick cwq instead of pool in __queue_work()\n\nCurrently, __queue_work() chooses the pool to queue a work item to and\nthen determines cwq from the target wq and the chosen pool.  This is a\nbit backwards in that we can determine cwq first and simply use\ncwq-\u003epool.  This way, we can skip get_std_worker_pool() in queueing\npath which will be a hurdle when implementing custom worker pools.\n\nUpdate __queue_work() such that it chooses the target cwq and then use\ncwq-\u003epool instead of the other way around.  While at it, add missing\n{} in an if statement.\n\nThis patch doesn\u0027t introduce any functional changes.\n\ntj: The original patch had two get_cwq() calls - the first to\n    determine the pool by doing get_cwq(cpu, wq)-\u003epool and the second\n    to determine the matching cwq from get_cwq(pool-\u003ecpu, wq).\n    Updated the function such that it chooses cwq instead of pool and\n    removed the second call.  Rewrote the description.\n\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "54d5b7d079dffa74597715a892473b474babd5b5",
      "tree": "33aa61fc2a98acff099a2393665318328448e137",
      "parents": [
        "e19e397a85f33100bfa4210e256bec82fe22e167"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Thu Feb 07 13:14:20 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 07 13:14:20 2013 -0800"
      },
      "message": "workqueue: make get_work_pool_id() cheaper\n\nget_work_pool_id() currently first obtains pool using get_work_pool()\nand then return pool-\u003eid.  For an off-queue work item, this involves\nobtaining pool ID from worker-\u003edata, performing idr_find() to find the\nmatching pool and then returning its pool-\u003eid which of course is the\nsame as the one which went into idr_find().\n\nJust open code WORK_STRUCT_CWQ case and directly return pool ID from\nwork-\u003edata.\n\ntj: The original patch dropped on-queue work item handling and renamed\n    the function to offq_work_pool_id().  There isn\u0027t much benefit in\n    doing so.  Handling it only requires a single if() and we need at\n    least BUG_ON(), which is also a branch, even if we drop on-queue\n    handling.  Open code WORK_STRUCT_CWQ case and keep the function in\n    line with get_work_pool().  Rewrote the description.\n\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "e19e397a85f33100bfa4210e256bec82fe22e167",
      "tree": "18b9b0f883561584027a0085586d4f31abcba213",
      "parents": [
        "1606283622689bdc460052b4a1281c36de13fe49"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jan 24 11:39:44 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Feb 07 13:14:20 2013 -0800"
      },
      "message": "workqueue: move nr_running into worker_pool\n\nAs nr_running is likely to be accessed from other CPUs during\ntry_to_wake_up(), it was kept outside worker_pool; however, while less\nfrequent, other fields in worker_pool are accessed from other CPUs\nfor, e.g., non-reentrancy check.  Also, with recent pool related\nchanges, accessing nr_running matching the worker_pool isn\u0027t as simple\nas it used to be.\n\nMove nr_running inside worker_pool.  Keep it aligned to cacheline and\ndefine CPU pools using DEFINE_PER_CPU_SHARED_ALIGNED().  This should\ngive at least the same cacheline behavior.\n\nget_pool_nr_running() is replaced with direct pool-\u003enr_running\naccesses.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Joonsoo Kim \u003cjs1304@gmail.com\u003e\n"
    },
    {
      "commit": "8bd75c77b7c6a3954140dd2e20346aef3efe4a35",
      "tree": "10e0d451a58aeb6c8f48b871a848276bf3a8a359",
      "parents": [
        "ce0dbbbb30aee6a835511d5be446462388ba9eee"
      ],
      "author": {
        "name": "Clark Williams",
        "email": "williams@redhat.com",
        "time": "Thu Feb 07 09:47:07 2013 -0600"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@kernel.org",
        "time": "Thu Feb 07 20:51:08 2013 +0100"
      },
      "message": "sched/rt: Move rt specific bits into new header file\n\nMove rt scheduler definitions out of include/linux/sched.h into\nnew file include/linux/sched/rt.h\n\nSigned-off-by: Clark Williams \u003cwilliams@redhat.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nLink: http://lkml.kernel.org/r/20130207094707.7b9f825f@riff.lan\nSigned-off-by: Ingo Molnar \u003cmingo@kernel.org\u003e\n"
    },
    {
      "commit": "ce0dbbbb30aee6a835511d5be446462388ba9eee",
      "tree": "c3d4d6f64a0fe7eec9283f4413d111a8d37d7053",
      "parents": [
        "cf4aebc292fac7f34f8345664320e9d4a42ca76c"
      ],
      "author": {
        "name": "Clark Williams",
        "email": "williams@redhat.com",
        "time": "Thu Feb 07 09:47:04 2013 -0600"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@kernel.org",
        "time": "Thu Feb 07 20:51:07 2013 +0100"
      },
      "message": "sched/rt: Add a tuning knob to allow changing SCHED_RR timeslice\n\nAdd a /proc/sys/kernel scheduler knob named\nsched_rr_timeslice_ms that allows global changing of the\nSCHED_RR timeslice value. User visable value is in milliseconds\nbut is stored as jiffies.  Setting to 0 (zero) resets to the\ndefault (currently 100ms).\n\nSigned-off-by: Clark Williams \u003cwilliams@redhat.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nLink: http://lkml.kernel.org/r/20130207094704.13751796@riff.lan\nSigned-off-by: Ingo Molnar \u003cmingo@kernel.org\u003e\n"
    },
    {
      "commit": "cf4aebc292fac7f34f8345664320e9d4a42ca76c",
      "tree": "6eceb9bb2d8382c4499366a8fee060688aad6107",
      "parents": [
        "b2c77a57e4a0a7877e357dead7ee8acc19944f3e"
      ],
      "author": {
        "name": "Clark Williams",
        "email": "williams@redhat.com",
        "time": "Thu Feb 07 09:46:59 2013 -0600"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@kernel.org",
        "time": "Thu Feb 07 20:50:54 2013 +0100"
      },
      "message": "sched: Move sched.h sysctl bits into separate header\n\nMove the sysctl-related bits from include/linux/sched.h into\na new file: include/linux/sched/sysctl.h. Then update source\nfiles requiring access to those bits by including the new\nheader file.\n\nSigned-off-by: Clark Williams \u003cwilliams@redhat.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nLink: http://lkml.kernel.org/r/20130207094659.06dced96@riff.lan\nSigned-off-by: Ingo Molnar \u003cmingo@kernel.org\u003e\n"
    },
    {
      "commit": "1606283622689bdc460052b4a1281c36de13fe49",
      "tree": "7e23128500a97cd006a9580e96583e681e0084a1",
      "parents": [
        "0b3dae68ac199fac224fea9a31907b44f0d257b3"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 06 18:04:53 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 06 18:04:53 2013 -0800"
      },
      "message": "workqueue: cosmetic update in try_to_grab_pending()\n\nWith the recent is-work-queued-here test simplification, the nested\nif() in try_to_grab_pending() can be collapsed.  Collapse it.\n\nThis patch is purely cosmetic.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\n"
    },
    {
      "commit": "0b3dae68ac199fac224fea9a31907b44f0d257b3",
      "tree": "909b0b1d33123c9e8cbd0117e5f42df12e3becde",
      "parents": [
        "4468a00fd9a274fe1b30c886370d662e4a439efb"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Wed Feb 06 18:04:53 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 06 18:04:53 2013 -0800"
      },
      "message": "workqueue: simplify is-work-item-queued-here test\n\nCurrently, determining whether a work item is queued on a locked pool\ninvolves somewhat convoluted memory barrier dancing.  It goes like the\nfollowing.\n\n* When a work item is queued on a pool, work-\u003edata is updated before\n  work-\u003eentry is linked to the pending list with a wmb() inbetween.\n\n* When trying to determine whether a work item is currently queued on\n  a pool pointed to by work-\u003edata, it locks the pool and looks at\n  work-\u003eentry.  If work-\u003eentry is linked, we then do rmb() and then\n  check whether work-\u003edata points to the current pool.\n\nThis works because, work-\u003edata can only point to a pool if it\ncurrently is or were on the pool and,\n\n* If it currently is on the pool, the tests would obviously succeed.\n\n* It it left the pool, its work-\u003eentry was cleared under pool-\u003elock,\n  so if we\u0027re seeing non-empty work-\u003eentry, it has to be from the work\n  item being linked on another pool.  Because work-\u003edata is updated\n  before work-\u003eentry is linked with wmb() inbetween, work-\u003edata update\n  from another pool is guaranteed to be visible if we do rmb() after\n  seeing non-empty work-\u003eentry.  So, we either see empty work-\u003eentry\n  or we see updated work-\u003edata pointin to another pool.\n\nWhile this works, it\u0027s convoluted, to put it mildly.  With recent\nupdates, it\u0027s now guaranteed that work-\u003edata points to cwq only while\nthe work item is queued and that updating work-\u003edata to point to cwq\nor back to pool is done under pool-\u003elock, so we can simply test\nwhether work-\u003edata points to cwq which is associated with the\ncurrently locked pool instead of the convoluted memory barrier\ndancing.\n\nThis patch replaces the memory barrier based \"are you still here,\nreally?\" test with much simpler \"does work-\u003edata points to me?\" test -\nif work-\u003edata points to a cwq which is associated with the currently\nlocked pool, the work item is guaranteed to be queued on the pool as\nwork-\u003edata can start and stop pointing to such cwq only under\npool-\u003elock and the start and stop coincide with queue and dequeue.\n\ntj: Rewrote the comments and description.\n\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "4468a00fd9a274fe1b30c886370d662e4a439efb",
      "tree": "6ead9c97eea5cdb16cfd7fca3b80d1b184949e3e",
      "parents": [
        "60c057bca22285efefbba033624763a778f243bf"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Wed Feb 06 18:04:53 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 06 18:04:53 2013 -0800"
      },
      "message": "workqueue: make work-\u003edata point to pool after try_to_grab_pending()\n\nWe plan to use work-\u003edata pointing to cwq as the synchronization\ninvariant when determining whether a given work item is on a locked\npool or not, which requires work-\u003edata pointing to cwq only while the\nwork item is queued on the associated pool.\n\nWith delayed_work updated not to overload work-\u003edata for target\nworkqueue recording, the only case where we still have off-queue\nwork-\u003edata pointing to cwq is try_to_grab_pending() which doesn\u0027t\nupdate work-\u003edata after stealing a queued work item.  There\u0027s no\nreason for try_to_grab_pending() to not update work-\u003edata to point to\nthe pool instead of cwq, like the normal execution does.\n\nThis patch adds set_work_pool_and_keep_pending() which makes\nwork-\u003edata point to pool instead of cwq but keeps the pending bit\nunlike set_work_pool_and_clear_pending() (surprise!).\n\nAfter this patch, it\u0027s guaranteed that only queued work items point to\ncwqs.\n\nThis patch doesn\u0027t introduce any visible behavior change.\n\ntj: Renamed the new helper function to match\n    set_work_pool_and_clear_pending() and rewrote the description.\n\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "60c057bca22285efefbba033624763a778f243bf",
      "tree": "8e469c390b5b60ad6b4d7c94bc07522f857032bc",
      "parents": [
        "038366c5cf23ae737b9f72169dd8ade2d105755b"
      ],
      "author": {
        "name": "Lai Jiangshan",
        "email": "laijs@cn.fujitsu.com",
        "time": "Wed Feb 06 18:04:53 2013 -0800"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Feb 06 18:04:53 2013 -0800"
      },
      "message": "workqueue: add delayed_work-\u003ewq to simplify reentrancy handling\n\nTo avoid executing the same work item from multiple CPUs concurrently,\na work_struct records the last pool it was on in its -\u003edata so that,\non the next queueing, the pool can be queried to determine whether the\nwork item is still executing or not.\n\nA delayed_work goes through timer before actually being queued on the\ntarget workqueue and the timer needs to know the target workqueue and\nCPU.  This is currently achieved by modifying delayed_work-\u003ework.data\nsuch that it points to the cwq which points to the target workqueue\nand the last CPU the work item was on.  __queue_delayed_work()\nextracts the last CPU from delayed_work-\u003ework.data and then combines\nit with the target workqueue to create new work.data.\n\nThe only thing this rather ugly hack achieves is encoding the target\nworkqueue into delayed_work-\u003ework.data without using a separate field,\nwhich could be a trade off one can make; unfortunately, this entangles\nwork-\u003edata management between regular workqueue and delayed_work code\nby setting cwq pointer before the work item is actually queued and\nbecomes a hindrance for further improvements of work-\u003edata handling.\n\nThis can be easily made sane by adding a target workqueue field to\ndelayed_work.  While delayed_work is used widely in the kernel and\nthis does make it a bit larger (\u003c5%), I think this is the right\ntrade-off especially given the prospect of much saner handling of\nwork-\u003edata which currently involves quite tricky memory barrier\ndancing, and don\u0027t expect to see any measureable effect.\n\nAdd delayed_work-\u003ewq and drop the delayed_work-\u003ework.data overloading.\n\ntj: Rewrote the description.\n\nSigned-off-by: Lai Jiangshan \u003claijs@cn.fujitsu.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    }
  ],
  "next": "038366c5cf23ae737b9f72169dd8ade2d105755b"
}
