netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jiri Pirko <jiri@resnulli.us>
To: Shannon Nelson <snelson@pensando.io>
Cc: netdev@vger.kernel.org
Subject: Re: [PATCH v3 net-next 19/19] ionic: Add basic devlink interface
Date: Tue, 9 Jul 2019 08:56:20 +0200	[thread overview]
Message-ID: <20190709065620.GJ2282@nanopsycho.orion> (raw)
In-Reply-To: <6f9ebbca-4f13-b046-477c-678489e6ffbf@pensando.io>

Tue, Jul 09, 2019 at 12:58:00AM CEST, snelson@pensando.io wrote:
>On 7/8/19 1:03 PM, Jiri Pirko wrote:
>> Mon, Jul 08, 2019 at 09:58:09PM CEST, snelson@pensando.io wrote:
>> > On 7/8/19 12:34 PM, Jiri Pirko wrote:
>> > > Mon, Jul 08, 2019 at 09:25:32PM CEST, snelson@pensando.io wrote:
>> > > > 
>> > > > +
>> > > > +static const struct devlink_ops ionic_dl_ops = {
>> > > > +	.info_get	= ionic_dl_info_get,
>> > > > +};
>> > > > +
>> > > > +int ionic_devlink_register(struct ionic *ionic)
>> > > > +{
>> > > > +	struct devlink *dl;
>> > > > +	struct ionic **ip;
>> > > > +	int err;
>> > > > +
>> > > > +	dl = devlink_alloc(&ionic_dl_ops, sizeof(struct ionic *));
>> > > Oups. Something is wrong with your flow. The devlink alloc is allocating
>> > > the structure that holds private data (per-device data) for you. This is
>> > > misuse :/
>> > > 
>> > > You are missing one parent device struct apparently.
>> > > 
>> > > Oh, I think I see something like it. The unused "struct ionic_devlink".
>> > If I'm not mistaken, the alloc is only allocating enough for a pointer, not
>> > the whole per device struct, and a few lines down from here the pointer to
>> > the new devlink struct is assigned to ionic->dl.  This was based on what I
>> > found in the qed driver's qed_devlink_register(), and it all seems to work.
>> I'm not saying your code won't work. What I say is that you should have
>> a struct for device that would be allocated by devlink_alloc()
>
>Is there a particular reason why?  I appreciate that devlink_alloc() can give
>you this device specific space, just as alloc_etherdev_mq() can, but is there

Yes. Devlink manipulates with the whole device. However,
alloc_etherdev_mq() allocates only net_device. These are 2 different
things. devlink port relates 1:1 to net_device. However, devlink
instance can have multiple ports. What I say is do it correctly.


>a specific reason why this should be used instead of setting up simply a
>pointer to a space that has already been allocated?  There are several
>drivers that are using it the way I've setup here, which happened to be the
>first examples I followed - are they doing something different that makes
>this valid for them?

Nope. I'll look at that and fix.


>
>> 
>> The ionic struct should be associated with devlink_port. That you are
>> missing too.
>
>We don't support any of devlink_port features at this point, just the simple
>device information.

No problem, you can still register devlink_port. You don't have to do
much in order to do so.


>
>sln
>
>> 
>> 
>> > That unused struct ionic_devlink does need to go away, it was superfluous
>> > after working out a better typecast off of devlink_priv().
>> > 
>> > I'll remove the unused struct ionic_devlink, but I think the rest is okay.
>> > 
>> > sln
>> > 
>> > > 
>> > > > +	if (!dl) {
>> > > > +		dev_warn(ionic->dev, "devlink_alloc failed");
>> > > > +		return -ENOMEM;
>> > > > +	}
>> > > > +
>> > > > +	ip = (struct ionic **)devlink_priv(dl);
>> > > > +	*ip = ionic;
>> > > > +	ionic->dl = dl;
>> > > > +
>> > > > +	err = devlink_register(dl, ionic->dev);
>> > > > +	if (err) {
>> > > > +		dev_warn(ionic->dev, "devlink_register failed: %d\n", err);
>> > > > +		goto err_dl_free;
>> > > > +	}
>> > > > +
>> > > > +	return 0;
>> > > > +
>> > > > +err_dl_free:
>> > > > +	ionic->dl = NULL;
>> > > > +	devlink_free(dl);
>> > > > +	return err;
>> > > > +}
>> > > > +
>> > > > +void ionic_devlink_unregister(struct ionic *ionic)
>> > > > +{
>> > > > +	if (!ionic->dl)
>> > > > +		return;
>> > > > +
>> > > > +	devlink_unregister(ionic->dl);
>> > > > +	devlink_free(ionic->dl);
>> > > > +}
>> > > > diff --git a/drivers/net/ethernet/pensando/ionic/ionic_devlink.h b/drivers/net/ethernet/pensando/ionic/ionic_devlink.h
>> > > > new file mode 100644
>> > > > index 000000000000..35528884e29f
>> > > > --- /dev/null
>> > > > +++ b/drivers/net/ethernet/pensando/ionic/ionic_devlink.h
>> > > > @@ -0,0 +1,12 @@
>> > > > +/* SPDX-License-Identifier: GPL-2.0 */
>> > > > +/* Copyright(c) 2017 - 2019 Pensando Systems, Inc */
>> > > > +
>> > > > +#ifndef _IONIC_DEVLINK_H_
>> > > > +#define _IONIC_DEVLINK_H_
>> > > > +
>> > > > +#include <net/devlink.h>
>> > > > +
>> > > > +int ionic_devlink_register(struct ionic *ionic);
>> > > > +void ionic_devlink_unregister(struct ionic *ionic);
>> > > > +
>> > > > +#endif /* _IONIC_DEVLINK_H_ */
>> > > > -- 
>> > > > 2.17.1
>> > > > 
>

  reply	other threads:[~2019-07-09  6:56 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-08 19:25 [PATCH v3 net-next 00/19] Add ionic driver Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 01/19] ionic: Add basic framework for IONIC Network device driver Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 02/19] ionic: Add hardware init and device commands Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 03/19] ionic: Add port management commands Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 04/19] ionic: Add basic lif support Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 05/19] ionic: Add interrupts and doorbells Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 06/19] ionic: Add basic adminq support Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 07/19] ionic: Add adminq action Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 08/19] ionic: Add notifyq support Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 09/19] ionic: Add the basic NDO callbacks for netdev support Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 10/19] ionic: Add management of rx filters Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 11/19] ionic: Add Rx filter and rx_mode ndo support Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 12/19] ionic: Add async link status check and basic stats Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 13/19] ionic: Add initial ethtool support Shannon Nelson
2019-07-08 22:04   ` Andrew Lunn
2019-07-09  5:15     ` Michal Kubecek
2019-07-09 22:35       ` Shannon Nelson
2019-07-11 19:10     ` Shannon Nelson
2019-07-09  2:14   ` Andrew Lunn
2019-07-13  5:16     ` Shannon Nelson
2019-07-18  3:28       ` Andrew Lunn
2019-07-19  0:12         ` Shannon Nelson
2019-07-19  2:40           ` Andrew Lunn
2019-07-19 18:41             ` Shannon Nelson
2019-07-19 19:07               ` Andrew Lunn
2019-07-19 20:20                 ` Shannon Nelson
2019-07-09  2:27   ` Andrew Lunn
2019-07-09 22:42     ` Shannon Nelson
2019-07-18  3:21       ` Andrew Lunn
2019-07-18 17:05         ` Shannon Nelson
2019-07-18 17:28           ` Andrew Lunn
2019-07-18 17:54             ` Shannon Nelson
2019-07-09  2:30   ` Andrew Lunn
2019-07-13  5:32     ` Shannon Nelson
2019-07-18  3:31       ` Andrew Lunn
2019-07-18 17:14         ` Shannon Nelson
2019-07-09  5:25   ` Michal Kubecek
2019-07-09 22:34     ` Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 14/19] ionic: Add Tx and Rx handling Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 15/19] ionic: Add netdev-event handling Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 16/19] ionic: Add driver stats Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 17/19] ionic: Add RSS support Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 18/19] ionic: Add coalesce and other features Shannon Nelson
2019-07-08 19:25 ` [PATCH v3 net-next 19/19] ionic: Add basic devlink interface Shannon Nelson
2019-07-08 19:34   ` Jiri Pirko
2019-07-08 19:58     ` Shannon Nelson
2019-07-08 20:03       ` Jiri Pirko
2019-07-08 22:58         ` Shannon Nelson
2019-07-09  6:56           ` Jiri Pirko [this message]
2019-07-09 19:13             ` Shannon Nelson
2019-07-10  6:48               ` Jiri Pirko
2019-07-10 17:06                 ` Shannon Nelson
2019-07-09  1:26   ` Jakub Kicinski
2019-07-09 19:06     ` Shannon Nelson
2019-07-09  2:58 ` [PATCH v3 net-next 00/19] Add ionic driver David Miller
2019-07-09  3:01   ` Shannon Nelson

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=20190709065620.GJ2282@nanopsycho.orion \
    --to=jiri@resnulli.us \
    --cc=netdev@vger.kernel.org \
    --cc=snelson@pensando.io \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).