|
@@ -152,6 +152,10 @@
|
|
* refault distance will immediately activate the refaulting page.
|
|
* refault distance will immediately activate the refaulting page.
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
+#define EVICTION_SHIFT (RADIX_TREE_EXCEPTIONAL_ENTRY + \
|
|
|
|
+ ZONES_SHIFT + NODES_SHIFT)
|
|
|
|
+#define EVICTION_MASK (~0UL >> EVICTION_SHIFT)
|
|
|
|
+
|
|
static void *pack_shadow(unsigned long eviction, struct zone *zone)
|
|
static void *pack_shadow(unsigned long eviction, struct zone *zone)
|
|
{
|
|
{
|
|
eviction = (eviction << NODES_SHIFT) | zone_to_nid(zone);
|
|
eviction = (eviction << NODES_SHIFT) | zone_to_nid(zone);
|
|
@@ -168,7 +172,6 @@ static void unpack_shadow(void *shadow,
|
|
unsigned long entry = (unsigned long)shadow;
|
|
unsigned long entry = (unsigned long)shadow;
|
|
unsigned long eviction;
|
|
unsigned long eviction;
|
|
unsigned long refault;
|
|
unsigned long refault;
|
|
- unsigned long mask;
|
|
|
|
int zid, nid;
|
|
int zid, nid;
|
|
|
|
|
|
entry >>= RADIX_TREE_EXCEPTIONAL_SHIFT;
|
|
entry >>= RADIX_TREE_EXCEPTIONAL_SHIFT;
|
|
@@ -181,8 +184,7 @@ static void unpack_shadow(void *shadow,
|
|
*zone = NODE_DATA(nid)->node_zones + zid;
|
|
*zone = NODE_DATA(nid)->node_zones + zid;
|
|
|
|
|
|
refault = atomic_long_read(&(*zone)->inactive_age);
|
|
refault = atomic_long_read(&(*zone)->inactive_age);
|
|
- mask = ~0UL >> (NODES_SHIFT + ZONES_SHIFT +
|
|
|
|
- RADIX_TREE_EXCEPTIONAL_SHIFT);
|
|
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* The unsigned subtraction here gives an accurate distance
|
|
* The unsigned subtraction here gives an accurate distance
|
|
* across inactive_age overflows in most cases.
|
|
* across inactive_age overflows in most cases.
|
|
@@ -199,7 +201,7 @@ static void unpack_shadow(void *shadow,
|
|
* inappropriate activation leading to pressure on the active
|
|
* inappropriate activation leading to pressure on the active
|
|
* list is not a problem.
|
|
* list is not a problem.
|
|
*/
|
|
*/
|
|
- *distance = (refault - eviction) & mask;
|
|
|
|
|
|
+ *distance = (refault - eviction) & EVICTION_MASK;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|