# HG changeset patch
# User Keir Fraser <keir@xxxxxxx>
# Date 1291234332 0
# Node ID c2cb776a5365bd3891174e7375d9079a76b37008
# Parent ddb6c9c6ebb965ffe6f36cc55399a6c301217eb3
x86/IRQ: pass CPU masks by reference rather than by value in more places
Additionally simplify operations on them in a few cases.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
---
xen/arch/x86/genapic/delivery.c | 24 ++++++++++++------------
xen/arch/x86/genapic/x2apic.c | 16 ++++++++--------
xen/arch/x86/hpet.c | 2 +-
xen/arch/x86/io_apic.c | 21 ++++++++++-----------
xen/arch/x86/irq.c | 23 +++++++++++------------
xen/arch/x86/msi.c | 5 ++---
xen/drivers/passthrough/amd/iommu_init.c | 2 +-
xen/drivers/passthrough/vtd/iommu.c | 2 +-
xen/include/asm-x86/genapic.h | 26 +++++++++++++-------------
xen/include/asm-x86/irq.h | 2 +-
xen/include/xen/irq.h | 8 ++++----
11 files changed, 64 insertions(+), 67 deletions(-)
diff -r ddb6c9c6ebb9 -r c2cb776a5365 xen/arch/x86/genapic/delivery.c
--- a/xen/arch/x86/genapic/delivery.c Wed Dec 01 20:11:30 2010 +0000
+++ b/xen/arch/x86/genapic/delivery.c Wed Dec 01 20:12:12 2010 +0000
@@ -26,19 +26,19 @@ void clustered_apic_check_flat(void)
printk("Enabling APIC mode: Flat. Using %d I/O APICs\n", nr_ioapics);
}
-cpumask_t target_cpus_flat(void)
+const cpumask_t *target_cpus_flat(void)
{
- return cpu_online_map;
+ return &cpu_online_map;
}
-cpumask_t vector_allocation_cpumask_flat(int cpu)
+const cpumask_t *vector_allocation_cpumask_flat(int cpu)
{
- return cpu_online_map;
+ return &cpu_online_map;
}
-unsigned int cpu_mask_to_apicid_flat(cpumask_t cpumask)
+unsigned int cpu_mask_to_apicid_flat(const cpumask_t *cpumask)
{
- return cpus_addr(cpumask)[0]&0xFF;
+ return cpus_addr(*cpumask)[0]&0xFF;
}
/*
@@ -59,18 +59,18 @@ void clustered_apic_check_phys(void)
printk("Enabling APIC mode: Phys. Using %d I/O APICs\n", nr_ioapics);
}
-cpumask_t target_cpus_phys(void)
+const cpumask_t *target_cpus_phys(void)
{
- return cpu_online_map;
+ return &cpu_online_map;
}
-cpumask_t vector_allocation_cpumask_phys(int cpu)
+const cpumask_t *vector_allocation_cpumask_phys(int cpu)
{
- return cpumask_of_cpu(cpu);
+ return cpumask_of(cpu);
}
-unsigned int cpu_mask_to_apicid_phys(cpumask_t cpumask)
+unsigned int cpu_mask_to_apicid_phys(const cpumask_t *cpumask)
{
/* As we are using single CPU as destination, pick only one CPU here */
- return cpu_physical_id(first_cpu(cpumask));
+ return cpu_physical_id(cpumask_first(cpumask));
}
diff -r ddb6c9c6ebb9 -r c2cb776a5365 xen/arch/x86/genapic/x2apic.c
--- a/xen/arch/x86/genapic/x2apic.c Wed Dec 01 20:11:30 2010 +0000
+++ b/xen/arch/x86/genapic/x2apic.c Wed Dec 01 20:12:12 2010 +0000
@@ -89,24 +89,24 @@ void clustered_apic_check_x2apic(void)
return;
}
-cpumask_t target_cpus_x2apic(void)
+const cpumask_t *target_cpus_x2apic(void)
{
- return cpu_online_map;
+ return &cpu_online_map;
}
-cpumask_t vector_allocation_cpumask_x2apic(int cpu)
+const cpumask_t *vector_allocation_cpumask_x2apic(int cpu)
{
- return cpumask_of_cpu(cpu);
+ return cpumask_of(cpu);
}
-unsigned int cpu_mask_to_apicid_x2apic_phys(cpumask_t cpumask)
+unsigned int cpu_mask_to_apicid_x2apic_phys(const cpumask_t *cpumask)
{
- return cpu_physical_id(first_cpu(cpumask));
+ return cpu_physical_id(cpumask_first(cpumask));
}
-unsigned int cpu_mask_to_apicid_x2apic_cluster(cpumask_t cpumask)
+unsigned int cpu_mask_to_apicid_x2apic_cluster(const cpumask_t *cpumask)
{
- return cpu_2_logical_apicid[first_cpu(cpumask)];
+ return cpu_2_logical_apicid[cpumask_first(cpumask)];
}
static void __send_IPI_mask_x2apic(
diff -r ddb6c9c6ebb9 -r c2cb776a5365 xen/arch/x86/hpet.c
--- a/xen/arch/x86/hpet.c Wed Dec 01 20:11:30 2010 +0000
+++ b/xen/arch/x86/hpet.c Wed Dec 01 20:12:12 2010 +0000
@@ -336,7 +336,7 @@ static void hpet_msi_set_affinity(unsign
struct irq_desc * desc = irq_to_desc(irq);
struct irq_cfg *cfg= desc->chip_data;
- dest = set_desc_affinity(desc, mask);
+ dest = set_desc_affinity(desc, &mask);
if (dest == BAD_APICID)
return;
diff -r ddb6c9c6ebb9 -r c2cb776a5365 xen/arch/x86/io_apic.c
--- a/xen/arch/x86/io_apic.c Wed Dec 01 20:11:30 2010 +0000
+++ b/xen/arch/x86/io_apic.c Wed Dec 01 20:12:12 2010 +0000
@@ -460,7 +460,7 @@ void irq_complete_move(struct irq_desc *
send_cleanup_vector(cfg);
}
-unsigned int set_desc_affinity(struct irq_desc *desc, cpumask_t mask)
+unsigned int set_desc_affinity(struct irq_desc *desc, const cpumask_t *mask)
{
struct irq_cfg *cfg;
unsigned int irq;
@@ -468,7 +468,7 @@ unsigned int set_desc_affinity(struct ir
unsigned long flags;
cpumask_t dest_mask;
- if (!cpus_intersects(mask, cpu_online_map))
+ if (!cpus_intersects(*mask, cpu_online_map))
return BAD_APICID;
irq = desc->irq;
@@ -483,15 +483,14 @@ unsigned int set_desc_affinity(struct ir
if (ret < 0)
return BAD_APICID;
- cpus_copy(desc->affinity, mask);
- cpus_and(dest_mask, desc->affinity, cfg->cpu_mask);
-
- return cpu_mask_to_apicid(dest_mask);
+ cpus_copy(desc->affinity, *mask);
+ cpus_and(dest_mask, *mask, cfg->cpu_mask);
+
+ return cpu_mask_to_apicid(&dest_mask);
}
static void
-set_ioapic_affinity_irq_desc(struct irq_desc *desc,
- const struct cpumask mask)
+set_ioapic_affinity_irq_desc(struct irq_desc *desc, const cpumask_t *mask)
{
unsigned long flags;
unsigned int dest;
@@ -536,7 +535,7 @@ set_ioapic_affinity_irq(unsigned int irq
desc = irq_to_desc(irq);
- set_ioapic_affinity_irq_desc(desc, mask);
+ set_ioapic_affinity_irq_desc(desc, &mask);
}
#endif /* CONFIG_SMP */
@@ -992,7 +991,7 @@ static void __init setup_IO_APIC_irqs(vo
}
cfg = irq_cfg(irq);
SET_DEST(entry.dest.dest32, entry.dest.logical.logical_dest,
- cpu_mask_to_apicid(cfg->cpu_mask));
+ cpu_mask_to_apicid(&cfg->cpu_mask));
spin_lock_irqsave(&ioapic_lock, flags);
io_apic_write(apic, 0x11+2*pin, *(((int *)&entry)+1));
io_apic_write(apic, 0x10+2*pin, *(((int *)&entry)+0));
@@ -2447,7 +2446,7 @@ int ioapic_guest_write(unsigned long phy
rte.vector = cfg->vector;
SET_DEST(rte.dest.dest32, rte.dest.logical.logical_dest,
- cpu_mask_to_apicid(cfg->cpu_mask));
+ cpu_mask_to_apicid(&cfg->cpu_mask));
io_apic_write(apic, 0x10 + 2 * pin, *(((int *)&rte) + 0));
io_apic_write(apic, 0x11 + 2 * pin, *(((int *)&rte) + 1));
diff -r ddb6c9c6ebb9 -r c2cb776a5365 xen/arch/x86/irq.c
--- a/xen/arch/x86/irq.c Wed Dec 01 20:11:30 2010 +0000
+++ b/xen/arch/x86/irq.c Wed Dec 01 20:12:12 2010 +0000
@@ -330,7 +330,7 @@ hw_irq_controller no_irq_type = {
atomic_t irq_err_count;
-int __assign_irq_vector(int irq, struct irq_cfg *cfg, cpumask_t mask)
+int __assign_irq_vector(int irq, struct irq_cfg *cfg, const cpumask_t *mask)
{
/*
* NOTE! The local APIC isn't very good at handling
@@ -350,9 +350,8 @@ int __assign_irq_vector(int irq, struct
old_vector = irq_to_vector(irq);
if (old_vector) {
- cpus_and(tmp_mask, mask, cpu_online_map);
- cpus_and(tmp_mask, cfg->cpu_mask, tmp_mask);
- if (!cpus_empty(tmp_mask)) {
+ cpus_and(tmp_mask, *mask, cpu_online_map);
+ if (cpus_intersects(tmp_mask, cfg->cpu_mask)) {
cfg->vector = old_vector;
return 0;
}
@@ -361,16 +360,16 @@ int __assign_irq_vector(int irq, struct
if ((cfg->move_in_progress) || cfg->move_cleanup_count)
return -EAGAIN;
- /* Only try and allocate irqs on cpus that are present */
- cpus_and(mask, mask, cpu_online_map);
-
err = -ENOSPC;
- for_each_cpu_mask(cpu, mask) {
+ for_each_cpu_mask(cpu, *mask) {
int new_cpu;
int vector, offset;
- tmp_mask = vector_allocation_cpumask(cpu);
- cpus_and(tmp_mask, tmp_mask, cpu_online_map);
+ /* Only try and allocate irqs on cpus that are present. */
+ if (!cpu_online(cpu))
+ continue;
+
+ cpus_and(tmp_mask, *vector_allocation_cpumask(cpu), cpu_online_map);
vector = current_vector;
offset = current_offset;
@@ -1747,14 +1746,14 @@ void fixup_irqs(void)
spin_lock(&desc->lock);
affinity = desc->affinity;
- if ( !desc->action || cpus_equal(affinity, cpu_online_map) )
+ if ( !desc->action || cpus_subset(affinity, cpu_online_map) )
{
spin_unlock(&desc->lock);
continue;
}
cpus_and(affinity, affinity, cpu_online_map);
- if ( any_online_cpu(affinity) == NR_CPUS )
+ if ( cpus_empty(affinity) )
{
break_affinity = 1;
affinity = cpu_online_map;
diff -r ddb6c9c6ebb9 -r c2cb776a5365 xen/arch/x86/msi.c
--- a/xen/arch/x86/msi.c Wed Dec 01 20:11:30 2010 +0000
+++ b/xen/arch/x86/msi.c Wed Dec 01 20:12:12 2010 +0000
@@ -134,8 +134,7 @@ void msi_compose_msg(struct pci_dev *pde
}
if ( vector ) {
-
- dest = cpu_mask_to_apicid(domain);
+ dest = cpu_mask_to_apicid(&domain);
msg->address_hi = MSI_ADDR_BASE_HI;
msg->address_lo =
@@ -275,7 +274,7 @@ void set_msi_affinity(unsigned int irq,
struct msi_desc *msi_desc = desc->msi_desc;
struct irq_cfg *cfg = desc->chip_data;
- dest = set_desc_affinity(desc, mask);
+ dest = set_desc_affinity(desc, &mask);
if (dest == BAD_APICID || !msi_desc)
return;
diff -r ddb6c9c6ebb9 -r c2cb776a5365 xen/drivers/passthrough/amd/iommu_init.c
--- a/xen/drivers/passthrough/amd/iommu_init.c Wed Dec 01 20:11:30 2010 +0000
+++ b/xen/drivers/passthrough/amd/iommu_init.c Wed Dec 01 20:12:12 2010 +0000
@@ -356,7 +356,7 @@ static void iommu_msi_set_affinity(unsig
u8 dev = PCI_SLOT(iommu->bdf & 0xff);
u8 func = PCI_FUNC(iommu->bdf & 0xff);
- dest = set_desc_affinity(desc, mask);
+ dest = set_desc_affinity(desc, &mask);
if (dest == BAD_APICID){
dprintk(XENLOG_ERR, "Set iommu interrupt affinity error!\n");
return;
diff -r ddb6c9c6ebb9 -r c2cb776a5365 xen/drivers/passthrough/vtd/iommu.c
--- a/xen/drivers/passthrough/vtd/iommu.c Wed Dec 01 20:11:30 2010 +0000
+++ b/xen/drivers/passthrough/vtd/iommu.c Wed Dec 01 20:12:12 2010 +0000
@@ -1011,7 +1011,7 @@ static void dma_msi_set_affinity(unsigne
struct irq_cfg *cfg = desc->chip_data;
#ifdef CONFIG_X86
- dest = set_desc_affinity(desc, mask);
+ dest = set_desc_affinity(desc, &mask);
if (dest == BAD_APICID){
dprintk(XENLOG_ERR VTDPREFIX, "Set iommu interrupt affinity error!\n");
return;
diff -r ddb6c9c6ebb9 -r c2cb776a5365 xen/include/asm-x86/genapic.h
--- a/xen/include/asm-x86/genapic.h Wed Dec 01 20:11:30 2010 +0000
+++ b/xen/include/asm-x86/genapic.h Wed Dec 01 20:12:12 2010 +0000
@@ -33,9 +33,9 @@ struct genapic {
int int_dest_mode;
void (*init_apic_ldr)(void);
void (*clustered_apic_check)(void);
- cpumask_t (*target_cpus)(void);
- cpumask_t (*vector_allocation_cpumask)(int cpu);
- unsigned int (*cpu_mask_to_apicid)(cpumask_t cpumask);
+ const cpumask_t *(*target_cpus)(void);
+ const cpumask_t *(*vector_allocation_cpumask)(int cpu);
+ unsigned int (*cpu_mask_to_apicid)(const cpumask_t *cpumask);
void (*send_IPI_mask)(const cpumask_t *mask, int vector);
void (*send_IPI_self)(int vector);
};
@@ -54,11 +54,11 @@ extern const struct genapic apic_x2apic_
void init_apic_ldr_flat(void);
void clustered_apic_check_flat(void);
-cpumask_t target_cpus_flat(void);
-unsigned int cpu_mask_to_apicid_flat(cpumask_t cpumask);
+const cpumask_t *target_cpus_flat(void);
+unsigned int cpu_mask_to_apicid_flat(const cpumask_t *cpumask);
void send_IPI_mask_flat(const cpumask_t *mask, int vector);
void send_IPI_self_flat(int vector);
-cpumask_t vector_allocation_cpumask_flat(int cpu);
+const cpumask_t *vector_allocation_cpumask_flat(int cpu);
#define GENAPIC_FLAT \
.int_delivery_mode = dest_LowestPrio, \
.int_dest_mode = 1 /* logical delivery */, \
@@ -74,13 +74,13 @@ void init_apic_ldr_x2apic_phys(void);
void init_apic_ldr_x2apic_phys(void);
void init_apic_ldr_x2apic_cluster(void);
void clustered_apic_check_x2apic(void);
-cpumask_t target_cpus_x2apic(void);
-unsigned int cpu_mask_to_apicid_x2apic_phys(cpumask_t cpumask);
-unsigned int cpu_mask_to_apicid_x2apic_cluster(cpumask_t cpumask);
+const cpumask_t *target_cpus_x2apic(void);
+unsigned int cpu_mask_to_apicid_x2apic_phys(const cpumask_t *cpumask);
+unsigned int cpu_mask_to_apicid_x2apic_cluster(const cpumask_t *cpumask);
void send_IPI_mask_x2apic_phys(const cpumask_t *mask, int vector);
void send_IPI_mask_x2apic_cluster(const cpumask_t *mask, int vector);
void send_IPI_self_x2apic(int vector);
-cpumask_t vector_allocation_cpumask_x2apic(int cpu);
+const cpumask_t *vector_allocation_cpumask_x2apic(int cpu);
#define GENAPIC_X2APIC_PHYS \
.int_delivery_mode = dest_Fixed, \
.int_dest_mode = 0 /* physical delivery */, \
@@ -105,11 +105,11 @@ cpumask_t vector_allocation_cpumask_x2ap
void init_apic_ldr_phys(void);
void clustered_apic_check_phys(void);
-cpumask_t target_cpus_phys(void);
-unsigned int cpu_mask_to_apicid_phys(cpumask_t cpumask);
+const cpumask_t *target_cpus_phys(void);
+unsigned int cpu_mask_to_apicid_phys(const cpumask_t *cpumask);
void send_IPI_mask_phys(const cpumask_t *mask, int vector);
void send_IPI_self_phys(int vector);
-cpumask_t vector_allocation_cpumask_phys(int cpu);
+const cpumask_t *vector_allocation_cpumask_phys(int cpu);
#define GENAPIC_PHYS \
.int_delivery_mode = dest_Fixed, \
.int_dest_mode = 0 /* physical delivery */, \
diff -r ddb6c9c6ebb9 -r c2cb776a5365 xen/include/asm-x86/irq.h
--- a/xen/include/asm-x86/irq.h Wed Dec 01 20:11:30 2010 +0000
+++ b/xen/include/asm-x86/irq.h Wed Dec 01 20:12:12 2010 +0000
@@ -139,7 +139,7 @@ void move_native_irq(int irq);
void move_native_irq(int irq);
void move_masked_irq(int irq);
-int __assign_irq_vector(int irq, struct irq_cfg *cfg, cpumask_t mask);
+int __assign_irq_vector(int irq, struct irq_cfg *, const cpumask_t *);
int bind_irq_vector(int irq, int vector, cpumask_t domain);
diff -r ddb6c9c6ebb9 -r c2cb776a5365 xen/include/xen/irq.h
--- a/xen/include/xen/irq.h Wed Dec 01 20:11:30 2010 +0000
+++ b/xen/include/xen/irq.h Wed Dec 01 20:12:12 2010 +0000
@@ -143,16 +143,16 @@ extern irq_desc_t *domain_spin_lock_irq_
extern irq_desc_t *domain_spin_lock_irq_desc(
struct domain *d, int irq, unsigned long *pflags);
-static inline void set_native_irq_info(unsigned int irq, cpumask_t mask)
+static inline void set_native_irq_info(unsigned int irq, const cpumask_t *mask)
{
- irq_desc[irq].affinity = mask;
+ irq_desc[irq].affinity = *mask;
}
static inline void set_irq_info(int irq, cpumask_t mask)
{
- set_native_irq_info(irq, mask);
+ set_native_irq_info(irq, &mask);
}
-unsigned int set_desc_affinity(struct irq_desc *desc, cpumask_t mask);
+unsigned int set_desc_affinity(struct irq_desc *, const cpumask_t *);
#endif /* __XEN_IRQ_H__ */
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|