)]}'
{
  "log": [
    {
      "commit": "20ba5d736f5a42abbee3e14384ff2d0fdaef2e6d",
      "tree": "7537c1a7c2efd3e145f52a43958c45581b0f4530",
      "parents": [
        "545ec2c7945bf7d22d0779e7dc9bf16f7dd9ae34"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Apr 21 18:44:12 2012 -0400"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue May 29 23:28:30 2012 -0400"
      },
      "message": "switch signalfd4() to fget_light/fput_light\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "971316f0503a5c50633d07b83b6db2f15a3a5b00",
      "tree": "d833e48aed1b20d8677e9391250d8948966d6f4d",
      "parents": [
        "d80e731ecab420ddcb79ee9d0ac427acbc187b4b"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 24 20:07:29 2012 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Feb 24 11:42:50 2012 -0800"
      },
      "message": "epoll: ep_unregister_pollwait() can use the freed pwq-\u003ewhead\n\nsignalfd_cleanup() ensures that -\u003esignalfd_wqh is not used, but\nthis is not enough. eppoll_entry-\u003ewhead still points to the memory\nwe are going to free, ep_unregister_pollwait()-\u003eremove_wait_queue()\nis obviously unsafe.\n\nChange ep_poll_callback(POLLFREE) to set eppoll_entry-\u003ewhead \u003d NULL,\nchange ep_unregister_pollwait() to check pwq-\u003ewhead !\u003d NULL under\nrcu_read_lock() before remove_wait_queue(). We add the new helper,\nep_remove_wait_queue(), for this.\n\nThis works because sighand_cachep is SLAB_DESTROY_BY_RCU and because\n-\u003esignalfd_wqh is initialized in sighand_ctor(), not in copy_sighand.\nep_unregister_pollwait()-\u003eremove_wait_queue() can play with already\nfreed and potentially reused -\u003esighand, but this is fine. This memory\nmust have the valid -\u003esignalfd_wqh until rcu_read_unlock().\n\nReported-by: Maxime Bizon \u003cmbizon@freebox.fr\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d80e731ecab420ddcb79ee9d0ac427acbc187b4b",
      "tree": "e96a660b75b5bee8ae2c315878ec917b9c0da446",
      "parents": [
        "855a85f704026d5fe7de94fb1b765fe03404507f"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@redhat.com",
        "time": "Fri Feb 24 20:07:11 2012 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Feb 24 11:42:50 2012 -0800"
      },
      "message": "epoll: introduce POLLFREE to flush -\u003esignalfd_wqh before kfree()\n\nThis patch is intentionally incomplete to simplify the review.\nIt ignores ep_unregister_pollwait() which plays with the same wqh.\nSee the next change.\n\nepoll assumes that the EPOLL_CTL_ADD\u0027ed file controls everything\nf_op-\u003epoll() needs. In particular it assumes that the wait queue\ncan\u0027t go away until eventpoll_release(). This is not true in case\nof signalfd, the task which does EPOLL_CTL_ADD uses its -\u003esighand\nwhich is not connected to the file.\n\nThis patch adds the special event, POLLFREE, currently only for\nepoll. It expects that init_poll_funcptr()\u0027ed hook should do the\nnecessary cleanup. Perhaps it should be defined as EPOLLFREE in\neventpoll.\n\n__cleanup_sighand() is changed to do wake_up_poll(POLLFREE) if\n-\u003esignalfd_wqh is not empty, we add the new signalfd_cleanup()\nhelper.\n\nep_poll_callback(POLLFREE) simply does list_del_init(task_list).\nThis make this poll entry inconsistent, but we don\u0027t care. If you\nshare epoll fd which contains our sigfd with another process you\nshould blame yourself. signalfd is \"really special\". I simply do\nnot know how we can define the \"right\" semantics if it used with\nepoll.\n\nThe main problem is, epoll calls signalfd_poll() once to establish\nthe connection with the wait queue, after that signalfd_poll(NULL)\nreturns the different/inconsistent results depending on who does\nEPOLL_CTL_MOD/signalfd_read/etc. IOW: apart from sigmask, signalfd\nhas nothing to do with the file, it works with the current thread.\n\nIn short: this patch is the hack which tries to fix the symptoms.\nIt also assumes that nobody can take tasklist_lock under epoll\nlocks, this seems to be true.\n\nNote:\n\n\t- we do not have wake_up_all_poll() but wake_up_poll()\n\t  is fine, poll/epoll doesn\u0027t use WQ_FLAG_EXCLUSIVE.\n\n\t- signalfd_cleanup() uses POLLHUP along with POLLFREE,\n\t  we need a couple of simple changes in eventpoll.c to\n\t  make sure it can\u0027t be \"lost\".\n\nReported-by: Maxime Bizon \u003cmbizon@freebox.fr\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Oleg Nesterov \u003coleg@redhat.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f1ebdd60cc73ed36fd977f7e719ce70d2f5cd1c0",
      "tree": "225cb2ea2c0f8990f29383058a07206cfd835893",
      "parents": [
        "f99d055398d53c8f769d5153b3fdce1d2556e7ff",
        "46e387bbd82d438b9131e237e6e2cb55a825da49"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 10:13:10 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Oct 26 10:13:10 2010 -0700"
      },
      "message": "Merge branch \u0027hwpoison\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6\n\n* \u0027hwpoison\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-mce-2.6: (22 commits)\n  Add _addr_lsb field to ia64 siginfo\n  Fix migration.c compilation on s390\n  HWPOISON: Remove retry loop for try_to_unmap\n  HWPOISON: Turn addr_valid from bitfield into char\n  HWPOISON: Disable DEBUG by default\n  HWPOISON: Convert pr_debugs to pr_info\n  HWPOISON: Improve comments in memory-failure.c\n  x86: HWPOISON: Report correct address granuality for huge hwpoison faults\n  Encode huge page size for VM_FAULT_HWPOISON errors\n  Fix build error with !CONFIG_MIGRATION\n  hugepage: move is_hugepage_on_freelist inside ifdef to avoid warning\n  Clean up __page_set_anon_rmap\n  HWPOISON, hugetlb: fix unpoison for hugepage\n  HWPOISON, hugetlb: soft offlining for hugepage\n  HWPOSION, hugetlb: recover from free hugepage error when !MF_COUNT_INCREASED\n  hugetlb: move refcounting in hugepage allocation inside hugetlb_lock\n  HWPOISON, hugetlb: add free check to dequeue_hwpoison_huge_page()\n  hugetlb: hugepage migration core\n  hugetlb: redefine hugepage copy functions\n  hugetlb: add allocate function for hugepage migration\n  ...\n"
    },
    {
      "commit": "6038f373a3dc1f1c26496e60b6c40b164716f07e",
      "tree": "a0d3bbd026eea41b9fc36b8c722cbaf56cd9f825",
      "parents": [
        "1ec5584e3edf9c4bf2c88c846534d19cf986ba11"
      ],
      "author": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Sun Aug 15 18:52:59 2010 +0200"
      },
      "committer": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Fri Oct 15 15:53:27 2010 +0200"
      },
      "message": "llseek: automatically add .llseek fop\n\nAll file_operations should get a .llseek operation so we can make\nnonseekable_open the default for future file operations without a\n.llseek pointer.\n\nThe three cases that we can automatically detect are no_llseek, seq_lseek\nand default_llseek. For cases where we can we can automatically prove that\nthe file offset is always ignored, we use noop_llseek, which maintains\nthe current behavior of not returning an error from a seek.\n\nNew drivers should normally not use noop_llseek but instead use no_llseek\nand call nonseekable_open at open time.  Existing drivers can be converted\nto do the same when the maintainer knows for certain that no user code\nrelies on calling seek on the device file.\n\nThe generated code is often incorrectly indented and right now contains\ncomments that clarify for each added line why a specific variant was\nchosen. In the version that gets submitted upstream, the comments will\nbe gone and I will manually fix the indentation, because there does not\nseem to be a way to do that using coccinelle.\n\nSome amount of new code is currently sitting in linux-next that should get\nthe same modifications, which I will do at the end of the merge window.\n\nMany thanks to Julia Lawall for helping me learn to write a semantic\npatch that does all this.\n\n\u003d\u003d\u003d\u003d\u003d begin semantic patch \u003d\u003d\u003d\u003d\u003d\n// This adds an llseek\u003d method to all file operations,\n// as a preparation for making no_llseek the default.\n//\n// The rules are\n// - use no_llseek explicitly if we do nonseekable_open\n// - use seq_lseek for sequential files\n// - use default_llseek if we know we access f_pos\n// - use noop_llseek if we know we don\u0027t access f_pos,\n//   but we still want to allow users to call lseek\n//\n@ open1 exists @\nidentifier nested_open;\n@@\nnested_open(...)\n{\n\u003c+...\nnonseekable_open(...)\n...+\u003e\n}\n\n@ open exists@\nidentifier open_f;\nidentifier i, f;\nidentifier open1.nested_open;\n@@\nint open_f(struct inode *i, struct file *f)\n{\n\u003c+...\n(\nnonseekable_open(...)\n|\nnested_open(...)\n)\n...+\u003e\n}\n\n@ read disable optional_qualifier exists @\nidentifier read_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\nexpression E;\nidentifier func;\n@@\nssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)\n{\n\u003c+...\n(\n   *off \u003d E\n|\n   *off +\u003d E\n|\n   func(..., off, ...)\n|\n   E \u003d *off\n)\n...+\u003e\n}\n\n@ read_no_fpos disable optional_qualifier exists @\nidentifier read_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\n@@\nssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)\n{\n... when !\u003d off\n}\n\n@ write @\nidentifier write_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\nexpression E;\nidentifier func;\n@@\nssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)\n{\n\u003c+...\n(\n  *off \u003d E\n|\n  *off +\u003d E\n|\n  func(..., off, ...)\n|\n  E \u003d *off\n)\n...+\u003e\n}\n\n@ write_no_fpos @\nidentifier write_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\n@@\nssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)\n{\n... when !\u003d off\n}\n\n@ fops0 @\nidentifier fops;\n@@\nstruct file_operations fops \u003d {\n ...\n};\n\n@ has_llseek depends on fops0 @\nidentifier fops0.fops;\nidentifier llseek_f;\n@@\nstruct file_operations fops \u003d {\n...\n .llseek \u003d llseek_f,\n...\n};\n\n@ has_read depends on fops0 @\nidentifier fops0.fops;\nidentifier read_f;\n@@\nstruct file_operations fops \u003d {\n...\n .read \u003d read_f,\n...\n};\n\n@ has_write depends on fops0 @\nidentifier fops0.fops;\nidentifier write_f;\n@@\nstruct file_operations fops \u003d {\n...\n .write \u003d write_f,\n...\n};\n\n@ has_open depends on fops0 @\nidentifier fops0.fops;\nidentifier open_f;\n@@\nstruct file_operations fops \u003d {\n...\n .open \u003d open_f,\n...\n};\n\n// use no_llseek if we call nonseekable_open\n////////////////////////////////////////////\n@ nonseekable1 depends on !has_llseek \u0026\u0026 has_open @\nidentifier fops0.fops;\nidentifier nso ~\u003d \"nonseekable_open\";\n@@\nstruct file_operations fops \u003d {\n...  .open \u003d nso, ...\n+.llseek \u003d no_llseek, /* nonseekable */\n};\n\n@ nonseekable2 depends on !has_llseek @\nidentifier fops0.fops;\nidentifier open.open_f;\n@@\nstruct file_operations fops \u003d {\n...  .open \u003d open_f, ...\n+.llseek \u003d no_llseek, /* open uses nonseekable */\n};\n\n// use seq_lseek for sequential files\n/////////////////////////////////////\n@ seq depends on !has_llseek @\nidentifier fops0.fops;\nidentifier sr ~\u003d \"seq_read\";\n@@\nstruct file_operations fops \u003d {\n...  .read \u003d sr, ...\n+.llseek \u003d seq_lseek, /* we have seq_read */\n};\n\n// use default_llseek if there is a readdir\n///////////////////////////////////////////\n@ fops1 depends on !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier readdir_e;\n@@\n// any other fop is used that changes pos\nstruct file_operations fops \u003d {\n... .readdir \u003d readdir_e, ...\n+.llseek \u003d default_llseek, /* readdir is present */\n};\n\n// use default_llseek if at least one of read/write touches f_pos\n/////////////////////////////////////////////////////////////////\n@ fops2 depends on !fops1 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read.read_f;\n@@\n// read fops use offset\nstruct file_operations fops \u003d {\n... .read \u003d read_f, ...\n+.llseek \u003d default_llseek, /* read accesses f_pos */\n};\n\n@ fops3 depends on !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier write.write_f;\n@@\n// write fops use offset\nstruct file_operations fops \u003d {\n... .write \u003d write_f, ...\n+\t.llseek \u003d default_llseek, /* write accesses f_pos */\n};\n\n// Use noop_llseek if neither read nor write accesses f_pos\n///////////////////////////////////////////////////////////\n\n@ fops4 depends on !fops1 \u0026\u0026 !fops2 \u0026\u0026 !fops3 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read_no_fpos.read_f;\nidentifier write_no_fpos.write_f;\n@@\n// write fops use offset\nstruct file_operations fops \u003d {\n...\n .write \u003d write_f,\n .read \u003d read_f,\n...\n+.llseek \u003d noop_llseek, /* read and write both use no f_pos */\n};\n\n@ depends on has_write \u0026\u0026 !has_read \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier write_no_fpos.write_f;\n@@\nstruct file_operations fops \u003d {\n... .write \u003d write_f, ...\n+.llseek \u003d noop_llseek, /* write uses no f_pos */\n};\n\n@ depends on has_read \u0026\u0026 !has_write \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read_no_fpos.read_f;\n@@\nstruct file_operations fops \u003d {\n... .read \u003d read_f, ...\n+.llseek \u003d noop_llseek, /* read uses no f_pos */\n};\n\n@ depends on !has_read \u0026\u0026 !has_write \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\n@@\nstruct file_operations fops \u003d {\n...\n+.llseek \u003d noop_llseek, /* no read or write fn */\n};\n\u003d\u003d\u003d\u003d\u003d End semantic patch \u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Julia Lawall \u003cjulia@diku.dk\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\n"
    },
    {
      "commit": "b8aeec34175fc8fe8b0d40efea4846dfc1ba663e",
      "tree": "8111b66ee029cad8950c58bd7d0e5df38a69a321",
      "parents": [
        "6b0cd00bc396daf5c2dcf17a8d82055335341f46"
      ],
      "author": {
        "name": "Hidetoshi Seto",
        "email": "seto.hidetoshi@jp.fujitsu.com",
        "time": "Thu Oct 07 15:31:31 2010 +0900"
      },
      "committer": {
        "name": "Andi Kleen",
        "email": "ak@linux.intel.com",
        "time": "Fri Oct 08 09:32:15 2010 +0200"
      },
      "message": "HWPOISON/signalfd: add support for addr_lsb\n\nSimilar change as to signal delivery: copy out the si_addr_lsb field\nto user space in signalfd\n\nSigned-off-by: Hidetoshi Seto \u003cseto.hidetoshi@jp.fujitsu.com\u003e\nSigned-off-by: Andi Kleen \u003cak@linux.intel.com\u003e\n"
    },
    {
      "commit": "a2a20c412c86e0bb46a9ab0dd31bcfe6d201b913",
      "tree": "25d32209eab03f3e3aa5eca7a93e5199174abb5a",
      "parents": [
        "c7e49c1488ab20342eaaf38f1ca35a207f4c051d"
      ],
      "author": {
        "name": "Nathan Lynch",
        "email": "ntl@pobox.com",
        "time": "Tue Aug 10 18:03:08 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Aug 11 08:59:20 2010 -0700"
      },
      "message": "signalfd: fill in ssi_int for posix timers and message queues\n\nIf signalfd is used to consume a signal generated by a POSIX interval\ntimer or POSIX message queue, the ssi_int field does not reflect the data\n(sigevent-\u003esigev_value) supplied to timer_create(2) or mq_notify(3).  (The\nssi_ptr field, however, is filled in.)\n\nThis behavior differs from signalfd\u0027s treatment of sigqueue-generated\nsignals -- see the default case in signalfd_copyinfo.  It also gives\nresults that differ from the case when a signal is handled conventionally\nvia a sigaction-registered handler.\n\nSo, set signalfd_siginfo-\u003essi_int in the remaining cases (__SI_TIMER,\n__SI_MESGQ) where ssi_ptr is set.\n\nakpm: a non-back-compatible change.  Merge into -stable to minimise the\nnumber of kernels which are in the field and which miss this feature.\n\nSigned-off-by: Nathan Lynch \u003cntl@pobox.com\u003e\nAcked-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5a0e3ad6af8660be21ca98a971cd00f331318c05",
      "tree": "5bfb7be11a03176a87296a43ac6647975c00a1d1",
      "parents": [
        "ed391f4ebf8f701d3566423ce8f17e614cde9806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:04:11 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n\npercpu.h is included by sched.h and module.h and thus ends up being\nincluded when building most .c files.  percpu.h includes slab.h which\nin turn includes gfp.h making everything defined by the two files\nuniversally available and complicating inclusion dependencies.\n\npercpu.h -\u003e slab.h dependency is about to be removed.  Prepare for\nthis change by updating users of gfp and slab facilities include those\nheaders directly instead of assuming availability.  As this conversion\nneeds to touch large number of source files, the following script is\nused as the basis of conversion.\n\n  http://userweb.kernel.org/~tj/misc/slabh-sweep.py\n\nThe script does the followings.\n\n* Scan files for gfp and slab usages and update includes such that\n  only the necessary includes are there.  ie. if only gfp is used,\n  gfp.h, if slab is used, slab.h.\n\n* When the script inserts a new include, it looks at the include\n  blocks and try to put the new include such that its order conforms\n  to its surrounding.  It\u0027s put in the include block which contains\n  core kernel includes, in the same order that the rest are ordered -\n  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there\n  doesn\u0027t seem to be any matching order.\n\n* If the script can\u0027t find a place to put a new include (mostly\n  because the file doesn\u0027t have fitting include block), it prints out\n  an error message indicating which .h file needs to be added to the\n  file.\n\nThe conversion was done in the following steps.\n\n1. The initial automatic conversion of all .c files updated slightly\n   over 4000 files, deleting around 700 includes and adding ~480 gfp.h\n   and ~3000 slab.h inclusions.  The script emitted errors for ~400\n   files.\n\n2. Each error was manually checked.  Some didn\u0027t need the inclusion,\n   some needed manual addition while adding it to implementation .h or\n   embedding .c file was more appropriate for others.  This step added\n   inclusions to around 150 files.\n\n3. The script was run again and the output was compared to the edits\n   from #2 to make sure no file was left behind.\n\n4. Several build tests were done and a couple of problems were fixed.\n   e.g. lib/decompress_*.c used malloc/free() wrappers around slab\n   APIs requiring slab.h to be added manually.\n\n5. The script was run on all .h files but without automatically\n   editing them as sprinkling gfp.h and slab.h inclusions around .h\n   files could easily lead to inclusion dependency hell.  Most gfp.h\n   inclusion directives were ignored as stuff from gfp.h was usually\n   wildly available and often used in preprocessor macros.  Each\n   slab.h inclusion directive was examined and added manually as\n   necessary.\n\n6. percpu.h was updated not to include slab.h.\n\n7. Build test were done on the following configurations and failures\n   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my\n   distributed build env didn\u0027t work with gcov compiles) and a few\n   more options had to be turned off depending on archs to make things\n   build (like ipr on powerpc/64 which failed due to missing writeq).\n\n   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.\n   * powerpc and powerpc64 SMP allmodconfig\n   * sparc and sparc64 SMP allmodconfig\n   * ia64 SMP allmodconfig\n   * s390 SMP allmodconfig\n   * alpha SMP allmodconfig\n   * um on x86_64 SMP allmodconfig\n\n8. percpu.h modifications were reverted so that it could be applied as\n   a separate patch and serve as bisection point.\n\nGiven the fact that I had only a couple of failures from tests on step\n6, I\u0027m fairly confident about the coverage of this conversion patch.\nIf there is a breakage, it\u0027s likely to be something in one of the arch\nheaders which should be easily discoverable easily on most builds of\nthe specific arch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGuess-its-ok-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "628ff7c1d8d8466a5ad8078bd0206a130f8b8a51",
      "tree": "cc7ab0c90849be38e200fc6ff6a3a09e3caf0405",
      "parents": [
        "ed2617585f39dd12fae38c657bba68b9779ea10d"
      ],
      "author": {
        "name": "Roland Dreier",
        "email": "rdreier@cisco.com",
        "time": "Fri Dec 18 09:41:24 2009 -0800"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Tue Dec 22 12:27:34 2009 -0500"
      },
      "message": "anonfd: Allow making anon files read-only\n\nIt seems a couple places such as arch/ia64/kernel/perfmon.c and\ndrivers/infiniband/core/uverbs_main.c could use anon_inode_getfile()\ninstead of a private pseudo-fs + alloc_file(), if only there were a way\nto get a read-only file.  So provide this by having anon_inode_getfile()\ncreate a read-only file if we pass O_RDONLY in flags.\n\nSigned-off-by: Roland Dreier \u003crolandd@cisco.com\u003e\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "836f92adf121f806e9beb5b6b88bd5c9c4ea3f24",
      "tree": "0deccad6d01b7761a8d96cbc12b8e9541317380e",
      "parents": [
        "6559eed8ca7db0531a207cd80be5e28cd6f213c5"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:14:33 2009 +0100"
      },
      "committer": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Jan 14 14:15:31 2009 +0100"
      },
      "message": "[CVE-2009-0029] System call wrappers part 31\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\n"
    },
    {
      "commit": "e38b36f325153eaadd1c2a7abc5762079233e540",
      "tree": "92cfc9855e41c5328d91456f5e373c00ecb8d383",
      "parents": [
        "510df2dd482496083e1c3b1a8c9b6afd5fa4c7d7"
      ],
      "author": {
        "name": "Ulrich Drepper",
        "email": "drepper@redhat.com",
        "time": "Wed Jul 23 21:29:42 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:29 2008 -0700"
      },
      "message": "flag parameters: check magic constants\n\nThis patch adds test that ensure the boundary conditions for the various\nconstants introduced in the previous patches is met.  No code is generated.\n\n[akpm@linux-foundation.org: fix alpha]\nSigned-off-by: Ulrich Drepper \u003cdrepper@redhat.com\u003e\nAcked-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Michael Kerrisk \u003cmtk.manpages@googlemail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5fb5e04926a54bc1c22bba7ca166840f4476196f",
      "tree": "999cf1d58e85ca801a03baeba114b9e8d2734249",
      "parents": [
        "77d2720059618b9b6e827a8b73831eb6c6fad63c"
      ],
      "author": {
        "name": "Ulrich Drepper",
        "email": "drepper@redhat.com",
        "time": "Wed Jul 23 21:29:37 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:29 2008 -0700"
      },
      "message": "flag parameters: NONBLOCK in signalfd\n\nThis patch adds support for the SFD_NONBLOCK flag to signalfd4.  The\nadditional changes needed are minimal.\n\nThe following test must be adjusted for architectures other than x86 and\nx86-64 and in case the syscall numbers changed.\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n#include \u003cfcntl.h\u003e\n#include \u003csignal.h\u003e\n#include \u003cstdio.h\u003e\n#include \u003cunistd.h\u003e\n#include \u003csys/syscall.h\u003e\n\n#ifndef __NR_signalfd4\n# ifdef __x86_64__\n#  define __NR_signalfd4 289\n# elif defined __i386__\n#  define __NR_signalfd4 327\n# else\n#  error \"need __NR_signalfd4\"\n# endif\n#endif\n\n#define SFD_NONBLOCK O_NONBLOCK\n\nint\nmain (void)\n{\n  sigset_t ss;\n  sigemptyset (\u0026ss);\n  sigaddset (\u0026ss, SIGUSR1);\n  int fd \u003d syscall (__NR_signalfd4, -1, \u0026ss, 8, 0);\n  if (fd \u003d\u003d -1)\n    {\n      puts (\"signalfd4(0) failed\");\n      return 1;\n    }\n  int fl \u003d fcntl (fd, F_GETFL);\n  if (fl \u003d\u003d -1)\n    {\n      puts (\"fcntl failed\");\n      return 1;\n    }\n  if (fl \u0026 O_NONBLOCK)\n    {\n      puts (\"signalfd4(0) set non-blocking mode\");\n      return 1;\n    }\n  close (fd);\n\n  fd \u003d syscall (__NR_signalfd4, -1, \u0026ss, 8, SFD_NONBLOCK);\n  if (fd \u003d\u003d -1)\n    {\n      puts (\"signalfd4(SFD_NONBLOCK) failed\");\n      return 1;\n    }\n  fl \u003d fcntl (fd, F_GETFL);\n  if (fl \u003d\u003d -1)\n    {\n      puts (\"fcntl failed\");\n      return 1;\n    }\n  if ((fl \u0026 O_NONBLOCK) \u003d\u003d 0)\n    {\n      puts (\"signalfd4(SFD_NONBLOCK) does not set non-blocking mode\");\n      return 1;\n    }\n  close (fd);\n\n  puts (\"OK\");\n\n  return 0;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nSigned-off-by: Ulrich Drepper \u003cdrepper@redhat.com\u003e\nAcked-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Michael Kerrisk \u003cmtk.manpages@googlemail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9deb27baedb79759c3ab9435a7d8b841842d56e9",
      "tree": "1c88393ba30db851ca0bb93c4e656d4e5dbb22b9",
      "parents": [
        "7d9dbca34240ebb6ff88d8a29c6c7bffd098f0c1"
      ],
      "author": {
        "name": "Ulrich Drepper",
        "email": "drepper@redhat.com",
        "time": "Wed Jul 23 21:29:24 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:27 2008 -0700"
      },
      "message": "flag parameters: signalfd\n\nThis patch adds the new signalfd4 syscall.  It extends the old signalfd\nsyscall by one parameter which is meant to hold a flag value.  In this\npatch the only flag support is SFD_CLOEXEC which causes the close-on-exec\nflag for the returned file descriptor to be set.\n\nA new name SFD_CLOEXEC is introduced which in this implementation must\nhave the same value as O_CLOEXEC.\n\nThe following test must be adjusted for architectures other than x86 and\nx86-64 and in case the syscall numbers changed.\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n#include \u003cfcntl.h\u003e\n#include \u003csignal.h\u003e\n#include \u003cstdio.h\u003e\n#include \u003cunistd.h\u003e\n#include \u003csys/syscall.h\u003e\n\n#ifndef __NR_signalfd4\n# ifdef __x86_64__\n#  define __NR_signalfd4 289\n# elif defined __i386__\n#  define __NR_signalfd4 327\n# else\n#  error \"need __NR_signalfd4\"\n# endif\n#endif\n\n#define SFD_CLOEXEC O_CLOEXEC\n\nint\nmain (void)\n{\n  sigset_t ss;\n  sigemptyset (\u0026ss);\n  sigaddset (\u0026ss, SIGUSR1);\n  int fd \u003d syscall (__NR_signalfd4, -1, \u0026ss, 8, 0);\n  if (fd \u003d\u003d -1)\n    {\n      puts (\"signalfd4(0) failed\");\n      return 1;\n    }\n  int coe \u003d fcntl (fd, F_GETFD);\n  if (coe \u003d\u003d -1)\n    {\n      puts (\"fcntl failed\");\n      return 1;\n    }\n  if (coe \u0026 FD_CLOEXEC)\n    {\n      puts (\"signalfd4(0) set close-on-exec flag\");\n      return 1;\n    }\n  close (fd);\n\n  fd \u003d syscall (__NR_signalfd4, -1, \u0026ss, 8, SFD_CLOEXEC);\n  if (fd \u003d\u003d -1)\n    {\n      puts (\"signalfd4(SFD_CLOEXEC) failed\");\n      return 1;\n    }\n  coe \u003d fcntl (fd, F_GETFD);\n  if (coe \u003d\u003d -1)\n    {\n      puts (\"fcntl failed\");\n      return 1;\n    }\n  if ((coe \u0026 FD_CLOEXEC) \u003d\u003d 0)\n    {\n      puts (\"signalfd4(SFD_CLOEXEC) does not set close-on-exec flag\");\n      return 1;\n    }\n  close (fd);\n\n  puts (\"OK\");\n\n  return 0;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n[akpm@linux-foundation.org: add sys_ni stub]\nSigned-off-by: Ulrich Drepper \u003cdrepper@redhat.com\u003e\nAcked-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Michael Kerrisk \u003cmtk.manpages@googlemail.com\u003e\nCc: \u003clinux-arch@vger.kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7d9dbca34240ebb6ff88d8a29c6c7bffd098f0c1",
      "tree": "7e3226a4d885f5e4444fbe01a08c51b0b33b2cc7",
      "parents": [
        "c019bbc612f6633ede7ed67725cbf68de45ae8a4"
      ],
      "author": {
        "name": "Ulrich Drepper",
        "email": "drepper@redhat.com",
        "time": "Wed Jul 23 21:29:22 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:27 2008 -0700"
      },
      "message": "flag parameters: anon_inode_getfd extension\n\nThis patch just extends the anon_inode_getfd interface to take an additional\nparameter with a flag value.  The flag value is passed on to\nget_unused_fd_flags in anticipation for a use with the O_CLOEXEC flag.\n\nNo actual semantic changes here, the changed callers all pass 0 for now.\n\n[akpm@linux-foundation.org: KVM fix]\nSigned-off-by: Ulrich Drepper \u003cdrepper@redhat.com\u003e\nAcked-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Michael Kerrisk \u003cmtk.manpages@googlemail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2030a42cecd4dd1985a2ab03e25f3cd6106a5ca8",
      "tree": "7cb4710c3f7a4e034a20890f0df99bc42f9bbcee",
      "parents": [
        "9f3acc3140444a900ab280de942291959f0f615d"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Sat Feb 23 06:46:49 2008 -0500"
      },
      "committer": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Thu May 01 13:08:50 2008 -0400"
      },
      "message": "[PATCH] sanitize anon_inode_getfd()\n\na) none of the callers even looks at inode or file returned by anon_inode_getfd()\nb) any caller that would try to look at those would be racy, since by the time\nit returns we might have raced with close() from another thread and that\nfile would be pining for fjords.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\n"
    },
    {
      "commit": "0859ab59a8a48d2a96b9d2b7100889bcb6bb5818",
      "tree": "afaa1f394cdd14c5ac3d3c4b956a6ac440c2c479",
      "parents": [
        "544451a1a36b06f43fc67112ede3b92e6203eb9d"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Thu Apr 10 21:29:29 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Apr 11 08:06:44 2008 -0700"
      },
      "message": "signalfd: fix for incorrect SI_QUEUE user data reporting\n\nMichael Kerrisk found out that signalfd was not reporting back user data\npushed using sigqueue:\n\n  http://groups.google.com/group/linux.kernel/msg/9397cab8551e3123\n\nThe following patch makes signalfd report back the ssi_ptr and ssi_int members\nof the signalfd_siginfo structure.\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nAcked-by: Michael Kerrisk \u003cmtk.manpages@googlemail.com\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "7ec37dfd4d282ce132dcb048398800951f6d11ef",
      "tree": "4fef63bbc5695661fd0f2288801be48038bf8596",
      "parents": [
        "12c2ab5e8fdfde67f3f6778a366cbdef06de410d"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@kernel.org",
        "time": "Wed Feb 06 01:36:48 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Feb 06 10:41:03 2008 -0800"
      },
      "message": "fs/signalfd.c should #include \u003clinux/syscalls.h\u003e\n\nEvery file should include the headers containing the prototypes for its global\nfunctions (in this case sys_signalfd()).\n\nSigned-off-by: Adrian Bunk \u003cbunk@kernel.org\u003e\nCc: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "14e4a0f2bb242f8008bc70b55fa834292c6a62af",
      "tree": "325c507c57e4cb25cc2659869297558ffbb0a2e6",
      "parents": [
        "96532babc3e2ec4e0fce891d64319f183f043855"
      ],
      "author": {
        "name": "Robert P. J. Day",
        "email": "rpjday@crashcourse.ca",
        "time": "Sun Feb 03 15:12:15 2008 +0200"
      },
      "committer": {
        "name": "Adrian Bunk",
        "email": "bunk@kernel.org",
        "time": "Sun Feb 03 15:12:15 2008 +0200"
      },
      "message": "Fix a small number of \"memeber\" typoes.\n\nSigned-off-by: Robert P. J. Day \u003crpjday@crashcourse.ca\u003e\nSigned-off-by: Adrian Bunk \u003cbunk@kernel.org\u003e\n"
    },
    {
      "commit": "96358de6bc2ab0bc5e8b44a8f3be4c9bf4a14e4f",
      "tree": "62f7ed295e7da3eb0706ca8d2b7454817bed6400",
      "parents": [
        "059590f495f9c6e89cb018b9e612c3eec2336109"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Tue Oct 16 23:30:23 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Oct 17 08:43:01 2007 -0700"
      },
      "message": "rename signalfd_siginfo fields\n\nFor Michael Kerrisk request, the following patch renames signalfd_siginfo\nfields in order to keep them consistent with the siginfo_t ones.\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Michael Kerrisk \u003cmtk-manpages@gmx.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b8fceee17a310f189188599a8fa5e9beaff57eb0",
      "tree": "21308319be2579059a4d4d7db680a73334659f82",
      "parents": [
        "9db619e66503494e41159de3c76fafabe80d016b"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Thu Sep 20 12:40:16 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Sep 20 13:19:59 2007 -0700"
      },
      "message": "signalfd simplification\n\nThis simplifies signalfd code, by avoiding it to remain attached to the\nsighand during its lifetime.\n\nIn this way, the signalfd remain attached to the sighand only during\npoll(2) (and select and epoll) and read(2).  This also allows to remove\nall the custom \"tsk \u003d\u003d current\" checks in kernel/signal.c, since\ndequeue_signal() will only be called by \"current\".\n\nI think this is also what Ben was suggesting time ago.\n\nThe external effect of this, is that a thread can extract only its own\nprivate signals and the group ones.  I think this is an acceptable\nbehaviour, in that those are the signals the thread would be able to\nfetch w/out signalfd.\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f9ee228bdc82cff8ea1ec00fd952890e00679dd8",
      "tree": "4c087502431a70bf7479555dcf4c1c4265835ebe",
      "parents": [
        "834d216e1f804560bd1421c511ad168d7c24b01d"
      ],
      "author": {
        "name": "Oleg Nesterov",
        "email": "oleg@tv-sign.ru",
        "time": "Wed Aug 22 14:01:48 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Aug 22 19:52:46 2007 -0700"
      },
      "message": "signalfd: make it group-wide, fix posix-timers scheduling\n\nWith this patch any thread can dequeue its own private signals via signalfd,\neven if it was created by another sub-thread.\n\nTo do so, we pass \"current\" to dequeue_signal() if the caller is from the same\nthread group. This also fixes the scheduling of posix timers broken by the\nprevious patch.\n\nIf the caller doesn\u0027t belong to this thread group, we can\u0027t handle __SI_TIMER\ncase properly anyway. Perhaps we should forbid the cross-process signalfd usage\nand convert ctx-\u003etsk to ctx-\u003esighand.\n\nSigned-off-by: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nCc: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Michael Kerrisk \u003cmtk-manpages@gmx.net\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f50cadaa8ffa72ad430e5beabe02eb752f3f72a3",
      "tree": "6bceb53482a223006f48e784ca1458375e53d4a5",
      "parents": [
        "87588dd6663b6f306f03f2deaec0d0fd3f0cb26e"
      ],
      "author": {
        "name": "Ulrich Drepper",
        "email": "drepper@redhat.com",
        "time": "Thu Jul 26 10:40:55 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 26 11:33:06 2007 -0700"
      },
      "message": "tiny signalfd cleanup\n\nThis is probably a leftover from a time when the return wasn\u0027t there yet.\nNow the extra assignment is just irritating.\n\nSigned-off-by: Ulrich Drepper \u003cdrepper@redhat.com\u003e\nCc: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f8738c5c5298d55ccfc26383f9f45af082a9be57",
      "tree": "baa7c6f2a31dcc4c4d2875f73b1462be5fbb388d",
      "parents": [
        "58e78475ec706f93e0cc049449ffd11fbfdadb3e"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Wed Jun 27 14:09:59 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jun 28 11:34:54 2007 -0700"
      },
      "message": "avoid spurious POLLIN returns in signalfd\n\nThe new code in kernel/signal.c does not allow fetching private signals\nfrom another task.  This patch avoid spurious POLLIN returns from a\nsignalfd poll(2) operation.\n\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b3762bfc8d046342db664d855f8f875e8a4c2ca1",
      "tree": "fefa7bf1aecbdf458f31d4896498282f5ee9d1e7",
      "parents": [
        "0532cb427ed2a5957d39e98cb5a4741b68fc6102"
      ],
      "author": {
        "name": "Davi Arnaut",
        "email": "davi@haxent.com.br",
        "time": "Wed May 23 13:58:04 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 23 20:14:14 2007 -0700"
      },
      "message": "signalfd: retrieve multiple signals with one read() call\n\nGathering signals in bulk enables server applications to drain a signal\nqueue (almost full of realtime signals) more efficiently by reducing the\nsyscall and file look-up overhead.\n\nVery similar to the sigtimedwait4() call described by Niels Provos, Chuck\nLever, and Stephen Tweedie in a paper entitled \"Analyzing the Overload\nBehavior of a Simple Web Server\".  The paper lists more details and\nadvantages.\n\nSigned-off-by: Davi E. M. Arnaut \u003cdavi@haxent.com.br\u003e\nAcked-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "fba2afaaec790dc5ab4ae8827972f342211bbb86",
      "tree": "2694d4cd8c6b7d69a5569b92151d61a3d4af39b7",
      "parents": [
        "5dc8bf8132d59c03fe2562bce165c2f03f021687"
      ],
      "author": {
        "name": "Davide Libenzi",
        "email": "davidel@xmailserver.org",
        "time": "Thu May 10 22:23:13 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri May 11 08:29:36 2007 -0700"
      },
      "message": "signal/timer/event: signalfd core\n\nThis patch series implements the new signalfd() system call.\n\nI took part of the original Linus code (and you know how badly it can be\nbroken :), and I added even more breakage ;) Signals are fetched from the same\nsignal queue used by the process, so signalfd will compete with standard\nkernel delivery in dequeue_signal().  If you want to reliably fetch signals on\nthe signalfd file, you need to block them with sigprocmask(SIG_BLOCK).  This\nseems to be working fine on my Dual Opteron machine.  I made a quick test\nprogram for it:\n\nhttp://www.xmailserver.org/signafd-test.c\n\nThe signalfd() system call implements signal delivery into a file descriptor\nreceiver.  The signalfd file descriptor if created with the following API:\n\nint signalfd(int ufd, const sigset_t *mask, size_t masksize);\n\nThe \"ufd\" parameter allows to change an existing signalfd sigmask, w/out going\nto close/create cycle (Linus idea).  Use \"ufd\" \u003d\u003d -1 if you want a brand new\nsignalfd file.\n\nThe \"mask\" allows to specify the signal mask of signals that we are interested\nin.  The \"masksize\" parameter is the size of \"mask\".\n\nThe signalfd fd supports the poll(2) and read(2) system calls.  The poll(2)\nwill return POLLIN when signals are available to be dequeued.  As a direct\nconsequence of supporting the Linux poll subsystem, the signalfd fd can use\nused together with epoll(2) too.\n\nThe read(2) system call will return a \"struct signalfd_siginfo\" structure in\nthe userspace supplied buffer.  The return value is the number of bytes copied\nin the supplied buffer, or -1 in case of error.  The read(2) call can also\nreturn 0, in case the sighand structure to which the signalfd was attached,\nhas been orphaned.  The O_NONBLOCK flag is also supported, and read(2) will\nreturn -EAGAIN in case no signal is available.\n\nIf the size of the buffer passed to read(2) is lower than sizeof(struct\nsignalfd_siginfo), -EINVAL is returned.  A read from the signalfd can also\nreturn -ERESTARTSYS in case a signal hits the process.  The format of the\nstruct signalfd_siginfo is, and the valid fields depends of the (-\u003ecode \u0026\n__SI_MASK) value, in the same way a struct siginfo would:\n\nstruct signalfd_siginfo {\n\t__u32 signo;\t/* si_signo */\n\t__s32 err;\t/* si_errno */\n\t__s32 code;\t/* si_code */\n\t__u32 pid;\t/* si_pid */\n\t__u32 uid;\t/* si_uid */\n\t__s32 fd;\t/* si_fd */\n\t__u32 tid;\t/* si_fd */\n\t__u32 band;\t/* si_band */\n\t__u32 overrun;\t/* si_overrun */\n\t__u32 trapno;\t/* si_trapno */\n\t__s32 status;\t/* si_status */\n\t__s32 svint;\t/* si_int */\n\t__u64 svptr;\t/* si_ptr */\n\t__u64 utime;\t/* si_utime */\n\t__u64 stime;\t/* si_stime */\n\t__u64 addr;\t/* si_addr */\n};\n\n[akpm@linux-foundation.org: fix signalfd_copyinfo() on i386]\nSigned-off-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    }
  ]
}
