On Thu, Apr 04, 2019 at 09:21:52AM +0200, Peter Zijlstra wrote: > On Wed, Apr 03, 2019 at 11:34:04AM -0600, Khalid Aziz wrote: > > diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h > > index 2c471a2c43fa..d17d33f36a01 100644 > > --- a/include/linux/mm_types.h > > +++ b/include/linux/mm_types.h > > @@ -204,6 +204,14 @@ struct page { > > #ifdef LAST_CPUPID_NOT_IN_PAGE_FLAGS > > int _last_cpupid; > > #endif > > + > > +#ifdef CONFIG_XPFO > > + /* Counts the number of times this page has been kmapped. */ > > + atomic_t xpfo_mapcount; > > + > > + /* Serialize kmap/kunmap of this page */ > > + spinlock_t xpfo_lock; > > NAK, see ALLOC_SPLIT_PTLOCKS > > spinlock_t can be _huge_ (CONFIG_PROVE_LOCKING=y), also are you _really_ > sure you want spinlock_t and not raw_spinlock_t ? For > CONFIG_PREEMPT_FULL spinlock_t turns into a rtmutex. > > > +#endif > > Growing the page-frame by 8 bytes (in the good case) is really sad, > that's a _lot_ of memory. So if you use the original kmap_atomic/kmap code from i386 and create an alias per user you can do away with all that. Now, that leaves you with the fixmap kmap_atomic code, which I also hate, but it gets rid of a lot of the ugly you introduce in these here patches. As to the fixmap kmap_atomic; so fundamentally the PTEs are only used on a single CPU and therefore CPU local TLB invalidation _should_ suffice. However, speculation... Another CPU can speculatively hit upon a fixmap entry for another CPU and populate it's own TLB entry. Then the TLB invalidate is insufficient, it leaves a stale entry in a remote TLB. If the remote CPU then re-uses that fixmap slot to alias another page, we have two CPUs with different translations for the same VA, a condition that AMD CPU's dislike enough to machine check on (IIRC). Actually hitting that is incredibly difficult (we have to have speculation, fixmap reuse and not get a full TLB invalidate in between), but, afaict, not impossible. Your monstrosity from the last patch avoids this particular issue by not aliasing in this manner, but it comes at the cost of this page-frame bloat. Also, I'm still not sure there's not other problems with it. Bah..