Hey there!

I believe I may have encountered a bug with the ice driver. I'm currently
evaluating a few e810 NICs using the ice in-tree driver for kernel
6.16.5-200.fc42.x86_64, and noticed I am unable to get the indirection table
using ethtool_get_rxfh_indir via ioctl. Doing some tracing it looks like
ethtool_get_rxfh_indir calls ice_get_rxfh, which then calls ice_get_rss_key.
In this call sequence the seed passed into ice_get_rss_key will always be null
as ethtool_get_rxfh_indir does not set the key in struct ethtool_rxfh_param
*rxfh and ice_get_rxfh passes the value through to ice_get_rss_key as
*seed without checking if it is null. Then ice_get_rss_key(..) will return
EINVAL when *seed is null.

I compared this to the behavior of the i40e driver, which is the driver we
currently use on our devices. It looks like this can happen on the i40e driver,
however since i40e_get_rxfh has the lookup table (lut) that it creates
locally it will be able to retrieve the indirection table via
ethtool_get_rxfh_indir.

Is this behavior in the ice driver intended? If no, I've got an idea on how to
go about fixing this. Do you have any documentation for creating a patch
for the ice driver? Also I've never done a kernel bisect before, and the
machine that's running the ice driver is quite slow at compiling the kernel.
If anyone knows when this might have been introduced that would be very
helpful.

We're currently evaluating these cards on a timeframe so any help would be
greatly appreciated.

Thanks!

Cody Haas

Reply via email to