--- zzzz-none-000/linux-4.1.38/mm/slub.c 2017-01-18 18:48:06.000000000 +0000 +++ bcm63-7582-715/linux-4.1.38/mm/slub.c 2020-11-25 10:06:48.000000000 +0000 @@ -4571,6 +4571,13 @@ } SLAB_ATTR_RO(cache_dma); #endif +#if defined(CONFIG_BCM_KF_ARM_BCM963XX) && defined(CONFIG_BCM_ZONE_ACP) +static ssize_t cache_acp_show(struct kmem_cache *s, char *buf) +{ + return sprintf(buf, "%d\n", !!(s->flags & SLAB_CACHE_ACP)); +} +SLAB_ATTR_RO(cache_acp); +#endif static ssize_t destroy_by_rcu_show(struct kmem_cache *s, char *buf) { @@ -4914,6 +4921,9 @@ #ifdef CONFIG_ZONE_DMA &cache_dma_attr.attr, #endif +#if defined(CONFIG_BCM_KF_ARM_BCM963XX) && defined(CONFIG_BCM_ZONE_ACP) + &cache_acp_attr.attr, +#endif #ifdef CONFIG_NUMA &remote_node_defrag_ratio_attr.attr, #endif @@ -5342,3 +5352,44 @@ return -EIO; } #endif /* CONFIG_SLABINFO */ + +#if defined(CONFIG_AVM_ENHANCED) +/** + * @brief get kmemalloc-area if addr in range + * attention! function unsaved for cachep - zone-page-spinlock necessary + * @return start (zero if not exist) + */ +unsigned long get_kmemalloc_area(unsigned long addr, unsigned long *caller, const char **cache_name, + unsigned long *size, int *freed){ + unsigned int obj_idx; + void *base; + unsigned long kstart; + struct kmem_cache *cachep; + struct page *page = virt_to_head_page((void *)addr); + + if(!virt_addr_valid(page)) { + return 0; + } + cachep = page->slab_cache; + if(!virt_addr_valid(cachep)) { + return 0; + } +#if 0 + pr_err("%s: %s: %u: %08lx: %s(size=%u objects=%u) page=%p(%p)\n", __FILE__, __func__, __LINE__, addr, cachep->name, + cachep->size, page->objects, + page, page_address(page)); +#endif + base = page_address(page); + if(((void *)addr < base) || ((void *)addr >= (base + page->objects * cachep->size))) { + /*--- pr_err("%s: %s: %u:\n", __FILE__, __func__, __LINE__); ---*/ + return 0; + } + obj_idx = slab_index((void *)addr, cachep, base); + kstart = (unsigned long)base + (cachep->size * obj_idx); + if(caller) *caller = 0; + if(cache_name) *cache_name = cachep->name; + if(size) *size = cachep->size; + if(freed) *freed = 0; + return kstart; +} +#endif /*--- #if defined(CONFIG_AVM_ENHANCED) ---*/