On 03/05/2018 01:37 PM, Khalid Aziz wrote: >> How big can this storage get, btw? Superficially it seems like it might >> be able to be gigantic for a large, sparse VMA. >> > Tags are stored only for the pages being swapped out, not for the pages > in entire vma. Each tag storage page can hold tags for 128 pages (each > page has 128 4-bit tags, hence 64 bytes are needed to store tags for an > entire page allowing each page to store tags for 128 pages). Sparse VMA > does not cause any problems since holes do not have corresponding pages > that will be swapped out. Tag storage pages are freed once all the pages > they store tags for have been swapped back in, except for a small number > of pages (maximum of 8) marked for emergency tag storage. With a linear scan holding a process-wide spinlock? If you have a fast swap device, does this become the bottleneck when swapping ADI-tagged memory? FWIW, this tag storage is complex and subtle enough code that it deserves to be in its own well-documented patch, not buried in a thousand-line patch. > +tag_storage_desc_t *find_tag_store(struct mm_struct *mm, > + struct vm_area_struct *vma, > + unsigned long addr) > +{ > + tag_storage_desc_t *tag_desc = NULL; > + unsigned long i, max_desc, flags; > + > + /* Check if this vma already has tag storage descriptor > + * allocated for it. > + */ > + max_desc = PAGE_SIZE/sizeof(tag_storage_desc_t); > + if (mm->context.tag_store) { > + tag_desc = mm->context.tag_store; > + spin_lock_irqsave(&mm->context.tag_lock, flags); > + for (i = 0; i < max_desc; i++) { > + if ((addr >= tag_desc->start) && > + ((addr + PAGE_SIZE - 1) <= tag_desc->end)) > + break; > + tag_desc++; > + } > + spin_unlock_irqrestore(&mm->context.tag_lock, flags); -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html