[Bug 266973] [e1000] incorrect behavior when media and mediaopt are set to 100BaseTX full-duplex

From: <bugzilla-noreply_at_freebsd.org>
Date: Mon, 07 Nov 2022 20:50:12 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=266973

--- Comment #2 from Kristof Provost <kp@freebsd.org> ---
We've taken a look at the PHY interactions with this dtrace snippet:

dtrace -n 'fbt::e1000_read_phy_reg_82580:entry { printf("read(%#x)", arg1);
self->data = arg2; }' -n 'fbt::e1000_read_phy_reg_82580:return { printf("=>
%#x", *(uint16_t *)self->data); }' -n 'fbt::e1000_write_phy_reg_82580:entry {
printf("write(%#x, %#x)", arg1, arg2); }' -c "ifconfig igb0 media 100BaseTX
mediaopt full-duplex"


It's a bit strange that running the command to force 100-full with dtrace does
not entail the problem. but running again ifconfig igb1 media auto; ifconfig
igb1 media 100BaseTX mediaopt full-duplex; entails the problem again. See the
bellow output:

[root@r640fw7m ~]# ifconfig igb1 media auto
[root@r640fw7m ~]# ifconfig igb1
igb1: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
   
options=4e100bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,VLAN_HWFILTER,RXCSUM_IPV6,TXCSUM_IPV6,NOMAP>
    ether e4:43:4b:de:53:03
    inet 10.2.7.141 netmask 0xffff0000 broadcast 10.2.255.255
    media: Ethernet autoselect (100baseTX )
    status: active
    nd6 options=1
[root@r640fw7m ~]# dtrace -n 'fbt::e1000_read_phy_reg_82580:entry {
printf("read(%#x)", arg1); self->data = arg2; }' -n
'fbt::e1000_read_phy_reg_82580:return { printf("=> %#x", *(uint16_t
*)self->data); }' -n 'fbt::e1000_write_phy_reg_82580:entry { printf("write(%#x,
%#x)", arg1, arg2); }' -c "ifconfig igb1 media 100BaseTX mediaopt full-duplex"
dtrace: description 'fbt::e1000_read_phy_reg_82580:entry ' matched 1 probe
dtrace: description 'fbt::e1000_read_phy_reg_82580:return ' matched 1 probe
dtrace: description 'fbt::e1000_write_phy_reg_82580:entry ' matched 1 probe
dtrace: pid 31422 has exited
CPU     ID                    FUNCTION:NAME
 26   4923   e1000_read_phy_reg_82580:entry read(0x16)
 26   4924  e1000_read_phy_reg_82580:return => 0x7f08
 26   4925  e1000_write_phy_reg_82580:entry write(0x16, 0xff08)
 26   4923   e1000_read_phy_reg_82580:entry read(0x12)
 26   4924  e1000_read_phy_reg_82580:return => 0x840a
 26   4925  e1000_write_phy_reg_82580:entry write(0x12, 0x840a)
 26   4923   e1000_read_phy_reg_82580:entry read(0x9)
 26   4924  e1000_read_phy_reg_82580:return => 0x600
 26   4925  e1000_write_phy_reg_82580:entry write(0x9, 0x600)
 26   4923   e1000_read_phy_reg_82580:entry read(0)
 26   4924  e1000_read_phy_reg_82580:return => 0x1040
 26   4925  e1000_write_phy_reg_82580:entry write(0, 0x2100)
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x16)
 26   4924  e1000_read_phy_reg_82580:return => 0x7f08
 26   4925  e1000_write_phy_reg_82580:entry write(0x16, 0xff08)
 26   4923   e1000_read_phy_reg_82580:entry read(0x12)
 26   4924  e1000_read_phy_reg_82580:return => 0x840a
 26   4925  e1000_write_phy_reg_82580:entry write(0x12, 0x840a)
 26   4923   e1000_read_phy_reg_82580:entry read(0x9)
 26   4924  e1000_read_phy_reg_82580:return => 0x600
 26   4925  e1000_write_phy_reg_82580:entry write(0x9, 0x600)
 26   4923   e1000_read_phy_reg_82580:entry read(0)
 26   4924  e1000_read_phy_reg_82580:return => 0x1040
 26   4925  e1000_write_phy_reg_82580:entry write(0, 0x2100)
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
 26   4923   e1000_read_phy_reg_82580:entry read(0x1)
 26   4924  e1000_read_phy_reg_82580:return => 0x7949
  2   4923   e1000_read_phy_reg_82580:entry read(0x1)

[root@r640fw7m ~]# ifconfig igb1
igb1: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
   
options=4e100bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,VLAN_HWFILTER,RXCSUM_IPV6,TXCSUM_IPV6,NOMAP>
    ether e4:43:4b:de:53:03
    inet 10.2.7.141 netmask 0xffff0000 broadcast 10.2.255.255
    media: Ethernet 100baseTX 
    status: active
    nd6 options=1
[root@r640fw7m ~]# ifconfig igb1 media 100BaseTX mediaopt full-duplex
[root@r640fw7m ~]# ifconfig igb1
igb1: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
   
options=4e100bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,VLAN_HWFILTER,RXCSUM_IPV6,TXCSUM_IPV6,NOMAP>
    ether e4:43:4b:de:53:03
    inet 10.2.7.141 netmask 0xffff0000 broadcast 10.2.255.255
    media: Ethernet 100baseTX 
    status: active
    nd6 options=1
[root@r640fw7m ~]# ifconfig igb1 media auto
[root@r640fw7m ~]# ifconfig igb1 media 100BaseTX mediaopt full-duplex
[root@r640fw7m ~]# ifconfig igb1
igb1: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
   
options=4e100bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,VLAN_HWFILTER,RXCSUM_IPV6,TXCSUM_IPV6,NOMAP>
    ether e4:43:4b:de:53:03
    inet 10.2.7.141 netmask 0xffff0000 broadcast 10.2.255.255
    media: Ethernet 100baseTX  (autoselect)
    status: no carrier
    nd6 options=1

-- 
You are receiving this mail because:
You are the assignee for the bug.