Re: kmap_atomic and preemption

2016-05-05 Thread Vineet Gupta
On Wednesday 04 May 2016 08:31 PM, Peter Zijlstra wrote: > So I'm fairly sure people rely on the fact you cannot have pagefault > inside a kmap_atomic(). So this translates to: any hardware page faults inside kmap_atomic() can't lead to do_page_fault() taking a lock - those can only be ex_table f

Re: kmap_atomic and preemption

2016-05-05 Thread Peter Zijlstra
On Wed, May 04, 2016 at 08:17:55PM +0100, Russell King - ARM Linux wrote: > On Wed, May 04, 2016 at 03:47:29PM +0200, Peter Zijlstra wrote: > > Traditionally kmap_atomic() disables preemption; and the reason is that > > the returned pointer must stay valid. This had a side effect in that it > > als

Re: kmap_atomic and preemption

2016-05-04 Thread Russell King - ARM Linux
On Wed, May 04, 2016 at 03:47:29PM +0200, Peter Zijlstra wrote: > Traditionally kmap_atomic() disables preemption; and the reason is that > the returned pointer must stay valid. This had a side effect in that it > also disabled pagefaults. A lowmem page should never change its page_address(), so t

Re: kmap_atomic and preemption

2016-05-04 Thread Peter Zijlstra
On Wed, May 04, 2016 at 02:16:11PM +, Vineet Gupta wrote: > > static inline void *kmap_atomic(struct page *page) > > { > > preempt_disable(); > > pagefault_disable(); > > if (!PageHighMem(page)) > > return page_address(page); > > > > return __kmap_atomic(page); > > }

Re: kmap_atomic and preemption

2016-05-04 Thread Vineet Gupta
On Wednesday 04 May 2016 07:17 PM, Peter Zijlstra wrote: > On Wed, May 04, 2016 at 04:07:40PM +0530, Vineet Gupta wrote: >> 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

Re: kmap_atomic and preemption

2016-05-04 Thread Vineet Gupta
On Wednesday 04 May 2016 07:23 PM, Thomas Petazzoni wrote: > Hello, > > On Wed, 4 May 2016 15:47:29 +0200, Peter Zijlstra wrote: > >> static inline void *kmap_atomic(struct page *page) >> { >> preempt_disable(); >> pagefault_disable(); >> if (!PageHighMem(page)) >> retur

Re: kmap_atomic and preemption

2016-05-04 Thread Thomas Petazzoni
Hello, On Wed, 4 May 2016 15:47:29 +0200, Peter Zijlstra wrote: > static inline void *kmap_atomic(struct page *page) > { > preempt_disable(); > pagefault_disable(); > if (!PageHighMem(page)) > return page_address(page); > > return __kmap_atomic(page); > } T

Re: kmap_atomic and preemption

2016-05-04 Thread Peter Zijlstra
On Wed, May 04, 2016 at 04:07:40PM +0530, Vineet Gupta wrote: > 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/high