X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fasm-alpha%2Fmmzone.h;h=a011ef4cf3d3f4ee5ee16c320cc3bbed622e3b7f;hb=987b0145d94eecf292d8b301228356f44611ab7c;hp=192d80c875b06479ff4670693914b9e591600c5c;hpb=f7ed79d23a47594e7834d66a8f14449796d4f3e6;p=linux-2.6.git diff --git a/include/asm-alpha/mmzone.h b/include/asm-alpha/mmzone.h index 192d80c87..a011ef4cf 100644 --- a/include/asm-alpha/mmzone.h +++ b/include/asm-alpha/mmzone.h @@ -59,6 +59,9 @@ PLAT_NODE_DATA_LOCALNR(unsigned long p, int n) #define kvaddr_to_nid(kaddr) pa_to_nid(__pa(kaddr)) #define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn) +#define local_mapnr(kvaddr) \ + ((__pa(kvaddr) >> PAGE_SHIFT) - node_start_pfn(kvaddr_to_nid(kvaddr))) + /* * Given a kaddr, LOCAL_BASE_ADDR finds the owning node of the memory * and returns the kaddr corresponding to first physical page in the @@ -83,7 +86,8 @@ PLAT_NODE_DATA_LOCALNR(unsigned long p, int n) pte_t pte; \ unsigned long pfn; \ \ - pfn = page_to_pfn(page) << 32; \ + pfn = ((unsigned long)((page)-page_zone(page)->zone_mem_map)) << 32; \ + pfn += page_zone(page)->zone_start_pfn << 32; \ pte_val(pte) = pfn | pgprot_val(pgprot); \ \ pte; \ @@ -100,8 +104,19 @@ PLAT_NODE_DATA_LOCALNR(unsigned long p, int n) __xx; \ }) +#define pfn_to_page(pfn) \ +({ \ + unsigned long kaddr = (unsigned long)__va((pfn) << PAGE_SHIFT); \ + (NODE_DATA(kvaddr_to_nid(kaddr))->node_mem_map + local_mapnr(kaddr)); \ +}) + +#define page_to_pfn(page) \ + ((page) - page_zone(page)->zone_mem_map + \ + (page_zone(page)->zone_start_pfn)) + #define page_to_pa(page) \ - (page_to_pfn(page) << PAGE_SHIFT) + ((( (page) - page_zone(page)->zone_mem_map ) \ + + page_zone(page)->zone_start_pfn) << PAGE_SHIFT) #define pfn_to_nid(pfn) pa_to_nid(((u64)(pfn) << PAGE_SHIFT)) #define pfn_valid(pfn) \