Hi:
In "dp_packet_get_rss_hash", mbuf.hash.rss is returned directly. But when it's DPDK vhost pkt, rss isn't initialized, "dpif_netdev_packet_get_rss_hash" gets a indeterminate value. There is not the same issue for ovs linux vport.
I confirmed it with gdb.

*Flow 1:* 6.0.0.1 -> 6.0.0.2
Breakpoint 3, dpif_netdev_packet_get_rss_hash (packet=0x7f42818ab700, mf=0x7f42e8861ec8) at lib/dpif-netdev.c:3040
3040        if (OVS_UNLIKELY(!hash)) {

(gdb) p hash
$41 = 3543360627
->The value itself is correct, but it's just an uninitialized value of a freed mbuf.

(gdb) p *packet
$43 = {mbuf = {cacheline0 = 0x7f42818ab700, buf_addr = 0x7f42818ab7c0, buf_physaddr = 1099610048,

(gdb) x /128 0x7f42818ab7c0
...
0x7f42818ab840:    0x00000000    0x00000200    0x01000000 0x00450008
0x7f42818ab850:    0x62a25400    0x01400040    0x0006448c 0x00060100
0x7f42818ab860:    0x00080200    0xdc07eb8f    0xbb877700 0x00005577
*
**Flow 2:* 6.0.0.1 -> 6.0.0.3
Breakpoint 3, dpif_netdev_packet_get_rss_hash (packet=0x7f42818ac980, mf=0x7f42e8861ec8) at lib/dpif-netdev.c:3040
3040        if (OVS_UNLIKELY(!hash)) {

(gdb) p hash
$44 = 3543360627
->Actually 2140941696 is correct, the wrong value makes this pkt fall into emc miss.

(gdb) p *packet
$45 = {mbuf = {cacheline0 = 0x7f42818ac980, buf_addr = 0x7f42818aca40, buf_physaddr = 1099614784,

dump the pkt buf:
(gdb) x 0x7f42818aca40
...
0x7f42818acac0:    0x8e290c00    0x0000f65d    0x01000000 0x00450008
0x7f42818acad0:    0x1e205400    0x01400040    0x0006880e 0x00060100
0x7f42818acae0:    0x00080300    0xdd0792f1    0xbb877000 0x00005577

It doesn't cause a problem, just make the pkt fall into a slow path, should we fix it?
The flag ol_flags may be useful for OVS or let DPDK fix this in vhost rcv.

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to