On Wed 05-09-18 16:51:00, Mike Kravetz wrote: > On 09/05/2018 04:07 PM, Matthew Wilcox wrote: > > On Wed, Sep 05, 2018 at 03:00:08PM -0700, Andrew Morton wrote: > >> On Wed, 5 Sep 2018 14:35:11 -0700 Mike Kravetz <mike.kravetz@xxxxxxxxxx> wrote: > >> > >>>> so perhaps we could put some > >>>> stopgap workaround into that site and add a runtime warning into the > >>>> put_page() code somewhere to detect puttage of huge pages from hardirq > >>>> and softirq contexts. > >>> > >>> I think we would add the warning/etc at free_huge_page. The issue would > >>> only apply to hugetlb pages, not THP. > >>> > >>> But, the more I think about it the more I think Aneesh's patch to do > >>> spin_lock/unlock_irqsave is the right way to go. Currently, we only > >>> know of one place where a put_page of hugetlb pages is done from softirq > >>> context. So, we could take the spin_lock/unlock_bh as Matthew suggested. > >>> When the powerpc iommu code was added, I doubt this was taken into account. > >>> I would be afraid of someone adding put_page from hardirq context. > >> > >> Me too. If we're going to do this, surely we should make hugepages > >> behave in the same fashion as PAGE_SIZE pages. > > > > But these aren't vanilla hugepages, they're specifically hugetlbfs pages. > > I don't believe there's any problem with calling put_page() on a normally > > allocated huge page or THP. > > Right > The powerpc iommu code (at least) treated hugetlbfs pages as any other page > (huge, THP or base) and called put_page from softirq context. > > It seems there are at least two ways to address this: > 1) Prohibit this behavior for hugetlbfs pages > 2) Try to make hugetlbfs pages behave like other pages WRT put_page Hugetlb pages have always been special and that has caused us more headache than necessary. So if there is a user calling put_page from the soft IRQ context (which is a news to me) then we can expect somebody will do that from the hard IRQ context sooner or later. So rather than make hugetlb a special snow flake again I vote for 2) and make it consistent with other pages. -- Michal Hocko SUSE Labs