Message ID | 20240918124325.109236-1-gxxa03070307@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | mm/cma.c: To better understand cma area during debugging, add total and used count logs to in cma_alloc | expand |
On Wed, 18 Sep 2024 20:43:25 +0800 Xiang Gao <gxxa03070307@gmail.com> wrote: > From: gaoxiang17 <gaoxiang17@xiaomi.com> > > [ 24.225125] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 64, request count 1, align 0) > [ 24.231963] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 65, request count 1, align 0) > [ 24.235712] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 66, request count 1, align 0) > Providing before-and-after output would make the proposal more easily understood. > --- a/mm/cma.c > +++ b/mm/cma.c > @@ -403,6 +403,17 @@ static void cma_debug_show_areas(struct cma *cma) > spin_unlock_irq(&cma->lock); > } > > +static unsigned long cma_get_used(struct cma *cma) > +{ > + unsigned long used; > + > + spin_lock_irq(&cma->lock); > + used = bitmap_weight(cma->bitmap, (int)cma_bitmap_maxno(cma)); Is the (int) cast needed? > + spin_unlock_irq(&cma->lock); > + > + return (unsigned long)used << cma->order_per_bit; Is the (unsigned long) bast needed? > +} > + > /** > * cma_alloc() - allocate pages from contiguous area > * @cma: Contiguous memory region for which the allocation is performed. > @@ -430,8 +441,8 @@ struct page *cma_alloc(struct cma *cma, unsigned long count, > if (!cma || !cma->count || !cma->bitmap) > return page; > > - pr_debug("%s(cma %p, name: %s, count %lu, align %d)\n", __func__, > - (void *)cma, cma->name, count, align); > + pr_debug("%s(cma %p, name: %s, total count %lu, used count: %lu, request count %lu, align %d)\n", __func__, > + (void *)cma, cma->name, cma->count, cma_get_used(cma), count, align); > > if (!count) > return page; > -- > 2.34.1
> [ 24.225125] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 64, request count 1, align 0) > [ 24.231963] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 65, request count 1, align 0) > [ 24.235712] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 66, request count 1, align 0) > Above is the cma alloc during boot. The before-and-after context has nothing to do with cma alloc. Below is the log with before-and-after context added. [ 24.006605] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 24.071644] Serial: AMBA driver [ 24.096063] arm-smmu-v3 9050000.smmuv3: ias 44-bit, oas 44-bit (features 0x00000305) [ 24.097989] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 64, request count 1, align 0) [ 24.104260] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 65, request count 1, align 0) [ 24.107504] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 66, request count 1, align 0) [ 24.140495] cacheinfo: Unable to detect cache hierarchy for CPU 0 [ 24.484998] loop: module loaded [ 24.536152] virtio_blk virtio0: [vda] 4194304 512-byte logical blocks (2.15 GB/2.00 GiB) > --- a/mm/cma.c > +++ b/mm/cma.c > @@ -403,6 +403,17 @@ static void cma_debug_show_areas(struct cma *cma) > spin_unlock_irq(&cma->lock); > } > > +static unsigned long cma_get_used(struct cma *cma) > +{ > + unsigned long used; > + > + spin_lock_irq(&cma->lock); > + used = bitmap_weight(cma->bitmap, (int)cma_bitmap_maxno(cma)); Is the (int) cast needed? No need here. > + spin_unlock_irq(&cma->lock); > + > + return (unsigned long)used << cma->order_per_bit; Is the (unsigned long) cast needed? No need here.
> [ 24.225125] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 64, request count 1, align 0) > [ 24.231963] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 65, request count 1, align 0) > [ 24.235712] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 66, request count 1, align 0) > Above is the cma alloc during boot. The before-and-after context has nothing to do with cma alloc. Below is the log with before-and-after context added. [ 24.006605] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [ 24.071644] Serial: AMBA driver [ 24.096063] arm-smmu-v3 9050000.smmuv3: ias 44-bit, oas 44-bit (features 0x00000305) [ 24.097989] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 64, request count 1, align 0) [ 24.104260] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 65, request count 1, align 0) [ 24.107504] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 66, request count 1, align 0) [ 24.140495] cacheinfo: Unable to detect cache hierarchy for CPU 0 [ 24.484998] loop: module loaded [ 24.536152] virtio_blk virtio0: [vda] 4194304 512-byte logical blocks (2.15 GB/2.00 GiB) > --- a/mm/cma.c > +++ b/mm/cma.c > @@ -403,6 +403,17 @@ static void cma_debug_show_areas(struct cma *cma) > spin_unlock_irq(&cma->lock); > } > > +static unsigned long cma_get_used(struct cma *cma) > +{ > + unsigned long used; > + > + spin_lock_irq(&cma->lock); > + used = bitmap_weight(cma->bitmap, (int)cma_bitmap_maxno(cma)); Is the (int) cast needed? No need here. > + spin_unlock_irq(&cma->lock); > + > + return (unsigned long)used << cma->order_per_bit; Is the (unsigned long) cast needed? No need here.
On Wed, 25 Sep 2024 12:00:56 +0000 高翔 <gaoxiang17@xiaomi.com> wrote: > > [ 24.225125] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 64, request count 1, align 0) > > [ 24.231963] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 65, request count 1, align 0) > > [ 24.235712] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 66, request count 1, align 0) > > > > > Above is the cma alloc during boot. The before-and-after context has nothing to do with cma alloc. Below is the log with before-and-after context added. > > > [ 24.006605] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled > [ 24.071644] Serial: AMBA driver > [ 24.096063] arm-smmu-v3 9050000.smmuv3: ias 44-bit, oas 44-bit (features 0x00000305) > [ 24.097989] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 64, request count 1, align 0) > [ 24.104260] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 65, request count 1, align 0) > [ 24.107504] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 66, request count 1, align 0) > [ 24.140495] cacheinfo: Unable to detect cache hierarchy for CPU 0 > [ 24.484998] loop: module loaded > [ 24.536152] virtio_blk virtio0: [vda] 4194304 512-byte logical blocks (2.15 GB/2.00 GiB) What I mean is to paste the messages before the patch and to paste the messages after the patch. So readers can easily see what changed.
I see. before: [ 24.407814] cma: cma_alloc(cma (____ptrval____), name: reserved, count 1, align 0) [ 24.413397] cma: cma_alloc(cma (____ptrval____), name: reserved, count 1, align 0) [ 24.415886] cma: cma_alloc(cma (____ptrval____), name: reserved, count 1, align 0) after: [ 24.097989] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 64, request count 1, align 0) [ 24.104260] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 65, request count 1, align 0) [ 24.107504] cma: cma_alloc(cma (____ptrval____), name: reserved, total count 16384, used count: 66, request count 1, align 0)
On 18.09.24 14:43, Xiang Gao wrote: > From: gaoxiang17 <gaoxiang17@xiaomi.com> > Please move some of $subject into $description, to make it shorter. Maybe use the subject: "mm/cma: print total and used count in cma_alloc()"
okay
diff --git a/mm/cma.c b/mm/cma.c index 3e9724716bad..cceff3b6a79e 100644 --- a/mm/cma.c +++ b/mm/cma.c @@ -403,6 +403,17 @@ static void cma_debug_show_areas(struct cma *cma) spin_unlock_irq(&cma->lock); } +static unsigned long cma_get_used(struct cma *cma) +{ + unsigned long used; + + spin_lock_irq(&cma->lock); + used = bitmap_weight(cma->bitmap, (int)cma_bitmap_maxno(cma)); + spin_unlock_irq(&cma->lock); + + return (unsigned long)used << cma->order_per_bit; +} + /** * cma_alloc() - allocate pages from contiguous area * @cma: Contiguous memory region for which the allocation is performed. @@ -430,8 +441,8 @@ struct page *cma_alloc(struct cma *cma, unsigned long count, if (!cma || !cma->count || !cma->bitmap) return page; - pr_debug("%s(cma %p, name: %s, count %lu, align %d)\n", __func__, - (void *)cma, cma->name, count, align); + pr_debug("%s(cma %p, name: %s, total count %lu, used count: %lu, request count %lu, align %d)\n", __func__, + (void *)cma, cma->name, cma->count, cma_get_used(cma), count, align); if (!count) return page;