• Jeff Garzik's avatar
    ethtool: Add direct access to ops->get_sset_count · d17792eb
    Jeff Garzik authored
    On 03/04/2010 09:26 AM, Ben Hutchings wrote:
    > On Thu, 2010-03-04 at 00:51 -0800, Jeff Kirsher wrote:
    >> From: Jeff Garzik<jgarzik@redhat.com>
    >>
    >> This patch is an alternative approach for accessing string
    >> counts, vs. the drvinfo indirect approach.  This way the drvinfo
    >> space doesn't run out, and we don't break ABI later.
    > [...]
    >> --- a/net/core/ethtool.c
    >> +++ b/net/core/ethtool.c
    >> @@ -214,6 +214,10 @@ static noinline int ethtool_get_drvinfo(struct net_device *dev, void __user *use
    >>   	info.cmd = ETHTOOL_GDRVINFO;
    >>   	ops->get_drvinfo(dev,&info);
    >>
    >> +	/*
    >> +	 * this method of obtaining string set info is deprecated;
    >> +	 * consider using ETHTOOL_GSSET_INFO instead
    >> +	 */
    >
    > This comment belongs on the interface (ethtool.h) not the
    > implementation.
    
    Debatable -- the current comment is located at the callsite of
    ops->get_sset_count(), which is where an implementor might think to add
    a new call.  Not all the numeric fields in ethtool_drvinfo are obtained
    from ->get_sset_count().
    
    Hence the "some" in the attached patch to include/linux/ethtool.h,
    addressing your comment.
    
    > [...]
    >> +static noinline int ethtool_get_sset_info(struct net_device *dev,
    >> +                                          void __user *useraddr)
    >> +{
    > [...]
    >> +	/* calculate size of return buffer */
    >> +	for (i = 0; i<  64; i++)
    >> +		if (sset_mask&  (1ULL<<  i))
    >> +			n_bits++;
    > [...]
    >
    > We have a function for this:
    >
    > 	n_bits = hweight64(sset_mask);
    
    Agreed.
    
    I've attached a follow-up patch, which should enable my/Jeff's kernel
    patch to be applied, followed by this one.
    Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d17792eb
ethtool.c 36.8 KB