)]}'
{
  "commit": "4ea9a5c4a2ff22223dc0eae66eca3b41966ccece",
  "tree": "46603774141ec0eeec86a98d535b58e0270ebfc1",
  "parents": [
    "4b593bc3a30e8b7241057ec853d6266bd3fc0e7f"
  ],
  "author": {
    "name": "Barret Rhoden",
    "email": "brho@cs.berkeley.edu",
    "time": "Thu Jun 25 14:01:50 2020 -0400"
  },
  "committer": {
    "name": "Barret Rhoden",
    "email": "brho@cs.berkeley.edu",
    "time": "Thu Jun 25 14:01:50 2020 -0400"
  },
  "message": "tests/linux: support multiple kernel lock tests\n\nJust like userspace, we can now specify multiple tests to run in the\nkernel.  It\u0027s basically the same as in userspace.\n\nThere are a few other fixups.  Notably:\n- disable IRQs for multiple loops.  For whatever reason, disable/enable\nIRQs (even outside the timestmping and critical section) hurts\nperformance (throughput and latency).  Just do it every so often.  Still\nnot 100% on this.\n\n- hold_time is copied into the stack, instead of being global.  We could\nalso make it read_mostly - not sure if that would help.  The issue is\nthat it\u0027s often adjacent to other cache lines in the module.  Such as\nthe cache line holding the lock.  The adjacent cacheline prefetcher\n*might* pull in that cacheline in exclusive mode.  That would cause all\nthreads to take a cache miss when reading hold_time.  You\u0027d think that\ngrabbing the lock would always pull in hold_time for the lock holder,\nbut not necessarily.  It\u0027s an MCS lock, so you might have touched the\nmcs_l a long time ago.  One reason why we wouldn\u0027t miss on hold_time\nwould be if we did READ_ONCE(lock_test) *before grabbing the lock*,\nwhich would also pull in the cacheline.  That would only matter if the\nAClP didn\u0027t always invalidate the line (which is true).  It\u0027s a mess.\nNot 100% on this either.\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "39d07fed4014f3429003f759ca1fdb9df939132e",
      "old_mode": 33188,
      "old_path": "tests/linux/modules/mcs.c",
      "new_id": "59933136398a5514ced011eba21b9443efb5b452",
      "new_mode": 33188,
      "new_path": "tests/linux/modules/mcs.c"
    },
    {
      "type": "modify",
      "old_id": "0dbab609b9c35d7982a04c23082f07f89b2793ee",
      "old_mode": 33188,
      "old_path": "tests/lock_test.c",
      "new_id": "fa5c9a957ea16d83b5ea3b5eef87d9320c4c2a09",
      "new_mode": 33188,
      "new_path": "tests/lock_test.c"
    }
  ]
}
