)]}'
{
  "commit": "24db39fb2983ca83ab5c6ee37cb57a4f7f6f94e6",
  "tree": "26ff66dac071e30c39fb9a8bbfcd428c01d04fd0",
  "parents": [
    "5202f83345e17c56da4935205f0a97bd4aa20714"
  ],
  "author": {
    "name": "Michael Brown",
    "email": "mcb30@ipxe.org",
    "time": "Tue Dec 03 13:55:18 2024 +0000"
  },
  "committer": {
    "name": "Michael Brown",
    "email": "mcb30@ipxe.org",
    "time": "Tue Dec 03 13:57:06 2024 +0000"
  },
  "message": "[gve] Run startup process only while device is open\n\nThe startup process is scheduled to run when the device is opened and\nterminated (if still running) when the device is closed.  It assumes\nthat the resource allocation performed in gve_open() has taken place,\nand that the admin and transmit/receive data structure pointers are\ntherefore valid.\n\nThe process initialisation in gve_probe() erroneously calls\nprocess_init() rather than process_init_stopped() and will therefore\nschedule the startup process immediately, before the relevant\nresources have been allocated.\n\nThis bug is masked in the typical use case of a Google Cloud instance\nwith a single NIC built with the config/cloud/gce.ipxe embedded\nscript, since the embedded script will immediately open the NIC (and\ntherefore allocate the required resources) before the scheduled\nprocess is allowed to run for the first time.  In a multi-NIC\ninstance, undefined behaviour will arise as soon as the startup\nprocess for the second NIC is allowed to run.\n\nFix by using process_init_stopped() to avoid implicitly scheduling the\nstartup process during gve_probe().\n\nOriginally-fixed-by: Kal Cutter Conley \u003ckalcutterc@nvidia.com\u003e\nSigned-off-by: Michael Brown \u003cmcb30@ipxe.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "df10a94c64f2782971a45d1a79315710ae331359",
      "old_mode": 33188,
      "old_path": "src/drivers/net/gve.c",
      "new_id": "efc38dd21daf67cd6f9b3f1d76a8e7b397ec69cb",
      "new_mode": 33188,
      "new_path": "src/drivers/net/gve.c"
    }
  ]
}
