On 01/25/2011 05:53 AM, Ahmed S. Darwish wrote: > + > +/* > + * Extended BIOS services write to disk in units of 512-byte sectors. > + * Thus, always align the ring buffer size on a 512-byte boundary. > + */ Units of sectors, not always 512 bytes. This needs to be done correctly, or you will destroy real data. > +/* > + * Page tables to identity map the first 2 Mbytes. > + */ > +static __aligned(PAGE_SIZE) pud_t ident_level3[PTRS_PER_PUD]; > +static __aligned(PAGE_SIZE) pmd_t ident_level2[PTRS_PER_PMD]; > + > +/* > + * The lmode->rmode switching code needs to run from an identity page > + * since it disables paging. > + */ > +static void build_identity_mappings(void) > +{ > + pgd_t *pgde; > + pud_t *pude; > + pmd_t *pmde; > + > + pmde = ident_level2; > + set_pmd(pmde, __pmd(0 + __PAGE_KERNEL_IDENT_LARGE_EXEC)); > + > + pude = ident_level3; > + set_pud(pude, __pud(__pa(ident_level2) + _KERNPG_TABLE)); > + > + pgde = init_level4_pgt; > + set_pgd(pgde, __pgd(__pa(ident_level3) + _KERNPG_TABLE)); > + > + __flush_tlb_all(); > +} We now have a permanent identity map so there is no point in building a new one. However, I'm quite nervous about this -- this patch has *plenty* of real possibility of wrecking data. -hpa -- 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-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html