)]}'
{
  "commit": "d565b0a1a9b6ee7dff46e1f68b26b526ac11ae50",
  "tree": "3526815ab2b60c37f474c25ad1d8fb207644efcc",
  "parents": [
    "1a881f27c50b4fbd6858a8696a189263621136b0"
  ],
  "author": {
    "name": "Herbert Xu",
    "email": "herbert@gondor.apana.org.au",
    "time": "Mon Dec 15 23:38:52 2008 -0800"
  },
  "committer": {
    "name": "David S. Miller",
    "email": "davem@davemloft.net",
    "time": "Mon Dec 15 23:38:52 2008 -0800"
  },
  "message": "net: Add Generic Receive Offload infrastructure\n\nThis patch adds the top-level GRO (Generic Receive Offload) infrastructure.\nThis is pretty similar to LRO except that this is protocol-independent.\nInstead of holding packets in an lro_mgr structure, they\u0027re now held in\nnapi_struct.\n\nFor drivers that intend to use this, they can set the NETIF_F_GRO bit and\ncall napi_gro_receive instead of netif_receive_skb or just call netif_rx.\nThe latter will call napi_receive_skb automatically.  When napi_gro_receive\nis used, the driver must either call napi_complete/napi_rx_complete, or\ncall napi_gro_flush in softirq context if the driver uses the primitives\n__napi_complete/__napi_rx_complete.\n\nProtocols will set the gro_receive and gro_complete function pointers in\norder to participate in this scheme.\n\nIn addition to the packet, gro_receive will get a list of currently held\npackets.  Each packet in the list has a same_flow field which is non-zero\nif it is a potential match for the new packet.  For each packet that may\nmatch, they also have a flush field which is non-zero if the held packet\nmust not be merged with the new packet.\n\nOnce gro_receive has determined that the new skb matches a held packet,\nthe held packet may be processed immediately if the new skb cannot be\nmerged with it.  In this case gro_receive should return the pointer to\nthe existing skb in gro_list.  Otherwise the new skb should be merged into\nthe existing packet and NULL should be returned, unless the new skb makes\nit impossible for any further merges to be made (e.g., FIN packet) where\nthe merged skb should be returned.\n\nWhenever the skb is merged into an existing entry, the gro_receive\nfunction should set NAPI_GRO_CB(skb)-\u003esame_flow.  Note that if an skb\nmerely matches an existing entry but can\u0027t be merged with it, then\nthis shouldn\u0027t be set.\n\nIf gro_receive finds it pointless to hold the new skb for future merging,\nit should set NAPI_GRO_CB(skb)-\u003eflush.\n\nHeld packets will be flushed by napi_gro_flush which is called by\nnapi_complete and napi_rx_complete.\n\nCurrently held packets are stored in a singly liked list just like LRO.\nThe list is limited to a maximum of 8 entries.  In future, this may be\nexpanded to use a hash table to allow more flows to be held for merging.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bdf5465deb91963f47db9f882bc5ec9baf237648",
      "old_mode": 33188,
      "old_path": "include/linux/netdevice.h",
      "new_id": "58856b6737fb65087d88bfe15d2b7fe129262581",
      "new_mode": 33188,
      "new_path": "include/linux/netdevice.h"
    },
    {
      "type": "modify",
      "old_id": "e3d79593fb3a53186523071b4e22d6fbee47e79a",
      "old_mode": 33188,
      "old_path": "include/linux/netpoll.h",
      "new_id": "e38d3c9dccda9471e62f0102a6e20c5a3140e032",
      "new_mode": 33188,
      "new_path": "include/linux/netpoll.h"
    },
    {
      "type": "modify",
      "old_id": "e415f0b0d0d0fc0cafa7cbde8f523ff1c5e201bf",
      "old_mode": 33188,
      "old_path": "net/core/dev.c",
      "new_id": "d8d7d1fccde46c43ecd502447483efe50f919138",
      "new_mode": 33188,
      "new_path": "net/core/dev.c"
    }
  ]
}
