All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
To: Florian Fainelli <f.fainelli@gmail.com>
Cc: Jiri Pirko <jiri@resnulli.us>, Scott Feldman <sfeldma@gmail.com>,
	Premkumar Jonnala <pjonnala@broadcom.com>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"davem@davemloft.net" <davem@davemloft.net>,
	"siva.mannem.lnx@gmail.com" <siva.mannem.lnx@gmail.com>,
	"stephen@networkplumber.org" <stephen@networkplumber.org>,
	"roopa@cumulusnetworks.com" <roopa@cumulusnetworks.com>,
	"andrew@lunn.ch" <andrew@lunn.ch>
Subject: Re: [PATCH net-next v3 3/4] bridge: push bridge setting ageing_time down to switchdev
Date: Sun, 11 Oct 2015 18:38:37 -0400	[thread overview]
Message-ID: <20151011223836.GA21128@ketchup.lan> (raw)
In-Reply-To: <CAGVrzcYJo5B_AzKN247_Knqq1r4FTz6cpFXvt927AnR162UoYg@mail.gmail.com>

On Oct. Saturday 10 (41) 05:07 PM, Florian Fainelli wrote:
> 2015-10-10 15:41 GMT-07:00 Vivien Didelot <vivien.didelot@savoirfairelinux.com>:
> > On Oct. Saturday 10 (41) 11:09 PM, Jiri Pirko wrote:
> >> Sat, Oct 10, 2015 at 05:56:19PM CEST, vivien.didelot@savoirfairelinux.com wrote:
> >> >On Oct. Saturday 10 (41) 09:04 AM, Jiri Pirko wrote:
> >> >> Sat, Oct 10, 2015 at 04:53:52AM CEST, sfeldma@gmail.com wrote:
> >> >> >On Thu, Oct 8, 2015 at 9:38 PM, Premkumar Jonnala <pjonnala@broadcom.com> wrote:
> >> >> >>
> >> >> >>
> >> >> >>> -----Original Message-----
> >> >> >>> From: sfeldma@gmail.com [mailto:sfeldma@gmail.com]
> >> >> >>> Sent: Friday, October 09, 2015 7:53 AM
> >> >> >>> To: netdev@vger.kernel.org
> >> >> >>> Cc: davem@davemloft.net; jiri@resnulli.us; siva.mannem.lnx@gmail.com;
> >> >> >>> Premkumar Jonnala; stephen@networkplumber.org;
> >> >> >>> roopa@cumulusnetworks.com; andrew@lunn.ch; f.fainelli@gmail.com;
> >> >> >>> vivien.didelot@savoirfairelinux.com
> >> >> >>> Subject: [PATCH net-next v3 3/4] bridge: push bridge setting ageing_time down
> >> >> >>> to switchdev
> >> >> >>>
> >> >> >>> From: Scott Feldman <sfeldma@gmail.com>
> >> >> >>>
> >> >> >>> Use SWITCHDEV_F_SKIP_EOPNOTSUPP to skip over ports in bridge that don't
> >> >> >>> support setting ageing_time (or setting bridge attrs in general).
> >> >> >>>
> >> >> >>> If push fails, don't update ageing_time in bridge and return err to user.
> >> >> >>>
> >> >> >>> If push succeeds, update ageing_time in bridge and run gc_timer now to
> >> >> >>> recalabrate when to run gc_timer next, based on new ageing_time.
> >> >> >>>
> >> >> >>> Signed-off-by: Scott Feldman <sfeldma@gmail.com>
> >> >> >>> Signed-off-by: Jiri Pirko <jiri@resnulli.us>
> >> >> >
> >> >> ><snip>
> >> >> >
> >> >> >>> +int br_set_ageing_time(struct net_bridge *br, u32 ageing_time)
> >> >> >>> +{
> >> >> >>> +     struct switchdev_attr attr = {
> >> >> >>> +             .id = SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME,
> >> >> >>> +             .flags = SWITCHDEV_F_SKIP_EOPNOTSUPP,
> >> >> >>> +             .u.ageing_time = ageing_time,
> >> >> >>> +     };
> >> >> >>> +     unsigned long t = clock_t_to_jiffies(ageing_time);
> >> >> >>> +     int err;
> >> >> >>> +
> >> >> >>> +     if (t < BR_MIN_AGEING_TIME || t > BR_MAX_AGEING_TIME)
> >> >> >>> +             return -ERANGE;
> >> >> >>> +
> >> >> >>> +     err = switchdev_port_attr_set(br->dev, &attr);
> >> >> >>
> >> >> >> A thought - given that the ageing time is not a per-bridge-port attr, why are we using a "port based api"
> >> >> >> to pass the attribute down?  May be I'm missing something here?
> >> >> >
> >> >> >I think Florian raised the same point earlier.  Sigh, I think this
> >> >> >should be addressed....v4 coming soon...thanks guys for keeping the
> >> >> >standard high.
> >> >>
> >> >> Scott, can you tell us how do you want to address this? I like the
> >> >> current implementation.
> >> >
> >> >Scott, didn't you have a plan to add a struct device for the parent of
> >> >switchdev ports?
> >> >
> >> >I think it would be good to introduce such device with an helper to
> >> >retrieve this upper parent, and move the switchdev ops to this guy.
> >> >
> >> >So switchdev drivers may implement such API calls:
> >> >
> >> >    .obj_add(struct device *swdev, struct switchdev_obj *obj);
> >> >
> >> >    .port_obj_add(struct device *swdev, struct net_device *port,
> >> >                  struct switchdev_obj *obj);
> >> >
> >> >Then switchdev code may have a parent API and the current port API may
> >> >look like this:
> >> >
> >> >    int switchdev_port_obj_add(struct net_device *dev,
> >> >                               struct switchdev_obj *obj)
> >> >    {
> >> >        struct device *swdev = switchdev_get_parent(dev);
> >> >        int err = -EOPNOTSUPP;
> >> >
> >> >        if (swdev && swdev->switchdev_ops &&
> >> >            swdev->switchdev_ops->port_obj_add)
> >> >            err = swdev->switchdev_ops->port_obj_add(swdev, dev, obj);
> >> >
> >> >        return err;
> >> >    }
> >>
> >> Fro the record, I don't see any reason for this "device". It would just
> >> introduce unnecessary complexicity. So far, we are fine without it.
> >
> > I wouldn't say that. I beleive that an Ethernet switch deserves its
> > struct device in the tree, since it is a physical chip, like any other.
> 
> Agreed, but gating these patches because we do not yet have a device
> driver model for an Ethernet switch outside of its individual ports
> does not seem like it hurts the current patch series, nor the existing
> model (and future).

Sure, I didn't mean to NAK the patch with this comment, I just wrote it
because we raised a concern about an API higher than the port level.

> >
> > Configuring it through one of its port (net_device) is fine, since you
> > want to change the port behavior, and Linux config is on per-port basis.
> >
> > But the complexity is already introduced in the struct net_device with
> > the switchdev_ops. These ops really belong to the parent device, not to
> > all of its ports.
> 
> I am not sure if complexity is the correct term here, bloat (to some
> extent) maybe, since with what you are suggesting we could save one
> set of function pointers per-port, and instead move that to a
> global/switch-wide device implementing these operations. In essence,
> there will be per-port switchdev_ops, bridge-specific, and maybe in
> the future switch device specific.

Exact. I think that a switch net_device port should just have a pointer
or something to its parent device (the switch) to query its operations.

> >
> > Ideally a switch device would be registered with this set of operations,
> > creates its net_devices, and will be accessible from a port net_device
> > through a netdev helper function.
> 
> I think the core of the discussion for a proper Ethernet switch device
> model is precisely whether we want to have a special network device to
> configure the switch as a whole. It sure would represent one facet of
> the switch device, but not everything else for which we are still
> trying to find out what that is.

I am not even convinced that a switch chip must be represented in the
Linux tree by a net_device. That's basically a chip exposing a bench of
registers to configure and expose not only net interfaces, but also
temperature sensors, and even GPIO sometimes.

Thanks,
-v

  reply	other threads:[~2015-10-11 22:38 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-09  2:23 [PATCH net-next v3 0/4] switchdev: push bridge ageing_time attribute down sfeldma
2015-10-09  2:23 ` [PATCH net-next v3 1/4] switchdev: add bridge ageing_time attribute sfeldma
2015-10-09  4:27   ` Jiri Pirko
2015-10-09  2:23 ` [PATCH net-next v3 2/4] switchdev: skip over ports returning -EOPNOTSUPP when recursing ports sfeldma
2015-10-09  4:27   ` Jiri Pirko
2015-10-09  2:23 ` [PATCH net-next v3 3/4] bridge: push bridge setting ageing_time down to switchdev sfeldma
2015-10-09  2:40   ` Florian Fainelli
2015-10-09  3:31     ` Scott Feldman
2015-10-09  4:28   ` Jiri Pirko
2015-10-09  4:38   ` Premkumar Jonnala
2015-10-09  6:41     ` Jiri Pirko
2015-10-10  2:53     ` Scott Feldman
2015-10-10  7:04       ` Jiri Pirko
2015-10-10 15:56         ` Vivien Didelot
2015-10-10 21:09           ` Jiri Pirko
2015-10-10 22:41             ` Vivien Didelot
2015-10-11  0:07               ` Florian Fainelli
2015-10-11 22:38                 ` Vivien Didelot [this message]
2015-10-12  4:39                 ` Premkumar Jonnala
2015-10-13  5:39           ` Scott Feldman
2015-10-12  5:43         ` Scott Feldman
2015-10-09  2:23 ` [PATCH net-next v3 4/4] rocker: handle setting bridge ageing_time sfeldma
2015-10-09  4:28   ` Jiri Pirko
2015-10-09  2:40 ` [PATCH net-next v3 0/4] switchdev: push bridge ageing_time attribute down Florian Fainelli
2015-10-09  4:29 ` Jiri Pirko
2015-10-12 12:20 ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20151011223836.GA21128@ketchup.lan \
    --to=vivien.didelot@savoirfairelinux.com \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=f.fainelli@gmail.com \
    --cc=jiri@resnulli.us \
    --cc=netdev@vger.kernel.org \
    --cc=pjonnala@broadcom.com \
    --cc=roopa@cumulusnetworks.com \
    --cc=sfeldma@gmail.com \
    --cc=siva.mannem.lnx@gmail.com \
    --cc=stephen@networkplumber.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.