Re: [PATCH 1/8] mm: cma: introduce cma_release_nowait()

2021-03-29 Thread Mike Kravetz
On 3/29/21 12:46 AM, Michal Hocko wrote: > On Fri 26-03-21 14:32:01, Mike Kravetz wrote: > [...] >> - Just change the mutex to an irq safe spinlock. > > Yes please. > >> AFAICT, the potential >> downsides could be: >> - Interrupts disabled during long bitmap scans > > How large those

Re: [PATCH 1/8] mm: cma: introduce cma_release_nowait()

2021-03-29 Thread Michal Hocko
On Fri 26-03-21 14:32:01, Mike Kravetz wrote: [...] > - Just change the mutex to an irq safe spinlock. Yes please. > AFAICT, the potential > downsides could be: > - Interrupts disabled during long bitmap scans How large those bitmaps are in practice? > - Wasted cpu cycles (spinning) if

Re: [PATCH 1/8] mm: cma: introduce cma_release_nowait()

2021-03-26 Thread Mike Kravetz
On 3/25/21 4:49 PM, Mike Kravetz wrote: > On 3/25/21 4:19 PM, Roman Gushchin wrote: >> On Thu, Mar 25, 2021 at 01:12:51PM -0700, Minchan Kim wrote: >>> On Thu, Mar 25, 2021 at 06:15:11PM +0100, David Hildenbrand wrote: On 25.03.21 17:56, Mike Kravetz wrote: > On 3/25/21 3:22 AM, Michal

Re: [PATCH 1/8] mm: cma: introduce cma_release_nowait()

2021-03-25 Thread Mike Kravetz
On 3/25/21 4:19 PM, Roman Gushchin wrote: > On Thu, Mar 25, 2021 at 01:12:51PM -0700, Minchan Kim wrote: >> On Thu, Mar 25, 2021 at 06:15:11PM +0100, David Hildenbrand wrote: >>> On 25.03.21 17:56, Mike Kravetz wrote: On 3/25/21 3:22 AM, Michal Hocko wrote: > On Thu 25-03-21 10:56:38,

Re: [PATCH 1/8] mm: cma: introduce cma_release_nowait()

2021-03-25 Thread Roman Gushchin
On Thu, Mar 25, 2021 at 01:12:51PM -0700, Minchan Kim wrote: > On Thu, Mar 25, 2021 at 06:15:11PM +0100, David Hildenbrand wrote: > > On 25.03.21 17:56, Mike Kravetz wrote: > > > On 3/25/21 3:22 AM, Michal Hocko wrote: > > > > On Thu 25-03-21 10:56:38, David Hildenbrand wrote: > > > > > On

Re: [PATCH 1/8] mm: cma: introduce cma_release_nowait()

2021-03-25 Thread Minchan Kim
On Thu, Mar 25, 2021 at 06:15:11PM +0100, David Hildenbrand wrote: > On 25.03.21 17:56, Mike Kravetz wrote: > > On 3/25/21 3:22 AM, Michal Hocko wrote: > > > On Thu 25-03-21 10:56:38, David Hildenbrand wrote: > > > > On 25.03.21 01:28, Mike Kravetz wrote: > > > > > From: Roman Gushchin > > > > >

Re: [PATCH 1/8] mm: cma: introduce cma_release_nowait()

2021-03-25 Thread David Hildenbrand
On 25.03.21 17:56, Mike Kravetz wrote: On 3/25/21 3:22 AM, Michal Hocko wrote: On Thu 25-03-21 10:56:38, David Hildenbrand wrote: On 25.03.21 01:28, Mike Kravetz wrote: From: Roman Gushchin cma_release() has to lock the cma_lock mutex to clear the cma bitmap. It makes it a blocking

Re: [PATCH 1/8] mm: cma: introduce cma_release_nowait()

2021-03-25 Thread Mike Kravetz
On 3/25/21 3:22 AM, Michal Hocko wrote: > On Thu 25-03-21 10:56:38, David Hildenbrand wrote: >> On 25.03.21 01:28, Mike Kravetz wrote: >>> From: Roman Gushchin >>> >>> cma_release() has to lock the cma_lock mutex to clear the cma bitmap. >>> It makes it a blocking function, which complicates its

Re: [PATCH 1/8] mm: cma: introduce cma_release_nowait()

2021-03-25 Thread Michal Hocko
On Thu 25-03-21 11:17:32, Oscar Salvador wrote: > On Thu, Mar 25, 2021 at 11:11:49AM +0100, Michal Hocko wrote: > > I have overlooked that > > +static void cma_clear_bitmap_fn(struct work_struct *work) > > +{ > > + struct cma_clear_bitmap_work *w; > > + > > + w = container_of(work,

Re: [PATCH 1/8] mm: cma: introduce cma_release_nowait()

2021-03-25 Thread Michal Hocko
On Thu 25-03-21 10:56:38, David Hildenbrand wrote: > On 25.03.21 01:28, Mike Kravetz wrote: > > From: Roman Gushchin > > > > cma_release() has to lock the cma_lock mutex to clear the cma bitmap. > > It makes it a blocking function, which complicates its usage from > > non-blocking contexts. For

Re: [PATCH 1/8] mm: cma: introduce cma_release_nowait()

2021-03-25 Thread Oscar Salvador
On Thu, Mar 25, 2021 at 11:11:49AM +0100, Michal Hocko wrote: > I have overlooked that > +static void cma_clear_bitmap_fn(struct work_struct *work) > +{ > + struct cma_clear_bitmap_work *w; > + > + w = container_of(work, struct cma_clear_bitmap_work, work); > + > +

Re: [PATCH 1/8] mm: cma: introduce cma_release_nowait()

2021-03-25 Thread David Hildenbrand
On 25.03.21 11:11, Michal Hocko wrote: On Thu 25-03-21 10:45:19, Michal Hocko wrote: On Wed 24-03-21 17:28:28, Mike Kravetz wrote: [...] phys_addr_t cma_get_base(const struct cma *cma) { return PFN_PHYS(cma->base_pfn); @@ -146,6 +155,10 @@ static int __init

Re: [PATCH 1/8] mm: cma: introduce cma_release_nowait()

2021-03-25 Thread Michal Hocko
On Thu 25-03-21 10:45:19, Michal Hocko wrote: > On Wed 24-03-21 17:28:28, Mike Kravetz wrote: > [...] > > phys_addr_t cma_get_base(const struct cma *cma) > > { > > return PFN_PHYS(cma->base_pfn); > > @@ -146,6 +155,10 @@ static int __init cma_init_reserved_areas(void) > > for (i = 0; i <

Re: [PATCH 1/8] mm: cma: introduce cma_release_nowait()

2021-03-25 Thread Michal Hocko
On Thu 25-03-21 10:54:10, Oscar Salvador wrote: > On Thu, Mar 25, 2021 at 10:45:18AM +0100, Michal Hocko wrote: > > On Wed 24-03-21 17:28:28, Mike Kravetz wrote: > > [...] > > > phys_addr_t cma_get_base(const struct cma *cma) > > > { > > > return PFN_PHYS(cma->base_pfn); > > > @@ -146,6

Re: [PATCH 1/8] mm: cma: introduce cma_release_nowait()

2021-03-25 Thread David Hildenbrand
On 25.03.21 01:28, Mike Kravetz wrote: From: Roman Gushchin cma_release() has to lock the cma_lock mutex to clear the cma bitmap. It makes it a blocking function, which complicates its usage from non-blocking contexts. For instance, hugetlbfs code is temporarily dropping the hugetlb_lock

Re: [PATCH 1/8] mm: cma: introduce cma_release_nowait()

2021-03-25 Thread Oscar Salvador
On Thu, Mar 25, 2021 at 10:45:18AM +0100, Michal Hocko wrote: > On Wed 24-03-21 17:28:28, Mike Kravetz wrote: > [...] > > phys_addr_t cma_get_base(const struct cma *cma) > > { > > return PFN_PHYS(cma->base_pfn); > > @@ -146,6 +155,10 @@ static int __init cma_init_reserved_areas(void) > >

Re: [PATCH 1/8] mm: cma: introduce cma_release_nowait()

2021-03-25 Thread Michal Hocko
On Wed 24-03-21 17:28:28, Mike Kravetz wrote: [...] > phys_addr_t cma_get_base(const struct cma *cma) > { > return PFN_PHYS(cma->base_pfn); > @@ -146,6 +155,10 @@ static int __init cma_init_reserved_areas(void) > for (i = 0; i < cma_area_count; i++) >

Re: [PATCH 1/8] mm: cma: introduce cma_release_nowait()

2021-03-25 Thread Oscar Salvador
On Wed, Mar 24, 2021 at 05:28:28PM -0700, Mike Kravetz wrote: > +struct cma_clear_bitmap_work { > + struct work_struct work; > + struct cma *cma; > + unsigned long pfn; > + unsigned int count; > +}; > + > struct cma cma_areas[MAX_CMA_AREAS]; > unsigned cma_area_count; > >

[PATCH 1/8] mm: cma: introduce cma_release_nowait()

2021-03-24 Thread Mike Kravetz
From: Roman Gushchin cma_release() has to lock the cma_lock mutex to clear the cma bitmap. It makes it a blocking function, which complicates its usage from non-blocking contexts. For instance, hugetlbfs code is temporarily dropping the hugetlb_lock spinlock to call cma_release(). This patch