)]}'
{
  "log": [
    {
      "commit": "c0deae8c9587419ab13874b74425ce2eb2e18508",
      "tree": "54887135a674951d19e169b5ff17a866b16d7cbe",
      "parents": [
        "814ce2521121c2459e16cea8c7221e157edbeddd"
      ],
      "author": {
        "name": "Sergey Senozhatsky",
        "email": "sergey.senozhatsky@gmail.com",
        "time": "Wed Nov 03 18:52:56 2010 +0200"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Wed Nov 10 13:07:06 2010 +0100"
      },
      "message": "posix-cpu-timers: Rcu_read_lock/unlock protect find_task_by_vpid call\n\nCommit 4221a9918e38b7494cee341dda7b7b4bb8c04bde \"Add RCU check for\nfind_task_by_vpid()\" introduced rcu_lockdep_assert to find_task_by_pid_ns.\nAdd rcu_read_lock/rcu_read_unlock to call find_task_by_vpid.\n\nTetsuo Handa wrote:\n| Quoting from one of posts in that thead\n| http://kerneltrap.org/mailarchive/linux-kernel/2010/2/8/4536388\n|\n|| Usually tasklist gives enough protection, but if copy_process() fails\n|| it calls free_pid() lockless and does call_rcu(delayed_put_pid().\n|| This means, without rcu lock find_pid_ns() can\u0027t scan the hash table\n|| safely.\n\nThomas Gleixner wrote:\n| We can remove the tasklist_lock while at it. rcu_read_lock is enough.\n\nPatch also replaces thread_group_leader with has_group_leader_pid\nin accordance to comment by Oleg Nesterov:\n\n| ... thread_group_leader() check is not relaible without \n| tasklist. If we race with de_thread() find_task_by_vpid() can find\n| the new leader before it updates its -\u003egroup_leader.\n|\n| perhaps it makes sense to change posix_cpu_timer_create() to use \n| has_group_leader_pid() instead, just to make this code not look racy\n| and avoid adding new problems.\n\n\nSigned-off-by: Sergey Senozhatsky \u003csergey.senozhatsky@gmail.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nReviewed-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nLKML-Reference: \u003c20101103165256.GD30053@swordfish.minsk.epam.com\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n\n"
    },
    {
      "commit": "b34d8915c413acb51d837a45fb8747b61f65c020",
      "tree": "ced5fac166324634653d84b1afe2b958b3904f4d",
      "parents": [
        "e8a89cebdbaab14caaa26debdb4ffd493b8831af",
        "f33ebbe9da2c3c24664a0ad4f8fd83f293547e63"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 12:07:51 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Aug 10 12:07:51 2010 -0700"
      },
      "message": "Merge branch \u0027writable_limits\u0027 of git://decibel.fi.muni.cz/~xslaby/linux\n\n* \u0027writable_limits\u0027 of git://decibel.fi.muni.cz/~xslaby/linux:\n  unistd: add __NR_prlimit64 syscall numbers\n  rlimits: implement prlimit64 syscall\n  rlimits: switch more rlimit syscalls to do_prlimit\n  rlimits: redo do_setrlimit to more generic do_prlimit\n  rlimits: add rlimit64 structure\n  rlimits: do security check under task_lock\n  rlimits: allow setrlimit to non-current tasks\n  rlimits: split sys_setrlimit\n  rlimits: selinux, do rlimits changes under task_lock\n  rlimits: make sure -\u003erlim_max never grows in sys_setrlimit\n  rlimits: add task_struct to update_rlimit_cpu\n  rlimits: security, add task_struct to setrlimit\n\nFix up various system call number conflicts.  We not only added fanotify\nsystem calls in the meantime, but asm-generic/unistd.h added a wait4\nalong with a range of reserved per-architecture system calls.\n"
    },
    {
      "commit": "5ab46b345e418747b3a52f0892680c0745c4223c",
      "tree": "d7453221b7fc2764a7405b48b73b4ac7bf7a317a",
      "parents": [
        "8fd00b4d7014b00448eb33cf0590815304769798"
      ],
      "author": {
        "name": "Jiri Slaby",
        "email": "jirislaby@gmail.com",
        "time": "Fri Aug 28 14:05:12 2009 +0200"
      },
      "committer": {
        "name": "Jiri Slaby",
        "email": "jirislaby@gmail.com",
        "time": "Fri Jul 16 09:48:45 2010 +0200"
      },
      "message": "rlimits: add task_struct to update_rlimit_cpu\n\nAdd task_struct as a parameter to update_rlimit_cpu to be able to set\nrlimit_cpu of different task than current.\n\nSigned-off-by: Jiri Slaby \u003cjirislaby@gmail.com\u003e\nAcked-by: James Morris \u003cjmorris@namei.org\u003e\n"
    },
    {
      "commit": "8d1f431cbec115a780cd551ab1b4955c125f8d31",
      "tree": "f71e707f0ff495582bd2f43017c87b2ac6ec519d",
      "parents": [
        "0bdd2ed4138ec04e09b4f8165981efc99e439f55"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Jun 11 20:04:46 2010 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Jun 18 10:46:57 2010 +0200"
      },
      "message": "sched: Fix the racy usage of thread_group_cputimer() in fastpath_timer_check()\n\nfastpath_timer_check()-\u003ethread_group_cputimer() is racy and\nunneeded.\n\nIt is racy because another thread can clear -\u003erunning before\nthread_group_cputimer() takes cputimer-\u003elock. In this case\nthread_group_cputimer() will set -\u003erunning \u003d true again and call\nthread_group_cputime(). But since we do not hold tasklist or\nsiglock, we can race with fork/exit and copy the wrong results\ninto cputimer-\u003ecputime.\n\nIt is unneeded because if -\u003erunning \u003d\u003d true we can just use\nthe numbers in cputimer-\u003ecputime we already have.\n\nChange fastpath_timer_check() to copy cputimer-\u003ecputime into\nthe local variable under cputimer-\u003elock. We do not re-check\n-\u003erunning under cputimer-\u003elock, run_posix_cpu_timers() does\nthis check later.\n\nNote: we can add more optimizations on top of this change.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nLKML-Reference: \u003c20100611180446.GA13025@redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "0bdd2ed4138ec04e09b4f8165981efc99e439f55",
      "tree": "2bac5b05aa0f248b82facc0f2bc0bf705e306e05",
      "parents": [
        "bfac7009180901f57f20a73c53c3e57b1ce75a1b"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Jun 11 01:10:18 2010 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Jun 18 10:46:57 2010 +0200"
      },
      "message": "sched: run_posix_cpu_timers: Don\u0027t check -\u003eexit_state, use lock_task_sighand()\n\nrun_posix_cpu_timers() doesn\u0027t work if current has already passed\nexit_notify(). This was needed to prevent the races with do_wait().\n\nSince ea6d290c -\u003esignal is always valid and can\u0027t go away. We can\nremove the \"tsk-\u003eexit_state \u003d\u003d 0\" in fastpath_timer_check() and\nconvert run_posix_cpu_timers() to use lock_task_sighand().\n\nNote: it makes sense to take group_leader\u0027s sighand instead, the\nsub-thread still uses CPU after release_task(). But we need more\nchanges to do this.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nLKML-Reference: \u003c20100610231018.GA25942@redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "bfac7009180901f57f20a73c53c3e57b1ce75a1b",
      "tree": "f167c0a6bfbf397ad668517bdccbc9d0de162715",
      "parents": [
        "48286d5088a3ba76de40a6b70221632a49cab7a1"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Jun 11 01:09:56 2010 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Jun 18 10:46:56 2010 +0200"
      },
      "message": "sched: thread_group_cputime: Simplify, document the \"alive\" check\n\nthread_group_cputime() looks as if it is rcu-safe, but in fact this\nwas wrong until ea6d290c which pins task-\u003esignal to task_struct.\nIt checks -\u003esighand !\u003d NULL under rcu, but this can\u0027t help if -\u003esignal\ncan go away. Fortunately the caller either holds -\u003esiglock, or it is\nfastpath_timer_check() which uses current and checks exit_state \u003d\u003d 0.\n\n- Since ea6d290c commit tsk-\u003esignal is stable, we can read it first\n  and avoid the initialization from INIT_CPUTIME.\n\n- Even if tsk-\u003esignal is always valid, we still have to check it\n  is safe to use next_thread() under rcu_read_lock(). Currently\n  the code checks -\u003esighand !\u003d NULL, change it to use pid_alive()\n  which is commonly used to ensure the task wasn\u0027t unhashed before\n  we take rcu_read_lock().\n\n  Add the comment to explain this check.\n\n- Change the main loop to use the while_each_thread() helper.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nLKML-Reference: \u003c20100610230956.GA25921@redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "d30fda355188272430d3865db2ff9e24b4135ae3",
      "tree": "a763bd24dac66b8d287304bd1cabab859ddf9ae1",
      "parents": [
        "4a5999429739844367d0f77a65efdd7db8202779"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Wed May 26 14:43:13 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:46 2010 -0700"
      },
      "message": "posix-cpu-timers: avoid \"task-\u003esignal !\u003d NULL\" checks\n\nPreparation to make task-\u003esignal immutable, no functional changes.\n\nposix-cpu-timers.c checks task-\u003esignal !\u003d NULL to ensure this task is\nalive and didn\u0027t pass __exit_signal().  This is correct but we are going\nto change the lifetime rules for -\u003esignal and never reset this pointer.\n\nChange the code to check -\u003esighand instead, it doesn\u0027t matter which\npointer we check under tasklist, they both are cleared simultaneously.\n\nAs Roland pointed out, some of these changes are not strictly needed and\nprobably it makes sense to revert them later, when -\u003esignal will be pinned\nto task_struct.  But this patch tries to ensure the subsequent changes in\nfork/exit can\u0027t make any visible impact on posix cpu timers.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Fenghua Yu \u003cfenghua.yu@intel.com\u003e\nAcked-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nCc: Tony Luck \u003ctony.luck@intel.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "29f87b793da421a6ab816d991dc8dbf909dfb66a",
      "tree": "807e95b5f7a41f163000d24f82e85afa96eccdd2",
      "parents": [
        "dbb6be6d5e974c42bbecd183effaa0df69e1dd8b"
      ],
      "author": {
        "name": "Stanislaw Gruszka",
        "email": "sgruszka@redhat.com",
        "time": "Tue Apr 27 14:12:15 2010 -0700"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon May 10 14:24:26 2010 +0200"
      },
      "message": "posix-cpu-timers: Optimize run_posix_cpu_timers()\n\nWe can optimize and simplify things taking into account signal-\u003ecputimer\nis always running when we have configured any process wide cpu timer.\n\nIn check_process_timers(), we don\u0027t have to check if new updated value of\nsignal-\u003ecputime_expires is smaller, since we maintain new first expiration\ntime ({prof,virt,sched}_expires) in code flow and all other writes to\nexpiration cache are protected by sighand-\u003esiglock .\n\nSigned-off-by: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Hidetoshi Seto \u003cseto.hidetoshi@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "dbb6be6d5e974c42bbecd183effaa0df69e1dd8b",
      "tree": "5735cb47e70853d057a9881dd0ce44b83e88fa63",
      "parents": [
        "6a867a395558a7f882d041783e4cdea6744ca2bf",
        "b57f95a38233a2e73b679bea4a5453a1cc2a1cc9"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon May 10 11:59:37 2010 +0200"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon May 10 14:20:42 2010 +0200"
      },
      "message": "Merge branch \u0027linus\u0027 into timers/core\n\nReason: Further posix_cpu_timer patches depend on mainline changes\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "054319b5e255c0671012a5a89b344a7d55cda80c",
      "tree": "5f815e837eacb11504f19c00e155befcecdf0903",
      "parents": [
        "833961d81f0ece46b7884f988cc65509e2c49646",
        "830ec0458c390f29c6c99e1ff7feab9e36368d12"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 26 15:10:38 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Mar 26 15:10:38 2010 -0700"
      },
      "message": "Merge branch \u0027timers-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027timers-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  time: Fix accumulation bug triggered by long delay.\n  posix-cpu-timers: Reset expire cache when no timer is running\n  timer stats: Fix del_timer_sync() and try_to_del_timer_sync()\n  clockevents: Sanitize min_delta_ns adjustment and prevent overflows\n"
    },
    {
      "commit": "c28739375bf0d6e239b4fa939ec8372aa2c707d2",
      "tree": "9d213503878c59b7adc9ca3e0517c566921f3c9a",
      "parents": [
        "1f169f84d25a74fb2dc67274d31d082ce30c60fb"
      ],
      "author": {
        "name": "Stanislaw Gruszka",
        "email": "sgruszka@redhat.com",
        "time": "Thu Mar 11 14:04:42 2010 -0800"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Fri Mar 12 22:40:41 2010 +0100"
      },
      "message": "cpu-timers: Avoid iterating over all threads in fastpath_timer_check()\n\nSpread p-\u003esighand-\u003esiglock locking scope to make sure that\nfastpath_timer_check() never iterates over all threads. Without\nlocking there is small possibility that signal-\u003ecputimer will stop\nrunning while we write values to signal-\u003ecputime_expires.\n\nCalling thread_group_cputime() from fastpath_timer_check() is not only\nbad because it is slow, also it is racy with __exit_signal() which can\nlead to invalid signal-\u003e{s,u}time values.\n\nSigned-off-by: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Hidetoshi Seto \u003cseto.hidetoshi@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "1f169f84d25a74fb2dc67274d31d082ce30c60fb",
      "tree": "7affff2991652481d30c6c97328588f30ec976f3",
      "parents": [
        "ae1a78eecc45fe41215d9dbfd7079999455772d6"
      ],
      "author": {
        "name": "Stanislaw Gruszka",
        "email": "sgruszka@redhat.com",
        "time": "Thu Mar 11 14:04:41 2010 -0800"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Fri Mar 12 22:40:40 2010 +0100"
      },
      "message": "cpu-timers: Change SIGEV_NONE timer implementation\n\nWhen user sets up a timer without associated signal and process does\nnot use any other cpu timers and does not exit, tsk-\u003esignal-\u003ecputimer\nis enabled and running forever.\n\nAvoid running the timer for no reason.\n\nI used below program to check patch does not break current user space\nvisible behavior.\n\n #include \u003csys/time.h\u003e\n #include \u003csignal.h\u003e\n #include \u003cstdio.h\u003e\n #include \u003cstdlib.h\u003e\n #include \u003cstring.h\u003e\n #include \u003ctime.h\u003e\n #include \u003cunistd.h\u003e\n #include \u003cassert.h\u003e\n\n void consume_cpu(void)\n {\n\tint i \u003d 0;\n\tint count \u003d 0;\n\n\tfor(i\u003d0; i\u003c100000000; i++)\n\t\tcount++;\n }\n\n int main(void)\n {\n\tint i;\n\tstruct sigaction act;\n\tstruct sigevent evt \u003d { };\n\ttimer_t tid;\n\tstruct itimerspec spec \u003d { };\n\n\tevt.sigev_notify \u003d SIGEV_NONE;\n\tassert(timer_create(CLOCK_PROCESS_CPUTIME_ID, \u0026evt,  \u0026tid) \u003d\u003d 0);\n\n\tspec.it_value.tv_sec \u003d 10;\n\tassert(timer_settime(tid, 0, \u0026spec,  NULL) \u003d\u003d 0);\n\n\tfor (i \u003d 0; i \u003c 30; i++) {\n\t\tconsume_cpu();\n\t\tmemset(\u0026spec, 0, sizeof(spec));\n\t\tassert(timer_gettime(tid, \u0026spec) \u003d\u003d 0);\n\t\tprintf(\"%lu.%09lu\\n\",\n\t\t\t(unsigned long) spec.it_value.tv_sec,\n\t\t\t(unsigned long) spec.it_value.tv_nsec);\n\t}\n\n\tassert(timer_delete(tid) \u003d\u003d 0);\n\treturn 0;\n }\n\nSigned-off-by: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Hidetoshi Seto \u003cseto.hidetoshi@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "ae1a78eecc45fe41215d9dbfd7079999455772d6",
      "tree": "6aa1fb1b053aa8f9464a6ce83a2b62cac12bab55",
      "parents": [
        "5eb9aa6414bdab6d075a8763bc3b647181ef3aab"
      ],
      "author": {
        "name": "Stanislaw Gruszka",
        "email": "sgruszka@redhat.com",
        "time": "Thu Mar 11 14:04:39 2010 -0800"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Fri Mar 12 22:40:40 2010 +0100"
      },
      "message": "cpu-timers: Return correct previous timer reload value\n\nAccording POSIX we need to correctly set old timer it_interval value when\nuser request that in timer_settime().  Tested using below program.\n\n #include \u003csys/time.h\u003e\n #include \u003csignal.h\u003e\n #include \u003cstdio.h\u003e\n #include \u003cstdlib.h\u003e\n #include \u003ctime.h\u003e\n #include \u003cunistd.h\u003e\n #include \u003cassert.h\u003e\n\n int main(void)\n {\n\tstruct sigaction act;\n\tstruct sigevent evt \u003d { };\n\ttimer_t tid;\n\tstruct itimerspec spec, u_spec, k_spec;\n\n\tevt.sigev_notify \u003d SIGEV_SIGNAL;\n\tevt.sigev_signo \u003d SIGPROF;\n\tassert(timer_create(CLOCK_PROCESS_CPUTIME_ID, \u0026evt,  \u0026tid) \u003d\u003d 0);\n\n\tspec.it_value.tv_sec \u003d 1;\n\tspec.it_value.tv_nsec \u003d 2;\n\tspec.it_interval.tv_sec \u003d 3;\n\tspec.it_interval.tv_nsec \u003d 4;\n\tu_spec \u003d spec;\n\tassert(timer_settime(tid, 0, \u0026spec,  NULL) \u003d\u003d 0);\n\n\tspec.it_value.tv_sec \u003d 5;\n\tspec.it_value.tv_nsec \u003d 6;\n\tspec.it_interval.tv_sec \u003d 7;\n\tspec.it_interval.tv_nsec \u003d 8;\n\tassert(timer_settime(tid, 0, \u0026spec,  \u0026k_spec) \u003d\u003d 0);\n\n #define PRT(val) printf(#val \":\\t%d/%d\\n\", (int) u_spec.val, (int) k_spec.val)\n\tPRT(it_value.tv_sec);\n\tPRT(it_value.tv_nsec);\n\tPRT(it_interval.tv_sec);\n\tPRT(it_interval.tv_nsec);\n\n\treturn 0;\n }\n\nSigned-off-by: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Hidetoshi Seto \u003cseto.hidetoshi@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "5eb9aa6414bdab6d075a8763bc3b647181ef3aab",
      "tree": "b7bf3b60f548c99e82c8e6bbeb8f7520b894ea93",
      "parents": [
        "f55db609042faecd5e518ce372b87f846659b32e"
      ],
      "author": {
        "name": "Stanislaw Gruszka",
        "email": "sgruszka@redhat.com",
        "time": "Thu Mar 11 14:04:38 2010 -0800"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Fri Mar 12 22:40:39 2010 +0100"
      },
      "message": "cpu-timers: Cleanup arm_timer()\n\nSigned-off-by: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Hidetoshi Seto \u003cseto.hidetoshi@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "f55db609042faecd5e518ce372b87f846659b32e",
      "tree": "ca544704af0825aad53d39fa517a945ba89e59ad",
      "parents": [
        "522dba7134d6b2e5821d3457f7941ec34f668e6d"
      ],
      "author": {
        "name": "Stanislaw Gruszka",
        "email": "sgruszka@redhat.com",
        "time": "Thu Mar 11 14:04:37 2010 -0800"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Fri Mar 12 22:40:39 2010 +0100"
      },
      "message": "cpu-timers: Simplify RLIMIT_CPU handling\n\nLet always set signal-\u003ecputime_expires expiration cache when setting\nnew itimer, POSIX 1.b timer, and RLIMIT_CPU.  Since we are\ninitializing prof_exp expiration cache during fork(), this allows to\nremove \"RLIMIT_CPU !\u003d inf\" check from fastpath_timer_check() and do\nsome other cleanups.\n\nChecked against regression using test cases from:\nhttp://marc.info/?l\u003dlinux-kernel\u0026m\u003d123749066504641\u0026w\u003d4\nhttp://marc.info/?l\u003dlinux-kernel\u0026m\u003d123811277916642\u0026w\u003d2\n\nSigned-off-by: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Hidetoshi Seto \u003cseto.hidetoshi@jp.fujitsu.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "15365c108ea27598e265f8c13e7051d99ca5b0b9",
      "tree": "487cc70e96a3d6696f8f62fb7b6dbaacbc84ace5",
      "parents": [
        "829b6c1ef488856c6a46a2f705f5068062d5f34c"
      ],
      "author": {
        "name": "Stanislaw Gruszka",
        "email": "sgruszka@redhat.com",
        "time": "Thu Mar 11 14:04:31 2010 -0800"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Fri Mar 12 19:12:18 2010 +0100"
      },
      "message": "posix-cpu-timers: Reset expire cache when no timer is running\n\nWhen a process deletes cpu timer or a timer expires we do not clear\nthe expiration cache sig-\u003ecputimer_expires.\n\nAs a result the fastpath_timer_check() which prevents us to loop over\nall threads in case no timer is active is not working and we run the\nslow path needlessly on every tick.\n\nZero sig-\u003ecputimer_expires in stop_process_timers().\n\nSigned-off-by: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Hidetoshi Seto \u003cseto.hidetoshi@jp.fujitsu.com\u003e\nCc: Spencer Candland \u003cspencer@bluehost.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "78d7d407b62a021e6d2e8dc24c0b90e390ab58a1",
      "tree": "8c1074b84db4b977bad6802a3701e0113c0a7739",
      "parents": [
        "d4bb527438b4181cd3c564ae04dd344c381283a1"
      ],
      "author": {
        "name": "Jiri Slaby",
        "email": "jslaby@suse.cz",
        "time": "Fri Mar 05 13:42:54 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:33 2010 -0800"
      },
      "message": "kernel core: use helpers for rlimits\n\nMake sure compiler won\u0027t do weird things with limits.  E.g.  fetching them\ntwice may return 2 different values after writable limits are implemented.\n\nI.e.  either use rlimit helpers added in commit 3e10e716abf3 (\"resource:\nadd helpers for fetching rlimits\") or ACCESS_ONCE if not applicable.\n\nSigned-off-by: Jiri Slaby \u003cjslaby@suse.cz\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: john stultz \u003cjohnstul@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d4bb527438b4181cd3c564ae04dd344c381283a1",
      "tree": "0e7afeb6b759f72b136d707db4e5725a92b0d777",
      "parents": [
        "f3abd4f9531becb71626bd206955d47d5ea54f06"
      ],
      "author": {
        "name": "Jiri Slaby",
        "email": "jslaby@suse.cz",
        "time": "Fri Mar 05 13:42:53 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:32 2010 -0800"
      },
      "message": "posix-cpu-timers: cleanup rlimits usage\n\nFetch rlimit (both hard and soft) values only once and work on them.  It\nremoves many accesses through sig structure and makes the code cleaner.\n\nMostly a preparation for writable resource limits support.\n\nSigned-off-by: Jiri Slaby \u003cjslaby@suse.cz\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: john stultz \u003cjohnstul@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ba5ea951d0b5e5896180e21fe07f228d2b3b0e63",
      "tree": "f636c31ec68aed0d1e758c8aa36c06e320945ad8",
      "parents": [
        "8e1a928a2ed7e8d5cad97c8e985294b4caedd168"
      ],
      "author": {
        "name": "Stanislaw Gruszka",
        "email": "sgruszka@redhat.com",
        "time": "Tue Nov 17 14:14:13 2009 -0800"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Wed Nov 18 12:36:05 2009 +0100"
      },
      "message": "posix-cpu-timers: optimize and document timer_create callback\n\nWe have already new_timer initialized to all-zeros hence in function\ninitializations are not needed. Document function expectation about\nnew_timer argument as well.\n\nSigned-off-by: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nCc: johnstul@us.ibm.com\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "3f0a525ebf4b8ef041a332bbe4a73aee94bb064b",
      "tree": "18c542b9896f8ac4b8d89db868ba46d38576228d",
      "parents": [
        "c6a2a1770245f654f35f60e1458d4356680f9519"
      ],
      "author": {
        "name": "Xiao Guangrong",
        "email": "xiaoguangrong@cn.fujitsu.com",
        "time": "Mon Aug 10 10:52:30 2009 +0800"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Sat Aug 29 14:10:07 2009 +0200"
      },
      "message": "itimers: Add tracepoints for itimer\n\nAdd tracepoints for all itimer variants: ITIMER_REAL, ITIMER_VIRTUAL\nand ITIMER_PROF.\n\n[ tglx: Fixed comments and made the output more readable, parseable\n  \tand consistent. Replaced pid_vnr by pid_nr because the hrtimer\n  \tcallback can happen in any namespace ]\n\nSigned-off-by: Xiao Guangrong \u003cxiaoguangrong@cn.fujitsu.com\u003e\nCc: Steven Rostedt \u003crostedt@goodmis.org\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Mathieu Desnoyers \u003cmathieu.desnoyers@polymtl.ca\u003e\nCc: Anton Blanchard \u003canton@samba.org\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nCc: Zhaolei \u003czhaolei@cn.fujitsu.com\u003e\nLKML-Reference: \u003c4A7F8B6E.2010109@cn.fujitsu.com\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "f71bb0ac5e85410601b0db29d7b1635345ea61a4",
      "tree": "7c3ef70ef008db87d8b71e5de0632766ecd64d2f",
      "parents": [
        "7285dd7fd375763bfb8ab1ac9cf3f1206f503c16",
        "a42548a18866e87092db93b771e6c5b060d78401"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Sat Aug 29 10:34:18 2009 +0200"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Sat Aug 29 10:34:29 2009 +0200"
      },
      "message": "Merge branch \u0027timers/posixtimers\u0027 into timers/tracing\n\nMerge reason: timer tracepoint patches depend on both branches\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "17d42c1c497aa54952b9e58c1502a46f0df40315",
      "tree": "0aefce76ad5dca93c9ca5d9261c77e2b4a0c8967",
      "parents": [
        "7b2aa037e878c939676675969983284a02958ae3"
      ],
      "author": {
        "name": "Stanislaw Gruszka",
        "email": "sgruszka@redhat.com",
        "time": "Thu Aug 06 16:03:30 2009 -0700"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sat Aug 08 18:30:25 2009 +0200"
      },
      "message": "posix_cpu_timers_exit_group(): Do not use thread_group_cputimer()\n\nWhen the process exits we don\u0027t have to run new cputimer nor\nuse running one (as it not accounts when tsk-\u003eexit_state !\u003d 0)\nto get process CPU times.  As there is only one thread we can\njust use CPU times fields from task and signal structs.\n\nSigned-off-by: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\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: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "a42548a18866e87092db93b771e6c5b060d78401",
      "tree": "897acf5794920ec9c6fd7f87af63908d0c1988f9",
      "parents": [
        "d1e3b6d195770bd422e3229b88edfc154b6a27dd"
      ],
      "author": {
        "name": "Stanislaw Gruszka",
        "email": "sgruszka@redhat.com",
        "time": "Wed Jul 29 12:15:29 2009 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Aug 03 14:48:36 2009 +0200"
      },
      "message": "cputime: Optimize jiffies_to_cputime(1)\n\nFor powerpc with CONFIG_VIRT_CPU_ACCOUNTING\njiffies_to_cputime(1) is not compile time constant and run time\ncalculations are quite expensive. To optimize we use\nprecomputed value. For all other architectures is is\npreprocessor definition.\n\nSigned-off-by: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nLKML-Reference: \u003c1248862529-6063-5-git-send-email-sgruszka@redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "d1e3b6d195770bd422e3229b88edfc154b6a27dd",
      "tree": "153a0bb49967c4d489a510c9e673d07f4e560a6c",
      "parents": [
        "8356b5f9c424e5831715abbce747197c30d1fd71"
      ],
      "author": {
        "name": "Stanislaw Gruszka",
        "email": "sgruszka@redhat.com",
        "time": "Wed Jul 29 12:15:28 2009 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Aug 03 14:48:36 2009 +0200"
      },
      "message": "itimers: Simplify arm_timer() code a bit\n\nDon\u0027t update values in expiration cache when new ones are\nequal. Add expire_le() and expire_gt() helpers to simplify the\ncode.\n\nSigned-off-by: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nLKML-Reference: \u003c1248862529-6063-4-git-send-email-sgruszka@redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "8356b5f9c424e5831715abbce747197c30d1fd71",
      "tree": "87de74cc86f6eebf88eba9a4c335614787d984c5",
      "parents": [
        "42c4ab41a176ee784c0f28c0b29025a8fc34f05a"
      ],
      "author": {
        "name": "Stanislaw Gruszka",
        "email": "sgruszka@redhat.com",
        "time": "Wed Jul 29 12:15:27 2009 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Aug 03 14:48:35 2009 +0200"
      },
      "message": "itimers: Fix periodic tics precision\n\nMeasure ITIMER_PROF and ITIMER_VIRT timers interval error\nbetween real ticks and requested by user. Take it into account\nwhen scheduling next tick.\n\nThis patch introduce possibility where time between two\nconsecutive tics is smaller then requested interval, it\npreserve however dependency that n tick is generated not\nearlier than n*interval time - counting from the beginning of\nperiodic signal generation.\n\nSigned-off-by: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nLKML-Reference: \u003c1248862529-6063-3-git-send-email-sgruszka@redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "42c4ab41a176ee784c0f28c0b29025a8fc34f05a",
      "tree": "370393a0e02faa7a6a7d211205b31ceb74880359",
      "parents": [
        "ed680c4ad478d0fee9740f7d029087f181346564"
      ],
      "author": {
        "name": "Stanislaw Gruszka",
        "email": "sgruszka@redhat.com",
        "time": "Wed Jul 29 12:15:26 2009 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Aug 03 14:48:35 2009 +0200"
      },
      "message": "itimers: Merge ITIMER_VIRT and ITIMER_PROF\n\nBoth cpu itimers have same data flow in the few places, this\npatch make unification of code related with VIRT and PROF\nitimers.\n\nSigned-off-by: Stanislaw Gruszka \u003csgruszka@redhat.com\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nLKML-Reference: \u003c1248862529-6063-2-git-send-email-sgruszka@redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "6e85c5ba73c07b990798087e9b858c065db2b234",
      "tree": "d3cfcdd1f8d779f65035a0f610ed13bda9b96d68",
      "parents": [
        "314eeac9e35d8b934dd7a09ed3a8e00d41977b84"
      ],
      "author": {
        "name": "H Hartley Sweeten",
        "email": "hartleys@visionengravers.com",
        "time": "Wed Apr 29 19:14:32 2009 -0400"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Apr 30 08:08:31 2009 +0200"
      },
      "message": "kernel/posix-cpu-timers.c: fix sparse warning\n\nSparse reports the following in kernel/posix-cpu-timers.c:\n\n  warning: symbol \u0027firing\u0027 shadows an earlier one\n\nSigned-off-by: H Hartley Sweeten \u003chsweeten@visionengravers.com\u003e\nCc: Subrata Modak \u003csubrata@linux.vnet.ibm.com\u003e\nLKML-Reference: \u003cBD79186B4FD85F4B8E60E381CAEE1909016C1AFE@mi8nycmail19.Mi8.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "17b2e9bf27d417bc186cc922b4d6d5eaa048f9d8",
      "tree": "7ae99be289ec2ffe68aa38926d9e9a13e4387ee0",
      "parents": [
        "422a253483aa5de71a2bcdc27b0aa023053f97f8",
        "e3c8ca8336707062f3f7cb1cd7e6b3c753baccdd"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 09 10:37:28 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 09 10:37:28 2009 -0700"
      },
      "message": "Merge branch \u0027sched-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027sched-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  sched: do not count frozen tasks toward load\n  sched: refresh MAINTAINERS entry\n  sched: Print sched_group::__cpu_power in sched_domain_debug\n  cpuacct: add per-cgroup utime/stime statistics\n  posixtimers, sched: Fix posix clock monotonicity\n  sched_rt: don\u0027t allocate cpumask in fastpath\n  cpuacct: make cpuacct hierarchy walk in cpuacct_charge() safe when rcupreempt is used -v2\n"
    },
    {
      "commit": "8f2e586567b1bad72dac7c3810fe9a2ef7117506",
      "tree": "23da00a7e4b78f71c5d32ba350d0039b5016124e",
      "parents": [
        "6279a751fe096a21dc7704e918d570d3ff06e769"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Mar 27 01:06:10 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Apr 08 17:51:39 2009 +0200"
      },
      "message": "posix-timers: fix RLIMIT_CPU \u0026\u0026 setitimer(CPUCLOCK_PROF)\n\nupdate_rlimit_cpu() tries to optimize out set_process_cpu_timer() in case\nwhen we already have CPUCLOCK_PROF timer which should expire first. But it\nuses cputime_lt() instead of cputime_gt().\n\nTest case:\n\n\tint main(void)\n\t{\n\t\tstruct itimerval it \u003d {\n\t\t\t.it_value \u003d { .tv_sec \u003d 1000 },\n\t\t};\n\n\t\tassert(!setitimer(ITIMER_PROF, \u0026it, NULL));\n\n\t\tstruct rlimit rl \u003d {\n\t\t\t.rlim_cur \u003d 1,\n\t\t\t.rlim_max \u003d 1,\n\t\t};\n\n\t\tassert(!setrlimit(RLIMIT_CPU, \u0026rl));\n\n\t\tfor (;;)\n\t\t\t;\n\n\t\treturn 0;\n\t}\n\nWithout this patch, the task is not killed as RLIMIT_CPU demands.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Peter Lojkin \u003cia6432@inbox.ru\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: stable@kernel.org\nLKML-Reference: \u003c20090327000610.GA10108@redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "5af8c4e0fac9838428bd718040b664043a05f37c",
      "tree": "75a01d98ed244db45fe3c734c4a81c1a3d92ac37",
      "parents": [
        "46e0bb9c12f4bab539736f1714cbf16600f681ec",
        "577c9c456f0e1371cbade38eaf91ae8e8a308555"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Apr 08 17:25:42 2009 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Apr 08 17:26:00 2009 +0200"
      },
      "message": "Merge commit \u0027v2.6.30-rc1\u0027 into sched/urgent\n\nMerge reason: update to latest upstream to queue up fix\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "c5f8d99585d7b5b7e857fabf8aefd0174903a98c",
      "tree": "504127a7d4b6a0e3aee56d0822e5e8b23f8062d7",
      "parents": [
        "13b8bd0a5713bdf05659019badd7c0407984ece1"
      ],
      "author": {
        "name": "Hidetoshi Seto",
        "email": "seto.hidetoshi@jp.fujitsu.com",
        "time": "Tue Mar 31 16:56:03 2009 +0900"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Apr 01 16:44:16 2009 +0200"
      },
      "message": "posixtimers, sched: Fix posix clock monotonicity\n\nImpact: Regression fix (against clock_gettime() backwarding bug)\n\nThis patch re-introduces a couple of functions, task_sched_runtime\nand thread_group_sched_runtime, which was once removed at the\ntime of 2.6.28-rc1.\n\nThese functions protect the sampling of thread/process clock with\nrq lock.  This rq lock is required not to update rq-\u003eclock during\nthe sampling.\n\ni.e.\n  The clock_gettime() may return\n   ((accounted runtime before update) + (delta after update))\n  that is less than what it should be.\n\nv2 -\u003e v3:\n\t- Rename static helper function __task_delta_exec()\n\t  to do_task_delta_exec() since -tip tree already has\n\t  a __task_delta_exec() of different version.\n\nv1 -\u003e v2:\n\t- Revises comments of function and patch description.\n\t- Add note about accuracy of thread group\u0027s runtime.\n\nSigned-off-by: Hidetoshi Seto \u003cseto.hidetoshi@jp.fujitsu.com\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: stable@kernel.org\t[2.6.28.x][2.6.29.x]\nLKML-Reference: \u003c49D1CC93.4080401@jp.fujitsu.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "37bebc70d7ad4144c571d74500db3bb26ec0c0eb",
      "tree": "856ed72491c8e650dd4ad8f56d57bda4881fa231",
      "parents": [
        "d56ffd38a93841a07c839a375049a56b51e9567c"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Mar 23 20:34:11 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Mar 23 20:43:35 2009 +0100"
      },
      "message": "posix timers: fix RLIMIT_CPU \u0026\u0026 fork()\n\nSee http://bugzilla.kernel.org/show_bug.cgi?id\u003d12911\n\ncopy_signal() copies signal-\u003erlim, but RLIMIT_CPU is \"lost\". Because\nposix_cpu_timers_init_group() sets cputime_expires.prof_exp \u003d 0 and thus\nfastpath_timer_check() returns false unless we have other cpu timers.\n\nThis is the minimal fix for 2.6.29 (tested) and 2.6.28. The patch is not\noptimal, we need further cleanups here. With this patch update_rlimit_cpu()\nis not really needed, but I don\u0027t think it should be removed.\n\nThe proper fix (I think) is:\n\n\t- set_process_cpu_timer() should just start the cputimer-\u003erunning\n\t  logic (it does), no need to change cputime_expires.xxx_exp\n\n\t- posix_cpu_timers_init_group() should set -\u003erunning when needed\n\n\t- fastpath_timer_check() can check -\u003erunning instead of\n\t  task_cputime_zero(signal-\u003ecputime_expires)\n\nReported-by: Peter Lojkin \u003cia6432@inbox.ru\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: \u003cstable@kernel.org\u003e [for 2.6.29.x]\nLKML-Reference: \u003c20090323193411.GA17514@redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "3997ad317fdf9ecdb5702e2b4fd1f8229814ff8c",
      "tree": "be0b1802f65e85157d97acac38f1bd310ba6d626",
      "parents": [
        "37bed90094fdb1eea6e4afec6a200d4e60143e55"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Thu Feb 12 15:00:52 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Feb 13 13:04:05 2009 +0100"
      },
      "message": "timers: more consistently use clock vs timer\n\nWhile reviewing the manpages, I noticed I\u0027d missed some clock vs timer sites.\n\nMake sure that all timer functions call cpu_timer_sample_group() and not\ncpu_clock_sample_group(). This ensures that we enable the process wide timer\nin time, and therefore pay the O(n) thread group cost from the syscall.\n\nNot doing it here, will result in the first jiffy tick after setting the timer\ndoing this, resulting in a very expensive tick (but only once) and a delay in\nactually starting the timer.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "4da94d49b2ecb0a26e716a8811c3ecc542c2a65d",
      "tree": "a87980822b2499021f080c2b0235f441b30413cc",
      "parents": [
        "3fccfd67df79c6351a156eb25a7a514e5f39c4d9"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Wed Feb 11 11:30:27 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Feb 11 14:04:21 2009 +0100"
      },
      "message": "timers: fix TIMER_ABSTIME for process wide cpu timers\n\nThe POSIX timer interface allows for absolute time expiry values through the\nTIMER_ABSTIME flag, therefore we have to synchronize the timer to the clock\nevery time we start it.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "3fccfd67df79c6351a156eb25a7a514e5f39c4d9",
      "tree": "de4776e69e197119ac64097f3ff6239a55ad77be",
      "parents": [
        "ff08f76d738d0ec0f334b187f61e160caa321d54"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Tue Feb 10 16:37:31 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Feb 11 14:04:19 2009 +0100"
      },
      "message": "timers: split process wide cpu clocks/timers, fix\n\nTo decrease the chance of a missed enable, always enable the timer when we\nsample it, we\u0027ll always disable it when we find that there are no active timers\nin the jiffy tick.\n\nThis fixes a flood of warnings reported by Mike Galbraith.\n\nReported-by: Mike Galbraith \u003cefault@gmx.de\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "4cd4c1b40d40447fb5e7ba80746c6d7ba91d7a53",
      "tree": "b1e580d5284648d6884e951d995509094a92cca4",
      "parents": [
        "32bd671d6cbeda60dc73be77fa2b9037d9a9bfa0"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Thu Feb 05 12:24:16 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Feb 05 13:04:33 2009 +0100"
      },
      "message": "timers: split process wide cpu clocks/timers\n\nChange the process wide cpu timers/clocks so that we:\n\n 1) don\u0027t mess up the kernel with too many threads,\n 2) don\u0027t have a per-cpu allocation for each process,\n 3) have no impact when not used.\n\nIn order to accomplish this we\u0027re going to split it into two parts:\n\n - clocks; which can take all the time they want since they run\n           from user context -- ie. sys_clock_gettime(CLOCK_PROCESS_CPUTIME_ID)\n\n - timers; which need constant time sampling but since they\u0027re\n           explicity used, the user can pay the overhead.\n\nThe clock readout will go back to a full sum of the thread group, while the\ntimers will run of a global \u0027clock\u0027 that only runs when needed, so only\nprograms that make use of the facility pay the price.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nReviewed-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "490dea45d00f01847ebebd007685d564aaf2cd98",
      "tree": "a1f559fd497b10c21479b378ffb262d517cb627b",
      "parents": [
        "ede6f5aea054d3fb67c78857f7abdee602302043"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "peterz@infradead.org",
        "time": "Mon Nov 24 17:06:57 2008 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Jan 07 18:52:44 2009 +0100"
      },
      "message": "itimers: remove the per-cpu-ish-ness\n\nEither we bounce once cacheline per cpu per tick, yielding n^2 bounces\nor we just bounce a single..\n\nAlso, using per-cpu allocations for the thread-groups complicates the\nper-cpu allocator in that its currently aimed to be a fixed sized\nallocator and the only possible extention to that would be vmap based,\nwhich is seriously constrained on 32 bit archs.\n\nSo making the per-cpu memory requirement depend on the number of\nprocesses is an issue.\n\nLastly, it didn\u0027t deal with cpu-hotplug, although admittedly that might\nbe fixable.\n\nSigned-off-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "0b271ef4521756010675b1611bef20fd3096790d",
      "tree": "2c9d22a2c74122a9904e533df27f41d63ffef394",
      "parents": [
        "b19b3c74c7bbec45a848631b8f970ac110665a01",
        "4a6908a3a050aacc9c3a2f36b276b46c0629ad91"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Dec 25 13:51:46 2008 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Dec 25 13:51:46 2008 +0100"
      },
      "message": "Merge commit \u0027v2.6.28\u0027 into core/core\n"
    },
    {
      "commit": "eccdaeafaea3ed115068ba55d01f22e486e5437d",
      "tree": "75b59c0bcbf00c869e4b25b3bf34671ba4c3b8c1",
      "parents": [
        "13d428afc007fcfcd6deeb215618f54cf9c0cae6"
      ],
      "author": {
        "name": "Petr Tesarik",
        "email": "ptesarik@suse.cz",
        "time": "Mon Nov 24 15:46:31 2008 +0100"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon Nov 24 16:41:40 2008 +0100"
      },
      "message": "posix-cpu-timers: fix clock_gettime with CLOCK_PROCESS_CPUTIME_ID\n\nSince CLOCK_PROCESS_CPUTIME_ID is in fact translated to -6, the switch\nstatement in cpu_clock_sample_group() must first mask off the irrelevant\nbits, similar to cpu_clock_sample().\n\nSigned-off-by: Petr Tesarik \u003cptesarik@suse.cz\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n\n--\n posix-cpu-timers.c |    2 +-\n 1 file changed, 1 insertion(+), 1 deletion(-)\n\n"
    },
    {
      "commit": "ce394471d13bf071939a9a0b48c64c297676d233",
      "tree": "ee67e3b6290218b6ecaebd09c1898cde2f3bd95a",
      "parents": [
        "74fcd524e808975dd546dac847119f1995a7c622"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Nov 17 15:40:01 2008 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Nov 17 16:55:54 2008 +0100"
      },
      "message": "thread_group_cputime: kill the bogus -\u003esignal !\u003d NULL check\n\nImpact: simplify the code\n\nthread_group_cputime() is called by current when it must have the valid\n-\u003esignal, or under -\u003esiglock, or under tasklist_lock after the -\u003esignal\ncheck, or the caller is wait_task_zombie() which reaps the child. In any\ncase -\u003esignal can\u0027t be NULL.\n\nBut the point of this patch is not optimization. If it is possible to call\nthread_group_cputime() when -\u003esignal \u003d\u003d NULL we are doing something wrong,\nand we should not mask the problem. thread_group_cputime() fills *times\nand the caller will use it, if we silently use task_struct-\u003e*times* we\nreport the wrong values.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "ad133ba3dc283300e5b62b5b7211d2f39fbf6ee7",
      "tree": "4762492d6c564e0ac1ec47122a0d0d49b0d41e90",
      "parents": [
        "29d7b90c15035741d15421b36000509212b3e135"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Mon Nov 17 15:39:47 2008 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Nov 17 16:49:35 2008 +0100"
      },
      "message": "sched, signals: fix the racy usage of -\u003esignal in account_group_xxx/run_posix_cpu_timers\n\nImpact: fix potential NULL dereference\n\nContrary to ad474caca3e2a0550b7ce0706527ad5ab389a4d4 changelog, other\nacct_group_xxx() helpers can be called after exit_notify() by timer tick.\nThanks to Roland for pointing out this. Somehow I missed this simple fact\nwhen I read the original patch, and I am afraid I confused Frank during\nthe discussion. Sorry.\n\nFortunately, these helpers work with current, we can check -\u003eexit_state\nto ensure that -\u003esignal can\u0027t go away under us.\n\nAlso, add the comment and compiler barrier to account_group_exec_runtime(),\nto make sure we load -\u003esignal only once.\n\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "bb34d92f643086d546b49cef680f6f305ed84414",
      "tree": "275887040c96971e133fa20d99517c1fcea76415",
      "parents": [
        "5ce73a4a5a4893a1aa4cdeed1b1a5a6de42c43b6"
      ],
      "author": {
        "name": "Frank Mayhar",
        "email": "fmayhar@google.com",
        "time": "Fri Sep 12 09:54:39 2008 -0700"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Sep 23 13:38:44 2008 +0200"
      },
      "message": "timers: fix itimer/many thread hang, v2\n\nThis is the second resubmission of the posix timer rework patch, posted\na few days ago.\n\nThis includes the changes from the previous resubmittion, which addressed\nOleg Nesterov\u0027s comments, removing the RCU stuff from the patch and\nun-inlining the thread_group_cputime() function for SMP.\n\nIn addition, per Ingo Molnar it simplifies the UP code, consolidating much\nof it with the SMP version and depending on lower-level SMP/UP handling to\ntake care of the differences.\n\nIt also cleans up some UP compile errors, moves the scheduler stats-related\nmacros into kernel/sched_stats.h, cleans up a merge error in\nkernel/fork.c and has a few other minor fixes and cleanups as suggested\nby Oleg and Ingo. Thanks for the review, guys.\n\nSigned-off-by: Frank Mayhar \u003cfmayhar@google.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "5ce73a4a5a4893a1aa4cdeed1b1a5a6de42c43b6",
      "tree": "7d5207fa5c11d05b515321ffd53082440c312d16",
      "parents": [
        "0a8eaa4f9b58759595a1bfe13a1295fdc25ba026"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sun Sep 14 17:11:46 2008 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sun Sep 14 17:11:46 2008 +0200"
      },
      "message": "timers: fix itimer/many thread hang, cleanups\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "f06febc96ba8e0af80bcc3eaec0a109e88275fac",
      "tree": "46dba9432ef25d2eae9434ff2df638c7a268c0f1",
      "parents": [
        "6bfb09a1005193be5c81ebac9f3ef85210142650"
      ],
      "author": {
        "name": "Frank Mayhar",
        "email": "fmayhar@google.com",
        "time": "Fri Sep 12 09:54:39 2008 -0700"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sun Sep 14 16:25:35 2008 +0200"
      },
      "message": "timers: fix itimer/many thread hang\n\nOverview\n\nThis patch reworks the handling of POSIX CPU timers, including the\nITIMER_PROF, ITIMER_VIRT timers and rlimit handling.  It was put together\nwith the help of Roland McGrath, the owner and original writer of this code.\n\nThe problem we ran into, and the reason for this rework, has to do with using\na profiling timer in a process with a large number of threads.  It appears\nthat the performance of the old implementation of run_posix_cpu_timers() was\nat least O(n*3) (where \"n\" is the number of threads in a process) or worse.\nEverything is fine with an increasing number of threads until the time taken\nfor that routine to run becomes the same as or greater than the tick time, at\nwhich point things degrade rather quickly.\n\nThis patch fixes bug 9906, \"Weird hang with NPTL and SIGPROF.\"\n\nCode Changes\n\nThis rework corrects the implementation of run_posix_cpu_timers() to make it\nrun in constant time for a particular machine.  (Performance may vary between\none machine and another depending upon whether the kernel is built as single-\nor multiprocessor and, in the latter case, depending upon the number of\nrunning processors.)  To do this, at each tick we now update fields in\nsignal_struct as well as task_struct.  The run_posix_cpu_timers() function\nuses those fields to make its decisions.\n\nWe define a new structure, \"task_cputime,\" to contain user, system and\nscheduler times and use these in appropriate places:\n\nstruct task_cputime {\n\tcputime_t utime;\n\tcputime_t stime;\n\tunsigned long long sum_exec_runtime;\n};\n\nThis is included in the structure \"thread_group_cputime,\" which is a new\nsubstructure of signal_struct and which varies for uniprocessor versus\nmultiprocessor kernels.  For uniprocessor kernels, it uses \"task_cputime\" as\na simple substructure, while for multiprocessor kernels it is a pointer:\n\nstruct thread_group_cputime {\n\tstruct task_cputime totals;\n};\n\nstruct thread_group_cputime {\n\tstruct task_cputime *totals;\n};\n\nWe also add a new task_cputime substructure directly to signal_struct, to\ncache the earliest expiration of process-wide timers, and task_cputime also\nreplaces the it_*_expires fields of task_struct (used for earliest expiration\nof thread timers).  The \"thread_group_cputime\" structure contains process-wide\ntimers that are updated via account_user_time() and friends.  In the non-SMP\ncase the structure is a simple aggregator; unfortunately in the SMP case that\nsimplicity was not achievable due to cache-line contention between CPUs (in\none measured case performance was actually _worse_ on a 16-cpu system than\nthe same test on a 4-cpu system, due to this contention).  For SMP, the\nthread_group_cputime counters are maintained as a per-cpu structure allocated\nusing alloc_percpu().  The timer functions update only the timer field in\nthe structure corresponding to the running CPU, obtained using per_cpu_ptr().\n\nWe define a set of inline functions in sched.h that we use to maintain the\nthread_group_cputime structure and hide the differences between UP and SMP\nimplementations from the rest of the kernel.  The thread_group_cputime_init()\nfunction initializes the thread_group_cputime structure for the given task.\nThe thread_group_cputime_alloc() is a no-op for UP; for SMP it calls the\nout-of-line function thread_group_cputime_alloc_smp() to allocate and fill\nin the per-cpu structures and fields.  The thread_group_cputime_free()\nfunction, also a no-op for UP, in SMP frees the per-cpu structures.  The\nthread_group_cputime_clone_thread() function (also a UP no-op) for SMP calls\nthread_group_cputime_alloc() if the per-cpu structures haven\u0027t yet been\nallocated.  The thread_group_cputime() function fills the task_cputime\nstructure it is passed with the contents of the thread_group_cputime fields;\nin UP it\u0027s that simple but in SMP it must also safely check that tsk-\u003esignal\nis non-NULL (if it is it just uses the appropriate fields of task_struct) and,\nif so, sums the per-cpu values for each online CPU.  Finally, the three\nfunctions account_group_user_time(), account_group_system_time() and\naccount_group_exec_runtime() are used by timer functions to update the\nrespective fields of the thread_group_cputime structure.\n\nNon-SMP operation is trivial and will not be mentioned further.\n\nThe per-cpu structure is always allocated when a task creates its first new\nthread, via a call to thread_group_cputime_clone_thread() from copy_signal().\nIt is freed at process exit via a call to thread_group_cputime_free() from\ncleanup_signal().\n\nAll functions that formerly summed utime/stime/sum_sched_runtime values from\nfrom all threads in the thread group now use thread_group_cputime() to\nsnapshot the values in the thread_group_cputime structure or the values in\nthe task structure itself if the per-cpu structure hasn\u0027t been allocated.\n\nFinally, the code in kernel/posix-cpu-timers.c has changed quite a bit.\nThe run_posix_cpu_timers() function has been split into a fast path and a\nslow path; the former safely checks whether there are any expired thread\ntimers and, if not, just returns, while the slow path does the heavy lifting.\nWith the dedicated thread group fields, timers are no longer \"rebalanced\" and\nthe process_timer_rebalance() function and related code has gone away.  All\nsumming loops are gone and all code that used them now uses the\nthread_group_cputime() inline.  When process-wide timers are set, the new\ntask_cputime structure in signal_struct is used to cache the earliest\nexpiration; this is checked in the fast path.\n\nPerformance\n\nThe fix appears not to add significant overhead to existing operations.  It\ngenerally performs the same as the current code except in two cases, one in\nwhich it performs slightly worse (Case 5 below) and one in which it performs\nvery significantly better (Case 2 below).  Overall it\u0027s a wash except in those\ntwo cases.\n\nI\u0027ve since done somewhat more involved testing on a dual-core Opteron system.\n\nCase 1: With no itimer running, for a test with 100,000 threads, the fixed\n\tkernel took 1428.5 seconds, 513 seconds more than the unfixed system,\n\tall of which was spent in the system.  There were twice as many\n\tvoluntary context switches with the fix as without it.\n\nCase 2: With an itimer running at .01 second ticks and 4000 threads (the most\n\tan unmodified kernel can handle), the fixed kernel ran the test in\n\teight percent of the time (5.8 seconds as opposed to 70 seconds) and\n\thad better tick accuracy (.012 seconds per tick as opposed to .023\n\tseconds per tick).\n\nCase 3: A 4000-thread test with an initial timer tick of .01 second and an\n\tinterval of 10,000 seconds (i.e. a timer that ticks only once) had\n\tvery nearly the same performance in both cases:  6.3 seconds elapsed\n\tfor the fixed kernel versus 5.5 seconds for the unfixed kernel.\n\nWith fewer threads (eight in these tests), the Case 1 test ran in essentially\nthe same time on both the modified and unmodified kernels (5.2 seconds versus\n5.8 seconds).  The Case 2 test ran in about the same time as well, 5.9 seconds\nversus 5.4 seconds but again with much better tick accuracy, .013 seconds per\ntick versus .025 seconds per tick for the unmodified kernel.\n\nSince the fix affected the rlimit code, I also tested soft and hard CPU limits.\n\nCase 4: With a hard CPU limit of 20 seconds and eight threads (and an itimer\n\trunning), the modified kernel was very slightly favored in that while\n\tit killed the process in 19.997 seconds of CPU time (5.002 seconds of\n\twall time), only .003 seconds of that was system time, the rest was\n\tuser time.  The unmodified kernel killed the process in 20.001 seconds\n\tof CPU (5.014 seconds of wall time) of which .016 seconds was system\n\ttime.  Really, though, the results were too close to call.  The results\n\twere essentially the same with no itimer running.\n\nCase 5: With a soft limit of 20 seconds and a hard limit of 2000 seconds\n\t(where the hard limit would never be reached) and an itimer running,\n\tthe modified kernel exhibited worse tick accuracy than the unmodified\n\tkernel: .050 seconds/tick versus .028 seconds/tick.  Otherwise,\n\tperformance was almost indistinguishable.  With no itimer running this\n\ttest exhibited virtually identical behavior and times in both cases.\n\nIn times past I did some limited performance testing.  those results are below.\n\nOn a four-cpu Opteron system without this fix, a sixteen-thread test executed\nin 3569.991 seconds, of which user was 3568.435s and system was 1.556s.  On\nthe same system with the fix, user and elapsed time were about the same, but\nsystem time dropped to 0.007 seconds.  Performance with eight, four and one\nthread were comparable.  Interestingly, the timer ticks with the fix seemed\nmore accurate:  The sixteen-thread test with the fix received 149543 ticks\nfor 0.024 seconds per tick, while the same test without the fix received 58720\nfor 0.061 seconds per tick.  Both cases were configured for an interval of\n0.01 seconds.  Again, the other tests were comparable.  Each thread in this\ntest computed the primes up to 25,000,000.\n\nI also did a test with a large number of threads, 100,000 threads, which is\nimpossible without the fix.  In this case each thread computed the primes only\nup to 10,000 (to make the runtime manageable).  System time dominated, at\n1546.968 seconds out of a total 2176.906 seconds (giving a user time of\n629.938s).  It received 147651 ticks for 0.015 seconds per tick, still quite\naccurate.  There is obviously no comparable test without the fix.\n\nSigned-off-by: Frank Mayhar \u003cfmayhar@google.com\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "81d50bb254ed53a0da45a65988e4e1fa08e8a541",
      "tree": "18ad0b3290d3b1c944410a75d967c5cf772243dc",
      "parents": [
        "75d3bce2fc0a80f435fe12f2c9ed2632c8ac29e4"
      ],
      "author": {
        "name": "Hiroshi Shimamoto",
        "email": "h-shimamoto@ct.jp.nec.com",
        "time": "Thu May 15 19:42:49 2008 -0700"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Sat May 24 18:49:22 2008 +0200"
      },
      "message": "posix-timers: print RT watchdog message\n\nIt\u0027s useful to detect which process is killed by RT watchdog.\n\nSigned-off-by: Hiroshi Shimamoto \u003ch-shimamoto@ct.jp.nec.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "f8bd2258e2d520dff28c855658bd24bdafb5102d",
      "tree": "d76db1dc858cb316bc7d5b8473f690a753fd2c93",
      "parents": [
        "6f6d6a1a6a1336431a6cba60ace9e97c3a496a19"
      ],
      "author": {
        "name": "Roman Zippel",
        "email": "zippel@linux-m68k.org",
        "time": "Thu May 01 04:34:31 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 01 08:03:58 2008 -0700"
      },
      "message": "remove div_long_long_rem\n\nx86 is the only arch right now, which provides an optimized for\ndiv_long_long_rem and it has the downside that one has to be very careful that\nthe divide doesn\u0027t overflow.\n\nThe API is a little akward, as the arguments for the unsigned divide are\nsigned.  The signed version also doesn\u0027t handle a negative divisor and\nproduces worse code on 64bit archs.\n\nThere is little incentive to keep this API alive, so this converts the few\nusers to the new API.\n\nSigned-off-by: Roman Zippel \u003czippel@linux-m68k.org\u003e\nCc: Ralf Baechle \u003cralf@linux-mips.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: john stultz \u003cjohnstul@us.ibm.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ee7dd205b5cdbc3231d48e38641efd05f572c52a",
      "tree": "050a76fce97dbbfa8097d974140f441113226b3d",
      "parents": [
        "d59b949f771eb3cbe50865c72e13e2a0a8d4d781"
      ],
      "author": {
        "name": "WANG Cong",
        "email": "xiyou.wangcong@gmail.com",
        "time": "Fri Apr 04 20:54:10 2008 +0200"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Thu Apr 17 12:22:30 2008 +0200"
      },
      "message": "posix-timers: fix shadowed variables\n\nFix sparse warnings like this:\nkernel/posix-cpu-timers.c:1090:25: warning: symbol \u0027t\u0027 shadows an earlier one\nkernel/posix-cpu-timers.c:1058:21: originally declared here\n\nSigned-off-by: WANG Cong \u003cxiyou.wangcong@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "8dc86af00612e5ccff3384c17575362a3f2a2ca0",
      "tree": "04ed08d10cc99d4a283c8ccac078c4ac544b7b94",
      "parents": [
        "20a8143eaa3300a58326156eaf43e03db0fd2cb6"
      ],
      "author": {
        "name": "Pavel Emelyanov",
        "email": "xemul@openvz.org",
        "time": "Fri Feb 08 04:21:52 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Feb 08 09:22:41 2008 -0800"
      },
      "message": "Use find_task_by_vpid in posix timers\n\nAll the functions that need to lookup a task by pid in posix timers obtain\nthis pid from a user space, and thus this value refers to a task in the same\nnamespace, as the current task lives in.\n\nSo the proper behavior is to call find_task_by_vpid() here.\n\nSigned-off-by: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\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": "5a52dd50091b6a6e710a1293db741028f8cc5aac",
      "tree": "ea2b361909e431c458c26208e501ea3cf10edd85",
      "parents": [
        "1020387f5f3b52929b387103cf976321981f8e26"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Fri Jan 25 21:08:32 2008 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Jan 25 21:08:32 2008 +0100"
      },
      "message": "sched: rt-watchdog: fix .rlim_max \u003d RLIM_INFINITY\n\nRemove the curious logic to set it_sched_expires in the future. It useless\nbecause rt.timeout wouldn\u0027t be incremented anyway.\n\nExplicity check for RLIM_INFINITY as a test programm that had a 1s soft limit\nand a inf hard limit would SIGKILL at 1s. This is because RLIM_INFINITY+d-1\nis d-2.\n\nSigned-off-by: Peter Zijlsta \u003ca.p.zijlstra@chello.nl\u003e\nCC: Michal Schmidt \u003cmschmidt@redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "78f2c7db6068fd6ef75b8c120f04a388848eacb5",
      "tree": "994e8082a01c78e691bacb90c0f8368823c87767",
      "parents": [
        "fa717060f1ab7eb6570f2fb49136f838fc9195a9"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Fri Jan 25 21:08:27 2008 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Jan 25 21:08:27 2008 +0100"
      },
      "message": "sched: SCHED_FIFO/SCHED_RR watchdog timer\n\nIntroduce a new rlimit that allows the user to set a runtime timeout on\nreal-time tasks their slice. Once this limit is exceeded the task will receive\nSIGXCPU.\n\nSo it measures runtime since the last sleep.\n\nInput and ideas by Thomas Gleixner and Lennart Poettering.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCC: Lennart Poettering \u003cmzxreary@0pointer.de\u003e\nCC: Michael Kerrisk \u003cmtk.manpages@googlemail.com\u003e\nCC: Ulrich Drepper \u003cdrepper@redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "bac0abd6174e427404dd197cdbefece31e97329b",
      "tree": "68ed6bd8619552c921c9fb99e83cb04fcb235a39",
      "parents": [
        "19b9b9b54e5f115907efd56be2c3799775a46561"
      ],
      "author": {
        "name": "Pavel Emelyanov",
        "email": "xemul@openvz.org",
        "time": "Thu Oct 18 23:40:18 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Oct 19 11:53:40 2007 -0700"
      },
      "message": "Isolate some explicit usage of task-\u003etgid\n\nWith pid namespaces this field is now dangerous to use explicitly, so hide\nit behind the helpers.\n\nAlso the pid and pgrp fields o task_struct and signal_struct are to be\ndeprecated.  Unfortunately this patch cannot be sent right now as this\nleads to tons of warnings, so start isolating them, and deprecate later.\n\nActually the p-\u003etgid \u003d\u003d pid has to be changed to has_group_leader_pid(),\nbut Oleg pointed out that in case of posix cpu timers this is the same, and\nthread_group_leader() is more preferable.\n\nSigned-off-by: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nAcked-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Sukadev Bhattiprolu \u003csukadev@us.ibm.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "41b86e9c510ae66639bf29d3201e1d2384a7fde6",
      "tree": "f340b94f53be08e2fbba2344deb985f9ecb4a036",
      "parents": [
        "20d315d42aed95423a7203e1d7e84086004b5a00"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Jul 09 18:51:58 2007 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Jul 09 18:51:58 2007 +0200"
      },
      "message": "sched: make posix-cpu-timers use CFS\u0027s accounting information\n\nupdate the posix-cpu-timers code to use CFS\u0027s CPU accounting information.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "b5e618181a927210f8be1d3d2249d31904ba358d",
      "tree": "731f1ae4ff1ba56d402bb329182b7d935bb439a1",
      "parents": [
        "db9c02fa8bd50eb104781a9f78cae923d8da1e74"
      ],
      "author": {
        "name": "Pavel Emelianov",
        "email": "xemul@sw.ru",
        "time": "Tue May 08 00:30:19 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue May 08 11:15:11 2007 -0700"
      },
      "message": "Introduce a handy list_first_entry macro\n\nThere are many places in the kernel where the construction like\n\n   foo \u003d list_entry(head-\u003enext, struct foo_struct, list);\n\nare used.\nThe code might look more descriptive and neat if using the macro\n\n   list_first_entry(head, type, member) \\\n             list_entry((head)-\u003enext, type, member)\n\nHere is the macro itself and the examples of its usage in the generic code.\n If it will turn out to be useful, I can prepare the set of patches to\ninject in into arch-specific code, drivers, networking, etc.\n\nSigned-off-by: Pavel Emelianov \u003cxemul@openvz.org\u003e\nSigned-off-by: Kirill Korotaev \u003cdev@openvz.org\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Zach Brown \u003czach.brown@oracle.com\u003e\nCc: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: John McCutchan \u003cttb@tentacle.dhs.org\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: john stultz \u003cjohnstul@us.ibm.com\u003e\nCc: Ram Pai \u003clinuxram@us.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1f2ea0837dbc263ce2a2512c4e73c83df68a6a55",
      "tree": "8e033c747852671f3d4d2cb0bc677dab9ecfc441",
      "parents": [
        "7460ed2844ffad7141e30271c0c3da8336e66014"
      ],
      "author": {
        "name": "Paul E. McKenney",
        "email": "paulmck@linux.vnet.ibm.com",
        "time": "Fri Feb 16 01:28:22 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Feb 16 08:14:00 2007 -0800"
      },
      "message": "[PATCH] posix timers: RCU optimization for clock_gettime()\n\nUse RCU to avoid the need to acquire tasklist_lock in the single-threaded\ncase of clock_gettime().  It still acquires tasklist_lock when for a\n(potentially multithreaded) process.  This change allows realtime\napplications to frequently monitor CPU consumption of individual tasks, as\nrequested (and now deployed) by some off-list users.\n\nThis has been in Ingo Molnar\u0027s -rt patchset since late 2005 with no\nproblems reported, and tests successfully on 2.6.20-rc6, so I believe that\nit is long-since ready for mainline adoption.\n\n[paulmck@linux.vnet.ibm.com: fix exit()/posix_cpu_clock_get() race spotted by Oleg]\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: john stultz \u003cjohnstul@us.ibm.com\u003e\nCc: Roman Zippel \u003czippel@linux-m68k.org\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "ac08c26492a0ad4d94a25bd47d5630cd38337069",
      "tree": "a6115a173a221ef80a9ffe9b4f110bd4d92443c5",
      "parents": [
        "e24650c2e744f99541125a5b023f0d02cad19d14"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Tue Oct 17 00:09:39 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Oct 17 08:18:43 2006 -0700"
      },
      "message": "[PATCH] posix-cpu-timers: prevent signal delivery starvation\n\nThe integer divisions in the timer accounting code can round the result\ndown to 0.  Adding 0 is without effect and the signal delivery stops.\n\nClamp the division result to minimum 1 to avoid this.\n\nProblem was reported by Seongbae Park \u003cspark@google.com\u003e, who provided\nalso an inital patch.\n\nRoland sayeth:\n\n  I have had some more time to think about the problem, and to reproduce it\n  using Toyo\u0027s test case.  For the record, if my understanding of the problem\n  is correct, this happens only in one very particular case.  First, the\n  expiry time has to be so soon that in cputime_t units (usually 1s/HZ ticks)\n  it\u0027s \u003c nthreads so the division yields zero.  Second, it only affects each\n  thread that is so new that its CPU time accumulation is zero so now+0 is\n  still zero and -\u003eit_*_expires winds up staying zero.  For the VIRT and PROF\n  clocks when cputime_t is tick granularity (or the SCHED clock on\n  configurations where sched_clock\u0027s value only advances on clock ticks), this\n  is not hard to arrange with new threads starting up and blocking before they\n  accumulate a whole tick of CPU time.  That\u0027s what happens in Toyo\u0027s test\n  case.\n\n  Note that in general it is fine for that division to round down to zero,\n  and set each thread\u0027s expiry time to its \"now\" time.  The problem only\n  arises with thread\u0027s whose \"now\" value is still zero, so that now+0 winds up\n  0 and is interpreted as \"not set\" instead of \"\u003e\u003d now\".  So it would be a\n  sufficient and more precise fix to just use max(ticks, 1) inside the loop\n  when setting each it_*_expires value.\n\n  But, it does no harm to round the division up to one and always advance\n  every thread\u0027s expiry time.  If the thread didn\u0027t already fire timers for\n  the expiry time of \"now\", there is no expectation that it will do so before\n  the next tick anyway.  So I followed Thomas\u0027s patch in lifting the max out\n  of the loops.\n\n  This patch also covers the reload cases, which are harder to write a test\n  for (and I didn\u0027t try).  I\u0027ve tested it with Toyo\u0027s case and it fixes that.\n\n[toyoa@mvista.com: fix: min_t -\u003e max_t]\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Roland McGrath \u003croland@redhat.com\u003e\nCc: Daniel Walker \u003cdwalker@mvista.com\u003e\nCc: Toyo Abe \u003ctoyoa@mvista.com\u003e\nCc: john stultz \u003cjohnstul@us.ibm.com\u003e\nCc: Roman Zippel \u003czippel@linux-m68k.org\u003e\nCc: Seongbae Park \u003cspark@google.com\u003e\nCc: Peter Mattis \u003cpmattis@google.com\u003e\nCc: Rohit Seth \u003crohitseth@google.com\u003e\nCc: Martin Bligh \u003cmbligh@google.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "e4b765551aa6355eae60b644bed851a9477c4e2b",
      "tree": "d1636c58e475407e2a770659430d54c7d67d72be",
      "parents": [
        "1711ef3866b0360e102327389fe4b76c849bbe83"
      ],
      "author": {
        "name": "Toyo Abe",
        "email": "toyoa@mvista.com",
        "time": "Fri Sep 29 02:00:29 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Sep 29 09:18:15 2006 -0700"
      },
      "message": "[PATCH] posix-timers: Fix the flags handling in posix_cpu_nsleep()\n\nWhen a posix_cpu_nsleep() sleep is interrupted by a signal more than twice, it\nincorrectly reports the sleep time remaining to the user.  Because\nposix_cpu_nsleep() doesn\u0027t report back to the user when it\u0027s called from\nrestart function due to the wrong flags handling.\n\nThis patch, which applies after previous one, moves the nanosleep() function\nfrom posix_cpu_nsleep() to do_cpu_nanosleep() and cleans up the flags handling\nappropriately.\n\nSigned-off-by: Toyo Abe \u003ctoyoa@mvista.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1711ef3866b0360e102327389fe4b76c849bbe83",
      "tree": "b74a2cb6167840563d450859a571d6685966b771",
      "parents": [
        "9c4751fd0eab5b8ebbfafb28cbcc8e03b0da5933"
      ],
      "author": {
        "name": "Toyo Abe",
        "email": "toyoa@mvista.com",
        "time": "Fri Sep 29 02:00:28 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Sep 29 09:18:15 2006 -0700"
      },
      "message": "[PATCH] posix-timers: Fix clock_nanosleep() doesn\u0027t return the remaining time in compatibility mode\n\nThe clock_nanosleep() function does not return the time remaining when the\nsleep is interrupted by a signal.\n\nThis patch creates a new call out, compat_clock_nanosleep_restart(), which\nhandles returning the remaining time after a sleep is interrupted.  This\npatch revives clock_nanosleep_restart().  It is now accessed via the new\ncall out.  The compat_clock_nanosleep_restart() is used for compatibility\naccess.\n\nSince this is implemented in compatibility mode the normal path is\nvirtually unaffected - no real performance impact.\n\nSigned-off-by: Toyo Abe \u003ctoyoa@mvista.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "f53ae1dc3429529a58aa538e0a860d713c7079c3",
      "tree": "fa40b981c48269274183da0bebc9db3cad2c2f92",
      "parents": [
        "30f1e3dd8c72abda343bcf415f7d8894a02b4290"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Thu Jun 15 20:12:02 2006 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Jun 17 10:52:13 2006 -0700"
      },
      "message": "[PATCH] arm_timer: remove a racy and obsolete PF_EXITING check\n\narm_timer() checks PF_EXITING to prevent BUG_ON(-\u003eexit_state)\nin run_posix_cpu_timers().\n\nHowever, for some reason it does so only for CPUCLOCK_PERTHREAD\ncase (which is imho wrong).\n\nAlso, this check is not reliable, PF_EXITING could be set on\nanother cpu without any locks/barriers just after the check,\nso it can\u0027t prevent from attaching the timer to the exiting\ntask.\n\nThe previous patch makes this check unneeded.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "30f1e3dd8c72abda343bcf415f7d8894a02b4290",
      "tree": "68ef326814e3b8e6ba0159cc451cef4b71695ea3",
      "parents": [
        "8f17fc20bfb75bcec4cfeda789738979c8338fdc"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Thu Jun 15 20:11:43 2006 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Jun 17 10:52:13 2006 -0700"
      },
      "message": "[PATCH] run_posix_cpu_timers: remove a bogus BUG_ON()\n\ndo_exit() clears -\u003eit_##clock##_expires, but nothing prevents\nanother cpu to attach the timer to exiting process after that.\narm_timer() tries to protect against this race, but the check\nis racy.\n\nAfter exit_notify() does \u0027write_unlock_irq(\u0026tasklist_lock)\u0027 and\nbefore do_exit() calls \u0027schedule() local timer interrupt can find\ntsk-\u003eexit_state !\u003d 0. If that state was EXIT_DEAD (or another cpu\ndoes sys_wait4) interrupted task has -\u003esignal \u003d\u003d NULL.\n\nAt this moment exiting task has no pending cpu timers, they were\ncleanuped in __exit_signal()-\u003eposix_cpu_timers_exit{,_group}(),\nso we can just return from irq.\n\nJohn Stultz recently confirmed this bug, see\n\n\thttp://marc.theaimsgroup.com/?l\u003dlinux-kernel\u0026m\u003d115015841413687\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "8f17fc20bfb75bcec4cfeda789738979c8338fdc",
      "tree": "ec84c5222de58b4d26507c892d0b8f828a6dce7e",
      "parents": [
        "88d113601ca19c82feb038438c8c5db502d146f9"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Thu Jun 15 20:11:15 2006 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Jun 17 10:52:13 2006 -0700"
      },
      "message": "[PATCH] check_process_timers: fix possible lockup\n\nIf the local timer interrupt happens just after do_exit() sets PF_EXITING\n(and before it clears -\u003eit_xxx_expires) run_posix_cpu_timers() will call\ncheck_process_timers() with tasklist_lock + -\u003esiglock held and\n\n\tcheck_process_timers:\n\n\t\tt \u003d tsk;\n\t\tdo {\n\t\t\t....\n\n\t\t\tdo {\n\t\t\t\tt \u003d next_thread(t);\n\t\t\t} while (unlikely(t-\u003eflags \u0026 PF_EXITING));\n\t\t} while (t !\u003d tsk);\n\nthe outer loop will never stop.\n\nActually, the window is bigger.  Another process can attach the timer\nafter -\u003eit_xxx_expires was cleared (see the next commit) and the \u0027if\n(PF_EXITING)\u0027 check in arm_timer() is racy (see the one after that).\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "97735f25d2ba898ec5e13746451525580631c834",
      "tree": "a6da1078f04bec45967bd83f340b6f7bde731f5d",
      "parents": [
        "6ba1b91213e81aa92b5cf7539f7d2a94ff54947c"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon Jan 09 20:52:37 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Jan 10 08:01:38 2006 -0800"
      },
      "message": "[PATCH] hrtimer: switch clock_nanosleep to hrtimer nanosleep API\n\nSwitch clock_nanosleep to use the new nanosleep functions in hrtimer.c\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a924b04ddea9788e09f387fe19ccbede5f09ddd8",
      "tree": "aa519a2427b7686d35ceae764d3e37d69a6ae5e8",
      "parents": [
        "57a558757bdbb877b54ed5ea15bd0892e02a707d"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon Jan 09 20:52:27 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Jan 10 08:01:36 2006 -0800"
      },
      "message": "[PATCH] hrtimer: make clockid_t arguments const\n\nadd const arguments to the posix-timers.h API functions\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "0aec63e67c69545ca757a73a66f5dcf05fa484bf",
      "tree": "f01b80fd415389506b2a719831dfd6a90c0b258f",
      "parents": [
        "0feb9bfcfa3f9bf67a4a1e3f2608700ad73f92ed"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Fri Jan 06 15:36:48 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jan 06 20:23:04 2006 -0800"
      },
      "message": "[PATCH] Fix posix-cpu-timers sched_time accumulation\n\nI\u0027ve spent the past 3 days digging into a glibc testsuite failure in\ncurrent CVS, specifically libc/rt/tst-cputimer1.c The thr1 and thr2\ntimers fire too early in the second pass of this test.  The second\npass is noteworthy because it makes use of intervals, whereas the\nfirst pass does not.\n\nAll throughout the posix-cpu-timers.c code, the calculation of the\nprocess sched_time sum is implemented roughly as:\n\n\tunsigned long long sum;\n\n\tsum \u003d tsk-\u003esignal-\u003esched_time;\n\tt \u003d tsk;\n\tdo {\n\t\tsum +\u003d t-\u003esched_time;\n\t\tt \u003d next_thread(t);\n\t} while (t !\u003d tsk);\n\nIn fact this is the exact scheme used by check_process_timers().\n\nIn the case of check_process_timers(), current-\u003esched_time has just\nbeen updated (via scheduler_tick(), which is invoked by\nupdate_process_times(), which subsequently invokes\nrun_posix_cpu_timers()) So there is no special processing necessary\nwrt. that.\n\nIn other contexts, we have to allot for the fact that tsk-\u003esched_time\nmight be a bit out of date if we are current.  And the\nposix-cpu-timers.c code uses current_sched_time() to deal with that.\n\nUnfortunately it does so in an erroneous and inconsistent manner in\none spot which is what results in the early timer firing.\n\nIn cpu_clock_sample_group_locked(), it does this:\n\n\t\tcpu-\u003esched \u003d p-\u003esignal-\u003esched_time;\n\t\t/* Add in each other live thread.  */\n\t\twhile ((t \u003d next_thread(t)) !\u003d p) {\n\t\t\tcpu-\u003esched +\u003d t-\u003esched_time;\n\t\t}\n\t\tif (p-\u003etgid \u003d\u003d current-\u003etgid) {\n\t\t\t/*\n\t\t\t * We\u0027re sampling ourselves, so include the\n\t\t\t * cycles not yet banked.  We still omit\n\t\t\t * other threads running on other CPUs,\n\t\t\t * so the total can always be behind as\n\t\t\t * much as max(nthreads-1,ncpus) * (NSEC_PER_SEC/HZ).\n\t\t\t */\n\t\t\tcpu-\u003esched +\u003d current_sched_time(current);\n\t\t} else {\n\t\t\tcpu-\u003esched +\u003d p-\u003esched_time;\n\t\t}\n\nThe problem is the \"p-\u003etgid \u003d\u003d current-\u003etgid\" test.  If \"p\" is\nnot current, and the tgids are the same, we will add the process\nt-\u003esched_time twice into cpu-\u003esched and omit \"p\"\u0027s sched_time\nwhich is very very very wrong.\n\nposix-cpu-timers.c has a helper function, sched_ns(p) which takes care\nof this, so my fix is to use that here instead of this special tgid\ntest.\n\nThe fact that current can be one of the sub-threads of \"p\" points out\nthat we could make things a little bit more accurate, perhaps by using\nsched_ns() on every thread we process in these loops.  It also points\nout that we don\u0027t use the most accurate value for threads in the group\nactively running other cpus (and this is mentioned in the comment).\n\nBut that is a future enhancement, and this fix here definitely makes\nsense.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ee500f274914653a7d3dfca7d0140a3d21658e32",
      "tree": "4b2b664e220e09d1a9cbcd69edebb16707b41e9b",
      "parents": [
        "46596338a10a54550ff03a6f60c28145a080296b"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Mon Nov 28 13:43:55 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Nov 28 14:42:23 2005 -0800"
      },
      "message": "[PATCH] fix 32bit overflow in timespec_to_sample()\n\nfix 32bit overflow in timespec_to_sample()\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "7fd93cf30c531fd8b014e827e7a85fcfc010b2c6",
      "tree": "38326a3b27a04845f86054c85ebeda0d1170d87a",
      "parents": [
        "863c84b97cb660dbb949398e196c0b1bbe4ed39f"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Mon Nov 07 00:57:59 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Nov 07 07:53:24 2005 -0800"
      },
      "message": "[PATCH] posix-timers `unlikely\u0027 rejig\n\n!unlikely(expr) hurts my brain.   likely(!expr) is more straightforward.\n\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "708f430dcc50787d1c0b5c31962a5ff0dd8e35eb",
      "tree": "5c37085047a9c83555607e8811423da4dd3ed4ed",
      "parents": [
        "a241ec65aeac3d69a08a7b153cccbdb7ea35063f"
      ],
      "author": {
        "name": "Roland McGrath",
        "email": "roland@redhat.com",
        "time": "Sun Oct 30 15:03:13 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 30 17:37:27 2005 -0800"
      },
      "message": "[PATCH] posix-cpu-timers: fix overrun reporting\n\nThis change corrects an omission in posix_cpu_timer_schedule, so that it\ncorrectly propagates the overrun calculation to where it will get reported\nto the user.\n\nSigned-off-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "72ab373a5688a78cbdaf3bf96012e597d5399bb7",
      "tree": "906d4857e3cebe48649c4459acb78dca698d58c0",
      "parents": [
        "a362f463a6d316d14daed0f817e151835ce97ff7"
      ],
      "author": {
        "name": "Roland McGrath",
        "email": "roland@redhat.com",
        "time": "Thu Oct 27 03:16:42 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Thu Oct 27 09:08:43 2005 -0700"
      },
      "message": "[PATCH] Yet more posix-cpu-timer fixes\n\nThis just makes sure that a thread\u0027s expiry times can\u0027t get reset after\nit clears them in do_exit.\n\nThis is what allowed us to re-introduce the stricter BUG_ON() check in\na362f463a6d316d14daed0f817e151835ce97ff7.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a362f463a6d316d14daed0f817e151835ce97ff7",
      "tree": "99b510438f9c88860ae17f1233cf21be24a152e3",
      "parents": [
        "7a4ed937aa44acdeb8c6ba671509dc7b54b09d3a"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Thu Oct 27 09:07:33 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Thu Oct 27 09:07:33 2005 -0700"
      },
      "message": "Revert \"remove false BUG_ON() from run_posix_cpu_timers()\"\n\nThis reverts commit 3de463c7d9d58f8cf3395268230cb20a4c15bffa.\n\nRoland has another patch that allows us to leave the BUG_ON() in place\nby just making sure that the condition it tests for really is always\ntrue.\n\nThat goes in next.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "7a4ed937aa44acdeb8c6ba671509dc7b54b09d3a",
      "tree": "b602abc9445b2c4a10788147c58a28fe1f4e63f7",
      "parents": [
        "e02fd44056dd8077b49b4bd92c5799a75e89cd65"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed Oct 26 20:26:53 2005 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Oct 26 15:21:14 2005 -0700"
      },
      "message": "[PATCH] Fix cpu timers expiration time\n\nThere\u0027s a silly off-by-one error in the code that updates the expiration\nof posix CPU timers, causing them to not be properly updated when they\nhit exactly on their expiration time (which should be the normal case).\n\nThis causes them to then fire immediately again, and only _then_ get\nproperly updated.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "70ab81c2ed3d1323e7d6805bf59cbb570dff7937",
      "tree": "7679256f81780842aa443846f4cea7524c0db37a",
      "parents": [
        "b0917bd912d3708c50e1df1b5e1648d0547108a3"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Oct 26 11:23:06 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Oct 26 11:23:06 2005 -0700"
      },
      "message": "posix cpu timers: fix timer ordering\n\nPointed out by Oleg Nesterov, who has been walking over the code\nforwards and backwards.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a69ac4a78d8bd9e1ec478bd7297d4f047fcd44a8",
      "tree": "a56edf4f69cc01c6d4b7b3eeee3646c7ea9810df",
      "parents": [
        "ca531a0a5e01e5122f67cb6aca8fcbfc70e18e0b"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Mon Oct 24 18:29:58 2005 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Oct 24 08:13:14 2005 -0700"
      },
      "message": "[PATCH] posix-timers: fix posix_cpu_timer_set() vs run_posix_cpu_timers() race\n\nThis might be harmless, but looks like a race from code inspection (I\nwas unable to trigger it).  I must admit, I don\u0027t understand why we\ncan\u0027t return TIMER_RETRY after \u0027spin_unlock(\u0026p-\u003esighand-\u003esiglock)\u0027\nwithout doing bump_cpu_timer(), but this is what original code does.\n\nposix_cpu_timer_set:\n\n\tread_lock(\u0026tasklist_lock);\n\n\tspin_lock(\u0026p-\u003esighand-\u003esiglock);\n\tlist_del_init(\u0026timer-\u003eit.cpu.entry);\n\tspin_unlock(\u0026p-\u003esighand-\u003esiglock);\n\nWe are probaly deleting the timer from run_posix_cpu_timers\u0027s \u0027firing\u0027\nlocal list_head while run_posix_cpu_timers() does list_for_each_safe.\n\nVarious bad things can happen, for example we can just delete this timer\nso that list_for_each() will not notice it and run_posix_cpu_timers()\nwill not reset \u0027-\u003efiring\u0027 flag. In that case,\n\n\t....\n\n\tif (timer-\u003eit.cpu.firing) {\n\t\tread_unlock(\u0026tasklist_lock);\n\t\ttimer-\u003eit.cpu.firing \u003d -1;\n\t\treturn TIMER_RETRY;\n\t}\n\nsys_timer_settime() goes to \u0027retry:\u0027, calls posix_cpu_timer_set() again,\nit returns TIMER_RETRY ...\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ca531a0a5e01e5122f67cb6aca8fcbfc70e18e0b",
      "tree": "4dc28c012d1bb78aba82acdcd2462d17020ba77e",
      "parents": [
        "3de463c7d9d58f8cf3395268230cb20a4c15bffa"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Mon Oct 24 14:36:28 2005 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Oct 24 08:12:35 2005 -0700"
      },
      "message": "[PATCH] posix-timers: exit path cleanup\n\nNo need to rebalance when task exited\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "3de463c7d9d58f8cf3395268230cb20a4c15bffa",
      "tree": "20ba1584eefb7ed75f6f8536f40e55966294cf4f",
      "parents": [
        "108150ea78003044e41150c75259447b2c0953b6"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Mon Oct 24 14:34:03 2005 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Oct 24 08:12:35 2005 -0700"
      },
      "message": "[PATCH] posix-timers: remove false BUG_ON() from run_posix_cpu_timers()\n\ndo_exit() clears -\u003eit_##clock##_expires, but nothing prevents\nanother cpu to attach the timer to exiting process after that.\n\nAfter exit_notify() does \u0027write_unlock_irq(\u0026tasklist_lock)\u0027 and\nbefore do_exit() calls \u0027schedule() local timer interrupt can find\ntsk-\u003eexit_state !\u003d 0. If that state was EXIT_DEAD (or another cpu\ndoes sys_wait4) interrupted task has -\u003esignal \u003d\u003d NULL.\n\nAt this moment exiting task has no pending cpu timers, they were cleaned\nup in __exit_signal()-\u003eposix_cpu_timers_exit{,_group}(), so we can just\nreturn from irq.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "108150ea78003044e41150c75259447b2c0953b6",
      "tree": "ffe0b7e59e6ca1c8a4dad18110e485e5c72872bc",
      "parents": [
        "ba9e358fd04190a59e605c2963a15e014139a707"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Sun Oct 23 20:25:39 2005 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Oct 24 08:12:35 2005 -0700"
      },
      "message": "[PATCH] posix-timers: fix cleanup_timers() and run_posix_cpu_timers() races\n\n1. cleanup_timers() sets timer-\u003etask \u003d NULL under tasklist + -\u003esighand locks.\n   That means that this code in posix_cpu_timer_del() and posix_cpu_timer_set()\n\n   \t\tlock_timer(timer);\n\t\tif (timer-\u003etask \u003d\u003d NULL)\n\t\t\treturn;\n\t\tread_lock(tasklist);\n\t\tput_task_struct(timer-\u003etask)\n\n   is racy. With this patch timer-\u003etask modified and accounted only under\n   timer-\u003eit_lock. Sadly, this means that dead task_struct won\u0027t be freed\n   until timer deleted or armed.\n\n2. run_posix_cpu_timers() collects expired timers into local list under\n   tasklist + -\u003esighand again. That means that posix_cpu_timer_del()\n   should check timer-\u003eit.cpu.firing under these locks too.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "e80eda94d3eaf1d12cfc97878eff77cd679dabc9",
      "tree": "38ab17e7b9839297708a6982d661c3725d181c3a",
      "parents": [
        "d475f3f47a0427dfee483cecf9a7e9109e991423"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 23 10:02:50 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 23 10:02:50 2005 -0700"
      },
      "message": "Posix timers: limit number of timers firing at once\n\nBursty timers aren\u0027t good for anybody, very much including latency for\nother programs when we trigger lots of timers in interrupt context.  So\nset a random limit, after which we\u0027ll handle the rest on the next timer\ntick.\n\nNoted by Oleg Nesterov \u003coleg@tv-sign.ru\u003e\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "9465bee863bc4c6cf1566c12d6f92a8133e3da5c",
      "tree": "339f5d3f7554afe2226eb6bdf9fa63851ae73311",
      "parents": [
        "0213df74315bbab9ccaa73146f3e11972ea6de46"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Oct 21 15:36:00 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Oct 21 15:36:00 2005 -0700"
      },
      "message": "Revert \"Fix cpu timers exit deadlock and races\"\n\nRevert commit e03d13e985d48ac4885382c9e3b1510c78bd047f, to be replaced\nby a much nicer fix from Roland.\n"
    },
    {
      "commit": "e03d13e985d48ac4885382c9e3b1510c78bd047f",
      "tree": "04a124c1759f4b16e21fd04031ee9677fab58021",
      "parents": [
        "3359b54c8c07338f3a863d1109b42eebccdcf379"
      ],
      "author": {
        "name": "Roland McGrath",
        "email": "roland@redhat.com",
        "time": "Wed Oct 19 22:21:23 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Oct 19 23:02:01 2005 -0700"
      },
      "message": "[PATCH] Fix cpu timers exit deadlock and races\n\nOleg Nesterov reported an SMP deadlock.  If there is a running timer\ntracking a different process\u0027s CPU time clock when the process owning\nthe timer exits, we deadlock on tasklist_lock in posix_cpu_timer_del via\nexit_itimers.\n\nThat code was using tasklist_lock to check for a race with __exit_signal\nbeing called on the timer-target task and clearing its -\u003esignal.\nHowever, there is actually no such race.  __exit_signal will have called\nposix_cpu_timers_exit and posix_cpu_timers_exit_group before it does\nthat.  Those will clear those k_itimer\u0027s association with the dying\ntask, so posix_cpu_timer_del will return early and never reach the code\nin question.\n\nIn addition, posix_cpu_timer_del called from exit_itimers during execve\nor directly from timer_delete in the process owning the timer can race\nwith an exiting timer-target task to cause a double put on timer-target\ntask struct.  Make sure we always access cpu_timers lists with sighand\nlock held.\n\nSigned-off-by: Roland McGrath \u003croland@redhat.com\u003e\nSigned-off-by: Chris Wright \u003cchrisw@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "47d6b08334a43fafa61a587f721fa21ef65d81be",
      "tree": "57e9082d0011a4ada210878be2b90c2ede14451a",
      "parents": [
        "6ce969171d5187f7621be68c0ebbc7fb02ec53f1"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Mon Oct 17 18:49:42 2005 +0400"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Oct 17 15:00:00 2005 -0700"
      },
      "message": "[PATCH] posix-timers: fix task accounting\n\nMake sure we release the task struct properly when releasing pending\ntimers.\n\nrelease_task() does write_lock_irq(\u0026tasklist_lock), so it can\u0027t race\nwith run_posix_cpu_timers() on any cpu.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
      "tree": "0bba044c4ce775e45a88a51686b5d9f90697ea9d",
      "parents": [],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "message": "Linux-2.6.12-rc2\n\nInitial git repository build. I\u0027m not bothering with the full history,\neven though we have it. We can create a separate \"historical\" git\narchive of that later if we want to, and in the meantime it\u0027s about\n3.2GB when imported into git - space that would just make the early\ngit days unnecessarily complicated, when we don\u0027t have a lot of good\ninfrastructure for it.\n\nLet it rip!\n"
    }
  ]
}
