mirror of https://gitee.com/openkylin/linux.git
mm: workingset: #define radix entry eviction mask
This is a compile-time constant, no need to calculate it on refault. Signed-off-by: Johannes Weiner <hannes@cmpxchg.org> Reviewed-by: Vladimir Davydov <vdavydov@virtuozzo.com> Cc: Michal Hocko <mhocko@suse.cz> Cc: David Rientjes <rientjes@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
81f8c3a461
commit
689c94f03a
|
@ -152,6 +152,10 @@
|
|||
* 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)
|
||||
{
|
||||
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 eviction;
|
||||
unsigned long refault;
|
||||
unsigned long mask;
|
||||
int zid, nid;
|
||||
|
||||
entry >>= RADIX_TREE_EXCEPTIONAL_SHIFT;
|
||||
|
@ -181,8 +184,7 @@ static void unpack_shadow(void *shadow,
|
|||
*zone = NODE_DATA(nid)->node_zones + zid;
|
||||
|
||||
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
|
||||
* 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
|
||||
* list is not a problem.
|
||||
*/
|
||||
*distance = (refault - eviction) & mask;
|
||||
*distance = (refault - eviction) & EVICTION_MASK;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue