|
@@ -32,14 +32,19 @@
|
|
#include <linux/pfn_t.h>
|
|
#include <linux/pfn_t.h>
|
|
#include <linux/sizes.h>
|
|
#include <linux/sizes.h>
|
|
|
|
|
|
-#define RADIX_DAX_MASK 0xf
|
|
|
|
-#define RADIX_DAX_SHIFT 4
|
|
|
|
-#define RADIX_DAX_PTE (0x4 | RADIX_TREE_EXCEPTIONAL_ENTRY)
|
|
|
|
-#define RADIX_DAX_PMD (0x8 | RADIX_TREE_EXCEPTIONAL_ENTRY)
|
|
|
|
-#define RADIX_DAX_TYPE(entry) ((unsigned long)entry & RADIX_DAX_MASK)
|
|
|
|
|
|
+/*
|
|
|
|
+ * We use lowest available bit in exceptional entry for locking, other two
|
|
|
|
+ * bits to determine entry type. In total 3 special bits.
|
|
|
|
+ */
|
|
|
|
+#define RADIX_DAX_SHIFT (RADIX_TREE_EXCEPTIONAL_SHIFT + 3)
|
|
|
|
+#define RADIX_DAX_PTE (1 << (RADIX_TREE_EXCEPTIONAL_SHIFT + 1))
|
|
|
|
+#define RADIX_DAX_PMD (1 << (RADIX_TREE_EXCEPTIONAL_SHIFT + 2))
|
|
|
|
+#define RADIX_DAX_TYPE_MASK (RADIX_DAX_PTE | RADIX_DAX_PMD)
|
|
|
|
+#define RADIX_DAX_TYPE(entry) ((unsigned long)entry & RADIX_DAX_TYPE_MASK)
|
|
#define RADIX_DAX_SECTOR(entry) (((unsigned long)entry >> RADIX_DAX_SHIFT))
|
|
#define RADIX_DAX_SECTOR(entry) (((unsigned long)entry >> RADIX_DAX_SHIFT))
|
|
#define RADIX_DAX_ENTRY(sector, pmd) ((void *)((unsigned long)sector << \
|
|
#define RADIX_DAX_ENTRY(sector, pmd) ((void *)((unsigned long)sector << \
|
|
- RADIX_DAX_SHIFT | (pmd ? RADIX_DAX_PMD : RADIX_DAX_PTE)))
|
|
|
|
|
|
+ RADIX_DAX_SHIFT | (pmd ? RADIX_DAX_PMD : RADIX_DAX_PTE) | \
|
|
|
|
+ RADIX_TREE_EXCEPTIONAL_ENTRY))
|
|
|
|
|
|
static long dax_map_atomic(struct block_device *bdev, struct blk_dax_ctl *dax)
|
|
static long dax_map_atomic(struct block_device *bdev, struct blk_dax_ctl *dax)
|
|
{
|
|
{
|