|Summary:||ixgbe - unexpected "ix0: Invalid advertised speed; valid modes are 0x1 through 0x7" at boot time|
|Product:||Base System||Reporter:||Terry Kennedy <terry-freebsd>|
|Component:||kern||Assignee:||freebsd-bugs (Nobody) <bugs>|
|Severity:||Affects Some People||CC:||amd64, smh, terry-freebsd|
Description Terry Kennedy 2016-03-15 12:28:02 UTC
Created attachment 168236 [details] Example console messages and sysctl values Somewhere along the line, the ixgbe driver started printing an unexpected "ix0: Invalid advertised speed; valid modes are 0x1 through 0x7" at boot time as shown in the attachment. The hardware is a retail Intel X540-T1 card at the latest firmware revision. The two (why two?) sysctls in the attachment are at their default value. The 2.8.3 driver in earlier 10.3 builds didn't do this, so it is probably due to something in the 3.1.13-k import. The message seems harmless, but should probably be fixed. Note that simply changing the default value of one / both sysctls may not have the desired effect - a quick look in the driver source shows a bunch of potential error messages when trying to select the advertised speed on (for example) fiber ports.
Comment 1 Steven Hartland 2016-03-15 21:49:53 UTC
The two sysctls are the global default and the interface specific ones so thats fine. The error should only be displayed when changing the setting via a sysctl, so if this happens on boot it seems to infer you have an invalid setting in either /boot/loader.conf or /etc/sysctl.conf for this setting.
Comment 2 Terry Kennedy 2016-03-15 23:01:11 UTC
Created attachment 168271 [details] loader.conf As you say, 0 is the default value and that's what my sysctls are set at. I don't change them in either loader.conf or sysctl.conf (and sysctl.conf should not matter anyway as this error is happening at probe time while the kernel is starting up). I am attaching my entire loader.conf.
Comment 3 Terry Kennedy 2016-03-15 23:02:59 UTC
Correction - I see you did not say that 0 is the default value for those sysctls. Mine are 0 and I didn't change them, so it would seem that 0 is the default regardless.
Comment 4 Terry Kennedy 2016-03-15 23:25:32 UTC
Taking a quick look through the code, it seems that ixgbe_set_advertise() is called from 2 places in if_ix.c: 1) ixgbe_sysctl_advertise(), which has a check to see if the value changed and omits the call if it hasn't. So this probably isn't the problem. 2) ixgbe_attach() calls ixgbe_set_advertise() with ixgbe_advertise_speed which is 0 on a system where the default hasn't changed. This unconditionally enters ixgbe_set_advertise() which would seem to trigger the error message.
Comment 5 Steven Hartland 2016-03-16 00:09:16 UTC
Created attachment 168276 [details] Patch to prevent bogus advertised speed warning on boot Sorry my mistake I was looking at ixl not ixgbe, confusing naming ;-) I can see the issue now, it can be safely ignored but can you try the attached patch to see if it fixes it for you?
Comment 6 Terry Kennedy 2016-03-16 00:39:22 UTC
Yes, that fixes it. Thanks!
Comment 7 commit-hook 2016-03-16 01:42:04 UTC
A commit references this bug: Author: smh Date: Wed Mar 16 01:41:55 UTC 2016 New revision: 296922 URL: https://svnweb.freebsd.org/changeset/base/296922 Log: Prevent invalid ixgbe advertise setting warning Prevent ixgbe outputting "Invalid advertised speed" warning on boot with no customisations by moving test from sysctl handler to set handler. PR: 208022 MFC after: 3 days Sponsored by: Multiplay Changes: head/sys/dev/ixgbe/if_ix.c