Messages in this thread | ![/](/images/icornerl.gif) | | From | Vineet Gupta <> | Subject | kmap_atomic and preemption | Date | Wed, 4 May 2016 16:07:40 +0530 |
| |
Hi,
I was staring at some recent ARC highmem crashes and see that kmap_atomic() disables preemption even when page is in lowmem and call returns right away. This seems to be true for other arches as well.
arch/arc/mm/highmem.c:
void *kmap_atomic(struct page *page) { int idx, cpu_idx; unsigned long vaddr;
preempt_disable(); pagefault_disable(); if (!PageHighMem(page)) return page_address(page);
/* do the highmem foo ... */ .. }
I would really like to implement a inline fastpath for !PageHighMem(page) case and do the highmem foo out-of-line.
Is preemption disabling a requirement of kmap_atomic() callers independent of where page is or is it only needed when page is in highmem and can trigger page faults or TLB Misses between kmap_atomic() and kunmap_atomic and wants protection against reschedules etc.
-Vineet
| ![\](/images/icornerr.gif) |