On 2022/6/15 23:40, Jason Gunthorpe wrote:
On Fri, Jun 10, 2022 at 01:37:20PM +0800, Baolu Lu wrote:
On 2022/6/9 20:49, Jason Gunthorpe wrote:
+void iommu_free_pgtbl_pages(struct iommu_domain *domain,
+                           struct list_head *pages)
+{
+       struct page *page, *next;
+
+       if (!domain->concurrent_traversal) {
+               put_pages_list(pages);
+               return;
+       }
+
+       list_for_each_entry_safe(page, next, pages, lru) {
+               list_del(&page->lru);
+               call_rcu(&page->rcu_head, pgtble_page_free_rcu);
+       }
It seems OK, but I wonder if there is benifit to using
put_pages_list() from the rcu callback

The price is that we need to allocate a "struct list_head" and free it
in the rcu callback as well. Currently the list_head is sitting in the
stack.

You'd have to use a different struct page layout so that the list_head
was in the struct page and didn't overlap with the rcu_head

Okay, let me head this direction in the next version.

Best regards,
baolu
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to