> On Thu, 2015-12-17 at 06:51 +0000, kan.li...@intel.com wrote:
> [...]
> > --- a/net/core/ethtool.c
> > +++ b/net/core/ethtool.c
> > @@ -1778,6 +1778,37 @@ static int
> ethtool_get_per_queue_coalesce(struct net_device *dev,
> >     return 0;
> >  }
> >
> > +static int ethtool_set_per_queue_coalesce(struct net_device *dev,
> > +                                     void __user *useraddr,
> > +                                     struct ethtool_per_queue_op
> *per_queue_opt) {
> > +   u64 queue_mask;
> > +   int bit, i, ret;
> > +
> > +   if (!dev->ethtool_ops->set_per_queue_coalesce)
> > +           return -EOPNOTSUPP;
> > +
> > +   useraddr += sizeof(*per_queue_opt);
> > +   for (i = 0; i < MAX_QUEUE_MASK; i++) {
> > +           queue_mask = per_queue_opt->queue_mask[i];
> > +           if (queue_mask > 0) {
> > +                   for_each_set_bit(bit, (unsigned long
> *)&queue_mask, 64) {
> > +                           struct ethtool_coalesce coalesce;
> > +
> > +                           if (copy_from_user(&coalesce, useraddr,
> sizeof(coalesce)))
> > +                                   return -EFAULT;
> > +
> > +                           ret = dev->ethtool_ops-
> >set_per_queue_coalesce(dev, bit + i * 64, &coalesce);
> > +                           if (ret != 0)
> > +                                   return ret;
> [...]
> 
> So there's no attempt to roll back on failure?
> 
No, ethtool core doesn’t save the old value for this version. So it's hard to
Rollback.
If we want this feature, the kernel will alloc a chunk of memory to store
coalesce value for masked queues. Is it OK?

> Then, what is the benefit of doing this iteration in the kernel rather than
> userland?
> 
It should save many ioctls.

Thanks,
Kan

Reply via email to