)]}'
{
  "log": [
    {
      "commit": "f37f435f33717dcf15fd4bb422da739da7fc2052",
      "tree": "aca7b5707758ef33158116acbbdd41b8ab6c2fb4",
      "parents": [
        "9cd75e13de2dcf32ecc21c7f277cff3c0ced059e"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon May 07 17:59:48 2012 +0000"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Tue May 08 12:35:06 2012 +0200"
      },
      "message": "smp: Implement kick_all_cpus_sync()\n\nWill replace the misnomed cpu_idle_wait() function which is copied a\ngazillion times all over arch/*\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nLink: http://lkml.kernel.org/r/20120507175652.049316594@linutronix.de\n"
    },
    {
      "commit": "3bb5d2ee396aabaa4e318f17e94d13e2ee0e5a88",
      "tree": "723fd419cbbc6874b3303d11a439303f3c4ff46c",
      "parents": [
        "9a1347237492f273f84ec39962b5806c70b2806a"
      ],
      "author": {
        "name": "Suresh Siddha",
        "email": "suresh.b.siddha@intel.com",
        "time": "Fri Apr 20 17:08:50 2012 -0700"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Thu May 03 19:32:34 2012 +0200"
      },
      "message": "smp, idle: Allocate idle thread for each possible cpu during boot\n\npercpu areas are already allocated during boot for each possible cpu.\npercpu idle threads can be considered as an extension of the percpu areas,\nand allocate them for each possible cpu during boot.\n\nThis will eliminate the need for workqueue based idle thread allocation.\nIn future we can move the idle thread area into the percpu area too.\n\n[ tglx: Moved the loop into smpboot.c and added an error check when\n  the init code failed to allocate an idle thread for a cpu which\n  should be onlined ]\n\nSigned-off-by: Suresh Siddha \u003csuresh.b.siddha@intel.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: Srivatsa S. Bhat \u003csrivatsa.bhat@linux.vnet.ibm.com\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: venki@google.com\nLink: http://lkml.kernel.org/r/1334966930.28674.245.camel@sbsiddha-desk.sc.intel.com\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "b3a7e98e024ffa9f7e4554dd720c508015c4a831",
      "tree": "50c09e1a47418ba4bb55b11f756bf4d99cf76123",
      "parents": [
        "3fc498f165304dc913f1d13b5ac9ab4c758ee7ab"
      ],
      "author": {
        "name": "Gilad Ben-Yossef",
        "email": "gilad@benyossef.com",
        "time": "Wed Mar 28 14:42:43 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 28 17:14:35 2012 -0700"
      },
      "message": "smp: add func to IPI cpus based on parameter func\n\nAdd the on_each_cpu_cond() function that wraps on_each_cpu_mask() and\ncalculates the cpumask of cpus to IPI by calling a function supplied as a\nparameter in order to determine whether to IPI each specific cpu.\n\nThe function works around allocation failure of cpumask variable in\nCONFIG_CPUMASK_OFFSTACK\u003dy by itereating over cpus sending an IPI a time\nvia smp_call_function_single().\n\nThe function is useful since it allows to seperate the specific code that\ndecided in each case whether to IPI a specific cpu for a specific request\nfrom the common boilerplate code of handling creating the mask, handling\nfailures etc.\n\n[akpm@linux-foundation.org: s/gfpflags/gfp_flags/]\n[akpm@linux-foundation.org: avoid double-evaluation of `info\u0027 (per Michal), parenthesise evaluation of `cond_func\u0027]\n[akpm@linux-foundation.org: s/CPU/CPUs, use all 80 cols in comment]\nSigned-off-by: Gilad Ben-Yossef \u003cgilad@benyossef.com\u003e\nCc: Chris Metcalf \u003ccmetcalf@tilera.com\u003e\nCc: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Russell King \u003clinux@arm.linux.org.uk\u003e\nCc: Pekka Enberg \u003cpenberg@kernel.org\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nCc: Sasha Levin \u003clevinsasha928@gmail.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Alexander Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Avi Kivity \u003cavi@redhat.com\u003e\nAcked-by: Michal Nazarewicz \u003cmina86@mina86.org\u003e\nCc: Kosaki Motohiro \u003ckosaki.motohiro@gmail.com\u003e\nCc: Milton Miller \u003cmiltonm@bga.com\u003e\nReviewed-by: \"Srivatsa S. Bhat\" \u003csrivatsa.bhat@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "3fc498f165304dc913f1d13b5ac9ab4c758ee7ab",
      "tree": "c8c23d2255151d593383e3e3e62900073c6afd78",
      "parents": [
        "d15cab975459fb6092eeba1be72c13621337784f"
      ],
      "author": {
        "name": "Gilad Ben-Yossef",
        "email": "gilad@benyossef.com",
        "time": "Wed Mar 28 14:42:43 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Mar 28 17:14:35 2012 -0700"
      },
      "message": "smp: introduce a generic on_each_cpu_mask() function\n\nWe have lots of infrastructure in place to partition multi-core systems\nsuch that we have a group of CPUs that are dedicated to specific task:\ncgroups, scheduler and interrupt affinity, and cpuisol\u003d boot parameter.\nStill, kernel code will at times interrupt all CPUs in the system via IPIs\nfor various needs.  These IPIs are useful and cannot be avoided\naltogether, but in certain cases it is possible to interrupt only specific\nCPUs that have useful work to do and not the entire system.\n\nThis patch set, inspired by discussions with Peter Zijlstra and Frederic\nWeisbecker when testing the nohz task patch set, is a first stab at trying\nto explore doing this by locating the places where such global IPI calls\nare being made and turning the global IPI into an IPI for a specific group\nof CPUs.  The purpose of the patch set is to get feedback if this is the\nright way to go for dealing with this issue and indeed, if the issue is\neven worth dealing with at all.  Based on the feedback from this patch set\nI plan to offer further patches that address similar issue in other code\npaths.\n\nThis patch creates an on_each_cpu_mask() and on_each_cpu_cond()\ninfrastructure API (the former derived from existing arch specific\nversions in Tile and Arm) and uses them to turn several global IPI\ninvocation to per CPU group invocations.\n\nCore kernel:\n\non_each_cpu_mask() calls a function on processors specified by cpumask,\nwhich may or may not include the local processor.\n\nYou must not call this function with disabled interrupts or from a\nhardware interrupt handler or from a bottom half handler.\n\narch/arm:\n\nNote that the generic version is a little different then the Arm one:\n\n1. It has the mask as first parameter\n2. It calls the function on the calling CPU with interrupts disabled,\n   but this should be OK since the function is called on the other CPUs\n   with interrupts disabled anyway.\n\narch/tile:\n\nThe API is the same as the tile private one, but the generic version\nalso calls the function on the with interrupts disabled in UP case\n\nThis is OK since the function is called on the other CPUs\nwith interrupts disabled.\n\nSigned-off-by: Gilad Ben-Yossef \u003cgilad@benyossef.com\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux.com\u003e\nAcked-by: Chris Metcalf \u003ccmetcalf@tilera.com\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Frederic Weisbecker \u003cfweisbec@gmail.com\u003e\nCc: Russell King \u003clinux@arm.linux.org.uk\u003e\nCc: Pekka Enberg \u003cpenberg@kernel.org\u003e\nCc: Matt Mackall \u003cmpm@selenic.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Andi Kleen \u003candi@firstfloor.org\u003e\nCc: Sasha Levin \u003clevinsasha928@gmail.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Alexander Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Avi Kivity \u003cavi@redhat.com\u003e\nAcked-by: Michal Nazarewicz \u003cmina86@mina86.org\u003e\nCc: Kosaki Motohiro \u003ckosaki.motohiro@gmail.com\u003e\nCc: Milton Miller \u003cmiltonm@bga.com\u003e\nCc: Russell King \u003clinux@arm.linux.org.uk\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9984de1a5a8a96275fcab818f7419af5a3c86e71",
      "tree": "1935d411752707a1621c5caf64f75dfe105beb3a",
      "parents": [
        "7c77509c542927ee2a3c8812fad84957e51bf67d"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon May 23 14:51:41 2011 -0400"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon Oct 31 09:20:12 2011 -0400"
      },
      "message": "kernel: Map most files to use export.h instead of module.h\n\nThe changed files were only including linux/module.h for the\nEXPORT_SYMBOL infrastructure, and nothing else.  Revector them\nonto the isolated export header for faster compile times.\n\nNothing to see here but a whole lot of instances of:\n\n  -#include \u003clinux/module.h\u003e\n  +#include \u003clinux/export.h\u003e\n\nThis commit is only changing the kernel dir; next targets\nwill probably be mm, fs, the arch dirs, etc.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "d8ad7d1123a960cc9f276bd499f9325c6f5e1bd1",
      "tree": "0260df1b5b5b1601f56229c7dde54594d2dfebcb",
      "parents": [
        "eb96c925152fc289311e5d7e956b919e9b60ab53"
      ],
      "author": {
        "name": "Takao Indoh",
        "email": "indou.takao@jp.fujitsu.com",
        "time": "Tue Mar 29 12:35:04 2011 -0400"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Jun 17 10:17:12 2011 +0200"
      },
      "message": "generic-ipi: Fix kexec boot crash by initializing call_single_queue before enabling interrupts\n\nThere is a problem that kdump(2nd kernel) sometimes hangs up due\nto a pending IPI from 1st kernel. Kernel panic occurs because IPI\ncomes before call_single_queue is initialized.\n\nTo fix the crash, rename init_call_single_data() to call_function_init()\nand call it in start_kernel() so that call_single_queue can be\ninitialized before enabling interrupts.\n\nThe details of the crash are:\n\n (1) 2nd kernel boots up\n\n (2) A pending IPI from 1st kernel comes when irqs are first enabled\n     in start_kernel().\n\n (3) Kernel tries to handle the interrupt, but call_single_queue\n     is not initialized yet at this point. As a result, in the\n     generic_smp_call_function_single_interrupt(), NULL pointer\n     dereference occurs when list_replace_init() tries to access\n     \u0026q-\u003elist.next.\n\nTherefore this patch changes the name of init_call_single_data()\nto call_function_init() and calls it before local_irq_enable()\nin start_kernel().\n\nSigned-off-by: Takao Indoh \u003cindou.takao@jp.fujitsu.com\u003e\nReviewed-by: WANG Cong \u003cxiyou.wangcong@gmail.com\u003e\nAcked-by: Neil Horman \u003cnhorman@tuxdriver.com\u003e\nAcked-by: Vivek Goyal \u003cvgoyal@redhat.com\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Milton Miller \u003cmiltonm@bga.com\u003e\nCc: Jens Axboe \u003caxboe@kernel.dk\u003e\nCc: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: kexec@lists.infradead.org\nLink: http://lkml.kernel.org/r/D6CBEE2F420741indou.takao@jp.fujitsu.com\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "34db18a054c600b6f81787165669dc572fe4de25",
      "tree": "6a8a0abf4f64ccad677ea2468c3e8465ac4e0c29",
      "parents": [
        "fa9ee9c4b9885dfdf8eccac19b8b4fc8a7c53288"
      ],
      "author": {
        "name": "Amerigo Wang",
        "email": "amwang@redhat.com",
        "time": "Tue Mar 22 16:34:06 2011 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Mar 22 17:44:11 2011 -0700"
      },
      "message": "smp: move smp setup functions to kernel/smp.c\n\nMove setup_nr_cpu_ids(), smp_init() and some other SMP boot parameter\nsetup functions from init/main.c to kenrel/smp.c, saves some #ifdef\nCONFIG_SMP.\n\nSigned-off-by: WANG Cong \u003camwang@redhat.com\u003e\nCc: Rakib Mullick \u003crakib.mullick@gmail.com\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Tejun Heo \u003ctj@kernel.org\u003e\nCc: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: 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": "c8def554d031664e984323f6a5d667f070717776",
      "tree": "2798e92bf75b474aec99ff1fce249dd943994613",
      "parents": [
        "723aae25d5cdb09962901d36d526b44d4be1051c"
      ],
      "author": {
        "name": "Milton Miller",
        "email": "miltonm@bga.com",
        "time": "Tue Mar 15 13:27:17 2011 -0600"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 17 16:58:11 2011 -0700"
      },
      "message": "smp_call_function_interrupt: use typedef and %pf\n\nUse the newly added smp_call_func_t in smp_call_function_interrupt for\nthe func variable, and make the comment above the WARN more assertive\nand explicit.  Also, func is a function pointer and does not need an\noffset, so use %pf not %pS.\n\nSigned-off-by: Milton Miller \u003cmiltonm@bga.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "723aae25d5cdb09962901d36d526b44d4be1051c",
      "tree": "0e2a83848e9b7884d69bfbbeba77283b531ba2ea",
      "parents": [
        "45a5791920ae643eafc02e2eedef1a58e341b736"
      ],
      "author": {
        "name": "Milton Miller",
        "email": "miltonm@bga.com",
        "time": "Tue Mar 15 13:27:17 2011 -0600"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 17 16:58:10 2011 -0700"
      },
      "message": "smp_call_function_many: handle concurrent clearing of mask\n\nMike Galbraith reported finding a lockup (\"perma-spin bug\") where the\ncpumask passed to smp_call_function_many was cleared by other cpu(s)\nwhile a cpu was preparing its call_data block, resulting in no cpu to\nclear the last ref and unlock the block.\n\nHaving cpus clear their bit asynchronously could be useful on a mask of\ncpus that might have a translation context, or cpus that need a push to\ncomplete an rcu window.\n\nInstead of adding a BUG_ON and requiring yet another cpumask copy, just\ndetect the race and handle it.\n\nNote: arch_send_call_function_ipi_mask must still handle an empty\ncpumask because the data block is globally visible before the that arch\ncallback is made.  And (obviously) there are no guarantees to which cpus\nare notified if the mask is changed during the call; only cpus that were\nonline and had their mask bit set during the whole call are guaranteed\nto be called.\n\nReported-by: Mike Galbraith \u003cefault@gmx.de\u003e\nReported-by: Jan Beulich \u003cJBeulich@novell.com\u003e\nAcked-by: Jan Beulich \u003cjbeulich@novell.com\u003e\nCc: stable@kernel.org\nSigned-off-by: Milton Miller \u003cmiltonm@bga.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "45a5791920ae643eafc02e2eedef1a58e341b736",
      "tree": "104873926bde0203fd0688b62fee2058f3dd271e",
      "parents": [
        "e6cd1e07a185d5f9b0aa75e020df02d3c1c44940"
      ],
      "author": {
        "name": "Milton Miller",
        "email": "miltonm@bga.com",
        "time": "Tue Mar 15 13:27:16 2011 -0600"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 17 16:58:10 2011 -0700"
      },
      "message": "call_function_many: add missing ordering\n\nPaul McKenney\u0027s review pointed out two problems with the barriers in the\n2.6.38 update to the smp call function many code.\n\nFirst, a barrier that would force the func and info members of data to\nbe visible before their consumption in the interrupt handler was\nmissing.  This can be solved by adding a smp_wmb between setting the\nfunc and info members and setting setting the cpumask; this will pair\nwith the existing and required smp_rmb ordering the cpumask read before\nthe read of refs.  This placement avoids the need a second smp_rmb in\nthe interrupt handler which would be executed on each of the N cpus\nexecuting the call request.  (I was thinking this barrier was present\nbut was not).\n\nSecond, the previous write to refs (establishing the zero that we the\ninterrupt handler was testing from all cpus) was performed by a third\nparty cpu.  This would invoke transitivity which, as a recient or\nconcurrent addition to memory-barriers.txt now explicitly states, would\nrequire a full smp_mb().\n\nHowever, we know the cpumask will only be set by one cpu (the data\nowner) and any preivous iteration of the mask would have cleared by the\nreading cpu.  By redundantly writing refs to 0 on the owning cpu before\nthe smp_wmb, the write to refs will follow the same path as the writes\nthat set the cpumask, which in turn allows us to keep the barrier in the\ninterrupt handler a smp_rmb instead of promoting it to a smp_mb (which\nwill be be executed by N cpus for each of the possible M elements on the\nlist).\n\nI moved and expanded the comment about our (ab)use of the rcu list\nprimitives for the concurrent walk earlier into this function.  I\nconsidered moving the first two paragraphs to the queue list head and\nlock, but felt it would have been too disconected from the code.\n\nCc: Paul McKinney \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: stable@kernel.org (2.6.32 and later)\nSigned-off-by: Milton Miller \u003cmiltonm@bga.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "e6cd1e07a185d5f9b0aa75e020df02d3c1c44940",
      "tree": "74f58672a37de933f8fa3456c0ec19a73b483b65",
      "parents": [
        "ef2b4b95a63a1d23958dcb99eb2c6898eddc87d0"
      ],
      "author": {
        "name": "Milton Miller",
        "email": "miltonm@bga.com",
        "time": "Tue Mar 15 13:27:16 2011 -0600"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Mar 17 16:58:10 2011 -0700"
      },
      "message": "call_function_many: fix list delete vs add race\n\nPeter pointed out there was nothing preventing the list_del_rcu in\nsmp_call_function_interrupt from running before the list_add_rcu in\nsmp_call_function_many.\n\nFix this by not setting refs until we have gotten the lock for the list.\nTake advantage of the wmb in list_add_rcu to save an explicit additional\none.\n\nI tried to force this race with a udelay before the lock \u0026 list_add and\nby mixing all 64 online cpus with just 3 random cpus in the mask, but\nwas unsuccessful.  Still, inspection shows a valid race, and the fix is\na extension of the existing protection window in the current code.\n\nCc: stable@kernel.org (v2.6.32 and later)\nReported-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nSigned-off-by: Milton Miller \u003cmiltonm@bga.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "2b1caf6ed7b888c95a1909d343799672731651a5",
      "tree": "7ab9a7ae13bc02376bce6267df67f6f2aa9091f1",
      "parents": [
        "d551d81d6a720542873f478def60baab6b5df403",
        "bd924e8cbd4b73ffb7d707a774c04f7e2cae88ed"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 20 18:30:37 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 20 18:30:37 2011 -0800"
      },
      "message": "Merge branch \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027core-fixes-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:\n  smp: Allow on_each_cpu() to be called while early_boot_irqs_disabled status to init/main.c\n  lockdep: Move early boot local IRQ enable/disable status to init/main.c\n"
    },
    {
      "commit": "225c8e010f2d17a62aef131e24c6e7c111f36f9b",
      "tree": "dfd8a48abce0dbdc074f9dedeee686ff8971b4e3",
      "parents": [
        "6dc19899958e420a931274b94019e267e2396d3e"
      ],
      "author": {
        "name": "Milton Miller",
        "email": "miltonm@bga.com",
        "time": "Thu Jan 20 14:44:34 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 20 17:02:06 2011 -0800"
      },
      "message": "kernel/smp.c: consolidate writes in smp_call_function_interrupt()\n\nWe have to test the cpu mask in the interrupt handler before checking the\nrefs, otherwise we can start to follow an entry before its deleted and\nfind it partially initailzed for the next trip.  Presently we also clear\nthe cpumask bit before executing the called function, which implies\ngetting write access to the line.  After the function is called we then\ndecrement refs, and if they go to zero we then unlock the structure.\n\nHowever, this implies getting write access to the call function data\nbefore and after another the function is called.  If we can assert that no\nsmp_call_function execution function is allowed to enable interrupts, then\nwe can move both writes to after the function is called, hopfully allowing\nboth writes with one cache line bounce.\n\nOn a 256 thread system with a kernel compiled for 1024 threads, the time\nto execute testcase in the \"smp_call_function_many race\" changelog was\nreduced by about 30-40ms out of about 545 ms.\n\nI decided to keep this as WARN because its now a buggy function, even\nthough the stack trace is of no value -- a simple printk would give us the\ninformation needed.\n\nRaw data:\n\nWithout patch:\n  ipi_test startup took 1219366ns complete 539819014ns total 541038380ns\n  ipi_test startup took 1695754ns complete 543439872ns total 545135626ns\n  ipi_test startup took 7513568ns complete 539606362ns total 547119930ns\n  ipi_test startup took 13304064ns complete 533898562ns total 547202626ns\n  ipi_test startup took 8668192ns complete 544264074ns total 552932266ns\n  ipi_test startup took 4977626ns complete 548862684ns total 553840310ns\n  ipi_test startup took 2144486ns complete 541292318ns total 543436804ns\n  ipi_test startup took 21245824ns complete 530280180ns total 551526004ns\n\nWith patch:\n  ipi_test startup took 5961748ns complete 500859628ns total 506821376ns\n  ipi_test startup took 8975996ns complete 495098924ns total 504074920ns\n  ipi_test startup took 19797750ns complete 492204740ns total 512002490ns\n  ipi_test startup took 14824796ns complete 487495878ns total 502320674ns\n  ipi_test startup took 11514882ns complete 494439372ns total 505954254ns\n  ipi_test startup took 8288084ns complete 502570774ns total 510858858ns\n  ipi_test startup took 6789954ns complete 493388112ns total 500178066ns\n\n\t#include \u003clinux/module.h\u003e\n\t#include \u003clinux/init.h\u003e\n\t#include \u003clinux/sched.h\u003e /* sched clock */\n\n\t#define ITERATIONS 100\n\n\tstatic void do_nothing_ipi(void *dummy)\n\t{\n\t}\n\n\tstatic void do_ipis(struct work_struct *dummy)\n\t{\n\t\tint i;\n\n\t\tfor (i \u003d 0; i \u003c ITERATIONS; i++)\n\t\t\tsmp_call_function(do_nothing_ipi, NULL, 1);\n\n\t\tprintk(KERN_DEBUG \"cpu %d finished\\n\", smp_processor_id());\n\t}\n\n\tstatic struct work_struct work[NR_CPUS];\n\n\tstatic int __init testcase_init(void)\n\t{\n\t\tint cpu;\n\t\tu64 start, started, done;\n\n\t\tstart \u003d local_clock();\n\t\tfor_each_online_cpu(cpu) {\n\t\t\tINIT_WORK(\u0026work[cpu], do_ipis);\n\t\t\tschedule_work_on(cpu, \u0026work[cpu]);\n\t\t}\n\t\tstarted \u003d local_clock();\n\t\tfor_each_online_cpu(cpu)\n\t\t\tflush_work(\u0026work[cpu]);\n\t\tdone \u003d local_clock();\n\t\tpr_info(\"ipi_test startup took %lldns complete %lldns total %lldns\\n\",\n\t\t\tstarted-start, done-started, done-start);\n\n\t\treturn 0;\n\t}\n\n\tstatic void __exit testcase_exit(void)\n\t{\n\t}\n\n\tmodule_init(testcase_init)\n\tmodule_exit(testcase_exit)\n\tMODULE_LICENSE(\"GPL\");\n\tMODULE_AUTHOR(\"Anton Blanchard\");\n\nSigned-off-by: Milton Miller \u003cmiltonm@bga.com\u003e\nCc: Anton Blanchard \u003canton@samba.org\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "6dc19899958e420a931274b94019e267e2396d3e",
      "tree": "bb99ffb491f086b10bd92db3fc7cff214bb1a329",
      "parents": [
        "713735b4233fad3ae35b5cad656baa41413887ca"
      ],
      "author": {
        "name": "Anton Blanchard",
        "email": "anton@samba.org",
        "time": "Thu Jan 20 14:44:33 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 20 17:02:06 2011 -0800"
      },
      "message": "kernel/smp.c: fix smp_call_function_many() SMP race\n\nI noticed a failure where we hit the following WARN_ON in\ngeneric_smp_call_function_interrupt:\n\n                if (!cpumask_test_and_clear_cpu(cpu, data-\u003ecpumask))\n                        continue;\n\n                data-\u003ecsd.func(data-\u003ecsd.info);\n\n                refs \u003d atomic_dec_return(\u0026data-\u003erefs);\n                WARN_ON(refs \u003c 0);      \u003c-------------------------\n\nWe atomically tested and cleared our bit in the cpumask, and yet the\nnumber of cpus left (ie refs) was 0.  How can this be?\n\nIt turns out commit 54fdade1c3332391948ec43530c02c4794a38172\n(\"generic-ipi: make struct call_function_data lockless\") is at fault.  It\nremoves locking from smp_call_function_many and in doing so creates a\nrather complicated race.\n\nThe problem comes about because:\n\n - The smp_call_function_many interrupt handler walks call_function.queue\n   without any locking.\n - We reuse a percpu data structure in smp_call_function_many.\n - We do not wait for any RCU grace period before starting the next\n   smp_call_function_many.\n\nImagine a scenario where CPU A does two smp_call_functions back to back,\nand CPU B does an smp_call_function in between.  We concentrate on how CPU\nC handles the calls:\n\nCPU A            CPU B                  CPU C              CPU D\n\nsmp_call_function\n                                        smp_call_function_interrupt\n                                            walks\n\t\t\t\t\tcall_function.queue sees\n\t\t\t\t\tdata from CPU A on list\n\n                 smp_call_function\n\n                                        smp_call_function_interrupt\n                                            walks\n\n                                        call_function.queue sees\n                                          (stale) CPU A on list\n\t\t\t\t\t\t\t   smp_call_function int\n\t\t\t\t\t\t\t   clears last ref on A\n\t\t\t\t\t\t\t   list_del_rcu, unlock\nsmp_call_function reuses\npercpu *data A\n                                         data-\u003ecpumask sees and\n                                         clears bit in cpumask\n                                         might be using old or new fn!\n                                         decrements refs below 0\n\nset data-\u003erefs (too late!)\n\nThe important thing to note is since the interrupt handler walks a\npotentially stale call_function.queue without any locking, then another\ncpu can view the percpu *data structure at any time, even when the owner\nis in the process of initialising it.\n\nThe following test case hits the WARN_ON 100% of the time on my PowerPC\nbox (having 128 threads does help :)\n\n#include \u003clinux/module.h\u003e\n#include \u003clinux/init.h\u003e\n\n#define ITERATIONS 100\n\nstatic void do_nothing_ipi(void *dummy)\n{\n}\n\nstatic void do_ipis(struct work_struct *dummy)\n{\n\tint i;\n\n\tfor (i \u003d 0; i \u003c ITERATIONS; i++)\n\t\tsmp_call_function(do_nothing_ipi, NULL, 1);\n\n\tprintk(KERN_DEBUG \"cpu %d finished\\n\", smp_processor_id());\n}\n\nstatic struct work_struct work[NR_CPUS];\n\nstatic int __init testcase_init(void)\n{\n\tint cpu;\n\n\tfor_each_online_cpu(cpu) {\n\t\tINIT_WORK(\u0026work[cpu], do_ipis);\n\t\tschedule_work_on(cpu, \u0026work[cpu]);\n\t}\n\n\treturn 0;\n}\n\nstatic void __exit testcase_exit(void)\n{\n}\n\nmodule_init(testcase_init)\nmodule_exit(testcase_exit)\nMODULE_LICENSE(\"GPL\");\nMODULE_AUTHOR(\"Anton Blanchard\");\n\nI tried to fix it by ordering the read and the write of -\u003ecpumask and\n-\u003erefs.  In doing so I missed a critical case but Paul McKenney was able\nto spot my bug thankfully :) To ensure we arent viewing previous\niterations the interrupt handler needs to read -\u003erefs then -\u003ecpumask then\n-\u003erefs _again_.\n\nThanks to Milton Miller and Paul McKenney for helping to debug this issue.\n\n[miltonm@bga.com: add WARN_ON and BUG_ON, remove extra read of refs before initial read of mask that doesn\u0027t help (also noted by Peter Zijlstra), adjust comments, hopefully clarify scenario ]\n[miltonm@bga.com: remove excess tests]\nSigned-off-by: Anton Blanchard \u003canton@samba.org\u003e\nSigned-off-by: Milton Miller \u003cmiltonm@bga.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: \u003cstable@kernel.org\u003e [2.6.32+]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "bd924e8cbd4b73ffb7d707a774c04f7e2cae88ed",
      "tree": "338d08c708b195acb9c8d6e0bab2e6ea720051a3",
      "parents": [
        "2ce802f62ba32a7d95748ac92bf351f76affb6ff"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Thu Jan 20 12:07:13 2011 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Thu Jan 20 13:32:34 2011 +0100"
      },
      "message": "smp: Allow on_each_cpu() to be called while early_boot_irqs_disabled status to init/main.c\n\npercpu may end up calling vfree() during early boot which in\nturn may call on_each_cpu() for TLB flushes.  The function of\non_each_cpu() can be done safely while IRQ is disabled during\nearly boot but it assumed that the function is always called\nwith local IRQ enabled which ended up enabling local IRQ\nprematurely during boot and triggering a couple of warnings.\n\nThis patch updates on_each_cpu() and smp_call_function_many()\nsuch on_each_cpu() can be used safely while\nearly_boot_irqs_disabled is set.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nAcked-by: Pekka Enberg \u003cpenberg@kernel.org\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nLKML-Reference: \u003c20110120110713.GC6036@htj.dyndns.org\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nReported-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "351f8f8e6499ae4fff40f5e3a8fe16d9e1903646",
      "tree": "9393c8d3a6a1eaa9dba50932eb6de3017a8afe86",
      "parents": [
        "b8cb464e4a8abc60ad5a43e0375fec8a3c728167"
      ],
      "author": {
        "name": "Amerigo Wang",
        "email": "amwang@redhat.com",
        "time": "Wed Jan 12 16:59:39 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 08:03:08 2011 -0800"
      },
      "message": "kernel: clean up USE_GENERIC_SMP_HELPERS\n\nFor arch which needs USE_GENERIC_SMP_HELPERS, it has to select\nUSE_GENERIC_SMP_HELPERS, rather than leaving a choice to user, since they\ndon\u0027t provide their own implementions.\n\nAlso, move on_each_cpu() to kernel/smp.c, it is strange to put it in\nkernel/softirq.c.\n\nFor arch which doesn\u0027t use USE_GENERIC_SMP_HELPERS, e.g.  blackfin, only\non_each_cpu() is compiled.\n\nSigned-off-by: Amerigo Wang \u003camwang@redhat.com\u003e\nCc: David Howells \u003cdhowells@redhat.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: \"H. Peter Anvin\" \u003chpa@zytor.com\u003e\nCc: Yinghai Lu \u003cyinghai@kernel.org\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: 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": "3a5f65df5a0fcbaa35e5417c0420d691fee4ac56",
      "tree": "5d7bd3754c23817860bb34f0a54e0f3584b0ff00",
      "parents": [
        "3b950de9c94b4b9fde4f1340358ab52ce0f34be0"
      ],
      "author": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Oct 27 17:28:36 2010 +0100"
      },
      "committer": {
        "name": "David Howells",
        "email": "dhowells@redhat.com",
        "time": "Wed Oct 27 17:28:36 2010 +0100"
      },
      "message": "Typedef SMP call function pointer\n\nTypedef the pointer to the function to be called by smp_call_function() and\nfriends:\n\n\ttypedef void (*smp_call_func_t)(void *info);\n\nas it is used in a fair number of places.\n\nSigned-off-by: David Howells \u003cdhowells@redhat.com\u003e\ncc: linux-arch@vger.kernel.org\n"
    },
    {
      "commit": "27c379f7f89a4d558c685b5d89b5ba2fe79ae701",
      "tree": "206a00ef1cddaa7f5307b0394f24858f3be5f493",
      "parents": [
        "df423dc7f2a801b9a45d7c501a8eb5c529455ea1"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Fri Sep 10 13:47:29 2010 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Sep 10 16:48:40 2010 +0200"
      },
      "message": "generic-ipi: Fix deadlock in __smp_call_function_single\n\nJust got my 6 way machine to a state where cpu 0 is in an\nendless loop within __smp_call_function_single.\nAll other cpus are idle.\n\nThe call trace on cpu 0 looks like this:\n\n __smp_call_function_single\n scheduler_tick\n update_process_times\n tick_sched_timer\n __run_hrtimer\n hrtimer_interrupt\n clock_comparator_work\n do_extint\n ext_int_handler\n ----\u003e timer irq\n cpu_idle\n\n__smp_call_function_single() got called from nohz_balancer_kick()\n(inlined) with the remote cpu being 1, wait being 0 and the per\ncpu variable remote_sched_softirq_cb (call_single_data) of the\ncurrent cpu (0).\n\nThen it loops forever when it tries to grab the lock of the\ncall_single_data, since it is already locked and enqueued on cpu 0.\n\nMy theory how this could have happened: for some reason the\nscheduler decided to call __smp_call_function_single() on it\u0027s own\ncpu, and sends an IPI to itself. The interrupt stays pending\nsince IRQs are disabled. If then the hypervisor schedules the\ncpu away it might happen that upon rescheduling both the IPI and\nthe timer IRQ are pending. If then interrupts are enabled again\nit depends which one gets scheduled first.\nIf the timer interrupt gets delivered first we end up with the\nlocal deadlock as seen in the calltrace above.\n\nLet\u0027s make __smp_call_function_single() check if the target cpu is\nthe current cpu and execute the function immediately just like\nsmp_call_function_single does. That should prevent at least the\nscenario described here.\n\nIt might also be that the scheduler is not supposed to call\n__smp_call_function_single with the remote cpu being the current\ncpu, but that is a different issue.\n\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Jens Axboe \u003cjaxboe@fusionio.com\u003e\nCc: Venkatesh Pallipadi \u003cvenki@google.com\u003e\nCc: Suresh Siddha \u003csuresh.b.siddha@intel.com\u003e\nLKML-Reference: \u003c20100910114729.GB2827@osiris.boeblingen.de.ibm.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "80b5184cc537718122e036afe7e62d202b70d077",
      "tree": "d4e2b400f0e951156d64d546fd563fa5a8ab02d3",
      "parents": [
        "ad84bb5b98bf81deae97e3bcd814675d6b4e6f72"
      ],
      "author": {
        "name": "Akinobu Mita",
        "email": "akinobu.mita@gmail.com",
        "time": "Wed May 26 14:43:32 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu May 27 09:12:48 2010 -0700"
      },
      "message": "kernel/: convert cpu notifier to return encapsulate errno value\n\nBy the previous modification, the cpu notifier can return encapsulate\nerrno value.  This converts the cpu notifiers for kernel/*.c\n\nSigned-off-by: Akinobu Mita \u003cakinobu.mita@gmail.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "5a0e3ad6af8660be21ca98a971cd00f331318c05",
      "tree": "5bfb7be11a03176a87296a43ac6647975c00a1d1",
      "parents": [
        "ed391f4ebf8f701d3566423ce8f17e614cde9806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:04:11 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n\npercpu.h is included by sched.h and module.h and thus ends up being\nincluded when building most .c files.  percpu.h includes slab.h which\nin turn includes gfp.h making everything defined by the two files\nuniversally available and complicating inclusion dependencies.\n\npercpu.h -\u003e slab.h dependency is about to be removed.  Prepare for\nthis change by updating users of gfp and slab facilities include those\nheaders directly instead of assuming availability.  As this conversion\nneeds to touch large number of source files, the following script is\nused as the basis of conversion.\n\n  http://userweb.kernel.org/~tj/misc/slabh-sweep.py\n\nThe script does the followings.\n\n* Scan files for gfp and slab usages and update includes such that\n  only the necessary includes are there.  ie. if only gfp is used,\n  gfp.h, if slab is used, slab.h.\n\n* When the script inserts a new include, it looks at the include\n  blocks and try to put the new include such that its order conforms\n  to its surrounding.  It\u0027s put in the include block which contains\n  core kernel includes, in the same order that the rest are ordered -\n  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there\n  doesn\u0027t seem to be any matching order.\n\n* If the script can\u0027t find a place to put a new include (mostly\n  because the file doesn\u0027t have fitting include block), it prints out\n  an error message indicating which .h file needs to be added to the\n  file.\n\nThe conversion was done in the following steps.\n\n1. The initial automatic conversion of all .c files updated slightly\n   over 4000 files, deleting around 700 includes and adding ~480 gfp.h\n   and ~3000 slab.h inclusions.  The script emitted errors for ~400\n   files.\n\n2. Each error was manually checked.  Some didn\u0027t need the inclusion,\n   some needed manual addition while adding it to implementation .h or\n   embedding .c file was more appropriate for others.  This step added\n   inclusions to around 150 files.\n\n3. The script was run again and the output was compared to the edits\n   from #2 to make sure no file was left behind.\n\n4. Several build tests were done and a couple of problems were fixed.\n   e.g. lib/decompress_*.c used malloc/free() wrappers around slab\n   APIs requiring slab.h to be added manually.\n\n5. The script was run on all .h files but without automatically\n   editing them as sprinkling gfp.h and slab.h inclusions around .h\n   files could easily lead to inclusion dependency hell.  Most gfp.h\n   inclusion directives were ignored as stuff from gfp.h was usually\n   wildly available and often used in preprocessor macros.  Each\n   slab.h inclusion directive was examined and added manually as\n   necessary.\n\n6. percpu.h was updated not to include slab.h.\n\n7. Build test were done on the following configurations and failures\n   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my\n   distributed build env didn\u0027t work with gcov compiles) and a few\n   more options had to be turned off depending on archs to make things\n   build (like ipr on powerpc/64 which failed due to missing writeq).\n\n   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.\n   * powerpc and powerpc64 SMP allmodconfig\n   * sparc and sparc64 SMP allmodconfig\n   * ia64 SMP allmodconfig\n   * s390 SMP allmodconfig\n   * alpha SMP allmodconfig\n   * um on x86_64 SMP allmodconfig\n\n8. percpu.h modifications were reverted so that it could be applied as\n   a separate patch and serve as bisection point.\n\nGiven the fact that I had only a couple of failures from tests on step\n6, I\u0027m fairly confident about the coverage of this conversion patch.\nIf there is a breakage, it\u0027s likely to be something in one of the arch\nheaders which should be easily discoverable easily on most builds of\nthe specific arch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGuess-its-ok-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "e03bcb68629c7f0728c95f1afe06ce48565c7713",
      "tree": "3fdede3a2cefaedf1f5838e83c893a7564e548c9",
      "parents": [
        "6ccf80eb15ccaca4d3f1ab5162b9ded5eecd9971"
      ],
      "author": {
        "name": "Milton Miller",
        "email": "miltonm@bga.com",
        "time": "Mon Jan 18 13:00:51 2010 +1100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Jan 18 09:02:59 2010 +0100"
      },
      "message": "generic-ipi: Optimize accesses by using DEFINE_PER_CPU_SHARED_ALIGNED for IPI data\n\nThe smp ipi data is passed around and given write access by\nother cpus and should be separated from per-cpu data consumed by\nthis cpu.\n\nLooking for hot lines, I saw call_function_data shared with\ntick_cpu_sched.\n\nSigned-off-by: Milton Miller \u003cmiltonm@bga.com\u003e\nAcked-by: Anton Blanchard \u003canton@samba.org\u003e\nAcked-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: : Nick Piggin \u003cnpiggin@suse.de\u003e\nLKML-Reference: \u003c20100118020051.GR12666@kryten\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "af2422c42c0ff42b8b93dbb3a5fe65250fb65c40",
      "tree": "cb3eb1488225b1c295044c40b841cde60e499fd4",
      "parents": [
        "cc8ef6eb21e964b1c5eb97b2d0e8ac9893e1bf86"
      ],
      "author": {
        "name": "David John",
        "email": "davidjon@xenontk.org",
        "time": "Fri Jan 15 17:01:23 2010 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jan 16 12:15:39 2010 -0800"
      },
      "message": "smp_call_function_any(): pass the node value to cpumask_of_node()\n\nThe change in acpi_cpufreq to use smp_call_function_any causes a warning\nwhen it is called since the function erroneously passes the cpu id to\ncpumask_of_node rather than the node that the cpu is on.  Fix this.\n\ncpumask_of_node(3): node \u003e nr_node_ids(1)\nPid: 1, comm: swapper Not tainted 2.6.33-rc3-00097-g2c1f189 #223\nCall Trace:\n [\u003cffffffff81028bb3\u003e] cpumask_of_node+0x23/0x58\n [\u003cffffffff81061f51\u003e] smp_call_function_any+0x65/0xfa\n [\u003cffffffff810160d1\u003e] ? do_drv_read+0x0/0x2f\n [\u003cffffffff81015fba\u003e] get_cur_val+0xb0/0x102\n [\u003cffffffff81016080\u003e] get_cur_freq_on_cpu+0x74/0xc5\n [\u003cffffffff810168a7\u003e] acpi_cpufreq_cpu_init+0x417/0x515\n [\u003cffffffff81562ce9\u003e] ? __down_write+0xb/0xd\n [\u003cffffffff8148055e\u003e] cpufreq_add_dev+0x278/0x922\n\nSigned-off-by: David John \u003cdavidjon@xenontk.org\u003e\nCc: Suresh Siddha \u003csuresh.b.siddha@intel.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: \"H. Peter Anvin\" \u003chpa@zytor.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": "8f0ddf91f2aeb09602373e400cf8b403e9017210",
      "tree": "b907c35c79caadafff6ad46a91614e30afd2f967",
      "parents": [
        "050cbb09dac0402672edeaeac06094ef8ff1749a",
        "b5f91da0a6973bb6f9ff3b91b0e92c0773a458f3"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 09:02:01 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 09:02:01 2009 -0800"
      },
      "message": "Merge branch \u0027core-locking-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027core-locking-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (26 commits)\n  clockevents: Convert to raw_spinlock\n  clockevents: Make tick_device_lock static\n  debugobjects: Convert to raw_spinlocks\n  perf_event: Convert to raw_spinlock\n  hrtimers: Convert to raw_spinlocks\n  genirq: Convert irq_desc.lock to raw_spinlock\n  smp: Convert smplocks to raw_spinlocks\n  rtmutes: Convert rtmutex.lock to raw_spinlock\n  sched: Convert pi_lock to raw_spinlock\n  sched: Convert cpupri lock to raw_spinlock\n  sched: Convert rt_runtime_lock to raw_spinlock\n  sched: Convert rq-\u003elock to raw_spinlock\n  plist: Make plist debugging raw_spinlock aware\n  bkl: Fixup core_lock fallout\n  locking: Cleanup the name space completely\n  locking: Further name space cleanups\n  alpha: Fix fallout from locking changes\n  locking: Implement new raw_spinlock\n  locking: Convert raw_rwlock functions to arch_rwlock\n  locking: Convert raw_rwlock to arch_rwlock\n  ...\n"
    },
    {
      "commit": "c0f68c2fab4898bcc4671a8fb941f428856b4ad5",
      "tree": "87cc5addf461b699b3b9c9d1931f77acf947051d",
      "parents": [
        "4eb174bee6f8623fed1af0072f1bebfc3b513a52"
      ],
      "author": {
        "name": "Xiao Guangrong",
        "email": "xiaoguangrong@cn.fujitsu.com",
        "time": "Mon Dec 14 18:00:16 2009 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Dec 15 08:53:25 2009 -0800"
      },
      "message": "generic-ipi: cleanup for generic_smp_call_function_interrupt()\n\nUse smp_processor_id() instead of get_cpu() and put_cpu() in\ngeneric_smp_call_function_interrupt(), It\u0027s no need to disable preempt,\nbecause we must call generic_smp_call_function_interrupt() with interrupts\ndisabled.\n\nSigned-off-by: Xiao Guangrong \u003cxiaoguangrong@cn.fujitsu.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "9f5a5621e78cf48d86682a71ceb3fcdbde38b222",
      "tree": "615076c3d592ebd293dcd4c8babfa91ce88d049b",
      "parents": [
        "d209d74d52ab39dc071656533cac095294f70de7"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Tue Nov 17 15:40:01 2009 +0100"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Mon Dec 14 23:55:33 2009 +0100"
      },
      "message": "smp: Convert smplocks to raw_spinlocks\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": "2ea6dec4a22a6f66f6633876212fd4d195cf8277",
      "tree": "f630c63a9e20fab5b31caa88368293a203103408",
      "parents": [
        "72f279b256d520e321a850880d094bc0bcbf45d6"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Tue Nov 17 14:27:27 2009 -0800"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Wed Nov 18 14:52:25 2009 +0100"
      },
      "message": "generic-ipi: Add smp_call_function_any()\n\nAndrew points out that acpi-cpufreq uses cpumask_any, when it really\nwould prefer to use the same CPU if possible (to avoid an IPI).  In\ngeneral, this seems a good idea to offer.\n\n[ tglx: Documented selection preference and Inlined the UP case to\n  \tavoid the copy of smp_call_function_single() and the extra\n  \tEXPORT ]\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Venkatesh Pallipadi \u003cvenkatesh.pallipadi@intel.com\u003e\nCc: Len Brown \u003clen.brown@intel.com\u003e\nCc: Zhao Yakui \u003cyakui.zhao@intel.com\u003e\nCc: Dave Jones \u003cdavej@redhat.com\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Mike Galbraith \u003cefault@gmx.de\u003e\nCc: \"Zhang, Yanmin\" \u003cyanmin_zhang@linux.intel.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "72f279b256d520e321a850880d094bc0bcbf45d6",
      "tree": "d2ab19bd515108b1426636ce61a11e3e39ffe1a2",
      "parents": [
        "964fe080d94db82a3268443e9b9ece4c60246414"
      ],
      "author": {
        "name": "Sheng Yang",
        "email": "sheng@linux.intel.com",
        "time": "Thu Oct 22 19:19:34 2009 +0800"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Oct 23 13:51:45 2009 +0200"
      },
      "message": "generic-ipi: Fix misleading smp_call_function*() description\n\nAfter commit:8969a5ede0f9e17da4b943712429aef2c9bcd82b\n\"generic-ipi: remove kmalloc()\", wait \u003d 0 can be guaranteed.\n\nSigned-off-by: Sheng Yang \u003csheng@linux.intel.com\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nLKML-Reference: \u003c1256210374-25354-1-git-send-email-sheng@linux.intel.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "0748bd01773395003208996c4c0b3f80caf80976",
      "tree": "99abf2a49d66c4890f4cc6b114bfd47684bab68e",
      "parents": [
        "630cd0460724e286d3c5cb2c33930b0ae9cd6645"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Thu Sep 24 09:34:46 2009 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Thu Sep 24 09:34:47 2009 +0930"
      },
      "message": "cpumask: remove arch_send_call_function_ipi\n\nNow everyone is converted to arch_send_call_function_ipi_mask, remove\nthe shim and the #defines.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "54fdade1c3332391948ec43530c02c4794a38172",
      "tree": "a44cfa6888bbe702321e4d4737786e5292d72eaa",
      "parents": [
        "5c725138437837291db5c25f4a076ee852e806e3"
      ],
      "author": {
        "name": "Xiao Guangrong",
        "email": "xiaoguangrong@cn.fujitsu.com",
        "time": "Tue Sep 22 16:43:39 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Sep 23 07:39:28 2009 -0700"
      },
      "message": "generic-ipi: make struct call_function_data lockless\n\nThis patch can remove spinlock from struct call_function_data, the\nreasons are below:\n\n1: add a new interface for cpumask named cpumask_test_and_clear_cpu(),\n   it can atomically test and clear specific cpu, we can use it instead\n   of cpumask_test_cpu() and cpumask_clear_cpu() and no need data-\u003elock\n   to protect those in generic_smp_call_function_interrupt().\n\n2: in smp_call_function_many(), after csd_lock() return, the current\u0027s\n   cfd_data is deleted from call_function list, so it not have race\n   between other cpus, then cfs_data is only used in\n   smp_call_function_many() that must disable preemption and not from\n   a hardware interrupthandler or from a bottom half handler to call,\n   only the correspond cpu can use it, so it not have race in current\n   cpu, no need cfs_data-\u003elock to protect it.\n\n3: after 1 and 2, cfs_data-\u003elock is only use to protect cfs_data-\u003erefs in\n   generic_smp_call_function_interrupt(), so we can define cfs_data-\u003erefs\n   to atomic_t, and no need cfs_data-\u003elock any more.\n\nSigned-off-by: Xiao Guangrong \u003cxiaoguangrong@cn.fujitsu.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nAcked-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n[akpm@linux-foundation.org: use atomic_dec_return()]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b855192c08fcb14adbc5d3a7cab182022d433cca",
      "tree": "3a10cafbfbf98cafacf667eb218c71300b351bfa",
      "parents": [
        "d886c73cd4cf02a71e1650cbcb6176799d78aac1",
        "3e0e1e9c5a327d4dba8490d83ef55c0564e6e8a7"
      ],
      "author": {
        "name": "H. Peter Anvin",
        "email": "hpa@zytor.com",
        "time": "Wed Aug 26 17:17:51 2009 -0700"
      },
      "committer": {
        "name": "H. Peter Anvin",
        "email": "hpa@zytor.com",
        "time": "Wed Aug 26 17:24:28 2009 -0700"
      },
      "message": "Merge branch \u0027x86/urgent\u0027 into x86/pat\n\nReason: Change to is_new_memtype_allowed() in x86/urgent\n\nResolved semantic conflicts in:\n\n\t arch/x86/mm/pat.c\n\t arch/x86/mm/ioremap.c\n\nSigned-off-by: H. Peter Anvin \u003chpa@zytor.com\u003e\n"
    },
    {
      "commit": "269c861baa2fe7c114c3bc7831292758d29eb336",
      "tree": "511c06f6d3cd652b3d20bd725130d5766dc54903",
      "parents": [
        "9f51e24ee8b5a1595b6a5ac0c2be278a16488e75"
      ],
      "author": {
        "name": "Suresh Siddha",
        "email": "suresh.b.siddha@intel.com",
        "time": "Wed Aug 19 18:05:35 2009 -0700"
      },
      "committer": {
        "name": "H. Peter Anvin",
        "email": "hpa@zytor.com",
        "time": "Fri Aug 21 16:25:43 2009 -0700"
      },
      "message": "generic-ipi: Allow cpus not yet online to call smp_call_function with irqs disabled\n\nBecause of deadlock possiblities smp_call_function() is not allowed to\nbe called with interrupts disabled. Add an exception for the cpu not\nyet online, as no one else can send smp call function interrupt to this\ncpu that is not yet online and as such deadlock condition is not possible.\n\nSigned-off-by: Suresh Siddha \u003csuresh.b.siddha@intel.com\u003e\nAcked-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nSigned-off-by: H. Peter Anvin \u003chpa@zytor.com\u003e\n"
    },
    {
      "commit": "69dd647f969c28d18de77e2153f30d05a1874571",
      "tree": "7328f31d84b567e7f5648d35b5c535f9223e368a",
      "parents": [
        "2020002a878403a6858868d85a43623f74859dba"
      ],
      "author": {
        "name": "Xiao Guangrong",
        "email": "xiaoguangrong@cn.fujitsu.com",
        "time": "Thu Aug 06 15:07:29 2009 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Fri Aug 07 10:39:55 2009 -0700"
      },
      "message": "generic-ipi: fix hotplug_cfd()\n\nUse CONFIG_HOTPLUG_CPU, not CONFIG_CPU_HOTPLUG\n\nWhen hot-unpluging a cpu, it will leak memory allocated at cpu hotplug,\nbut only if CPUMASK_OFFSTACK\u003dy, which is default to n.\n\nThe bug was introduced by 8969a5ede0f9e17da4b943712429aef2c9bcd82b\n(\"generic-ipi: remove kmalloc()\").\n\nSigned-off-by: Xiao Guangrong \u003cxiaoguangrong@cn.fujitsu.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: \u003cstable@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "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": "641cd4cfcdc71ce01535b31cc4d57d59a1fae1fc",
      "tree": "84c088d12e68a53cdde2faba49dc01e1b981598b",
      "parents": [
        "25d500067d5a666d1336598d1b324793554e5496"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Mar 13 10:47:34 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Mar 13 10:47:34 2009 +0100"
      },
      "message": "generic-ipi: eliminate WARN_ON()s during oops/panic\n\nDo not output smp-call related warnings in the oops/panic codepath.\n\nReported-by: Jan Beulich \u003cjbeulich@novell.com\u003e\nAcked-by: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nLKML-Reference: \u003c49B91A7E.76E4.0078.0@novell.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "0b13fda1e0936b3d64c4c407f183d33fa6bd2ad4",
      "tree": "0dbcf9d22e6dbd30ca93d1fc942f3e089bf9e501",
      "parents": [
        "6e2756376c706e4da3454a272947983f92e80a7e"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Feb 25 16:52:11 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Feb 25 16:52:50 2009 +0100"
      },
      "message": "generic-ipi: cleanups\n\nAndrew pointed out that there\u0027s some small amount of\nstyle rot in kernel/smp.c.\n\nClean it up.\n\nReported-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Peter Zijlstra \u003cpeterz@infradead.org\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "6e2756376c706e4da3454a272947983f92e80a7e",
      "tree": "3a54c5dd97921ae869bb6122a69af42d9161ee3e",
      "parents": [
        "8969a5ede0f9e17da4b943712429aef2c9bcd82b"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Wed Feb 25 13:59:48 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Feb 25 14:13:44 2009 +0100"
      },
      "message": "generic-ipi: remove CSD_FLAG_WAIT\n\nOleg noticed that we don\u0027t strictly need CSD_FLAG_WAIT, rework\nthe code so that we can use CSD_FLAG_LOCK for both purposes.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "8969a5ede0f9e17da4b943712429aef2c9bcd82b",
      "tree": "73fa99a1f5596429051b65d355694c90b0e15539",
      "parents": [
        "15d0d3b3371227f846b9f644547fde081c7e1c0c"
      ],
      "author": {
        "name": "Peter Zijlstra",
        "email": "a.p.zijlstra@chello.nl",
        "time": "Wed Feb 25 13:59:47 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Feb 25 14:13:43 2009 +0100"
      },
      "message": "generic-ipi: remove kmalloc()\n\nRemove the use of kmalloc() from the smp_call_function_*()\ncalls.\n\nSteven\u0027s generic-ipi patch (d7240b98: generic-ipi: use per cpu\ndata for single cpu ipi calls) started the discussion on the use\nof kmalloc() in this code and fixed the\nsmp_call_function_single(.wait\u003d0) fallback case.\n\nIn this patch we complete this by also providing means for the\n_many() call, which fully removes the need for kmalloc() in this\ncode.\n\nThe problem with the _many() call is that other cpus might still\nbe observing our entry when we\u0027re done with it. It solved this\nby dynamically allocating data elements and RCU-freeing it.\n\nWe solve it by using a single per-cpu entry which provides\nstatic storage and solves one half of the problem (avoiding\nreferencing freed data).\n\nThe other half, ensuring the queue iteration it still possible,\nis done by placing re-used entries at the head of the list. This\nmeans that if someone was still iterating that entry when it got\nmoved, he will now re-visit the entries on the list he had\nalready seen, but avoids skipping over entries like would have\nhappened had we placed the new entry at the end.\n\nFurthermore, visiting entries twice is not a problem, since we\nremove our cpu from the entry\u0027s cpumask once its called.\n\nMany thanks to Oleg for his suggestions and him poking holes in\nmy earlier attempts.\n\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Nick Piggin \u003cnpiggin@suse.de\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: \"Paul E. McKenney\" \u003cpaulmck@linux.vnet.ibm.com\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "15d0d3b3371227f846b9f644547fde081c7e1c0c",
      "tree": "11170d41f38123923208c44fe957730350a4e31a",
      "parents": [
        "f7e603ad8f78cd3b59e33fa72707da0cbabdf699"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "npiggin@suse.de",
        "time": "Wed Feb 25 06:22:45 2009 +0100"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Wed Feb 25 12:27:08 2009 +0100"
      },
      "message": "generic IPI: simplify barriers and locking\n\nSimplify the barriers in generic remote function call interrupt\ncode.\n\nFirstly, just unconditionally take the lock and check the list\nin the generic_call_function_single_interrupt IPI handler. As\nwe\u0027ve just taken an IPI here, the chances are fairly high that\nthere will be work on the list for us, so do the locking\nunconditionally. This removes the tricky lockless list_empty\ncheck and dubious barriers. The change looks bigger than it is\nbecause it is just removing an outer loop.\n\nSecondly, clarify architecture specific IPI locking rules.\nGeneric code has no tools to impose any sane ordering on IPIs if\nthey go outside normal cache coherency, ergo the arch code must\nmake them appear to obey cache coherency as a \"memory operation\"\nto initiate an IPI, and a \"memory operation\" to receive one.\nThis way at least they can be reasoned about in generic code,\nand smp_mb used to provide ordering.\n\nThe combination of these two changes means that explict barriers\ncan be taken out of queue handling for the single case -- shared\ndata is explicitly locked, and ipi ordering must conform to\nthat, so no barriers needed. An extra barrier is needed in the\nmany handler, so as to ensure we load the list element after the\nIPI is received.\n\nDoes any architecture actually *need* these barriers? For the\ninitiator I could see it, but for the handler I would be\nsurprised. So the other thing we could do for simplicity is just\nto require that, rather than just matching with cache coherency,\nwe just require a full barrier before generating an IPI, and\nafter receiving an IPI. In which case, the smp_mb()s can go\naway. But just for now, we\u0027ll be on the safe side and use the\nbarriers (they\u0027re in the slow case anyway).\n\nSigned-off-by: Nick Piggin \u003cnpiggin@suse.de\u003e\nAcked-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: linux-arch@vger.kernel.org\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nCc: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nCc: Oleg Nesterov \u003coleg@redhat.com\u003e\nCc: Suresh Siddha \u003csuresh.b.siddha@intel.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "d7240b988017521ebf89edfadd42c0942f166850",
      "tree": "07bdbb42405e0d247f719d45464760d0dd12864c",
      "parents": [
        "4ab0a9409af5fad74ad1fc9e46d5a8b460f353e9"
      ],
      "author": {
        "name": "Steven Rostedt",
        "email": "rostedt@goodmis.org",
        "time": "Thu Jan 29 10:08:01 2009 -0500"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Jan 30 18:31:08 2009 +0100"
      },
      "message": "generic-ipi: use per cpu data for single cpu ipi calls\n\nThe smp_call_function can be passed a wait parameter telling it to\nwait for all the functions running on other CPUs to complete before\nreturning, or to return without waiting. Unfortunately, this is\ncurrently just a suggestion and not manditory. That is, the\nsmp_call_function can decide not to return and wait instead.\n\nThe reason for this is because it uses kmalloc to allocate storage\nto send to the called CPU and that CPU will free it when it is done.\nBut if we fail to allocate the storage, the stack is used instead.\nThis means we must wait for the called CPU to finish before\ncontinuing.\n\nUnfortunatly, some callers do no abide by this hint and act as if\nthe non-wait option is mandatory. The MTRR code for instance will\ndeadlock if the smp_call_function is set to wait. This is because\nthe smp_call_function will wait for the other CPUs to finish their\ncalled functions, but those functions are waiting on the caller to\ncontinue.\n\nThis patch changes the generic smp_call_function code to use per cpu\nvariables if the allocation of the data fails for a single CPU call. The\nsmp_call_function_many will fall back to the smp_call_function_single\nif it fails its alloc. The smp_call_function_single is modified\nto not force the wait state.\n\nSince we now are using a single data per cpu we must synchronize the\ncallers to prevent a second caller modifying the data before the\nfirst called IPI functions complete. To do so, I added a flag to\nthe call_single_data called CSD_FLAG_LOCK. When the single CPU is\ncalled (which can be called when a many call fails an alloc), we\nset the LOCK bit on this per cpu data. When the caller finishes\nit clears the LOCK bit.\n\nThe caller must wait till the LOCK bit is cleared before setting\nit. When it is cleared, there is no IPI function using it.\n\nSigned-off-by: Steven Rostedt \u003csrostedt@redhat.com\u003e\nSigned-off-by: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nAcked-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\nAcked-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "4f4b6c1a94a8735bbdc030a2911cf395495645b6",
      "tree": "0572f8b8be03a32b4ae7b3deb4b1412226a0f598",
      "parents": [
        "9e2f913df70b378379a358a44e7d286f7b765e8e"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Thu Jan 01 10:12:15 2009 +1030"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Thu Jan 01 10:12:15 2009 +1030"
      },
      "message": "cpumask: prepare for iterators to only go to nr_cpu_ids/nr_cpumask_bits.: core\n\nImpact: cleanup\n\nIn future, all cpumask ops will only be valid (in general) for bit\nnumbers \u003c nr_cpu_ids.  So use that instead of NR_CPUS in iterators\nand other comparisons.\n\nThis is always safe: no cpu number can be \u003e\u003d nr_cpu_ids, and\nnr_cpu_ids is initialized to NR_CPUS at boot.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Mike Travis \u003ctravis@sgi.com\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nAcked-by: James Morris \u003cjmorris@namei.org\u003e\nCc: Eric Biederman \u003cebiederm@xmission.com\u003e\n"
    },
    {
      "commit": "ce47d974f71af26d00832e83a43ac79bec272d99",
      "tree": "eb2434bd6f6afefcfb1ec4b03c0886f371b81067",
      "parents": [
        "54b11e6d57a10aa9d0009efd93873e17bffd5d30"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Tue Dec 30 09:05:17 2008 +1030"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Tue Dec 30 09:05:17 2008 +1030"
      },
      "message": "cpumask: arch_send_call_function_ipi_mask: core\n\nImpact: new API to reduce stack usage\n\nWe\u0027re weaning the core code off handing cpumask\u0027s around on-stack.\nThis introduces arch_send_call_function_ipi_mask().\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "54b11e6d57a10aa9d0009efd93873e17bffd5d30",
      "tree": "ac09296e7b0726aa6143913526f8983fae1cb497",
      "parents": [
        "3fa41520696fec2815e2d88fbcccdda77ba4d693"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Tue Dec 30 09:05:16 2008 +1030"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Tue Dec 30 09:05:16 2008 +1030"
      },
      "message": "cpumask: smp_call_function_many()\n\nImpact: Implementation change to remove cpumask_t from stack.\n\nActually change smp_call_function_mask() to smp_call_function_many().\nWe avoid cpumasks on the stack in this version.\n\n(S390 has its own version, but that\u0027s going away apparently).\n\nWe have to do some dancing to figure out if 0 or 1 other cpus are in\nthe mask supplied and the online mask without allocating a tmp\ncpumask.  It\u0027s still fairly cheap.\n\nWe allocate the cpumask at the end of the call_function_data\nstructure: if allocation fails we fallback to smp_call_function_single\nrather than using the baroque quiescing code (which needs a cpumask on\nstack).\n\n(Thanks to Hiroshi Shimamoto for spotting several bugs in previous versions!)\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Mike Travis \u003ctravis@sgi.com\u003e\nCc: Hiroshi Shimamoto \u003ch-shimamoto@ct.jp.nec.com\u003e\nCc: npiggin@suse.de\nCc: axboe@kernel.dk\n"
    },
    {
      "commit": "561920a0d2bb6d63343e83acfd784c0a77bd28d1",
      "tree": "7b87d9d867296d4a14e9b287129fcfd0b2cd1b47",
      "parents": [
        "e78042e5b83936b1d12a4b5bbb492bdd88ad76c6"
      ],
      "author": {
        "name": "Suresh Siddha",
        "email": "suresh.b.siddha@intel.com",
        "time": "Thu Oct 30 18:28:41 2008 +0100"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Nov 06 08:41:56 2008 +0100"
      },
      "message": "generic-ipi: fix the smp_mb() placement\n\nsmp_mb() is needed (to make the memory operations visible globally) before\nsending the ipi on the sender and the receiver (on Alpha atleast) needs\nsmp_read_barrier_depends() in the handler before reading the call_single_queue\nlist in a lock-free fashion.\n\nOn x86, x2apic mode register accesses for sending IPI\u0027s don\u0027t have serializing\nsemantics. So the need for smp_mb() before sending the IPI becomes more\ncritical in x2apic mode.\n\nRemove the unnecessary smp_mb() in csd_flag_wait(), as the presence of that\nsmp_mb() doesn\u0027t mean anything on the sender, when the ipi receiver is not\ndoing any thing special (like memory fence) after clearing the CSD_FLAG_WAIT.\n\nSigned-off-by: Suresh Siddha \u003csuresh.b.siddha@intel.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "f73be6dedf4fa058ce80846dae604b08fa805ca1",
      "tree": "eb38c111bedf6b356db3af20ab124dff846643cb",
      "parents": [
        "2a61812af2e564cba2c8170cf96e1c823210f619"
      ],
      "author": {
        "name": "H. Peter Anvin",
        "email": "hpa@zytor.com",
        "time": "Mon Aug 25 17:07:14 2008 -0700"
      },
      "committer": {
        "name": "H. Peter Anvin",
        "email": "hpa@zytor.com",
        "time": "Mon Aug 25 17:45:48 2008 -0700"
      },
      "message": "smp: have smp_call_function_single() detect invalid CPUs\n\nHave smp_call_function_single() return invalid CPU indicies and return\n-ENXIO.  This function is already executed inside a\nget_cpu()..put_cpu() which locks out CPU removal, so rather than\nhaving the higher layers doing another layer of locking to guard\nagainst unplugged CPUs do the test here.\n\nSigned-off-by: H. Peter Anvin \u003chpa@zytor.com\u003e\n"
    },
    {
      "commit": "c2fc11985db304572322f1dcdcb0f71337315006",
      "tree": "330196cefd4eb0ad3b4999fb14518a62f0294d93",
      "parents": [
        "23a0ee908cbfba3264d19729c67c22b20fa73886"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "nickpiggin@yahoo.com.au",
        "time": "Tue Aug 12 18:05:13 2008 +1000"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Aug 12 11:21:27 2008 +0200"
      },
      "message": "generic-ipi: fix stack and rcu interaction bug in smp_call_function_mask(), fix\n\n\u003e \u003e Nick Piggin (1):\n\u003e \u003e       generic-ipi: fix stack and rcu interaction bug in\n\u003e \u003e smp_call_function_mask()\n\u003e\n\u003e I\u0027m still not 100% sure that I have this patch right... I might have seen\n\u003e a lockup trace implicating the smp call function path... which may have\n\u003e been due to some other problem or a different bug in the new call function\n\u003e code, but if some more people can take a look at it before merging?\n\nOK indeed it did have a couple of bugs. Firstly, I wasn\u0027t freeing the\ndata properly in the alloc \u0026\u0026 wait case. Secondly, I wasn\u0027t resetting\nCSD_FLAG_WAIT in the for each cpu loop (so only the first CPU would\nwait).\n\nAfter those fixes, the patch boots and runs with the kmalloc commented\nout (so it always executes the slowpath).\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "cc7a486cac78f6fc1a24e8cd63036bae8d2ab431",
      "tree": "258abdc1843d6f9ed76608412f1364178fb8c697",
      "parents": [
        "796aadeb1b2db9b5d463946766c5bbfd7717158c"
      ],
      "author": {
        "name": "Nick Piggin",
        "email": "nickpiggin@yahoo.com.au",
        "time": "Mon Aug 11 13:49:30 2008 +1000"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Aug 11 15:21:28 2008 +0200"
      },
      "message": "generic-ipi: fix stack and rcu interaction bug in smp_call_function_mask()\n\n* Venki Pallipadi \u003cvenkatesh.pallipadi@intel.com\u003e wrote:\n\n\u003e Found a OOPS on a big SMP box during an overnight reboot test with\n\u003e upstream git.\n\u003e\n\u003e Suresh and I looked at the oops and looks like the root cause is in\n\u003e generic_smp_call_function_interrupt() and smp_call_function_mask() with\n\u003e wait parameter.\n\u003e\n\u003e The actual oops looked like\n\u003e\n\u003e [   11.277260] BUG: unable to handle kernel paging request at ffff8802ffffffff\n\u003e [   11.277815] IP: [\u003cffff8802ffffffff\u003e] 0xffff8802ffffffff\n\u003e [   11.278155] PGD 202063 PUD 0\n\u003e [   11.278576] Oops: 0010 [1] SMP\n\u003e [   11.279006] CPU 5\n\u003e [   11.279336] Modules linked in:\n\u003e [   11.279752] Pid: 0, comm: swapper Not tainted 2.6.27-rc2-00020-g685d87f #290\n\u003e [   11.280039] RIP: 0010:[\u003cffff8802ffffffff\u003e]  [\u003cffff8802ffffffff\u003e] 0xffff8802ffffffff\n\u003e [   11.280692] RSP: 0018:ffff88027f1f7f70  EFLAGS: 00010086\n\u003e [   11.280976] RAX: 00000000ffffffff RBX: 0000000000000000 RCX: 0000000000000000\n\u003e [   11.281264] RDX: 0000000000004f4e RSI: 0000000000000001 RDI: 0000000000000000\n\u003e [   11.281624] RBP: ffff88027f1f7f98 R08: 0000000000000001 R09: ffffffff802509af\n\u003e [   11.281925] R10: ffff8800280c2780 R11: 0000000000000000 R12: ffff88027f097d48\n\u003e [   11.282214] R13: ffff88027f097d70 R14: 0000000000000005 R15: ffff88027e571000\n\u003e [   11.282502] FS:  0000000000000000(0000) GS:ffff88027f1c3340(0000) knlGS:0000000000000000\n\u003e [   11.283096] CS:  0010 DS: 0018 ES: 0018 CR0: 000000008005003b\n\u003e [   11.283382] CR2: ffff8802ffffffff CR3: 0000000000201000 CR4: 00000000000006e0\n\u003e [   11.283760] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000\n\u003e [   11.284048] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400\n\u003e [   11.284337] Process swapper (pid: 0, threadinfo ffff88027f1f2000, task ffff88027f1f0640)\n\u003e [   11.284936] Stack:  ffffffff80250963 0000000000000212 0000000000ee8c78 0000000000ee8a66\n\u003e [   11.285802]  ffff88027e571550 ffff88027f1f7fa8 ffffffff8021adb5 ffff88027f1f3e40\n\u003e [   11.286599]  ffffffff8020bdd6 ffff88027f1f3e40 \u003cEOI\u003e  ffff88027f1f3ef8 0000000000000000\n\u003e [   11.287120] Call Trace:\n\u003e [   11.287768]  \u003cIRQ\u003e  [\u003cffffffff80250963\u003e] ? generic_smp_call_function_interrupt+0x61/0x12c\n\u003e [   11.288354]  [\u003cffffffff8021adb5\u003e] smp_call_function_interrupt+0x17/0x27\n\u003e [   11.288744]  [\u003cffffffff8020bdd6\u003e] call_function_interrupt+0x66/0x70\n\u003e [   11.289030]  \u003cEOI\u003e  [\u003cffffffff8024ab3b\u003e] ? clockevents_notify+0x19/0x73\n\u003e [   11.289380]  [\u003cffffffff803b9b75\u003e] ? acpi_idle_enter_simple+0x18b/0x1fa\n\u003e [   11.289760]  [\u003cffffffff803b9b6b\u003e] ? acpi_idle_enter_simple+0x181/0x1fa\n\u003e [   11.290051]  [\u003cffffffff8053aeca\u003e] ? cpuidle_idle_call+0x70/0xa2\n\u003e [   11.290338]  [\u003cffffffff80209f61\u003e] ? cpu_idle+0x5f/0x7d\n\u003e [   11.290723]  [\u003cffffffff8060224a\u003e] ? start_secondary+0x14d/0x152\n\u003e [   11.291010]\n\u003e [   11.291287]\n\u003e [   11.291654] Code:  Bad RIP value.\n\u003e [   11.292041] RIP  [\u003cffff8802ffffffff\u003e] 0xffff8802ffffffff\n\u003e [   11.292380]  RSP \u003cffff88027f1f7f70\u003e\n\u003e [   11.292741] CR2: ffff8802ffffffff\n\u003e [   11.310951] ---[ end trace 137c54d525305f1c ]---\n\u003e\n\u003e The problem is with the following sequence of events:\n\u003e\n\u003e - CPU A calls smp_call_function_mask() for CPU B with wait parameter\n\u003e - CPU A sets up the call_function_data on the stack and does an rcu add to\n\u003e   call_function_queue\n\u003e - CPU A waits until the WAIT flag is cleared\n\u003e - CPU B gets the call function interrupt and starts going through the\n\u003e   call_function_queue\n\u003e - CPU C also gets some other call function interrupt and starts going through\n\u003e   the call_function_queue\n\u003e - CPU C, which is also going through the call_function_queue, starts referencing\n\u003e   CPU A\u0027s stack, as that element is still in call_function_queue\n\u003e - CPU B finishes the function call that CPU A set up and as there are no other\n\u003e   references to it, rcu deletes the call_function_data (which was from CPU A\n\u003e   stack)\n\u003e - CPU B sees the wait flag and just clears the flag (no call_rcu to free)\n\u003e - CPU A which was waiting on the flag continues executing and the stack\n\u003e   contents change\n\u003e\n\u003e - CPU C is still in rcu_read section accessing the CPU A\u0027s stack sees\n\u003e   inconsistent call_funation_data and can try to execute\n\u003e   function with some random pointer, causing stack corruption for A\n\u003e   (by clearing the bits in mask field) and oops.\n\nNice debugging work.\n\nI\u0027d suggest something like the attached (boot tested) patch as the simple\nfix for now.\n\nI expect the benefits from the less synchronized, multiple-in-flight-data\nglobal queue will still outweigh the costs of dynamic allocations. But\nif worst comes to worst then we just go back to a globally synchronous\none-at-a-time implementation, but that would be pretty sad!\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "7babe8db99d305340cf4828ce1f5a1481d5622ef",
      "tree": "fdac7a084646bb6d125ebc62b0b75806e45d1025",
      "parents": [
        "c2147a5092cfe13dbf3210e54e8a622015edeecc"
      ],
      "author": {
        "name": "Eduard - Gabriel Munteanu",
        "email": "eduard.munteanu@linux360.ro",
        "time": "Fri Jul 25 19:45:11 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Jul 26 12:00:04 2008 -0700"
      },
      "message": "Full conversion to early_initcall() interface, remove old interface\n\nA previous patch added the early_initcall(), to allow a cleaner hooking of\npre-SMP initcalls.  Now we remove the older interface, converting all\nexisting users to the new one.\n\n[akpm@linux-foundation.org: cleanups]\n[akpm@linux-foundation.org: build fix]\n[kosaki.motohiro@jp.fujitsu.com: warning fix]\n[kosaki.motohiro@jp.fujitsu.com: warning fix]\nSigned-off-by: Eduard - Gabriel Munteanu \u003ceduard.munteanu@linux360.ro\u003e\nCc: Tom Zanussi \u003ctzanussi@gmail.com\u003e\nSigned-off-by: KOSAKI Motohiro \u003ckosaki.motohiro@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "63cf13b77ab785e87c867defa8545e6d4a989774",
      "tree": "b71d0a77a59f58f90de9d24d3ecaf6f4eab67fca",
      "parents": [
        "59190f4213462f191fc0d22d39b1cf18ea39ca39"
      ],
      "author": {
        "name": "Jeremy Fitzhardinge",
        "email": "jeremy@goop.org",
        "time": "Tue Jul 15 13:22:49 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 15 14:12:20 2008 -0700"
      },
      "message": "generic ipi function calls: wait on alloc failure fallback\n\nWhen a GFP_ATOMIC allocation fails, it falls back to allocating the\ndata on the stack and converting it to a waiting call.\n\nMake sure we actually wait in this case.\n\nSigned-off-by: Jeremy Fitzhardinge \u003cjeremy.fitzhardinge@citrix.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "59190f4213462f191fc0d22d39b1cf18ea39ca39",
      "tree": "8f30fa62ae7d8948e7974dfecede3d6a41ae3ec3",
      "parents": [
        "64fd52a52077d3cd5a778ca031c0aaecf885eaa6",
        "f6f88e9bfb6ced9871ed65ebe85c371de3c9e4be"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 15 14:02:33 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Tue Jul 15 14:12:03 2008 -0700"
      },
      "message": "Merge branch \u0027generic-ipi-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip\n\n* \u0027generic-ipi-for-linus\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (22 commits)\n  generic-ipi: more merge fallout\n  generic-ipi: merge fix\n  x86, visws: use mach-default/entry_arch.h\n  x86, visws: fix generic-ipi build\n  generic-ipi: fixlet\n  generic-ipi: fix s390 build bug\n  generic-ipi: fix linux-next tree build failure\n  fix: \"smp_call_function: get rid of the unused nonatomic/retry argument\"\n  fix: \"smp_call_function: get rid of the unused nonatomic/retry argument\"\n  fix \"smp_call_function: get rid of the unused nonatomic/retry argument\"\n  on_each_cpu(): kill unused \u0027retry\u0027 parameter\n  smp_call_function: get rid of the unused nonatomic/retry argument\n  sh: convert to generic helpers for IPI function calls\n  parisc: convert to generic helpers for IPI function calls\n  mips: convert to generic helpers for IPI function calls\n  m32r: convert to generic helpers for IPI function calls\n  arm: convert to generic helpers for IPI function calls\n  alpha: convert to generic helpers for IPI function calls\n  ia64: convert to generic helpers for IPI function calls\n  powerpc: convert to generic helpers for IPI function calls\n  ...\n\nFix trivial conflicts due to rcu updates in kernel/rcupdate.c manually\n"
    },
    {
      "commit": "ce0d1b6f73870878aae622b72e85fe8f7a16b51c",
      "tree": "da0be66d6c13e4b2bc4f304b3c367f60839d1c31",
      "parents": [
        "127a237a1ff49fa5b8e00af91e841598aeea3513"
      ],
      "author": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Jun 27 11:50:32 2008 +0200"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Fri Jun 27 11:50:32 2008 +0200"
      },
      "message": "fix: \"smp_call_function: get rid of the unused nonatomic/retry argument\"\n\nfix:\n\nkernel/smp.c: In function \u0027smp_call_function_mask\u0027:\nkernel/smp.c:303: error: too many arguments to function \u0027smp_call_function_single\u0027\n\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "8691e5a8f691cc2a4fda0651e8d307aaba0e7d68",
      "tree": "6cb6767064d2d43441212566da2d83dcc9a0cd8e",
      "parents": [
        "490f5de52a87063fcb40e3b22f61b0779603ff6d"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Fri Jun 06 11:18:06 2008 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Jun 26 11:24:35 2008 +0200"
      },
      "message": "smp_call_function: get rid of the unused nonatomic/retry argument\n\nIt\u0027s never used and the comments refer to nonatomic and retry\ninterchangably. So get rid of it.\n\nAcked-by: Jeremy Fitzhardinge \u003cjeremy.fitzhardinge@citrix.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    },
    {
      "commit": "3d4422332711ef48ef0f132f1fcbfcbd56c7f3d1",
      "tree": "9fd3cfa9825e8cb0b7e08dfae85cc9a722442849",
      "parents": [
        "543cf4cb3fe6f6cae3651ba918b9c56200b257d0"
      ],
      "author": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Jun 26 11:21:34 2008 +0200"
      },
      "committer": {
        "name": "Jens Axboe",
        "email": "jens.axboe@oracle.com",
        "time": "Thu Jun 26 11:21:34 2008 +0200"
      },
      "message": "Add generic helpers for arch IPI function calls\n\nThis adds kernel/smp.c which contains helpers for IPI function calls. In\naddition to supporting the existing smp_call_function() in a more efficient\nmanner, it also adds a more scalable variant called smp_call_function_single()\nfor calling a given function on a single CPU only.\n\nThe core of this is based on the x86-64 patch from Nick Piggin, lots of\nchanges since then. \"Alan D. Brunelle\" \u003cAlan.Brunelle@hp.com\u003e has\ncontributed lots of fixes and suggestions as well. Also thanks to\nPaul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e for reviewing RCU usage\nand getting rid of the data allocation fallback deadlock.\n\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nReviewed-by: Paul E. McKenney \u003cpaulmck@linux.vnet.ibm.com\u003e\nSigned-off-by: Jens Axboe \u003cjens.axboe@oracle.com\u003e\n"
    }
  ]
}
