All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] lightnvm: introduce ADDR_PADDED to signal padding
@ 2016-04-26 14:35 Javier González
  2016-04-26 14:35 ` [PATCH 2/2] lightnvm: enable metadata to be sent to device Javier González
  2016-04-26 14:35 ` [PATCH 1/2] lightnvm: free metadata dma on rrpc when needed Javier González
  0 siblings, 2 replies; 3+ messages in thread
From: Javier González @ 2016-04-26 14:35 UTC (permalink / raw)
  To: mb; +Cc: linux-kernel, linux-block, Javier González

When REQ_FUA or REQ_FLUSH are sent from the block layer, a target might
need to pad some sectors in order to meet device constrains. ADDR_PADDED
allows to signal that such sector has been padded. It can be used to
mark both lbas and ppas.

Signed-off-by: Javier González <javier@cnexlabs.com>
---
 include/linux/lightnvm.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/linux/lightnvm.h b/include/linux/lightnvm.h
index 37cda94..5c48207 100644
--- a/include/linux/lightnvm.h
+++ b/include/linux/lightnvm.h
@@ -214,6 +214,7 @@ struct nvm_tgt_instance {
 };
 
 #define ADDR_EMPTY (~0ULL)
+#define ADDR_PADDED (~0ULL - 1)
 
 #define NVM_VERSION_MAJOR 1
 #define NVM_VERSION_MINOR 0
-- 
2.5.0

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

* [PATCH 2/2] lightnvm: enable metadata to be sent to device
  2016-04-26 14:35 [PATCH] lightnvm: introduce ADDR_PADDED to signal padding Javier González
@ 2016-04-26 14:35 ` Javier González
  2016-04-26 14:35 ` [PATCH 1/2] lightnvm: free metadata dma on rrpc when needed Javier González
  1 sibling, 0 replies; 3+ messages in thread
From: Javier González @ 2016-04-26 14:35 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     | 8 ++++++--
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/nvme/host/lightnvm.c b/drivers/nvme/host/lightnvm.c
index 4956de3..7886c2c 100644
--- a/drivers/nvme/host/lightnvm.c
+++ b/drivers/nvme/host/lightnvm.c
@@ -504,6 +504,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->metadata);
 	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 208887f..f0936e3 100644
--- a/include/linux/lightnvm.h
+++ b/include/linux/lightnvm.h
@@ -237,8 +237,12 @@ struct nvm_rq {
 
 	struct ppa_addr *ppa_list;
 
-	void *metadata;
-	dma_addr_t dma_metadata;
+	union {
+		u64 metadata;
+		dma_addr_t dma_meta_list;
+	};
+
+	u64 *meta_list;
 
 	struct completion *wait;
 	nvm_end_io_fn *end_io;
-- 
2.5.0

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

* [PATCH 1/2] lightnvm: free metadata dma on rrpc when needed
  2016-04-26 14:35 [PATCH] lightnvm: introduce ADDR_PADDED to signal padding Javier González
  2016-04-26 14:35 ` [PATCH 2/2] lightnvm: enable metadata to be sent to device Javier González
@ 2016-04-26 14:35 ` Javier González
  1 sibling, 0 replies; 3+ messages in thread
From: Javier González @ 2016-04-26 14:35 UTC (permalink / raw)
  To: mb; +Cc: linux-kernel, linux-block, Javier González

rrpc has assumed that medatada is always sent as a dma buffer to the
device. When this is not true, do not attempt to free a non-allocated
dma region.

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

diff --git a/drivers/lightnvm/rrpc.c b/drivers/lightnvm/rrpc.c
index a9a5fcc..ba789c3 100644
--- a/drivers/lightnvm/rrpc.c
+++ b/drivers/lightnvm/rrpc.c
@@ -707,10 +707,12 @@ static void rrpc_end_io(struct nvm_rq *rqd)
 
 	rrpc_unlock_rq(rrpc, rqd);
 
-	if (npages > 1)
+	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);
+		if (rqd->meta_list)
+			nvm_dev_dma_free(rrpc->dev, rqd->meta_list,
+							rqd->dma_meta_list);
+	}
 
 	mempool_free(rqd, rrpc->rq_pool);
 }
-- 
2.5.0

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

end of thread, other threads:[~2016-04-26 14:35 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-26 14:35 [PATCH] lightnvm: introduce ADDR_PADDED to signal padding Javier González
2016-04-26 14:35 ` [PATCH 2/2] lightnvm: enable metadata to be sent to device Javier González
2016-04-26 14:35 ` [PATCH 1/2] lightnvm: free metadata dma on rrpc when needed Javier González

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.