)]}'
{
  "commit": "3feebbb5492e9e463467cefb633e23a3dfcec132",
  "tree": "aab5c73bbcd799781b8b27f7173c3e726ea403be",
  "parents": [
    "56ce9e2b2463b3b257098aa966586701d9967f1e"
  ],
  "author": {
    "name": "Hendrik Brueckner",
    "email": "brueckner@linux.vnet.ibm.com",
    "time": "Mon Oct 13 23:12:50 2008 +0000"
  },
  "committer": {
    "name": "Benjamin Herrenschmidt",
    "email": "benh@kernel.crashing.org",
    "time": "Wed Oct 22 10:59:55 2008 +1100"
  },
  "message": "hvc_console: Fix loop if put_char() returns 0\n\nIf put_char() routine of a hvc console backend returns 0, then the\nhvc console starts looping in the following scenarios:\n\n1. hvc_console_print()\n\tIf put_char() returns 0 then the while loop may loop forever.\n\tI have added the missing check for 0 to throw away console messages.\n\n2. khvcd may loop:\n\tThe thread calls hvc_poll() --\u003e hvc_push()... if there are still\n\tbuffered data then the HVC_POLL_WRITE bit is set and causes the\n\tkhvcd thread to loop (if yield() returns immediately).\n\n\tHowever, instead of looping, the khvcd thread could sleep for\n\tMIN_TIMEOUT (doing the same as for get_chars()).\n\tThe MIN_TIMEOUT is set if hvc_push() was not able to write\n\tdata to the backend. If data has been written, the timeout is\n\tset to 0 to immediately re-schedule hvc_poll().\n\nReviewed-by: Christian Borntraeger \u003cborntraeger@de.ibm.com\u003e\nTested-by: Christian Borntraeger \u003cborntraeger@de.ibm.com\u003e (virtio_console)\nSigned-off-by: Hendrik Brueckner \u003cbrueckner@linux.vnet.ibm.com\u003e\nSigned-off-by: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c9d16665c9605382938a4ce6f2525129b3bbcc85",
      "old_mode": 33188,
      "old_path": "drivers/char/hvc_console.c",
      "new_id": "3650c904401efb0a18e42e9e3cf66aef8dbe6e39",
      "new_mode": 33188,
      "new_path": "drivers/char/hvc_console.c"
    }
  ]
}
