linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: dan.j.williams@intel.com (Dan Williams)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 11/31] dma: add channel request API that supports deferred probe
Date: Fri, 15 Nov 2013 13:01:21 -0800	[thread overview]
Message-ID: <CAPcyv4heN3PFc+n2RDBviA0zvyU4jfi5VLOcQVR6oRPi1woPTA@mail.gmail.com> (raw)
In-Reply-To: <1384548866-13141-12-git-send-email-swarren@wwwdotorg.org>

[ adding dmaengine list and Vinod ]

On Fri, Nov 15, 2013 at 12:54 PM, Stephen Warren <swarren@wwwdotorg.org> wrote:
> From: Stephen Warren <swarren@nvidia.com>
>
> dma_request_slave_channel() simply returns NULL whenever DMA channel
> lookup fails. Lookup could fail for two distinct reasons:
>
> a) No DMA specification exists for the channel name.
>    This includes situations where no DMA specifications exist at all, or
>    other general lookup problems.
>
> b) A DMA specification does exist, yet the driver for that channel is not
>    yet registered.
>
> Case (b) should trigger deferred probe in client drivers. However, since
> they have no way to differentiate the two situations, it cannot.
>
> Implement new function dma_request_slave_channel_or_err(), which performs
> identically to dma_request_slave_channel(), except that it returns an
> error-pointer rather than NULL, which allows callers to detect when
> deferred probe should occur.
>
> Eventually, all drivers should be converted to this new API, the old API
> removed, and the new API renamed to the more desirable name. This patch
> doesn't convert the existing API and all drivers in one go, since some
> drivers call dma_request_slave_channel() then dma_request_channel() if
> that fails. That would require modifying dma_request_channel() in the
> same way, which would then require modifying close to 100 drivers at once,
> rather than just the 15-20 or so that use dma_request_slave_channel(),
> which might be tenable in a single patch.
>
> acpi_dma_request_slave_chan_by_index() doesn't actually implement
> deferred probe. Perhaps it should?
>
> Cc: treding at nvidia.com
> Cc: pdeschrijver at nvidia.com
> Cc: linux-tegra at vger.kernel.org
> Cc: linux-arm-kernel at lists.infradead.org
> Cc: Dan Williams <dan.j.williams@intel.com>
> Signed-off-by: Stephen Warren <swarren@nvidia.com>
> ---
> This patch is part of a series with strong internal depdendencies. I'm
> looking for an ack so that I can take the entire series through the Tegra
> and arm-soc trees. The series will be part of a stable branch that can be
> merged into other subsystems if needed to avoid/resolve dependencies.
> ---
>  drivers/dma/acpi-dma.c    | 12 ++++++------
>  drivers/dma/dmaengine.c   | 44 ++++++++++++++++++++++++++++++++++++++++----
>  drivers/dma/of-dma.c      | 12 +++++++-----
>  include/linux/dmaengine.h |  7 +++++++
>  include/linux/of_dma.h    |  9 ++++++---
>  5 files changed, 66 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/dma/acpi-dma.c b/drivers/dma/acpi-dma.c
> index e69b03c0fa50..c83d40f14467 100644
> --- a/drivers/dma/acpi-dma.c
> +++ b/drivers/dma/acpi-dma.c
> @@ -334,7 +334,7 @@ static int acpi_dma_parse_fixed_dma(struct acpi_resource *res, void *data)
>   * @dev:       struct device to get DMA request from
>   * @index:     index of FixedDMA descriptor for @dev
>   *
> - * Returns pointer to appropriate dma channel on success or NULL on error.
> + * Returns pointer to appropriate dma channel on success or an error pointer.
>   */
>  struct dma_chan *acpi_dma_request_slave_chan_by_index(struct device *dev,
>                 size_t index)
> @@ -349,10 +349,10 @@ struct dma_chan *acpi_dma_request_slave_chan_by_index(struct device *dev,
>
>         /* Check if the device was enumerated by ACPI */
>         if (!dev || !ACPI_HANDLE(dev))
> -               return NULL;
> +               return ERR_PTR(-ENODEV);
>
>         if (acpi_bus_get_device(ACPI_HANDLE(dev), &adev))
> -               return NULL;
> +               return ERR_PTR(-ENODEV);
>
>         memset(&pdata, 0, sizeof(pdata));
>         pdata.index = index;
> @@ -367,7 +367,7 @@ struct dma_chan *acpi_dma_request_slave_chan_by_index(struct device *dev,
>         acpi_dev_free_resource_list(&resource_list);
>
>         if (dma_spec->slave_id < 0 || dma_spec->chan_id < 0)
> -               return NULL;
> +               return ERR_PTR(-ENODEV);
>
>         mutex_lock(&acpi_dma_lock);
>
> @@ -403,7 +403,7 @@ EXPORT_SYMBOL_GPL(acpi_dma_request_slave_chan_by_index);
>   * translate the names "tx" and "rx" here based on the most common case where
>   * the first FixedDMA descriptor is TX and second is RX.
>   *
> - * Returns pointer to appropriate dma channel on success or NULL on error.
> + * Returns pointer to appropriate dma channel on success or an error pointer.
>   */
>  struct dma_chan *acpi_dma_request_slave_chan_by_name(struct device *dev,
>                 const char *name)
> @@ -415,7 +415,7 @@ struct dma_chan *acpi_dma_request_slave_chan_by_name(struct device *dev,
>         else if (!strcmp(name, "rx"))
>                 index = 1;
>         else
> -               return NULL;
> +               return ERR_PTR(-ENODEV);
>
>         return acpi_dma_request_slave_chan_by_index(dev, index);
>  }
> diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c
> index ea806bdc12ef..5e7f8af2f0ec 100644
> --- a/drivers/dma/dmaengine.c
> +++ b/drivers/dma/dmaengine.c
> @@ -540,6 +540,8 @@ EXPORT_SYMBOL_GPL(dma_get_slave_channel);
>   * @mask: capabilities that the channel must satisfy
>   * @fn: optional callback to disposition available channels
>   * @fn_param: opaque parameter to pass to dma_filter_fn
> + *
> + * Returns pointer to appropriate dma channel on success or NULL.
>   */
>  struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask,
>                                        dma_filter_fn fn, void *fn_param)
> @@ -588,24 +590,58 @@ struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask,
>  EXPORT_SYMBOL_GPL(__dma_request_channel);
>
>  /**
> - * dma_request_slave_channel - try to allocate an exclusive slave channel
> + * __dma_request_slave_channel - 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.
>   */
> -struct dma_chan *dma_request_slave_channel(struct device *dev, const char *name)
> +static struct dma_chan *__dma_request_slave_channel(struct device *dev,
> +                                       const char *name, bool defer)
>  {
>         /* If device-tree is present get slave info from here */
>         if (dev->of_node)
> -               return of_dma_request_slave_channel(dev->of_node, name);
> +               return of_dma_request_slave_channel(dev->of_node, name, defer);
>
>         /* If device was enumerated by ACPI get slave info from here */
>         if (ACPI_HANDLE(dev))
>                 return acpi_dma_request_slave_chan_by_name(dev, name);
>
> -       return NULL;
> +       return ERR_PTR(-ENODEV);
> +}
> +
> +/**
> + * dma_request_slave_channel - 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 NULL.
> + */
> +struct dma_chan *dma_request_slave_channel(struct device *dev,
> +                                          const char *name)
> +{
> +       struct dma_chan *ch = __dma_request_slave_channel(dev, name, false);
> +       if (IS_ERR(ch))
> +               return NULL;
> +       return ch;
>  }
>  EXPORT_SYMBOL_GPL(dma_request_slave_channel);
>
> +/**
> + * 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.
> + */
> +struct dma_chan *dma_request_slave_channel_or_err(struct device *dev,
> +                                                 const char *name)
> +{
> +       return __dma_request_slave_channel(dev, name, true);
> +}
> +EXPORT_SYMBOL_GPL(dma_request_slave_channel_or_err);
> +
>  void dma_release_channel(struct dma_chan *chan)
>  {
>         mutex_lock(&dma_list_mutex);
> diff --git a/drivers/dma/of-dma.c b/drivers/dma/of-dma.c
> index 0b88dd3d05f4..928141f6f21b 100644
> --- a/drivers/dma/of-dma.c
> +++ b/drivers/dma/of-dma.c
> @@ -143,10 +143,10 @@ static int of_dma_match_channel(struct device_node *np, const char *name,
>   * @np:                device node to get DMA request from
>   * @name:      name of desired channel
>   *
> - * Returns pointer to appropriate dma channel on success or NULL on error.
> + * Returns pointer to appropriate dma channel on success or an error pointer.
>   */
>  struct dma_chan *of_dma_request_slave_channel(struct device_node *np,
> -                                             const char *name)
> +                                             const char *name, bool defer)
>  {
>         struct of_phandle_args  dma_spec;
>         struct of_dma           *ofdma;
> @@ -155,14 +155,14 @@ struct dma_chan *of_dma_request_slave_channel(struct device_node *np,
>
>         if (!np || !name) {
>                 pr_err("%s: not enough information provided\n", __func__);
> -               return NULL;
> +               return ERR_PTR(-ENODEV);
>         }
>
>         count = of_property_count_strings(np, "dma-names");
>         if (count < 0) {
>                 pr_err("%s: dma-names property of node '%s' missing or empty\n",
>                         __func__, np->full_name);
> -               return NULL;
> +               return ERR_PTR(-ENODEV);
>         }
>
>         for (i = 0; i < count; i++) {
> @@ -181,11 +181,13 @@ struct dma_chan *of_dma_request_slave_channel(struct device_node *np,
>
>                 of_node_put(dma_spec.np);
>
> +               if (!ofdma && defer)
> +                       return ERR_PTR(-EPROBE_DEFER);
>                 if (chan)
>                         return chan;
>         }
>
> -       return NULL;
> +       return ERR_PTR(-ENODEV);
>  }
>
>  /**
> diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
> index 41cf0c399288..b908b0fda72b 100644
> --- a/include/linux/dmaengine.h
> +++ b/include/linux/dmaengine.h
> @@ -1041,6 +1041,8 @@ void dma_issue_pending_all(void);
>  struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask,
>                                         dma_filter_fn fn, void *fn_param);
>  struct dma_chan *dma_request_slave_channel(struct device *dev, const char *name);
> +struct dma_chan *dma_request_slave_channel_or_err(struct device *dev,
> +                                                 const char *name);
>  void dma_release_channel(struct dma_chan *chan);
>  #else
>  static inline struct dma_chan *dma_find_channel(enum dma_transaction_type tx_type)
> @@ -1068,6 +1070,11 @@ static inline struct dma_chan *dma_request_slave_channel(struct device *dev,
>  {
>         return NULL;
>  }
> +static inline struct dma_chan *dma_request_slave_channel_or_err(
> +                                       struct device *dev, const char *name)
> +{
> +       return ERR_PTR(-ENODEV);
> +}
>  static inline void dma_release_channel(struct dma_chan *chan)
>  {
>  }
> diff --git a/include/linux/of_dma.h b/include/linux/of_dma.h
> index ae36298ba076..0504461574c6 100644
> --- a/include/linux/of_dma.h
> +++ b/include/linux/of_dma.h
> @@ -38,7 +38,8 @@ extern int of_dma_controller_register(struct device_node *np,
>                 void *data);
>  extern void of_dma_controller_free(struct device_node *np);
>  extern struct dma_chan *of_dma_request_slave_channel(struct device_node *np,
> -                                                    const char *name);
> +                                                    const char *name,
> +                                                    bool defer);
>  extern struct dma_chan *of_dma_simple_xlate(struct of_phandle_args *dma_spec,
>                 struct of_dma *ofdma);
>  #else
> @@ -54,8 +55,10 @@ static inline void of_dma_controller_free(struct device_node *np)
>  {
>  }
>
> -static inline struct dma_chan *of_dma_request_slave_channel(struct device_node *np,
> -                                                    const char *name)
> +static inline struct dma_chan *of_dma_request_slave_channel(
> +                                       struct device_node *np,
> +                                       const char *name,
> +                                       bool defer)
>  {
>         return NULL;
>  }
> --
> 1.8.1.5
>

  reply	other threads:[~2013-11-15 21:01 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 [this message]
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
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=CAPcyv4heN3PFc+n2RDBviA0zvyU4jfi5VLOcQVR6oRPi1woPTA@mail.gmail.com \
    --to=dan.j.williams@intel.com \
    --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).