lkml.org 
[lkml]   [2019]   [Dec]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: [PATCH v2] hugetlbfs: Disable softIRQ when taking hugetlb_lock
Date
Davidlohr Bueso <dave@stgolabs.net> writes:
> +void free_huge_page(struct page *page)
> +{
> + struct hugetlb_free_page_work work;
> +
> + work.page = page;
> + INIT_WORK_ONSTACK(&work.work, free_huge_page_workfn);
> + queue_work(hugetlb_free_page_wq, &work.work);
> +
> + /*
> + * Wait until free_huge_page is done.
> + */
> + flush_work(&work.work);
> + destroy_work_on_stack(&work.work);

Does flushing really work in softirq context?

Anyways, waiting seems inefficient over fire'n'forget

You'll need a per cpu pre allocated work item and a queue.
Then take a lock on the the queue and link the page into
it and trigger the work item if it's not already pending.

And add a in_interrupt() check of course.


-Andi

\
 
 \ /
  Last update: 2019-12-12 22:33    [W:0.457 / U:0.036 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site