Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 138781
b: refs/heads/master
c: 4c5502b
h: refs/heads/master
i:
  138779: 29d3f97
v: v3
  • Loading branch information
Suresh Siddha authored and H. Peter Anvin committed Mar 17, 2009
1 parent 9d278fd commit 0164a5b
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 28 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2c74d66624ddbda8101d54d1e184cf9229b378bc
refs/heads/master: 4c5502b1c5744b2090414e1b80ca6388d5c46e06
3 changes: 1 addition & 2 deletions trunk/arch/x86/kernel/tlb_uv.c
Original file line number Diff line number Diff line change
Expand Up @@ -750,7 +750,7 @@ static int __init uv_bau_init(void)
int node;
int nblades;
int last_blade;
int cur_cpu;
int cur_cpu = 0;

if (!is_uv_system())
return 0;
Expand All @@ -760,7 +760,6 @@ static int __init uv_bau_init(void)
uv_mmask = (1UL << uv_hub_info->n_val) - 1;
nblades = 0;
last_blade = -1;
cur_cpu = 0;
for_each_online_node(node) {
blade = uv_node_to_blade_id(node);
if (blade == last_blade)
Expand Down
58 changes: 33 additions & 25 deletions trunk/drivers/pci/intr_remapping.c
Original file line number Diff line number Diff line change
Expand Up @@ -117,21 +117,22 @@ int get_irte(int irq, struct irte *entry)
{
int index;
struct irq_2_iommu *irq_iommu;
unsigned long flags;

if (!entry)
return -1;

spin_lock(&irq_2_ir_lock);
spin_lock_irqsave(&irq_2_ir_lock, flags);
irq_iommu = valid_irq_2_iommu(irq);
if (!irq_iommu) {
spin_unlock(&irq_2_ir_lock);
spin_unlock_irqrestore(&irq_2_ir_lock, flags);
return -1;
}

index = irq_iommu->irte_index + irq_iommu->sub_handle;
*entry = *(irq_iommu->iommu->ir_table->base + index);

spin_unlock(&irq_2_ir_lock);
spin_unlock_irqrestore(&irq_2_ir_lock, flags);
return 0;
}

Expand All @@ -141,6 +142,7 @@ int alloc_irte(struct intel_iommu *iommu, int irq, u16 count)
struct irq_2_iommu *irq_iommu;
u16 index, start_index;
unsigned int mask = 0;
unsigned long flags;
int i;

if (!count)
Expand Down Expand Up @@ -170,7 +172,7 @@ int alloc_irte(struct intel_iommu *iommu, int irq, u16 count)
return -1;
}

spin_lock(&irq_2_ir_lock);
spin_lock_irqsave(&irq_2_ir_lock, flags);
do {
for (i = index; i < index + count; i++)
if (table->base[i].present)
Expand All @@ -182,7 +184,7 @@ int alloc_irte(struct intel_iommu *iommu, int irq, u16 count)
index = (index + count) % INTR_REMAP_TABLE_ENTRIES;

if (index == start_index) {
spin_unlock(&irq_2_ir_lock);
spin_unlock_irqrestore(&irq_2_ir_lock, flags);
printk(KERN_ERR "can't allocate an IRTE\n");
return -1;
}
Expand All @@ -193,7 +195,7 @@ int alloc_irte(struct intel_iommu *iommu, int irq, u16 count)

irq_iommu = irq_2_iommu_alloc(irq);
if (!irq_iommu) {
spin_unlock(&irq_2_ir_lock);
spin_unlock_irqrestore(&irq_2_ir_lock, flags);
printk(KERN_ERR "can't allocate irq_2_iommu\n");
return -1;
}
Expand All @@ -203,7 +205,7 @@ int alloc_irte(struct intel_iommu *iommu, int irq, u16 count)
irq_iommu->sub_handle = 0;
irq_iommu->irte_mask = mask;

spin_unlock(&irq_2_ir_lock);
spin_unlock_irqrestore(&irq_2_ir_lock, flags);

return index;
}
Expand All @@ -223,30 +225,32 @@ int map_irq_to_irte_handle(int irq, u16 *sub_handle)
{
int index;
struct irq_2_iommu *irq_iommu;
unsigned long flags;

spin_lock(&irq_2_ir_lock);
spin_lock_irqsave(&irq_2_ir_lock, flags);
irq_iommu = valid_irq_2_iommu(irq);
if (!irq_iommu) {
spin_unlock(&irq_2_ir_lock);
spin_unlock_irqrestore(&irq_2_ir_lock, flags);
return -1;
}

*sub_handle = irq_iommu->sub_handle;
index = irq_iommu->irte_index;
spin_unlock(&irq_2_ir_lock);
spin_unlock_irqrestore(&irq_2_ir_lock, flags);
return index;
}

int set_irte_irq(int irq, struct intel_iommu *iommu, u16 index, u16 subhandle)
{
struct irq_2_iommu *irq_iommu;
unsigned long flags;

spin_lock(&irq_2_ir_lock);
spin_lock_irqsave(&irq_2_ir_lock, flags);

irq_iommu = irq_2_iommu_alloc(irq);

if (!irq_iommu) {
spin_unlock(&irq_2_ir_lock);
spin_unlock_irqrestore(&irq_2_ir_lock, flags);
printk(KERN_ERR "can't allocate irq_2_iommu\n");
return -1;
}
Expand All @@ -256,19 +260,20 @@ int set_irte_irq(int irq, struct intel_iommu *iommu, u16 index, u16 subhandle)
irq_iommu->sub_handle = subhandle;
irq_iommu->irte_mask = 0;

spin_unlock(&irq_2_ir_lock);
spin_unlock_irqrestore(&irq_2_ir_lock, flags);

return 0;
}

int clear_irte_irq(int irq, struct intel_iommu *iommu, u16 index)
{
struct irq_2_iommu *irq_iommu;
unsigned long flags;

spin_lock(&irq_2_ir_lock);
spin_lock_irqsave(&irq_2_ir_lock, flags);
irq_iommu = valid_irq_2_iommu(irq);
if (!irq_iommu) {
spin_unlock(&irq_2_ir_lock);
spin_unlock_irqrestore(&irq_2_ir_lock, flags);
return -1;
}

Expand All @@ -277,7 +282,7 @@ int clear_irte_irq(int irq, struct intel_iommu *iommu, u16 index)
irq_iommu->sub_handle = 0;
irq_2_iommu(irq)->irte_mask = 0;

spin_unlock(&irq_2_ir_lock);
spin_unlock_irqrestore(&irq_2_ir_lock, flags);

return 0;
}
Expand All @@ -289,11 +294,12 @@ int modify_irte(int irq, struct irte *irte_modified)
struct irte *irte;
struct intel_iommu *iommu;
struct irq_2_iommu *irq_iommu;
unsigned long flags;

spin_lock(&irq_2_ir_lock);
spin_lock_irqsave(&irq_2_ir_lock, flags);
irq_iommu = valid_irq_2_iommu(irq);
if (!irq_iommu) {
spin_unlock(&irq_2_ir_lock);
spin_unlock_irqrestore(&irq_2_ir_lock, flags);
return -1;
}

Expand All @@ -306,7 +312,7 @@ int modify_irte(int irq, struct irte *irte_modified)
__iommu_flush_cache(iommu, irte, sizeof(*irte));

rc = qi_flush_iec(iommu, index, 0);
spin_unlock(&irq_2_ir_lock);
spin_unlock_irqrestore(&irq_2_ir_lock, flags);

return rc;
}
Expand All @@ -317,11 +323,12 @@ int flush_irte(int irq)
int index;
struct intel_iommu *iommu;
struct irq_2_iommu *irq_iommu;
unsigned long flags;

spin_lock(&irq_2_ir_lock);
spin_lock_irqsave(&irq_2_ir_lock, flags);
irq_iommu = valid_irq_2_iommu(irq);
if (!irq_iommu) {
spin_unlock(&irq_2_ir_lock);
spin_unlock_irqrestore(&irq_2_ir_lock, flags);
return -1;
}

Expand All @@ -330,7 +337,7 @@ int flush_irte(int irq)
index = irq_iommu->irte_index + irq_iommu->sub_handle;

rc = qi_flush_iec(iommu, index, irq_iommu->irte_mask);
spin_unlock(&irq_2_ir_lock);
spin_unlock_irqrestore(&irq_2_ir_lock, flags);

return rc;
}
Expand Down Expand Up @@ -363,11 +370,12 @@ int free_irte(int irq)
struct irte *irte;
struct intel_iommu *iommu;
struct irq_2_iommu *irq_iommu;
unsigned long flags;

spin_lock(&irq_2_ir_lock);
spin_lock_irqsave(&irq_2_ir_lock, flags);
irq_iommu = valid_irq_2_iommu(irq);
if (!irq_iommu) {
spin_unlock(&irq_2_ir_lock);
spin_unlock_irqrestore(&irq_2_ir_lock, flags);
return -1;
}

Expand All @@ -387,7 +395,7 @@ int free_irte(int irq)
irq_iommu->sub_handle = 0;
irq_iommu->irte_mask = 0;

spin_unlock(&irq_2_ir_lock);
spin_unlock_irqrestore(&irq_2_ir_lock, flags);

return rc;
}
Expand Down

0 comments on commit 0164a5b

Please sign in to comment.