linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/3] lightnvm: do not free unused metadata on rrpc
@ 2016-04-27 17:28 Javier González
  2016-04-27 17:28 ` [PATCH 2/3] lightnvm: enable metadata to be sent to device Javier González
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Javier González @ 2016-04-27 17:28 UTC (permalink / raw)
  To: mb; +Cc: linux-kernel, linux-block, Javier González

rrpc does not save any metadata on a given request. Thus, do not attempt
to free the metadata dma region.

Signed-off-by: Javier González <javier@cnexlabs.com>
---
 drivers/lightnvm/rrpc.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/lightnvm/rrpc.c b/drivers/lightnvm/rrpc.c
index c7fef71..ffcfee6 100644
--- a/drivers/lightnvm/rrpc.c
+++ b/drivers/lightnvm/rrpc.c
@@ -711,8 +711,6 @@ static void rrpc_end_io(struct nvm_rq *rqd)
 
 	if (npages > 1)
 		nvm_dev_dma_free(rrpc->dev, rqd->ppa_list, rqd->dma_ppa_list);
-	if (rqd->metadata)
-		nvm_dev_dma_free(rrpc->dev, rqd->metadata, rqd->dma_metadata);
 
 	mempool_free(rqd, rrpc->rq_pool);
 }
-- 
2.5.0

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

* [PATCH 2/3] lightnvm: enable metadata to be sent to device
  2016-04-27 17:28 [PATCH 1/3] lightnvm: do not free unused metadata on rrpc Javier González
@ 2016-04-27 17:28 ` Javier González
  2016-04-28 13:47   ` Matias Bjørling
  2016-04-27 17:28 ` [PATCH 3/3] lightnvm: rename dma helper functions Javier González
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Javier González @ 2016-04-27 17:28 UTC (permalink / raw)
  To: mb; +Cc: linux-kernel, linux-block, Javier González

Enable metadata to be sent to the device through the metadata field on
the physical rw nvme command. When a single ppa is sent to the device, a
64-bit integer can be sent as metadata; when a ppa list is sent, a
64-bit integer list mapping to the ppa list can be used to send
metadata.

Signed-off-by: Javier González <javier@cnexlabs.com>
---
 drivers/nvme/host/lightnvm.c | 1 +
 include/linux/lightnvm.h     | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/nvme/host/lightnvm.c b/drivers/nvme/host/lightnvm.c
index b1a0d8b..92da28d 100644
--- a/drivers/nvme/host/lightnvm.c
+++ b/drivers/nvme/host/lightnvm.c
@@ -467,6 +467,7 @@ static inline void nvme_nvm_rqtocmd(struct request *rq, struct nvm_rq *rqd,
 	c->ph_rw.opcode = rqd->opcode;
 	c->ph_rw.nsid = cpu_to_le32(ns->ns_id);
 	c->ph_rw.spba = cpu_to_le64(rqd->ppa_addr.ppa);
+	c->ph_rw.metadata = cpu_to_le64(rqd->meta_list);
 	c->ph_rw.control = cpu_to_le16(rqd->flags);
 	c->ph_rw.length = cpu_to_le16(rqd->nr_pages - 1);
 
diff --git a/include/linux/lightnvm.h b/include/linux/lightnvm.h
index 1e3b53e..9768bae 100644
--- a/include/linux/lightnvm.h
+++ b/include/linux/lightnvm.h
@@ -239,8 +239,8 @@ struct nvm_rq {
 
 	struct ppa_addr *ppa_list;
 
-	void *metadata;
-	dma_addr_t dma_metadata;
+	void *meta_list;
+	dma_addr_t dma_meta_list;
 
 	struct completion *wait;
 	nvm_end_io_fn *end_io;
-- 
2.5.0

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

* [PATCH 3/3] lightnvm: rename dma helper functions
  2016-04-27 17:28 [PATCH 1/3] lightnvm: do not free unused metadata on rrpc Javier González
  2016-04-27 17:28 ` [PATCH 2/3] lightnvm: enable metadata to be sent to device Javier González
@ 2016-04-27 17:28 ` Javier González
  2016-04-27 18:54   ` Matias Bjørling
  2016-04-27 18:56 ` [PATCH 1/3] lightnvm: do not free unused metadata on rrpc Matias Bjørling
  2016-04-28 13:41 ` Matias Bjørling
  3 siblings, 1 reply; 8+ messages in thread
From: Javier González @ 2016-04-27 17:28 UTC (permalink / raw)
  To: mb; +Cc: linux-kernel, linux-block, Javier González

Until now, the dma pool have been exclusively used to allocate the ppa
list being sent to the device. In pblk (upcoming), we use these pools to
allocate metadata too. Thus, we generalize the names of some variables
on the dma helper functions to make the code more readable.

Signed-off-by: Javier González <javier@cnexlabs.com>
---
 drivers/lightnvm/core.c      | 14 +++++++-------
 drivers/nvme/host/lightnvm.c |  4 ++--
 include/linux/lightnvm.h     |  2 +-
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/lightnvm/core.c b/drivers/lightnvm/core.c
index 9b6c1c9..cb21331 100644
--- a/drivers/lightnvm/core.c
+++ b/drivers/lightnvm/core.c
@@ -87,15 +87,15 @@ EXPORT_SYMBOL(nvm_unregister_tgt_type);
 void *nvm_dev_dma_alloc(struct nvm_dev *dev, gfp_t mem_flags,
 							dma_addr_t *dma_handler)
 {
-	return dev->ops->dev_dma_alloc(dev, dev->ppalist_pool, mem_flags,
+	return dev->ops->dev_dma_alloc(dev, dev->dma_page_pool, mem_flags,
 								dma_handler);
 }
 EXPORT_SYMBOL(nvm_dev_dma_alloc);
 
-void nvm_dev_dma_free(struct nvm_dev *dev, void *ppa_list,
+void nvm_dev_dma_free(struct nvm_dev *dev, void *addr,
 							dma_addr_t dma_handler)
 {
-	dev->ops->dev_dma_free(dev->ppalist_pool, ppa_list, dma_handler);
+	dev->ops->dev_dma_free(dev->dma_page_pool, addr, dma_handler);
 }
 EXPORT_SYMBOL(nvm_dev_dma_free);
 
@@ -653,8 +653,8 @@ err:
 
 static void nvm_exit(struct nvm_dev *dev)
 {
-	if (dev->ppalist_pool)
-		dev->ops->destroy_dma_pool(dev->ppalist_pool);
+	if (dev->dma_page_pool)
+		dev->ops->destroy_dma_pool(dev->dma_page_pool);
 	nvm_free(dev);
 
 	pr_info("nvm: successfully unloaded\n");
@@ -688,8 +688,8 @@ int nvm_register(struct request_queue *q, char *disk_name,
 	}
 
 	if (dev->ops->max_phys_sect > 1) {
-		dev->ppalist_pool = dev->ops->create_dma_pool(dev, "ppalist");
-		if (!dev->ppalist_pool) {
+		dev->dma_page_pool = dev->ops->create_dma_pool(dev, "ppalist");
+		if (!dev->dma_page_pool) {
 			pr_err("nvm: could not create ppa pool\n");
 			ret = -ENOMEM;
 			goto err_init;
diff --git a/drivers/nvme/host/lightnvm.c b/drivers/nvme/host/lightnvm.c
index 76f1199..33f2315 100644
--- a/drivers/nvme/host/lightnvm.c
+++ b/drivers/nvme/host/lightnvm.c
@@ -565,10 +565,10 @@ static void *nvme_nvm_dev_dma_alloc(struct nvm_dev *dev, void *pool,
 	return dma_pool_alloc(pool, mem_flags, dma_handler);
 }
 
-static void nvme_nvm_dev_dma_free(void *pool, void *ppa_list,
+static void nvme_nvm_dev_dma_free(void *pool, void *addr,
 							dma_addr_t dma_handler)
 {
-	dma_pool_free(pool, ppa_list, dma_handler);
+	dma_pool_free(pool, addr, dma_handler);
 }
 
 static struct nvm_dev_ops nvme_nvm_dev_ops = {
diff --git a/include/linux/lightnvm.h b/include/linux/lightnvm.h
index 9d8a350..7c615b0 100644
--- a/include/linux/lightnvm.h
+++ b/include/linux/lightnvm.h
@@ -368,7 +368,7 @@ struct nvm_dev {
 	unsigned max_pages_per_blk;
 
 	unsigned long *lun_map;
-	void *ppalist_pool;
+	void *dma_page_pool;
 
 	struct nvm_id identity;
 
-- 
2.5.0

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

* Re: [PATCH 3/3] lightnvm: rename dma helper functions
  2016-04-27 17:28 ` [PATCH 3/3] lightnvm: rename dma helper functions Javier González
@ 2016-04-27 18:54   ` Matias Bjørling
  2016-04-27 20:17     ` Javier González
  0 siblings, 1 reply; 8+ messages in thread
From: Matias Bjørling @ 2016-04-27 18:54 UTC (permalink / raw)
  To: Javier González, mb; +Cc: linux-kernel, linux-block, Javier González

On 04/27/2016 07:28 PM, Javier González wrote:
> Until now, the dma pool have been exclusively used to allocate the ppa
> list being sent to the device. In pblk (upcoming), we use these pools to
> allocate metadata too. Thus, we generalize the names of some variables
> on the dma helper functions to make the code more readable.
>
> Signed-off-by: Javier González <javier@cnexlabs.com>
> ---
>   drivers/lightnvm/core.c      | 14 +++++++-------
>   drivers/nvme/host/lightnvm.c |  4 ++--
>   include/linux/lightnvm.h     |  2 +-
>   3 files changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/lightnvm/core.c b/drivers/lightnvm/core.c
> index 9b6c1c9..cb21331 100644
> --- a/drivers/lightnvm/core.c
> +++ b/drivers/lightnvm/core.c
> @@ -87,15 +87,15 @@ EXPORT_SYMBOL(nvm_unregister_tgt_type);
>   void *nvm_dev_dma_alloc(struct nvm_dev *dev, gfp_t mem_flags,
>   							dma_addr_t *dma_handler)
>   {
> -	return dev->ops->dev_dma_alloc(dev, dev->ppalist_pool, mem_flags,
> +	return dev->ops->dev_dma_alloc(dev, dev->dma_page_pool, mem_flags,
>   								dma_handler);
>   }
>   EXPORT_SYMBOL(nvm_dev_dma_alloc);
>
> -void nvm_dev_dma_free(struct nvm_dev *dev, void *ppa_list,
> +void nvm_dev_dma_free(struct nvm_dev *dev, void *addr,
>   							dma_addr_t dma_handler)
>   {
> -	dev->ops->dev_dma_free(dev->ppalist_pool, ppa_list, dma_handler);
> +	dev->ops->dev_dma_free(dev->dma_page_pool, addr, dma_handler);
>   }
>   EXPORT_SYMBOL(nvm_dev_dma_free);
>
> @@ -653,8 +653,8 @@ err:
>
>   static void nvm_exit(struct nvm_dev *dev)
>   {
> -	if (dev->ppalist_pool)
> -		dev->ops->destroy_dma_pool(dev->ppalist_pool);
> +	if (dev->dma_page_pool)
> +		dev->ops->destroy_dma_pool(dev->dma_page_pool);
>   	nvm_free(dev);
>
>   	pr_info("nvm: successfully unloaded\n");
> @@ -688,8 +688,8 @@ int nvm_register(struct request_queue *q, char *disk_name,
>   	}
>
>   	if (dev->ops->max_phys_sect > 1) {
> -		dev->ppalist_pool = dev->ops->create_dma_pool(dev, "ppalist");
> -		if (!dev->ppalist_pool) {
> +		dev->dma_page_pool = dev->ops->create_dma_pool(dev, "ppalist");

rename to dmapool or something similar?

> +		if (!dev->dma_page_pool) {
>   			pr_err("nvm: could not create ppa pool\n");

Make sure to fix up the text here as well. Else it looks good.

>   			ret = -ENOMEM;
>   			goto err_init;
> diff --git a/drivers/nvme/host/lightnvm.c b/drivers/nvme/host/lightnvm.c
> index 76f1199..33f2315 100644
> --- a/drivers/nvme/host/lightnvm.c
> +++ b/drivers/nvme/host/lightnvm.c
> @@ -565,10 +565,10 @@ static void *nvme_nvm_dev_dma_alloc(struct nvm_dev *dev, void *pool,
>   	return dma_pool_alloc(pool, mem_flags, dma_handler);
>   }
>
> -static void nvme_nvm_dev_dma_free(void *pool, void *ppa_list,
> +static void nvme_nvm_dev_dma_free(void *pool, void *addr,
>   							dma_addr_t dma_handler)
>   {
> -	dma_pool_free(pool, ppa_list, dma_handler);
> +	dma_pool_free(pool, addr, dma_handler);
>   }
>
>   static struct nvm_dev_ops nvme_nvm_dev_ops = {
> diff --git a/include/linux/lightnvm.h b/include/linux/lightnvm.h
> index 9d8a350..7c615b0 100644
> --- a/include/linux/lightnvm.h
> +++ b/include/linux/lightnvm.h
> @@ -368,7 +368,7 @@ struct nvm_dev {
>   	unsigned max_pages_per_blk;
>
>   	unsigned long *lun_map;
> -	void *ppalist_pool;
> +	void *dma_page_pool;
>
>   	struct nvm_id identity;
>
>

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

* Re: [PATCH 1/3] lightnvm: do not free unused metadata on rrpc
  2016-04-27 17:28 [PATCH 1/3] lightnvm: do not free unused metadata on rrpc Javier González
  2016-04-27 17:28 ` [PATCH 2/3] lightnvm: enable metadata to be sent to device Javier González
  2016-04-27 17:28 ` [PATCH 3/3] lightnvm: rename dma helper functions Javier González
@ 2016-04-27 18:56 ` Matias Bjørling
  2016-04-28 13:41 ` Matias Bjørling
  3 siblings, 0 replies; 8+ messages in thread
From: Matias Bjørling @ 2016-04-27 18:56 UTC (permalink / raw)
  To: Javier González; +Cc: linux-kernel, linux-block

On 04/27/2016 07:28 PM, Javier González wrote:
> rrpc does not save any metadata on a given request. Thus, do not attempt
> to free the metadata dma region.
>
> Signed-off-by: Javier González <javier@cnexlabs.com>
> ---
>   drivers/lightnvm/rrpc.c | 2 --
>   1 file changed, 2 deletions(-)
>
> diff --git a/drivers/lightnvm/rrpc.c b/drivers/lightnvm/rrpc.c
> index c7fef71..ffcfee6 100644
> --- a/drivers/lightnvm/rrpc.c
> +++ b/drivers/lightnvm/rrpc.c
> @@ -711,8 +711,6 @@ static void rrpc_end_io(struct nvm_rq *rqd)
>
>   	if (npages > 1)
>   		nvm_dev_dma_free(rrpc->dev, rqd->ppa_list, rqd->dma_ppa_list);
> -	if (rqd->metadata)
> -		nvm_dev_dma_free(rrpc->dev, rqd->metadata, rqd->dma_metadata);
>
>   	mempool_free(rqd, rrpc->rq_pool);
>   }
>

Thanks. Applied for 4.7.

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

* Re: [PATCH 3/3] lightnvm: rename dma helper functions
  2016-04-27 18:54   ` Matias Bjørling
@ 2016-04-27 20:17     ` Javier González
  0 siblings, 0 replies; 8+ messages in thread
From: Javier González @ 2016-04-27 20:17 UTC (permalink / raw)
  To: Matias Bjørling
  Cc: Javier González, mb, linux-kernel, linux-block,
	Javier González


>>      if (dev->ops->max_phys_sect > 1) {
>> -        dev->ppalist_pool = dev->ops->create_dma_pool(dev, "ppalist");
>> -        if (!dev->ppalist_pool) {
>> +        dev->dma_page_pool = dev->ops->create_dma_pool(dev, "ppalist");
> 
> rename to dmapool or something similar?
> 
>> +        if (!dev->dma_page_pool) {
>>              pr_err("nvm: could not create ppa pool\n");
> 
> Make sure to fix up the text here as well. Else it looks good.
> 
>>              ret = -ENOMEM;
> 

Thanks. I'll fix it and resubmit tomorrow. 

Javier. 

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

* Re: [PATCH 1/3] lightnvm: do not free unused metadata on rrpc
  2016-04-27 17:28 [PATCH 1/3] lightnvm: do not free unused metadata on rrpc Javier González
                   ` (2 preceding siblings ...)
  2016-04-27 18:56 ` [PATCH 1/3] lightnvm: do not free unused metadata on rrpc Matias Bjørling
@ 2016-04-28 13:41 ` Matias Bjørling
  3 siblings, 0 replies; 8+ messages in thread
From: Matias Bjørling @ 2016-04-28 13:41 UTC (permalink / raw)
  To: Javier González; +Cc: linux-kernel, linux-block, Javier González

On 04/27/2016 07:28 PM, Javier González wrote:
> rrpc does not save any metadata on a given request. Thus, do not attempt
> to free the metadata dma region.
>
> Signed-off-by: Javier González <javier@cnexlabs.com>
> ---
>   drivers/lightnvm/rrpc.c | 2 --
>   1 file changed, 2 deletions(-)
>
> diff --git a/drivers/lightnvm/rrpc.c b/drivers/lightnvm/rrpc.c
> index c7fef71..ffcfee6 100644
> --- a/drivers/lightnvm/rrpc.c
> +++ b/drivers/lightnvm/rrpc.c
> @@ -711,8 +711,6 @@ static void rrpc_end_io(struct nvm_rq *rqd)
>
>   	if (npages > 1)
>   		nvm_dev_dma_free(rrpc->dev, rqd->ppa_list, rqd->dma_ppa_list);
> -	if (rqd->metadata)
> -		nvm_dev_dma_free(rrpc->dev, rqd->metadata, rqd->dma_metadata);
>
>   	mempool_free(rqd, rrpc->rq_pool);
>   }
>

Thanks Javier. Applied for 4.7.

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

* Re: [PATCH 2/3] lightnvm: enable metadata to be sent to device
  2016-04-27 17:28 ` [PATCH 2/3] lightnvm: enable metadata to be sent to device Javier González
@ 2016-04-28 13:47   ` Matias Bjørling
  0 siblings, 0 replies; 8+ messages in thread
From: Matias Bjørling @ 2016-04-28 13:47 UTC (permalink / raw)
  To: Javier González; +Cc: linux-kernel, linux-block, Javier González

On 04/27/2016 07:28 PM, Javier González wrote:
> Enable metadata to be sent to the device through the metadata field on
> the physical rw nvme command. When a single ppa is sent to the device, a
> 64-bit integer can be sent as metadata; when a ppa list is sent, a
> 64-bit integer list mapping to the ppa list can be used to send
> metadata.
>
> Signed-off-by: Javier González <javier@cnexlabs.com>
> ---
>   drivers/nvme/host/lightnvm.c | 1 +
>   include/linux/lightnvm.h     | 4 ++--
>   2 files changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/nvme/host/lightnvm.c b/drivers/nvme/host/lightnvm.c
> index b1a0d8b..92da28d 100644
> --- a/drivers/nvme/host/lightnvm.c
> +++ b/drivers/nvme/host/lightnvm.c
> @@ -467,6 +467,7 @@ static inline void nvme_nvm_rqtocmd(struct request *rq, struct nvm_rq *rqd,
>   	c->ph_rw.opcode = rqd->opcode;
>   	c->ph_rw.nsid = cpu_to_le32(ns->ns_id);
>   	c->ph_rw.spba = cpu_to_le64(rqd->ppa_addr.ppa);
> +	c->ph_rw.metadata = cpu_to_le64(rqd->meta_list);
>   	c->ph_rw.control = cpu_to_le16(rqd->flags);
>   	c->ph_rw.length = cpu_to_le16(rqd->nr_pages - 1);
>
> diff --git a/include/linux/lightnvm.h b/include/linux/lightnvm.h
> index 1e3b53e..9768bae 100644
> --- a/include/linux/lightnvm.h
> +++ b/include/linux/lightnvm.h
> @@ -239,8 +239,8 @@ struct nvm_rq {
>
>   	struct ppa_addr *ppa_list;
>
> -	void *metadata;
> -	dma_addr_t dma_metadata;
> +	void *meta_list;
> +	dma_addr_t dma_meta_list;
>
>   	struct completion *wait;
>   	nvm_end_io_fn *end_io;
>

Thanks Javier. Applied for 4.7.

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

end of thread, other threads:[~2016-04-28 13:47 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-27 17:28 [PATCH 1/3] lightnvm: do not free unused metadata on rrpc Javier González
2016-04-27 17:28 ` [PATCH 2/3] lightnvm: enable metadata to be sent to device Javier González
2016-04-28 13:47   ` Matias Bjørling
2016-04-27 17:28 ` [PATCH 3/3] lightnvm: rename dma helper functions Javier González
2016-04-27 18:54   ` Matias Bjørling
2016-04-27 20:17     ` Javier González
2016-04-27 18:56 ` [PATCH 1/3] lightnvm: do not free unused metadata on rrpc Matias Bjørling
2016-04-28 13:41 ` Matias Bjørling

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