]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - include/linux/percpu_ida.h
percpu_ida: make percpu_ida percpu size/batch configurable
[mirror_ubuntu-artful-kernel.git] / include / linux / percpu_ida.h
index 0b23edbee309bfcf9ba335b7ba1c0ba261ac8243..56c14033e7e79aa32c66f3580e19c9229cca7785 100644 (file)
@@ -16,6 +16,8 @@ struct percpu_ida {
         * percpu_ida_init()
         */
        unsigned                        nr_tags;
+       unsigned                        percpu_max_size;
+       unsigned                        percpu_batch_size;
 
        struct percpu_ida_cpu __percpu  *tag_cpu;
 
@@ -51,10 +53,24 @@ struct percpu_ida {
        } ____cacheline_aligned_in_smp;
 };
 
+/*
+ * Number of tags we move between the percpu freelist and the global freelist at
+ * a time
+ */
+#define IDA_DEFAULT_PCPU_BATCH_MOVE    32U
+/* Max size of percpu freelist, */
+#define IDA_DEFAULT_PCPU_SIZE  ((IDA_DEFAULT_PCPU_BATCH_MOVE * 3) / 2)
+
 int percpu_ida_alloc(struct percpu_ida *pool, gfp_t gfp);
 void percpu_ida_free(struct percpu_ida *pool, unsigned tag);
 
 void percpu_ida_destroy(struct percpu_ida *pool);
-int percpu_ida_init(struct percpu_ida *pool, unsigned long nr_tags);
+int __percpu_ida_init(struct percpu_ida *pool, unsigned long nr_tags,
+       unsigned long max_size, unsigned long batch_size);
+static inline int percpu_ida_init(struct percpu_ida *pool, unsigned long nr_tags)
+{
+       return __percpu_ida_init(pool, nr_tags, IDA_DEFAULT_PCPU_SIZE,
+               IDA_DEFAULT_PCPU_BATCH_MOVE);
+}
 
 #endif /* __PERCPU_IDA_H__ */