)]}'
{
  "log": [
    {
      "commit": "470fd646444c65a5d062a371f5ec8dcedee61239",
      "tree": "59b923486d4a95efa07c4b2ad7cb0b1fcc3f3c88",
      "parents": [
        "bd89aabc6761de1c35b154fe6f914a445d301510"
      ],
      "author": {
        "name": "Cliff Wickman",
        "email": "cpw@sgi.com",
        "time": "Thu Oct 18 23:40:46 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Oct 19 11:53:44 2007 -0700"
      },
      "message": "hotplug cpu: migrate a task within its cpuset\n\nWhen a cpu is disabled, move_task_off_dead_cpu() is called for tasks that have\nbeen running on that cpu.\n\nCurrently, such a task is migrated:\n 1) to any cpu on the same node as the disabled cpu, which is both online\n    and among that task\u0027s cpus_allowed\n 2) to any cpu which is both online and among that task\u0027s cpus_allowed\n\nIt is typical of a multithreaded application running on a large NUMA system to\nhave its tasks confined to a cpuset so as to cluster them near the memory that\nthey share.  Furthermore, it is typical to explicitly place such a task on a\nspecific cpu in that cpuset.  And in that case the task\u0027s cpus_allowed\nincludes only a single cpu.\n\nThis patch would insert a preference to migrate such a task to some cpu within\nits cpuset (and set its cpus_allowed to its entire cpuset).\n\nWith this patch, migrate the task to:\n 1) to any cpu on the same node as the disabled cpu, which is both online\n    and among that task\u0027s cpus_allowed\n 2) to any online cpu within the task\u0027s cpuset\n 3) to any cpu which is both online and among that task\u0027s cpus_allowed\n\nIn order to do this, move_task_off_dead_cpu() must make a call to\ncpuset_cpus_allowed_locked(), a new subset of cpuset_cpus_allowed(), that will\nnot block.  (name change - per Oleg\u0027s suggestion)\n\nCalls are made to cpuset_lock() and cpuset_unlock() in migration_call() to set\nthe cpuset mutex during the whole migrate_live_tasks() and\nmigrate_dead_tasks() procedure.\n\n[akpm@linux-foundation.org: build fix]\n[pj@sgi.com: Fix indentation and spacing]\nSigned-off-by: Cliff Wickman \u003ccpw@sgi.com\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Paul Jackson \u003cpj@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": "8707d8b8c0cbdf4441507f8dded194167da896c7",
      "tree": "1e9ac6b15027bd55263378e551c1595a937d66d6",
      "parents": [
        "020958b6272882c1a8bfbe5f3e0927f3845c2698"
      ],
      "author": {
        "name": "Paul Menage",
        "email": "menage@google.com",
        "time": "Thu Oct 18 23:40:22 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Oct 19 11:53:41 2007 -0700"
      },
      "message": "Fix cpusets update_cpumask\n\nCause writes to cpuset \"cpus\" file to update cpus_allowed for member tasks:\n\n- collect batches of tasks under tasklist_lock and then call\n  set_cpus_allowed() on them outside the lock (since this can sleep).\n\n- add a simple generic priority heap type to allow efficient collection\n  of batches of tasks to be processed without duplicating or missing any\n  tasks in subsequent batches.\n\n- make \"cpus\" file update a no-op if the mask hasn\u0027t changed\n\n- fix race between update_cpumask() and sched_setaffinity() by making\n  sched_setaffinity() post-check that it\u0027s not running on any cpus outside\n  cpuset_cpus_allowed().\n\n[akpm@linux-foundation.org: coding-style fixes]\nSigned-off-by: Paul Menage \u003cmenage@google.com\u003e\nCc: Paul Jackson \u003cpj@sgi.com\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Cedric Le Goater \u003cclg@fr.ibm.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Serge Hallyn \u003cserue@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": "020958b6272882c1a8bfbe5f3e0927f3845c2698",
      "tree": "0525b9aa75ef425e40c6b6094bd51f4765ca1fa5",
      "parents": [
        "029190c515f15f512ac85de8fc686d4dbd0ae731"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Thu Oct 18 23:40:21 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Oct 19 11:53:41 2007 -0700"
      },
      "message": "cpusets: decrustify cpuset mask update code\n\nDecrustify the kernel/cpuset.c \u0027cpus\u0027 and \u0027mems\u0027 updating code.\n\nOther than subtle improvements in the consistency of identifying\nwhite space at the beginning and end of passed in masks, this\ndoesn\u0027t make any visible difference in behaviour.  But it\u0027s\none or two hundred kernel text bytes smaller, and easier to\nunderstand.\n\n[akpm@linux-foundation.org: coding-style fix]\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nReviewed-by: Paul Menage \u003cmenage@google.com\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": "029190c515f15f512ac85de8fc686d4dbd0ae731",
      "tree": "a946f9223d17e945141fef81f94a75b38e2cc6ef",
      "parents": [
        "2f2a3a46fcafa7a12d61454f67f932dfe7d84c60"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Thu Oct 18 23:40:20 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Oct 19 11:53:41 2007 -0700"
      },
      "message": "cpuset sched_load_balance flag\n\nAdd a new per-cpuset flag called \u0027sched_load_balance\u0027.\n\nWhen enabled in a cpuset (the default value) it tells the kernel scheduler\nthat the scheduler should provide the normal load balancing on the CPUs in\nthat cpuset, sometimes moving tasks from one CPU to a second CPU if the\nsecond CPU is less loaded and if that task is allowed to run there.\n\nWhen disabled (write \"0\" to the file) then it tells the kernel scheduler\nthat load balancing is not required for the CPUs in that cpuset.\n\nNow even if this flag is disabled for some cpuset, the kernel may still\nhave to load balance some or all the CPUs in that cpuset, if some\noverlapping cpuset has its sched_load_balance flag enabled.\n\nIf there are some CPUs that are not in any cpuset whose sched_load_balance\nflag is enabled, the kernel scheduler will not load balance tasks to those\nCPUs.\n\nMoreover the kernel will partition the \u0027sched domains\u0027 (non-overlapping\nsets of CPUs over which load balancing is attempted) into the finest\ngranularity partition that it can find, while still keeping any two CPUs\nthat are in the same shed_load_balance enabled cpuset in the same element\nof the partition.\n\nThis serves two purposes:\n 1) It provides a mechanism for real time isolation of some CPUs, and\n 2) it can be used to improve performance on systems with many CPUs\n    by supporting configurations in which load balancing is not done\n    across all CPUs at once, but rather only done in several smaller\n    disjoint sets of CPUs.\n\nThis mechanism replaces the earlier overloading of the per-cpuset\nflag \u0027cpu_exclusive\u0027, which overloading was removed in an earlier\npatch: cpuset-remove-sched-domain-hooks-from-cpusets\n\nSee further the Documentation and comments in the code itself.\n\n[akpm@linux-foundation.org: don\u0027t be weird]\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nAcked-by: 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": "8793d854edbc2774943a4b0de3304dc73991159a",
      "tree": "380b3403a0fedfcce61d9af5af1ffbcc71017abf",
      "parents": [
        "81a6a5cdd2c5cd70874b88afe524ab09e9e869af"
      ],
      "author": {
        "name": "Paul Menage",
        "email": "menage@google.com",
        "time": "Thu Oct 18 23:39:39 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Oct 19 11:53:36 2007 -0700"
      },
      "message": "Task Control Groups: make cpusets a client of cgroups\n\nRemove the filesystem support logic from the cpusets system and makes cpusets\na cgroup subsystem\n\nThe \"cpuset\" filesystem becomes a dummy filesystem; attempts to mount it get\npassed through to the cgroup filesystem with the appropriate options to\nemulate the old cpuset filesystem behaviour.\n\nSigned-off-by: Paul Menage \u003cmenage@google.com\u003e\nCc: Serge E. Hallyn \u003cserue@us.ibm.com\u003e\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Kirill Korotaev \u003cdev@openvz.org\u003e\nCc: Herbert Poetzl \u003cherbert@13thfloor.at\u003e\nCc: Srivatsa Vaddagiri \u003cvatsa@in.ibm.com\u003e\nCc: Cedric Le Goater \u003cclg@fr.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": "55a230aae650157720becc09cadb7d10efbf5013",
      "tree": "a4d85dd865c4e939580fdde986a0d29912e45a7e",
      "parents": [
        "8f731f7d83d6c6a3eeb32cce79bfcddbf7fac8cc"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Thu Oct 18 23:39:28 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Fri Oct 19 11:53:35 2007 -0700"
      },
      "message": "cpuset: zero malloc - revert the old cpuset fix\n\nThe cpuset code to present a list of tasks using a cpuset to user space could\nwrite to an array that it had kmalloc\u0027d, after a kmalloc request of zero size.\n\nThe problem was that the code didn\u0027t check for writes past the allocated end\nof the array until -after- the first write.\n\nThis is a race condition that is likely rare -- it would only show up if a\ncpuset went from being empty to having a task in it, during the brief time\nbetween the allocation and the first write.\n\nPrior to roughly 2.6.22 kernels, this was also a benign problem, because a\nzero kmalloc returned a few usable bytes anyway, and no harm was done with the\nbogus write.\n\nWith the 2.6.22 kernel changes to make issue a warning if code tries to write\nto the location returned from a zero size allocation, this problem is no\nlonger benign.  This cpuset code would occassionally trigger that warning.\n\nThe fix is trivial -- check before storing into the array, not after, whether\nthe array is big enough to hold the store.\n\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: \"Serge E. Hallyn\" \u003cserue@us.ibm.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nCc: Herbert Poetzl \u003cherbert@13thfloor.at\u003e\nCc: Kirill Korotaev \u003cdev@openvz.org\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Srivatsa Vaddagiri \u003cvatsa@in.ibm.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Paul Jackson \u003cpj@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": "dedf8b79ec06e91fa87f6cba99e6e61b4140ceca",
      "tree": "2f47e112aa2bb2baf973ccbcf072be50c9d9aed7",
      "parents": [
        "6ae965cd647d84ab787225fe908cb5bbbc499605"
      ],
      "author": {
        "name": "Daniel Walker",
        "email": "dwalker@mvista.com",
        "time": "Thu Oct 18 03:06:04 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Oct 18 14:37:24 2007 -0700"
      },
      "message": "whitespace fixes: cpuset\n\nSigned-off-by: Daniel Walker \u003cdwalker@mvista.com\u003e\nCc: Paul Jackson \u003cpj@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": "bbe373f2c60b2aa36c3231734a5afc5271a06718",
      "tree": "00146d69594672ca41e35be8ff9b349e8751ab5c",
      "parents": [
        "7213f5066fc8a17c78389fe245de522b5cf0648a"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue Oct 16 23:25:58 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Oct 17 08:42:46 2007 -0700"
      },
      "message": "oom: compare cpuset mems_allowed instead of exclusive ancestors\n\nInstead of testing for overlap in the memory nodes of the the nearest\nexclusive ancestor of both current and the candidate task, it is better to\nsimply test for intersection between the task\u0027s mems_allowed in their task\ndescriptors.  This does not require taking callback_mutex since it is only\nused as a hint in the badness scoring.\n\nTasks that do not have an intersection in their mems_allowed with the current\ntask are not explicitly restricted from being OOM killed because it is quite\npossible that the candidate task has allocated memory there before and has\nsince changed its mems_allowed.\n\nCc: Andrea Arcangeli \u003candrea@suse.de\u003e\nAcked-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "607717a65d92858fd925bec05baae4d142719f27",
      "tree": "b7faea733fe3426881e63bc7549db9c97c8bdf59",
      "parents": [
        "2ed6dc34f9ed39bb8e4c81ea1056f0ba56315841"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Tue Oct 16 01:27:43 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Oct 16 09:43:09 2007 -0700"
      },
      "message": "cpuset: remove sched domain hooks from cpusets\n\nRemove the cpuset hooks that defined sched domains depending on the setting\nof the \u0027cpu_exclusive\u0027 flag.\n\nThe cpu_exclusive flag can only be set on a child if it is set on the\nparent.\n\nThis made that flag painfully unsuitable for use as a flag defining a\npartitioning of a system.\n\nIt was entirely unobvious to a cpuset user what partitioning of sched\ndomains they would be causing when they set that one cpu_exclusive bit on\none cpuset, because it depended on what CPUs were in the remainder of that\ncpusets siblings and child cpusets, after subtracting out other\ncpu_exclusive cpusets.\n\nFurthermore, there was no way on production systems to query the\nresult.\n\nUsing the cpu_exclusive flag for this was simply wrong from the get go.\n\nFortunately, it was sufficiently borked that so far as I know, almost no\nsuccessful use has been made of this.  One real time group did use it to\naffectively isolate CPUs from any load balancing efforts.  They are willing\nto adapt to alternative mechanisms for this, such as someway to manipulate\nthe list of isolated CPUs on a running system.  They can do without this\npresent cpu_exclusive based mechanism while we develop an alternative.\n\nThere is a real risk, to the best of my understanding, of users\naccidentally setting up a partitioned scheduler domains, inhibiting desired\nload balancing across all their CPUs, due to the nonobvious (from the\ncpuset perspective) side affects of the cpu_exclusive flag.\n\nFurthermore, since there was no way on a running system to see what one was\ndoing with sched domains, this change will be invisible to any using code.\nUnless they have real insight to the scheduler load balancing choices, they\nwill be unable to detect that this change has been made in the kernel\u0027s\nbehaviour.\n\nInitial discussion on lkml of this patch has generated much comment.  My\n(probably controversial) take on that discussion is that it has reached a\nrough concensus that the current cpuset cpu_exclusive mechanism for\ndefining sched domains is borked.  There is no concensus on the\nreplacement.  But since we can remove this mechanism, and since its\ncontinued presence risks causing unwanted partitioning of the schedulers\nload balancing, we should remove it while we can, as we proceed to work the\nreplacement scheduler domain mechanisms.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Christoph Lameter \u003cclameter@engr.sgi.com\u003e\nCc: Dinakar Guniguntala \u003cdino@in.ibm.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": "e12ba74d8ff3e2f73a583500d7095e406df4d093",
      "tree": "a0d3385b65f0b3e1e00b0bbf11b75e7538a93edb",
      "parents": [
        "c361be55b3128474aa66d31092db330b07539103"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Tue Oct 16 01:25:52 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Oct 16 09:43:00 2007 -0700"
      },
      "message": "Group short-lived and reclaimable kernel allocations\n\nThis patch marks a number of allocations that are either short-lived such as\nnetwork buffers or are reclaimable such as inode allocations.  When something\nlike updatedb is called, long-lived and unmovable kernel allocations tend to\nbe spread throughout the address space which increases fragmentation.\n\nThis patch groups these allocations together as much as possible by adding a\nnew MIGRATE_TYPE.  The MIGRATE_RECLAIMABLE type is for allocations that can be\nreclaimed on demand, but not moved.  i.e.  they can be migrated by deleting\nthem and re-reading the information from elsewhere.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\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": "0e1e7c7a739562a321fda07c7cd2a97a7114f8f8",
      "tree": "f2148e5b667152681625c19cf8b2a556500994ea",
      "parents": [
        "523b945855a1427000ffc707c610abe5947ae607"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Tue Oct 16 01:25:38 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Oct 16 09:42:59 2007 -0700"
      },
      "message": "Memoryless nodes: Use N_HIGH_MEMORY for cpusets\n\ncpusets try to ensure that any node added to a cpuset\u0027s mems_allowed is\non-line and contains memory.  The assumption was that online nodes contained\nmemory.  Thus, it is possible to add memoryless nodes to a cpuset and then add\ntasks to this cpuset.  This results in continuous series of oom-kill and\napparent system hang.\n\nChange cpusets to use node_states[N_HIGH_MEMORY] [a.k.a.  node_memory_map] in\nplace of node_online_map when vetting memories.  Return error if admin\nattempts to write a non-empty mems_allowed node mask containing only\nmemoryless-nodes.\n\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nSigned-off-by: Bob Picco \u003cbob.picco@hp.com\u003e\nSigned-off-by: Nishanth Aravamudan \u003cnacc@us.ibm.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@skynet.ie\u003e\nSigned-off-by: 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": "86313c488a6848b7ec2ba04e74f25f79dd32a0b7",
      "tree": "3b190f7afc338362470573b563f65a1eb83795ac",
      "parents": [
        "10a0a8d4e3f6bf2d077f94344441909abe670f5a"
      ],
      "author": {
        "name": "Jeremy Fitzhardinge",
        "email": "jeremy@xensource.com",
        "time": "Tue Jul 17 18:37:03 2007 -0700"
      },
      "committer": {
        "name": "Jeremy Fitzhardinge",
        "email": "jeremy@goop.org",
        "time": "Wed Jul 18 08:47:40 2007 -0700"
      },
      "message": "usermodehelper: Tidy up waiting\n\nRather than using a tri-state integer for the wait flag in\ncall_usermodehelper_exec, define a proper enum, and use that.  I\u0027ve\npreserved the integer values so that any callers I\u0027ve missed should\nstill work OK.\n\nSigned-off-by: Jeremy Fitzhardinge \u003cjeremy@xensource.com\u003e\nCc: James Bottomley \u003cJames.Bottomley@HansenPartnership.com\u003e\nCc: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\nCc: Andi Kleen \u003cak@suse.de\u003e\nCc: Paul Mackerras \u003cpaulus@samba.org\u003e\nCc: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nCc: Ralf Baechle \u003cralf@linux-mips.org\u003e\nCc: Bjorn Helgaas \u003cbjorn.helgaas@hp.com\u003e\nCc: Joel Becker \u003cjoel.becker@oracle.com\u003e\nCc: Tony Luck \u003ctony.luck@intel.com\u003e\nCc: Kay Sievers \u003ckay.sievers@vrfy.org\u003e\nCc: Srivatsa Vaddagiri \u003cvatsa@in.ibm.com\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\n"
    },
    {
      "commit": "49c13b51a15f1ba9f6d47e26e4a3886c4f3931e2",
      "tree": "a96d7fc5884e56a61993f9393afa9077f8068b47",
      "parents": [
        "492559af235eb56884d62553f191c0b5c4def990",
        "cec9ad279b66793bee0b5009b7ca311060061efd"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 11:50:26 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Jul 17 11:50:26 2007 -0700"
      },
      "message": "Merge branch \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm\n\n* \u0027for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm: (80 commits)\n  KVM: Use CPU_DYING for disabling virtualization\n  KVM: Tune hotplug/suspend IPIs\n  KVM: Keep track of which cpus have virtualization enabled\n  SMP: Allow smp_call_function_single() to current cpu\n  i386: Allow smp_call_function_single() to current cpu\n  x86_64: Allow smp_call_function_single() to current cpu\n  HOTPLUG: Adapt thermal throttle to CPU_DYING\n  HOTPLUG: Adapt cpuset hotplug callback to CPU_DYING\n  HOTPLUG: Add CPU_DYING notifier\n  KVM: Clean up #includes\n  KVM: Remove kvmfs in favor of the anonymous inodes source\n  KVM: SVM: Reliably detect if SVM was disabled by BIOS\n  KVM: VMX: Remove unnecessary code in vmx_tlb_flush()\n  KVM: MMU: Fix Wrong tlb flush order\n  KVM: VMX: Reinitialize the real-mode tss when entering real mode\n  KVM: Avoid useless memory write when possible\n  KVM: Fix x86 emulator writeback\n  KVM: Add support for in-kernel pio handlers\n  KVM: VMX: Fix interrupt checking on lightweight exit\n  KVM: Adds support for in-kernel mmio handlers\n  ...\n"
    },
    {
      "commit": "c2aef333c98b41eeb0f0d55b7faa7d4625a6160b",
      "tree": "39917beefd3cddf1c5c2c68894346efe0cc7dff1",
      "parents": [
        "b2ff457b09554813a7df9e0cd30d5a169a257419"
      ],
      "author": {
        "name": "Paul Menage",
        "email": "menage@google.com",
        "time": "Sun Jul 15 23:40:11 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon Jul 16 09:05:43 2007 -0700"
      },
      "message": "Reduce cpuset.c write_lock_irq() to read_lock()\n\ncpuset.c:update_nodemask() uses a write_lock_irq() on tasklist_lock to\nblock concurrent forks; a read_lock() suffices and is less intrusive.\n\nSigned-off-by: Paul Menage\u003cmenage@google.com\u003e\nAcked-by: Paul Jackson \u003cpj@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": "ac076758b97d9e3d2c1557cfa412911e93cd0919",
      "tree": "9df55c693f4e86a1157be6151c2d5d1f8906868a",
      "parents": [
        "db912f963909b3cbc3a059b7528f6a1a1eb6ffae"
      ],
      "author": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Thu May 24 12:33:15 2007 +0300"
      },
      "committer": {
        "name": "Avi Kivity",
        "email": "avi@qumranet.com",
        "time": "Mon Jul 16 12:05:49 2007 +0300"
      },
      "message": "HOTPLUG: Adapt cpuset hotplug callback to CPU_DYING\n\nCPU_DYING is called in atomic context, so don\u0027t try to take any locks.\n\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n"
    },
    {
      "commit": "3e903e7b1605aff88d7f89a96fab5e43081b914f",
      "tree": "ae35423c1643689f27734005f39cebe52773962d",
      "parents": [
        "d6f8bb1310d4745ff1d0c74eeacae31e2a3eeff1"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sat Jun 16 10:16:01 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Sat Jun 16 13:16:15 2007 -0700"
      },
      "message": "cpuset: zero malloc - fix for old cpusets\n\nThe cpuset code to present a list of tasks using a cpuset to user space could\nwrite to an array that it had kmalloc\u0027d, after a kmalloc request of zero size.\n\nThe problem was that the code didn\u0027t check for writes past the allocated end\nof the array until -after- the first write.\n\nThis is a race condition that is likely rare -- it would only show up if a\ncpuset went from being empty to having a task in it, during the brief time\nbetween the allocation and the first write.\n\nPrior to roughly 2.6.22 kernels, this was also a benign problem, because a\nzero kmalloc returned a few usable bytes anyway, and no harm was done with the\nbogus write.\n\nWith the 2.6.22 kernel changes to make issue a warning if code tries to write\nto the location returned from a zero size allocation, this problem is no\nlonger benign.  This cpuset code would occassionally trigger that warning.\n\nThe fix is trivial -- check before storing into the array, not after, whether\nthe array is big enough to hold the store.\n\nCc: \"Eric W. Biederman\" \u003cebiederm@xmission.com\u003e\nCc: \"Serge E. Hallyn\" \u003cserue@us.ibm.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nCc: Herbert Poetzl \u003cherbert@13thfloor.at\u003e\nCc: Kirill Korotaev \u003cdev@openvz.org\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nCc: Srivatsa Vaddagiri \u003cvatsa@in.ibm.com\u003e\nCc: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Paul Jackson \u003cpj@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": "85badbdf5120d246ce2bb3f1a7689a805f9c9006",
      "tree": "0c406f24c1533dc8dcaf322751b05e7b8bcd5d23",
      "parents": [
        "92f4c701aad794de9e4cf7341d0a486aed027c46"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "akinobu.mita@gmail.com",
        "time": "Wed May 09 02:33:33 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed May 09 12:30:49 2007 -0700"
      },
      "message": "use simple_read_from_buffer in kernel/\n\nCleanup using simple_read_from_buffer() for /dev/cpuset/tasks and\n/proc/config.gz.\n\nCc: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nSigned-off-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6f7f02e78a75a09195d963e0392b195bc2d55c5c",
      "tree": "a0ead177a4faaafdfa400ff9de3c992603e42f4d",
      "parents": [
        "0c28f287aa57e065116731c1e44bedcbc14fd53f"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Tue May 08 00:31:43 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue May 08 11:15:14 2007 -0700"
      },
      "message": "cpusets: allow empty {cpus,mems}_allowed to be set for unpopulated cpuset\n\nYou currently cannot remove all cpus or mems from cpus_allowed or\nmems_allowed of a cpuset.  We now allow both if there are no attached\ntasks.\n\nAcked-by: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Christoph Lameter \u003cclameter@engr.sgi.com\u003e\nSigned-off-by: Paul Menage \u003cmenage@google.com\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e63340ae6b6205fef26b40a75673d1c9c0c8bb90",
      "tree": "8d3212705515edec73c3936bb9e23c71d34a7b41",
      "parents": [
        "04c9167f91e309c9c4ea982992aa08e83b2eb42e"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "randy.dunlap@oracle.com",
        "time": "Tue May 08 00:28:08 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue May 08 11:15:07 2007 -0700"
      },
      "message": "header cleaning: don\u0027t include smp_lock.h when not used\n\nRemove includes of \u003clinux/smp_lock.h\u003e where it is not used/needed.\nSuggested by Al Viro.\n\nBuilds cleanly on x86_64, i386, alpha, ia64, powerpc, sparc,\nsparc64, and arm (all 59 defconfigs).\n\nSigned-off-by: Randy Dunlap \u003crandy.dunlap@oracle.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "dd9037a26a1e6ebec9121b4681c414dc77189a90",
      "tree": "cbce9dc3406943b0026a5de01bd64d42714a9413",
      "parents": [
        "e5f00f42f35e6f4699f105a3bd56874847cbf72f"
      ],
      "author": {
        "name": "Srivatsa Vaddagiri",
        "email": "vatsa@in.ibm.com",
        "time": "Tue May 08 00:27:25 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue May 08 11:15:05 2007 -0700"
      },
      "message": "Fix race between attach_task and cpuset_exit\n\nCurrently cpuset_exit() changes the exiting task\u0027s -\u003ecpuset pointer w/o\ntaking task_lock().  This can lead to ugly races between attach_task and\ncpuset_exit.  Details of the races are described at\nhttp://lkml.org/lkml/2007/3/24/132.\n\nPatch below closes those races.\n\nSigned-off-by: Srivatsa Vaddagiri \u003cvatsa@in.ibm.com\u003e\nCc: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Balbir Singh \u003cbalbir@in.ibm.com\u003e\nCc: Paul Menage \u003cmenage@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "c596d9f320aaf30d28c1d793ff3a976dee1db8f5",
      "tree": "a07a482831077ef0220467fadf77218272638ddb",
      "parents": [
        "a3a02be79114b854acc555e8ed686eb84f44ae2e"
      ],
      "author": {
        "name": "David Rientjes",
        "email": "rientjes@google.com",
        "time": "Sun May 06 14:49:32 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon May 07 12:12:53 2007 -0700"
      },
      "message": "cpusets: allow TIF_MEMDIE threads to allocate anywhere\n\nOOM killed tasks have access to memory reserves as specified by the\nTIF_MEMDIE flag in the hopes that it will quickly exit.  If such a task has\nmemory allocations constrained by cpusets, we may encounter a deadlock if a\nblocking task cannot exit because it cannot allocate the necessary memory.\n\nWe allow tasks that have the TIF_MEMDIE flag to allocate memory anywhere,\nincluding outside its cpuset restriction, so that it can quickly die\nregardless of whether it is __GFP_HARDWALL.\n\nCc: Andi Kleen \u003cak@suse.de\u003e\nCc: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Christoph Lameter \u003cclameter@engr.sgi.com\u003e\nSigned-off-by: David Rientjes \u003crientjes@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "92e1d5be91a0e3ffa5c4697eeb09b2aa22792122",
      "tree": "4eb22a9f6c38e9f4cc2a5100cd6659b0af08b7ae",
      "parents": [
        "754661f143e70d66eae6c48532ca245aa05dec0e"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Mon Feb 12 00:55:39 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon Feb 12 09:48:46 2007 -0800"
      },
      "message": "[PATCH] mark struct inode_operations const 2\n\nMany struct inode_operations in the kernel can be \"const\".  Marking them const\nmoves these to the .rodata section, which avoids false sharing with potential\ndirty data.  In addition it\u0027ll catch accidental writes at compile time to\nthese shared resources.\n\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9a32144e9d7b4e21341174b1a83b82a82353be86",
      "tree": "6f08560b341418fc9934f56f6162a95f5b5d8aec",
      "parents": [
        "00977a59b951207d38380c75f03a36829950265c"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@linux.intel.com",
        "time": "Mon Feb 12 00:55:35 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon Feb 12 09:48:46 2007 -0800"
      },
      "message": "[PATCH] mark struct file_operations const 7\n\nMany struct file_operations in the kernel can be \"const\".  Marking them const\nmoves these to the .rodata section, which avoids false sharing with potential\ndirty data.  In addition it\u0027ll catch accidental writes at compile time to\nthese shared resources.\n\nSigned-off-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "089e34b60033863549fbe561d31ac8c778a20e7f",
      "tree": "aea34fde97b91231626f54440390456e1bd3e0aa",
      "parents": [
        "918d3f90e8d5657491024f64427e9a5ea632d284"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Fri Dec 29 16:49:04 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Sat Dec 30 10:56:43 2006 -0800"
      },
      "message": "[PATCH] cpuset procfs warning fix\n\nfs/proc/base.c:1869: warning: initialization discards qualifiers from pointer target type\nfs/proc/base.c:2150: warning: initialization discards qualifiers from pointer target type\n\nCc: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "02a0e53d8227aff5e62e0433f82c12c1c2805fd6",
      "tree": "fe32435308e5f1afe8bd12357bd8c5ff3b4133c7",
      "parents": [
        "55935a34a428a1497e3b37982e2782c09c6f914d"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Wed Dec 13 00:34:25 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Wed Dec 13 09:05:49 2006 -0800"
      },
      "message": "[PATCH] cpuset: rework cpuset_zone_allowed api\n\nElaborate the API for calling cpuset_zone_allowed(), so that users have to\nexplicitly choose between the two variants:\n\n  cpuset_zone_allowed_hardwall()\n  cpuset_zone_allowed_softwall()\n\nUntil now, whether or not you got the hardwall flavor depended solely on\nwhether or not you or\u0027d in the __GFP_HARDWALL gfp flag to the gfp_mask\nargument.\n\nIf you didn\u0027t specify __GFP_HARDWALL, you implicitly got the softwall\nversion.\n\nUnfortunately, this meant that users would end up with the softwall version\nwithout thinking about it.  Since only the softwall version might sleep,\nthis led to bugs with possible sleeping in interrupt context on more than\none occassion.\n\nThe hardwall version requires that the current tasks mems_allowed allows\nthe node of the specified zone (or that you\u0027re in interrupt or that\n__GFP_THISNODE is set or that you\u0027re on a one cpuset system.)\n\nThe softwall version, depending on the gfp_mask, might allow a node if it\nwas allowed in the nearest enclusing cpuset marked mem_exclusive (which\nrequires taking the cpuset lock \u0027callback_mutex\u0027 to evaluate.)\n\nThis patch removes the cpuset_zone_allowed() call, and forces the caller to\nexplicitly choose between the hardwall and the softwall case.\n\nIf the caller wants the gfp_mask to determine this choice, they should (1)\nbe sure they can sleep or that __GFP_HARDWALL is set, and (2) invoke the\ncpuset_zone_allowed_softwall() routine.\n\nThis adds another 100 or 200 bytes to the kernel text space, due to the few\nlines of nearly duplicate code at the top of both cpuset_zone_allowed_*\nroutines.  It should save a few instructions executed for the calls that\nturned into calls of cpuset_zone_allowed_hardwall, thanks to not having to\nset (before the call) then check (within the call) the __GFP_HARDWALL flag.\n\nFor the most critical call, from get_page_from_freelist(), the same\ninstructions are executed as before -- the old cpuset_zone_allowed()\nroutine it used to call is the same code as the\ncpuset_zone_allowed_softwall() routine that it calls now.\n\nNot a perfect win, but seems worth it, to reduce this chance of hitting a\nsleeping with irq off complaint again.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "a7a005fd12b84392becca311f2a20d5bf2a1b7af",
      "tree": "0baf326ea34bdef38e42a5ae664d348de3c69ae8",
      "parents": [
        "ff273773bfd4f2131bad1318e56519fcceac2339"
      ],
      "author": {
        "name": "Josef Sipek",
        "email": "jsipek@fsl.cs.sunysb.edu",
        "time": "Fri Dec 08 02:37:17 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Fri Dec 08 08:28:46 2006 -0800"
      },
      "message": "[PATCH] struct path: convert kernel\n\nSigned-off-by: Josef Sipek \u003cjsipek@fsl.cs.sunysb.edu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "d3ed11c35635487d34ad476e1d6a66dd298ab2de",
      "tree": "1317e066282dda6b9d4ee44b4f62bfee94625ee1",
      "parents": [
        "09b882520bbe01f2e5044642109c1c1d19fe3559"
      ],
      "author": {
        "name": "Paul Menage",
        "email": "menage@google.com",
        "time": "Wed Dec 06 20:41:37 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 07 08:39:48 2006 -0800"
      },
      "message": "[PATCH] cpuset: allow a larger buffer for writes to cpuset files\n\nWhen using fake NUMA setup, the number of memory nodes can greatly exceed\nthe number of CPUs.  So the current limit in cpuset_common_file_write() is\ninsufficient.\n\nSigned-off-by: Paul Menage \u003cmenage@google.com\u003e\nAcked-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "15ad7cdcfd76450d4beebc789ec646664238184d",
      "tree": "279d05a76ae0906c23ee2de8c5684d95d9886ad3",
      "parents": [
        "4a08a9f68168e547c2baf100020e9b96cae5fbd1"
      ],
      "author": {
        "name": "Helge Deller",
        "email": "deller@gmx.de",
        "time": "Wed Dec 06 20:40:36 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 07 08:39:46 2006 -0800"
      },
      "message": "[PATCH] struct seq_operations and struct file_operations constification\n\n - move some file_operations structs into the .rodata section\n\n - move static strings from policy_types[] array into the .rodata section\n\n - fix generic seq_operations usages, so that those structs may be defined\n   as \"const\" as well\n\n[akpm@osdl.org: couple of fixes]\nSigned-off-by: Helge Deller \u003cdeller@gmx.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "02316067852187b8bec781bec07410e91af79627",
      "tree": "856e3f4610c91a6548bf3bf5c70ecbc0b28a4145",
      "parents": [
        "a38a44c1a93078fc5fadc4ac2df8dea4697069e2"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Dec 06 20:38:17 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 07 08:39:39 2006 -0800"
      },
      "message": "[PATCH] hotplug CPU: clean up hotcpu_notifier() use\n\nThere was lots of #ifdef noise in the kernel due to hotcpu_notifier(fn,\nprio) not correctly marking \u0027fn\u0027 as used in the !HOTPLUG_CPU case, and thus\ngenerating compiler warnings of unused symbols, hence forcing people to add\n#ifdefs.\n\nthe compiler can skip truly unused functions just fine:\n\n    text    data     bss     dec     hex filename\n 1624412  728710 3674856 6027978  5bfaca vmlinux.before\n 1624412  728710 3674856 6027978  5bfaca vmlinux.after\n\n[akpm@osdl.org: topology.c fix]\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": "696040670a12f66b17a839011f96d9ca376f688b",
      "tree": "d830a32b354a45423e42a4210a716438750e5755",
      "parents": [
        "5ec68b2e310437e99c297ba04e1afc5297aa6de1"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Wed Dec 06 20:36:15 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 07 08:39:32 2006 -0800"
      },
      "message": "[PATCH] cpuset: minor code refinements\n\nA couple of minor code simplifications to the kernel/cpuset.c code.  No\nfunctional change.  Just a little less code and a little more readable.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1af9892811ad3bf2abb31566bfb2ec0b5070a66a",
      "tree": "12ddef3fbd905592d37d6c1b6ece687c308253d2",
      "parents": [
        "e6c6e640b8b258dc7f60533e81f050d15fc0a9af"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@ftp.linux.org.uk",
        "time": "Tue Oct 10 22:48:57 2006 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Oct 10 15:37:23 2006 -0700"
      },
      "message": "[PATCH] cpuset ANSI prototype\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nAcked-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "d8c76e6f45c111c32a4b3e50a2adc9210737b0d8",
      "tree": "25521b59d48c6d8c9aec1af54dbe5008ad4b215b",
      "parents": [
        "9a53c3a783c2fa9b969628e65695c11c3e51e673"
      ],
      "author": {
        "name": "Dave Hansen",
        "email": "haveblue@us.ibm.com",
        "time": "Sat Sep 30 23:29:04 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 01 00:39:30 2006 -0700"
      },
      "message": "[PATCH] r/o bind mount prepwork: inc_nlink() helper\n\nThis is mostly included for parity with dec_nlink(), where we will have some\nmore hooks.  This one should stay pretty darn straightforward for now.\n\nSigned-off-by: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nAcked-by: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "181b64803661209cda64e5e874ad75f373a69de8",
      "tree": "0e0ee378b98e5ee72aeae428b1f155d031fe2597",
      "parents": [
        "683e91cbd0582cb8e63daaf0429e0a62be9cc421"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Fri Sep 29 02:01:48 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Sep 29 09:18:25 2006 -0700"
      },
      "message": "[PATCH] cpuset: fix obscure attach_task vs exiting race\n\nFix obscure race condition in kernel/cpuset.c attach_task() code.\n\nThere is basically zero chance of anyone accidentally being harmed by this\nrace.\n\nIt requires a special \u0027micro-stress\u0027 load and a special timing loop hacks\nin the kernel to hit in less than an hour, and even then you\u0027d have to hit\nit hundreds or thousands of times, followed by some unusual and senseless\ncpuset configuration requests, including removing the top cpuset, to cause\nany visibly harm affects.\n\nOne could, with perhaps a few days or weeks of such effort, get the\nreference count on the top cpuset below zero, and manage to crash the\nkernel by asking to remove the top cpuset.\n\nI found it by code inspection.\n\nThe race was introduced when \u0027the_top_cpuset_hack\u0027 was introduced, and one\npiece of code was not updated.  An old check for a possibly null task\ncpuset pointer needed to be changed to a check for a task marked\nPF_EXITING.  The pointer can\u0027t be null anymore, thanks to\nthe_top_cpuset_hack (documented in kernel/cpuset.c).  But the task could\nhave gone into PF_EXITING state after it was found in the task_list scan.\n\nIf a task is PF_EXITING in this code, it is possible that its task-\u003ecpuset\npointer is pointing to the top cpuset due to the_top_cpuset_hack, rather\nthan because the top_cpuset was that tasks last valid cpuset.  In that\ncase, the wrong cpuset reference counter would be decremented.\n\nThe fix is trivial.  Instead of failing the system call if the tasks cpuset\npointer is null here, fail it if the task is in PF_EXITING state.\n\nThe code for \u0027the_top_cpuset_hack\u0027 that changes an exiting tasks cpuset to\nthe top_cpuset is done without locking, so could happen at anytime.  But it\nis done during the exit handling, after the PF_EXITING flag is set.  So if\nwe verify that a task is still not PF_EXITING after we copy out its cpuset\npointer (into \u0027oldcs\u0027, below), we know that \u0027oldcs\u0027 is not one of these\nhack references to the top_cpuset.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "b1aac8bb824c658ddebd296b088a8bff5029c288",
      "tree": "4b19b71fac4f769b7be7cff97ac7f6445d14d236",
      "parents": [
        "38837fc75acb7fa9b0e111b0241fe4fe76c5d4b3"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Fri Sep 29 02:01:17 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Sep 29 09:18:21 2006 -0700"
      },
      "message": "[PATCH] cpuset: hotunplug cpus and mems in all cpusets\n\nThe cpuset code handling hot unplug of CPUs or Memory Nodes was incorrect -\nit could remove a CPU or Node from the top cpuset, while leaving it still\nin some child cpusets.\n\nOne basic rule of cpusets is that each cpusets cpus and mems are subsets of\nits parents.  The cpuset hot unplug code violated this rule.\n\nSo the cpuset hotunplug handler must walk down the tree, removing any\nremoved CPU or Node from all cpusets.\n\nHowever, it is not allowed to make a cpusets cpus or mems become empty.\nThey can only transition from empty to non-empty, not back.\n\nSo if the last CPU or Node would be removed from a cpuset by the above\nwalk, we scan back up the cpuset hierarchy, finding the nearest ancestor\nthat still has something online, and copy its CPU or Memory placement.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Nathan Lynch \u003cntl@pobox.com\u003e\nCc: Anton Blanchard \u003canton@samba.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "38837fc75acb7fa9b0e111b0241fe4fe76c5d4b3",
      "tree": "51508cbc49527e35921efb4ba31bca7da9795ad2",
      "parents": [
        "af3ffa6758dbd2ab7ebe62dddf66b3aa94d64eeb"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Fri Sep 29 02:01:16 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Sep 29 09:18:21 2006 -0700"
      },
      "message": "[PATCH] cpuset: top_cpuset tracks hotplug changes to node_online_map\n\nChange the list of memory nodes allowed to tasks in the top (root) nodeset\nto dynamically track what cpus are online, using a call to a cpuset hook\nfrom the memory hotplug code.  Make this top cpus file read-only.\n\nOn systems that have cpusets configured in their kernel, but that aren\u0027t\nactively using cpusets (for some distros, this covers the majority of\nsystems) all tasks end up in the top cpuset.\n\nIf that system does support memory hotplug, then these tasks cannot make\nuse of memory nodes that are added after system boot, because the memory\nnodes are not allowed in the top cpuset.  This is a surprising regression\nover earlier kernels that didn\u0027t have cpusets enabled.\n\nOne key motivation for this change is to remain consistent with the\nbehaviour for the top_cpuset\u0027s \u0027cpus\u0027, which is also read-only, and which\nautomatically tracks the cpu_online_map.\n\nThis change also has the minor benefit that it fixes a long standing,\nlittle noticed, minor bug in cpusets.  The cpuset performance tweak to\nshort circuit the cpuset_zone_allowed() check on systems with just a single\ncpuset (see \u0027number_of_cpusets\u0027, in linux/cpuset.h) meant that simply\nchanging the \u0027mems\u0027 of the top_cpuset had no affect, even though the change\n(the write system call) appeared to succeed.  With the following change,\nthat write to the \u0027mems\u0027 file fails -EACCES, and the \u0027mems\u0027 file stubbornly\nrefuses to be changed via user space writes.  Thus no one should be mislead\ninto thinking they\u0027ve changed the top_cpusets\u0027s \u0027mems\u0027 when in affect they\nhaven\u0027t.\n\nIn order to keep the behaviour of cpusets consistent between systems\nactively making use of them and systems not using them, this patch changes\nthe behaviour of the \u0027mems\u0027 file in the top (root) cpuset, making it read\nonly, and making it automatically track the value of node_online_map.  Thus\ntasks in the top cpuset will have automatic use of hot plugged memory nodes\nallowed by their cpuset.\n\n[akpm@osdl.org: build fix]\n[bunk@stusta.de: build fix]\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "f400e198b2ed26ce55b22a1412ded0896e7516ac",
      "tree": "a3d78bfc1c20635e199fe0fe85aaa1d8792acc58",
      "parents": [
        "959ed340f4867fda7684340625f60e211c2296d6"
      ],
      "author": {
        "name": "Sukadev Bhattiprolu",
        "email": "sukadev@us.ibm.com",
        "time": "Fri Sep 29 02:00:07 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Sep 29 09:18:12 2006 -0700"
      },
      "message": "[PATCH] pidspace: is_init()\n\nThis is an updated version of Eric Biederman\u0027s is_init() patch.\n(http://lkml.org/lkml/2006/2/6/280).  It applies cleanly to 2.6.18-rc3 and\nreplaces a few more instances of -\u003epid \u003d\u003d 1 with is_init().\n\nFurther, is_init() checks pid and thus removes dependency on Eric\u0027s other\npatches for now.\n\nEric\u0027s original description:\n\n\tThere are a lot of places in the kernel where we test for init\n\tbecause we give it special properties.  Most  significantly init\n\tmust not die.  This results in code all over the kernel test\n\t-\u003epid \u003d\u003d 1.\n\n\tIntroduce is_init to capture this case.\n\n\tWith multiple pid spaces for all of the cases affected we are\n\tlooking for only the first process on the system, not some other\n\tprocess that has pid \u003d\u003d 1.\n\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\nSigned-off-by: Sukadev Bhattiprolu \u003csukadev@us.ibm.com\u003e\nCc: Dave Hansen \u003chaveblue@us.ibm.com\u003e\nCc: Serge Hallyn \u003cserue@us.ibm.com\u003e\nCc: Cedric Le Goater \u003cclg@fr.ibm.com\u003e\nCc: \u003clxc-devel@lists.sourceforge.net\u003e\nAcked-by: Paul Mackerras \u003cpaulus@samba.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ba52de123d454b57369f291348266d86f4b35070",
      "tree": "3973f3f3c853b5857b6b64a027cadd4fe954e3b9",
      "parents": [
        "577c4eb09d1034d0739e3135fd2cff50588024be"
      ],
      "author": {
        "name": "Theodore Ts\u0027o",
        "email": "tytso@mit.edu",
        "time": "Wed Sep 27 01:50:49 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 27 08:26:18 2006 -0700"
      },
      "message": "[PATCH] inode-diet: Eliminate i_blksize from the inode structure\n\nThis eliminates the i_blksize field from struct inode.  Filesystems that want\nto provide a per-inode st_blksize can do so by providing their own getattr\nroutine instead of using the generic_fillattr() function.\n\nNote that some filesystems were providing pretty much random (and incorrect)\nvalues for i_blksize.\n\n[bunk@stusta.de: cleanup]\n[akpm@osdl.org: generic_fillattr() fix]\nSigned-off-by: \"Theodore Ts\u0027o\" \u003ctytso@mit.edu\u003e\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "89fa30242facca249aead2aac03c4c69764f911c",
      "tree": "1ac46b4777b819f2a4793d8e37330576ae5089ec",
      "parents": [
        "4415cc8df630b05d3a54267d5f3e5c0b63a4ec05"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Sep 25 23:31:55 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Sep 26 08:48:52 2006 -0700"
      },
      "message": "[PATCH] NUMA: Add zone_to_nid function\n\nThere are many places where we need to determine the node of a zone.\nCurrently we use a difficult to read sequence of pointer dereferencing.\nPut that into an inline function and use throughout VM.  Maybe we can find\na way to optimize the lookup in the future.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "9b819d204cf602eab1a53a9ec4b8d2ca51e02a1d",
      "tree": "9442bf01a00a93a8ae54462fb4878588e1b2a6bf",
      "parents": [
        "056c62418cc639bf2fe962c6a6ee56054b838bc7"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "clameter@sgi.com",
        "time": "Mon Sep 25 23:31:40 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Tue Sep 26 08:48:50 2006 -0700"
      },
      "message": "[PATCH] Add __GFP_THISNODE to avoid fallback to other nodes and ignore cpuset/memory policy restrictions\n\nAdd a new gfp flag __GFP_THISNODE to avoid fallback to other nodes.  This\nflag is essential if a kernel component requires memory to be located on a\ncertain node.  It will be needed for alloc_pages_node() to force allocation\non the indicated node and for alloc_pages() to force allocation on the\ncurrent node.\n\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "0d673a5a4775d3dc565b6668ed75fd2db2ede624",
      "tree": "a447aa33cf8b8fea26a81add012169a1a8060706",
      "parents": [
        "36920e069a87c6fccffbc0ec5e74985d94d3bcc4"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Sun Aug 27 01:23:54 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Aug 27 11:01:32 2006 -0700"
      },
      "message": "[PATCH] cpuset: oom panic fix\n\ncpuset_excl_nodes_overlap always returns 0 if current is exiting.  This caused\ncustomer\u0027s systems to panic in the OOM killer when processes were having\ntrouble getting memory for the final put_user in mm_release.  Even though\nthere were lots of processes to kill.\n\nChange to returning 1 in this case.  This achieves parity with !CONFIG_CPUSETS\ncase, and was observed to fix the problem.\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nAcked-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4c4d50f7b39cc58f1064b93a61ad617451ae41df",
      "tree": "d55ec85fd917472e9859a17e34f8114a7e87892b",
      "parents": [
        "6394cca54894f6a9bcf927ab78d28985944298ff"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Aug 27 01:23:51 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Aug 27 11:01:32 2006 -0700"
      },
      "message": "[PATCH] cpuset: top_cpuset tracks hotplug changes to cpu_online_map\n\nChange the list of cpus allowed to tasks in the top (root) cpuset to\ndynamically track what cpus are online, using a CPU hotplug notifier.  Make\nthis top cpus file read-only.\n\nOn systems that have cpusets configured in their kernel, but that aren\u0027t\nactively using cpusets (for some distros, this covers the majority of\nsystems) all tasks end up in the top cpuset.\n\nIf that system does support CPU hotplug, then these tasks cannot make use\nof CPUs that are added after system boot, because the CPUs are not allowed\nin the top cpuset.  This is a surprising regression over earlier kernels\nthat didn\u0027t have cpusets enabled.\n\nIn order to keep the behaviour of cpusets consistent between systems\nactively making use of them and systems not using them, this patch changes\nthe behaviour of the \u0027cpus\u0027 file in the top (root) cpuset, making it read\nonly, and making it automatically track the value of cpu_online_map.  Thus\ntasks in the top cpuset will have automatic use of hot plugged CPUs allowed\nby their cpuset.\n\nThanks to Anton Blanchard and Nathan Lynch for reporting this problem,\ndriving the fix, and earlier versions of this patch.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Nathan Lynch \u003cntl@pobox.com\u003e\nCc: Anton Blanchard \u003canton@samba.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "abb5a5cc6bba1516403146c5b79036fe843beb70",
      "tree": "f7a1a4cc9381a1fc38be60cfe9428d9c7bd0aabe",
      "parents": [
        "aa95387774039096c11803c04011f1aa42d85758"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jul 23 11:36:08 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jul 23 13:03:05 2006 -0700"
      },
      "message": "[PATCH] Cpuset: fix ABBA deadlock with cpu hotplug lock\n\nFix ABBA deadlock between lock_cpu_hotplug() and the cpuset\ncallback_mutex lock.\n\nIt only happens on cpu_exclusive cpusets, due to the dynamic\nsched domain code trying to take the cpu hotplug lock inside\nthe cpuset callback_mutex lock.\n\nThis bug has apparently been here for several months, but didn\u0027t\nget hit until the right customer load on a large system.\n\nThis fix appears right from inspection, but it will take a few\nmore days running it on that customers workload to be confident\nwe nailed it.  We don\u0027t have any other reproducible test case.\n\nThe cpu_hotplug_lock() tends to cover large runs of code.\nThe other places that hold both that lock and the cpuset callback\nmutex lock always nest the cpuset lock inside the hotplug lock.\nThis place tries to do the reverse, risking an ABBA deadlock.\n\nThis is in the cpuset_rmdir() code, where we:\n  * take the callback_mutex lock\n  * mark the cpuset CS_REMOVED\n  * call update_cpu_domains for cpu_exclusive cpusets\n  * in that call, take the cpu_hotplug lock if the\n    cpuset is marked for removal.\n\nThanks to Jack Steiner for identifying this deadlock.\n\nThe fix is to tear down the dynamic sched domain before we grab\nthe cpuset callback_mutex lock.  This way, the two locks are\nserialized, with the hotplug lock taken and released before\ntrying for the cpuset lock.\n\nI suspect that this bug was introduced when I changed the\ncpuset locking from one lock to two.  The dynamic sched domain\ndependency on cpu_exclusive cpusets and its hotplug hooks were\nadded to this code earlier, when cpusets had only a single lock.\nIt may well have been fine then.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "6ab3d5624e172c553004ecc862bfeac16d9d68b7",
      "tree": "6d98881fe91fd9583c109208d5c27131b93fa248",
      "parents": [
        "e02169b682bc448ccdc819dc8639ed34a23cedd8"
      ],
      "author": {
        "name": "Jörn Engel",
        "email": "joern@wohnheim.fh-wedel.de",
        "time": "Fri Jun 30 19:25:36 2006 +0200"
      },
      "committer": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Fri Jun 30 19:25:36 2006 +0200"
      },
      "message": "Remove obsolete #include \u003clinux/config.h\u003e\n\nSigned-off-by: Jörn Engel \u003cjoern@wohnheim.fh-wedel.de\u003e\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\n"
    },
    {
      "commit": "80f7228b59e4bbe9d840af3ff0f2fe480d6e7c79",
      "tree": "08e6d2365abeafd7bfcc0fd7485db9055463d72c",
      "parents": [
        "47bdd718c6547d84c8e140cd0f495c016f13b08b"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Fri Jun 30 18:27:16 2006 +0200"
      },
      "committer": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Fri Jun 30 18:27:16 2006 +0200"
      },
      "message": "typo fixes: occuring -\u003e occurring\n\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\n"
    },
    {
      "commit": "13b41b09491e5d75e8027dca1ee78f5e073bc4c0",
      "tree": "3f08183a4f59075fc3015165183b8ef17cb562a6",
      "parents": [
        "99f895518368252ba862cc15ce4eb98ebbe1bec6"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Mon Jun 26 00:25:56 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Jun 26 09:58:26 2006 -0700"
      },
      "message": "[PATCH] proc: Use struct pid not struct task_ref\n\nIncrementally update my proc-dont-lock-task_structs-indefinitely patches so\nthat they work with struct pid instead of struct task_ref.\n\nMostly this is a straight 1-1 substitution.\n\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "99f895518368252ba862cc15ce4eb98ebbe1bec6",
      "tree": "a9dcc01963221d1fd6a7e357b95d361ebfe91c6d",
      "parents": [
        "8578cea7509cbdec25b31d08b48a92fcc3b1a9e3"
      ],
      "author": {
        "name": "Eric W. Biederman",
        "email": "ebiederm@xmission.com",
        "time": "Mon Jun 26 00:25:55 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Jun 26 09:58:25 2006 -0700"
      },
      "message": "[PATCH] proc: don\u0027t lock task_structs indefinitely\n\nEvery inode in /proc holds a reference to a struct task_struct.  If a\ndirectory or file is opened and remains open after the the task exits this\npinning continues.  With 8K stacks on a 32bit machine the amount pinned per\nfile descriptor is about 10K.\n\nNormally I would figure a reasonable per user process limit is about 100\nprocesses.  With 80 processes, with a 1000 file descriptors each I can trigger\nthe 00M killer on a 32bit kernel, because I have pinned about 800MB of useless\ndata.\n\nThis patch replaces the struct task_struct pointer with a pointer to a struct\ntask_ref which has a struct task_struct pointer.  The so the pinning of dead\ntasks does not happen.\n\nThe code now has to contend with the fact that the task may now exit at any\ntime.  Which is a little but not muh more complicated.\n\nWith this change it takes about 1000 processes each opening up 1000 file\ndescriptors before I can trigger the OOM killer.  Much better.\n\n[mlp@google.com: task_mmu small fixes]\nSigned-off-by: Eric W. Biederman \u003cebiederm@xmission.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nCc: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Oleg Nesterov \u003coleg@tv-sign.ru\u003e\nCc: Albert Cahalan \u003cacahalan@gmail.com\u003e\nSigned-off-by: Prasanna Meda \u003cmlp@google.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "22fb52dd736a62e24c44c50739007496265dc38c",
      "tree": "06cc6dcff21df6e18f189c6895cf6aa313e7a8ea",
      "parents": [
        "e7834f8fccd791225a1cf91c2c3e740ad8e2e145"
      ],
      "author": {
        "name": "David Quigley",
        "email": "dpquigl@tycho.nsa.gov",
        "time": "Fri Jun 23 02:04:00 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 23 07:42:54 2006 -0700"
      },
      "message": "[PATCH] SELinux: add security hook call to mediate attach_task (kernel/cpuset.c)\n\nAdd a security hook call to enable security modules to control the ability\nto attach a task to a cpuset.  While limited control over this operation is\npossible via permission checks on the pseudo fs interface, those checks are\nnot sufficient to control access to the target task, which is looked up in\nthis function.  The existing task_setscheduler hook is re-used for this\noperation since this falls under the same class of operations.\n\nSigned-off-by: David Quigley \u003cdpquigl@tycho.nsa.gov\u003e\nAcked-by:  Stephen Smalley \u003csds@tycho.nsa.gov\u003e\nSigned-off-by: James Morris \u003cjmorris@namei.org\u003e\nAcked-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "454e2398be9b9fa30433fccc548db34d19aa9958",
      "tree": "1f61cb0c3716a33b661cfc8977e9beeb480a322c",
      "parents": [
        "1ad5544098a69d7dc1fa508cbb17e13a7a952fd8"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Fri Jun 23 02:02:57 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Jun 23 07:42:45 2006 -0700"
      },
      "message": "[PATCH] VFS: Permit filesystem to override root dentry on mount\n\nExtend the get_sb() filesystem operation to take an extra argument that\npermits the VFS to pass in the target vfsmount that defines the mountpoint.\n\nThe filesystem is then required to manually set the superblock and root dentry\npointers.  For most filesystems, this should be done with simple_set_mnt()\nwhich will set the superblock pointer and then set the root dentry to the\nsuperblock\u0027s s_root (as per the old default behaviour).\n\nThe get_sb() op now returns an integer as there\u0027s now no need to return the\nsuperblock pointer.\n\nThis patch permits a superblock to be implicitly shared amongst several mount\npoints, such as can be done with NFS to avoid potential inode aliasing.  In\nsuch a case, simple_set_mnt() would not be called, and instead the mnt_root\nand mnt_sb would be set directly.\n\nThe patch also makes the following changes:\n\n (*) the get_sb_*() convenience functions in the core kernel now take a vfsmount\n     pointer argument and return an integer, so most filesystems have to change\n     very little.\n\n (*) If one of the convenience function is not used, then get_sb() should\n     normally call simple_set_mnt() to instantiate the vfsmount. This will\n     always return 0, and so can be tail-called from get_sb().\n\n (*) generic_shutdown_super() now calls shrink_dcache_sb() to clean up the\n     dcache upon superblock destruction rather than shrink_dcache_anon().\n\n     This is required because the superblock may now have multiple trees that\n     aren\u0027t actually bound to s_root, but that still need to be cleaned up. The\n     currently called functions assume that the whole tree is rooted at s_root,\n     and that anonymous dentries are not the roots of trees which results in\n     dentries being left unculled.\n\n     However, with the way NFS superblock sharing are currently set to be\n     implemented, these assumptions are violated: the root of the filesystem is\n     simply a dummy dentry and inode (the real inode for \u0027/\u0027 may well be\n     inaccessible), and all the vfsmounts are rooted on anonymous[*] dentries\n     with child trees.\n\n     [*] Anonymous until discovered from another tree.\n\n (*) The documentation has been adjusted, including the additional bit of\n     changing ext2_* into foo_* in the documentation.\n\n[akpm@osdl.org: convert ipath_fs, do other stuff]\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\nAcked-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Nathan Scott \u003cnathans@sgi.com\u003e\nCc: Roland Dreier \u003crolandd@cisco.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "92d1dbd27417c54c23aac6a84c285e256f6118b6",
      "tree": "bab665935a47bb6889ddc3c92a9bee68f1f6f532",
      "parents": [
        "36be57ffe39e03aab9fbe857f70c7a6a15bd9e08"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sat May 20 15:00:11 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun May 21 12:59:18 2006 -0700"
      },
      "message": "[PATCH] cpuset: might_sleep_if check in cpuset_zones_allowed\n\nIt\u0027s too easy to incorrectly call cpuset_zone_allowed() in an atomic\ncontext without __GFP_HARDWALL set, and when done, it is not noticed until\na tight memory situation forces allocations to be tried outside the current\ncpuset.\n\nAdd a \u0027might_sleep_if()\u0027 check, to catch this earlier on, instead of\nwaiting for a similar check in the mutex_lock() code, which is only rarely\ninvoked.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "36be57ffe39e03aab9fbe857f70c7a6a15bd9e08",
      "tree": "8062e9a9e49fd942fab35e17a2b5afe571a74f63",
      "parents": [
        "bdd804f478a0cc74bf7db8e9f9d5fd379d1b31ca"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sat May 20 15:00:10 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun May 21 12:59:18 2006 -0700"
      },
      "message": "[PATCH] cpuset: update cpuset_zones_allowed comment\n\nUpdate the kernel/cpuset.c:cpuset_zone_allowed() comment.\n\nThe rule for when mm/page_alloc.c should call cpuset_zone_allowed()\nwas intended to be:\n\n  Don\u0027t call cpuset_zone_allowed() if you can\u0027t sleep, unless you\n  pass in the __GFP_HARDWALL flag set in gfp_flag, which disables\n  the code that might scan up ancestor cpusets and sleep.\n\nThe explanation of this rule in the comment above cpuset_zone_allowed() was\nstale, as a result of a restructuring of some __alloc_pages() code in\nNovember 2005.\n\nRewrite that comment ...\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "e4e364e865b382f9d99c7fc230ec2ce7df21257a",
      "tree": "9ff5ab54a0e40d7ad2b55d3ec48c6e175ebf50c7",
      "parents": [
        "2741a559a01e1ba9bf87285569dc1a104d134ecf"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Fri Mar 31 02:30:52 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Mar 31 12:18:55 2006 -0800"
      },
      "message": "[PATCH] cpuset: memory migration interaction fix\n\nFix memory migration so that it works regardless of what cpuset the invoking\ntask is in.\n\nIf a task invoked a memory migration, by doing one of:\n\n       1) writing a different nodemask to a cpuset \u0027mems\u0027 file, or\n\n       2) writing a tasks pid to a different cpuset\u0027s \u0027tasks\u0027 file,\n          where the cpuset had its \u0027memory_migrate\u0027 option turned on, then the\n          allocation of the new pages for the migrated task(s) was constrained\n          by the invoking tasks cpuset.\n\nIf this task wasn\u0027t in a cpuset that allowed the requested memory nodes, the\nmemory migration would happen to some other nodes that were in that invoking\ntasks cpuset.  This was usually surprising and puzzling behaviour: Why didn\u0027t\nthe pages move?  Why did the pages move -there-?\n\nTo fix this, temporarilly change the invoking tasks \u0027mems_allowed\u0027 task_struct\nfield to the nodes the migrating tasks is moving to, so that new pages can be\nallocated there.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nAcked-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "2741a559a01e1ba9bf87285569dc1a104d134ecf",
      "tree": "8c61321d5fa1a0c3517219eaa3089e223d5cd943",
      "parents": [
        "4a01c8d5be628ac20cfd432c21808d76be5813e6"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Fri Mar 31 02:30:51 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Mar 31 12:18:55 2006 -0800"
      },
      "message": "[PATCH] cpuset: unsafe mm reference fix\n\nFix unsafe reference to a tasks mm struct, by moving the reference inside of a\nconvenient nearby properly guarded code block.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4a01c8d5be628ac20cfd432c21808d76be5813e6",
      "tree": "040ae0d60df3993a752ce852d3e3dc036586b037",
      "parents": [
        "2cf8d82d63807c2c68adf20bb28bf502496186dd"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Fri Mar 31 02:30:50 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Mar 31 12:18:55 2006 -0800"
      },
      "message": "[PATCH] cpuset: task_lock comment fix\n\nFix cpuset comment involving case of a tasks cpuset pointer being NULL.\nThanks to \"the_top_cpuset_hack\", this code no longer sees NULL task-\u003ecpuset\npointers.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "29afd49b72a9b2c26fa8c678bcf3976d0540446b",
      "tree": "4cc12f5bb3c5c3ee668226990e79115081609265",
      "parents": [
        "b2455396be35383c4eebc6745cc718b1dd9e23df"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Fri Mar 24 03:16:12 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Mar 24 07:33:24 2006 -0800"
      },
      "message": "[PATCH] cpuset: remove useless local variable initialization\n\nRemove a useless variable initialization in cpuset __cpuset_zone_allowed().\n The local variable \u0027allowed\u0027 is unconditionally set before use, later on\nin the code, so does not need to be initialized.\n\nNot that it seems to matter to the code generated any, as the compiler\noptimizes out the superfluous assignment anyway.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "151a44202d097ae8b1bbaa6d8d2f97df30e3cd1e",
      "tree": "3752bba902e73001443bb75f40495cc3a1d24f54",
      "parents": [
        "8488bc359d674baf710992e4b641513ea5ebd212"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Fri Mar 24 03:16:11 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Mar 24 07:33:24 2006 -0800"
      },
      "message": "[PATCH] cpuset: don\u0027t need to mark cpuset_mems_generation atomic\n\nDrop the atomic_t marking on the cpuset static global\ncpuset_mems_generation.  Since all access to it is guarded by the global\nmanage_mutex, there is no need for further serialization of this value.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "8488bc359d674baf710992e4b641513ea5ebd212",
      "tree": "28f6558f6b006c5a28a64a1beabec5498d9b77d4",
      "parents": [
        "b0196009d8c3ecf6ea6ec080c63d2ccc146e7ad9"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Fri Mar 24 03:16:10 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Mar 24 07:33:23 2006 -0800"
      },
      "message": "[PATCH] cpuset: remove unnecessary NULL check\n\nRemove a no longer needed test for NULL cpuset pointer, with a little\ncomment explaining why the test isn\u0027t needed.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "825a46af5ac171f9f41f794a0a00165588ba1589",
      "tree": "b690fe9d809d7b047f0393097fc79892e1217d98",
      "parents": [
        "8a39cc60bfa5a72f32d975729a354daca124f6de"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Fri Mar 24 03:16:03 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Mar 24 07:33:22 2006 -0800"
      },
      "message": "[PATCH] cpuset memory spread basic implementation\n\nThis patch provides the implementation and cpuset interface for an alternative\nmemory allocation policy that can be applied to certain kinds of memory\nallocations, such as the page cache (file system buffers) and some slab caches\n(such as inode caches).\n\nThe policy is called \"memory spreading.\" If enabled, it spreads out these\nkinds of memory allocations over all the nodes allowed to a task, instead of\npreferring to place them on the node where the task is executing.\n\nAll other kinds of allocations, including anonymous pages for a tasks stack\nand data regions, are not affected by this policy choice, and continue to be\nallocated preferring the node local to execution, as modified by the NUMA\nmempolicy.\n\nThere are two boolean flag files per cpuset that control where the kernel\nallocates pages for the file system buffers and related in kernel data\nstructures.  They are called \u0027memory_spread_page\u0027 and \u0027memory_spread_slab\u0027.\n\nIf the per-cpuset boolean flag file \u0027memory_spread_page\u0027 is set, then the\nkernel will spread the file system buffers (page cache) evenly over all the\nnodes that the faulting task is allowed to use, instead of preferring to put\nthose pages on the node where the task is running.\n\nIf the per-cpuset boolean flag file \u0027memory_spread_slab\u0027 is set, then the\nkernel will spread some file system related slab caches, such as for inodes\nand dentries evenly over all the nodes that the faulting task is allowed to\nuse, instead of preferring to put those pages on the node where the task is\nrunning.\n\nThe implementation is simple.  Setting the cpuset flags \u0027memory_spread_page\u0027\nor \u0027memory_spread_cache\u0027 turns on the per-process flags PF_SPREAD_PAGE or\nPF_SPREAD_SLAB, respectively, for each task that is in the cpuset or\nsubsequently joins that cpuset.  In subsequent patches, the page allocation\ncalls for the affected page cache and slab caches are modified to perform an\ninline check for these flags, and if set, a call to a new routine\ncpuset_mem_spread_node() returns the node to prefer for the allocation.\n\nThe cpuset_mem_spread_node() routine is also simple.  It uses the value of a\nper-task rotor cpuset_mem_spread_rotor to select the next node in the current\ntasks mems_allowed to prefer for the allocation.\n\nThis policy can provide substantial improvements for jobs that need to place\nthread local data on the corresponding node, but that need to access large\nfile system data sets that need to be spread across the several nodes in the\njobs cpuset in order to fit.  Without this patch, especially for jobs that\nmight have one thread reading in the data set, the memory allocation across\nthe nodes in the jobs cpuset can become very uneven.\n\nA couple of Copyright year ranges are updated as well.  And a couple of email\naddresses that can be found in the MAINTAINERS file are removed.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "8a39cc60bfa5a72f32d975729a354daca124f6de",
      "tree": "c8a364e6fc5186293bca85152c442a4a23df4822",
      "parents": [
        "7b5b9ef0e17d52c188fe73ea78e884fe67079e6c"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Fri Mar 24 03:16:01 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Mar 24 07:33:22 2006 -0800"
      },
      "message": "[PATCH] cpuset use combined atomic_inc_return calls\n\nReplace pairs of calls to \u003catomic_inc, atomic_read\u003e, with a single call\natomic_inc_return, saving a few bytes of source and kernel text.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "7b5b9ef0e17d52c188fe73ea78e884fe67079e6c",
      "tree": "6f131575486edc261e20bbcdb2f73ec28d159e91",
      "parents": [
        "0b1303fcf23678ee1785841fb0c770a35cd0833c"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Fri Mar 24 03:16:00 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Mar 24 07:33:22 2006 -0800"
      },
      "message": "[PATCH] cpuset cleanup not not operators\n\nSince the test_bit() bit operator is boolean (return 0 or 1), the double not\n\"!!\" operations needed to convert a scalar (zero or not zero) to a boolean are\nnot needed.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "3d3f26a7baaa921a0e790b4c72d20f0de91a5d65",
      "tree": "f2ad04e2954f6c8430c27d98a3b3f658b13379ee",
      "parents": [
        "6362e4d4eda61efb04ac1cdae32e48ac6d90b701"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Mar 23 03:00:18 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Thu Mar 23 07:38:10 2006 -0800"
      },
      "message": "[PATCH] kernel/cpuset.c, mutex conversion\n\nconvert cpuset.c\u0027s callback_sem and manage_sem to mutexes.\nBuild and boot tested by Ingo.\nBuild, boot, unit and stress tested by pj.\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "06fed33849c13af637c4d09e9ba27828fac9edd5",
      "tree": "0dd2fa91503250edc94ec58b23fbb3e9ad6100f4",
      "parents": [
        "651c29a17f7ea0204dacbc2a5042d57b1c9e2e37"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Wed Feb 15 15:17:38 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Feb 15 15:32:21 2006 -0800"
      },
      "message": "[PATCH] cpuset: oops in exit on null cpuset fix\n\nFix a latent bug in cpuset_exit() handling.  If a task tried to allocate\nmemory after calling cpuset_exit(), it oops\u0027d in\ncpuset_update_task_memory_state() on a NULL cpuset pointer.\n\nSo set the exiting tasks cpuset to the root cpuset instead of to NULL.\n\nA distro kernel hit this with an added kernel package that had just such a\nhook (allocating memory) in the exit code path.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "fe85a998ca64a067e58ca9240ec54a95994d78ee",
      "tree": "6856b5b7e8aa8724abe9103737c71ef055e158c8",
      "parents": [
        "778116920e89b91b19d2b488a0d6fe63cf43379c"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "rdunlap@xenotime.net",
        "time": "Fri Feb 03 03:04:23 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Feb 03 08:32:06 2006 -0800"
      },
      "message": "[PATCH] cpuset: fix sparse warning\n\nkernel/cpuset.c:644:38: warning: non-ANSI function declaration of function \u0027cpuset_update_task_memory_state\u0027\n\nSigned-off-by: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nAcked-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "505970b96e3b7d22177c38e03435a68376628e7a",
      "tree": "5508317e391961355bf3d946a6aac05bb21569eb",
      "parents": [
        "ed68cb3676bb179768529aeb808403d57295af56"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sat Jan 14 13:21:06 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Jan 14 18:27:10 2006 -0800"
      },
      "message": "[PATCH] cpuset oom lock fix\n\nThe problem, reported in:\n\n  http://bugzilla.kernel.org/show_bug.cgi?id\u003d5859\n\nand by various other email messages and lkml posts is that the cpuset hook\nin the oom (out of memory) code can try to take a cpuset semaphore while\nholding the tasklist_lock (a spinlock).\n\nOne must not sleep while holding a spinlock.\n\nThe fix seems easy enough - move the cpuset semaphore region outside the\ntasklist_lock region.\n\nThis required a few lines of mechanism to implement.  The oom code where\nthe locking needs to be changed does not have access to the cpuset locks,\nwhich are internal to kernel/cpuset.c only.  So I provided a couple more\ncpuset interface routines, available to the rest of the kernel, which\nsimple take and drop the lock needed here (cpusets callback_sem).\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "858119e159384308a5dde67776691a2ebf70df0f",
      "tree": "f360768f999d51edc0863917ce0bf79e88c0ec4c",
      "parents": [
        "b0a9499c3dd50d333e2aedb7e894873c58da3785"
      ],
      "author": {
        "name": "Arjan van de Ven",
        "email": "arjan@infradead.org",
        "time": "Sat Jan 14 13:20:43 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Jan 14 18:27:06 2006 -0800"
      },
      "message": "[PATCH] Unlinline a bunch of other functions\n\nRemove the \"inline\" keyword from a bunch of big functions in the kernel with\nthe goal of shrinking it by 30kb to 40kb\n\nSigned-off-by: Arjan van de Ven \u003carjan@infradead.org\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nAcked-by: Jeff Garzik \u003cjgarzik@pobox.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "1b1dcc1b57a49136f118a0f16367256ff9994a69",
      "tree": "b0b36d4f41d28c9d6514fb309d33c1a084d6309b",
      "parents": [
        "794ee1baee1c26be40410233e6c20bceb2b03c08"
      ],
      "author": {
        "name": "Jes Sorensen",
        "email": "jes@sgi.com",
        "time": "Mon Jan 09 15:59:24 2006 -0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@hera.kernel.org",
        "time": "Mon Jan 09 15:59:24 2006 -0800"
      },
      "message": "[PATCH] mutex subsystem, semaphore to mutex: VFS, -\u003ei_sem\n\nThis patch converts the inode semaphore to a mutex. I have tested it on\nXFS and compiled as much as one can consider on an ia64. Anyway your\nluck with it might be different.\n\nModified-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n\n(finished the conversion)\n\nSigned-off-by: Jes Sorensen \u003cjes@sgi.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "5160ee6fc891a9ca114be0e90fa6655647bb64b2",
      "tree": "35d3740a777935582af1b78238f20d2c2971ed55",
      "parents": [
        "21b6bf143d05d77c350d9c6764ae090a877b66ea"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "dada1@cosmosbay.com",
        "time": "Sun Jan 08 01:03:32 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:58 2006 -0800"
      },
      "message": "[PATCH] shrink dentry struct\n\nSome long time ago, dentry struct was carefully tuned so that on 32 bits\nUP, sizeof(struct dentry) was exactly 128, ie a power of 2, and a multiple\nof memory cache lines.\n\nThen RCU was added and dentry struct enlarged by two pointers, with nice\nresults for SMP, but not so good on UP, because breaking the above tuning\n(128 + 8 \u003d 136 bytes)\n\nThis patch reverts this unwanted side effect, by using an union (d_u),\nwhere d_rcu and d_child are placed so that these two fields can share their\nmemory needs.\n\nAt the time d_free() is called (and d_rcu is really used), d_child is known\nto be empty and not touched by the dentry freeing.\n\nLockless lookups only access d_name, d_parent, d_lock, d_op, d_flags (so\nthe previous content of d_child is not needed if said dentry was unhashed\nbut still accessed by a CPU because of RCU constraints)\n\nAs dentry cache easily contains millions of entries, a size reduction is\nworth the extra complexity of the ugly C union.\n\nSigned-off-by: Eric Dumazet \u003cdada1@cosmosbay.com\u003e\nCc: Dipankar Sarma \u003cdipankar@in.ibm.com\u003e\nCc: Maneesh Soni \u003cmaneesh@in.ibm.com\u003e\nCc: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@us.ibm.com\u003e\nCc: Ian Kent \u003craven@themaw.net\u003e\nCc: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Al Viro \u003cviro@ftp.linux.org.uk\u003e\nCc: Christoph Hellwig \u003chch@lst.de\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nCc: Neil Brown \u003cneilb@cse.unsw.edu.au\u003e\nCc: James Morris \u003cjmorris@namei.org\u003e\nCc: Stephen Smalley \u003csds@epoch.ncsc.mil\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "03a285f58064b8e0af08383e082e383753d9c33e",
      "tree": "af458f3357d4e2d01dc04d2d41a7dd7d502c4755",
      "parents": [
        "7edc59628b2f5d6516b4677b3b56f5f056e45cd9"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jan 08 01:02:04 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:45 2006 -0800"
      },
      "message": "[PATCH] cpuset: skip rcu check if task is in root cpuset\n\nFor systems that aren\u0027t using cpusets, but have them CONFIG_CPUSET enabled in\ntheir kernel (eventually this may be most distribution kernels), this patch\nremoves even the minimal rcu_read_lock() from the memory page allocation path.\n\nActually, it removes that rcu call for any task that is in the root cpuset\n(top_cpuset), which on systems not actively using cpusets, is all tasks.\n\nWe don\u0027t need the rcu check for tasks in the top_cpuset, because the\ntop_cpuset is statically allocated, so at no risk of being freed out from\nunderneath us.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "7edc59628b2f5d6516b4677b3b56f5f056e45cd9",
      "tree": "cc0f07bc07156c6f805a72c39ae2d5655a97fede",
      "parents": [
        "6b9c2603ce07f70de9c7a8d335ecd028e8ff11f3"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jan 08 01:02:03 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:45 2006 -0800"
      },
      "message": "[PATCH] cpuset: mark number_of_cpusets read_mostly\n\nMark cpuset global \u0027number_of_cpusets\u0027 as __read_mostly.\n\nThis global is accessed everytime a zone is considered in the zonelist loops\nbeneath __alloc_pages, looking for a free memory page.  If number_of_cpusets\nis just one, then we can short circuit the mems_allowed check.\n\nSince this global is read alot on a hot path, and written rarely, it is an\nexcellent candidate for __read_mostly.\n\nThanks to Christoph Lameter for the suggestion.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "6b9c2603ce07f70de9c7a8d335ecd028e8ff11f3",
      "tree": "38b009da71a1f93bbda8621c7d2721c18913260d",
      "parents": [
        "c417f0242ebe578924a30d4e53d35b5059fed4e7"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jan 08 01:02:02 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:45 2006 -0800"
      },
      "message": "[PATCH] cpuset: use rcu directly optimization\n\nOptimize the cpuset impact on page allocation, the most performance critical\ncpuset hook in the kernel.\n\nOn each page allocation, the cpuset hook needs to check for a possible change\nin the current tasks cpuset.  It can now handle the common case, of no change,\nwithout taking any spinlock or semaphore, thanks to RCU.\n\nConvert a spinlock on the current task to an rcu_read_lock(), saving\napproximately a memory barrier and an atomic op, depending on architecture.\n\nThis is done by adding rcu_assign_pointer() and synchronize_rcu() calls to the\nwrite side of the task-\u003ecpuset pointer, in cpuset.c:attach_task(), to delay\nfreeing up a detached cpuset until after any critical sections referencing\nthat pointer.\n\nThanks to Andi Kleen, Nick Piggin and Eric Dumazet for ideas.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "c417f0242ebe578924a30d4e53d35b5059fed4e7",
      "tree": "3058c7c79aedb11e7013f5faca34eb07e9a761bd",
      "parents": [
        "04c19fa6f16047abff2288ddbc1f0798ede5a849"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jan 08 01:02:01 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:44 2006 -0800"
      },
      "message": "[PATCH] cpuset: remove test for null cpuset from alloc code path\n\nRemove a couple of more lines of code from the cpuset hooks in the page\nallocation code path.\n\nThere was a check for a NULL cpuset pointer in the routine\ncpuset_update_task_memory_state() that was only needed during system boot,\nafter the memory subsystem was initialized, before the cpuset subsystem was\ninitialized, to catch a NULL task-\u003ecpuset pointer.\n\nAdd a cpuset_init_early() routine, just before the mem_init() call in\ninit/main.c, that sets up just enough of the init tasks cpuset structure to\nrender cpuset_update_task_memory_state() calls harmless.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "04c19fa6f16047abff2288ddbc1f0798ede5a849",
      "tree": "4c4f109d919042b300ac907a8fde64b822faa7aa",
      "parents": [
        "4225399a66b315d4d1fb1cb61b75dda201c832e3"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jan 08 01:02:00 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:44 2006 -0800"
      },
      "message": "[PATCH] cpuset: migrate all tasks in cpuset at once\n\nGiven the mechanism in the previous patch to handle rebinding the per-vma\nmempolicies of all tasks in a cpuset that changes its memory placement, it is\nnow easier to handle the page migration requirements of such tasks at the same\ntime.\n\nThe previous code didn\u0027t actually attempt to migrate the pages of the tasks in\na cpuset whose memory placement changed until the next time each such task\ntried to allocate memory.  This was undesirable, as users invoking memory page\nmigration exected to happen when the placement changed, not some unspecified\ntime later when the task needed more memory.\n\nIt is now trivial to handle the page migration at the same time as the per-vma\nrebinding is done.\n\nThe routine cpuset.c:update_nodemask(), which handles changing a cpusets\nmemory placement (\u0027mems\u0027) now checks for the special case of being asked to\nwrite a placement that is the same as before.  It was harmless enough before\nto just recompute everything again, even though nothing had changed.  But page\nmigration is a heavy weight operation - moving pages about.  So now it is\nworth avoiding that if asked to move a cpuset to its current location.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4225399a66b315d4d1fb1cb61b75dda201c832e3",
      "tree": "c8bd976bc6590c5fe859c6129abb93072d99cfa8",
      "parents": [
        "202f72d5d1b5c2c084f63ef996c736d208b447b5"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jan 08 01:01:59 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:44 2006 -0800"
      },
      "message": "[PATCH] cpuset: rebind vma mempolicies fix\n\nFix more of longstanding bug in cpuset/mempolicy interaction.\n\nNUMA mempolicies (mm/mempolicy.c) are constrained by the current tasks cpuset\nto just the Memory Nodes allowed by that cpuset.  The kernel maintains\ninternal state for each mempolicy, tracking what nodes are used for the\nMPOL_INTERLEAVE, MPOL_BIND or MPOL_PREFERRED policies.\n\nWhen a tasks cpuset memory placement changes, whether because the cpuset\nchanged, or because the task was attached to a different cpuset, then the\ntasks mempolicies have to be rebound to the new cpuset placement, so as to\npreserve the cpuset-relative numbering of the nodes in that policy.\n\nAn earlier fix handled such mempolicy rebinding for mempolicies attached to a\ntask.\n\nThis fix rebinds mempolicies attached to vma\u0027s (address ranges in a tasks\naddress space.) Due to the need to hold the task-\u003emm-\u003emmap_sem semaphore while\nupdating vma\u0027s, the rebinding of vma mempolicies has to be done when the\ncpuset memory placement is changed, at which time mmap_sem can be safely\nacquired.  The tasks mempolicy is rebound later, when the task next attempts\nto allocate memory and notices that its task-\u003ecpuset_mems_generation is\nout-of-date with its cpusets mems_generation.\n\nBecause walking the tasklist to find all tasks attached to a changing cpuset\nrequires holding tasklist_lock, a spinlock, one cannot update the vma\u0027s of the\naffected tasks while doing the tasklist scan.  In general, one cannot acquire\na semaphore (which can sleep) while already holding a spinlock (such as\ntasklist_lock).  So a list of mm references has to be built up during the\ntasklist scan, then the tasklist lock dropped, then for each mm, its mmap_sem\nacquired, and the vma\u0027s in that mm rebound.\n\nOnce the tasklist lock is dropped, affected tasks may fork new tasks, before\ntheir mm\u0027s are rebound.  A kernel global \u0027cpuset_being_rebound\u0027 is set to\npoint to the cpuset being rebound (there can only be one; cpuset modifications\nare done under a global \u0027manage_sem\u0027 semaphore), and the mpol_copy code that\nis used to copy a tasks mempolicies during fork catches such forking tasks,\nand ensures their children are also rebound.\n\nWhen a task is moved to a different cpuset, it is easier, as there is only one\ntask involved.  It\u0027s mm-\u003evma\u0027s are scanned, using the same\nmpol_rebind_policy() as used above.\n\nIt may happen that both the mpol_copy hook and the update done via the\ntasklist scan update the same mm twice.  This is ok, as the mempolicies of\neach vma in an mm keep track of what mems_allowed they are relative to, and\nsafely no-op a second request to rebind to the same nodes.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "202f72d5d1b5c2c084f63ef996c736d208b447b5",
      "tree": "f50551f9588f9090fee17130614e17a2dd64c656",
      "parents": [
        "74cb21553f4bf244185b9bec4c26e4e3169ad55e"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jan 08 01:01:57 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:44 2006 -0800"
      },
      "message": "[PATCH] cpuset: number_of_cpusets optimization\n\nEasy little optimization hack to avoid actually having to call\ncpuset_zone_allowed() and check mems_allowed, in the main page allocation\nroutine, __alloc_pages().  This saves several CPU cycles per page allocation\non systems not using cpusets.\n\nA counter is updated each time a cpuset is created or removed, and whenever\nthere is only one cpuset in the system, it must be the root cpuset, which\ncontains all CPUs and all Memory Nodes.  In that case, when the counter is\none, all allocations are allowed.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "74cb21553f4bf244185b9bec4c26e4e3169ad55e",
      "tree": "3f8f13e8dacc8f0876b01f62765a123ce1722b17",
      "parents": [
        "909d75a3b77bdd8baa9429bad3b69a654d2954ce"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jan 08 01:01:56 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:44 2006 -0800"
      },
      "message": "[PATCH] cpuset: numa_policy_rebind cleanup\n\nCleanup, reorganize and make more robust the mempolicy.c code to rebind\nmempolicies relative to the containing cpuset after a tasks memory placement\nchanges.\n\nThe real motivator for this cleanup patch is to lay more groundwork for the\nupcoming patch to correctly rebind NUMA mempolicies that are attached to vma\u0027s\nafter the containing cpuset memory placement changes.\n\nNUMA mempolicies are constrained by the cpuset their task is a member of.\nWhen either (1) a task is moved to a different cpuset, or (2) the \u0027mems\u0027\nmems_allowed of a cpuset is changed, then the NUMA mempolicies have embedded\nnode numbers (for MPOL_BIND, MPOL_INTERLEAVE and MPOL_PREFERRED) that need to\nbe recalculated, relative to their new cpuset placement.\n\nThe old code used an unreliable method of determining what was the old\nmems_allowed constraining the mempolicy.  It just looked at the tasks\nmems_allowed value.  This sort of worked with the present code, that just\nrebinds the -task- mempolicy, and leaves any -vma- mempolicies broken,\nreferring to the old nodes.  But in an upcoming patch, the vma mempolicies\nwill be rebound as well.  Then the order in which the various task and vma\nmempolicies are updated will no longer be deterministic, and one can no longer\ncount on the task-\u003emems_allowed holding the old value for as long as needed.\nIt\u0027s not even clear if the current code was guaranteed to work reliably for\ntask mempolicies.\n\nSo I added a mems_allowed field to each mempolicy, stating exactly what\nmems_allowed the policy is relative to, and updated synchronously and reliably\nanytime that the mempolicy is rebound.\n\nAlso removed a useless wrapper routine, numa_policy_rebind(), and had its\ncaller, cpuset_update_task_memory_state(), call directly to the rewritten\npolicy_rebind() routine, and made that rebind routine extern instead of\nstatic, and added a \"mpol_\" prefix to its name, making it\nmpol_rebind_policy().\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "909d75a3b77bdd8baa9429bad3b69a654d2954ce",
      "tree": "f9955ff697b7569fc75e5b8683d886315f34ac49",
      "parents": [
        "cf2a473c4089aa41c26f653200673f5a4cc25047"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jan 08 01:01:55 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:44 2006 -0800"
      },
      "message": "[PATCH] cpuset: implement cpuset_mems_allowed\n\nProvide a cpuset_mems_allowed() method, which the sys_migrate_pages() code\nneeded, to obtain the mems_allowed vector of a cpuset, and replaced the\nworkaround in sys_migrate_pages() to call this new method.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "cf2a473c4089aa41c26f653200673f5a4cc25047",
      "tree": "0bce21f4684a382b13e93ba5b85409cf5eab1c2c",
      "parents": [
        "b4b2641843db124637fa3d2cb2101982035dcc82"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jan 08 01:01:54 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:43 2006 -0800"
      },
      "message": "[PATCH] cpuset: combine refresh_mems and update_mems\n\nThe important code paths through alloc_pages_current() and alloc_page_vma(),\nby which most kernel page allocations go, both called\ncpuset_update_current_mems_allowed(), which in turn called refresh_mems().\n-Both- of these latter two routines did a tasklock, got the tasks cpuset\npointer, and checked for out of date cpuset-\u003emems_generation.\n\nThat was a silly duplication of code and waste of CPU cycles on an important\ncode path.\n\nConsolidated those two routines into a single routine, called\ncpuset_update_task_memory_state(), since it updates more than just\nmems_allowed.\n\nChanged all callers of either routine to call the new consolidated routine.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "b4b2641843db124637fa3d2cb2101982035dcc82",
      "tree": "fe8ed223f2e1828a6d14090711bad1c864aded09",
      "parents": [
        "59dac16fb95f09253b8086134443abeb439703cd"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jan 08 01:01:53 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:43 2006 -0800"
      },
      "message": "[PATCH] cpuset: fork hook fix\n\nFix obscure, never seen in real life, cpuset fork race.  The cpuset_fork()\ncall in fork.c was setting up the correct task-\u003ecpuset pointer after the\ntasklist_lock was dropped, which briefly exposed the newly forked process with\nan unsafe (copied from parent without locks or usage counter increment) cpuset\npointer.\n\nIn theory, that exposed cpuset pointer could have been pointing at a cpuset\nthat was already freed and removed, and in theory another task that had been\nsitting on the tasklist_lock waiting to scan the task list could have raced\ndown the entire tasklist, found our new child at the far end, and dereferenced\nthat bogus cpuset pointer.\n\nTo fix, setup up the correct cpuset pointer in the new child by calling\ncpuset_fork() before the new task is linked into the tasklist, and with that,\nadd a fork failure case, to dereference that cpuset, if the fork fails along\nthe way, after cpuset_fork() was called.\n\nHad to remove a BUG_ON() from cpuset_exit(), because it was no longer valid -\nthe call to cpuset_exit() from a failed fork would not have PF_EXITING set.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "59dac16fb95f09253b8086134443abeb439703cd",
      "tree": "25491bdcff6f980edfed259d7edadeb273a27ee3",
      "parents": [
        "c5b2aff89635495064592dc90da595f8a880ee87"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jan 08 01:01:52 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:43 2006 -0800"
      },
      "message": "[PATCH] cpuset: update_nodemask code reformat\n\nRestructure code layout of the kernel/cpuset.c update_nodemask() routine,\nremoving embedded returns and nested if\u0027s in favor of goto completion labels.\nThis is being done in anticipation of adding more logic to this routine, which\nwill favor the goto style structure.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "c5b2aff89635495064592dc90da595f8a880ee87",
      "tree": "2a796593bd675979bbad88ddd4de1a11f120bf62",
      "parents": [
        "90c9cc4043fd8454d11886379f841f70e176698e"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jan 08 01:01:51 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:43 2006 -0800"
      },
      "message": "[PATCH] cpuset: minor spacing initializer fixes\n\nFour trivial cpuset fixes: remove extra spaces, remove useless initializers,\nmark one __read_mostly.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "3e0d98b9f1eb757fc98efc84e74e54a08308aa73",
      "tree": "7cf1c75994f734ede7ec89373de640c4a58b237a",
      "parents": [
        "5966514db662fb24c9bb43226a80106bcffd51f8"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jan 08 01:01:49 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:42 2006 -0800"
      },
      "message": "[PATCH] cpuset: memory pressure meter\n\nProvide a simple per-cpuset metric of memory pressure, tracking the -rate-\nthat the tasks in a cpuset call try_to_free_pages(), the synchronous\n(direct) memory reclaim code.\n\nThis enables batch managers monitoring jobs running in dedicated cpusets to\nefficiently detect what level of memory pressure that job is causing.\n\nThis is useful both on tightly managed systems running a wide mix of\nsubmitted jobs, which may choose to terminate or reprioritize jobs that are\ntrying to use more memory than allowed on the nodes assigned them, and with\ntightly coupled, long running, massively parallel scientific computing jobs\nthat will dramatically fail to meet required performance goals if they\nstart to use more memory than allowed to them.\n\nThis patch just provides a very economical way for the batch manager to\nmonitor a cpuset for signs of memory pressure.  It\u0027s up to the batch\nmanager or other user code to decide what to do about it and take action.\n\n\u003d\u003d\u003e Unless this feature is enabled by writing \"1\" to the special file\n    /dev/cpuset/memory_pressure_enabled, the hook in the rebalance\n    code of __alloc_pages() for this metric reduces to simply noticing\n    that the cpuset_memory_pressure_enabled flag is zero.  So only\n    systems that enable this feature will compute the metric.\n\nWhy a per-cpuset, running average:\n\n    Because this meter is per-cpuset, rather than per-task or mm, the\n    system load imposed by a batch scheduler monitoring this metric is\n    sharply reduced on large systems, because a scan of the tasklist can be\n    avoided on each set of queries.\n\n    Because this meter is a running average, instead of an accumulating\n    counter, a batch scheduler can detect memory pressure with a single\n    read, instead of having to read and accumulate results for a period of\n    time.\n\n    Because this meter is per-cpuset rather than per-task or mm, the\n    batch scheduler can obtain the key information, memory pressure in a\n    cpuset, with a single read, rather than having to query and accumulate\n    results over all the (dynamically changing) set of tasks in the cpuset.\n\nA per-cpuset simple digital filter (requires a spinlock and 3 words of data\nper-cpuset) is kept, and updated by any task attached to that cpuset, if it\nenters the synchronous (direct) page reclaim code.\n\nA per-cpuset file provides an integer number representing the recent\n(half-life of 10 seconds) rate of direct page reclaims caused by the tasks\nin the cpuset, in units of reclaims attempted per second, times 1000.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "5966514db662fb24c9bb43226a80106bcffd51f8",
      "tree": "9c6d8f4f6fee0d6574de7e225141d37b28811dc3",
      "parents": [
        "96b7f34143c2c823a6a750fcb758fc66c44945d2"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jan 08 01:01:47 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:13:42 2006 -0800"
      },
      "message": "[PATCH] cpuset: mempolicy one more nodemask conversion\n\nFinish converting mm/mempolicy.c from bitmaps to nodemasks.  The previous\nconversion had left one routine using bitmaps, since it involved a\ncorresponding change to kernel/cpuset.c\n\nFix that interface by replacing with a simple macro that calls nodes_subset(),\nor if !CONFIG_CPUSET, returns (1).\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Christoph Lameter \u003cchristoph@lameter.com\u003e\nCc: Andi Kleen \u003cak@muc.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "45b07ef31d1182d2cfde7711327e3afb268bb1ac",
      "tree": "3bf820531f920b43d4ed963643b1f565c82bcaa4",
      "parents": [
        "d0d963281ccb22e6f339bfdd75c6b2e31351929f"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Jan 08 01:00:56 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Jan 08 20:12:43 2006 -0800"
      },
      "message": "[PATCH] cpusets: swap migration interface\n\nAdd a boolean \"memory_migrate\" to each cpuset, represented by a file\ncontaining \"0\" or \"1\" in each directory below /dev/cpuset.\n\nIt defaults to false (file contains \"0\").  It can be set true by writing\n\"1\" to the file.\n\nIf true, then anytime that a task is attached to the cpuset so marked, the\npages of that task will be moved to that cpuset, preserving, to the extent\npractical, the cpuset-relative placement of the pages.\n\nAlso anytime that a cpuset so marked has its memory placement changed (by\nwriting to its \"mems\" file), the tasks in that cpuset will have their pages\nmoved to the cpusets new nodes, preserving, to the extent practical, the\ncpuset-relative placement of the moved pages.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nCc: Christoph Lameter \u003cchristoph@lameter.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "5563e77078d85c4f107a0a673500c43ce57cf702",
      "tree": "b9cacaa2f6ad595d6ade9e69f8a84d7c9b063048",
      "parents": [
        "3c8d61bcf2d762fb84dbf741df400c833cada18a"
      ],
      "author": {
        "name": "Bob Picco",
        "email": "bob.picco@hp.com",
        "time": "Sun Nov 13 16:06:35 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Nov 13 18:14:11 2005 -0800"
      },
      "message": "[PATCH] cpuset: fix return without releasing semaphore\n\nIt is wrong to acquire the semaphore and then return from\ncpuset_zone_allowed without releasing it.\n\nSigned-off-by: Bob Picco \u003cbob.picco@hp.com\u003e\nAcked-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "68860ec10bcc07ab4f89f9d940e3b77ae5ca13b3",
      "tree": "a411f9623a113d72f23da38cf2de51f66c177873",
      "parents": [
        "fb5eeeee44edb248b4837416966f19731f497f79"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Oct 30 15:02:36 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 30 17:37:22 2005 -0800"
      },
      "message": "[PATCH] cpusets: automatic numa mempolicy rebinding\n\nThis patch automatically updates a tasks NUMA mempolicy when its cpuset\nmemory placement changes.  It does so within the context of the task,\nwithout any need to support low level external mempolicy manipulation.\n\nIf a system is not using cpusets, or if running on a system with just the\nroot (all-encompassing) cpuset, then this remap is a no-op.  Only when a\ntask is moved between cpusets, or a cpusets memory placement is changed\ndoes the following apply.  Otherwise, the main routine below,\nrebind_policy() is not even called.\n\nWhen mixing cpusets, scheduler affinity, and NUMA mempolicies, the\nessential role of cpusets is to place jobs (several related tasks) on a set\nof CPUs and Memory Nodes, the essential role of sched_setaffinity is to\nmanage a jobs processor placement within its allowed cpuset, and the\nessential role of NUMA mempolicy (mbind, set_mempolicy) is to manage a jobs\nmemory placement within its allowed cpuset.\n\nHowever, CPU affinity and NUMA memory placement are managed within the\nkernel using absolute system wide numbering, not cpuset relative numbering.\n\nThis is ok until a job is migrated to a different cpuset, or what\u0027s the\nsame, a jobs cpuset is moved to different CPUs and Memory Nodes.\n\nThen the CPU affinity and NUMA memory placement of the tasks in the job\nneed to be updated, to preserve their cpuset-relative position.  This can\nbe done for CPU affinity using sched_setaffinity() from user code, as one\ntask can modify anothers CPU affinity.  This cannot be done from an\nexternal task for NUMA memory placement, as that can only be modified in\nthe context of the task using it.\n\nHowever, it easy enough to remap a tasks NUMA mempolicy automatically when\na task is migrated, using the existing cpuset mechanism to trigger a\nrefresh of a tasks memory placement after its cpuset has changed.  All that\nis needed is the old and new nodemask, and notice to the task that it needs\nto rebind its mempolicy.  The tasks mems_allowed has the old mask, the\ntasks cpuset has the new mask, and the existing\ncpuset_update_current_mems_allowed() mechanism provides the notice.  The\nbitmap/cpumask/nodemask remap operators provide the cpuset relative\ncalculations.\n\nThis patch leaves open a couple of issues:\n\n 1) Updating vma and shmfs/tmpfs/hugetlbfs memory policies:\n\n    These mempolicies may reference nodes outside of those allowed to\n    the current task by its cpuset.  Tasks are migrated as part of jobs,\n    which reside on what might be several cpusets in a subtree.  When such\n    a job is migrated, all NUMA memory policy references to nodes within\n    that cpuset subtree should be translated, and references to any nodes\n    outside that subtree should be left untouched.  A future patch will\n    provide the cpuset mechanism needed to mark such subtrees.  With that\n    patch, we will be able to correctly migrate these other memory policies\n    across a job migration.\n\n 2) Updating cpuset, affinity and memory policies in user space:\n\n    This is harder.  Any placement state stored in user space using\n    system-wide numbering will be invalidated across a migration.  More\n    work will be required to provide user code with a migration-safe means\n    to manage its cpuset relative placement, while preserving the current\n    API\u0027s that pass system wide numbers, not cpuset relative numbers across\n    the kernel-user boundary.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "18a19cb3047e454ee5ecbc35d7acf3f8e09e0466",
      "tree": "ad91d0024d886bdd207ba72e875e736e833de616",
      "parents": [
        "053199edf54f685e7dea765b60d4d5e9070dadec"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Oct 30 15:02:31 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 30 17:37:21 2005 -0800"
      },
      "message": "[PATCH] cpusets: simple rename\n\nAdd support for renaming cpusets.  Only allow simple rename of cpuset\ndirectories in place.  Don\u0027t allow moving cpusets elsewhere in hierarchy or\nrenaming the special cpuset files in each cpuset directory.\n\nThe usefulness of this simple rename became apparent when developing task\nmigration facilities.  It allows building a second cpuset hierarchy using\nnew names and containing new CPUs and Memory Nodes, moving tasks from the\nold to the new cpusets, removing the old cpusets, and then renaming the new\ncpusets to be just like the old names, so that any knowledge that the tasks\nhad of their cpuset names will still be valid.\n\nLeaf node cpusets can be migrated to other CPUs or Memory Nodes by just\nupdating their \u0027cpus\u0027 and \u0027mems\u0027 files, but because no cpuset can contain\nCPUs or Nodes not in its parent cpuset, one cannot do this in a cpuset\nhierarchy without first expanding all the non-leaf cpusets to contain the\nunion of both the old and new CPUs and Nodes, which would obfuscate the\none-to-one migration of a task from one cpuset to another required to\ncorrectly migrate the physical page frames currently allocated to that\ntask.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "053199edf54f685e7dea765b60d4d5e9070dadec",
      "tree": "a2d12a8b7f07b59048da992e7ae9405bc4ee292b",
      "parents": [
        "5aa15b5f27fc2c404530c6c8eabdb8437deb3163"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Oct 30 15:02:30 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 30 17:37:21 2005 -0800"
      },
      "message": "[PATCH] cpusets: dual semaphore locking overhaul\n\nOverhaul cpuset locking.  Replace single semaphore with two semaphores.\n\nThe suggestion to use two locks was made by Roman Zippel.\n\nBoth locks are global.  Code that wants to modify cpusets must first\nacquire the exclusive manage_sem, which allows them read-only access to\ncpusets, and holds off other would-be modifiers.  Before making actual\nchanges, the second semaphore, callback_sem must be acquired as well.  Code\nthat needs only to query cpusets must acquire callback_sem, which is also a\nglobal exclusive lock.\n\nThe earlier problems with double tripping are avoided, because it is\nallowed for holders of manage_sem to nest the second callback_sem lock, and\nonly callback_sem is needed by code called from within __alloc_pages(),\nwhere the double tripping had been possible.\n\nThis is not quite the same as a normal read/write semaphore, because\nobtaining read-only access with intent to change must hold off other such\nattempts, while allowing read-only access w/o such intention.  Changing\ncpusets involves several related checks and changes, which must be done\nwhile allowing read-only queries (to avoid the double trip), but while\nensuring nothing changes (holding off other would be modifiers.)\n\nThis overhaul of cpuset locking also makes careful use of task_lock() to\nguard access to the task-\u003ecpuset pointer, closing a couple of race\nconditions noticed while reading this code (thanks, Roman).  I\u0027ve never\nseen these races fail in any use or test.\n\nSee further the comments in the code.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "5aa15b5f27fc2c404530c6c8eabdb8437deb3163",
      "tree": "914f0b33f5190bd0183cde2e9f6da552d3d1d7aa",
      "parents": [
        "f35f31d7ed0150f9865619f21b5050c91b46c03f"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Oct 30 15:02:28 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 30 17:37:21 2005 -0800"
      },
      "message": "[PATCH] cpusets: remove depth counted locking hack\n\nRemove a rather hackish depth counter on cpuset locking.  The depth counter\nwas avoiding a possible double trip on the global cpuset_sem semaphore.  It\nworked, but now an improved version of cpuset locking is available, to come\nin the next patch, using two global semaphores.\n\nThis patch reverses \"cpuset semaphore depth check deadlock fix\"\n\nThe kernel still works, even after this patch, except for some rare and\ndifficult to reproduce race conditions when agressively creating and\ndestroying cpusets marked with the notify_on_release option, on very large\nsystems.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "f35f31d7ed0150f9865619f21b5050c91b46c03f",
      "tree": "fb33df4eb302de0d249682e77d3d07bd6f6611ba",
      "parents": [
        "e9543659715602e3180f00a227bb6db34141ac41"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sun Oct 30 15:02:27 2005 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sun Oct 30 17:37:21 2005 -0800"
      },
      "message": "[PATCH] cpuset cleanup\n\nRemove one more useless line from cpuset_common_file_read().\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "dd0fc66fb33cd610bc1a5db8a5e232d34879b4d7",
      "tree": "51f96a9db96293b352e358f66032e1f4ff79fafb",
      "parents": [
        "3b0e77bd144203a507eb191f7117d2c5004ea1de"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@ftp.linux.org.uk",
        "time": "Fri Oct 07 07:46:04 2005 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Oct 08 15:00:57 2005 -0700"
      },
      "message": "[PATCH] gfp flags annotations - part 1\n\n - added typedef unsigned int __nocast gfp_t;\n\n - replaced __nocast uses for gfp flags with gfp_t - it gives exactly\n   the same warnings as far as sparse is concerned, doesn\u0027t change\n   generated code (from gcc point of view we replaced unsigned int with\n   typedef) and documents what\u0027s going on far better.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "eacaa1f5aa4a41a48349f55abcd9258506943e76",
      "tree": "6b0e7e82f0ba4144639bb30eeb82dc8588cfd3f5",
      "parents": [
        "46d7031ecb8a8360b0022abd8014f38cc1197166"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@ftp.linux.org.uk",
        "time": "Fri Sep 30 03:26:43 2005 +0100"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Sep 30 08:42:24 2005 -0700"
      },
      "message": "[PATCH] cpuset crapectomy\n\nSwitched cpuset_common_file_read() to simple_read_from_buffer(), killed\na bunch of useless (and not quite correct - e.g.  min(size_t,ssize_t))\ncode.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "5134fc15b643dc36eb9aa77e4318b886844a9ac5",
      "tree": "170339651303da0bb530c407300f09d3cd39caa2",
      "parents": [
        "2dd3c1df95fb29e9227f16ccd7d786d129e2b34d"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Wed Sep 28 06:42:24 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 28 07:58:51 2005 -0700"
      },
      "message": "[PATCH] cpuset read past eof memory leak fix\n\nDon\u0027t leak a page of memory if user reads a cpuset file past eof.\n\nSigned-off-by: KUROSAWA Takahiro \u003ckurosawa@valinux.co.jp\u003e\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "b3426599af9524104be6938bcb1fcaab314781c7",
      "tree": "c6d354bddb5b8cd298d139b60a9257ebd8323b90",
      "parents": [
        "f24ec7f6c6278c0ea4c00efe96d50b1e66796c44"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Mon Sep 12 04:30:30 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Sep 12 09:16:27 2005 -0700"
      },
      "message": "[PATCH] cpuset semaphore depth check optimize\n\nOptimize the deadlock avoidance check on the global cpuset\nsemaphore cpuset_sem.  Instead of adding a depth counter to the\ntask struct of each task, rather just two words are enough, one\nto store the depth and the other the current cpuset_sem holder.\n\nThanks to Nikita Danilov for the idea.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\n\n[ We may want to change this further, but at least it\u0027s now\n  a totally internal decision to the cpusets code ]\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "4247bdc60048018b98f71228b45cfbc5f5270c86",
      "tree": "6f6abbd10685af84c97e661da6771726a12209ac",
      "parents": [
        "fb1c8f93d869b34cacb8b8932e2b83d96a19d720"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Sat Sep 10 00:26:06 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Sat Sep 10 10:06:21 2005 -0700"
      },
      "message": "[PATCH] cpuset semaphore depth check deadlock fix\n\nThe cpusets-formalize-intermediate-gfp_kernel-containment patch\nhas a deadlock problem.\n\nThis patch was part of a set of four patches to make more\nextensive use of the cpuset \u0027mem_exclusive\u0027 attribute to\nmanage kernel GFP_KERNEL memory allocations and to constrain\nthe out-of-memory (oom) killer.\n\nA task that is changing cpusets in particular ways on a system\nwhen it is very short of free memory could double trip over\nthe global cpuset_sem semaphore (get the lock and then deadlock\ntrying to get it again).\n\nThe second attempt to get cpuset_sem would be in the routine\ncpuset_zone_allowed().  This was discovered by code inspection.\nI can not reproduce the problem except with an artifically\nhacked kernel and a specialized stress test.\n\nIn real life you cannot hit this unless you are manipulating\ncpusets, and are very unlikely to hit it unless you are rapidly\nmodifying cpusets on a memory tight system.  Even then it would\nbe a rare occurence.\n\nIf you did hit it, the task double tripping over cpuset_sem\nwould deadlock in the kernel, and any other task also trying\nto manipulate cpusets would deadlock there too, on cpuset_sem.\nYour batch manager would be wedged solid (if it was cpuset\nsavvy), but classic Unix shells and utilities would work well\nenough to reboot the system.\n\nThe unusual condition that led to this bug is that unlike most\nsemaphores, cpuset_sem _can_ be acquired while in the page\nallocation code, when __alloc_pages() calls cpuset_zone_allowed.\nSo it easy to mistakenly perform the following sequence:\n  1) task makes system call to alter a cpuset\n  2) take cpuset_sem\n  3) try to allocate memory\n  4) memory allocator, via cpuset_zone_allowed, trys to take cpuset_sem\n  5) deadlock\n\nThe reason that this is not a serious bug for most users\nis that almost all calls to allocate memory don\u0027t require\ntaking cpuset_sem.  Only some code paths off the beaten\ntrack require taking cpuset_sem -- which is good.  Taking\na global semaphore on the main code path for allocating\nmemory would not scale well.\n\nThis patch fixes this deadlock by wrapping the up() and down()\ncalls on cpuset_sem in kernel/cpuset.c with code that tracks\nthe nesting depth of the current task on that semaphore, and\nonly does the real down() if the task doesn\u0027t hold the lock\nalready, and only does the real up() if the nesting depth\n(number of unmatched downs) is exactly one.\n\nThe previous required use of refresh_mems(), anytime that\nthe cpuset_sem semaphore was acquired and the code executed\nwhile holding that semaphore might try to allocate memory, is\nno longer required.  Two refresh_mems() calls were removed\nthanks to this.  This is a good change, as failing to get\nall the necessary refresh_mems() calls placed was a primary\nsource of bugs in this cpuset code.  The only remaining call\nto refresh_mems() is made while doing a memory allocation,\nif certain task memory placement data needs to be updated\nfrom its cpuset, due to the cpuset having been changed behind\nthe tasks back.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "73a358d1892a8233801e3fd54668075b52ec42da",
      "tree": "851250c42eb890c6fa3afe59b3398e17ee850bae",
      "parents": [
        "ac0b1bc1edbe81c0cb36cad7e7f5b91f4d9e12ed"
      ],
      "author": {
        "name": "KUROSAWA Takahiro",
        "email": "kurosawa@valinux.co.jp",
        "time": "Fri Sep 09 13:02:10 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Sep 09 13:57:32 2005 -0700"
      },
      "message": "[PATCH] fix for cpusets minor problem\n\nThis patch fixes minor problem that the CPUSETS have when files in the\ncpuset filesystem are read after lseek()-ed beyond the EOF.\n\nSigned-off-by: KUROSAWA Takahiro \u003ckurosawa@valinux.co.jp\u003e\nAcked-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "0811bab24ff1eecab38110eda7ea7847db95c64e",
      "tree": "1de9a8a04c8c3dec7f9cdf46f2db6b6609757127",
      "parents": [
        "d1b551386a5f3f50a5003b691f819b07f8e6f034"
      ],
      "author": {
        "name": "John Hawkes",
        "email": "hawkes@sgi.com",
        "time": "Tue Sep 06 15:18:15 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 07 16:57:41 2005 -0700"
      },
      "message": "[PATCH] cpusets: re-enable \"dynamic sched domains\"\n\nRevert the hack introduced last week.\n\nSigned-off-by: John Hawkes \u003chawkes@sgi.com\u003e\nCc: 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": "ef08e3b4981aebf2ba9bd7025ef7210e8eec07ce",
      "tree": "3b5386e011c87dde384115c8eb0d6961c2536025",
      "parents": [
        "9bf2229f8817677127a60c177aefce1badd22d7b"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Tue Sep 06 15:18:13 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 07 16:57:40 2005 -0700"
      },
      "message": "[PATCH] cpusets: confine oom_killer to mem_exclusive cpuset\n\nNow the real motivation for this cpuset mem_exclusive patch series seems\ntrivial.\n\nThis patch keeps a task in or under one mem_exclusive cpuset from provoking an\noom kill of a task under a non-overlapping mem_exclusive cpuset.  Since only\ninterrupt and GFP_ATOMIC allocations are allowed to escape mem_exclusive\ncontainment, there is little to gain from oom killing a task under a\nnon-overlapping mem_exclusive cpuset, as almost all kernel and user memory\nallocation must come from disjoint memory nodes.\n\nThis patch enables configuring a system so that a runaway job under one\nmem_exclusive cpuset cannot cause the killing of a job in another such cpuset\nthat might be using very high compute and memory resources for a prolonged\ntime.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "9bf2229f8817677127a60c177aefce1badd22d7b",
      "tree": "06e95863a26b197233081db1dafd869dfd231950",
      "parents": [
        "f90b1d2f1aaaa40c6519a32e69615edc25bb97d5"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Tue Sep 06 15:18:12 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 07 16:57:40 2005 -0700"
      },
      "message": "[PATCH] cpusets: formalize intermediate GFP_KERNEL containment\n\nThis patch makes use of the previously underutilized cpuset flag\n\u0027mem_exclusive\u0027 to provide what amounts to another layer of memory placement\nresolution.  With this patch, there are now the following four layers of\nmemory placement available:\n\n 1) The whole system (interrupt and GFP_ATOMIC allocations can use this),\n 2) The nearest enclosing mem_exclusive cpuset (GFP_KERNEL allocations can use),\n 3) The current tasks cpuset (GFP_USER allocations constrained to here), and\n 4) Specific node placement, using mbind and set_mempolicy.\n\nThese nest - each layer is a subset (same or within) of the previous.\n\nLayer (2) above is new, with this patch.  The call used to check whether a\nzone (its node, actually) is in a cpuset (in its mems_allowed, actually) is\nextended to take a gfp_mask argument, and its logic is extended, in the case\nthat __GFP_HARDWALL is not set in the flag bits, to look up the cpuset\nhierarchy for the nearest enclosing mem_exclusive cpuset, to determine if\nplacement is allowed.  The definition of GFP_USER, which used to be identical\nto GFP_KERNEL, is changed to also set the __GFP_HARDWALL bit, in the previous\ncpuset_gfp_hardwall_flag patch.\n\nGFP_ATOMIC and GFP_KERNEL allocations will stay within the current tasks\ncpuset, so long as any node therein is not too tight on memory, but will\nescape to the larger layer, if need be.\n\nThe intended use is to allow something like a batch manager to handle several\njobs, each job in its own cpuset, but using common kernel memory for caches\nand such.  Swapper and oom_kill activity is also constrained to Layer (2).  A\ntask in or below one mem_exclusive cpuset should not cause swapping on nodes\nin another non-overlapping mem_exclusive cpuset, nor provoke oom_killing of a\ntask in another such cpuset.  Heavy use of kernel memory for i/o caching and\nsuch by one job should not impact the memory available to jobs in other\nnon-overlapping mem_exclusive cpusets.\n\nThis patch enables providing hardwall, inescapable cpusets for memory\nallocations of each job, while sharing kernel memory allocations between\nseveral jobs, in an enclosing mem_exclusive cpuset.\n\nLike Dinakar\u0027s patch earlier to enable administering sched domains using the\ncpu_exclusive flag, this patch also provides a useful meaning to a cpuset flag\nthat had previously done nothing much useful other than restrict what cpuset\nconfigurations were allowed.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "212d6d2237f60bc28c1518f8abf9d3ed6c17574a",
      "tree": "693ac9cdb0693acb0f935d4b61a34e6a12056add",
      "parents": [
        "ca2f3daf779f5e89d14e9783fcfd7920842df9e9"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Thu Aug 25 12:47:56 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Aug 26 16:38:47 2005 -0700"
      },
      "message": "[PATCH] completely disable cpu_exclusive sched domain\n\nAt the suggestion of Nick Piggin and Dinakar, totally disable\nthe facility to allow cpu_exclusive cpusets to define dynamic\nsched domains in Linux 2.6.13, in order to avoid problems\nfirst reported by John Hawkes (corrupt sched data structures\nand kernel oops).\n\nThis has been built for ppc64, i386, ia64, x86_64, sparc, alpha.\nIt has been built, booted and tested for cpuset functionality\non an SN2 (ia64).\n\nDinakar or Nick - could you verify that it for sure does avoid\nthe problems Hawkes reported.  Hawkes is out of town, and I don\u0027t\nhave the recipe to reproduce what he found.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nAcked-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "ca2f3daf779f5e89d14e9783fcfd7920842df9e9",
      "tree": "07ce4cc60957d842dac1cb3d44dd5441071cf90f",
      "parents": [
        "13142341ac867bb67e88204cbfcb8d90f9a861b7"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Thu Aug 25 12:47:50 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Fri Aug 26 16:38:46 2005 -0700"
      },
      "message": "[PATCH] undo partial cpu_exclusive sched domain disabling\n\nThe partial disabling of Dinakar\u0027s new facility to allow\ncpu_exclusive cpusets to define dynamic sched domains\ndoesn\u0027t go far enough.  At the suggestion of Nick Piggin\nand Dinakar, let us instead totally disable this facility\nfor 2.6.13, in order to avoid problems first reported\nby John Hawkes (corrupt sched data structures and kernel oops).\n\nThis patch removes the partial disabling code in 2.6.13-rc7,\nin anticipation of the next patch, which will totally disable\nit instead.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "3725822f7c7134249addcd4549aff086950c8090",
      "tree": "d7db18d3d5f75fe4309ddc7aa373f3213f845b41",
      "parents": [
        "40bb0c3ef52d872de348e10000eb5432a43a147d"
      ],
      "author": {
        "name": "Paul Jackson",
        "email": "pj@sgi.com",
        "time": "Wed Aug 24 04:15:10 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Aug 24 09:40:45 2005 -0700"
      },
      "message": "[PATCH] cpu_exclusive sched domains build fix\n\nAs reported by Paul Mackerras \u003cpaulus@samba.org\u003e, the previous patch\n\"cpu_exclusive sched domains fix\" broke the ppc64 build with\nCONFIC_CPUSET, yielding error messages:\n\nkernel/cpuset.c: In function \u0027update_cpu_domains\u0027:\nkernel/cpuset.c:648: error: invalid lvalue in unary \u0027\u0026\u0027\nkernel/cpuset.c:648: error: invalid lvalue in unary \u0027\u0026\u0027\n\nOn some arch\u0027s, the node_to_cpumask() is a function, returning\na cpumask_t.  But the for_each_cpu_mask() requires an lvalue mask.\n\nThe following patch fixes this build failure by making a copy\nof the cpumask_t on the stack.\n\nSigned-off-by: Paul Jackson \u003cpj@sgi.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    }
  ],
  "next": "d10689b68aff7b48e3de1a3f7fcd6567bd2905af"
}
