On Sat, 16 Jun 2012, Cong Wang wrote: > On Sat, Jun 16, 2012 at 12:56 PM, Wanpeng Li <liwp.linux@xxxxxxxxx> wrote: > >>-#define SWP_TYPE_SHIFT(e) (sizeof(e.val) * 8 - MAX_SWAPFILES_SHIFT) > >>+#define SWP_TYPE_SHIFT(e) ((sizeof(e.val) * 8) - \ > >>+ (MAX_SWAPFILES_SHIFT + RADIX_TREE_EXCEPTIONAL_SHIFT)) > > Since SHIFT == MAX_SWAPFILES_SHIFT + RADIX_TREE_EXCEPTIONAL_SHIFT == 7 > > and the low two bits used for radix_tree, the available swappages number > > based of 32bit architectures reduce to 2^(32-7-2) = 32GB? > > The lower two bits are in the 7 bits you calculated, > so it is 2^(32-7), not 2^(32-7-2) Correct. And that is not the limiting condition on available swap pages on 32-bit without PAE, which is limited more by the pte<->swp conversion: a swap entry must be distinguished from a present pte, from a PROT_NONE page, and from a pte_file() entry - see arch/x86/include/asm/pgtable-2level.h for how i386 in particular arranges that. Nor is it the limiting condition on 64-bit, where include/linux/swap.h's use of __u32 and unsigned int for counting swap pages is more limiting. Hugh