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

Commit 1328710b authored by Daniel Micay's avatar Daniel Micay Committed by Tejun Heo
Browse files

mark most percpu globals as __ro_after_init



Moving pcpu_base_addr to this section comes from PaX where it's part of
KERNEXEC. This extends it to the rest of the globals only written by the
init code.

Signed-off-by: default avatarDaniel Micay <danielmicay@gmail.com>
Acked-by: default avatarKees Cook <keescook@chromium.org>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent 56868a46
Loading
Loading
Loading
Loading
+18 −18
Original line number Original line Diff line number Diff line
@@ -121,35 +121,35 @@ struct pcpu_chunk {
	unsigned long		populated[];	/* populated bitmap */
	unsigned long		populated[];	/* populated bitmap */
};
};


static int pcpu_unit_pages __read_mostly;
static int pcpu_unit_pages __ro_after_init;
static int pcpu_unit_size __read_mostly;
static int pcpu_unit_size __ro_after_init;
static int pcpu_nr_units __read_mostly;
static int pcpu_nr_units __ro_after_init;
static int pcpu_atom_size __read_mostly;
static int pcpu_atom_size __ro_after_init;
static int pcpu_nr_slots __read_mostly;
static int pcpu_nr_slots __ro_after_init;
static size_t pcpu_chunk_struct_size __read_mostly;
static size_t pcpu_chunk_struct_size __ro_after_init;


/* cpus with the lowest and highest unit addresses */
/* cpus with the lowest and highest unit addresses */
static unsigned int pcpu_low_unit_cpu __read_mostly;
static unsigned int pcpu_low_unit_cpu __ro_after_init;
static unsigned int pcpu_high_unit_cpu __read_mostly;
static unsigned int pcpu_high_unit_cpu __ro_after_init;


/* the address of the first chunk which starts with the kernel static area */
/* the address of the first chunk which starts with the kernel static area */
void *pcpu_base_addr __read_mostly;
void *pcpu_base_addr __ro_after_init;
EXPORT_SYMBOL_GPL(pcpu_base_addr);
EXPORT_SYMBOL_GPL(pcpu_base_addr);


static const int *pcpu_unit_map __read_mostly;		/* cpu -> unit */
static const int *pcpu_unit_map __ro_after_init;		/* cpu -> unit */
const unsigned long *pcpu_unit_offsets __read_mostly;	/* cpu -> unit offset */
const unsigned long *pcpu_unit_offsets __ro_after_init;	/* cpu -> unit offset */


/* group information, used for vm allocation */
/* group information, used for vm allocation */
static int pcpu_nr_groups __read_mostly;
static int pcpu_nr_groups __ro_after_init;
static const unsigned long *pcpu_group_offsets __read_mostly;
static const unsigned long *pcpu_group_offsets __ro_after_init;
static const size_t *pcpu_group_sizes __read_mostly;
static const size_t *pcpu_group_sizes __ro_after_init;


/*
/*
 * The first chunk which always exists.  Note that unlike other
 * The first chunk which always exists.  Note that unlike other
 * chunks, this one can be allocated and mapped in several different
 * chunks, this one can be allocated and mapped in several different
 * ways and thus often doesn't live in the vmalloc area.
 * ways and thus often doesn't live in the vmalloc area.
 */
 */
static struct pcpu_chunk *pcpu_first_chunk;
static struct pcpu_chunk *pcpu_first_chunk __ro_after_init;


/*
/*
 * Optional reserved chunk.  This chunk reserves part of the first
 * Optional reserved chunk.  This chunk reserves part of the first
@@ -158,13 +158,13 @@ static struct pcpu_chunk *pcpu_first_chunk;
 * area doesn't exist, the following variables contain NULL and 0
 * area doesn't exist, the following variables contain NULL and 0
 * respectively.
 * respectively.
 */
 */
static struct pcpu_chunk *pcpu_reserved_chunk;
static struct pcpu_chunk *pcpu_reserved_chunk __ro_after_init;
static int pcpu_reserved_chunk_limit;
static int pcpu_reserved_chunk_limit __ro_after_init;


static DEFINE_SPINLOCK(pcpu_lock);	/* all internal data structures */
static DEFINE_SPINLOCK(pcpu_lock);	/* all internal data structures */
static DEFINE_MUTEX(pcpu_alloc_mutex);	/* chunk create/destroy, [de]pop, map ext */
static DEFINE_MUTEX(pcpu_alloc_mutex);	/* chunk create/destroy, [de]pop, map ext */


static struct list_head *pcpu_slot __read_mostly; /* chunk list slots */
static struct list_head *pcpu_slot __ro_after_init; /* chunk list slots */


/* chunks which need their map areas extended, protected by pcpu_lock */
/* chunks which need their map areas extended, protected by pcpu_lock */
static LIST_HEAD(pcpu_map_extend_chunks);
static LIST_HEAD(pcpu_map_extend_chunks);