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