)]}'
{
  "commit": "1832f8a9b02d00977ca1e079bd9e0369763df14c",
  "tree": "82949d1fbea42353809cde2e1634112ce04a5885",
  "parents": [
    "b6eecb182e07a82bae2a5f8c28dadb1bea409090"
  ],
  "author": {
    "name": "Michael Brown",
    "email": "mcb30@ipxe.org",
    "time": "Tue Jul 14 18:24:02 2020 +0100"
  },
  "committer": {
    "name": "Michael Brown",
    "email": "mcb30@ipxe.org",
    "time": "Wed Jul 15 10:09:46 2020 +0100"
  },
  "message": "[efi] Claim SNP devices early in efi_download_start()\n\nClaiming the SNP devices has the side effect of raising the TPL to\niPXE\u0027s normal operating level of TPL_CALLBACK (see the commit message\nfor c89a446 (\"[efi] Run at TPL_CALLBACK to protect against UEFI\ntimers\") for details).  This must happen before executing any code\nthat relies upon the TPL having been raised to TPL_CALLBACK.\n\nThe call to efi_snp_claim() in efi_download_start() currently happens\nonly after the call to xfer_open().  Calling xfer_open() will\ntypically result in a retry timer being started, which will result in\na call to currticks() in order to initialise the timer.  The call to\ncurrticks() will drop to TPL_APPLICATION and restore to TPL_CALLBACK\nin order to allow a timer tick to occur.  Since this call happened\nbefore the call to efi_snp_claim(), the restored TPL is incorrect.\n\nThis in turn results in efi_snp_claim() recording the incorrect\noriginal TPL, causing efi_snp_release() to eventually restore the\nincorrect TPL, causing the system to lock up when ExitBootServices()\nis called at TPL_CALLBACK.\n\nFix by moving the call to efi_snp_claim() to the start of\nefi_download_start().\n\nDebugged-by: Jarrod Johnson \u003cjjohnson2@lenovo.com\u003e\nDebugged-by: He He4 Huang \u003chuanghe4@lenovo.com\u003e\nDebugged-by: James Wang \u003cjameswang@ami.com.tw\u003e\nSigned-off-by: Michael Brown \u003cmcb30@ipxe.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1218852e2f41459c702a46b3e7c4a47599da111f",
      "old_mode": 33188,
      "old_path": "src/interface/efi/efi_download.c",
      "new_id": "8d12bd57c038aaf10e9e5c74ac902a0e3527d91e",
      "new_mode": 33188,
      "new_path": "src/interface/efi/efi_download.c"
    }
  ]
}
