Created attachment 207168 [details] Patch to disable EEE support on X552 devices in the ix driver. Overview: My system has a Xeon-D 1500 series SoC with two 10GbE Intel X552 backplane connections (device ID: 0x15AB). In FreeBSD 12.0 RELEASE, attempting to use the sysctl utility to transition Energy Efficient Ethernet (EEE) states causes a core dump (see below for details). I believe that this is the result of the fact that X552 devices do not support EEE. This assertion is based on the following documentation from Intel: The note below table 1.2 (Network Features) in Section 1.6 of volume 4 of the datasheet for Xeon-D 1500 (https://www.intel.com/content/dam/www/public/us/en/documents/datasheets/xeon-d-1500-datasheet-vol-4.pdf) states: EEE is ONLY supported for 10GBASE-T interfaces via the X557-AT2 PHY. The Intel® Xeon® Processor D-1500 Product Family LANcontroller does not support EEE feature. Furthermore, in the README for the Linux ixgbe driver (version 5.6.1), EEE is listed as an unsupported feature: NOTE: Devices based on the Intel(R) Ethernet Connection X552 and Intel(R) Ethernet Connection X553 do not support the following features: * Energy Efficient Ethernet (EEE) * Intel PROSet for Windows Device Manager * Intel ANS teams or VLANs (LBFO is supported) * Fibre Channel over Ethernet (FCoE) * Data Center Bridging (DCB) * IPSec Offloading * MACSec Offloading The FreeBSD ix driver (version 3.3.10) release README also has a list of unsupported features for X552. However, these lists do not match. The FreeBSD version lists 'Low Latency Interrupts (LLI)' as the only unsupported feature. I have attached a patch (0001-X552-does-not-support-eee.patch) to disable EEE support on X552 devices in the ix driver. This patch was created against r350420 of FreeBSD which was the latest in CURRENT at the time of my investigation. Steps to Reproduce: Attempt to change EEE state via the ix driver eee_state attribute via the sysctl utility. Actual results: Running 12.0 RELEASE FreeBSD from https://svn.freebsd.org/base/releng/12.0, attempting to change the EEE state of an ix adapter: root@bsd:~ # uname -r 12.0-RELEASE root@bsd:~ # sysctl dev.ix.1.eee_state dev.ix.1.eee_state: 1 root@bsd:~ # sysctl dev.ix.1.eee_state=0 Fatal trap 12: page fault while in kernel mode cpuid = 5; apic id = 05 fault virtual address = 0x0 fault code = supervisor read instruction, page not present instruction pointer = 0x20:0x0 stack pointer = 0x28:0xfffffe008a86d718 frame pointer = 0x28:0xfffffe008a86d760 code segment = base rx0, limit 0xfffff, type 0x1b = DPL 0, pres 1, long 1, def32 0, gran 1 processor eflags = interrupt enabled, resume, IOPL = 0 current process = 2424 (sysctl) trap number = 12 panic: page fault cpuid = 5 time = 1563820937 KDB: stack backtrace: #0 0xffffffff80bdcbc7 at kdb_backtrace+0x67 #1 0xffffffff80b907b3 at vpanic+0x1a3 #2 0xffffffff80b90603 at panic+0x43 #3 0xffffffff8106996f at trap_fatal+0x35f #4 0xffffffff810699c9 at trap_pfault+0x49 #5 0xffffffff81068fee at trap+0x29e #6 0xffffffff81044425 at calltrap+0x8 #7 0xffffffff80b9f56b at sysctl_root_handler_locked+0x8b #8 0xffffffff80b9ec27 at sysctl_root+0x257 #9 0xffffffff80b9f29a at userland_sysctl+0x17a #10 0xffffffff80b9f0df at sys___sysctl+0x5f #11 0xffffffff8106a449 at amd64_syscall+0x369 #12 0xffffffff81044d0d at fast_syscall_common+0x101 Uptime: 36m40s Dumping 736 out of 16329 MB:..3%..11%..22%..31%..42%..53%..61%..72%..81%..92% Dump complete I see the same behaviour in CURRENT and core dump on boot in previous versions (11.3). Expected Results: Transition EEE state or error out without coredump. Testing with this patch applied: root@bsd:~/freebsd-ixgbe # sysctl dev.ix.1.eee_state sysctl: unknown oid 'dev.ix.1.eee_state' root@bsd:~/freebsd-ixgbe #
A commit references this bug: Author: erj Date: Tue Oct 15 21:56:20 UTC 2019 New revision: 353599 URL: https://svnweb.freebsd.org/changeset/base/353599 Log: ixgbe: Disable EEE for backplane X550EM_X From Zach: Intel documentation indicates that backplane X550EM_X KR devices do not support Energy Efficient Ethernet. Prior to this patch, X552 devices (device ID 0x15AB) will crash the system when transitioning EEE state via sysctl. Signed-off-by: Zach Vargas <zvargas@xes-inc.com> PR: 240320 Submitted by: Zach Vargas <zvargas@xes-inc.com> Reviewed by: erj@ MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D21673 Changes: head/sys/dev/ixgbe/if_ix.c
(In reply to commit-hook from comment #1) @Eric, If this is a 12.1-R candidate, please add bug 240700 to this issues "Blocks" field
A commit references this bug: Author: erj Date: Wed Oct 16 21:46:49 UTC 2019 New revision: 353665 URL: https://svnweb.freebsd.org/changeset/base/353665 Log: MFC r353660: ixgbe: Disable EEE for backplane X550EM_X This prevents a kernel panic when configuring EEE on X552 devices. PR: 240320 Approved by: re@ (gjb@) Sponsored by: Intel Corporation Changes: _U releng/12.1/ releng/12.1/sys/dev/ixgbe/if_ix.c
A commit references this bug: Author: erj Date: Wed Oct 16 21:54:49 UTC 2019 New revision: 353669 URL: https://svnweb.freebsd.org/changeset/base/353669 Log: MFC r353599 MFCs ixgbe: Disable EEE for backplane X550EM_X This prevents a possible kernel panic on X552 backplane devices. PR: 240320 Sponsored by: Intel Corporation Changes: _U stable/11/ stable/11/sys/dev/ixgbe/if_ix.c