All of lore.kernel.org
 help / color / mirror / Atom feed
From: Leon Romanovsky <leon@kernel.org>
To: "Ertman, David M" <david.m.ertman@intel.com>
Cc: "alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>,
	"parav@mellanox.com" <parav@mellanox.com>,
	"tiwai@suse.de" <tiwai@suse.de>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>,
	"ranjani.sridharan@linux.intel.com"
	<ranjani.sridharan@linux.intel.com>,
	"fred.oh@linux.intel.com" <fred.oh@linux.intel.com>,
	"linux-rdma@vger.kernel.org" <linux-rdma@vger.kernel.org>,
	"dledford@redhat.com" <dledford@redhat.com>,
	"broonie@kernel.org" <broonie@kernel.org>,
	Parav Pandit <parav@nvidia.com>, Jason Gunthorpe <jgg@nvidia.com>,
	"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
	"kuba@kernel.org" <kuba@kernel.org>,
	"Williams, Dan J" <dan.j.williams@intel.com>,
	"Saleem, Shiraz" <shiraz.saleem@intel.com>,
	"davem@davemloft.net" <davem@davemloft.net>,
	"Patil, Kiran" <kiran.patil@intel.com>
Subject: Re: [PATCH v2 1/6] Add ancillary bus support
Date: Thu, 8 Oct 2020 08:21:37 +0300	[thread overview]
Message-ID: <20201008052137.GA13580@unreal> (raw)
In-Reply-To: <DM6PR11MB28415A8E53B5FFC276D5A2C4DD0A0@DM6PR11MB2841.namprd11.prod.outlook.com>

On Wed, Oct 07, 2020 at 08:46:45PM +0000, Ertman, David M wrote:
> > -----Original Message-----
> > From: Parav Pandit <parav@nvidia.com>
> > Sent: Wednesday, October 7, 2020 1:17 PM
> > To: Leon Romanovsky <leon@kernel.org>; Ertman, David M
> > <david.m.ertman@intel.com>
> > Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>; alsa-
> > devel@alsa-project.org; parav@mellanox.com; tiwai@suse.de;
> > netdev@vger.kernel.org; ranjani.sridharan@linux.intel.com;
> > fred.oh@linux.intel.com; linux-rdma@vger.kernel.org;
> > dledford@redhat.com; broonie@kernel.org; Jason Gunthorpe
> > <jgg@nvidia.com>; gregkh@linuxfoundation.org; kuba@kernel.org; Williams,
> > Dan J <dan.j.williams@intel.com>; Saleem, Shiraz
> > <shiraz.saleem@intel.com>; davem@davemloft.net; Patil, Kiran
> > <kiran.patil@intel.com>
> > Subject: RE: [PATCH v2 1/6] Add ancillary bus support
> >
> >
> > > From: Leon Romanovsky <leon@kernel.org>
> > > Sent: Thursday, October 8, 2020 12:56 AM
> > >
> > > > > This API is partially obscures low level driver-core code and needs
> > > > > to provide clear and proper abstractions without need to remember
> > > > > about put_device. There is already _add() interface why don't you do
> > > > > put_device() in it?
> > > > >
> > > >
> > > > The pushback Pierre is referring to was during our mid-tier internal
> > > > review.  It was primarily a concern of Parav as I recall, so he can speak to
> > his
> > > reasoning.
> > > >
> > > > What we originally had was a single API call
> > > > (ancillary_device_register) that started with a call to
> > > > device_initialize(), and every error path out of the function performed a
> > > put_device().
> > > >
> > > > Is this the model you have in mind?
> > >
> > > I don't like this flow:
> > > ancillary_device_initialize()
> > > if (ancillary_ancillary_device_add()) {
> > >   put_device(....)
> > >   ancillary_device_unregister()
> > Calling device_unregister() is incorrect, because add() wasn't successful.
> > Only put_device() or a wrapper ancillary_device_put() is necessary.
> >
> > >   return err;
> > > }
> > >
> > > And prefer this flow:
> > > ancillary_device_initialize()
> > > if (ancillary_device_add()) {
> > >   ancillary_device_unregister()
> > This is incorrect and a clear deviation from the current core APIs that adds the
> > confusion.
> >
> > >   return err;
> > > }
> > >
> > > In this way, the ancillary users won't need to do non-intuitive put_device();
> >
> > Below is most simple, intuitive and matching with core APIs for name and
> > design pattern wise.
> > init()
> > {
> > 	err = ancillary_device_initialize();
> > 	if (err)
> > 		return ret;
> >
> > 	err = ancillary_device_add();
> > 	if (ret)
> > 		goto err_unwind;
> >
> > 	err = some_foo();
> > 	if (err)
> > 		goto err_foo;
> > 	return 0;
> >
> > err_foo:
> > 	ancillary_device_del(adev);
> > err_unwind:
> > 	ancillary_device_put(adev->dev);
> > 	return err;
> > }
> >
> > cleanup()
> > {
> > 	ancillary_device_de(adev);
> > 	ancillary_device_put(adev);
> > 	/* It is common to have a one wrapper for this as
> > ancillary_device_unregister().
> > 	 * This will match with core device_unregister() that has precise
> > documentation.
> > 	 * but given fact that init() code need proper error unwinding, like
> > above,
> > 	 * it make sense to have two APIs, and no need to export another
> > symbol for unregister().
> > 	 * This pattern is very easy to audit and code.
> > 	 */
> > }
>
> I like this flow +1
>
> But ... since the init() function is performing both device_init and
> device_add - it should probably be called ancillary_device_register,
> and we are back to a single exported API for both register and
> unregister.
>
> At that point, do we need wrappers on the primitives init, add, del,
> and put?

Let me summarize.
1. You are not providing driver/core API but simplification and obfuscation
of basic primitives and structures. This is new layer. There is no room for
a claim that we must to follow internal API.
2. API should be symmetric. If you call to _register()/_add(), you will need
to call to _unregister()/_del(). Please don't add obscure _put().
3. You can't "ask" from users to call internal calls (put_device) over internal
fields in ancillary_device.
4. This API should be clear to drivers authors, "device_add()" call (and
semantic) is not used by the drivers (git grep " device_add(" drivers/).

Thanks

>
> -DaveE

WARNING: multiple messages have this Message-ID (diff)
From: Leon Romanovsky <leon@kernel.org>
To: "Ertman, David M" <david.m.ertman@intel.com>
Cc: Parav Pandit <parav@nvidia.com>,
	Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>,
	"alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>,
	"parav@mellanox.com" <parav@mellanox.com>,
	"tiwai@suse.de" <tiwai@suse.de>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"ranjani.sridharan@linux.intel.com" 
	<ranjani.sridharan@linux.intel.com>,
	"fred.oh@linux.intel.com" <fred.oh@linux.intel.com>,
	"linux-rdma@vger.kernel.org" <linux-rdma@vger.kernel.org>,
	"dledford@redhat.com" <dledford@redhat.com>,
	"broonie@kernel.org" <broonie@kernel.org>,
	Jason Gunthorpe <jgg@nvidia.com>,
	"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
	"kuba@kernel.org" <kuba@kernel.org>,
	"Williams, Dan J" <dan.j.williams@intel.com>,
	"Saleem, Shiraz" <shiraz.saleem@intel.com>,
	"davem@davemloft.net" <davem@davemloft.net>,
	"Patil, Kiran" <kiran.patil@intel.com>
Subject: Re: [PATCH v2 1/6] Add ancillary bus support
Date: Thu, 8 Oct 2020 08:21:37 +0300	[thread overview]
Message-ID: <20201008052137.GA13580@unreal> (raw)
In-Reply-To: <DM6PR11MB28415A8E53B5FFC276D5A2C4DD0A0@DM6PR11MB2841.namprd11.prod.outlook.com>

On Wed, Oct 07, 2020 at 08:46:45PM +0000, Ertman, David M wrote:
> > -----Original Message-----
> > From: Parav Pandit <parav@nvidia.com>
> > Sent: Wednesday, October 7, 2020 1:17 PM
> > To: Leon Romanovsky <leon@kernel.org>; Ertman, David M
> > <david.m.ertman@intel.com>
> > Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>; alsa-
> > devel@alsa-project.org; parav@mellanox.com; tiwai@suse.de;
> > netdev@vger.kernel.org; ranjani.sridharan@linux.intel.com;
> > fred.oh@linux.intel.com; linux-rdma@vger.kernel.org;
> > dledford@redhat.com; broonie@kernel.org; Jason Gunthorpe
> > <jgg@nvidia.com>; gregkh@linuxfoundation.org; kuba@kernel.org; Williams,
> > Dan J <dan.j.williams@intel.com>; Saleem, Shiraz
> > <shiraz.saleem@intel.com>; davem@davemloft.net; Patil, Kiran
> > <kiran.patil@intel.com>
> > Subject: RE: [PATCH v2 1/6] Add ancillary bus support
> >
> >
> > > From: Leon Romanovsky <leon@kernel.org>
> > > Sent: Thursday, October 8, 2020 12:56 AM
> > >
> > > > > This API is partially obscures low level driver-core code and needs
> > > > > to provide clear and proper abstractions without need to remember
> > > > > about put_device. There is already _add() interface why don't you do
> > > > > put_device() in it?
> > > > >
> > > >
> > > > The pushback Pierre is referring to was during our mid-tier internal
> > > > review.  It was primarily a concern of Parav as I recall, so he can speak to
> > his
> > > reasoning.
> > > >
> > > > What we originally had was a single API call
> > > > (ancillary_device_register) that started with a call to
> > > > device_initialize(), and every error path out of the function performed a
> > > put_device().
> > > >
> > > > Is this the model you have in mind?
> > >
> > > I don't like this flow:
> > > ancillary_device_initialize()
> > > if (ancillary_ancillary_device_add()) {
> > >   put_device(....)
> > >   ancillary_device_unregister()
> > Calling device_unregister() is incorrect, because add() wasn't successful.
> > Only put_device() or a wrapper ancillary_device_put() is necessary.
> >
> > >   return err;
> > > }
> > >
> > > And prefer this flow:
> > > ancillary_device_initialize()
> > > if (ancillary_device_add()) {
> > >   ancillary_device_unregister()
> > This is incorrect and a clear deviation from the current core APIs that adds the
> > confusion.
> >
> > >   return err;
> > > }
> > >
> > > In this way, the ancillary users won't need to do non-intuitive put_device();
> >
> > Below is most simple, intuitive and matching with core APIs for name and
> > design pattern wise.
> > init()
> > {
> > 	err = ancillary_device_initialize();
> > 	if (err)
> > 		return ret;
> >
> > 	err = ancillary_device_add();
> > 	if (ret)
> > 		goto err_unwind;
> >
> > 	err = some_foo();
> > 	if (err)
> > 		goto err_foo;
> > 	return 0;
> >
> > err_foo:
> > 	ancillary_device_del(adev);
> > err_unwind:
> > 	ancillary_device_put(adev->dev);
> > 	return err;
> > }
> >
> > cleanup()
> > {
> > 	ancillary_device_de(adev);
> > 	ancillary_device_put(adev);
> > 	/* It is common to have a one wrapper for this as
> > ancillary_device_unregister().
> > 	 * This will match with core device_unregister() that has precise
> > documentation.
> > 	 * but given fact that init() code need proper error unwinding, like
> > above,
> > 	 * it make sense to have two APIs, and no need to export another
> > symbol for unregister().
> > 	 * This pattern is very easy to audit and code.
> > 	 */
> > }
>
> I like this flow +1
>
> But ... since the init() function is performing both device_init and
> device_add - it should probably be called ancillary_device_register,
> and we are back to a single exported API for both register and
> unregister.
>
> At that point, do we need wrappers on the primitives init, add, del,
> and put?

Let me summarize.
1. You are not providing driver/core API but simplification and obfuscation
of basic primitives and structures. This is new layer. There is no room for
a claim that we must to follow internal API.
2. API should be symmetric. If you call to _register()/_add(), you will need
to call to _unregister()/_del(). Please don't add obscure _put().
3. You can't "ask" from users to call internal calls (put_device) over internal
fields in ancillary_device.
4. This API should be clear to drivers authors, "device_add()" call (and
semantic) is not used by the drivers (git grep " device_add(" drivers/).

Thanks

>
> -DaveE

  parent reply	other threads:[~2020-10-08  5:22 UTC|newest]

Thread overview: 127+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-05 18:24 [PATCH v2 0/6] Ancillary bus implementation and SOF multi-client support Dave Ertman
2020-10-05 18:24 ` Dave Ertman
2020-10-05 18:24 ` [PATCH v2 1/6] Add ancillary bus support Dave Ertman
2020-10-05 18:24   ` Dave Ertman
2020-10-06  7:18   ` Leon Romanovsky
2020-10-06  7:18     ` Leon Romanovsky
2020-10-06 15:18     ` Pierre-Louis Bossart
2020-10-06 17:02       ` Leon Romanovsky
2020-10-06 17:02         ` Leon Romanovsky
2020-10-06 17:09         ` Parav Pandit
2020-10-06 17:09           ` Parav Pandit
2020-10-06 17:26           ` Leon Romanovsky
2020-10-06 17:26             ` Leon Romanovsky
2020-10-06 17:41             ` Saleem, Shiraz
2020-10-06 17:41               ` Saleem, Shiraz
2020-10-06 19:20               ` Leon Romanovsky
2020-10-06 19:20                 ` Leon Romanovsky
2020-10-07  2:49                 ` Dan Williams
2020-10-07  2:49                   ` Dan Williams
2020-10-07 13:09                   ` Saleem, Shiraz
2020-10-07 13:09                     ` Saleem, Shiraz
2020-10-07 13:36                     ` Leon Romanovsky
2020-10-07 13:36                       ` Leon Romanovsky
2020-10-07 18:55                       ` Dan Williams
2020-10-07 18:55                         ` Dan Williams
2020-10-07 20:01                         ` Ertman, David M
2020-10-07 20:01                           ` Ertman, David M
2020-10-06 18:35             ` Ranjani Sridharan
2020-10-06 18:35               ` Ranjani Sridharan
2020-10-06 17:50         ` Saleem, Shiraz
2020-10-06 17:50           ` Saleem, Shiraz
2020-10-07 18:06         ` Ertman, David M
2020-10-07 19:26           ` Leon Romanovsky
2020-10-07 19:26             ` Leon Romanovsky
2020-10-07 19:53             ` Ertman, David M
2020-10-07 19:53               ` Ertman, David M
2020-10-07 19:57               ` Ertman, David M
2020-10-07 19:57                 ` Ertman, David M
2020-10-07 20:17             ` Parav Pandit
2020-10-07 20:17               ` Parav Pandit
2020-10-07 20:46               ` Ertman, David M
2020-10-07 20:46                 ` Ertman, David M
2020-10-07 20:59                 ` Pierre-Louis Bossart
2020-10-07 21:22                   ` Ertman, David M
2020-10-07 21:49                     ` Pierre-Louis Bossart
2020-10-08  4:56                       ` Parav Pandit
2020-10-08  5:26                         ` Leon Romanovsky
2020-10-08  5:26                           ` Leon Romanovsky
2020-10-08  7:14                           ` Parav Pandit
2020-10-08  7:14                             ` Parav Pandit
2020-10-08  7:45                             ` Leon Romanovsky
2020-10-08  7:45                               ` Leon Romanovsky
2020-10-08  9:45                               ` Parav Pandit
2020-10-08  9:45                                 ` Parav Pandit
2020-10-08 10:17                                 ` Leon Romanovsky
2020-10-08 10:17                                   ` Leon Romanovsky
2020-10-08 13:29                         ` Pierre-Louis Bossart
2020-10-09 11:40                           ` Leon Romanovsky
2020-10-09 11:40                             ` Leon Romanovsky
2020-10-08 16:54                         ` Ertman, David M
2020-10-08 17:35                           ` Parav Pandit
2020-10-08 18:13                             ` Ertman, David M
2020-10-08  5:21                 ` Leon Romanovsky [this message]
2020-10-08  5:21                   ` Leon Romanovsky
2020-10-08  6:32                   ` Dan Williams
2020-10-08  6:32                     ` Dan Williams
2020-10-08  7:00                     ` Leon Romanovsky
2020-10-08  7:00                       ` Leon Romanovsky
2020-10-08  7:38                       ` Dan Williams
2020-10-08  7:38                         ` Dan Williams
2020-10-08  7:50                         ` gregkh
2020-10-08  7:50                           ` gregkh
2020-10-08 11:10                           ` Parav Pandit
2020-10-08 11:10                             ` Parav Pandit
2020-10-08 16:39                             ` Ertman, David M
2020-10-08 16:39                               ` Ertman, David M
2020-10-08  8:00                         ` Leon Romanovsky
2020-10-08  8:00                           ` Leon Romanovsky
2020-10-08  8:09                           ` Dan Williams
2020-10-08  8:09                             ` Dan Williams
2020-10-08 16:42                           ` Ertman, David M
2020-10-08 16:42                             ` Ertman, David M
2020-10-08 17:21                             ` Leon Romanovsky
2020-10-08 17:21                               ` Leon Romanovsky
2020-10-08 18:25                     ` Ertman, David M
2020-10-08 18:25                       ` Ertman, David M
2020-10-07 20:30         ` Ertman, David M
2020-10-07 20:18       ` Ertman, David M
2020-10-06 17:23   ` Leon Romanovsky
2020-10-06 17:23     ` Leon Romanovsky
2020-10-06 17:45     ` Saleem, Shiraz
2020-10-06 17:45       ` Saleem, Shiraz
2020-10-08 22:04     ` Ertman, David M
2020-10-08 22:04       ` Ertman, David M
2020-10-08 22:41       ` Dan Williams
2020-10-08 22:41         ` Dan Williams
2020-10-09 14:26         ` Pierre-Louis Bossart
2020-10-09 19:22           ` Dan Williams
2020-10-09 19:22             ` Dan Williams
2020-10-09 19:39             ` Pierre-Louis Bossart
2020-10-09 19:39               ` Pierre-Louis Bossart
2020-10-12 18:34               ` Ertman, David M
2020-10-08 17:20   ` Leon Romanovsky
2020-10-08 17:20     ` Leon Romanovsky
2020-10-08 17:28     ` Ertman, David M
2020-10-08 17:28       ` Ertman, David M
2020-10-05 18:24 ` [PATCH v2 2/6] ASoC: SOF: Introduce descriptors for SOF client Dave Ertman
2020-10-05 18:24   ` Dave Ertman
2020-10-13  1:05   ` Randy Dunlap
2020-10-13  1:05     ` Randy Dunlap
2020-10-13  1:31     ` Pierre-Louis Bossart
2020-10-13  1:31       ` Pierre-Louis Bossart
2020-10-13  1:55       ` Randy Dunlap
2020-10-13  1:55         ` Randy Dunlap
2020-10-13  1:56         ` Randy Dunlap
2020-10-13  1:56           ` Randy Dunlap
2020-10-13 15:08           ` Pierre-Louis Bossart
2020-10-13 19:35             ` Randy Dunlap
2020-10-13 19:57               ` Pierre-Louis Bossart
2020-10-05 18:24 ` [PATCH v2 3/6] ASoC: SOF: Create client driver for IPC test Dave Ertman
2020-10-05 18:24   ` Dave Ertman
2020-10-05 18:24 ` [PATCH v2 4/6] ASoC: SOF: ops: Add ops for client registration Dave Ertman
2020-10-05 18:24   ` Dave Ertman
2020-10-05 18:24 ` [PATCH v2 5/6] ASoC: SOF: Intel: Define " Dave Ertman
2020-10-05 18:24   ` Dave Ertman
2020-10-05 18:24 ` [PATCH v2 6/6] ASoC: SOF: debug: Remove IPC flood test support in SOF core Dave Ertman
2020-10-05 18:24   ` Dave Ertman

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=20201008052137.GA13580@unreal \
    --to=leon@kernel.org \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=dan.j.williams@intel.com \
    --cc=davem@davemloft.net \
    --cc=david.m.ertman@intel.com \
    --cc=dledford@redhat.com \
    --cc=fred.oh@linux.intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jgg@nvidia.com \
    --cc=kiran.patil@intel.com \
    --cc=kuba@kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=parav@mellanox.com \
    --cc=parav@nvidia.com \
    --cc=pierre-louis.bossart@linux.intel.com \
    --cc=ranjani.sridharan@linux.intel.com \
    --cc=shiraz.saleem@intel.com \
    --cc=tiwai@suse.de \
    /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.