Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 123250
b: refs/heads/master
c: be5d535
h: refs/heads/master
v: v3
  • Loading branch information
Yinghai Lu authored and Ingo Molnar committed Dec 8, 2008
1 parent ef1f11a commit 06067eb
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 10 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: 99d093d12897562a253540a902bbf65ec16042ac
refs/heads/master: be5d5350a937cd8513b258739f1099420129e96f
2 changes: 1 addition & 1 deletion trunk/arch/x86/include/asm/io_apic.h
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ extern void restore_IO_APIC_setup(void);
extern void reinit_intr_remapped_IO_APIC(int);
#endif

extern int probe_nr_irqs(void);
extern void probe_nr_irqs_gsi(void);

#else /* !CONFIG_X86_IO_APIC */
#define io_apic_assign_pci_irqs 0
Expand Down
24 changes: 17 additions & 7 deletions trunk/arch/x86/kernel/io_apic.c
Original file line number Diff line number Diff line change
Expand Up @@ -2973,7 +2973,7 @@ unsigned int create_irq_nr(unsigned int irq_want)

irq = 0;
spin_lock_irqsave(&vector_lock, flags);
for (new = irq_want; new > 0; new--) {
for (new = irq_want; new < NR_IRQS; new++) {
if (platform_legacy_irq(new))
continue;

Expand Down Expand Up @@ -3001,11 +3001,14 @@ unsigned int create_irq_nr(unsigned int irq_want)
return irq;
}

static int nr_irqs_gsi = NR_IRQS_LEGACY;
int create_irq(void)
{
unsigned int irq_want;
int irq;

irq = create_irq_nr(nr_irqs - 1);
irq_want = nr_irqs_gsi;
irq = create_irq_nr(irq_want);

if (irq == 0)
irq = -1;
Expand Down Expand Up @@ -3281,7 +3284,7 @@ int arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc)
int ret;
unsigned int irq_want;

irq_want = nr_irqs - 1;
irq_want = nr_irqs_gsi;
irq = create_irq_nr(irq_want);
if (irq == 0)
return -1;
Expand Down Expand Up @@ -3321,11 +3324,11 @@ int arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
int index = 0;
#endif

irq_want = nr_irqs - 1;
irq_want = nr_irqs_gsi;
sub_handle = 0;
list_for_each_entry(msidesc, &dev->msi_list, list) {
irq = create_irq_nr(irq_want);
irq_want--;
irq_want++;
if (irq == 0)
return -1;
#ifdef CONFIG_INTR_REMAP
Expand Down Expand Up @@ -3674,9 +3677,16 @@ int __init io_apic_get_redir_entries (int ioapic)
return reg_01.bits.entries;
}

int __init probe_nr_irqs(void)
void __init probe_nr_irqs_gsi(void)
{
return NR_IRQS;
int idx;
int nr = 0;

for (idx = 0; idx < nr_ioapics; idx++)
nr += io_apic_get_redir_entries(idx) + 1;

if (nr > nr_irqs_gsi)
nr_irqs_gsi = nr;
}

/* --------------------------------------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/x86/kernel/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -1082,7 +1082,7 @@ void __init setup_arch(char **cmdline_p)
ioapic_init_mappings();

/* need to wait for io_apic is mapped */
nr_irqs = probe_nr_irqs();
probe_nr_irqs_gsi();

kvm_guest_init();

Expand Down

0 comments on commit 06067eb

Please sign in to comment.