A previous patch in this series adds support for SLAB_CACHE_DMA32
kmem caches. This adds the corresponding
/sys/kernel/slab/cache/cache_dma32 entries, and fixes slabinfo
tool.

Signed-off-by: Nicolas Boichat <drink...@chromium.org>
---

There were different opinions on whether this sysfs entry should
be added, so I'll leave it up to the mm/slub maintainers to decide
whether they want to pick this up, or drop it.

 Documentation/ABI/testing/sysfs-kernel-slab |  9 +++++++++
 mm/slub.c                                   | 11 +++++++++++
 tools/vm/slabinfo.c                         |  7 ++++++-
 3 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/Documentation/ABI/testing/sysfs-kernel-slab 
b/Documentation/ABI/testing/sysfs-kernel-slab
index 29601d93a1c2ea..d742c6cfdffbe9 100644
--- a/Documentation/ABI/testing/sysfs-kernel-slab
+++ b/Documentation/ABI/testing/sysfs-kernel-slab
@@ -106,6 +106,15 @@ Description:
                are from ZONE_DMA.
                Available when CONFIG_ZONE_DMA is enabled.
 
+What:          /sys/kernel/slab/cache/cache_dma32
+Date:          December 2018
+KernelVersion: 4.21
+Contact:       Nicolas Boichat <drink...@chromium.org>
+Description:
+               The cache_dma32 file is read-only and specifies whether objects
+               are from ZONE_DMA32.
+               Available when CONFIG_ZONE_DMA32 is enabled.
+
 What:          /sys/kernel/slab/cache/cpu_slabs
 Date:          May 2007
 KernelVersion: 2.6.22
diff --git a/mm/slub.c b/mm/slub.c
index 4caadb926838ef..840f3719d9d543 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -5104,6 +5104,14 @@ static ssize_t cache_dma_show(struct kmem_cache *s, char 
*buf)
 SLAB_ATTR_RO(cache_dma);
 #endif
 
+#ifdef CONFIG_ZONE_DMA32
+static ssize_t cache_dma32_show(struct kmem_cache *s, char *buf)
+{
+       return sprintf(buf, "%d\n", !!(s->flags & SLAB_CACHE_DMA32));
+}
+SLAB_ATTR_RO(cache_dma32);
+#endif
+
 static ssize_t usersize_show(struct kmem_cache *s, char *buf)
 {
        return sprintf(buf, "%u\n", s->usersize);
@@ -5444,6 +5452,9 @@ static struct attribute *slab_attrs[] = {
 #ifdef CONFIG_ZONE_DMA
        &cache_dma_attr.attr,
 #endif
+#ifdef CONFIG_ZONE_DMA32
+       &cache_dma32_attr.attr,
+#endif
 #ifdef CONFIG_NUMA
        &remote_node_defrag_ratio_attr.attr,
 #endif
diff --git a/tools/vm/slabinfo.c b/tools/vm/slabinfo.c
index 334b16db0ebbe9..4ee1bf6e498dfa 100644
--- a/tools/vm/slabinfo.c
+++ b/tools/vm/slabinfo.c
@@ -29,7 +29,7 @@ struct slabinfo {
        char *name;
        int alias;
        int refs;
-       int aliases, align, cache_dma, cpu_slabs, destroy_by_rcu;
+       int aliases, align, cache_dma, cache_dma32, cpu_slabs, destroy_by_rcu;
        unsigned int hwcache_align, object_size, objs_per_slab;
        unsigned int sanity_checks, slab_size, store_user, trace;
        int order, poison, reclaim_account, red_zone;
@@ -531,6 +531,8 @@ static void report(struct slabinfo *s)
                printf("** Hardware cacheline aligned\n");
        if (s->cache_dma)
                printf("** Memory is allocated in a special DMA zone\n");
+       if (s->cache_dma32)
+               printf("** Memory is allocated in a special DMA32 zone\n");
        if (s->destroy_by_rcu)
                printf("** Slabs are destroyed via RCU\n");
        if (s->reclaim_account)
@@ -599,6 +601,8 @@ static void slabcache(struct slabinfo *s)
                *p++ = '*';
        if (s->cache_dma)
                *p++ = 'd';
+       if (s->cache_dma32)
+               *p++ = 'D';
        if (s->hwcache_align)
                *p++ = 'A';
        if (s->poison)
@@ -1205,6 +1209,7 @@ static void read_slab_dir(void)
                        slab->aliases = get_obj("aliases");
                        slab->align = get_obj("align");
                        slab->cache_dma = get_obj("cache_dma");
+                       slab->cache_dma32 = get_obj("cache_dma32");
                        slab->cpu_slabs = get_obj("cpu_slabs");
                        slab->destroy_by_rcu = get_obj("destroy_by_rcu");
                        slab->hwcache_align = get_obj("hwcache_align");
-- 
2.20.0.rc2.403.gdbc3b29805-goog

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to