)]}'
{
  "commit": "3f6aa0b113846a8628baa649af422cfc6fb1d786",
  "tree": "5b3d1f9b112a779dab37db5f685c24e5e857df96",
  "parents": [
    "a0fba3eb059e73fed2d376a901f8117734c12f1f"
  ],
  "author": {
    "name": "Mikael Pettersson",
    "email": "mikpe@it.uu.se",
    "time": "Mon Aug 15 10:11:50 2011 +0000"
  },
  "committer": {
    "name": "David S. Miller",
    "email": "davem@davemloft.net",
    "time": "Mon Aug 15 14:35:19 2011 -0700"
  },
  "message": "sparc32: unbreak arch_write_unlock()\n\nThe sparc32 version of arch_write_unlock() is just a plain assignment.\nUnfortunately this allows the compiler to schedule side-effects in a\nprotected region to occur after the HW-level unlock, which is broken.\nE.g., the following trivial test case gets miscompiled:\n\n\t#include \u003clinux/spinlock.h\u003e\n\trwlock_t lock;\n\tint counter;\n\tvoid foo(void) { write_lock(\u0026lock); ++counter; write_unlock(\u0026lock); }\n\nFixed by adding a compiler memory barrier to arch_write_unlock().  The\nsparc64 version combines the barrier and assignment into a single asm(),\nand implements the operation as a static inline, so that\u0027s what I did too.\n\nCompile-tested with sparc32_defconfig + CONFIG_SMP\u003dy.\n\nSigned-off-by: Mikael Pettersson \u003cmikpe@it.uu.se\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5f5b8bf3f50d39a5c4b8cae94231cdd87543bbfa",
      "old_mode": 33188,
      "old_path": "arch/sparc/include/asm/spinlock_32.h",
      "new_id": "bcc98fc35281c73bed1ae1e35cb4d56aade44794",
      "new_mode": 33188,
      "new_path": "arch/sparc/include/asm/spinlock_32.h"
    }
  ]
}
