)]}'
{
  "commit": "b830ab665ad96c6b20d51a89b35cbc09ab5a2c29",
  "tree": "57c2c75b3e069f9f244259ae02f6f2fe3de68612",
  "parents": [
    "aac0aadf09b98ba36eab0bb02a560ebcb82ac39f"
  ],
  "author": {
    "name": "David S. Miller",
    "email": "davem@davemloft.net",
    "time": "Tue Feb 28 15:10:26 2006 -0800"
  },
  "committer": {
    "name": "David S. Miller",
    "email": "davem@sunset.davemloft.net",
    "time": "Mon Mar 20 01:14:09 2006 -0800"
  },
  "message": "[SPARC64]: Fix bugs in SUN4V cpu mondo dispatch.\n\nThere were several bugs in the SUN4V cpu mondo dispatch code.\n\nIn fact, if we ever got a EWOULDBLOCK or other error from\nthe hypervisor call, we\u0027d potentially send a cpu mondo multiple\ntimes to the same cpu and even worse we could loop until the\ntimeout resending the same mondo over and over to such cpus.\n\nSo let\u0027s bulletproof this thing as follows:\n\n1) Implement cpu_mondo_send() and cpu_state() hypervisor calls\n   in arch/sparc64/kernel/entry.S, add prototypes to asm/hypervisor.h\n\n2) Don\u0027t build and update the cpulist using inline functions, this\n   was causing the cpu mask to not get updated in the caller.\n\n3) Disable interrupts during the entire mondo send, otherwise our\n   cpu list and/or mondo block could get overwritten if we take\n   an interrupt and do a cpu mondo send on the current cpu.\n\n4) Check for all possible error return types from the cpu_mondo_send()\n   hypervisor call.  In particular:\n\n   HV_EOK) Our work is done, all cpus have received the mondo.\n   HV_CPUERROR) One or more of the cpus in the cpu list we passed\n                to the hypervisor are in error state.  Use cpu_state()\n                calls over the entries in the cpu list to see which\n\t\tones.  Record them in \"error_mask\" and report this\n\t\tafter we are done sending the mondo to cpus which are\n\t\tnot in error state.\n   HV_EWOULDBLOCK) We need to keep trying.\n\n   Any other error we consider fatal, we report the event and exit\n   immediately.\n\n5) We only timeout if forward progress is not made.  Forward progress\n   is defined as having at least one cpu get the mondo successfully\n   in a given cpu_mondo_send() call.  Otherwise we bump a counter\n   and delay a little.  If the counter hits a limit, we signal an\n   error and report the event.\n\nAlso, smp_call_function_mask() error handling reports the number\nof cpus incorrectly.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9f3048e64e8441a0b672dab91531a2d2b1b2d31c",
      "old_mode": 33188,
      "old_path": "arch/sparc64/kernel/entry.S",
      "new_id": "6d0b3ed77a02ba67a121219f8d38653527caab39",
      "new_mode": 33188,
      "new_path": "arch/sparc64/kernel/entry.S"
    },
    {
      "type": "modify",
      "old_id": "eb7c0f855ba7c03e1b3c0e59061660fd083aeee1",
      "old_mode": 33188,
      "old_path": "arch/sparc64/kernel/smp.c",
      "new_id": "6bc7fd47e443e5bf5ffb4cacc5a2c915397777bf",
      "new_mode": 33188,
      "new_path": "arch/sparc64/kernel/smp.c"
    },
    {
      "type": "modify",
      "old_id": "726e2ea03ce348dd986ba2f9bfd58e84e213d2d8",
      "old_mode": 33188,
      "old_path": "include/asm-sparc64/hypervisor.h",
      "new_id": "612bf319753fe0dfbfc4a3e5e204295b52e97797",
      "new_mode": 33188,
      "new_path": "include/asm-sparc64/hypervisor.h"
    }
  ]
}
