19.03.2021 15:44, Dmitry Osipenko пишет: ... >> #include <linux/debugfs.h> >> +#include <linux/kobject.h> >> + >> +struct cma_stat { >> + spinlock_t lock; >> + /* the number of CMA page successful allocations */ >> + unsigned long nr_pages_succeeded; >> + /* the number of CMA page allocation failures */ >> + unsigned long nr_pages_failed; >> + struct kobject kobj; >> +}; >> >> struct cma { >> unsigned long base_pfn; >> @@ -16,6 +26,9 @@ struct cma { >> struct debugfs_u32_array dfs_bitmap; >> #endif >> char name[CMA_MAX_NAME]; >> +#ifdef CONFIG_CMA_SYSFS >> + struct cma_stat *stat; >> +#endif What is the point of allocating stat dynamically? ... >> +void cma_sysfs_alloc_pages_count(struct cma *cma, size_t count) >> +{ >> + spin_lock(&cma->stat->lock); >> + cma->stat->nr_pages_succeeded += count; >> + spin_unlock(&cma->stat->lock); >> +} >> + >> +void cma_sysfs_fail_pages_count(struct cma *cma, size_t count) >> +{ >> + spin_lock(&cma->stat->lock); >> + cma->stat->nr_pages_failed += count; >> + spin_unlock(&cma->stat->lock); >> +} You could use atomic increment and then locking isn't needed.