)]}'
{
  "log": [
    {
      "commit": "fa757281a08799fd6c0f7ec6f111d1cd66afc97b",
      "tree": "664f8728e55e3d37ca8eb3c6c9087d2da9860463",
      "parents": [
        "2f6c76aa5f0fb53059730c628ac59ef62a14ed7a"
      ],
      "author": {
        "name": "Randy Dunlap",
        "email": "rdunlap@xenotime.net",
        "time": "Sat Jan 21 11:03:13 2012 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Jan 23 08:44:54 2012 -0800"
      },
      "message": "kernel-doc: fix kernel-doc warnings in sched\n\nFix new kernel-doc notation warnings:\n\nWarning(include/linux/sched.h:2094): No description found for parameter \u0027p\u0027\nWarning(include/linux/sched.h:2094): Excess function parameter \u0027tsk\u0027 description in \u0027is_idle_task\u0027\nWarning(kernel/sched/cpupri.c:139): No description found for parameter \u0027newpri\u0027\nWarning(kernel/sched/cpupri.c:139): Excess function parameter \u0027pri\u0027 description in \u0027cpupri_set\u0027\nWarning(kernel/sched/cpupri.c:208): Excess function parameter \u0027bootmem\u0027 description in \u0027cpupri_init\u0027\n\nSigned-off-by: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nCc:\tIngo Molnar \u003cmingo@elte.hu\u003e\nCc:\tPeter Zijlstra \u003cpeterz@infradead.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "391e43da797a96aeb65410281891f6d0b0e9611c",
      "tree": "0ce6784525a5a8f75b377170cf1a7d60abccea29",
      "parents": [
        "029632fbb7b7c9d85063cc9eb470de6c54873df3"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Tue Nov 15 17:14:39 2011 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Nov 17 12:20:22 2011 +0100"
      },
      "message": "sched: Move all scheduler bits into kernel/sched/\n\nThere\u0027s too many sched*.[ch] files in kernel/, give them their own\ndirectory.\n\n(No code changed, other than Makefile glue added.)\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "5710f15b52664ae0bfa60a66d75464769d297b2b",
      "tree": "3e5ab59e1dafbefe4f4ef6e809866be8ffd2d2e0",
      "parents": [
        "d473750b4073f16f23f46f30dc1bd3de45c35754"
      ],
      "author": {
        "name": "Yong Zhang",
        "email": "yong.zhang0@gmail.com",
        "time": "Sat Aug 06 08:10:04 2011 +0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sun Aug 14 12:01:11 2011 +0200"
      },
      "message": "sched/cpupri: Remove cpupri-\u003epri_active\n\nSince [sched/cpupri: Remove the vec-\u003elock], member pri_active\nof struct cpupri is not needed any more, just remove it. Also\nclean stuff related to it.\n\nSigned-off-by: Yong Zhang \u003cyong.zhang0@gmail.com\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nLink: http://lkml.kernel.org/r/20110806001004.GA2207@zhy\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "d473750b4073f16f23f46f30dc1bd3de45c35754",
      "tree": "cefe6613df0f129836be5e218a768d02c1c7b814",
      "parents": [
        "c92211d9b772792a9dea530c042efb4ab5562f50"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Fri Aug 05 08:27:49 2011 -0400"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sun Aug 14 12:01:07 2011 +0200"
      },
      "message": "sched/cpupri: Fix memory barriers for vec updates to always be in order\n\n[ This patch actually compiles. Thanks to Mike Galbraith for pointing\nthat out. I compiled and booted this patch with no issues. ]\n\nRe-examining the cpupri patch, I see there\u0027s a possible race because the\nupdate of the two priorities vec-\u003ecounts are not protected by a memory\nbarrier.\n\nWhen a RT runqueue is overloaded and wants to push an RT task to another\nrunqueue, it scans the RT priority vectors in a loop from lowest\npriority to highest.\n\nWhen we queue or dequeue an RT task that changes a runqueue\u0027s highest\npriority task, we update the vectors to show that a runqueue is rated at\na different priority. To do this, we first set the new priority mask,\nand increment the vec-\u003ecount, and then set the old priority mask by\ndecrementing the vec-\u003ecount.\n\nIf we are lowering the runqueue\u0027s RT priority rating, it will trigger a\nRT pull, and we do not care if we miss pushing to this runqueue or not.\n\nBut if we raise the priority, but the priority is still lower than an RT\ntask that is looking to be pushed, we must make sure that this runqueue\nis still seen by the push algorithm (the loop).\n\nBecause the loop reads from lowest to highest, and the new priority is\nset before the old one is cleared, we will either see the new or old\npriority set and the vector will be checked.\n\nBut! Since there\u0027s no memory barrier between the updates of the two, the\nold count may be decremented first before the new count is incremented.\nThis means the loop may see the old count of zero and skip it, and also\nthe new count of zero before it was updated. A possible runqueue that\nthe RT task could move to could be missed.\n\nA conditional memory barrier is placed between the vec-\u003ecount updates\nand is only called when both updates are done.\n\nThe smp_wmb() has also been changed to smp_mb__before_atomic_inc/dec(),\nas they are not needed by archs that already synchronize\natomic_inc/dec().\n\nThe smp_rmb() has been moved to be called at every iteration of the loop\nso that the race between seeing the two updates is visible by each\niteration of the loop, as an arch is free to optimize the reading of\nmemory of the counters in the loop.\n\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Nick Piggin \u003cnpiggin@kernel.dk\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nLink: http://lkml.kernel.org/r/1312547269.18583.194.camel@gandalf.stny.rr.com\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "c92211d9b772792a9dea530c042efb4ab5562f50",
      "tree": "d4ef2f4aa2e2c0d991a4dbc74a14e305caf46cee",
      "parents": [
        "5181f4a46afd99e5e85c639b189e43e0a42b53df"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Tue Aug 02 16:36:12 2011 -0400"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sun Aug 14 12:01:03 2011 +0200"
      },
      "message": "sched/cpupri: Remove the vec-\u003elock\n\nsched/cpupri: Remove the vec-\u003elock\n\nThe cpupri vec-\u003elock has been showing up as a top contention\nlately. This is because of the RT push/pull logic takes an\nagressive approach for migrating RT tasks. The cpupri logic is\nin place to improve the performance of the push/pull when dealing\nwith large number CPU machines.\n\nThe problem though is a vec-\u003elock is required, where a vec is a\nglobal per RT priority structure. That is, if there are lots of\nRT tasks at the same priority, every time they are added or removed\nfrom the RT queue, this global vec-\u003elock is taken. Now that more\nkernel threads are becoming RT (RCU boost and threaded interrupts)\nthis is becoming much more of an issue.\n\nThere are two variables that are being synced by the vec-\u003elock.\nThe cpupri bitmask, and the vec-\u003ecounter. The cpupri bitmask\nis one bit per priority. If a RT priority vec has a process queued,\nthen the vec-\u003ecount is \u003e 0 and the cpupri bitmask is set for that\nRT priority.\n\nIf the cpupri bitmask gets out of sync with the vec-\u003ecounter, we could\nend up pushing a low proirity RT task to a high priority queue.\nThat RT task that could have run immediately could be queued on a\nrun queue with a higher priority task indefinitely.\n\nThe solution is not to use the cpupri bitmask and just look at the\nvec-\u003ecount directly when doing a pull. The cpupri bitmask is just\na fast way to scan the RT priorities when a pull is made. Instead\nof using the bitmask, and just examine all RT priorities, and\nlook at the vec-\u003ecounts, we could eliminate the vec-\u003elock. The\nscan of RT tasks is to find a run queue that we can push an RT task\nto, and we do not push to a high priority queue, thus the scan only\nneeds to go from 1 to RT task-\u003eprio, and not all 100 RT priorities.\n\nThe push algorithm, which does the scan of RT priorities (and\nscan of the bitmask) only happens when we have an overloaded RT run\nqueue (more than one RT task queued). The grabbing of the vec-\u003elock\nhappens every time any RT task is queued or dequeued on the run\nqueue for that priority. The slowing down of the scan by not using\na bitmask is negligible by the speed up of removing the vec-\u003elock\ncontention, and replacing it with an atomic counter and memory barrier.\n\nTo prove this, I wrote a patch that times both the loop and the code\nthat grabs the vec-\u003elocks. I passed the patches to various people\n(and companies) to test and show the results. I let everyone choose\ntheir own load to test, giving different loads on the system,\nfor various different setups.\n\nHere\u0027s some of the results: (snipping to a few CPUs to not make\nthis change log huge, but the results were consistent across\nthe entire system).\n\nSystem 1 (24 CPUs)\n\nBefore patch:\nCPU:    Name    Count   Max     Min     Average Total\n----    ----    -----   ---     ---     ------- -----\n[...]\ncpu 20: loop    3057    1.766   0.061   0.642   1963.170\n        vec     6782949 90.469  0.089   0.414   2811760.503\ncpu 21: loop    2617    1.723   0.062   0.641   1679.074\n        vec     6782810 90.499  0.089   0.291   1978499.900\ncpu 22: loop    2212    1.863   0.063   0.699   1547.160\n        vec     6767244 85.685  0.089   0.435   2949676.898\ncpu 23: loop    2320    2.013   0.062   0.594   1380.265\n        vec     6781694 87.923  0.088   0.431   2928538.224\n\nAfter patch:\ncpu 20: loop    2078    1.579   0.061   0.533   1108.006\n        vec     6164555 5.704   0.060   0.143   885185.809\ncpu 21: loop    2268    1.712   0.065   0.575   1305.248\n        vec     6153376 5.558   0.060   0.187   1154960.469\ncpu 22: loop    1542    1.639   0.095   0.533   823.249\n        vec     6156510 5.720   0.060   0.190   1172727.232\ncpu 23: loop    1650    1.733   0.068   0.545   900.781\n        vec     6170784 5.533   0.060   0.167   1034287.953\n\nAll times are in microseconds. The \u0027loop\u0027 is the amount of time spent\ndoing the loop across the priorities (before patch uses bitmask).\nthe \u0027vec\u0027 is the amount of time in the code that requires grabbing\nthe vec-\u003elock. The second patch just does not have the vec lock, but\nencompasses the same code.\n\nAmazingly the loop code even went down on average. The vec code went\nfrom .5 down to .18, that\u0027s more than half the time spent!\n\nNote, more than one test was run, but they all had the same results.\n\nSystem 2 (64 CPUs)\n\nBefore patch:\nCPU:    Name    Count   Max     Min     Average Total\n----    ----    -----   ---     ---     ------- -----\ncpu 60: loop    0       0       0       0       0\n        vec     5410840 277.954 0.084   0.782   4232895.727\ncpu 61: loop    0       0       0       0       0\n        vec     4915648 188.399 0.084   0.570   2803220.301\ncpu 62: loop    0       0       0       0       0\n        vec     5356076 276.417 0.085   0.786   4214544.548\ncpu 63: loop    0       0       0       0       0\n        vec     4891837 170.531 0.085   0.799   3910948.833\n\nAfter patch:\ncpu 60: loop    0       0       0       0       0\n        vec     5365118 5.080   0.021   0.063   340490.267\ncpu 61: loop    0       0       0       0       0\n        vec     4898590 1.757   0.019   0.071   347903.615\ncpu 62: loop    0       0       0       0       0\n        vec     5737130 3.067   0.021   0.119   687108.734\ncpu 63: loop    0       0       0       0       0\n        vec     4903228 1.822   0.021   0.071   348506.477\n\nThe test run during the measurement did not have any (very few,\nfrom other CPUs) RT tasks pushing. But this shows that it helped\nout tremendously with the contention, as the contention happens\nbecause the vec-\u003elock is taken only on queuing at an RT priority,\nand different CPUs that queue tasks at the same priority will\nhave contention.\n\nI tested on my own 4 CPU machine with the following results:\n\nBefore patch:\nCPU:    Name    Count   Max     Min     Average Total\n----    ----    -----   ---     ---     ------- -----\ncpu 0:  loop    2377    1.489   0.158   0.588   1398.395\n        vec     4484    770.146 2.301   4.396   19711.755\ncpu 1:  loop    2169    1.962   0.160   0.576   1250.110\n        vec     4425    152.769 2.297   4.030   17834.228\ncpu 2:  loop    2324    1.749   0.155   0.559   1299.799\n        vec     4368    779.632 2.325   4.665   20379.268\ncpu 3:  loop    2325    1.629   0.157   0.561   1306.113\n        vec     4650    408.782 2.394   4.348   20222.577\n\nAfter patch:\nCPU:    Name    Count   Max     Min     Average Total\n----    ----    -----   ---     ---     ------- -----\ncpu 0:  loop    2121    1.616   0.113   0.636   1349.189\n        vec     4303    1.151   0.225   0.421   1811.966\ncpu 1:  loop    2130    1.638   0.178   0.644   1372.927\n        vec     4627    1.379   0.235   0.428   1983.648\ncpu 2:  loop    2056    1.464   0.165   0.637   1310.141\n        vec     4471    1.311   0.217   0.433   1937.927\ncpu 3:  loop    2154    1.481   0.162   0.601   1295.083\n        vec     4236    1.253   0.230   0.425   1803.008\n\nThis was running my migrate.c code that can be found at:\nhttp://lwn.net/Articles/425763/\n\nThe migrate code does stress the RT tasks a bit. This shows that\nthe loop did increase a little after the patch, but not by much.\nThe vec code dropped dramatically. From 4.3us down to .42us.\nThat\u0027s a 10x improvement!\n\nTested-by: Mike Galbraith \u003cmgalbraith@suse.de\u003e\nTested-by: Luis Claudio R. Gonçalves \u003clgoncalv@redhat.com\u003e\nTested-by: Matthew Hank Sabins\u003cmsabins@linux.vnet.ibm.com\u003e\nSigned-off-by: Steven Rostedt \u003crostedt@goodmis.org\u003e\nReviewed-by: Gregory Haskins \u003cgregory.haskins@gmail.com\u003e\nAcked-by: Hillf Danton \u003cdhillf@gmail.com\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Chris Mason \u003cchris.mason@oracle.com\u003e\nLink: http://lkml.kernel.org/r/1312317372.18583.101.camel@gandalf.stny.rr.com\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "68c38fc3cb4e5a60f502ee9c45f3dfe70e5165ad",
      "tree": "32293b2fd969c57032407294863c1f2ee6bf5996",
      "parents": [
        "bbc8cb5baead9607309583b20873ab0cc8d89eaf"
      ],
      "author": {
        "name": "Pekka Enberg",
        "email": "penberg@cs.helsinki.fi",
        "time": "Thu Jul 15 23:18:22 2010 +0300"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sat Jul 17 12:06:22 2010 +0200"
      },
      "message": "sched: No need for bootmem special cases\n\nAs of commit dcce284 (\"mm: Extend gfp masking to the page\nallocator\") and commit 7e85ee0 (\"slab,slub: don\u0027t enable\ninterrupts during early boot\"), the slab allocator makes\nsure we don\u0027t attempt to sleep during boot.\n\nTherefore, remove bootmem special cases from the scheduler\nand use plain GFP_KERNEL instead.\n\nSigned-off-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nLKML-Reference: \u003c1279225102-2572-1-git-send-email-penberg@cs.helsinki.fi\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "5a0e3ad6af8660be21ca98a971cd00f331318c05",
      "tree": "5bfb7be11a03176a87296a43ac6647975c00a1d1",
      "parents": [
        "ed391f4ebf8f701d3566423ce8f17e614cde9806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:04:11 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n\npercpu.h is included by sched.h and module.h and thus ends up being\nincluded when building most .c files.  percpu.h includes slab.h which\nin turn includes gfp.h making everything defined by the two files\nuniversally available and complicating inclusion dependencies.\n\npercpu.h -\u003e slab.h dependency is about to be removed.  Prepare for\nthis change by updating users of gfp and slab facilities include those\nheaders directly instead of assuming availability.  As this conversion\nneeds to touch large number of source files, the following script is\nused as the basis of conversion.\n\n  http://userweb.kernel.org/~tj/misc/slabh-sweep.py\n\nThe script does the followings.\n\n* Scan files for gfp and slab usages and update includes such that\n  only the necessary includes are there.  ie. if only gfp is used,\n  gfp.h, if slab is used, slab.h.\n\n* When the script inserts a new include, it looks at the include\n  blocks and try to put the new include such that its order conforms\n  to its surrounding.  It\u0027s put in the include block which contains\n  core kernel includes, in the same order that the rest are ordered -\n  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there\n  doesn\u0027t seem to be any matching order.\n\n* If the script can\u0027t find a place to put a new include (mostly\n  because the file doesn\u0027t have fitting include block), it prints out\n  an error message indicating which .h file needs to be added to the\n  file.\n\nThe conversion was done in the following steps.\n\n1. The initial automatic conversion of all .c files updated slightly\n   over 4000 files, deleting around 700 includes and adding ~480 gfp.h\n   and ~3000 slab.h inclusions.  The script emitted errors for ~400\n   files.\n\n2. Each error was manually checked.  Some didn\u0027t need the inclusion,\n   some needed manual addition while adding it to implementation .h or\n   embedding .c file was more appropriate for others.  This step added\n   inclusions to around 150 files.\n\n3. The script was run again and the output was compared to the edits\n   from #2 to make sure no file was left behind.\n\n4. Several build tests were done and a couple of problems were fixed.\n   e.g. lib/decompress_*.c used malloc/free() wrappers around slab\n   APIs requiring slab.h to be added manually.\n\n5. The script was run on all .h files but without automatically\n   editing them as sprinkling gfp.h and slab.h inclusions around .h\n   files could easily lead to inclusion dependency hell.  Most gfp.h\n   inclusion directives were ignored as stuff from gfp.h was usually\n   wildly available and often used in preprocessor macros.  Each\n   slab.h inclusion directive was examined and added manually as\n   necessary.\n\n6. percpu.h was updated not to include slab.h.\n\n7. Build test were done on the following configurations and failures\n   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my\n   distributed build env didn\u0027t work with gcov compiles) and a few\n   more options had to be turned off depending on archs to make things\n   build (like ipr on powerpc/64 which failed due to missing writeq).\n\n   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.\n   * powerpc and powerpc64 SMP allmodconfig\n   * sparc and sparc64 SMP allmodconfig\n   * ia64 SMP allmodconfig\n   * s390 SMP allmodconfig\n   * alpha SMP allmodconfig\n   * um on x86_64 SMP allmodconfig\n\n8. percpu.h modifications were reverted so that it could be applied as\n   a separate patch and serve as bisection point.\n\nGiven the fact that I had only a couple of failures from tests on step\n6, I\u0027m fairly confident about the coverage of this conversion patch.\nIf there is a breakage, it\u0027s likely to be something in one of the arch\nheaders which should be easily discoverable easily on most builds of\nthe specific arch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGuess-its-ok-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "318ae2edc3b29216abd8a2510f3f80b764f06858",
      "tree": "ce595adde342f57f379d277b25e4dd206988a052",
      "parents": [
        "25cf84cf377c0aae5dbcf937ea89bc7893db5176",
        "3e58974027b04e84f68b964ef368a6cd758e2f84"
      ],
      "author": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Mar 08 16:55:37 2010 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Mon Mar 08 16:55:37 2010 +0100"
      },
      "message": "Merge branch \u0027for-next\u0027 into for-linus\n\nConflicts:\n\tDocumentation/filesystems/proc.txt\n\tarch/arm/mach-u300/include/mach/debug-macro.S\n\tdrivers/net/qlge/qlge_ethtool.c\n\tdrivers/net/qlge/qlge_main.c\n\tdrivers/net/typhoon.c\n"
    },
    {
      "commit": "984b3f5746ed2cde3d184651dabf26980f2b66e5",
      "tree": "87dc2162b4778b0075874d9592384530022e15a4",
      "parents": [
        "e3cb91ce1ac1d93a7cc6f81bb5247f7602b572bb"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "akinobu.mita@gmail.com",
        "time": "Fri Mar 05 13:41:37 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Mar 06 11:26:23 2010 -0800"
      },
      "message": "bitops: rename for_each_bit() to for_each_set_bit()\n\nRename for_each_bit to for_each_set_bit in the kernel source tree.  To\npermit for_each_clear_bit(), should that ever be added.\n\nThe patch includes a macro to map the old for_each_bit() onto the new\nfor_each_set_bit().  This is a (very) temporary thing to ease the migration.\n\n[akpm@linux-foundation.org: add temporary for_each_bit()]\nSuggested-by: Alexey Dobriyan \u003cadobriyan@gmail.com\u003e\nSuggested-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: Russell King \u003crmk@arm.linux.org.uk\u003e\nCc: David Woodhouse \u003cdwmw2@infradead.org\u003e\nCc: Artem Bityutskiy \u003cdedekind@infradead.org\u003e\nCc: Stephen Rothwell \u003csfr@canb.auug.org.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2a61aa401638529cd4231f6106980d307fba98fa",
      "tree": "a3d7565570c5996d0b3ae5fdf0126e065e750431",
      "parents": [
        "c41b20e721ea4f6f20f66a66e7f0c3c97a2ca9c2"
      ],
      "author": {
        "name": "Adam Buchbinder",
        "email": "adam.buchbinder@gmail.com",
        "time": "Fri Dec 11 16:35:40 2009 -0500"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Thu Feb 04 11:55:45 2010 +0100"
      },
      "message": "Fix misspellings of \"invocation\" in comments.\n\nSome comments misspell \"invocation\"; this fixes them. No code\nchanges.\n\nSigned-off-by: Adam Buchbinder \u003cadam.buchbinder@gmail.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "90fdbdb48442a03c72cae5463e6edb64cb3a3a7d",
      "tree": "7264bf97f0f597879734c7dae46f4e8f7fe04745",
      "parents": [
        "60db48cacb9b253d5607a5ff206112a59cd09e34"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "akinobu.mita@gmail.com",
        "time": "Sun Jan 31 20:53:24 2010 +0900"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Feb 02 06:58:27 2010 +0100"
      },
      "message": "sched: Use for_each_bit\n\nNo change in functionality.\n\nSigned-off-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nLKML-Reference: \u003c1264938810-4173-1-git-send-email-akinobu.mita@gmail.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "fe841226bd954fba4fd79f037a876053fe9c3217",
      "tree": "0819ff8a78b9eeed61a1dc26b5aa900f48d0c2e3",
      "parents": [
        "0986b11b12ad2baed338385f79fd0dec58a23fc6"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Tue Nov 17 17:59:15 2009 +0100"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon Dec 14 23:55:33 2009 +0100"
      },
      "message": "sched: Convert cpupri lock to raw_spinlock\n\nConvert locks which cannot be sleeping locks in preempt-rt to\nraw_spinlocks.\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "c3a2ae3d93c0f10d29c071f599764d00b8de00cb",
      "tree": "e831ec79696bad3039fc9700bbb412ad38945985",
      "parents": [
        "da19ab510343c6496fe8b8f890091296032025c9"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "srostedt@redhat.com",
        "time": "Wed Jul 29 00:21:23 2009 -0400"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sun Aug 02 14:26:09 2009 +0200"
      },
      "message": "sched: Add new prio to cpupri before removing old prio\n\nWe need to add the new prio to the cpupri accounting before\nremoving the old prio. This is because removing the old prio\nfirst will open a race window where the cpu will be removed\nfrom pri_active. In this case the cpu will not be visible for\nRT push and pulls. This could cause a RT task to not migrate\nappropriately, and create a very large latency.\n\nThis bug was found with the use of ftrace sched events and\ntrace_printk.\n\nSigned-off-by: Steven Rostedt \u003csrostedt@redhat.com\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nLKML-Reference: \u003c20090729042526.438281019@goodmis.org\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "07903af152b0597d94e9b0030746b63c4664e787",
      "tree": "245f1e9d7a7021f479b0d67e922c6783e59c5d50",
      "parents": [
        "e414314cce7539788dd5d2c35decad11782dd858"
      ],
      "author": {
        "name": "Gregory Haskins",
        "email": "ghaskins@novell.com",
        "time": "Thu Jul 30 10:57:28 2009 -0400"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Sun Aug 02 14:23:29 2009 +0200"
      },
      "message": "sched: Fix race in cpupri introduced by cpumask_var changes\n\nBackground:\n\nSeveral race conditions in the scheduler have cropped up\nrecently, which Steven and I have tracked down using ftrace.\nThe most recent one turns out to be a race in how the scheduler\ndetermines a suitable migration target for RT tasks, introduced\nrecently with commit:\n\n    commit 68e74568fbe5854952355e942acca51f138096d9\n    Date:   Tue Nov 25 02:35:13 2008 +1030\n\n        sched: convert struct cpupri_vec cpumask_var_t.\n\nThe original design of cpupri allowed lockless readers to\nquickly determine a best-estimate target.  Races between the\npri_active bitmap and the vec-\u003emask were handled in the\noriginal code because we would detect and return \"0\" when this\noccured.  The design was predicated on the *effective*\natomicity (*) of caching the result of cpus_and() between the\ncpus_allowed and the vec-\u003emask.\n\nCommit 68e74568 changed the behavior such that vec-\u003emask is\naccessed multiple times.  This introduces a subtle race, the\nresult of which means we can have a result that returns \"1\",\nbut with an empty bitmap.\n\n*) yes, we know cpus_and() is not a locked operator across the\n   entire composite array, but it is implicitly atomic on a\n   per-word basis which is all the design required to work.\n\nImplementation:\n\nRather than forgoing the lockless design, or reverting to a\nstack-based cpumask_t, we simply check for when the race has\nbeen encountered and continue processing in the event that the\nrace is hit.  This renders the removal race as if the priority\nbit had been atomically cleared as well, and allows the\nalgorithm to execute correctly.\n\nSigned-off-by: Gregory Haskins \u003cghaskins@novell.com\u003e\nCC: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCC: Steven Rostedt \u003csrostedt@redhat.com\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nLKML-Reference: \u003c20090730145728.25226.92769.stgit@dev.haskins.net\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "fd5e1b5dbaa8b4aacc0e251d74182eda37062194",
      "tree": "cba4e780784649fe9c9535b8d5ac1617f52e1a15",
      "parents": [
        "84599f8a59e77699f18f06948cea171a349a3f0f"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Mon Jun 15 13:34:19 2009 +0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Jun 17 16:08:04 2009 +0200"
      },
      "message": "sched: Remove unneeded __ref tag\n\nThose two functions no longer call alloc_bootmmem_cpumask_var(),\nso no need to tag them with __init_refok.\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nAcked-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\nLKML-Reference: \u003c4A35DD5B.9050106@cn.fujitsu.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "0fb530291621c8b8a1b16abeeab05d9262489f71",
      "tree": "4b5fbb1781b279caf9cd20fb1ef5d04028548f43",
      "parents": [
        "4bdddf8ff9bbb8aa7b4d7847586202bd25842c90"
      ],
      "author": {
        "name": "Pekka Enberg",
        "email": "penberg@cs.helsinki.fi",
        "time": "Thu Jun 11 08:41:22 2009 +0300"
      },
      "committer": {
        "name": "Pekka Enberg",
        "email": "penberg@cs.helsinki.fi",
        "time": "Thu Jun 11 19:27:12 2009 +0300"
      },
      "message": "sched: use slab in cpupri_init()\n\nLets not use the bootmem allocator in cpupri_init() as slab is already up when\nit is run.\n\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Yinghai Lu \u003cyinghai@kernel.org\u003e\nSigned-off-by: Pekka Enberg \u003cpenberg@cs.helsinki.fi\u003e\n"
    },
    {
      "commit": "eaa958402ea40851097d051f52ba1bb7a885efe9",
      "tree": "9187f59ff0ee6ac138b5c81a2212bc10f46d04a5",
      "parents": [
        "0281b5dc0350cbf6dd21ed558a33cccce77abc02"
      ],
      "author": {
        "name": "Yinghai Lu",
        "email": "yinghai@kernel.org",
        "time": "Sat Jun 06 14:51:36 2009 -0700"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Tue Jun 09 22:30:27 2009 +0930"
      },
      "message": "cpumask: alloc zeroed cpumask for static cpumask_var_ts\n\nThese are defined as static cpumask_var_t so if MAXSMP is not used,\nthey are cleared already.  Avoid surprises when MAXSMP is enabled.\n\nSigned-off-by: Yinghai Lu \u003cyinghai.lu@kernel.org\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "13b8bd0a5713bdf05659019badd7c0407984ece1",
      "tree": "378950741dd647b672a2b3e61988725b52557f2d",
      "parents": [
        "a18b83b7ef3c98cd8b4bb885e4a649a8f30fb7b0"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Wed Mar 25 15:01:22 2009 +1030"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Apr 01 13:24:51 2009 +0200"
      },
      "message": "sched_rt: don\u0027t allocate cpumask in fastpath\n\nImpact: cleanup\n\nAs pointed out by Steven Rostedt.  Since the arg in question is\nunused, we simply change cpupri_find() to accept NULL.\n\nReported-by: Steven Rostedt \u003csrostedt@redhat.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nLKML-Reference: \u003c200903251501.22664.rusty@rustcorp.com.au\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "db2f59c8c9b315f2b88b1dac159b988c6009034d",
      "tree": "93e9d5584356e3f34a297ca45f1d6c17ebac2500",
      "parents": [
        "0c910d289567163dbe40ccc174b36afd1c7723bd"
      ],
      "author": {
        "name": "Li Zefan",
        "email": "lizf@cn.fujitsu.com",
        "time": "Tue Jan 06 17:40:36 2009 +0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Jan 06 11:07:15 2009 +0100"
      },
      "message": "sched: fix section mismatch\n\ninit_rootdomain() calls alloc_bootmem_cpumask_var() at system boot,\nso does cpupri_init().\n\nSigned-off-by: Li Zefan \u003clizf@cn.fujitsu.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "68e74568fbe5854952355e942acca51f138096d9",
      "tree": "6263627b3b3c7e249f685ba0fe4d76002e882cd0",
      "parents": [
        "4212823fb459eacc8098dd420bb68ebb9917989d"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Tue Nov 25 02:35:13 2008 +1030"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Nov 24 17:52:22 2008 +0100"
      },
      "message": "sched: convert struct cpupri_vec cpumask_var_t.\n\nImpact: stack usage reduction, (future) size reduction for large NR_CPUS.\n\nDynamically allocating cpumasks (when CONFIG_CPUMASK_OFFSTACK) saves\nspace for small nr_cpu_ids but big CONFIG_NR_CPUS.\n\nThe fact cpupro_init is called both before and after the slab is\navailable makes for an ugly parameter unfortunately.\n\nWe also use cpumask_any_and to get rid of a temporary in cpupri_find.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "6e0534f278199f1e3dd1049b9bc19a7a5b87ada1",
      "tree": "25f4da14ec32927742db9f599ac779b4e83d1763",
      "parents": [
        "f333fdc9098b71e2687e4e9b6349fcb352960d66"
      ],
      "author": {
        "name": "Gregory Haskins",
        "email": "ghaskins@novell.com",
        "time": "Mon May 12 21:21:01 2008 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Jun 06 15:19:28 2008 +0200"
      },
      "message": "sched: use a 2-d bitmap for searching lowest-pri CPU\n\nThe current code use a linear algorithm which causes scaling issues\non larger SMP machines.  This patch replaces that algorithm with a\n2-dimensional bitmap to reduce latencies in the wake-up path.\n\nSigned-off-by: Gregory Haskins \u003cghaskins@novell.com\u003e\nAcked-by: Steven Rostedt \u003csrostedt@redhat.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    }
  ]
}
