Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dcbff5d1 authored by Lai Jiangshan's avatar Lai Jiangshan Committed by Linus Torvalds
Browse files

idr: reorder the fields



idr_layer->layer is always accessed in read path, move it in the front.

idr_layer->bitmap is moved on the bottom.  And rcu_head shares with
bitmap due to they do not be accessed at the same time.

idr->id_free/id_free_cnt/lock are free list fields, and moved to the
bottom.  They will be removed in near future.

Signed-off-by: default avatarLai Jiangshan <laijs@cn.fujitsu.com>
Cc: Tejun Heo <tj@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 15f3ec3f
Loading
Loading
Loading
Loading
+8 −5
Original line number Original line Diff line number Diff line
@@ -29,21 +29,24 @@


struct idr_layer {
struct idr_layer {
	int			prefix;	/* the ID prefix of this idr_layer */
	int			prefix;	/* the ID prefix of this idr_layer */
	DECLARE_BITMAP(bitmap, IDR_SIZE); /* A zero bit means "space here" */
	int			layer;	/* distance from leaf */
	struct idr_layer __rcu	*ary[1<<IDR_BITS];
	struct idr_layer __rcu	*ary[1<<IDR_BITS];
	int			count;	/* When zero, we can release it */
	int			count;	/* When zero, we can release it */
	int			layer;	/* distance from leaf */
	union {
		/* A zero bit means "space here" */
		DECLARE_BITMAP(bitmap, IDR_SIZE);
		struct rcu_head		rcu_head;
		struct rcu_head		rcu_head;
	};
	};
};


struct idr {
struct idr {
	struct idr_layer __rcu	*hint;	/* the last layer allocated from */
	struct idr_layer __rcu	*hint;	/* the last layer allocated from */
	struct idr_layer __rcu	*top;
	struct idr_layer __rcu	*top;
	struct idr_layer	*id_free;
	int			layers;	/* only valid w/o concurrent changes */
	int			layers;	/* only valid w/o concurrent changes */
	int			id_free_cnt;
	int			cur;	/* current pos for cyclic allocation */
	int			cur;	/* current pos for cyclic allocation */
	spinlock_t		lock;
	spinlock_t		lock;
	int			id_free_cnt;
	struct idr_layer	*id_free;
};
};


#define IDR_INIT(name)							\
#define IDR_INIT(name)							\