LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH] mmc: android-goldfish: Drop pointer to mmc_host from goldfish_mmc_host
@ 2019-05-07 19:52 Kamlesh Gurudasani
  2019-05-28  8:52 ` Ulf Hansson
  0 siblings, 1 reply; 2+ messages in thread
From: Kamlesh Gurudasani @ 2019-05-07 19:52 UTC (permalink / raw)
  To: Ulf Hansson, linux-mmc, linux-kernel
  Cc: Mike Lockwood, Christoph Hellwig, Gustavo A . R . Silva,
	Kamlesh Gurudasani

The driver for android-goldfish uses a pointer to get from the private
goldfish_mmc_host structure to the generic mmc_host structure.
However the latter is always immediately preceding the former in
memory, so compute its address with a subtraction (which is cheaper than a
dereference) and drop the superfluous pointer.

No functional change intended.

Signed-off-by: Kamlesh Gurudasani <kamlesh.gurudasani@gmail.com>
---
 drivers/mmc/host/android-goldfish.c | 31 +++++++++++++++----------------
 1 file changed, 15 insertions(+), 16 deletions(-)

diff --git a/drivers/mmc/host/android-goldfish.c b/drivers/mmc/host/android-goldfish.c
index 61e4e2a..f6334c2 100644
--- a/drivers/mmc/host/android-goldfish.c
+++ b/drivers/mmc/host/android-goldfish.c
@@ -113,7 +113,6 @@ struct goldfish_mmc_host {
 	struct mmc_request	*mrq;
 	struct mmc_command	*cmd;
 	struct mmc_data		*data;
-	struct mmc_host		*mmc;
 	struct device		*dev;
 	unsigned char		id; /* 16xx chips have 2 MMC blocks */
 	void			*virt_base;
@@ -175,7 +174,7 @@ goldfish_mmc_start_command(struct goldfish_mmc_host *host, struct mmc_command *c
 		resptype = 3;
 		break;
 	default:
-		dev_err(mmc_dev(host->mmc),
+		dev_err(mmc_dev(mmc_from_priv(host)),
 			"Invalid response type: %04x\n", mmc_resp_type(cmd));
 		break;
 	}
@@ -221,8 +220,8 @@ static void goldfish_mmc_xfer_done(struct goldfish_mmc_host *host,
 					data->sg->length);
 		}
 		host->data->bytes_xfered += data->sg->length;
-		dma_unmap_sg(mmc_dev(host->mmc), data->sg, host->sg_len,
-			     dma_data_dir);
+		dma_unmap_sg(mmc_dev(mmc_from_priv(host)), data->sg,
+			     host->sg_len, dma_data_dir);
 	}
 
 	host->data = NULL;
@@ -236,7 +235,7 @@ static void goldfish_mmc_xfer_done(struct goldfish_mmc_host *host,
 
 	if (!data->stop) {
 		host->mrq = NULL;
-		mmc_request_done(host->mmc, data->mrq);
+		mmc_request_done(mmc_from_priv(host), data->mrq);
 		return;
 	}
 
@@ -278,7 +277,7 @@ static void goldfish_mmc_cmd_done(struct goldfish_mmc_host *host,
 
 	if (host->data == NULL || cmd->error) {
 		host->mrq = NULL;
-		mmc_request_done(host->mmc, cmd->mrq);
+		mmc_request_done(mmc_from_priv(host), cmd->mrq);
 	}
 }
 
@@ -313,7 +312,7 @@ static irqreturn_t goldfish_mmc_irq(int irq, void *dev_id)
 		struct mmc_request *mrq = host->mrq;
 		mrq->cmd->error = -ETIMEDOUT;
 		host->mrq = NULL;
-		mmc_request_done(host->mmc, mrq);
+		mmc_request_done(mmc_from_priv(host), mrq);
 	}
 
 	if (end_command)
@@ -339,12 +338,13 @@ static irqreturn_t goldfish_mmc_irq(int irq, void *dev_id)
 		u32 state = GOLDFISH_MMC_READ(host, MMC_STATE);
 		pr_info("%s: Card detect now %d\n", __func__,
 			(state & MMC_STATE_INSERTED));
-		mmc_detect_change(host->mmc, 0);
+		mmc_detect_change(mmc_from_priv(host), 0);
 	}
 
 	if (!end_command && !end_transfer && !state_changed && !cmd_timeout) {
 		status = GOLDFISH_MMC_READ(host, MMC_INT_STATUS);
-		dev_info(mmc_dev(host->mmc),"spurious irq 0x%04x\n", status);
+		dev_info(mmc_dev(mmc_from_priv(host)), "spurious irq 0x%04x\n",
+			 status);
 		if (status != 0) {
 			GOLDFISH_MMC_WRITE(host, MMC_INT_STATUS, status);
 			GOLDFISH_MMC_WRITE(host, MMC_INT_ENABLE, 0);
@@ -383,7 +383,7 @@ static void goldfish_mmc_prepare_data(struct goldfish_mmc_host *host,
 
 	dma_data_dir = mmc_get_dma_dir(data);
 
-	host->sg_len = dma_map_sg(mmc_dev(host->mmc), data->sg,
+	host->sg_len = dma_map_sg(mmc_dev(mmc_from_priv(host)), data->sg,
 				  sg_len, dma_data_dir);
 	host->dma_done = 0;
 	host->dma_in_use = 1;
@@ -461,7 +461,6 @@ static int goldfish_mmc_probe(struct platform_device *pdev)
 	}
 
 	host = mmc_priv(mmc);
-	host->mmc = mmc;
 
 	pr_err("mmc: Mapping %lX to %lX\n", (long)res->start, (long)res->end);
 	host->reg_base = ioremap(res->start, resource_size(res));
@@ -508,8 +507,7 @@ static int goldfish_mmc_probe(struct platform_device *pdev)
 
 	ret = device_create_file(&pdev->dev, &dev_attr_cover_switch);
 	if (ret)
-		dev_warn(mmc_dev(host->mmc),
-			 "Unable to create sysfs attributes\n");
+		dev_warn(mmc_dev(mmc), "Unable to create sysfs attributes\n");
 
 	GOLDFISH_MMC_WRITE(host, MMC_SET_BUFFER, host->phys_base);
 	GOLDFISH_MMC_WRITE(host, MMC_INT_ENABLE,
@@ -525,7 +523,7 @@ static int goldfish_mmc_probe(struct platform_device *pdev)
 dma_alloc_failed:
 	iounmap(host->reg_base);
 ioremap_failed:
-	mmc_free_host(host->mmc);
+	mmc_free_host(mmc);
 err_alloc_host_failed:
 	return ret;
 }
@@ -533,14 +531,15 @@ static int goldfish_mmc_probe(struct platform_device *pdev)
 static int goldfish_mmc_remove(struct platform_device *pdev)
 {
 	struct goldfish_mmc_host *host = platform_get_drvdata(pdev);
+	struct mmc_host *mmc = mmc_from_priv(host);
 
 	BUG_ON(host == NULL);
 
-	mmc_remove_host(host->mmc);
+	mmc_remove_host(mmc);
 	free_irq(host->irq, host);
 	dma_free_coherent(&pdev->dev, BUFFER_SIZE, host->virt_base, host->phys_base);
 	iounmap(host->reg_base);
-	mmc_free_host(host->mmc);
+	mmc_free_host(mmc);
 	return 0;
 }
 
-- 
2.7.4


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] mmc: android-goldfish: Drop pointer to mmc_host from goldfish_mmc_host
  2019-05-07 19:52 [PATCH] mmc: android-goldfish: Drop pointer to mmc_host from goldfish_mmc_host Kamlesh Gurudasani
@ 2019-05-28  8:52 ` Ulf Hansson
  0 siblings, 0 replies; 2+ messages in thread
From: Ulf Hansson @ 2019-05-28  8:52 UTC (permalink / raw)
  To: Kamlesh Gurudasani
  Cc: linux-mmc, Linux Kernel Mailing List, Mike Lockwood,
	Christoph Hellwig, Gustavo A . R . Silva

On Tue, 7 May 2019 at 21:53, Kamlesh Gurudasani
<kamlesh.gurudasani@gmail.com> wrote:
>
> The driver for android-goldfish uses a pointer to get from the private
> goldfish_mmc_host structure to the generic mmc_host structure.
> However the latter is always immediately preceding the former in
> memory, so compute its address with a subtraction (which is cheaper than a
> dereference) and drop the superfluous pointer.
>
> No functional change intended.
>
> Signed-off-by: Kamlesh Gurudasani <kamlesh.gurudasani@gmail.com>

Applied for next, thanks!

Kind regards
Uffe


> ---
>  drivers/mmc/host/android-goldfish.c | 31 +++++++++++++++----------------
>  1 file changed, 15 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/mmc/host/android-goldfish.c b/drivers/mmc/host/android-goldfish.c
> index 61e4e2a..f6334c2 100644
> --- a/drivers/mmc/host/android-goldfish.c
> +++ b/drivers/mmc/host/android-goldfish.c
> @@ -113,7 +113,6 @@ struct goldfish_mmc_host {
>         struct mmc_request      *mrq;
>         struct mmc_command      *cmd;
>         struct mmc_data         *data;
> -       struct mmc_host         *mmc;
>         struct device           *dev;
>         unsigned char           id; /* 16xx chips have 2 MMC blocks */
>         void                    *virt_base;
> @@ -175,7 +174,7 @@ goldfish_mmc_start_command(struct goldfish_mmc_host *host, struct mmc_command *c
>                 resptype = 3;
>                 break;
>         default:
> -               dev_err(mmc_dev(host->mmc),
> +               dev_err(mmc_dev(mmc_from_priv(host)),
>                         "Invalid response type: %04x\n", mmc_resp_type(cmd));
>                 break;
>         }
> @@ -221,8 +220,8 @@ static void goldfish_mmc_xfer_done(struct goldfish_mmc_host *host,
>                                         data->sg->length);
>                 }
>                 host->data->bytes_xfered += data->sg->length;
> -               dma_unmap_sg(mmc_dev(host->mmc), data->sg, host->sg_len,
> -                            dma_data_dir);
> +               dma_unmap_sg(mmc_dev(mmc_from_priv(host)), data->sg,
> +                            host->sg_len, dma_data_dir);
>         }
>
>         host->data = NULL;
> @@ -236,7 +235,7 @@ static void goldfish_mmc_xfer_done(struct goldfish_mmc_host *host,
>
>         if (!data->stop) {
>                 host->mrq = NULL;
> -               mmc_request_done(host->mmc, data->mrq);
> +               mmc_request_done(mmc_from_priv(host), data->mrq);
>                 return;
>         }
>
> @@ -278,7 +277,7 @@ static void goldfish_mmc_cmd_done(struct goldfish_mmc_host *host,
>
>         if (host->data == NULL || cmd->error) {
>                 host->mrq = NULL;
> -               mmc_request_done(host->mmc, cmd->mrq);
> +               mmc_request_done(mmc_from_priv(host), cmd->mrq);
>         }
>  }
>
> @@ -313,7 +312,7 @@ static irqreturn_t goldfish_mmc_irq(int irq, void *dev_id)
>                 struct mmc_request *mrq = host->mrq;
>                 mrq->cmd->error = -ETIMEDOUT;
>                 host->mrq = NULL;
> -               mmc_request_done(host->mmc, mrq);
> +               mmc_request_done(mmc_from_priv(host), mrq);
>         }
>
>         if (end_command)
> @@ -339,12 +338,13 @@ static irqreturn_t goldfish_mmc_irq(int irq, void *dev_id)
>                 u32 state = GOLDFISH_MMC_READ(host, MMC_STATE);
>                 pr_info("%s: Card detect now %d\n", __func__,
>                         (state & MMC_STATE_INSERTED));
> -               mmc_detect_change(host->mmc, 0);
> +               mmc_detect_change(mmc_from_priv(host), 0);
>         }
>
>         if (!end_command && !end_transfer && !state_changed && !cmd_timeout) {
>                 status = GOLDFISH_MMC_READ(host, MMC_INT_STATUS);
> -               dev_info(mmc_dev(host->mmc),"spurious irq 0x%04x\n", status);
> +               dev_info(mmc_dev(mmc_from_priv(host)), "spurious irq 0x%04x\n",
> +                        status);
>                 if (status != 0) {
>                         GOLDFISH_MMC_WRITE(host, MMC_INT_STATUS, status);
>                         GOLDFISH_MMC_WRITE(host, MMC_INT_ENABLE, 0);
> @@ -383,7 +383,7 @@ static void goldfish_mmc_prepare_data(struct goldfish_mmc_host *host,
>
>         dma_data_dir = mmc_get_dma_dir(data);
>
> -       host->sg_len = dma_map_sg(mmc_dev(host->mmc), data->sg,
> +       host->sg_len = dma_map_sg(mmc_dev(mmc_from_priv(host)), data->sg,
>                                   sg_len, dma_data_dir);
>         host->dma_done = 0;
>         host->dma_in_use = 1;
> @@ -461,7 +461,6 @@ static int goldfish_mmc_probe(struct platform_device *pdev)
>         }
>
>         host = mmc_priv(mmc);
> -       host->mmc = mmc;
>
>         pr_err("mmc: Mapping %lX to %lX\n", (long)res->start, (long)res->end);
>         host->reg_base = ioremap(res->start, resource_size(res));
> @@ -508,8 +507,7 @@ static int goldfish_mmc_probe(struct platform_device *pdev)
>
>         ret = device_create_file(&pdev->dev, &dev_attr_cover_switch);
>         if (ret)
> -               dev_warn(mmc_dev(host->mmc),
> -                        "Unable to create sysfs attributes\n");
> +               dev_warn(mmc_dev(mmc), "Unable to create sysfs attributes\n");
>
>         GOLDFISH_MMC_WRITE(host, MMC_SET_BUFFER, host->phys_base);
>         GOLDFISH_MMC_WRITE(host, MMC_INT_ENABLE,
> @@ -525,7 +523,7 @@ static int goldfish_mmc_probe(struct platform_device *pdev)
>  dma_alloc_failed:
>         iounmap(host->reg_base);
>  ioremap_failed:
> -       mmc_free_host(host->mmc);
> +       mmc_free_host(mmc);
>  err_alloc_host_failed:
>         return ret;
>  }
> @@ -533,14 +531,15 @@ static int goldfish_mmc_probe(struct platform_device *pdev)
>  static int goldfish_mmc_remove(struct platform_device *pdev)
>  {
>         struct goldfish_mmc_host *host = platform_get_drvdata(pdev);
> +       struct mmc_host *mmc = mmc_from_priv(host);
>
>         BUG_ON(host == NULL);
>
> -       mmc_remove_host(host->mmc);
> +       mmc_remove_host(mmc);
>         free_irq(host->irq, host);
>         dma_free_coherent(&pdev->dev, BUFFER_SIZE, host->virt_base, host->phys_base);
>         iounmap(host->reg_base);
> -       mmc_free_host(host->mmc);
> +       mmc_free_host(mmc);
>         return 0;
>  }
>
> --
> 2.7.4
>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-05-28  8:53 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-07 19:52 [PATCH] mmc: android-goldfish: Drop pointer to mmc_host from goldfish_mmc_host Kamlesh Gurudasani
2019-05-28  8:52 ` Ulf Hansson

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).