summaryrefslogtreecommitdiffstats
path: root/doc/guides/rel_notes/release_2_1.rst
blob: 0c27826f910c551b12a3d9709601705873e9627f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
..  SPDX-License-Identifier: BSD-3-Clause
    Copyright(c) 2010-2015 Intel Corporation.

DPDK Release 2.1
================


New Features
------------

* **Enabled cloning of indirect mbufs.**

  This feature removes a limitation of ``rte_pktmbuf_attach()`` which
  generated the warning: "mbuf we're attaching to must be direct".

  Now, when attaching to an indirect mbuf it is possible to:

   * Copy all relevant fields (address, length, offload, ...) as before.

   * Get the pointer to the mbuf that embeds the data buffer (direct mbuf),
     and increase the reference counter.

   When detaching the mbuf, we can now retrieve this direct mbuf as the
   pointer is determined from the buffer address.


* **Extended packet type support.**

  In previous releases mbuf packet types were indicated by 6 bits in the
  ``ol_flags``. This was not enough for some supported NICs. For example i40e
  hardware can recognize more than 150 packet types. Not being able to
  identify these additional packet types limits access to hardware offload
  capabilities

  So an extended "unified" packet type was added to support all possible
  PMDs. The 16 bit packet_type in the mbuf structure was changed to 32 bits
  and used for this purpose.

  To avoid breaking ABI compatibility, the code changes for this feature are
  enclosed in a ``RTE_NEXT_ABI`` ifdef. This is enabled by default but can be
  turned off for ABI compatibility with DPDK R2.0.


* **Reworked memzone to be allocated by malloc and also support freeing.**

  In the memory hierarchy, memsegs are groups of physically contiguous
  hugepages, memzones are slices of memsegs, and malloc slices memzones
  into smaller memory chunks.

  This feature modifies ``malloc()`` so it partitions memsegs instead of
  memzones. Now  memzones allocate their memory from the malloc heap.

  Backward compatibility with API and ABI are maintained.

  This allow memzones, and any other structure based on memzones, for example
  mempools, to be freed. Currently only the API from freeing memzones is
  supported.


* **Interrupt mode PMD.**

  This feature introduces a low-latency one-shot RX interrupt into DPDK. It
  also adds a polling and interrupt mode switch control example.

  DPDK userspace interrupt notification and handling mechanism is based on
  UIO/VFIO with the following limitations:

  * Per queue RX interrupt events are only allowed in VFIO which supports
    multiple MSI-X vectors.
  * In UIO, the RX interrupt shares the same vector with other
    interrupts. When the RX interrupt and LSC interrupt are both enabled, only
    the former is available.
  * RX interrupt is only implemented for the linuxapp target.
  * The feature is only currently enabled for tow PMDs: ixgbe and igb.


* **Packet Framework enhancements.**

  Several enhancements were made to the Packet Framework:

  * A new configuration file syntax has been introduced for IP pipeline
    applications. Parsing of the configuration file is changed.
  * Implementation of the IP pipeline application is modified to make it more
    structured and user friendly.
  * Implementation of the command line interface (CLI) for each pipeline type
    has been moved to the separate compilation unit. Syntax of pipeline CLI
    commands has been changed.
  * Initialization of IP pipeline is modified to match the new parameters
    structure.
  * New implementation of pass-through pipeline, firewall pipeline, routing
    pipeline, and flow classification has been added.
  * Master pipeline with CLI interface has been added.
  * Added extended documentation of the IP Pipeline.


* **Added API for IEEE1588 timestamping.**

  This feature adds an ethdev API to enable, disable and read IEEE1588/802.1AS
  PTP timestamps from devices that support it. The following functions were
  added:

  * ``rte_eth_timesync_enable()``
  * ``rte_eth_timesync_disable()``
  * ``rte_eth_timesync_read_rx_timestamp()``
  * ``rte_eth_timesync_read_tx_timestamp()``

  The "ieee1588" forwarding mode in testpmd was also refactored to demonstrate
  the new API.


* **Added multicast address filtering.**

  Added multicast address filtering via a new ethdev function
  ``set_mc_addr_list()``.

  This overcomes a limitation in previous releases where the receipt of
  multicast packets on a given port could only be enabled by invoking the
  ``rte_eth_allmulticast_enable()`` function. This method did not work for VFs
  in SR-IOV architectures when the host PF driver does not allow these
  operation on VFs. In such cases, joined multicast addresses had to be added
  individually to the set of multicast addresses that are filtered by the [VF]
  port.


* **Added Flow Director extensions.**

  Several Flow Director extensions were added such as:

  * Support for RSS and Flow Director hashes in vector RX.
  * Added Flow Director for L2 payload.


* **Added RSS hash key size query per port.**

  This feature supports querying the RSS hash key size of each port. A new
  field ``hash_key_size`` has been added in the ``rte_eth_dev_info`` struct
  for storing hash key size in bytes.


* **Added userspace ethtool support.**

  Added userspace ethtool support to provide a familiar interface for
  applications that manage devices via kernel-space ``ethtool_op`` and
  ``net_device_op``.

  The initial implementation focuses on operations that can be implemented
  through existing ``netdev`` APIs. More operations will be supported in later
  releases.


* **Updated the ixgbe base driver.**

  The ixgbe base driver was updated with several changes including the
  following:

  * Added a new 82599 device id.
  * Added new X550 PHY ids.
  * Added SFP+ dual-speed support.
  * Added wait helper for X550 IOSF accesses.
  * Added X550em features.
  * Added X557 PHY LEDs support.
  * Commands for flow director.
  * Issue firmware command when resetting X550em.

  See the git log for full details of the ixgbe/base changes.


* **Added additional hotplug support.**

  Port hotplug support was added to the following PMDs:

  * e1000/igb.
  * ixgbe.
  * i40e.
  * fm10k.
  * ring.
  * bonding.
  * virtio.

  Port hotplug support was added to BSD.


* **Added ixgbe LRO support.**

  Added LRO support for x540 and 82599 devices.


* **Added extended statistics for ixgbe.**

  Implemented ``xstats_get()`` and ``xstats_reset()`` in dev_ops for
  ixgbe to expose detailed error statistics to DPDK applications.

  These will be implemented for other PMDs in later releases.


* **Added proc_info application.**

  Created a new ``proc_info`` application, by refactoring the existing
  ``dump_cfg`` application, to demonstrate the usage of retrieving statistics,
  and the new extended statistics (see above), for DPDK interfaces.


* **Updated the i40e base driver.**

  The i40e base driver was updated with several changes including the
  following:

  *  Support for building both PF and VF driver together.
  *  Support for CEE DCBX on recent firmware versions.
  *  Replacement of ``i40e_debug_read_register()``.
  *  Rework of ``i40e_hmc_get_object_va``.
  *  Update of shadow RAM read/write functions.
  *  Enhancement of polling NVM semaphore.
  *  Enhancements on adminq init and sending asq command.
  *  Update of get/set LED functions.
  *  Addition of AOC phy types to case statement in get_media_type.
  *  Support for iSCSI capability.
  *  Setting of FLAG_RD when sending driver version to FW.

  See the git log for full details of the i40e/base changes.


* **Added support for port mirroring in i40e.**

  Enabled mirror functionality in the i40e driver.


* **Added support for i40e double VLAN, QinQ, stripping and insertion.**

  Added support to the i40e driver for offloading double VLAN (QinQ) tags to
  the mbuf header, and inserting double vlan tags by hardware to the packets
  to be transmitted.  Added a new field ``vlan_tci_outer`` in the ``rte_mbuf``
  struct, and new flags in ``ol_flags`` to support this feature.



* **Added fm10k promiscuous mode support.**

  Added support for promiscuous/allmulticast enable and disable in the fm10k PF
  function. VF is not supported yet.


* **Added fm10k jumbo frame support.**

  Added support for jumbo frame less than 15K in both VF and PF functions in the
  fm10k pmd.


* **Added fm10k mac vlan filtering support.**

  Added support for the fm10k MAC filter, only available in PF. Updated the
  VLAN filter to add/delete one static entry in the MAC table for each
  combination of VLAN and MAC address.


* **Added support for the Broadcom bnx2x driver.**

  Added support for the Broadcom NetXtreme II bnx2x driver.
  It is supported only on Linux 64-bit and disabled by default.


* **Added support for the Chelsio CXGBE driver.**

  Added support for the CXGBE Poll Mode Driver for the Chelsio Terminator 5
  series of 10G/40G adapters.


* **Enhanced support for Mellanox ConnectX-3 driver (mlx4).**

  *  Support Mellanox OFED 3.0.
  *  Improved performance for both RX and TX operations.
  *  Better link status information.
  *  Outer L3/L4 checksum offload support.
  *  Inner L3/L4 checksum offload support for VXLAN.


* **Enabled VMXNET3 vlan filtering.**

  Added support for the VLAN filter functionality of the VMXNET3 interface.


* **Added support for vhost live migration.**

  Added support to allow live migration of vhost. Without this feature, qemu
  will report the following error: "migrate: Migration disabled: vhost lacks
  VHOST_F_LOG_ALL feature".


* **Added support for pcap jumbo frames.**

  Extended the PCAP PMD to support jumbo frames for RX and TX.


* **Added support for the TILE-Gx architecture.**

  Added support for the EZchip TILE-Gx family of SoCs.


* **Added hardware memory transactions/lock elision for x86.**

  Added the use of hardware memory transactions (HTM) on fast-path for rwlock
  and spinlock (a.k.a. lock elision). The methods are implemented for x86
  using Restricted Transactional Memory instructions (Intel(r) Transactional
  Synchronization Extensions). The implementation fall-backs to the normal
  rwlock if HTM is not available or memory transactions fail. This is not a
  replacement for all rwlock usages since not all critical sections protected
  by locks are friendly to HTM. For example, an attempt to perform a HW I/O
  operation inside a hardware memory transaction always aborts the transaction
  since the CPU is not able to roll-back should the transaction
  fail. Therefore, hardware transactional locks are not advised to be used
  around ``rte_eth_rx_burst()`` and ``rte_eth_tx_burst()`` calls.


* **Updated Jenkins Hash function**

  Updated the version of the Jenkins Hash (jhash) function used in DPDK from
  the 1996 version to the 2006 version. This gives up to 35% better
  performance, compared to the original one.

  Note, the hashes generated by the updated version differ from the hashes
  generated by the previous version.


* **Added software implementation of the Toeplitz RSS hash**

  Added a software implementation of the Toeplitz hash function used by RSS. It
  can be used either for packet distribution on a single queue NIC or for
  simulating RSS computation on a specific NIC (for example after GRE header
  de-encapsulation).


* **Replaced the existing hash library with a Cuckoo hash implementation.**

  Replaced the existing hash library with another approach, using the Cuckoo
  Hash method to resolve collisions (open addressing). This method pushes
  items from a full bucket when a new entry must be added to it, storing the
  evicted entry in an alternative location, using a secondary hash function.

  This gives the user the ability to store more entries when a bucket is full,
  in comparison with the previous implementation.

  The API has not been changed, although new fields have been added in the
  ``rte_hash`` structure, which has been changed to internal use only.

  The main change when creating a new table is that the number of entries per
  bucket is now fixed, so its parameter is ignored now (it is still there to
  maintain the same parameters structure).

  Also, the maximum burst size in lookup_burst function hash been increased to
  64, to improve performance.


* **Optimized KNI RX burst size computation.**

  Optimized KNI RX burst size computation by avoiding checking how many
  entries are in ``kni->rx_q`` prior to actually pulling them from the fifo.


* **Added KNI multicast.**

  Enabled adding multicast addresses to KNI interfaces by adding an empty
  callback for ``set_rx_mode`` (typically used for setting up hardware) so
  that the ioctl succeeds. This is the same thing as the Linux tap interface
  does.


* **Added cmdline polling mode.**

  Added the ability to process console input in the same thread as packet
  processing by using the ``poll()`` function.

* **Added VXLAN Tunnel End point sample application.**

  Added a Tunnel End point (TEP) sample application that simulates a VXLAN
  Tunnel Endpoint (VTEP) termination in DPDK. It is used to demonstrate the
  offload and filtering capabilities of Intel XL710 10/40 GbE NICsfor VXLAN
  packets.


* **Enabled combining of the ``-m`` and ``--no-huge`` EAL options.**

  Added option to allow combining of the ``-m`` and ``--no-huge`` EAL command
  line options.

  This allows user application to run as non-root but with higher memory
  allocations, and removes a constraint on ``--no-huge`` mode being limited to
  64M.



Resolved Issues
---------------

* **acl: Fix ambiguity between test rules.**

  Some test rules had equal priority for the same category. That could cause
  an ambiguity in building the trie and test results.


* **acl: Fix invalid rule wildness calculation for bitmask field type.**


* **acl: Fix matching rule.**


* **acl: Fix unneeded trie splitting for subset of rules.**

  When rebuilding a trie for limited rule-set, don't try to split the rule-set
  even further.


* **app/testpmd: Fix crash when port id out of bound.**

  Fixed issues in testpmd where using a port greater than 32 would cause a seg
  fault.

  Fixes: edab33b1c01d ("app/testpmd: support port hotplug")


* **app/testpmd: Fix reply to a multicast ICMP request.**

  Set the IP source and destination addresses in the IP header of the ICMP
  reply.


* **app/testpmd: fix MAC address in ARP reply.**

  Fixed issue where in the ``icmpecho`` forwarding mode, ARP replies from
  testpmd contain invalid zero-filled MAC addresses.

  Fixes: 31db4d38de72 ("net: change arp header struct declaration")


* **app/testpmd: fix default flow control values.**

  Fixes: 422a20a4e62d ("app/testpmd: fix uninitialized flow control variables")


* **bonding: Fix crash when stopping inactive slave.**


* **bonding: Fix device initialization error handling.**


* **bonding: Fix initial link status of slave.**

  On Fortville NIC, link status change interrupt callback was not executed
  when slave in bonding was (re-)started.


* **bonding: Fix socket id for LACP slave.**

  Fixes: 46fb43683679 ("bond: add mode 4")


* **bonding: Fix device initialization error handling.**


* **cmdline: Fix small memory leak.**

  A function in ``cmdline.c`` had a return that did not free the buf properly.


* **config: Enable same drivers options for Linux and BSD.**

  Enabled vector ixgbe and i40e bulk alloc for BSD as it is already done for
  Linux.

  Fixes: 304caba12643 ("config: fix bsd options")
  Fixes: 0ff3324da2eb ("ixgbe: rework vector pmd following mbuf changes")


* **devargs: Fix crash on failure.**

  This problem occurred when passing an invalid PCI id to the blacklist API in
  devargs.


* **e1000/i40e: Fix descriptor done flag with odd address.**


* **e1000/igb: fix ieee1588 timestamping initialization.**

  Fixed issue with e1000 ieee1588 timestamp initialization. On initialization
  the IEEE1588 functions read the system time to set their timestamp. However,
  on some 1G NICs, for example, i350, system time is disabled by default and
  the IEEE1588 timestamp was always 0.


* **eal/bsd: Fix inappropriate header guards.**


* **eal/bsd: Fix virtio on FreeBSD.**

  Closing the ``/dev/io`` fd caused a SIGBUS in inb/outb instructions as the
  process lost the IOPL privileges once the fd is closed.

  Fixes: 8a312224bcde ("eal/bsd: fix fd leak")


* **eal/linux: Fix comments on vfio MSI.**


* **eal/linux: Fix irq handling with igb_uio.**

  Fixed an issue where the introduction of ``uio_pci_generic`` broke
  interrupt handling with igb_uio.

  Fixes: c112df6875a5 ("eal/linux: toggle interrupt for uio_pci_generic")


* **eal/linux: Fix numa node detection.**


* **eal/linux: Fix socket value for undetermined numa node.**

  Sets zero as the default value of pci device numa_node if the socket could
  not be determined. This provides the same default value as FreeBSD which has
  no NUMA support, and makes the return value of ``rte_eth_dev_socket_id()``
  be consistent with the API description.


* **eal/ppc: Fix cpu cycle count for little endian.**

  On IBM POWER8 PPC64 little endian architecture, the definition of tsc union
  will be different. This fix enables the right output from ``rte_rdtsc()``.


* **ethdev: Fix check of threshold for TX freeing.**

  Fixed issue where the parameter to ``tx_free_thresh`` was not consistent
  between the drivers.


* **ethdev: Fix crash if malloc of user callback fails.**

  If ``rte_zmalloc()`` failed in ``rte_eth_dev_callback_register`` then the
  NULL pointer would be dereferenced.


* **ethdev: Fix illegal port access.**

  To obtain a detachable flag, ``pci_drv`` is accessed in
  ``rte_eth_dev_is_detachable()``. However ``pci_drv`` is only valid if port
  is enabled. Fixed by checking ``rte_eth_dev_is_valid_port()`` first.


* **ethdev: Make tables const.**


* **ethdev: Rename and extend the mirror type.**


* **examples/distributor: Fix debug macro.**

  The macro to turn on additional debug output when the app was compiled with
  ``-DDEBUG`` was broken.

  Fixes: 07db4a975094 ("examples/distributor: new sample app")


* **examples/kni: Fix crash on exit.**


* **examples/vhost: Fix build with debug enabled.**

  Fixes: 72ec8d77ac68 ("examples/vhost: rework duplicated code")


* **fm10k: Fix RETA table initialization.**

  The fm10k driver has 128 RETA entries in 32 registers, but it only
  initialized the first 32 when doing multiple RX queue configurations. This
  fix initializes all 128 entries.


* **fm10k: Fix RX buffer size.**


* **fm10k: Fix TX multi-segment frame.**


* **fm10k: Fix TX queue cleaning after start error.**


* **fm10k: Fix Tx queue cleaning after start error.**


* **fm10k: Fix default mac/vlan in switch.**


* **fm10k: Fix interrupt fault handling.**


* **fm10k: Fix jumbo frame issue.**


* **fm10k: Fix mac/vlan filtering.**


* **fm10k: Fix maximum VF number.**


* **fm10k: Fix maximum queue number for VF.**

  Both PF and VF shared code in function ``fm10k_stats_get()``. The function
  worked with PF, but had problems with VF since it has less queues than PF.

  Fixes: a6061d9e7075 ("fm10k: register PF driver")


* **fm10k: Fix queue disabling.**


* **fm10k: Fix switch synchronization.**


* **i40e/base: Fix error handling of NVM state update.**


* **i40e/base: Fix hardware port number for pass-through.**


* **i40e/base: Rework virtual address retrieval for lan queue.**


* **i40e/base: Update LED blinking.**


* **i40e/base: Workaround for PHY type with firmware < 4.4.**


* **i40e: Disable setting of PHY configuration.**


* **i40e: Fix SCTP flow director.**


* **i40e: Fix check of descriptor done flag.**

  Fixes: 4861cde46116 ("i40e: new poll mode driver")
  Fixes: 05999aab4ca6 ("i40e: add or delete flow director")


* **i40e: Fix condition to get VMDQ info.**


* **i40e: Fix registers access from big endian CPU.**


* **i40evf: Clear command when error occurs.**


* **i40evf: Fix RSS with less RX queues than TX queues.**


* **i40evf: Fix crash when setup TX queues.**


* **i40evf: Fix jumbo frame support.**


* **i40evf: Fix offload capability flags.**

  Added checksum offload capability flags which have already been supported
  for a long time.


* **ivshmem: Fix crash in corner case.**

  Fixed issues where depending on the configured segments it was possible to
  hit a segmentation fault as a result of decrementing an unsigned index with
  value 0.


  Fixes: 40b966a211ab ("ivshmem: library changes for mmaping using ivshmem")


* **ixgbe/base: Fix SFP probing.**


* **ixgbe/base: Fix TX pending clearing.**


* **ixgbe/base: Fix X550 CS4227 address.**


* **ixgbe/base: Fix X550 PCIe master disabling.**


* **ixgbe/base: Fix X550 check.**


* **ixgbe/base: Fix X550 init early return.**


* **ixgbe/base: Fix X550 link speed.**


* **ixgbe/base: Fix X550em CS4227 speed mode.**


* **ixgbe/base: Fix X550em SFP+ link stability.**


* **ixgbe/base: Fix X550em UniPHY link configuration.**


* **ixgbe/base: Fix X550em flow control for KR backplane.**


* **ixgbe/base: Fix X550em flow control to be KR only.**


* **ixgbe/base: Fix X550em link setup without SFP.**


* **ixgbe/base: Fix X550em mux after MAC reset.**

  Fixes: d2e72774e58c ("ixgbe/base: support X550")


* **ixgbe/base: Fix bus type overwrite.**


* **ixgbe/base: Fix init handling of X550em link down.**


* **ixgbe/base: Fix lan id before first i2c access.**


* **ixgbe/base: Fix mac type checks.**


* **ixgbe/base: Fix tunneled UDP and TCP frames in flow director.**


* **ixgbe: Check mbuf refcnt when clearing a ring.**

  The function to clear the TX ring when a port was being closed, e.g. on exit
  in testpmd, was not checking the mbuf refcnt before freeing it. Since the
  function in the vector driver to clear the ring after TX does not setting
  the pointer to NULL post-free, this caused crashes if mbuf debugging was
  turned on.


* **ixgbe: Fix RX with buffer address not word aligned.**

  Niantic HW expects the Header Buffer Address in the RXD must be word
  aligned.


* **ixgbe: Fix RX with buffer address not word aligned.**


* **ixgbe: Fix Rx queue reset.**

  Fix to reset vector related RX queue fields to their initial values.

  Fixes: c95584dc2b18 ("ixgbe: new vectorized functions for Rx/Tx")


* **ixgbe: Fix TSO in IPv6.**

  When TSO was used with IPv6, the generated frames were incorrect. The L4
  frame was OK, but the length field of IPv6 header was not populated
  correctly.


* **ixgbe: Fix X550 flow director check.**


* **ixgbe: Fix check for split packets.**

  The check for split packets to be reassembled in the vector ixgbe PMD was
  incorrectly only checking the first 16 elements of the array instead of
  all 32.

  Fixes: cf4b4708a88a ("ixgbe: improve slow-path perf with vector scattered Rx")


* **ixgbe: Fix data access on big endian cpu.**


* **ixgbe: Fix flow director flexbytes offset.**


  Fixes: d54a9888267c ("ixgbe: support flexpayload configuration of flow director")


* **ixgbe: Fix number of segments with vector scattered Rx.**

  Fixes: cf4b4708a88a (ixgbe: improve slow-path perf with vector scattered Rx)


* **ixgbe: Fix offload config option name.**

  The RX_OLFLAGS option was renamed from DISABLE to ENABLE in the driver code
  and Linux config. It is now renamed also in the BSD config and
  documentation.

  Fixes: 359f106a69a9 ("ixgbe: prefer enabling olflags rather than not disabling")


* **ixgbe: Fix release queue mbufs.**

  The calculations of what mbufs were valid in the RX and TX queues were
  incorrect when freeing the mbufs for the vector PMD. This led to crashes due
  to invalid reference counts when mbuf debugging was turned on, and possibly
  other more subtle problems (such as mbufs being freed when in use) in other
  cases.


  Fixes: c95584dc2b18 ("ixgbe: new vectorized functions for Rx/Tx")


* **ixgbe: Move PMD specific fields out of base driver.**

  Move ``rx_bulk_alloc_allowed`` and ``rx_vec_allowed`` from ``ixgbe_hw`` to
  ``ixgbe_adapter``.

  Fixes: 01fa1d6215fa ("ixgbe: unify Rx setup")


* **ixgbe: Rename TX queue release function.**


* **ixgbevf: Fix RX function selection.**

  The logic to select ixgbe the VF RX function is different than the PF.


* **ixgbevf: Fix link status for PF up/down events.**


* **kni: Fix RX loop limit.**

  Loop processing packets dequeued from rx_q was using the number of packets
  requested, not how many it actually received.


* **kni: Fix ioctl in containers, like Docker.**


* **kni: Fix multicast ioctl handling.**


* **log: Fix crash after log_history dump.**


* **lpm: Fix big endian support.**


* **lpm: Fix depth small entry add.**


* **mbuf: Fix cloning with private mbuf data.**

  Added a new ``priv_size`` field in mbuf structure that should be initialized
  at mbuf pool creation. This field contains the size of the application
  private data in mbufs.

  Introduced new static inline functions ``rte_mbuf_from_indirect()`` and
  ``rte_mbuf_to_baddr()`` to replace the existing macros, which take the
  private size into account when attaching and detaching mbufs.


* **mbuf: Fix data room size calculation in pool init.**

  Deduct the mbuf data room size from ``mempool->elt_size`` and ``priv_size``,
  instead of using an hardcoded value that is not related to the real buffer
  size.

  To use ``rte_pktmbuf_pool_init()``, the user can either:

  * Give a NULL parameter to rte_pktmbuf_pool_init(): in this case, the
    private size is assumed to be 0, and the room size is ``mp->elt_size`` -
    ``sizeof(struct rte_mbuf)``.
  * Give the ``rte_pktmbuf_pool_private`` filled with appropriate
    data_room_size and priv_size values.


* **mbuf: Fix init when private size is not zero.**

  Allow the user to use the default ``rte_pktmbuf_init()`` function even if
  the mbuf private size is not 0.


* **mempool: Add structure for object headers.**

  Each object stored in mempools are prefixed by a header, allowing for
  instance to retrieve the mempool pointer from the object. When debug is
  enabled, a cookie is also added in this header that helps to detect
  corruptions and double-frees.

  Introduced a structure that materializes the content of this header,
  and will simplify future patches adding things in this header.


* **mempool: Fix pages computation to determine number of objects.**


* **mempool: Fix returned value after counting objects.**

  Fixes: 148f963fb532 ("xen: core library changes")


* **mlx4: Avoid requesting TX completion events to improve performance.**

  Instead of requesting a completion event for each TX burst, request it on a
  fixed schedule once every MLX4_PMD_TX_PER_COMP_REQ (currently 64) packets to
  improve performance.


* **mlx4: Fix compilation as a shared library and on 32 bit platforms.**


* **mlx4: Fix possible crash on scattered mbuf allocation failure.**

  Fixes issue where failing to allocate a segment, ``mlx4_rx_burst_sp()``
  could call ``rte_pktmbuf_free()`` on an incomplete scattered mbuf whose next
  pointer in the last segment is not set.


* **mlx4: Fix support for multiple vlan filters.**

  This fixes the "Multiple RX VLAN filters can be configured, but only the
  first one works" bug.


* **pcap: Fix storage of name and type in queues.**

  pcap_rx_queue/pcap_tx_queue should store it's own copy of name/type values,
  not the pointer to temporary allocated space.


* **pci: Fix memory leaks and needless increment of map address.**


* **pci: Fix uio mapping differences between linux and bsd.**


* **port: Fix unaligned access to metadata.**

  Fix RTE_MBUF_METADATA macros to allow for unaligned accesses to meta-data
  fields.


* **ring: Fix return of new port id on creation.**


* **timer: Fix race condition.**

  Eliminate problematic race condition in ``rte_timer_manage()`` that can lead
  to corruption of per-lcore pending-lists (implemented as skip-lists).


* **vfio: Fix overflow of BAR region offset and size.**

  Fixes: 90a1633b2347 ("eal/Linux: allow to map BARs with MSI-X tables")


* **vhost: Fix enqueue/dequeue to handle chained vring descriptors.**


* **vhost: Fix race for connection fd.**


* **vhost: Fix virtio freeze due to missed interrupt.**


* **virtio: Fix crash if CQ is not negotiated.**

  Fix NULL dereference if virtio control queue is not negotiated.


* **virtio: Fix ring size negotiation.**

  Negotiate the virtio ring size. The host may allow for very large rings but
  application may only want a smaller ring. Conversely, if the number of
  descriptors requested exceeds the virtio host queue size, then just silently
  use the smaller host size.

  This fixes issues with virtio in non-QEMU environments. For example Google
  Compute Engine allows up to 16K elements in ring.


* **vmxnet3: Fix link state handling.**


Known Issues
------------

* When running the ``vmdq`` sample or ``vhost`` sample applications with the
  Intel(R) XL710 (i40e) NIC, the configuration option
  ``CONFIG_RTE_MAX_QUEUES_PER_PORT`` should be increased from 256 to 1024.


* VM power manager may not work on systems with more than 64 cores.


API Changes
-----------

* The order that user supplied RX and TX callbacks are called in has been
  changed to the order that they were added (fifo) in line with end-user
  expectations. The previous calling order was the reverse of this (lifo) and
  was counter intuitive for users. The actual API is unchanged.


ABI Changes
-----------

* The ``rte_hash`` structure has been changed to internal use only.