On Thu, 2022-04-14 at 10:02 +0200, Claudio Imbrenda wrote: [...] > +/** > + * s390_replace_asce - Try to replace the current ASCE of a gmap > with > + * another equivalent one. > + * @gmap the gmap > + * > + * If the allocation of the new top level page table fails, the ASCE > is not > + * replaced. > + * In any case, the old ASCE is always removed from the list. > Therefore the > + * caller has to make sure to save a pointer to it beforehands, > unless an > + * intentional leak is intended. > + */ > +int s390_replace_asce(struct gmap *gmap) > +{ > [...] > + /* Set new table origin while preserving existing ASCE > control bits */ > + asce = (gmap->asce & ~_ASCE_ORIGIN) | __pa(table); > + WRITE_ONCE(gmap->asce, asce); Can someone concurrently touch the control bits?