Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
forked fromtorvalds/linux

Commit2d6c4e4

Browse files
committed
Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq updates from Thomas Gleixner: "A small set of updates mostly for irq chip drivers: - MIPS GIC fix for spurious, masked interrupts - fix for a subtle IPI bug in GICv3 - do not probe GICv3 ITSs that are marked as disabled - multi-MSI support for GICv2m - various small cleanups"* 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: irqdomain: Re-use DEFINE_SHOW_ATTRIBUTE() macro irqchip/bcm: Remove hashed address printing irqchip/gic-v2m: Add PCI Multi-MSI support irqchip/gic-v3: Ignore disabled ITS nodes irqchip/gic-v3: Use wmb() instead of smb_wmb() in gic_raise_softirq() irqchip/gic-v3: Change pr_debug message to pr_devel irqchip/mips-gic: Avoid spuriously handling masked interrupts
2 parents59e4721 +6dee6ae commit2d6c4e4

File tree

11 files changed

+36
-51
lines changed

11 files changed

+36
-51
lines changed

‎drivers/irqchip/irq-bcm7038-l1.c‎

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -339,9 +339,6 @@ int __init bcm7038_l1_of_init(struct device_node *dn,
339339
gotoout_unmap;
340340
}
341341

342-
pr_info("registered BCM7038 L1 intc (mem: 0x%p, IRQs: %d)\n",
343-
intc->cpus[0]->map_base,IRQS_PER_WORD*intc->n_words);
344-
345342
return0;
346343

347344
out_unmap:

‎drivers/irqchip/irq-bcm7120-l2.c‎

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -318,9 +318,6 @@ static int __init bcm7120_l2_intc_probe(struct device_node *dn,
318318
}
319319
}
320320

321-
pr_info("registered %s intc (mem: 0x%p, parent IRQ(s): %d)\n",
322-
intc_name,data->map_base[0],data->num_parent_irqs);
323-
324321
return0;
325322

326323
out_free_domain:

‎drivers/irqchip/irq-brcmstb-l2.c‎

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -262,9 +262,6 @@ static int __init brcmstb_l2_intc_of_init(struct device_node *np,
262262
ct->chip.irq_set_wake=irq_gc_set_wake;
263263
}
264264

265-
pr_info("registered L2 intc (mem: 0x%p, parent irq: %d)\n",
266-
base,parent_irq);
267-
268265
return0;
269266

270267
out_free_domain:

‎drivers/irqchip/irq-gic-v2m.c‎

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ static struct irq_chip gicv2m_msi_irq_chip = {
9494

9595
staticstructmsi_domain_infogicv2m_msi_domain_info= {
9696
.flags= (MSI_FLAG_USE_DEF_DOM_OPS |MSI_FLAG_USE_DEF_CHIP_OPS |
97-
MSI_FLAG_PCI_MSIX),
97+
MSI_FLAG_PCI_MSIX |MSI_FLAG_MULTI_PCI_MSI),
9898
.chip=&gicv2m_msi_irq_chip,
9999
};
100100

@@ -155,32 +155,26 @@ static int gicv2m_irq_gic_domain_alloc(struct irq_domain *domain,
155155
return0;
156156
}
157157

158-
staticvoidgicv2m_unalloc_msi(structv2m_data*v2m,unsignedinthwirq)
158+
staticvoidgicv2m_unalloc_msi(structv2m_data*v2m,unsignedinthwirq,
159+
intnr_irqs)
159160
{
160-
intpos;
161-
162-
pos=hwirq-v2m->spi_start;
163-
if (pos<0||pos >=v2m->nr_spis) {
164-
pr_err("Failed to teardown msi. Invalid hwirq %d\n",hwirq);
165-
return;
166-
}
167-
168161
spin_lock(&v2m_lock);
169-
__clear_bit(pos,v2m->bm);
162+
bitmap_release_region(v2m->bm,hwirq-v2m->spi_start,
163+
get_count_order(nr_irqs));
170164
spin_unlock(&v2m_lock);
171165
}
172166

173167
staticintgicv2m_irq_domain_alloc(structirq_domain*domain,unsignedintvirq,
174168
unsignedintnr_irqs,void*args)
175169
{
176170
structv2m_data*v2m=NULL,*tmp;
177-
inthwirq,offset,err=0;
171+
inthwirq,offset,i,err=0;
178172

179173
spin_lock(&v2m_lock);
180174
list_for_each_entry(tmp,&v2m_nodes,entry) {
181-
offset=find_first_zero_bit(tmp->bm,tmp->nr_spis);
182-
if (offset<tmp->nr_spis) {
183-
__set_bit(offset,tmp->bm);
175+
offset=bitmap_find_free_region(tmp->bm,tmp->nr_spis,
176+
get_count_order(nr_irqs));
177+
if(offset >=0) {
184178
v2m=tmp;
185179
break;
186180
}
@@ -192,16 +186,21 @@ static int gicv2m_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
192186

193187
hwirq=v2m->spi_start+offset;
194188

195-
err=gicv2m_irq_gic_domain_alloc(domain,virq,hwirq);
196-
if (err) {
197-
gicv2m_unalloc_msi(v2m,hwirq);
198-
returnerr;
199-
}
189+
for (i=0;i<nr_irqs;i++) {
190+
err=gicv2m_irq_gic_domain_alloc(domain,virq+i,hwirq+i);
191+
if (err)
192+
gotofail;
200193

201-
irq_domain_set_hwirq_and_chip(domain,virq,hwirq,
202-
&gicv2m_irq_chip,v2m);
194+
irq_domain_set_hwirq_and_chip(domain,virq+i,hwirq+i,
195+
&gicv2m_irq_chip,v2m);
196+
}
203197

204198
return0;
199+
200+
fail:
201+
irq_domain_free_irqs_parent(domain,virq,nr_irqs);
202+
gicv2m_unalloc_msi(v2m,hwirq,get_count_order(nr_irqs));
203+
returnerr;
205204
}
206205

207206
staticvoidgicv2m_irq_domain_free(structirq_domain*domain,
@@ -210,8 +209,7 @@ static void gicv2m_irq_domain_free(struct irq_domain *domain,
210209
structirq_data*d=irq_domain_get_irq_data(domain,virq);
211210
structv2m_data*v2m=irq_data_get_irq_chip_data(d);
212211

213-
BUG_ON(nr_irqs!=1);
214-
gicv2m_unalloc_msi(v2m,d->hwirq);
212+
gicv2m_unalloc_msi(v2m,d->hwirq,nr_irqs);
215213
irq_domain_free_irqs_parent(domain,virq,nr_irqs);
216214
}
217215

‎drivers/irqchip/irq-gic-v3-its-pci-msi.c‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@ static int __init its_pci_of_msi_init(void)
132132

133133
for (np=of_find_matching_node(NULL,its_device_id);np;
134134
np=of_find_matching_node(np,its_device_id)) {
135+
if (!of_device_is_available(np))
136+
continue;
135137
if (!of_property_read_bool(np,"msi-controller"))
136138
continue;
137139

‎drivers/irqchip/irq-gic-v3-its-platform-msi.c‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,8 @@ static void __init its_pmsi_of_init(void)
154154

155155
for (np=of_find_matching_node(NULL,its_device_id);np;
156156
np=of_find_matching_node(np,its_device_id)) {
157+
if (!of_device_is_available(np))
158+
continue;
157159
if (!of_property_read_bool(np,"msi-controller"))
158160
continue;
159161

‎drivers/irqchip/irq-gic-v3-its.c‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3314,6 +3314,8 @@ static int __init its_of_probe(struct device_node *node)
33143314

33153315
for (np=of_find_matching_node(node,its_device_id);np;
33163316
np=of_find_matching_node(np,its_device_id)) {
3317+
if (!of_device_is_available(np))
3318+
continue;
33173319
if (!of_property_read_bool(np,"msi-controller")) {
33183320
pr_warn("%pOF: no msi-controller property, ITS ignored\n",
33193321
np);

‎drivers/irqchip/irq-gic-v3.c‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -673,7 +673,7 @@ static void gic_send_sgi(u64 cluster_id, u16 tlist, unsigned int irq)
673673
MPIDR_TO_SGI_RS(cluster_id)|
674674
tlist <<ICC_SGI1R_TARGET_LIST_SHIFT);
675675

676-
pr_debug("CPU%d: ICC_SGI1R_EL1 %llx\n",smp_processor_id(),val);
676+
pr_devel("CPU%d: ICC_SGI1R_EL1 %llx\n",smp_processor_id(),val);
677677
gic_write_sgi1r(val);
678678
}
679679

@@ -688,7 +688,7 @@ static void gic_raise_softirq(const struct cpumask *mask, unsigned int irq)
688688
* Ensure that stores to Normal memory are visible to the
689689
* other CPUs before issuing the IPI.
690690
*/
691-
smp_wmb();
691+
wmb();
692692

693693
for_each_cpu(cpu,mask) {
694694
u64cluster_id=MPIDR_TO_SGI_CLUSTER_ID(cpu_logical_map(cpu));

‎drivers/irqchip/irq-mips-gic.c‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,8 +424,6 @@ static int gic_shared_irq_domain_map(struct irq_domain *d, unsigned int virq,
424424
spin_lock_irqsave(&gic_lock,flags);
425425
write_gic_map_pin(intr,GIC_MAP_PIN_MAP_TO_PIN |gic_cpu_pin);
426426
write_gic_map_vp(intr,BIT(mips_cm_vp_id(cpu)));
427-
gic_clear_pcpu_masks(intr);
428-
set_bit(intr,per_cpu_ptr(pcpu_masks,cpu));
429427
irq_data_update_effective_affinity(data,cpumask_of(cpu));
430428
spin_unlock_irqrestore(&gic_lock,flags);
431429

‎drivers/staging/fsl-mc/bus/irq-gic-v3-its-fsl-mc-msi.c‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ static int __init its_fsl_mc_msi_init(void)
7373

7474
for (np=of_find_matching_node(NULL,its_device_id);np;
7575
np=of_find_matching_node(np,its_device_id)) {
76+
if (!of_device_is_available(np))
77+
continue;
7678
if (!of_property_read_bool(np,"msi-controller"))
7779
continue;
7880

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp