Messages in this thread | | | Date | Sat, 27 Jul 2002 10:23:18 -0700 | From | Andrew Morton <> | Subject | Re: [BK PATCH 2.5] Introduce 64-bit versions of PAGE_{CACHE_,}{MASK,ALIGN} |
| |
Anton Altaparmakov wrote: > > Linus, > > This patch introduces 64-bit versions of PAGE_{CACHE_,}MASK and > PAGE_{CACHE_,}ALIGN: > PAGE_{CACHE_,}MASK_LL and PAGE_{CACHE_,}ALIGN_LL. > > These are needed when 64-bit values are worked with on 32-bit > architectures, otherwise the high 32-bits are destroyed. > > ... > #define PAGE_SIZE (1UL << PAGE_SHIFT) > #define PAGE_MASK (~(PAGE_SIZE-1)) > +#define PAGE_MASK_LL (~(u64)(PAGE_SIZE-1))
The problem here is that we've explicitly forced the PAGE_foo type to unsigned long.
If we instead take the "UL" out of PAGE_SIZE altogether, the compiler can then promote the type of PAGE_SIZE and PAGE_MASK to the widest type being used in the expression (ie: long long) and everything should work.
Which seems to be a much cleaner solution, if it works.
Will it work?
- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |