)]}'
{
  "log": [
    {
      "commit": "c9f01245b6a7d77d17deaa71af10f6aca14fa24e",
      "tree": "13ffde591a5bcefba39cb6393f09b27f1ebc1a30",
      "parents": [
        "7b0d44fa49b1dcfdcf4897f12ddd12ddeab1a9d7"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Mon Oct 31 17:07:15 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Oct 31 17:30:45 2011 -0700"
      },
      "message": "oom: remove oom_disable_count\n\nThis removes mm-\u003eoom_disable_count entirely since it\u0027s unnecessary and\ncurrently buggy.  The counter was intended to be per-process but it\u0027s\ncurrently decremented in the exit path for each thread that exits, causing\nit to underflow.\n\nThe count was originally intended to prevent oom killing threads that\nshare memory with threads that cannot be killed since it doesn\u0027t lead to\nfuture memory freeing.  The counter could be fixed to represent all\nthreads sharing the same mm, but it\u0027s better to remove the count since:\n\n - it is possible that the OOM_DISABLE thread sharing memory with the\n   victim is waiting on that thread to exit and will actually cause\n   future memory freeing, and\n\n - there is no guarantee that a thread is disabled from oom killing just\n   because another thread sharing its mm is oom disabled.\n\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nReported-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Ying Han \u003cyinghan@google.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b34a6b1da371ed8af1221459a18c67970f7e3d53",
      "tree": "5addc850de13623b172395b9d0d7d670930fa6b3",
      "parents": [
        "d40dcdb0172a1ba853464983a059fb45e0aaf61a"
      ],
      "author": {
        "name": "Vasiliy Kulikov",
        "email": "segoon@openwall.com",
        "time": "Tue Jul 26 16:08:48 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 26 16:49:44 2011 -0700"
      },
      "message": "ipc: introduce shm_rmid_forced sysctl\n\nAdd support for the shm_rmid_forced sysctl.  If set to 1, all shared\nmemory objects in current ipc namespace will be automatically forced to\nuse IPC_RMID.\n\nThe POSIX way of handling shmem allows one to create shm objects and\ncall shmdt(), leaving shm object associated with no process, thus\nconsuming memory not counted via rlimits.\n\nWith shm_rmid_forced\u003d1 the shared memory object is counted at least for\none process, so OOM killer may effectively kill the fat process holding\nthe shared memory.\n\nIt obviously breaks POSIX - some programs relying on the feature would\nstop working.  So set shm_rmid_forced\u003d1 only if you\u0027re sure nobody uses\n\"orphaned\" memory.  Use shm_rmid_forced\u003d0 by default for compatability\nreasons.\n\nThe feature was previously impemented in -ow as a configure option.\n\n[akpm@linux-foundation.org: fix documentation, per Randy]\n[akpm@linux-foundation.org: fix warning]\n[akpm@linux-foundation.org: readability/conventionality tweaks]\n[akpm@linux-foundation.org: fix shm_rmid_forced/shm_forced_rmid confusion, use standard comment layout]\nSigned-off-by: Vasiliy Kulikov \u003csegoon@openwall.com\u003e\nCc: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: \"Serge E. Hallyn\" \u003cserge.hallyn@canonical.com\u003e\nCc: Daniel Lezcano \u003cdaniel.lezcano@free.fr\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Alan Cox \u003calan@lxorguk.ukuu.org.uk\u003e\nCc: Solar Designer \u003csolar@openwall.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d3ec4844d449cf7af9e749f73ba2052fb7b72fc2",
      "tree": "c515913e85f7e50878c83da2a88bc5a7269d087c",
      "parents": [
        "0003230e8200699860f0b10af524dc47bf8aecad",
        "df2e301fee3c2c2a87592151397ad7699bb14c37"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 13:56:39 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 13:56:39 2011 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (43 commits)\n  fs: Merge split strings\n  treewide: fix potentially dangerous trailing \u0027;\u0027 in #defined values/expressions\n  uwb: Fix misspelling of neighbourhood in comment\n  net, netfilter: Remove redundant goto in ebt_ulog_packet\n  trivial: don\u0027t touch files that are removed in the staging tree\n  lib/vsprintf: replace link to Draft by final RFC number\n  doc: Kconfig: `to be\u0027 -\u003e `be\u0027\n  doc: Kconfig: Typo: square -\u003e squared\n  doc: Konfig: Documentation/power/{pm \u003d\u003e apm-acpi}.txt\n  drivers/net: static should be at beginning of declaration\n  drivers/media: static should be at beginning of declaration\n  drivers/i2c: static should be at beginning of declaration\n  XTENSA: static should be at beginning of declaration\n  SH: static should be at beginning of declaration\n  MIPS: static should be at beginning of declaration\n  ARM: static should be at beginning of declaration\n  rcu: treewide: Do not use rcu_read_lock_held when calling rcu_dereference_check\n  Update my e-mail address\n  PCIe ASPM: forcedly -\u003e forcibly\n  gma500: push through device driver tree\n  ...\n\nFix up trivial conflicts:\n - arch/arm/mach-ep93xx/dma-m2p.c (deleted)\n - drivers/gpio/gpio-ep93xx.c (renamed and context nearby)\n - drivers/net/r8169.c (just context changes)\n"
    },
    {
      "commit": "096a705bbc080a4041636d07514560da8d78acbe",
      "tree": "38c3c01225709ffa53419083ea6332f8a72610de",
      "parents": [
        "fea80311a939a746533a6d7e7c3183729d6a3faf",
        "5757a6d76cdf6dda2a492c09b985c015e86779b1"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 10:33:36 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jul 25 10:33:36 2011 -0700"
      },
      "message": "Merge branch \u0027for-3.1/core\u0027 of git://git.kernel.dk/linux-block\n\n* \u0027for-3.1/core\u0027 of git://git.kernel.dk/linux-block: (24 commits)\n  block: strict rq_affinity\n  backing-dev: use synchronize_rcu_expedited instead of synchronize_rcu\n  block: fix patch import error in max_discard_sectors check\n  block: reorder request_queue to remove 64 bit alignment padding\n  CFQ: add think time check for group\n  CFQ: add think time check for service tree\n  CFQ: move think time check variables to a separate struct\n  fixlet: Remove fs_excl from struct task.\n  cfq: Remove special treatment for metadata rqs.\n  block: document blk_plug list access\n  block: avoid building too big plug list\n  compat_ioctl: fix make headers_check regression\n  block: eliminate potential for infinite loop in blkdev_issue_discard\n  compat_ioctl: fix warning caused by qemu\n  block: flush MEDIA_CHANGE from drivers on close(2)\n  blk-throttle: Make total_nr_queued unsigned\n  block: Add __attribute__((format(printf...) and fix fallout\n  fs/partitions/check.c: make local symbols static\n  block:remove some spare spaces in genhd.c\n  block:fix the comment error in blkdev.h\n  ...\n"
    },
    {
      "commit": "8209f53d79444747782a28520187abaf689761f2",
      "tree": "726270ea29e037f026d77a99787b9d844531ac42",
      "parents": [
        "22a3b9771117d566def0150ea787fcc95f16e724",
        "eac1b5e57d7abc836e78fd3fbcf77dbeed01edc9"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 15:06:50 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jul 22 15:06:50 2011 -0700"
      },
      "message": "Merge branch \u0027ptrace\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/oleg/misc\n\n* \u0027ptrace\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/oleg/misc: (39 commits)\n  ptrace: do_wait(traced_leader_killed_by_mt_exec) can block forever\n  ptrace: fix ptrace_signal() \u0026\u0026 STOP_DEQUEUED interaction\n  connector: add an event for monitoring process tracers\n  ptrace: dont send SIGSTOP on auto-attach if PT_SEIZED\n  ptrace: mv send-SIGSTOP from do_fork() to ptrace_init_task()\n  ptrace_init_task: initialize child-\u003ejobctl explicitly\n  has_stopped_jobs: s/task_is_stopped/SIGNAL_STOP_STOPPED/\n  ptrace: make former thread ID available via PTRACE_GETEVENTMSG after PTRACE_EVENT_EXEC stop\n  ptrace: wait_consider_task: s/same_thread_group/ptrace_reparented/\n  ptrace: kill real_parent_is_ptracer() in in favor of ptrace_reparented()\n  ptrace: ptrace_reparented() should check same_thread_group()\n  redefine thread_group_leader() as exit_signal \u003e\u003d 0\n  do not change dead_task-\u003eexit_signal\n  kill task_detached()\n  reparent_leader: check EXIT_DEAD instead of task_detached()\n  make do_notify_parent() __must_check, update the callers\n  __ptrace_detach: avoid task_detached(), check do_notify_parent()\n  kill tracehook_notify_death()\n  make do_notify_parent() return bool\n  ptrace: s/tracehook_tracer_task()/ptrace_parent()/\n  ...\n"
    },
    {
      "commit": "961c4675c75112717705fa5c0c53cb9664051479",
      "tree": "d424199346b5dc1c5d27fe920a66a6ea11989d89",
      "parents": [
        "bb188d7e64deb0e9cf13a99f44ae0065de5352d6"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Jul 07 21:33:54 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Sun Jul 17 20:23:50 2011 +0200"
      },
      "message": "has_stopped_jobs: s/task_is_stopped/SIGNAL_STOP_STOPPED/\n\nhas_stopped_jobs() naively checks task_is_stopped(group_leader). This\nwas always wrong even without ptrace, group_leader can be dead. And\ngiven that ptrace can change the state to TRACED this is wrong even\nin the single-threaded case.\n\nChange the code to check SIGNAL_STOP_STOPPED and simplify the code,\nretval + break/continue doesn\u0027t make this trivial code more readable.\n\nWe could probably add the usual \"|| signal-\u003egroup_stop_count\" check\nbut I don\u0027t think this makes sense, the task can start the group-stop\nright after the check anyway.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "4aede84b33d6beb401136a3deca0651ae07c5e99",
      "tree": "831266dbb15227584da5011ae4bb1e5038a69677",
      "parents": [
        "a07405b7802691d29ab3b23bdc76ee6d006aad0b"
      ],
      "author": {
        "name": "Justin TerAvest",
        "email": "teravest@google.com",
        "time": "Tue Jul 12 08:31:45 2011 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Jul 12 08:35:10 2011 +0200"
      },
      "message": "fixlet: Remove fs_excl from struct task.\n\nfs_excl is a poor man\u0027s priority inheritance for filesystems to hint to\nthe block layer that an operation is important. It was never clearly\nspecified, not widely adopted, and will not prevent starvation in many\ncases (like across cgroups).\n\nfs_excl was introduced with the time sliced CFQ IO scheduler, to\nindicate when a process held FS exclusive resources and thus needed\na boost.\n\nIt doesn\u0027t cover all file systems, and it was never fully complete.\nLets kill it.\n\nSigned-off-by: Justin TerAvest \u003cteravest@google.com\u003e\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "b7e9c223be8ce335e30f2cf6ba588e6a4092275c",
      "tree": "2d1e3b75606abc18df7ad65e51ac3f90cd68b38d",
      "parents": [
        "c172d82500a6cf3c32d1e650722a1055d72ce858",
        "e3bbfa78bab125f58b831b5f7f45b5a305091d72"
      ],
      "author": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Jul 11 14:15:48 2011 +0200"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Jul 11 14:15:55 2011 +0200"
      },
      "message": "Merge branch \u0027master\u0027 into for-next\n\nSync with Linus\u0027 tree to be able to apply pending patches that\nare based on newer code already present upstream.\n"
    },
    {
      "commit": "d8bf4ca9ca9576548628344c9725edd3786e90b1",
      "tree": "df338f50a5af6bc3651bd863b79fa91e6b1e9e20",
      "parents": [
        "eb032b9837a958e21ca000358a5bde5e17192ddb"
      ],
      "author": {
        "name": "Michal Hocko",
        "email": "mhocko@suse.cz",
        "time": "Fri Jul 08 14:39:41 2011 +0200"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Fri Jul 08 22:21:58 2011 +0200"
      },
      "message": "rcu: treewide: Do not use rcu_read_lock_held when calling rcu_dereference_check\n\nSince ca5ecddf (rcu: define __rcu address space modifier for sparse)\nrcu_dereference_check use rcu_read_lock_held as a part of condition\nautomatically so callers do not have to do that as well.\n\nSigned-off-by: Michal Hocko \u003cmhocko@suse.cz\u003e\nAcked-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "479bf98c1c29b40d86e40a4e6e4944c2f03d9493",
      "tree": "259bda55b4e49d764e8768e5149f755c8897ab5c",
      "parents": [
        "bb3696da89743d580f869142d0a6e6ba9b7fe89a"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Jun 24 17:34:39 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Jun 27 20:30:11 2011 +0200"
      },
      "message": "ptrace: wait_consider_task: s/same_thread_group/ptrace_reparented/\n\nwait_consider_task() checks same_thread_group(parent, real_parent),\nthis is the open-coded ptrace_reparented().\n\n__ptrace_detach() remains the only function which has to check this by\nhand, although we could reorganize the code to delay __ptrace_unlink.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "e550f14dc6322e794d4e70825f63c9c99177ae8b",
      "tree": "64f918a0d70f82842211a3c0d54ca658877b5b5d",
      "parents": [
        "0976a03e5ce8ec346e985f21046d7a75bb7fdffd"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 22 23:09:54 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Jun 27 20:30:09 2011 +0200"
      },
      "message": "kill task_detached()\n\nUpadate the last user of task_detached(), wait_task_zombie(), to\nuse thread_group_leader() and kill task_detached().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "0976a03e5ce8ec346e985f21046d7a75bb7fdffd",
      "tree": "347ab2fa51689226d734b288f330b5ad16997d8e",
      "parents": [
        "8677347378044ab564470bced2275520efb3670d"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 22 23:09:39 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Jun 27 20:30:09 2011 +0200"
      },
      "message": "reparent_leader: check EXIT_DEAD instead of task_detached()\n\nChange reparent_leader() to check -\u003eexit_state instead of -\u003eexit_signal,\nthis matches the similar EXIT_DEAD check in wait_consider_task() and\nallows us to cleanup the do_notify_parent/task_detached logic.\n\ntask_detached() was really needed during reparenting before 9cd80bbb\n\"do_wait() optimization: do not place sub-threads on -\u003echildren list\"\nto filter out the sub-threads. After this change task_detached(p) can\nonly be true if p is the dead group_leader and its parent ignores\nSIGCHLD, in this case the caller of do_notify_parent() is going to\nreap this task and it should set EXIT_DEAD.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "8677347378044ab564470bced2275520efb3670d",
      "tree": "61baa72f24bb12eadd6956fb0abeb7eabda46b88",
      "parents": [
        "9843a1e977977986d0a4c1000f2229b032572534"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 22 23:09:09 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Jun 27 20:30:09 2011 +0200"
      },
      "message": "make do_notify_parent() __must_check, update the callers\n\nChange other callers of do_notify_parent() to check the value it\nreturns, this makes the subsequent task_detached() unnecessary.\nMark do_notify_parent() as __must_check.\n\nUse thread_group_leader() instead of !task_detached() to check\nif we need to notify the real parent in wait_task_zombie().\n\nRemove the stale comment in release_task(). \"just for sanity\" is\nno longer true, we have to set EXIT_DEAD to avoid the races with\ndo_wait().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "45cdf5cc0703c537194588c63d53bad1f2539d36",
      "tree": "579573d2cbe054d767a9f6b575b88836586fb7ce",
      "parents": [
        "53c8f9f199b239668e6b1a907735ee323a0d1ccd"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Jun 23 19:06:50 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Jun 27 20:30:08 2011 +0200"
      },
      "message": "kill tracehook_notify_death()\n\nKill tracehook_notify_death(), reimplement the logic in its caller,\nexit_notify().\n\nAlso, change the exec_id\u0027s check to use thread_group_leader() instead\nof task_detached(), this is more clear. This logic only applies to\nthe exiting leader, a sub-thread must never change its exit_signal.\n\nNote: when the traced group leader exits the exit_signal-or-SIGCHLD\nlogic looks really strange:\n\n\t- we notify the tracer even if !thread_group_empty() but\n\t   do_wait(WEXITED) can\u0027t work until all threads exit\n\n\t- if the tracer is real_parent, it is not clear why can\u0027t\n\t  we use -\u003eexit_signal event if !thread_group_empty()\n\n-v2: do not try to fix the 2nd oddity to avoid the subtle behavior\n     change mixed with reorganization, suggested by Tejun.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "53c8f9f199b239668e6b1a907735ee323a0d1ccd",
      "tree": "785afb9c72a2df27cd6802cf311df18711c59b76",
      "parents": [
        "06d984737bac0545fe20bb5447ee488b95adb531"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 22 23:08:18 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Jun 27 20:30:08 2011 +0200"
      },
      "message": "make do_notify_parent() return bool\n\n- change do_notify_parent() to return a boolean, true if the task should\n  be reaped because its parent ignores SIGCHLD.\n\n- update the only caller which checks the returned value, exit_notify().\n\nThis temporary uglifies exit_notify() even more, will be cleanuped by\nthe next change.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "a288eecce5253cc1565d400a52b9b476a157e040",
      "tree": "a933dd8c9791be83b7a67a33502c79e7b441960e",
      "parents": [
        "f3c04b934d429b1ace21866f011b66de328c0dc9"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jun 17 16:50:37 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 22 19:26:28 2011 +0200"
      },
      "message": "ptrace: kill trivial tracehooks\n\nAt this point, tracehooks aren\u0027t useful to mainline kernel and mostly\njust add an extra layer of obfuscation.  Although they have comments,\nwithout actual in-kernel users, it is difficult to tell what are their\nassumptions and they\u0027re actually trying to achieve.  To mainline\nkernel, they just aren\u0027t worth keeping around.\n\nThis patch kills the following trivial tracehooks.\n\n* Ones testing whether task is ptraced.  Replace with -\u003eptrace test.\n\n\ttracehook_expect_breakpoints()\n\ttracehook_consider_ignored_signal()\n\ttracehook_consider_fatal_signal()\n\n* ptrace_event() wrappers.  Call directly.\n\n\ttracehook_report_exec()\n\ttracehook_report_exit()\n\ttracehook_report_vfork_done()\n\n* ptrace_release_task() wrapper.  Call directly.\n\n\ttracehook_finish_release_task()\n\n* noop\n\n\ttracehook_prepare_release_task()\n\ttracehook_report_death()\n\nThis doesn\u0027t introduce any behavior change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "d21142ece414ce1088cfcae760689aa60d6fee80",
      "tree": "9f97b4518cd06fe695476fc6cc4ff9ed8d5bdd58",
      "parents": [
        "544b2c91a9f14f9565af1972203438b7f49afd48"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Jun 17 16:50:34 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 22 19:26:27 2011 +0200"
      },
      "message": "ptrace: kill task_ptrace()\n\ntask_ptrace(task) simply dereferences task-\u003eptrace and isn\u0027t even used\nconsistently only adding confusion.  Kill it and directly access\n-\u003eptrace instead.\n\nThis doesn\u0027t introduce any behavior change.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "544b2c91a9f14f9565af1972203438b7f49afd48",
      "tree": "38615eeed1e50580a2341b5a9d15c98793d33c2d",
      "parents": [
        "fb1d910c178ba0c5bc32d3e5a9e82e05b7aad3cd"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Jun 14 11:20:18 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Jun 16 21:41:54 2011 +0200"
      },
      "message": "ptrace: implement PTRACE_LISTEN\n\nThe previous patch implemented async notification for ptrace but it\nonly worked while trace is running.  This patch introduces\nPTRACE_LISTEN which is suggested by Oleg Nestrov.\n\nIt\u0027s allowed iff tracee is in STOP trap and puts tracee into\nquasi-running state - tracee never really runs but wait(2) and\nptrace(2) consider it to be running.  While ptracer is listening,\ntracee is allowed to re-enter STOP to notify an async event.\nListening state is cleared on the first notification.  Ptracer can\nalso clear it by issuing INTERRUPT - tracee will re-trap into STOP\nwith listening state cleared.\n\nThis allows ptracer to monitor group stop state without running tracee\n- use INTERRUPT to put tracee into STOP trap, issue LISTEN and then\nwait(2) to wait for the next group stop event.  When it happens,\nPTRACE_GETSIGINFO provides information to determine the current state.\n\nTest program follows.\n\n  #define PTRACE_SEIZE\t\t0x4206\n  #define PTRACE_INTERRUPT\t0x4207\n  #define PTRACE_LISTEN\t\t0x4208\n\n  #define PTRACE_SEIZE_DEVEL\t0x80000000\n\n  static const struct timespec ts1s \u003d { .tv_sec \u003d 1 };\n\n  int main(int argc, char **argv)\n  {\n\t  pid_t tracee, tracer;\n\t  int i;\n\n\t  tracee \u003d fork();\n\t  if (!tracee)\n\t\t  while (1)\n\t\t\t  pause();\n\n\t  tracer \u003d fork();\n\t  if (!tracer) {\n\t\t  siginfo_t si;\n\n\t\t  ptrace(PTRACE_SEIZE, tracee, NULL,\n\t\t\t (void *)(unsigned long)PTRACE_SEIZE_DEVEL);\n\t\t  ptrace(PTRACE_INTERRUPT, tracee, NULL, NULL);\n\t  repeat:\n\t\t  waitid(P_PID, tracee, NULL, WSTOPPED);\n\n\t\t  ptrace(PTRACE_GETSIGINFO, tracee, NULL, \u0026si);\n\t\t  if (!si.si_code) {\n\t\t\t  printf(\"tracer: SIG %d\\n\", si.si_signo);\n\t\t\t  ptrace(PTRACE_CONT, tracee, NULL,\n\t\t\t\t (void *)(unsigned long)si.si_signo);\n\t\t\t  goto repeat;\n\t\t  }\n\t\t  printf(\"tracer: stopped\u003d%d signo\u003d%d\\n\",\n\t\t\t si.si_signo !\u003d SIGTRAP, si.si_signo);\n\t\t  if (si.si_signo !\u003d SIGTRAP)\n\t\t\t  ptrace(PTRACE_LISTEN, tracee, NULL, NULL);\n\t\t  else\n\t\t\t  ptrace(PTRACE_CONT, tracee, NULL, NULL);\n\t\t  goto repeat;\n\t  }\n\n\t  for (i \u003d 0; i \u003c 3; i++) {\n\t\t  nanosleep(\u0026ts1s, NULL);\n\t\t  printf(\"mother: SIGSTOP\\n\");\n\t\t  kill(tracee, SIGSTOP);\n\t\t  nanosleep(\u0026ts1s, NULL);\n\t\t  printf(\"mother: SIGCONT\\n\");\n\t\t  kill(tracee, SIGCONT);\n\t  }\n\t  nanosleep(\u0026ts1s, NULL);\n\n\t  kill(tracer, SIGKILL);\n\t  kill(tracee, SIGKILL);\n\t  return 0;\n  }\n\nThis is identical to the program to test TRAP_NOTIFY except that\ntracee is PTRACE_LISTEN\u0027d instead of PTRACE_CONT\u0027d when group stopped.\nThis allows ptracer to monitor when group stop ends without running\ntracee.\n\n  # ./test-listen\n  tracer: stopped\u003d0 signo\u003d5\n  mother: SIGSTOP\n  tracer: SIG 19\n  tracer: stopped\u003d1 signo\u003d19\n  mother: SIGCONT\n  tracer: stopped\u003d0 signo\u003d5\n  tracer: SIG 18\n  mother: SIGSTOP\n  tracer: SIG 19\n  tracer: stopped\u003d1 signo\u003d19\n  mother: SIGCONT\n  tracer: stopped\u003d0 signo\u003d5\n  tracer: SIG 18\n  mother: SIGSTOP\n  tracer: SIG 19\n  tracer: stopped\u003d1 signo\u003d19\n  mother: SIGCONT\n  tracer: stopped\u003d0 signo\u003d5\n  tracer: SIG 18\n\n-v2: Moved JOBCTL_LISTENING check in wait_task_stopped() into\n     task_stopped_code() as suggested by Oleg.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "733eda7ac316cd4e550fa096e4ed42356dc546e7",
      "tree": "6522f47608fb97314a7b615b1cb1d6e2c58952c8",
      "parents": [
        "37573e8c718277103f61f03741bdc5606d31b07e"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Wed Jun 15 15:08:43 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jun 15 20:04:01 2011 -0700"
      },
      "message": "memcg: clear mm-\u003eowner when last possible owner leaves\n\nThe following crash was reported:\n\n\u003e Call Trace:\n\u003e [\u003cffffffff81139792\u003e] mem_cgroup_from_task+0x15/0x17\n\u003e [\u003cffffffff8113a75a\u003e] __mem_cgroup_try_charge+0x148/0x4b4\n\u003e [\u003cffffffff810493f3\u003e] ? need_resched+0x23/0x2d\n\u003e [\u003cffffffff814cbf43\u003e] ? preempt_schedule+0x46/0x4f\n\u003e [\u003cffffffff8113afe8\u003e] mem_cgroup_charge_common+0x9a/0xce\n\u003e [\u003cffffffff8113b6d1\u003e] mem_cgroup_newpage_charge+0x5d/0x5f\n\u003e [\u003cffffffff81134024\u003e] khugepaged+0x5da/0xfaf\n\u003e [\u003cffffffff81078ea0\u003e] ? __init_waitqueue_head+0x4b/0x4b\n\u003e [\u003cffffffff81133a4a\u003e] ? add_mm_counter.constprop.5+0x13/0x13\n\u003e [\u003cffffffff81078625\u003e] kthread+0xa8/0xb0\n\u003e [\u003cffffffff814d13e8\u003e] ? sub_preempt_count+0xa1/0xb4\n\u003e [\u003cffffffff814d5664\u003e] kernel_thread_helper+0x4/0x10\n\u003e [\u003cffffffff814ce858\u003e] ? retint_restore_args+0x13/0x13\n\u003e [\u003cffffffff8107857d\u003e] ? __init_kthread_worker+0x5a/0x5a\n\nWhat happens is that khugepaged tries to charge a huge page against an mm\nwhose last possible owner has already exited, and the memory controller\ncrashes when the stale mm-\u003eowner is used to look up the cgroup to charge.\n\nmm-\u003eowner has never been set to NULL with the last owner going away, but\nnobody cared until khugepaged came along.\n\nEven then it wasn\u0027t a problem because the final mmput() on an mm was\nforced to acquire and release mmap_sem in write-mode, preventing an\nexiting owner to go away while the mmap_sem was held, and until \"692e0b3\nmm: thp: optimize memcg charge in khugepaged\", the memory cgroup charge\nwas protected by mmap_sem in read-mode.\n\nInstead of going back to relying on the mmap_sem to enforce lifetime of a\ntask, this patch ensures that mm-\u003eowner is properly set to NULL when the\nlast possible owner is exiting, which the memory controller can handle\njust fine.\n\n[akpm@linux-foundation.org: tweak comments]\nSigned-off-by: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Johannes Weiner \u003channes@cmpxchg.org\u003e\nReported-by: Hugh Dickins \u003chughd@google.com\u003e\nReported-by: Dave Jones \u003cdavej@redhat.com\u003e\nReviewed-by: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3ed4c0583daa34dedb568b26ff99e5a7b58db612",
      "tree": "a531d4cc94acaa58fe0600cf83da9fb8b77f6e50",
      "parents": [
        "ad9471752ebae25daa133b4e5d9299809c35e155",
        "bd715d9a4f13f87bad5526c2cd41370949473b16"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 20 13:33:21 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri May 20 13:33:21 2011 -0700"
      },
      "message": "Merge branch \u0027ptrace\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/oleg/misc\n\n* \u0027ptrace\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/oleg/misc: (41 commits)\n  signal: trivial, fix the \"timespec declared inside parameter list\" warning\n  job control: reorganize wait_task_stopped()\n  ptrace: fix signal-\u003ewait_chldexit usage in task_clear_group_stop_trapping()\n  signal: sys_sigprocmask() needs retarget_shared_pending()\n  signal: cleanup sys_sigprocmask()\n  signal: rename signandsets() to sigandnsets()\n  signal: do_sigtimedwait() needs retarget_shared_pending()\n  signal: introduce do_sigtimedwait() to factor out compat/native code\n  signal: sys_rt_sigtimedwait: simplify the timeout logic\n  signal: cleanup sys_rt_sigprocmask()\n  x86: signal: sys_rt_sigreturn() should use set_current_blocked()\n  x86: signal: handle_signal() should use set_current_blocked()\n  signal: sigprocmask() should do retarget_shared_pending()\n  signal: sigprocmask: narrow the scope of -\u003esiglock\n  signal: retarget_shared_pending: optimize while_each_thread() loop\n  signal: retarget_shared_pending: consider shared/unblocked signals only\n  signal: introduce retarget_shared_pending()\n  ptrace: ptrace_check_attach() should not do s/STOPPED/TRACED/\n  signal: Turn SIGNAL_STOP_DEQUEUED into GROUP_STOP_DEQUEUED\n  signal: do_signal_stop: Remove the unneeded task_clear_group_stop_pending()\n  ...\n"
    },
    {
      "commit": "19e274630c9e23a84d5940af83cf5db35103f968",
      "tree": "334344b87c92cf9d9ec6ea04151e1bf65742c58f",
      "parents": [
        "40ae717d1e78d982bd469b2013a4cbf4ec1ca434"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu May 12 10:47:23 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri May 13 18:56:02 2011 +0200"
      },
      "message": "job control: reorganize wait_task_stopped()\n\nwait_task_stopped() tested task_stopped_code() without acquiring\nsiglock and, if stop condition existed, called wait_task_stopped() and\ndirectly returned the result.  This patch moves the initial\ntask_stopped_code() testing into wait_task_stopped() and make\nwait_consider_task() fall through to wait_task_continue() on 0 return.\n\nThis is for the following two reasons.\n\n* Because the initial task_stopped_code() test is done without\n  acquiring siglock, it may race against SIGCONT generation.  The\n  stopped condition might have been replaced by continued state by the\n  time wait_task_stopped() acquired siglock.  This may lead to\n  unexpected failure of WNOHANG waits.\n\n  This reorganization addresses this single race case but there are\n  other cases - TASK_RUNNING -\u003e TASK_STOPPED transition and EXIT_*\n  transitions.\n\n* Scheduled ptrace updates require changes to the initial test which\n  would fit better inside wait_task_stopped().\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nReviewed-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "bf26c018490c2fce7fe9b629083b96ce0e6ad019",
      "tree": "ff595f6268cb6fc675beb6accf6abb0701829443",
      "parents": [
        "f4929bd37208540c2c6f416e9035ff1938f2dbc6"
      ],
      "author": {
        "name": "Frederic Weisbecker",
        "email": "fweisbec@gmail.com",
        "time": "Thu Apr 07 16:53:20 2011 +0200"
      },
      "committer": {
        "name": "Frederic Weisbecker",
        "email": "fweisbec@gmail.com",
        "time": "Mon Apr 25 17:28:24 2011 +0200"
      },
      "message": "ptrace: Prepare to fix racy accesses on task breakpoints\n\nWhen a task is traced and is in a stopped state, the tracer\nmay execute a ptrace request to examine the tracee state and\nget its task struct. Right after, the tracee can be killed\nand thus its breakpoints released.\nThis can happen concurrently when the tracer is in the middle\nof reading or modifying these breakpoints, leading to dereferencing\na freed pointer.\n\nHence, to prepare the fix, create a generic breakpoint reference\nholding API. When a reference on the breakpoints of a task is\nheld, the breakpoints won\u0027t be released until the last reference\nis dropped. After that, no more ptrace request on the task\u0027s\nbreakpoints can be serviced for the tracer.\n\nReported-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Will Deacon \u003cwill.deacon@arm.com\u003e\nCc: Prasad \u003cprasad@linux.vnet.ibm.com\u003e\nCc: Paul Mundt \u003clethal@linux-sh.org\u003e\nCc: v2.6.33.. \u003cstable@kernel.org\u003e\nLink: http://lkml.kernel.org/r/1302284067-7860-2-git-send-email-fweisbec@gmail.com\n"
    },
    {
      "commit": "e46bc9b6fd65bc9f406a4211fbf95683cc9c2937",
      "tree": "57046f6b2f4674a0c9048ab1ad1ff50fae7e373a",
      "parents": [
        "2b9accbee563f535046ff2cd382d0acaa92e130c",
        "321fb561971ba0f10ce18c0f8a4b9fbfc7cef4b9"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 07 20:44:11 2011 +0200"
      },
      "committer": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Apr 07 20:44:11 2011 +0200"
      },
      "message": "Merge branch \u0027ptrace\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tj/misc into ptrace\n"
    },
    {
      "commit": "25985edcedea6396277003854657b5f3cb31a628",
      "tree": "f026e810210a2ee7290caeb737c23cb6472b7c38",
      "parents": [
        "6aba74f2791287ec407e0f92487a725a25908067"
      ],
      "author": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Wed Mar 30 22:57:33 2011 -0300"
      },
      "committer": {
        "name": "Lucas De Marchi",
        "email": "lucas.demarchi@profusion.mobi",
        "time": "Thu Mar 31 11:26:23 2011 -0300"
      },
      "message": "Fix common misspellings\n\nFixes generated by \u0027codespell\u0027 and manually reviewed.\n\nSigned-off-by: Lucas De Marchi \u003clucas.demarchi@profusion.mobi\u003e\n"
    },
    {
      "commit": "45cb24a1da53beb70f09efccc0373f6a47a9efe0",
      "tree": "f27b2a6ca76f9b4e17f2adddfcf27b3d988152ed",
      "parents": [
        "9b84cca2564b9a5b2d064fb44d2a55a5b44473a0"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "message": "job control: Allow access to job control events through ptracees\n\nCurrently a real parent can\u0027t access job control stopped/continued\nevents through a ptraced child.  This utterly breaks job control when\nthe children are ptraced.\n\nFor example, if a program is run from an interactive shell and then\nstrace(1) attaches to it, pressing ^Z would send SIGTSTP and strace(1)\nwould notice it but the shell has no way to tell whether the child\nentered job control stop and thus can\u0027t tell when to take over the\nterminal - leading to awkward lone ^Z on the terminal.\n\nBecause the job control and ptrace stopped states are independent,\nthere is no reason to prevent real parents from accessing the stopped\nstate regardless of ptrace.  The continued state isn\u0027t separate but\nptracers don\u0027t have any use for them as ptracees can never resume\nwithout explicit command from their ptracers, so as long as ptracers\ndon\u0027t consume it, it should be fine.\n\nAlthough this is a behavior change, because the previous behavior is\nutterly broken when viewed from real parents and the change is only\nvisible to real parents, I don\u0027t think it\u0027s necessary to make this\nbehavior optional.\n\nOne situation to be careful about is when a task from the real\nparent\u0027s group is ptracing.  The parent group is the recipient of both\nptrace and job control stop events and one stop can be reported as\nboth job control and ptrace stops.  As this can break the current\nptrace users, suppress job control stopped events for these cases.\n\nIf a real parent ptracer wants to know about both job control and\nptrace stops, it can create a separate process to serve the role of\nreal parent.\n\nNote that this only updates wait(2) side of things.  The real parent\ncan access the states via wait(2) but still is not properly notified\n(woken up and delivered signal).  Test case polls wait(2) with WNOHANG\nto work around.  Notification will be updated by future patches.\n\nTest case follows.\n\n  #include \u003cstdio.h\u003e\n  #include \u003cunistd.h\u003e\n  #include \u003ctime.h\u003e\n  #include \u003cerrno.h\u003e\n  #include \u003csys/types.h\u003e\n  #include \u003csys/ptrace.h\u003e\n  #include \u003csys/wait.h\u003e\n\n  int main(void)\n  {\n\t  const struct timespec ts100ms \u003d { .tv_nsec \u003d 100000000 };\n\t  pid_t tracee, tracer;\n\t  siginfo_t si;\n\t  int i;\n\n\t  tracee \u003d fork();\n\t  if (tracee \u003d\u003d 0) {\n\t\t  while (1) {\n\t\t\t  printf(\"tracee: SIGSTOP\\n\");\n\t\t\t  raise(SIGSTOP);\n\t\t\t  nanosleep(\u0026ts100ms, NULL);\n\t\t\t  printf(\"tracee: SIGCONT\\n\");\n\t\t\t  raise(SIGCONT);\n\t\t\t  nanosleep(\u0026ts100ms, NULL);\n\t\t  }\n\t  }\n\n\t  waitid(P_PID, tracee, \u0026si, WSTOPPED | WNOHANG | WNOWAIT);\n\n\t  tracer \u003d fork();\n\t  if (tracer \u003d\u003d 0) {\n\t\t  nanosleep(\u0026ts100ms, NULL);\n\t\t  ptrace(PTRACE_ATTACH, tracee, NULL, NULL);\n\n\t\t  for (i \u003d 0; i \u003c 11; i++) {\n\t\t\t  si.si_pid \u003d 0;\n\t\t\t  waitid(P_PID, tracee, \u0026si, WSTOPPED);\n\t\t\t  if (si.si_pid \u0026\u0026 si.si_code \u003d\u003d CLD_TRAPPED)\n\t\t\t\t  ptrace(PTRACE_CONT, tracee, NULL,\n\t\t\t\t\t (void *)(long)si.si_status);\n\t\t  }\n\t\t  printf(\"tracer: EXITING\\n\");\n\t\t  return 0;\n\t  }\n\n\t  while (1) {\n\t\t  si.si_pid \u003d 0;\n\t\t  waitid(P_PID, tracee, \u0026si,\n\t\t\t WSTOPPED | WCONTINUED | WEXITED | WNOHANG);\n\t\t  if (si.si_pid)\n\t\t\t  printf(\"mommy : WAIT status\u003d%02d code\u003d%02d\\n\",\n\t\t\t\t si.si_status, si.si_code);\n\t\t  nanosleep(\u0026ts100ms, NULL);\n\t  }\n\t  return 0;\n  }\n\nBefore the patch, while ptraced, the parent can\u0027t see any job control\nevents.\n\n  tracee: SIGSTOP\n  mommy : WAIT status\u003d19 code\u003d05\n  tracee: SIGCONT\n  tracee: SIGSTOP\n  tracee: SIGCONT\n  tracee: SIGSTOP\n  tracee: SIGCONT\n  tracee: SIGSTOP\n  tracer: EXITING\n  mommy : WAIT status\u003d19 code\u003d05\n  ^C\n\nAfter the patch,\n\n  tracee: SIGSTOP\n  mommy : WAIT status\u003d19 code\u003d05\n  tracee: SIGCONT\n  mommy : WAIT status\u003d18 code\u003d06\n  tracee: SIGSTOP\n  mommy : WAIT status\u003d19 code\u003d05\n  tracee: SIGCONT\n  mommy : WAIT status\u003d18 code\u003d06\n  tracee: SIGSTOP\n  mommy : WAIT status\u003d19 code\u003d05\n  tracee: SIGCONT\n  mommy : WAIT status\u003d18 code\u003d06\n  tracee: SIGSTOP\n  tracer: EXITING\n  mommy : WAIT status\u003d19 code\u003d05\n  ^C\n\n-v2: Oleg pointed out that wait(2) should be suppressed for the real\n     parent\u0027s group instead of only the real parent task itself.\n     Updated accordingly.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "9b84cca2564b9a5b2d064fb44d2a55a5b44473a0",
      "tree": "376808993d708f23830ff069fdf157e99bfb7516",
      "parents": [
        "823b018e5b1196d810790559357447948f644548"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "message": "job control: Fix ptracer wait(2) hang and explain notask_error clearing\n\nwait(2) and friends allow access to stopped/continued states through\nzombies, which is required as the states are process-wide and should\nbe accessible whether the leader task is alive or undead.\nwait_consider_task() implements this by always clearing notask_error\nand going through wait_task_stopped/continued() for unreaped zombies.\n\nHowever, while ptraced, the stopped state is per-task and as such if\nthe ptracee became a zombie, there\u0027s no further stopped event to\nlisten to and wait(2) and friends should return -ECHILD on the tracee.\n\nFix it by clearing notask_error only if WCONTINUED | WEXITED is set\nfor ptraced zombies.  While at it, document why clearing notask_error\nis safe for each case.\n\nTest case follows.\n\n  #include \u003cstdio.h\u003e\n  #include \u003cunistd.h\u003e\n  #include \u003cpthread.h\u003e\n  #include \u003ctime.h\u003e\n  #include \u003csys/types.h\u003e\n  #include \u003csys/ptrace.h\u003e\n  #include \u003csys/wait.h\u003e\n\n  static void *nooper(void *arg)\n  {\n\t  pause();\n\t  return NULL;\n  }\n\n  int main(void)\n  {\n\t  const struct timespec ts1s \u003d { .tv_sec \u003d 1 };\n\t  pid_t tracee, tracer;\n\t  siginfo_t si;\n\n\t  tracee \u003d fork();\n\t  if (tracee \u003d\u003d 0) {\n\t\t  pthread_t thr;\n\n\t\t  pthread_create(\u0026thr, NULL, nooper, NULL);\n\t\t  nanosleep(\u0026ts1s, NULL);\n\t\t  printf(\"tracee exiting\\n\");\n\t\t  pthread_exit(NULL);\t/* let subthread run */\n\t  }\n\n\t  tracer \u003d fork();\n\t  if (tracer \u003d\u003d 0) {\n\t\t  ptrace(PTRACE_ATTACH, tracee, NULL, NULL);\n\t\t  while (1) {\n\t\t\t  if (waitid(P_PID, tracee, \u0026si, WSTOPPED) \u003c 0) {\n\t\t\t\t  perror(\"waitid\");\n\t\t\t\t  break;\n\t\t\t  }\n\t\t\t  ptrace(PTRACE_CONT, tracee, NULL,\n\t\t\t\t (void *)(long)si.si_status);\n\t\t  }\n\t\t  return 0;\n\t  }\n\n\t  waitid(P_PID, tracer, \u0026si, WEXITED);\n\t  kill(tracee, SIGKILL);\n\t  return 0;\n  }\n\nBefore the patch, after the tracee becomes a zombie, the tracer\u0027s\nwaitid(WSTOPPED) never returns and the program doesn\u0027t terminate.\n\n  tracee exiting\n  ^C\n\nAfter the patch, tracee exiting triggers waitid() to fail.\n\n  tracee exiting\n  waitid: No child processes\n\n-v2: Oleg pointed out that exited in addition to continued can happen\n     for ptraced dead group leader.  Clear notask_error for ptraced\n     child on WEXITED too.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "823b018e5b1196d810790559357447948f644548",
      "tree": "a7bb20bc487a08943c25e789c51c790aef14d169",
      "parents": [
        "408a37de6c95832a4880a88a742f89f0cc554d06"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 23 10:37:01 2011 +0100"
      },
      "message": "job control: Small reorganization of wait_consider_task()\n\nMove EXIT_DEAD test in wait_consider_task() above ptrace check.  As\nptraced tasks can\u0027t be EXIT_DEAD, this change doesn\u0027t cause any\nbehavior change.  This is to prepare for further changes.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\n"
    },
    {
      "commit": "73c101011926c5832e6e141682180c4debe2cf45",
      "tree": "b8eeb521a7833cb198d6f39d5a931d820e2a663f",
      "parents": [
        "a488e74976bf0a9bccecdd094378394942dacef1"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Tue Mar 08 13:19:51 2011 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jaxboe@fusionio.com",
        "time": "Thu Mar 10 08:45:54 2011 +0100"
      },
      "message": "block: initial patch for on-stack per-task plugging\n\nThis patch adds support for creating a queuing context outside\nof the queue itself. This enables us to batch up pieces of IO\nbefore grabbing the block device queue lock and submitting them to\nthe IO scheduler.\n\nThe context is created on the stack of the process and assigned in\nthe task structure, so that we can auto-unplug it if we hit a schedule\nevent.\n\nThe current queue plugging happens implicitly if IO is submitted to\nan empty device, yet callers have to remember to unplug that IO when\nthey are going to wait for it. This is an ugly API and has caused bugs\nin the past. Additionally, it requires hacks in the vm (-\u003esync_page()\ncallback) to handle that logic. By switching to an explicit plugging\nscheme we make the API a lot nicer and can get rid of the -\u003esync_page()\nhack in the vm.\n\nSigned-off-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\n"
    },
    {
      "commit": "42776163e13a56ea3096edff7a5df95408e80eb4",
      "tree": "92f17bb5dadc7261b2d9238244cd8d4cb6c1bfd7",
      "parents": [
        "edb2877f4a62647e36e20839a786f94d688a06ed",
        "3d03e2ea74103a50c23d6ab1906cf73399c0dafb"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 11 11:02:13 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jan 11 11:02:13 2011 -0800"
      },
      "message": "Merge branch \u0027perf-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027perf-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (28 commits)\n  perf session: Fix infinite loop in __perf_session__process_events\n  perf evsel: Support perf_evsel__open(cpus \u003e 1 \u0026\u0026 threads \u003e 1)\n  perf sched: Use PTHREAD_STACK_MIN to avoid pthread_attr_setstacksize() fail\n  perf tools: Emit clearer message for sys_perf_event_open ENOENT return\n  perf stat: better error message for unsupported events\n  perf sched: Fix allocation result check\n  perf, x86: P4 PMU - Fix unflagged overflows handling\n  dynamic debug: Fix build issue with older gcc\n  tracing: Fix TRACE_EVENT power tracepoint creation\n  tracing: Fix preempt count leak\n  tracepoint: Add __rcu annotation\n  tracing: remove duplicate null-pointer check in skb tracepoint\n  tracing/trivial: Add missing comma in TRACE_EVENT comment\n  tracing: Include module.h in define_trace.h\n  x86: Save rbp in pt_regs on irq entry\n  x86, dumpstack: Fix unused variable warning\n  x86, NMI: Clean-up default_do_nmi()\n  x86, NMI: Allow NMI reason io port (0x61) to be processed on any CPU\n  x86, NMI: Remove DIE_NMI_IPI\n  x86, NMI: Add priorities to handlers\n  ...\n"
    },
    {
      "commit": "0b3fcf178deefd7b64154c2c0760a2c63df0b74f",
      "tree": "b84509c9ac5935ac41f6fc9c444bc406cd2c54d8",
      "parents": [
        "23a2f3ab46596d9fd0b0e592d2101bea90970594"
      ],
      "author": {
        "name": "Stephane Eranian",
        "email": "eranian@google.com",
        "time": "Mon Jan 03 18:20:01 2011 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Jan 07 15:08:50 2011 +0100"
      },
      "message": "perf_events: Move code around to prepare for cgroup\n\nIn particular this patch move perf_event_exit_task() before\ncgroup_exit() to allow for cgroup support. The cgroup_exit()\nfunction detaches the cgroups attached to a task.\n\nOther movements include hoisting some definitions and inlines\nat the top of perf_event.c\n\nSigned-off-by: Stephane Eranian \u003ceranian@google.com\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nLKML-Reference: \u003c4d22058b.cdace30a.4657.ffff95b1@mx.google.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "909ea96468096b07fbb41aaf69be060d92bd9271",
      "tree": "a7e015edd96b5f674874fe78cdd889769e130a2a",
      "parents": [
        "780f36d8b3fa9572f731d4fb85067b2e45e6f993"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "cl@linux.com",
        "time": "Wed Dec 08 16:22:55 2010 +0100"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Fri Dec 17 15:07:19 2010 +0100"
      },
      "message": "core: Replace __get_cpu_var with __this_cpu_read if not used for an address.\n\n__get_cpu_var() can be replaced with this_cpu_read and will then use a\nsingle read instruction with implied address calculation to access the\ncorrect per cpu instance.\n\nHowever, the address of a per cpu variable passed to __this_cpu_read()\ncannot be determined (since it\u0027s an implied address conversion through\nsegment prefixes).  Therefore apply this only to uses of __get_cpu_var\nwhere the address of the variable is not used.\n\nCc: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nAcked-by: H. Peter Anvin \u003chpa@zytor.com\u003e\nSigned-off-by: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\n"
    },
    {
      "commit": "33dd94ae1ccbfb7bf0fb6c692bc3d1c4269e6177",
      "tree": "c00535d8fe9b29be84b02d057e41cd63d7fe3b6b",
      "parents": [
        "a0b0f58cdd32ab363a600a294ddaa90f0c32de8c"
      ],
      "author": {
        "name": "Nelson Elhage",
        "email": "nelhage@ksplice.com",
        "time": "Thu Dec 02 14:31:21 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 02 14:51:16 2010 -0800"
      },
      "message": "do_exit(): make sure that we run with get_fs() \u003d\u003d USER_DS\n\nIf a user manages to trigger an oops with fs set to KERNEL_DS, fs is not\notherwise reset before do_exit().  do_exit may later (via mm_release in\nfork.c) do a put_user to a user-controlled address, potentially allowing\na user to leverage an oops into a controlled write into kernel memory.\n\nThis is only triggerable in the presence of another bug, but this\npotentially turns a lot of DoS bugs into privilege escalations, so it\u0027s\nworth fixing.  I have proof-of-concept code which uses this bug along\nwith CVE-2010-3849 to write a zero to an arbitrary kernel address, so\nI\u0027ve tested that this is not theoretical.\n\nA more logical place to put this fix might be when we know an oops has\noccurred, before we call do_exit(), but that would involve changing\nevery architecture, in multiple places.\n\nLet\u0027s just stick it in do_exit instead.\n\n[akpm@linux-foundation.org: update code comment]\nSigned-off-by: Nelson Elhage \u003cnelhage@ksplice.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: \u003cstable@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": "e0a70217107e6f9844628120412cb27bb4cea194",
      "tree": "3c805ee6cfe97afee77b226e0cf5d36135e82dda",
      "parents": [
        "b312e131cb88b83b6edc7a017b0249b4ea176edc"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Nov 05 16:53:42 2010 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Nov 05 14:16:03 2010 -0700"
      },
      "message": "posix-cpu-timers: workaround to suppress the problems with mt exec\n\nposix-cpu-timers.c correctly assumes that the dying process does\nposix_cpu_timers_exit_group() and removes all !CPUCLOCK_PERTHREAD\ntimers from signal-\u003ecpu_timers list.\n\nBut, it also assumes that timer-\u003eit.cpu.task is always the group\nleader, and thus the dead -\u003etask means the dead thread group.\n\nThis is obviously not true after de_thread() changes the leader.\nAfter that almost every posix_cpu_timer_ method has problems.\n\nIt is not simple to fix this bug correctly. First of all, I think\nthat timer-\u003eit.cpu should use struct pid instead of task_struct.\nAlso, the locking should be reworked completely. In particular,\ntasklist_lock should not be used at all. This all needs a lot of\nnontrivial and hard-to-test changes.\n\nChange __exit_signal() to do posix_cpu_timers_exit_group() when\nthe old leader dies during exec. This is not the fix, just the\ntemporary hack to hide the problem for 2.6.37 and stable. IOW,\nthis is obviously wrong but this is what we currently have anyway:\ncpu timers do not work after mt exec.\n\nIn theory this change adds another race. The exiting leader can\ndetach the timers which were attached to the new leader. However,\nthe window between de_thread() and release_task() is small, we\ncan pretend that sys_timer_create() was called before de_thread().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d16e15f5b029fc7d03540ba0e5fb23b0abb0ebe0",
      "tree": "382a6779f4eee476d86538372f0f6586d64ddb8b",
      "parents": [
        "895021552d6ffe8a4d076cb5c4b1e700c33e96e1"
      ],
      "author": {
        "name": "Namhyung Kim",
        "email": "namhyung@gmail.com",
        "time": "Wed Oct 27 15:34:10 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Oct 27 18:03:13 2010 -0700"
      },
      "message": "exit: add lock context annotation on find_new_reaper()\n\nfind_new_reaper() releases and regrabs tasklist_lock but was missing\nproper annotations.  Add it.  This remove following sparse warning:\n\n warning: context imbalance in \u0027find_new_reaper\u0027 - unexpected unlock\n\nSigned-off-by: Namhyung Kim \u003cnamhyung@gmail.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3d5992d2ac7dc09aed8ab537cba074589f0f0a52",
      "tree": "0fbb51026e8aa13ddd7a6516c04471ceb97bc277",
      "parents": [
        "0f4d208f1975f16f269134cee5f44c1f048581da"
      ],
      "author": {
        "name": "Ying Han",
        "email": "yinghan@google.com",
        "time": "Tue Oct 26 14:21:23 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 16:52:05 2010 -0700"
      },
      "message": "oom: add per-mm oom disable count\n\nIt\u0027s pointless to kill a task if another thread sharing its mm cannot be\nkilled to allow future memory freeing.  A subsequent patch will prevent\nkills in such cases, but first it\u0027s necessary to have a way to flag a task\nthat shares memory with an OOM_DISABLE task that doesn\u0027t incur an\nadditional tasklist scan, which would make select_bad_process() an O(n^2)\nfunction.\n\nThis patch adds an atomic counter to struct mm_struct that follows how\nmany threads attached to it have an oom_score_adj of OOM_SCORE_ADJ_MIN.\nThey cannot be killed by the kernel, so their memory cannot be freed in\noom conditions.\n\nThis only requires task_lock() on the task that we\u0027re operating on, it\ndoes not require mm-\u003emmap_sem since task_lock() pins the mm and the\noperation is atomic.\n\n[rientjes@google.com: changelog and sys_unshare() code]\n[rientjes@google.com: protect oom_disable_count with task_lock in fork]\n[rientjes@google.com: use old_mm for oom_disable_count in exec]\nSigned-off-by: Ying Han \u003cyinghan@google.com\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4e231c7962ce711c7d8c2a4dc23ecd1e8fc28363",
      "tree": "05af30e5c2f1084d8e77c89f0e55beaafa2194c0",
      "parents": [
        "1b9a644fece117cfa5474a2388d6b89d1baf8ddf"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Thu Sep 09 21:01:59 2010 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Sep 09 21:07:09 2010 +0200"
      },
      "message": "perf: Fix up delayed_put_task_struct()\n\nI missed a perf_event_ctxp user when converting it to an array. Pull this\nlast user into perf_event.c as well and fix it up.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nLKML-Reference: \u003cnew-submission\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "f362b73244fb16ea4ae127ced1467dd8adaa7733",
      "tree": "6aa3e767b527157b532c0620f2e9ef4c8f131c45",
      "parents": [
        "d7627467b7a8dd6944885290a03a07ceb28c10eb"
      ],
      "author": {
        "name": "Daniel J Blueman",
        "email": "daniel.blueman@gmail.com",
        "time": "Tue Aug 17 23:56:55 2010 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 17 18:07:43 2010 -0700"
      },
      "message": "Fix unprotected access to task credentials in waitid()\n\nUsing a program like the following:\n\n\t#include \u003cstdlib.h\u003e\n\t#include \u003cunistd.h\u003e\n\t#include \u003csys/types.h\u003e\n\t#include \u003csys/wait.h\u003e\n\n\tint main() {\n\t\tid_t id;\n\t\tsiginfo_t infop;\n\t\tpid_t res;\n\n\t\tid \u003d fork();\n\t\tif (id \u003d\u003d 0) { sleep(1); exit(0); }\n\t\tkill(id, SIGSTOP);\n\t\talarm(1);\n\t\twaitid(P_PID, id, \u0026infop, WCONTINUED);\n\t\treturn 0;\n\t}\n\nto call waitid() on a stopped process results in access to the child task\u0027s\ncredentials without the RCU read lock being held - which may be replaced in the\nmeantime - eliciting the following warning:\n\n\t\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\t[ INFO: suspicious rcu_dereference_check() usage. ]\n\t---------------------------------------------------\n\tkernel/exit.c:1460 invoked rcu_dereference_check() without protection!\n\n\tother info that might help us debug this:\n\n\trcu_scheduler_active \u003d 1, debug_locks \u003d 1\n\t2 locks held by waitid02/22252:\n\t #0:  (tasklist_lock){.?.?..}, at: [\u003cffffffff81061ce5\u003e] do_wait+0xc5/0x310\n\t #1:  (\u0026(\u0026sighand-\u003esiglock)-\u003erlock){-.-...}, at: [\u003cffffffff810611da\u003e]\n\twait_consider_task+0x19a/0xbe0\n\n\tstack backtrace:\n\tPid: 22252, comm: waitid02 Not tainted 2.6.35-323cd+ #3\n\tCall Trace:\n\t [\u003cffffffff81095da4\u003e] lockdep_rcu_dereference+0xa4/0xc0\n\t [\u003cffffffff81061b31\u003e] wait_consider_task+0xaf1/0xbe0\n\t [\u003cffffffff81061d15\u003e] do_wait+0xf5/0x310\n\t [\u003cffffffff810620b6\u003e] sys_waitid+0x86/0x1f0\n\t [\u003cffffffff8105fce0\u003e] ? child_wait_callback+0x0/0x70\n\t [\u003cffffffff81003282\u003e] system_call_fastpath+0x16/0x1b\n\nThis is fixed by holding the RCU read lock in wait_task_continued() to ensure\nthat the task\u0027s current credentials aren\u0027t destroyed between us reading the\ncred pointer and us reading the UID from those credentials.\n\nFurthermore, protect wait_task_stopped() in the same way.\n\nWe don\u0027t need to keep holding the RCU read lock once we\u0027ve read the UID from\nthe credentials as holding the RCU read lock doesn\u0027t stop the target task from\nchanging its creds under us - so the credentials may be outdated immediately\nafter we\u0027ve read the pointer, lock or no lock.\n\nSigned-off-by: Daniel J Blueman \u003cdaniel.blueman@gmail.com\u003e\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c7e49c1488ab20342eaaf38f1ca35a207f4c051d",
      "tree": "43876a69cafbb49ce86f71ba5db88018ca7cc036",
      "parents": [
        "13d7e3a2dba6a79589ed34dc0b9114d7b5ff9eab"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Tue Aug 10 18:03:07 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 11 08:59:19 2010 -0700"
      },
      "message": "ptrace: optimize exit_ptrace() for the likely case\n\nexit_ptrace() takes tasklist_lock unconditionally.  We need this lock to\navoid the race with ptrace_traceme(), it acts as a barrier.\n\nChange its caller, forget_original_parent(), to call exit_ptrace() under\ntasklist_lock.  Change exit_ptrace() to drop and reacquire this lock if\nneeded.\n\nThis allows us to add the fastpath list_empty(ptraced) check.  In the\nlikely no-tracees case exit_ptrace() just returns and we avoid the lock()\n+ unlock() sequence.\n\n\"Zhang, Yanmin\" \u003cyanmin_zhang@linux.intel.com\u003e suggested to add this\ncheck, and he reports that this change adds about 11% improvement in some\ntests.\n\nSuggested-and-tested-by: \"Zhang, Yanmin\" \u003cyanmin_zhang@linux.intel.com\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b3ac022cb9dc5883505a88b159d1b240ad1ef405",
      "tree": "bffa035303cbe3c5bde048ac3d3154fb57059e2d",
      "parents": [
        "dd98acf74762764fbc4382a1d9a244f11a2658cc"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed May 26 14:43:24 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:47 2010 -0700"
      },
      "message": "proc: turn signal_struct-\u003ecount into \"int nr_threads\"\n\nNo functional changes, just s/atomic_t count/int nr_threads/.\n\nWith the recent changes this counter has a single user, get_nr_threads()\nAnd, none of its callers need the really accurate number of threads, not\nto mention each caller obviously races with fork/exit.  It is only used to\nreport this value to the user-space, except first_tid() uses it to avoid\nthe unnecessary while_each_thread() loop in the unlikely case.\n\nIt is a bit sad we need a word in struct signal_struct for this, perhaps\nwe can change get_nr_threads() to approximate the number of threads using\nsignal-\u003elive and kill -\u003enr_threads later.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "97101eb41d0d3c97543878ce40e0b8a8b2747ed7",
      "tree": "d33299c8d4787d3b578ea432fdaceb965a2acd97",
      "parents": [
        "a705be6b5e8b05f2ae51536ec709de921960326c"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed May 26 14:43:20 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:46 2010 -0700"
      },
      "message": "exit: move taskstats_tgid_free() from __exit_signal() to free_signal_struct()\n\nMove taskstats_tgid_free() from __exit_signal() to free_signal_struct().\n\nThis way signal-\u003estats never points to nowhere and we can read -\u003estats\nlockless.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Veaceslav Falico \u003cvfalico@redhat.com\u003e\nCc: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d40e48e02f3785b9342ee4eb3d7cc9f12981b7f5",
      "tree": "05f900ae17f4727c0e8b8c2c84d41b1cee7c13b0",
      "parents": [
        "b7b8ff6373d4b910af081f76888395e6df53249d"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed May 26 14:43:19 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:46 2010 -0700"
      },
      "message": "exit: __exit_signal: use thread_group_leader() consistently\n\nCleanup:\n\n- Add the boolean, group_dead \u003d thread_group_leader(), for clarity.\n\n- Do not test/set sig \u003d\u003d NULL to detect the all-dead case, use this\n  boolean.\n\n- Pass this boolen to __unhash_process() and use it instead of another\n  thread_group_leader() call which needs -\u003egroup_leader.\n\n  This can be considered as microoptimization, but hopefully this also\n  allows us do do other cleanups later.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Balbir Singh \u003cbalbir@linux.vnet.ibm.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Veaceslav Falico \u003cvfalico@redhat.com\u003e\nCc: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b7b8ff6373d4b910af081f76888395e6df53249d",
      "tree": "128a1b2cf026fb8b9791eaefb6f79f872999a5c6",
      "parents": [
        "4ada856fb0ee62f6fe3aac3de726deac0640d929"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed May 26 14:43:18 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:46 2010 -0700"
      },
      "message": "signals: kill the awful task_rq_unlock_wait() hack\n\nNow that task-\u003esignal can\u0027t go away we can revert the horrible hack added\nby ad474caca3e2a0550b7ce0706527ad5ab389a4d4 (\"fix for\naccount_group_exec_runtime(), make sure -\u003esignal can\u0027t be freed under\nrq-\u003elock\").\n\nAnd we can do more cleanups sched_stats.h/posix-cpu-timers.c later.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Alan Cox \u003calan@linux.intel.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4ada856fb0ee62f6fe3aac3de726deac0640d929",
      "tree": "8dd3efbc19f6e1f1dac2ff7afdcd9658fb08b814",
      "parents": [
        "ea6d290ca34c4fd91b7348338c0cc7bdeff94a35"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed May 26 14:43:17 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:46 2010 -0700"
      },
      "message": "signals: clear signal-\u003etty when the last thread exits\n\nWhen the last thread exits signal-\u003etty is freed, but the pointer is not\ncleared and points to nowhere.\n\nThis is OK.  Nobody should use signal-\u003etty lockless, and it is no longer\npossible to take -\u003esiglock.  However this looks wrong even if correct, and\nthe nice OOPS is better than subtle and hard to find bugs.\n\nChange __exit_signal() to clear signal-\u003etty under -\u003esiglock.\n\nNote: __exit_signal() needs more cleanups.  It should not check \"sig !\u003d\nNULL\" to detect the all-dead case and we have the same issues with\nsignal-\u003estats.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Alan Cox \u003calan@linux.intel.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ea6d290ca34c4fd91b7348338c0cc7bdeff94a35",
      "tree": "6e9bd367650d9233c5b6cf1059845f17cb1bc460",
      "parents": [
        "4dec2a91fd7e8815d730afbfdcf085cbf53433ac"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed May 26 14:43:16 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:46 2010 -0700"
      },
      "message": "signals: make task_struct-\u003esignal immutable/refcountable\n\nWe have a lot of problems with accessing task_struct-\u003esignal, it can\n\"disappear\" at any moment.  Even current can\u0027t use its -\u003esignal safely\nafter exit_notify().  -\u003esiglock helps, but it is not convenient, not\nalways possible, and sometimes it makes sense to use task-\u003esignal even\nafter this task has already dead.\n\nThis patch adds the reference counter, sigcnt, into signal_struct.  This\nreference is owned by task_struct and it is dropped in\n__put_task_struct().  Perhaps it makes sense to export\nget/put_signal_struct() later, but currently I don\u0027t see the immediate\nreason.\n\nRename __cleanup_signal() to free_signal_struct() and unexport it.  With\nthe previous changes it does nothing except kmem_cache_free().\n\nChange __exit_signal() to not clear/free -\u003esignal, it will be freed when\nthe last reference to any thread in the thread group goes away.\n\nNote:\n\t- when the last thead exits signal-\u003etty can point to nowhere, see\n\t  the next patch.\n\n\t- with or without this patch signal_struct-\u003ecount should go away,\n\t  or at least it should be \"int nr_threads\" for fs/proc. This will\n\t  be addressed later.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Alan Cox \u003calan@linux.intel.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4dec2a91fd7e8815d730afbfdcf085cbf53433ac",
      "tree": "cd33cc793abf532d4ca212d09c1e8d3154a8b530",
      "parents": [
        "ffdf91856c812646aa276711fa7e3ad80b00764a"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed May 26 14:43:15 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:46 2010 -0700"
      },
      "message": "fork/exit: move tty_kref_put() outside of __cleanup_signal()\n\ntty_kref_put() has two callsites in copy_process() paths,\n\n\t1. if copy_process() suceeds it is called before we copy\n\t   signal-\u003etty from parent\n\n\t2. otherwise it is called from __cleanup_signal() under\n\t   bad_fork_cleanup_signal: label\n\nIn both cases tty_kref_put() is not right and unneeded because we don\u0027t\nhave the balancing tty_kref_get().  Fortunately, this is harmless because\nthis can only happen without CLONE_THREAD, and in this case signal-\u003etty\nmust be NULL.\n\nRemove tty_kref_put() from copy_process() and __cleanup_signal(), and\nchange another caller of __cleanup_signal(), __exit_signal(), to call\ntty_kref_put() by hand.\n\nI hope this change makes sense by itself, but it is also needed to make\n-\u003esignal refcountable.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Alan Cox \u003calan@linux.intel.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: Greg KH \u003cgreg@kroah.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4a5999429739844367d0f77a65efdd7db8202779",
      "tree": "fff1158fa43466b30294a7db2c4629ca14973770",
      "parents": [
        "d344193a05da89c97e965da2c5cbf687d7385eae"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed May 26 14:43:12 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:46 2010 -0700"
      },
      "message": "exit: avoid sig-\u003ecount in __exit_signal() to detect the group-dead case\n\nChange __exit_signal() to check thread_group_leader() instead of\natomic_dec_and_test(\u0026sig-\u003ecount).  This must be equivalent, the group\nleader must be released only after all other threads have exited and\npassed __exit_signal().\n\nHenceforth sig-\u003ecount is not actually used, except in fs/proc for\nget_nr_threads/etc.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: Veaceslav Falico \u003cvfalico@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d344193a05da89c97e965da2c5cbf687d7385eae",
      "tree": "6267b68c31c4547f1749acd35d2a5bfaff919839",
      "parents": [
        "09faef11df8c559a23e2405d123cb2683733a79a"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed May 26 14:43:11 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:46 2010 -0700"
      },
      "message": "exit: avoid sig-\u003ecount in de_thread/__exit_signal synchronization\n\nde_thread() and __exit_signal() use signal_struct-\u003ecount/notify_count for\nsynchronization.  We can simplify the code and use -\u003enotify_count only.\nInstead of comparing these two counters, we can change de_thread() to set\n-\u003enotify_count \u003d nr_of_sub_threads, then change __exit_signal() to\ndec-and-test this counter and notify group_exit_task.\n\nNote that __exit_signal() checks \"notify_count \u003e 0\" just for symmetry with\nexit_notify(), we could just check it is !\u003d 0.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: Veaceslav Falico \u003cvfalico@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9c3391684415c9dca239130d9e433a60a4edf04b",
      "tree": "a8019b964c625cfeeda0e9d85bafa48991546212",
      "parents": [
        "269b005a28e124a341df4adef2c3661cf7371fcc"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed May 26 14:43:10 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:45 2010 -0700"
      },
      "message": "exit: exit_notify() can trust signal-\u003enotify_count \u003c 0\n\nsignal_struct-\u003ecount in its current form must die.\n\n- it has no reasons to be atomic_t\n\n- it looks like a reference counter, but it is not\n\n- otoh, we really need to make task-\u003esignal refcountable, just look at\n  the extremely ugly task_rq_unlock_wait() called from __exit_signals().\n\n- we should change the lifetime rules for task-\u003esignal, it should be\n  pinned to task_struct.  We have a lot of code which can be simplified\n  after that.\n\n- it is not needed!  while the code is correct, any usage of this\n  counter is artificial, except fs/proc uses it correctly to show the\n  number of threads.\n\nThis series removes the usage of sig-\u003ecount from exit pathes.\n\nThis patch:\n\nNow that Veaceslav changed copy_signal() to use zalloc(), exit_notify()\ncan just check notify_count \u003c 0 to ensure the execing sub-threads needs\nthe notification from us.  No need to do other checks, notify_count !\u003d 0\nmust always mean -\u003egroup_exit_task !\u003d NULL is waiting for us.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: Veaceslav Falico \u003cvfalico@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c0ff7453bb5c7c98e0885fb94279f2571946f280",
      "tree": "8bb2b169a5145f0496575dbd2f48bb4b1c83f819",
      "parents": [
        "708c1bbc9d0c3e57f40501794d9b0eed29d10fce"
      ],
      "author": {
        "name": "Miao Xie",
        "email": "miaox@cn.fujitsu.com",
        "time": "Mon May 24 14:32:08 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue May 25 08:06:57 2010 -0700"
      },
      "message": "cpuset,mm: fix no node to alloc memory when changing cpuset\u0027s mems\n\nBefore applying this patch, cpuset updates task-\u003emems_allowed and\nmempolicy by setting all new bits in the nodemask first, and clearing all\nold unallowed bits later.  But in the way, the allocator may find that\nthere is no node to alloc memory.\n\nThe reason is that cpuset rebinds the task\u0027s mempolicy, it cleans the\nnodes which the allocater can alloc pages on, for example:\n\n(mpol: mempolicy)\n\ttask1\t\t\ttask1\u0027s mpol\ttask2\n\talloc page\t\t1\n\t  alloc on node0? NO\t1\n\t\t\t\t1\t\tchange mems from 1 to 0\n\t\t\t\t1\t\trebind task1\u0027s mpol\n\t\t\t\t0-1\t\t  set new bits\n\t\t\t\t0\t  \t  clear disallowed bits\n\t  alloc on node1? NO\t0\n\t  ...\n\tcan\u0027t alloc page\n\t  goto oom\n\nThis patch fixes this problem by expanding the nodes range first(set newly\nallowed bits) and shrink it lazily(clear newly disallowed bits).  So we\nuse a variable to tell the write-side task that read-side task is reading\nnodemask, and the write-side task clears newly disallowed nodes after\nread-side task ends the current memory allocation.\n\n[akpm@linux-foundation.org: fix spello]\nSigned-off-by: Miao Xie \u003cmiaox@cn.fujitsu.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Ravikiran Thirumalai \u003ckiran@scalex86.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b257c14ceb1194a6181144210056d38f22127189",
      "tree": "c803925f1d5bf2237e7495d306bf43929df0c952",
      "parents": [
        "371fd7e7a56a5c136d31aa980011bd2f131c3ef5",
        "2ba3abd8186f24c7fb418927025b4e2120e3a362"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Apr 15 09:35:24 2010 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Apr 15 09:36:16 2010 +0200"
      },
      "message": "Merge branch \u0027linus\u0027 into sched/core\n\nMerge reason: merge the latest fixes, update to -rc4.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "a3a2e76c77fa22b114e421ac11dec0c56c3503fb",
      "tree": "cc67bbd8d5d364e55ea7a00d0b5ad68d5eac08ac",
      "parents": [
        "b01d0942c2b7a3026d2b7d38b5773d3d00420e06"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Tue Apr 06 14:34:42 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Apr 07 08:38:02 2010 -0700"
      },
      "message": "mm: avoid null-pointer deref in sync_mm_rss()\n\n- We weren\u0027t zeroing p-\u003erss_stat[] at fork()\n\n- Consequently sync_mm_rss() was dereferencing tsk-\u003emm for kernel\n  threads and was oopsing.\n\n- Make __sync_task_rss_stat() static, too.\n\nAddresses https://bugzilla.kernel.org/show_bug.cgi?id\u003d15648\n\n[akpm@linux-foundation.org: remove the BUG_ON(!mm-\u003erss)]\nReported-by: Troels Liebe Bentsen \u003ctlb@rapanden.dk\u003e\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\n\"Michael S. Tsirkin\" \u003cmst@redhat.com\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "32bd7eb5a7f4596c8440dd9440322fe9e686634d",
      "tree": "f1d0c0a215c1305aec0a8f407b431a975f7ad072",
      "parents": [
        "c9494727cf293ae2ec66af57547a3e79c724fec2"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Wed Mar 24 13:17:19 2010 +0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Apr 02 20:12:00 2010 +0200"
      },
      "message": "sched: Remove remaining USER_SCHED code\n\nThis is left over from commit 7c9414385e (\"sched: Remove USER_SCHED\"\")\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nAcked-by: Dhaval Giani \u003cdhaval.giani@gmail.com\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nLKML-Reference: \u003c4BA9A05F.7010407@cn.fujitsu.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "4e3eaddd142e2142c048c5052a0a9d2604fccfc6",
      "tree": "5bc45a286502e54e790c54948f22364c5afd9d89",
      "parents": [
        "8655e7e3ddec60603c4f6c14cdf642e2ba198df8",
        "b97c4bc16734a2e597dac7f91ee9eb78f4aeef9a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 13 14:43:01 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 13 14:43:01 2010 -0800"
      },
      "message": "Merge branch \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  locking: Make sparse work with inline spinlocks and rwlocks\n  x86/mce: Fix RCU lockdep splats\n  rcu: Increase RCU CPU stall timeouts if PROVE_RCU\n  ftrace: Replace read_barrier_depends() with rcu_dereference_raw()\n  rcu: Suppress RCU lockdep warnings during early boot\n  rcu, ftrace: Fix RCU lockdep splat in ftrace_perf_buf_prepare()\n  rcu: Suppress __mpol_dup() false positive from RCU lockdep\n  rcu: Make rcu_read_lock_sched_held() handle !PREEMPT\n  rcu: Add control variables to lockdep_rcu_dereference() diagnostics\n  rcu, cgroup: Relax the check in task_subsys_state() as early boot is now handled by lockdep-RCU\n  rcu: Use wrapper function instead of exporting tasklist_lock\n  sched, rcu: Fix rcu_dereference() for RCU-lockdep\n  rcu: Make task_subsys_state() RCU-lockdep checks handle boot-time use\n  rcu: Fix holdoff for accelerated GPs for last non-dynticked CPU\n  x86/gart: Unexport gart_iommu_aperture\n\nFix trivial conflicts in kernel/trace/ftrace.c\n"
    },
    {
      "commit": "f3abd4f9531becb71626bd206955d47d5ea54f06",
      "tree": "512d5d72d02f6dae87af66c7e044d597eb7e067c",
      "parents": [
        "9c03c383563f147907f1a90cf16f1e190e2f4aae"
      ],
      "author": {
        "name": "Thiago Farina",
        "email": "tfransosi@gmail.com",
        "time": "Fri Mar 05 13:42:52 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:32 2010 -0800"
      },
      "message": "kernel/exit.c: fix shadows sparse warning\n\nkernel/exit.c:1183:26: warning: symbol \u0027status\u0027 shadows an earlier one\nkernel/exit.c:1173:21: originally declared here\n\nSigned-off-by: Thiago Farina \u003ctfransosi@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "34e55232e59f7b19050267a05ff1226e5cd122a5",
      "tree": "6b94e776e87d2a2fe1ceca7c5606901575323900",
      "parents": [
        "d559db086ff5be9bcc259e5aa50bf3d881eaf1d1"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Fri Mar 05 13:41:40 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:24 2010 -0800"
      },
      "message": "mm: avoid false sharing of mm_counter\n\nConsidering the nature of per mm stats, it\u0027s the shared object among\nthreads and can be a cache-miss point in the page fault path.\n\nThis patch adds per-thread cache for mm_counter.  RSS value will be\ncounted into a struct in task_struct and synchronized with mm\u0027s one at\nevents.\n\nNow, in this patch, the event is the number of calls to handle_mm_fault.\nPer-thread value is added to mm at each 64 calls.\n\n rough estimation with small benchmark on parallel thread (2threads) shows\n [before]\n     4.5 cache-miss/faults\n [after]\n     4.0 cache-miss/faults\n Anyway, the most contended object is mmap_sem if the number of threads grows.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Minchan Kim \u003cminchan.kim@gmail.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "db1466b3e1bd1727375cdbfcbea4bcce2f860f61",
      "tree": "e56e8d7b82f8851e570d95f531ec62e4d107967a",
      "parents": [
        "0e064caf6402d1d67db4233d26beec88ca212919"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Wed Mar 03 07:46:56 2010 -0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Mar 04 11:46:14 2010 +0100"
      },
      "message": "rcu: Use wrapper function instead of exporting tasklist_lock\n\nLockdep-RCU commit d11c563d exported tasklist_lock, which is not\na good thing.  This patch instead exports a function that uses\nlockdep to check whether tasklist_lock is held.\n\nSuggested-by: Christoph Hellwig \u003chch@lst.de\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: laijs@cn.fujitsu.com\nCc: dipankar@in.ibm.com\nCc: mathieu.desnoyers@polymtl.ca\nCc: josh@joshtriplett.org\nCc: dvhltc@us.ibm.com\nCc: niv@us.ibm.com\nCc: peterz@infradead.org\nCc: rostedt@goodmis.org\nCc: Valdis.Kletnieks@vt.edu\nCc: dhowells@redhat.com\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nLKML-Reference: \u003c1267631219-8713-1-git-send-email-paulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "d11c563dd20ff35da5652c3e1c989d9e10e1d6d0",
      "tree": "b189f50de7a01d7603935d4da7e755d764dfe67e",
      "parents": [
        "a898def29e4119bc01ebe7ca97423181f4c0ea2d"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Mon Feb 22 17:04:50 2010 -0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Feb 25 10:34:26 2010 +0100"
      },
      "message": "sched: Use lockdep-based checking on rcu_dereference()\n\nUpdate the rcu_dereference() usages to take advantage of the new\nlockdep-based checking.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: laijs@cn.fujitsu.com\nCc: dipankar@in.ibm.com\nCc: mathieu.desnoyers@polymtl.ca\nCc: josh@joshtriplett.org\nCc: dvhltc@us.ibm.com\nCc: niv@us.ibm.com\nCc: peterz@infradead.org\nCc: rostedt@goodmis.org\nCc: Valdis.Kletnieks@vt.edu\nCc: dhowells@redhat.com\nLKML-Reference: \u003c1266887105-1528-6-git-send-email-paulmck@linux.vnet.ibm.com\u003e\n[ -v2: fix allmodconfig missing symbol export build failure on x86 ]\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "9cd80bbb07fcd6d4d037fad4297496d3b132ac6b",
      "tree": "322216d34b6d5ba2366f53ba0d677950c4cde766",
      "parents": [
        "0f67b0b0392ccca98459bf40b36c0037793b5f71"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Dec 17 15:27:15 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Dec 17 15:45:31 2009 -0800"
      },
      "message": "do_wait() optimization: do not place sub-threads on task_struct-\u003echildren list\n\nThanks to Roland who pointed out de_thread() issues.\n\nCurrently we add sub-threads to -\u003ereal_parent-\u003echildren list.  This buys\nnothing but slows down do_wait().\n\nWith this patch -\u003echildren contains only main threads (group leaders).\nThe only complication is that forget_original_parent() should iterate over\nsub-threads by hand, and de_thread() needs another list_replace() when it\nchanges -\u003egroup_leader.\n\nHenceforth do_wait_thread() can never see task_detached() \u0026\u0026 !EXIT_DEAD\ntasks, we can remove this check (and we can unify do_wait_thread() and\nptrace_do_wait()).\n\nThis change can confuse the optimistic search in mm_update_next_owner(),\nbut this is fixable and minor.\n\nPerhaps badness() and oom_kill_process() should be updated, but they\nshould be fixed in any case.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Ratan Nalumasu \u003crnalumasu@gmail.com\u003e\nCc: Vitaly Mayatskikh \u003cvmayatsk@redhat.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1d615482547584b9a8bb6316a58fed6ce90dd9ff",
      "tree": "21dae4b70acb3ce0bdaeeaee1dbd970be41d26e2",
      "parents": [
        "fe841226bd954fba4fd79f037a876053fe9c3217"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Tue Nov 17 14:54:03 2009 +0100"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon Dec 14 23:55:33 2009 +0100"
      },
      "message": "sched: Convert pi_lock to raw_spinlock\n\nConvert locks which cannot be sleeping locks in preempt-rt to\nraw_spinlocks.\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "5ec93d1154fd1e269162398f8e70efc7e004485d",
      "tree": "2a76835812d3502b036a7234faeaa0f6ba0356da",
      "parents": [
        "38c70b27f9502c31c1d0c29676275f7362cdb0d9"
      ],
      "author": {
        "name": "Alan Cox",
        "email": "alan@linux.intel.com",
        "time": "Mon Nov 30 13:18:45 2009 +0000"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Fri Dec 11 15:18:08 2009 -0800"
      },
      "message": "tty: Move the leader test in disassociate\n\nThere are two call points, both want to check that tty-\u003esignal-\u003eleader is\nset. Move the test into disassociate_ctty() as that will make locking\nchanges easier in a bit\n\nSigned-off-by: Alan Cox \u003calan@linux.intel.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n"
    },
    {
      "commit": "6035ccd8e9e40bb654fbfdef325902ab531679a5",
      "tree": "c1810d8a4d4ef150cdf14af72e6087dfc3f4b6e0",
      "parents": [
        "23eb3b64b5e44680c867e165fe1cd18e57fba255",
        "878eaddd05d251cefa9632c2b8046833c5eead66"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 08 08:19:16 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 08 08:19:16 2009 -0800"
      },
      "message": "Merge branch \u0027for-2.6.33\u0027 of git://git.kernel.dk/linux-2.6-block\n\n* \u0027for-2.6.33\u0027 of git://git.kernel.dk/linux-2.6-block: (113 commits)\n  cfq-iosched: Do not access cfqq after freeing it\n  block: include linux/err.h to use ERR_PTR\n  cfq-iosched: use call_rcu() instead of doing grace period stall on queue exit\n  blkio: Allow CFQ group IO scheduling even when CFQ is a module\n  blkio: Implement dynamic io controlling policy registration\n  blkio: Export some symbols from blkio as its user CFQ can be a module\n  block: Fix io_context leak after failure of clone with CLONE_IO\n  block: Fix io_context leak after clone with CLONE_IO\n  cfq-iosched: make nonrot check logic consistent\n  io controller: quick fix for blk-cgroup and modular CFQ\n  cfq-iosched: move IO controller declerations to a header file\n  cfq-iosched: fix compile problem with !CONFIG_CGROUP\n  blkio: Documentation\n  blkio: Wait on sync-noidle queue even if rq_noidle \u003d 1\n  blkio: Implement group_isolation tunable\n  blkio: Determine async workload length based on total number of queues\n  blkio: Wait for cfq queue to get backlogged if group is empty\n  blkio: Propagate cgroup weight updation to cfq groups\n  blkio: Drop the reference to queue once the task changes cgroup\n  blkio: Provide some isolation between groups\n  ...\n"
    },
    {
      "commit": "897e81bea1fcfcd2c5cdb720c9efdb25da9ff374",
      "tree": "92cf33ed2c35c1ece633f09365702f1c8e24d415",
      "parents": [
        "c3fa27d1367fac63ac8533d6f20ea851d0d70a10",
        "0cf55e1ec08bb5a22e068309e2d8ba1180ab4239"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Dec 05 15:30:49 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Dec 05 15:30:49 2009 -0800"
      },
      "message": "Merge branch \u0027sched-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027sched-core-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (35 commits)\n  sched, cputime: Introduce thread_group_times()\n  sched, cputime: Cleanups related to task_times()\n  Revert \"sched, x86: Optimize branch hint in __switch_to()\"\n  sched: Fix isolcpus boot option\n  sched: Revert 498657a478c60be092208422fefa9c7b248729c2\n  sched, time: Define nsecs_to_jiffies()\n  sched: Remove task_{u,s,g}time()\n  sched: Introduce task_times() to replace task_{u,s}time() pair\n  sched: Limit the number of scheduler debug messages\n  sched.c: Call debug_show_all_locks() when dumping all tasks\n  sched, x86: Optimize branch hint in __switch_to()\n  sched: Optimize branch hint in context_switch()\n  sched: Optimize branch hint in pick_next_task_fair()\n  sched_feat_write(): Update ppos instead of file-\u003ef_pos\n  sched: Sched_rt_periodic_timer vs cpu hotplug\n  sched, kvm: Fix race condition involving sched_in_preempt_notifers\n  sched: More generic WAKE_AFFINE vs select_idle_sibling()\n  sched: Cleanup select_task_rq_fair()\n  sched: Fix granularity of task_u/stime()\n  sched: Fix/add missing update_rq_clock() calls\n  ...\n"
    },
    {
      "commit": "b69f2292063d2caf37ca9aec7d63ded203701bf3",
      "tree": "be4acb81ea4ab7014047808ec2b2c908e8334f55",
      "parents": [
        "61cc74fbb87af6aa551a06a370590c9bc07e29d9"
      ],
      "author": {
        "name": "Louis Rilling",
        "email": "louis.rilling@kerlabs.com",
        "time": "Fri Dec 04 14:52:42 2009 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Dec 04 16:36:18 2009 +0100"
      },
      "message": "block: Fix io_context leak after failure of clone with CLONE_IO\n\nWith CLONE_IO, parent\u0027s io_context-\u003enr_tasks is incremented, but never\ndecremented whenever copy_process() fails afterwards, which prevents\nexit_io_context() from calling IO schedulers exit functions.\n\nGive a task_struct to exit_io_context(), and call exit_io_context() instead of\nput_io_context() in copy_process() cleanup path.\n\nSigned-off-by: Louis Rilling \u003clouis.rilling@kerlabs.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "0cf55e1ec08bb5a22e068309e2d8ba1180ab4239",
      "tree": "6102662a9594d51155bee11666fe8517fcbe6039",
      "parents": [
        "d99ca3b977fc5a93141304f571475c2af9e6c1c5"
      ],
      "author": {
        "name": "Hidetoshi Seto",
        "email": "seto.hidetoshi@jp.fujitsu.com",
        "time": "Wed Dec 02 17:28:07 2009 +0900"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Dec 02 17:32:40 2009 +0100"
      },
      "message": "sched, cputime: Introduce thread_group_times()\n\nThis is a real fix for problem of utime/stime values decreasing\ndescribed in the thread:\n\n   http://lkml.org/lkml/2009/11/3/522\n\nNow cputime is accounted in the following way:\n\n - {u,s}time in task_struct are increased every time when the thread\n   is interrupted by a tick (timer interrupt).\n\n - When a thread exits, its {u,s}time are added to signal-\u003e{u,s}time,\n   after adjusted by task_times().\n\n - When all threads in a thread_group exits, accumulated {u,s}time\n   (and also c{u,s}time) in signal struct are added to c{u,s}time\n   in signal struct of the group\u0027s parent.\n\nSo {u,s}time in task struct are \"raw\" tick count, while\n{u,s}time and c{u,s}time in signal struct are \"adjusted\" values.\n\nAnd accounted values are used by:\n\n - task_times(), to get cputime of a thread:\n   This function returns adjusted values that originates from raw\n   {u,s}time and scaled by sum_exec_runtime that accounted by CFS.\n\n - thread_group_cputime(), to get cputime of a thread group:\n   This function returns sum of all {u,s}time of living threads in\n   the group, plus {u,s}time in the signal struct that is sum of\n   adjusted cputimes of all exited threads belonged to the group.\n\nThe problem is the return value of thread_group_cputime(),\nbecause it is mixed sum of \"raw\" value and \"adjusted\" value:\n\n  group\u0027s {u,s}time \u003d foreach(thread){{u,s}time} + exited({u,s}time)\n\nThis misbehavior can break {u,s}time monotonicity.\nAssume that if there is a thread that have raw values greater\nthan adjusted values (e.g. interrupted by 1000Hz ticks 50 times\nbut only runs 45ms) and if it exits, cputime will decrease (e.g.\n-5ms).\n\nTo fix this, we could do:\n\n  group\u0027s {u,s}time \u003d foreach(t){task_times(t)} + exited({u,s}time)\n\nBut task_times() contains hard divisions, so applying it for\nevery thread should be avoided.\n\nThis patch fixes the above problem in the following way:\n\n - Modify thread\u0027s exit (\u003d __exit_signal()) not to use task_times().\n   It means {u,s}time in signal struct accumulates raw values instead\n   of adjusted values.  As the result it makes thread_group_cputime()\n   to return pure sum of \"raw\" values.\n\n - Introduce a new function thread_group_times(*task, *utime, *stime)\n   that converts \"raw\" values of thread_group_cputime() to \"adjusted\"\n   values, in same calculation procedure as task_times().\n\n - Modify group\u0027s exit (\u003d wait_task_zombie()) to use this introduced\n   thread_group_times().  It make c{u,s}time in signal struct to\n   have adjusted values like before this patch.\n\n - Replace some thread_group_cputime() by thread_group_times().\n   This replacements are only applied where conveys the \"adjusted\"\n   cputime to users, and where already uses task_times() near by it.\n   (i.e. sys_times(), getrusage(), and /proc/\u003cPID\u003e/stat.)\n\nThis patch have a positive side effect:\n\n - Before this patch, if a group contains many short-life threads\n   (e.g. runs 0.9ms and not interrupted by ticks), the group\u0027s\n   cputime could be invisible since thread\u0027s cputime was accumulated\n   after adjusted: imagine adjustment function as adj(ticks, runtime),\n     {adj(0, 0.9) + adj(0, 0.9) + ....} \u003d {0 + 0 + ....} \u003d 0.\n   After this patch it will not happen because the adjustment is\n   applied after accumulated.\n\nv2:\n - remove if()s, put new variables into signal_struct.\n\nSigned-off-by: Hidetoshi Seto \u003cseto.hidetoshi@jp.fujitsu.com\u003e\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Spencer Candland \u003cspencer@bluehost.com\u003e\nCc: Americo Wang \u003cxiyou.wangcong@gmail.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nLKML-Reference: \u003c4B162517.8040909@jp.fujitsu.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "d5b7c78e975302a1bab28263266c39ecb71acad4",
      "tree": "47d9a18b2e81b3f93faf89b548b50beff29dd4fe",
      "parents": [
        "d180c5bccec02612256fd8076ff3c1fac3429553"
      ],
      "author": {
        "name": "Hidetoshi Seto",
        "email": "seto.hidetoshi@jp.fujitsu.com",
        "time": "Thu Nov 26 14:49:05 2009 +0900"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Nov 26 12:59:20 2009 +0100"
      },
      "message": "sched: Remove task_{u,s,g}time()\n\nNow all task_{u,s}time() pairs are replaced by task_times().\nAnd task_gtime() is too simple to be an inline function.\n\nCleanup them all.\n\nSigned-off-by: Hidetoshi Seto \u003cseto.hidetoshi@jp.fujitsu.com\u003e\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nCc: Spencer Candland \u003cspencer@bluehost.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Americo Wang \u003cxiyou.wangcong@gmail.com\u003e\nLKML-Reference: \u003c4B0E16D1.70902@jp.fujitsu.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "d180c5bccec02612256fd8076ff3c1fac3429553",
      "tree": "1ef4a45c81531645640380965916c68bbe7f6abb",
      "parents": [
        "16bc67edeb49b531940b2ba6c183780a1b5c472d"
      ],
      "author": {
        "name": "Hidetoshi Seto",
        "email": "seto.hidetoshi@jp.fujitsu.com",
        "time": "Thu Nov 26 14:48:30 2009 +0900"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Nov 26 12:59:19 2009 +0100"
      },
      "message": "sched: Introduce task_times() to replace task_{u,s}time() pair\n\nFunctions task_{u,s}time() are called in pair in almost all\ncases.  However task_stime() is implemented to call task_utime()\nfrom its inside, so such paired calls run task_utime() twice.\n\nIt means we do heavy divisions (div_u64 + do_div) twice to get\nutime and stime which can be obtained at same time by one set\nof divisions.\n\nThis patch introduces a function task_times(*tsk, *utime,\n*stime) to retrieve utime and stime at once in better, optimized\nway.\n\nSigned-off-by: Hidetoshi Seto \u003cseto.hidetoshi@jp.fujitsu.com\u003e\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nCc: Spencer Candland \u003cspencer@bluehost.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Americo Wang \u003cxiyou.wangcong@gmail.com\u003e\nLKML-Reference: \u003c4B0E16AE.906@jp.fujitsu.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "96200591a34f8ecb98481c626125df43a2463b55",
      "tree": "314c376b01f254d04f9aaf449b1f9147ad177fa6",
      "parents": [
        "7031281e02bf951a2259849217193fb9d75a9762",
        "68efa37df779b3e04280598e8b5b3a1919b65fee"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sat Nov 21 14:07:23 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sat Nov 21 14:07:23 2009 +0100"
      },
      "message": "Merge branch \u0027tracing/hw-breakpoints\u0027 into perf/core\n\nConflicts:\n\tarch/x86/kernel/kprobes.c\n\tkernel/trace/Makefile\n\nMerge reason: hw-breakpoints perf integration is looking\n              good in testing and in reviews, plus conflicts\n              are mounting up - so merge \u0026 resolve.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "24f1e32c60c45c89a997c73395b69c8af6f0a84e",
      "tree": "4f30f16e18cb4abbcf96b3b331e6a3f01bfa26e6",
      "parents": [
        "2da3e160cb3d226d87b907fab26850d838ed8d7c"
      ],
      "author": {
        "name": "Frederic Weisbecker",
        "email": "fweisbec@gmail.com",
        "time": "Wed Sep 09 19:22:48 2009 +0200"
      },
      "committer": {
        "name": "Frederic Weisbecker",
        "email": "fweisbec@gmail.com",
        "time": "Sun Nov 08 15:34:42 2009 +0100"
      },
      "message": "hw-breakpoints: Rewrite the hw-breakpoints layer on top of perf events\n\nThis patch rebase the implementation of the breakpoints API on top of\nperf events instances.\n\nEach breakpoints are now perf events that handle the\nregister scheduling, thread/cpu attachment, etc..\n\nThe new layering is now made as follows:\n\n       ptrace       kgdb      ftrace   perf syscall\n          \\          |          /         /\n           \\         |         /         /\n                                        /\n            Core breakpoint API        /\n                                      /\n                     |               /\n                     |              /\n\n              Breakpoints perf events\n\n                     |\n                     |\n\n               Breakpoints PMU ---- Debug Register constraints handling\n                                    (Part of core breakpoint API)\n                     |\n                     |\n\n             Hardware debug registers\n\nReasons of this rewrite:\n\n- Use the centralized/optimized pmu registers scheduling,\n  implying an easier arch integration\n- More powerful register handling: perf attributes (pinned/flexible\n  events, exclusive/non-exclusive, tunable period, etc...)\n\nImpact:\n\n- New perf ABI: the hardware breakpoints counters\n- Ptrace breakpoints setting remains tricky and still needs some per\n  thread breakpoints references.\n\nTodo (in the order):\n\n- Support breakpoints perf counter events for perf tools (ie: implement\n  perf_bpcounter_event())\n- Support from perf tools\n\nChanges in v2:\n\n- Follow the perf \"event \" rename\n- The ptrace regression have been fixed (ptrace breakpoint perf events\n  weren\u0027t released when a task ended)\n- Drop the struct hw_breakpoint and store generic fields in\n  perf_event_attr.\n- Separate core and arch specific headers, drop\n  asm-generic/hw_breakpoint.h and create linux/hw_breakpoint.h\n- Use new generic len/type for breakpoint\n- Handle off case: when breakpoints api is not supported by an arch\n\nChanges in v3:\n\n- Fix broken CONFIG_KVM, we need to propagate the breakpoint api\n  changes to kvm when we exit the guest and restore the bp registers\n  to the host.\n\nChanges in v4:\n\n- Drop the hw_breakpoint_restore() stub as it is only used by KVM\n- EXPORT_SYMBOL_GPL hw_breakpoint_restore() as KVM can be built as a\n  module\n- Restore the breakpoints unconditionally on kvm guest exit:\n  TIF_DEBUG_THREAD doesn\u0027t anymore cover every cases of running\n  breakpoints and vcpu-\u003earch.switch_db_regs might not always be\n  set when the guest used debug registers.\n  (Waiting for a reliable optimization)\n\nChanges in v5:\n\n- Split-up the asm-generic/hw-breakpoint.h moving to\n  linux/hw_breakpoint.h into a separate patch\n- Optimize the breakpoints restoring while switching from kvm guest\n  to host. We only want to restore the state if we have active\n  breakpoints to the host, otherwise we don\u0027t care about messed-up\n  address registers.\n- Add asm/hw_breakpoint.h to Kbuild\n- Fix bad breakpoint type in trace_selftest.c\n\nChanges in v6:\n\n- Fix wrong header inclusion in trace.h (triggered a build\n  error with CONFIG_FTRACE_SELFTEST\n\nSigned-off-by: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Prasad \u003cprasad@linux.vnet.ibm.com\u003e\nCc: Alan Stern \u003cstern@rowland.harvard.edu\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Jan Kiszka \u003cjan.kiszka@web.de\u003e\nCc: Jiri Slaby \u003cjirislaby@gmail.com\u003e\nCc: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nCc: Avi Kivity \u003cavi@redhat.com\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: Mike Galbraith \u003cefault@gmx.de\u003e\nCc: Masami Hiramatsu \u003cmhiramat@redhat.com\u003e\nCc: Paul Mundt \u003clethal@linux-sh.org\u003e\n"
    },
    {
      "commit": "0d0df599f1f11f12d589318bacb59a50fb5c0310",
      "tree": "084ab3d1562502ad6a056aa3fd8dd748683c8c2f",
      "parents": [
        "370c28def65b3a5765192753a164403619b41d01"
      ],
      "author": {
        "name": "Christian Borntraeger",
        "email": "borntraeger@de.ibm.com",
        "time": "Mon Oct 26 16:49:34 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 29 07:39:25 2009 -0700"
      },
      "message": "connector: fix regression introduced by sid connector\n\nSince commit 02b51df1b07b4e9ca823c89284e704cadb323cd1 (proc connector: add\nevent for process becoming session leader) we have the following warning:\n\nBadness at kernel/softirq.c:143\n[...]\nKrnl PSW : 0404c00180000000 00000000001481d4 (local_bh_enable+0xb0/0xe0)\n[...]\nCall Trace:\n([\u003c000000013fe04100\u003e] 0x13fe04100)\n [\u003c000000000048a946\u003e] sk_filter+0x9a/0xd0\n [\u003c000000000049d938\u003e] netlink_broadcast+0x2c0/0x53c\n [\u003c00000000003ba9ae\u003e] cn_netlink_send+0x272/0x2b0\n [\u003c00000000003baef0\u003e] proc_sid_connector+0xc4/0xd4\n [\u003c0000000000142604\u003e] __set_special_pids+0x58/0x90\n [\u003c0000000000159938\u003e] sys_setsid+0xb4/0xd8\n [\u003c00000000001187fe\u003e] sysc_noemu+0x10/0x16\n [\u003c00000041616cb266\u003e] 0x41616cb266\n\nThe warning is\n---\u003e    WARN_ON_ONCE(in_irq() || irqs_disabled());\n\nThe network code must not be called with disabled interrupts but\nsys_setsid holds the tasklist_lock with spinlock_irq while calling the\nconnector.\n\nAfter a discussion we agreed that we can move proc_sid_connector from\n__set_special_pids to sys_setsid.\n\nWe also agreed that it is sufficient to change the check from\ntask_session(curr) !\u003d pid into err \u003e 0, since if we don\u0027t change the\nsession, this means we were already the leader and return -EPERM.\n\nOne last thing:\nThere is also daemonize(), and some people might want to get a\nnotification in that case. Since daemonize() is only needed if a user\nspace does kernel_thread this does not look important (and there seems\nto be no consensus if this connector should be called in daemonize). If\nwe really want this, we can add proc_sid_connector to daemonize() in an\nadditional patch (Scott?)\n\nSigned-off-by: Christian Borntraeger \u003cborntraeger@de.ibm.com\u003e\nCc: Scott James Remnant \u003cscott@ubuntu.com\u003e\nCc: Matt Helsley \u003cmatthltc@us.ibm.com\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Evgeniy Polyakov \u003czbr@ioremap.net\u003e\nAcked-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f579bbcd9bb8b688df03191b92c56ab8af4d6322",
      "tree": "d450f986022aab73f86f794a03c7f21ad0ece8ec",
      "parents": [
        "e80fb7e52fd305b916a671755ca31ecf8f92e94e",
        "da085681014fb43d67d9bf6d14bc068e9254bd49"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 08 12:16:35 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Oct 08 12:16:35 2009 -0700"
      },
      "message": "Merge branch \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  futex: fix requeue_pi key imbalance\n  futex: Fix typo in FUTEX_WAIT/WAKE_BITSET_PRIVATE definitions\n  rcu: Place root rcu_node structure in separate lockdep class\n  rcu: Make hot-unplugged CPU relinquish its own RCU callbacks\n  rcu: Move rcu_barrier() to rcutree\n  futex: Move exit_pi_state() call to release_mm()\n  futex: Nullify robust lists after cleanup\n  futex: Fix locking imbalance\n  panic: Fix panic message visibility by calling bust_spinlocks(0) before dying\n  rcu: Replace the rcu_barrier enum with pointer to call_rcu*() function\n  rcu: Clean up code based on review feedback from Josh Triplett, part 4\n  rcu: Clean up code based on review feedback from Josh Triplett, part 3\n  rcu: Fix rcu_lock_map build failure on CONFIG_PROVE_LOCKING\u003dy\n  rcu: Clean up code to address Ingo\u0027s checkpatch feedback\n  rcu: Clean up code based on review feedback from Josh Triplett, part 2\n  rcu: Clean up code based on review feedback from Josh Triplett\n"
    },
    {
      "commit": "322a2c100a8998158445599ea437fb556aa95b11",
      "tree": "8039af7452e0fac73f3083cb7e9c1e00d3007811",
      "parents": [
        "fc6b177dee33365ccb29fe6d2092223cf8d679f9"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon Oct 05 18:18:03 2009 +0200"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Tue Oct 06 17:00:01 2009 +0200"
      },
      "message": "futex: Move exit_pi_state() call to release_mm()\n\nexit_pi_state() is called from do_exit() but not from do_execve().\nMove it to release_mm() so it gets called from do_execve() as well.\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nLKML-Reference: \u003cnew-submission\u003e\nCc: stable@kernel.org\nCc: Anirban Sinha \u003cani@anirban.org\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\n\n"
    },
    {
      "commit": "801460d0cf5c5288153b722565773059b0f44348",
      "tree": "ff2542903572a546ac59e92f295e9a18e718afa0",
      "parents": [
        "2fa4341074cd02fb39aa23410740764948755635"
      ],
      "author": {
        "name": "Hiroshi Shimamoto",
        "email": "h-shimamoto@ct.jp.nec.com",
        "time": "Wed Sep 23 15:57:41 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:21:05 2009 -0700"
      },
      "message": "task_struct cleanup: move binfmt field to mm_struct\n\nBecause the binfmt is not different between threads in the same process,\nit can be moved from task_struct to mm_struct.  And binfmt moudle is\nhandled per mm_struct instead of task_struct.\n\nSigned-off-by: Hiroshi Shimamoto \u003ch-shimamoto@ct.jp.nec.com\u003e\nAcked-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b6fe2d117e98805ee76352e6468f87d494a97292",
      "tree": "3de99eb7652647000b53bca1f6ea740c926ccfca",
      "parents": [
        "dfe16dfa4ac178d9a10b489a73d535c6976e48d2"
      ],
      "author": {
        "name": "Vitaly Mayatskikh",
        "email": "v.mayatskih@gmail.com",
        "time": "Wed Sep 23 15:56:52 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:21:00 2009 -0700"
      },
      "message": "wait_noreap_copyout(): check for -\u003ewo_info !\u003d NULL\n\nCurrent behaviour of sys_waitid() looks odd.  If user passes infop \u003d\u003d\nNULL, sys_waitid() returns success.  When user additionally specifies flag\nWNOWAIT, sys_waitid() returns -EFAULT on the same conditions.  When user\ncombines WNOWAIT with WCONTINUED, sys_waitid() again returns success.\n\nThis patch adds check for -\u003ewo_info in wait_noreap_copyout().\n\nUser-visible change: starting from this commit, sys_waitid() always checks\ninfop !\u003d NULL and does not fail if it is NULL.\n\nSigned-off-by: Vitaly Mayatskikh \u003cv.mayatskih@gmail.com\u003e\nReviewed-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dfe16dfa4ac178d9a10b489a73d535c6976e48d2",
      "tree": "0ebd7bddf7e99915baed4955faeed2af5bba4203",
      "parents": [
        "b6e763f07fba6243d2a553ed9a4f3e10a789932a"
      ],
      "author": {
        "name": "Vitaly Mayatskikh",
        "email": "v.mayatskih@gmail.com",
        "time": "Wed Sep 23 15:56:51 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:21:00 2009 -0700"
      },
      "message": "do_wait: fix sys_waitid()-specific behaviour\n\ndo_wait() checks -\u003ewo_info to figure out who is the caller.  If it\u0027s not\nNULL the caller should be sys_waitid(), in that case do_wait() fixes up\nthe retval or zeros -\u003ewo_info, depending on retval from underlying\nfunction.\n\nThis is bug: user can pass -\u003ewo_info \u003d\u003d NULL and sys_waitid() will return\nincorrect value.\n\nman 2 waitid says:\n\n\twaitid(): returns 0 on success\n\nTest-case:\n\n\tint main(void)\n\t{\n\t\tif (fork())\n\t\t\tassert(waitid(P_ALL, 0, NULL, WEXITED) \u003d\u003d 0);\n\n\t\treturn 0;\n\t}\n\nResult:\n\n\tAssertion `waitid(P_ALL, 0, ((void *)0), 4) \u003d\u003d 0\u0027 failed.\n\nMove that code to sys_waitid().\n\nUser-visible change: sys_waitid() will return 0 on success, either\ninfop is set or not.\n\nNote, there\u0027s another bug in wait_noreap_copyout() which affects\nreturn value of sys_waitid(). It will be fixed in next patch.\n\nSigned-off-by: Vitaly Mayatskikh \u003cv.mayatskih@gmail.com\u003e\nReviewed-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b6e763f07fba6243d2a553ed9a4f3e10a789932a",
      "tree": "10f2f4c8dc44400eb8e1ac1d4875b517f02f4f17",
      "parents": [
        "989264f4645c183331a1279d513f4b1ddc06e1f5"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Sep 23 15:56:50 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:21:00 2009 -0700"
      },
      "message": "wait_consider_task: kill \"parent\" argument\n\nKill the unused \"parent\" argument in wait_consider_task(), it was never used.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Ratan Nalumasu \u003crnalumasu@gmail.com\u003e\nCc: Vitaly Mayatskikh \u003cvmayatsk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "989264f4645c183331a1279d513f4b1ddc06e1f5",
      "tree": "44dc1d6ae0ba66229a6b9e85ac22a3edc87a4b8d",
      "parents": [
        "5c01ba49e6647d86bc7576105f82027200d1f303"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Sep 23 15:56:49 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:21:00 2009 -0700"
      },
      "message": "do_wait-wakeup-optimization: simplify task_pid_type()\n\ntask_pid_type() is only used by eligible_pid() which has to check wo_type\n!\u003d PIDTYPE_MAX anyway.  Remove this check from task_pid_type() and factor\nout -\u003epids[type] access, this shrinks .text a bit and simplifies the code.\n\nThe matches the behaviour of other similar helpers, say get_task_pid().\nThe caller must ensure that pid_type is valid, not the callee.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5c01ba49e6647d86bc7576105f82027200d1f303",
      "tree": "700aa5dbda7c726e8b60803225587a1bc4fdbdb5",
      "parents": [
        "b4fe51823d797d6959b2eee7868023e61606daa9"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Sep 23 15:56:48 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:21:00 2009 -0700"
      },
      "message": "do_wait-wakeup-optimization: fix child_wait_callback()-\u003eeligible_child() usage\n\nchild_wait_callback()-\u003eeligible_child() is not right, we can miss the\nwakeup if the task was detached before __wake_up_parent() and the caller\nof do_wait() didn\u0027t use __WALL.\n\nMove -\u003ewo_pid checks from eligible_child() to the new helper,\neligible_pid(), and change child_wait_callback() to use it instead of\neligible_child().\n\nNote: actually I think it would be better to fix the __WCLONE check in\neligible_child(), it doesn\u0027t look exactly right.  But it is not clear what\nis the supposed behaviour, and any change is user-visible.\n\nReported-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nTested-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b4fe51823d797d6959b2eee7868023e61606daa9",
      "tree": "e078feaa1cdfbbdc98b5f5f668fecc37c1907b2e",
      "parents": [
        "0b7570e77f7c3abd43107dabc47ea89daf9a1cba"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Sep 23 15:56:47 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:21:00 2009 -0700"
      },
      "message": "do_wait() wakeup optimization: child_wait_callback: check __WNOTHREAD case\n\nSuggested by Roland.\n\ndo_wait(__WNOTHREAD) can only succeed if the caller is either ptracer, or\nit is -\u003ereal_parent and the child is not traced. IOW, caller \u003d\u003d p-\u003eparent\notherwise we should not wake up.\n\nChange child_wait_callback() to check this. Ratan reports the workload with\nCPU load \u003e99% caused by unnecessary wakeups, should be fixed by this patch.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Ratan Nalumasu \u003crnalumasu@gmail.com\u003e\nCc: Vitaly Mayatskikh \u003cvmayatsk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "0b7570e77f7c3abd43107dabc47ea89daf9a1cba",
      "tree": "8dd93b4a189b4e98384d4470a289ecfb7818cc26",
      "parents": [
        "a2322e1d272938d192d8c24cdacf57c0c7a2683f"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Sep 23 15:56:46 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:20:59 2009 -0700"
      },
      "message": "do_wait() wakeup optimization: change __wake_up_parent() to use filtered wakeup\n\nRatan Nalumasu reported that in a process with many threads doing\nunnecessary wakeups.  Every waiting thread in the process wakes up to loop\nthrough the children and see that the only ones it cares about are still\nnot ready.\n\nNow that we have struct wait_opts we can change do_wait/__wake_up_parent\nto use filtered wakeups.\n\nWe can make child_wait_callback() more clever later, right now it only\nchecks eligible_child().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Ratan Nalumasu \u003crnalumasu@gmail.com\u003e\nCc: Vitaly Mayatskikh \u003cvmayatsk@redhat.com\u003e\nAcked-by: James Morris \u003cjmorris@namei.org\u003e\nTested-by: Valdis Kletnieks \u003cvaldis.kletnieks@vt.edu\u003e\nAcked-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a2322e1d272938d192d8c24cdacf57c0c7a2683f",
      "tree": "f53bbed32d44a190df42cddc9f3635371272e329",
      "parents": [
        "a7f0765edfd53aed09cb7b0e15863688b39447de"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Sep 23 15:56:45 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:20:59 2009 -0700"
      },
      "message": "do_wait() wakeup optimization: shift security_task_wait() from eligible_child() to wait_consider_task()\n\nPreparation, no functional changes.\n\neligible_child() has a single caller, wait_consider_task(). We can move\nsecurity_task_wait() out from eligible_child(), this allows us to use it\nfor filtered wake_up().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Ratan Nalumasu \u003crnalumasu@gmail.com\u003e\nCc: Vitaly Mayatskikh \u003cvmayatsk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a7f0765edfd53aed09cb7b0e15863688b39447de",
      "tree": "c89adfe418f9988ad4044e0f22827458bdf6b155",
      "parents": [
        "1dd3a27326d307952f8ad2499478c84dc7311517"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Sep 23 15:56:44 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 24 07:20:59 2009 -0700"
      },
      "message": "ptrace: __ptrace_detach: do __wake_up_parent() if we reap the tracee\n\nThe bug is old, it wasn\u0027t cause by recent changes.\n\nTest case:\n\n\tstatic void *tfunc(void *arg)\n\t{\n\t\tint pid \u003d (long)arg;\n\n\t\tassert(ptrace(PTRACE_ATTACH, pid, NULL, NULL) \u003d\u003d 0);\n\t\tkill(pid, SIGKILL);\n\n\t\tsleep(1);\n\t\treturn NULL;\n\t}\n\n\tint main(void)\n\t{\n\t\tpthread_t th;\n\t\tlong pid \u003d fork();\n\n\t\tif (!pid)\n\t\t\tpause();\n\n\t\tsignal(SIGCHLD, SIG_IGN);\n\t\tassert(pthread_create(\u0026th, NULL, tfunc, (void*)pid) \u003d\u003d 0);\n\n\t\tint r \u003d waitpid(-1, NULL, __WNOTHREAD);\n\t\tprintf(\"waitpid: %d %m\\n\", r);\n\n\t\treturn 0;\n\t}\n\nBefore the patch this program hangs, after this patch waitpid() correctly\nfails with errno \u003d\u003d -ECHILD.\n\nThe problem is, __ptrace_detach() reaps the EXIT_ZOMBIE tracee if its\n-\u003ereal_parent is our sub-thread and we ignore SIGCHLD.  But in this case\nwe should wake up other threads which can sleep in do_wait().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Vitaly Mayatskikh \u003cvmayatsk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1f10206cf8e945220f7220a809d8bfc15c21f9a5",
      "tree": "4f2c48ccf9cc52dad9610df54e301e631a351288",
      "parents": [
        "b28cfd2c0616e1b42acc6ee3c77ef6cc3873c510"
      ],
      "author": {
        "name": "Jiri Pirko",
        "email": "jpirko@redhat.com",
        "time": "Tue Sep 22 16:44:10 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Sep 23 07:39:30 2009 -0700"
      },
      "message": "getrusage: fill ru_maxrss value\n\nMake -\u003eru_maxrss value in struct rusage filled accordingly to rss hiwater\nmark.  This struct is filled as a parameter to getrusage syscall.\n-\u003eru_maxrss value is set to KBs which is the way it is done in BSD\nsystems.  /usr/bin/time (gnu time) application converts -\u003eru_maxrss to KBs\nwhich seems to be incorrect behavior.  Maintainer of this util was\nnotified by me with the patch which corrects it and cc\u0027ed.\n\nTo make this happen we extend struct signal_struct by two fields.  The\nfirst one is -\u003emaxrss which we use to store rss hiwater of the task.  The\nsecond one is -\u003ecmaxrss which we use to store highest rss hiwater of all\ntask childs.  These values are used in k_getrusage() to actually fill\n-\u003eru_maxrss.  k_getrusage() uses current rss hiwater value directly if mm\nstruct exists.\n\nNote:\nexec() clear mm-\u003ehiwater_rss, but doesn\u0027t clear sig-\u003emaxrss.\nit is intetionally behavior. *BSD getrusage have exec() inheriting.\n\ntest programs\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\ngetrusage.c\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n #include \u003cstdio.h\u003e\n #include \u003cstdlib.h\u003e\n #include \u003cstring.h\u003e\n #include \u003csys/types.h\u003e\n #include \u003csys/time.h\u003e\n #include \u003csys/resource.h\u003e\n #include \u003csys/types.h\u003e\n #include \u003csys/wait.h\u003e\n #include \u003cunistd.h\u003e\n #include \u003csignal.h\u003e\n #include \u003csys/mman.h\u003e\n\n #include \"common.h\"\n\n #define err(str) perror(str), exit(1)\n\nint main(int argc, char** argv)\n{\n\tint status;\n\n\tprintf(\"allocate 100MB\\n\");\n\tconsume(100);\n\n\tprintf(\"testcase1: fork inherit? \\n\");\n\tprintf(\"  expect: initial.self ~\u003d child.self\\n\");\n\tshow_rusage(\"initial\");\n\tif (__fork()) {\n\t\twait(\u0026status);\n\t} else {\n\t\tshow_rusage(\"fork child\");\n\t\t_exit(0);\n\t}\n\tprintf(\"\\n\");\n\n\tprintf(\"testcase2: fork inherit? (cont.) \\n\");\n\tprintf(\"  expect: initial.children ~\u003d 100MB, but child.children \u003d 0\\n\");\n\tshow_rusage(\"initial\");\n\tif (__fork()) {\n\t\twait(\u0026status);\n\t} else {\n\t\tshow_rusage(\"child\");\n\t\t_exit(0);\n\t}\n\tprintf(\"\\n\");\n\n\tprintf(\"testcase3: fork + malloc \\n\");\n\tprintf(\"  expect: child.self ~\u003d initial.self + 50MB\\n\");\n\tshow_rusage(\"initial\");\n\tif (__fork()) {\n\t\twait(\u0026status);\n\t} else {\n\t\tprintf(\"allocate +50MB\\n\");\n\t\tconsume(50);\n\t\tshow_rusage(\"fork child\");\n\t\t_exit(0);\n\t}\n\tprintf(\"\\n\");\n\n\tprintf(\"testcase4: grandchild maxrss\\n\");\n\tprintf(\"  expect: post_wait.children ~\u003d 300MB\\n\");\n\tshow_rusage(\"initial\");\n\tif (__fork()) {\n\t\twait(\u0026status);\n\t\tshow_rusage(\"post_wait\");\n\t} else {\n\t\tsystem(\"./child -n 0 -g 300\");\n\t\t_exit(0);\n\t}\n\tprintf(\"\\n\");\n\n\tprintf(\"testcase5: zombie\\n\");\n\tprintf(\"  expect: pre_wait ~\u003d initial, IOW the zombie process is not accounted.\\n\");\n\tprintf(\"          post_wait ~\u003d 400MB, IOW wait() collect child\u0027s max_rss. \\n\");\n\tshow_rusage(\"initial\");\n\tif (__fork()) {\n\t\tsleep(1); /* children become zombie */\n\t\tshow_rusage(\"pre_wait\");\n\t\twait(\u0026status);\n\t\tshow_rusage(\"post_wait\");\n\t} else {\n\t\tsystem(\"./child -n 400\");\n\t\t_exit(0);\n\t}\n\tprintf(\"\\n\");\n\n\tprintf(\"testcase6: SIG_IGN\\n\");\n\tprintf(\"  expect: initial ~\u003d after_zombie (child\u0027s 500MB alloc should be ignored).\\n\");\n\tshow_rusage(\"initial\");\n\tsignal(SIGCHLD, SIG_IGN);\n\tif (__fork()) {\n\t\tsleep(1); /* children become zombie */\n\t\tshow_rusage(\"after_zombie\");\n\t} else {\n\t\tsystem(\"./child -n 500\");\n\t\t_exit(0);\n\t}\n\tprintf(\"\\n\");\n\tsignal(SIGCHLD, SIG_DFL);\n\n\tprintf(\"testcase7: exec (without fork) \\n\");\n\tprintf(\"  expect: initial ~\u003d exec \\n\");\n\tshow_rusage(\"initial\");\n\texecl(\"./child\", \"child\", \"-v\", NULL);\n\n\treturn 0;\n}\n\nchild.c\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n #include \u003csys/types.h\u003e\n #include \u003cunistd.h\u003e\n #include \u003csys/types.h\u003e\n #include \u003csys/wait.h\u003e\n #include \u003cstdio.h\u003e\n #include \u003cstdlib.h\u003e\n #include \u003cstring.h\u003e\n #include \u003csys/types.h\u003e\n #include \u003csys/time.h\u003e\n #include \u003csys/resource.h\u003e\n\n #include \"common.h\"\n\nint main(int argc, char** argv)\n{\n\tint status;\n\tint c;\n\tlong consume_size \u003d 0;\n\tlong grandchild_consume_size \u003d 0;\n\tint show \u003d 0;\n\n\twhile ((c \u003d getopt(argc, argv, \"n:g:v\")) !\u003d -1) {\n\t\tswitch (c) {\n\t\tcase \u0027n\u0027:\n\t\t\tconsume_size \u003d atol(optarg);\n\t\t\tbreak;\n\t\tcase \u0027v\u0027:\n\t\t\tshow \u003d 1;\n\t\t\tbreak;\n\t\tcase \u0027g\u0027:\n\n\t\t\tgrandchild_consume_size \u003d atol(optarg);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (show)\n\t\tshow_rusage(\"exec\");\n\n\tif (consume_size) {\n\t\tprintf(\"child alloc %ldMB\\n\", consume_size);\n\t\tconsume(consume_size);\n\t}\n\n\tif (grandchild_consume_size) {\n\t\tif (fork()) {\n\t\t\twait(\u0026status);\n\t\t} else {\n\t\t\tprintf(\"grandchild alloc %ldMB\\n\", grandchild_consume_size);\n\t\t\tconsume(grandchild_consume_size);\n\n\t\t\texit(0);\n\t\t}\n\t}\n\n\treturn 0;\n}\n\ncommon.c\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n #include \u003cstdio.h\u003e\n #include \u003cstdlib.h\u003e\n #include \u003cstring.h\u003e\n #include \u003csys/types.h\u003e\n #include \u003csys/time.h\u003e\n #include \u003csys/resource.h\u003e\n #include \u003csys/types.h\u003e\n #include \u003csys/wait.h\u003e\n #include \u003cunistd.h\u003e\n #include \u003csignal.h\u003e\n #include \u003csys/mman.h\u003e\n\n #include \"common.h\"\n #define err(str) perror(str), exit(1)\n\nvoid show_rusage(char *prefix)\n{\n    \tint err, err2;\n    \tstruct rusage rusage_self;\n    \tstruct rusage rusage_children;\n\n    \tprintf(\"%s: \", prefix);\n    \terr \u003d getrusage(RUSAGE_SELF, \u0026rusage_self);\n    \tif (!err)\n    \t\tprintf(\"self %ld \", rusage_self.ru_maxrss);\n    \terr2 \u003d getrusage(RUSAGE_CHILDREN, \u0026rusage_children);\n    \tif (!err2)\n    \t\tprintf(\"children %ld \", rusage_children.ru_maxrss);\n\n    \tprintf(\"\\n\");\n}\n\n/* Some buggy OS need this worthless CPU waste. */\nvoid make_pagefault(void)\n{\n\tvoid *addr;\n\tint size \u003d getpagesize();\n\tint i;\n\n\tfor (i\u003d0; i\u003c1000; i++) {\n\t\taddr \u003d mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);\n\t\tif (addr \u003d\u003d MAP_FAILED)\n\t\t\terr(\"make_pagefault\");\n\t\tmemset(addr, 0, size);\n\t\tmunmap(addr, size);\n\t}\n}\n\nvoid consume(int mega)\n{\n    \tsize_t sz \u003d mega * 1024 * 1024;\n    \tvoid *ptr;\n\n    \tptr \u003d malloc(sz);\n    \tmemset(ptr, 0, sz);\n\tmake_pagefault();\n}\n\npid_t __fork(void)\n{\n\tpid_t pid;\n\n\tpid \u003d fork();\n\tmake_pagefault();\n\n\treturn pid;\n}\n\ncommon.h\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nvoid show_rusage(char *prefix);\nvoid make_pagefault(void);\nvoid consume(int mega);\npid_t __fork(void);\n\nFreeBSD result (expected result)\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nallocate 100MB\ntestcase1: fork inherit?\n  expect: initial.self ~\u003d child.self\ninitial: self 103492 children 0\nfork child: self 103540 children 0\n\ntestcase2: fork inherit? (cont.)\n  expect: initial.children ~\u003d 100MB, but child.children \u003d 0\ninitial: self 103540 children 103540\nchild: self 103564 children 0\n\ntestcase3: fork + malloc\n  expect: child.self ~\u003d initial.self + 50MB\ninitial: self 103564 children 103564\nallocate +50MB\nfork child: self 154860 children 0\n\ntestcase4: grandchild maxrss\n  expect: post_wait.children ~\u003d 300MB\ninitial: self 103564 children 154860\ngrandchild alloc 300MB\npost_wait: self 103564 children 308720\n\ntestcase5: zombie\n  expect: pre_wait ~\u003d initial, IOW the zombie process is not accounted.\n          post_wait ~\u003d 400MB, IOW wait() collect child\u0027s max_rss.\ninitial: self 103564 children 308720\nchild alloc 400MB\npre_wait: self 103564 children 308720\npost_wait: self 103564 children 411312\n\ntestcase6: SIG_IGN\n  expect: initial ~\u003d after_zombie (child\u0027s 500MB alloc should be ignored).\ninitial: self 103564 children 411312\nchild alloc 500MB\nafter_zombie: self 103624 children 411312\n\ntestcase7: exec (without fork)\n  expect: initial ~\u003d exec\ninitial: self 103624 children 411312\nexec: self 103624 children 411312\n\nLinux result (actual test result)\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nallocate 100MB\ntestcase1: fork inherit?\n  expect: initial.self ~\u003d child.self\ninitial: self 102848 children 0\nfork child: self 102572 children 0\n\ntestcase2: fork inherit? (cont.)\n  expect: initial.children ~\u003d 100MB, but child.children \u003d 0\ninitial: self 102876 children 102644\nchild: self 102572 children 0\n\ntestcase3: fork + malloc\n  expect: child.self ~\u003d initial.self + 50MB\ninitial: self 102876 children 102644\nallocate +50MB\nfork child: self 153804 children 0\n\ntestcase4: grandchild maxrss\n  expect: post_wait.children ~\u003d 300MB\ninitial: self 102876 children 153864\ngrandchild alloc 300MB\npost_wait: self 102876 children 307536\n\ntestcase5: zombie\n  expect: pre_wait ~\u003d initial, IOW the zombie process is not accounted.\n          post_wait ~\u003d 400MB, IOW wait() collect child\u0027s max_rss.\ninitial: self 102876 children 307536\nchild alloc 400MB\npre_wait: self 102876 children 307536\npost_wait: self 102876 children 410076\n\ntestcase6: SIG_IGN\n  expect: initial ~\u003d after_zombie (child\u0027s 500MB alloc should be ignored).\ninitial: self 102876 children 410076\nchild alloc 500MB\nafter_zombie: self 102880 children 410076\n\ntestcase7: exec (without fork)\n  expect: initial ~\u003d exec\ninitial: self 102880 children 410076\nexec: self 102880 children 410076\n\nSigned-off-by: Jiri Pirko \u003cjpirko@redhat.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Hugh Dickins \u003chugh.dickins@tiscali.co.uk\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "02b51df1b07b4e9ca823c89284e704cadb323cd1",
      "tree": "c68de4809f261d742f597c686826cdc9d047fb4a",
      "parents": [
        "88e9d34c727883d7d6f02cf1475b3ec98b8480c7"
      ],
      "author": {
        "name": "Scott James Remnant",
        "email": "scott@ubuntu.com",
        "time": "Tue Sep 22 16:43:44 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Sep 23 07:39:29 2009 -0700"
      },
      "message": "proc connector: add event for process becoming session leader\n\nThe act of a process becoming a session leader is a useful signal to a\nsupervising init daemon such as Upstart.\n\nWhile a daemon will normally do this as part of the process of becoming a\ndaemon, it is rare for its children to do so.  When the children do, it is\nnearly always a sign that the child should be considered detached from the\nparent and not supervised along with it.\n\nThe poster-child example is OpenSSH; the per-login children call setsid()\nso that they may control the pty connected to them.  If the primary daemon\ndies or is restarted, we do not want to consider the per-login children\nand want to respawn the primary daemon without killing the children.\n\nThis patch adds a new PROC_SID_EVENT and associated structure to the\nproc_event event_data union, it arranges for this to be emitted when the\nspecial PIDTYPE_SID pid is set.\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Scott James Remnant \u003cscott@ubuntu.com\u003e\nAcked-by: Matt Helsley \u003cmatthltc@us.ibm.com\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Evgeniy Polyakov \u003cjohnpol@2ka.mipt.ru\u003e\nAcked-by: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "cdd6c482c9ff9c55475ee7392ec8f672eddb7be6",
      "tree": "81f98a3ab46c589792057fe2392c1e10f8ad7893",
      "parents": [
        "dfc65094d0313cc48969fa60bcf33d693aeb05a7"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Sep 21 12:02:48 2009 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Sep 21 14:28:04 2009 +0200"
      },
      "message": "perf: Do the big rename: Performance Counters -\u003e Performance Events\n\nBye-bye Performance Counters, welcome Performance Events!\n\nIn the past few months the perfcounters subsystem has grown out its\ninitial role of counting hardware events, and has become (and is\nbecoming) a much broader generic event enumeration, reporting, logging,\nmonitoring, analysis facility.\n\nNaming its core object \u0027perf_counter\u0027 and naming the subsystem\n\u0027perfcounters\u0027 has become more and more of a misnomer. With pending\ncode like hw-breakpoints support the \u0027counter\u0027 name is less and\nless appropriate.\n\nAll in one, we\u0027ve decided to rename the subsystem to \u0027performance\nevents\u0027 and to propagate this rename through all fields, variables\nand API names. (in an ABI compatible fashion)\n\nThe word \u0027event\u0027 is also a bit shorter than \u0027counter\u0027 - which makes\nit slightly more convenient to write/handle as well.\n\nThanks goes to Stephane Eranian who first observed this misnomer and\nsuggested a rename.\n\nUser-space tooling and ABI compatibility is not affected - this patch\nshould be function-invariant. (Also, defconfigs were not touched to\nkeep the size down.)\n\nThis patch has been generated via the following script:\n\n  FILES\u003d$(find * -type f | grep -vE \u0027oprofile|[^K]config\u0027)\n\n  sed -i \\\n    -e \u0027s/PERF_EVENT_/PERF_RECORD_/g\u0027 \\\n    -e \u0027s/PERF_COUNTER/PERF_EVENT/g\u0027 \\\n    -e \u0027s/perf_counter/perf_event/g\u0027 \\\n    -e \u0027s/nb_counters/nb_events/g\u0027 \\\n    -e \u0027s/swcounter/swevent/g\u0027 \\\n    -e \u0027s/tpcounter_event/tp_event/g\u0027 \\\n    $FILES\n\n  for N in $(find . -name perf_counter.[ch]); do\n    M\u003d$(echo $N | sed \u0027s/perf_counter/perf_event/g\u0027)\n    mv $N $M\n  done\n\n  FILES\u003d$(find . -name perf_event.*)\n\n  sed -i \\\n    -e \u0027s/COUNTER_MASK/REG_MASK/g\u0027 \\\n    -e \u0027s/COUNTER/EVENT/g\u0027 \\\n    -e \u0027s/\\\u003cevent\\\u003e/event_id/g\u0027 \\\n    -e \u0027s/counter/event/g\u0027 \\\n    -e \u0027s/Counter/Event/g\u0027 \\\n    $FILES\n\n... to keep it as correct as possible. This script can also be\nused by anyone who has pending perfcounters patches - it converts\na Linux kernel tree over to the new naming. We tried to time this\nchange to the point in time where the amount of pending patches\nis the smallest: the end of the merge window.\n\nNamespace clashes were fixed up in a preparatory patch - and some\nstylistic fallout will be fixed up in a subsequent patch.\n\n( NOTE: \u0027counters\u0027 are still the proper terminology when we deal\n  with hardware registers - and these sed scripts are a bit\n  over-eager in renaming them. I\u0027ve undone some of that, but\n  in case there\u0027s something left where \u0027counter\u0027 would be\n  better than \u0027event\u0027 we can undo that on an individual basis\n  instead of touching an otherwise nicely automated patch. )\n\nSuggested-by: Stephane Eranian \u003ceranian@google.com\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Paul Mackerras \u003cpaulus@samba.org\u003e\nReviewed-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nCc: Mike Galbraith \u003cefault@gmx.de\u003e\nCc: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: Kyle McMartin \u003ckyle@mcmartin.ca\u003e\nCc: Martin Schwidefsky \u003cschwidefsky@de.ibm.com\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nCc: \u003clinux-arch@vger.kernel.org\u003e\nLKML-Reference: \u003cnew-submission\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "eee2775d9924b22643bd89b2e568cc5eed7e8a04",
      "tree": "095ad7851895c5d39596f3ff7ee1e078235a2501",
      "parents": [
        "53e16fbd30005905168d9b75555fdc7e0a2eac58",
        "7db905e636f08ea5bc9825c1f73d77802e8ccad5"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Sep 11 13:20:18 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Sep 11 13:20:18 2009 -0700"
      },
      "message": "Merge branch \u0027core-rcu-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027core-rcu-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (28 commits)\n  rcu: Move end of special early-boot RCU operation earlier\n  rcu: Changes from reviews: avoid casts, fix/add warnings, improve comments\n  rcu: Create rcutree plugins to handle hotplug CPU for multi-level trees\n  rcu: Remove lockdep annotations from RCU\u0027s _notrace() API members\n  rcu: Add #ifdef to suppress __rcu_offline_cpu() warning in !HOTPLUG_CPU builds\n  rcu: Add CPU-offline processing for single-node configurations\n  rcu: Add \"notrace\" to RCU function headers used by ftrace\n  rcu: Remove CONFIG_PREEMPT_RCU\n  rcu: Merge preemptable-RCU functionality into hierarchical RCU\n  rcu: Simplify rcu_pending()/rcu_check_callbacks() API\n  rcu: Use debugfs_remove_recursive() simplify code.\n  rcu: Merge per-RCU-flavor initialization into pre-existing macro\n  rcu: Fix online/offline indication for rcudata.csv trace file\n  rcu: Consolidate sparse and lockdep declarations in include/linux/rcupdate.h\n  rcu: Renamings to increase RCU clarity\n  rcu: Move private definitions from include/linux/rcutree.h to kernel/rcutree.h\n  rcu: Expunge lingering references to CONFIG_CLASSIC_RCU, optimize on !SMP\n  rcu: Delay rcu_barrier() wait until beginning of next CPU-hotunplug operation.\n  rcu: Fix typo in rcu_irq_exit() comment header\n  rcu: Make rcupreempt_trace.c look at offline CPUs\n  ...\n"
    },
    {
      "commit": "e0e817392b9acf2c98d3be80c233dddb1b52003d",
      "tree": "ee680c020039313c9f9c40ab3542bb30a7363381",
      "parents": [
        "ed6d76e4c32de0c2ad5f1d572b948ef49e465176"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Sep 02 09:13:40 2009 +0100"
      },
      "committer": {
        "name": "James Morris",
        "email": "jmorris@namei.org",
        "time": "Wed Sep 02 21:29:01 2009 +1000"
      },
      "message": "CRED: Add some configurable debugging [try #6]\n\nAdd a config option (CONFIG_DEBUG_CREDENTIALS) to turn on some debug checking\nfor credential management.  The additional code keeps track of the number of\npointers from task_structs to any given cred struct, and checks to see that\nthis number never exceeds the usage count of the cred struct (which includes\nall references, not just those from task_structs).\n\nFurthermore, if SELinux is enabled, the code also checks that the security\npointer in the cred struct is never seen to be invalid.\n\nThis attempts to catch the bug whereby inode_has_perm() faults in an nfsd\nkernel thread on seeing cred-\u003esecurity be a NULL pointer (it appears that the\ncredential struct has been previously released):\n\n\thttp://www.kerneloops.org/oops.php?number\u003d252883\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nSigned-off-by: James Morris \u003cjmorris@namei.org\u003e\n"
    },
    {
      "commit": "f41d911f8c49a5d65c86504c19e8204bb605c4fd",
      "tree": "59bcd3048652ef290b3e19d2904409afd5c90eb3",
      "parents": [
        "a157229cabd6dd8cfa82525fc9bf730c94cc9ac2"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Sat Aug 22 13:56:52 2009 -0700"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sun Aug 23 10:32:40 2009 +0200"
      },
      "message": "rcu: Merge preemptable-RCU functionality into hierarchical RCU\n\nCreate a kernel/rcutree_plugin.h file that contains definitions\nfor preemptable RCU (or, under the #else branch of the #ifdef,\nempty definitions for the classic non-preemptable semantics).\nThese definitions fit into plugins defined in kernel/rcutree.c\nfor this purpose.\n\nThis variant of preemptable RCU uses a new algorithm whose\nread-side expense is roughly that of classic hierarchical RCU\nunder CONFIG_PREEMPT. This new algorithm\u0027s update-side expense\nis similar to that of classic hierarchical RCU, and, in absence\nof read-side preemption or blocking, is exactly that of classic\nhierarchical RCU.  Perhaps more important, this new algorithm\nhas a much simpler implementation, saving well over 1,000 lines\nof code compared to mainline\u0027s implementation of preemptable\nRCU, which will hopefully be retired in favor of this new\nalgorithm.\n\nThe simplifications are obtained by maintaining per-task\nnesting state for running tasks, and using a simple\nlock-protected algorithm to handle accounting when tasks block\nwithin RCU read-side critical sections, making use of lessons\nlearned while creating numerous user-level RCU implementations\nover the past 18 months.\n\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: laijs@cn.fujitsu.com\nCc: dipankar@in.ibm.com\nCc: akpm@linux-foundation.org\nCc: mathieu.desnoyers@polymtl.ca\nCc: josht@linux.vnet.ibm.com\nCc: dvhltc@us.ibm.com\nCc: niv@us.ibm.com\nCc: peterz@infradead.org\nCc: rostedt@goodmis.org\nLKML-Reference: \u003c12509746134003-git-send-email-\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "b43f3cbd21ffbd719fd4fa6642bfe6af255ded34",
      "tree": "f09372f7aa3057a4cca32d5c7fc19032bd7cda5a",
      "parents": [
        "622f8061a68d3f7a576c20a47b7f3bae7c8cfbef"
      ],
      "author": {
        "name": "Alexey Dobriyan",
        "email": "adobriyan@gmail.com",
        "time": "Wed Jul 08 01:54:37 2009 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Jul 08 09:31:56 2009 -0700"
      },
      "message": "headers: mnt_namespace.h redux\n\nFix various silly problems wrt mnt_namespace.h:\n\n - exit_mnt_ns() isn\u0027t used, remove it\n - done that, sched.h and nsproxy.h inclusions aren\u0027t needed\n - mount.h inclusion was need for vfsmount_lock, but no longer\n - remove mnt_namespace.h inclusion from files which don\u0027t use anything\n   from mnt_namespace.h\n\nSigned-off-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "befca96779b0259ac8fad0183e748a62935c39cb",
      "tree": "ab4962e27ce10abc932de4c7a4c1c29fac2988cf",
      "parents": [
        "e6229bec25be4ba00f31dd26e25721cc96c22262"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Thu Jun 18 16:49:11 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Jun 19 16:46:06 2009 -0700"
      },
      "message": "ptrace: wait_task_zombie: do not account traced sub-threads\n\nThe bug is ancient.\n\nIf we trace the sub-thread of our natural child and this sub-thread exits,\nwe update parent-\u003esignal-\u003ecxxx fields.  But we should not do this until\nthe whole thread-group exits, otherwise we account this thread (and all\nother live threads) twice.\n\nAdd the task_detached() check.  No need to check thread_group_empty(),\nwait_consider_task()-\u003edelay_group_leader() already did this.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nCc: Vitaly Mayatskikh \u003cvmayatsk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e1eb1ebcca871673c76caf63335c4237680040f1",
      "tree": "d5a1b0e667222a43ec2780787ac21011072d45f1",
      "parents": [
        "f95d39d10fe7d47336e65172f52bf64e0096f983"
      ],
      "author": {
        "name": "Richard Kennedy",
        "email": "richard@rsk.demon.co.uk",
        "time": "Wed Jun 17 16:27:42 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:53 2009 -0700"
      },
      "message": "mm: exit.c reorder wait_opts to remove padding on 64 bit builds\n\nReorder struct wait_opts to remove 8 bytes of alignment padding on 64 bit\nbuilds.\n\nSigned-off-by: Richard Kennedy \u003crichard@rsk.demon.co.uk\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f95d39d10fe7d47336e65172f52bf64e0096f983",
      "tree": "14b469b68455968dfd707695083ece72287dfaab",
      "parents": [
        "a3f6dfb7295facb0505b5beca5a7ce48b0612379"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 17 16:27:42 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:53 2009 -0700"
      },
      "message": "do_wait: fix the theoretical race with stop/trace/cont\n\ndo_wait:\n\n\tcurrent-\u003estate \u003d TASK_INTERRUPTIBLE;\n\n\tread_lock(\u0026tasklist_lock);\n\t... search for the task to reap ...\n\nIn theory, the -\u003estate changing can leak into the critical section.  Since\nthe child can change its status under read_lock(tasklist) in parallel\n(finish_stop/ptrace_stop), we can miss the wakeup if __wake_up_parent()\nsees us in TASK_RUNNING state.  Add the barrier.\n\nAlso, use __set_current_state() to set TASK_RUNNING.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "a3f6dfb7295facb0505b5beca5a7ce48b0612379",
      "tree": "882e1103eaf759ab0e3bc53c08ff69b1f096b1bf",
      "parents": [
        "64a16caf5e3417ee32f670debcb5857b02a9e08e"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 17 16:27:41 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:53 2009 -0700"
      },
      "message": "do_wait: kill the old BUG_ON, use while_each_thread()\n\ndo_wait() does BUG_ON(tsk-\u003esignal !\u003d current-\u003esignal), this looks like a\nraher obsolete check.  At least, I don\u0027t think do_wait() is the best place\nto verify that all threads have the same -\u003esignal.  Remove it.\n\nAlso, change the code to use while_each_thread().\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "64a16caf5e3417ee32f670debcb5857b02a9e08e",
      "tree": "1e32f8ac1ad0d7cefeeb6bfdac995ec1ad6d7396",
      "parents": [
        "9e8ae01d1c86dcaa6443c897662545d088036e4c"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 17 16:27:40 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:53 2009 -0700"
      },
      "message": "do_wait: simplify retval/tsk_result/notask_error mess\n\nNow that we don\u0027t pass \u0026retval down to other helpers we can simplify\nthe code more.\n\n- kill tsk_result, just use retval\n\n- add the \"notask\" label right after the main loop, and\n  s/got end/goto notask/ after the fastpath pid check.\n\n  This way we don\u0027t need to initialize retval before this\n  check and the code becomes a bit more clean, if this pid\n  has no attached tasks we should just skip the list search.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9e8ae01d1c86dcaa6443c897662545d088036e4c",
      "tree": "d9465ffe404d318e0038d3133f76550faa3ce3c3",
      "parents": [
        "47918025efdabd34e96b13b26eb2cf2fd6fd1f7c"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 17 16:27:39 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:52 2009 -0700"
      },
      "message": "introduce \"struct wait_opts\" to simplify do_wait() patches\n\nIntroduce \"struct wait_opts\" which holds the parameters for misc helpers\nin do_wait() pathes.\n\nThis adds 13 lines to kernel/exit.c, but saves 256 bytes from .o and imho\nmakes the code much more readable.\n\nThis patch temporary uglifies rusage/siginfo code a little bit, will be\naddressed by further cleanups.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nReviewed-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "47918025efdabd34e96b13b26eb2cf2fd6fd1f7c",
      "tree": "bae081deabe6e955e94c5510ae408b50b930c225",
      "parents": [
        "3b34fc5880a2dcc7e5ed9837ef8d6bae051ab266"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 17 16:27:39 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:52 2009 -0700"
      },
      "message": "shift \"ptrace implies WUNTRACED\" from ptrace_do_wait() to wait_task_stopped()\n\nNo functional changes, preparation for the next patch.\n\nptrace_do_wait() adds WUNTRACED to options for wait_task_stopped() which\nshould always accept the stopped tracee, even if do_wait() was called\nwithout WUNTRACED.\n\nChange wait_task_stopped() to check \"ptrace || WUNTRACED\" instead.  This\nmakes the code more explicit, and \"int options\" argument becomes const in\ndo_wait() pathes.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "77d1ef79568b337f599b75795acc8f78a87ba9ba",
      "tree": "4fc0f622c6e064e76e6fd28981c3375ee3d153a9",
      "parents": [
        "e49612544c695117644af48bb4625264a3d2918f"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 17 16:27:36 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:52 2009 -0700"
      },
      "message": "wait_task_zombie: do not use thread_group_cputime()\n\nThere is no reason for thread_group_cputime() in wait_task_zombie(), there\nmust be no other threads.\n\nThis call was previously needed to collect the per-cpu data which we do\nnot have any longer.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nCc: Vitaly Mayatskikh \u003cvmayatsk@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d1e98f429aa10132b3010ba3b0be47552a2eb14b",
      "tree": "bd4458a65ac9ff942a3ba6dfcd70c281e15e067a",
      "parents": [
        "8053bdd5ce15dcf043d41a4dd6cac4a5567effdc"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 17 16:27:34 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:51 2009 -0700"
      },
      "message": "ptrace: wait_task_zombie: s/-\u003eparent/-\u003ereal_parent/\n\nChange wait_task_zombie() to use -\u003ereal_parent instead of -\u003eparent.  We\ncould even use current afaics, but -\u003ereal_parent is more clean.\n\nWe know that the child is not ptrace_reparented() and thus they are equal.\n But we should avoid using task_struct-\u003eparent, we are going to remove it.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5cb11446892833e50970fb2277a9f7563b0a8bd3",
      "tree": "9cb858cb093c4b927601ef8a612d8dd791aeb1c8",
      "parents": [
        "1c216279539bd65c5a3d497e25d441dbddbcf1ec"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 17 16:27:30 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:51 2009 -0700"
      },
      "message": "ptrace: do not use task-\u003eptrace directly in core kernel\n\nNo functional changes.\n\n- Nobody except ptrace.c \u0026 co should use ptrace flags directly, we have\n  task_ptrace() for that.\n\n- No need to specially check PT_PTRACED, we must not have other PT_ bits\n  set without PT_PTRACED. And no need to know this flag exists.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dea33cfd99022d82d923a0c6a3bd895fb6683fb2",
      "tree": "889ea712abbbb8b8c220dd593383ec6f9ad15ffc",
      "parents": [
        "48597760fad3d6a3e30a14241a3ce5ccb1a0e9bc"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 17 16:27:29 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:49 2009 -0700"
      },
      "message": "ptrace: mm_need_new_owner: use -\u003ereal_parent to search in the siblings\n\n\"Search in the siblings\" should use -\u003ereal_parent, not -\u003eparent.  If the\ntask is traced then -\u003eparent \u003d\u003d tracer, while the task\u0027s parent is always\n-\u003ereal_parent.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "87245135d5057edd5a8037131f81eeffd76d4fef",
      "tree": "9c6c695f474dfced54311467fd5c14de57f6dbb9",
      "parents": [
        "2ffebca6aa7e1687905c842dd8c5c1e811e574e7"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed Jun 17 16:27:23 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jun 18 13:03:48 2009 -0700"
      },
      "message": "allow_signal: kill the bogus -\u003emm check, add a note about CLONE_SIGHAND\n\nallow_signal() checks -\u003emm \u003d\u003d NULL.  Not sure why.  Perhaps to make sure\ncurrent is the kernel thread.  But this helper must not be used unless we\nare the kernel thread, kill this check.\n\nAlso, document the fact that the CLONE_SIGHAND kthread must not use\nallow_signal(), unless the caller really wants to change the parent\u0027s\n-\u003esighand-\u003eaction as well.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ],
  "next": "8a1ca8cedd108c8e76a6ab34079d0bbb4f244799"
}
