From: swarren@wwwdotorg.org (Stephen Warren)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 11/31] dma: add channel request API that supports deferred probe
Date: Fri, 22 Nov 2013 16:45:07 -0700 [thread overview]
Message-ID: <528FEC83.6000308@wwwdotorg.org> (raw)
In-Reply-To: <CAPcyv4g_zW_hTi0JacH04bgF-5wv=W1RhRi4M55Qzxc=wEyETA@mail.gmail.com>
On 11/22/2013 04:13 PM, Dan Williams wrote:
> On Fri, Nov 22, 2013 at 1:50 PM, Stephen Warren <swarren@wwwdotorg.org> wrote:
>> On 11/22/2013 01:46 PM, Dan Williams wrote:
>>> On Fri, Nov 22, 2013 at 11:53 AM, Stephen Warren <swarren@wwwdotorg.org> wrote:
>>>> On 11/22/2013 12:49 PM, Dan Williams wrote:
>>>>> On Fri, Nov 22, 2013 at 10:10 AM, Stephen Warren <swarren@wwwdotorg.org> wrote:
>>>>>>>>> The proposal is dma_request_slave_channel only returns errors or valid
>>>>>>>>> pointers, never NULL.
>>>>>>>>
>>>>>>>> OK, so if you make that assumption, I guess it's safe.
>>>>>>>
>>>>>>> I made that assumption because that is what your original patch proposed:
>>>>>>>
>>>>>>> +/**
>>>>>>> + * dma_request_slave_channel_or_err - try to allocate an exclusive
>>>>>>> slave channel
>>>>>>> + * @dev: pointer to client device structure
>>>>>>> + * @name: slave channel name
>>>>>>> + *
>>>>>>> + * Returns pointer to appropriate dma channel on success or an error pointer.
>>>>>>> + */
>>>>>>>
>>>>>>> What's the benefit of leaking NULL values to callers? If they already
>>>>>>> need to check for err, why force them to check for NULL too?
>>>>>>
>>>>>> "Returns pointer to appropriate dma channel on success or an error
>>>>>> pointer." means that callers only have to check for an ERR value. If the
>>>>>> function returns NULL, then other DMA-related functions must treat that
>>>>>> as a valid channel ID. This is case (a) in my previous email.
>>>>>
>>>>> How can a channel be "valid" and NULL at the same time? Without the
>>>>> guarantee that dma_request_channel always returns a non-null-channel
>>>>> pointer or an error pointer you're forcing clients to use or open-code
>>>>> IS_ERR_OR_NULL.
>>>>
>>>> No, callers should just follow the documentation. If all error cases are
>>>> indicated by an ERR pointer, then there is no need to check for NULL. In
>>>> fact, client must not check anything beyond whether the value is an ERR
>>>> value or not. So, there's no need to use IS_ERR_OR_NULL.
>>>>
>>>> It's up to the API to make sure that it returns values that are valid
>>>> for other calls to related APIs. If that doesn't include NULL, it won't
>>>> return NULL. If it does, it might. But, that's an internal
>>>> implementation detail of the API (and associated APIs), not something
>>>> that clients should know about.
>>>>
>>>> One situation where a NULL might be valid is where the return value
>>>> isn't really a pointer, but an integer index or ID cast to a pointer.
>>>
>>> Ok that's the piece I am missing, and maybe explains why
>>> samsung_dmadev_request() looks so broken. Are there really
>>> implementations out there that somehow know that the return value from
>>> dma_request_slave channel is not a (struct dma_chan *)??
>>
>> No client of the API should know that; it'd be more like an agreement
>> between multiple functions in the subsystem:
>>
>> handle = subsystemx_allocate_something();
>> ...
>> subsystemx_use_handle(handle);
>>
>> Where subsystemx_allocate_something() casts from ID to "pointer", and
>> subsystemx_use_handle() casts back from "pointer" to ID. The callers
>> would have no idea this was happening.
>
> That's a bug not a feature. That's someone abusing an api and
> breaking type safety to pass arbitrary data. But since we're talking
> in abstract 'buggy_subsytemx' terms why worry?
>
>> I'm not actually aware of any specific cases where that actually happens
>> right now, it's just that given the way subsystemx_allocate_something()
>> is documented (valid handle/cookie return or ERR value) it's legal for
>> "subsystemx" to work that way if it wants, and it should be able to
>> change between this cast-a-handle style and actual pointer returns
>> without clients being affected.
>
> Wait, this busted way of doing things is documented?
I should have said: s/is documented/would be documented/. Or perhaps
s/documented/discussed/. IIRC, in previous discussions of
IS_ERR_OR_NULL, this came up as a specific (perhaps hypothetical) thing
that APIs could legitimately do that made it important the API clients
didn't impose restrictions on return values beyond what APIs documented.
next prev parent reply other threads:[~2013-11-22 23:45 UTC|newest]
Thread overview: 176+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-15 20:53 [PATCH 00/31] ARM: tegra: use common reset and DMA bindings Stephen Warren
2013-11-15 20:53 ` [PATCH 01/31] ARM: tegra: add missing clock documentation to DT bindings Stephen Warren
2013-11-16 22:00 ` Marc Dietrich
2013-11-18 17:36 ` Stephen Warren
2013-11-29 11:49 ` Thierry Reding
2013-12-01 19:05 ` Stephen Warren
2013-12-02 8:52 ` Thierry Reding
2013-12-03 18:31 ` Stephen Warren
2013-12-04 8:48 ` Thierry Reding
2013-12-04 17:34 ` Stephen Warren
2013-12-04 19:27 ` Thierry Reding
2013-12-03 18:36 ` Stephen Warren
2013-12-04 8:49 ` Thierry Reding
2013-11-15 20:53 ` [PATCH 02/31] ARM: tegra: document reset properties in " Stephen Warren
2013-11-29 12:23 ` Thierry Reding
2013-12-01 19:06 ` Stephen Warren
2013-12-02 9:08 ` Thierry Reding
2013-12-03 18:48 ` Stephen Warren
2013-12-04 8:56 ` Thierry Reding
2013-11-15 20:53 ` [PATCH 03/31] ARM: tegra: document use of standard DMA " Stephen Warren
2013-11-29 12:29 ` Thierry Reding
2013-12-01 19:09 ` Stephen Warren
2013-12-02 9:05 ` Thierry Reding
2013-12-03 18:52 ` Stephen Warren
2013-12-04 8:56 ` Thierry Reding
2013-11-15 20:53 ` [PATCH 04/31] ARM: tegra: update DT files to add reset properties Stephen Warren
2013-11-29 13:00 ` Thierry Reding
2013-12-01 19:15 ` Stephen Warren
2013-12-02 9:01 ` Thierry Reding
2013-12-03 18:59 ` Stephen Warren
2013-11-15 20:54 ` [PATCH 05/31] ARM: tegra: update DT files to add DMA properties Stephen Warren
2013-11-29 13:08 ` Thierry Reding
2013-11-15 20:54 ` [PATCH 06/31] ARM: tegra: select the reset framework Stephen Warren
2013-11-29 13:10 ` Thierry Reding
2013-11-15 20:54 ` [PATCH 07/31] clk: tegra: implement a reset driver Stephen Warren
2013-11-29 13:26 ` Thierry Reding
2013-12-03 19:07 ` Stephen Warren
2013-11-15 20:54 ` [PATCH 08/31] pci: tegra: use reset framework Stephen Warren
2013-11-15 21:16 ` Bjorn Helgaas
2013-11-29 13:29 ` Thierry Reding
2013-11-29 13:33 ` Thierry Reding
2013-11-15 20:54 ` [PATCH 09/31] drm/tegra: " Stephen Warren
2013-11-29 13:42 ` Thierry Reding
2013-11-15 20:54 ` [PATCH 10/31] ARM: tegra: pass reset to tegra_powergate_sequence_power_up() Stephen Warren
2013-11-15 21:17 ` Bjorn Helgaas
2013-11-29 13:45 ` Thierry Reding
2013-11-29 13:46 ` Thierry Reding
2013-11-15 20:54 ` [PATCH 11/31] dma: add channel request API that supports deferred probe Stephen Warren
2013-11-15 21:01 ` Dan Williams
2013-11-15 21:05 ` Dan Williams
2013-11-18 9:18 ` Shevchenko, Andriy
2013-11-18 17:42 ` Stephen Warren
2013-11-19 12:00 ` Andy Shevchenko
2013-11-19 17:15 ` Stephen Warren
2013-11-19 23:37 ` Dan Williams
2013-11-20 0:09 ` Stephen Warren
2013-11-20 0:38 ` Dan Williams
2013-11-20 18:24 ` Stephen Warren
2013-11-20 19:15 ` Dan Williams
2013-11-20 19:22 ` Stephen Warren
2013-11-20 20:23 ` Williams, Dan J
2013-11-20 21:24 ` Stephen Warren
2013-11-21 3:22 ` Dan Williams
2013-11-21 9:13 ` Andy Shevchenko
2013-11-21 18:22 ` Stephen Warren
2013-11-22 6:54 ` Dan Williams
2013-11-22 17:34 ` Stephen Warren
2013-11-22 18:04 ` Dan Williams
2013-11-22 18:10 ` Stephen Warren
2013-11-22 19:49 ` Dan Williams
2013-11-22 19:53 ` Stephen Warren
2013-11-22 20:46 ` Dan Williams
2013-11-22 21:50 ` Stephen Warren
2013-11-22 23:13 ` Dan Williams
2013-11-22 23:45 ` Stephen Warren [this message]
2013-11-23 0:40 ` Russell King - ARM Linux
2013-11-23 0:34 ` Russell King - ARM Linux
2013-11-25 17:26 ` Stephen Warren
2013-11-25 17:45 ` Dan Williams
2013-11-25 18:00 ` Russell King - ARM Linux
2013-11-25 18:07 ` Stephen Warren
2013-11-25 18:42 ` Dan Williams
2013-11-25 19:00 ` Stephen Warren
2013-11-25 19:28 ` Dan Williams
2013-11-25 19:30 ` Stephen Warren
2013-11-25 19:45 ` Dan Williams
2013-11-25 19:47 ` Stephen Warren
2013-11-25 19:09 ` Russell King - ARM Linux
2013-11-25 17:53 ` Russell King - ARM Linux
2013-11-25 17:57 ` Stephen Warren
2013-11-25 20:28 ` Gerhard Sittig
2013-11-25 20:52 ` Russell King - ARM Linux
2013-11-28 21:20 ` NULL clock items (was: [PATCH 11/31] dma: add channel request API that supports deferred probe) Gerhard Sittig
2013-11-22 23:45 ` [PATCH 11/31] dma: add channel request API that supports deferred probe Dan Williams
2013-11-23 0:17 ` Stephen Warren
2013-11-23 0:37 ` Dan Williams
2013-11-15 23:08 ` Stephen Warren
2013-11-22 23:50 ` Dan Williams
2013-11-23 0:05 ` Stephen Warren
2013-11-15 20:54 ` [PATCH 12/31] dma: tegra: use reset framework Stephen Warren
2013-11-25 22:11 ` Stephen Warren
2013-11-29 13:47 ` Thierry Reding
2013-11-15 20:54 ` [PATCH 13/31] dma: tegra: register as an OF DMA controller Stephen Warren
2013-11-20 15:28 ` Arnd Bergmann
2013-11-20 18:22 ` Stephen Warren
2013-11-15 20:54 ` [PATCH 14/31] ASoC: dmaengine: support deferred probe for DMA channels Stephen Warren
2013-11-16 9:29 ` Mark Brown
2013-11-16 10:49 ` [alsa-devel] " Lars-Peter Clausen
2013-11-18 17:59 ` Stephen Warren
2013-11-15 20:54 ` [PATCH 15/31] ASoC: dmaengine: add custom DMA config to snd_dmaengine_pcm_config Stephen Warren
2013-11-16 9:44 ` Mark Brown
2013-11-18 18:45 ` Stephen Warren
2013-11-19 9:35 ` Mark Brown
2013-11-16 10:43 ` [alsa-devel] " Lars-Peter Clausen
2013-11-15 20:54 ` [PATCH 16/31] ASoC: tegra: use reset framework Stephen Warren
2013-11-16 9:55 ` Mark Brown
2013-11-18 17:21 ` Stephen Warren
2013-11-18 18:37 ` Mark Brown
2013-11-25 21:56 ` Stephen Warren
2013-11-26 13:14 ` Mark Brown
2013-11-26 16:31 ` Stephen Warren
2013-11-26 18:37 ` Mark Brown
2013-11-26 18:45 ` Stephen Warren
2013-11-15 20:54 ` [PATCH 17/31] ASoC: tegra: call pm_runtime APIs around register accesses Stephen Warren
2013-11-16 10:02 ` Mark Brown
2013-11-18 17:25 ` Stephen Warren
2013-11-18 18:39 ` Mark Brown
2013-11-18 22:38 ` Stephen Warren
2013-11-19 9:53 ` Mark Brown
2013-11-15 20:54 ` [PATCH 18/31] ASoC: tegra: allocate AHUB FIFO during probe() not startup() Stephen Warren
2013-11-16 10:04 ` Mark Brown
2013-11-29 14:40 ` Thierry Reding
2013-12-03 19:55 ` Stephen Warren
2013-12-04 9:00 ` Thierry Reding
2013-11-15 20:54 ` [PATCH 19/31] ASoC: tegra: convert to standard DMA DT bindings Stephen Warren
2013-11-16 10:05 ` Mark Brown
2013-11-15 20:54 ` [PATCH 20/31] i2c: tegra: use reset framework Stephen Warren
2013-11-15 22:20 ` Wolfram Sang
2013-11-29 14:46 ` Thierry Reding
2013-11-15 20:54 ` [PATCH 21/31] staging: nvec: " Stephen Warren
2013-11-16 22:33 ` Marc Dietrich
2013-11-19 23:23 ` Greg Kroah-Hartman
2013-11-29 14:47 ` Thierry Reding
2013-11-15 20:54 ` [PATCH 22/31] spi: tegra: " Stephen Warren
2013-11-16 10:07 ` Mark Brown
2013-11-29 14:48 ` Thierry Reding
2013-11-15 20:54 ` [PATCH 23/31] spi: tegra: convert to standard DMA DT bindings Stephen Warren
2013-11-16 10:14 ` Mark Brown
2013-11-18 17:30 ` Stephen Warren
2013-11-18 18:41 ` Mark Brown
2013-11-15 20:54 ` [PATCH 24/31] serial: tegra: use reset framework Stephen Warren
2013-11-19 23:24 ` Greg Kroah-Hartman
2013-11-29 14:49 ` Thierry Reding
2013-11-15 20:54 ` [PATCH 25/31] serial: tegra: convert to standard DMA DT bindings Stephen Warren
2013-11-19 23:23 ` Greg Kroah-Hartman
2013-11-15 20:54 ` [PATCH 26/31] Input: tegra-kbc - use reset framework Stephen Warren
2013-11-19 21:17 ` Dmitry Torokhov
2013-11-29 14:50 ` Thierry Reding
2013-11-15 20:54 ` [PATCH 27/31] USB: EHCI: tegra: " Stephen Warren
2013-11-16 18:12 ` Alan Stern
2013-11-19 23:24 ` Greg Kroah-Hartman
2013-11-29 14:51 ` Thierry Reding
2013-11-15 20:54 ` [PATCH 28/31] ARM: tegra: remove legacy clock entries from DT Stephen Warren
2013-11-29 14:53 ` Thierry Reding
2013-11-15 20:54 ` [PATCH 29/31] ARM: tegra: remove legacy DMA " Stephen Warren
2013-11-29 14:53 ` Thierry Reding
2013-11-15 20:54 ` [PATCH 30/31] clk: tegra: remove legacy reset APIs Stephen Warren
2013-11-29 14:55 ` Thierry Reding
2013-11-15 20:54 ` [PATCH 31/31] clk: tegra: remove bogus PCIE_XCLK Stephen Warren
2013-11-29 14:56 ` Thierry Reding
2013-11-18 8:24 ` [PATCH 00/31] ARM: tegra: use common reset and DMA bindings Terje Bergström
2013-11-20 15:37 ` Arnd Bergmann
2013-11-20 16:45 ` Stephen Warren
2013-11-20 17:03 ` Arnd Bergmann
2013-11-20 17:23 ` Stephen Warren
2013-12-12 0:11 ` Stephen Warren
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=528FEC83.6000308@wwwdotorg.org \
--to=swarren@wwwdotorg.org \
--cc=linux-arm-kernel@lists.infradead.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 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).