)]}'
{
  "commit": "35baff256d8fe1eec0b8988fcb5cde80df7bfa1a",
  "tree": "f239537b52023a63ab562c2e31b118214c502aa9",
  "parents": [
    "ca3739327b89bb4053a62ac41b67b106c1967ab0"
  ],
  "author": {
    "name": "Mark McLoughlin",
    "email": "markmc@redhat.com",
    "time": "Fri Jul 04 18:23:15 2008 +0100"
  },
  "committer": {
    "name": "Avi Kivity",
    "email": "avi@qumranet.com",
    "time": "Sun Jul 06 11:05:35 2008 +0300"
  },
  "message": "KVM: IOAPIC: Fix level-triggered irq injection hang\n\nThe \"remote_irr\" variable is used to indicate an interrupt\nwhich has been received by the LAPIC, but not acked.\n\nIn our EOI handler, we unset remote_irr and re-inject the\ninterrupt if the interrupt line is still asserted.\n\nHowever, we do not set remote_irr here, leading to a\nsituation where if kvm_ioapic_set_irq() is called, then we go\nahead and call ioapic_service(). This means that IRR is\nre-asserted even though the interrupt is currently in service\n(i.e. LAPIC IRR is cleared and ISR/TMR set)\n\nThe issue with this is that when the currently executing\ninterrupt handler finishes and writes LAPIC EOI, then TMR is\nunset and EOI sent to the IOAPIC. Since IRR is now asserted,\nbut TMR is not, then when the second interrupt is handled,\nno EOI is sent and if there is any pending interrupt, it is\nnot re-injected.\n\nThis fixes a hang only seen while running mke2fs -j on an\n8Gb virtio disk backed by a fully sparse raw file, with\naliguori \"avoid fragmented virtio-blk transfers by copying\"\nchanges.\n\nSigned-off-by: Mark McLoughlin \u003cmarkmc@redhat.com\u003e\nAcked-by: Marcelo Tosatti \u003cmtosatti@redhat.com\u003e\nSigned-off-by: Avi Kivity \u003cavi@qumranet.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1dcf9f3d110717582db05ce3bc9f7f808a2e32ba",
      "old_mode": 33188,
      "old_path": "virt/kvm/ioapic.c",
      "new_id": "44589088941fa591c9ac2b149a6bab4af20e4994",
      "new_mode": 33188,
      "new_path": "virt/kvm/ioapic.c"
    }
  ]
}
