On Tue, Nov 21, 2023 at 08:24:48PM +0100, David Hildenbrand wrote: > > diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h > > index 7d2076583494..5c70707e706f 100644 > > --- a/include/linux/memory_hotplug.h > > +++ b/include/linux/memory_hotplug.h > > @@ -106,6 +106,11 @@ typedef int __bitwise mhp_t; > > * implies the node id (nid). > > */ > > #define MHP_NID_IS_MGID ((__force mhp_t)BIT(2)) > > +/* > > + * Mark memmap on memory (struct pages array) as inaccessible during memory > > + * hotplug addition phase. > > + */ > > +#define MHP_ALTMAP_INACCESSIBLE ((__force mhp_t)BIT(3)) > > If we go that path, maybe rather MHP_OFFLINE_INACCESSIBLE and document how > this relates to/interacts with the memory notifier callbacks and the altmap. > > Then, we can logically abstract this from altmap handling. Simply, the > memory should not be read/written before the memory notifier was called. > > In the core, you can do the poisioning for the altmap in that case after > calling the notifier, probably in mhp_init_memmap_on_memory() as you do > below. ok, sure. Thanks. > > > /* > > * Extended parameters for memory hotplug: > > diff --git a/include/linux/memremap.h b/include/linux/memremap.h > > index 744c830f4b13..9837f3e6fb95 100644 > > --- a/include/linux/memremap.h > > +++ b/include/linux/memremap.h > > @@ -25,6 +25,7 @@ struct vmem_altmap { > > unsigned long free; > > unsigned long align; > > unsigned long alloc; > > + bool inaccessible; > > We should then likely remember that information for the memory block, not > the altmap. Tried using inaccessible field in memory_block and observed that the memory block is created following the success of arch_add_memory(). Hence, when conducting checks for inaccessible memory in sparse_add_section() (regarding page poisoning), there is still a reliance on mhp_flags conveyed through add_memory(). Subsequently, then memory_block inaccessible state is set in create_memory_block_devices(). I hope this approach is fine. On the other hand, relying on inaccessible flag in vmem_altmap could make checks in arch_add_memory() and other functions easier I suppose. > > [...] > > > > > > > Approach 2: > > =========== > > Shouldnt kasan zero shadow mapping performed first before > > accessing/initializing memmap via page_init_poisining()? If that is > > Likely the existing way. The first access to the poisoned memmap should be a > write, not a read. But I didn't look into the details. > > Can you try reproducing? > Executing page_init_poison() right before kasan_add_zero_shadow() in the context of altmap usage did not result in a crash when I attempted to reproduce it. However, altmap + page_init_poisoning() within sparse_add_section(), a crash occurs on our arch, as previously discussed in this thread. Thank you