)]}'
{
  "log": [
    {
      "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"
    }
  ]
}
