From: Ben Hutchings <b...@decadent.org.uk>
Date: Tue, 08 Dec 2015 19:00:52 +0000

> On Tue, 2015-12-08 at 10:02 -0800, Shannon Nelson wrote:
>> On Mon, Dec 7, 2015 at 8:42 PM,  <kan.li...@intel.com> wrote:
>> > From: Kan Liang <kan.li...@intel.com>
>> > 
>> > Intrdouce "queue" option for coalesce getting and setting.
> [...]
>> > --- a/net/core/ethtool.c
>> > +++ b/net/core/ethtool.c
>> > @@ -1123,10 +1123,16 @@ static noinline_for_stack int 
>> > ethtool_get_coalesce(struct net_device *dev,
>> >                                                    void __user *useraddr)
>> >  {
>> >         struct ethtool_coalesce coalesce = { .cmd = ETHTOOL_GCOALESCE };
>> > +       struct ethtool_coalesce tmp = { .queue = -1 };
>> > 
>> >         if (!dev->ethtool_ops->get_coalesce)
>> >                 return -EOPNOTSUPP;
>> > 
>> > +       if (copy_from_user(&tmp, useraddr, sizeof(coalesce)))
>> > +               return -EFAULT;
>> > +
>> > +       coalesce.queue = tmp.queue;
>> > +
>> 
>> Is this going to do what you expect when you have an older ethtool
>> program?  It seems to me that the older ethtool program will have the
>> original coalesce struct without the new queue field, so when you do
> [...]
> 
> Indeed, it's not safe to extend UAPI structures like this.

Agreed, and this is really very far from what I suggested.

Please, make a new ethtool command entirely, that is a container.
Name is 'ETHTOOL_PERQUEUE' or something like that.

It's base type is a structure that describes what queue the
encapsulated operation is to be applied to.

struct ethtool_per_queue_op {
        u32     queue_mask[BITS_TO_LONGS(WHATEVER)];
        u32     sub_command;
        char    data[];
};

Then sub_command can be ETHTOOL_SCOALESCE, or any other ethtool
command that might be valid to be specified on a per-queue basis.
And then at 'data' you have and array of objects, whose type is of
the sub-command's expected type, and has one entry for each bit
set in queue_mask.

If you limit this facility to only ETHTOOL_{S,G}COALESCE now, believe
me you'll regret it.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to