mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
CPU: abstract read-mostly-ness for per-CPU cpumask_var_t variables
cpumask_var_t can resolve to a pointer or to an array. While the pointer typically is allocated once for a CPU and then only read (i.e. wants to be marked read-mostly), the same isn't necessarily true for the array case. There things depend on how the variable is actually used. cpu_core_mask and cpu_sibling_mask (which all architectures have inherited from x86, which in turn is possibly wrong) are altered only as CPUs are brought up or down, so may remain uniformly read-mostly. Other (x86-only) instances want to change, to avoid disturbing adjacent read-mostly data. While doing the x86 adjustment, also do one in the opposite direction, i.e. where there was no read-mostly annotation when it is applicable in the "pointer" case. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Roger Pau Monné <roger.pau@citrix.com>
This commit is contained in:
1 parent
17492a0801
commit
67e055ee9c
3 files changed
+10
-4
No files matched your search
@@ -20,7 +20,7 @@
|
||||
static DEFINE_PER_CPU_READ_MOSTLY(u32, cpu_2_logical_apicid);
|
||||
static DEFINE_PER_CPU_READ_MOSTLY(cpumask_t *, cluster_cpus);
|
||||
static cpumask_t *cluster_cpus_spare;
|
||||
static DEFINE_PER_CPU(cpumask_var_t, scratch_mask);
|
||||
static DEFINE_PER_CPU_CPUMASK_VAR(scratch_mask);
|
||||
|
||||
static inline u32 x2apic_cluster(unsigned int cpu)
|
||||
{
|
||||
|
||||
@@ -52,13 +52,13 @@ DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_sibling_mask);
|
||||
/* representing HT and core siblings of each logical CPU */
|
||||
DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_core_mask);
|
||||
|
||||
DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, scratch_cpumask);
|
||||
DEFINE_PER_CPU_CPUMASK_VAR(scratch_cpumask);
|
||||
static cpumask_t scratch_cpu0mask;
|
||||
|
||||
DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, hpet_scratch_cpumask);
|
||||
DEFINE_PER_CPU_CPUMASK_VAR(hpet_scratch_cpumask);
|
||||
static cpumask_t hpet_scratch_cpu0mask;
|
||||
|
||||
DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, send_ipi_cpumask);
|
||||
DEFINE_PER_CPU_CPUMASK_VAR(send_ipi_cpumask);
|
||||
static cpumask_t send_ipi_cpu0mask;
|
||||
|
||||
DEFINE_PER_CPU_READ_MOSTLY(struct stubs, stubs);
|
||||
|
||||
@@ -311,6 +311,9 @@ extern const cpumask_t cpumask_all;
|
||||
|
||||
typedef cpumask_t *cpumask_var_t;
|
||||
|
||||
#define DEFINE_PER_CPU_CPUMASK_VAR(sym) \
|
||||
DEFINE_PER_CPU_READ_MOSTLY(cpumask_var_t, sym)
|
||||
|
||||
static inline bool alloc_cpumask_var(cpumask_var_t *mask)
|
||||
{
|
||||
*mask = _xmalloc(nr_cpumask_bits / 8, sizeof(long));
|
||||
@@ -349,6 +352,9 @@ static inline void free_cpumask_var(cpumask_var_t mask)
|
||||
#else
|
||||
typedef cpumask_t cpumask_var_t[1];
|
||||
|
||||
#define DEFINE_PER_CPU_CPUMASK_VAR(sym) \
|
||||
DEFINE_PER_CPU(cpumask_var_t, sym)
|
||||
|
||||
static inline bool alloc_cpumask_var(cpumask_var_t *mask)
|
||||
{
|
||||
return true;
|
||||
|
||||