All of lore.kernel.org
 help / color / mirror / Atom feed
From: Per Forlin <per.forlin@linaro.org>
To: linaro-dev@lists.linaro.org,
	Nicolas Pitre <nicolas.pitre@linaro.org>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, linux-mmc@vger.kernel.org,
	Venkatraman S <svenkatr@ti.com>,
	Linus Walleij <linus.walleij@linaro.org>,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Arnd Bergmann <arnd@arndb.de>,
	Sourav Poddar <sourav.poddar@ti.com>, Chris Ball <cjb@laptop.org>
Cc: Per Forlin <per.forlin@linaro.org>
Subject: Re: [PATCH v9 11/12] mmc: core: add random fault injection
Date: Tue, 19 Jul 2011 08:17:02 +0200	[thread overview]
Message-ID: <CAJ0pr19Ktx_R8Zmr=rDivhc5A__N7OwoSj3ehitX_pS_xmooSA@mail.gmail.com> (raw)
In-Reply-To: <1309539333-2606-12-git-send-email-per.forlin@linaro.org>

This patch prevents mmc core to be built as a module if mmc fault
injection is selected.

Changes needed to resolve this:
 * remove fault inject module from core.c
 * export should_fail() and init_fault_attr_dentries() in fault-injection.c
 * update documentation fault-injection.txt

On 1 July 2011 18:55, Per Forlin <per.forlin@linaro.org> wrote:
> This simple fault injection proved to be very useful to
> test the error handling in the block.c rw_rq(). It may
> still be useful to test if the host driver handle
> pre_req() and post_req() correctly in case of errors.
>
> Signed-off-by: Per Forlin <per.forlin@linaro.org>
> Acked-by: Kyungmin Park <kyungmin.park@samsung.com>
> Acked-by: Arnd Bergmann <arnd@arndb.de>
> Reviewed-by: Venkatraman S <svenkatr@ti.com>
> Tested-by: Sourav Poddar<sourav.poddar@ti.com>
> Tested-by: Linus Walleij <linus.walleij@linaro.org>
> ---
>  drivers/mmc/core/core.c    |   54 ++++++++++++++++++++++++++++++++++++++++++++
>  drivers/mmc/core/debugfs.c |    5 ++++
>  include/linux/mmc/host.h   |    3 ++
>  lib/Kconfig.debug          |   11 +++++++++
>  4 files changed, 73 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
> index d2d7239..62a8cc7 100644
> --- a/drivers/mmc/core/core.c
> +++ b/drivers/mmc/core/core.c
> @@ -23,6 +23,8 @@
>  #include <linux/log2.h>
>  #include <linux/regulator/consumer.h>
>  #include <linux/pm_runtime.h>
> +#include <linux/fault-inject.h>
> +#include <linux/random.h>
>
>  #include <linux/mmc/card.h>
>  #include <linux/mmc/host.h>
> @@ -82,6 +84,56 @@ static void mmc_flush_scheduled_work(void)
>        flush_workqueue(workqueue);
>  }
>
> +#ifdef CONFIG_FAIL_MMC_REQUEST
> +
> +static DECLARE_FAULT_ATTR(fail_mmc_request);
> +
> +static int __init setup_fail_mmc_request(char *str)
> +{
> +       return setup_fault_attr(&fail_mmc_request, str);
> +}
> +__setup("fail_mmc_request=", setup_fail_mmc_request);
> +
> +static void mmc_should_fail_request(struct mmc_host *host,
> +                                   struct mmc_request *mrq)
> +{
> +       struct mmc_command *cmd = mrq->cmd;
> +       struct mmc_data *data = mrq->data;
> +       static const int data_errors[] = {
> +               -ETIMEDOUT,
> +               -EILSEQ,
> +               -EIO,
> +       };
> +
> +       if (!data)
> +               return;
> +
> +       if (cmd->error || data->error || !host->make_it_fail ||
> +           !should_fail(&fail_mmc_request, data->blksz * data->blocks))
> +               return;
> +
> +       data->error = data_errors[random32() % ARRAY_SIZE(data_errors)];
> +       data->bytes_xfered = (random32() % (data->bytes_xfered >> 9)) << 9;
> +}
> +
> +static int __init fail_mmc_request_debugfs(void)
> +{
> +       return init_fault_attr_dentries(&fail_mmc_request,
> +                                       "fail_mmc_request");
> +}
> +
> +late_initcall(fail_mmc_request_debugfs);
This line prevents mmc core to be built as a module, since there will
be two init_module (the mmc core one and this one) for the same
module.

> +
> +#else /* CONFIG_FAIL_MMC_REQUEST */
> +
> +static void mmc_should_fail_request(struct mmc_host *host,
> +                                   struct mmc_request *mrq)
> +{
> +}
> +
+static int __init fail_mmc_request_debugfs(void)
+{
+}
Add fail_mmc_request_debugfs here and call it from mmc_init()

> +#endif /* CONFIG_FAIL_MMC_REQUEST */
> +
> +
>  /**
>  *     mmc_request_done - finish processing an MMC request
>  *     @host: MMC host which completed request
> @@ -108,6 +160,8 @@ void mmc_request_done(struct mmc_host *host, struct mmc_request *mrq)
>                cmd->error = 0;
>                host->ops->request(host, mrq);
>        } else {
> +               mmc_should_fail_request(host, mrq);
> +
>                led_trigger_event(host->led, LED_OFF);
>
>                pr_debug("%s: req done (CMD%u): %d: %08x %08x %08x %08x\n",
> diff --git a/drivers/mmc/core/debugfs.c b/drivers/mmc/core/debugfs.c
> index 998797e..588e76f 100644
> --- a/drivers/mmc/core/debugfs.c
> +++ b/drivers/mmc/core/debugfs.c
> @@ -188,6 +188,11 @@ void mmc_add_host_debugfs(struct mmc_host *host)
>                                root, &host->clk_delay))
>                goto err_node;
>  #endif
> +#ifdef CONFIG_FAIL_MMC_REQUEST
> +       if (!debugfs_create_u8("make-it-fail", S_IRUSR | S_IWUSR,
> +                              root, &host->make_it_fail))
> +               goto err_node;
> +#endif
>        return;
>
>  err_node:
> diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
> index 59db6f2..0d0a48f 100644
> --- a/include/linux/mmc/host.h
> +++ b/include/linux/mmc/host.h
> @@ -301,6 +301,9 @@ struct mmc_host {
>
>        struct mmc_async_req    *areq;          /* active async req */
>
> +#ifdef CONFIG_FAIL_MMC_REQUEST
> +       u8                      make_it_fail;
> +#endif
>        unsigned long           private[0] ____cacheline_aligned;
>  };
>
> diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
> index c768bcd..330fc70 100644
> --- a/lib/Kconfig.debug
> +++ b/lib/Kconfig.debug
> @@ -1057,6 +1057,17 @@ config FAIL_IO_TIMEOUT
>          Only works with drivers that use the generic timeout handling,
>          for others it wont do anything.
>
> +config FAIL_MMC_REQUEST
> +       bool "Fault-injection capability for MMC IO"
> +       select DEBUG_FS
> +       depends on FAULT_INJECTION
depends on FAULT_INJECTION && MMC

> +       help
> +         Provide fault-injection capability for MMC IO.
> +         This will make the mmc core return data errors. This is
> +         useful for testing the error handling in the mmc block device
> +         and how the mmc host driver handle retries from
> +         the block device.
and test how the mmc host driver handle retries from

WARNING: multiple messages have this Message-ID (diff)
From: Per Forlin <per.forlin@linaro.org>
To: linaro-dev@lists.linaro.org,
	Nicolas Pitre <nicolas.pitre@linaro.org>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, linux-mmc@vger.kernel.org,
	Venkatraman S <sv>
Cc: Per Forlin <per.forlin@linaro.org>
Subject: Re: [PATCH v9 11/12] mmc: core: add random fault injection
Date: Tue, 19 Jul 2011 08:17:02 +0200	[thread overview]
Message-ID: <CAJ0pr19Ktx_R8Zmr=rDivhc5A__N7OwoSj3ehitX_pS_xmooSA@mail.gmail.com> (raw)
In-Reply-To: <1309539333-2606-12-git-send-email-per.forlin@linaro.org>

This patch prevents mmc core to be built as a module if mmc fault
injection is selected.

Changes needed to resolve this:
 * remove fault inject module from core.c
 * export should_fail() and init_fault_attr_dentries() in fault-injection.c
 * update documentation fault-injection.txt

On 1 July 2011 18:55, Per Forlin <per.forlin@linaro.org> wrote:
> This simple fault injection proved to be very useful to
> test the error handling in the block.c rw_rq(). It may
> still be useful to test if the host driver handle
> pre_req() and post_req() correctly in case of errors.
>
> Signed-off-by: Per Forlin <per.forlin@linaro.org>
> Acked-by: Kyungmin Park <kyungmin.park@samsung.com>
> Acked-by: Arnd Bergmann <arnd@arndb.de>
> Reviewed-by: Venkatraman S <svenkatr@ti.com>
> Tested-by: Sourav Poddar<sourav.poddar@ti.com>
> Tested-by: Linus Walleij <linus.walleij@linaro.org>
> ---
>  drivers/mmc/core/core.c    |   54 ++++++++++++++++++++++++++++++++++++++++++++
>  drivers/mmc/core/debugfs.c |    5 ++++
>  include/linux/mmc/host.h   |    3 ++
>  lib/Kconfig.debug          |   11 +++++++++
>  4 files changed, 73 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
> index d2d7239..62a8cc7 100644
> --- a/drivers/mmc/core/core.c
> +++ b/drivers/mmc/core/core.c
> @@ -23,6 +23,8 @@
>  #include <linux/log2.h>
>  #include <linux/regulator/consumer.h>
>  #include <linux/pm_runtime.h>
> +#include <linux/fault-inject.h>
> +#include <linux/random.h>
>
>  #include <linux/mmc/card.h>
>  #include <linux/mmc/host.h>
> @@ -82,6 +84,56 @@ static void mmc_flush_scheduled_work(void)
>        flush_workqueue(workqueue);
>  }
>
> +#ifdef CONFIG_FAIL_MMC_REQUEST
> +
> +static DECLARE_FAULT_ATTR(fail_mmc_request);
> +
> +static int __init setup_fail_mmc_request(char *str)
> +{
> +       return setup_fault_attr(&fail_mmc_request, str);
> +}
> +__setup("fail_mmc_request=", setup_fail_mmc_request);
> +
> +static void mmc_should_fail_request(struct mmc_host *host,
> +                                   struct mmc_request *mrq)
> +{
> +       struct mmc_command *cmd = mrq->cmd;
> +       struct mmc_data *data = mrq->data;
> +       static const int data_errors[] = {
> +               -ETIMEDOUT,
> +               -EILSEQ,
> +               -EIO,
> +       };
> +
> +       if (!data)
> +               return;
> +
> +       if (cmd->error || data->error || !host->make_it_fail ||
> +           !should_fail(&fail_mmc_request, data->blksz * data->blocks))
> +               return;
> +
> +       data->error = data_errors[random32() % ARRAY_SIZE(data_errors)];
> +       data->bytes_xfered = (random32() % (data->bytes_xfered >> 9)) << 9;
> +}
> +
> +static int __init fail_mmc_request_debugfs(void)
> +{
> +       return init_fault_attr_dentries(&fail_mmc_request,
> +                                       "fail_mmc_request");
> +}
> +
> +late_initcall(fail_mmc_request_debugfs);
This line prevents mmc core to be built as a module, since there will
be two init_module (the mmc core one and this one) for the same
module.

> +
> +#else /* CONFIG_FAIL_MMC_REQUEST */
> +
> +static void mmc_should_fail_request(struct mmc_host *host,
> +                                   struct mmc_request *mrq)
> +{
> +}
> +
+static int __init fail_mmc_request_debugfs(void)
+{
+}
Add fail_mmc_request_debugfs here and call it from mmc_init()

> +#endif /* CONFIG_FAIL_MMC_REQUEST */
> +
> +
>  /**
>  *     mmc_request_done - finish processing an MMC request
>  *     @host: MMC host which completed request
> @@ -108,6 +160,8 @@ void mmc_request_done(struct mmc_host *host, struct mmc_request *mrq)
>                cmd->error = 0;
>                host->ops->request(host, mrq);
>        } else {
> +               mmc_should_fail_request(host, mrq);
> +
>                led_trigger_event(host->led, LED_OFF);
>
>                pr_debug("%s: req done (CMD%u): %d: %08x %08x %08x %08x\n",
> diff --git a/drivers/mmc/core/debugfs.c b/drivers/mmc/core/debugfs.c
> index 998797e..588e76f 100644
> --- a/drivers/mmc/core/debugfs.c
> +++ b/drivers/mmc/core/debugfs.c
> @@ -188,6 +188,11 @@ void mmc_add_host_debugfs(struct mmc_host *host)
>                                root, &host->clk_delay))
>                goto err_node;
>  #endif
> +#ifdef CONFIG_FAIL_MMC_REQUEST
> +       if (!debugfs_create_u8("make-it-fail", S_IRUSR | S_IWUSR,
> +                              root, &host->make_it_fail))
> +               goto err_node;
> +#endif
>        return;
>
>  err_node:
> diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
> index 59db6f2..0d0a48f 100644
> --- a/include/linux/mmc/host.h
> +++ b/include/linux/mmc/host.h
> @@ -301,6 +301,9 @@ struct mmc_host {
>
>        struct mmc_async_req    *areq;          /* active async req */
>
> +#ifdef CONFIG_FAIL_MMC_REQUEST
> +       u8                      make_it_fail;
> +#endif
>        unsigned long           private[0] ____cacheline_aligned;
>  };
>
> diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
> index c768bcd..330fc70 100644
> --- a/lib/Kconfig.debug
> +++ b/lib/Kconfig.debug
> @@ -1057,6 +1057,17 @@ config FAIL_IO_TIMEOUT
>          Only works with drivers that use the generic timeout handling,
>          for others it wont do anything.
>
> +config FAIL_MMC_REQUEST
> +       bool "Fault-injection capability for MMC IO"
> +       select DEBUG_FS
> +       depends on FAULT_INJECTION
depends on FAULT_INJECTION && MMC

> +       help
> +         Provide fault-injection capability for MMC IO.
> +         This will make the mmc core return data errors. This is
> +         useful for testing the error handling in the mmc block device
> +         and how the mmc host driver handle retries from
> +         the block device.
and test how the mmc host driver handle retries from

WARNING: multiple messages have this Message-ID (diff)
From: per.forlin@linaro.org (Per Forlin)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v9 11/12] mmc: core: add random fault injection
Date: Tue, 19 Jul 2011 08:17:02 +0200	[thread overview]
Message-ID: <CAJ0pr19Ktx_R8Zmr=rDivhc5A__N7OwoSj3ehitX_pS_xmooSA@mail.gmail.com> (raw)
In-Reply-To: <1309539333-2606-12-git-send-email-per.forlin@linaro.org>

This patch prevents mmc core to be built as a module if mmc fault
injection is selected.

Changes needed to resolve this:
 * remove fault inject module from core.c
 * export should_fail() and init_fault_attr_dentries() in fault-injection.c
 * update documentation fault-injection.txt

On 1 July 2011 18:55, Per Forlin <per.forlin@linaro.org> wrote:
> This simple fault injection proved to be very useful to
> test the error handling in the block.c rw_rq(). It may
> still be useful to test if the host driver handle
> pre_req() and post_req() correctly in case of errors.
>
> Signed-off-by: Per Forlin <per.forlin@linaro.org>
> Acked-by: Kyungmin Park <kyungmin.park@samsung.com>
> Acked-by: Arnd Bergmann <arnd@arndb.de>
> Reviewed-by: Venkatraman S <svenkatr@ti.com>
> Tested-by: Sourav Poddar<sourav.poddar@ti.com>
> Tested-by: Linus Walleij <linus.walleij@linaro.org>
> ---
> ?drivers/mmc/core/core.c ? ?| ? 54 ++++++++++++++++++++++++++++++++++++++++++++
> ?drivers/mmc/core/debugfs.c | ? ?5 ++++
> ?include/linux/mmc/host.h ? | ? ?3 ++
> ?lib/Kconfig.debug ? ? ? ? ?| ? 11 +++++++++
> ?4 files changed, 73 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
> index d2d7239..62a8cc7 100644
> --- a/drivers/mmc/core/core.c
> +++ b/drivers/mmc/core/core.c
> @@ -23,6 +23,8 @@
> ?#include <linux/log2.h>
> ?#include <linux/regulator/consumer.h>
> ?#include <linux/pm_runtime.h>
> +#include <linux/fault-inject.h>
> +#include <linux/random.h>
>
> ?#include <linux/mmc/card.h>
> ?#include <linux/mmc/host.h>
> @@ -82,6 +84,56 @@ static void mmc_flush_scheduled_work(void)
> ? ? ? ?flush_workqueue(workqueue);
> ?}
>
> +#ifdef CONFIG_FAIL_MMC_REQUEST
> +
> +static DECLARE_FAULT_ATTR(fail_mmc_request);
> +
> +static int __init setup_fail_mmc_request(char *str)
> +{
> + ? ? ? return setup_fault_attr(&fail_mmc_request, str);
> +}
> +__setup("fail_mmc_request=", setup_fail_mmc_request);
> +
> +static void mmc_should_fail_request(struct mmc_host *host,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct mmc_request *mrq)
> +{
> + ? ? ? struct mmc_command *cmd = mrq->cmd;
> + ? ? ? struct mmc_data *data = mrq->data;
> + ? ? ? static const int data_errors[] = {
> + ? ? ? ? ? ? ? -ETIMEDOUT,
> + ? ? ? ? ? ? ? -EILSEQ,
> + ? ? ? ? ? ? ? -EIO,
> + ? ? ? };
> +
> + ? ? ? if (!data)
> + ? ? ? ? ? ? ? return;
> +
> + ? ? ? if (cmd->error || data->error || !host->make_it_fail ||
> + ? ? ? ? ? !should_fail(&fail_mmc_request, data->blksz * data->blocks))
> + ? ? ? ? ? ? ? return;
> +
> + ? ? ? data->error = data_errors[random32() % ARRAY_SIZE(data_errors)];
> + ? ? ? data->bytes_xfered = (random32() % (data->bytes_xfered >> 9)) << 9;
> +}
> +
> +static int __init fail_mmc_request_debugfs(void)
> +{
> + ? ? ? return init_fault_attr_dentries(&fail_mmc_request,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "fail_mmc_request");
> +}
> +
> +late_initcall(fail_mmc_request_debugfs);
This line prevents mmc core to be built as a module, since there will
be two init_module (the mmc core one and this one) for the same
module.

> +
> +#else /* CONFIG_FAIL_MMC_REQUEST */
> +
> +static void mmc_should_fail_request(struct mmc_host *host,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct mmc_request *mrq)
> +{
> +}
> +
+static int __init fail_mmc_request_debugfs(void)
+{
+}
Add fail_mmc_request_debugfs here and call it from mmc_init()

> +#endif /* CONFIG_FAIL_MMC_REQUEST */
> +
> +
> ?/**
> ?* ? ? mmc_request_done - finish processing an MMC request
> ?* ? ? @host: MMC host which completed request
> @@ -108,6 +160,8 @@ void mmc_request_done(struct mmc_host *host, struct mmc_request *mrq)
> ? ? ? ? ? ? ? ?cmd->error = 0;
> ? ? ? ? ? ? ? ?host->ops->request(host, mrq);
> ? ? ? ?} else {
> + ? ? ? ? ? ? ? mmc_should_fail_request(host, mrq);
> +
> ? ? ? ? ? ? ? ?led_trigger_event(host->led, LED_OFF);
>
> ? ? ? ? ? ? ? ?pr_debug("%s: req done (CMD%u): %d: %08x %08x %08x %08x\n",
> diff --git a/drivers/mmc/core/debugfs.c b/drivers/mmc/core/debugfs.c
> index 998797e..588e76f 100644
> --- a/drivers/mmc/core/debugfs.c
> +++ b/drivers/mmc/core/debugfs.c
> @@ -188,6 +188,11 @@ void mmc_add_host_debugfs(struct mmc_host *host)
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?root, &host->clk_delay))
> ? ? ? ? ? ? ? ?goto err_node;
> ?#endif
> +#ifdef CONFIG_FAIL_MMC_REQUEST
> + ? ? ? if (!debugfs_create_u8("make-it-fail", S_IRUSR | S_IWUSR,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?root, &host->make_it_fail))
> + ? ? ? ? ? ? ? goto err_node;
> +#endif
> ? ? ? ?return;
>
> ?err_node:
> diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
> index 59db6f2..0d0a48f 100644
> --- a/include/linux/mmc/host.h
> +++ b/include/linux/mmc/host.h
> @@ -301,6 +301,9 @@ struct mmc_host {
>
> ? ? ? ?struct mmc_async_req ? ?*areq; ? ? ? ? ?/* active async req */
>
> +#ifdef CONFIG_FAIL_MMC_REQUEST
> + ? ? ? u8 ? ? ? ? ? ? ? ? ? ? ?make_it_fail;
> +#endif
> ? ? ? ?unsigned long ? ? ? ? ? private[0] ____cacheline_aligned;
> ?};
>
> diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
> index c768bcd..330fc70 100644
> --- a/lib/Kconfig.debug
> +++ b/lib/Kconfig.debug
> @@ -1057,6 +1057,17 @@ config FAIL_IO_TIMEOUT
> ? ? ? ? ?Only works with drivers that use the generic timeout handling,
> ? ? ? ? ?for others it wont do anything.
>
> +config FAIL_MMC_REQUEST
> + ? ? ? bool "Fault-injection capability for MMC IO"
> + ? ? ? select DEBUG_FS
> + ? ? ? depends on FAULT_INJECTION
depends on FAULT_INJECTION && MMC

> + ? ? ? help
> + ? ? ? ? Provide fault-injection capability for MMC IO.
> + ? ? ? ? This will make the mmc core return data errors. This is
> + ? ? ? ? useful for testing the error handling in the mmc block device
> + ? ? ? ? and how the mmc host driver handle retries from
> + ? ? ? ? the block device.
and test how the mmc host driver handle retries from

  reply	other threads:[~2011-07-19  6:17 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-01 16:55 [PATCH v9 00/12] use nonblock mmc requests to minimize latency Per Forlin
2011-07-01 16:55 ` Per Forlin
2011-07-01 16:55 ` Per Forlin
2011-07-01 16:55 ` [PATCH v9 01/12] mmc: core: add non-blocking mmc request function Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55 ` [PATCH v9 02/12] omap_hsmmc: add support for pre_req and post_req Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55 ` [PATCH v9 03/12] mmci: implement pre_req() and post_req() Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55 ` [PATCH v9 04/12] mmc: mmc_test: add debugfs file to list all tests Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55 ` [PATCH v9 05/12] mmc: mmc_test: add test for non-blocking transfers Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55 ` [PATCH v9 06/12] mmc: mmc_test: test to measure how sg_len affect performance Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55 ` [PATCH v9 07/12] mmc: block: add member in mmc queue struct to hold request data Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55 ` [PATCH v9 08/12] mmc: block: add a block request prepare function Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55 ` [PATCH v9 09/12] mmc: block: move error code in issue_rw_rq to a separate function Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55 ` [PATCH v9 10/12] mmc: queue: add a second mmc queue request member Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55 ` [PATCH v9 11/12] mmc: core: add random fault injection Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-19  6:17   ` Per Forlin [this message]
2011-07-19  6:17     ` Per Forlin
2011-07-19  6:17     ` Per Forlin
2011-07-01 16:55 ` [PATCH v9 12/12] mmc: block: add handling for two parallel block requests in issue_rw_rq Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-01 16:55   ` Per Forlin
2011-07-09 22:09 ` [PATCH v9 00/12] use nonblock mmc requests to minimize latency Chris Ball
2011-07-09 22:09   ` Chris Ball
2011-07-09 22:09   ` Chris Ball
2011-08-26 16:19 ` Russell King - ARM Linux
2011-08-26 16:19   ` Russell King - ARM Linux
2011-08-26 16:28   ` Santosh
2011-08-26 16:28     ` Santosh
2011-08-28 10:50     ` Per Forlin
2011-08-28 10:50       ` Per Forlin
2011-08-28 10:50       ` Per Forlin
2011-08-28 11:11       ` Russell King - ARM Linux
2011-08-28 11:11         ` Russell King - ARM Linux
2011-08-28 11:11         ` Russell King - ARM Linux
2011-08-28 12:13         ` Per Forlin
2011-08-28 12:13           ` Per Forlin

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='CAJ0pr19Ktx_R8Zmr=rDivhc5A__N7OwoSj3ehitX_pS_xmooSA@mail.gmail.com' \
    --to=per.forlin@linaro.org \
    --cc=arnd@arndb.de \
    --cc=cjb@laptop.org \
    --cc=kyungmin.park@samsung.com \
    --cc=linaro-dev@lists.linaro.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=nicolas.pitre@linaro.org \
    --cc=sourav.poddar@ti.com \
    --cc=svenkatr@ti.com \
    /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.