Re: [RFCv3][PATCH 1/3] create slow_virt_to_phys()

From: H. Peter Anvin
Date: Tue Jan 15 2013 - 14:47:55 EST


On 01/09/2013 10:59 AM, Dave Hansen wrote:
+ switch (level) {
+ case PG_LEVEL_4K:
+ psize = PAGE_SIZE;
+ pmask = PAGE_MASK;
+ break;
+ case PG_LEVEL_2M:
+ psize = PMD_PAGE_SIZE;
+ pmask = PMD_PAGE_MASK;
+ break;
+#ifdef CONFIG_X86_64
+ case PG_LEVEL_1G:
+ psize = PUD_PAGE_SIZE;
+ pmask = PUD_PAGE_MASK;
+ break;
+#endif
+ default:
+ BUG();
+ }

I object to this switch statement. If we are going to create new primitives, let's create a primitive that embody this and put it in pgtypes_types.h, especially since it is simply an algorithmic operation:

static inline unsigned long page_level_size(int level)
{
return (PAGE_SIZE/PGDIR_SIZE) << (PGDIR_SHIFT*level);
}
static inline unsigned long page_level_shift(int level)
{
return (PAGE_SHIFT-PGDIR_SHIFT) + (PGDIR_SHIFT*level);
}

--
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel. I don't speak on their behalf.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/