> [ 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.