|
@@ -78,8 +78,13 @@ static inline struct page *pte_alloc_one(struct mm_struct *mm,
|
|
|
{
|
|
|
struct page *pte;
|
|
|
pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT, 0);
|
|
|
- if (pte)
|
|
|
- clear_page(page_address(pte));
|
|
|
+ if (!pte)
|
|
|
+ return NULL;
|
|
|
+ clear_page(page_address(pte));
|
|
|
+ if (!pgtable_page_ctor(pte)) {
|
|
|
+ __free_page(pte);
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
return pte;
|
|
|
}
|
|
|
|
|
@@ -90,6 +95,7 @@ static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
|
|
|
|
|
|
static inline void pte_free(struct mm_struct *mm, struct page *pte)
|
|
|
{
|
|
|
+ pgtable_page_dtor(pte);
|
|
|
__free_page(pte);
|
|
|
}
|
|
|
|