[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 08/10] xen/nodemask: Introduce unlocked __nodemask_{set, clear}() helpers
As with the cpumask side of things, there are times when we do not need locked bit operations on a nodemask. Convert appropriate callers. Three of them operate on init-time data, while domain_update_node_affinity() already has updates to the nodemask in question protected by a spinlock. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- CC: Jan Beulich <JBeulich@xxxxxxxx> CC: Wei Liu <wl@xxxxxxx> CC: Roger Pau Monné <roger.pau@xxxxxxxxxx> CC: Stefano Stabellini <sstabellini@xxxxxxxxxx> CC: Julien Grall <julien.grall@xxxxxxx> CC: Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx> v3: * New --- xen/arch/x86/dom0_build.c | 2 +- xen/arch/x86/srat.c | 4 ++-- xen/common/domain.c | 2 +- xen/include/xen/nodemask.h | 12 ++++++++++++ 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/dom0_build.c b/xen/arch/x86/dom0_build.c index 06500c87c6..c625e64d03 100644 --- a/xen/arch/x86/dom0_build.c +++ b/xen/arch/x86/dom0_build.c @@ -246,7 +246,7 @@ unsigned int __init dom0_max_vcpus(void) for ( i = 0; i < dom0_nr_pxms; ++i ) if ( (node = pxm_to_node(dom0_pxms[i])) != NUMA_NO_NODE ) - node_set(node, dom0_nodes); + __nodemask_set(node, &dom0_nodes); nodes_and(dom0_nodes, dom0_nodes, node_online_map); if ( nodes_empty(dom0_nodes) ) dom0_nodes = node_online_map; diff --git a/xen/arch/x86/srat.c b/xen/arch/x86/srat.c index 506a56d66b..5f44ac27f1 100644 --- a/xen/arch/x86/srat.c +++ b/xen/arch/x86/srat.c @@ -228,7 +228,7 @@ acpi_numa_x2apic_affinity_init(const struct acpi_srat_x2apic_cpu_affinity *pa) } apicid_to_node[pa->apic_id] = node; - node_set(node, processor_nodes_parsed); + __nodemask_set(node, &processor_nodes_parsed); acpi_numa = 1; printk(KERN_INFO "SRAT: PXM %u -> APIC %08x -> Node %u\n", pxm, pa->apic_id, node); @@ -261,7 +261,7 @@ acpi_numa_processor_affinity_init(const struct acpi_srat_cpu_affinity *pa) return; } apicid_to_node[pa->apic_id] = node; - node_set(node, processor_nodes_parsed); + __nodemask_set(node, &processor_nodes_parsed); acpi_numa = 1; printk(KERN_INFO "SRAT: PXM %u -> APIC %02x -> Node %u\n", pxm, pa->apic_id, node); diff --git a/xen/common/domain.c b/xen/common/domain.c index 11565a64b3..5dbc68cbc3 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -617,7 +617,7 @@ void domain_update_node_affinity(struct domain *d) d->node_affinity = NODEMASK_NONE; for_each_cpu ( cpu, dom_affinity ) - node_set(cpu_to_node(cpu), d->node_affinity); + __nodemask_set(cpu_to_node(cpu), &d->node_affinity); } spin_unlock(&d->node_affinity_lock); diff --git a/xen/include/xen/nodemask.h b/xen/include/xen/nodemask.h index 9933fec5c4..1605c1bcc5 100644 --- a/xen/include/xen/nodemask.h +++ b/xen/include/xen/nodemask.h @@ -11,7 +11,9 @@ * The available nodemask operations are: * * void node_set(node, mask) turn on bit 'node' in mask + * void __nodemask_set(node, mask) turn on bit 'node' in mask (unlocked) * void node_clear(node, mask) turn off bit 'node' in mask + * void __nodemask_clear(node, mask) turn off bit 'node' in mask (unlocked) * bool nodemask_test(node, mask) true iff bit 'node' set in mask * int node_test_and_set(node, mask) test and set bit 'node' in mask * @@ -100,12 +102,22 @@ static inline void __node_set(int node, volatile nodemask_t *dstp) set_bit(node, dstp->bits); } +static inline void __nodemask_set(unsigned int node, nodemask_t *dst) +{ + __set_bit(node, dst->bits); +} + #define node_clear(node, dst) __node_clear((node), &(dst)) static inline void __node_clear(int node, volatile nodemask_t *dstp) { clear_bit(node, dstp->bits); } +static inline void __nodemask_clear(unsigned int node, nodemask_t *dst) +{ + __clear_bit(node, dst->bits); +} + static inline bool nodemask_test(unsigned int node, const nodemask_t *dst) { return test_bit(node, dst->bits); -- 2.11.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |