)]}'
{
  "commit": "e5b646355770d34eab360ebae93c56c407dfe803",
  "tree": "ed43c57e5ecb4813e126a5f287443baa3af49b92",
  "parents": [
    "dc166e22ede5ffb46b5b18b99ba0321ae545f89b"
  ],
  "author": {
    "name": "John Fastabend",
    "email": "john.r.fastabend@intel.com",
    "time": "Tue Mar 08 03:44:52 2011 +0000"
  },
  "committer": {
    "name": "Jeff Kirsher",
    "email": "jeffrey.t.kirsher@intel.com",
    "time": "Sat Mar 12 04:11:29 2011 -0800"
  },
  "message": "ixgbe: DCB, use multiple Tx rings per traffic class\n\nThis enables multiple {Tx|Rx} rings per traffic class while in DCB\nmode. In order to get this working as expected the tc_to_tx net\ndevice mapping is configured as well as the prio_tc_map.\n\nskb priorities are mapped across a range of queue pairs to get\na distribution per traffic class. The maximum number of\nqueue pairs used while in DCB mode is capped at 64. The hardware\nmax is actually 128 queues but 64 is sufficient for now and\nallocating more seemed a bit excessive. It is easy enough to\nincrease the cap later if need be.\n\nTo get the 802.1Q priority tags inserted correctly ixgbe was\npreviously using the skb queue_mapping field to directly set\nthe 802.1Q priority. This no longer works because we have removed\nthe 1:1 mapping between queues and traffic class. Each ring\nis aligned with an 802.1Qaz traffic class so here we add an\nextra field to the ring struct to identify the 802.1Q traffic\nclass. This uses an extra byte of the ixgbe_ring struct\nfortunately there was a 2byte hole,\n\nstruct ixgbe_ring {\n        void *                     desc;                 /*     0     8 */\n        struct device *            dev;                  /*     8     8 */\n        struct net_device *        netdev;               /*    16     8 */\n        union {\n                struct ixgbe_tx_buffer * tx_buffer_info; /*           8 */\n                struct ixgbe_rx_buffer * rx_buffer_info; /*           8 */\n        };                                               /*    24     8 */\n        long unsigned int          state;                /*    32     8 */\n        u8                         atr_sample_rate;      /*    40     1 */\n        u8                         atr_count;            /*    41     1 */\n        u16                        count;                /*    42     2 */\n        u16                        rx_buf_len;           /*    44     2 */\n        u16                        next_to_use;          /*    46     2 */\n        u16                        next_to_clean;        /*    48     2 */\n        u8                         queue_index;          /*    50     1 */\n        u8                         reg_idx;              /*    51     1 */\n        u16                        work_limit;           /*    52     2 */\n\n        /* XXX 2 bytes hole, try to pack */\n\n        u8 *                       tail;                 /*    56     8 */\n        /* --- cacheline 1 boundary (64 bytes) --- */\n\nNow we can set the VLAN priority directly and it will be\ncorrect. User space can indicate the 802.1Qaz priority\nusing the SO_PRIORITY setsocket() option and QOS layer will\nsteer the skb to the correct rings. Additionally using\nthe multiq qdisc with a queue_mapping action works as\nwell.\n\nSigned-off-by: John Fastabend \u003cjohn.r.fastabend@intel.com\u003e\nTested-by: Ross Brattain \u003cross.b.brattain@intel.com\u003e\nSigned-off-by: Jeff Kirsher \u003cjeffrey.t.kirsher@intel.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "815edfd7d0ee6ce1d8561bfa3897f940cf30aeb5",
      "old_mode": 33188,
      "old_path": "drivers/net/ixgbe/ixgbe.h",
      "new_id": "b7e62d568b8563ab1a8d6f0f93f585bc9274287c",
      "new_mode": 33188,
      "new_path": "drivers/net/ixgbe/ixgbe.h"
    },
    {
      "type": "modify",
      "old_id": "d4b2914376db8c7d2a8ea9dfe44b31579a16b324",
      "old_mode": 33188,
      "old_path": "drivers/net/ixgbe/ixgbe_dcb_nl.c",
      "new_id": "b7b6db3bbd59b71bf2e930d3c22a872046966b88",
      "new_mode": 33188,
      "new_path": "drivers/net/ixgbe/ixgbe_dcb_nl.c"
    },
    {
      "type": "modify",
      "old_id": "4aeade82812adedd745fd192b30d224bbb07e927",
      "old_mode": 33188,
      "old_path": "drivers/net/ixgbe/ixgbe_main.c",
      "new_id": "3694226462dabbaf9ff966c5a063a6e1c049bedc",
      "new_mode": 33188,
      "new_path": "drivers/net/ixgbe/ixgbe_main.c"
    }
  ]
}
