Subject: Re: [PATCH net-next 0/6] mlxsw: Add extended ACK for EMADs

From: Ido Schimmel <[email-masked]>
Date: Tue, 5 Nov 2019 22:48:26 +0200

On Tue, Nov 05, 2019 at 09:54:48AM -0800, Jakub Kicinski wrote:
> On Tue, 5 Nov 2019 09:46:50 +0200, Ido Schimmel wrote:
> > On Mon, Nov 04, 2019 at 03:33:42PM -0800, Jakub Kicinski wrote:
> > > On Tue, 5 Nov 2019 01:20:36 +0200, Ido Schimmel wrote:  
> > > > On Mon, Nov 04, 2019 at 02:44:19PM -0800, Jakub Kicinski wrote:  
> > > > > On Mon, 4 Nov 2019 23:04:50 +0200, Ido Schimmel wrote:    
> > > > > > I don't understand the problem. If we get an error from firmware today,
> > > > > > we have no clue what the actual problem is. With this we can actually
> > > > > > understand what went wrong. How is it different from kernel passing a
> > > > > > string ("unstructured data") to user space in response to an erroneous
> > > > > > netlink request? Obviously it's much better than an "-EINVAL".    
> > > > > 
> > > > > The difference is obviously that I can look at the code in the kernel
> > > > > and understand it. FW code is a black box. Kernel should abstract its
> > > > > black boxiness away.    
> > > > 
> > > > But FW code is still code and it needs to be able to report errors in a
> > > > way that will aid us in debugging when problems occur. I want meaningful
> > > > errors from applications regardless if I can read their code or not.  
> > > 
> > > And the usual way accessing FW logs is through ethtool dumps.  
> > 
> > I assume you're referring to set_dump() / get_dump_flag() /
> > get_dump_data() callbacks?
> > 
> > In our case it's not really a dump. These are errors that are reported
> > inline to the driver for a specific erroneous operation. We currently
> > can't retrieve them from firmware later on. Using ethtool means that we
> > need to store these errors in the driver and then push them to user
> > space upon get operation. Seems like a stretch to me. Especially when
> > we're already reporting the error code today and this set merely
> > augments it with more data to make the error more specific.
> 
> Hm, the firmware has no log that it keeps? Surely FW runs a lot of
> periodic jobs etc which may encounter some error conditions, how do 
> you deal with those?

There are intrusive out-of-tree modules that can get this information.
It's currently not possible to retrieve this information from the
driver. We try to move away from such methods, but it can't happen
overnight. This set and the work done in the firmware team to add this
new TLV is one step towards that goal.

> Bottom line is I don't like when data from FW is just blindly passed
> to user space.

The same information will be passed to user space regardless if you use
ethtool / devlink / printk.

> Printing to the logs is perhaps the smallest of this sort of
> infractions but nonetheless if there is no precedent for doing this
> today I'd consider not opening this box.

The mlx5 driver prints a 32-bit number that represents a unique error
code from firmware. As a user it tells you nothing, but internally
engineers can correlate it to a specific error.

I think it would be unfortunate to give up on this set due to personal
preferences alone. Just last week it proved its usefulness twice when I
tried to utilize a new firmware API and got it wrong.