)]}'
{
  "commit": "2d3854a37e8b767a51aba38ed6d22817b0631e33",
  "tree": "3b55cc93720b2e525460216b196ed20298ae985b",
  "parents": [
    "75fa67706cce5272bcfc51ed646f2da21f3bdb6e"
  ],
  "author": {
    "name": "Rusty Russell",
    "email": "rusty@rustcorp.com.au",
    "time": "Wed Nov 05 13:39:10 2008 +1100"
  },
  "committer": {
    "name": "Ingo Molnar",
    "email": "mingo@elte.hu",
    "time": "Thu Nov 06 09:05:33 2008 +0100"
  },
  "message": "cpumask: introduce new API, without changing anything\n\nImpact: introduce new APIs\n\nWe want to deprecate cpumasks on the stack, as we are headed for\ngynormous numbers of CPUs.  Eventually, we want to head towards an\nundefined \u0027struct cpumask\u0027 so they can never be declared on stack.\n\n1) New cpumask functions which take pointers instead of copies.\n   (cpus_* -\u003e cpumask_*)\n\n2) Several new helpers to reduce requirements for temporary cpumasks\n   (cpumask_first_and, cpumask_next_and, cpumask_any_and)\n\n3) Helpers for declaring cpumasks on or offstack for large NR_CPUS\n   (cpumask_var_t, alloc_cpumask_var and free_cpumask_var)\n\n4) \u0027struct cpumask\u0027 for explicitness and to mark new-style code.\n\n5) Make iterator functions stop at nr_cpu_ids (a runtime constant),\n   not NR_CPUS for time efficiency and for smaller dynamic allocations\n   in future.\n\n6) cpumask_copy() so we can allocate less than a full cpumask eventually\n   (for alloc_cpumask_var), and so we can eliminate the \u0027struct cpumask\u0027\n   definition eventually.\n\n7) work_on_cpu() helper for doing task on a CPU, rather than saving old\n   cpumask for current thread and manipulating it.\n\n8) smp_call_function_many() which is smp_call_function_mask() except\n   taking a cpumask pointer.\n\nNote that this patch simply introduces the new functions and leaves\nthe obsolescent ones in place.  This is to simplify the transition\npatches.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d3219d73f8e655f8d33f1b7e3af1a64ccfc2b3df",
      "old_mode": 33188,
      "old_path": "include/linux/cpumask.h",
      "new_id": "c8e66619097bd8a2060bbb988213335fa3fb0407",
      "new_mode": 33188,
      "new_path": "include/linux/cpumask.h"
    },
    {
      "type": "modify",
      "old_id": "2e4d58b26c06a451bf53fdec47eb6ea445739934",
      "old_mode": 33188,
      "old_path": "include/linux/smp.h",
      "new_id": "3f9a60043a975617a3b8217f8e69b24751c13e01",
      "new_mode": 33188,
      "new_path": "include/linux/smp.h"
    },
    {
      "type": "modify",
      "old_id": "89a5a1231ffb28bcff53a4261e187b4a8d77a5df",
      "old_mode": 33188,
      "old_path": "include/linux/workqueue.h",
      "new_id": "b36291130f2237e68c678f525e2e0128ec6c6cd1",
      "new_mode": 33188,
      "new_path": "include/linux/workqueue.h"
    },
    {
      "type": "modify",
      "old_id": "86d49045daed050ee3e1c3d18a8d80d8b1793b85",
      "old_mode": 33188,
      "old_path": "kernel/cpu.c",
      "new_id": "5a732c5ef08b709dd2b7f6162432dfce3076fd11",
      "new_mode": 33188,
      "new_path": "kernel/cpu.c"
    },
    {
      "type": "modify",
      "old_id": "f928f2a87b9b365a8e1d8684902a3ad6f917d6b0",
      "old_mode": 33188,
      "old_path": "kernel/workqueue.c",
      "new_id": "d4dc69ddebd7276684e2564737618859e96fbd1c",
      "new_mode": 33188,
      "new_path": "kernel/workqueue.c"
    },
    {
      "type": "modify",
      "old_id": "5f97dc25ef9c925fb68b83fecec5a7c0114ab339",
      "old_mode": 33188,
      "old_path": "lib/cpumask.c",
      "new_id": "5ceb4211c834380b6911e82e40f76da1694f6f90",
      "new_mode": 33188,
      "new_path": "lib/cpumask.c"
    }
  ]
}
