@@ -142,6 +142,7 @@ static inline struct page *kmap_to_page(void *addr)
static inline void *kmap(struct page *page)
{
might_sleep();
+ pgmap_protection_flag_invalid(page);
return page_address(page);
}
@@ -157,6 +158,7 @@ static inline void kunmap(struct page *page)
static inline void *kmap_local_page(struct page *page)
{
+ pgmap_mk_readwrite(page);
return page_address(page);
}
@@ -175,12 +177,14 @@ static inline void __kunmap_local(void *addr)
#ifdef ARCH_HAS_FLUSH_ON_KUNMAP
kunmap_flush_on_unmap(addr);
#endif
+ pgmap_mk_noaccess(kmap_to_page(addr));
}
static inline void *kmap_atomic(struct page *page)
{
preempt_disable();
pagefault_disable();
+ pgmap_mk_readwrite(page);
return page_address(page);
}
@@ -199,6 +203,7 @@ static inline void __kunmap_atomic(void *addr)
#ifdef ARCH_HAS_FLUSH_ON_KUNMAP
kunmap_flush_on_unmap(addr);
#endif
+ pgmap_mk_noaccess(kmap_to_page(addr));
pagefault_enable();
preempt_enable();
}
@@ -794,6 +794,7 @@ config DEVMAP_ACCESS_PROTECTION
bool "Access protection for memremap_pages()"
depends on NVDIMM_PFN
depends on ARCH_HAS_SUPERVISOR_PKEYS
+ depends on !HIGHMEM
select GENERAL_PKS_USER
default y