|
@@ -167,9 +167,14 @@ enum zs_stat_type {
|
|
|
OBJ_USED,
|
|
|
CLASS_ALMOST_FULL,
|
|
|
CLASS_ALMOST_EMPTY,
|
|
|
- NR_ZS_STAT_TYPE,
|
|
|
};
|
|
|
|
|
|
+#ifdef CONFIG_ZSMALLOC_STAT
|
|
|
+#define NR_ZS_STAT_TYPE (CLASS_ALMOST_EMPTY + 1)
|
|
|
+#else
|
|
|
+#define NR_ZS_STAT_TYPE (OBJ_USED + 1)
|
|
|
+#endif
|
|
|
+
|
|
|
struct zs_size_stat {
|
|
|
unsigned long objs[NR_ZS_STAT_TYPE];
|
|
|
};
|
|
@@ -448,19 +453,23 @@ static int get_size_class_index(int size)
|
|
|
static inline void zs_stat_inc(struct size_class *class,
|
|
|
enum zs_stat_type type, unsigned long cnt)
|
|
|
{
|
|
|
- class->stats.objs[type] += cnt;
|
|
|
+ if (type < NR_ZS_STAT_TYPE)
|
|
|
+ class->stats.objs[type] += cnt;
|
|
|
}
|
|
|
|
|
|
static inline void zs_stat_dec(struct size_class *class,
|
|
|
enum zs_stat_type type, unsigned long cnt)
|
|
|
{
|
|
|
- class->stats.objs[type] -= cnt;
|
|
|
+ if (type < NR_ZS_STAT_TYPE)
|
|
|
+ class->stats.objs[type] -= cnt;
|
|
|
}
|
|
|
|
|
|
static inline unsigned long zs_stat_get(struct size_class *class,
|
|
|
enum zs_stat_type type)
|
|
|
{
|
|
|
- return class->stats.objs[type];
|
|
|
+ if (type < NR_ZS_STAT_TYPE)
|
|
|
+ return class->stats.objs[type];
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_ZSMALLOC_STAT
|