)]}'
{
  "log": [
    {
      "commit": "2557a933b795c1988c721ebb871cd735128bb9cb",
      "tree": "96581bd5acac44bbe0399aa445197509d9ae60ff",
      "parents": [
        "4cac04dd63fa3b202ee313ed1afbbd135ab887ee"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Mon Apr 07 14:30:28 2008 +1000"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 07 13:14:22 2008 -0700"
      },
      "message": "virtio: remove overzealous BUG_ON.\n\nThe \u0027disable_cb\u0027 callback is designed as an optimization to tell the host\nwe don\u0027t need callbacks now.  As it is not reliable, the debug check is\noverzealous: it can happen on two CPUs at the same time.  Document this.\n\nEven if it were reliable, the virtio_net driver doesn\u0027t disable\ncallbacks on transmit so the START_USE/END_USE debugging reentrance\nprotection can be easily tripped even on UP.\n\nThanks to Balaji Rao for the bug report and testing.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCC: Balaji Rao \u003cbalajirrao@gmail.com\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4265f161b6bb7b31163671329b1142b9023bf4e3",
      "tree": "1494768aaf38407ca8f1336f6ae80301b27135bb",
      "parents": [
        "da74e89d40995600b3b07ac500084920247687ce"
      ],
      "author": {
        "name": "Christian Borntraeger",
        "email": "borntraeger@de.ibm.com",
        "time": "Fri Mar 14 14:17:05 2008 +0100"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Mon Mar 17 22:58:21 2008 +1100"
      },
      "message": "virtio: fix race in enable_cb\n\nThere is a race in virtio_net, dealing with disabling/enabling the callback.\nI saw the following oops:\n\nkernel BUG at /space/kvm/drivers/virtio/virtio_ring.c:218!\nillegal operation: 0001 [#1] SMP\nModules linked in: sunrpc dm_mod\nCPU: 2 Not tainted 2.6.25-rc1zlive-host-10623-gd358142-dirty #99\nProcess swapper (pid: 0, task: 000000000f85a610, ksp: 000000000f873c60)\nKrnl PSW : 0404300180000000 00000000002b81a6 (vring_disable_cb+0x16/0x20)\n           R:0 T:1 IO:0 EX:0 Key:0 M:1 W:0 P:0 AS:0 CC:3 PM:0 EA:3\nKrnl GPRS: 0000000000000001 0000000000000001 0000000010005800 0000000000000001\n           000000000f3a0900 000000000f85a610 0000000000000000 0000000000000000\n           0000000000000000 000000000f870000 0000000000000000 0000000000001237\n           000000000f3a0920 000000000010ff74 00000000002846f6 000000000fa0bcd8\nKrnl Code: 00000000002b819a: a7110001           tmll    %r1,1\n           00000000002b819e: a7840004           brc     8,2b81a6\n           00000000002b81a2: a7f40001           brc     15,2b81a4\n          \u003e00000000002b81a6: a51b0001           oill    %r1,1\n           00000000002b81aa: 40102000           sth     %r1,0(%r2)\n           00000000002b81ae: 07fe               bcr     15,%r14\n           00000000002b81b0: eb7ff0380024       stmg    %r7,%r15,56(%r15)\n           00000000002b81b6: a7f13e00           tmll    %r15,15872\nCall Trace:\n([\u003c000000000fa0bcd0\u003e] 0xfa0bcd0)\n [\u003c00000000002b8350\u003e] vring_interrupt+0x5c/0x6c\n [\u003c000000000010ab08\u003e] do_extint+0xb8/0xf0\n [\u003c0000000000110716\u003e] ext_no_vtime+0x16/0x1a\n [\u003c0000000000107e72\u003e] cpu_idle+0x1c2/0x1e0\n\nThe problem can be triggered with a high amount of host-\u003eguest traffic.\nI think its the following race:\n\npoll says netif_rx_complete\npoll calls enable_cb\nenable_cb opens the interrupt mask\na new packet comes, an interrupt is triggered----\\\nenable_cb sees that there is more work           |\nenable_cb disables the interrupt                 |\n       .                                         V\n       .                            interrupt is delivered\n       .                            skb_recv_done does atomic napi test, ok\n some waiting                       disable_cb is called-\u003echeck fails-\u003ebang!\n       .\npoll would do napi check\npoll would do disable_cb\n\nThe fix is to let enable_cb not disable the interrupt again, but expect the\ncaller to do the cleanup if it returns false. In that case, the interrupt is\nonly disabled, if the napi test_set_bit was successful.\n\nSigned-off-by: Christian Borntraeger \u003cborntraeger@de.ibm.com\u003e\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e (cleaned up doco)\n"
    },
    {
      "commit": "6e5aa7efb27aec7e55b6463fa2c8db594c4226fa",
      "tree": "060a955e711ac224136157a5410e88dcdab965af",
      "parents": [
        "b3369c1fb410fddeb38a404316c861395f6d6ae8"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Mon Feb 04 23:50:03 2008 -0500"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Mon Feb 04 23:50:03 2008 +1100"
      },
      "message": "virtio: reset function\n\nA reset function solves three problems:\n\n1) It allows us to renegotiate features, eg. if we want to upgrade a\n   guest driver without rebooting the guest.\n\n2) It gives us a clean way of shutting down virtqueues: after a reset,\n   we know that the buffers won\u0027t be used by the host, and\n\n3) It helps the guest recover from messed-up drivers.\n\nSo we remove the -\u003eshutdown hook, and the only way we now remove\nfeature bits is via reset.\n\nWe leave it to the driver to do the reset before it deletes queues:\nthe balloon driver, for example, needs to chat to the host in its\nremove function.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "f957d1f05a1a20bc3b954877c6562a4d53d58bde",
      "tree": "4eb230a96bb15b74050005f40a7ec383e26d13ad",
      "parents": [
        "18445c4d501b9ab4336f66ef46b092661ddaf336"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Mon Feb 04 23:49:58 2008 -0500"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Mon Feb 04 23:49:59 2008 +1100"
      },
      "message": "virtio: configuration change callback\n\nVarious drivers want to know when their configuration information\nchanges: the balloon driver is the immediate user, but the network\ndriver may one day have a \"carrier\" status as well.\n\nThis introduces that callback (lguest doesn\u0027t use it yet).\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "18445c4d501b9ab4336f66ef46b092661ddaf336",
      "tree": "9d23185f207d912942890cf047d1d3200806b401",
      "parents": [
        "a586d4f6016f7139d8c26df0e6927131168d3b5b"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Mon Feb 04 23:49:57 2008 -0500"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Mon Feb 04 23:49:58 2008 +1100"
      },
      "message": "virtio: explicit enable_cb/disable_cb rather than callback return.\n\nIt seems that virtio_net wants to disable callbacks (interrupts) before\ncalling netif_rx_schedule(), so we can\u0027t use the return value to do so.\n\nRename \"restart\" to \"cb_enable\" and introduce \"cb_disable\" hook: callback\nnow returns void, rather than a boolean.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\n"
    },
    {
      "commit": "ec3d41c4db4c21164332826ea8d812f94f2f6886",
      "tree": "9b947e900745cfcc4df7409c6ba5583428964215",
      "parents": [
        "47436aa4ad054c1c7c8231618e86ebd9305308dc"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Mon Oct 22 11:03:36 2007 +1000"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Tue Oct 23 15:49:54 2007 +1000"
      },
      "message": "Virtio interface\n\nThis attempts to implement a \"virtual I/O\" layer which should allow\ncommon drivers to be efficiently used across most virtual I/O\nmechanisms.  It will no-doubt need further enhancement.\n\nThe virtio drivers add buffers to virtio queues; as the buffers are consumed\nthe driver \"interrupt\" callbacks are invoked.\n\nThere is also a generic implementation of config space which drivers can query\nto get setup information from the host.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nCc: Dor Laor \u003cdor.laor@qumranet.com\u003e\nCc: Arnd Bergmann \u003carnd@arndb.de\u003e\n"
    }
  ]
}
