summaryrefslogtreecommitdiffstats
path: root/Documentation/nvdimm/btt.txt
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2015-06-25 04:48:19 -0400
committerDan Williams <dan.j.williams@intel.com>2015-06-26 11:23:38 -0400
commitbc30196f715ed3a94d050ef8bc465e567a6050be (patch)
treef6eb086e69aeaec577b9a168933dadfaa2288f61 /Documentation/nvdimm/btt.txt
parent6bc756193ff61bf5e7b3cfedfbb0873bf40f8055 (diff)
downloadlinux-bc30196f715ed3a94d050ef8bc465e567a6050be.tar.bz2
libnvdimm: Non-Volatile Devices
Maintainer information and documentation for drivers/nvdimm Cc: Andy Lutomirski <luto@amacapital.net> Cc: Boaz Harrosh <boaz@plexistor.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Jens Axboe <axboe@fb.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Christoph Hellwig <hch@lst.de> Cc: Neil Brown <neilb@suse.de> Cc: Greg KH <gregkh@linuxfoundation.org> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'Documentation/nvdimm/btt.txt')
-rw-r--r--Documentation/nvdimm/btt.txt24
1 files changed, 17 insertions, 7 deletions
diff --git a/Documentation/nvdimm/btt.txt b/Documentation/nvdimm/btt.txt
index 95134d5ec4a0..b91443f577dc 100644
--- a/Documentation/nvdimm/btt.txt
+++ b/Documentation/nvdimm/btt.txt
@@ -80,9 +80,17 @@ block. Each map entry is 32 bits. The two most significant bits are special
flags, and the remaining form the internal block number.
Bit Description
-31 : TRIM flag - marks if the block was trimmed or discarded
-30 : ERROR flag - marks an error block. Cleared on write.
-29 - 0 : Mappings to internal 'postmap' blocks
+31 - 30 : Error and Zero flags - Used in the following way:
+ Bit Description
+ 31 30
+ -----------------------------------------------------------------------
+ 00 Initial state. Reads return zeroes; Premap = Postmap
+ 01 Zero state: Reads return zeroes
+ 10 Error state: Reads fail; Writes clear 'E' bit
+ 11 Normal Block – has valid postmap
+
+
+29 - 0 : Mappings to internal 'postmap' blocks
Some of the terminology that will be subsequently used:
@@ -127,10 +135,11 @@ old_map': alternate old postmap entry
new_map': alternate new postmap entry
seq' : alternate sequence number.
-Each of the above fields is 32-bit, making one entry 16 bytes. Flog updates are
+Each of the above fields is 32-bit, making one entry 32 bytes. Entries are also
+padded to 64 bytes to avoid cache line sharing or aliasing. Flog updates are
done such that for any entry being written, it:
a. overwrites the 'old' section in the entry based on sequence numbers
-b. writes the new entry such that the sequence number is written last.
+b. writes the 'new' section such that the sequence number is written last.
c. The concept of lanes
@@ -141,8 +150,9 @@ concurrently, 'nlanes' is the number of IOs the BTT device as a whole can
process.
nlanes = min(nfree, num_cpus)
A lane number is obtained at the start of any IO, and is used for indexing into
-all the on-disk and in-memory data structures for the duration of the IO. It is
-protected by a spinlock.
+all the on-disk and in-memory data structures for the duration of the IO. If
+there are more CPUs than the max number of available lanes, than lanes are
+protected by spinlocks.
d. In-memory data structure: Read Tracking Table (RTT)