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. > } _struct_page_alignment;