Re: [RFC net-next 1/2] ethtool: add support for controling the type of adaptive coalescing

From: tanhuazhong
Date: Fri Nov 20 2020 - 20:56:15 EST




On 2020/11/21 5:22, Michal Kubecek wrote:
On Fri, Nov 20, 2020 at 02:39:38PM +0100, Andrew Lunn wrote:
On Fri, Nov 20, 2020 at 08:23:22AM +0100, Michal Kubecek wrote:
On Fri, Nov 20, 2020 at 10:59:59AM +0800, tanhuazhong wrote:
On 2020/11/20 6:02, Michal Kubecek wrote:
We could use a similar approach as struct ethtool_link_ksettings, e.g.

struct kernel_ethtool_coalesce {
struct ethtool_coalesce base;
/* new members which are not part of UAPI */
}

get_coalesce() and set_coalesce() would get pointer to struct
kernel_ethtool_coalesce and ioctl code would be modified to only touch
the base (legacy?) part.
> While already changing the ops arguments, we could also add extack
pointer, either as a separate argument or as struct member (I slightly
prefer the former).
If changing the ops arguments, each driver who implement
set_coalesce/get_coalesce of ethtool_ops need to be updated. Is it
acceptable adding two new ops to get/set ext_coalesce info (like
ecc31c60240b ("ethtool: Add link extended state") does)? Maybe i can send V2
in this way, and then could you help to see which one is more suitable?
If it were just this one case, adding an extra op would be perfectly
fine. But from long term point of view, we should expect extending also
other existing ethtool requests and going this way for all of them would
essentially double the number of callbacks in struct ethtool_ops.
coccinella might be useful here.
I played with spatch a bit and it with the spatch and patch below, I got
only three build failures (with allmodconfig) that would need to be
addressed manually - these drivers call the set_coalesce() callback on
device initialization.

I also tried to make the structure argument const in ->set_coalesce()
but that was more tricky as adjusting other functions that the structure
is passed to required either running the spatch three times or repeating
the same two rules three times in the spatch (or perhaps there is
a cleaner way but I'm missing relevant knowledge of coccinelle). Then
there was one more problem in i40e driver which modifies the structure
before passing it on to its helpers. It could be worked around but I'm
not sure if constifying the argument is worth these extra complications.

Michal

will implement it like this in V3.

Regards,
Huazhong.